{"version":3,"file":"tin-spa.mjs","sources":["../../../projects/tin-spa/src/lib/services/tin-spa.service.ts","../../../projects/tin-spa/src/lib/classes/TinCore.ts","../../../projects/tin-spa/src/lib/classes/LibClasses.ts","../../../projects/tin-spa/src/lib/classes/Classes.ts","../../../projects/tin-spa/src/lib/services/storage.service.ts","../../../projects/tin-spa/src/lib/components/message/messageDialog.component.ts","../../../projects/tin-spa/src/lib/components/message/messageDialog.component.html","../../../projects/tin-spa/src/lib/services/message.service.ts","../../../projects/tin-spa/src/lib/services/export.service.ts","../../../projects/tin-spa/src/lib/services/http.service.ts","../../../projects/tin-spa/src/lib/services/log.service.ts","../../../projects/tin-spa/src/lib/services/signalr.service.ts","../../../projects/tin-spa/src/lib/services/auth.service.ts","../../../projects/tin-spa/src/lib/services/datalib.service.ts","../../../projects/tin-spa/src/lib/services/loader.service.ts","../../../projects/tin-spa/src/lib/services/dialog-component.token.ts","../../../projects/tin-spa/src/lib/services/dialog.service.ts","../../../projects/tin-spa/src/lib/services/accounting.service.ts","../../../projects/tin-spa/src/lib/services/assets.service.ts","../../../projects/tin-spa/src/lib/services/loans.service.ts","../../../projects/tin-spa/src/lib/services/general.service.ts","../../../projects/tin-spa/src/lib/services/inventory.service.ts","../../../projects/tin-spa/src/lib/services/button.service.ts","../../../projects/tin-spa/src/lib/services/table-config.service.ts","../../../projects/tin-spa/src/lib/services/tab.service.ts","../../../projects/tin-spa/src/lib/services/subscription.service.ts","../../../projects/tin-spa/src/lib/services/update.service.ts","../../../projects/tin-spa/src/lib/services/push-notification.service.ts","../../../projects/tin-spa/src/lib/services/notifications.service.ts","../../../projects/tin-spa/src/lib/services/agent.service.ts","../../../projects/tin-spa/src/lib/services/analytics.service.ts","../../../projects/tin-spa/src/lib/guards/auth.guard.ts","../../../projects/tin-spa/src/lib/guards/feature.guard.ts","../../../projects/tin-spa/src/lib/directives/feature.directive.ts","../../../projects/tin-spa/src/lib/components/tin-spa.component.ts","../../../projects/tin-spa/src/lib/modules/spa-mat.module.ts","../../../projects/tin-spa/src/lib/components/suffix/suffix.component.ts","../../../projects/tin-spa/src/lib/components/suffix/suffix.component.html","../../../projects/tin-spa/src/lib/components/text/text.component.ts","../../../projects/tin-spa/src/lib/components/text/text.component.html","../../../projects/tin-spa/src/lib/components/text-mask/text-mask.component.ts","../../../projects/tin-spa/src/lib/components/text-mask/text-mask.component.html","../../../projects/tin-spa/src/lib/components/text-area/text-area.component.ts","../../../projects/tin-spa/src/lib/components/text-area/text-area.component.html","../../../projects/tin-spa/src/lib/components/text-single/text-single.component.ts","../../../projects/tin-spa/src/lib/components/text-single/text-single.component.html","../../../projects/tin-spa/src/lib/components/check/check.component.ts","../../../projects/tin-spa/src/lib/components/check/check.component.html","../../../projects/tin-spa/src/lib/components/date/date.component.ts","../../../projects/tin-spa/src/lib/components/date/date.component.html","../../../projects/tin-spa/src/lib/components/datetime/datetime.component.ts","../../../projects/tin-spa/src/lib/components/datetime/datetime.component.html","../../../projects/tin-spa/src/lib/components/label/label.component.ts","../../../projects/tin-spa/src/lib/components/label/label.component.html","../../../projects/tin-spa/src/lib/components/select-common/select-common.component.ts","../../../projects/tin-spa/src/lib/components/select-common/select-common.component.html","../../../projects/tin-spa/src/lib/components/select/select.component.ts","../../../projects/tin-spa/src/lib/components/select/select.component.html","../../../projects/tin-spa/src/lib/components/activity/activity.component.ts","../../../projects/tin-spa/src/lib/components/activity/activity.component.html","../../../projects/tin-spa/src/lib/components/filter/filter.component.ts","../../../projects/tin-spa/src/lib/components/filter/filter.component.html","../../../projects/tin-spa/src/lib/components/money/currency-input-mask.directive.ts","../../../projects/tin-spa/src/lib/components/money/money.component.ts","../../../projects/tin-spa/src/lib/components/money/money.component.html","../../../projects/tin-spa/src/lib/components/select-lite/select-lite.component.ts","../../../projects/tin-spa/src/lib/components/select-lite/select-lite.component.html","../../../projects/tin-spa/src/lib/components/text-multi/text-multi.component.ts","../../../projects/tin-spa/src/lib/components/text-multi/text-multi.component.html","../../../projects/tin-spa/src/lib/components/select-multi/select-multi.component.ts","../../../projects/tin-spa/src/lib/components/select-multi/select-multi.component.html","../../../projects/tin-spa/src/lib/components/option/option.component.ts","../../../projects/tin-spa/src/lib/components/option/option.component.html","../../../projects/tin-spa/src/lib/pipes/camelToWords.pipe.ts","../../../projects/tin-spa/src/lib/components/tiles/tiles.component.ts","../../../projects/tin-spa/src/lib/components/tiles/tiles.component.html","../../../projects/tin-spa/src/lib/components/steps/steps.component.ts","../../../projects/tin-spa/src/lib/components/steps/steps.component.html","../../../projects/tin-spa/src/lib/components/attach/attach.component.ts","../../../projects/tin-spa/src/lib/components/attach/attach.component.html","../../../projects/tin-spa/src/lib/components/chips/chips.component.ts","../../../projects/tin-spa/src/lib/components/chips/chips.component.html","../../../projects/tin-spa/src/lib/components/loader/loader.component.ts","../../../projects/tin-spa/src/lib/components/loader/loader.component.html","../../../projects/tin-spa/src/lib/components/terms-dialog/terms-dialog.component.ts","../../../projects/tin-spa/src/lib/components/terms-dialog/terms-dialog.component.html","../../../projects/tin-spa/src/lib/components/privacy-dialog/privacy-dialog.component.ts","../../../projects/tin-spa/src/lib/components/privacy-dialog/privacy-dialog.component.html","../../../projects/tin-spa/src/lib/components/toast/toast.component.ts","../../../projects/tin-spa/src/lib/components/toast/toast.component.html","../../../projects/tin-spa/src/lib/components/agent/agent.component.ts","../../../projects/tin-spa/src/lib/components/agent/agent.component.html","../../../projects/tin-spa/src/lib/components/nav-menu/nav-menu.component.ts","../../../projects/tin-spa/src/lib/components/nav-menu/nav-menu.component.html","../../../projects/tin-spa/src/lib/services/loader-interceptor.service.ts","../../../projects/tin-spa/src/lib/components/money/currency-input-mask.module.ts","../../../projects/tin-spa/src/lib/services/condition.service.ts","../../../projects/tin-spa/src/lib/components/search/search.component.ts","../../../projects/tin-spa/src/lib/components/search/search.component.html","../../../projects/tin-spa/src/lib/services/csv.service.ts","../../../projects/tin-spa/src/lib/components/table-header/table-header.component.ts","../../../projects/tin-spa/src/lib/components/table-header/table-header.component.html","../../../projects/tin-spa/src/lib/components/table-row/table-row.component.ts","../../../projects/tin-spa/src/lib/components/table-row/table-row.component.html","../../../projects/tin-spa/src/lib/components/table-action/table-action.component.ts","../../../projects/tin-spa/src/lib/components/table-action/table-action.component.html","../../../projects/tin-spa/src/lib/components/capsules/capsules.component.ts","../../../projects/tin-spa/src/lib/components/capsules/capsules.component.html","../../../projects/tin-spa/src/lib/components/cards/cards.component.ts","../../../projects/tin-spa/src/lib/components/cards/cards.component.html","../../../projects/tin-spa/src/lib/components/groups/groups.component.ts","../../../projects/tin-spa/src/lib/components/groups/groups.component.html","../../../projects/tin-spa/src/lib/components/table/table.component.ts","../../../projects/tin-spa/src/lib/components/table/table.component.html","../../../projects/tin-spa/src/lib/components/number/number.component.ts","../../../projects/tin-spa/src/lib/components/number/number.component.html","../../../projects/tin-spa/src/lib/components/viewer/viewerDialog.component.ts","../../../projects/tin-spa/src/lib/components/viewer/viewerDialog.component.html","../../../projects/tin-spa/src/lib/components/viewer/viewer.component.ts","../../../projects/tin-spa/src/lib/components/viewer/viewer.component.html","../../../projects/tin-spa/src/lib/components/email/email.component.ts","../../../projects/tin-spa/src/lib/components/email/email.component.html","../../../projects/tin-spa/src/lib/components/html/html.component.ts","../../../projects/tin-spa/src/lib/components/html/html.component.html","../../../projects/tin-spa/src/lib/components/notes/notes.component.ts","../../../projects/tin-spa/src/lib/components/notes/notes.component.html","../../../projects/tin-spa/src/lib/components/form/form.component.ts","../../../projects/tin-spa/src/lib/components/form/form.component.html","../../../projects/tin-spa/src/lib/components/alert/alert.component.ts","../../../projects/tin-spa/src/lib/components/alert/alert.component.html","../../../projects/tin-spa/src/lib/components/tabs/tabs.component.ts","../../../projects/tin-spa/src/lib/components/tabs/tabs.component.html","../../../projects/tin-spa/src/lib/components/statuses/statuses.component.ts","../../../projects/tin-spa/src/lib/components/statuses/statuses.component.html","../../../projects/tin-spa/src/lib/components/table/detailsDialog.component.ts","../../../projects/tin-spa/src/lib/components/table/detailsDialog.component.html","../../../projects/tin-spa/src/lib/components/list-dialog/list-dialog.component.ts","../../../projects/tin-spa/src/lib/components/list-dialog/list-dialog.component.html","../../../projects/tin-spa/src/lib/pages/invitations-table/invitations-table.component.ts","../../../projects/tin-spa/src/lib/pages/invitations-table/invitations-table.component.html","../../../projects/tin-spa/src/lib/components/title-actions/title-actions.component.ts","../../../projects/tin-spa/src/lib/components/title-actions/title-actions.component.html","../../../projects/tin-spa/src/lib/components/page/page.component.ts","../../../projects/tin-spa/src/lib/components/page/page.component.html","../../../projects/tin-spa/src/lib/select-context.directive.ts","../../../projects/tin-spa/src/lib/components/select-bitwise/select-bitwise.component.ts","../../../projects/tin-spa/src/lib/components/select-bitwise/select-bitwise.component.html","../../../projects/tin-spa/src/lib/pages/welcome/welcome.component.ts","../../../projects/tin-spa/src/lib/pages/welcome/welcome.component.html","../../../projects/tin-spa/src/lib/components/charts/charts.component.ts","../../../projects/tin-spa/src/lib/components/charts/charts.component.html","../../../projects/tin-spa/src/lib/pages/landing/landing.component.ts","../../../projects/tin-spa/src/lib/pages/landing/landing.component.html","../../../projects/tin-spa/src/lib/tin-spa.module.ts","../../../projects/tin-spa/src/lib/pages/login/login.component.ts","../../../projects/tin-spa/src/lib/pages/login/login.component.html","../../../projects/tin-spa/src/lib/pages/signup/signup.component.ts","../../../projects/tin-spa/src/lib/pages/signup/signup.component.html","../../../projects/tin-spa/src/lib/pages/recover-account/recover-account.component.ts","../../../projects/tin-spa/src/lib/pages/recover-account/recover-account.component.html","../../../projects/tin-spa/src/lib/modules/spa-index.module.ts","../../../projects/tin-spa/src/lib/pages/change-password/change-password.component.ts","../../../projects/tin-spa/src/lib/pages/change-password/change-password.component.html","../../../projects/tin-spa/src/lib/pages/profile/profile.component.ts","../../../projects/tin-spa/src/lib/pages/profile/profile.component.html","../../../projects/tin-spa/src/lib/modules/spa-user.module.ts","../../../projects/tin-spa/src/lib/pages/settings/settings.component.ts","../../../projects/tin-spa/src/lib/pages/settings/settings.component.html","../../../projects/tin-spa/src/lib/pages/logs/logs.component.ts","../../../projects/tin-spa/src/lib/pages/logs/logs.component.html","../../../projects/tin-spa/src/lib/pages/users/users.component.ts","../../../projects/tin-spa/src/lib/pages/users/users.component.html","../../../projects/tin-spa/src/lib/pages/roles/roles.component.ts","../../../projects/tin-spa/src/lib/pages/roles/roles.component.html","../../../projects/tin-spa/src/lib/pages/create-account/create-account.component.ts","../../../projects/tin-spa/src/lib/pages/create-account/create-account.component.html","../../../projects/tin-spa/src/lib/pages/categories/categories.component.ts","../../../projects/tin-spa/src/lib/pages/subcategories/subcategories.component.ts","../../../projects/tin-spa/src/lib/pages/brands/brands.component.ts","../../../projects/tin-spa/src/lib/modules/spa-admin.module.ts","../../../projects/tin-spa/src/lib/modules/index/index-routing.module.ts","../../../projects/tin-spa/src/lib/modules/index/index.module.ts","../../../projects/tin-spa/src/lib/pages/gpt-caches/gpt-caches.component.ts","../../../projects/tin-spa/src/lib/pages/preferences/preferences.component.ts","../../../projects/tin-spa/src/lib/pages/preferences/preferences.component.html","../../../projects/tin-spa/src/lib/modules/admin/admin.module.ts","../../../projects/tin-spa/src/lib/modules/user/user.module.ts","../../../projects/tin-spa/src/lib/modules/user/user-routing.module.ts","../../../projects/tin-spa/src/lib/modules/admin/admin-routing.module.ts","../../../projects/tin-spa/src/lib/pages/accounting/accounts/accounts.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/aggregates/aggregates.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/aging/aging.component.ts","../../../projects/tin-spa/src/lib/services/purchasing.service.ts","../../../projects/tin-spa/src/lib/pages/accounting/supplier-aging/supplier-aging.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/transaction-types/transaction-types.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/transactions/transactions.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/invoices/invoices.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/outstanding-invoices/outstanding-invoices.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/reports/reports.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/tax-rates/tax-rates.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/standing-orders/standing-orders.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/currencies/currencies.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/budgets/budgets.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/budget-vs-actual/budget-vs-actual.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/accounting-dashboard/accounting-dashboard.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/invoice-dashboard/invoice-dashboard.component.ts","../../../projects/tin-spa/src/lib/modules/accounting/accounting-routing.module.ts","../../../projects/tin-spa/src/lib/pages/inventory/products/products.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/inventory-items/inventory-items.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/requisitions/requisitions.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/inventory-adjustments/inventory-adjustments.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/inventory-returns/inventory-returns.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/inventory-transactions/inventory-transactions.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/inventory-dashboard/inventory-dashboard.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/inventory-stock/inventory-stock.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/bundle-products/bundle-products.component.ts","../../../projects/tin-spa/src/lib/pages/inventory/service-items/service-items.component.ts","../../../projects/tin-spa/src/lib/modules/inventory/inventory-routing.module.ts","../../../projects/tin-spa/src/lib/services/sales.service.ts","../../../projects/tin-spa/src/lib/pages/sales/sales-orders/sales-orders.component.ts","../../../projects/tin-spa/src/lib/pages/sales/sales/sales.component.ts","../../../projects/tin-spa/src/lib/pages/sales/sales-dashboard/sales-dashboard.component.ts","../../../projects/tin-spa/src/lib/modules/sales/sales-routing.module.ts","../../../projects/tin-spa/src/lib/pages/purchasing/purchase-orders/purchase-orders.component.ts","../../../projects/tin-spa/src/lib/pages/purchasing/inventory-receipts/inventory-receipts.component.ts","../../../projects/tin-spa/src/lib/pages/purchasing/purchasing-dashboard/purchasing-dashboard.component.ts","../../../projects/tin-spa/src/lib/modules/purchasing/purchasing-routing.module.ts","../../../projects/tin-spa/src/lib/pages/employees/employees.component.ts","../../../projects/tin-spa/src/lib/pages/departments/departments.component.ts","../../../projects/tin-spa/src/lib/pages/positions/positions.component.ts","../../../projects/tin-spa/src/lib/pages/grades/grades.component.ts","../../../projects/tin-spa/src/lib/pages/grades/grades.component.html","../../../projects/tin-spa/src/lib/pages/onboarding/onboarding.component.ts","../../../projects/tin-spa/src/lib/pages/onboarding/onboarding.component.html","../../../projects/tin-spa/src/lib/modules/hr/hr-routing.module.ts","../../../projects/tin-spa/src/lib/services/payroll.service.ts","../../../projects/tin-spa/src/lib/pages/payroll/salary-structures/salary-structures.component.ts","../../../projects/tin-spa/src/lib/pages/payroll/statutory-deductions/statutory-deductions.component.ts","../../../projects/tin-spa/src/lib/pages/payroll/payroll-runs/payroll-runs.component.ts","../../../projects/tin-spa/src/lib/pages/payroll/commission-configs/commission-configs.component.ts","../../../projects/tin-spa/src/lib/pages/payroll/commission-entries/commission-entries.component.ts","../../../projects/tin-spa/src/lib/pages/payroll/salary-advances/salary-advances.component.ts","../../../projects/tin-spa/src/lib/pages/payroll/overtime-entries/overtime-entries.component.ts","../../../projects/tin-spa/src/lib/pages/payroll/payroll-dashboard/payroll-dashboard.component.ts","../../../projects/tin-spa/src/lib/modules/payroll/payroll-routing.module.ts","../../../projects/tin-spa/src/lib/services/production.service.ts","../../../projects/tin-spa/src/lib/pages/manufacturing/production-recipes/production-recipes.component.ts","../../../projects/tin-spa/src/lib/pages/manufacturing/production-orders/production-orders.component.ts","../../../projects/tin-spa/src/lib/modules/manufacturing/manufacturing-routing.module.ts","../../../projects/tin-spa/src/lib/pages/loans/loan-products/loan-products.component.ts","../../../projects/tin-spa/src/lib/pages/loans/loans/loans.component.ts","../../../projects/tin-spa/src/lib/pages/loans/loan-payments/loan-payments.component.ts","../../../projects/tin-spa/src/lib/modules/loans/loans-routing.module.ts","../../../projects/tin-spa/src/lib/pages/customers/customers.component.ts","../../../projects/tin-spa/src/lib/pages/suppliers/suppliers.component.ts","../../../projects/tin-spa/src/lib/pages/tasks/tasks.component.ts","../../../projects/tin-spa/src/lib/pages/tasks/tasks.component.html","../../../projects/tin-spa/src/lib/modules/general/general-routing.module.ts","../../../projects/tin-spa/src/lib/pages/tenant-settings/tenant-settings.component.ts","../../../projects/tin-spa/src/lib/pages/tenant-settings/tenant-settings.component.html","../../../projects/tin-spa/src/lib/pages/tenants/tenants.component.ts","../../../projects/tin-spa/src/lib/pages/bug/bug.component.ts","../../../projects/tin-spa/src/lib/pages/bug/bug.component.html","../../../projects/tin-spa/src/lib/pages/membership/membership.component.ts","../../../projects/tin-spa/src/lib/pages/plans/plans.component.ts","../../../projects/tin-spa/src/lib/pages/features/features.component.ts","../../../projects/tin-spa/src/lib/pages/plan-features/plan-features.component.ts","../../../projects/tin-spa/src/lib/pages/subscription/subscription.component.ts","../../../projects/tin-spa/src/lib/pages/billing/billing.component.ts","../../../projects/tin-spa/src/lib/modules/tenancy/tenancy-routing.module.ts","../../../projects/tin-spa/src/lib/pages/approvals/approvals.component.ts","../../../projects/tin-spa/src/lib/pages/approvals/approvals.component.html","../../../projects/tin-spa/src/lib/pages/approvals-config/approvals-config.component.ts","../../../projects/tin-spa/src/lib/pages/approvals-config/approvals-config.component.html","../../../projects/tin-spa/src/lib/pages/notifications/notifications.component.ts","../../../projects/tin-spa/src/lib/pages/notifications/notifications.component.html","../../../projects/tin-spa/src/lib/pages/app-models/app-models.component.ts","../../../projects/tin-spa/src/lib/pages/notifications-config/notifications-config.component.ts","../../../projects/tin-spa/src/lib/pages/notifications-config/notifications-config.component.html","../../../projects/tin-spa/src/lib/modules/workflow/workflow-routing.module.ts","../../../projects/tin-spa/src/lib/pages/overview/overview-dashboard/overview-dashboard.component.ts","../../../projects/tin-spa/src/lib/modules/overview/overview-routing.module.ts","../../../projects/tin-spa/src/lib/pages/assets/fixed-assets-dashboard/fixed-assets-dashboard.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/fixed-assets/fixed-assets.component.ts","../../../projects/tin-spa/src/lib/pages/accounting/fixed-asset-categories/fixed-asset-categories.component.ts","../../../projects/tin-spa/src/lib/modules/assets/assets-routing.module.ts","../../../projects/tin-spa/src/lib/modules/spa-home-routing.module.ts","../../../projects/tin-spa/src/lib/modules/accounting/accounting.module.ts","../../../projects/tin-spa/src/lib/modules/inventory/inventory.module.ts","../../../projects/tin-spa/src/lib/modules/sales/sales.module.ts","../../../projects/tin-spa/src/lib/modules/purchasing/purchasing.module.ts","../../../projects/tin-spa/src/lib/modules/hr/hr.module.ts","../../../projects/tin-spa/src/lib/modules/payroll/payroll.module.ts","../../../projects/tin-spa/src/lib/modules/manufacturing/manufacturing.module.ts","../../../projects/tin-spa/src/lib/modules/loans/loans.module.ts","../../../projects/tin-spa/src/lib/modules/general/general.module.ts","../../../projects/tin-spa/src/lib/modules/tenancy/tenancy.module.ts","../../../projects/tin-spa/src/lib/modules/workflow/workflow.module.ts","../../../projects/tin-spa/src/lib/modules/overview/overview.module.ts","../../../projects/tin-spa/src/lib/modules/assets/assets.module.ts","../../../projects/tin-spa/src/lib/modules/spa-home.module.ts","../../../projects/tin-spa/src/lib/pages/landing/landing.config.ts","../../../projects/tin-spa/src/public-api.ts","../../../projects/tin-spa/src/tin-spa.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TinSpaService {\r\n\r\n  constructor() { }\r\n}\r\n","import { Action, DetailsDialogConfig, DetailsSource, Field, FormConfig, RoleAccess, SecurityConfig } from \"./Classes\";\r\n\r\nexport class Core {\r\n\r\n\r\n  public static deepClone(obj) {\r\n    if (obj === null || typeof obj !== 'object') {\r\n      return obj;\r\n    }\r\n\r\n    if (Array.isArray(obj)) {\r\n      const arrCopy = [];\r\n      obj.forEach((item, index) => {\r\n        arrCopy[index] = this.deepClone(item);\r\n      });\r\n      return arrCopy;\r\n    }\r\n\r\n    const objCopy = {};\r\n    Object.keys(obj).forEach(key => {\r\n      objCopy[key] = this.deepClone(obj[key]);\r\n    });\r\n    return objCopy;\r\n  }\r\n\r\n  public static deepClone2(obj: any): any {\r\n    // Create new WeakMap for each clone operation\r\n    const cloneVisited = new WeakMap();\r\n\r\n    // Inner function that has access to the cloneVisited map\r\n    const clone = (value: any): any => {\r\n      // Handle null, undefined and primitives\r\n      if (value === null || typeof value !== 'object') {\r\n        return value;\r\n      }\r\n\r\n      // Check if object was already cloned\r\n      if (cloneVisited.has(value)) {\r\n        return cloneVisited.get(value);\r\n      }\r\n\r\n      // Handle arrays\r\n      if (Array.isArray(value)) {\r\n        const arrCopy = [];\r\n        cloneVisited.set(value, arrCopy);\r\n        value.forEach((item, index) => {\r\n          arrCopy[index] = clone(item);\r\n        });\r\n        return arrCopy;\r\n      }\r\n\r\n      // Handle dates\r\n      if (value instanceof Date) {\r\n        return new Date(value);\r\n      }\r\n\r\n      // Handle regular objects\r\n      const objCopy = Object.create(Object.getPrototypeOf(value));\r\n      cloneVisited.set(value, objCopy);\r\n\r\n      Object.entries(value).forEach(([key, val]) => {\r\n        if (Object.prototype.hasOwnProperty.call(value, key)) {\r\n          objCopy[key] = clone(val);\r\n        }\r\n      });\r\n\r\n      return objCopy;\r\n    };\r\n\r\n    // Start the clone operation with a fresh WeakMap\r\n    return clone(obj);\r\n  }\r\n\r\n\r\n\r\n  public static camelToWords(value: string): string {\r\n    if (!value) return value;\r\n\r\n    if (typeof value !== 'string') return value;\r\n\r\n    if (value.length == 0) return value;\r\n\r\n    let v = value.charAt(0).toUpperCase() + value.substring(1)\r\n    return v.replace(/([A-Z]+)*([A-Z][a-z])/g, \"$1 $2\");\r\n  }\r\n\r\n  public static generateObject(fields: Field[]) {\r\n\r\n    let data = {};\r\n    fields.forEach(field => {\r\n\r\n      if (field.type != 'section' && field.type != 'blank' && field.hideOnCreate != true) {\r\n        data[field.name] = this.getInitialValue(field);\r\n      }\r\n\r\n    });\r\n\r\n    // console.log(data)\r\n\r\n    return data;\r\n  }\r\n\r\n  public static resetObject(fields: Field[], data) {\r\n\r\n    fields.forEach(field => {\r\n      if (field.type != 'section' && field.type != 'blank') {\r\n        data[field.name] = this.getInitialValue(field);\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n  public static checkSecurity(security: SecurityConfig, currentRole: any): boolean {\r\n    if (!security) {\r\n      return true;\r\n    }\r\n\r\n    if (security.deny?.some(role => currentRole[role.name])) {\r\n      return false;\r\n    }\r\n\r\n    if (!security.allow || security.allow.length === 0) {\r\n      return true;\r\n    }\r\n\r\n    return security.allow.some(role => currentRole[role.name]);\r\n  }\r\n\r\n  public static hasFormAccess(formConfig: FormConfig, currentRole: any): boolean {\r\n    return this.getFormAccess(formConfig, currentRole) > RoleAccess.None;\r\n  }\r\n\r\n  public static getFormAccess(formConfig: FormConfig, currentRole: any): RoleAccess {\r\n    if (!formConfig?.security?.allow) {\r\n      return RoleAccess.Full; // Full access if no restrictions\r\n    }\r\n\r\n    // Check deny first\r\n    if (formConfig.security.deny?.some(role => this.getRoleAccess(currentRole, role.name) > RoleAccess.None)) {\r\n      return RoleAccess.None;\r\n    }\r\n\r\n    // Get highest level of access from allowed capabilities\r\n    let maxAccess = RoleAccess.None;\r\n    formConfig.security.allow.forEach(role => {\r\n      const access = this.getRoleAccess(currentRole, role.name);\r\n      if (access > maxAccess) {\r\n        maxAccess = access;\r\n      }\r\n    });\r\n\r\n    return maxAccess;\r\n  }\r\n\r\n  private static getRoleAccess(role: any, capName: string): RoleAccess {\r\n    if (!role || !capName) return RoleAccess.None;\r\n    return role[capName] ?? RoleAccess.None;\r\n  }\r\n\r\n  public static testVisible(config: FormConfig, data, field: Field, currentRole: any): boolean {\r\n\r\n    if ((field.type == 'section' || field.type == 'blank') && field.hidden) return false;\r\n\r\n    // First check form level security if exists\r\n    if (config.security && !this.hasFormAccess(config, currentRole)) {\r\n      return false;\r\n    }\r\n\r\n    if (field.section) {\r\n      const sectionField = config.fields.find(f => f.type === 'section' && f.name === field.section);\r\n      if (sectionField) {\r\n        // Inherit section's conditions\r\n        if (!this.checkSecurity(sectionField.securityConfig, currentRole)) {\r\n          return false;\r\n        }\r\n        // if (sectionField.hidden) return false;\r\n        if (sectionField.hideOnCreate && config.mode == 'create') return false;\r\n        if (sectionField.hideOnExists && config.mode != 'create') return false;\r\n        if (sectionField.hiddenCondition && sectionField.hiddenCondition(data)) return false;\r\n      }\r\n    }\r\n\r\n    // Then check field level security if exists\r\n    if (!this.checkSecurity(field.securityConfig, currentRole)) {\r\n      return false;\r\n    }\r\n\r\n    if (field.hidden) return false;\r\n\r\n    if (config.mode == 'create' && field.hideOnCreate) {\r\n      return false;\r\n    }\r\n\r\n\r\n    if (config.mode != 'create' && field.hideOnExists) {\r\n      return false;\r\n    }\r\n\r\n\r\n\r\n    if (field.hiddenCondition) {\r\n      return !field.hiddenCondition(data);\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static testReadOnly(config: FormConfig, data, field: Field): boolean {\r\n    // Default readonly conditions\r\n    if (config.mode == 'create') {\r\n      return false;\r\n    }\r\n\r\n    if (field.readonly) {\r\n      return true;\r\n    }\r\n\r\n    if (config.mode == 'view') {\r\n      return true;\r\n    }\r\n\r\n    // Check section readonly condition first\r\n    if (field.section) {\r\n      const sectionField = config.fields.find(f => f.type === 'section' && f.name === field.section);\r\n      if (sectionField?.readonlyCondition && sectionField.readonlyCondition(data)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    // Check field level readonly condition last\r\n    if (field.readonlyCondition) {\r\n      return field.readonlyCondition(data);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static testVisibleHeaderButton(data, btn): boolean {\r\n\r\n    if (btn.hiddenCondition) {\r\n      return !btn.hiddenCondition(data);\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static getVisibleSubfields(config: FormConfig, data, field: Field, currentRole: any ): Field[] {\r\n    return field.subfields?.filter(subfield => Core.testVisible(config, data, subfield,currentRole )) || [];\r\n  }\r\n\r\n  public static validateObject(fields: Field[], data): string {\r\n\r\n    console.log(\"Validations\")\r\n\r\n    for (let field of fields) {\r\n\r\n      if (field.type == 'file' || field.type == 'file-view' || field.type == 'blank' || field.type == 'section' ) continue\r\n\r\n\r\n\r\n      let name = field.alias ?? this.camelToWords(field.name);\r\n      let d = data[field.name];\r\n\r\n      let isRequired = field.required;\r\n\r\n      if (!isRequired && field.requiredCondition) {\r\n        isRequired = field.requiredCondition(data);\r\n      }\r\n\r\n\r\n      console.log(name + ' ' + d)\r\n\r\n      if (isRequired){\r\n\r\n        if (d == undefined || d == null) return `${name} is required`;\r\n\r\n        if (field.type == 'text'){\r\n\r\n          if (d == '') return `Please enter ${name}`;\r\n\r\n          if (field.min && d.length < field.min) return `Minimum  ${name} length is ${field.min}`\r\n\r\n          if (field.max && d.length > field.max) return `Maximum ${name} length is ${field.max}`\r\n\r\n        }\r\n        else if (field.type == 'number' || field.type == 'money' || field.type == 'date'){\r\n\r\n          if (field.min && d < field.min) return `Minimum  ${name} is ${field.min}`\r\n\r\n          if (field.max && d > field.max) return `Maximum ${name} is ${field.max}`\r\n\r\n        }\r\n        else if (field.type == 'select') {\r\n\r\n          if (typeof(d) == 'string' && d == '') return `Please select ${name}`;\r\n        }\r\n\r\n      }\r\n\r\n\r\n\r\n      if (field.type == 'text' && field.regex && d && d.toString().trim() !== '') {\r\n        const regexPattern = new RegExp(field.regex.pattern);\r\n        if (!regexPattern.test(d)) {\r\n          return field.regex.message;\r\n        }\r\n      }\r\n\r\n    };\r\n\r\n    return '';\r\n  }\r\n\r\n  public static testRequired(config: FormConfig, data, field: Field): boolean {\r\n    if (field.required) {\r\n      return true;\r\n    }\r\n    \r\n    if (field.requiredCondition) {\r\n      return field.requiredCondition(data);\r\n    }\r\n    \r\n    return false;\r\n  }\r\n\r\n  public static getInitialValue(field: Field) {\r\n\r\n    if (field.defaultValue){\r\n\r\n      if ((field.type == 'date' || field.type == 'datetime') && field.defaultValue == 'now') return this.nowDate(true);\r\n\r\n      return field.defaultValue;\r\n    }\r\n\r\n    if (field.type == 'select' && (field.hidden || field.hideOnCreate)) return 0;\r\n\r\n    switch (field.type) {\r\n      case 'text':\r\n        return '';\r\n      case 'text-area': // Changed: Added text-area to return empty string\r\n        return '';\r\n      case 'text-single': // Changed: Added text-single to return empty string\r\n        return null;\r\n      case 'text-multi': // Changed: Added text-multi to return empty string\r\n        return '';\r\n      case 'text-mask': // Changed: Added text-mask to return empty string\r\n        return '';\r\n      case 'money':\r\n        return 0;\r\n      case 'number':\r\n        return 0;\r\n      case 'date':\r\n        return this.nowDate(true);\r\n      case 'checkbox':\r\n        return false;\r\n      case 'select':\r\n        return null;\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n\r\n\r\n\r\n  public static getClone(x) {\r\n    return this.deepClone2(x);\r\n  }\r\n\r\n  public static getNumber(value: string) {\r\n\r\n    if (value == null || value == \"\") {\r\n      return 0;\r\n    }\r\n\r\n    const onlyNumbers = value.replace(/[^\\d.-]/g, '');\r\n    return onlyNumbers\r\n  }\r\n\r\n  public static getFirstDayOfMonth() {\r\n    const date = new Date();\r\n    return new Date(date.getFullYear(), date.getMonth(), 1);\r\n  }\r\n\r\n  public static emailIsValid(email) {\r\n    // return /\\S+@\\S+\\.\\S+/.test(email)\r\n    return false;\r\n  }\r\n\r\n  public static isValidUNCPath(path: string) {\r\n    // return /\\\\\\\\([a-zA-Z0-9_.$●-]+)\\\\([a-zA-Z0-9_.$●-]+).*/.test(path)\r\n    return false;\r\n  }\r\n\r\n  public static isValidDate(date) {\r\n\r\n    var parsedDate = Date.parse(date);\r\n\r\n\r\n    if (isNaN(date) && !isNaN(parsedDate)) {\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n\r\n  }\r\n\r\n  public static isValidEmailList(list: string) {\r\n\r\n    if (list.includes(\";\")) {\r\n\r\n      let emails = list.split(\";\")\r\n\r\n      for (var email of emails) {\r\n        if (this.emailIsValid(email) == false) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n\r\n    } else {\r\n\r\n      if (this.emailIsValid(list) == false) {\r\n        return false;\r\n      }\r\n\r\n    }\r\n\r\n    return true;\r\n\r\n  }\r\n\r\n  public static nullDate = \"01 Jan 1969\"\r\n\r\n  public static isNumber(value: string | number): boolean {\r\n    return ((value != null) &&\r\n      (value !== '') &&\r\n      !isNaN(Number(value.toString())));\r\n  }\r\n\r\n  public static getDiff(startDate, endDate = Date()) {\r\n\r\n    var eventStartTime = new Date(startDate);\r\n    var eventEndTime = new Date(endDate);\r\n    var milliseconds = eventEndTime.valueOf() - eventStartTime.valueOf();\r\n\r\n    function numberEnding(number: number) {\r\n\r\n      if (number.toFixed() == '1') {\r\n        return ''\r\n      } else {\r\n        return 's';\r\n      }\r\n\r\n    }\r\n\r\n    var minutes = (milliseconds / (1000 * 60));\r\n\r\n    var hours: number = (milliseconds / (1000 * 60 * 60));\r\n\r\n    var days = (milliseconds / (1000 * 60 * 60 * 24));\r\n\r\n    var weeks: number = (milliseconds / (1000 * 60 * 60 * 24 * 7));\r\n\r\n    var months = (milliseconds / (1000 * 60 * 60 * 24 * 7 * 4));\r\n\r\n    var years = (milliseconds / (1000 * 60 * 60 * 24 * 365));\r\n\r\n\r\n    if (years >= 1) {\r\n\r\n      return years.toFixed() + ' year' + numberEnding(years);\r\n\r\n    } else if (months >= 1) {\r\n\r\n      return months.toFixed() + ' month' + numberEnding(months);\r\n\r\n    } else if (weeks >= 1) {\r\n\r\n      return weeks.toFixed() + ' week' + numberEnding(weeks);\r\n\r\n    } else if (days >= 1) {\r\n\r\n      return days.toFixed() + ' day' + numberEnding(days);\r\n\r\n    } else if (hours >= 1) {\r\n\r\n      return hours.toFixed() + ' hour' + numberEnding(hours);\r\n\r\n    } else if (minutes >= 1) {\r\n\r\n      return minutes.toFixed() + ' minute' + numberEnding(minutes);\r\n\r\n    } else if (milliseconds >= (-1000 * 60)) {\r\n\r\n      return 'a minute';\r\n\r\n    } else {\r\n\r\n      return 'N/A';\r\n    }\r\n\r\n  }\r\n\r\n\r\n  public static nowDate(NoTime: boolean = false) {\r\n\r\n    if (NoTime) {\r\n      return this.getFormatedDate(Date(), true);\r\n    } else {\r\n      return this.getFormatedDate(Date());\r\n    }\r\n  }\r\n\r\n  public static getFormatedDate(dateString: string, NoTime: boolean = false) {\r\n\r\n    let d: Date = new Date(dateString);\r\n    d.setHours(d.getHours() + 2);\r\n\r\n    if (NoTime == true) {\r\n      return d.toISOString().split('T')[0];\r\n    } else {\r\n      return d.toISOString().split('.')[0];\r\n    }\r\n\r\n  }\r\n\r\n  public static getFormatedDate2(d : Date, NoTime: boolean = false) {\r\n\r\n\r\n    d.setHours(d.getHours() + 2);\r\n\r\n    if (NoTime == true) {\r\n      return d.toISOString().split('T')[0];\r\n    } else {\r\n      return d.toISOString().split('.')[0];\r\n    }\r\n\r\n  }\r\n\r\n  public static getBusinessDatesCount(startDate: string, endDate: string) {\r\n    var count = 0;\r\n    var _startDate = new Date(startDate);\r\n    var _endDate = new Date(endDate);\r\n\r\n    var curDate = _startDate;\r\n\r\n    while (curDate < _endDate) {\r\n      var dayOfWeek = curDate.getDay();\r\n      if (!(dayOfWeek == 6 || dayOfWeek == 0)) count++;\r\n      curDate.setDate(curDate.getDate() + 1);\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n}\r\n\r\n\r\nexport class DetailsDialogProcessor {\r\n\r\n  public static processDetailsConfig(detailsConfig: DetailsDialogConfig, row: any): DetailsDialogConfig {\r\n\r\n    const updatedDetailsConfig: DetailsDialogConfig = Core.getClone(detailsConfig); //{...detailsConfig}\r\n    updatedDetailsConfig.details = row;\r\n\r\n\r\n    //Form Config\r\n    updatedDetailsConfig.formConfig.mode = updatedDetailsConfig.mode ?? \"view\";\r\n\r\n\r\n\r\n    if (updatedDetailsConfig.heroField && row) {\r\n      updatedDetailsConfig.heroValue = row[updatedDetailsConfig.heroField];\r\n    }\r\n\r\n\r\n    //Table configs\r\n    if (updatedDetailsConfig.tableConfig) {\r\n      updateTableConfig(updatedDetailsConfig.tableConfig);\r\n    }\r\n\r\n    if (updatedDetailsConfig.tableConfigs) {\r\n      updatedDetailsConfig.tableConfigs.forEach(updateTableConfig);\r\n    }\r\n\r\n    function updateTableConfig(tableConfig) {\r\n      tableConfig.heroField = updatedDetailsConfig?.heroField;\r\n      tableConfig.heroValue = updatedDetailsConfig?.heroValue;\r\n      // tableConfig.setHero = updatedDetailsConfig.setHero;\r\n      tableConfig.searchConfig = null;\r\n      tableConfig.tileConfig = null;\r\n      tableConfig.parentData = updatedDetailsConfig.details;\r\n      tableConfig.elevation = 'none';\r\n    }\r\n\r\n\r\n\r\n    //URL\r\n    if (updatedDetailsConfig.tableConfig) {\r\n      transformLoadUrl(updatedDetailsConfig.tableConfig);\r\n    }\r\n\r\n    if (updatedDetailsConfig.tableConfigs) {\r\n      updatedDetailsConfig.tableConfigs.forEach(transformLoadUrl);\r\n    }\r\n\r\n    if (updatedDetailsConfig.stepConfig?.loadAction) {\r\n      transformStepUrl(updatedDetailsConfig.stepConfig);\r\n    }\r\n\r\n    function transformLoadUrl(tableConfig) {\r\n      if (!tableConfig.loadAction) return;\r\n\r\n      if (tableConfig.loadCriteria && tableConfig.loadIDField) {\r\n        const idValue = updatedDetailsConfig.details?.[tableConfig.loadIDField]; // Changed: Null guard for header buttons with no row data\r\n        tableConfig.loadAction.url = `${tableConfig.loadAction.url.split('/')[0]}/${tableConfig.loadCriteria}/${idValue ?? 'x'}`;\r\n      }\r\n    }\r\n\r\n    function transformStepUrl(stepConfig) {\r\n      if (stepConfig.loadAction && stepConfig.loadIDField ) {\r\n        stepConfig.loadAction.url = `${stepConfig.loadAction.url.replace('{id}', updatedDetailsConfig.details[stepConfig.loadIDField])}`;\r\n      }\r\n    }\r\n\r\n\r\n\r\n    return updatedDetailsConfig;\r\n  }\r\n\r\n\r\n  static initializeConfigs(detailsConfig: DetailsDialogConfig) {\r\n    const tableConfig = detailsConfig.tableConfig;\r\n    const tableConfigs = detailsConfig.tableConfigs;\r\n    const formConfig = detailsConfig.formConfig;\r\n    const stepConfig = detailsConfig.stepConfig;\r\n    const statusConfig = detailsConfig.statusConfig;\r\n    const buttons = detailsConfig.buttons;\r\n    formConfig.mode = formConfig.mode ?? \"view\";\r\n    return { tableConfig, tableConfigs, formConfig, stepConfig, statusConfig, buttons };\r\n  }\r\n\r\n  static setHeroValue(detailsConfig: DetailsDialogConfig, details: any) {\r\n\r\n\r\n    if ((detailsConfig.formConfig.mode == \"create\"  ) && detailsConfig.heroField && detailsConfig.heroValue) {\r\n      details[detailsConfig.heroField] = detailsConfig.heroValue;\r\n\r\n      // Ensure hero values are set in form config\r\n      detailsConfig.formConfig.heroField = detailsConfig.heroField;\r\n      detailsConfig.formConfig.heroValue = detailsConfig.heroValue;\r\n\r\n      return;\r\n    }\r\n\r\n\r\n  }\r\n\r\n  static handleFormMode(detailsConfig: DetailsDialogConfig, formConfig: FormConfig,) {\r\n    let details;\r\n    let action;\r\n    let loadByAction = false;\r\n\r\n    if (formConfig.mode === \"create\") {\r\n\r\n      details = Core.generateObject(formConfig.fields);\r\n      // Changed: merge row data into create form if available (e.g. pre-populating sowID from pig row)\r\n      if (detailsConfig.details) {\r\n        Object.keys(detailsConfig.details).forEach(key => {\r\n          if (detailsConfig.details[key] !== null && detailsConfig.details[key] !== undefined) {\r\n            details[key] = detailsConfig.details[key];\r\n          }\r\n        });\r\n      }\r\n\r\n    } else {\r\n      let resp = this.loadDetailsData(detailsConfig, formConfig);\r\n      details = resp.details;\r\n\r\n      action = resp.action;\r\n      loadByAction = resp.loadByAction;\r\n    }\r\n\r\n    // Changed: resolve {placeholder} in field loadAction URLs using row data (works for both create and edit modes)\r\n    if (detailsConfig.details) {\r\n      formConfig.fields?.forEach(field => {\r\n        if (field.loadAction?.url && field.loadAction.url.includes('{')) {\r\n          field.loadAction = { ...field.loadAction, url: field.loadAction.url.replace(/\\{(\\w+)\\}/g, (_, key) => detailsConfig.details[key] ?? '') };\r\n        }\r\n      });\r\n    }\r\n\r\n    return { details, loadByAction, action };\r\n  }\r\n\r\n  private static loadDetailsData(detailsConfig: DetailsDialogConfig, formConfig: FormConfig) {\r\n\r\n    let details;\r\n    let action;\r\n    let loadByAction = false;\r\n\r\n\r\n    //Choose source\r\n    if (detailsConfig.detailsSource == DetailsSource.Row) {\r\n\r\n      // console.log(\"Data from Details - Row option\")\r\n      details = detailsConfig.details;\r\n\r\n    } else if (detailsConfig.detailsSource == DetailsSource.Url) {\r\n      // console.log(\"Data from Url option\")\r\n      action = this.loadDetailsFromUrl(detailsConfig, formConfig);\r\n      loadByAction = true;\r\n\r\n    } else {\r\n\r\n      //new logic\r\n      if (formConfig.loadAction){\r\n        // console.log(\"Data from Url - Guessed\");\r\n          action = this.loadDetailsFromUrl(detailsConfig, formConfig);\r\n          loadByAction = true;\r\n\r\n      }else{\r\n          // console.log(\"Data from Details - Guessed\");\r\n          details = detailsConfig.details;\r\n      }\r\n\r\n    }\r\n\r\n    return { details, loadByAction, action };\r\n  }\r\n\r\n  private static loadDetailsFromUrl(detailsConfig: DetailsDialogConfig, formConfig: FormConfig) {\r\n    let action : Action;\r\n\r\n    if (formConfig.loadAction) {\r\n\r\n      if (formConfig.heroField && detailsConfig.details) { // Changed: prioritize formConfig.heroField - the form's own identity field takes precedence over parent's heroField\r\n\r\n        // console.log(\"FormConfig Hero ID Field \" + formConfig.heroField);\r\n        action = { url: `${formConfig.loadAction.url}/${detailsConfig.details[formConfig.heroField]}` };\r\n\r\n      } else if (detailsConfig.heroField && detailsConfig.details) { // Changed: fallback to detailsConfig.heroField when formConfig doesn't define one\r\n\r\n        // console.log(\"DetailsConfig Hero ID Field \" + detailsConfig.heroField);\r\n        action = { url: `${formConfig.loadAction.url}/${detailsConfig.details[detailsConfig.heroField]}` };\r\n\r\n      } else if (detailsConfig.heroValue) {\r\n\r\n        // console.log(\"Defined Hero Value \" + detailsConfig.heroValue);\r\n        action = { url: `${formConfig.loadAction.url}/${detailsConfig.heroValue}` };\r\n\r\n      }\r\n      else{\r\n        console.log(\"url source failed : setup hero field or hero value\");\r\n      }\r\n\r\n      action.cacheDurationMinutes = formConfig.loadAction.cacheDurationMinutes ?? 0;\r\n      action.skipCache = formConfig.loadAction.skipCache ?? false;\r\n      action.successMessage = formConfig.loadAction.successMessage ?? null;\r\n\r\n    }else{\r\n      console.log(\"No load action set\");\r\n    }\r\n\r\n    return action;\r\n  }\r\n\r\n  static setFileField(formConfig: FormConfig) {\r\n    return formConfig.fields.find(x => x.type === 'file');\r\n  }\r\n\r\n\r\n  static setupButtons(buttons: any) {\r\n    let extraButtons, createButton, editButton, deleteButton;\r\n\r\n    if (buttons) {\r\n      extraButtons = buttons.filter(x => x.name !== \"create\" && x.name !== \"edit\" && x.name !== \"delete\" && x.name !== \"view\" && x.inDialog);\r\n      createButton = buttons.find(x => x.name === \"create\");\r\n      editButton = buttons.find(x => x.name === \"edit\");\r\n      deleteButton = buttons.find(x => x.name === \"delete\");\r\n    }\r\n    return { extraButtons, createButton, editButton, deleteButton };\r\n  }\r\n\r\n\r\n\r\n\r\n}\r\n\r\n\r\n","import { Core } from \"./TinCore\";\r\n\r\n\r\nexport enum InvoiceStatus {\r\n  Draft, Submitted, Paid, Discarded, Paying // Changed: Added Paying status for partially paid invoices\r\n}\r\n\r\n// Added: Invoice item type enum - mirrors backend InvoiceItemType\r\nexport enum InvoiceItemType {\r\n  General = 0,\r\n  Product = 1,\r\n  Service = 2\r\n}\r\n\r\n// Fixed asset status enum - mirrors backend AssetStatus\r\nexport enum AssetStatus { Draft = 0, Active = 1, FullyDepreciated = 2, Disposed = 3 }\r\n\r\n// Transaction timing enum - separates WHEN payment occurs from HOW\r\nexport enum TransactionTiming {\r\n  Immediate = 0,  // Payment occurs now - no AR/AP created\r\n  Deferred = 1    // Payment occurs later - creates AR/AP\r\n}\r\n\r\n// Changed: Renamed from InventoryReceiptStatus to PurchaseStatus\r\nexport enum PurchaseStatus {\r\n  Draft,\r\n  Confirmed, // Changed: Receiving → Confirmed (same int=1)\r\n  Completed\r\n}\r\n\r\n// Added: Receipt status for goods confirmation tracking\r\nexport enum ReceiptStatus {\r\n  Draft,\r\n  Completed\r\n}\r\n\r\n// Unit of measure enum - mirrors backend\r\nexport enum UnitOfMeasure {\r\n  Piece,\r\n  Box,\r\n  Case,\r\n  Carton,\r\n  Pallet,\r\n  Kilogram,\r\n  Gram,\r\n  Litre,\r\n  Millilitre,\r\n  Meter,\r\n  Pack,\r\n  Set,\r\n  Dozen\r\n}\r\n\r\nexport class loginConfig {\r\n\r\n  constructor() {\r\n    this.appName = \"\";\r\n    this.selfService = false;\r\n    this.logo = \"\";\r\n    this.logoSize = \"normal\";\r\n  }\r\n\r\n  appName: string;\r\n  selfService: boolean;\r\n  logo: string;\r\n  logoSize: string;\r\n}\r\n\r\n\r\nexport class Account {\r\n  user: User;\r\n  profile: Profile;\r\n}\r\n\r\nexport class User {\r\n\r\n  constructor() {\r\n\r\n\r\n    this.userName = \"\";\r\n    this.password = \"\";\r\n    this.tries = \"0\";\r\n    this.locked = \"0\";\r\n    this.logged = \"0\";\r\n    this.disabled = \"0\";\r\n    this.changepassword = \"0\";\r\n    this.dateCreated = Core.nowDate();\r\n    this.dateUpdated = Core.nowDate();\r\n    this.token = \"\";\r\n    this.dateExpire = Core.nowDate();\r\n    this.tokenExpire = Core.nowDate();\r\n    this.authType = \"\";\r\n    this.rememberMe = false; // Changed: Added for \"Keep me signed in\" feature\r\n  }\r\n\r\n  userName: string;\r\n  password: string;\r\n  tries: string;\r\n  locked: string;\r\n  logged: string;\r\n  disabled: string;\r\n  changepassword: string;\r\n  dateCreated: string;\r\n  dateUpdated: string;\r\n  dateExpire: string;\r\n  token: string;\r\n  tokenExpire: string;\r\n\r\n  authType: string;\r\n  rememberMe: boolean; // Changed: Added for \"Keep me signed in\" feature\r\n}\r\n\r\nexport class ChangeUserPassword {\r\n\r\n  constructor() {\r\n    this.userName = \"\";\r\n    this.currentPassword = \"\";\r\n    this.newPassword = \"\";\r\n    this.confirmPassword = \"\";\r\n  }\r\n  userName: string;\r\n  currentPassword: string;\r\n  newPassword: string;\r\n  confirmPassword: string;\r\n}\r\n\r\n\r\nexport class Register {\r\n\r\n  constructor() {\r\n    this.userName = \"\";\r\n    this.roleID = 1;\r\n    this.firstName = \"\";\r\n    this.lastName = \"\";\r\n    this.email = \"\";\r\n    this.authType = \"local\";\r\n    this.password = \"\";\r\n  }\r\n\r\n  userName: string;\r\n  roleID: number;\r\n  firstName: string;\r\n  lastName: string;\r\n  email: string;\r\n  authType: string;\r\n  password: string;\r\n}\r\n\r\nexport class Profile {\r\n\r\n  constructor() {\r\n    this.profileID = \"\";\r\n    this.userName = \"\";\r\n    this.roleID = 1;\r\n    this.firstName = \"\";\r\n    this.lastName = \"\";\r\n    this.email = \"\";\r\n    this.empID = \"\";\r\n    this.arID = \"0\";\r\n    this.authType = \"\";\r\n    this.password = \"\";\r\n    this.role = new Role();\r\n    this.code = \"\";\r\n  }\r\n\r\n  profileID: string;\r\n  userName: string;\r\n  roleID: number;\r\n  firstName: string;\r\n  lastName: string;\r\n  email: string;\r\n  empID: string;\r\n  arID: string;\r\n  authType: string;\r\n  password: string;\r\n  role: Role\r\n  code : string;\r\n}\r\n\r\n\r\n\r\nexport class Role {\r\n\r\n  constructor() {\r\n    this.roleID = 0;\r\n    this.roleName = \"New Role\";\r\n    this.cap1 = false;\r\n    this.cap2 = false;\r\n    this.cap3 = false;\r\n    this.cap4 = false;\r\n    this.cap5 = false;\r\n    this.cap6 = false;\r\n    this.cap7 = false;\r\n    this.cap8 = false;\r\n    this.cap9 = false;\r\n    this.cap10 = false;\r\n    this.cap11 = false;\r\n    this.cap12 = false;\r\n    this.cap13 = false;\r\n    this.cap14 = false;\r\n    this.cap15 = false;\r\n    this.cap16 = false;\r\n    this.cap17 = false;\r\n    this.cap18 = false;\r\n    this.cap19 = false;\r\n    this.cap20 = false;\r\n    this.cap21 = false;\r\n    this.cap22 = false;\r\n    this.cap23 = false;\r\n    this.cap24 = false;\r\n    this.cap25 = false;\r\n    this.cap26 = false;\r\n    this.cap27 = false;\r\n    this.cap28 = false;\r\n    this.cap29 = false;\r\n    this.cap30 = false;\r\n    this.cap31 = false;\r\n    this.cap32 = false;\r\n    this.cap33 = false;\r\n    this.cap34 = false;\r\n    this.cap35 = false;\r\n    this.cap36 = false;\r\n    this.cap37 = false;\r\n    this.cap38 = false;\r\n    this.cap39 = false;\r\n    this.cap40 = false;\r\n    this.cap41 = false;\r\n    this.cap42 = false;\r\n    this.cap43 = false;\r\n    this.cap44 = false;\r\n    this.cap45 = false;\r\n    this.cap46 = false;\r\n    this.cap47 = false;\r\n    this.cap48 = false;\r\n    this.cap49 = false;\r\n    this.cap50 = false;\r\n    this.cap51 = false;\r\n    this.cap52 = false;\r\n    this.cap53 = false;\r\n    this.cap54 = false;\r\n    this.cap55 = false;\r\n    this.cap56 = false;\r\n    this.cap57 = false;\r\n    this.cap58 = false;\r\n    this.cap59 = false;\r\n    this.cap60 = false;\r\n    this.cap61 = false;\r\n    this.cap62 = false;\r\n    this.cap63 = false;\r\n    this.cap64 = false;\r\n    this.cap65 = false;\r\n    this.cap66 = false;\r\n    this.cap67 = false;\r\n    this.cap68 = false;\r\n    this.cap69 = false;\r\n    this.cap70 = false;\r\n    this.cap71 = false;\r\n    this.cap72 = false;\r\n    this.cap73 = false;\r\n    this.cap74 = false;\r\n    this.cap75 = false;\r\n    this.cap76 = false;\r\n    this.cap77 = false;\r\n    this.cap78 = false;\r\n    this.cap79 = false;\r\n    this.cap80 = false;\r\n    this.cap81 = false;\r\n    this.cap82 = false;\r\n    this.cap83 = false;\r\n    this.cap84 = false;\r\n    this.cap85 = false;\r\n    this.cap86 = false;\r\n    this.cap87 = false;\r\n    this.cap88 = false;\r\n    this.cap89 = false;\r\n    this.cap90 = false;\r\n    this.cap91 = false;\r\n    this.cap92 = false;\r\n    this.cap93 = false;\r\n    this.cap94 = false;\r\n    this.cap95 = false;\r\n    this.cap96 = false;\r\n    this.cap97 = false;\r\n    this.cap98 = false;\r\n    this.cap99 = false;\r\n    this.cap100 = false;\r\n    // Changed: Extended cap101-cap200 to match backend Role model (Cap1-Cap200)\r\n    this.cap101 = false;\r\n    this.cap102 = false;\r\n    this.cap103 = false;\r\n    this.cap104 = false;\r\n    this.cap105 = false;\r\n    this.cap106 = false;\r\n    this.cap107 = false;\r\n    this.cap108 = false;\r\n    this.cap109 = false;\r\n    this.cap110 = false;\r\n    this.cap111 = false;\r\n    this.cap112 = false;\r\n    this.cap113 = false;\r\n    this.cap114 = false;\r\n    this.cap115 = false;\r\n    this.cap116 = false;\r\n    this.cap117 = false;\r\n    this.cap118 = false;\r\n    this.cap119 = false;\r\n    this.cap120 = false;\r\n    this.cap121 = false;\r\n    this.cap122 = false;\r\n    this.cap123 = false;\r\n    this.cap124 = false;\r\n    this.cap125 = false;\r\n    this.cap126 = false;\r\n    this.cap127 = false;\r\n    this.cap128 = false;\r\n    this.cap129 = false;\r\n    this.cap130 = false;\r\n    this.cap131 = false;\r\n    this.cap132 = false;\r\n    this.cap133 = false;\r\n    this.cap134 = false;\r\n    this.cap135 = false;\r\n    this.cap136 = false;\r\n    this.cap137 = false;\r\n    this.cap138 = false;\r\n    this.cap139 = false;\r\n    this.cap140 = false;\r\n    this.cap141 = false;\r\n    this.cap142 = false;\r\n    this.cap143 = false;\r\n    this.cap144 = false;\r\n    this.cap145 = false;\r\n    this.cap146 = false;\r\n    this.cap147 = false;\r\n    this.cap148 = false;\r\n    this.cap149 = false;\r\n    this.cap150 = false;\r\n    this.cap151 = false;\r\n    this.cap152 = false;\r\n    this.cap153 = false;\r\n    this.cap154 = false;\r\n    this.cap155 = false;\r\n    this.cap156 = false;\r\n    this.cap157 = false;\r\n    this.cap158 = false;\r\n    this.cap159 = false;\r\n    this.cap160 = false;\r\n    this.cap161 = false;\r\n    this.cap162 = false;\r\n    this.cap163 = false;\r\n    this.cap164 = false;\r\n    this.cap165 = false;\r\n    this.cap166 = false;\r\n    this.cap167 = false;\r\n    this.cap168 = false;\r\n    this.cap169 = false;\r\n    this.cap170 = false;\r\n    this.cap171 = false;\r\n    this.cap172 = false;\r\n    this.cap173 = false;\r\n    this.cap174 = false;\r\n    this.cap175 = false;\r\n    this.cap176 = false;\r\n    this.cap177 = false;\r\n    this.cap178 = false;\r\n    this.cap179 = false;\r\n    this.cap180 = false;\r\n    this.cap181 = false;\r\n    this.cap182 = false;\r\n    this.cap183 = false;\r\n    this.cap184 = false;\r\n    this.cap185 = false;\r\n    this.cap186 = false;\r\n    this.cap187 = false;\r\n    this.cap188 = false;\r\n    this.cap189 = false;\r\n    this.cap190 = false;\r\n    this.cap191 = false;\r\n    this.cap192 = false;\r\n    this.cap193 = false;\r\n    this.cap194 = false;\r\n    this.cap195 = false;\r\n    this.cap196 = false;\r\n    this.cap197 = false;\r\n    this.cap198 = false;\r\n    this.cap199 = false;\r\n    this.cap200 = false;\r\n  }\r\n\r\n  roleID: number;\r\n  roleName: string;\r\n  cap1: boolean;\r\n  cap2: boolean;\r\n  cap3: boolean;\r\n  cap4: boolean;\r\n  cap5: boolean;\r\n  cap6: boolean;\r\n  cap7: boolean;\r\n  cap8: boolean;\r\n  cap9: boolean;\r\n  cap10: boolean;\r\n  cap11: boolean;\r\n  cap12: boolean;\r\n  cap13: boolean;\r\n  cap14: boolean;\r\n  cap15: boolean;\r\n  cap16: boolean;\r\n  cap17: boolean;\r\n  cap18: boolean;\r\n  cap19: boolean;\r\n  cap20: boolean;\r\n  cap21: boolean;\r\n  cap22: boolean;\r\n  cap23: boolean;\r\n  cap24: boolean;\r\n  cap25: boolean;\r\n  cap26: boolean;\r\n  cap27: boolean;\r\n  cap28: boolean;\r\n  cap29: boolean;\r\n  cap30: boolean;\r\n  cap31: boolean;\r\n  cap32: boolean;\r\n  cap33: boolean;\r\n  cap34: boolean;\r\n  cap35: boolean;\r\n  cap36: boolean;\r\n  cap37: boolean;\r\n  cap38: boolean;\r\n  cap39: boolean;\r\n  cap40: boolean;\r\n  cap41: boolean;\r\n  cap42: boolean;\r\n  cap43: boolean;\r\n  cap44: boolean;\r\n  cap45: boolean;\r\n  cap46: boolean;\r\n  cap47: boolean;\r\n  cap48: boolean;\r\n  cap49: boolean;\r\n  cap50: boolean;\r\n  cap51: boolean;\r\n  cap52: boolean;\r\n  cap53: boolean;\r\n  cap54: boolean;\r\n  cap55: boolean;\r\n  cap56: boolean;\r\n  cap57: boolean;\r\n  cap58: boolean;\r\n  cap59: boolean;\r\n  cap60: boolean;\r\n  cap61: boolean;\r\n  cap62: boolean;\r\n  cap63: boolean;\r\n  cap64: boolean;\r\n  cap65: boolean;\r\n  cap66: boolean;\r\n  cap67: boolean;\r\n  cap68: boolean;\r\n  cap69: boolean;\r\n  cap70: boolean;\r\n  cap71: boolean;\r\n  cap72: boolean;\r\n  cap73: boolean;\r\n  cap74: boolean;\r\n  cap75: boolean;\r\n  cap76: boolean;\r\n  cap77: boolean;\r\n  cap78: boolean;\r\n  cap79: boolean;\r\n  cap80: boolean;\r\n  cap81: boolean;\r\n  cap82: boolean;\r\n  cap83: boolean;\r\n  cap84: boolean;\r\n  cap85: boolean;\r\n  cap86: boolean;\r\n  cap87: boolean;\r\n  cap88: boolean;\r\n  cap89: boolean;\r\n  cap90: boolean;\r\n  cap91: boolean;\r\n  cap92: boolean;\r\n  cap93: boolean;\r\n  cap94: boolean;\r\n  cap95: boolean;\r\n  cap96: boolean;\r\n  cap97: boolean;\r\n  cap98: boolean;\r\n  cap99: boolean;\r\n  cap100: boolean;\r\n  // Changed: Extended cap101-cap200 to match backend Role model (Cap1-Cap200)\r\n  cap101: boolean;\r\n  cap102: boolean;\r\n  cap103: boolean;\r\n  cap104: boolean;\r\n  cap105: boolean;\r\n  cap106: boolean;\r\n  cap107: boolean;\r\n  cap108: boolean;\r\n  cap109: boolean;\r\n  cap110: boolean;\r\n  cap111: boolean;\r\n  cap112: boolean;\r\n  cap113: boolean;\r\n  cap114: boolean;\r\n  cap115: boolean;\r\n  cap116: boolean;\r\n  cap117: boolean;\r\n  cap118: boolean;\r\n  cap119: boolean;\r\n  cap120: boolean;\r\n  cap121: boolean;\r\n  cap122: boolean;\r\n  cap123: boolean;\r\n  cap124: boolean;\r\n  cap125: boolean;\r\n  cap126: boolean;\r\n  cap127: boolean;\r\n  cap128: boolean;\r\n  cap129: boolean;\r\n  cap130: boolean;\r\n  cap131: boolean;\r\n  cap132: boolean;\r\n  cap133: boolean;\r\n  cap134: boolean;\r\n  cap135: boolean;\r\n  cap136: boolean;\r\n  cap137: boolean;\r\n  cap138: boolean;\r\n  cap139: boolean;\r\n  cap140: boolean;\r\n  cap141: boolean;\r\n  cap142: boolean;\r\n  cap143: boolean;\r\n  cap144: boolean;\r\n  cap145: boolean;\r\n  cap146: boolean;\r\n  cap147: boolean;\r\n  cap148: boolean;\r\n  cap149: boolean;\r\n  cap150: boolean;\r\n  cap151: boolean;\r\n  cap152: boolean;\r\n  cap153: boolean;\r\n  cap154: boolean;\r\n  cap155: boolean;\r\n  cap156: boolean;\r\n  cap157: boolean;\r\n  cap158: boolean;\r\n  cap159: boolean;\r\n  cap160: boolean;\r\n  cap161: boolean;\r\n  cap162: boolean;\r\n  cap163: boolean;\r\n  cap164: boolean;\r\n  cap165: boolean;\r\n  cap166: boolean;\r\n  cap167: boolean;\r\n  cap168: boolean;\r\n  cap169: boolean;\r\n  cap170: boolean;\r\n  cap171: boolean;\r\n  cap172: boolean;\r\n  cap173: boolean;\r\n  cap174: boolean;\r\n  cap175: boolean;\r\n  cap176: boolean;\r\n  cap177: boolean;\r\n  cap178: boolean;\r\n  cap179: boolean;\r\n  cap180: boolean;\r\n  cap181: boolean;\r\n  cap182: boolean;\r\n  cap183: boolean;\r\n  cap184: boolean;\r\n  cap185: boolean;\r\n  cap186: boolean;\r\n  cap187: boolean;\r\n  cap188: boolean;\r\n  cap189: boolean;\r\n  cap190: boolean;\r\n  cap191: boolean;\r\n  cap192: boolean;\r\n  cap193: boolean;\r\n  cap194: boolean;\r\n  cap195: boolean;\r\n  cap196: boolean;\r\n  cap197: boolean;\r\n  cap198: boolean;\r\n  cap199: boolean;\r\n  cap200: boolean;\r\n}\r\n\r\n\r\n// Added: Model for passing signup data from login redirect to signup page\r\nexport class SignupData {\r\n    token: string = \"\";\r\n    authType: string = \"\";\r\n    firstName: string = \"\";\r\n    lastName: string = \"\";\r\n    email: string = \"\";\r\n    orgName: string = \"\";\r\n    termsAccepted: boolean = false;\r\n    invitations: any[] = [];\r\n    acceptedInvitationIds: number[] = [];\r\n}\r\n\r\nexport enum LogLevel {\r\n  All = 0,\r\n  Debug = 1,\r\n  Info = 2,\r\n  Warn = 3,\r\n  Error = 4,\r\n  Fatal = 5,\r\n  Off = 6,\r\n}\r\n","import { BehaviorSubject } from \"rxjs\";\r\n\r\nexport interface BitwiseOption {\r\n  name?: string;\r\n  value: number;\r\n  selected: boolean;\r\n  icon?: Icon;\r\n}\r\n\r\nexport enum RoleAccess {\r\n  None = 0,\r\n  View = 1,\r\n  Edit = 2,\r\n  Create = 3,\r\n  Full = 4\r\n}\r\n\r\n\r\nexport enum MovementType {\r\n  In = 0,\r\n  Out = 1\r\n}\r\n\r\nexport enum DetailsSource {Row, Url}\r\n\r\nexport class dialogOptions {\r\n  width?: string;\r\n  height?: string;\r\n}\r\n\r\nexport interface CloseOptions {\r\n  position?: 'top' | 'bottom'; // Default: 'bottom'\r\n  text?: string; // Default: 'Cancel' - only applies when position is 'bottom'\r\n}\r\n\r\nexport class DetailsDialogConfig {\r\n\r\n  stepConfig? : StepConfig;\r\n  statusConfig? : StatusConfig;\r\n  formConfig: FormConfig;\r\n  tableConfig?: TableConfig;\r\n  tableConfigs?: TableConfig[];\r\n  buttons?: Button[];\r\n  details? : any\r\n  heroField? : any\r\n  heroValue?: any\r\n  mode?: 'create' | 'edit' | 'view'\r\n  // width?: string\r\n  detailsSource?: DetailsSource\r\n  options?: dialogOptions\r\n  autoRefreshConfig?: AutoRefreshConfig;\r\n  refreshOnClose?: boolean;\r\n  causeTableRefresh?: boolean;\r\n  closeOptions?: CloseOptions;\r\n  initAction?: Action; // Called on dialog open to check for existing state\r\n  hideTablesInCreateMode?: boolean; // Hide nested tables when mode is 'create'\r\n  allowUserKeepOpen?: boolean; // Set by table config — shows a Keep Open checkbox in the dialog title bar; TableConfig is the single source of truth\r\n  keepOpenBehavior?: 'reset' | 'edit'; // Set by table config — controls what happens after successful create when user has Keep Open ticked\r\n  nestingLevel?: number; // Changed: Controls dialog nesting depth — tabs hidden when >= 2\r\n}\r\n\r\nexport class Action{\r\n  method?: 'get' | 'post'\r\n  url: string;\r\n  params? : any[]\r\n  successMessage?: string\r\n  isFormData?: boolean\r\n  skipCache?: boolean\r\n  cacheDurationMinutes?: number;\r\n}\r\n\r\n// Centralized cache configuration for URL patterns\r\nexport interface CacheRule {\r\n  pattern: string;      \r\n  durationMinutes: number;\r\n}\r\n\r\nexport class CacheConfig {\r\n  rules: CacheRule[] = [];\r\n  \r\n  addRule(pattern: string, durationMinutes: number) {\r\n    this.rules.push({ pattern, durationMinutes });\r\n  }\r\n  \r\n  getDuration(url: string): number | null {\r\n    for (const rule of this.rules) {\r\n      if (this.matchesPattern(url, rule.pattern)) {\r\n        return rule.durationMinutes;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n  \r\n  private matchesPattern(url: string, pattern: string): boolean {\r\n    const regexPattern = pattern\r\n      .replace(/\\*/g, '.*')\r\n      .replace(/\\?/g, '\\\\?');\r\n    const regex = new RegExp(`^${regexPattern}$`);\r\n    return regex.test(url);\r\n  }\r\n}\r\n\r\n\r\nexport interface SearchField extends Field {\r\n  show?: boolean\r\n}\r\n\r\nexport class SearchConfig {\r\n  fields: SearchField[]\r\n  searchAction?: Action\r\n  emailResults?: boolean\r\n  tileConfig?: TileConfig\r\n}\r\n\r\n\r\n\r\nexport class SecurityConfig {\r\n  allow?: CapItem[];\r\n  deny?: CapItem[];\r\n}\r\n\r\nexport interface ChildField {\r\n  childField?: string\r\n  childValueField?: string\r\n}\r\n\r\nexport interface AutoRefreshConfig {\r\n  // Time between refreshes in milliseconds (default: 5000ms = 5 seconds)\r\n  interval?: number;\r\n  stopCondition?: (data: any) => boolean;\r\n  defaultOn?: boolean;\r\n}\r\n\r\n\r\nexport interface Field {\r\n  securityConfig?: SecurityConfig;\r\n  name: string;\r\n  type: 'text' | 'text-area' | 'text-single' | 'text-multi' | 'text-mask' | 'date' | 'date-short' | 'datetime' | 'datetimesec' | 'checkbox' | 'select' | 'select-multi' | 'money' | 'number' | 'section' | 'blank' | 'chip' | 'file' | 'file-view' | 'icon' | 'spinner' | 'button' | 'label' | 'email' | 'composite' | 'string' | 'html'; // Changed: added date-short (d MMM format)\r\n  alias?: string;\r\n  options?: any[];\r\n  optionDisplay?: string\r\n  optionValue?: string\r\n  masterOptionValue?: string\r\n  defaultValue?: any\r\n  defaultFirstValue?: boolean\r\n  required?: boolean\r\n  requiredCondition?: (value: any) => boolean;\r\n  min?: any\r\n  max?: any\r\n  rows?: number\r\n  span?: boolean\r\n  width?: string\r\n  size?: string\r\n  readonly?: boolean\r\n  hidden?: boolean\r\n  strict?: boolean\r\n  path?: string\r\n  keyField?: string\r\n  hint?: string\r\n  masterField?: string\r\n  masterValueField?: string\r\n  masterDefaultValueField?: string\r\n  // child?: ChildField\r\n  children?: ChildField[]\r\n  masterOptions?: any[]\r\n  nullable?: boolean\r\n  copyContent?: boolean\r\n  clearContent?: boolean\r\n  selectAll?: boolean // Changed: auto-select all options for select-multi\r\n  format?: 'text' | 'money' | 'date' | 'datetime' | 'number'\r\n  hideOnCreate?: boolean\r\n  hideOnExists?: boolean\r\n  hiddenCondition?: (value: any) => boolean;\r\n  readonlyCondition?: (value: any) => boolean;\r\n  detailsConfig?: DetailsDialogConfig;\r\n  loadAction?: Action\r\n  loadIDField?: string;\r\n  infoMessage?: string;\r\n  suffix?: string;\r\n  subfields?: Field[];\r\n  optionsSubject?: BehaviorSubject<any[]>;\r\n  section?: string;\r\n  fileOptions?: {\r\n    allowedExtensions?: string[];\r\n    maxSizeMB?: number;\r\n    compressImages?: boolean;\r\n  };\r\n  collapsed?: boolean;\r\n  collapsedCondition?: (value: any) => boolean;\r\n  maxHeight?: string;\r\n  valueCalculation?: (value: any) => any;\r\n  regex?: {\r\n\r\n    pattern: string;\r\n    message: string;\r\n  };\r\n  onSelectChange?: (value: any, data: any, option?: any) => void; // Changed: Added option parameter to provide direct access to selected option\r\n  icon?: Icon;\r\n  color?: string;\r\n  onChange?: (value: any, allValues: any) => void;\r\n}\r\n\r\nexport interface StatusState {\r\n  condition: (data: any) => boolean;\r\n  icon: string;                        \r\n  color: string;                       \r\n}\r\n\r\nexport interface StatusItem {\r\n  name: string;\r\n  hiddenCondition?: (data: any) => boolean;\r\n  states: StatusState[];\r\n}\r\n\r\nexport interface StatusConfig {\r\n  items: StatusItem[];\r\n  sticky?: boolean;\r\n  hiddenCondition?: (data: any) => boolean;\r\n}\r\n\r\n\r\nexport class AlertMessage {\r\n  type?: 'success' | 'info' | 'warn' | 'critical'\r\n  message?: string  // Changed: renamed from content to message\r\n  messageField?: string  // Changed: renamed from contentField to messageField\r\n  hiddenCondition?: (value: any) => boolean;\r\n  showCondition?: (value: any) => boolean;\r\n}\r\n\r\nexport class AlertConfig {\r\n  subject?: string\r\n  compact? : boolean\r\n  sticky?: boolean \r\n  messages: AlertMessage[]\r\n}\r\n\r\nexport class NotesConfig {\r\n  title?: string;\r\n  loadAction?: Action;\r\n  loadIDField?: string;\r\n  notes?: any[];\r\n  nameField?: string;\r\n  dateField?: string;\r\n  commentField?: string;\r\n}\r\n\r\nexport class FormConfig {\r\n  title?: string\r\n  fixedTitle?: boolean\r\n  alertConfig?: AlertConfig\r\n  fields: Field[]\r\n  mode?: 'create' | 'edit' | 'view'\r\n  button? : Button\r\n  multiColumn?: boolean\r\n  reset?: boolean\r\n  loadAction?: Action\r\n  heroField?: any\r\n  heroValue?: any\r\n  security?: SecurityConfig;\r\n  includeAudit?: boolean\r\n  notesConfig?: NotesConfig;\r\n}\r\n\r\nexport interface Confirm {\r\n  message?: string\r\n  func?: (data: any) => string; \r\n}\r\n\r\nexport interface Button{\r\n  name: string\r\n  visible?: (value: any) => boolean;\r\n  display?: string;\r\n  icon?: Icon;\r\n  disabled?: (value: any) => boolean;\r\n  color?: string;\r\n  tip?: string\r\n  dialog?: boolean\r\n  action?: Action\r\n  confirm?: Confirm\r\n  inDialog?: boolean\r\n  inHeader?: boolean\r\n  detailsConfig?: DetailsDialogConfig\r\n  setHeroField?: boolean;\r\n  ignorePendingApproval?: boolean;\r\n  keepOpen?: boolean;\r\n  onSuccess?: (response: ApiResponse, details: any) => void;\r\n  onClick?: (details: any) => void;\r\n  editOnSuccess?: boolean\r\n  onSuccessButton?: Button\r\n  skipValidation?: boolean\r\n  resetMode?: 'create' | 'edit'; // Reset dialog to this mode after keepOpen success\r\n  rowDataMap?: Record<string, string | ((data: any) => any)>; // Changed: Map row data fields — string for simple mapping, function for computed values\r\n}\r\n\r\n\r\nexport interface CapsuleConfig {\r\n  displayField: string;\r\n  leftIcons?: Icon[];\r\n  rightIcons?: Icon[];\r\n  // buttons?: Button[];\r\n  loadAction?: Action;\r\n}\r\n\r\nexport interface CardConfig {\r\n  imageField?: string;\r\n  titleField: string;\r\n  subtitleField?: string;\r\n  contentFields: string[];\r\n  columns?: number;\r\n  elevation?: 'low' | 'medium' | 'high';\r\n}\r\n\r\n// Changed: Added tile style type for different visual modes\r\nexport type TileStyle = 'basic' | 'icon' | 'chart';\r\n\r\n// Changed: Added chart type for tile chart style\r\nexport type TileChartType = 'line' | 'bar' | 'pie' | 'doughnut';\r\n\r\n// Changed: Added chart config for tile chart style\r\nexport interface TileChartConfig {\r\n  type: TileChartType;               // Chart type to render\r\n  dataField?: string;                 // Changed: Made optional — Field name from API response containing Chart.js data\r\n  data?: any;                         // Changed: Added inline Chart.js data (alternative to dataField)\r\n  color?: string;                     // Primary chart color\r\n  colors?: string[];                  // Multiple series/segment colors\r\n  height?: number;                    // Chart height in px (default 120)\r\n  gaugeValue?: number;                // Doughnut gauge: percentage (0-100), auto-generates data\r\n  gaugeColor?: string;                // Doughnut gauge: fill color\r\n}\r\n\r\nexport interface Tile {\r\n\r\n  name: string;\r\n  alias?: string;\r\n  value?: string;\r\n  color?: string;\r\n  selectedTile?: string;\r\n  hidden?: boolean;\r\n  info?: string;\r\n  prefix?: string;\r\n  suffix?: string;\r\n  action?: Action;\r\n  hiddenCondition?: (value: any) => boolean;\r\n  // Changed: Added properties for icon and chart tile styles\r\n  style?: TileStyle;                  // Tile visual mode: 'basic' (default), 'icon', 'chart'\r\n  icon?: string;                      // Mat-icon name for icon style (e.g., 'storage', 'attach_money')\r\n  footer?: string;                    // Footer text (for icon and chart styles)\r\n  footerIcon?: string;                // Footer mat-icon name\r\n  badge?: string;                     // Badge field name from API response (e.g., '+18%')\r\n  badgeColor?: string;                // Badge background color\r\n  chart?: TileChartConfig;            // Chart config for chart style\r\n}\r\nexport class TileConfig {\r\n  tiles: Tile[]\r\n  loadAction?: Action\r\n  loadInit?: boolean\r\n  clickable?: boolean\r\n  headerPosition?: | 'top' | 'middle';\r\n}\r\n\r\n// Changed: Added chart type union for standalone charts component\r\nexport type SpaChartType = 'line' | 'bar' | 'pie' | 'doughnut';\r\n\r\n// Changed: Added individual chart definition interface\r\nexport interface ChartItem {\r\n  name: string;                      // Unique identifier\r\n  title?: string;                    // Card title\r\n  subtitle?: string;                 // Card subtitle\r\n  footer?: string;                   // Footer text\r\n  footerIcon?: string;               // Mat-icon name for footer\r\n  type: SpaChartType;                // Chart type\r\n  loadAction?: Action;               // URL to load Chart.js-format data\r\n  data?: any;                        // Pre-loaded data (alternative to loadAction)\r\n  colors?: string[];                 // Series/segment colors\r\n  height?: string;                   // Chart area height (default '300px')\r\n  showLegend?: boolean;              // Changed: Show Chart.js auto-generated legend below chart\r\n  showPoints?: boolean;              // Line chart: show data points\r\n  tension?: number;                  // Line chart: curve tension (0=straight, 0.4=smooth)\r\n  gaugeValue?: number;               // Doughnut gauge: percentage (0-100), auto-generates data\r\n  gaugeColor?: string;               // Doughnut gauge: fill color\r\n  hidden?: boolean;\r\n  hiddenCondition?: (value: any) => boolean;\r\n  options?: any;                     // Chart.js options passthrough\r\n}\r\n\r\n// Changed: Added chart config container class\r\nexport class ChartConfig {\r\n  charts: ChartItem[];               // Array of chart definitions\r\n  loadAction?: Action;               // Single endpoint returning all chart data by name\r\n  loadInit?: boolean;                // Auto-load on component init\r\n  columns?: number;                  // Fixed grid columns (default: responsive auto-fit)\r\n}\r\n\r\nexport class Step {\r\n  name: string\r\n  value?: any\r\n  icon?: string;\r\n  hiddenCondition?: (value: any) => boolean;\r\n}\r\nexport class StepConfig {\r\n  steps: Step[]\r\n  valueField?: string\r\n  loadAction?: Action;\r\n  loadIDField?: string;\r\n  sticky?: boolean \r\n}\r\n\r\nexport interface Icon {\r\n  name: string\r\n  color?: string\r\n  tip?: string\r\n  tipField?: string\r\n  bannerField?: string\r\n  condition?: (value: any) => boolean;\r\n}\r\n\r\nexport interface Color {\r\n  name: string\r\n  condition?: (value: any) => boolean;\r\n}\r\n\r\n\r\nexport interface GroupData {\r\n  groupValue: any;\r\n  displayName: string;\r\n  icon?: string;\r\n  color?: string;\r\n  items: any[];\r\n  order: number;\r\n}\r\n\r\n\r\nexport interface GroupConfig {\r\n  // Server response field mapping (defaults match GroupedItemDto property names)\r\n  groupValueField?: string;       // Default: 'groupValue'\r\n  displayNameField?: string;      // Default: 'displayName'\r\n  iconField?: string;             // Default: 'icon'\r\n  colorField?: string;            // Default: 'color'\r\n  orderField?: string;            // Default: 'order'\r\n  itemsField?: string;            // Default: 'items'\r\n\r\n  // Item display\r\n  itemTextField: string;\r\n  itemIcon?: Icon;\r\n  itemIcons?: Icon[];\r\n  itemAdditionalIcons?: Icon[];\r\n\r\n  // Group display\r\n  groupIcons?: Icon[];\r\n  showGroupCount?: boolean;\r\n  emptyGroupMessage?: string;\r\n  showEmptyGroups?: boolean;\r\n\r\n  // Actions\r\n  headerButtons?: Button[];\r\n  contextMenuEnabled?: boolean;\r\n\r\n  // Filter\r\n  filterEnabled?: boolean; // Changed: Show search input above groups (default: true for grouped views)\r\n\r\n  // Drag and drop\r\n  dragEnabled?: boolean;\r\n  dropAction?: Action;\r\n}\r\n\r\nexport interface Column {\r\n  name: string;\r\n  type?: 'text' | 'date' | 'date-short' | 'datetime' | 'datetimesec' | 'checkbox' | 'select' | 'money' | 'number' | 'chip' | 'icon' | 'spinner' | 'button'; // Changed: added date-short\r\n  alias?: string;\r\n  maxLength?: number;\r\n  icon?: Icon;\r\n  color?: Color;\r\n  colors?: Color[];\r\n  icons?: Icon[];\r\n  options?: any[];\r\n  optionDisplay?: string\r\n  optionValue?: string\r\n  detailsConfig?: DetailsDialogConfig\r\n  hiddenCondition?: (parentData: any) => boolean;\r\n}\r\n\r\n\r\nexport type TableViewType = 'table' | 'capsule' | 'card' | 'grouped';\r\nexport class TableConfig{\r\n  viewType?: TableViewType \r\n  capsuleConfig?: CapsuleConfig\r\n  cardConfig?: CardConfig\r\n  groupConfig?: GroupConfig\r\n  tabTitle?: string\r\n  noDataMessage ?: string\r\n  columns? : Column[]\r\n  minColumns?: string[]\r\n  showFilter?: boolean\r\n  showFilterButton?: boolean\r\n  holdFilterSpace?: boolean\r\n  holdHeaderButtonSpace?: boolean\r\n  elevation?: 'none' | 'low' | 'medium' | 'high'\r\n  formConfig?: FormConfig\r\n  searchConfig?: SearchConfig\r\n  tileConfig?: TileConfig\r\n  stepConfig?: StepConfig\r\n  buttons?: Button[]\r\n  minButtons?: string[]\r\n  loadAction?: Action\r\n  countAction?: Action\r\n  loadIDField ?: string\r\n  loadCriteria?: string\r\n  lazyLoad?: boolean\r\n  causeFormRefresh?: boolean\r\n  logResponse?: boolean\r\n  flatButtons?: boolean\r\n  greyOut?: (value: any) => boolean;\r\n  heroField?: any\r\n  heroValue?: any\r\n  collapseButtons?: boolean\r\n  parentData ? : any\r\n  pageSizes?: number[]\r\n  maxButtonsCount?: number\r\n  hideTabCondition?: (value: any) => boolean;\r\n\r\n  download?: { columns: string[], fileName?: string, hiddenCondition?: (value: any) => boolean; }\r\n  upload?: { action: Action, messages?: AlertMessage[], hiddenCondition?: (value: any) => boolean; }\r\n  realTime?: boolean // Changed: Enable real-time SignalR updates — skips refresh after CUD operations\r\n  entityName?: string // Changed: Entity name for SignalR subscription (defaults to URL-derived name)\r\n  allowUserKeepOpen?: boolean; // Added: propagates to inline DetailsDialogConfig for buttons without their own detailsConfig\r\n  keepOpenBehavior?: 'reset' | 'edit'; // Added: controls what happens after successful create when user has Keep Open ticked — 'reset' clears form for next entry (default), 'edit' switches to edit mode with new entity\r\n}\r\n\r\nexport class PageConfig {\r\n  title?: string;\r\n  tableConfig?: TableConfig;\r\n  searchTableConfig?: TableConfig;\r\n  titleActions?: Field[];\r\n}\r\n\r\n\r\n\r\n\r\n//---Base---\r\n\r\nexport class ApiResponse {\r\n  success: boolean;\r\n  message: string;\r\n  data;\r\n}\r\n\r\nexport class Constants {\r\n  public static readonly AUTH_USER = 'a';\r\n  public static readonly AUTH_NAME = 'b';\r\n  public static readonly AUTH_ROLES = 'c';\r\n  public static readonly AUTH_TOKEN = 'd';\r\n  public static readonly AUTH_TOKEN_EXPIRE = 'e';\r\n  public static readonly AUTH_TENANT_NAME = 'f';\r\n  public static readonly AUTH_REFRESH_TOKEN = 'g'; // Changed: Added for refresh token storage\r\n  public static readonly AUTH_REFRESH_TOKEN_EXPIRE = 'h'; // Changed: Added for refresh token expiry\r\n  public static readonly AUTH_REMEMBER_ME = 'r'; // Changed: Added for remember me flag\r\n}\r\n\r\nexport class ListDialogConfig {\r\n  name: string;\r\n  title: string;\r\n  listName: string;\r\n}\r\n\r\nexport class CapItem {\r\n\r\n  constructor() {\r\n    this.name = \"\";\r\n    this.display = \"New Cap Item\";\r\n    this.enabled = false;\r\n    this.type = \"\";\r\n    this.newLine = false;\r\n    this.showMenu = true;\r\n    this.ignoreSubsDisplay = false;\r\n    this.link = \"\";\r\n    this.icon = \"navigate_next\";\r\n    this.color = \"black\";\r\n    this.isBool = false;\r\n    this.featureKey = \"\"; // Added: default empty — no feature restriction\r\n\r\n  }\r\n\r\n  name: string;\r\n  display: string;\r\n  enabled: boolean;\r\n  showMenu: boolean;\r\n\r\n  ignoreSubsDisplay: boolean;\r\n  type: string;\r\n  newLine: boolean;\r\n  link: string;\r\n  icon: string;\r\n  capSubItems: CapItem[];\r\n  color: string;\r\n  isBool : boolean;\r\n  featureKey: string; // Added: maps to subscription feature key for plan-based gating\r\n\r\n}\r\n\r\nexport class AppConfig {\r\n  constructor() {\r\n    this.appName = \"App Name\";\r\n    this.logo = \"\";\r\n    this.logoSize = \"normal\";\r\n    this.ADAuth = true;\r\n    this.localAuth = true;\r\n    this.googleAuth = false;\r\n    this.microsoftAuth = false;\r\n    this.microsoftAuthMessage = \"Sign in with Microsoft\";\r\n    this.selfService = false;\r\n    this.multitenant = false;\r\n    this.navigation = 'top';\r\n    this.progressLine = false;\r\n    this.loginStyle = 'default';\r\n    this.termsUrl = \"\";\r\n    this.privacyUrl = \"\";\r\n    this.siteUrl = \"https://alsquaretech.net/\";\r\n    this.navWidth = '200px';\r\n    this.navColor = 'rgba(0,0,0,0.78)'; // Changed: Default dark overlay for side-modern sidebar\r\n    this.navImage = ''; // Changed: Default no background image for side-modern sidebar\r\n\r\n  }\r\n\r\n  appName: string;\r\n  logo: string;\r\n  logoSize: string;\r\n  ADAuth: boolean;\r\n  localAuth: boolean;\r\n  googleAuth: boolean;\r\n  microsoftAuth: boolean;\r\n  microsoftAuthMessage: string;\r\n  selfService: boolean;\r\n  capItems: CapItem[];\r\n  multitenant : boolean;\r\n  navigation : 'top' | 'side' | 'side-modern' // Changed: Added side-modern navigation option\r\n  progressLine: boolean;\r\n  docsBaseUrl : string;\r\n  loginStyle : string;\r\n  loginTitle : string;\r\n  loginMessage : string;\r\n  termsUrl: string;\r\n  privacyUrl: string;\r\n  siteUrl: string;\r\n  navWidth: string;\r\n  navColor: string; // Changed: Sidebar overlay color for side-modern\r\n  navImage: string; // Changed: Sidebar background image path for side-modern\r\n\r\n}\r\n\r\n// Re-export from LibClasses\r\nexport { PurchaseStatus, ReceiptStatus } from './LibClasses'; // Changed: InventoryReceiptStatus → PurchaseStatus, added ReceiptStatus\r\n\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Constants } from '../classes/Classes'; // Changed: Import for clearSessionData key preservation\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n\r\n  private useSession = false; // Changed: Flag to toggle between localStorage/sessionStorage\r\n\r\n  constructor() { }\r\n\r\n  // Changed: Set storage mode - true for sessionStorage, false for localStorage\r\n  setSessionMode(useSession: boolean) {\r\n    this.useSession = useSession;\r\n  }\r\n\r\n  // Changed: Returns the active storage engine based on mode\r\n  private getStorage(): Storage {\r\n    return this.useSession ? sessionStorage : localStorage;\r\n  }\r\n\r\n  // Store the value in the active storage\r\n  async store(storageKey: string, value: any) {\r\n    const encryptedValue = btoa(escape(JSON.stringify(value)));\r\n    await this.getStorage().setItem(storageKey, encryptedValue);\r\n  }\r\n\r\n  // Get the value from the active storage, falling back to the other storage\r\n  async get(storageKey: string) {\r\n    let ret = this.getStorage().getItem(storageKey);\r\n    if (ret === null) {\r\n      // Changed: Fallback to the other storage for backwards compatibility\r\n      ret = (this.useSession ? localStorage : sessionStorage).getItem(storageKey);\r\n    }\r\n    if (ret === null) return null;\r\n    return JSON.parse(unescape(atob(ret)));\r\n  }\r\n\r\n  // Remove from active storage\r\n  async removeStorageItem(storageKey: string) {\r\n    await this.getStorage().removeItem(storageKey);\r\n  }\r\n\r\n  // Clear active storage\r\n  async clear() {\r\n    await this.getStorage().clear();\r\n  }\r\n\r\n  // Changed: Store in localStorage always (for refresh token + remember-me flag that survive browser close)\r\n  storePersistent(storageKey: string, value: any) {\r\n    const encryptedValue = btoa(escape(JSON.stringify(value)));\r\n    localStorage.setItem(storageKey, encryptedValue);\r\n  }\r\n\r\n  // Changed: Get from localStorage always\r\n  getPersistent(storageKey: string): any {\r\n    const ret = localStorage.getItem(storageKey);\r\n    if (ret === null) return null;\r\n    return JSON.parse(unescape(atob(ret)));\r\n  }\r\n\r\n  // Changed: Remove from localStorage always\r\n  removePersistent(storageKey: string) {\r\n    localStorage.removeItem(storageKey);\r\n  }\r\n\r\n  // Changed: Clear both localStorage and sessionStorage\r\n  clearAll() {\r\n    localStorage.clear();\r\n    sessionStorage.clear();\r\n  }\r\n\r\n  // Changed: Clear session data but preserve refresh token + remember-me for \"keep me signed in\"\r\n  clearSessionData() {\r\n    const keysToPreserve = [Constants.AUTH_REFRESH_TOKEN, Constants.AUTH_REFRESH_TOKEN_EXPIRE, Constants.AUTH_REMEMBER_ME];\r\n    const preserved: { [key: string]: string | null } = {};\r\n\r\n    for (const key of keysToPreserve) {\r\n      preserved[key] = localStorage.getItem(key);\r\n    }\r\n\r\n    localStorage.clear();\r\n    sessionStorage.clear();\r\n\r\n    for (const key of keysToPreserve) {\r\n      if (preserved[key] !== null) {\r\n        localStorage.setItem(key, preserved[key]!);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Changed: Check if a key exists in either storage\r\n  hasKey(storageKey: string): boolean {\r\n    return localStorage.getItem(storageKey) !== null || sessionStorage.getItem(storageKey) !== null;\r\n  }\r\n\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\n\r\n@Component({\r\n    selector: 'lib-app-message',\r\n    templateUrl: './messageDialog.component.html',\r\n    styleUrls: ['./messageDialog.component.css'],\r\n    standalone: false\r\n})\r\n\r\nexport class messageDialog implements OnInit {\r\n\r\n  constructor(private dialogRef: MatDialogRef<messageDialog>, @Inject(MAT_DIALOG_DATA) public data) { }\r\n\r\n\r\n  ngOnInit() {\r\n\r\n    this.messageType = this.data.type\r\n    this._messageSubject = this.data.subject;\r\n    this._messageDetails = this.data.details;\r\n\r\n  }\r\n\r\n  messageType;\r\n  _messageSubject;\r\n  _messageDetails;\r\n\r\n  response(resp: string) {\r\n\r\n    this.dialogRef.close(resp);\r\n\r\n  }\r\n\r\n};\r\n\r\n\r\n\r\n","  <h2>\r\n    <div class=\"tin-between\">\r\n      <mat-label *ngIf=\"messageType=='confirm'\">Confirm</mat-label>\r\n      <mat-label *ngIf=\"messageType=='info'\">Information</mat-label>\r\n      <mat-label *ngIf=\"messageType=='error'\">Error</mat-label>\r\n      <mat-icon *ngIf=\"messageType=='confirm'\" >question_mark</mat-icon>\r\n      <mat-icon *ngIf=\"messageType=='info'\" style=\"color: steelblue;\">info</mat-icon>\r\n    </div>\r\n  </h2>\r\n\r\n  <mat-dialog-content >\r\n\r\n    <!-- Confirm -->\r\n    <div *ngIf=\"messageType=='confirm'\" class=\"alert alert-secondary\" role=\"alert\">\r\n      {{_messageDetails}}\r\n    </div>\r\n\r\n    <!-- Information -->\r\n    <div *ngIf=\"messageType=='info'\" class=\"alert alert-secondary\" role=\"alert\">\r\n\r\n      <h3 *ngIf=\"_messageSubject && _messageSubject != ''\">{{_messageSubject}}</h3>\r\n      {{_messageDetails}}\r\n\r\n    </div>\r\n\r\n    <!-- Error -->\r\n    <div *ngIf=\"messageType=='error'\">\r\n\r\n      {{_messageDetails}}\r\n\r\n    </div>\r\n\r\n  </mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n\r\n  <button id=\"btnYes\" mat-stroked-button style=\"color: green;\"  *ngIf=\"messageType=='confirm'\" (click)=\"response('yes')\" cdkFocusInitial>Yes</button>\r\n\r\n  <button id=\"btnNo\" mat-stroked-button style=\"color: red;\" *ngIf=\"messageType=='confirm'\" (click)=\"response('no')\" >No</button>\r\n\r\n  <button id=\"btnOK\" mat-stroked-button *ngIf=\"messageType=='info' || messageType=='error'\" color=\"primary\" (click)=\"response('ok')\" cdkFocusInitial>OK</button>\r\n\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { messageDialog } from \"../components/message/messageDialog.component\";\r\nimport { Observable, of } from 'rxjs';\r\nimport { mergeMap } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class MessageService {\r\n  constructor(private snackBar: MatSnackBar, public dialog: MatDialog) { }\r\n\r\n  public toast(msg: string) {\r\n    this.snackBar.open(msg, \"OK\", { duration: 5000 });\r\n  }\r\n\r\n  public info(details: string) {\r\n\r\n    let type = \"info\";\r\n\r\n    const dialogRef = this.dialog.open(messageDialog, {\r\n      width: \"600px\",\r\n      data: { type, details },\r\n    });\r\n\r\n  }\r\n\r\n  public infoWithSubject(subject: string, details: string) {\r\n\r\n    let type = \"info\";\r\n\r\n    const dialogRef = this.dialog.open(messageDialog, {\r\n      width: \"600px\",\r\n      data: { type, subject, details },\r\n    });\r\n\r\n  }\r\n\r\n  public error(details: string) {\r\n\r\n    let type = \"error\";\r\n    let subject: \"\";\r\n\r\n    const dialogRef = this.dialog.open(messageDialog, {\r\n      width: \"600px\",\r\n      data: { type, subject, details },\r\n    });\r\n\r\n  }\r\n\r\n  public confirm(msg: string): Observable<any> {\r\n\r\n    let type = \"confirm\";\r\n    let subject = \"\";\r\n    let details = msg\r\n\r\n    const dialogRef = this.dialog.open(messageDialog, {\r\n      width: \"400px\",\r\n      data: { type, subject, details },\r\n    });\r\n\r\n    return dialogRef.afterClosed().pipe(mergeMap((result) => {\r\n\r\n      return of(result);\r\n\r\n    }\r\n\r\n    ));\r\n\r\n  }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n// import * as FileSaver from 'file-saver';\r\n// import * as XLSX from 'xlsx';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ExportService {\r\n\r\n  constructor() { }\r\n\r\n  // fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\n  // fileExtension = '.xlsx';\r\n\r\n  // public exportExcel(jsonData: any[], fileName: string): void {\r\n\r\n  //   const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet(jsonData);\r\n  //   const wb: XLSX.WorkBook = { Sheets: { 'data': ws }, SheetNames: ['data'] };\r\n  //   const excelBuffer: any = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });\r\n  //   this.saveExcelFile(excelBuffer, fileName);\r\n  // }\r\n\r\n  // private saveExcelFile(buffer: any, fileName: string): void {\r\n  //   const data: Blob = new Blob([buffer], { type: this.fileType });\r\n  //   FileSaver.saveAs(data, fileName + this.fileExtension);\r\n  // }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse, } from \"@angular/common/http\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class HttpService {\r\n\r\n  constructor(private httpClient: HttpClient, private router: Router) { }\r\n\r\n\r\n  //----Set apiUrl from the data service of the project---//\r\n  public apiUrl = \"https://api.solinc.co.zw/\"; //default\r\n\r\n\r\n\r\n  //POST\r\n  public Post(service: string, data: any): Observable<any> {\r\n    return this.httpClient.post(this.apiUrl + service, data, this.httpOptions_Legacy);\r\n  }\r\n\r\n  //PUT\r\n  public Put(service: string, data: any): Observable<any> {\r\n    return this.httpClient.put(this.apiUrl + service, data, this.httpOptions_Legacy);\r\n  }\r\n\r\n\r\n  //POST RAW\r\n  public Post_Raw(url: string, data: any): Observable<any> {\r\n\r\n    return this.httpClient.post(url, data, this.httpOptions_Legacy);\r\n  }\r\n\r\n  //POST with file\r\n  public Post_WithFile(service: string, data: any, file: File) {\r\n\r\n    let formData: FormData = new FormData();\r\n\r\n    if (file) {\r\n      formData.append(\"uploadFile\", file, file.name);\r\n    }\r\n\r\n    formData.append(\"data\", JSON.stringify(data));\r\n\r\n    return this.httpClient.post(this.apiUrl + service, formData, this.httpOptions_Files);\r\n  }\r\n\r\n  //  //POST with files\r\n  public Post_FormData(service: string, formData: FormData) {\r\n\r\n    return this.httpClient.post(this.apiUrl + service, formData, this.httpOptions_Files);\r\n  }\r\n\r\n  //GET\r\n  public Get(service: string): Observable<any> {\r\n    return this.httpClient.get(this.apiUrl + service, this.httpOptions_Legacy);\r\n  }\r\n\r\n  //Get RAW\r\n  public Get_Raw(url: string): Observable<any> {\r\n    return this.httpClient.get(url, this.httpOptions_Legacy);\r\n  }\r\n\r\n  //ERROR\r\n  public Error(error: HttpErrorResponse) {\r\n    if (error.statusText == \"Unauthorized\") {\r\n      this.router.navigate([\"login\"]);\r\n      return \"Unauthorized\";\r\n    } else {\r\n      return \"Connection failed\";\r\n    }\r\n  }\r\n\r\n  private httpOptions_Legacy = {\r\n    headers: new HttpHeaders({\r\n      Accept: \"application/json\",\r\n      \"Content-Type\": \"application/json\",\r\n      Authorization: \"Basic \" + btoa(\"emptyUser:emptyToken\"),\r\n    }),\r\n    resposeType: \"json\",\r\n  };\r\n\r\n  private httpOptions_Files = {\r\n    headers: new HttpHeaders({\r\n      Authorization: \"Basic \" + btoa(\"tnyagato:j5Toszfr@ys\"),\r\n    }),\r\n    resposeType: \"json\",\r\n  };\r\n}\r\n","// import { Core } from 'tin-core';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Core } from '../classes/TinCore';\r\nimport { LogLevel } from \"../classes/LibClasses\";\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class LogService {\r\n  constructor() { }\r\n\r\n  level: LogLevel = LogLevel.All;\r\n\r\n  logToConsole: boolean = true;\r\n\r\n  logToApi: boolean = false;\r\n\r\n  debug(msg: string, ...optionalParams: any[]) {\r\n    this.writeToLog(msg, LogLevel.Debug, optionalParams);\r\n  }\r\n\r\n  info(msg: string, ...optionalParams: any[]) {\r\n    this.writeToLog(msg, LogLevel.Info, optionalParams);\r\n  }\r\n\r\n  warn(msg: string, ...optionalParams: any[]) {\r\n    this.writeToLog(msg, LogLevel.Warn, optionalParams);\r\n  }\r\n\r\n  error(msg: string, ...optionalParams: any[]) {\r\n    this.writeToLog(msg, LogLevel.Error, optionalParams);\r\n  }\r\n\r\n  fatal(msg: string, ...optionalParams: any[]) {\r\n    this.writeToLog(msg, LogLevel.Fatal, optionalParams);\r\n  }\r\n\r\n  log(msg: string, ...optionalParams: any[]) {\r\n    this.writeToLog(msg, LogLevel.All, optionalParams);\r\n\r\n  }\r\n\r\n  private writeToLog(msg: string, level: LogLevel, params: any[]) {\r\n\r\n    if (this.shouldLog(level)) {\r\n\r\n      // Build log string\r\n      let value: string = Core.getFormatedDate(Date(), false).replace(\"T\", \" \");\r\n      // value += \" - Type: \" + LogLevel[this.level];\r\n      value += \" - Message: \" + msg;\r\n\r\n\r\n      if (params.length) {\r\n        value += \" - Extra Info: \" + this.formatParams(params);\r\n      }\r\n\r\n      // Log the value\r\n      if (this.logToConsole) {\r\n        console.log(value);\r\n      }\r\n\r\n      if (this.logToApi) {\r\n        //Call API post\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  private formatParams(params: any[]): string {\r\n\r\n    let ret: string = params.join(\",\");\r\n    // Is there at least one object in the array?\r\n    if (params.some((p) => typeof p == \"object\")) {\r\n      ret = \"\";\r\n      // Build comma-delimited string\r\n      for (let item of params) {\r\n        ret += JSON.stringify(item) + \",\";\r\n      }\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  private shouldLog(level: LogLevel): boolean {\r\n\r\n    let ret: boolean = false;\r\n\r\n    if (\r\n      (level >= this.level && level !== LogLevel.Off) ||\r\n      this.level === LogLevel.All\r\n    ) {\r\n      ret = true;\r\n    }\r\n\r\n    return ret;\r\n  }\r\n}\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport * as signalR from '@microsoft/signalr';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n\r\n// Entity change event interface for real-time table updates\r\nexport interface EntityChangeEvent {\r\n  entityName: string;\r\n  data: any;\r\n}\r\n\r\n// Changed: Notification toast event from backend NotificationService\r\nexport interface NotificationEvent {\r\n  message: string;\r\n  category: string;\r\n  type: string;\r\n  sender: string;\r\n}\r\n\r\n// Changed: Consolidated SignalR service — single hub connection for both notifications and entity broadcasts\r\n@Injectable({ providedIn: 'root' })\r\nexport class SignalRService {\r\n  private hubConnection: signalR.HubConnection | null = null;\r\n  private notificationCount = new BehaviorSubject<number>(0);\r\n  notificationCount$ = this.notificationCount.asObservable();\r\n\r\n  private entityCreated = new Subject<EntityChangeEvent>();\r\n  private entityUpdated = new Subject<EntityChangeEvent>();\r\n  private entityDeleted = new Subject<EntityChangeEvent>();\r\n  entityCreated$ = this.entityCreated.asObservable();\r\n  entityUpdated$ = this.entityUpdated.asObservable();\r\n  entityDeleted$ = this.entityDeleted.asObservable();\r\n\r\n  // Changed: Observable for notification toast events from backend NotificationService\r\n  private notificationReceived = new Subject<NotificationEvent>();\r\n  notificationReceived$ = this.notificationReceived.asObservable();\r\n\r\n  // Changed: Agent chat message and typing indicator streams (renamed from assistant*)\r\n  private agentMessage = new Subject<any>();\r\n  private agentTyping = new Subject<boolean>();\r\n  agentMessage$ = this.agentMessage.asObservable();\r\n  agentTyping$ = this.agentTyping.asObservable();\r\n\r\n  // Callback for reconnection — notification count refresh (set by NotificationsService)\r\n  onReconnected: (() => void) | null = null;\r\n  // Callback for reconnection — tables should reload (set by table components)\r\n  onDataReconnected: (() => void) | null = null;\r\n\r\n  // Changed: Single connection state observable — used by real-time table indicators\r\n  private dataHubConnected = new BehaviorSubject<boolean>(false);\r\n  dataHubConnected$ = this.dataHubConnected.asObservable();\r\n\r\n  private currentToken: string = ''; // Changed: Live token reference for SignalR reconnection\r\n\r\n  // Changed: Single startConnection method handles both notification and entity change listeners\r\n  startConnection(hubUrl: string, token: string) {\r\n    // Changed: Allow disabling real-time via localStorage flag (used by E2E tests)\r\n    if (localStorage.getItem('disableRealTime') === 'true') return;\r\n\r\n    this.currentToken = token; // Changed: Store token so it can be updated after refresh\r\n    if (this.hubConnection && this.hubConnection.state !== signalR.HubConnectionState.Disconnected) return;\r\n    if (this.hubConnection) this.stopConnection();\r\n\r\n    this.hubConnection = new signalR.HubConnectionBuilder()\r\n      .withUrl(hubUrl, { accessTokenFactory: () => this.currentToken }) // Changed: Use live reference so reconnections use the latest token\r\n      .withAutomaticReconnect([0, 2000, 5000, 10000, 30000, 60000, 60000, 60000, 60000, 60000]) // Changed: Extended retry policy for entity broadcast reliability\r\n      .build();\r\n\r\n    // Changed: Notification count listener (previously on separate notification hub)\r\n    this.hubConnection.on('ReceiveNotificationCount', (count: number) => {\r\n      this.notificationCount.next(count);\r\n    });\r\n\r\n    // Changed: Notification toast listener — receives full notification from backend NotificationService\r\n    this.hubConnection.on('ReceiveNotification', (event: NotificationEvent) => {\r\n      this.notificationReceived.next(event);\r\n    });\r\n\r\n    // Changed: Agent chat listeners for real-time message delivery (renamed from Assistant*)\r\n    this.hubConnection.on('ReceiveAgentMessage', (msg: any) => {\r\n      this.agentMessage.next(msg);\r\n    });\r\n\r\n    this.hubConnection.on('AgentTyping', (typing: boolean) => {\r\n      this.agentTyping.next(typing);\r\n    });\r\n\r\n    // Changed: Entity CRUD listeners (previously on separate data hub)\r\n    this.hubConnection.on('EntityCreated', (entityName: string, data: any) => {\r\n      this.entityCreated.next({ entityName, data });\r\n    });\r\n\r\n    this.hubConnection.on('EntityUpdated', (entityName: string, data: any) => {\r\n      this.entityUpdated.next({ entityName, data });\r\n    });\r\n\r\n    this.hubConnection.on('EntityDeleted', (entityName: string, data: any) => {\r\n      this.entityDeleted.next({ entityName, data });\r\n    });\r\n\r\n    // Changed: Single reconnect handler covers both notification refresh and table reload\r\n    this.hubConnection.onreconnected(() => {\r\n      this.dataHubConnected.next(true);\r\n      if (this.onReconnected) this.onReconnected();\r\n      if (this.onDataReconnected) this.onDataReconnected();\r\n    });\r\n\r\n    // Changed: Track disconnection state for connection indicator\r\n    this.hubConnection.onclose(() => {\r\n      this.dataHubConnected.next(false);\r\n      setTimeout(() => {\r\n        if (this.hubConnection?.state === signalR.HubConnectionState.Disconnected) {\r\n          this.hubConnection.start()\r\n            .then(() => this.dataHubConnected.next(true))\r\n            .catch(() => this.dataHubConnected.next(false));\r\n        }\r\n      }, 60000);\r\n    });\r\n    this.hubConnection.onreconnecting(() => this.dataHubConnected.next(false));\r\n\r\n    this.hubConnection.start()\r\n      .then(() => this.dataHubConnected.next(true))\r\n      .catch(err => {\r\n        this.dataHubConnected.next(false);\r\n        console.error('SignalR connection error:', err);\r\n      });\r\n  }\r\n\r\n  // Changed: Update the token used for SignalR reconnection (called after silent refresh)\r\n  updateToken(token: string) {\r\n    this.currentToken = token;\r\n  }\r\n\r\n  stopConnection() {\r\n    if (this.hubConnection) {\r\n      this.hubConnection.stop();\r\n      this.hubConnection = null;\r\n      this.dataHubConnected.next(false); // Changed: Mark disconnected on stop\r\n    }\r\n  }\r\n}\r\n","import { MessageService } from './message.service';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { StorageService } from './storage.service';\r\nimport { LogService } from './log.service';\r\nimport { Constants } from '../classes/Classes';\r\nimport { HttpService } from './http.service';\r\nimport { SocialAuthService, SocialUser } from '@abacritt/angularx-social-login';\r\nimport { Role } from '../classes/LibClasses';\r\nimport { SignalRService } from './signalr.service'; // Changed: Added for stopping SignalR connection on logout\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\n\r\nexport class AuthService {\r\n\r\n  private googleAuthInitialized = false;\r\n  private isRefreshing = false; // Changed: Guard to prevent concurrent refresh calls\r\n  private refreshTimer: any = null; // Changed: Proactive token refresh timer\r\n\r\n  private socialUserSource = new BehaviorSubject<SocialUser | null>(null);\r\n  public socialUserObserv = this.socialUserSource.asObservable();\r\n\r\n  constructor(private _route: ActivatedRoute, private socialService: SocialAuthService, private storage: StorageService, public router: Router, private httpService: HttpService, private messageService: MessageService, private logService: LogService, private signalRService: SignalRService) { // Changed: Added SignalRService injection\r\n\r\n    this.initializeGoogleAuth();\r\n    this.initVisibilityRefresh(); // Changed: Refresh token when tab becomes visible after being hidden\r\n  }\r\n\r\n\r\n  private initializeGoogleAuth() {\r\n    if (this.googleAuthInitialized) {\r\n      return;\r\n    }\r\n    this.googleAuthInitialized = true;\r\n\r\n\r\n    this.socialService.authState.subscribe({\r\n      next: (socialUser: SocialUser) => {\r\n        this.socialUserSource.next(socialUser);\r\n      },\r\n      error: (error) => {\r\n\r\n        console.debug('Google Sign-In initialization error (expected if not using Google auth):', error?.message);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Changed: Enhanced clearSession with optional server-side revocation\r\n  clearSession(revokeOnServer: boolean = false) {\r\n    if (revokeOnServer) {\r\n      // Changed: Revoke only this device's refresh token — other devices keep their sessions\r\n      const refreshToken = this.storage.getPersistent(Constants.AUTH_REFRESH_TOKEN);\r\n      if (refreshToken) {\r\n        this.httpService.Post('User/revoke', { refreshToken }).subscribe({\r\n          error: () => {} // Silently ignore errors during logout\r\n        });\r\n      }\r\n    }\r\n\r\n    if (this.refreshTimer) { clearTimeout(this.refreshTimer); this.refreshTimer = null; } // Changed: Cancel proactive refresh timer\r\n    this.signalRService.stopConnection(); // Changed: Stop consolidated SignalR connection before clearing session\r\n    this.Updateloggedin(false);\r\n    this.UpdateAutoLogin(false);\r\n    this.UpdateRole(new Role());\r\n    this.UpdateToken(''); // Changed: Clear in-memory token\r\n    this.UpdateTokenExpire(''); // Changed: Clear in-memory token expiry\r\n\r\n    if (revokeOnServer) {\r\n      this.storage.clearAll(); // Changed: Full logout clears everything including refresh token\r\n    } else {\r\n      this.storage.clearSessionData(); // Changed: Session expired — preserve refresh token for \"remember me\"\r\n    }\r\n\r\n    this.socialService.signOut();\r\n\r\n  }\r\n\r\n  sessionExpired(){\r\n\r\n    this.clearSession(false) // Changed: Don't revoke on server, token just expired\r\n\r\n    let url = new URL(window.location.href);\r\n    let path = url.hash.replace(\"#/\", \"\");\r\n\r\n    this.router.navigate([\"login\"], {\r\n      relativeTo: this._route,\r\n      queryParams: { redirectTo: path },\r\n      queryParamsHandling: 'merge',\r\n      skipLocationChange: false\r\n    });\r\n\r\n  }\r\n\r\n  logoff() {\r\n    this.clearSession(true) // Changed: Revoke refresh tokens on explicit logout\r\n\r\n    this.router.navigate([\"login\"]);\r\n  }\r\n\r\n  //Logged in\r\n  private loggedin: boolean = false;\r\n  private loggedinSource = new BehaviorSubject(this.loggedin);\r\n  public loggedinObserv = this.loggedinSource.asObservable();\r\n  Updateloggedin(loggedin: boolean) {\r\n    this.loggedinSource.next(loggedin);\r\n    this.loggedin = loggedin;\r\n  }\r\n\r\n  //autoLogin\r\n  private autoLogin: boolean = false;\r\n  private autoLoginSource = new BehaviorSubject(this.autoLogin);\r\n  public autoLoginObserv = this.autoLoginSource.asObservable();\r\n  UpdateAutoLogin(autoLogin: boolean) {\r\n    this.autoLoginSource.next(autoLogin);\r\n    this.autoLogin = autoLogin;\r\n  }\r\n\r\n\r\n  //Token\r\n  private token: string = \"\";\r\n  public tokenSource = new BehaviorSubject(this.token);\r\n  public tokenObserv = this.tokenSource.asObservable();\r\n  UpdateToken(newToken: string) {\r\n    this.tokenSource.next(newToken);\r\n\r\n  }\r\n\r\n  //TokenExpire\r\n  private tokenExpire: string = \"\";\r\n  public tokenExpireSource = new BehaviorSubject(this.tokenExpire);\r\n  public tokenExpireObserv = this.tokenExpireSource.asObservable();\r\n  UpdateTokenExpire(newTokenExpire: string) {\r\n    this.tokenExpireSource.next(newTokenExpire);\r\n\r\n  }\r\n\r\n  //Current User\r\n  public currentUser: string = \"tnyagato\";\r\n  private currentUserSource = new BehaviorSubject(this.currentUser);\r\n  public currentUserObserv = this.currentUserSource.asObservable();\r\n  UpdateCurrentUser(newUser: string) {\r\n    this.currentUserSource.next(newUser.toLocaleLowerCase());\r\n    this.currentUser = newUser.toLocaleLowerCase();\r\n  }\r\n\r\n  //Line Manager\r\n  private islineManager: boolean = false;\r\n  private isLineManagerSource = new BehaviorSubject(this.islineManager);\r\n  public isLineManagerObserv = this.isLineManagerSource.asObservable();\r\n  UpdateIsLineManager(manager: boolean) {\r\n    this.isLineManagerSource.next(manager);\r\n  }\r\n\r\n  //Roles\r\n  private currentRole = new Role;\r\n  public currentRoleSource = new BehaviorSubject(this.currentRole);\r\n  public myRoleObserv = this.currentRoleSource.asObservable();\r\n  UpdateRole(role) {\r\n    this.currentRoleSource.next(role);\r\n  }\r\n\r\n  //Logged in FirstName\r\n  private loggedUserSource = new BehaviorSubject(\"tnyagato\");\r\n  public loggedUserFullName = this.loggedUserSource.asObservable();\r\n  updateLoggedUserFullName(userName: string) {\r\n    this.loggedUserSource.next(userName);\r\n  }\r\n\r\n  //TenantName\r\n  private tenantNameSource = new BehaviorSubject(\"Tenant Name\");\r\n  public tenantNameObserv = this.tenantNameSource.asObservable();\r\n  updateTenantName(tenantName: string) {\r\n    this.tenantNameSource.next(tenantName);\r\n  }\r\n\r\n\r\n  //Authorisation\r\n  isAuthorised(capName: string): boolean {\r\n\r\n    if (!this.currentRoleSource.value[capName]) {\r\n      // this.logService.info(`authorise: ${this.currentRoleSource.value.roleName} not authorised for ${capName}`);\r\n      this.router.navigate([\"home\"]);\r\n      this.messageService.toast(`Unauthorised: ${capName}`);\r\n\r\n      return false;\r\n    } else {\r\n      return true;\r\n    }\r\n\r\n  }\r\n\r\n  // Changed: Pure validation — no side effects. Callers handle refresh/redirect.\r\n  isValidToken(): boolean {\r\n    let tokenExpire: Date = new Date(this.tokenExpireSource.value);\r\n    let nowDate: Date = new Date();\r\n    return tokenExpire > nowDate;\r\n  }\r\n\r\n  // Changed: Centralized handler for storing all auth data from login/refresh response\r\n  applyLoginResponse(data: any, rememberMe: boolean) {\r\n    // Set storage mode: sessionStorage when not remembered, localStorage when remembered\r\n    this.storage.setSessionMode(!rememberMe);\r\n\r\n    // Store remember-me flag persistently (survives browser close)\r\n    this.storage.storePersistent(Constants.AUTH_REMEMBER_ME, rememberMe);\r\n\r\n    // Update in-memory state\r\n    this.Updateloggedin(true);\r\n    this.UpdateToken(data.token);\r\n    this.UpdateTokenExpire(data.expiration);\r\n    this.signalRService.updateToken(data.token); // Changed: Keep SignalR reconnection token in sync\r\n    this.UpdateRole(data.role);\r\n    this.updateLoggedUserFullName(data.firstName);\r\n    this.updateTenantName(data.tenantName);\r\n    if (data.userName) this.UpdateCurrentUser(data.userName); // Changed: Restore username after silent refresh\r\n\r\n    // Store session data in active storage\r\n    this.storage.store(Constants.AUTH_TOKEN, data.token);\r\n    this.storage.store(Constants.AUTH_TOKEN_EXPIRE, data.expiration);\r\n    this.storage.store(Constants.AUTH_ROLES, JSON.stringify(data.role));\r\n    this.storage.store(Constants.AUTH_NAME, data.firstName);\r\n    this.storage.store(Constants.AUTH_TENANT_NAME, data.tenantName);\r\n    if (data.userName) this.storage.store(Constants.AUTH_USER, data.userName); // Changed: Persist username so checkAuthentication finds AUTH_USER after app restart\r\n\r\n    // Store refresh token persistently if provided (always in localStorage)\r\n    if (data.refreshToken) {\r\n      this.storage.storePersistent(Constants.AUTH_REFRESH_TOKEN, data.refreshToken);\r\n      this.storage.storePersistent(Constants.AUTH_REFRESH_TOKEN_EXPIRE, data.refreshTokenExpiry);\r\n    }\r\n\r\n    this.scheduleTokenRefresh(data.expiration); // Changed: Schedule proactive refresh before token expires\r\n  }\r\n\r\n  // Changed: Schedule a silent refresh 5 minutes before the access token expires\r\n  private scheduleTokenRefresh(expiration: string) {\r\n    if (this.refreshTimer) clearTimeout(this.refreshTimer); // Clear any existing timer\r\n\r\n    const expiresAt = new Date(expiration).getTime();\r\n    const now = Date.now();\r\n    const refreshIn = expiresAt - now - (5 * 60 * 1000); // 5 minutes before expiry\r\n\r\n    if (refreshIn <= 0) return; // Token already expired or about to — reactive refresh will handle it\r\n\r\n    this.refreshTimer = setTimeout(() => {\r\n      this.silentRefresh().then(success => {\r\n        if (!success) this.sessionExpired();\r\n      });\r\n    }, refreshIn);\r\n  }\r\n\r\n  // Changed: When tab becomes visible, check if token needs immediate refresh\r\n  private initVisibilityRefresh() {\r\n    document.addEventListener('visibilitychange', () => {\r\n      if (document.visibilityState !== 'visible') return;\r\n      if (!this.loggedin) return;\r\n\r\n      const expire = this.tokenExpireSource.value;\r\n      if (!expire) return;\r\n\r\n      const expiresAt = new Date(expire).getTime();\r\n      const now = Date.now();\r\n      const minutesLeft = (expiresAt - now) / 60000;\r\n\r\n      // If token expires in less than 10 minutes or is already expired, refresh immediately\r\n      if (minutesLeft < 10 && this.hasRefreshToken()) {\r\n        this.silentRefresh().then(success => {\r\n          if (!success) this.sessionExpired();\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  // Changed: Non-destructive check — only returns true if token is genuinely valid (not expired)\r\n  hasValidSession(): boolean {\r\n    // Check in-memory state first\r\n    if (this.loggedin && this.tokenExpireSource.value) {\r\n      const tokenExpire = new Date(this.tokenExpireSource.value);\r\n      if (tokenExpire > new Date()) return true;\r\n    }\r\n\r\n    // Changed: Check localStorage for non-expired token (not just existence)\r\n    const localExpiry = localStorage.getItem(Constants.AUTH_TOKEN_EXPIRE);\r\n    if (localExpiry) {\r\n      try {\r\n        const expiry = new Date(JSON.parse(unescape(atob(localExpiry))));\r\n        if (expiry > new Date()) return true;\r\n      } catch { /* ignore parse errors */ }\r\n    }\r\n\r\n    // Changed: Check sessionStorage for non-expired token\r\n    const sessionExpiry = sessionStorage.getItem(Constants.AUTH_TOKEN_EXPIRE);\r\n    if (sessionExpiry) {\r\n      try {\r\n        const expiry = new Date(JSON.parse(unescape(atob(sessionExpiry))));\r\n        if (expiry > new Date()) return true;\r\n      } catch { /* ignore parse errors */ }\r\n    }\r\n\r\n    // Changed: Refresh token alone does NOT count as valid session — caller must handle refresh separately\r\n    return false;\r\n  }\r\n\r\n  // Changed: Check if a refresh token exists (for login page to attempt silent refresh)\r\n  hasRefreshToken(): boolean {\r\n    const refreshToken = this.storage.getPersistent(Constants.AUTH_REFRESH_TOKEN);\r\n    return refreshToken !== null;\r\n  }\r\n\r\n  // Shared entry point for any page that needs to auto-redirect authenticated users\r\n  // Returns true if session is active or was successfully restored via silent refresh\r\n  async tryRestoreSession(): Promise<boolean> {\r\n    if (this.hasValidSession()) return true;\r\n    if (this.hasRefreshToken()) return await this.silentRefresh();\r\n    return false;\r\n  }\r\n\r\n  // Changed: Silently refresh the JWT using the stored refresh token\r\n  silentRefresh(): Promise<boolean> {\r\n    if (this.isRefreshing) return Promise.resolve(false); // Prevent concurrent refreshes\r\n    this.isRefreshing = true;\r\n\r\n    const refreshToken = this.storage.getPersistent(Constants.AUTH_REFRESH_TOKEN);\r\n    if (!refreshToken) {\r\n      this.isRefreshing = false;\r\n      return Promise.resolve(false);\r\n    }\r\n\r\n    return new Promise((resolve) => {\r\n      this.httpService.Post('User/refresh', { refreshToken }).subscribe({\r\n        next: (response: any) => {\r\n          this.isRefreshing = false;\r\n          if (response.success) {\r\n            const rememberMe = this.storage.getPersistent(Constants.AUTH_REMEMBER_ME) ?? true;\r\n            this.applyLoginResponse(response.data, rememberMe);\r\n            resolve(true);\r\n          } else {\r\n            // Changed: Server explicitly rejected the token (revoked/expired) — safe to clear\r\n            const currentToken = this.storage.getPersistent(Constants.AUTH_REFRESH_TOKEN);\r\n            if (currentToken === refreshToken) {\r\n              this.storage.removePersistent(Constants.AUTH_REFRESH_TOKEN);\r\n              this.storage.removePersistent(Constants.AUTH_REFRESH_TOKEN_EXPIRE);\r\n              this.storage.removePersistent(Constants.AUTH_REMEMBER_ME);\r\n            }\r\n            resolve(false);\r\n          }\r\n        },\r\n        error: () => {\r\n          this.isRefreshing = false;\r\n          // Changed: Network error (device waking up, no connectivity) — do NOT clear the refresh token.\r\n          // The token may still be valid; next visibility change or 401 interceptor will retry.\r\n          resolve(false);\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n\r\n  // Changed: Returns Promise<boolean> to properly await refresh instead of optimistically returning true\r\n  checkAuthentication(): Promise<boolean> {\r\n\r\n    if (this.loggedin && this.isValidToken()) {\r\n      return Promise.resolve(true);\r\n    }\r\n\r\n    // Changed: Restore storage mode from persistent remember-me flag\r\n    const rememberMe = this.storage.getPersistent(Constants.AUTH_REMEMBER_ME);\r\n    if (rememberMe !== null) {\r\n      this.storage.setSessionMode(!rememberMe);\r\n    }\r\n\r\n    if (this.storage.hasKey(Constants.AUTH_USER)) {\r\n\r\n      this.Updateloggedin(true);\r\n\r\n      this.storage.get(Constants.AUTH_USER).then((resp: any) => {\r\n        this.UpdateCurrentUser(resp);\r\n      });\r\n\r\n      this.storage.get(Constants.AUTH_NAME).then((resp: any) => {\r\n        this.updateLoggedUserFullName(resp);\r\n      });\r\n\r\n      this.storage.get(Constants.AUTH_ROLES).then((resp) => {\r\n        let ret = JSON.parse(resp);\r\n\r\n        this.UpdateRole(ret);\r\n      });\r\n\r\n      this.storage.get(Constants.AUTH_TENANT_NAME).then((resp: any) => {\r\n        this.updateTenantName(resp);\r\n      });\r\n\r\n      // Changed: Load token and check validity — if expired, await silentRefresh before allowing navigation\r\n      return this.storage.get(Constants.AUTH_TOKEN).then((token: any) => {\r\n        this.UpdateToken(token);\r\n        return this.storage.get(Constants.AUTH_TOKEN_EXPIRE);\r\n      }).then((expire: any) => {\r\n        this.UpdateTokenExpire(expire);\r\n\r\n        const tokenExpire = new Date(expire);\r\n        if (tokenExpire > new Date()) {\r\n          return true; // Token still valid\r\n        }\r\n\r\n        // Token expired — attempt silent refresh and wait for result\r\n        const refreshToken = this.storage.getPersistent(Constants.AUTH_REFRESH_TOKEN);\r\n        if (refreshToken) {\r\n          return this.silentRefresh().then((success) => {\r\n            if (!success) {\r\n              this.sessionExpired();\r\n            }\r\n            return success;\r\n          });\r\n        }\r\n\r\n        this.sessionExpired();\r\n        return false;\r\n      });\r\n    }\r\n\r\n    // Changed: Check for persistent refresh token when no session data exists\r\n    const refreshToken = this.storage.getPersistent(Constants.AUTH_REFRESH_TOKEN);\r\n    if (refreshToken) {\r\n      // Changed: Wait for refresh to complete before deciding\r\n      return this.silentRefresh().then((success) => {\r\n        if (!success) {\r\n          this.sessionExpired();\r\n        }\r\n        return success;\r\n      });\r\n    }\r\n\r\n    this.sessionExpired();\r\n    return Promise.resolve(false);\r\n  }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { Action, ApiResponse, AppConfig, Button, CacheConfig, CapItem, DetailsDialogConfig, FormConfig, TableConfig } from '../classes/Classes';\r\nimport { BehaviorSubject, finalize, Observable, of, share, tap, timeout } from 'rxjs';\r\nimport { HttpService } from './http.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { SignupData, User } from '../classes/LibClasses'; // Changed: Added SignupData import\r\nimport { AuthService } from './auth.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DataServiceLib {\r\n\r\n  constructor(private httpService: HttpService, public router: Router, private route: ActivatedRoute, private authService: AuthService) {\r\n\r\n    this.appConfig.appName = \"App-Name\";\r\n    this.appConfig.logo = \"./assets/logo.png\"\r\n    this.appConfig.ADAuth = true;\r\n\r\n    this.appConfig.capItems = [this.capMultitenant, this.capAdmin, this.capHome];\r\n\r\n\r\n    this.capHome.name = \"cap1\";\r\n    this.capHome.display = \"Home\";\r\n    this.capHome.link = \"home\";\r\n    this.capHome.icon =\"home\";\r\n\r\n\r\n    this.capAdmin.name = \"cap2\";\r\n    this.capAdmin.display = \"Admin\";\r\n    this.capAdmin.icon = \"security\"\r\n    this.capAdmin.capSubItems = [this.capUsers, this.capRoles, this.capLogs, this.capSettings, this.capSubscription, this.capBilling]; // Changed: Added Subscription & Billing — tenant-specific settings belong under Admin\r\n\r\n    this.capUsers.name = \"cap3\";\r\n    this.capUsers.display = \"Users\";\r\n    this.capUsers.link = \"home/admin/users\";\r\n    this.capUsers.icon = \"group\";\r\n\r\n    this.capRoles.name = \"cap4\"\r\n    this.capRoles.display = \"Roles\";\r\n    this.capRoles.link = \"home/admin/roles\";\r\n    this.capRoles.icon = \"work\";\r\n\r\n    this.capLogs.name = \"cap5\"\r\n    this.capLogs.display = \"Logs\";\r\n    this.capLogs.link = \"home/admin/logs\";\r\n    this.capLogs.icon = \"text_snippet\";\r\n\r\n    this.capSettings.name = \"cap6\"\r\n    this.capSettings.display = \"Settings\";\r\n    this.capSettings.link = \"home/admin/settings\";\r\n    this.capSettings.icon =\"settings\";\r\n\r\n\r\n    this.capMultitenant.name = \"cap7\"\r\n    this.capMultitenant.display = \"Multitenant\";\r\n    this.capMultitenant.icon = \"apartment\"\r\n    this.capMultitenant.capSubItems = [this.capTenants, this.capMembership, this.capPlans, this.capFeatures, this.capPlanFeatures]; // Changed: Moved Subscription & Billing to Admin — they are tenant-specific settings\r\n\r\n    this.capTenants.name = \"cap8\"\r\n    this.capTenants.display = \"Tenants\";\r\n    this.capTenants.link = \"home/tenancy/tenants\";\r\n\r\n    this.capMembership.name = \"cap9\"\r\n    this.capMembership.display = \"Membership\";\r\n    this.capMembership.link = \"home/tenancy/membership\";\r\n\r\n    this.capPlans.name = \"cap10\"\r\n    this.capPlans.display = \"Plans\";\r\n    this.capPlans.link = \"home/tenancy/plans\";\r\n\r\n    // Added: Feature registry capability\r\n    this.capFeatures.name = \"cap80\"\r\n    this.capFeatures.display = \"Features\";\r\n    this.capFeatures.link = \"home/tenancy/features\";\r\n    this.capFeatures.icon = \"extension\";\r\n\r\n    // Added: Plan-Feature mapping capability\r\n    this.capPlanFeatures.name = \"cap81\"\r\n    this.capPlanFeatures.display = \"Plan Features\";\r\n    this.capPlanFeatures.link = \"home/tenancy/plan-features\";\r\n    this.capPlanFeatures.icon = \"checklist\";\r\n\r\n    // Added: Subscription management capability\r\n    this.capSubscription.name = \"cap82\"\r\n    this.capSubscription.display = \"Subscription\";\r\n    this.capSubscription.link = \"home/tenancy/subscription\";\r\n    this.capSubscription.icon = \"card_membership\";\r\n\r\n    // Added: Billing & invoice history capability\r\n    this.capBilling.name = \"cap83\"\r\n    this.capBilling.display = \"Billing\";\r\n    this.capBilling.link = \"home/tenancy/billing\";\r\n    this.capBilling.icon = \"receipt_long\";\r\n\r\n    this.capGeneral.name = \"cap11\"\r\n    this.capGeneral.display = \"General\";\r\n    this.capGeneral.capSubItems = [this.capNotifications,this.capApprovals,this.capCustomers, this.capSuppliers, this.capCategories, this.capSubCategories, this.capBrands, this.capTasks];\r\n\r\n\r\n\r\n    this.capCustomers.name = \"cap12\"\r\n    this.capCustomers.display = \"Customers\";\r\n    this.capCustomers.link = \"home/general/customers\";\r\n    this.capCustomers.icon = \"group\"\r\n\r\n    this.capCategories.name = \"cap13\"\r\n    this.capCategories.display = \"Categories\";\r\n    this.capCategories.link = \"home/general/categories\";\r\n    this.capCategories.icon = \"category\"\r\n\r\n    this.capSubCategories.name = \"cap43\" // Changed: Moved from cap13 to cap43 — resolve duplicate with capCategories\r\n    this.capSubCategories.display = \"Sub Categories\";\r\n    this.capSubCategories.link = \"home/general/subcategories\";\r\n    this.capSubCategories.icon = \"category\"\r\n\r\n    this.capBrands.name = \"cap14\"\r\n    this.capBrands.display = \"Brands\";\r\n    this.capBrands.link = \"home/general/brands\";\r\n    this.capBrands.icon = \"loyalty\"\r\n\r\n    // Added: GPT Cache capability\r\n    this.capGPTCaches.name = \"cap65\" // Changed: Moved from cap104 to cap65 — library range consolidation\r\n    this.capGPTCaches.display = \"GPT Cache\";\r\n    this.capGPTCaches.link = \"home/admin/gpt-caches\";\r\n    this.capGPTCaches.icon = \"memory\"\r\n\r\n    // Changed: Preferences capability for tenant-level customization\r\n    this.capPreferences.name = \"cap66\"; // Changed: Moved from cap105 to cap66 — library range consolidation\r\n    this.capPreferences.display = \"Preferences\";\r\n    this.capPreferences.link = \"home/admin/preferences\";\r\n    this.capPreferences.icon = \"tune\";\r\n\r\n    this.capSuppliers.name = \"cap15\"\r\n    this.capSuppliers.display = \"Suppliers\";\r\n    this.capSuppliers.link = \"home/general/suppliers\";\r\n    this.capSuppliers.icon = \"groups\"\r\n\r\n    this.capTasks.name = \"cap16\"\r\n    this.capTasks.display = \"Tasks\";\r\n    this.capTasks.link = \"home/general/tasks\";\r\n    this.capTasks.icon = \"check_box\"\r\n\r\n\r\n    this.capHR.name = \"cap17\"\r\n    this.capHR.display = \"HR\";\r\n    this.capHR.link = \"home/hr/employees\";\r\n    this.capHR.icon = \"diversity_3\"\r\n    this.capHR.capSubItems = [this.capDepartments, this.capPositions, this.capEmployees,]\r\n\r\n    this.capEmployees.name = \"cap18\"\r\n    this.capEmployees.display = \"Employees\";\r\n    this.capEmployees.link = \"home/hr/employees\";\r\n    this.capEmployees.icon = \"group\"\r\n\r\n    this.capDepartments.name = \"cap19\"\r\n    this.capDepartments.display = \"Departments\";\r\n    this.capDepartments.link = \"home/hr/departments\";\r\n    this.capDepartments.icon = \"business_center\"\r\n\r\n    this.capPositions.name = \"cap20\"\r\n    this.capPositions.display = \"Positions\";\r\n    this.capPositions.link = \"home/hr/positions\";\r\n    this.capPositions.icon = \"picture_in_picture_medium\"\r\n\r\n    // Changed: Added Payroll module sidebar section\r\n    this.capPayroll.name = \"cap72\" // Changed: Moved from cap110 to cap72 — library range consolidation\r\n    this.capPayroll.display = \"Payroll\";\r\n    this.capPayroll.icon = \"payments\"\r\n    this.capPayroll.capSubItems = [this.capPayrollDashboard, this.capSalaryStructures, this.capStatutoryDeductions, this.capPayrollRuns, this.capCommissionConfigs, this.capCommissionEntries, this.capSalaryAdvances, this.capOvertimeEntries] // Changed: Added payroll dashboard as first item\r\n\r\n    this.capPayrollDashboard.name = \"cap72\"; // Changed: Reuses module cap number for dashboard visibility\r\n    this.capPayrollDashboard.display = \"Dashboard\";\r\n    this.capPayrollDashboard.link = \"home/payroll/dashboard\";\r\n    this.capPayrollDashboard.icon = \"dashboard\";\r\n\r\n    this.capSalaryStructures.name = \"cap73\" // Changed: Moved from cap111 to cap73 — library range consolidation\r\n    this.capSalaryStructures.display = \"Salary Structures\";\r\n    this.capSalaryStructures.link = \"home/payroll/salary-structures\";\r\n    this.capSalaryStructures.icon = \"account_tree\"\r\n\r\n    this.capStatutoryDeductions.name = \"cap74\" // Changed: Moved from cap112 to cap74 — library range consolidation\r\n    this.capStatutoryDeductions.display = \"Statutory Deductions\";\r\n    this.capStatutoryDeductions.link = \"home/payroll/statutory-deductions\";\r\n    this.capStatutoryDeductions.icon = \"gavel\"\r\n\r\n    this.capPayrollRuns.name = \"cap75\" // Changed: Moved from cap113 to cap75 — library range consolidation\r\n    this.capPayrollRuns.display = \"Payroll Runs\";\r\n    this.capPayrollRuns.link = \"home/payroll/runs\";\r\n    this.capPayrollRuns.icon = \"play_circle\"\r\n\r\n    // Changed: Added Commission Config sidebar item\r\n    this.capCommissionConfigs.name = \"cap76\"\r\n    this.capCommissionConfigs.display = \"Commission Config\";\r\n    this.capCommissionConfigs.link = \"home/payroll/commission-configs\";\r\n    this.capCommissionConfigs.icon = \"percent\"\r\n\r\n    // Changed: Added Commission Entries sidebar item\r\n    this.capCommissionEntries.name = \"cap77\"\r\n    this.capCommissionEntries.display = \"Commission Entries\";\r\n    this.capCommissionEntries.link = \"home/payroll/commission-entries\";\r\n    this.capCommissionEntries.icon = \"request_quote\"\r\n\r\n    // Changed: Added Salary Advances sidebar item\r\n    this.capSalaryAdvances.name = \"cap78\"\r\n    this.capSalaryAdvances.display = \"Salary Advances\";\r\n    this.capSalaryAdvances.link = \"home/payroll/salary-advances\";\r\n    this.capSalaryAdvances.icon = \"money_off\"\r\n\r\n    // Changed: Added Overtime sidebar item\r\n    this.capOvertimeEntries.name = \"cap79\"\r\n    this.capOvertimeEntries.display = \"Overtime\";\r\n    this.capOvertimeEntries.link = \"home/payroll/overtime-entries\";\r\n    this.capOvertimeEntries.icon = \"more_time\"\r\n\r\n    this.capApprovals.name = \"cap21\"\r\n    this.capApprovals.display = \"Approvals\";\r\n    this.capApprovals.link = \"home/workflow/approvals\";\r\n    this.capApprovals.icon = \"rule\"\r\n\r\n    this.capApprovalsConfig.name = \"cap22\"\r\n    this.capApprovalsConfig.display = \"Approvals Config\";\r\n    this.capApprovalsConfig.link = \"home/workflow/approvals-config\";\r\n    this.capApprovalsConfig.icon = \"published_with_changes\"\r\n    this.capApprovalsConfig.capSubItems = [this.capSelfApproval]\r\n\r\n    this.capSelfApproval.name = \"cap23\"\r\n    this.capSelfApproval.display = \"Self Approvals\";\r\n    this.capSelfApproval.isBool = true;\r\n\r\n    this.capNotifications.name = \"cap24\"\r\n    this.capNotifications.display = \"Notifications\";\r\n    this.capNotifications.link = \"home/workflow/notifications\";\r\n    this.capNotifications.icon = \"notifications\"\r\n\r\n    this.capAppModels.name = \"cap25\"\r\n    this.capAppModels.display = \"App Models\";\r\n    this.capAppModels.link = \"home/workflow/appmodels\";\r\n    // this.capAppModels.icon = \"notifications\"\r\n\r\n    this.capNotificationsConfig.name = \"cap26\"\r\n    this.capNotificationsConfig.display = \"Notif Config\";\r\n    this.capNotificationsConfig.link = \"home/workflow/notifications-config\";\r\n\r\n    this.capAccounting.name = \"cap27\";\r\n    this.capAccounting.display = \"Accounting\";\r\n    this.capAccounting.icon = \"account_balance\";\r\n    this.capAccounting.capSubItems = [ this.capAccountingDashboard, this.capAccounts, this.capTransactions, this.capAggregates, this.capReports, this.capTransactionTypes, this.capTaxRates, this.capCurrencies, this.capStandingOrders]; // Changed: Removed Fixed Assets — now own module\r\n\r\n    this.capAccountingDashboard.name = \"cap27\"; // Changed: Reuses module cap number for dashboard visibility\r\n    this.capAccountingDashboard.display = \"Dashboard\";\r\n    this.capAccountingDashboard.link = \"home/accounting/dashboard\";\r\n    this.capAccountingDashboard.icon = \"dashboard\";\r\n\r\n    this.capAccounts.name = \"cap52\"; // Changed: Fixed conflict with capBrands (was cap14)\r\n    this.capAccounts.display = \"Accounts\";\r\n    this.capAccounts.link = \"home/accounting/accounts\";\r\n    this.capAccounts.icon = \"account_balance_wallet\";\r\n\r\n    this.capAggregates.name = \"cap57\"; // Added: Aggregates capability\r\n    this.capAggregates.display = \"Aggregates\";\r\n    this.capAggregates.link = \"home/accounting/aggregates\";\r\n    this.capAggregates.icon = \"bar_chart\";\r\n\r\n\r\n    this.capReports.name = \"cap48\"; // Changed: Moved from cap61 to cap48 — resolve duplicate with capSalesModule\r\n    this.capReports.display = \"Reports\";\r\n    this.capReports.link = \"home/accounting/reports\";\r\n    this.capReports.icon = \"assessment\";\r\n\r\n    this.capTaxRates.name = \"cap46\"; // Changed: Moved from cap60 to cap46 — resolve duplicate with capManufacturing\r\n    this.capTaxRates.display = \"Tax Rates\";\r\n    this.capTaxRates.link = \"home/accounting/tax-rates\";\r\n    this.capTaxRates.icon = \"percent\";\r\n\r\n    // Changed: Added Currencies to Accounting menu — feature exists but was missing from nav\r\n    this.capCurrencies.name = \"cap84\";\r\n    this.capCurrencies.display = \"Currencies\";\r\n    this.capCurrencies.link = \"home/accounting/currencies\";\r\n    this.capCurrencies.icon = \"currency_exchange\";\r\n\r\n    this.capStandingOrders.name = \"cap64\"; // Changed: Standing orders capability\r\n    this.capStandingOrders.display = \"Standing Orders\";\r\n    this.capStandingOrders.link = \"home/accounting/standing-orders\";\r\n    this.capStandingOrders.icon = \"schedule\";\r\n\r\n    // Changed: Fixed Assets is now its own top-level module\r\n    this.capFixedAssetsModule.name = \"cap70\";\r\n    this.capFixedAssetsModule.display = \"Fixed Assets\";\r\n    this.capFixedAssetsModule.icon = \"precision_manufacturing\";\r\n    this.capFixedAssetsModule.capSubItems = [this.capFixedAssetsDashboard, this.capFixedAssets, this.capFixedAssetCategories];\r\n\r\n    this.capFixedAssetsDashboard.name = \"cap70\"; // Reuses module cap number for dashboard visibility\r\n    this.capFixedAssetsDashboard.display = \"Dashboard\";\r\n    this.capFixedAssetsDashboard.link = \"home/fixed-assets/dashboard\";\r\n    this.capFixedAssetsDashboard.icon = \"dashboard\";\r\n\r\n    this.capFixedAssets.name = \"cap70\";\r\n    this.capFixedAssets.display = \"Asset Register\";\r\n    this.capFixedAssets.link = \"home/fixed-assets/register\"; // Changed: Updated route\r\n    this.capFixedAssets.icon = \"precision_manufacturing\";\r\n\r\n    this.capFixedAssetCategories.name = \"cap71\";\r\n    this.capFixedAssetCategories.display = \"Depreciation Categories\"; // Changed: Renamed from Categories\r\n    this.capFixedAssetCategories.link = \"home/fixed-assets/depreciation-categories\"; // Changed: Updated route\r\n    this.capFixedAssetCategories.icon = \"category\";\r\n\r\n    this.capTransactionTypes.name = \"cap28\";\r\n    this.capTransactionTypes.display = \"Transaction Types\";\r\n    this.capTransactionTypes.link = \"home/accounting/transaction-types\";\r\n    this.capTransactionTypes.icon = \"category\";\r\n\r\n    this.capTransactions.name = \"cap29\";\r\n    this.capTransactions.display = \"Transactions\";\r\n    this.capTransactions.link = \"home/accounting/transactions\";\r\n    this.capTransactions.icon = \"receipt_long\";\r\n\r\n    this.capInvoicing.name = \"cap53\";\r\n    this.capInvoicing.display = \"Invoicing\";\r\n    this.capInvoicing.icon = \"receipt_long\";\r\n    this.capInvoicing.capSubItems = [ this.capInvoiceDashboard, this.capAccountingInvoices, this.capAging, this.capAccountingOutstandingInvoices ]; // Changed: Added invoice dashboard as first item\r\n\r\n    this.capInvoiceDashboard.name = \"cap53\"; // Changed: Reuses module cap number for dashboard visibility\r\n    this.capInvoiceDashboard.display = \"Dashboard\";\r\n    this.capInvoiceDashboard.link = \"home/accounting/invoice-dashboard\";\r\n    this.capInvoiceDashboard.icon = \"dashboard\";\r\n\r\n    this.capAccountingInvoices.name = \"cap53\";\r\n    this.capAccountingInvoices.display = \"Invoices\";\r\n    this.capAccountingInvoices.link = \"home/accounting/invoices\";\r\n    this.capAccountingInvoices.icon = \"receipt_long\";\r\n\r\n    this.capAccountingOutstandingInvoices.name = \"cap54\";\r\n    this.capAccountingOutstandingInvoices.display = \"Statement\"; // Changed: Renamed from \"Outstanding Invoices\" to \"Statement\"\r\n    this.capAccountingOutstandingInvoices.link = \"home/accounting/statements\"; // Changed: Updated route path\r\n    this.capAccountingOutstandingInvoices.icon = \"account_balance_wallet\";\r\n\r\n    this.capAging.name = \"cap58\";\r\n    this.capAging.display = \"Aging Report\";\r\n    this.capAging.link = \"home/accounting/aging\";\r\n    this.capAging.icon = \"schedule\";\r\n\r\n    this.capLoans.name = \"cap30\";\r\n    this.capLoans.display = \"Loans\";\r\n    this.capLoans.icon = \"payments\";\r\n    this.capLoans.capSubItems = [this.capLoanProducts, this.capLoansMain, this.capLoanPayments];\r\n\r\n    this.capLoanProducts.name = \"cap31\";\r\n    this.capLoanProducts.display = \"Loan Products\";\r\n    this.capLoanProducts.link = \"home/loans/products\";\r\n    this.capLoanProducts.icon = \"inventory\";\r\n\r\n    this.capLoansMain.name = \"cap32\";\r\n    this.capLoansMain.display = \"Loans\";\r\n    this.capLoansMain.link = \"home/loans/loans\";\r\n    this.capLoansMain.icon = \"account_balance\";\r\n\r\n    this.capLoanPayments.name = \"cap33\";\r\n    this.capLoanPayments.display = \"Payments\";\r\n    this.capLoanPayments.link = \"home/loans/payments\";\r\n    this.capLoanPayments.icon = \"payment\";\r\n\r\n    // Changed: Sales module — separate menu group for sales\r\n    this.capSalesModule.name = \"cap61\";\r\n    this.capSalesModule.display = \"Sales\";\r\n    this.capSalesModule.icon = \"point_of_sale\";\r\n    this.capSalesModule.capSubItems = [this.capSalesDashboard, this.capSales, this.capSalesOrders]; // Changed: Added Dashboard to Sales submenu\r\n\r\n    this.capSalesDashboard.name = \"cap61\"; // Changed: Reuses module cap number for dashboard visibility\r\n    this.capSalesDashboard.display = \"Dashboard\";\r\n    this.capSalesDashboard.link = \"home/sales/dashboard\";\r\n    this.capSalesDashboard.icon = \"dashboard\";\r\n\r\n    // Changed: Purchasing module — separate menu group for purchasing\r\n    this.capPurchasingModule.name = \"cap62\";\r\n    this.capPurchasingModule.display = \"Purchasing\";\r\n    this.capPurchasingModule.icon = \"shopping_cart\";\r\n    this.capPurchasingModule.capSubItems = [this.capPurchasingDashboard, this.capInventoryReceipts, this.capPurchaseOrders, this.capSupplierAging]; // Changed: Added Dashboard to Purchasing submenu\r\n\r\n    this.capPurchasingDashboard.name = \"cap62\"; // Changed: Reuses module cap number for dashboard visibility\r\n    this.capPurchasingDashboard.display = \"Dashboard\";\r\n    this.capPurchasingDashboard.link = \"home/purchasing/dashboard\";\r\n    this.capPurchasingDashboard.icon = \"dashboard\";\r\n\r\n    this.capInventory.name = \"cap34\";\r\n    this.capInventory.display = \"Inventory\";\r\n    this.capInventory.icon = \"inventory\";\r\n    this.capInventory.capSubItems = [this.capInventoryDashboard, this.capProducts, this.capServiceItems, // Changed: Dashboard moved to first position in sub-items\r\n      this.capBundleProducts, this.capInventoryStock, this.capInventoryTransactions, this.capInventoryItems,\r\n      this.capRequisitions, this.capInventoryAdjustments,\r\n      this.capInventoryReturns,\r\n    ];\r\n\r\n    // Changed: Manufacturing module — separate menu group for production\r\n    this.capManufacturing.name = \"cap60\";\r\n    this.capManufacturing.display = \"Manufacturing\";\r\n    this.capManufacturing.icon = \"factory\";\r\n    this.capManufacturing.capSubItems = [this.capProductionRecipes, this.capProductionOrders];\r\n\r\n    this.capInventoryDashboard.name = \"cap35\";\r\n    this.capInventoryDashboard.display = \"Dashboard\";\r\n    this.capInventoryDashboard.link = \"home/inventory/dashboard\";\r\n    this.capInventoryDashboard.icon = \"dashboard\";\r\n\r\n    this.capInventoryStock.name = \"cap51\"; // Changed: Added inventory stock cap item configuration\r\n    this.capInventoryStock.display = \"Inventory Stock\";\r\n    this.capInventoryStock.link = \"home/inventory/stock\";\r\n    this.capInventoryStock.icon = \"widgets\";\r\n\r\n    this.capProducts.name = \"cap36\";\r\n    this.capProducts.display = \"Products\";\r\n    this.capProducts.link = \"home/inventory/products\";\r\n    this.capProducts.icon = \"category\";\r\n\r\n    this.capServiceItems.name = \"cap59\"; // Added: Service items capability\r\n    this.capServiceItems.display = \"Services\";\r\n    this.capServiceItems.link = \"home/inventory/service-items\";\r\n    this.capServiceItems.icon = \"build\";\r\n\r\n    this.capBundleProducts.name = \"cap45\"; // Changed: Moved from cap57 to cap45 — resolve duplicate with capAggregates\r\n    this.capBundleProducts.display = \"Bundle Products\";\r\n    this.capBundleProducts.link = \"home/inventory/bundle-products\";\r\n    this.capBundleProducts.icon = \"inventory_2\";\r\n\r\n    this.capInventoryItems.name = \"cap37\";\r\n    this.capInventoryItems.display = \"Inventory Items\";\r\n    this.capInventoryItems.link = \"home/inventory/items\";\r\n    this.capInventoryItems.icon = \"inventory_2\";\r\n\r\n    this.capPurchaseOrders.name = \"cap47\";\r\n    this.capPurchaseOrders.display = \"Purchase Orders\";\r\n    this.capPurchaseOrders.link = \"home/purchasing/orders\";\r\n    this.capPurchaseOrders.icon = \"shopping_bag\";\r\n\r\n    this.capInventoryReceipts.name = \"cap38\";\r\n    this.capInventoryReceipts.display = \"Purchases\"; // Changed: \"Receipts\" → \"Purchases\"\r\n    this.capInventoryReceipts.link = \"home/purchasing/purchases\"; // Changed: inventory-receipts → purchases\r\n    this.capInventoryReceipts.icon = \"receipt_long\";\r\n\r\n    this.capSupplierAging.name = \"cap63\"; // Changed: AP Aging capability\r\n    this.capSupplierAging.display = \"AP Aging\";\r\n    this.capSupplierAging.link = \"home/accounting/supplier-aging\";\r\n    this.capSupplierAging.icon = \"schedule\";\r\n\r\n    this.capSalesOrders.name = \"cap39\";\r\n    this.capSalesOrders.display = \"Sales Orders\";\r\n    this.capSalesOrders.link = \"home/sales/orders\";\r\n    this.capSalesOrders.icon = \"shopping_cart\";\r\n\r\n\r\n    this.capSales.name = \"cap50\";\r\n    this.capSales.display = \"Sales\";\r\n    this.capSales.link = \"home/sales/sales\";\r\n    this.capSales.icon = \"point_of_sale\";\r\n\r\n    this.capRequisitions.name = \"cap40\";\r\n    this.capRequisitions.display = \"Requisitions\";\r\n    this.capRequisitions.link = \"home/inventory/requisitions\";\r\n    this.capRequisitions.icon = \"request_quote\";\r\n\r\n    this.capInventoryAdjustments.name = \"cap41\";\r\n    this.capInventoryAdjustments.display = \"Adjustments\";\r\n    this.capInventoryAdjustments.link = \"home/inventory/adjustments\";\r\n    this.capInventoryAdjustments.icon = \"tune\";\r\n\r\n    this.capInventoryReturns.name = \"cap42\";\r\n    this.capInventoryReturns.display = \"Returns\";\r\n    this.capInventoryReturns.link = \"home/inventory/returns\";\r\n    this.capInventoryReturns.icon = \"keyboard_return\";\r\n\r\n    this.capInventoryTransactions.name = \"cap44\";\r\n    this.capInventoryTransactions.display = \"Transactions\";\r\n    this.capInventoryTransactions.link = \"home/inventory/transactions\";\r\n    this.capInventoryTransactions.icon = \"swap_horiz\";\r\n\r\n    this.capProductionRecipes.name = \"cap55\"; // Added: Production recipes capability\r\n    this.capProductionRecipes.display = \"Production Recipes\";\r\n    this.capProductionRecipes.link = \"home/manufacturing/production-recipes\";\r\n    this.capProductionRecipes.icon = \"description\";\r\n\r\n    this.capProductionOrders.name = \"cap56\"; // Added: Production orders capability\r\n    this.capProductionOrders.display = \"Production Orders\";\r\n    this.capProductionOrders.link = \"home/manufacturing/production-orders\";\r\n    this.capProductionOrders.icon = \"factory\";\r\n\r\n    // Default cache rule for list endpoints\r\n    this.cacheConfig.addRule('*/list/*', 5);\r\n\r\n    this.authService.myRoleObserv.subscribe((role: any) => {\r\n      this.myRole = role;\r\n    });\r\n  }\r\n\r\n\r\n  appConfig = new AppConfig();\r\n  private appConfigSource = new BehaviorSubject(this.appConfig);\r\n  public appConfigObserv = this.appConfigSource.asObservable();\r\n  UpdateAppConfig(config: AppConfig) {\r\n    this.appConfigSource.next(config);\r\n    this.appConfig = config;\r\n  }\r\n\r\n  // Centralized cache configuration\r\n  cacheConfig = new CacheConfig();\r\n\r\n  myRole;\r\n\r\n  capHome = new CapItem;\r\n  capAdmin = new CapItem;\r\n  capUsers = new CapItem;\r\n  capRoles = new CapItem;\r\n  capLogs = new CapItem;\r\n  capSettings = new CapItem;\r\n\r\n  capMultitenant = new CapItem;\r\n  capTenants = new CapItem;\r\n  capMembership = new CapItem;\r\n  capPlans = new CapItem;\r\n  capFeatures = new CapItem; // Added: Feature registry capability property\r\n  capPlanFeatures = new CapItem; // Added: Plan-Feature mapping capability property\r\n  capSubscription = new CapItem; // Added: Subscription management capability property\r\n  capBilling = new CapItem; // Added: Billing & invoice history capability property\r\n\r\n  capGeneral = new CapItem;\r\n  capCustomers = new CapItem;\r\n  capCategories = new CapItem;\r\n  capSubCategories = new CapItem;\r\n  capBrands = new CapItem;\r\n  capGPTCaches = new CapItem; // Added: GPT Cache capability property\r\n  capPreferences = new CapItem; // Changed: Preferences capability property\r\n\r\n  capSuppliers = new CapItem;\r\n  capTasks = new CapItem;\r\n\r\n  capHR = new CapItem;\r\n  capEmployees = new CapItem;\r\n  capDepartments = new CapItem;\r\n  capPositions = new CapItem;\r\n  capGrades = new CapItem;\r\n\r\n  capPayroll = new CapItem; // Changed: Added Payroll module sidebar items\r\n  capSalaryStructures = new CapItem;\r\n  capStatutoryDeductions = new CapItem;\r\n  capPayrollRuns = new CapItem;\r\n  capCommissionConfigs = new CapItem; // Changed: Added for Commission module\r\n  capCommissionEntries = new CapItem; // Changed: Added for Commission module\r\n  capSalaryAdvances = new CapItem; // Changed: Added for Salary Advance module\r\n  capOvertimeEntries = new CapItem; // Changed: Added for Overtime module\r\n\r\n  capApprovals = new CapItem;\r\n  capApprovalsConfig = new CapItem;\r\n  capNotifications = new CapItem;\r\n  capSelfApproval = new CapItem;\r\n  capAppModels = new CapItem;\r\n  capNotificationsConfig = new CapItem;\r\n\r\n  capAccountingOutstandingInvoices = new CapItem;\r\n  capAccounting = new CapItem;\r\n  capAccounts = new CapItem;\r\n  capAggregates = new CapItem; // Added: Capability for aggregates view\r\n  capReports = new CapItem; // Added: Capability for financial reports\r\n  capAging = new CapItem; // Added: Capability for aging report\r\n  capTaxRates = new CapItem; // Changed: Capability for tax rates management\r\n  capStandingOrders = new CapItem; // Changed: Capability for standing orders management\r\n  capFixedAssetsModule = new CapItem; // Changed: Top-level Fixed Assets module\r\n  capFixedAssetsDashboard = new CapItem; // Changed: Fixed Assets dashboard\r\n  capFixedAssets = new CapItem; // Changed: Asset Register (renamed from Fixed Assets)\r\n  capFixedAssetCategories = new CapItem; // Changed: Depreciation Categories\r\n  capCurrencies = new CapItem; // Changed: Capability for currencies management\r\n  capTransactionTypes = new CapItem;\r\n  capTransactions = new CapItem;\r\n  capAccountingInvoices = new CapItem;\r\n\r\n  capInvoicing = new CapItem; // Added: Capability for invoicing view\r\n\r\n  capLoans = new CapItem;\r\n  capLoanProducts = new CapItem;\r\n  capLoansMain = new CapItem;\r\n  capLoanPayments = new CapItem;\r\n\r\n  capInventory = new CapItem;\r\n  capInventoryDashboard = new CapItem;\r\n  capInventoryStock = new CapItem; // Changed: Added new cap item for inventory stock view\r\n  capProducts = new CapItem;\r\n  capServiceItems = new CapItem; // Added: Capability for service items\r\n  capBundleProducts = new CapItem; // Added: Capability for bundle products\r\n  capInventoryItems = new CapItem;\r\n  capPurchaseOrders = new CapItem;\r\n  capInventoryReceipts = new CapItem;\r\n  capSalesOrders = new CapItem;\r\n  capSales = new CapItem;\r\n  capRequisitions = new CapItem;\r\n  capInventoryAdjustments = new CapItem;\r\n  capInventoryReturns = new CapItem;\r\n  capInventoryTransactions = new CapItem;\r\n  capProductionRecipes = new CapItem; // Added: Capability for production recipes\r\n  capProductionOrders = new CapItem; // Added: Capability for production orders\r\n  capManufacturing = new CapItem; // Changed: Manufacturing module menu group\r\n  capSalesModule = new CapItem; // Changed: Sales module menu group\r\n  capPurchasingModule = new CapItem; // Changed: Purchasing module menu group\r\n  capAccountingDashboard = new CapItem; // Changed: Accounting dashboard menu item\r\n  capSalesDashboard = new CapItem; // Changed: Sales dashboard menu item\r\n  capPurchasingDashboard = new CapItem; // Changed: Purchasing dashboard menu item\r\n  capSupplierAging = new CapItem; // Changed: AP Aging capability property\r\n  capInvoiceDashboard = new CapItem; // Changed: Invoice dashboard menu item\r\n  capPayrollDashboard = new CapItem; // Changed: Payroll dashboard menu item\r\n\r\n  public tmpProfileuserName = \"\";\r\n\r\n\r\n  isProcessing = false;\r\n\r\n\r\n  //--------------------------Departmemts Form-------------------------\r\n  departmentFormConfig: FormConfig = {\r\n    security: { allow: [this.capDepartments] },\r\n    title : 'Department',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n    ],\r\n    loadAction: { url: 'departments/id' },\r\n    heroField: 'departmentID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  editDepartmentButton: Button = { name: 'edit', dialog: true, action: { url: 'departments?action=edit', method: 'post', successMessage: 'Edited Successfully' } }\r\n\r\n  departmentDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.departmentFormConfig,\r\n    heroField: 'departmentID',\r\n    buttons: [this.editDepartmentButton],\r\n  }\r\n\r\n\r\n  //--------------------------Positions Form-------------------------\r\n  positionFormConfig: FormConfig = {\r\n    security: { allow: [this.capPositions] },\r\n    title: 'Position',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'description', type: 'text', },\r\n      { name: 'departmentID', alias: 'Department', type: 'select', loadAction: { url: 'departments/list/x' }, detailsConfig: this.departmentDetailsConfig },\r\n\r\n    ],\r\n    loadAction: { url: 'positions/id' },\r\n    heroField: 'positionID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  editPositionButton: Button = { name: 'edit', dialog: true, action: { url: 'positions?action=edit', method: 'post', successMessage: 'Edited Successfully' } }\r\n\r\n  positionDetailsConfig : DetailsDialogConfig = {\r\n    formConfig : this.positionFormConfig,\r\n    heroField : 'positionID',\r\n    buttons: [this.editPositionButton],\r\n  }\r\n\r\n\r\n\r\n  //--------------------------Employees-------------------------\r\n\r\n  genders = [\r\n    { name: 'Male', value: 1 },\r\n    { name: 'Female', value: 2 }\r\n  ]\r\n\r\n  employeeFormConfig: FormConfig = {\r\n    security : {allow : [this.capEmployees]},\r\n    fields: [\r\n      { name: 'nationalID', type: 'text', alias: 'National ID', required: true },\r\n      { name: 'gender', alias: 'Gender', type: 'select', options: this.genders, required: true },\r\n      { name: 'firstName', type: 'text', required: true },\r\n      { name: 'lastName', type: 'text', required: true },\r\n      { name: 'dateOfBirth', type: 'date', alias: 'Date of Birth', required: true },\r\n      { name: 'employmentDate', type: 'date', alias: 'Employment Date', required: true },\r\n      { name: 'departmentID', alias: 'Department', type: 'select', loadAction : { url : 'departments/list/x'}, detailsConfig: this.departmentDetailsConfig },\r\n      { name: 'positionID', alias: 'Position', type: 'select', loadAction: { url: 'positions/list/x' }, masterField: 'departmentID', detailsConfig: this.positionDetailsConfig },\r\n      { name: 'employmentStatus', alias: 'Employment Status', type: 'select', loadAction: { url: 'employees/list/employment-status' } },\r\n      { name: 'activeStatus', alias: 'Active Status', type: 'select', loadAction: { url: 'employees/list/active-status' } },\r\n      { name: 'passportNumber', type: 'text', alias: 'Passport Number' },\r\n      { name: 'salaryStructureID', alias: 'Salary Structure', type: 'select', loadAction: { url: 'salarystructures/list/x' }, nullable: true }, // Changed: Added for payroll salary structure assignment\r\n      { name: 'userName', type: 'select', alias: 'User', loadAction: { url: 'user/list/x' }, optionDisplay: 'name', optionValue: 'value', nullable : true, infoMessage : 'Related user account' },\r\n      { name: 'address', type: 'text-area', rows: 2, span: true },\r\n      { name: 'phone', type: 'text' },\r\n      { name: 'email', type: 'text' },\r\n      { name: 'note', type: 'text-area', rows: 2, span: true },\r\n    ],\r\n    loadAction: { url: 'employees/id' },\r\n    heroField: 'employeeID',\r\n    includeAudit : true,\r\n  }\r\n\r\n  // Changed: Added edit button for employee details dialog\r\n  editEmployeeButton: Button = { name: 'edit', dialog: true, inDialog: true, action: { url: 'employees?action=edit', method: 'post' } };\r\n\r\n  employeesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name', 'departmentName', 'positionName'],\r\n    flatButtons: true,\r\n    logResponse : true,\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'genderName', type: 'text', alias: 'Gender' },\r\n      { name: 'departmentName', type: 'text', alias: 'Department' },\r\n      { name: 'positionName', type: 'text', alias: 'Position' },\r\n      { name: 'salaryStructureName', type: 'text', alias: 'Salary Structure' }, // Changed: Added for payroll display\r\n      { name: 'employmentStatusName', type: 'text', alias: 'Employment Status' },\r\n      { name: 'activeStatusName', type: 'text', alias: 'Active Status' },\r\n      { name: 'isLinked', type: 'checkbox', alias: 'Linked' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'employees?action=create', method: 'post' } },\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.employeeFormConfig,\r\n          heroField: 'employeeID',\r\n          buttons: [this.editEmployeeButton],\r\n          tableConfigs: [\r\n            // Changed: Employee salary components child table\r\n            {\r\n              tabTitle: 'Salary Components',\r\n              showFilter: false,\r\n              elevation: 'none',\r\n              flatButtons: true,\r\n              columns: [\r\n                { name: 'componentName', type: 'text', alias: 'Component' },\r\n                { name: 'componentType', type: 'text', alias: 'Type' },\r\n                { name: 'calculationMethod', type: 'text', alias: 'Calculation' },\r\n                { name: 'value', type: 'money', alias: 'Value' },\r\n              ],\r\n              buttons: [\r\n                { name: 'create', display: 'Create', dialog: true, action: { url: 'employeesalarycomponents?action=create', method: 'post' } },\r\n                { name: 'edit', dialog: true, action: { url: 'employeesalarycomponents?action=edit', method: 'post' } },\r\n                { name: 'delete', dialog: true, action: { url: 'employeesalarycomponents?action=delete', method: 'post' } },\r\n              ],\r\n              loadAction: { url: 'employeesalarycomponents/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n              formConfig: {\r\n                title: 'Salary Component',\r\n                fixedTitle: true,\r\n                fields: [\r\n                  { name: 'salaryComponentID', alias: 'Component', type: 'select', loadAction: { url: 'salarycomponents/list/x' }, required: true },\r\n                  { name: 'value', type: 'money', alias: 'Value', required: true },\r\n                ],\r\n                loadAction: { url: 'employeesalarycomponents/id' },\r\n                heroField: 'employeeSalaryComponentID',\r\n              },\r\n            },\r\n            // Changed: Employee payslip history child table\r\n            {\r\n              tabTitle: 'Payslip History',\r\n              showFilter: false,\r\n              elevation: 'none',\r\n              flatButtons: true,\r\n              columns: [\r\n                { name: 'grossPay', type: 'money', alias: 'Gross Pay' },\r\n                { name: 'totalDeductions', type: 'money', alias: 'Deductions' },\r\n                { name: 'netPay', type: 'money', alias: 'Net Pay' },\r\n                { name: 'statusName', type: 'text', alias: 'Status' },\r\n              ],\r\n              buttons: [\r\n                { name: 'view', dialog: true },\r\n              ],\r\n              loadAction: { url: 'payslips/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n            },\r\n            // Changed: Employee commission configs child table\r\n            {\r\n              tabTitle: 'Commission Configs',\r\n              showFilter: false,\r\n              elevation: 'none',\r\n              flatButtons: true,\r\n              columns: [\r\n                { name: 'name', type: 'text' },\r\n                { name: 'metricTypeName', type: 'text', alias: 'Metric Type' },\r\n                { name: 'rateTypeName', type: 'text', alias: 'Rate Type' },\r\n                { name: 'rate', type: 'text', alias: 'Rate' },\r\n                { name: 'isActive', type: 'checkbox', alias: 'Active' },\r\n              ],\r\n              buttons: [\r\n                { name: 'create', display: 'Create', dialog: true, action: { url: 'commissionconfigs?action=create', method: 'post' } },\r\n                { name: 'edit', dialog: true, action: { url: 'commissionconfigs?action=edit', method: 'post' } },\r\n                { name: 'delete', dialog: true, action: { url: 'commissionconfigs?action=delete', method: 'post' } },\r\n              ],\r\n              loadAction: { url: 'commissionconfigs/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n              formConfig: {\r\n                title: 'Commission Config',\r\n                fixedTitle: true,\r\n                fields: [\r\n                  { name: 'name', type: 'text', required: true },\r\n                  { name: 'metricType', alias: 'Metric Type', type: 'select', loadAction: { url: 'commissionconfigs/list/metric-type' }, required: true },\r\n                  { name: 'rateType', alias: 'Rate Type', type: 'select', loadAction: { url: 'commissionconfigs/list/rate-type' }, required: true },\r\n                  { name: 'rate', type: 'number', required: true },\r\n                  { name: 'isActive', alias: 'Active', type: 'checkbox' },\r\n                ],\r\n                loadAction: { url: 'commissionconfigs/id' },\r\n                heroField: 'commissionConfigID',\r\n              },\r\n            },\r\n            // Changed: Employee salary advances child table\r\n            {\r\n              tabTitle: 'Salary Advances',\r\n              showFilter: false,\r\n              elevation: 'none',\r\n              flatButtons: true,\r\n              columns: [\r\n                { name: 'amount', type: 'money', alias: 'Amount' },\r\n                { name: 'advanceDate', type: 'date', alias: 'Date' },\r\n                { name: 'reason', type: 'text' },\r\n                { name: 'statusDisplay', type: 'text', alias: 'Status' },\r\n              ],\r\n              buttons: [\r\n                { name: 'create', display: 'Create', dialog: true, action: { url: 'salaryadvances?action=create', method: 'post' } },\r\n                { name: 'edit', dialog: true, action: { url: 'salaryadvances?action=edit', method: 'post' }, visible: (row: any) => !row?.isDeducted },\r\n                { name: 'delete', dialog: true, action: { url: 'salaryadvances?action=delete', method: 'post' }, visible: (row: any) => !row?.isDeducted },\r\n              ],\r\n              loadAction: { url: 'salaryadvances/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n              formConfig: {\r\n                title: 'Salary Advance',\r\n                fixedTitle: true,\r\n                fields: [\r\n                  { name: 'amount', type: 'money', required: true },\r\n                  { name: 'advanceDate', alias: 'Advance Date', type: 'date', required: true },\r\n                  { name: 'reason', type: 'text' },\r\n                ],\r\n                loadAction: { url: 'salaryadvances/id' },\r\n                heroField: 'salaryAdvanceID',\r\n              },\r\n            },\r\n            // Changed: Employee overtime history child table\r\n            {\r\n              tabTitle: 'Overtime History',\r\n              showFilter: false,\r\n              elevation: 'none',\r\n              flatButtons: true,\r\n              columns: [\r\n                { name: 'overtimeDate', type: 'date', alias: 'Date' },\r\n                { name: 'hours', type: 'text', alias: 'Hours' },\r\n                { name: 'overtimeTypeName', type: 'text', alias: 'Type' },\r\n                { name: 'hourlyRate', type: 'money', alias: 'Hourly Rate' },\r\n                { name: 'amount', type: 'money', alias: 'Amount' },\r\n              ],\r\n              buttons: [\r\n                { name: 'create', display: 'Create', dialog: true, action: { url: 'overtimeentries?action=create', method: 'post' } },\r\n                { name: 'edit', dialog: true, action: { url: 'overtimeentries?action=edit', method: 'post' } },\r\n                { name: 'delete', dialog: true, action: { url: 'overtimeentries?action=delete', method: 'post' } },\r\n              ],\r\n              loadAction: { url: 'overtimeentries/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n              formConfig: {\r\n                title: 'Overtime Entry',\r\n                fixedTitle: true,\r\n                fields: [\r\n                  { name: 'overtimeDate', alias: 'Date', type: 'date', required: true },\r\n                  { name: 'hours', type: 'number', required: true },\r\n                  { name: 'overtimeType', alias: 'Overtime Type', type: 'select', loadAction: { url: 'overtimeentries/list/overtime-type' }, required: true },\r\n                  { name: 'hourlyRate', alias: 'Hourly Rate', type: 'money', required: true },\r\n                  { name: 'amount', type: 'money', alias: 'Amount', readonly: true },\r\n                ],\r\n                loadAction: { url: 'overtimeentries/id' },\r\n                heroField: 'overtimeEntryID',\r\n              },\r\n            },\r\n          ],\r\n        }\r\n      },\r\n      { name: 'edit', dialog: true, action: { url: 'employees?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'employees?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'employees/all/x' },\r\n    formConfig: this.employeeFormConfig,\r\n    realTime: true,\r\n    entityName: 'Employee' // Changed: Match backend entity name for SignalR broadcasts\r\n  }\r\n\r\n\r\n  //--------------------------Positions-------------------------\r\n  positionsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'description', type: 'text' },\r\n      { name: 'departmentName', type: 'chip', detailsConfig: this.departmentDetailsConfig, alias: 'Department' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'positions?action=create', method: 'post' } },\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.positionFormConfig ,\r\n          heroField: 'positionID',\r\n          buttons: [this.editPositionButton],\r\n          tableConfigs: [\r\n            {\r\n              ...this.employeesTableConfig,\r\n              loadAction: { url: 'employees/x/x' }, loadCriteria: 'position', loadIDField: 'positionID',\r\n              columns: this.employeesTableConfig.columns.filter(x => ['departmentName', 'positionName'].includes(x.name) == false),\r\n              tabTitle: 'Employees',\r\n              elevation: 'none',\r\n            }\r\n          ],\r\n        }\r\n      },\r\n      this.editPositionButton,\r\n      { name: 'delete', dialog: true, action: { url: 'positions?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'positions/all/x' },\r\n    formConfig: this.positionFormConfig,\r\n    realTime: true,\r\n    entityName: 'Position' // Changed: Match backend entity name for SignalR broadcasts\r\n  }\r\n\r\n\r\n  //--------------------------Departments-------------------------\r\n\r\n  departmentTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name'],\r\n    flatButtons: true,\r\n    columns: [\r\n      // { name: 'departmentID', type: 'number', alias: 'ID' },\r\n      { name: 'name', type: 'text' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'departments?action=create', method: 'post' } },\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.departmentFormConfig,\r\n          heroField: 'departmentID',\r\n          buttons: [this.editDepartmentButton],\r\n          tableConfigs: [\r\n            {\r\n              ...this.employeesTableConfig,\r\n              loadAction: { url: 'employees/x/x' }, loadCriteria: 'department', loadIDField: 'departmentID',\r\n              columns: this.employeesTableConfig.columns.filter(x => ['departmentName', 'positionName'].includes(x.name) == false),\r\n              tabTitle: 'Employees',\r\n              elevation: 'none',\r\n            },\r\n            {\r\n              ...this.positionsTableConfig,\r\n              loadAction: { url: 'positions/x/x' }, loadCriteria: 'department', loadIDField: 'departmentID',\r\n              tabTitle: 'Positions',\r\n              elevation: 'none',\r\n\r\n            }\r\n          ],\r\n        }\r\n      },\r\n      this.editDepartmentButton,\r\n      { name: 'delete', dialog: true, action: { url: 'departments?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'departments/all/x' },\r\n    formConfig: this.departmentFormConfig,\r\n    realTime: true,\r\n    entityName: 'Department' // Changed: Match backend entity name for SignalR broadcasts\r\n  }\r\n\r\n\r\n  //--------------------------Contact Persons-------------------------\r\n  contactPersonFormConfig: FormConfig = {\r\n    title: 'Contact Person',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', span : true },\r\n      { name: 'mobile', type: 'text' },\r\n      { name: 'email', type: 'text' },\r\n      { name: 'contactMethods', type: 'composite', span: true, subfields :[\r\n        { name: 'canCall', type: 'checkbox', alias: 'Call' },\r\n        { name: 'canSMS', type: 'checkbox', alias: 'SMS' },\r\n        { name: 'canWhatsApp', type: 'checkbox', alias: 'WhatsApp' }\r\n      ] },\r\n\r\n    ],\r\n    reset: true\r\n  };\r\n\r\n  contactPersonTableConfig: TableConfig = {\r\n    tabTitle: 'Contacts',\r\n    showFilter: true,\r\n    minColumns: ['name', 'contactMethods'],\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'text', },\r\n      { name: 'mobile', type: 'text' },\r\n      { name: 'email', type: 'text' },\r\n      {\r\n        name: 'contactMethods',\r\n        type: 'icon',\r\n        icons: [\r\n          { name: 'call', color: 'green', condition: x => x.canCall, tip: 'Available for Calls' },\r\n          { name: 'sms', color: 'green', condition: x => x.canSMS, tip: 'Available for SMS' },\r\n          { name: 'forum', color: 'green', condition: x => x.canWhatsApp, tip: 'Available on WhatsApp' }\r\n        ]\r\n      }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add', dialog: true, action: { url: 'contactpersons?action=create', method: 'post' }, confirm: { message: 'Add contact person?' } },\r\n      { name: 'edit', dialog: true, action: { url: 'contactpersons?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'contactpersons?action=delete', method: 'post' } }\r\n    ],\r\n    formConfig: this.contactPersonFormConfig\r\n  };\r\n\r\n\r\n  //--------------------------Customers-------------------------\r\n  customerFormConfig: FormConfig = {\r\n    security: { allow: [this.capCustomers] },\r\n    includeAudit: true,\r\n    title : 'Customer',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'phone', type: 'text' },\r\n      { name: 'contactPerson', type: 'text' },\r\n      { name: 'email', type: 'text' },\r\n      { name: 'address', type: 'text-area', rows: 2, span: true },\r\n      { name: 'customerTenantID', alias: 'Customer Tenant', type: 'text-single', loadAction: { url: 'tenants/list/x' }, required: true, strict : true , nullable: false },\r\n    ],\r\n    loadAction: { url: 'customers/id' },\r\n    heroField: 'customerID',\r\n\r\n    reset: true,\r\n  }\r\n\r\n  customerCreateButton : Button = { name: 'create', display: 'Create', dialog: true, action: { url: 'customers?action=create', method: 'post' } }\r\n  customerEditButton: Button = { name: 'edit', dialog: true, action: { url: 'customers?action=edit', method: 'post' } }\r\n\r\n  customerDetailsConfig: DetailsDialogConfig = {\r\n    formConfig : this.customerFormConfig,\r\n    heroField : 'customerID',\r\n    tableConfigs: [\r\n      {\r\n        ...this.contactPersonTableConfig,\r\n        loadAction: { url: 'contactpersons/customer/x' },\r\n        loadCriteria: 'customer',\r\n        loadIDField: 'customerID'\r\n      }\r\n    ],\r\n    buttons: [\r\n      this.customerCreateButton,\r\n      this.customerEditButton\r\n    ]\r\n  };\r\n\r\n  customersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name'],\r\n    flatButtons: true,\r\n    logResponse: true,\r\n    maxButtonsCount: 3,\r\n    collapseButtons : true,\r\n\r\n    columns: [\r\n\r\n      { name: 'name', type: 'text' },\r\n      { name: 'phone', type: 'text' },\r\n      { name: 'contactPerson', type: 'text' },\r\n      { name: 'isLinked', type: 'checkbox', alias: 'Linked' },\r\n\r\n    ],\r\n\r\n    buttons: [\r\n      this.customerCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.customerDetailsConfig },\r\n      { name: 'edit', dialog: true, detailsConfig: this.customerDetailsConfig },\r\n      { name: 'delete', dialog: true, action: { url: 'customers?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'customers/all/x' },\r\n    formConfig: this.customerFormConfig,\r\n    realTime: true,\r\n    entityName: 'Customer' // Changed: Match backend typeof(Customer).Name for SignalR broadcasts\r\n  }\r\n\r\n\r\n  //--------------------------Suppliers-------------------------\r\n  supplierFormConfig: FormConfig = {\r\n    security: { allow: [this.capSuppliers] },\r\n    includeAudit: true,\r\n    title: 'Supplier',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'phone', type: 'text' },\r\n      { name: 'contactPerson', type: 'text' },\r\n      { name: 'email', type: 'text' },\r\n      { name: 'address', type: 'text-area', rows: 2, span: true },\r\n    ],\r\n\r\n    loadAction: { url: 'suppliers/id' },\r\n    heroField: 'supplierID',\r\n  }\r\n\r\n  supplierCreateButton : Button = { name: 'create', display: 'Create', dialog: true, action: { url: 'suppliers?action=create', method: 'post' } }\r\n  supplierEditButton : Button = { name: 'edit', dialog: true, action: { url: 'suppliers?action=edit', method: 'post' } }\r\n\r\n  supplierDetailsConfig: DetailsDialogConfig = {\r\n    formConfig : this.supplierFormConfig,\r\n    heroField : 'supplierID',\r\n    tableConfigs: [\r\n      {\r\n        ...this.contactPersonTableConfig,\r\n        loadAction: { url: 'contactpersons/supplier/x' },\r\n        loadCriteria: 'supplier',\r\n        loadIDField: 'supplierID'\r\n      }\r\n    ],\r\n    buttons : [\r\n      this.supplierCreateButton,\r\n      this.supplierEditButton,\r\n    ]\r\n  };\r\n\r\n  suppliersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'phone', type: 'text' },\r\n      { name: 'contactPerson', type: 'text' },\r\n    ],\r\n\r\n    buttons: [\r\n      this.supplierCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.supplierDetailsConfig },\r\n      { name: 'edit', dialog: true,  detailsConfig: this.supplierDetailsConfig },\r\n      { name: 'delete', dialog: true, action: { url: 'suppliers?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'suppliers/all/x' },\r\n    formConfig: this.supplierFormConfig,\r\n    allowUserKeepOpen: true, // Added: for testing — propagates to Create dialog (which has no detailsConfig of its own)\r\n    keepOpenBehavior: 'reset', // Added: for testing — reset form after create so user can capture next supplier\r\n    realTime: true, // Changed: Enabled for SignalR testing\r\n    entityName: 'Supplier' // Changed: Match backend entity name for SignalR broadcasts\r\n  }\r\n\r\n\r\n  //--------------------------GPT Caches-------------------------\r\n  gptCachesFormConfig: FormConfig = {\r\n    security: { allow: [this.capGPTCaches] },\r\n    title: 'GPT Cache',\r\n    fields: [\r\n      { name: 'gptCacheID', type: 'number', readonly: true, alias: 'ID' },\r\n      { name: 'methodName', type: 'text', required: true, alias: 'Method Name', span: true },\r\n      { name: 'requestHash', type: 'text', readonly: true, alias: 'Request Hash', span: true },\r\n      { name: 'requestText', type: 'text-area', required: true, alias: 'Request Text', span: true, rows: 4 },\r\n      { name: 'responseJson', type: 'text-area', required: true, alias: 'Response JSON', span: true, rows: 4 },\r\n      { name: 'matchCount', type: 'number', alias: 'Match Count' },\r\n      { name: 'hitCount', type: 'number', alias: 'Hit Count' },\r\n      { name: 'createdDate', type: 'datetime', readonly: true, alias: 'Created' },\r\n      { name: 'updatedDate', type: 'datetime', readonly: true, alias: 'Updated' }\r\n    ],\r\n    loadAction: { url: 'gptcaches/id' },\r\n    heroField: 'gptCacheID',\r\n  }\r\n\r\n\r\n  gptCachesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['methodName', 'requestText', 'hitCount'],\r\n    columns: [\r\n      { name: 'methodName', alias: 'Method' },\r\n      { name: 'requestText', alias: 'Request', maxLength: 100 },\r\n      { name: 'responseJson', alias: 'Response', maxLength: 100 },\r\n      { name: 'requestHash', alias: 'Hash', maxLength: 20 },\r\n      { name: 'matchCount', type: 'number', alias: 'Matches', icon: { name: 'verified', color: 'green', condition: (x: any) => x.matchCount > 3 } },\r\n      { name: 'hitCount', type: 'number', alias: 'Hits', icon: { name: 'trending_up', color: 'blue', condition: (x: any) => x.hitCount > 10 } },\r\n      { name: 'createdDate', type: 'datetime', alias: 'Created' },\r\n      { name: 'updatedDate', type: 'datetime', alias: 'Updated' }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true, tip: 'View Cache Details' },\r\n      { name: 'edit', dialog: true,  action: { url: 'gptcaches?action=edit', method: 'post' }, tip: 'Edit Cache' },\r\n      { name: 'delete', confirm: { message: 'Are you sure you want to delete this cache entry?' }, action: { url: 'gptcaches?action=delete', method: 'post' }, tip: 'Delete Cache' }\r\n    ],\r\n    loadAction: { url: 'gptcaches/all/x' },\r\n    formConfig: this.gptCachesFormConfig\r\n  }\r\n\r\n\r\n  //--------------------------Notifications-------------------------\r\n\r\n  notificationOptions = [\r\n    { name: 'UI Only', value: 1 },\r\n    { name: 'UI + Email', value: 3 },\r\n    // { name: 'UI + Email + SMS', value: 7 },\r\n    { name: 'UI + WhatsApp', value: 9 },\r\n    { name: 'UI + Telegram', value: 17 },\r\n    { name: 'UI + Telegram + WhatsApp', value: 25 },\r\n    { name: 'UI + Push', value: 33 }, // Changed: Added Push=32 channel combination\r\n    { name: 'UI + Email + Push', value: 35 }, // Changed: Added Email+Push combination\r\n    { name: 'All Channels', value: 63 } // Changed: Updated from 31 to 63 to include Push=32\r\n  ]\r\n\r\n\r\n\r\n  //--------------------------Approvals-------------------------\r\n\r\n\r\n  approvalHistoryFormConfig : FormConfig = {\r\n    title: 'Approval History',\r\n    fields: [\r\n      { name: 'levelName', type: 'text', readonly: true, alias: 'Level' },\r\n      { name: 'statusName', type: 'text', readonly: true, alias: 'Status' },\r\n      { name: 'comments', type: 'text-area', readonly: true, span: true, rows: 3, copyContent: true },\r\n    ],\r\n    includeAudit: true\r\n  }\r\n\r\n  //Approval History\r\n  approvalHistoryTableConfig: TableConfig = {\r\n    tabTitle: 'Trail',\r\n    elevation: 'none',\r\n    minColumns: ['createdDate', 'levelName', 'statusName'],\r\n    flatButtons: true,\r\n    showFilter : true,\r\n    columns: [\r\n      { name: 'createdDate', type: 'datetime', alias : 'Date' },\r\n      { name: 'levelName', type: 'text', alias: 'Level' },\r\n      {\r\n        name: 'statusName', type: 'text', alias: 'Status',\r\n        colors: [\r\n          { name: '#90A4AE', condition: x => x.status === 0 },\r\n          { name: '#66BB6A', condition: x => x.status === 1 },\r\n          { name: '#F44336', condition: x => x.status === 2 }\r\n        ]\r\n      },\r\n      { name: 'comments', type: 'text', },\r\n      { name: 'createdByName', type: 'text', alias: 'By' },\r\n\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true }\r\n    ],\r\n\r\n    formConfig : this.approvalHistoryFormConfig,\r\n\r\n    loadAction: { url: 'approvalhistory/approval/x' },\r\n    loadCriteria: 'approval',\r\n    loadIDField: 'approvalID'\r\n  };\r\n\r\n\r\n\r\n  //approvals form\r\n  approvalFormConfig: FormConfig = {\r\n    title: 'Approval',\r\n    fields: [\r\n      { name: 'blank', type: 'blank', span: true },\r\n      { name: 'statusName', type: 'label', alias: 'Status', span: true },\r\n      { name: 'message', type: 'text-area', required: true, span: true, rows: 3 },\r\n\r\n    ],\r\n    loadAction: { url: 'approvals/id' },\r\n    heroField: 'approvalID'\r\n  };\r\n\r\n\r\n\r\n\r\n  // approval action dialog\r\n  approvalActionFormConfig: FormConfig = {\r\n    title: 'Approval Action',\r\n    fixedTitle: true,\r\n    fields: [\r\n      {\r\n        name: 'comments', type: 'text-area', required: false, span: true, rows: 3,\r\n        infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.'\r\n      }\r\n    ]\r\n  };\r\n\r\n  approveActionDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: {\r\n      ...this.approvalActionFormConfig,\r\n      fields: [\r\n        {\r\n          name: 'comments', type: 'text-area', required: false, span: true, rows: 3,\r\n          infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.'\r\n        }\r\n      ],\r\n    },\r\n    mode: 'edit',\r\n    buttons: [\r\n      { name: 'edit', display: 'Approve', color: 'green', action: { url: 'approve', method: 'post' } } //url preconfigured to be dynamic\r\n    ]\r\n  };\r\n\r\n  declineActionDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: {...this.approvalActionFormConfig,\r\n      fields: [\r\n        {\r\n          name: 'comments', type: 'text-area', required: true, span: true, rows: 3,\r\n          infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.',\r\n          hint : 'Decline comment is required !'\r\n        }\r\n      ],\r\n    },\r\n    mode: 'edit',\r\n    buttons: [\r\n      { name: 'edit', display: 'Decline', color: 'red', action: { url: 'decline', method: 'post' } } //url preconfigured to be dynamic\r\n    ]\r\n  }\r\n\r\n\r\n\r\n  approveButton: Button = {\r\n    name: 'approve', tip: 'Approve Request', dialog: true, inDialog: true, icon: { name: 'done' }, color: 'green', detailsConfig: this.approveActionDetailsConfig, ignorePendingApproval: true,\r\n    visible: x => x && x.canAction && (!x.isMyApprovalRequest || this.myRole[this.capSelfApproval.name]),\r\n  }\r\n\r\n  declineButton: Button = {\r\n    name: 'decline', tip: 'Decline Request', dialog: true, inDialog: true, icon: { name: 'close' }, color: 'red', detailsConfig: this.declineActionDetailsConfig, ignorePendingApproval: true,\r\n    visible: x => x && x.canAction && (!x.isMyApprovalRequest || this.myRole[this.capSelfApproval.name]),\r\n  }\r\n\r\n  cancelButton: Button = {\r\n    name: 'cancel', tip: 'Cancel Approval', inDialog: true, icon: { name: 'cancel' }, color: 'red', action: { url: 'cancel', method: 'post', }, ignorePendingApproval: true, //url preconfigured to be dynamic\r\n    confirm: { message: 'Cancel approval request? This will revert changes and stop the approval process.' },\r\n    visible: x => x && x.canCancel\r\n  }\r\n\r\n  approvalDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.approvalFormConfig,\r\n    heroField: 'approvalID',\r\n    tableConfigs: [this.approvalHistoryTableConfig],\r\n\r\n    stepConfig: {\r\n      steps: [],\r\n      loadAction: { url: `approvals/steps/{id}` },\r\n      loadIDField: 'approvalID',\r\n      valueField: 'currentLevel'\r\n    },\r\n\r\n    buttons : [\r\n      this.approveButton,\r\n      this.declineButton,\r\n      this.cancelButton\r\n    ]\r\n\r\n  };\r\n\r\n\r\n  viewApprovalButton: Button = {\r\n    name: 'info', tip: 'Approval Information', dialog: true, icon: { name: 'info',  }, detailsConfig: this.approvalDetailsConfig, ignorePendingApproval: true,\r\n    visible: x => x.canAction || x.canCancel\r\n  }\r\n\r\n\r\n  //received approvals\r\n  receivedApprovalsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['message', 'statusName'],\r\n    minButtons: ['view', 'approve', 'decline'],\r\n    flatButtons: true,\r\n    greyOut: (x) => x.isGreyedOut,\r\n    // logResponse: true,\r\n    collapseButtons: true,\r\n    columns: [\r\n      { name: 'createdDate', type: 'datetime', alias: 'Date' },\r\n      { name: 'createdByName', alias: 'Request By', type: 'text' },\r\n      { name: 'message', type: 'text' },\r\n      {\r\n        name: 'typeName', alias: 'Type', type: 'chip',\r\n        colors: [\r\n          { name: '#66BB6A', condition: x => x.type === 0 },\r\n          { name: 'orange', condition: x => x.type === 1 },\r\n          { name: '#F44336', condition: x => x.type === 2 }\r\n        ]\r\n      },\r\n      {\r\n        name: 'statusName', alias: 'Status', type: 'chip', detailsConfig: this.approvalDetailsConfig,\r\n        colors: [\r\n          { name: '#90A4AE', condition: x => x.status === 0 },\r\n          { name: '#66BB6A', condition: x => x.status === 1 },\r\n          { name: '#F44336', condition: x => x.status === 2 }\r\n        ]\r\n      },\r\n      {\r\n        name: 'currentLevelName', type: 'text', alias: 'Current Level',\r\n        icons: [\r\n          { name: 'done', color: '#66BB6A', condition: x => x.status === 'Approved', tip: 'Approved' },\r\n          { name: 'close', color: '#F44336', condition: x => x.status === 'Declined', tip: 'Declined' },\r\n          { name: 'schedule', color: '#FFC107', condition: x => x.status === 'Pending', tip: 'Pending' }\r\n        ]\r\n      },\r\n      { name: 'updatedByName', alias: 'Actioned By', type: 'text' },\r\n      { name: 'updatedDateDisplay', type: 'datetime', alias: 'Actioned Date' },\r\n    ],\r\n\r\n    buttons: [\r\n      this.viewApprovalButton,\r\n      this.approveButton,\r\n      this.declineButton,\r\n      this.cancelButton,\r\n    ],\r\n\r\n    loadAction: { url: 'approvals/all/x' }\r\n  };\r\n\r\n\r\n  //send approvals\r\n  sentApprovalsTableConfig: TableConfig = {\r\n    ...this.receivedApprovalsTableConfig,\r\n    buttons: [\r\n      this.viewApprovalButton,\r\n      this.cancelButton,\r\n    ],\r\n    loadAction: { url: 'approvals/sent/x' }\r\n  };\r\n\r\n\r\n  //---------------------------Other code\r\n\r\n  private listCache: { [key: string]: any } = {};\r\n  private cacheTimestamps: { [key: string]: number } = {};\r\n  private ongoingRequests: { [key: string]: Observable<ApiResponse> } = {};\r\n\r\n  public CallApi(action: Action, data: any = '' ) {\r\n\r\n\r\n    if (!action?.url) {\r\n      console.warn('Invalid action or missing URL');\r\n      return of({ success: false, message: 'Invalid action configuration' });\r\n    }\r\n\r\n    // console.log(\"calling\", action);\r\n\r\n\r\n    if (!action.method || action.method === 'get') {\r\n      return this.handleCachedCall(action);\r\n    } else if (action.method === 'post') {\r\n      let request: Observable<ApiResponse>;\r\n      \r\n      if (action.isFormData) {\r\n        request = this.httpService.Post_FormData(action.url, data) as Observable<ApiResponse>;\r\n      } else if (action.url === 'approve' || action.url === 'decline' || action.url === 'cancel') {\r\n        request = this.httpService.Post(`${data.endpoint}/approve?action=${action.url}`, data);\r\n      } else {\r\n        request = this.httpService.Post(action.url, data);\r\n      }\r\n\r\n      // Invalidate cache after successful CRUD operations\r\n      return request.pipe(\r\n        tap((response: ApiResponse) => {\r\n          if (response.success && this.isCrudAction(action.url)) {\r\n            const entityName = this.extractEntityName(action.url);\r\n            if (entityName) {\r\n              console.log('Invalidating cache for:', entityName);\r\n              this.invalidateListCache(entityName);\r\n            }\r\n          }\r\n        })\r\n      );\r\n    } else {\r\n      return this.httpService.Post(action.url, data);\r\n    }\r\n\r\n  }\r\n\r\n  private isCrudAction(url: string): boolean {\r\n    return url.includes('?action=create') || \r\n           url.includes('?action=edit') || \r\n           url.includes('?action=delete');\r\n  }\r\n\r\n  private extractEntityName(url: string): string | null {\r\n    const match = url.match(/^([^?]+)/);\r\n    return match ? match[1] : null;\r\n  }\r\n\r\n  private handleCachedCall(action: Action): Observable<ApiResponse> {\r\n    const cacheKey = this.generateCacheKey(action.url);\r\n    \r\n    // Check if we should use cache\r\n    if (!action.skipCache && this.isCacheValid(cacheKey, action)) {\r\n      console.log('Using cache:', cacheKey);\r\n      return of({\r\n        success: true,\r\n        message: 'success',\r\n        data: this.listCache[cacheKey]\r\n      });\r\n    }\r\n\r\n    // Check if there's an ongoing request for the same URL\r\n    if (this.ongoingRequests[cacheKey]) {\r\n      console.log('Using ongoing request for:', cacheKey);\r\n      return this.ongoingRequests[cacheKey];\r\n    }\r\n\r\n    // Determine cache duration\r\n    const cacheDuration = this.getCacheDuration(action);\r\n    \r\n    // Only cache if duration is specified or it's a list endpoint\r\n    if (cacheDuration > 0) {\r\n      // Create and store the ongoing request\r\n      this.ongoingRequests[cacheKey] = this.httpService.Get(action.url).pipe(\r\n        timeout(60000), // 1 minute timeout for waiting requests\r\n        tap((response: ApiResponse) => {\r\n          if (response.success && response?.data) {\r\n            this.listCache[cacheKey] = response.data;\r\n            this.cacheTimestamps[cacheKey] = Date.now(); // Use current time when response is received\r\n          }\r\n        }),\r\n        finalize(() => {\r\n          delete this.ongoingRequests[cacheKey];\r\n        }),\r\n        share() \r\n      );\r\n\r\n      return this.ongoingRequests[cacheKey];\r\n    } else {\r\n      // No caching - clear any existing cache for this key\r\n      if (this.listCache[cacheKey]) {\r\n        delete this.listCache[cacheKey];\r\n        delete this.cacheTimestamps[cacheKey];\r\n      }\r\n      return this.httpService.Get(action.url);\r\n    }\r\n  }\r\n\r\n  private generateCacheKey(url: string): string {\r\n    return url; // URL already includes query params\r\n  }\r\n\r\n  private isCacheValid(cacheKey: string, action: Action): boolean {\r\n    if (!this.listCache[cacheKey] || !this.cacheTimestamps[cacheKey]) {\r\n      return false;\r\n    }\r\n\r\n    const cacheDuration = this.getCacheDuration(action);\r\n    const currentTime = Date.now();\r\n    const cacheAge = currentTime - this.cacheTimestamps[cacheKey];\r\n    \r\n    return cacheAge < (cacheDuration * 60 * 1000); \r\n  }\r\n\r\n  private getCacheDuration(action: Action): number {\r\n    // If explicitly specified in action, use that\r\n    if (action.cacheDurationMinutes !== undefined) {\r\n      return action.cacheDurationMinutes;\r\n    }\r\n    \r\n    // Check centralized cache config\r\n    const configuredDuration = this.cacheConfig.getDuration(action.url);\r\n    if (configuredDuration !== null) {\r\n      return configuredDuration;\r\n    }\r\n    \r\n    // No caching by default\r\n    return 0;\r\n  }\r\n\r\n  public ClearCache(): void {\r\n    this.listCache = {};\r\n    this.cacheTimestamps = {};\r\n\r\n\r\n    Object.keys(this.ongoingRequests).forEach(key => {\r\n      delete this.ongoingRequests[key];\r\n    });\r\n  }\r\n\r\n  public invalidateListCache(entityUrl: string): void {\r\n    Object.keys(this.listCache).forEach(key => {\r\n      if (key.includes(entityUrl)) {\r\n        delete this.listCache[key];\r\n        delete this.cacheTimestamps[key];\r\n        delete this.ongoingRequests[key];\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n  public CheckWelcomed(path: string = 'home/admin/welcome') {\r\n    this.CallApi({ url: 'tenant/welcome/x' }).subscribe((x) => {\r\n      if (!x.data) {\r\n        this.Navigate(path)\r\n      }\r\n    })\r\n  }\r\n\r\n\r\n\r\n  public Navigate(path: string) {\r\n    this.router.navigate([path]);\r\n  }\r\n\r\n  public NavigateWithValue(path: string, value : string){\r\n    this.router.navigate([path], {\r\n      queryParams: { v: value },\r\n      queryParamsHandling: 'merge',\r\n      skipLocationChange: false\r\n    });\r\n  }\r\n\r\n  public GetNavigationValue(){\r\n    if (this.route.snapshot.queryParams[\"v\"] != undefined) {\r\n      return this.route.snapshot.queryParams[\"v\"]\r\n    }else{\r\n      return \"\";\r\n    }\r\n  }\r\n\r\n  public tmpAccountID;\r\n\r\n\r\n\r\n  //Users\r\n  public GetUser() {\r\n    return this.httpService.Get(\"User/all/x\");\r\n  }\r\n\r\n  public RegisterAccount(u) {\r\n    return this.httpService.Post(\"User/register\", u);\r\n  }\r\n\r\n  public GetUserByID(val: string) {\r\n    return this.httpService.Get(`User/id/${val}`);\r\n  }\r\n\r\n  public UpdateUser(profile) {\r\n    return this.httpService.Post(\"User/edit\", profile);\r\n  }\r\n\r\n  public UnlockUser(user) {\r\n    return this.httpService.Post(\"User/unlock\", user);\r\n  }\r\n\r\n  public LockUser(user) {\r\n    return this.httpService.Post(\"User/lock\", user);\r\n  }\r\n\r\n  public DeleteUser(user) {\r\n    return this.httpService.Post(\"User/delete\", user);\r\n  }\r\n\r\n  public Login(u: User) {\r\n    return this.httpService.Post(\"User/login\", u);\r\n  }\r\n\r\n  // Added: BehaviorSubject to pass signup data from login redirect to signup page\r\n  private pendingSignupSource = new BehaviorSubject<SignupData | null>(null);\r\n  public pendingSignup$ = this.pendingSignupSource.asObservable();\r\n\r\n  // Added: Store pending signup data when login returns signup_required\r\n  public SetPendingSignup(data: SignupData) {\r\n    this.pendingSignupSource.next(data);\r\n  }\r\n\r\n  // Added: Clear pending signup data after consumption\r\n  public ClearPendingSignup() {\r\n    this.pendingSignupSource.next(null);\r\n  }\r\n\r\n  // Added: Submit signup to backend\r\n  public Signup(data: SignupData) {\r\n    return this.httpService.Post(\"User/signup\", data);\r\n  }\r\n\r\n  public ChangePassword(u) {\r\n    return this.httpService.Post(\"User/changepassword-self\", u);\r\n  }\r\n\r\n  public ChangePasswordAdmin(u) {\r\n    return this.httpService.Post(\"User/changepassword-admin\", u);\r\n  }\r\n\r\n  public SelfReset(u: User): Observable<any> {\r\n    return this.httpService.Post(\"Basic/SelfReset\", u);\r\n  }\r\n\r\n\r\n  //Roles\r\n\r\n  public PostRole(role, action: string) {\r\n    return this.httpService.Post(`Role?action=${action}`, role);\r\n  }\r\n\r\n  public PutRole(role) {\r\n    return this.httpService.Put(\"Role\", role);\r\n  }\r\n\r\n  public GetRole(by: string, val: string) {\r\n    return this.httpService.Get(\"Role/all/x\");\r\n  }\r\n\r\n\r\n\r\n  //Logs\r\n  public GetLog(by: string, val: string) {\r\n    return this.httpService.Get(\"Log/all/x\");\r\n  }\r\n\r\n\r\n  //Settings\r\n  public GetSetting(by: string, val: string) {\r\n    return this.httpService.Get(\"Setting/all/x\");\r\n  }\r\n\r\n  public UpdateSetting(setting, action: string) {\r\n    return this.httpService.Post(`Setting?action=${action}`, setting);\r\n  }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class LoaderService {\r\n\r\n  public isLoading = new BehaviorSubject(false);\r\n  constructor() { }\r\n}\r\n","// InjectionToken for the default details dialog component\r\n// This breaks the circular dependency by allowing components to use the dialog without importing it directly\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const DETAILS_DIALOG_COMPONENT = new InjectionToken<any>('DetailsDialogComponent');\r\n","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { AlertMessage, AlertConfig, Button, Column, DetailsDialogConfig, TableConfig } from '../classes/Classes';\r\n// import { DetailsDialog } from '../components/table/detailsDialog.component';\r\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { DetailsDialogProcessor } from '../classes/TinCore';\r\nimport { DETAILS_DIALOG_COMPONENT } from './dialog-component.token'; // Changed: Import token for default dialog component\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n  private smallScreen = false;\r\n\r\n  constructor(\r\n    private dialog: MatDialog,\r\n    private breakpointObserver: BreakpointObserver,\r\n    @Optional() @Inject(DETAILS_DIALOG_COMPONENT) private defaultDialogComponent: any // Changed: Inject default dialog component\r\n  ) {\r\n    // Detect screen size changes\r\n    this.breakpointObserver.observe([\"(max-width: 600px)\"]).subscribe((result: BreakpointState) => {\r\n      this.smallScreen = result.matches;\r\n    });\r\n  }\r\n\r\n  openDetailsDialog<T>( config: DetailsDialogConfig, dialogComponent: new (...args: any[]) => T  ): {\r\n    afterClosed: Observable<any>,\r\n    inputChange: Observable<any>,\r\n    dialogRef: MatDialogRef<T>\r\n  } {\r\n    const hasTables = config.tableConfigs?.length > 0;\r\n\r\n    const dialogOptions = {\r\n      width: config.options?.width ? config.options?.width : (this.smallScreen ? '900px' : (hasTables ? '90%' : '900px')),\r\n      height: config.options?.height ? config.options?.height : (hasTables ? '90%' : 'auto'),\r\n      maxWidth: '100vw',\r\n      data: config\r\n    };\r\n\r\n    const dialogRef = this.dialog.open(dialogComponent, dialogOptions);\r\n\r\n    return {\r\n      afterClosed: dialogRef.afterClosed(),\r\n      inputChange: (dialogRef.componentInstance as any).inputChange,\r\n      dialogRef: dialogRef\r\n    };\r\n  }\r\n\r\n  openConfiguredDetailsDialog<T>( button: Button, row: any, dialogComponent: new (...args: any[]) => T ): Observable<any> {\r\n\r\n    // const button = column ? { name: column.name, dialog: true, detailsConfig: column.detailsConfig } : config.buttons?.find(b => b.name === buttonName);\r\n\r\n    // console.log('button', button);\r\n\r\n    if (!button || !button.dialog) {\r\n      return new Observable(observer => {\r\n        observer.next({ action: 'doAction', name: button.name, row: row });\r\n        observer.complete();\r\n      });\r\n    }\r\n\r\n    let config = button.detailsConfig;\r\n\r\n    //approval message\r\n    if (row?.pendingApproval && !['Approval', 'Approval Action'].includes(config?.formConfig.title)) { //if pending and not the actual view approval dialog //&& config?.formConfig.title != 'Approval'\r\n      let approvalAlerts: AlertConfig = { messages: [{ type: 'info', message: 'Waiting for approval', hiddenCondition: x => !x.pendingApproval }] }  // Changed: content to message\r\n      if (!config.formConfig.alertConfig){\r\n        config.formConfig.alertConfig = approvalAlerts;\r\n      }\r\n      else if (config.formConfig.alertConfig.messages.filter(x => x.message === approvalAlerts.messages[0].message).length === 0) {  // Changed: content to message\r\n        config.formConfig.alertConfig.messages.push(approvalAlerts.messages[0]);\r\n      }\r\n    }\r\n\r\n\r\n\r\n    let dialogConfig: DetailsDialogConfig = {\r\n      formConfig: config.formConfig,\r\n      buttons: config.buttons,\r\n      details: row,\r\n      stepConfig : config.stepConfig\r\n      // heroField : config.heroField,\r\n\r\n    };\r\n\r\n\r\n\r\n\r\n    if (button.detailsConfig) {\r\n      dialogConfig = button.name === 'create' ? {...button.detailsConfig, tableConfigs : undefined, stepConfig : undefined, details: row} : DetailsDialogProcessor.processDetailsConfig({ ...button.detailsConfig }, row); // Changed: Merge row data into create mode for pre-filling fields (e.g., group header actions)\r\n    }else{\r\n      dialogConfig = DetailsDialogProcessor.processDetailsConfig({...dialogConfig}, row);\r\n    }\r\n\r\n\r\n\r\n    if (button.detailsConfig && button.detailsConfig.mode) {\r\n      dialogConfig.formConfig.mode = button.detailsConfig.mode;\r\n    } else {\r\n      dialogConfig.formConfig.mode = button.name === 'create' ? 'create' : (button.name === 'edit' ? 'edit' : 'view');\r\n    }\r\n\r\n\r\n\r\n    if (button.name === 'create') {\r\n      dialogConfig.heroField = config.heroField;\r\n      dialogConfig.heroValue = config.heroValue;\r\n    }\r\n\r\n\r\n\r\n    if (row?.updatedByDetails && dialogConfig.formConfig.includeAudit === true && !dialogConfig.formConfig.fields.some(f => f.name === 'updatedByDetails')) {\r\n      dialogConfig.formConfig.fields.push(\r\n        { name: 'updatedByDetails', type: 'string', span: true, readonly: true, size: '12px',}\r\n      );\r\n    }\r\n\r\n    const dialogResult = this.openDetailsDialog(dialogConfig, dialogComponent);\r\n\r\n    return new Observable(observer => {\r\n      dialogResult.afterClosed.subscribe(result => {\r\n        observer.next(result);\r\n        observer.complete();\r\n      });\r\n\r\n      dialogResult.inputChange.subscribe(change => {\r\n        observer.next({ action: 'inputChange', change: change });\r\n      });\r\n    });\r\n  }\r\n\r\n  // Changed: Added method to open details dialog using the default component (breaks circular dependencies)\r\n  openDefaultDetailsDialog(button: Button, row: any, nestingLevel: number = 0): Observable<any> { // Changed: Added nestingLevel parameter to propagate nesting depth\r\n    if (!this.defaultDialogComponent) {\r\n      console.error('Default dialog component not provided. Ensure DETAILS_DIALOG_COMPONENT is provided in the module.');\r\n      return new Observable(observer => {\r\n        observer.error('Default dialog component not configured');\r\n        observer.complete();\r\n      });\r\n    }\r\n    // Changed: Set nestingLevel on the button's detailsConfig before opening\r\n    if (button.detailsConfig) {\r\n      button.detailsConfig.nestingLevel = nestingLevel;\r\n    }\r\n    return this.openConfiguredDetailsDialog(button, row, this.defaultDialogComponent);\r\n  }\r\n\r\n  // Changed: Open details dialog using the token-injected default component (avoids circular imports)\r\n  openDefaultDialog(config: DetailsDialogConfig): { afterClosed: Observable<any>, inputChange: Observable<any>, dialogRef: MatDialogRef<any> } {\r\n    if (!this.defaultDialogComponent) {\r\n      console.error('Default dialog component not provided. Ensure DETAILS_DIALOG_COMPONENT is provided in the module.');\r\n      return { afterClosed: new Observable(), inputChange: new Observable(), dialogRef: null as any };\r\n    }\r\n    return this.openDetailsDialog(config, this.defaultDialogComponent);\r\n  }\r\n\r\n  openPrintDialog(htmlContent: any) {\r\n    // Create hidden iframe for silent printing\r\n    const iframe = document.createElement('iframe');\r\n    iframe.style.position = 'absolute';\r\n    iframe.style.width = '0';\r\n    iframe.style.height = '0';\r\n    iframe.style.border = 'none';\r\n    iframe.style.visibility = 'hidden';\r\n    \r\n    document.body.appendChild(iframe);\r\n    \r\n    if (iframe.contentWindow) {\r\n      iframe.contentWindow.document.open();\r\n      iframe.contentWindow.document.write(htmlContent);\r\n      iframe.contentWindow.document.close();\r\n      \r\n      // Wait for content to load, then print silently\r\n      iframe.onload = () => {\r\n        setTimeout(() => {\r\n          if (iframe.contentWindow) {\r\n            iframe.contentWindow.print();\r\n            // Remove iframe after printing\r\n            setTimeout(() => {\r\n              document.body.removeChild(iframe);\r\n            }, 1000);\r\n          }\r\n        }, 250);\r\n      };\r\n    }\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { FormConfig, TableConfig, DetailsDialogConfig, Button, TileConfig, Column } from '../classes/Classes';\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { InvoiceStatus } from '../classes/LibClasses'; // Changed: Removed AssetStatus — moved to AssetsService\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AccountingService {\r\n\r\n  private dataService = inject(DataServiceLib);\r\n\r\n  //--------------------------Accounts Base-------------------------\r\n  accountFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capAccounts] },\r\n    title: 'Financial Account',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'type', type: 'select', required: true, loadAction: { url: 'accounts/list/accountTypes' } },\r\n      { name: 'currencyID', type: 'select', alias: 'Currency', loadAction: { url: 'currencies/list/x' } }, // Changed: Added currency select for multi-currency support\r\n      { name: 'balanceDisplay', alias: 'Balance', type: 'label', readonly: true, hideOnCreate: true },\r\n      { name: 'includeInCashTotal', type: 'checkbox', alias: 'Include in Cash Total', hiddenCondition: (data: any) => data.type !== 0 }, // Changed: Only visible for Asset accounts (type 0)\r\n      { name: 'includeInBankTotal', type: 'checkbox', alias: 'Include in Bank Total', hiddenCondition: (data: any) => data.type !== 0 }, // Changed: Only visible for Asset accounts (type 0)\r\n    ],\r\n    loadAction: { url: 'accounts/id' },\r\n    heroField: 'accountID',\r\n  }\r\n\r\n  accountCreateButton: Button = { name: 'create', display: 'Create Account', dialog: true, action: { url: 'accounts?action=create', method: 'post' } }\r\n  finAccounEditButton: Button = { name: 'edit', dialog: true, action: { url: 'accounts?action=edit', method: 'post' } }\r\n\r\n\r\n\r\n    accountBaseDetailsConfig : DetailsDialogConfig = {\r\n      formConfig: this.accountFormConfig,\r\n      tableConfigs: [],\r\n      heroField: 'accountID',\r\n      buttons: [this.accountCreateButton, this.finAccounEditButton]\r\n    };\r\n\r\n  //--------------------------Invoices-------------------------\r\n\r\n  // Added: Invoice payment form configuration\r\n  invoicePaymentFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capAccountingInvoices] },\r\n    title: 'Record Payment',\r\n    fixedTitle : true,\r\n    fields: [\r\n      { name: 'invoiceID', type: 'number', hidden : true},\r\n      { name: 'paymentDate', type: 'date', alias: 'Payment Date', required: true },\r\n      { name: 'method', type: 'select', alias: 'Payment Method', required: true, defaultValue : 1, loadAction: { url: 'invoicepayments/list/methods' } },\r\n      { name: 'currencyID', type: 'select', alias: 'Currency', loadAction: { url: 'currencies/list/x' }, defaultFirstValue: true, infoMessage: 'Currency for this payment (defaults to base currency)' }, // Changed: Added currency select for multi-currency payments\r\n      { name: 'outstandingAmount', type: 'label', alias: 'Outstanding', readonly: true},\r\n      { name: 'amount', type: 'money', alias: 'Amount', required: true, span : true },\r\n      \r\n      { name: 'reference', type: 'text', alias: 'Reference', span : true }\r\n    ],\r\n  }\r\n\r\n  invoicePaymentCreateButton : Button = { name : 'edit', action: { url: 'invoicepayments?action=create', method: 'post', successMessage: 'Payment Recorded' }};\r\n\r\n  invoicePaymentsCreateDetailsDialogConfig: DetailsDialogConfig = {\r\n    formConfig: this.invoicePaymentFormConfig, \r\n    heroField: 'invoiceID',\r\n    mode: 'edit',\r\n    buttons: [\r\n      this.invoicePaymentCreateButton\r\n    ]\r\n  }\r\n\r\n\r\n  // Added: Invoice payments table for history tracking\r\n  invoicePaymentsTableConfig: TableConfig = {\r\n    tabTitle: 'Payment History',\r\n    showFilter: false,\r\n    minColumns: ['paymentDate', 'amount', 'methodName'],\r\n    columns: [\r\n      { name: 'paymentDate', type: 'date', alias: 'Date' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'methodName', type: 'text', alias: 'Method' },\r\n      { name: 'reference', type: 'text', alias: 'Reference' }\r\n    ],\r\n    buttons: [\r\n      { name: 'migrate-payments', display: 'Migrate Legacy Payments', inHeader: true, icon: { name: 'sync', color: 'green' },\r\n        action: { url: 'invoicepayments/migrate', method: 'post',\r\n        successMessage: 'Migration completed successfully' },\r\n        confirm: { message: 'This will migrate existing invoice payments from the legacy PaidAmount field to the new InvoicePayments table. Continue?' }\r\n      },\r\n      { name: 'edit', dialog: true, action: { url: 'invoicepayments?action=edit', method: 'post' }, visible: x => x.status != InvoiceStatus.Paid }, // Changed: Added edit button, hide on Paid invoices\r\n      { name: 'delete', inDialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'invoicepayments?action=delete', method: 'post', successMessage: 'Payment deleted' }, confirm: { message: 'Delete this payment? The linked financial transaction will be reversed.' }, visible: x => x.status != InvoiceStatus.Paid } // Changed: Added delete button with reversal warning, hide on Paid invoices\r\n    ],\r\n    loadAction: { url: 'invoicepayments/x/x' }, loadCriteria: 'invoice', loadIDField: 'invoiceID',\r\n    formConfig: { // Changed: Added form for editing payments\r\n      title: 'Edit Payment',\r\n      fields: [\r\n        { name: 'paymentDate', type: 'date', alias: 'Payment Date', required: true },\r\n        { name: 'method', type: 'select', alias: 'Payment Method', required: true, loadAction: { url: 'invoicepayments/list/methods' } },\r\n        { name: 'amount', type: 'money', alias: 'Amount', required: true },\r\n        { name: 'reference', type: 'text', alias: 'Reference' }\r\n      ],\r\n      loadAction: { url: 'invoicepayments/id' }\r\n    }\r\n  }\r\n\r\n  // Invoice form configuration with customer and status fields\r\n  invoiceFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capAccountingInvoices] },\r\n    title: 'Invoice',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'invoiceDate', type: 'date', required: true },\r\n      { name: 'invoiceNumber', type: 'text', alias: 'Invoice #' }, // Changed: Made editable on create for optional manual numbering\r\n      \r\n      { name: 'customerID', alias: 'Customer', type: 'select', required: true, loadAction: { url: 'customers/list/x' }, detailsConfig: this.dataService.customerDetailsConfig },\r\n      { name: 'paymentTerms', type: 'select', alias: 'Payment Terms', required: true, defaultValue : 30, loadAction: { url: 'invoices/list/payment-terms' } },\r\n      { name: 'dueDate', type: 'date', alias: 'Due Date', readonly: true, hideOnCreate: true },\r\n      { name: 'status', type: 'select', hideOnCreate: true, readonly: true, loadAction: { url: 'invoices/list/statuses' } },\r\n      { name: 'subTotal', type: 'money', alias: 'Sub Total', readonly: true, hideOnCreate: true }, // Changed: Show SubTotal (before tax)\r\n      { name: 'taxTotal', type: 'money', alias: 'VAT', readonly: true, hideOnCreate: true }, // Changed: Show TaxTotal (VAT amount)\r\n      { name: 'totalDisplay', type: 'label', alias: 'Total', format: 'text', readonly: true, hideOnCreate: true },\r\n      { name: 'paidAmount', type: 'label', alias: 'Paid', readonly: true, hideOnCreate: true },\r\n      { name: 'outstandingAmount', type: 'label', alias: 'Outstanding', readonly: true, hideOnCreate: true }\r\n    ],\r\n    loadAction: { url: 'invoices/id' },\r\n    heroField: 'invoiceID',\r\n  }\r\n\r\n  // Invoice items form configuration\r\n  invoiceItemsFormConfig: FormConfig = {\r\n    title: 'Invoice Item',\r\n    fields: [\r\n      { name: 'itemType', type: 'select', required: true, alias: 'Item Type', loadAction: { url: 'invoiceitems/list/item-types' }, defaultValue: 0 }, // Added: Item type selector\r\n      { name: 'productID', type: 'select', alias: 'Product', loadAction: { url: 'products/list/invoice-items' },\r\n        hiddenCondition: x => x.itemType !== 1, // Added: Product selector - visible only when itemType = Product (1)\r\n        onSelectChange: (selectedId: number, formData: any, option?: any) => { // Changed: Auto-populate description and unitPrice when product is selected\r\n          if (option) {\r\n            formData.description = option.description || option.name;\r\n            formData.unitPrice = option.unitPrice;\r\n          }\r\n        }\r\n      },\r\n      { name: 'serviceItemID', type: 'select', alias: 'Service', loadAction: { url: 'serviceitems/list/active' },\r\n        hiddenCondition: x => x.itemType !== 2, // Added: Service selector - visible only when itemType = Service (2)\r\n        onSelectChange: (selectedId: number, formData: any, option?: any) => { // Changed: Auto-populate description and unitPrice when service is selected\r\n          if (option) {\r\n            formData.description = option.description || option.name;\r\n            formData.unitPrice = option.unitPrice;\r\n          }\r\n        }\r\n      },\r\n      { name: 'description', type: 'text', required: true, alias: 'Description', span: true }, // Changed: Description field (backend will populate for Product/Service)\r\n      { name: 'quantity', type: 'number', required: true, defaultValue : 1 },\r\n      { name: 'unitPrice', type: 'money', alias: 'Unit Price', required: true }, // Changed: Unit price field (backend will populate for Product/Service)\r\n      { name: 'poNumber', type: 'text', alias: 'PO Number',}, // Added: PO Number for invoice bundling\r\n    ],\r\n    loadAction: { url: 'invoiceitems/id' }, // Fixed: removed placeholder - TinCore appends ID automatically\r\n    heroField: 'invoiceItemID',\r\n  }\r\n\r\n  invoiceItemEditButton: Button = { name: 'edit', dialog: true, action: { url: 'invoiceitems?action=edit', method: 'post' }, disabled: x => x.status != InvoiceStatus.Draft }\r\n\r\n  // Invoice item details dialog config\r\n  invoiceItemDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.invoiceItemsFormConfig,\r\n    heroField: 'invoiceItemID',\r\n    buttons: [\r\n      this.invoiceItemEditButton\r\n    ]\r\n  }\r\n\r\n  // Added: Move item form configuration - select destination invoice\r\n  invoiceMoveItemFormConfig: FormConfig = {\r\n    title: 'Move Item',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'invoiceItemID', type: 'number', hidden: true },\r\n      { name: 'description', type: 'label', alias: 'Item', readonly: true, span: true },\r\n      { name: 'invoiceID', type: 'select', alias: 'Move to Invoice', required: true, span: true, loadAction: { url: 'invoiceitems/list/draft-invoices' } }\r\n    ],\r\n    loadAction: { url: 'invoiceitems/id' }, // Fixed: removed placeholder - TinCore appends ID automatically\r\n    heroField: 'invoiceItemID'\r\n  }\r\n\r\n  // Added: Move item details dialog config\r\n  invoiceMoveItemDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.invoiceMoveItemFormConfig,\r\n    heroField: 'invoiceItemID',\r\n    mode: 'edit',\r\n    buttons: [\r\n      { name: 'move', display: 'Move Item', icon: { name: 'swap_horiz', color: 'blue' }, inDialog: true, action: { url: 'invoiceitems?action=move', method: 'post', successMessage: 'Item moved successfully' } }\r\n    ]\r\n  }\r\n\r\n  // Invoice items table for manual line item entry\r\n  invoiceItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Invoice Items',\r\n    showFilter: false,\r\n    minColumns: ['description', 'quantity', 'amount'],\r\n    causeFormRefresh: true,\r\n    columns: [\r\n      { name: 'invoiceItemID', type: 'number', alias: 'ID', hiddenCondition: () => true },\r\n      { name: 'description', type: 'chip', alias: 'Description', detailsConfig: this.invoiceItemDetailsConfig },\r\n      { name: 'poNumber', type: 'text', alias: 'PO#' }, // Added: Purchase Order Number column\r\n      { name: 'quantity', type: 'number', alias: 'Qty' },\r\n      { name: 'unitPrice', type: 'money', alias: 'Unit Price' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'taxAmount', type: 'money', alias: 'Tax' }, // Changed: Show per-item tax amount\r\n      { name: 'lineTotal', type: 'money', alias: 'Total' } // Changed: Computed line total (amount + tax)\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'invoiceitems?action=create', method: 'post' }, disabled: x => x.status != InvoiceStatus.Draft },\r\n      this.invoiceItemEditButton,\r\n      { name: 'move', display: 'Move', dialog: true, icon: { name: 'swap_horiz' }, detailsConfig: this.invoiceMoveItemDetailsConfig, disabled: x => x.status != InvoiceStatus.Draft }, // Added: Move item button\r\n      { name: 'delete', inDialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'invoiceitems?action=delete', method: 'post', successMessage: 'Deleted' }, confirm: { message: 'Delete this item?' }, disabled: x => x.status != InvoiceStatus.Draft },\r\n    ],\r\n    loadAction: { url: 'invoiceitems/x/x' }, loadCriteria: 'invoice', loadIDField: 'invoiceID',\r\n    formConfig: this.invoiceItemsFormConfig // Changed: Reference extracted form config\r\n  }\r\n\r\n  // Invoice action buttons\r\n\r\n  invoiceRecordPaymentButton: Button = { name: 'record-payment', display: 'Record Payment', dialog: true, icon: { name: 'payment', color: 'blue' }, \r\n    detailsConfig : this.invoicePaymentsCreateDetailsDialogConfig,\r\n    visible: x => (x.status == InvoiceStatus.Submitted || x.status == InvoiceStatus.Paying) && x.outstandingAmount > 0 // Changed: Allow on both Submitted and Paying\r\n  } // Changed: Use detailsConfig to open payment form dialog\r\n\r\n  invoiceDiscardButton: Button = { name: 'discard', inDialog: true, display: 'Discard', icon: { name: 'close', color: 'red' },\r\n    action: { url: 'invoices?action=discard', method: 'post', successMessage: 'Discarded' },\r\n    confirm: { message: 'Invoice will be marked as cancelled?' },\r\n    visible: x => x.status == InvoiceStatus.Draft // Changed: Only allow on Draft (use Return for Submitted)\r\n  }\r\n\r\n  // Changed: Return button — reverts submitted invoice back to draft, reverses accounting transactions\r\n  invoiceReturnButton: Button = { name: 'return', inDialog: true, display: 'Return', icon: { name: 'undo', color: 'orange' },\r\n    action: { url: 'invoices?action=return', method: 'post', successMessage: 'Returned to Draft' },\r\n    confirm: { message: 'Return invoice to draft? This will reverse the receivable and VAT transactions.' },\r\n    visible: x => x.status == InvoiceStatus.Submitted\r\n  }\r\n\r\n  invoiceSubmitButton: Button = { name: 'submit', inDialog: true, display: 'Submit', icon: { name: 'send', }, \r\n    action: { url: 'invoices?action=submit', method: 'post', successMessage: 'Submitted' }, \r\n    confirm: { message: 'Submit invoice? This will record revenue and create an accounts receivable entry.' }, \r\n    visible: x => x.status == InvoiceStatus.Draft, \r\n    disabled: x => x.totalAmount == 0 \r\n  }\r\n\r\n  invoiceEditButton: Button = { name: 'edit', display: 'Save', dialog: true, action: { url: 'invoices?action=edit', method: 'post', },\r\n    confirm: { message: 'Proceed ?' },\r\n    visible: x => x.status == InvoiceStatus.Draft // Changed: Draft only\r\n  }\r\n\r\n  invoiceDownloadButton: Button = { name: 'pdf', display: 'Download PDF', inDialog: true, icon: { name: 'picture_as_pdf', color: 'red' } }\r\n\r\n  // Invoice details dialog with items, payments history, and action buttons\r\n  invoiceDetailsDialogConfig: DetailsDialogConfig = {\r\n    formConfig: this.invoiceFormConfig,\r\n    tableConfigs: [this.invoiceItemsTableConfig, this.invoicePaymentsTableConfig],\r\n    heroField: 'invoiceID',\r\n    buttons: [\r\n      this.invoiceSubmitButton,\r\n      this.invoiceRecordPaymentButton,\r\n      this.invoiceReturnButton, // Changed: Return submitted invoice to draft\r\n      this.invoiceDiscardButton,\r\n      this.invoiceEditButton\r\n    ]\r\n  }\r\n\r\n  invoiceViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.invoiceDetailsDialogConfig }\r\n\r\n  // Invoice summary tiles\r\n  invoicesTileConfig: TileConfig = {\r\n    clickable: true,\r\n    tiles: [\r\n      { name: 'drafts', alias: 'Draft Invoices', color: '#FFC107', icon: 'edit_note', info: 'Invoices in draft stage', action: { url: 'invoices/drafts/x' } }, // Changed: Added icon\r\n      { name: 'submitted', alias: 'Pending Payment', color: '#2196F3', icon: 'send', info: 'Submitted invoices awaiting payment', action: { url: 'invoices/submitted/x' } }, // Changed: Added icon\r\n      { name: 'pendingPayments', alias: 'Outstanding', color: '#F44336', icon: 'payments', info: 'Total amount pending payment' } // Changed: Added icon\r\n    ],\r\n    loadAction: { url: 'invoices/summary/x' }\r\n  }\r\n\r\n  // Main invoices table configuration\r\n  invoicesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['invoiceNumber', 'customerName', 'statusName'],\r\n    minButtons: ['view', 'pdf'],\r\n    flatButtons: true,\r\n    collapseButtons: true,\r\n    greyOut: x => x.status == InvoiceStatus.Paid || x.status == InvoiceStatus.Discarded, // Changed: Grey out both Paid and Discarded invoices\r\n    columns: [\r\n      { name: 'invoiceNumber', type: 'button', alias: 'Invoice #', detailsConfig : this.invoiceDetailsDialogConfig},\r\n      { name: 'poNumbers', type: 'text', alias: 'PO #' }, // Changed: Added PO numbers as second column\r\n      { name: 'customerName', type: 'text', alias: 'Customer' },\r\n      { name: 'invoiceDate', type: 'date' },\r\n      { name: 'dueDate', type: 'date', alias: 'Due Date' },\r\n      { name: 'daysOverdue', type: 'number', alias: 'Days Overdue',},\r\n      { name: 'statusName', type: 'chip', alias: 'Status', detailsConfig : this.invoiceDetailsDialogConfig,\r\n        colors: [\r\n          { name: '#FFCC80', condition: x => x.status == InvoiceStatus.Draft }, \r\n          { name: '#90CAF9', condition: x => x.status == InvoiceStatus.Submitted }, \r\n          { name: '#FFD54F', condition: x => x.status == InvoiceStatus.Paying }, // Changed: Added Paying status color (amber/yellow)\r\n          { name: '#A5D6A7', condition: x => x.status == InvoiceStatus.Paid }, \r\n          { name: '#EF9A9A', condition: x => x.status == InvoiceStatus.Discarded }\r\n        ] \r\n      },\r\n      { name: 'itemCount', type: 'number', alias: 'Items', icon: { name: 'info', color: '#1976D2', condition: x => x.itemCount > 0, tipField: 'itemDescriptions' } }, // Changed: Info icon with item descriptions tooltip\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' },\r\n      { name: 'paidAmount', type: 'money', alias: 'Paid' },\r\n      { name: 'outstandingAmount', type: 'money', alias: 'Outstanding' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, onSuccessButton : this.invoiceViewButton,\r\n        action: { url: 'invoices?action=create', method: 'post' } \r\n      },\r\n      // { name: 'view', dialog: true, detailsConfig: this.invoiceDetailsDialogConfig },\r\n      this.invoiceSubmitButton,\r\n      this.invoiceRecordPaymentButton,\r\n      this.invoiceReturnButton, // Changed: Return submitted invoice to draft\r\n      // this.invoicePayButton,\r\n      this.invoiceDiscardButton,\r\n      // this.invoiceEditButton,\r\n      // this.invoiceDownloadButton,\r\n    ],\r\n    loadAction: { url: 'invoices/all/x' },\r\n    formConfig: this.invoiceFormConfig,\r\n    tileConfig: this.invoicesTileConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'Invoice'\r\n  }\r\n\r\n  //--------------------------Aging Report-------------------------\r\n\r\n  // Added: Aging report summary tiles\r\n  agingTileConfig: TileConfig = {\r\n    // clickable: true,\r\n    tiles: [\r\n      { name: 'current', alias: 'Current', color: '#4CAF50', icon: 'check_circle', info: 'Not yet due' }, // Changed: Added icon\r\n      { name: 'days30', alias: '1-30 Days', color: '#FFC107', icon: 'schedule', info: '1-30 days overdue' }, // Changed: Added icon\r\n      { name: 'days60', alias: '31-60 Days', color: '#FF9800', icon: 'warning', info: '31-60 days overdue' }, // Changed: Added icon\r\n      { name: 'days90', alias: '61-90 Days', color: '#F44336', icon: 'error', info: '61-90 days overdue' }, // Changed: Added icon\r\n      { name: 'days90Plus', alias: '90+ Days', color: '#B71C1C', icon: 'dangerous', info: 'Over 90 days overdue' }, // Changed: Added icon\r\n      { name: 'total', alias: 'Total Outstanding', color: '#9E9E9E', icon: 'account_balance_wallet', info: 'Total outstanding amount' } // Changed: Added icon\r\n    ],\r\n    // loadAction: { url: 'invoices/aging-summary/x' }\r\n  }\r\n\r\n  // Added: Base aging table configuration with common properties\r\n  agingBaseTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['invoiceNumber', 'customerName', 'outstandingAmount'],\r\n    columns: [\r\n      { name: 'invoiceNumber', type: 'text', alias: 'Invoice #', detailsConfig : this.invoiceDetailsDialogConfig},\r\n      { name: 'customerName', type: 'text', alias: 'Customer' },\r\n      { name: 'invoiceDate', type: 'date', alias: 'Invoice Date' },\r\n      { name: 'dueDate', type: 'date', alias: 'Due Date' },\r\n      { name: 'daysOverdue', type: 'number', alias: 'Days Overdue' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' },\r\n      { name: 'paidAmount', type: 'money', alias: 'Paid' },\r\n      { name: 'outstandingAmount', type: 'money', alias: 'Outstanding' }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true, detailsConfig: this.invoiceDetailsDialogConfig },\r\n      this.invoiceRecordPaymentButton,\r\n    ]\r\n  }\r\n\r\n  //--------------------------Customer Invoices-------------------------\r\n\r\n  // Customer invoice form without customerID field\r\n  customerInvoiceFormConfig: FormConfig = {\r\n    ...this.invoiceFormConfig,\r\n    fields: this.invoiceFormConfig.fields.filter(x => ['customerID'].includes(x.name) == false),\r\n    loadAction: { url: 'invoices/customer-id' }\r\n  }\r\n\r\n  // Customer invoice items table (read-only view)\r\n  customerInvoiceItemsTableConfig: TableConfig = {\r\n    ...this.invoiceItemsTableConfig,\r\n    loadCriteria: 'customer-invoice',\r\n    buttons: []\r\n  }\r\n\r\n  // Added: Customer invoice payments table (read-only)\r\n  customerInvoicePaymentsTableConfig: TableConfig = {\r\n    ...this.invoicePaymentsTableConfig,\r\n    loadCriteria: 'customer-invoice'\r\n  }\r\n\r\n  // Customer invoice details dialog (read-only)\r\n  customerInvoiceDetailsDialogConfig: DetailsDialogConfig = {\r\n    formConfig: this.customerInvoiceFormConfig,\r\n    tableConfigs: [this.customerInvoiceItemsTableConfig, this.customerInvoicePaymentsTableConfig],\r\n    heroField: 'invoiceID',\r\n    buttons: []\r\n  }\r\n\r\n  // Customer invoices table configuration\r\n  customerInvoicesTableConfig: TableConfig = {\r\n    ...this.invoicesTableConfig,\r\n    minColumns: ['invoiceNumber', 'totalDisplay'],\r\n    minButtons: ['view', 'pdf'],\r\n    columns: [...this.invoicesTableConfig.columns.filter(x => ['invoiceNumber', 'invoiceDate', 'dueDate', 'statusName', 'itemCount', 'totalAmount', 'paidAmount', 'outstandingAmount'].includes(x.name))],\r\n    buttons: [{ name: 'view', dialog: true, detailsConfig: this.customerInvoiceDetailsDialogConfig }, this.invoiceDownloadButton],\r\n    loadAction: { url: 'invoices/customer-all/x' }\r\n  }\r\n\r\n  //--------------------------Statement-------------------------\r\n\r\n  // Changed: Statement form configuration (replaces Outstanding Invoices)\r\n  statementFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capAccountingOutstandingInvoices] },\r\n    title: 'Statement',\r\n    fields: []\r\n  }\r\n\r\n  // Changed: Statement table configuration — default view with smart date filtering\r\n  statementTableConfig: TableConfig = {\r\n    holdHeaderButtonSpace: true,\r\n    showFilter: true,\r\n    minColumns: ['invoiceNumber', 'customerName', 'statusName'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'invoiceNumber', type: 'button', alias: 'Invoice #', detailsConfig: this.invoiceDetailsDialogConfig }, // Changed: Clickable to open invoice dialog\r\n      { name: 'poNumbers', type: 'text', alias: 'PO #' }, // Changed: Moved to second column\r\n      { name: 'customerName', type: 'text', alias: 'Customer' },\r\n      { name: 'invoiceDate', type: 'date', alias: 'Date' },\r\n      { name: 'itemDescriptions', type: 'text', alias: 'Description', maxLength: 100 }, // Changed: Enforce max display length of 100 characters\r\n      { name: 'totalAmount', type: 'money', alias: 'Amount' },\r\n      { name: 'statusName', type: 'chip', alias: 'Status', detailsConfig: this.invoiceDetailsDialogConfig, // Changed: Clickable to open invoice dialog\r\n        colors: [\r\n          { name: '#90CAF9', condition: x => x.status == InvoiceStatus.Submitted },\r\n          { name: '#FFD54F', condition: x => x.status == InvoiceStatus.Paying },\r\n          { name: '#A5D6A7', condition: x => x.status == InvoiceStatus.Paid }\r\n        ]\r\n      },\r\n    ],\r\n    buttons: [],\r\n    loadAction: { url: 'invoices/statement/x' },\r\n    formConfig: this.statementFormConfig\r\n  }\r\n\r\n  // Changed: Statement search table configuration — search mode with filters\r\n  statementSearchTableConfig: TableConfig = {\r\n    ...this.statementTableConfig,\r\n    searchConfig: {\r\n      fields: [\r\n        { name: 'customerID', type: 'select', alias: 'Customer', show: true, loadAction: { url: 'customers/list/x' } },\r\n        { name: 'dateFrom', type: 'date', alias: 'From Date', show: true },\r\n        { name: 'dateTo', type: 'date', alias: 'To Date', show: true },\r\n        { name: 'status', type: 'select', alias: 'Status', show: true,\r\n          options: [\r\n            { name: 'All', value: '' },\r\n            { name: 'Submitted', value: InvoiceStatus.Submitted },\r\n            { name: 'Paying', value: InvoiceStatus.Paying },\r\n            { name: 'Paid', value: InvoiceStatus.Paid }\r\n          ]\r\n        }\r\n      ],\r\n      searchAction: { url: 'invoices/search?action=statement-search', method: 'post' }\r\n    }\r\n  }\r\n\r\n  //--------------------------Tax Rates-------------------------\r\n\r\n  // Changed: Tax Rate form configuration for VAT management\r\n  taxRateFormConfig: FormConfig = {\r\n    title: 'Tax Rate',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, alias: 'Name' },\r\n      { name: 'rate', type: 'number', required: true, alias: 'Rate (%)' },\r\n      { name: 'isDefault', type: 'checkbox', alias: 'Default Rate' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', defaultValue: true }\r\n    ],\r\n    loadAction: { url: 'taxrates/id' },\r\n    heroField: 'taxRateID'\r\n  }\r\n\r\n  taxRateCreateButton: Button = { name: 'create', display: 'Create Tax Rate', dialog: true, action: { url: 'taxrates?action=create', method: 'post' } }\r\n  taxRateEditButton: Button = { name: 'edit', dialog: true, action: { url: 'taxrates?action=edit', method: 'post' } }\r\n  taxRateDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'taxrates?action=delete', method: 'post' } }\r\n\r\n  taxRateDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.taxRateFormConfig,\r\n    heroField: 'taxRateID',\r\n    buttons: [this.taxRateCreateButton, this.taxRateEditButton, this.taxRateDeleteButton]\r\n  }\r\n\r\n  taxRatesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'rate', 'isActive'],\r\n    columns: [\r\n      { name: 'name', type: 'text', alias: 'Name' },\r\n      { name: 'rate', type: 'number', alias: 'Rate (%)' },\r\n      { name: 'isDefault', type: 'checkbox', alias: 'Default' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' }\r\n    ],\r\n    buttons: [\r\n      this.taxRateCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.taxRateDetailsConfig },\r\n      this.taxRateEditButton,\r\n      this.taxRateDeleteButton\r\n    ],\r\n    loadAction: { url: 'taxrates/all/x' },\r\n    formConfig: this.taxRateFormConfig,\r\n    realTime: true,\r\n    entityName: 'TaxRate'\r\n  }\r\n\r\n  //--------------------------Currencies-------------------------\r\n\r\n  // Changed: Currency form configuration for multi-currency management\r\n  currencyFormConfig: FormConfig = {\r\n    title: 'Currency',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'code', type: 'text', required: true, alias: 'Code' },\r\n      { name: 'name', type: 'text', required: true, alias: 'Name' },\r\n      { name: 'symbol', type: 'text', required: true, alias: 'Symbol' },\r\n      { name: 'exchangeRate', type: 'number', required: true, alias: 'Exchange Rate' },\r\n      { name: 'isBase', type: 'checkbox', alias: 'Base Currency',\r\n        readonlyCondition: (x: any) => x.isBase // Changed: Prevent unchecking base currency\r\n      }\r\n    ],\r\n    loadAction: { url: 'currencies/id' },\r\n    heroField: 'currencyID'\r\n  }\r\n\r\n  currencyCreateButton: Button = { name: 'create', display: 'Create Currency', dialog: true, action: { url: 'currencies?action=create', method: 'post' } }\r\n  currencyEditButton: Button = { name: 'edit', dialog: true, action: { url: 'currencies?action=edit', method: 'post' } }\r\n  currencyDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'currencies?action=delete', method: 'post' } }\r\n\r\n  currencyDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.currencyFormConfig,\r\n    heroField: 'currencyID',\r\n    buttons: [this.currencyCreateButton, this.currencyEditButton, this.currencyDeleteButton]\r\n  }\r\n\r\n  currenciesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['code', 'name', 'exchangeRate'],\r\n    columns: [\r\n      { name: 'code', type: 'text', alias: 'Code' },\r\n      { name: 'name', type: 'text', alias: 'Currency' },\r\n      { name: 'symbol', type: 'text', alias: 'Symbol' },\r\n      { name: 'exchangeRate', type: 'number', alias: 'Rate' },\r\n      { name: 'isBase', type: 'checkbox', alias: 'Base' }\r\n    ],\r\n    buttons: [\r\n      this.currencyCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.currencyDetailsConfig },\r\n      this.currencyEditButton,\r\n      this.currencyDeleteButton\r\n    ],\r\n    loadAction: { url: 'currencies/all/x' },\r\n    formConfig: this.currencyFormConfig,\r\n    realTime: true,\r\n    entityName: 'Currency'\r\n  }\r\n\r\n  //--------------------------Transaction Types-------------------------\r\n\r\n  transactionTypeFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capTransactionTypes] },\r\n    title: 'Financial Transaction Type',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, span: true },\r\n      { name: 'debitAccountType', type: 'select', alias: 'Debit Account Type', required: true, \r\n        loadAction: { url: 'accounts/list/accountTypes' } \r\n      },\r\n      { name: 'creditAccountType', type: 'select', alias: 'Credit Account Type', required: true, \r\n        loadAction: { url: 'accounts/list/accountTypes' } \r\n      },\r\n      { name: 'defaultDebitAccountID', type: 'select', alias: 'Default Debit Account', nullable: true, masterField: 'debitAccountType', masterOptionValue: 'type', \r\n        loadAction: { url: 'accounts/list/x' }, \r\n        detailsConfig: this.accountBaseDetailsConfig \r\n      },\r\n      { name: 'defaultCreditAccountID', type: 'select', alias: 'Default Credit Account', nullable: true, masterField: 'creditAccountType', masterOptionValue: 'type', \r\n        loadAction: { url: 'accounts/list/x' }, \r\n        detailsConfig: this.accountBaseDetailsConfig \r\n      },\r\n    ],\r\n    loadAction: { url: 'transactiontypes/id' },\r\n    heroField: 'transactionTypeID',\r\n  }\r\n\r\n  transactionTypeCreateButton: Button = { name: 'create', display: 'Create', dialog: true, action: { url: 'transactiontypes?action=create', method: 'post' } }\r\n  transactionTypeEditButton: Button = { name: 'edit', dialog: true, action: { url: 'transactiontypes?action=edit', method: 'post' } }\r\n\r\n  transactionTypeDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.transactionTypeFormConfig,\r\n    heroField: 'transactionTypeID',\r\n    buttons: [\r\n      this.transactionTypeCreateButton, this.transactionTypeEditButton\r\n    ]\r\n  }\r\n\r\n  transactionTypesTableConfig: TableConfig = {\r\n\r\n    showFilter: true,\r\n    minColumns: ['name', 'debitAccountName', 'creditAccountName'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'transactionTypeID', type: 'text', alias: 'ID' },\r\n      { name: 'name', type: 'text' },\r\n      { name: 'debitAccountTypeName', type: 'text', alias: 'Debit Type' },\r\n      { name: 'creditAccountTypeName', type: 'text', alias: 'Credit Type' },\r\n      { name: 'defaultDebitAccountName', type: 'text', alias: 'Default Debit Account' },\r\n      { name: 'defaultCreditAccountName', type: 'text', alias: 'Default Credit Account' }\r\n    ],\r\n    buttons: [\r\n      this.transactionTypeCreateButton,\r\n      { name: 'seed', display: 'Seed Financial Data', inHeader: true, icon: { name : 'add_circle' }, action: { url: 'transactiontypes/seed/x' }, confirm: { message: 'Seed generic financial accounts and transaction types?' } }, // Changed: Use GET endpoint via criteria\r\n      { name: 'view', dialog: true },\r\n      this.transactionTypeEditButton,\r\n      { name: 'delete', dialog: true, action: { url: 'transactiontypes?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'transactiontypes/all/x' },\r\n    formConfig: this.transactionTypeFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'TransactionType'\r\n  }\r\n\r\n  //--------------------------Transaction Import-------------------------\r\n\r\n  // Edit form for a single import item (sub-dialog)\r\n  transactionImportItemFormConfig: FormConfig = {\r\n    title: 'Import Item',\r\n    fields: [\r\n      { name: 'transactionTypeID', type: 'text-single', alias: 'Transaction Type', required: true, loadAction: { url: 'transactiontypes/list/x' } },\r\n      { name: 'date', type: 'date', required: true },\r\n      { name: 'description', type: 'text', required: true, span: true },\r\n      { name: 'amount', type: 'money', required: true, span : true },\r\n      \r\n      { name: 'gptReasoning', type: 'label', size : '10', alias: 'AI Reasoning', readonly: true, span: true }\r\n    ], // Changed: Removed loadAction/heroField — row data from SelectFields has all needed fields\r\n  }\r\n\r\n  // Nested table showing imported items in the review dialog\r\n  transactionImportItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Imported Items', // Changed: Add meaningful tab title instead of default 'Untitled'\r\n    showFilter: false,\r\n    causeFormRefresh : true,\r\n    minColumns: ['date', 'description', 'amount', 'transactionTypeName'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'rowNumber', type: 'number', alias: '#' },\r\n      { name: 'date', type: 'date' },\r\n      { name: 'description', type: 'text' },\r\n      { name: 'amount', type: 'money' },\r\n      { name: 'transactionTypeName', type: 'text', alias: 'Type',\r\n        colors: [\r\n          { name: 'orange', condition: (x: any) => !x.transactionTypeID },\r\n          { name: 'green', condition: (x: any) => !!x.transactionTypeID }\r\n        ]\r\n      },\r\n      { name: 'statusName', type: 'chip', alias: 'Status',\r\n        colors: [\r\n          { name: '#FFCC80', condition: (x: any) => x.status == 0 },\r\n          { name: '#A5D6A7', condition: (x: any) => x.status == 1 },\r\n          { name: '#EF9A9A', condition: (x: any) => x.status == 2 },\r\n          { name: '#81C784', condition: (x: any) => x.status == 3 },\r\n          { name: '#E57373', condition: (x: any) => x.status == 4 }\r\n        ]\r\n      },\r\n      { name: 'errorMessage', type: 'text', alias: 'Error',\r\n        colors: [\r\n          { name: 'red', condition: (x: any) => !!x.errorMessage }\r\n        ]\r\n      }\r\n    ],\r\n    buttons: [\r\n      { name: 'edit', dialog: true, action: { url: 'transactionimport?action=edit', method: 'post' } },\r\n      { name: 'delete', action: { url: 'transactionimport?action=delete', method: 'post' }, confirm: { message: 'Delete this import item?' }, visible: (x: any) => x.status != 3 },\r\n      { name: 'reverse', display: 'Reverse', icon: { name: 'undo' }, action: { url: 'transactionimport?action=reverse', method: 'post' }, confirm: { message: 'Reverse this transaction?' }, visible: (x: any) => x.status == 3 } // Changed: Per-row reverse for Processed items\r\n    ],\r\n    loadAction: { url: 'transactionimport/all/x' }, // Changed: Load all user items (no batch filter)\r\n    formConfig: this.transactionImportItemFormConfig\r\n  }\r\n\r\n  // Upload form shown in create mode (file picker + batch summary after upload)\r\n  transactionImportUploadFormConfig: FormConfig = {\r\n    title: 'Import Transactions',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'file', type: 'file', alias: 'Excel File (.xlsx)', required: true, span: true, hiddenCondition: (x: any) => !!x.hasItems }, // Changed: Use hasItems instead of batchID\r\n      { name: 'batchID', type: 'label', alias: 'Batch ID', size : '10', readonly: true, hideOnCreate: true },\r\n      { name: 'totalCount', type: 'label', alias: 'Total Items', readonly: true, hideOnCreate: true },\r\n      { name: 'resolvedCount', type: 'label', alias: 'Resolved', readonly: true, hideOnCreate: true },\r\n      { name: 'pendingCount', type: 'label', alias: 'Pending', readonly: true, hideOnCreate: true },\r\n      { name: 'processedCount', type: 'label', alias: 'Processed', readonly: true, hideOnCreate: true },\r\n      { name: 'failedCount', type: 'label', alias: 'Failed', readonly: true, hideOnCreate: true },\r\n    ],\r\n    alertConfig: {\r\n      messages: [{ message: 'Upload Excel file with columns: Date, Description, Amount', type: 'info' }]\r\n    }\r\n  }\r\n\r\n  // Main import dialog — progressive workflow: Upload → Review → Post → Clear\r\n  transactionImportDetailsDialogConfig: DetailsDialogConfig = {\r\n    formConfig: this.transactionImportUploadFormConfig,\r\n    tableConfigs: [this.transactionImportItemsTableConfig],\r\n    heroField: 'batchID',\r\n    mode: 'create',\r\n    initAction: { url: 'transactionimport/active' },\r\n    hideTablesInCreateMode: true,\r\n    buttons: [\r\n      { name: 'create', display: 'Upload', keepOpen: true, \r\n        disabled: (x: any) => !x.file, \r\n        action: { url: 'transactionimport/upload', method: 'post', isFormData: true } \r\n      },\r\n      { name: 'post', display: 'Post Transactions', inDialog: true, keepOpen: true, icon: { name: 'send' }, \r\n        visible: (x: any) => (x.resolvedCount ?? 0) > 0, \r\n        confirm: { message: 'Post all items?' }, \r\n        action: { url: 'transactionimport/process', method: 'post' } \r\n      },\r\n      { name: 'undo', display: 'Undo', inDialog: true, keepOpen: true, icon: { name: 'undo' },\r\n        visible: (x: any) => !!x.hasProcessed,\r\n        confirm: { message: 'Reverse all posted transactions?' },\r\n        action: { url: 'transactionimport/reverse', method: 'post' } // Changed: Batch reversal of all processed items\r\n      },\r\n      { name: 'clear', display: 'Clear', inDialog: true, keepOpen: true, resetMode: 'create', icon: { name: 'clear_all' },\r\n        visible: (x: any) => !!x.hasItems,\r\n        confirm: { message: 'Clear all imported items?' },\r\n        action: { url: 'transactionimport/clear', method: 'post' }\r\n      }\r\n    ]\r\n  }\r\n\r\n  // Import button for the transactions table header\r\n  transactionImportButton: Button = { name: 'import', display: 'Import', inHeader: true, dialog: true, icon: { name: 'upload_file' }, detailsConfig: this.transactionImportDetailsDialogConfig }\r\n\r\n  //--------------------------Transactions-------------------------\r\n\r\n  transactionFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capTransactions] },\r\n    title: 'Financial Transaction',\r\n    fixedTitle : true,\r\n    fields: [\r\n      { name: 'transactionTypeID', type: 'text-single', alias: 'Transaction Type', required: true, detailsConfig: this.transactionTypeDetailsConfig, \r\n        loadAction: { url: 'transactionTypes/list/x' },\r\n      },\r\n      { name: 'date', type: 'date', required: true },\r\n\r\n      { name: 'debitAccountID', type: 'select', alias: 'Debit Account', required: true,\r\n        masterField: 'transactionTypeID', masterValueField: 'debitAccountType', masterDefaultValueField: 'defaultDebitAccountID', masterOptionValue: 'type', \r\n        loadAction: { url: 'accounts/list/x' }, \r\n        detailsConfig: this.accountBaseDetailsConfig \r\n      },\r\n      { name: 'creditAccountID', type: 'select', alias: 'Credit Account', required: true,\r\n        masterField: 'transactionTypeID', masterValueField: 'creditAccountType', masterDefaultValueField: 'defaultCreditAccountID', masterOptionValue: 'type', \r\n        loadAction: { url: 'accounts/list/x' }, \r\n        detailsConfig: this.accountBaseDetailsConfig \r\n      },\r\n      \r\n      { name: 'description', type: 'text', required: true, span: true },\r\n      { name: 'amount', type: 'money', required: true, span: true },\r\n      // Changed: Removed currencyID and foreignAmount fields — backend auto-detects currency from accounts\r\n    ],\r\n\r\n  }\r\n\r\n\r\n  transactionEditButton: Button = { name: 'edit', dialog: true, \r\n    action: { url: 'transactions/dto?action=edit', method: 'post' },\r\n    visible: x => x.canEdit && !x.isReversal\r\n  }\r\n\r\n\r\n  transactionVoidButton: Button = { name: 'void', display: 'Void', icon : { name: 'undo', color: 'red' },\r\n    confirm: { message: 'Are you sure you want to void this transaction? This cannot be undone.' },\r\n    action: { url: 'transactions?action=void', method: 'post' },\r\n    visible: x => x.canVoid\r\n  }\r\n\r\n  transactionDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.transactionFormConfig,\r\n    heroField: 'transactionID',\r\n    buttons: [\r\n      this.transactionEditButton,\r\n    ]\r\n  }\r\n\r\n\r\n  transactionsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    greyOut: x => x.isReversal || x.status == 1,\r\n    minColumns: ['date', 'description', 'amountDisplay'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'date', type: 'date' },\r\n      { name: 'description', type: 'text',\r\n        colors: [\r\n          { name: 'purple', condition: x => x.isReversal },\r\n          { name: 'red', condition: x => x.status == 1 },\r\n        ],\r\n      },\r\n\r\n      { name: 'typeName', type: 'text', alias: 'Type' },\r\n      { name: 'debitAccountName', type: 'text', alias: 'Debit Account' },\r\n      { name: 'creditAccountName', type: 'text', alias: 'Credit Account' },\r\n      { name: 'amountDisplay', type: 'text', alias: 'Amount', // Changed: Single formatted column replacing CCY, Amount, Foreign Amount\r\n        color: { name: 'red', condition: x => x.reducesBalance && !x.isAggregate },\r\n      },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create Transaction', dialog: true, action: { url: 'transactions/dto?action=create', method: 'post' } },\r\n      this.transactionImportButton, // Changed: Added import button to header\r\n      { name: 'view', dialog: true, detailsConfig: this.transactionDetailsConfig },\r\n      this.transactionEditButton,\r\n      this.transactionVoidButton,\r\n    ],\r\n    loadAction: { url: 'transactions/all/x' },\r\n    formConfig: this.transactionFormConfig,\r\n    realTime: true,\r\n    entityName: 'Transaction',\r\n    allowUserKeepOpen: true, // Added: shows Keep Open checkbox on transaction dialogs\r\n    keepOpenBehavior: 'reset', // Added: reset form after create so user can capture next transaction\r\n  }\r\n\r\n\r\n  // Changed: Search mode config for transactions — date range, description contains, account filter\r\n  transactionSearchTableConfig: TableConfig = {\r\n    ...this.transactionsTableConfig,\r\n    searchConfig: {\r\n      fields: [\r\n        { name: 'dateFrom', type: 'date', alias: 'From Date', show: true },\r\n        { name: 'dateTo', type: 'date', alias: 'To Date', show: true },\r\n        { name: 'description', type: 'text', alias: 'Description', show: true },\r\n        { name: 'accountID', type: 'select', alias: 'Account', show: true, loadAction: { url: 'accounts/list/x' } },\r\n        { name: 'typeName', type: 'text-single', alias: 'Transaction Type', show: true, loadAction: { url: 'transactiontypes/list/x' } }, // Changed: text-single for type-to-search autocomplete\r\n      ],\r\n      searchAction: { url: 'transactions/search', method: 'post' }\r\n    }\r\n  }\r\n\r\n  accountTransactionsTableConfig: TableConfig = {\r\n    ...this.transactionsTableConfig,\r\n    causeFormRefresh: true,\r\n    minColumns: ['date', 'description', 'amountDisplay', 'runningBalance'], // Changed: Use amountDisplay instead of amount\r\n    tabTitle: 'Account Transactions',\r\n    loadAction: { url: 'transactions/account/x' }, loadCriteria: 'account', loadIDField: 'accountID',\r\n    columns: [\r\n      ...this.transactionsTableConfig.columns!,\r\n      { name: 'runningBalance', type: 'money', alias: 'Balance' }\r\n    ],\r\n  };\r\n\r\n  //--------------------------Transaction Templates-------------------------\r\n\r\n  // Template form configuration (accountID hidden - auto-populated from context)\r\n  transactionTemplateFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capTransactions] },\r\n    title: 'Transaction Template',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, span: true },\r\n      { name: 'accountID', type: 'number', hidden: true }, // Auto-populated from Account Details context\r\n      { name: 'transactionTypeID', type: 'select', alias: 'Transaction Type', required: true, detailsConfig: this.transactionTypeDetailsConfig, loadAction: { url: 'transactionTypes/list/x' } },\r\n      { name: 'blank', type: 'blank'},\r\n      { name: 'debitAccountID', type: 'select', alias: 'Default Debit Account', nullable: true, masterField: 'transactionTypeID', masterValueField: 'debitAccountType', masterDefaultValueField: 'defaultDebitAccountID', masterOptionValue: 'type', loadAction: { url: 'accounts/list/x' }, detailsConfig: this.accountBaseDetailsConfig },\r\n      { name: 'creditAccountID', type: 'select', alias: 'Default Credit Account', nullable: true, masterField: 'transactionTypeID', masterValueField: 'creditAccountType', masterDefaultValueField: 'defaultCreditAccountID', masterOptionValue: 'type', loadAction: { url: 'accounts/list/x' }, detailsConfig: this.accountBaseDetailsConfig },\r\n      { name: 'description', type: 'text', alias: 'Default Description', span: true },\r\n      { name: 'defaultAmount', type: 'money', alias: 'Default Amount', span: true },\r\n    ],\r\n    loadAction: { url: 'transactiontemplates/id' },\r\n    heroField: 'transactionTemplateID',\r\n  }\r\n\r\n  // Process form configuration (convert template to transaction)\r\n  transactionTemplateProcessFormConfig: FormConfig = {\r\n    title: 'Create Transaction from Template',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'transactionTemplateID', type: 'number', hidden: true },\r\n      { name: 'name', type: 'label', alias: 'Template', readonly: true, span : true },\r\n      { name: 'transactionTypeID', type: 'select', alias: 'Transaction Type', required: true, detailsConfig: this.transactionTypeDetailsConfig, loadAction: { url: 'transactionTypes/list/x' } },\r\n      { name: 'date', type: 'date', required: true, defaultValue: 'now' },\r\n      { name: 'debitAccountID', type: 'select', alias: 'Debit Account', required: true, masterField: 'transactionTypeID', masterValueField: 'debitAccountType', masterOptionValue: 'type', loadAction: { url: 'accounts/list/x' }, detailsConfig: this.accountBaseDetailsConfig },\r\n      { name: 'creditAccountID', type: 'select', alias: 'Credit Account', required: true, masterField: 'transactionTypeID', masterValueField: 'creditAccountType', masterOptionValue: 'type', loadAction: { url: 'accounts/list/x' }, detailsConfig: this.accountBaseDetailsConfig },\r\n      { name: 'description', type: 'text', required: true, span: true },\r\n      { name: 'amount', type: 'money', required: true, span: true },\r\n    ],\r\n  }\r\n\r\n  // Template action buttons\r\n  transactionTemplateCreateButton: Button = { name: 'create', display: 'Create Template', dialog: true, action: { url: 'transactiontemplates?action=create', method: 'post' } }\r\n  transactionTemplateEditButton: Button = { name: 'edit', dialog: true, action: { url: 'transactiontemplates?action=edit', method: 'post' } }\r\n\r\n  // Template details config (for view/edit)\r\n  transactionTemplateDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.transactionTemplateFormConfig,\r\n    heroField: 'transactionTemplateID',\r\n    buttons: [this.transactionTemplateCreateButton, this.transactionTemplateEditButton]\r\n  }\r\n\r\n  // Process details config (for processing template)\r\n  transactionTemplateProcessDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.transactionTemplateProcessFormConfig,\r\n    heroField: 'transactionTemplateID',\r\n    mode : 'edit',\r\n    buttons: [\r\n      { name: 'process', display: 'Create Transaction', icon: { name: 'play_arrow', color: 'green' }, inDialog: true,\r\n        action: { url: 'transactiontemplates/dto?action=process', method: 'post', \r\n        successMessage: 'Transaction created from template' } \r\n      }\r\n    ]\r\n  }\r\n\r\n  // Templates table configuration (3rd tab in Account Details)\r\n  transactionTemplatesTableConfig: TableConfig = {\r\n    tabTitle: 'Transaction Templates',\r\n    showFilter: true,\r\n    minColumns: ['name', 'transactionTypeName', 'defaultAmountDisplay'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'button', detailsConfig: this.transactionTemplateProcessDetailsConfig },\r\n      { name: 'transactionTypeName', type: 'text', alias: 'Type' },\r\n      { name: 'debitAccountName', type: 'text', alias: 'Debit Account' },\r\n      { name: 'creditAccountName', type: 'text', alias: 'Credit Account' },\r\n      { name: 'defaultAmountDisplay', type: 'text', alias: 'Default Amount' },\r\n    ],\r\n    buttons: [\r\n      this.transactionTemplateCreateButton,\r\n      { name: 'process', display: 'Create Transaction', icon: { name: 'play_arrow', color: 'green' }, dialog: true, detailsConfig: this.transactionTemplateProcessDetailsConfig },\r\n      { name: 'view', dialog: true, detailsConfig: this.transactionTemplateDetailsConfig },\r\n      { name: 'edit', dialog: true, action: { url: 'transactiontemplates?action=edit', method: 'post' }, detailsConfig: this.transactionTemplateDetailsConfig }, // Changed: Inline edit button with both action and detailsConfig\r\n      { name: 'delete', inDialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'transactiontemplates?action=delete', method: 'post', successMessage: 'Template deleted' }, confirm: { message: 'Delete this template?' } },\r\n    ],\r\n    loadAction: { url: 'transactiontemplates/account/x' }, loadCriteria: 'account', loadIDField: 'accountID',\r\n    formConfig: this.transactionTemplateFormConfig\r\n  }\r\n\r\n  //--------------------------Standing Orders-------------------------\r\n\r\n  // Standing order form configuration — schedule recurring transactions linked to templates\r\n  standingOrderFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capAccounting] },\r\n    title: 'Standing Order',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, span: true, alias: 'Name' },\r\n      { name: 'transactionTemplateID', type: 'select', required: true, alias: 'Transaction Template', loadAction: { url: 'transactiontemplates/list/x' } },\r\n      { name: 'frequency', type: 'select', required: true, alias: 'Frequency',\r\n        options: [\r\n          { name: 'Daily', value: 1 },\r\n          { name: 'Weekly', value: 2 },\r\n          { name: 'Monthly', value: 3 }\r\n        ]\r\n      },\r\n      { name: 'dayOfMonth', type: 'number', alias: 'Day of Month (1-28)', min: 1, max: 28, nullable: true,\r\n        hiddenCondition: (x: any) => x.frequency !== 3 },\r\n      { name: 'dayOfWeek', type: 'select', alias: 'Day of Week', nullable: true,\r\n        hiddenCondition: (x: any) => x.frequency !== 2,\r\n        options: [\r\n          { name: 'Sunday', value: 0 }, { name: 'Monday', value: 1 },\r\n          { name: 'Tuesday', value: 2 }, { name: 'Wednesday', value: 3 },\r\n          { name: 'Thursday', value: 4 }, { name: 'Friday', value: 5 },\r\n          { name: 'Saturday', value: 6 }\r\n        ]\r\n      },\r\n      { name: 'startDate', type: 'date', required: true, alias: 'Start Date' },\r\n      { name: 'endDate', type: 'date', alias: 'End Date', nullable: true },\r\n      { name: 'amount', type: 'money', alias: 'Amount (leave blank to use template default)', nullable: true },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', defaultValue: true }\r\n    ],\r\n    loadAction: { url: 'standingorders/id' },\r\n    heroField: 'standingOrderID'\r\n  }\r\n\r\n  // Execution history child table — shows all execution attempts for a standing order\r\n  standingOrderExecutionsTableConfig: TableConfig = {\r\n    tabTitle: 'Execution History',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    minColumns: ['executionDate', 'success', 'message'],\r\n    columns: [\r\n      { name: 'executionDate', type: 'date', alias: 'Date' },\r\n      { name: 'executedAt', type: 'datetime', alias: 'Executed At' },\r\n      { name: 'success', type: 'checkbox', alias: 'Success' },\r\n      { name: 'isManual', type: 'checkbox', alias: 'Manual' },\r\n      { name: 'message', type: 'text', alias: 'Result' },\r\n      { name: 'transactionID', type: 'number', alias: 'Transaction ID' }\r\n    ],\r\n    buttons: [],\r\n    loadAction: { url: 'standingorderexecutions/order/x' }, loadCriteria: 'order', loadIDField: 'standingOrderID'\r\n  }\r\n\r\n  // Standing order action buttons\r\n  standingOrderCreateButton: Button = { name: 'create', display: 'Create Standing Order', dialog: true, action: { url: 'standingorders?action=create', method: 'post' } }\r\n  standingOrderEditButton: Button = { name: 'edit', dialog: true, action: { url: 'standingorders?action=edit', method: 'post' } }\r\n  standingOrderDeleteButton: Button = { name: 'delete', inDialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'standingorders?action=delete', method: 'post', successMessage: 'Standing order deleted' }, confirm: { message: 'Delete this standing order?' } }\r\n  standingOrderExecuteButton: Button = { name: 'execute', display: 'Run Now', icon: { name: 'play_arrow', color: 'green' }, inDialog: true, action: { url: 'standingorders?action=execute', method: 'post', successMessage: 'Standing order executed' }, confirm: { message: 'Manually trigger this standing order now?' }, visible: (x: any) => x.isActive }\r\n  standingOrderPauseButton: Button = { name: 'toggle', display: 'Pause', inDialog: true, icon: { name: 'pause', color: 'orange' }, action: { url: 'standingorders?action=toggle', method: 'post', successMessage: 'Standing order paused' }, visible: (x: any) => x.isActive }\r\n  standingOrderResumeButton: Button = { name: 'toggle', display: 'Resume', inDialog: true, icon: { name: 'play_arrow', color: 'green' }, action: { url: 'standingorders?action=toggle', method: 'post', successMessage: 'Standing order activated' }, visible: (x: any) => !x.isActive }\r\n\r\n  // Details config for standing order — includes execution history child table\r\n  standingOrderDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.standingOrderFormConfig,\r\n    heroField: 'standingOrderID',\r\n    tableConfigs: [this.standingOrderExecutionsTableConfig],\r\n    buttons: [this.standingOrderCreateButton, this.standingOrderEditButton, this.standingOrderExecuteButton, this.standingOrderDeleteButton]\r\n  }\r\n\r\n  // Standing orders management table — main page\r\n  standingOrdersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name', 'templateName', 'scheduleDisplay'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'button', detailsConfig: this.standingOrderDetailsConfig },\r\n      { name: 'templateName', type: 'text', alias: 'Template' },\r\n      { name: 'scheduleDisplay', type: 'text', alias: 'Schedule' },\r\n      { name: 'amountDisplay', type: 'text', alias: 'Amount' },\r\n      { name: 'startDate', type: 'date', alias: 'Start Date' },\r\n      { name: 'endDate', type: 'date', alias: 'End Date' },\r\n      { name: 'lastRunDisplay', type: 'text', alias: 'Last Run' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' }\r\n    ],\r\n    buttons: [\r\n      this.standingOrderCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.standingOrderDetailsConfig },\r\n      this.standingOrderEditButton,\r\n      this.standingOrderPauseButton,\r\n      this.standingOrderResumeButton,\r\n      this.standingOrderExecuteButton,\r\n      this.standingOrderDeleteButton\r\n    ],\r\n    loadAction: { url: 'standingorders/all/x' },\r\n    formConfig: this.standingOrderFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'StandingOrder'\r\n  }\r\n\r\n  //--------------------------Accounts-------------------------\r\n\r\n  accountDetailsConfig : DetailsDialogConfig = {\r\n    ...this.accountBaseDetailsConfig,\r\n    tableConfigs: [\r\n      { ...this.accountTransactionsTableConfig },\r\n      {\r\n        ...this.transactionTypesTableConfig,\r\n        tabTitle: 'Transaction Types',\r\n        buttons: [],\r\n        loadAction: { url: 'transactionTypes/account/x' }, loadCriteria: 'account', loadIDField: 'accountID'\r\n      },\r\n      { ...this.transactionTemplatesTableConfig }, // Changed: Added 3rd tab for transaction templates\r\n    ]\r\n  };\r\n\r\n\r\n  accountsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [5 ,10, 25, 50],\r\n    minColumns: ['name', 'typeName', 'balanceDisplay'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'button', detailsConfig: this.accountDetailsConfig },\r\n      { name: 'typeName', type: 'text', alias: 'Type',\r\n        icons: [\r\n          { name: 'payments', color: '#4CAF50', condition: (x: any) => x.includeInCashTotal, tip: 'Included in Cash Total' },\r\n          { name: 'account_balance', color: '#2196F3', condition: (x: any) => x.includeInBankTotal, tip: 'Included in Bank Total' },\r\n        ]\r\n      },\r\n      { name: 'balanceDisplay', type: 'text', alias: 'Balance' }, // Changed: Pre-formatted with currency prefix (e.g. \"USD 1,964.21\")\r\n    ],\r\n    buttons: [\r\n      this.accountCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.accountDetailsConfig },\r\n      this.finAccounEditButton,\r\n      { name: 'delete', dialog: true, action: { url: 'accounts?action=delete', method: 'post' } },\r\n      // { name: 'revalue', display: 'Revalue Forex', inHeader: true, icon: { name: 'currency_exchange', color: 'blue' }, // Changed: Commented out — forex revaluation deferred\r\n      //   action: { url: 'accounts?action=revalue', method: 'post', successMessage: 'Forex revaluation complete' },\r\n      //   confirm: { message: 'Revalue all forex accounts at current exchange rates?' }\r\n      // },\r\n    ],\r\n    loadAction: { url: 'accounts/all/x' },\r\n    formConfig: this.accountFormConfig,\r\n    realTime: true,\r\n    entityName: 'Account'\r\n  }\r\n\r\n  //--------------------------Financial Reports-------------------------\r\n\r\n  // Trial Balance table config — shows all accounts with debit/credit totals\r\n  trialBalanceTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [25, 50, 100],\r\n    minColumns: ['accountName', 'totalDebits', 'totalCredits'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'accountName', type: 'text', alias: 'Account' },\r\n      { name: 'accountType', type: 'text', alias: 'Type' },\r\n      { name: 'totalDebits', type: 'money', alias: 'Debits' },\r\n      { name: 'totalCredits', type: 'money', alias: 'Credits' },\r\n      { name: 'closingBalance', type: 'money', alias: 'Balance',\r\n        colors: [\r\n          { name: 'green', condition: (x: any) => x.closingBalance > 0 },\r\n          { name: 'red', condition: (x: any) => x.closingBalance < 0 }\r\n        ]\r\n      }\r\n    ],\r\n    loadAction: { url: 'accounts/reports/trialbalance' }\r\n  }\r\n\r\n  // Profit & Loss table config — shows revenue and expense accounts with section\r\n  pnlTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [25, 50, 100],\r\n    minColumns: ['accountName', 'section', 'amount'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'accountName', type: 'text', alias: 'Account' },\r\n      { name: 'section', type: 'text', alias: 'Section' },\r\n      { name: 'amount', type: 'money', alias: 'Amount',\r\n        colors: [\r\n          { name: 'green', condition: (x: any) => x.amount > 0 },\r\n          { name: 'red', condition: (x: any) => x.amount < 0 }\r\n        ]\r\n      }\r\n    ],\r\n    loadAction: { url: 'accounts/reports/pnl' }\r\n  }\r\n\r\n  // Balance Sheet report table config — shows asset, liability, equity accounts with section\r\n  balanceSheetReportTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [25, 50, 100],\r\n    minColumns: ['accountName', 'section', 'balance'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'accountName', type: 'text', alias: 'Account' },\r\n      { name: 'section', type: 'text', alias: 'Section' },\r\n      { name: 'balance', type: 'money', alias: 'Balance',\r\n        colors: [\r\n          { name: 'green', condition: (x: any) => x.balance > 0 },\r\n          { name: 'red', condition: (x: any) => x.balance < 0 }\r\n        ]\r\n      }\r\n    ],\r\n    loadAction: { url: 'accounts/reports/balancesheet' }\r\n  }\r\n\r\n  //--------------------------Aggregates-------------------------\r\n\r\n  // Monthly aggregates table showing Assets, Liabilities, Income, Expenses, Profit, and Equity by month\r\n  aggregatesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [12, 24, 36],\r\n    minColumns: ['month', 'assets', 'liabilities', 'income'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'month', type: 'text', alias: 'Month' },\r\n      { name: 'assets', type: 'money', alias: 'Assets' },\r\n      { name: 'liabilities', type: 'money', alias: 'Liabilities' },\r\n      { name: 'income', type: 'money', alias: 'Income' },\r\n      { name: 'expenses', type: 'money', alias: 'Expenses' },\r\n      { name: 'profit', type: 'money', alias: 'Profit', colors: [{ name: 'green', condition: x => x.profit > 0 }, { name: 'red', condition: x => x.profit < 0 }] },\r\n      { name: 'equity', type: 'money', alias: 'Equity' }\r\n    ],\r\n    loadAction: { url: 'accounts/aggregates/monthly' }\r\n  }\r\n\r\n  // Cumulative aggregates table showing running totals over time\r\n  cumulativeAggregatesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [12, 24, 36],\r\n    minColumns: ['month', 'totalAssets', 'totalLiabilities', 'netAssets'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'month', type: 'text', alias: 'Month' },\r\n      { name: 'totalAssets', type: 'money', alias: 'Total Assets' },\r\n      { name: 'totalLiabilities', type: 'money', alias: 'Total Liabilities' },\r\n      { name: 'netAssets', type: 'money', alias: 'Net Assets' },\r\n      { name: 'totalEquity', type: 'money', alias: 'Total Equity' },\r\n      { name: 'incomeYTD', type: 'money', alias: 'Income YTD' },\r\n      { name: 'expensesYTD', type: 'money', alias: 'Expenses YTD' },\r\n      { name: 'profitYTD', type: 'money', alias: 'Profit YTD', colors: [{ name: 'green', condition: x => x.profitYTD > 0 }, { name: 'red', condition: x => x.profitYTD < 0 }] }\r\n    ],\r\n    loadAction: { url: 'accounts/aggregates/cumulative' }\r\n  }\r\n\r\n  // Cash flow aggregates table showing inflows, outflows and running balance\r\n  cashFlowAggregatesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [12, 24, 36],\r\n    minColumns: ['month', 'cashInflows', 'cashOutflows', 'netCashFlow'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'month', type: 'text', alias: 'Month' },\r\n      { name: 'cashInflows', type: 'money', alias: 'Cash Inflows' },\r\n      { name: 'cashOutflows', type: 'money', alias: 'Cash Outflows' },\r\n      { name: 'netCashFlow', type: 'money', alias: 'Net Cash Flow', colors: [{ name: 'green', condition: x => x.netCashFlow > 0 }, { name: 'red', condition: x => x.netCashFlow < 0 }] },\r\n      { name: 'runningBalance', type: 'money', alias: 'Running Balance', colors: [{ name: 'green', condition: x => x.runningBalance > 0 }, { name: 'red', condition: x => x.runningBalance < 0 }] }\r\n    ],\r\n    loadAction: { url: 'accounts/aggregates/cashflow' }\r\n  }\r\n\r\n  // Balance sheet aggregates table showing Assets, Liabilities, and Equity by month\r\n  balanceSheetAggregatesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    pageSizes: [12, 24, 36],\r\n    minColumns: ['month', 'totalAssets', 'totalLiabilities', 'totalEquity'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'month', type: 'text', alias: 'Month' },\r\n      { name: 'totalAssets', type: 'money', alias: 'Total Assets' },\r\n      { name: 'totalLiabilities', type: 'money', alias: 'Total Liabilities' },\r\n      { name: 'totalEquity', type: 'money', alias: 'Total Equity' },\r\n      { name: 'netWorth', type: 'money', alias: 'Net Worth', colors: [{ name: 'green', condition: x => x.netWorth > 0 }, { name: 'red', condition: x => x.netWorth < 0 }] }\r\n    ],\r\n    loadAction: { url: 'accounts/aggregates/balancesheet' }\r\n  }\r\n\r\n  // Changed: Fixed Assets configs moved to AssetsService (assets.service.ts)\r\n\r\n  //--------------------------Budgets-------------------------\r\n\r\n  // Budget form configuration\r\n  budgetFormConfig: FormConfig = {\r\n    title: 'Budget',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, alias: 'Budget Name' },\r\n      { name: 'fiscalYear', type: 'number', required: true, alias: 'Fiscal Year', defaultValue: new Date().getFullYear() },\r\n      { name: 'description', type: 'text', span: true },\r\n      { name: 'statusName', type: 'label', alias: 'Status', readonly: true, hideOnCreate: true },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', readonly: true, hideOnCreate: true },\r\n      { name: 'totalBudgetedDisplay', type: 'label', alias: 'Total Budgeted', readonly: true, hideOnCreate: true }\r\n    ],\r\n    loadAction: { url: 'budgets/id' },\r\n    heroField: 'budgetID'\r\n  }\r\n\r\n  // Budget line form configuration\r\n  budgetLineFormConfig: FormConfig = {\r\n    title: 'Budget Line',\r\n    fields: [\r\n      { name: 'budgetID', type: 'number', hidden: true },\r\n      { name: 'accountID', type: 'select', alias: 'Account', required: true, loadAction: { url: 'accounts/list/x' } },\r\n      { name: 'departmentID', type: 'select', alias: 'Department', nullable: true, loadAction: { url: 'departments/list/x' } },\r\n      { name: 'period', type: 'date', required: true, alias: 'Period (1st of Month)' },\r\n      { name: 'budgetedAmount', type: 'money', required: true, alias: 'Budgeted Amount' }\r\n    ],\r\n    loadAction: { url: 'budgetlines/id' },\r\n    heroField: 'budgetLineID'\r\n  }\r\n\r\n  // Budget lines child table\r\n  budgetLinesTableConfig: TableConfig = {\r\n    tabTitle: 'Budget Lines',\r\n    showFilter: true,\r\n    minColumns: ['periodLabel', 'accountName', 'budgetedAmountDisplay'],\r\n    columns: [\r\n      { name: 'periodLabel', type: 'text', alias: 'Period' },\r\n      { name: 'accountName', type: 'text', alias: 'Account' },\r\n      { name: 'accountTypeName', type: 'text', alias: 'Type' },\r\n      { name: 'departmentName', type: 'text', alias: 'Department' },\r\n      { name: 'budgetedAmount', type: 'money', alias: 'Amount' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Line', dialog: true, action: { url: 'budgetlines?action=create', method: 'post' }, disabled: (x: any) => x.status == 2 },\r\n      { name: 'edit', dialog: true, action: { url: 'budgetlines?action=edit', method: 'post' }, disabled: (x: any) => x.budgetStatus == 2 },\r\n      { name: 'delete', inDialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'budgetlines?action=delete', method: 'post', successMessage: 'Line deleted' }, confirm: { message: 'Delete this budget line?' }, disabled: (x: any) => x.budgetStatus == 2 }\r\n    ],\r\n    loadAction: { url: 'budgetlines/x/x' }, loadCriteria: 'budget', loadIDField: 'budgetID',\r\n    formConfig: this.budgetLineFormConfig\r\n  }\r\n\r\n  // Budget action buttons\r\n  budgetPublishButton: Button = { name: 'publish', display: 'Publish', inDialog: true, icon: { name: 'publish', color: 'green' }, action: { url: 'budgets?action=publish', method: 'post', successMessage: 'Budget published' }, confirm: { message: 'Publish this budget? Lines will be locked for editing.' }, visible: (x: any) => x.status == 1 }\r\n  budgetSetActiveButton: Button = { name: 'setactive', display: 'Set Active', inDialog: true, icon: { name: 'star', color: 'blue' }, action: { url: 'budgets?action=setactive', method: 'post', successMessage: 'Budget set as active' }, confirm: { message: 'Set this budget as the active budget for its fiscal year?' }, visible: (x: any) => x.status == 2 && !x.isActive }\r\n  budgetCopyButton: Button = { name: 'copy', display: 'Copy to Next Year', inDialog: true, icon: { name: 'content_copy', color: 'purple' }, action: { url: 'budgets?action=copy', method: 'post', successMessage: 'Budget copied' }, confirm: { message: 'Copy this budget to the next fiscal year?' } }\r\n  budgetEditButton: Button = { name: 'edit', dialog: true, action: { url: 'budgets?action=edit', method: 'post' }, visible: (x: any) => x.status == 1 }\r\n\r\n  // Budget details dialog with lines table and action buttons\r\n  budgetDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.budgetFormConfig,\r\n    tableConfigs: [this.budgetLinesTableConfig],\r\n    heroField: 'budgetID',\r\n    buttons: [\r\n      this.budgetPublishButton,\r\n      this.budgetSetActiveButton,\r\n      this.budgetCopyButton,\r\n      this.budgetEditButton\r\n    ]\r\n  }\r\n\r\n  // Main budgets table configuration\r\n  budgetsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name', 'fiscalYear', 'statusName'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'button', detailsConfig: this.budgetDetailsConfig },\r\n      { name: 'fiscalYear', type: 'number', alias: 'Fiscal Year' },\r\n      { name: 'statusName', type: 'chip', alias: 'Status',\r\n        colors: [\r\n          { name: '#FFCC80', condition: (x: any) => x.status == 1 },\r\n          { name: '#A5D6A7', condition: (x: any) => x.status == 2 }\r\n        ]\r\n      },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' },\r\n      { name: 'lineCount', type: 'number', alias: 'Lines' },\r\n      { name: 'totalBudgetedDisplay', type: 'text', alias: 'Total Budgeted' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create Budget', dialog: true, action: { url: 'budgets?action=create', method: 'post' } },\r\n      this.budgetPublishButton,\r\n      this.budgetSetActiveButton,\r\n      this.budgetCopyButton,\r\n      { name: 'delete', inDialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'budgets?action=delete', method: 'post', successMessage: 'Budget deleted' }, confirm: { message: 'Delete this budget?' }, visible: (x: any) => x.status == 1 }\r\n    ],\r\n    loadAction: { url: 'budgets/all/x' },\r\n    formConfig: this.budgetFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'Budget'\r\n  }\r\n\r\n  //--------------------------Budget vs Actual Report-------------------------\r\n\r\n  // Budget vs Actual - By Period detail table\r\n  budgetVsActualByPeriodTableConfig: TableConfig = {\r\n    tabTitle: 'By Period',\r\n    showFilter: true,\r\n    pageSizes: [25, 50, 100],\r\n    minColumns: ['periodLabel', 'accountName', 'budgetedDisplay'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'periodLabel', type: 'text', alias: 'Period' },\r\n      { name: 'accountName', type: 'text', alias: 'Account' },\r\n      { name: 'accountType', type: 'text', alias: 'Type' },\r\n      { name: 'departmentName', type: 'text', alias: 'Department' },\r\n      { name: 'budgetedDisplay', type: 'text', alias: 'Budgeted' },\r\n      { name: 'actualDisplay', type: 'text', alias: 'Actual' },\r\n      { name: 'varianceDisplay', type: 'text', alias: 'Variance',\r\n        colors: [\r\n          { name: 'green', condition: (x: any) => !x.isOverBudget },\r\n          { name: 'red', condition: (x: any) => x.isOverBudget }\r\n        ]\r\n      },\r\n      { name: 'variancePercent', type: 'number', alias: 'Variance %' }\r\n    ]\r\n  }\r\n\r\n  // Budget vs Actual - By Account summary table\r\n  budgetVsActualByAccountTableConfig: TableConfig = {\r\n    tabTitle: 'By Account',\r\n    showFilter: true,\r\n    pageSizes: [25, 50, 100],\r\n    minColumns: ['accountName', 'totalBudgetedDisplay', 'totalActualDisplay'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'accountName', type: 'text', alias: 'Account' },\r\n      { name: 'accountType', type: 'text', alias: 'Type' },\r\n      { name: 'totalBudgetedDisplay', type: 'text', alias: 'Total Budgeted' },\r\n      { name: 'totalActualDisplay', type: 'text', alias: 'Total Actual' },\r\n      { name: 'varianceDisplay', type: 'text', alias: 'Variance',\r\n        colors: [\r\n          { name: 'green', condition: (x: any) => !x.isOverBudget },\r\n          { name: 'red', condition: (x: any) => x.isOverBudget }\r\n        ]\r\n      },\r\n      { name: 'variancePercent', type: 'number', alias: 'Variance %' }\r\n    ]\r\n  }\r\n\r\n  // Budget summary tiles for report page\r\n  budgetSummaryTileConfig: TileConfig = {\r\n    tiles: [\r\n      { name: 'totalBudgeted', alias: 'Total Budgeted', color: '#2196F3', icon: 'request_quote', info: 'Sum of all budget line amounts' }, // Changed: Added icon\r\n      { name: 'totalActual', alias: 'Total Actual', color: '#4CAF50', icon: 'receipt', info: 'Sum of actual amounts from ledger' }, // Changed: Added icon\r\n      { name: 'totalVariance', alias: 'Total Variance', color: '#FF9800', icon: 'compare_arrows', info: 'Difference between budgeted and actual' }, // Changed: Added icon\r\n      { name: 'overBudgetLines', alias: 'Over Budget', color: '#F44336', icon: 'warning', info: 'Number of lines over budget' } // Changed: Added icon\r\n    ]\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { FormConfig, TableConfig, DetailsDialogConfig, Button, TileConfig } from '../classes/Classes';\nimport { AssetStatus } from '../classes/LibClasses';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AssetsService {\n\n  //--------------------------Depreciation Categories-------------------------\n\n  categoryFormConfig: FormConfig = {\n    title: 'Depreciation Category',\n    includeAudit: true,\n    heroField: 'depreciationCategoryID',\n    fields: [\n      { name: 'identity', type: 'section' },\n      { name: 'name', type: 'text', section: 'identity', required: true },\n      { name: 'description', type: 'text', section: 'identity' },\n      { name: 'defaults', type: 'section', alias: 'Depreciation Defaults' },\n      { name: 'defaultDepreciationMethod', alias: 'Depreciation Method', type: 'select', section: 'defaults', required: true, loadAction: { url: 'depreciationcategories/list/depreciation-methods' }, defaultValue: 0 },\n      { name: 'defaultUsefulLifeMonths', alias: 'Useful Life (Months)', type: 'number', section: 'defaults', required: true, defaultValue: 60 },\n      { name: 'defaultResidualValuePercent', alias: 'Residual Value %', type: 'number', section: 'defaults', required: true, defaultValue: 10 },\n    ],\n  }\n\n  categoryCreateButton: Button = { name: 'create', display: 'Create Category', dialog: true, action: { url: 'depreciationcategories?action=create', method: 'post' } }\n  categoryEditButton: Button = { name: 'edit', display: 'Edit', icon: { name: 'edit' }, dialog: true, action: { url: 'depreciationcategories?action=edit', method: 'post' } }\n\n  categoryDetailsConfig: DetailsDialogConfig = {\n    formConfig: this.categoryFormConfig,\n    tableConfigs: [],\n    heroField: 'depreciationCategoryID',\n    buttons: [this.categoryCreateButton, this.categoryEditButton]\n  }\n\n  categoryTableConfig: TableConfig = {\n    showFilter: true,\n    minColumns: ['name', 'defaultDepreciationMethodName', 'assetCount'],\n    columns: [\n      { name: 'name', type: 'button', detailsConfig: this.categoryDetailsConfig },\n      { name: 'defaultDepreciationMethodName', alias: 'Method', type: 'text' },\n      { name: 'defaultUsefulLifeMonths', alias: 'Useful Life (Mo)', type: 'number' },\n      { name: 'defaultResidualValuePercent', alias: 'Residual %', type: 'number' },\n      { name: 'assetCount', alias: 'Assets', type: 'number' },\n    ],\n    buttons: [\n      { name: 'create', display: 'Create Category', dialog: true, detailsConfig: this.categoryDetailsConfig, action: { url: 'depreciationcategories?action=create', method: 'post' } },\n      { name: 'delete', display: 'Delete', icon: { name: 'delete', color: 'red' }, action: { url: 'depreciationcategories?action=delete', method: 'post' }, confirm: { message: 'Delete this category?' } },\n    ],\n    loadAction: { url: 'depreciationcategories/all/x' },\n    entityName: 'DepreciationCategory'\n  }\n\n  //--------------------------Fixed Assets-------------------------\n\n  assetFormConfig: FormConfig = {\n    title: 'Fixed Asset',\n    includeAudit: true,\n    heroField: 'fixedAssetID',\n    fields: [\n      { name: 'identity', type: 'section' },\n      { name: 'assetNumber', alias: 'Asset #', type: 'text', section: 'identity', readonly: true, hideOnCreate: true },\n      { name: 'name', type: 'text', section: 'identity', required: true },\n      { name: 'depreciationCategoryID', alias: 'Category', type: 'select', section: 'identity', required: true, loadAction: { url: 'depreciationcategories/list/x' }, detailsConfig: this.categoryDetailsConfig },\n      { name: 'description', type: 'text', section: 'identity' },\n      { name: 'acquisition', type: 'section' },\n      { name: 'acquisitionDate', alias: 'Acquisition Date', type: 'date', section: 'acquisition', required: true },\n      { name: 'acquisitionCost', alias: 'Cost', type: 'money', section: 'acquisition', required: true },\n      { name: 'depreciation', type: 'section', collapsedCondition: (x: any) => x.fixedAssetID > 0, hideOnCreate: true },\n      { name: 'depreciationMethod', alias: 'Depreciation Method', type: 'select', section: 'depreciation', hideOnCreate: true, loadAction: { url: 'fixedassets/list/depreciation-methods' } },\n      { name: 'usefulLifeMonths', alias: 'Useful Life (Months)', type: 'number', section: 'depreciation', hideOnCreate: true },\n      { name: 'residualValue', alias: 'Residual Value', type: 'money', section: 'depreciation', hideOnCreate: true },\n      { name: 'tracking', type: 'section', collapsedCondition: (x: any) => x.fixedAssetID > 0 },\n      { name: 'location', type: 'text', section: 'tracking' },\n      { name: 'serialNumber', alias: 'Serial Number', type: 'text', section: 'tracking' },\n      { name: 'assetTag', alias: 'Asset Tag', type: 'text', section: 'tracking' },\n      { name: 'valuation', type: 'section', collapsedCondition: (x: any) => x.fixedAssetID > 0, hideOnCreate: true },\n      { name: 'statusName', alias: 'Status', type: 'text', section: 'valuation', readonly: true, hideOnCreate: true },\n      { name: 'netBookValueDisplay', alias: 'Net Book Value', type: 'text', section: 'valuation', readonly: true, hideOnCreate: true },\n      { name: 'accumulatedDepreciation', alias: 'Accum. Depreciation', type: 'text', section: 'valuation', readonly: true, hideOnCreate: true },\n    ],\n    loadAction: { url: 'fixedassets/id' },\n  }\n\n  depreciationEntriesTableConfig: TableConfig = {\n    tabTitle: 'Depreciation History',\n    showFilter: false,\n    columns: [\n      { name: 'periodDate', alias: 'Period', type: 'date' },\n      { name: 'amountDisplay', alias: 'Amount', type: 'text' },\n      { name: 'accumulatedAmountDisplay', alias: 'Accumulated', type: 'text' },\n      { name: 'netBookValueDisplay', alias: 'NBV', type: 'text' },\n      { name: 'entryDate', alias: 'Posted', type: 'date' },\n    ],\n    buttons: [],\n    loadAction: { url: 'depreciationentries/{fixedAssetID}/x' }, loadCriteria: 'asset', loadIDField: 'fixedAssetID',\n  }\n\n  assetCreateButton: Button = { name: 'create', display: 'Create Asset', dialog: true, action: { url: 'fixedassets?action=create', method: 'post' } }\n  assetEditButton: Button = { name: 'edit', display: 'Edit', icon: { name: 'edit' }, dialog: true, action: { url: 'fixedassets?action=edit', method: 'post' }, visible: x => x.status == AssetStatus.Draft }\n  assetActivateButton: Button = { name: 'activate', display: 'Activate', icon: { name: 'check_circle', color: 'green' }, action: { url: 'fixedassets?action=activate', method: 'post' }, confirm: { message: 'Activate this asset? This will post the acquisition journal entry.' }, visible: x => x.status == AssetStatus.Draft }\n  assetDepreciateButton: Button = { name: 'depreciate', display: 'Depreciate', icon: { name: 'trending_down', color: 'orange' }, action: { url: 'fixedassets?action=depreciate', method: 'post' }, confirm: { message: 'Post depreciation for current period?' }, visible: x => x.status == AssetStatus.Active }\n\n  disposeFormConfig: FormConfig = {\n    title: 'Dispose Asset',\n    fixedTitle: true,\n    fields: [\n      { name: 'disposalType', alias: 'Disposal Type', type: 'select', required: true, loadAction: { url: 'fixedassets/list/disposal-types' }, defaultValue: 0 },\n      { name: 'disposalAmount', alias: 'Sale Amount', type: 'money', defaultValue: 0, hiddenCondition: x => x.disposalType !== 0 },\n    ]\n  }\n\n  assetDisposeButton: Button = { name: 'dispose', display: 'Dispose', icon: { name: 'delete_forever', color: 'red' }, dialog: true, detailsConfig: { formConfig: this.disposeFormConfig, heroField: 'fixedAssetID', mode: 'edit', buttons: [{ name: 'dispose', display: 'Dispose Asset', inDialog: true, action: { url: 'fixedassets?action=dispose', method: 'post', successMessage: 'Asset disposed' } }] }, visible: x => x.status == AssetStatus.Active || x.status == AssetStatus.FullyDepreciated }\n\n  assetDetailsConfig: DetailsDialogConfig = {\n    formConfig: this.assetFormConfig,\n    tableConfigs: [this.depreciationEntriesTableConfig],\n    heroField: 'fixedAssetID',\n    buttons: [this.assetCreateButton, this.assetEditButton, this.assetActivateButton, this.assetDepreciateButton, this.assetDisposeButton]\n  }\n\n  assetTileConfig: TileConfig = {\n    clickable: true,\n    tiles: [\n      { name: 'draft', alias: 'Draft', color: '#FFC107', icon: 'edit_note', action: { url: 'fixedassets/draft/x' } },\n      { name: 'active', alias: 'Active', color: '#4CAF50', icon: 'check_circle', action: { url: 'fixedassets/active/x' } },\n      { name: 'fullyDepreciated', alias: 'Fully Depreciated', color: '#2196F3', icon: 'trending_down' },\n      { name: 'disposed', alias: 'Disposed', color: '#9E9E9E', icon: 'delete_forever' },\n    ],\n    loadAction: { url: 'fixedassets/summary/x' }\n  }\n\n  assetsTableConfig: TableConfig = {\n    showFilter: true,\n    minColumns: ['assetNumber', 'name', 'statusName'],\n    columns: [\n      { name: 'assetNumber', alias: 'Asset #', type: 'button', detailsConfig: this.assetDetailsConfig },\n      { name: 'name', type: 'text' },\n      { name: 'categoryName', alias: 'Category', type: 'text' },\n      { name: 'acquisitionDate', alias: 'Acquired', type: 'date' },\n      { name: 'acquisitionCostDisplay', alias: 'Cost', type: 'text' },\n      { name: 'netBookValueDisplay', alias: 'NBV', type: 'text' },\n      { name: 'depreciationMethodName', alias: 'Method', type: 'text' },\n      { name: 'statusName', alias: 'Status', type: 'chip',\n        colors: [\n          { name: '#FFCC80', condition: x => x.status == AssetStatus.Draft },\n          { name: '#A5D6A7', condition: x => x.status == AssetStatus.Active },\n          { name: '#90CAF9', condition: x => x.status == AssetStatus.FullyDepreciated },\n          { name: '#BDBDBD', condition: x => x.status == AssetStatus.Disposed },\n        ]\n      },\n    ],\n    buttons: [\n      { name: 'create', display: 'Create Asset', dialog: true, detailsConfig: this.assetDetailsConfig, action: { url: 'fixedassets?action=create', method: 'post' } },\n      this.assetActivateButton,\n      this.assetDepreciateButton,\n      { name: 'delete', display: 'Delete', icon: { name: 'delete', color: 'red' }, action: { url: 'fixedassets?action=delete', method: 'post' }, confirm: { message: 'Delete this asset?' }, visible: x => x.status == AssetStatus.Draft },\n    ],\n    loadAction: { url: 'fixedassets/all/x' },\n    tileConfig: this.assetTileConfig,\n    entityName: 'FixedAsset'\n  }\n}\n","import { Injectable } from '@angular/core';\r\nimport { FormConfig, TableConfig, Button, DetailsDialogConfig } from '../classes/Classes';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class LoansService {\r\n\r\n  // ========== LOAN PRODUCTS BUTTONS ==========\r\n  \r\n  loanProductCreateButton: Button = { name: 'create', display: 'Create Product', dialog: true, action: { url: 'loanproducts?action=create', method: 'post' } };\r\n  loanProductEditButton: Button = { name: 'edit', dialog: true, action: { url: 'loanproducts?action=edit', method: 'post' } };\r\n  loanProductDeleteButton: Button = { name: 'delete', action: { url: 'loanproducts?action=delete', method: 'post' } };\r\n\r\n  // ========== LOAN PRODUCTS ==========\r\n  \r\n  // Loan Product Form Configuration\r\n  loanProductFormConfig: FormConfig = {\r\n    title: 'Loan Product',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'description', type: 'text', alias: 'Description', span : true },\r\n      { name: 'interestMethod', type: 'select', alias: 'Interest Calculation Method', required: true, options: [{ name: 'Flat Rate', value: 0 }, { name: 'Reducing Balance', value: 1 }] },\r\n      { name: 'minAmount', type: 'money', alias: 'Minimum Amount', required: true },\r\n      { name: 'maxAmount', type: 'money', alias: 'Maximum Amount', required: true },\r\n      { name: 'defaultInterestRate', type: 'number', alias: 'Interest Rate (%)', required: true, min: 0, max: 100 },\r\n      { name: 'minTermMonths', type: 'number', alias: 'Minimum Term (Months)', required: true, min: 1 },\r\n      { name: 'maxTermMonths', type: 'number', alias: 'Maximum Term (Months)', required: true, min: 1 },\r\n    ],\r\n    loadAction: { url: 'loanproducts/id' },\r\n    heroField: 'loanProductID'\r\n  };\r\n\r\n  loanProductTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    columns: [\r\n      { name: 'name', alias: 'Product Name' },\r\n      { name: 'interestMethodName', alias: 'Interest Method' },\r\n      { name: 'minAmount', type: 'money', alias: 'Min Amount' },\r\n      { name: 'maxAmount', type: 'money', alias: 'Max Amount' },\r\n\r\n      { name: 'minInterestRate', alias: 'Min Rate (%)' },\r\n      { name: 'maxInterestRate', alias: 'Max Rate (%)' },\r\n      { name: 'minTermMonths', alias: 'Min Term' },\r\n      { name: 'maxTermMonths', alias: 'Max Term' },\r\n      { name: 'loanCount', alias: 'Active Loans' },\r\n    ],\r\n    loadAction: { url: 'loanproducts/all' },\r\n    formConfig: this.loanProductFormConfig,\r\n    buttons: [this.loanProductCreateButton, this.loanProductEditButton, this.loanProductDeleteButton],\r\n    realTime: true,\r\n    entityName: 'LoanProduct'\r\n  };\r\n\r\n  // ========== LOANS BUTTONS ==========\r\n\r\n  loanCreateButton: Button = { name: 'create', display: 'New Loan', dialog: true, action: { url: 'loans?action=create', method: 'post' } };\r\n  loanEditButton: Button = { name: 'edit', dialog: true, action: { url: 'loans?action=edit', method: 'post' } };\r\n  loanDisburseButton: Button = { name: 'disburse', display: 'Disburse', action: { url: 'loans?action=disburse', method: 'post' }, confirm: { message: 'Are you sure you want to disburse this loan?' }, visible: (x: any) => x.canDisburse };\r\n\r\n  // ========== LOANS ==========\r\n\r\n  // Loan Application Form Configuration\r\n  loanFormConfig: FormConfig = {\r\n    title: 'Loan Application',\r\n    fields: [\r\n      { name: 'loanType', type: 'select', alias: 'Loan Type', required: true, defaultFirstValue: true,\r\n        options: [\r\n          { name: 'Customer Loan', value: 0 }, \r\n          { name: 'Employee Loan', value: 1 }\r\n        ] \r\n      },\r\n      { name: 'customerID', type: 'select', alias: 'Customer', required: true, \r\n        loadAction: { url: 'customers/list/x' }, \r\n        hiddenCondition: (x: any) => x.loanType == 1 \r\n      },\r\n      { name: 'employeeID', type: 'select', alias: 'Employee', required: true, \r\n        loadAction: { url: 'employees/list/x' }, \r\n        hiddenCondition: (x: any) => x.loanType == 0 \r\n      },\r\n      { name: 'loanProductID', type: 'select', alias: 'Loan Product', loadAction: { url: 'loanproducts/list/x' } },\r\n      { name: 'principalAmount', type: 'money', alias: 'Principal Amount', required: true },\r\n      { name: 'interestRate', type: 'number', alias: 'Annual Interest Rate (%)', required: true, min: 0, max: 100 },\r\n      { name: 'monthlyInterestRate', type: 'number', alias: 'Monthly Interest Rate (%)', required: true, min: 0, max: 100 },\r\n      { name: 'termMonths', type: 'number', alias: 'Term (Months)', required: true, min: 1, max: 120 },\r\n      { name: 'disbursementDate', type: 'date', alias: 'Disbursement Date', required: true },\r\n    ],\r\n    loadAction: { url: 'loans/id' },\r\n    heroField: 'loanID'\r\n  };\r\n\r\n  // ========== LOAN SCHEDULES ==========\r\n\r\n  // Loan Schedule Table Configuration (for display within loan details)\r\n  loanScheduleTableConfig: TableConfig = {\r\n    columns: [\r\n      { name: 'installmentNumber', alias: '#' },\r\n      { name: 'dueDate', type: 'date', alias: 'Due Date' },\r\n      { name: 'principalAmount', type: 'money', alias: 'Principal' },\r\n      { name: 'interestAmount', type: 'money', alias: 'Interest' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' },\r\n      { name: 'paidAmount', type: 'money', alias: 'Paid' },\r\n      { name: 'outstandingAmount', type: 'money', alias: 'Outstanding' },\r\n      { name: 'statusName', alias: 'Status', colors: [{ name: 'green', condition: (x: any) => x.status == 3 }, { name: 'red', condition: (x: any) => x.status == 2 }] },\r\n    ],\r\n    loadAction: { url: 'loanschedules/loan' },\r\n    minColumns: ['installmentNumber', 'dueDate', 'totalAmount', 'statusName']\r\n  };\r\n\r\n  // Loan Details Configuration\r\n  loanDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: {\r\n      title: 'Loan Details',\r\n      fields: [\r\n        { name: 'customerName', type: 'text', alias: 'Customer' },\r\n        { name: 'productName', type: 'text', alias: 'Product' },\r\n        { name: 'principalAmount', type: 'money', alias: 'Principal Amount' },\r\n        { name: 'interestRate', type: 'number', alias: 'Annual Interest Rate (%)', required: true, min: 0, max: 100 },\r\n        { name: 'monthlyInterestRate', type: 'number', alias: 'Monthly Interest Rate (%)', required: true, min: 0, max: 100 },\r\n        { name: 'termMonths', type: 'number', alias: 'Term (Months)' },\r\n        { name: 'disbursementDate', type: 'date', alias: 'Disbursement Date' },\r\n        { name: 'maturityDate', type: 'date', alias: 'Maturity Date' },\r\n        { name: 'statusName', type: 'text', alias: 'Status' },\r\n        { name: 'totalAmountDue', type: 'money', alias: 'Total Amount Due' },\r\n        { name: 'totalPaidAmount', type: 'money', alias: 'Total Paid' },\r\n        { name: 'outstandingBalance', type: 'money', alias: 'Outstanding Balance' },\r\n        { name: 'totalInterest', type: 'money', alias: 'Total Interest' },\r\n        { name: 'scheduleCount', type: 'number', alias: 'Total Installments' },\r\n        { name: 'paymentCount', type: 'number', alias: 'Payments Made' },\r\n        { name: 'overdueCount', type: 'number', alias: 'Overdue Installments' },\r\n      ],\r\n      loadAction: { url: 'loans/id' }\r\n    },\r\n    heroField: 'loanID',\r\n    tableConfigs: [\r\n      {\r\n        ...this.loanScheduleTableConfig,\r\n        tabTitle: 'Payment Schedule',\r\n        loadAction: { url: 'loanschedules/loan/x' },\r\n        loadCriteria: 'loan',\r\n        loadIDField: 'loanID'\r\n      },\r\n      {\r\n        tabTitle: 'Payment History',\r\n        showFilter: true,\r\n        columns: [\r\n          { name: 'paymentDate', type: 'date', alias: 'Date' },\r\n          { name: 'amount', type: 'money', alias: 'Amount' },\r\n          { name: 'principalPaid', type: 'money', alias: 'Principal' },\r\n          { name: 'interestPaid', type: 'money', alias: 'Interest' },\r\n          { name: 'methodName', alias: 'Method' },\r\n          { name: 'reference', alias: 'Reference' },\r\n        ],\r\n        loadAction: { url: 'loanpayments/loan/x' },\r\n        loadCriteria: 'loan',\r\n        loadIDField: 'loanID',\r\n        minColumns: ['paymentDate', 'amount']\r\n      }\r\n    ]\r\n  };\r\n\r\n  loanViewButton: Button = { name: 'view', display: 'View', dialog: true, detailsConfig: this.loanDetailsConfig };\r\n\r\n  // Loans Table Configuration\r\n  loanTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'borrowerType', alias: 'Type', colors: [{ name: 'blue', condition: (x: any) => x.employeeID > 0 }, { name: 'green', condition: (x: any) => x.customerID > 0 }] },\r\n      { name: 'borrowerName', alias: 'Borrower' },\r\n      { name: 'productName', alias: 'Product' },\r\n      { name: 'interestMethodName', alias: 'Method' },\r\n      { name: 'principalAmount', type: 'money', alias: 'Principal' },\r\n      { name: 'displayRate', alias: 'Rate (%)' },\r\n      { name: 'termMonths', alias: 'Term' },\r\n      { name: 'disbursementDate', type: 'date', alias: 'Disbursed' },\r\n      { name: 'outstandingBalance', type: 'money', alias: 'Outstanding' },\r\n      { name: 'statusName', alias: 'Status', colors: [{ name: 'green', condition: (x: any) => x.status == 2 }, { name: 'red', condition: (x: any) => x.status == 3 }, { name: 'orange', condition: (x: any) => x.status == 1 }] },\r\n    ],\r\n    loadAction: { url: 'loans/all/x' },\r\n    minColumns: ['borrowerName', 'principalAmount', 'statusName'],\r\n    formConfig: this.loanFormConfig,\r\n    buttons: [this.loanViewButton, this.loanCreateButton, this.loanEditButton, this.loanDisburseButton ],\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'Loan'\r\n  };\r\n\r\n  // ========== LOAN PAYMENTS BUTTONS ==========\r\n\r\n  loanPaymentCreateButton: Button = { name: 'create', display: 'Record Payment', dialog: true, action: { url: 'loanpayments?action=create', method: 'post' } };\r\n\r\n  // ========== LOAN PAYMENTS ==========\r\n\r\n  // Loan Payment Form Configuration\r\n  loanPaymentFormConfig: FormConfig = {\r\n    title: 'Loan Payment',\r\n    fields: [\r\n      { name: 'loanID', type: 'select', alias: 'Loan', required: true, loadAction: { url: 'loans/list/x' } },\r\n      { name: 'amount', type: 'money', alias: 'Payment Amount', required: true },\r\n      { name: 'paymentDate', type: 'date', alias: 'Payment Date', required: true },\r\n      { name: 'method', type: 'select', alias: 'Payment Method', required: true, options: [{ name: 'Cash', value: 0 }, { name: 'Bank Transfer', value: 1 }, { name: 'Mobile Money', value: 2 }, { name: 'Cheque', value: 3 }, { name: 'Card', value: 4 }] },\r\n      { name: 'reference', type: 'text', alias: 'Reference Number' },\r\n    ],\r\n    heroField: 'loanPaymentID'\r\n  };\r\n\r\n  loanPaymentTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    columns: [\r\n      { name: 'paymentDate', type: 'date', alias: 'Date' },\r\n      { name: 'customerName', alias: 'Customer' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'principalPaid', type: 'money', alias: 'Principal' },\r\n      { name: 'interestPaid', type: 'money', alias: 'Interest' },\r\n      { name: 'methodName', alias: 'Method' },\r\n      { name: 'reference', alias: 'Reference' },\r\n    ],\r\n    loadAction: { url: 'loanpayments/all/x' },\r\n    minColumns: ['paymentDate', 'customerName', 'amount'],\r\n    formConfig: this.loanPaymentFormConfig,\r\n    buttons: [this.loanPaymentCreateButton],\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'LoanPayment'\r\n  };\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { FormConfig, TableConfig, DetailsDialogConfig, Button } from '../classes/Classes';\r\nimport { DataServiceLib } from './datalib.service';\r\n\r\n// Service for generic entities: Categories, SubCategories, Brands, and ListItems\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class GeneralService {\r\n\r\n  private dataService = inject(DataServiceLib);\r\n\r\n  //--------------------------Categories-------------------------\r\n\r\n  categoryFormConfig: FormConfig = {\r\n    title: 'Category',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, alias: 'Name' },\r\n      { name: 'description', type: 'text', alias: 'Description' }\r\n    ],\r\n    loadAction: { url: 'categories/id' },\r\n    heroField: 'categoryID'\r\n  }\r\n\r\n  categoryCreateButton: Button = { name: 'create', display: 'Create Category', dialog: true, action: { url: 'categories?action=create', method: 'post' } }\r\n  categoryEditButton: Button = { name: 'edit', dialog: true, action: { url: 'categories?action=edit', method: 'post' } }\r\n  categoryDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'categories?action=delete', method: 'post' } }\r\n\r\n  categoryDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.categoryFormConfig,\r\n    heroField: 'categoryID',\r\n    buttons: [this.categoryCreateButton, this.categoryEditButton, this.categoryDeleteButton]\r\n  }\r\n\r\n  categoriesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'description'],\r\n    columns: [\r\n      { name: 'name', type: 'text', alias: 'Name' },\r\n      { name: 'description', type: 'text', alias: 'Description' }\r\n    ],\r\n    buttons: [\r\n      this.categoryCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.categoryDetailsConfig },\r\n      this.categoryEditButton,\r\n      this.categoryDeleteButton\r\n    ],\r\n    loadAction: { url: 'categories/all/x' },\r\n    formConfig: this.categoryFormConfig,\r\n    realTime: true,\r\n    entityName: 'Category'\r\n  }\r\n\r\n  //--------------------------SubCategories-------------------------\r\n\r\n  subCategoryFormConfig: FormConfig = {\r\n    title: 'Sub Category',\r\n    fixedTitle: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, alias: 'Name' },\r\n      { name: 'categoryID', type: 'select', required: true, alias: 'Category', loadAction: { url: 'categories/list/x' } },\r\n      { name: 'description', type: 'text', alias: 'Description' }\r\n    ],\r\n    loadAction: { url: 'subcategories/id' },\r\n    heroField: 'subCategoryID'\r\n  }\r\n\r\n  subCategoryCreateButton: Button = { name: 'create', display: 'Create Sub Category', dialog: true, action: { url: 'subcategories?action=create', method: 'post' } }\r\n  subCategoryEditButton: Button = { name: 'edit', dialog: true, action: { url: 'subcategories?action=edit', method: 'post' } }\r\n  subCategoryDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'subcategories?action=delete', method: 'post' } }\r\n\r\n  subCategoryDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.subCategoryFormConfig,\r\n    heroField: 'subCategoryID',\r\n    buttons: [this.subCategoryCreateButton, this.subCategoryEditButton, this.subCategoryDeleteButton]\r\n  }\r\n\r\n  subCategoriesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'categoryName', 'description'],\r\n    columns: [\r\n      { name: 'name', type: 'text', alias: 'Name' },\r\n      { name: 'categoryName', type: 'text', alias: 'Category' },\r\n      { name: 'description', type: 'text', alias: 'Description' }\r\n    ],\r\n    buttons: [\r\n      this.subCategoryCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.subCategoryDetailsConfig },\r\n      this.subCategoryEditButton,\r\n      this.subCategoryDeleteButton\r\n    ],\r\n    loadAction: { url: 'subcategories/all/x' },\r\n    formConfig: this.subCategoryFormConfig,\r\n    realTime: true,\r\n    entityName: 'SubCategory'\r\n  }\r\n\r\n  //--------------------------Brands-------------------------\r\n\r\n  brandFormConfig: FormConfig = {\r\n    title: 'Brand',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, alias: 'Name' },\r\n      { name: 'description', type: 'text', alias: 'Description' }\r\n    ],\r\n    loadAction: { url: 'brands/id' },\r\n    heroField: 'brandID'\r\n  }\r\n\r\n  brandCreateButton: Button = { name: 'create', display: 'Create Brand', dialog: true, action: { url: 'brands?action=create', method: 'post' } }\r\n  brandEditButton: Button = { name: 'edit', dialog: true, action: { url: 'brands?action=edit', method: 'post' } }\r\n  brandDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'brands?action=delete', method: 'post' } }\r\n\r\n  brandDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.brandFormConfig,\r\n    heroField: 'brandID',\r\n    buttons: [this.brandCreateButton, this.brandEditButton, this.brandDeleteButton]\r\n  }\r\n\r\n  brandsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'description'],\r\n    columns: [\r\n      { name: 'name', type: 'text', alias: 'Name' },\r\n      { name: 'description', type: 'text', alias: 'Description' }\r\n    ],\r\n    buttons: [\r\n      this.brandCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.brandDetailsConfig },\r\n      this.brandEditButton,\r\n      this.brandDeleteButton\r\n    ],\r\n    loadAction: { url: 'brands/all/x' },\r\n    formConfig: this.brandFormConfig,\r\n    realTime: true,\r\n    entityName: 'Brand'\r\n  }\r\n\r\n  //--------------------------ListItems-------------------------\r\n\r\n  listItemFormConfig: FormConfig = {\r\n    title: 'List Item',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'listName', type: 'text', required: true, alias: 'List Name', readonly: true },\r\n      { name: 'name', type: 'text', required: true, alias: 'Name' }\r\n    ],\r\n    loadAction: { url: 'listitems/id' },\r\n    heroField: 'listItemID'\r\n  }\r\n\r\n  listItemCreateButton: Button = { name: 'create', display: 'Create Item', dialog: true, action: { url: 'listitems?action=create', method: 'post' } }\r\n  listItemEditButton: Button = { name: 'edit', dialog: true, action: { url: 'listitems?action=edit', method: 'post' } }\r\n  listItemDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'listitems?action=delete', method: 'post' } }\r\n\r\n  listItemDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.listItemFormConfig,\r\n    heroField: 'listItemID',\r\n    buttons: [this.listItemCreateButton, this.listItemEditButton, this.listItemDeleteButton]\r\n  }\r\n\r\n  listItemsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['listName', 'name'],\r\n    columns: [\r\n      { name: 'listName', type: 'text', alias: 'List Name' },\r\n      { name: 'name', type: 'text', alias: 'Name' }\r\n    ],\r\n    buttons: [\r\n      this.listItemCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.listItemDetailsConfig },\r\n      this.listItemEditButton,\r\n      this.listItemDeleteButton\r\n    ],\r\n    loadAction: { url: 'listitems/all/x' },\r\n    formConfig: this.listItemFormConfig,\r\n    realTime: true,\r\n    entityName: 'ListItem'\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { FormConfig, TableConfig, DetailsDialogConfig, Button, TileConfig } from '../classes/Classes'; // Changed: Removed StepConfig, InventoryReceiptStatus — moved to PurchasingService\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { GeneralService } from './general.service';\r\n\r\n// Service to centralize all inventory-related table and form configurations\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class InventoryService {\r\n\r\n  private dataService = inject(DataServiceLib);\r\n  private generalService = inject(GeneralService);\r\n\r\n\r\n  productDetailsConfig!: DetailsDialogConfig;\r\n\r\n\r\n  constructor() {\r\n    \r\n\r\n    this.productDetailsConfig = {\r\n      formConfig: this.productFormConfig,\r\n      tableConfigs: [this.productComponentsTableConfig], // Added: Show components for bundle products\r\n      heroField: 'productID',\r\n      buttons: [this.productCreateButton, this.productEditButton, this.productDeleteButton]\r\n    };\r\n\r\n  }\r\n\r\n  //--------------------------Products-------------------------\r\n\r\n  productFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capProducts] },\r\n    title: 'Product',\r\n    fixedTitle: true, // Changed: Use fixedTitle to avoid title duplication\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'productInfo', type: 'section', alias: 'Product Information' },\r\n      { name: 'name', type: 'text', required: true, alias: 'Product Name', section: 'productInfo', infoMessage: 'The unique name of the product' },\r\n      { name: 'sku', type: 'text', alias: 'SKU (optional)', section: 'productInfo', infoMessage: 'Stock Keeping Unit for inventory tracking (optional)' }, // Changed: Removed required flag\r\n      { name: 'description', type: 'text', alias: 'Description', span: true, section: 'productInfo', infoMessage: 'Detailed description of the product' },\r\n      { name: 'isBundle', type: 'checkbox', alias: 'Bundle Product', span: true, section: 'productInfo', infoMessage: 'Check if this is a bundle/combo product made up of other products' }, // Added: Bundle product flag\r\n      \r\n      { name: 'pricingInfo', type: 'section', alias: 'Pricing' },\r\n      { name: 'sellingPrice', type: 'money', required: true, alias: 'Selling Price', section: 'pricingInfo', infoMessage: 'Default selling price per unit' },\r\n      { name: 'taxRateID', type: 'select', alias: 'Tax Rate', nullable: true, section: 'pricingInfo', loadAction: { url: 'products/list/tax-rates' }, infoMessage: 'VAT rate applied to this product' }, // Changed: Tax rate selector\r\n      { name: 'isTaxInclusive', type: 'checkbox', alias: 'Price includes Tax', section: 'pricingInfo', infoMessage: 'If checked, the selling price already includes tax' }, // Changed: Tax-inclusive flag\r\n\r\n      { name: 'inventoryInfo', type: 'section', alias: 'Inventory Settings', collapsedCondition: x => x.productID }, \r\n      { name: 'isSerialized', type: 'checkbox', alias: 'Serialized Product', span: true, section: 'inventoryInfo', infoMessage: 'Track individual items by serial number', hiddenCondition: x => x.isBundle }, // Changed: Hide for bundles\r\n      { name: 'baseUnit', type: 'select', required: true, alias: 'Base Unit', section: 'inventoryInfo', loadAction: { url: 'products/list/base-unit' }, defaultFirstValue: true, infoMessage: 'Unit of measure for inventory tracking' }, // Changed: Added defaultFirstValue flag\r\n      { name: 'minimumInventoryLevel', type: 'number', required: true, alias: 'Minimum Inventory Level', section: 'inventoryInfo', infoMessage: 'Alert threshold for low stock', hiddenCondition: x => x.isBundle }, // Changed: Hide for bundles\r\n\r\n      { name: 'categoryInfo', type: 'section', alias: 'Categorization', collapsed : true },\r\n      { name: 'categoryID', type: 'select', alias: 'Category', nullable: true, section: 'categoryInfo', loadAction: { url: 'categories/list/x' }, detailsConfig: this.generalService.categoryDetailsConfig, infoMessage: 'The main product category' }, // Changed: Added nullable flag\r\n      { name: 'subCategoryID', type: 'select', alias: 'Sub Category', section: 'categoryInfo', loadAction: { url: 'subcategories/list/x' }, detailsConfig: this.generalService.subCategoryDetailsConfig, infoMessage: 'More specific product classification' },\r\n      { name: 'brandID', type: 'select', alias: 'Brand', nullable: true, section: 'categoryInfo', loadAction: { url: 'brands/list/x' }, detailsConfig: this.generalService.brandDetailsConfig, infoMessage: 'Product brand or manufacturer' }, // Changed: Added nullable flag\r\n      \r\n\r\n      \r\n\r\n    ],\r\n    loadAction: { url: 'products/id' },\r\n    heroField: 'productID'\r\n  }\r\n\r\n  productViewButton : Button = { name: 'view', dialog: true, detailsConfig: this.productDetailsConfig }\r\n  productCreateButton: Button = { name: 'create', display: 'Create Product', dialog: true, action: { url: 'products?action=create', method: 'post' } }\r\n  productEditButton: Button = { name: 'edit', dialog: true, action: { url: 'products?action=edit', method: 'post' } }\r\n  productDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'products?action=delete', method: 'post' } }\r\n\r\n\r\n\r\n\r\n  productsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'sku', 'categoryName'],\r\n    columns: [\r\n      { name: 'name', type: 'text', alias: 'Product Name' },\r\n      { name: 'sku', type: 'text', alias: 'SKU' },\r\n      { name: 'categoryName', type: 'text', alias: 'Category' },\r\n      { name: 'brandName', type: 'text', alias: 'Brand' },\r\n      { name: 'currentInventoryLevel', type: 'number', alias: 'Current Stock', icon: { name: 'warning', color: 'orange', condition: (x: any) => x.isLowInventory } }, // Changed: Removed separate columns, added low stock icon to current stock\r\n      { name: 'minimumInventoryLevel', type: 'number', alias: 'Min Stock' },\r\n      { name: 'sellingPrice', type: 'money' },\r\n      { name: 'taxRateName', type: 'text', alias: 'Tax Rate' }, // Changed: Tax rate display with N/A fallback\r\n      { name: 'priceExclTax', type: 'text', alias: 'Price (Excl)' }, // Changed: Computed price excluding tax\r\n      { name: 'priceInclTax', type: 'text', alias: 'Price (Incl)' }, // Changed: Computed price including tax\r\n    ],\r\n    buttons: [\r\n      this.productCreateButton,\r\n      this.productViewButton,\r\n      this.productEditButton,\r\n      this.productDeleteButton,\r\n    ],\r\n    loadAction: { url: 'products/all/x' },\r\n    formConfig: this.productFormConfig,\r\n    realTime: true,\r\n    entityName: 'Product'\r\n  }\r\n\r\n  //--------------------------Product Components (Bundle Configuration)-------------------------\r\n\r\n  // Product component form for adding/editing bundle components\r\n  productComponentFormConfig: FormConfig = {\r\n    title: 'Bundle Component',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'productComponentID', type: 'number', alias: 'ID', hidden: true },\r\n      { name: 'productID', type: 'number', alias: 'Bundle Product ID', hidden: true },\r\n      { name: 'componentProductID', type: 'select', alias: 'Component Product', required: true, detailsConfig: this.productDetailsConfig, \r\n        loadAction: { url: 'products/list/components' }, \r\n        infoMessage: 'Select a non-bundle product to include in this bundle' \r\n      },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity', required: true, defaultValue: 1 , infoMessage: 'Number of units required per bundle' }\r\n    ],\r\n    loadAction: { url: 'productcomponents/id' },\r\n    heroField: 'productComponentID'\r\n  }\r\n\r\n  // Product components table for bundle details\r\n  productComponentsTableConfig: TableConfig = {\r\n    tabTitle: 'Components',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    causeFormRefresh: true,\r\n    minColumns: ['componentProductName', 'quantity', 'estimatedCost'],\r\n    columns: [\r\n      { name: 'componentProductName', type: 'text', alias: 'Component' },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity per Bundle' },\r\n      { name: 'componentCurrentStock', type: 'number', alias: 'Available Stock' },\r\n      { name: 'estimatedCost', type: 'money', alias: 'Est. Cost' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Component', dialog: true, action: { url: 'productcomponents?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'productcomponents?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'productcomponents?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'productcomponents/x/x' }, loadCriteria: 'bundle', loadIDField: 'productID',\r\n    formConfig: this.productComponentFormConfig\r\n  }\r\n\r\n  // Bundle product form configuration\r\n  bundleProductFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capProducts] },\r\n    title: 'Bundle Product',\r\n    fixedTitle: true,\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'productInfo', type: 'section', alias: 'Bundle Information' },\r\n      { name: 'name', type: 'text', required: true, alias: 'Bundle Name', section: 'productInfo', infoMessage: 'Name for this product bundle' },\r\n      { name: 'sku', type: 'text', alias: 'SKU (optional)', section: 'productInfo', infoMessage: 'Stock Keeping Unit for bundle tracking' },\r\n      { name: 'description', type: 'text', alias: 'Description', span: true, section: 'productInfo', infoMessage: 'Description of what is included in this bundle' },\r\n      { name: 'isBundle', type: 'checkbox', alias: 'Is Bundle', hidden: true, defaultValue: true },\r\n      \r\n      { name: 'pricingInfo', type: 'section', alias: 'Pricing' },\r\n      { name: 'sellingPrice', type: 'money', required: true, alias: 'Bundle Price', section: 'pricingInfo', infoMessage: 'Selling price for the complete bundle' },\r\n      { name: 'bundleEstimatedCost', type: 'money', alias: 'Estimated Cost', section: 'pricingInfo', readonly: true, hideOnCreate: true, infoMessage: 'Total estimated cost based on component costs' },\r\n\r\n      { name: 'inventoryInfo', type: 'section', alias: 'Inventory Settings', collapsedCondition: x => x.productID }, \r\n      { name: 'baseUnit', type: 'select', required: true, alias: 'Base Unit', section: 'inventoryInfo', loadAction: { url: 'products/list/base-unit' }, defaultFirstValue: true, infoMessage: 'Unit of measure for bundle' },\r\n      { name: 'bundleAvailableQuantity', type: 'number', alias: 'Available to Sell', section: 'inventoryInfo', readonly: true, hideOnCreate: true, infoMessage: 'Number of bundles that can be assembled from current component stock' },\r\n\r\n\r\n    ],\r\n    loadAction: { url: 'products/id' },\r\n    heroField: 'productID'\r\n  }\r\n\r\n  bundleProductDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.bundleProductFormConfig,\r\n    tableConfigs: [this.productComponentsTableConfig],\r\n    heroField: 'productID',\r\n    buttons: [\r\n      { name: 'create', display: 'Create Bundle', dialog: true, action: { url: 'products?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'products?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'products?action=delete', method: 'post' } }\r\n    ]\r\n  }\r\n\r\n  bundleProductViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.bundleProductDetailsConfig }\r\n  bundleProductCreateButton: Button = { name: 'create', display: 'Create Bundle', dialog: true, action: { url: 'products?action=create', method: 'post' } }\r\n\r\n  // Table configuration for bundle products\r\n  bundleProductsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'sku', 'bundleAvailableQuantity'],\r\n    columns: [\r\n      { name: 'name', type: 'text', alias: 'Bundle Name' },\r\n      { name: 'sku', type: 'text', alias: 'SKU' },\r\n      { name: 'bundleAvailableQuantity', type: 'number', alias: 'Available', icon: { name: 'info', color: '#2196F3', condition: (x: any) => x.bundleAvailableQuantity > 0 } }, // Changed: Removed infoMessage as it's not valid for columns\r\n      { name: 'bundleEstimatedCost', type: 'money', alias: 'Est. Cost' },\r\n      { name: 'sellingPrice', type: 'money', alias: 'Selling Price' },\r\n      { name: 'categoryName', type: 'text', alias: 'Category' }\r\n    ],\r\n    buttons: [\r\n      this.bundleProductCreateButton,\r\n      this.bundleProductViewButton,\r\n      { name: 'edit', dialog: true, action: { url: 'products?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'products?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'products/bundles/x' },\r\n    formConfig: this.bundleProductFormConfig,\r\n    realTime: true,\r\n    entityName: 'Product'\r\n  }\r\n\r\n  //--------------------------ServiceItems-------------------------\r\n\r\n  // ServiceItem form configuration - follows Product pattern\r\n  serviceItemFormConfig: FormConfig = {\r\n    title: 'Service',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, alias: 'Service Name' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', defaultValue: true },\r\n      { name: 'description', type: 'text', alias: 'Description' },\r\n      { name: 'unitPrice', type: 'money', required: true, alias: 'Unit Price' },\r\n      { name: 'taxRateID', type: 'select', alias: 'Tax Rate', nullable: true, loadAction: { url: 'serviceitems/list/tax-rates' }, infoMessage: 'VAT rate applied to this service' }, // Changed: Tax rate selector\r\n      { name: 'isTaxInclusive', type: 'checkbox', alias: 'Price includes Tax', infoMessage: 'If checked, the unit price already includes tax' }, // Changed: Tax-inclusive flag\r\n    ],\r\n    loadAction: { url: 'serviceitems/id' },\r\n    heroField: 'serviceItemID'\r\n  }\r\n\r\n  serviceItemCreateButton: Button = { name: 'create', display: 'Create Service', dialog: true, action: { url: 'serviceitems?action=create', method: 'post' } }\r\n  serviceItemEditButton: Button = { name: 'edit', dialog: true, action: { url: 'serviceitems?action=edit', method: 'post' } }\r\n  serviceItemDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'serviceitems?action=delete', method: 'post' } }\r\n\r\n  serviceItemDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.serviceItemFormConfig,\r\n    heroField: 'serviceItemID',\r\n    buttons: [this.serviceItemCreateButton, this.serviceItemEditButton, this.serviceItemDeleteButton]\r\n  }\r\n\r\n  serviceItemsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'unitPrice', 'statusName'],\r\n    columns: [\r\n      { name: 'name', type: 'text', alias: 'Service Name' },\r\n      { name: 'description', type: 'text', alias: 'Description' },\r\n      { name: 'unitPrice', type: 'money', alias: 'Unit Price' },\r\n      { name: 'taxRateName', type: 'text', alias: 'Tax Rate' }, // Changed: Tax rate display with N/A fallback\r\n      { name: 'priceExclTax', type: 'text', alias: 'Price (Excl)' }, // Changed: Computed price excluding tax\r\n      { name: 'priceInclTax', type: 'text', alias: 'Price (Incl)' }, // Changed: Computed price including tax\r\n      { name: 'statusName', type: 'text', alias: 'Status' }\r\n    ],\r\n    buttons: [\r\n      this.serviceItemCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.serviceItemDetailsConfig },\r\n      this.serviceItemEditButton,\r\n      this.serviceItemDeleteButton\r\n    ],\r\n    loadAction: { url: 'serviceitems/all/x' },\r\n    formConfig: this.serviceItemFormConfig,\r\n    realTime: true,\r\n    entityName: 'ServiceItem'\r\n  }\r\n\r\n  //--------------------------Requisitions-------------------------\r\n\r\n  requisitionItemFormConfig: FormConfig = {\r\n    title: 'Requisition Item',\r\n    fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'Add Item' button\r\n    fields: [\r\n      { name: 'productID', type: 'select', alias: 'Product', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.productDetailsConfig },\r\n      { name: 'requestedQuantity', type: 'number', alias: 'Requested Qty', required: true },\r\n      { name: 'issuedQuantity', type: 'number', alias: 'Issued Qty', readonly: true },\r\n      { name: 'inventoryItemID', type: 'select', alias: 'Serial Number', loadAction: { url: 'inventoryitems/list/x' } }\r\n    ],\r\n    loadAction: { url: 'requisitionitems/id' }\r\n  }\r\n\r\n  requisitionItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    // showInModes: ['edit'],\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'requestedQuantity', type: 'number', alias: 'Requested Qty' },\r\n      { name: 'issuedQuantity', type: 'number', alias: 'Issued Qty' },\r\n      { name: 'serialNumber', type: 'text', alias: 'Serial Number' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'requisitionitems?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'requisitionitems?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'requisitionitems?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'requisitionitems/x/x' }, loadCriteria: 'requisition', loadIDField: 'requisitionID',\r\n    formConfig: this.requisitionItemFormConfig\r\n  }\r\n\r\n  requisitionFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capRequisitions] },\r\n    title: 'Requisition',\r\n    fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'New Requisition' button\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'reqInfo', type: 'section', alias: 'Requisition Information' },\r\n      { name: 'requisitionNumber', type: 'text', alias: 'Requisition #', readonly: true, section: 'reqInfo' },\r\n      { name: 'requestedBy', type: 'text', alias: 'Requested By', readonly: true, section: 'reqInfo' },\r\n      { name: 'departmentID', type: 'select', alias: 'Department', section: 'reqInfo', loadAction: { url: 'departments/list/x' } },\r\n      { name: 'requestDate', type: 'date', alias: 'Request Date', readonly: true, section: 'reqInfo' },\r\n      { name: 'issuedDate', type: 'date', alias: 'Issued Date', readonly: true, section: 'reqInfo' },\r\n      { name: 'status', type: 'select', alias: 'Status', readonly: true, section: 'reqInfo', loadAction: { url: 'requisitions/list/status' } },\r\n      \r\n      { name: 'purposeInfo', type: 'section', alias: 'Purpose & Notes' },\r\n      { name: 'purpose', type: 'text', required: true, alias: 'Purpose', span: true, section: 'purposeInfo' },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'purposeInfo' }\r\n    ],\r\n    loadAction: { url: 'requisitions/id' },\r\n    heroField: 'requisitionID'\r\n  }\r\n\r\n  requisitionEditButton: Button = { name: 'edit', dialog: true, action: { url: 'requisitions?action=edit', method: 'post' } }\r\n  requisitionSubmitButton: Button = { name: 'submit', display: 'Submit Requisition', icon: { name: 'send', color: 'primary' }, action: { url: 'requisitions?action=submit', method: 'post', successMessage: 'Requisition Submitted' }, confirm: { message: 'Submit this requisition for approval?' },  visible: (row) => row.status === 0 }\r\n  requisitionIssueButton: Button = { name: 'issue', display: 'Issue Items', icon: { name: 'check', color: 'green' }, inDialog : true, action: { url: 'requisitions?action=issue', method: 'post', successMessage: 'Items Issued' }, confirm: { message: 'Issue items for this requisition?' }, visible: (row) => row.pendingApproval === false && row.status === 0 }\r\n  requisitionCancelButton: Button = { name: 'cancel', display: 'Cancel Request', icon: { name: 'close', color: 'red' }, inDialog : true, action: { url: 'requisitions?action=cancel', method: 'post', successMessage: 'Requisition Cancelled' }, confirm: { message: 'Cancel this requisition?' }, visible: (row) => row.status === 0 }\r\n\r\n  requisitionDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.requisitionFormConfig,\r\n    tableConfigs: [this.requisitionItemsTableConfig],\r\n    heroField: 'requisitionID',\r\n    buttons: [ this.requisitionEditButton, this.requisitionSubmitButton, this.requisitionIssueButton, this.requisitionCancelButton]\r\n  }\r\n\r\n  requisitionViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.requisitionDetailsConfig }\r\n\r\n  requisitionsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['requisitionNumber', 'requesterName', 'requestDate'],\r\n    columns: [\r\n      { name: 'requisitionNumber', type: 'text', alias: 'Requisition #' },\r\n      { name: 'requesterName', type: 'text', alias: 'Requested By' },\r\n      { name: 'departmentName', type: 'text', alias: 'Department' },\r\n      { name: 'requestDate', type: 'date', alias: 'Request Date' },\r\n      { name: 'issuedDate', type: 'date', alias: 'Issued Date' },\r\n      { name: 'status', type: 'text', alias: 'Status' },\r\n      { name: 'purpose', type: 'text', alias: 'Purpose', maxLength: 100 },\r\n      { name: 'pendingApproval', type: 'checkbox', alias: 'Pending' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'New Requisition', dialog: true, action: { url: 'requisitions?action=create', method: 'post' }, onSuccessButton: this.requisitionViewButton },\r\n      { name: 'view', dialog: true, detailsConfig: this.requisitionDetailsConfig },\r\n      { name: 'edit', dialog: true, detailsConfig: this.requisitionDetailsConfig },\r\n      { name: 'delete', dialog: true, action: { url: 'requisitions?action=delete', method: 'post' } },\r\n      this.requisitionIssueButton,\r\n      this.requisitionCancelButton\r\n    ],\r\n    loadAction: { url: 'requisitions/all/x' },\r\n    formConfig: this.requisitionFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'Requisition'\r\n  }\r\n\r\n  // Removed: Purchase Orders configs moved to PurchasingService\r\n  // Removed: Inventory Receipts configs moved to PurchasingService\r\n\r\n  //--------------------------Inventory Items-------------------------\r\n\r\n  inventoryItemFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryItems] },\r\n    title: 'Inventory Item',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'productName', type: 'text', alias: 'Product', readonly: true },\r\n      { name: 'serialNumber', type: 'text', alias: 'Serial Number', readonly: true },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity', readonly: true },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost', readonly: true },\r\n      { name: 'totalValue', type: 'money', alias: 'Total Value', readonly: true },\r\n      { name: 'status', type: 'text', alias: 'Status', readonly: true },\r\n      { name: 'receivedDate', type: 'date', alias: 'Received Date', readonly: true }\r\n    ],\r\n    loadAction: { url: 'inventoryitems/id' },\r\n    heroField: 'inventoryItemID'\r\n  }\r\n\r\n  inventoryItemDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.inventoryItemFormConfig,\r\n    heroField: 'inventoryItemID',\r\n    buttons: []\r\n  }\r\n\r\n  inventoryItemsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['productName', 'serialNumber', 'quantity'],\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'serialNumber', type: 'text', alias: 'Serial Number' }, // Changed: Backend should return N/A for non-serialized products\r\n      { name: 'quantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost' },\r\n      { name: 'totalValue', type: 'money', alias: 'Total Value' },\r\n      { name: 'statusName', type: 'text', alias: 'Status' }, // Changed: Use statusName instead of status to show status name\r\n      { name: 'receivedDate', type: 'date', alias: 'Received Date' }\r\n    ],\r\n    \r\n    buttons: [\r\n      // this.inventoryQuickPurchaseButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.inventoryItemDetailsConfig }\r\n    ],\r\n    loadAction: { url: 'inventoryitems/all/x' },\r\n    formConfig: this.inventoryItemFormConfig,\r\n    realTime: true,\r\n    entityName: 'InventoryItem'\r\n  }\r\n\r\n  \r\n\r\n  //--------------------------Inventory Adjustments-------------------------\r\n\r\n  // Updated: Changed form from all-readonly to editable fields for create/edit\r\n  inventoryAdjustmentFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryAdjustments] },\r\n    title: 'Inventory Adjustment',\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'adjustmentInfo', type: 'section', alias: 'Adjustment Information' },\r\n      { name: 'adjustmentNumber', type: 'text', alias: 'Adjustment #', readonly: true, section: 'adjustmentInfo' },\r\n      { name: 'productID', type: 'select', required: true, alias: 'Product', section: 'adjustmentInfo', loadAction: { url: 'products/list/x' } },\r\n      { name: 'reason', type: 'select', required: true, alias: 'Reason', section: 'adjustmentInfo', loadAction: { url: 'inventoryadjustments/list/reason' } },\r\n      { name: 'adjustmentQuantity', type: 'number', required: true, alias: 'Quantity (+/-)', section: 'adjustmentInfo' },\r\n      { name: 'adjustmentDate', type: 'date', alias: 'Date', readonly: true, section: 'adjustmentInfo' },\r\n      { name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo' },\r\n      { name: 'pendingApproval', type: 'checkbox', alias: 'Pending Approval', readonly: true, section: 'additionalInfo' }\r\n    ],\r\n    loadAction: { url: 'inventoryadjustments/id' },\r\n    heroField: 'inventoryAdjustmentID'\r\n  }\r\n\r\n  // Added: CRUD buttons for adjustments\r\n  inventoryAdjustmentCreateButton: Button = { name: 'create', display: 'Create Adjustment', dialog: true, action: { url: 'inventoryadjustments?action=create', method: 'post' } }\r\n  inventoryAdjustmentEditButton: Button = { name: 'edit', dialog: true, action: { url: 'inventoryadjustments?action=edit', method: 'post' } }\r\n  inventoryAdjustmentDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'inventoryadjustments?action=delete', method: 'post' } }\r\n\r\n  // Updated: Added edit/delete buttons to details dialog\r\n  inventoryAdjustmentDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.inventoryAdjustmentFormConfig,\r\n    heroField: 'inventoryAdjustmentID',\r\n    buttons: [this.inventoryAdjustmentEditButton, this.inventoryAdjustmentDeleteButton]\r\n  }\r\n\r\n  // Updated: Added create/edit/delete buttons to table\r\n  inventoryAdjustmentsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['adjustmentNumber', 'productName', 'reason'],\r\n    columns: [\r\n      { name: 'adjustmentNumber', type: 'text', alias: 'Adjustment #' },\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'reason', type: 'text', alias: 'Reason' },\r\n      { name: 'adjustmentQuantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'adjustmentDate', type: 'date', alias: 'Date' },\r\n      { name: 'pendingApproval', type: 'checkbox', alias: 'Pending' }\r\n    ],\r\n    buttons: [\r\n      this.inventoryAdjustmentCreateButton,\r\n      { name: 'view', dialog: true, detailsConfig: this.inventoryAdjustmentDetailsConfig },\r\n      this.inventoryAdjustmentEditButton,\r\n      this.inventoryAdjustmentDeleteButton\r\n    ],\r\n    loadAction: { url: 'inventoryadjustments/all/x' },\r\n    formConfig: this.inventoryAdjustmentFormConfig,\r\n    realTime: true,\r\n    entityName: 'InventoryAdjustment'\r\n  }\r\n\r\n  //--------------------------Inventory Returns-------------------------\r\n\r\n  // Added: Return item form config with conditional fields based on return type\r\n  inventoryReturnItemFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryReturns] },\r\n    title: 'Return Item',\r\n    fields: [\r\n      { name: 'productID', type: 'select', required: true, alias: 'Product', loadAction: { url: 'products/list/x' } },\r\n      { name: 'quantity', type: 'number', required: true, alias: 'Quantity' },\r\n      { name: 'unitValue', type: 'money', required: true, alias: 'Unit Value' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total', readonly: true },\r\n      { name: 'restockApproved', type: 'checkbox', alias: 'Restock', hiddenCondition: (x: any) => x._parentReturnType === 2 },\r\n      { name: 'isGoodCondition', type: 'checkbox', alias: 'Good Condition', hiddenCondition: (x: any) => x._parentReturnType !== 2 },\r\n      { name: 'conditionNotes', type: 'text', alias: 'Condition Notes', span: true, hiddenCondition: (x: any) => x._parentReturnType !== 2 }\r\n    ],\r\n    loadAction: { url: 'inventoryreturnitems/id' },\r\n    heroField: 'inventoryReturnItemID'\r\n  }\r\n\r\n  // Added: Return items table for details dialog\r\n  inventoryReturnItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'unitValue', type: 'money', alias: 'Unit Value' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total' },\r\n      { name: 'restockApproved', type: 'checkbox', alias: 'Restock' },\r\n      { name: 'isGoodCondition', type: 'checkbox', alias: 'Good Condition' },\r\n      { name: 'conditionNotes', type: 'text', alias: 'Notes' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'inventoryreturnitems?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'inventoryreturnitems?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'inventoryreturnitems?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'inventoryreturnitems/x/x' }, loadCriteria: 'return', loadIDField: 'inventoryReturnID',\r\n    formConfig: this.inventoryReturnItemFormConfig\r\n  }\r\n\r\n  // Added: Return form config with conditional source fields based on return type\r\n  inventoryReturnFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryReturns] },\r\n    title: 'Inventory Return',\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'returnInfo', type: 'section', alias: 'Return Information' },\r\n      { name: 'returnNumber', type: 'text', alias: 'Return #', readonly: true, section: 'returnInfo' },\r\n      { name: 'returnType', type: 'select', required: true, alias: 'Return Type', section: 'returnInfo', loadAction: { url: 'inventoryreturns/list/return-type' } },\r\n      { name: 'returnDate', type: 'date', alias: 'Return Date', readonly: true, section: 'returnInfo' },\r\n      { name: 'status', type: 'select', alias: 'Status', readonly: true, section: 'returnInfo', loadAction: { url: 'inventoryreturns/list/status' } },\r\n      { name: 'sourceInfo', type: 'section', alias: 'Source Details' },\r\n      { name: 'customerID', type: 'select', alias: 'Customer', section: 'sourceInfo', loadAction: { url: 'customers/list/x' }, hiddenCondition: (x: any) => x.returnType !== 0 },\r\n      { name: 'saleID', type: 'select', alias: 'Sale', section: 'sourceInfo', loadAction: { url: 'sales/list/x' }, hiddenCondition: (x: any) => x.returnType !== 0 },\r\n      { name: 'supplierID', type: 'select', alias: 'Supplier', section: 'sourceInfo', loadAction: { url: 'suppliers/list/x' }, hiddenCondition: (x: any) => x.returnType !== 1 },\r\n      { name: 'purchaseID', type: 'select', alias: 'Purchase', section: 'sourceInfo', loadAction: { url: 'purchases/list/x' }, hiddenCondition: (x: any) => x.returnType !== 1 }, // Changed: inventoryReceiptID → purchaseID, inventoryreceipts → purchases\r\n      { name: 'requisitionID', type: 'select', alias: 'Requisition', section: 'sourceInfo', loadAction: { url: 'requisitions/list/x' }, hiddenCondition: (x: any) => x.returnType !== 2 },\r\n      { name: 'details', type: 'section', alias: 'Details' },\r\n      { name: 'reason', type: 'text', required: true, alias: 'Reason', span: true, section: 'details' },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'details' },\r\n      { name: 'totals', type: 'section', alias: 'Totals' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals' }\r\n    ],\r\n    loadAction: { url: 'inventoryreturns/id' },\r\n    heroField: 'inventoryReturnID'\r\n  }\r\n\r\n  // Added: CRUD + action buttons for returns\r\n  inventoryReturnCreateButton: Button = { name: 'create', display: 'Create Return', dialog: true, action: { url: 'inventoryreturns?action=create', method: 'post' } }\r\n  inventoryReturnEditButton: Button = { name: 'edit', dialog: true, action: { url: 'inventoryreturns?action=edit', method: 'post' } }\r\n  inventoryReturnDeleteButton: Button = { name: 'delete', dialog: true, action: { url: 'inventoryreturns?action=delete', method: 'post' } }\r\n  inventoryReturnRejectButton: Button = { name: 'reject', display: 'Reject', icon: { name: 'cancel', color: 'red' }, inDialog: true, action: { url: 'inventoryreturns?action=reject', method: 'post', successMessage: 'Return rejected' }, confirm: { message: 'Reject this return?' }, visible: (x: any) => x.status === 0 }\r\n\r\n  // Added: Details dialog with items table\r\n  inventoryReturnDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.inventoryReturnFormConfig,\r\n    tableConfigs: [this.inventoryReturnItemsTableConfig],\r\n    heroField: 'inventoryReturnID',\r\n    buttons: [this.inventoryReturnEditButton, this.inventoryReturnDeleteButton, this.inventoryReturnRejectButton]\r\n  }\r\n\r\n  inventoryReturnViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.inventoryReturnDetailsConfig }\r\n\r\n  // Added: Main returns table config\r\n  inventoryReturnsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['returnNumber', 'entityName', 'returnDate'],\r\n    columns: [\r\n      { name: 'returnNumber', type: 'text', alias: 'Return #' },\r\n      { name: 'returnType', type: 'text', alias: 'Type' },\r\n      { name: 'entityName', type: 'text', alias: 'Source' },\r\n      { name: 'returnDate', type: 'date', alias: 'Date' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' },\r\n      { name: 'status', type: 'text', alias: 'Status' },\r\n      { name: 'pendingApproval', type: 'checkbox', alias: 'Pending' }\r\n    ],\r\n    buttons: [\r\n      this.inventoryReturnCreateButton,\r\n      this.inventoryReturnViewButton,\r\n      this.inventoryReturnEditButton,\r\n      this.inventoryReturnDeleteButton,\r\n      this.inventoryReturnRejectButton\r\n    ],\r\n    loadAction: { url: 'inventoryreturns/all/x' },\r\n    formConfig: this.inventoryReturnFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'InventoryReturn'\r\n  }\r\n\r\n  //--------------------------Inventory Transactions-------------------------\r\n\r\n  inventoryTransactionFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryTransactions] },\r\n    title: 'Inventory Transaction',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'productName', type: 'text', alias: 'Product', readonly: true },\r\n      { name: 'transactionType', type: 'text', alias: 'Type', readonly: true },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity', readonly: true },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost', readonly: true },\r\n      { name: 'totalValue', type: 'money', alias: 'Total Value', readonly: true },\r\n      { name: 'transactionDate', type: 'date', alias: 'Date', readonly: true },\r\n      { name: 'referenceType', type: 'text', alias: 'Reference', readonly: true }\r\n    ],\r\n    loadAction: { url: 'inventorytransactions/id' },\r\n    heroField: 'inventoryTransactionID'\r\n  }\r\n\r\n  inventoryTransactionDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.inventoryTransactionFormConfig,\r\n    heroField: 'inventoryTransactionID',\r\n    buttons: []\r\n  }\r\n\r\n  inventoryTransactionsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['productName', 'transactionTypeName', 'quantity'],\r\n    columns: [\r\n      { name: 'transactionDate', type: 'date', alias: 'Date' },\r\n      { name: 'transactionTypeName', type: 'text', alias: 'Type' },\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost' },\r\n      { name: 'totalValue', type: 'money', alias: 'Total Value' },\r\n      { name: 'referenceType', type: 'text', alias: 'Reference' }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true, detailsConfig: this.inventoryTransactionDetailsConfig }\r\n    ],\r\n    loadAction: { url: 'inventorytransactions/all/x' },\r\n    formConfig: this.inventoryTransactionFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'InventoryTransaction'\r\n  }\r\n\r\n  //--------------------------Inventory Stock (Grouped by Product)-------------------------\r\n\r\n  // Changed: Reuse existing inventoryItemsTableConfig with product criteria filter\r\n  inventoryStockItemsTableConfig: TableConfig = {\r\n    ...this.inventoryItemsTableConfig,\r\n    tabTitle: 'Stock Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    buttons: [],\r\n    loadAction: { url: 'inventoryitems/stock/x' }, loadCriteria: 'product', loadIDField: 'productID'\r\n  }\r\n\r\n  // Changed: Reuse product form config, filter to show only Product Information section fields\r\n  inventoryStockProductFormConfig: FormConfig = {\r\n    ...this.productFormConfig,\r\n    security: { allow: [this.dataService.capInventoryStock] },\r\n    fields: this.productFormConfig.fields.filter(f => f.section === 'productInfo' || f.name === 'productInfo').map(f => ({ ...f, readonly: true })),\r\n    loadAction: { url: 'products/id' }\r\n  }\r\n\r\n  // Changed: Details config reuses simplified product form and inventory items table\r\n  inventoryStockDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.inventoryStockProductFormConfig,\r\n    tableConfigs: [this.inventoryStockItemsTableConfig],\r\n    heroField: 'productID',\r\n    buttons: []\r\n  }\r\n\r\n  // Inventory stock summary tiles\r\n  inventoryStockTileConfig: TileConfig = {\r\n    clickable: true,\r\n    headerPosition: 'top',\r\n    tiles: [\r\n      { name: 'totalProducts', alias: 'Total Products', color: '#2196F3', icon: 'category', info: 'Total number of products in inventory', action: { url: 'inventoryitems/stock/all' } }, // Changed: Added icon\r\n      { name: 'lowStockProducts', alias: 'Low Stock', color: '#FFC107', icon: 'warning', info: 'Products below minimum quantity', action: { url: 'inventoryitems/stock/lowstock' } }, // Changed: Added icon\r\n      { name: 'outOfStockProducts', alias: 'Out of Stock', color: '#F44336', icon: 'remove_shopping_cart', info: 'Products with zero quantity', action: { url: 'inventoryitems/stock/outofstock' } }, // Changed: Added icon\r\n      { name: 'serializedProducts', alias: 'Serialized Products', color: '#9C27B0', icon: 'qr_code_2', info: 'Number of products with serial tracking', action: { url: 'inventoryitems/stock/serialized' } }, // Changed: Added icon\r\n    ],\r\n    loadAction: { url: 'inventoryitems/stock/summary' }\r\n  }\r\n\r\n  // Changed: Table config for inventory stock grouped by product\r\n  inventoryStockTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    holdHeaderButtonSpace: true,\r\n    flatButtons: true,\r\n    minColumns: ['productName', 'totalQuantity'],\r\n    columns: [\r\n      { name: 'productName', type: 'button', alias: 'Product', detailsConfig: this.inventoryStockDetailsConfig },\r\n      { name: 'totalQuantity', type: 'number', alias: 'Total Stock', icon: { name: 'warning', color: 'orange', condition: (x: any) => x.isLowInventory } }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true, detailsConfig: this.inventoryStockDetailsConfig, },\r\n\r\n    ],\r\n    loadAction: { url: 'inventoryitems/stock/all' },\r\n    formConfig: this.productFormConfig,\r\n    tileConfig: this.inventoryStockTileConfig\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Button, RoleAccess, TableConfig } from '../classes/Classes';\r\nimport { AuthService } from './auth.service';\r\nimport { Core } from '../classes/TinCore';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ButtonService {\r\n\r\n  constructor(private authService: AuthService) { }\r\n\r\n  getButton(buttons: Button[], name: string): Button | null {\r\n    return buttons?.find(x => x.name === name) || null;\r\n  }\r\n\r\n  getConfirmMessage(button: Button, row: any): string {\r\n    if (!button?.confirm) {\r\n      return '';\r\n    }\r\n  \r\n    // Return dynamic message if func is provided\r\n    if (button.confirm.func) {\r\n      return button.confirm.func(row);\r\n    }\r\n  \r\n    // Return static message\r\n    return button.confirm.message;\r\n  }\r\n\r\n  getButtonProperties(button: Button, row: any, config: TableConfig): {\r\n    color: string,\r\n    icon: string,\r\n    disabled: boolean,\r\n    visible: boolean,\r\n    tip: string\r\n  } {\r\n    return {\r\n      color: this.getButtonColor(button, row),\r\n      icon: this.getIcon(button, config),\r\n      disabled: this.testDisabled(button, row),\r\n      visible: this.testVisible(button, row, config),\r\n      tip: button.tip || button.name\r\n    };\r\n  }\r\n\r\n  getButtonColor(button: Button, row: any): string {\r\n    if (this.testDisabled(button, row)) return 'lightgray';\r\n\r\n    if (button?.color) return button.color;\r\n    if (button.icon?.color) return button.icon.color;\r\n\r\n    const colorMap = {\r\n      'delete': '#F44336',\r\n      'create': 'green'\r\n    };\r\n\r\n    return colorMap[button.name] || '#4050B5';\r\n  }\r\n\r\n\r\n\r\n  // isButtonVisible(button: Button, row: any, isLoadComplete: boolean): boolean {\r\n  //   if (!isLoadComplete) return false;\r\n  //   return this.testVisible(button,row);\r\n  // }\r\n\r\n  getTitleAction(mode: string, buttons: Button[]): string {\r\n    const modeMap = {\r\n      'view': 'View',\r\n      'edit': buttons?.find(b => b.name === 'edit')?.display || 'Edit',\r\n      'create': buttons?.find(b => b.name === 'create')?.display || 'Create'\r\n    };\r\n    return modeMap[mode] || '';\r\n  }\r\n\r\n  isTabVisible(tableConfig: TableConfig, details: any): boolean {\r\n    return tableConfig.hideTabCondition ? !tableConfig.hideTabCondition(details) : true;\r\n  }\r\n\r\n  getIcon(button: Button, config: TableConfig | null): string {\r\n    if (button.icon) {\r\n      return button.icon.name;\r\n    }\r\n    return config ? this.getDefaultIcon(button.name, config.flatButtons) : this.getDefaultIcon(button.name, true);\r\n  }\r\n\r\n  testDisabled(button: Button, row: any, config?: TableConfig): boolean {\r\n\r\n    // Check standard locking/approval rules\r\n    if ((button.name === 'edit' || button.name === 'delete') && row?.locked) return true;\r\n    if (row?.pendingApproval && !button.ignorePendingApproval && button.name != 'view') return true;\r\n\r\n    // Check form access if detailsConfig exists\r\n    if (button.detailsConfig?.formConfig) {\r\n      const access = Core.getFormAccess(button.detailsConfig.formConfig, this.authService.currentRoleSource.value);\r\n      if (!this.hasRequiredAccess(access, button.name)) return true;\r\n    }\r\n\r\n    // Check form access levels from table config\r\n    if (['create', 'edit', 'view', 'delete'].includes(button.name) && config?.formConfig) {\r\n      const access = Core.getFormAccess(config.formConfig, this.authService.currentRoleSource.value);\r\n      if (!this.hasRequiredAccess(access, button.name)) return true;\r\n    }\r\n\r\n    // Check button-specific disabled rules\r\n    return button.disabled ? button.disabled(row) : false;\r\n  }\r\n\r\n  getVisibleButtons(buttons: Button[], row: any, tableConfig?: TableConfig): Button[] {\r\n    return buttons.filter(button => this.testVisible(button, row, tableConfig));\r\n  }\r\n\r\n  testVisible(button: Button, row: any, tableConfig?: TableConfig): boolean {\r\n\r\n\r\n    if (button.visible && !button.visible(row)) {\r\n      return false;\r\n    }\r\n\r\n    const currentRole = this.authService.currentRoleSource.value;\r\n\r\n    // Check if button has detailsConfig with form restrictions\r\n    if (button.detailsConfig?.formConfig?.security) {\r\n      const access = Core.getFormAccess(button.detailsConfig.formConfig, currentRole);\r\n      if (!this.hasRequiredAccess(access, button.name)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    // For create/edit/view buttons, check table's formConfig\r\n    if (['create', 'edit', 'view', 'delete'].includes(button.name) && tableConfig?.formConfig?.security) {\r\n      const access = Core.getFormAccess(tableConfig.formConfig, currentRole);\r\n      if (!this.hasRequiredAccess(access, button.name)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private hasRequiredAccess(access: RoleAccess, buttonName: string): boolean {\r\n    switch (buttonName) {\r\n      case 'view':\r\n        return access >= RoleAccess.View;\r\n      case 'edit':\r\n        return access >= RoleAccess.Edit;\r\n      case 'create':\r\n        return access >= RoleAccess.Create;\r\n      case 'delete':\r\n        return access >= RoleAccess.Full;\r\n      default:\r\n        return true; // Custom buttons don't require specific access\r\n    }\r\n  }\r\n\r\n  private getDefaultColor(buttonName: string): string {\r\n    switch (buttonName) {\r\n      case 'delete': return '#F44336';\r\n      case 'create': return 'green';\r\n      default: return '#4050B5';\r\n    }\r\n  }\r\n\r\n  private getDefaultIcon(buttonName: string, flatButtons: boolean): string {\r\n    switch (buttonName) {\r\n      case 'view':\r\n        return flatButtons ? 'open_in_new' : 'pageview';\r\n      case 'edit': return 'edit';\r\n      case 'delete': return 'delete';\r\n      case 'create': return 'add';\r\n      default: return 'more_horiz';\r\n    }\r\n  }\r\n\r\n  getCreateButton(buttons: Button[]): Button | undefined {\r\n    return buttons?.find(button => button?.name === 'create');\r\n  }\r\n\r\n  isFormButton(button: Button): boolean {\r\n\r\n    if (button?.action?.url?.includes('/form') || button?.action?.isFormData) {\r\n      button.action.isFormData = true;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n\r\n  }\r\n\r\n\r\n\r\n}\r\n","// table-config.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { Button, Column, TableConfig } from '../classes/Classes';\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { Core } from '../classes/TinCore';\r\nimport { AuthService } from './auth.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TableConfigService {\r\n\r\n  constructor(private dataService: DataServiceLib, private authService: AuthService) { }\r\n\r\n  setColumns(config: TableConfig, smallScreen: boolean): string[] {\r\n\r\n    if (!config?.columns) {\r\n      return [];\r\n    }\r\n\r\n    let visibleColumns = this.getVisibleColumns(config);\r\n\r\n\r\n    let columnNames;\r\n\r\n    if (smallScreen && config.minColumns) {\r\n      columnNames = config.minColumns.filter(col => visibleColumns.some(x => x.name === col) );\r\n    }\r\n    else{\r\n      columnNames = visibleColumns.map(({ name }) => name);\r\n    }\r\n\r\n    // Add action column only if there are visible buttons\r\n    const hasVisibleButtons = this.getDisplayedButtons(config.buttons, smallScreen, config)?.length > 0;\r\n\r\n    if (hasVisibleButtons) {\r\n      columnNames.push('action');\r\n    }\r\n\r\n    return columnNames;\r\n  }\r\n\r\n  getVisibleColumns(config: TableConfig): Column[] {\r\n    return config.columns.filter(column =>\r\n      !column.hiddenCondition || !column.hiddenCondition(config.parentData)\r\n    );\r\n  }\r\n\r\n  getActionsWidth(buttons: Button[], smallScreen: boolean, config: TableConfig): string {\r\n\r\n    // Changed: Width based on maxButtonsCount (More button now included in that count when overflow exists)\r\n    const filteredButtons = buttons?.filter(x => x.name != 'create' && !x.inHeader) ?? [];\r\n    const maxButtons = config?.maxButtonsCount ?? 3;\r\n\r\n    let size: number;\r\n\r\n    if (smallScreen) {\r\n      size = config?.minButtons?.length ?? 1;\r\n    }\r\n    else {\r\n      // Changed: Use min of actual buttons or maxButtonsCount\r\n      size = Math.min(filteredButtons.length, maxButtons);\r\n    }\r\n\r\n    // Changed: 40px per button (32px icon + 8px spacing) + 20px padding\r\n    return `${size * 40 + 20}px`;\r\n  }\r\n\r\n  getDisplayedButtons(buttons: Button[], isSmallScreen: boolean, config: TableConfig): Button[] {\r\n\r\n    let hasCRUD = buttons?.some(x => x.name === 'create' || x.name === 'edit' || x.name === 'delete');\r\n\r\n    if (buttons && hasCRUD && !buttons?.includes(this.dataService.approveButton)) {\r\n      // Add approval buttons to beginning of array\r\n      buttons?.unshift(this.dataService.cancelButton);\r\n      buttons?.unshift(this.dataService.declineButton);\r\n      buttons?.unshift(this.dataService.approveButton);\r\n      buttons?.unshift(this.dataService.viewApprovalButton);\r\n    }\r\n\r\n    return buttons?.filter(x => x.name !== 'create' && !x.inHeader);\r\n\r\n  }\r\n\r\n  hasTableAccess(config: TableConfig): boolean {\r\n    if (!config?.formConfig) {\r\n      return true;\r\n    }\r\n    return Core.hasFormAccess(config.formConfig, this.authService.currentRoleSource.value);\r\n  }\r\n\r\n  getVisibleTableConfigs(tableConfigs: TableConfig[]): TableConfig[] {\r\n    if (!tableConfigs) return [];\r\n    return tableConfigs.filter(config => this.hasTableAccess(config));\r\n  }\r\n}\r\n","// Service to centralize tab management logic across spa-tabs and spa-tabs-internal components\r\nimport { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { TableConfig, ApiResponse } from '../classes/Classes';\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { ButtonService } from './button.service';\r\nimport { TableConfigService } from './table-config.service';\r\n\r\n// Changed: Interface to track original index alongside visible tab config\r\nexport interface VisibleTab {\r\n  config: TableConfig;\r\n  originalIndex: number;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TabService {\r\n\r\n  constructor(\r\n    private dataService: DataServiceLib,\r\n    private buttonService: ButtonService,\r\n    private tableConfigService: TableConfigService\r\n  ) { }\r\n\r\n  // Replace {propertyName} placeholders in URL with values from parentData\r\n  private transformCountUrl(url: string, parentData?: any): string {\r\n    if (!parentData || !url || !url.includes('{')) return url; // Changed: Only process if URL contains placeholders\r\n    return url.replace(/\\{(\\w+)\\}/g, (match, propName) => {\r\n      const value = parentData[propName];\r\n      return value !== undefined && value !== null ? String(value) : match;\r\n    });\r\n  }\r\n\r\n  // Initialize tab counts and reload subjects for all tabs\r\n  initializeTabs(tableConfigs: TableConfig[], parentData?: any): {\r\n    tabCounts: { [index: number]: number },\r\n    tableReloads: { [index: number]: Subject<boolean> }\r\n  } {\r\n    const tabCounts: { [index: number]: number } = {};\r\n    const tableReloads: { [index: number]: Subject<boolean> } = {};\r\n\r\n    tableConfigs.forEach((config, index) => {\r\n      if (config.countAction) {\r\n        this.loadTabCount(index, config.countAction, tabCounts, parentData); // Changed: Pass parentData for URL placeholder replacement\r\n      }\r\n      tableReloads[index] = new Subject<boolean>();\r\n    });\r\n\r\n    return { tabCounts, tableReloads };\r\n  }\r\n\r\n  // Load count for a specific tab\r\n  loadTabCount(\r\n    tabIndex: number,\r\n    countAction: any,\r\n    tabCounts: { [index: number]: number },\r\n    parentData?: any // Changed: Accept parentData for URL placeholder replacement\r\n  ): void {\r\n    // Changed: Transform URL by replacing {propertyName} placeholders with parentData values\r\n    const transformedUrl = this.transformCountUrl(countAction.url, parentData);\r\n    const transformedAction = { ...countAction, url: transformedUrl };\r\n    this.dataService.CallApi(transformedAction).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        tabCounts[tabIndex] = apiResponse.data;\r\n      }\r\n    });\r\n  }\r\n\r\n  // Refresh count for a specific tab\r\n  refreshTabCount(\r\n    index: number,\r\n    tableConfigs: TableConfig[],\r\n    tabCounts: { [index: number]: number },\r\n    parentData?: any // Changed: Accept parentData for URL placeholder replacement\r\n  ): void {\r\n    const config = tableConfigs[index];\r\n    if (config?.countAction) {\r\n      this.loadTabCount(index, config.countAction, tabCounts, parentData); // Changed: Pass parentData\r\n    }\r\n  }\r\n\r\n  // Handle tab change - mark tab as loaded for lazy loading\r\n  handleTabChange(\r\n    selectedIndex: number,\r\n    activeTabsLoaded: { [index: number]: boolean }\r\n  ): void {\r\n    if (!activeTabsLoaded[selectedIndex]) {\r\n      activeTabsLoaded[selectedIndex] = true;\r\n    }\r\n  }\r\n\r\n  // Determine if tab data should be loaded (lazy loading logic)\r\n  shouldLoadTabData(index: number, activeTabsLoaded: { [index: number]: boolean }): boolean {\r\n    return activeTabsLoaded[index] || index === 0; // Always load first tab immediately\r\n  }\r\n\r\n  // Check if badge should be shown for a tab\r\n  shouldShowBadge(index: number, tableConfigs: TableConfig[], tabCounts: { [index: number]: number }): boolean {\r\n    return tableConfigs[index]?.countAction !== undefined && tabCounts[index] !== undefined;\r\n  }\r\n\r\n  // Get count for a specific tab\r\n  getTabCount(index: number, tabCounts: { [index: number]: number }): number | undefined {\r\n    return tabCounts[index];\r\n  }\r\n\r\n  // Get title for a tab\r\n  getTabTitle(config: TableConfig): string {\r\n    return config.tabTitle || 'Untitled';\r\n  }\r\n\r\n  // Check if tab is visible based on access control and visibility conditions\r\n  isTabVisible(tblConfig: TableConfig, parentData?: any): boolean {\r\n    // Check table access permissions\r\n    if (!this.tableConfigService.hasTableAccess(tblConfig)) {\r\n      return false;\r\n    }\r\n\r\n    // Check button-based visibility conditions\r\n    return this.buttonService.isTabVisible(tblConfig, parentData);\r\n  }\r\n\r\n  // Changed: Returns visible tabs with original indices to fix count badge mismatch when middle tabs are hidden\r\n  getVisibleTabs(tableConfigs: TableConfig[], parentData?: any): VisibleTab[] {\r\n    if (!tableConfigs) return [];\r\n\r\n    return tableConfigs\r\n      .map((config, index) => ({ config, originalIndex: index }))\r\n      .filter(tab => this.isTabVisible(tab.config, parentData));\r\n  }\r\n}\r\n","// Subscription feature-checking service for plan-based feature gating\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { HttpService } from './http.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class SubscriptionService {\r\n\r\n  // Enabled feature keys for the current tenant's plan\r\n  private enabledFeaturesSource = new BehaviorSubject<string[]>([]);\r\n  public enabledFeatures$ = this.enabledFeaturesSource.asObservable();\r\n\r\n  // Whether features have been loaded from the server\r\n  private featuresLoaded = false;\r\n\r\n  constructor(private httpService: HttpService) { }\r\n\r\n  // Fetch enabled features from backend — call after login\r\n  loadFeatures() {\r\n    this.httpService.Get('subscriptions/features').subscribe({\r\n      next: (response: any) => {\r\n        if (response && Array.isArray(response)) {\r\n          this.enabledFeaturesSource.next(response);\r\n          this.featuresLoaded = true;\r\n        }\r\n      },\r\n      error: () => {\r\n        // Silently fail — features remain empty, all gating checks return false\r\n        this.enabledFeaturesSource.next([]);\r\n        this.featuresLoaded = true;\r\n      }\r\n    });\r\n  }\r\n\r\n  // Check if a specific feature key is enabled for the current tenant's plan\r\n  isFeatureEnabled(featureKey: string): boolean {\r\n    if (!featureKey) return true; // No feature restriction\r\n    return this.enabledFeaturesSource.value.includes(featureKey);\r\n  }\r\n\r\n  // Check if a module (by capName mapping) is enabled — used by nav-menu filtering\r\n  isModuleEnabled(featureKey: string): boolean {\r\n    if (!featureKey) return true; // No feature restriction on this module\r\n    return this.enabledFeaturesSource.value.includes(featureKey);\r\n  }\r\n\r\n  // Clear features on logout\r\n  clearFeatures() {\r\n    this.enabledFeaturesSource.next([]);\r\n    this.featuresLoaded = false;\r\n  }\r\n\r\n  // Whether features have been loaded (useful for guards to wait)\r\n  get loaded(): boolean {\r\n    return this.featuresLoaded;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SwUpdate, VersionReadyEvent } from '@angular/service-worker';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n// PWA update detection service — prompts user to reload when a new version is deployed\r\n@Injectable({ providedIn: 'root' })\r\nexport class UpdateService {\r\n\r\n  constructor(private swUpdate: SwUpdate, private snackBar: MatSnackBar) {\r\n    if (!this.swUpdate.isEnabled) return; // Guard: service worker may not be available in dev\r\n    this.listenForUpdates();\r\n  }\r\n\r\n  private listenForUpdates() {\r\n    this.swUpdate.versionUpdates\r\n      .pipe(filter((e): e is VersionReadyEvent => e.type === 'VERSION_READY'))\r\n      .subscribe(() => {\r\n        const snack = this.snackBar.open('A new version is available.', 'Reload', { duration: 10000 });\r\n        snack.onAction().subscribe(() => window.location.reload()); // Reload to activate new version\r\n      });\r\n  }\r\n\r\n  // Manual update check — call from AppComponent.ngOnInit()\r\n  checkForUpdate() {\r\n    if (this.swUpdate.isEnabled) this.swUpdate.checkForUpdate();\r\n  }\r\n}\r\n","// PushNotificationService: Requests push permission, creates browser subscription, saves to backend\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpService } from './http.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PushNotificationService {\r\n\r\n  private vapidPublicKey = '';\r\n\r\n  constructor(private httpService: HttpService) {}\r\n\r\n  // Called from AppComponent.ngOnInit() after user is authenticated\r\n  init() {\r\n    if (!('serviceWorker' in navigator) || !('PushManager' in window)) return;\r\n    this.fetchVapidKeyAndSubscribe();\r\n  }\r\n\r\n  private fetchVapidKeyAndSubscribe() {\r\n    this.httpService.Get('pushsubscription/vapid-key').subscribe((res: any) => {\r\n      if (!res?.success || !res?.data) return;\r\n      this.vapidPublicKey = res.data;\r\n      this.requestPermissionAndSubscribe();\r\n    });\r\n  }\r\n\r\n  private requestPermissionAndSubscribe() {\r\n    Notification.requestPermission().then(permission => {\r\n      if (permission !== 'granted') return;\r\n      this.subscribe();\r\n    });\r\n  }\r\n\r\n  private subscribe() {\r\n    navigator.serviceWorker.ready.then(registration => {\r\n      registration.pushManager.subscribe({\r\n        userVisibleOnly: true,\r\n        applicationServerKey: this.urlBase64ToUint8Array(this.vapidPublicKey).buffer as ArrayBuffer\r\n      }).then(sub => this.saveSubscription(sub))\r\n        .catch(err => console.error('Push subscription failed:', err));\r\n    });\r\n  }\r\n\r\n  private saveSubscription(subscription: PushSubscription) {\r\n    const sub = subscription.toJSON();\r\n    this.httpService.Post('pushsubscription/subscribe', {\r\n      endpoint: sub.endpoint,\r\n      p256dh: sub.keys!['p256dh'],\r\n      auth: sub.keys!['auth'],\r\n      deviceName: navigator.userAgent.substring(0, 200)\r\n    }).subscribe();\r\n  }\r\n\r\n  // Convert VAPID public key from URL-safe base64 to Uint8Array\r\n  private urlBase64ToUint8Array(base64String: string): Uint8Array {\r\n    const padding = '='.repeat((4 - base64String.length % 4) % 4);\r\n    const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\r\n    const raw = window.atob(base64);\r\n    return Uint8Array.from([...raw].map(c => c.charCodeAt(0)));\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { ApiResponse } from '../classes/Classes';\r\nimport { SignalRService } from './signalr.service'; // Changed: Added for real-time notification count\r\nimport { MessageService } from './message.service'; // Changed: Added for in-app push toast display\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NotificationsService {\r\n\r\n  private notificationCount = new BehaviorSubject<number>(0);\r\n  notificationCount$ = this.notificationCount.asObservable();\r\n\r\n  constructor(private dataService: DataServiceLib, private signalRService: SignalRService, private messageService: MessageService) {\r\n    // Changed: Subscribe to real-time SignalR count updates\r\n    this.signalRService.notificationCount$.subscribe(count => {\r\n      this.notificationCount.next(count);\r\n    });\r\n\r\n    // Changed: Wire reconnection callback to refresh count via HTTP\r\n    this.signalRService.onReconnected = () => this.loadNotifications();\r\n\r\n    // Changed: Listen for push messages forwarded from service worker\r\n    this.listenForPushMessages();\r\n  }\r\n\r\n  // Changed: Intercept push events when the app is in the foreground\r\n  private listenForPushMessages() {\r\n    if (!('serviceWorker' in navigator)) return;\r\n    navigator.serviceWorker.addEventListener('message', (event) => {\r\n      if (event.data && event.data.type === 'PUSH_RECEIVED') {\r\n        this.messageService.toast(event.data.body || 'New notification');\r\n        this.refreshCount();\r\n      }\r\n    });\r\n  }\r\n\r\n  // Changed: Uncommented HTTP poll for initial count on login\r\n  loadNotifications() {\r\n    this.dataService.CallApi({ url: 'notifications/count/x' }).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.notificationCount.next(apiResponse.data);\r\n      }\r\n    });\r\n  }\r\n\r\n  refreshCount() {\r\n    this.loadNotifications();\r\n  }\r\n}\r\n","// Frontend service for Agent chat — state management, API calls, and SignalR subscriptions (renamed from AssistantService)\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { DataServiceLib } from './datalib.service';\nimport { SignalRService } from './signalr.service';\n\n// Message interface for UI rendering (renamed from AssistantMessage)\nexport interface AgentMessage {\n  conversationId?: number;\n  role: 'user' | 'assistant';\n  content: string;\n  intent?: string;\n  createdDate: Date;\n}\n\n// Conversation summary for list view\nexport interface ConversationSummary {\n  conversationID: number;\n  title: string;\n  appName: string;\n  createdDate: Date;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AgentService { // Changed: Renamed from AssistantService\n\n  private messages = new BehaviorSubject<AgentMessage[]>([]);\n  private conversations = new BehaviorSubject<ConversationSummary[]>([]);\n  private typing = new BehaviorSubject<boolean>(false);\n  private isOpen = new BehaviorSubject<boolean>(false);\n  private currentConversationId = new BehaviorSubject<number | null>(null);\n  private greeting = new BehaviorSubject<string>('');\n  private suggestedQuestions = new BehaviorSubject<string[]>([]);\n\n  messages$ = this.messages.asObservable();\n  conversations$ = this.conversations.asObservable();\n  typing$ = this.typing.asObservable();\n  isOpen$ = this.isOpen.asObservable();\n  currentConversationId$ = this.currentConversationId.asObservable();\n  greeting$ = this.greeting.asObservable();\n  suggestedQuestions$ = this.suggestedQuestions.asObservable();\n\n  constructor(\n    private dataService: DataServiceLib,\n    private signalRService: SignalRService\n  ) {\n    this.initListeners();\n  }\n\n  // App name derived from the existing appConfig\n  get appName(): string {\n    return this.dataService.appConfig.appName || 'App';\n  }\n\n  // Agent name derived from appConfig (changed from assistantName)\n  get agentName(): string {\n    return `${this.appName} Agent`;\n  }\n\n  // Subscribe to SignalR events for real-time message delivery\n  private initListeners() {\n    this.signalRService.agentMessage$.subscribe(msg => { // Changed: was assistantMessage$\n      if (msg) {\n        const current = this.messages.value;\n        this.messages.next([...current, {\n          conversationId: msg.conversationId,\n          role: msg.role,\n          content: msg.content,\n          intent: msg.intent,\n          createdDate: new Date(msg.createdDate)\n        }]);\n      }\n    });\n\n    this.signalRService.agentTyping$.subscribe(typing => { // Changed: was assistantTyping$\n      this.typing.next(typing);\n    });\n  }\n\n  // Load agent config (greeting + suggested questions) from backend\n  loadConfig() {\n    this.dataService.CallApi({ url: `agent/config/${this.appName}` }).subscribe(res => { // Changed: was assistant/config\n      if (res.success && res.data) {\n        this.greeting.next(res.data.greeting || '');\n        this.suggestedQuestions.next(res.data.suggestedQuestions || []);\n      }\n    });\n  }\n\n  // Load user's conversation list\n  loadConversations() {\n    this.dataService.CallApi({ url: 'agent/conversations' }).subscribe(res => { // Changed: was assistant/conversations\n      if (res.success) {\n        this.conversations.next(res.data || []);\n      }\n    });\n  }\n\n  // Load messages for a specific conversation\n  loadMessages(conversationId: number) {\n    this.currentConversationId.next(conversationId);\n    this.dataService.CallApi({ url: `agent/conversations/${conversationId}/messages` }).subscribe(res => { // Changed: was assistant/conversations\n      if (res.success) {\n        this.messages.next((res.data || []).map((m: any) => ({\n          conversationId: m.conversationID,\n          role: m.role,\n          content: m.content,\n          intent: m.intent,\n          createdDate: new Date(m.createdDate)\n        })));\n      }\n    });\n  }\n\n  // Send a message — optimistically add user message, then POST to backend\n  sendMessage(text: string) {\n    if (!text.trim()) return;\n\n    // Optimistic: add user message immediately\n    const current = this.messages.value;\n    this.messages.next([...current, { role: 'user', content: text, createdDate: new Date() }]);\n\n    // POST to backend — response delivered via SignalR push\n    this.dataService.CallApi(\n      { url: 'agent/message', method: 'post' }, // Changed: was assistant/message\n      { text, appName: this.appName }\n    ).subscribe({\n      next: () => this.typing.next(false),\n      error: () => this.typing.next(false)\n    });\n  }\n\n  // Start a new conversation — only when user explicitly clicks \"New conversation\"\n  newConversation() {\n    this.messages.next([]);\n    this.currentConversationId.next(null);\n    this.dataService.CallApi(\n      { url: 'agent/conversations', method: 'post' },\n      { appName: this.appName }\n    ).subscribe(res => {\n      if (res.success && res.data) {\n        this.currentConversationId.next(res.data.conversationID);\n      }\n    });\n  }\n\n  // Delete a conversation\n  deleteConversation(id: number) {\n    this.dataService.CallApi({ url: `agent/conversations/${id}`, method: 'post' }).subscribe(res => { // Changed: was assistant/conversations\n      if (res.success) {\n        this.loadConversations();\n        if (this.currentConversationId.value === id) {\n          this.messages.next([]);\n          this.currentConversationId.next(null);\n        }\n      }\n    });\n  }\n\n  // Changed: Load the most recent conversation's messages on first open\n  private hasLoadedInitial = false;\n\n  // Toggle chat window open/closed\n  toggle() {\n    const opening = !this.isOpen.value;\n    this.isOpen.next(opening);\n    if (opening && !this.hasLoadedInitial) {\n      this.hasLoadedInitial = true;\n      this.restoreLastConversation(); // Changed: Load previous chat on first open\n    }\n  }\n  open() {\n    this.isOpen.next(true);\n    if (!this.hasLoadedInitial) {\n      this.hasLoadedInitial = true;\n      this.restoreLastConversation();\n    }\n  }\n  close() { this.isOpen.next(false); }\n\n  // Changed: Fetch conversation list and load the most recent one's messages\n  private restoreLastConversation() {\n    this.dataService.CallApi({ url: 'agent/conversations' }).subscribe(res => {\n      if (res.success && res.data?.length > 0) {\n        this.conversations.next(res.data);\n        const latest = res.data[0]; // Backend returns ordered by CreatedDate desc\n        this.currentConversationId.next(latest.conversationID);\n        this.loadMessages(latest.conversationID);\n      }\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\n// Declare gtag as a global function\ndeclare let gtag: Function;\n\n@Injectable({ providedIn: 'root' })\nexport class AnalyticsService {\n\n  private initialized = false;\n\n  constructor(private router: Router) {}\n\n  // Changed: Accept production flag and measurement ID — only loads GA in production\n  init(production: boolean, measurementId: string) {\n    if (!production || !measurementId || this.initialized) return; // Changed: Skip GA on non-production environments\n    this.initialized = true;\n    this.loadGtagScript(measurementId); // Changed: Dynamically inject gtag script\n    this.router.events.pipe(\n      filter(event => event instanceof NavigationEnd)\n    ).subscribe((event: NavigationEnd) => {\n      const url = event.urlAfterRedirects || event.url;\n      // Strip hash prefix so GA sees clean paths (e.g. /home/invoices instead of #/home/invoices)\n      const pagePath = url.replace(/^#/, '') || '/';\n      this.sendPageView(pagePath);\n    });\n  }\n\n  // Changed: Dynamically load the gtag.js script and configure the measurement ID\n  private loadGtagScript(measurementId: string) {\n    const script = document.createElement('script');\n    script.async = true;\n    script.src = `https://www.googletagmanager.com/gtag/js?id=${measurementId}`;\n    document.head.appendChild(script);\n\n    (window as any).dataLayer = (window as any).dataLayer || [];\n    (window as any).gtag = function() { (window as any).dataLayer.push(arguments); };\n    gtag('js', new Date());\n    gtag('config', measurementId, { send_page_view: false }); // Changed: Disable auto page_view — route tracking sends them\n  }\n\n  // Send page_view event to GA4\n  private sendPageView(pagePath: string) {\n    if (typeof gtag === 'function') {\n      gtag('event', 'page_view', {\n        page_path: pagePath,\n        page_location: window.location.origin + pagePath\n      });\n    }\n  }\n}\n","// Functional guard for Angular 15+ (replaces deprecated class-based CanActivate)\nimport { inject } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\nimport { SignalRService } from '../services/signalr.service';\nimport { HttpService } from '../services/http.service';\nimport { StorageService } from '../services/storage.service';\nimport { Constants } from '../classes/Classes';\n\n// Changed: Returns Promise<boolean> to properly await token refresh before allowing navigation\nexport const authGuard: CanActivateFn = async (route, state) => {\n  const authService = inject(AuthService);\n  const signalRService = inject(SignalRService);\n  const httpService = inject(HttpService);\n  const storageService = inject(StorageService);\n\n  const isAuthenticated = await authService.checkAuthentication();\n\n  // Changed: Ensure consolidated SignalR hub connection is started on every authenticated route access\n  if (isAuthenticated) {\n    const appHubUrl = httpService.apiUrl.replace(/\\/api\\/$/, '/hubs/app'); // Changed: Single hub URL\n    const token = await storageService.get(Constants.AUTH_TOKEN);\n    if (token) signalRService.startConnection(appHubUrl, token); // Changed: Uses single startConnection\n  }\n\n  return isAuthenticated;\n};\n","// Functional guard for plan-based feature gating — blocks navigation to restricted routes\r\nimport { inject } from '@angular/core';\r\nimport { CanActivateFn, Router } from '@angular/router';\r\nimport { SubscriptionService } from '../services/subscription.service';\r\n\r\n// Factory function that returns a guard for a specific feature key\r\nexport const featureGuard = (featureKey: string): CanActivateFn => {\r\n  return (route, state) => {\r\n    const subscriptionService = inject(SubscriptionService);\r\n    const router = inject(Router);\r\n\r\n    if (subscriptionService.isFeatureEnabled(featureKey)) {\r\n      return true;\r\n    }\r\n\r\n    // Feature not available — redirect to home\r\n    router.navigate(['home']);\r\n    return false;\r\n  };\r\n};\r\n","// Structural directive for plan-based feature gating in templates\r\n// Usage: *spaFeature=\"'sales.quotes'\" — hides element if feature is disabled\r\nimport { Directive, Input, TemplateRef, ViewContainerRef, OnInit, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { SubscriptionService } from '../services/subscription.service';\r\n\r\n@Directive({\r\n  selector: '[spaFeature]',\r\n  standalone: false\r\n})\r\nexport class FeatureDirective implements OnInit, OnDestroy {\r\n\r\n  @Input() spaFeature: string = '';\r\n\r\n  private hasView = false;\r\n  private subscription: Subscription | null = null;\r\n\r\n  constructor(\r\n    private templateRef: TemplateRef<any>,\r\n    private viewContainer: ViewContainerRef,\r\n    private subscriptionService: SubscriptionService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    // Subscribe to feature changes so UI updates reactively when features load\r\n    this.subscription = this.subscriptionService.enabledFeatures$.subscribe(() => {\r\n      this.updateView();\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  private updateView() {\r\n    const enabled = this.subscriptionService.isFeatureEnabled(this.spaFeature);\r\n\r\n    if (enabled && !this.hasView) {\r\n      this.viewContainer.createEmbeddedView(this.templateRef);\r\n      this.hasView = true;\r\n    } else if (!enabled && this.hasView) {\r\n      this.viewContainer.clear();\r\n      this.hasView = false;\r\n    }\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'spa-tin-spa',\r\n    template: `\r\n    <p>\r\n      tin-spa works!\r\n    </p>\r\n  `,\r\n    styles: [],\r\n    standalone: false\r\n})\r\nexport class TinSpaComponent {\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatNativeDateModule, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\n\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n\r\n\r\n  ],\r\n  exports: [\r\n    CommonModule,FormsModule, ReactiveFormsModule,\r\n    MatMenuModule,    MatSliderModule,    MatTableModule,    MatPaginatorModule,\r\n    MatCheckboxModule,    MatBadgeModule,    MatButtonModule,    MatIconModule,    MatDialogModule,    MatSnackBarModule,\r\n    MatTabsModule,    MatFormFieldModule,    MatInputModule,    MatCardModule,    MatChipsModule,    MatSelectModule,\r\n    MatNativeDateModule,    MatProgressSpinnerModule,    MatListModule,    MatAutocompleteModule,    MatTooltipModule,    MatSortModule,\r\n    MatDatepickerModule,    MatStepperModule,    MatRadioModule, MatProgressBarModule,\r\n\r\n    MatSidenavModule,\r\n    MatToolbarModule,\r\n    RouterModule,\r\n    MatExpansionModule,\r\n  ],\r\n  providers:[\r\n    { provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: { disableClose: true, hasBackdrop: true }  },\r\n    { provide: MAT_DATE_LOCALE, useValue: \"en-GB\" },\r\n  ]\r\n})\r\nexport class SpaMatModule { }\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n@Component({\r\n    selector: 'spa-suffix',\r\n    templateUrl: './suffix.component.html',\r\n    styleUrls: ['./suffix.component.css'],\r\n    standalone: false\r\n})\r\nexport class SuffixComponent implements OnInit {\r\n\r\n  constructor(private messageService: MessageService) { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  @Input() label: string;\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent: boolean = false;\r\n\r\n  @Input() isHovered: boolean = false;\r\n  @Input() clearContent: boolean = false;\r\n  @Input() value;\r\n\r\n  @Output() infoClick = new EventEmitter<void>();\r\n  @Output() copyClick = new EventEmitter<string>();\r\n  @Output() clearClick = new EventEmitter<void>();\r\n  @Output() valueChange = new EventEmitter();\r\n\r\n  onInfoClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    if (this.infoMessage) {\r\n      this.messageService.info(this.infoMessage);\r\n    }\r\n    this.infoClick.emit();\r\n  }\r\n\r\n  onCopyClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    if (this.value) {\r\n      navigator.clipboard.writeText(this.value).then(() => {\r\n        this.messageService.toast('Copied');\r\n      });\r\n    }\r\n    this.copyClick.emit(this.value);\r\n  }\r\n\r\n  onClearClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.value = '';\r\n    this.valueChange.emit(this.value);\r\n    this.clearClick.emit();\r\n  }\r\n}\r\n","<label *ngIf=\"label\">&nbsp; {{label}}</label>\r\n<button mat-icon-button *ngIf=\"copyContent && isHovered\" (click)=\"onCopyClick($event)\" matTooltip=\"Copy Content\" matTooltipPosition=\"above\" style=\"opacity: 1;\">\r\n  <mat-icon class=\"tinyIcon\">content_copy</mat-icon>\r\n</button>\r\n<button mat-icon-button *ngIf=\"clearContent && isHovered\" (click)=\"onClearClick($event)\" matTooltip=\"Clear Content\" matTooltipPosition=\"above\" style=\"opacity: 1;\">\r\n  <mat-icon class=\"tinyIcon\">close</mat-icon>\r\n</button>\r\n<button mat-icon-button *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" [matTooltip]=\"infoMessage\" matTooltipPosition=\"above\" style=\"opacity: 1;margin-right: 2px;\">\r\n  <mat-icon class=\"tinyIcon\" style=\"color: steelblue;\">info</mat-icon>\r\n</button>\r\n","// Simple text input component - Password, textarea, and autocomplete moved to separate components\r\nimport { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'spa-text',\r\n    templateUrl: './text.component.html',\r\n    styleUrls: ['./text.component.css'],\r\n    standalone: false\r\n})\r\nexport class TextComponent implements OnInit, OnChanges {\r\n\r\n  constructor() {  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['value'] && this.control) {\r\n      if (this.control.value !== changes['value'].currentValue) {\r\n        this.control.setValue(changes['value'].currentValue, { emitEvent: false });\r\n      }\r\n    }\r\n    \r\n    if (changes['readonly'] && this.control) {\r\n      this.initControl();\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.placeholder == \"\") {\r\n      this.placeholder = \"Enter \" + this.display;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.initControl();\r\n\r\n    if (this.value) {\r\n      this.control.setValue(this.value, { emitEvent: false });\r\n    }\r\n\r\n    this.control.valueChanges.subscribe(val => {\r\n      this.value = val;\r\n      this.control.markAsDirty();\r\n      this.valueChange.emit(val);\r\n    });\r\n  }\r\n\r\n  @Input() appearance: 'fill' | 'outline' = 'outline';\r\n  @Input() readonly = false;\r\n  @Input() hint = \"\";\r\n  @Input() display = \"\";\r\n  @Input() placeholder = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter();\r\n  @Input() format = \"text\";\r\n  @Input() type = \"\";\r\n\r\n  @Output() leave = new EventEmitter();\r\n  @Output() enterPress = new EventEmitter();\r\n\r\n  @Input() width = \"100%\";\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n\r\n  @Input() required = true;\r\n  @Input() min = 0;\r\n  @Input() max = 9000000000000000;\r\n  @Input() regex?: { pattern: string; message: string };\r\n\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n\r\n  isHovered = false;\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n  }\r\n\r\n  initControl() {\r\n    if (this.readonly) {\r\n      this.control.setValidators(null);\r\n      this.control.updateValueAndValidity();\r\n      return;\r\n    }\r\n    \r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    if (this.min > 0) {\r\n      validators.push(Validators.minLength(this.min));\r\n    }\r\n    \r\n    if (this.max < 9000000000000000) {\r\n      validators.push(Validators.maxLength(this.max));\r\n    }\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    this.control.setValidators(validators);\r\n    this.control.updateValueAndValidity();\r\n  }\r\n\r\n  leaved() {\r\n    this.control.markAsTouched();\r\n    this.leave.emit();\r\n\r\n    if (this.regex && this.value) {\r\n      const regexPattern = new RegExp(this.regex.pattern);\r\n      if (!regexPattern.test(this.value)) {\r\n        this.control.setErrors({ 'pattern': true });\r\n      }\r\n    }\r\n  }\r\n\r\n  clear() {\r\n    this.value = \"\";\r\n    this.control.setValue(\"\", { emitEvent: false });\r\n    this.control.markAsDirty();\r\n    this.control.markAsTouched();\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  enterPressed() {\r\n    this.enterPress.emit();\r\n  }\r\n\r\n  control = new FormControl('', this.getValidators());\r\n\r\n  private getValidators() {\r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    validators.push(Validators.minLength(this.min));\r\n    validators.push(Validators.maxLength(this.max));\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    return validators;\r\n  }\r\n\r\n  validate(control: FormControl): string {\r\n    if ((this.required || this.min > 0) && control.hasError('required')) {\r\n      return `Required`;\r\n    }\r\n\r\n    if (control.hasError('minlength')) {\r\n      return `Minimum length is ${this.min}`;\r\n    }\r\n\r\n    if (control.hasError('maxlength')) {\r\n      return `Maximum length is ${this.max}`;\r\n    }\r\n\r\n    if (control.hasError('pattern')) {\r\n      return this.regex?.message || 'Invalid Input';\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n}\r\n\r\n","<!-- Simple text input - Password, textarea, and autocomplete moved to separate components -->\r\n<mat-form-field [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'fill'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n  <mat-label *ngIf=\"format=='text'\">{{display}}</mat-label>\r\n  <mat-label *ngIf=\"format=='date'\">{{display | date:'dd/MM/yyyy'}}</mat-label>\r\n  <input matInput autocomplete=\"off\" (blur)=\"leaved()\" (keyup.enter)=\"enterPressed()\" [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"/>\r\n  <mat-error *ngIf=\"control.invalid && (control.dirty || control.touched)\">{{validate(control)}}</mat-error>\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n</mat-form-field>\r\n","// Password masking component\r\nimport { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'spa-text-mask',\r\n    templateUrl: './text-mask.component.html',\r\n    styleUrls: ['./text-mask.component.css'],\r\n    standalone: false\r\n})\r\nexport class TextMaskComponent implements OnInit, OnChanges {\r\n\r\n  constructor() {  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['value'] && this.control) {\r\n      if (this.control.value !== changes['value'].currentValue) {\r\n        this.control.setValue(changes['value'].currentValue, { emitEvent: false });\r\n      }\r\n    }\r\n    \r\n    if (changes['readonly'] && this.control) {\r\n      this.initControl();\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.placeholder == \"\") {\r\n      this.placeholder = \"Enter \" + this.display;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.initControl();\r\n\r\n    if (this.value) {\r\n      this.control.setValue(this.value, { emitEvent: false });\r\n    }\r\n\r\n    this.control.valueChanges.subscribe(val => {\r\n      this.value = val;\r\n      this.control.markAsDirty();\r\n      this.valueChange.emit(val);\r\n    });\r\n  }\r\n\r\n  hide = true; // Changed: Controls password visibility\r\n\r\n  @Input() appearance: 'fill' | 'outline' = 'outline';\r\n  @Input() readonly = false;\r\n  @Input() hint = \"\";\r\n  @Input() display = \"\";\r\n  @Input() placeholder = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter();\r\n\r\n  @Output() leave = new EventEmitter();\r\n  @Output() enterPress = new EventEmitter();\r\n\r\n  @Input() width = \"100%\";\r\n\r\n  @Input() required = true;\r\n  @Input() min = 0;\r\n  @Input() max = 9000000000000000;\r\n  @Input() regex?: { pattern: string; message: string };\r\n\r\n  @Input() infoMessage: string;\r\n\r\n  initControl() {\r\n    if (this.readonly) {\r\n      this.control.setValidators(null);\r\n      this.control.updateValueAndValidity();\r\n      return;\r\n    }\r\n    \r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    if (this.min > 0) {\r\n      validators.push(Validators.minLength(this.min));\r\n    }\r\n    \r\n    if (this.max < 9000000000000000) {\r\n      validators.push(Validators.maxLength(this.max));\r\n    }\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    this.control.setValidators(validators);\r\n    this.control.updateValueAndValidity();\r\n  }\r\n\r\n  leaved() {\r\n    this.control.markAsTouched();\r\n    this.leave.emit();\r\n\r\n    if (this.regex && this.value) {\r\n      const regexPattern = new RegExp(this.regex.pattern);\r\n      if (!regexPattern.test(this.value)) {\r\n        this.control.setErrors({ 'pattern': true });\r\n      }\r\n    }\r\n  }\r\n\r\n  enterPressed() {\r\n    this.enterPress.emit();\r\n  }\r\n\r\n  control = new FormControl('', this.getValidators());\r\n\r\n  private getValidators() {\r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    validators.push(Validators.minLength(this.min));\r\n    validators.push(Validators.maxLength(this.max));\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    return validators;\r\n  }\r\n\r\n  validate(control: FormControl): string {\r\n    if ((this.required || this.min > 0) && control.hasError('required')) {\r\n      return `Required`;\r\n    }\r\n\r\n    if (control.hasError('minlength')) {\r\n      return `Minimum length is ${this.min}`;\r\n    }\r\n\r\n    if (control.hasError('maxlength')) {\r\n      return `Maximum length is ${this.max}`;\r\n    }\r\n\r\n    if (control.hasError('pattern')) {\r\n      return this.regex?.message || 'Invalid Input';\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n}\r\n","<!-- Password input with visibility toggle -->\r\n<mat-form-field class=\"spa-password\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px\" [appearance]=\"appearance ?? 'fill'\" subscriptSizing=\"dynamic\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <input matInput [type]=\"hide ? 'password' : 'text'\" (keyup.enter)=\"enterPressed()\" (blur)=\"leaved()\" autocomplete=\"off\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\">\r\n  <mat-error *ngIf=\"control.invalid && (control.dirty || control.touched)\">{{validate(control)}}</mat-error>\r\n  <button mat-icon-button matSuffix (click)=\"hide = !hide\" [attr.aria-label]=\"'Hide password'\" [attr.aria-pressed]=\"hide\">\r\n    <mat-icon style=\"font-size: 12px;\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n  </button>\r\n</mat-form-field>\r\n","// Multi-line textarea component extracted from TextComponent\r\nimport { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'spa-text-area',\r\n    templateUrl: './text-area.component.html',\r\n    styleUrls: ['./text-area.component.css'],\r\n    standalone: false\r\n})\r\nexport class TextAreaComponent implements OnInit, OnChanges {\r\n\r\n  constructor() {  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['value'] && this.control) {\r\n      if (this.control.value !== changes['value'].currentValue) {\r\n        this.control.setValue(changes['value'].currentValue, { emitEvent: false });\r\n      }\r\n    }\r\n    \r\n    if (changes['readonly'] && this.control) {\r\n      this.initControl();\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.placeholder == \"\") {\r\n      this.placeholder = \"Enter \" + this.display;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.initControl();\r\n\r\n    if (this.value) {\r\n      this.control.setValue(this.value, { emitEvent: false });\r\n    }\r\n\r\n    this.control.valueChanges.subscribe(val => {\r\n      this.value = val;\r\n      this.control.markAsDirty();\r\n      this.valueChange.emit(val);\r\n    });\r\n  }\r\n\r\n  @Input() appearance: 'fill' | 'outline' = 'outline';\r\n  @Input() readonly = false;\r\n  @Input() hint = \"\";\r\n  @Input() display = \"\";\r\n  @Input() placeholder = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter();\r\n\r\n  @Output() leave = new EventEmitter();\r\n  @Output() enterPress = new EventEmitter();\r\n\r\n  @Input() rows = 3; // Changed: Default rows for textarea\r\n  @Input() width = \"100%\";\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n\r\n  @Input() required = true;\r\n  @Input() min = 0;\r\n  @Input() max = 9000000000000000;\r\n  @Input() regex?: { pattern: string; message: string };\r\n\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n\r\n  isHovered = false;\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n  }\r\n\r\n  initControl() {\r\n    if (this.readonly) {\r\n      this.control.setValidators(null);\r\n      this.control.updateValueAndValidity();\r\n      return;\r\n    }\r\n    \r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    if (this.min > 0) {\r\n      validators.push(Validators.minLength(this.min));\r\n    }\r\n    \r\n    if (this.max < 9000000000000000) {\r\n      validators.push(Validators.maxLength(this.max));\r\n    }\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    this.control.setValidators(validators);\r\n    this.control.updateValueAndValidity();\r\n  }\r\n\r\n  leaved() {\r\n    this.control.markAsTouched();\r\n    this.leave.emit();\r\n\r\n    if (this.regex && this.value) {\r\n      const regexPattern = new RegExp(this.regex.pattern);\r\n      if (!regexPattern.test(this.value)) {\r\n        this.control.setErrors({ 'pattern': true });\r\n      }\r\n    }\r\n  }\r\n\r\n  clear() {\r\n    this.value = \"\";\r\n    this.control.setValue(\"\", { emitEvent: false });\r\n    this.control.markAsDirty();\r\n    this.control.markAsTouched();\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  enterPressed() {\r\n    this.enterPress.emit();\r\n  }\r\n\r\n  control = new FormControl('', this.getValidators());\r\n\r\n  private getValidators() {\r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    validators.push(Validators.minLength(this.min));\r\n    validators.push(Validators.maxLength(this.max));\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    return validators;\r\n  }\r\n\r\n  validate(control: FormControl): string {\r\n    if ((this.required || this.min > 0) && control.hasError('required')) {\r\n      return `Required`;\r\n    }\r\n\r\n    if (control.hasError('minlength')) {\r\n      return `Minimum length is ${this.min}`;\r\n    }\r\n\r\n    if (control.hasError('maxlength')) {\r\n      return `Maximum length is ${this.max}`;\r\n    }\r\n\r\n    if (control.hasError('pattern')) {\r\n      return this.regex?.message || 'Invalid Input';\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n}\r\n","<!-- Multi-line textarea input -->\r\n<mat-form-field [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" [appearance]=\"appearance ?? 'fill'\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <textarea matInput autocomplete=\"off\" [rows]=\"rows\" (keyup.enter)=\"enterPressed()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"></textarea>\r\n  <mat-error *ngIf=\"control.invalid && (control.dirty || control.touched)\">{{validate(control)}}</mat-error>\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n</mat-form-field>\r\n","// Autocomplete text input component\r\nimport { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges, OnDestroy } from '@angular/core'; // Changed: Added OnDestroy\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs'; // Changed: Added BehaviorSubject, Subscription imports\r\nimport { map, startWith } from 'rxjs/operators';\r\nimport { Core } from '../../classes/TinCore';\r\nimport { Action, ApiResponse, Button, DetailsDialogConfig, Field, TableConfig } from '../../classes/Classes'; // Changed: Added Button, DetailsDialogConfig, Field, TableConfig imports\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { DialogService } from '../../services/dialog.service'; // Changed: Added DialogService import\r\nimport { ButtonService } from '../../services/button.service'; // Changed: Added ButtonService import\r\nimport { MessageService } from '../../services/message.service'; // Changed: Added MessageService import\r\n\r\n@Component({\r\n    selector: 'spa-text-single',\r\n    templateUrl: './text-single.component.html',\r\n    styleUrls: ['./text-single.component.css'],\r\n    standalone: false\r\n})\r\nexport class TextSingleComponent implements OnInit, OnChanges, OnDestroy { // Changed: Added OnDestroy\r\n\r\n  constructor(\r\n    private dataService: DataServiceLib,\r\n    private dialogService: DialogService, // Changed: Added DialogService injection\r\n    private buttonService: ButtonService, // Changed: Added ButtonService injection\r\n    private messageService: MessageService // Changed: Added MessageService injection\r\n  ) {  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['value'] && this.myControl) {\r\n      const newDisplay = this.getDisplayValue(changes['value'].currentValue);\r\n      if (this.myControl.value !== newDisplay) {\r\n        // Changed: Emit event when value is cleared so filteredOptions pipe re-evaluates and shows all options\r\n        const wasCleared = !changes['value'].currentValue;\r\n        this.myControl.setValue(newDisplay, { emitEvent: wasCleared });\r\n      }\r\n    }\r\n\r\n    if (changes['readonly'] && this.myControl) {\r\n      this.initControl();\r\n    }\r\n\r\n    // Changed: React to options changes for master field functionality\r\n    if (changes['options'] && this.options?.length > 0) {\r\n      this.initFilter();\r\n      // Changed: Clear current value if it's no longer valid in new options\r\n      if (this.value && !this.getDisplayValue(this.value)) {\r\n        this.clear();\r\n      }\r\n    }\r\n  }\r\n\r\n  private subscription: Subscription; // Changed: Added subscription for optionsSubject\r\n\r\n  ngOnInit(): void {\r\n    if (!this.options) {\r\n      this.options = [];\r\n    }\r\n\r\n    if (this.loadAction) {\r\n      this.getData(this.loadAction);\r\n    } else {\r\n      if (this.options.length > 0) {\r\n        this.initFilter();\r\n      }\r\n    }\r\n\r\n    if (this.placeholder == \"\") {\r\n      this.placeholder = \"Enter \" + this.display;\r\n    }\r\n\r\n    // Changed: Subscribe to optionsSubject for child field option updates\r\n    if (this.field?.optionsSubject) {\r\n      this.subscription = this.field.optionsSubject.subscribe(newOptions => {\r\n        if (newOptions) {\r\n          this.options = newOptions;\r\n          this.initFilter();\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.initControl();\r\n\r\n    if (this.value) {\r\n      this.myControl.setValue(this.getDisplayValue(this.value), { emitEvent: false });\r\n    }\r\n  }\r\n\r\n  filteredOptions: Observable<string[]>;\r\n  multiDimension = false;\r\n\r\n  @Input() appearance: 'fill' | 'outline' = 'outline';\r\n  @Input() readonly = false;\r\n  @Input() hint = \"\";\r\n  @Input() display = \"\";\r\n  @Input() placeholder = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter();\r\n\r\n  @Output() leave = new EventEmitter();\r\n  @Output() enterPress = new EventEmitter();\r\n\r\n  @Input() width = \"100%\";\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n\r\n  // Changed: Autocomplete-specific properties\r\n  @Input() options: any = [];\r\n  @Input() optionDisplay = \"name\";\r\n  @Input() optionValue = \"value\";\r\n  @Input() loadAction: Action;\r\n\r\n  @Input() required = true;\r\n  @Input() min = 0;\r\n  @Input() max = 9000000000000000;\r\n  @Input() regex?: { pattern: string; message: string };\r\n\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n\r\n  @Input() field: Field; // Changed: Added field input for form integration\r\n  @Input() data: any; // Changed: Added data input for form integration\r\n  @Input() detailsConfig: DetailsDialogConfig; // Changed: Added detailsConfig for Add/View functionality\r\n  @Input() masterField: string; // Changed: Added masterField input for child field functionality\r\n\r\n  isHovered = false;\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n  }\r\n\r\n  private initFilter() {\r\n    // Changed: Added guard for empty options\r\n    if (!this.options || this.options.length === 0) {\r\n      this.filteredOptions = this.myControl.valueChanges.pipe(\r\n        startWith(\"\"),\r\n        map(() => [])\r\n      );\r\n      return;\r\n    }\r\n\r\n    const objKeyList = Object.keys(this.options[0]);\r\n    const firstKey = objKeyList[0];\r\n    this.multiDimension = !Core.isNumber(firstKey);\r\n\r\n    this.filteredOptions = this.myControl.valueChanges.pipe(\r\n      startWith(\"\"),\r\n      map((value) => this._filter(value))\r\n    );\r\n\r\n    this.myControl.setValue(this.getDisplayValue(this.value));\r\n  }\r\n\r\n  private _filter(value): string[] {\r\n    if (!value || !this.options) return this.options || []; // Changed: Added null safety\r\n\r\n    const filterValue = value.toLowerCase();\r\n    if (this.multiDimension) {\r\n      return this.options.filter(option =>\r\n        option[this.optionDisplay]?.toLowerCase()?.includes(filterValue) // Changed: Added null safety\r\n      );\r\n    }\r\n    return this.options.filter(option =>\r\n      option?.toLowerCase()?.includes(filterValue) // Changed: Added null safety\r\n    );\r\n  }\r\n\r\n  initControl() {\r\n    if (this.readonly) {\r\n      this.myControl.setValidators(null);\r\n      this.myControl.updateValueAndValidity();\r\n      return;\r\n    }\r\n    \r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    if (this.min > 0) {\r\n      validators.push(Validators.minLength(this.min));\r\n    }\r\n    \r\n    if (this.max < 9000000000000000) {\r\n      validators.push(Validators.maxLength(this.max));\r\n    }\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    this.myControl.setValidators(validators);\r\n    this.myControl.updateValueAndValidity();\r\n  }\r\n\r\n  getDisplayValue(value: any): string {\r\n    if (!value || !this.options.length) return '';\r\n\r\n    if (this.multiDimension) {\r\n      const option = this.options.find(opt => opt[this.optionValue] === value);\r\n      return option ? option[this.optionDisplay] : '';\r\n    }\r\n    return value;\r\n  }\r\n\r\n  changed() {\r\n    const selectedOption = this.multiDimension ?\r\n      this.options.find(opt => opt[this.optionDisplay] === this.myControl.value) :\r\n      this.options.find(opt => opt === this.myControl.value);\r\n\r\n    const valueToEmit = selectedOption ?\r\n      (this.multiDimension ? selectedOption[this.optionValue] : selectedOption) :\r\n      this.myControl.value;\r\n\r\n    this.value = valueToEmit;\r\n    this.valueChange.emit(valueToEmit);\r\n\r\n    // Changed: Clear invalidSelection error when a valid option is selected from dropdown\r\n    if (selectedOption && this.myControl.hasError('invalidSelection')) {\r\n      this.myControl.setErrors(null);\r\n    }\r\n\r\n    // Changed: Call onSelectChange callback if provided via field (only fires on explicit option selection)\r\n    if (this.field?.onSelectChange && this.data) {\r\n      this.field.onSelectChange(valueToEmit, this.data, selectedOption);\r\n    }\r\n  }\r\n\r\n  leaved() {\r\n    this.myControl.markAsTouched();\r\n    this.leave.emit();\r\n\r\n    // Changed: Validate that a valid option is selected when required\r\n    if (this.required && this.options?.length > 0) {\r\n      const inputValue = this.myControl.value;\r\n      if (!inputValue) {\r\n        this.myControl.setErrors({ 'required': true });\r\n        return;\r\n      }\r\n      if (!this.isValidSelection(inputValue)) {\r\n        this.myControl.setErrors({ 'invalidSelection': true });\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (this.regex && this.value) {\r\n      const regexPattern = new RegExp(this.regex.pattern);\r\n      if (!regexPattern.test(this.value)) {\r\n        this.myControl.setErrors({ 'pattern': true });\r\n      }\r\n    }\r\n  }\r\n\r\n  // Changed: Added method to check if entered value matches a valid option\r\n  isValidSelection(inputValue: string): boolean {\r\n    if (!inputValue || !this.options?.length) return false;\r\n\r\n    if (this.multiDimension) {\r\n      return this.options.some(opt => opt[this.optionDisplay] === inputValue);\r\n    }\r\n    return this.options.some(opt => opt === inputValue);\r\n  }\r\n\r\n  clear() {\r\n    this.value = \"\";\r\n    this.myControl.setValue(\"\", { emitEvent: false });\r\n    this.myControl.markAsDirty();\r\n    this.myControl.markAsTouched();\r\n    this.valueChange.emit(this.value);\r\n    // Changed: Set required error when clearing a required field\r\n    if (this.required) {\r\n      this.myControl.setErrors({ 'required': true });\r\n    }\r\n  }\r\n\r\n  enterPressed() {\r\n    this.enterPress.emit();\r\n  }\r\n\r\n  refresh(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    if (!this.loadAction) {\r\n      return;\r\n    }\r\n\r\n    const refreshAction = {\r\n      ...this.loadAction,\r\n      forceRefresh: true\r\n    };\r\n\r\n    this.getData(refreshAction);\r\n  }\r\n\r\n  getData(action: Action) {\r\n    if (!action) return;\r\n    if (this.masterField) return; // Changed: Skip self-loading if child field (form handles loading via masterOptions)\r\n    this.dataService.CallApi(action).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.options = apiResponse.data;\r\n        // Changed: Also set field.options and notify via optionsSubject so form can update child fields\r\n        if (this.field) {\r\n          this.field.options = apiResponse.data;\r\n          if (!this.field.optionsSubject) {\r\n            this.field.optionsSubject = new BehaviorSubject(apiResponse.data);\r\n          } else {\r\n            this.field.optionsSubject.next(apiResponse.data);\r\n          }\r\n        }\r\n        this.initFilter();\r\n      }\r\n    });\r\n  }\r\n\r\n  myControl = new FormControl('', this.getValidators());\r\n\r\n  private getValidators() {\r\n    const validators = [];\r\n    \r\n    if (this.required) {\r\n      validators.push(Validators.required);\r\n    }\r\n    \r\n    validators.push(Validators.minLength(this.min));\r\n    validators.push(Validators.maxLength(this.max));\r\n    \r\n    if (this.regex) {\r\n      validators.push(Validators.pattern(this.regex.pattern));\r\n    }\r\n    \r\n    return validators;\r\n  }\r\n\r\n  validate(control: FormControl): string {\r\n    if ((this.required || this.min > 0) && control.hasError('required')) {\r\n      return `Required`;\r\n    }\r\n\r\n    // Changed: Added validation message for invalid selection\r\n    if (control.hasError('invalidSelection')) {\r\n      return `Please select a valid option`;\r\n    }\r\n\r\n    if (control.hasError('minlength')) {\r\n      return `Minimum length is ${this.min}`;\r\n    }\r\n\r\n    if (control.hasError('maxlength')) {\r\n      return `Maximum length is ${this.max}`;\r\n    }\r\n\r\n    if (control.hasError('pattern')) {\r\n      return this.regex?.message || 'Invalid Input';\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  // Changed: Added canCreate method for Add button visibility\r\n  canCreate(): boolean {\r\n    if (!this.detailsConfig?.buttons) return false;\r\n    const createButton: Button = this.detailsConfig.buttons.find(b => b.name === 'create');\r\n    const tmpTableConfig: TableConfig = { formConfig: this.detailsConfig.formConfig };\r\n    return createButton && (!createButton.disabled || !createButton.disabled(this.value)) && this.buttonService.testVisible(createButton, null, tmpTableConfig);\r\n  }\r\n\r\n  // Changed: Added canView method for View button visibility\r\n  canView(): boolean {\r\n    if (!this.detailsConfig?.buttons) return false;\r\n    let viewButton: Button = this.detailsConfig.buttons.find(b => b.name === 'view');\r\n    if (!viewButton) {\r\n      viewButton = { name: 'view', dialog: true };\r\n      this.detailsConfig.buttons.push(viewButton);\r\n    }\r\n    const tmpTableConfig: TableConfig = { formConfig: this.detailsConfig.formConfig };\r\n    return this.value && viewButton && this.buttonService.testVisible(viewButton, null, tmpTableConfig);\r\n  }\r\n\r\n  // Changed: Added onPeekClick method for opening details dialog\r\n  onPeekClick(event: MouseEvent, mode: 'create' | 'view'): void {\r\n    event.stopPropagation();\r\n\r\n    if (this.detailsConfig) {\r\n      const dynamicData = mode === 'create' ? {} : { [this.detailsConfig.heroField]: this.value };\r\n\r\n      let button = this.detailsConfig.buttons.find(b => b.name === mode);\r\n      button.detailsConfig = this.detailsConfig;\r\n\r\n      this.dialogService.openDefaultDetailsDialog(button, dynamicData).subscribe(result => { // Changed: Use openDefaultDetailsDialog to avoid circular dependency\r\n        if (result.message === 'success') {\r\n          this.refresh(event);\r\n        }\r\n      });\r\n    } else {\r\n      this.messageService.toast(\"Peek configuration error\");\r\n    }\r\n  }\r\n}\r\n","<!-- Autocomplete text input -->\r\n<mat-form-field [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'fill'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <input [placeholder]=\"placeholder\" [formControl]=\"myControl\" matInput [matAutocomplete]=\"auto\" [required]=\"required\" [readonly]=\"readonly\">\r\n  <mat-error *ngIf=\"myControl.invalid && (myControl.dirty || myControl.touched)\">{{validate(myControl)}}</mat-error>\r\n  <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"changed()\">\r\n    <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"multiDimension ? option[optionDisplay] : option\">\r\n      {{multiDimension ? option[optionDisplay] : option}}\r\n    </mat-option>\r\n  </mat-autocomplete>\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <!-- Changed: Added Add button for creating new items via detailsConfig -->\r\n    <button mat-icon-button *ngIf=\"detailsConfig && canCreate() && isHovered\" (click)=\"onPeekClick($event, 'create')\" matTooltip=\"Add\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" style=\"color: green;\">add</mat-icon>\r\n    </button>\r\n    <!-- Changed: Added View button for viewing selected item via detailsConfig -->\r\n    <button mat-icon-button *ngIf=\"detailsConfig && canView() && isHovered && value\" (click)=\"onPeekClick($event, 'view')\" matTooltip=\"View\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" color=\"primary\">launch</mat-icon>\r\n    </button>\r\n    <button mat-icon-button *ngIf=\"loadAction && isHovered\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" color=\"primary\">cached</mat-icon>\r\n    </button>\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-check',\r\n    templateUrl: './check.component.html',\r\n    styleUrls: ['./check.component.css'],\r\n    standalone: false\r\n})\r\nexport class CheckComponent implements OnInit {\r\n\r\n  constructor(private messageService: MessageService,) { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  @Input() readonly = false;\r\n  @Input() display = \"\";\r\n  @Input() value = false;\r\n  @Output() valueChange = new EventEmitter();\r\n  @Output() click = new EventEmitter();\r\n  @Output() check = new EventEmitter();\r\n  @Output() uncheck = new EventEmitter();\r\n\r\n  @Input() infoMessage: string;\r\n  @Output() infoClick = new EventEmitter<void>();\r\n\r\n  changed(){\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  clicked(){\r\n    this.click.emit();\r\n\r\n    if(!this.value){\r\n      this.checked();\r\n    }else{\r\n      this.unchecked();\r\n    }\r\n  }\r\n\r\n  checked(){\r\n    this.check.emit();\r\n  }\r\n  unchecked(){\r\n    this.uncheck.emit();\r\n  }\r\n\r\n  onInfoClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.infoClick.emit();\r\n\r\n  }\r\n\r\n}\r\n","\r\n\r\n<mat-checkbox color=\"primary\" [(ngModel)]=\"value\" (change)=\"changed()\" (click)=\"clicked()\" [disabled]=\"readonly\">{{display}}</mat-checkbox>\r\n\r\n<!-- <div class=\"suffix-icons\">\r\n\r\n  <mat-checkbox color=\"primary\" [(ngModel)]=\"value\" (change)=\"changed()\" (click)=\"clicked()\" [disabled]=\"readonly\">{{display}}</mat-checkbox>\r\n\r\n  <mat-icon *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\" style=\"color: steelblue;font-size: 15px;margin-left: 5px;margin-top: 8px;\">info</mat-icon>\r\n\r\n</div> -->\r\n\r\n","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { Core } from '../../classes/TinCore';\r\n\r\n@Component({\r\n    selector: 'spa-date',\r\n    templateUrl: './date.component.html',\r\n    styleUrls: ['./date.component.css'],\r\n    standalone: false\r\n})\r\nexport class DateComponent implements OnInit, OnChanges {\r\n  @Input() required = true;\r\n  @Input() min = \"1900-01-01\";\r\n  @Input() max = \"9999-01-01\";\r\n  @Input() readonly = false;\r\n  @Input() hint = \"\";\r\n  @Input() value: string | null = Core.nowDate(true);\r\n\r\n  @Input() display = \"\";\r\n  @Input() placeholder = \"\";\r\n  @Input() width = \"100%\";\r\n\r\n  @Output() valueChange = new EventEmitter<string | null>();\r\n\r\n\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n\r\n\r\n  isHovered = false;\r\n  \r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n  }\r\n\r\n  minDate: FormControl;\r\n  maxDate: FormControl;\r\n  control: FormControl;\r\n\r\n  ngOnInit(): void {\r\n    this.initializeDateControls();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['readonly']) {\r\n      this.updateControlState();\r\n    }\r\n    if (changes['value']) {\r\n\r\n\r\n      this.control?.setValue(this.value ? new Date(this.value) : null);\r\n    }\r\n  }\r\n\r\n  private initializeDateControls(): void {\r\n    this.minDate = new FormControl(new Date(this.min));\r\n    this.maxDate = new FormControl(new Date(this.max));\r\n    \r\n\r\n\r\n    const initialValue = this.value ? new Date(this.value) : null;\r\n    this.control = new FormControl({ value: initialValue, disabled: this.readonly });\r\n\r\n    this.updateControlState();\r\n    setTimeout(() => this.onChangeEvent(), 5);\r\n  }\r\n\r\n  private updateControlState(): void {\r\n    if (this.readonly) {\r\n      this.control?.disable();\r\n    } else {\r\n      this.control?.enable();\r\n    }\r\n  }\r\n\r\n  onChangeEvent(): void {\r\n\r\n\r\n    const controlValue = this.control.value;\r\n    const formattedDate = controlValue ? Core.getFormatedDate2(controlValue, true) : null;\r\n    this.valueChange.emit(formattedDate);\r\n  }\r\n\r\n\r\n  onInputClick(picker: any): void {\r\n    if (!this.readonly) {\r\n      picker.open();\r\n    }\r\n  }\r\n\r\n  validate(control: FormControl): string {\r\n    if (control.hasError('matDatepickerMin')) {\r\n      return `Minimum date is ${this.min}`;\r\n    }\r\n    if (control.hasError('matDatepickerMax')) {\r\n      return `Maximum date is ${this.max}`;\r\n    }\r\n    return \"\";\r\n  }\r\n}\r\n","<!-- Changed: Added mouse events for hover tracking, click handler for opening picker, and spa-suffix component -->\r\n<mat-form-field [ngStyle]=\"{'width':width ?? '100%'}\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <input [formControl]=\"control\" [min]=\"minDate.value\" [max]=\"maxDate.value\" matInput [matDatepicker]=\"picker_date\" (dateInput)=\"onChangeEvent()\" [placeholder]=\"display\" [readonly]=\"true\" (click)=\"onInputClick(picker_date)\">\r\n  <mat-datepicker #picker_date></mat-datepicker>\r\n  <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n      <div matSuffix class=\"suffix-icons\">\r\n        <mat-datepicker-toggle [for]=\"picker_date\"></mat-datepicker-toggle>\r\n        <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n      </div>\r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'spa-datetime',\r\n    templateUrl: './datetime.component.html',\r\n    styleUrls: ['./datetime.component.css'],\r\n    standalone: false\r\n})\r\nexport class DatetimeComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  @Input() display = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter();\r\n  @Input() readonly = false;\r\n  @Input() width = \"100%\";\r\n\r\n  @Input() min = \"01 jan 1900\";\r\n\r\n  @Input() max = \"31 dec 9999\";\r\n\r\n  changed() {\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n\r\n\r\n  isHovered = false;\r\n  \r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n  }\r\n\r\n}\r\n","<!-- Changed: Added mouse events for hover tracking and spa-suffix component -->\r\n<mat-form-field [ngStyle]=\"{'width':width ?? '100%'}\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n<mat-label>{{display}}</mat-label>\r\n<input matInput autocomplete=\"off\" type=\"datetime-local\" [(ngModel)]=\"value\" [min]=\"min\" [max]=\"max\"  (change)=\"changed()\" [placeholder]=\"display\" [readonly]=\"readonly\" />\r\n    <div matSuffix class=\"suffix-icons\">\r\n      <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n    </div>\r\n</mat-form-field>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'spa-label',\r\n    templateUrl: './label.component.html',\r\n    styleUrls: ['./label.component.css'],\r\n    standalone: false\r\n})\r\nexport class LabelComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  @Input() display = \"\";\r\n  @Input() value = \"\";\r\n  @Input() format = \"text\";\r\n\r\n  @Input() suffix = \"\";\r\n  @Input() size = \"\";\r\n}\r\n","<div *ngIf=\"format=='text'\">\r\n  <label style=\"font-weight: 500\">{{display}} :</label> &nbsp; \r\n  <label [ngStyle]=\"{'font-size': size || '20px', 'font-weight': '300'}\">{{value}} {{suffix ?? ''}}</label> &nbsp;\r\n</div>\r\n\r\n<div *ngIf=\"format=='date'\">\r\n  <label style=\"font-weight: 500\">{{display}} :</label> &nbsp; \r\n  <label [ngStyle]=\"{'font-size': size || '20px', 'font-weight': '300'}\">{{value | date:'dd/MM/yyyy'}} </label> &nbsp;\r\n</div>\r\n\r\n<div *ngIf=\"format=='datetime'\">\r\n  <label style=\"font-weight: 500\">{{display}} :</label> &nbsp; \r\n  <label [ngStyle]=\"{'font-size': size || '20px', 'font-weight': '300'}\">{{value | date:'dd/MM/yyyy HH:mm'}} </label> &nbsp;\r\n</div>\r\n\r\n<div *ngIf=\"format=='money'\">\r\n  <label style=\"font-weight: 500\">{{display}} :</label> &nbsp; \r\n  <label [ngStyle]=\"{'font-size': size || '20px', 'font-weight': '300'}\">{{value | currency:'USD':''}} {{suffix ?? ''}}</label> &nbsp;\r\n</div>\r\n\r\n<div *ngIf=\"format=='number'\">\r\n  <label style=\"font-weight: 500\">{{display}} :</label> &nbsp; \r\n  <label [ngStyle]=\"{'font-size': size || '20px', 'font-weight': '300'}\">{{value | currency:'USD':''}} {{suffix ?? ''}}</label> &nbsp;\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { Action, ApiResponse, Field } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'spa-select-common',\r\n    templateUrl: './select-common.component.html',\r\n    styleUrls: ['./select-common.component.css'],\r\n    standalone: false\r\n})\r\nexport class SelectCommonComponent implements OnInit, OnDestroy {\r\n\r\n  constructor(protected messageService: MessageService, protected dataService: DataServiceLib,) { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    if (this.placeholder == \"\") {\r\n      this.placeholder = \"Select \" + this.display;\r\n    }\r\n\r\n    this.setDefaultValue();\r\n\r\n    if (this.field?.optionsSubject) {\r\n      this.subscription = this.field.optionsSubject.subscribe(newOptions => {\r\n        if (newOptions) {\r\n          this.options = newOptions;\r\n          this.setDefaultValue();  // Changed: Apply default after options update via subscription\r\n          this.updateSelectedOptionHint();\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  ngOnChanges() {\r\n\r\n    if (this.readonlyMode != \"\" && this.options.length > 0) {\r\n      this.displayValue = this.options.filter((m) => m[`${this.optionValue}`] == this.value)[0][`${this.optionDisplay}`]\r\n    }\r\n\r\n    //add a null option\r\n    if (this.nullable && this.options && this.options.length > 0 && this.options[0][this.optionValue] != null) {\r\n      this.options.unshift({ [this.optionValue]: null, [this.optionDisplay]: \"None\" })\r\n    }\r\n\r\n    this.updateSelectedOptionHint();\r\n  }\r\n\r\n  displayValue;\r\n  isHovered = false;\r\n  selectedOptionHint = \"\";\r\n\r\n  private subscription: Subscription;\r\n\r\n  @Input() width = \"100%\"\r\n  @Input() readonly = false;\r\n  @Input() required = true;\r\n  @Input() defaultFirstValue = false;\r\n  @Input() readonlyMode = \"\";\r\n  @Input() hint = \"\";\r\n  @Input() placeholder = \"\";\r\n  // Removed: multiple property - use spa-multi-select component for multiple selections\r\n\r\n  @Input() display = \"\";\r\n  @Input() value;\r\n  @Input() options: any;\r\n  @Input() masterOptions: any;\r\n  @Input() masterField: string;\r\n  @Input() optionValue = \"\";\r\n  @Input() optionDisplay = \"\";\r\n  @Input() optionDisplayExtra = \"\";\r\n  @Input() nullable = false;\r\n\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent = false;\r\n  @Input() loadAction: Action;\r\n  @Input() loadIDField: string;\r\n  @Input() field: Field;\r\n  @Input() data: any;\r\n\r\n  @Output() valueChange = new EventEmitter();\r\n  @Output() hoverChange = new EventEmitter<boolean>();\r\n\r\n  setDefaultValue() {\r\n    // Guard: Need options to set any default\r\n    if (!this.options || this.options.length === 0) {\r\n      return;\r\n    }\r\n\r\n    // Guard: Check if value is already meaningfully set\r\n    const hasValue = this.value != null &&\r\n                     this.value !== undefined &&\r\n                     !(typeof this.value === 'string' && this.value === '') &&\r\n                     !(typeof this.value === 'number' && this.value === 0 && !this.nullable);\r\n\r\n    if (hasValue) {\r\n      // Value already set - verify it exists in options\r\n      const valueExists = this.options.some(opt =>\r\n        this.compareValues(opt[this.optionValue], this.value)\r\n      );\r\n      if (valueExists) {\r\n        return;  // Valid value already selected\r\n      }\r\n    }\r\n\r\n    // Priority 1: Use field.defaultValue if configured\r\n    const defaultVal = this.field?.defaultValue;\r\n    if (defaultVal != null && defaultVal !== undefined) {\r\n      const matchingOption = this.options.find(opt =>\r\n        this.compareValues(opt[this.optionValue], defaultVal)\r\n      );\r\n\r\n      if (matchingOption) {\r\n        this.value = matchingOption[this.optionValue];\r\n        this.changed();\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Priority 2: Use defaultFirstValue if configured\r\n    if (this.defaultFirstValue) {\r\n      this.value = this.options[0][this.optionValue];\r\n      this.changed();\r\n    }\r\n  }\r\n\r\n  // Changed: Added helper method for type-coerced value comparison (handles number vs string)\r\n  private compareValues(optionValue: any, targetValue: any): boolean {\r\n    if (optionValue === targetValue) return true;\r\n    if (optionValue == null || targetValue == null) return false;\r\n    return String(optionValue) === String(targetValue);\r\n  }\r\n\r\n  changed() {\r\n    this.valueChange.emit(this.value);\r\n    this.updateSelectedOptionHint();\r\n\r\n    // Added: Call onSelectChange callback if provided\r\n    if (this.field?.onSelectChange && this.data) {\r\n      const selectedOption = this.options?.find(opt => opt[this.optionValue] === this.value);\r\n      this.field.onSelectChange(this.value, this.data, selectedOption);\r\n    }\r\n  }\r\n\r\n  private updateSelectedOptionHint(): void {\r\n    if (!this.options || this.options.length === 0 || this.value == null || this.value == undefined) {\r\n      this.selectedOptionHint = this.hint; // Fall back to component hint\r\n      return;\r\n    }\r\n\r\n    const selectedOption = this.options.find(option => \r\n      option[this.optionValue] === this.value\r\n    );\r\n\r\n    if (selectedOption && selectedOption.hint) {\r\n      this.selectedOptionHint = selectedOption.hint; // Use option hint\r\n    } else {\r\n      this.selectedOptionHint = this.hint; // Fall back to component hint\r\n    }\r\n  }\r\n\r\n  get computedHint(): string {\r\n    return this.selectedOptionHint || this.hint;\r\n  }\r\n\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n    this.hoverChange.emit(true);\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n    this.hoverChange.emit(false);\r\n  }\r\n\r\n  refresh(event: MouseEvent): void {\r\n    console.log(\"refresh clicked\")\r\n    event.stopPropagation();\r\n    if (!this.loadAction) {\r\n      return;\r\n    }\r\n\r\n    const refreshAction : Action = {\r\n      ...this.loadAction,\r\n      skipCache: true\r\n    };\r\n\r\n    this.getData(refreshAction);\r\n  }\r\n\r\n  private transformLoadUrl(action: Action): Action {\r\n    if (!action?.url || !this.data) return action;\r\n\r\n    // Changed: Check if URL contains {propertyName} placeholders first\r\n    if (action.url.includes('{')) {\r\n      const transformedUrl = action.url.replace(/\\{(\\w+)\\}/g, (match, propName) => {\r\n        const value = this.data?.[propName];\r\n        return value !== undefined && value !== null ? String(value) : match;\r\n      });\r\n      return { ...action, url: transformedUrl };\r\n    }\r\n\r\n    // Changed: Fallback to existing loadIDField pattern for backward compatibility\r\n    if (!this.loadIDField) return action;\r\n    const idValue = this.data[this.loadIDField];\r\n    if (!idValue) return action;\r\n\r\n    const urlParts = action.url.split('/');\r\n    return {\r\n      ...action,\r\n      url: `${urlParts[0]}/${urlParts[1]}/${idValue}`\r\n    };\r\n  }\r\n\r\n  getData(loadAction: Action) {\r\n\r\n    if (!loadAction) return;\r\n    if (this.masterField) return;\r\n\r\n    const transformedAction = this.transformLoadUrl(loadAction);\r\n\r\n    this.dataService.CallApi(transformedAction, \"\").subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        // Always update options when new data arrives\r\n        this.options = apiResponse.data;\r\n\r\n        if (this.field) {\r\n          this.field.options = apiResponse.data;\r\n\r\n          this.setDefaultValue();\r\n\r\n          if (!this.field.optionsSubject) {\r\n            this.field.optionsSubject = new BehaviorSubject(apiResponse.data);\r\n          } else {\r\n            this.field.optionsSubject.next(apiResponse.data);\r\n          }\r\n        }\r\n        \r\n        this.updateSelectedOptionHint();\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n    }\r\n  }\r\n}","<mat-form-field *ngIf=\"readonlyMode==''\" floatLabel=\"always\" [hintLabel]=\"computedHint\" [ngStyle]=\"{'width':width ?? '100%'}\" [hideRequiredMarker]=\"false\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n\r\n  <mat-label>{{display}}</mat-label>\r\n  <!-- Removed: [multiple]=\"multiple\" binding - component now only supports single selection -->\r\n  <mat-select [(value)]=\"value\" (selectionChange)=\"changed()\" [disabled]=\"readonly\" [placeholder]=\"placeholder\" [required]=\"required\">\r\n    <mat-option *ngFor=\"let row of options\" [value]=\"row[optionValue]\">\r\n      {{row[optionDisplay]}} <label *ngIf=\"optionDisplayExtra!='' && row[optionDisplayExtra] && row[optionDisplayExtra] != ''\">({{row[optionDisplayExtra]}})</label>\r\n    </mat-option>\r\n  </mat-select>\r\n\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <ng-content select=\"[additionalButtons]\"></ng-content>\r\n    <button mat-icon-button *ngIf=\"loadAction && isHovered && !masterField\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" color=\"primary\">cached</mat-icon>\r\n    </button>\r\n    <spa-suffix [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n\r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {  Action, ApiResponse, Button, DetailsDialogConfig, TableConfig } from '../../classes/Classes';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { SelectCommonComponent } from '../select-common/select-common.component';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { ButtonService } from '../../services/button.service';\r\n\r\n@Component({\r\n    selector: 'spa-select',\r\n    templateUrl: './select.component.html',\r\n    styleUrls: ['./select.component.css'],\r\n    standalone: false\r\n})\r\nexport class SelectComponent extends SelectCommonComponent implements OnInit {\r\n\r\n  constructor(\r\n    protected override messageService: MessageService, protected override dataService: DataServiceLib,\r\n    private dialogService: DialogService, private buttonService: ButtonService ,\r\n\r\n  ) {\r\n    super(messageService,dataService);\r\n  }\r\n\r\n  override ngOnInit(): void {\r\n\r\n    // Always load data if loadAction is provided to ensure fresh data after cache expiration\r\n    if (this.loadAction) {\r\n      this.getData(this.loadAction);\r\n    }\r\n\r\n  }\r\n\r\n  @Input() detailsConfig: DetailsDialogConfig;\r\n\r\n\r\n  onHoverChange(isHovered: boolean): void {\r\n    this.isHovered = isHovered;\r\n  }\r\n\r\n  canCreate(): boolean {\r\n    if (!this.detailsConfig?.buttons) return false;\r\n    const createButton : Button = this.detailsConfig.buttons.find(b => b.name === 'create');\r\n    const tmpTableConfig : TableConfig = {formConfig: this.detailsConfig.formConfig};\r\n    return createButton && (!createButton.disabled || !createButton.disabled(this.value)) && this.buttonService.testVisible(createButton, null, tmpTableConfig)    ;\r\n  }\r\n\r\n  canView(): boolean {\r\n    if (!this.detailsConfig?.buttons) return false;\r\n    let viewButton : Button = this.detailsConfig.buttons.find(b => b.name === 'view');\r\n    if (!viewButton) {\r\n      // Add default view button if not exists\r\n      viewButton = { name: 'view', dialog: true };\r\n      this.detailsConfig.buttons.push(viewButton);\r\n    }\r\n    const tmpTableConfig: TableConfig = { formConfig: this.detailsConfig.formConfig };\r\n    return this.value && viewButton && this.buttonService.testVisible(viewButton, null, tmpTableConfig);\r\n  }\r\n\r\n  onPeekClick(event: MouseEvent, mode: 'create' | 'view'): void {\r\n    event.stopPropagation();\r\n\r\n    if (this.detailsConfig) {\r\n      const dynamicData = mode === 'create' ? {} : { [this.detailsConfig.heroField]: this.value };\r\n\r\n      let button = this.detailsConfig.buttons.find(b => b.name === mode);\r\n      button.detailsConfig = this.detailsConfig;\r\n\r\n      this.dialogService.openDefaultDetailsDialog(button, dynamicData).subscribe(result => { // Changed: Use openDefaultDetailsDialog to avoid circular dependency\r\n        if (result.message === 'success'){\r\n          this.refresh(event);\r\n        }\r\n      });\r\n\r\n    } else {\r\n      this.messageService.toast(\"Peek configuration error\");\r\n    }\r\n  }\r\n\r\n\r\n\r\n}\r\n\r\n","<spa-select-common [width]=\"width\" [readonly]=\"readonly\" [required]=\"required\" [defaultFirstValue]=\"defaultFirstValue\"\r\n                   [readonlyMode]=\"readonlyMode\" [hint]=\"hint\" [placeholder]=\"placeholder\"\r\n                   [display]=\"display\" [(value)]=\"value\" [options]=\"options\" [masterOptions]=\"masterOptions\" [masterField]=\"masterField\"\r\n                   [optionValue]=\"optionValue\" [optionDisplay]=\"optionDisplay\" [optionDisplayExtra]=\"optionDisplayExtra\"\r\n                   [nullable]=\"nullable\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [loadAction]=\"loadAction\" [loadIDField]=\"loadIDField\" [field]=\"field\" [data]=\"data\"\r\n                   (valueChange)=\"valueChange.emit($event)\"\r\n                   (hoverChange)=\"onHoverChange($event)\">\r\n  <ng-container additionalButtons>\r\n    <button mat-icon-button *ngIf=\"detailsConfig && canCreate() && isHovered\" (click)=\"onPeekClick($event, 'create')\" matTooltip=\"Add\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" style=\"color: green;\">add</mat-icon>\r\n    </button>\r\n    <button mat-icon-button *ngIf=\"detailsConfig && canView() && isHovered && value\" (click)=\"onPeekClick($event, 'view')\" matTooltip=\"View\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" color=\"primary\">launch</mat-icon>\r\n    </button>\r\n\r\n  </ng-container>\r\n</spa-select-common>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'spa-activity',\r\n    templateUrl: './activity.component.html',\r\n    styleUrls: ['./activity.component.css'],\r\n    standalone: false\r\n})\r\nexport class ActivityComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  @Input() notes = new Array();\r\n  notesMessage: string = \"Empty\";\r\n  @Input() title = \"Notes\"\r\n\r\n}\r\n","\r\n      <div class=\"tin-input-row mt-3\" *ngIf=\"title != ''\">\r\n        <mat-label style=\"font-size: 20px; font-weight: 300\" >  {{title}}</mat-label >\r\n      </div>\r\n\r\n      <ul *ngIf=\"notes && notes.length>0\" class=\"list-group list-group-flush\" style=\"max-height:350px; margin-left:5px\">\r\n\r\n        <li *ngFor=\"let note of notes\" class=\"list-group-item  list-group-item-action flex-column align-items-start\">\r\n          <div class=\"d-flex w-100 justify-content-between\">\r\n            <div class=\"mb-0\">{{note.createdByName}}</div>\r\n            <!-- <small class=\"text-muted\">{{note.expr1}} ago</small> -->\r\n          </div>\r\n\r\n          <small>{{note.details}} (<em>{{note.createdDate | date: 'dd MMM yyyy HH:mm'}}</em>) </small>\r\n        </li>\r\n\r\n\r\n      </ul>\r\n\r\n      <div *ngIf=\"notes && notes.length==0\" class=\"d-flex justify-content-center row align-items-center\" style=\"max-height:200px\">\r\n\r\n        No {{title.toLowerCase()}}\r\n\r\n      </div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\n\r\n@Component({\r\n    selector: 'spa-filter',\r\n    templateUrl: './filter.component.html',\r\n    styleUrls: ['./filter.component.css'],\r\n    standalone: false\r\n})\r\nexport class FilterComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  ngOnChanges() {\r\n    this.applyFilter(this._filterText);\r\n  }\r\n\r\n  @Input() flatButtons = false;\r\n  @Input() showText = true;\r\n  @Input() showButton = true;\r\n  @Input() smallScreen = false; // Changed: Accept smallScreen for compact width on mobile\r\n  @Input() data = new MatTableDataSource();\r\n  @Output() refreshClick = new EventEmitter();\r\n\r\n  _filterText = \"\";\r\n\r\n\r\n  keyUp(event: KeyboardEvent) {\r\n    let text = event.target['value'];\r\n    this.applyFilter(text);\r\n  }\r\n\r\n\r\n  applyFilter(filterValue: string) {\r\n\r\n    if (this.data){\r\n      this.data.filter = filterValue.trim().toLowerCase();\r\n    }\r\n\r\n  }\r\n\r\n  refreshClicked(){\r\n    this.refreshClick.emit();\r\n  }\r\n\r\n  clear(){\r\n    this._filterText = \"\";\r\n    this.applyFilter(this._filterText);\r\n  }\r\n\r\n}\r\n","<!-- Changed: Added flex container div to align filter textbox and button -->\r\n<div class=\"filter-container\">\r\n  <mat-form-field *ngIf=\"showText\" [ngClass]=\"{'filter-compact': smallScreen}\"> <!-- Changed: Apply compact class on small screens -->\r\n   <mat-label>Filter</mat-label>\r\n   <input id=\"txtFilter\" matInput [(ngModel)]=\"_filterText\" (keyup)=\"keyUp($event)\" placeholder=\"Enter Filter text\" autocomplete=\"off\">\r\n    <div matSuffix class=\"suffix-icons\">\r\n      <button mat-icon-button *ngIf=\"_filterText\" (click)=\"clear()\" matTooltip=\"Clear\" matTooltipPosition=\"above\">\r\n        <mat-icon style=\"color: black;\">close</mat-icon>\r\n      </button>\r\n\r\n    </div>\r\n  </mat-form-field>\r\n\r\n  <!-- <button *ngIf=\"showButton && !flatButtons\" id=\"btnFilter\" mat-mini-fab color=\"primary\" matTooltip=\"Refresh Data\" matTooltipPosition=\"above\" (click)=\"refreshClicked()\" style=\"margin-right:1em;margin-top:5px\">\r\n    <mat-icon class=\"refreshIcon\">cached</mat-icon>\r\n  </button> -->\r\n\r\n  <!-- Changed: Removed inline margin-top style as alignment is now handled by flex container -->\r\n  <button *ngIf=\"showButton\" id=\"btnFilter\" mat-icon-button color=\"primary\" matTooltip=\"Refresh Data\" matTooltipPosition=\"above\" (click)=\"refreshClicked()\">\r\n    <mat-icon class=\"refreshIcon\">cached</mat-icon>\r\n  </button>\r\n</div>\r\n","import {\r\n  OnInit,\r\n  Directive,\r\n  HostListener,\r\n  ElementRef, forwardRef\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { DecimalPipe } from '@angular/common';\r\n\r\nexport const CURRENCY_INPUT_MASK_DIRECTIVE_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => CurrencyInputMaskDirective),\r\n  multi: true\r\n};\r\n\r\n@Directive({\r\n    selector: '[appCurrencyInputMask]',\r\n    providers: [\r\n        CURRENCY_INPUT_MASK_DIRECTIVE_VALUE_ACCESSOR,\r\n        DecimalPipe\r\n    ],\r\n    standalone: false\r\n})\r\nexport class CurrencyInputMaskDirective implements ControlValueAccessor, OnInit {\r\n  private el: HTMLInputElement;\r\n  private onModelChange: Function;\r\n  private onModelTouched: Function;\r\n  private lastNumVal: number;\r\n  private DECIMAL_MARK = '.';\r\n\r\n  constructor(\r\n    private elementRef: ElementRef,\r\n    private decimalPipe: DecimalPipe\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.el = this.elementRef.nativeElement;\r\n  }\r\n\r\n  @HostListener('focus', ['$event'])\r\n  handleFocus(event: any) {\r\n    const strVal: string = this.getInputValue();\r\n    const unmaskedStr: string = this.getUnmaskedValue(strVal);\r\n    this.updateInputValue(unmaskedStr);\r\n    // Select all text on focus so typing replaces the current value.\r\n    // setTimeout ensures selection applies after browser repositions cursor (mouse click and touch).\r\n    setTimeout(() => {\r\n      this.el.setSelectionRange(0, this.el.value.length);\r\n    }, 0);\r\n  }\r\n\r\n  @HostListener('cut', ['$event'])\r\n  handleCut(event: any) {\r\n    setTimeout(() => {\r\n      this.inputUpdated();\r\n    }, 0);\r\n  }\r\n\r\n  @HostListener('keypress', ['$event'])\r\n  handleKeypress(event: any) {\r\n    // Restrict characters\r\n    const newChar: string = String.fromCharCode(event.which);\r\n    const allowedChars: RegExp = /^[\\d.]+$/;\r\n    if (!allowedChars.test(newChar)) {\r\n      event.preventDefault();\r\n      return;\r\n    }\r\n    // Handle decimal mark input\r\n    const currentValue: string = event.target.value;\r\n    const separatorIdx: number = currentValue.indexOf(this.DECIMAL_MARK);\r\n    const hasFractionalPart: boolean = (separatorIdx >= 0);\r\n    if (!hasFractionalPart || newChar !== this.DECIMAL_MARK) {\r\n      return;\r\n    }\r\n    const isOutsideSelection = !this.isIdxBetweenSelection(separatorIdx);\r\n    if (isOutsideSelection) {\r\n      const positionAfterMark = separatorIdx + 1;\r\n      this.setCursorPosition(positionAfterMark);\r\n      event.preventDefault();\r\n      return;\r\n    }\r\n  }\r\n\r\n  @HostListener('input', ['$event'])\r\n  handleInput(event: any) {\r\n    this.inputUpdated();\r\n  }\r\n\r\n  @HostListener('paste', ['$event'])\r\n  handlePaste(event: any) {\r\n    setTimeout(() => {\r\n      this.inputUpdated();\r\n    }, 1);\r\n  }\r\n\r\n  @HostListener('blur', ['$event'])\r\n  handleBlur(event: any) {\r\n    const strVal: string = this.getInputValue();\r\n    const numVal: number = this.convertStrToDecimal(strVal);\r\n    this.maskInput(numVal);\r\n    this.onModelTouched.apply(event);\r\n  }\r\n\r\n  registerOnChange(callbackFunction: Function): void {\r\n    this.onModelChange = callbackFunction;\r\n  }\r\n\r\n  registerOnTouched(callbackFunction: Function): void {\r\n    this.onModelTouched = callbackFunction;\r\n  }\r\n\r\n  setDisabledState(value: boolean): void {\r\n    this.el.disabled = value;\r\n  }\r\n\r\n  writeValue(numValue: number): void {\r\n    this.maskInput(numValue);\r\n  }\r\n\r\n  private maskInput(numVal: number): void {\r\n    if (!this.isNumeric(numVal)) {\r\n      this.updateInputValue('');\r\n      return;\r\n    }\r\n    const strVal: string = this.convertDecimalToStr(numVal);\r\n    const newVal: string = this.transformWithPipe(strVal);\r\n    this.updateInputValue(newVal);\r\n  }\r\n\r\n  private inputUpdated() {\r\n    this.restrictDecimalValue();\r\n    const strVal: string = this.getInputValue();\r\n    const unmaskedVal: string = this.getUnmaskedValue(strVal);\r\n    const numVal: number = this.convertStrToDecimal(unmaskedVal);\r\n    if (numVal !== this.lastNumVal) {\r\n      this.lastNumVal = numVal;\r\n      this.onModelChange(numVal);\r\n    }\r\n  }\r\n\r\n  private restrictDecimalValue(): void {\r\n    const strVal: string = this.getInputValue();\r\n    const dotIdx: number = strVal.indexOf(this.DECIMAL_MARK);\r\n    const hasFractionalPart: boolean = (dotIdx >= 0);\r\n    if (hasFractionalPart) {\r\n      const fractionalPart: string = strVal.substring(dotIdx + 1);\r\n      if (fractionalPart.length > 2) {\r\n        const choppedVal: string = strVal.substring(0, dotIdx + 3);\r\n        this.updateInputValue(choppedVal, true);\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  private transformWithPipe(str: string): string {\r\n    return this.decimalPipe.transform(str, '1.2-2');\r\n  }\r\n\r\n  private getUnmaskedValue(value: string): string {\r\n    return value.replace(/[^-\\d\\\\.]/g, '');\r\n  }\r\n\r\n  private updateInputValue(value: string, savePosition = false) {\r\n    if (savePosition) {\r\n      this.saveCursorPosition();\r\n    }\r\n    this.el.value = value;\r\n  }\r\n\r\n  private getInputValue(): string {\r\n    return this.el.value;\r\n  }\r\n\r\n  private convertStrToDecimal(str: string): number {\r\n    return (this.isNumeric(str)) ? parseFloat(str) : null;\r\n  }\r\n\r\n  private convertDecimalToStr(n: number): string {\r\n    return (this.isNumeric(n)) ? n + '' : '';\r\n  }\r\n\r\n  private isNumeric(n: any): boolean {\r\n    return !isNaN(parseFloat(n)) && isFinite(n);\r\n  }\r\n\r\n  private saveCursorPosition() {\r\n    const position: number = this.el.selectionStart;\r\n    setTimeout(() => {\r\n      this.setCursorPosition(position);\r\n    }, 1);\r\n  }\r\n\r\n  private setCursorPosition(position: number) {\r\n    this.el.selectionStart = position;\r\n    this.el.selectionEnd = position;\r\n  }\r\n\r\n  private isIdxBetweenSelection(idx: number) {\r\n    if (this.el.selectionStart === this.el.selectionEnd) {\r\n      return false;\r\n    }\r\n    return (idx >= this.el.selectionStart && idx < this.el.selectionEnd);\r\n  }\r\n\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'spa-money',\r\n    templateUrl: './money.component.html',\r\n    styleUrls: ['./money.component.css'],\r\n    standalone: false\r\n})\r\nexport class MoneyComponent implements OnInit, OnChanges {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n    if (this.placeholder == \"\") {\r\n      this.placeholder = \"Enter \" + this.display;\r\n    }\r\n  }\r\n\r\n  // Sync @Input value changes with FormControl\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['value'] && this.control) {\r\n      // Update FormControl when parent changes the value, including first change\r\n      if (this.control.value !== changes['value'].currentValue) {\r\n        this.control.setValue(changes['value'].currentValue, { emitEvent: false });\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.initControl(this.control)\r\n\r\n    // Set initial value after view init\r\n    if (this.value) {\r\n      this.control.setValue(this.value, { emitEvent: false });\r\n    }\r\n\r\n    // Subscribe to control value changes AFTER initial value is set\r\n    this.control.valueChanges.subscribe(val => {\r\n      this.value = val;\r\n      this.valueChange.emit(val);\r\n    });\r\n  }\r\n\r\n  initControl(control: FormControl) {\r\n    if (this.readonly) {\r\n      control.setValidators(null);\r\n      control.updateValueAndValidity();\r\n    }\r\n    if (!this.required && !this.readonly) {\r\n\r\n      control.setValidators([Validators.min(this.min), Validators.max(this.max)]);\r\n      this.control.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  @Input() readonly = false;\r\n  @Input() hint = \"\";\r\n  @Input() display = \"\";\r\n  @Input() placeholder = \"\";\r\n  @Input() value = \"\";\r\n  @Input() width = \"100%\"\r\n  @Input() currency = \"\";\r\n\r\n  @Output() valueChange = new EventEmitter();\r\n  @Output() leave = new EventEmitter();\r\n  @Output() enterPress = new EventEmitter();\r\n\r\n\r\n\r\n  //validation input\r\n  @Input() required = true;\r\n  @Input() min = 0;\r\n  @Input() max = 9000000000000000; //Math.max 9000000000000000\r\n\r\n\r\n  @Input() infoMessage: string;\r\n  @Output() infoClick = new EventEmitter<void>();\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n  @Input() suffix: string;\r\n  isHovered = false;\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n  }\r\n\r\n  onInfoClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.infoClick.emit();\r\n  }\r\n\r\n  clear() {\r\n    // Clear both value and FormControl\r\n    this.value = \"\";\r\n    this.control.setValue(\"\", { emitEvent: false }); // emitEvent: false prevents double emission\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  leaved() {\r\n    this.leave.emit();\r\n  }\r\n\r\n  enterPressed() {\r\n    this.enterPress.emit();\r\n  }\r\n\r\n  //validation\r\n  control = new FormControl('', [Validators.required, Validators.min(this.min), Validators.max(this.max)]);\r\n\r\n  validate(control: FormControl): string {\r\n\r\n    if (this.required && control.hasError('required')) {\r\n      return `Required`;\r\n    }\r\n\r\n    if (parseFloat(this.value) < this.min){\r\n      return `Minimun value is ${this.min}`;\r\n    }\r\n\r\n    if (parseFloat(this.value) > this.max) {\r\n      return `Maximum value is ${this.max}`;\r\n    }\r\n\r\n    if (control.hasError('min')) {\r\n      return `Minimun value is ${this.min}`;\r\n    }\r\n\r\n    if (control.hasError('max')) {\r\n      return `Maximum value is ${this.max}`;\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n\r\n}\r\n","\r\n\r\n<mat-form-field hideRequiredMarker=\"true\" [hintLabel]=\"hint\" [hideRequiredMarker]=\"!required\" [ngStyle]=\"{'width':width ?? '100%'}\" hideRequiredMarker=\"true\" style=\"margin-right: 5px;\" subscriptSizing=\"dynamic\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <input matInput appCurrencyInputMask autocomplete=\"off\" style=\"text-align: right;\"\r\n  [min]=\"min\" [max]=\"max\"\r\n  (keyup.enter)=\"enterPressed()\" (blur)=\"leaved()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [readonly]=\"readonly\" />\r\n  <span *ngIf=\"currency!=''\" matPrefix>{{currency}}&nbsp;</span>\r\n  <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n\r\n</mat-form-field>\r\n\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { SelectCommonComponent } from '../select-common/select-common.component';\r\n\r\n@Component({\r\n    selector: 'spa-select-lite',\r\n    templateUrl: './select-lite.component.html',\r\n    styleUrls: ['./select-lite.component.css'],\r\n    standalone: false\r\n})\r\nexport class SelectLiteComponent extends SelectCommonComponent implements OnInit {\r\n\r\n  override ngOnInit(): void {\r\n\r\n    // Always load data if loadAction is provided to ensure fresh data after cache expiration\r\n    if (this.loadAction) {\r\n      this.getData(this.loadAction);\r\n    }\r\n\r\n  }\r\n\r\n}\r\n","<spa-select-common [width]=\"width\" [readonly]=\"readonly\" [required]=\"required\" [defaultFirstValue]=\"defaultFirstValue\"\r\n                   [readonlyMode]=\"readonlyMode\" [hint]=\"hint\" [placeholder]=\"placeholder\"\r\n                   [display]=\"display\" [(value)]=\"value\" [options]=\"options\" [masterOptions]=\"masterOptions\" [masterField]=\"masterField\"\r\n                   [optionValue]=\"optionValue\" [optionDisplay]=\"optionDisplay\" [optionDisplayExtra]=\"optionDisplayExtra\"\r\n                   [nullable]=\"nullable\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [loadAction]=\"loadAction\" [loadIDField]=\"loadIDField\" [field]=\"field\" [data]=\"data\"\r\n                   (valueChange)=\"valueChange.emit($event)\">\r\n</spa-select-common>\r\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\r\nimport { MatChipInputEvent } from '@angular/material/chips';\r\nimport { Observable } from 'rxjs';\r\nimport { map, startWith } from 'rxjs/operators';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { Action, ApiResponse } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n    selector: 'spa-text-multi',\r\n    templateUrl: './text-multi.component.html',\r\n    standalone: false\r\n})\r\nexport class TextMultiComponent implements OnInit {\r\n  constructor(private messageService: MessageService, private dataService: DataServiceLib) { }\r\n\r\n  @ViewChild('textInput') textInput: ElementRef<HTMLInputElement>;\r\n\r\n  @Input() display = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter<string>();\r\n  @Input() readonly = false;\r\n  @Input() required = true;\r\n  @Input() hint = \"\";\r\n  @Input() strict = false;\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n  @Input() options: any[] = [];\r\n  @Input() optionDisplay = \"name\"; // Default to name if not provided\r\n  @Input() optionValue = \"value\"; // Default to value if not provided\r\n\r\n  @Input() loadAction: Action;\r\n\r\n  values: string[] = [];\r\n  control = new FormControl('');\r\n  filteredOptions: Observable<any[]>;\r\n  errorState = false;\r\n  private selectedFromAutocomplete = false;\r\n\r\n  ngOnInit() {\r\n    this.values = this.value ? this.value.split(';').filter(val => val.trim() !== '') : [];\r\n    this.setupAutoComplete();\r\n    this.getData(this.loadAction);\r\n  }\r\n\r\n  ngOnChanges() {\r\n    if (this.options) {\r\n      this.setupAutoComplete();\r\n    }\r\n  }\r\n\r\n  private setupAutoComplete() {\r\n    this.filteredOptions = this.control.valueChanges.pipe(\r\n      startWith(''),\r\n      map(value => this.filterOptions(value))\r\n    );\r\n  }\r\n\r\n  private filterOptions(value: string): any[] {\r\n    if (!value || !this.options) return this.options || [];\r\n\r\n    const searchValue = value.toString().toLowerCase();\r\n    return this.options.filter(option => {\r\n      const displayValue = option[this.optionDisplay]?.toString().toLowerCase();\r\n      return displayValue?.includes(searchValue);\r\n    });\r\n  }\r\n\r\n  add(event: MatChipInputEvent): void {\r\n    // Skip validation if option was selected from autocomplete\r\n    if (this.selectedFromAutocomplete) {\r\n      this.selectedFromAutocomplete = false;\r\n      return;\r\n    }\r\n\r\n    const input = (event.value || '').trim();\r\n    if (!input) return;\r\n\r\n    if (this.strict) {\r\n      const found = this.options.find(opt => {\r\n        const optionDisplayValue = opt[this.optionDisplay]?.toString().toLowerCase();\r\n        const optionValue = opt[this.optionValue]?.toString().toLowerCase();\r\n        const inputLower = input.toLowerCase();\r\n        return optionDisplayValue === inputLower || optionValue === inputLower;\r\n      });\r\n\r\n      // if (!found) {\r\n      //   this.errorState = true;\r\n      //   this.hint = 'Value must be selected from the list';\r\n      //   return;\r\n      // }\r\n\r\n      this.addValue(found[this.optionValue]?.toString());\r\n    } else {\r\n      this.addValue(input);\r\n    }\r\n\r\n    this.resetInput();\r\n  }\r\n\r\n  private addValue(value: string): void {\r\n    if (!this.values.includes(value)) {\r\n      this.values.push(value);\r\n      this.errorState = false;\r\n      this.updateValue();\r\n    }\r\n  }\r\n\r\n  remove(value: string): void {\r\n    const index = this.values.indexOf(value);\r\n    if (index >= 0) {\r\n      this.values.splice(index, 1);\r\n      this.updateValue();\r\n    }\r\n  }\r\n\r\n  optionSelected(event: MatAutocompleteSelectedEvent): void {\r\n    const selectedOption = event.option.value;\r\n    if (selectedOption) {\r\n      this.selectedFromAutocomplete = true;\r\n      this.addValue(selectedOption[this.optionValue]?.toString());\r\n      this.resetInput();\r\n    }\r\n  }\r\n\r\n\r\n  private resetInput(): void {\r\n    // Reset form control\r\n    this.control.setValue('');\r\n\r\n    // Reset input element if available\r\n    if (this.textInput?.nativeElement) {\r\n      this.textInput.nativeElement.value = '';\r\n    }\r\n  }\r\n\r\n  updateValue(): void {\r\n    this.value = this.values.join(';');\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  clear(): void {\r\n    this.values = [];\r\n    this.updateValue();\r\n  }\r\n\r\n  getDisplayValue(value: string): string {\r\n    const option = this.options?.find(opt =>\r\n      opt[this.optionValue]?.toString() === value\r\n    );\r\n    return option ? option[this.optionDisplay]?.toString() : value;\r\n  }\r\n\r\n  copyValues(): void {\r\n    navigator.clipboard.writeText(this.value).then(() => {\r\n      this.messageService.toast('Copied');\r\n    });\r\n  }\r\n\r\n  isHovered = false;\r\n  @Output() hoverChange = new EventEmitter<boolean>();\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n    this.hoverChange.emit(true);\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n    this.hoverChange.emit(false);\r\n  }\r\n\r\n  refresh(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    if (!this.loadAction) {\r\n      return;\r\n    }\r\n\r\n    const refreshAction = {\r\n      ...this.loadAction,\r\n      forceRefresh: true\r\n    };\r\n\r\n    this.getData(refreshAction);\r\n  }\r\n\r\n  getData(action: Action) {\r\n    if (!action) return;\r\n    this.dataService.CallApi(action).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.options = apiResponse.data;\r\n        this.setupAutoComplete();\r\n      }\r\n    });\r\n  }\r\n}\r\n","<mat-form-field style=\"width: 100%;\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <mat-chip-grid #chipList>\r\n    <mat-chip-row *ngFor=\"let value of values\" [removable]=\"!readonly\" (removed)=\"remove(value)\">\r\n      {{getDisplayValue(value)}}\r\n      <button matChipRemove *ngIf=\"!readonly\"><mat-icon class=\"tinyIcon\">cancel</mat-icon></button>\r\n    </mat-chip-row>\r\n    <input #textInput autocomplete=\"off\" [placeholder]=\"readonly ? '' : display\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"[13, 186]\" [matChipInputAddOnBlur]=\"true\" (matChipInputTokenEnd)=\"add($event)\" [formControl]=\"control\" [readonly]=\"readonly\" [matAutocomplete]=\"auto\">\r\n  </mat-chip-grid>\r\n\r\n  <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"optionSelected($event)\">\r\n    <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"option\">\r\n      {{option[optionDisplay]}}\r\n    </mat-option>\r\n  </mat-autocomplete>\r\n\r\n  <mat-error *ngIf=\"errorState\">{{hint}}</mat-error>\r\n  <mat-hint *ngIf=\"hint && !errorState\">{{hint}}</mat-hint>\r\n\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <button mat-icon-button *ngIf=\"loadAction && isHovered\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" color=\"primary\">cached</mat-icon>\r\n    </button>\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"true\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { Action, ApiResponse } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n    selector: 'spa-select-multi',\r\n    templateUrl: './select-multi.component.html',\r\n    standalone: false\r\n})\r\nexport class SelectMultiComponent implements OnInit {\r\n  constructor(private messageService: MessageService, private dataService: DataServiceLib) { }\r\n\r\n  @Input() display = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter<string>();\r\n  @Input() readonly = false;\r\n  @Input() required = true;\r\n  @Input() hint = \"\";\r\n  @Input() options: any[] = [];\r\n  @Input() optionDisplay = \"name\";\r\n  @Input() optionValue = \"value\";\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n  @Input() nullable = false;\r\n  @Input() placeholder = \"\";\r\n  @Input() width = \"100%\";\r\n  @Input() suffix: string;\r\n\r\n  @Input() loadAction: Action;\r\n  @Input() selectAll = false; // Changed: auto-select all options when no value is set\r\n\r\n  control = new FormControl([]);\r\n  selectedValues: any[] = [];\r\n\r\n  ngOnInit() {\r\n    if (!this.placeholder) {\r\n      this.placeholder = `Select ${this.display}`;\r\n    }\r\n\r\n    if (this.readonly) {\r\n      this.control.disable();\r\n    }\r\n    // Always load data if loadAction is provided to ensure fresh data after cache expiration\r\n    if (this.loadAction){\r\n      this.getData(this.loadAction);\r\n    }else{\r\n      this.initializeValues();\r\n    }\r\n\r\n  }\r\n\r\n  ngOnChanges() {\r\n\r\n    if (this.readonly) {\r\n      this.control.disable();\r\n    } else {\r\n      this.control.enable();\r\n    }\r\n    this.initializeValues();\r\n  }\r\n\r\n  private initializeValues() {\r\n    if (this.value) {\r\n      const values = this.value.split(';')\r\n        .filter(v => v.trim())\r\n        .map(v => this.options.find(opt => opt[this.optionValue]?.toString() === v)\r\n          ? v : null)\r\n        .filter(v => v !== null);\r\n\r\n      this.selectedValues = values;\r\n      this.control.setValue(values);\r\n    } else if (this.selectAll && this.options?.length > 0) {\r\n      // Changed: auto-select all options when selectAll is true and no value is set\r\n      const allValues = this.options.map(opt => opt[this.optionValue]?.toString());\r\n      this.selectedValues = allValues;\r\n      this.control.setValue(allValues);\r\n      this.updateValue();\r\n    } else {\r\n      this.selectedValues = [];\r\n      this.control.setValue([]);\r\n    }\r\n  }\r\n\r\n  selectionChange(event: any): void {\r\n    this.selectedValues = event.value || [];\r\n    this.updateValue();\r\n  }\r\n\r\n  private updateValue(): void {\r\n    this.value = this.selectedValues.join(';');\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  getOptionDisplay(value: any): string {\r\n    const option = this.options?.find(opt =>\r\n      opt[this.optionValue]?.toString() === value?.toString()\r\n    );\r\n    return option ? option[this.optionDisplay] : value;\r\n  }\r\n\r\n  compareWith(v1: any, v2: any): boolean {\r\n    return v1?.toString() === v2?.toString();\r\n  }\r\n\r\n  clear(): void {\r\n    this.selectedValues = [];\r\n    this.control.setValue([]);\r\n    this.value = '';\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  copyValues(): void {\r\n    navigator.clipboard.writeText(this.value).then(() => {\r\n      this.messageService.toast('Copied');\r\n    });\r\n  }\r\n\r\n\r\n  isHovered = false;\r\n  @Output() hoverChange = new EventEmitter<boolean>();\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n    this.hoverChange.emit(true);\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n    this.hoverChange.emit(false);\r\n  }\r\n\r\n  refresh(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    if (!this.loadAction) {\r\n      return;\r\n    }\r\n\r\n    const refreshAction = {\r\n      ...this.loadAction,\r\n      forceRefresh: true\r\n    };\r\n\r\n    this.getData(refreshAction);\r\n  }\r\n\r\n  getData(action: Action) {\r\n    if (!action) return;\r\n    this.dataService.CallApi(action).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.options = apiResponse.data;\r\n        this.initializeValues();\r\n      }\r\n    });\r\n  }\r\n}\r\n","<mat-form-field [ngStyle]=\"{'width':width ?? '100%'}\" subscriptSizing=\"dynamic\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <mat-select [formControl]=\"control\" [required]=\"required\" multiple [placeholder]=\"placeholder\" [compareWith]=\"compareWith\" (selectionChange)=\"selectionChange($event)\">\r\n    <mat-option *ngIf=\"nullable\" [value]=\"null\">None</mat-option>\r\n    <mat-option *ngFor=\"let option of options\" [value]=\"option[optionValue]\">\r\n      {{option[optionDisplay]}}\r\n    </mat-option>\r\n  </mat-select>\r\n  <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <button mat-icon-button *ngIf=\"loadAction && isHovered\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n      <mat-icon class=\"tinyIcon\" color=\"primary\">cached</mat-icon>\r\n    </button>\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"true\" [(value)]=\"value\">\r\n    </spa-suffix>\r\n  </div>\r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { Action } from '../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-option',\r\n    templateUrl: './option.component.html',\r\n    styleUrls: ['./option.component.css'],\r\n    standalone: false\r\n})\r\nexport class OptionComponent implements OnInit {\r\n\r\n  constructor(private messageService: MessageService,) { }\r\n\r\n  ngOnInit(): void {\r\n    this.OGValue = this.value;\r\n  }\r\n\r\n  OGValue\r\n\r\n\r\n\r\n  @Input() options: any;\r\n  @Input() optionValue = \"\";\r\n  @Input() optionDisplay = \"\";\r\n  @Input() readonly = false;\r\n\r\n  @Input() type = \"text\";\r\n  @Input() value = \"\";\r\n  @Input() display = \"\";\r\n  @Input() show: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent = false;\r\n  @Input() suffix: string;\r\n\r\n  @Input() loadAction: Action;\r\n\r\n  @Output() valueChange = new EventEmitter();\r\n  @Output() enterPress = new EventEmitter();\r\n\r\n  changed() {\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  dateChanged(x){\r\n    this.value = x\r\n    this.changed()\r\n  }\r\n\r\n  enterPressed(){\r\n    this.enterPress.emit();\r\n  }\r\n\r\n  resetValue(){\r\n    this.value = this.OGValue;\r\n    this.changed();\r\n  }\r\n\r\n\r\n  onInfoClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n\r\n    if (this.infoMessage) {\r\n      this.messageService.info(this.infoMessage);\r\n    }\r\n  }\r\n\r\n\r\n\r\n}\r\n","\r\n<div class=\"tin-row gap-0\" style=\"align-items: center;\">\r\n\r\n  <mat-checkbox color=\"primary\" style=\"margin-right: 2px;\" [(ngModel)]=\"show\" (change)=\"resetValue()\" labelPosition=\"after\" [disabled]=\"required\" >{{display}}</mat-checkbox>\r\n\r\n  <ng-container *ngIf=\"show\" [ngSwitch]=\"type\">\r\n\r\n    <spa-date class=\"opt\" *ngSwitchCase=\"'date'\" [display]=\"display\" width=\"120px\"  [(value)]=\"value\" [display]=\"display\" (valueChange)=\"dateChanged($event)\" [infoMessage]=\"infoMessage\"\r\n    ></spa-date>\r\n\r\n    <spa-select-multi class=\"opt\" *ngSwitchCase=\"'select-multi'\" [display]=\"display\"  [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n      [copyContent]=\"copyContent\" [loadAction]=\"loadAction\" [infoMessage]=\"infoMessage\"\r\n    ></spa-select-multi>\r\n\r\n    <spa-text-multi class=\"opt\" *ngSwitchCase=\"'text-multi'\" [display]=\"display\"  [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n      [copyContent]=\"copyContent\" [loadAction]=\"loadAction\" [infoMessage]=\"infoMessage\"\r\n    ></spa-text-multi>\r\n\r\n    <spa-select-lite class=\"opt\" *ngSwitchCase=\"'select'\" [display]=\"display\"  [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n      [copyContent]=\"copyContent\" [loadAction]=\"loadAction\" [infoMessage]=\"infoMessage\"\r\n    ></spa-select-lite>\r\n\r\n    <spa-text-single class=\"opt\" *ngSwitchDefault [display]=\"display\" (enterPress)=\"enterPressed()\"  [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n      [suffix]=\"suffix\" [copyContent]=\"copyContent\" [loadAction]=\"loadAction\" [infoMessage]=\"infoMessage\"\r\n    ></spa-text-single>\r\n\r\n  </ng-container>\r\n\r\n  <button mat-icon-button *ngIf=\"infoMessage && !show\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\" style=\"opacity: 1;\">\r\n    <mat-icon class=\"tinyIcon\" style=\"color: steelblue;\">info</mat-icon>\r\n  </button>\r\n\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Core } from '../classes/TinCore';\r\n\r\n@Pipe({\r\n    name: 'camelToWords',\r\n    standalone: false\r\n})\r\nexport class CamelToWordsPipe implements PipeTransform {\r\n\r\n  transform(value: string): string {\r\n    return Core.camelToWords(value);\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Action, Tile, TileConfig, TileChartConfig, ApiResponse } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { Subject } from 'rxjs';\r\nimport { Chart, ChartData, ChartOptions, Plugin } from 'chart.js'; // Changed: Added Chart import for animation control\r\n\r\n// Changed: Compact callout plugin — projects labels strictly left/right to maximize pie vertical space\r\nconst TileCalloutPlugin: Plugin = {\r\n  id: 'tileCallout',\r\n  afterDraw: (chart: any) => {\r\n    const { ctx, canvas } = chart;\r\n    const meta = chart.getDatasetMeta(0);\r\n    if (!meta?.data?.length) return;\r\n\r\n    const dataset = chart.data.datasets[0];\r\n    const total = dataset.data.reduce((a: number, b: number) => a + b, 0);\r\n    if (total === 0) return;\r\n\r\n    const labels = chart.data.labels || [];\r\n    const colors = dataset.backgroundColor || [];\r\n\r\n    // Changed: Reset clip region so we can draw in the padding area outside chartArea\r\n    ctx.save();\r\n    ctx.resetTransform();\r\n    ctx.beginPath();\r\n    ctx.rect(0, 0, canvas.width, canvas.height);\r\n    ctx.clip();\r\n    const dpr = window.devicePixelRatio || 1;\r\n    ctx.scale(dpr, dpr);\r\n\r\n    // Changed: Collect callout positions per side, then space them vertically to avoid overlap\r\n    const leftItems: any[] = [];\r\n    const rightItems: any[] = [];\r\n\r\n    meta.data.forEach((arc: any, i: number) => {\r\n      const value = dataset.data[i];\r\n      const pct = Math.round((value / total) * 100);\r\n      if (pct < 8) return; // Changed: Skip small segments for tile readability\r\n\r\n      const midAngle = (arc.startAngle + arc.endAngle) / 2;\r\n      const outerRadius = arc.outerRadius;\r\n      const cx = arc.x;\r\n      const cy = arc.y;\r\n\r\n      // Changed: Edge point on arc circumference\r\n      const edgeX = cx + Math.cos(midAngle) * outerRadius;\r\n      const edgeY = cy + Math.sin(midAngle) * outerRadius;\r\n\r\n      // Changed: Determine left/right side based on segment position\r\n      const isRight = Math.cos(midAngle) >= 0;\r\n      const color = Array.isArray(colors) ? colors[i % colors.length] : '#333';\r\n      const item = { edgeX, edgeY, cx, cy, outerRadius, pct, label: labels[i] ? String(labels[i]) : '', color, isRight };\r\n      if (isRight) rightItems.push(item); else leftItems.push(item);\r\n    });\r\n\r\n    // Changed: Sort items by edgeY so vertical spacing works top-to-bottom\r\n    leftItems.sort((a: any, b: any) => a.edgeY - b.edgeY);\r\n    rightItems.sort((a: any, b: any) => a.edgeY - b.edgeY);\r\n\r\n    // Changed: Space labels vertically — minimum 12px apart (single row needs less gap)\r\n    const spaceLabels = (items: any[]) => {\r\n      const minGap = 12;\r\n      for (let j = 1; j < items.length; j++) {\r\n        if (items[j].edgeY - items[j - 1].edgeY < minGap) {\r\n          items[j].edgeY = items[j - 1].edgeY + minGap;\r\n        }\r\n      }\r\n    };\r\n    spaceLabels(leftItems);\r\n    spaceLabels(rightItems);\r\n\r\n    // Changed: Get canvas logical width for margin calculations\r\n    const cw = canvas.width / (window.devicePixelRatio || 1);\r\n\r\n    // Changed: Draw callouts — label name and percentage on the SAME row, side by side\r\n    const drawSide = (items: any[]) => {\r\n      items.forEach((item: any) => {\r\n        const { edgeX, edgeY, cx, outerRadius, pct, label, color, isRight } = item;\r\n\r\n        // Changed: Connector endpoint near the pie edge\r\n        const tailX = isRight ? cx + outerRadius + 10 : cx - outerRadius - 10;\r\n        const tailY = edgeY;\r\n\r\n        // Changed: Draw connector line from arc edge to label area\r\n        ctx.beginPath();\r\n        ctx.moveTo(edgeX, edgeY);\r\n        ctx.lineTo(tailX, tailY);\r\n        ctx.strokeStyle = '#bbb';\r\n        ctx.lineWidth = 0.8;\r\n        ctx.stroke();\r\n\r\n        // Changed: Same row layout — percentage near pie, label name at the margin edge\r\n        ctx.textBaseline = 'middle';\r\n        const textX = tailX + (isRight ? 3 : -3);\r\n\r\n        // Changed: Percentage closest to pie — bold, segment-colored\r\n        ctx.font = 'bold 9px Arial';\r\n        ctx.fillStyle = color;\r\n        ctx.textAlign = isRight ? 'left' : 'right';\r\n        ctx.fillText(pct + '%', textX, tailY);\r\n\r\n        // Changed: Label name further from pie — muted, at the outer margin edge\r\n        if (label) {\r\n          ctx.font = '8px Arial';\r\n          ctx.fillStyle = '#666';\r\n          if (isRight) {\r\n            const pctWidth = ctx.measureText(pct + '%').width;\r\n            ctx.textAlign = 'left';\r\n            ctx.fillText(label, textX + pctWidth + 3, tailY); // Changed: Right of percentage\r\n          } else {\r\n            const pctWidth = ctx.measureText(pct + '%').width;\r\n            ctx.textAlign = 'right';\r\n            ctx.fillText(label, textX - pctWidth - 3, tailY); // Changed: Left of percentage\r\n          }\r\n        }\r\n      });\r\n    };\r\n\r\n    drawSide(leftItems);\r\n    drawSide(rightItems);\r\n    ctx.restore();\r\n  }\r\n};\r\n\r\n@Component({\r\n    selector: 'spa-tiles',\r\n    templateUrl: './tiles.component.html',\r\n    styleUrls: ['./tiles.component.css'],\r\n    standalone: false\r\n})\r\nexport class TilesComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib, private messageService: MessageService,) { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    if (this.config){\r\n      this.tiles = this.config.tiles;\r\n\r\n      if (this.config?.loadAction && this.config.loadInit) {\r\n        this.loadData(this.config?.loadAction, \"\");\r\n      }\r\n    }\r\n\r\n    // Changed: Added null guard — reload is undefined when parent doesn't pass [reload] input\r\n    if (this.reload) {\r\n      this.reload.subscribe(v => {\r\n        if (v == true){\r\n          if (this.config?.loadAction) {\r\n            this.loadData(this.config?.loadAction, \"\");\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n  }\r\n\r\n  ngOnChanges() {\r\n\r\n  }\r\n\r\n  tiles: Tile[];\r\n  @Input() config: TileConfig;\r\n  @Output() tileActionSelected = new EventEmitter<Action>();\r\n\r\n  @Input() lastSearch;\r\n  @Input() data;\r\n  // @Input() clickable: boolean = false;\r\n  @Input() reload: Subject<boolean>;\r\n\r\n  @Output() tileClick = new EventEmitter();\r\n  @Output() tileUnClick = new EventEmitter();\r\n\r\n  selectedTile: string = \"\";\r\n\r\n\r\n  loadData(action: Action, data: any) {\r\n\r\n    if (action) {\r\n\r\n      if (action.method == 'post') {\r\n        data = this.lastSearch;\r\n      }\r\n\r\n      this.dataService.CallApi(action, data).subscribe((apiResponse: ApiResponse) => {\r\n\r\n        if (apiResponse.success) {\r\n          this.data = apiResponse.data\r\n        }\r\n        else {\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        }\r\n\r\n      });\r\n    }\r\n\r\n  }\r\n\r\n  clicked(clickedTile: Tile){\r\n\r\n\r\n\r\n    if(!this.config.clickable || clickedTile.action == undefined ) return;\r\n\r\n\r\n    if(this.selectedTile == clickedTile.name){\r\n      this.tileUnClick.emit({ name: clickedTile.name, data: clickedTile });\r\n      this.selectedTile = \"\";\r\n    }else{\r\n      this.tileClick.emit({name :clickedTile.name, data : clickedTile});\r\n      this.selectedTile = clickedTile.name;\r\n    }\r\n\r\n\r\n  }\r\n\r\n  pop(x){\r\n\r\n    if (x){\r\n      this.messageService.info(x);\r\n    }\r\n\r\n  }\r\n\r\n  isHidden(tile: Tile): boolean {\r\n    if (tile.hidden) {\r\n      return true;\r\n    }\r\n    if (tile.hiddenCondition) {\r\n      return tile.hiddenCondition(this.data);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  // Changed: Returns true only when data[tile.name] is a displayable primitive and not already shown by the chart\r\n  isTileValuePrimitive(tile: Tile): boolean {\r\n    if (tile.chart) return false; // Changed: Chart tiles display values via chart plugins (gauge center text, callouts), not as text below\r\n    const val = this.data?.[tile.name];\r\n    return val != null && typeof val !== 'object';\r\n  }\r\n\r\n  // Changed: Helper to check if tile chart has data to render — supports dynamic gauge values via dataField\r\n  hasTileChartData(tile: Tile): boolean {\r\n    const chart = tile.chart;\r\n    if (!chart) return false;\r\n    if (chart.gaugeValue != null) return true;\r\n    if (chart.data != null) return true;\r\n    if (chart.dataField && this.data?.[chart.dataField] != null) return true; // Changed: Use != null to support zero values\r\n    return false;\r\n  }\r\n\r\n  // Changed: Enhanced mini chart data builder — better colors, gradient fills, proper segment colors\r\n  getTileMiniChartData(tile: Tile): ChartData {\r\n    const chartConfig = tile.chart;\r\n    if (!chartConfig) return { labels: [], datasets: [] };\r\n\r\n    // Changed: Gauge mode — supports static gaugeValue OR dynamic value via dataField\r\n    const gaugeVal = chartConfig.gaugeValue ?? (chartConfig.type === 'doughnut' && chartConfig.dataField ? this.data?.[chartConfig.dataField] : null);\r\n    if (chartConfig.type === 'doughnut' && gaugeVal != null && typeof gaugeVal === 'number' && !chartConfig.data) {\r\n      return {\r\n        datasets: [{\r\n          data: [gaugeVal, 100 - gaugeVal],\r\n          backgroundColor: [chartConfig.gaugeColor ?? '#4acccd', '#f0f0f0'],\r\n          borderWidth: 0,\r\n          hoverOffset: 4\r\n        }]\r\n      };\r\n    }\r\n\r\n    // Changed: Get data from API response via dataField, or from inline data property\r\n    const chartData = this.data?.[chartConfig.dataField!] ?? chartConfig.data;\r\n    if (!chartData) return { labels: [], datasets: [] };\r\n\r\n    // If data is already Chart.js format (has datasets), apply colors if needed\r\n    if (chartData.datasets) {\r\n      // Changed: Apply configured colors to datasets that lack backgroundColor\r\n      if (chartConfig.colors?.length) {\r\n        chartData.datasets.forEach((ds: any) => {\r\n          if (!ds.backgroundColor) ds.backgroundColor = chartConfig.colors;\r\n        });\r\n      }\r\n      return chartData;\r\n    }\r\n\r\n    // Changed: Plain array data — wrap with appropriate styling per chart type\r\n    const color = chartConfig.color ?? '#4acccd';\r\n    if (chartConfig.type === 'line') {\r\n      return {\r\n        labels: chartData.map((_: any, i: number) => ''),\r\n        datasets: [{ data: chartData, borderColor: color, backgroundColor: color + '20', borderWidth: 2.5, fill: true, pointRadius: 0 }] // Changed: Gradient fill for sparklines\r\n      };\r\n    }\r\n    if (chartConfig.type === 'bar') {\r\n      return {\r\n        labels: chartData.map((_: any, i: number) => ''),\r\n        datasets: [{ data: chartData, backgroundColor: chartConfig.colors ?? [color], borderRadius: 3, borderWidth: 0 }] // Changed: Rounded bars, no border\r\n      };\r\n    }\r\n    // Changed: Pie/doughnut plain array\r\n    return {\r\n      labels: chartData.map((_: any, i: number) => `Segment ${i + 1}`),\r\n      datasets: [{ data: chartData, backgroundColor: chartConfig.colors ?? [color, '#e8e8e8'], borderWidth: 1, hoverOffset: 4 }]\r\n    };\r\n  }\r\n\r\n  // Changed: Enhanced mini chart options for sparklines — clean, no axes\r\n  getMiniChartOptions(tile: Tile): ChartOptions {\r\n    const chart = tile.chart;\r\n    if (!chart) return {};\r\n\r\n    // Changed: Animate once on initial load, then disable to prevent re-triggering on scroll/hover\r\n    const animateOnce = { onComplete: function(this: Chart) { this.options.animation = { duration: 0 }; } };\r\n\r\n    if (chart.type === 'doughnut') {\r\n      // Changed: Detect gauge mode — static gaugeValue OR dynamic value via dataField\r\n      const gaugeVal = chart.gaugeValue ?? (chart.dataField ? this.data?.[chart.dataField] : null);\r\n      const isGauge = gaugeVal != null && typeof gaugeVal === 'number' && !chart.data;\r\n      return {\r\n        responsive: true,\r\n        maintainAspectRatio: false,\r\n        animation: animateOnce, // Changed: Animate once then freeze\r\n        plugins: {\r\n          legend: { display: false },\r\n          tooltip: { enabled: !isGauge },\r\n          datalabels: { display: false }\r\n        },\r\n        cutout: isGauge ? '70%' : '45%',\r\n        layout: { padding: isGauge ? 4 : { top: 4, bottom: 4, left: 55, right: 55 } }\r\n      } as any;\r\n    }\r\n\r\n    if (chart.type === 'pie') {\r\n      return {\r\n        responsive: true,\r\n        maintainAspectRatio: false,\r\n        animation: animateOnce, // Changed: Animate once then freeze\r\n        plugins: {\r\n          legend: { display: false },\r\n          tooltip: { enabled: true, backgroundColor: 'rgba(0,0,0,0.8)', padding: 8, cornerRadius: 4 },\r\n          datalabels: { display: false }\r\n        },\r\n        layout: { padding: { top: 4, bottom: 4, left: 55, right: 55 } } // Changed: Minimal top/bottom — callouts project left/right only\r\n      } as any;\r\n    }\r\n\r\n    if (chart.type === 'bar') {\r\n      return {\r\n        responsive: true,\r\n        maintainAspectRatio: false,\r\n        animation: animateOnce, // Changed: Animate once then freeze\r\n        plugins: { legend: { display: false }, tooltip: { enabled: false }, datalabels: { display: false } },\r\n        scales: { x: { display: false }, y: { display: false } },\r\n        elements: { bar: { borderRadius: 2 } } // Changed: Subtle rounded bars\r\n      } as any;\r\n    }\r\n\r\n    // Changed: Line sparkline — smooth, no axes, gradient fill\r\n    return {\r\n      responsive: true,\r\n      maintainAspectRatio: false,\r\n      animation: animateOnce, // Changed: Animate once then freeze\r\n      plugins: { legend: { display: false }, tooltip: { enabled: false }, datalabels: { display: false } },\r\n      scales: { x: { display: false }, y: { display: false } },\r\n      elements: { line: { tension: 0.4, borderWidth: 2.5 }, point: { radius: 0 } }\r\n    } as any;\r\n  }\r\n\r\n  // Changed: Returns plugins array for tile mini charts — callout labels for pie/doughnut, center text for gauges\r\n  getTileChartPlugins(tile: Tile): Plugin[] {\r\n    const chart = tile.chart;\r\n    if (!chart) return [];\r\n\r\n    // Changed: Detect gauge mode — static gaugeValue OR dynamic value via dataField\r\n    const gaugeVal = chart.gaugeValue ?? (chart.dataField ? this.data?.[chart.dataField] : null);\r\n    const isGauge = chart.type === 'doughnut' && gaugeVal != null && typeof gaugeVal === 'number' && !chart.data;\r\n\r\n    // Changed: Add compact callout plugin for non-gauge pie/doughnut tiles\r\n    if (chart.type === 'pie' || (chart.type === 'doughnut' && !isGauge)) {\r\n      return [TileCalloutPlugin];\r\n    }\r\n\r\n    // Changed: Gauge center text — supports both static and dynamic gauge values\r\n    if (isGauge) {\r\n      return [{\r\n        id: 'tileCenterText',\r\n        afterDraw: (chartInstance: any) => {\r\n          const ctx = chartInstance.ctx;\r\n          const { width, height } = chartInstance;\r\n          ctx.save();\r\n          // Changed: Re-read dynamic gauge value from data on each draw cycle\r\n          const currentVal = chart.gaugeValue ?? (chart.dataField ? this.data?.[chart.dataField] : null);\r\n          const text = (currentVal ?? 0) + '%';\r\n          ctx.font = 'bold 18px Arial';\r\n          ctx.fillStyle = chart.gaugeColor ?? '#4acccd';\r\n          ctx.textAlign = 'center';\r\n          ctx.textBaseline = 'middle';\r\n          ctx.fillText(text, width / 2, height / 2);\r\n          ctx.restore();\r\n        }\r\n      }];\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n}\r\n","<!-- Changed: align-items-center vertically centers tiles of different heights for clean alignment -->\r\n<div class=\"d-flex row align-items-center justify-content-between\">\r\n  <ng-container *ngFor=\"let tile of tiles\">\r\n    <mat-card *ngIf=\"!isHidden(tile)\" class=\"col\" [class.selected-tile]=\"tile.name === selectedTile\" style=\"margin-left: 5px;margin-right: 5px; padding: 10px 16px ; min-width: 150px; margin-top: 5px;\" (click)=\"clicked(tile)\">\r\n\r\n      <!-- Changed: Chart-style tile — header, prominent chart, optional value, footer -->\r\n      <ng-container *ngIf=\"tile.chart; else standardTile\">\r\n        <!-- Changed: Header with tile name — left-aligned for better hierarchy -->\r\n        <div class=\"tile-chart-header\">\r\n          <span>{{tile.alias ?? tile.name | camelToWords}}</span>\r\n        </div>\r\n\r\n        <!-- Changed: Chart fills tile — uses helper method for reliable data detection -->\r\n        <div class=\"tile-chart\" *ngIf=\"hasTileChartData(tile)\" [style.height.px]=\"tile.chart.height ?? 120\">\r\n          <canvas baseChart\r\n            [type]=\"tile.chart.type\"\r\n            [data]=\"getTileMiniChartData(tile)\"\r\n            [options]=\"getMiniChartOptions(tile)\"\r\n            [plugins]=\"getTileChartPlugins(tile)\">\r\n          </canvas>\r\n        </div>\r\n\r\n        <!-- Changed: Optional value display below chart — only show primitive values, skip chart data objects -->\r\n        <div class=\"tile-chart-value\" *ngIf=\"tile.name && isTileValuePrimitive(tile)\">\r\n          <span class=\"tile-chart-value-text\" [style.color]=\"tile.color\">{{tile.prefix ?? ''}}{{data?.[tile.name]}}<span *ngIf=\"tile.suffix\"> {{tile.suffix}}</span></span>\r\n        </div>\r\n\r\n        <!-- Changed: Footer with divider for chart tiles -->\r\n        <div class=\"tile-footer\" *ngIf=\"tile.footer || tile.info\">\r\n          <mat-divider></mat-divider>\r\n          <div class=\"d-flex align-items-center\" style=\"gap: 4px; color: #9a9a9a; font-size: 12px; margin-top: 6px;\">\r\n            <mat-icon *ngIf=\"tile.footerIcon\" style=\"font-size: 16px; width: 16px; height: 16px;\">{{tile.footerIcon}}</mat-icon>\r\n            <mat-icon *ngIf=\"!tile.footerIcon && tile.info\" style=\"font-size: 16px; width: 16px; height: 16px; color: steelblue;\">info</mat-icon>\r\n            <span>{{tile.footer ?? tile.info}}</span>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <!-- Changed: Standard tile — Paper Dashboard style: icon left, label+value right, optional footer -->\r\n      <ng-template #standardTile>\r\n        <!-- Changed: Icon-style tile — icon left, label top-right, large value below -->\r\n        <ng-container *ngIf=\"tile.icon; else basicTile\">\r\n          <div class=\"tile-icon-row\">\r\n            <div class=\"tile-icon-wrap\" [style.color]=\"tile.color ?? '#2196f3'\">\r\n              <mat-icon>{{tile.icon}}</mat-icon>\r\n            </div>\r\n            <div class=\"tile-icon-content\">\r\n              <div class=\"tile-icon-label\">{{tile.alias ?? tile.name | camelToWords}}</div>\r\n              <div class=\"tile-icon-value\" [style.color]=\"tile.color\">\r\n                <span *ngIf=\"tile.prefix\">{{tile.prefix}}</span>{{data?.[tile.name] ?? 0}}<span *ngIf=\"tile.suffix\"> {{tile.suffix}}</span>\r\n                <span *ngIf=\"tile.badge && data?.[tile.badge]\" class=\"tile-badge\" [style.backgroundColor]=\"tile.badgeColor ?? '#4caf50'\">{{data?.[tile.badge]}}</span>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <!-- Changed: Footer with divider — info tooltip or custom footer text -->\r\n          <div class=\"tile-icon-footer\" *ngIf=\"tile.info || tile.footer\">\r\n            <mat-divider></mat-divider>\r\n            <div class=\"tile-icon-footer-content\">\r\n              <mat-icon *ngIf=\"tile.footerIcon\" class=\"tile-icon-footer-icon\">{{tile.footerIcon}}</mat-icon>\r\n              <mat-icon *ngIf=\"!tile.footerIcon && tile.info\" class=\"tile-icon-footer-icon\" style=\"color: steelblue;\">info</mat-icon>\r\n              <span>{{tile.footer ?? tile.info}}</span>\r\n            </div>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <!-- Basic tile fallback — centered number display (no icon) -->\r\n        <ng-template #basicTile>\r\n          <div class=\"row d-flex justify-content-center align-items-center\">\r\n            <div style=\"text-align: center;font-size: 30px;\">\r\n              <mat-label style=\"font-weight:bold;\" *ngIf=\"tile.prefix\" >{{tile.prefix}}</mat-label> &nbsp;\r\n              <mat-label style=\"font-weight:bold; text-align: center;\" [ngStyle]=\"{'color':tile.color }\">{{data?.[tile.name] ?? 0}}</mat-label>&nbsp;\r\n              <mat-label style=\"font-weight:bold;\" *ngIf=\"tile.suffix\">{{tile.suffix}}</mat-label>\r\n              <span *ngIf=\"tile.badge && data?.[tile.badge]\" class=\"tile-badge\" [style.backgroundColor]=\"tile.badgeColor ?? '#4caf50'\">{{data?.[tile.badge]}}</span>\r\n            </div>\r\n          </div>\r\n          <div class=\"row d-flex justify-content-center align-items-center\">\r\n            <div class=\"d-flex justify-content-center align-items-center\" style=\"text-align: center;\">\r\n              <mat-label style=\"padding-left:5px;padding-right:5px; text-align: center;font-size: 14px;\">{{tile.alias ?? tile.name | camelToWords}}</mat-label>\r\n              <mat-icon *ngIf=\"tile.info\" [matTooltip]=\"tile.info\" matTooltipPosition=\"above\" style=\"font-size: 20px; color:steelblue;\">info</mat-icon>\r\n            </div>\r\n          </div>\r\n        </ng-template>\r\n      </ng-template>\r\n\r\n    </mat-card>\r\n  </ng-container>\r\n</div>\r\n","import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';\r\nimport { ApiResponse, Step, StepConfig } from '../../classes/Classes';\r\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n    selector: 'spa-steps',\r\n    templateUrl: './steps.component.html',\r\n    styleUrls: ['./steps.component.css'],\r\n    providers: [{\r\n            provide: STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false }\r\n        }],\r\n    standalone: false\r\n})\r\nexport class StepsComponent implements OnInit {\r\n\r\n  constructor(private breakpointObserver: BreakpointObserver, private dataService: DataServiceLib ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.loadSteps();\r\n\r\n    this.observeScreenSize();\r\n  }\r\n\r\n\r\n  ngOnChanges() {\r\n    // this.pushSteps();\r\n    this.updateSelectedStep();\r\n  }\r\n\r\n  private observeScreenSize() {\r\n    this.breakpointObserver.observe([\"(max-width: 600px)\"]).subscribe((result: BreakpointState) => {\r\n      this.smallScreen = result.matches;\r\n    });\r\n  }\r\n\r\n  @ViewChild('stepper') stepper: MatStepper;\r\n  @Input() value = \"\";\r\n  @Input() config: StepConfig;\r\n  @Input() data;\r\n\r\n\r\n  selectedIndex = 0;\r\n  smallScreen = false;\r\n  steps: Step[] = [];\r\n\r\n  private loadSteps() {\r\n    // If loadAction is provided, fetch steps from backend\r\n    if (this.config?.loadAction) {\r\n      this.dataService.CallApi(this.config.loadAction).subscribe((response: ApiResponse) => {\r\n        if (response.success) {\r\n          this.steps = response.data;\r\n          this.updateSelectedStep();\r\n        }\r\n      });\r\n    } else {\r\n      // Use static steps if provided\r\n      this.steps = this.config?.steps ?? [];\r\n      this.updateSelectedStep();\r\n    }\r\n  }\r\n\r\n  private updateSelectedStep() {\r\n    if (!this.steps?.length) return;\r\n\r\n    // Get visible steps only\r\n    const visibleSteps = this.getVisibleSteps();\r\n    if (!visibleSteps.length) return;\r\n\r\n    // Get value from data object if valueField is specified\r\n    const currentValue = this.config?.valueField ?\r\n      this.data[this.config.valueField] : this.value;\r\n\r\n    // Find matching step index among visible steps\r\n    const index = visibleSteps.findIndex(step => step.value === currentValue);\r\n    this.selectedIndex = index >= 0 ? index : 0;\r\n\r\n    // Update stepper if already initialized\r\n    // if (this.stepper) {\r\n    //   this.stepper.selectedIndex = this.selectedIndex;\r\n\r\n    // }\r\n\r\n    // Update stepper if already initialized\r\n    if (this.stepper) {\r\n      // Loop through all previous steps to select them\r\n      let currentStep = 0;\r\n      const selectStepsInterval = setInterval(() => {\r\n        if (currentStep <= this.selectedIndex) {\r\n          this.stepper.selectedIndex = currentStep;\r\n          currentStep++;\r\n        } else {\r\n          clearInterval(selectStepsInterval);\r\n        }\r\n      }, 100); // 300ms delay between each step selection\r\n    }\r\n  }\r\n\r\n  get shouldShowLabels(): boolean {\r\n    const visibleSteps = this.getVisibleSteps();\r\n    return !(visibleSteps.length > 5 && this.smallScreen);\r\n  }\r\n\r\n  // New method to filter hidden steps\r\n  getVisibleSteps(): Step[] {\r\n    if (!this.steps?.length) return [];\r\n    return this.steps.filter(step => {\r\n      if (!step.hiddenCondition) return true;\r\n      return !step.hiddenCondition(this.data || {});\r\n    });\r\n  }\r\n\r\n\r\n}\r\n","\r\n<mat-horizontal-stepper class=\"transparent\" [labelPosition]=\"shouldShowLabels ? 'bottom' : 'end'\" #stepper [selectedIndex]=\"selectedIndex\">\r\n\r\n  <mat-step *ngFor=\"let step of getVisibleSteps()\"\r\n    [editable]=\"false\"  [label]=\"shouldShowLabels ? step.name : ''\" [state]=\"step.icon ?? 'number'\">\r\n  </mat-step>\r\n\r\n</mat-horizontal-stepper>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\nimport imageCompression from 'browser-image-compression';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-attach',\r\n    templateUrl: './attach.component.html',\r\n    styleUrls: ['./attach.component.scss'],\r\n    standalone: false\r\n})\r\nexport class AttachComponent implements OnInit {\r\n\r\n  constructor(private messageService : MessageService) { }\r\n\r\n  ngOnInit(): void {\r\n    // this.fileOptions = {allowedExtensions: ['.jpg', '.jpeg', '.png', '.gif'], maxSizeMB: 1, compressImages: true};\r\n  }\r\n\r\n  @Input() fileOptions: {\r\n    allowedExtensions?: string[];\r\n    maxSizeMB?: number;\r\n    compressImages?: boolean;\r\n  };\r\n  private readonly imageExtensions = ['.jpg', '.jpeg', '.png', '.gif'];\r\n\r\n  @Input() message = \"Drag and drop files here\"\r\n  @Input() files: any[] = [];\r\n  @Output() filesChange = new EventEmitter();\r\n  @Output() upload = new EventEmitter();\r\n\r\n\r\n  @Input() enableUpload = false;\r\n\r\n\r\n  onFileDropped($event) {\r\n    this.prepareFilesList($event);\r\n  }\r\n\r\n  fileBrowseHandler(event) {\r\n    let files = event.target.files;\r\n    this.prepareFilesList(files);\r\n  }\r\n\r\n\r\n  deleteFile(index: number) {\r\n    this.files.splice(index, 1);\r\n  }\r\n\r\n\r\n  async prepareFilesList(files: Array<any>) {\r\n    for (const file of files) {\r\n      const ext = this.getFileExtension(file.name);\r\n      if (this.fileOptions?.allowedExtensions && !this.fileOptions.allowedExtensions.includes(ext.toLowerCase())) {\r\n        this.messageService.toast(`File type ${ext} not allowed`);\r\n        continue;\r\n      }\r\n\r\n      let processedFile = file;\r\n      if (this.fileOptions?.compressImages && this.isImage(file.name)) {\r\n        try {\r\n          const options = {\r\n            maxSizeMB: this.fileOptions.maxSizeMB || 1,\r\n            maxWidthOrHeight: 1920,\r\n            useWebWorker: true\r\n          };\r\n          processedFile = await imageCompression(file, options);\r\n        } catch (error) {\r\n          this.messageService.toast(`Error compressing image: ${file.name}`);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      processedFile.progress = 0;\r\n      this.files.push(processedFile);\r\n    }\r\n    this.filesChange.emit(this.files);\r\n  }\r\n\r\n  // Add new helper methods\r\n  private getFileExtension(filename: string): string {\r\n    return filename.substring(filename.lastIndexOf('.')).toLowerCase();\r\n  }\r\n\r\n  private isImage(filename: string): boolean {\r\n    const ext = this.getFileExtension(filename);\r\n    return this.imageExtensions.includes(ext.toLowerCase());\r\n  }\r\n\r\n\r\n\r\n  formatBytes(bytes, decimals) {\r\n    if (bytes === 0) {\r\n      return '0 Bytes';\r\n    }\r\n    const k = 1024;\r\n    const dm = decimals <= 0 ? 0 : decimals || 2;\r\n    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\r\n  }\r\n\r\n  uploaded(){\r\n    this.upload.emit();\r\n  }\r\n\r\n  filesChanged(){\r\n    this.filesChange.emit(this.files);\r\n  }\r\n}\r\n","<div class=\"tin-input-row\" style=\"width: 100%;\">\r\n\r\n  <div class=\"col\">\r\n    <div class=\"container\" appDnd (fileDropped)=\"onFileDropped($event)\">\r\n      <input type=\"file\" #fileDropRef id=\"fileDropRef\" multiple (change)=\"fileBrowseHandler($event)\" />\r\n      <h4>{{message}}</h4>\r\n\r\n      <label for=\"fileDropRef\">Click to Browse</label>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"col\">\r\n    <div class=\"files-list \">\r\n      <div class=\"single-file \" style=\"width: 100%;\" *ngFor=\"let file of files; let i = index\">\r\n\r\n        <div class=\"tin-input-row info\" >\r\n          <h4 class=\"name\">\r\n            {{ file?.name }}\r\n          </h4>\r\n          <p class=\"size\">\r\n            {{ formatBytes(file?.size, 2) }}\r\n          </p>\r\n        </div>\r\n\r\n        <div class=\"delete\" (click)=\"deleteFile(i)\">\r\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"18\" viewBox=\"0 0 14 18\">\r\n            <path fill=\"#B1B1B1\" fill-rule=\"nonzero\"\r\n              d=\"M1 16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v10zm3.17-7.83a.996.996 0 0 1 1.41 0L7 9.59l1.42-1.42a.996.996 0 1 1 1.41 1.41L8.41 11l1.42 1.42a.996.996 0 1 1-1.41 1.41L7 12.41l-1.42 1.42a.996.996 0 1 1-1.41-1.41L5.59 11 4.17 9.58a.996.996 0 0 1 0-1.41zM10.5 1L9.79.29C9.61.11 9.35 0 9.09 0H4.91c-.26 0-.52.11-.7.29L3.5 1H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1h-2.5z\" />\r\n          </svg>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"files.length > 0 && enableUpload\" class=\"tin-input-row d-flex justify-content-center\" style=\"width: 100%;\" >\r\n      <button mat-button color=\"primary\" (click)=\"uploaded()\" matTooltip=\"Upload New Documents\" matTooltipPosition=\"above\"  ><mat-icon>file_upload</mat-icon> Upload</button>\r\n    </div>\r\n  </div>\r\n\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\n@Component({\r\n    selector: 'spa-chips',\r\n    templateUrl: './chips.component.html',\r\n    styleUrls: ['./chips.component.css'],\r\n    standalone: false\r\n})\r\nexport class ChipsComponent implements OnInit {\r\n\r\n  constructor(private messageService: MessageService) { }\r\n\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n\r\n  @Input() icon = \"\";\r\n  @Input() removable = false;\r\n  @Input() addable = false;\r\n\r\n\r\n\r\n  @Input() chips: string[];\r\n  // @Output() chipClick = new EventEmitter();\r\n\r\n  @Output() click = new EventEmitter();\r\n\r\n  @Output() remove = new EventEmitter();\r\n\r\n  clicked(chip: string) {\r\n\r\n    if (typeof chip != 'string') {\r\n      return;\r\n    }\r\n\r\n    if (chip) {\r\n      this.click.emit(chip);\r\n    }\r\n  }\r\n\r\n\r\n  removed(chip) {\r\n\r\n    // const index = this.chips.indexOf(chip);\r\n\r\n    // if (index >= 0) {\r\n    //   this.chips.splice(index, 1);\r\n    // }\r\n\r\n    this.messageService.confirm(`Remove ${chip} ?`).subscribe((result) => {\r\n      if (result == \"yes\") {\r\n\r\n        this.remove.emit(chip);\r\n\r\n      };\r\n    });\r\n\r\n  }\r\n\r\n}\r\n\r\n","\r\n\r\n\r\n<div class=\"row  mt-1\" style=\"margin-left: 1em;\">\r\n  <mat-chip-set>\r\n    <mat-chip *ngFor=\"let chip of chips let i = index\" [removable]=\"removable\" style=\"font-size: 12px;\" [ngStyle]=\"{'padding-right': removable ? '5px':'12px'}\" (click)=\"clicked(chip)\">\r\n      <mat-icon *ngIf=\"icon != ''\" color=\"primary\" style=\"font-size: 22px;\">{{icon}}</mat-icon>\r\n\r\n      {{chip}}\r\n\r\n      <button *ngIf=\"removable\" matChipRemove style=\"font-size: 20px; margin-left: 5px;margin-top: 3px;margin-right: 0px; color: grey;\" (click)=\"removed(chip)\"><mat-icon>cancel</mat-icon></button>\r\n    </mat-chip>\r\n  </mat-chip-set>\r\n</div>\r\n\r\n\r\n\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { LoaderService } from '../../services/loader.service';\r\n\r\n@Component({\r\n    selector: 'spa-loader',\r\n    templateUrl: './loader.component.html',\r\n    styleUrls: ['./loader.component.css'],\r\n    standalone: false\r\n})\r\nexport class LoaderComponent implements OnInit {\r\n\r\n  constructor(private loaderService: LoaderService) {\r\n\r\n    this.loaderService.isLoading.subscribe((v) => {\r\n      this.loading = v;\r\n    });\r\n\r\n  }\r\n  ngOnInit() {\r\n  }\r\n\r\n  @Input() logo = \"\";\r\n  loading: boolean = false;\r\n\r\n}\r\n","<div class=\"progress-loader\"  [hidden]=\"!loading\">\r\n  <div class=\"loading-spinner\">\r\n\r\n      <img *ngIf=\"logo==''\" style=\"width: 100px;\"\r\n      src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==\"\r\n\r\n      >\r\n\r\n      <img *ngIf=\"logo!=''\" [src]=\"logo\" style=\"width: 100px;\" />\r\n\r\n\r\n      <span id=\"loadingMessage\" class=\"loading-message\">Please wait...</span>\r\n  </div>\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n// Generic Terms and Conditions dialog component for tin-spa library\r\n@Component({\r\n  selector: 'spa-terms-dialog',\r\n  templateUrl: './terms-dialog.component.html',\r\n  styleUrls: ['./terms-dialog.component.css'],\r\n  standalone: false\r\n})\r\nexport class TermsDialogComponent {\r\n\r\n  constructor(private dialogRef: MatDialogRef<TermsDialogComponent>) { }\r\n\r\n  close() {\r\n    this.dialogRef.close();\r\n  }\r\n}\r\n","<h2 mat-dialog-title>Terms and Conditions</h2>\r\n\r\n<mat-dialog-content class=\"terms-content\">\r\n  <h3>1. Acceptance of Terms</h3>\r\n  <p>By accessing and using this application, you acknowledge that you have read, understood, and agree to be bound by these Terms and Conditions. If you do not agree to these terms, please do not use this application.</p>\r\n\r\n  <h3>2. Use of the Application</h3>\r\n  <p>You agree to use this application only for lawful purposes and in accordance with these Terms. You are responsible for ensuring that your use of the application complies with all applicable laws and regulations.</p>\r\n\r\n  <h3>3. User Accounts</h3>\r\n  <p>If you create an account, you are responsible for maintaining the confidentiality of your account credentials and for all activities that occur under your account. You agree to notify us immediately of any unauthorized use of your account.</p>\r\n\r\n  <h3>4. Intellectual Property</h3>\r\n  <p>All content, features, and functionality of this application, including but not limited to text, graphics, logos, and software, are the exclusive property of the application owner and are protected by copyright, trademark, and other intellectual property laws.</p>\r\n\r\n  <h3>5. User Content</h3>\r\n  <p>You retain ownership of any content you submit to the application. By submitting content, you grant us a non-exclusive, worldwide, royalty-free license to use, reproduce, and display such content in connection with the operation of the application.</p>\r\n\r\n  <h3>6. Limitation of Liability</h3>\r\n  <p>To the fullest extent permitted by law, we shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising out of or related to your use of this application.</p>\r\n\r\n  <h3>7. Disclaimer of Warranties</h3>\r\n  <p>This application is provided \"as is\" without warranties of any kind, either express or implied. We do not warrant that the application will be uninterrupted, error-free, or free of harmful components.</p>\r\n\r\n  <h3>8. Modifications to Terms</h3>\r\n  <p>We reserve the right to modify these Terms at any time. Changes will be effective immediately upon posting. Your continued use of the application after any changes constitutes acceptance of the new Terms.</p>\r\n\r\n  <h3>9. Termination</h3>\r\n  <p>We may terminate or suspend your access to the application at any time, without prior notice, for any reason, including breach of these Terms.</p>\r\n\r\n  <h3>10. Governing Law</h3>\r\n  <p>These Terms shall be governed by and construed in accordance with the laws of the jurisdiction in which the application owner operates, without regard to conflict of law principles.</p>\r\n\r\n  <h3>11. Contact Information</h3>\r\n  <p>If you have any questions about these Terms and Conditions, please contact us through the application's support channels.</p>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions align=\"end\">\r\n  <button mat-flat-button color=\"primary\" (click)=\"close()\">Close</button>\r\n</mat-dialog-actions>\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n// Generic Privacy Policy dialog component for tin-spa library\r\n@Component({\r\n  selector: 'spa-privacy-dialog',\r\n  templateUrl: './privacy-dialog.component.html',\r\n  styleUrls: ['./privacy-dialog.component.css'],\r\n  standalone: false\r\n})\r\nexport class PrivacyDialogComponent {\r\n\r\n  constructor(private dialogRef: MatDialogRef<PrivacyDialogComponent>) { }\r\n\r\n  close() {\r\n    this.dialogRef.close();\r\n  }\r\n}\r\n","<h2 mat-dialog-title>Privacy Policy</h2>\r\n\r\n<mat-dialog-content class=\"privacy-content\">\r\n  <h3>1. Information We Collect</h3>\r\n  <p>We collect information you provide directly, such as when you create an account, use our services, or contact us for support. This may include your name, email address, and other contact information.</p>\r\n\r\n  <h3>2. How We Use Your Information</h3>\r\n  <p>We use the information we collect to provide, maintain, and improve our services, communicate with you, and ensure the security of our platform. We may also use your information to send you updates and promotional materials, subject to your preferences.</p>\r\n\r\n  <h3>3. Information Sharing</h3>\r\n  <p>We do not sell your personal information. We may share your information with third-party service providers who assist us in operating our platform, subject to confidentiality obligations. We may also disclose information when required by law or to protect our rights.</p>\r\n\r\n  <h3>4. Data Security</h3>\r\n  <p>We implement appropriate technical and organizational measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet is completely secure.</p>\r\n\r\n  <h3>5. Cookies and Tracking</h3>\r\n  <p>We use cookies and similar tracking technologies to enhance your experience, analyze usage patterns, and deliver personalized content. You can control cookie settings through your browser preferences.</p>\r\n\r\n  <h3>6. Data Retention</h3>\r\n  <p>We retain your personal information for as long as necessary to fulfill the purposes for which it was collected, comply with legal obligations, resolve disputes, and enforce our agreements.</p>\r\n\r\n  <h3>7. Your Rights</h3>\r\n  <p>Depending on your location, you may have rights regarding your personal information, including the right to access, correct, delete, or port your data. You may also have the right to opt out of certain processing activities.</p>\r\n\r\n  <h3>8. Third-Party Links</h3>\r\n  <p>Our application may contain links to third-party websites or services. We are not responsible for the privacy practices of these third parties, and we encourage you to review their privacy policies.</p>\r\n\r\n  <h3>9. Children's Privacy</h3>\r\n  <p>Our services are not directed to children under the age of 13. We do not knowingly collect personal information from children. If you believe we have collected information from a child, please contact us immediately.</p>\r\n\r\n  <h3>10. Changes to This Policy</h3>\r\n  <p>We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new policy on this page and updating the effective date.</p>\r\n\r\n  <h3>11. Contact Us</h3>\r\n  <p>If you have any questions about this Privacy Policy or our data practices, please contact us through the application's support channels.</p>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions align=\"end\">\r\n  <button mat-flat-button color=\"primary\" (click)=\"close()\">Close</button>\r\n</mat-dialog-actions>\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { SignalRService, NotificationEvent } from '../../services/signalr.service';\nimport { Subscription } from 'rxjs';\nimport { trigger, transition, style, animate } from '@angular/animations';\n\n// Changed: Toast notification interface for cascading alerts\nexport interface ToastItem {\n  id: number;\n  message: string;\n  icon: string;\n  color: string;\n  category: string;\n  timestamp: Date;\n}\n\n@Component({\n  selector: 'spa-toast',\n  templateUrl: './toast.component.html',\n  styleUrls: ['./toast.component.css'],\n  standalone: false,\n  animations: [\n    trigger('toastAnim', [\n      transition(':enter', [\n        style({ opacity: 0, transform: 'translateX(100%)' }),\n        animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ opacity: 1, transform: 'translateX(0)' }))\n      ]),\n      transition(':leave', [\n        animate('250ms cubic-bezier(0.4, 0, 0.2, 1)', style({ opacity: 0, transform: 'translateX(100%)' }))\n      ])\n    ])\n  ]\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n\n  toasts: ToastItem[] = [];\n  private subs: Subscription[] = [];\n  private nextId = 0;\n  private maxToasts = 5;\n  private autoDismissMs = 5000; // Changed: Auto-dismiss after 5 seconds\n\n  constructor(private signalRService: SignalRService) {}\n\n  ngOnInit(): void {\n    // Changed: Subscribe to backend NotificationService broadcasts for toast alerts\n    this.subs.push(\n      this.signalRService.notificationReceived$.subscribe(event => this.show(event))\n    );\n  }\n\n  // Changed: Build toast from backend notification event\n  private show(event: NotificationEvent) {\n    const typeConfig: Record<string, { icon: string; color: string }> = {\n      info: { icon: 'info', color: '#2196f3' },\n      warn: { icon: 'warning', color: '#ff9800' },\n      error: { icon: 'error', color: '#f44336' },\n      success: { icon: 'check_circle', color: '#4caf50' }\n    };\n    const config = typeConfig[event.type] || typeConfig['info'];\n\n    const toast: ToastItem = {\n      id: this.nextId++,\n      message: event.message,\n      icon: config.icon,\n      color: config.color,\n      category: event.category,\n      timestamp: new Date()\n    };\n\n    this.toasts.unshift(toast); // Changed: Newest at top, pushes others down\n\n    if (this.toasts.length > this.maxToasts) {\n      this.toasts.pop();\n    }\n\n    setTimeout(() => this.dismiss(toast.id), this.autoDismissMs);\n  }\n\n  dismiss(id: number) {\n    this.toasts = this.toasts.filter(t => t.id !== id);\n  }\n\n  trackToast(index: number, toast: ToastItem): number {\n    return toast.id;\n  }\n\n  ngOnDestroy(): void {\n    this.subs.forEach(s => s.unsubscribe());\n  }\n}\n","<!-- Changed: Fixed-position toast container, top-right corner with cascading layout -->\n<div class=\"toast-container\">\n  <div *ngFor=\"let toast of toasts; trackBy: trackToast\"\n       class=\"toast-item\"\n       [@toastAnim]\n       (click)=\"dismiss(toast.id)\">\n    <div class=\"toast-accent\" [style.background-color]=\"toast.color\"></div>\n    <mat-icon class=\"toast-icon\" [style.color]=\"toast.color\">{{toast.icon}}</mat-icon>\n    <div class=\"toast-content\">\n      <span class=\"toast-category\">{{toast.category}}</span>\n      <span class=\"toast-message\">{{toast.message}}</span>\n    </div>\n    <mat-icon class=\"toast-close\">close</mat-icon>\n  </div>\n</div>\n","// Floating chat widget component for in-app Agent (renamed from AssistantComponent)\nimport { Component, OnInit, OnDestroy, ViewChild, ElementRef, AfterViewChecked, HostListener } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { AgentService, AgentMessage } from '../../services/agent.service';\nimport { SignalRService } from '../../services/signalr.service';\nimport { trigger, transition, style, animate } from '@angular/animations';\n\n@Component({\n  selector: 'spa-agent', // Changed: was spa-assistant\n  templateUrl: './agent.component.html',\n  styleUrls: ['./agent.component.css'],\n  standalone: false,\n  animations: [\n    trigger('slideUp', [\n      transition(':enter', [\n        style({ opacity: 0, transform: 'translateY(20px) scale(0.95)' }),\n        animate('250ms cubic-bezier(0.4, 0, 0.2, 1)', style({ opacity: 1, transform: 'translateY(0) scale(1)' }))\n      ]),\n      transition(':leave', [\n        animate('200ms cubic-bezier(0.4, 0, 0.2, 1)', style({ opacity: 0, transform: 'translateY(20px) scale(0.95)' }))\n      ])\n    ])\n  ]\n})\nexport class AgentComponent implements OnInit, OnDestroy, AfterViewChecked { // Changed: was AssistantComponent\n\n  @ViewChild('messageContainer') messageContainer!: ElementRef;\n  @ViewChild('messageInput') messageInput!: ElementRef;\n\n  messages: AgentMessage[] = [];\n  isOpen = false;\n  isTyping = false;\n  inputText = '';\n  greeting = '';\n  suggestedQuestions: string[] = [];\n  isOnline = false;\n\n  private subs: Subscription[] = [];\n  private shouldScroll = false;\n  private viewportHandler: (() => void) | null = null; // Changed: visualViewport resize handler reference\n\n  constructor(public agentService: AgentService, private signalRService: SignalRService) {} // Changed: was assistantService\n\n  get agentName(): string { // Changed: was assistantName\n    return this.agentService.agentName;\n  }\n\n  ngOnInit(): void {\n    this.agentService.loadConfig();\n    this.initMobileViewport(); // Changed: Listen for keyboard resize on mobile\n\n    this.subs.push(\n      this.agentService.messages$.subscribe(msgs => {\n        this.messages = msgs;\n        this.shouldScroll = true;\n      }),\n      this.agentService.isOpen$.subscribe(open => {\n        this.isOpen = open;\n        if (open) this.focusInput();\n      }),\n      this.agentService.typing$.subscribe(typing => {\n        this.isTyping = typing;\n        this.shouldScroll = true;\n      }),\n      this.agentService.greeting$.subscribe(g => this.greeting = g),\n      this.agentService.suggestedQuestions$.subscribe(q => this.suggestedQuestions = q),\n      this.signalRService.dataHubConnected$.subscribe(connected => this.isOnline = connected)\n    );\n  }\n\n  ngAfterViewChecked(): void {\n    if (this.shouldScroll) {\n      this.scrollToBottom();\n      this.shouldScroll = false;\n    }\n  }\n\n  toggleChat() {\n    this.agentService.toggle();\n  }\n\n  // Changed: Close chat when clicking outside the chat window and FAB button\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent) {\n    if (!this.isOpen) return;\n    const target = event.target as HTMLElement;\n    if (target.closest('.agent-window') || target.closest('.agent-fab')) return; // Click inside chat or FAB\n    this.agentService.close();\n  }\n\n  sendMessage() {\n    if (!this.inputText.trim()) return;\n    this.agentService.sendMessage(this.inputText.trim());\n    this.inputText = '';\n  }\n\n  sendSuggested(question: string) {\n    this.agentService.sendMessage(question);\n  }\n\n  onKeydown(event: KeyboardEvent) {\n    if (event.key === 'Enter' && !event.shiftKey) {\n      event.preventDefault();\n      this.sendMessage();\n    }\n  }\n\n  newConversation() {\n    this.agentService.newConversation();\n  }\n\n  private scrollToBottom() {\n    try {\n      if (this.messageContainer) {\n        this.messageContainer.nativeElement.scrollTop = this.messageContainer.nativeElement.scrollHeight;\n      }\n    } catch (e) {}\n  }\n\n  private focusInput() {\n    setTimeout(() => {\n      if (this.messageInput) {\n        this.messageInput.nativeElement.focus();\n      }\n    }, 300);\n  }\n\n  trackMessage(index: number, msg: AgentMessage): string {\n    return `${index}-${msg.role}-${msg.createdDate}`;\n  }\n\n  // Changed: Set --agent-vh CSS variable from visualViewport so the chat resizes when the mobile keyboard opens\n  private initMobileViewport() {\n    if (!window.visualViewport) return;\n    this.viewportHandler = () => {\n      const vh = window.visualViewport!.height;\n      document.documentElement.style.setProperty('--agent-vh', `${vh}px`);\n    };\n    window.visualViewport.addEventListener('resize', this.viewportHandler);\n    this.viewportHandler(); // Set initial value\n  }\n\n  ngOnDestroy(): void {\n    this.subs.forEach(s => s.unsubscribe());\n    if (this.viewportHandler && window.visualViewport) {\n      window.visualViewport.removeEventListener('resize', this.viewportHandler);\n    }\n  }\n}\n","<!-- Floating chat widget for in-app Agent (renamed from Assistant) -->\n\n<!-- FAB toggle button -->\n<button mat-fab class=\"agent-fab\" (click)=\"toggleChat()\" [matTooltip]=\"agentName\">\n  <mat-icon>{{ isOpen ? 'close' : 'chat_bubble' }}</mat-icon>\n</button>\n\n<!-- Chat window -->\n<div class=\"agent-window\" *ngIf=\"isOpen\" @slideUp>\n\n  <!-- Header with online status -->\n  <div class=\"agent-header\">\n    <div class=\"header-info\">\n      <mat-icon class=\"header-icon\">smart_toy</mat-icon>\n      <div class=\"header-text\">\n        <span class=\"header-title\">{{ agentName }}</span>\n        <span class=\"status-badge\" [class.online]=\"isOnline\" [class.offline]=\"!isOnline\">\n          <span class=\"status-dot\"></span>\n          {{ isOnline ? 'Online' : 'Offline' }}\n        </span>\n      </div>\n    </div>\n    <div class=\"header-actions\">\n      <button mat-icon-button matTooltip=\"New conversation\" (click)=\"newConversation()\">\n        <mat-icon>add_comment</mat-icon>\n      </button>\n      <button mat-icon-button matTooltip=\"Close\" (click)=\"toggleChat()\">\n        <mat-icon>remove</mat-icon>\n      </button>\n    </div>\n  </div>\n\n  <!-- Messages area -->\n  <div class=\"agent-messages\" #messageContainer>\n\n    <!-- Welcome experience (show when no messages) -->\n    <div class=\"agent-greeting\" *ngIf=\"messages.length === 0\">\n      <mat-icon class=\"greeting-icon\">smart_toy</mat-icon>\n      <p class=\"greeting-text\">{{ greeting }}</p>\n\n      <!-- Three capability pillars -->\n      <div class=\"capability-pillars\">\n\n        <!-- Pillar 1: Navigate & Inquire -->\n        <div class=\"pillar\" (click)=\"sendSuggested('How do I post a transaction?')\">\n          <div class=\"pillar-header\">\n            <mat-icon class=\"pillar-icon\">explore</mat-icon>\n            <span class=\"pillar-title\">Ask & Navigate</span>\n          </div>\n          <p class=\"pillar-desc\">Ask how to do things or find features in the app</p>\n          <span class=\"pillar-example\">\"How do I post a transaction?\"</span>\n        </div>\n\n        <!-- Pillar 2: Create & Modify -->\n        <div class=\"pillar\" (click)=\"sendSuggested('Create a new customer')\">\n          <div class=\"pillar-header\">\n            <mat-icon class=\"pillar-icon\">edit_note</mat-icon>\n            <span class=\"pillar-title\">Create & Modify</span>\n          </div>\n          <p class=\"pillar-desc\">Add, edit, or delete records using natural language</p>\n          <span class=\"pillar-example\">\"Create a new customer called Acme Ltd\"</span>\n        </div>\n\n        <!-- Pillar 3: Get Information -->\n        <div class=\"pillar\" (click)=\"sendSuggested('List all accounts')\">\n          <div class=\"pillar-header\">\n            <mat-icon class=\"pillar-icon\">search</mat-icon>\n            <span class=\"pillar-title\">Get Information</span>\n          </div>\n          <p class=\"pillar-desc\">Retrieve details, list records, or get summaries</p>\n          <span class=\"pillar-example\">\"Show me the details of Customer A\"</span>\n        </div>\n\n      </div>\n    </div>\n\n    <!-- Message bubbles -->\n    <div *ngFor=\"let msg of messages; trackBy: trackMessage\" class=\"message-row\" [class.user-row]=\"msg.role === 'user'\" [class.agent-row]=\"msg.role === 'assistant'\">\n      <div class=\"message-bubble\" [class.user-bubble]=\"msg.role === 'user'\" [class.agent-bubble]=\"msg.role === 'assistant'\">\n        {{ msg.content }}\n      </div>\n    </div>\n\n    <!-- Typing indicator -->\n    <div class=\"message-row agent-row\" *ngIf=\"isTyping\">\n      <div class=\"message-bubble agent-bubble typing-bubble\">\n        <span class=\"typing-dot\"></span>\n        <span class=\"typing-dot\"></span>\n        <span class=\"typing-dot\"></span>\n      </div>\n    </div>\n\n  </div>\n\n  <!-- Input area -->\n  <div class=\"agent-input\">\n    <mat-form-field appearance=\"outline\" class=\"input-field\">\n      <input matInput #messageInput placeholder=\"Type a message...\" [(ngModel)]=\"inputText\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" />\n    </mat-form-field>\n    <button mat-icon-button color=\"primary\" class=\"send-btn\" (click)=\"sendMessage()\" [disabled]=\"!inputText.trim()\">\n      <mat-icon>send</mat-icon>\n    </button>\n  </div>\n\n</div>\n","import { AppConfig, CapItem, } from './../../classes/Classes';\r\nimport { Component, OnInit, Input, HostListener } from '@angular/core'; // Changed: Added HostListener for scroll detection\r\nimport { Router, NavigationEnd } from '@angular/router'; // Changed: Added NavigationEnd for active route tracking\r\nimport {  AuthService } from '../../services/auth.service';\r\nimport { StorageService } from '../../services/storage.service';\r\n\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { NotificationsService } from '../../services/notifications.service';\r\nimport { SubscriptionService } from '../../services/subscription.service'; // Added: Subscription service for feature gating\r\nimport { filter } from 'rxjs/operators'; // Changed: Added filter for NavigationEnd subscription\r\nimport { MatDialog } from '@angular/material/dialog'; // Changed: Added MatDialog for terms/privacy dialogs\r\nimport { TermsDialogComponent } from '../terms-dialog/terms-dialog.component'; // Changed: Added terms dialog\r\nimport { PrivacyDialogComponent } from '../privacy-dialog/privacy-dialog.component'; // Changed: Added privacy dialog\r\n\r\n\r\n@Component({\r\n    selector: 'spa-nav-menu',\r\n    templateUrl: './nav-menu.component.html',\r\n    styleUrls: ['./nav-menu.component.css'],\r\n    standalone: false\r\n})\r\nexport class NavMenuComponent {\r\n\r\n\r\n  constructor(public router: Router, public authService: AuthService, private storageService: StorageService, private notificationsService: NotificationsService,\r\n    private breakpointObserver: BreakpointObserver, public dataService: DataServiceLib, private dialog: MatDialog, public subscriptionService: SubscriptionService) { // Changed: Added SubscriptionService for feature gating\r\n\r\n    this.notificationCount$ = this.notificationsService.notificationCount$;\r\n    \r\n    // detect screen size changes\r\n    this.breakpointObserver.observe([\"(max-width: 600px)\"]).subscribe((result: BreakpointState) => {\r\n\r\n      if (result.matches) {\r\n        this.smallScreen = true\r\n      } else {\r\n        this.smallScreen = false\r\n      }\r\n\r\n    });\r\n   }\r\n\r\n  ngOnInit() {\r\n\r\n    this.authService.loggedUserFullName.subscribe(user => this.loggedUserFullName = user)\r\n    this.authService.myRoleObserv.subscribe(rol => this.myRole = rol);\r\n    this.authService.loggedinObserv.subscribe(obj => this.loggedin = obj)\r\n    this.authService.tenantNameObserv.subscribe(obj => this.tenantName = obj)\r\n\r\n    if (!this.smallScreen) {\r\n      this.isExpanded = true;\r\n    }\r\n\r\n    // Changed: Track current URL for side-modern active route highlighting\r\n    this.currentUrl = this.router.url;\r\n    this.router.events.pipe(\r\n      filter(event => event instanceof NavigationEnd)\r\n    ).subscribe((event: NavigationEnd) => {\r\n      this.currentUrl = event.urlAfterRedirects || event.url;\r\n    });\r\n\r\n  }\r\n\r\n\r\n  notificationCount$;\r\n  smallScreen\r\n  myRole;\r\n  loggedUserFullName: string;\r\n  tenantName : string;\r\n  loggedin: boolean;\r\n  isExpanded = false;\r\n\r\n  nowDate = new Date()\r\n\r\n  // Changed: Side-modern navigation properties\r\n  isMiniSidebar = false; // Mini/icon-only mode toggle\r\n  isMiniHovered = false; // Hover state over mini sidebar\r\n  openMenus = new Set<string>(); // Tracks which parent menus are expanded\r\n  currentUrl = ''; // Current URL for active route detection\r\n  topbarScrolled = false; // Changed: Tracks scroll state for topbar transparency\r\n\r\n  // Changed: Detect scroll to toggle topbar frosted glass effect\r\n  @HostListener('window:scroll')\r\n  onWindowScroll() {\r\n    this.topbarScrolled = window.scrollY > 30;\r\n  }\r\n\r\n\r\n  @Input() appConfig = new AppConfig();\r\n  @Input() footer: string = 'alsquaretech.net';\r\n\r\n\r\n\r\n  collapse() {\r\n    this.isExpanded = false;\r\n  }\r\n\r\n  toggle() {\r\n    this.isExpanded = !this.isExpanded;\r\n  }\r\n\r\n  closeSide() {\r\n    this.isExpanded = false;\r\n  }\r\n\r\n  logoff() {\r\n    this.authService.logoff();\r\n  }\r\n\r\n  redirectTo(link: string){\r\n\r\n    this.collapse();\r\n\r\n    if (link!=\"\"){\r\n      this.router.navigate([link]);\r\n    }\r\n\r\n  }\r\n\r\n\r\n  getSubItems(capItem : CapItem) : CapItem[] {\r\n    return capItem.capSubItems.filter(x => x.showMenu && !x.isBool );\r\n  }\r\n\r\n  // Added: Check if a capItem is enabled by subscription plan (featureKey gating)\r\n  isFeatureAllowed(cap: CapItem): boolean {\r\n    if (!cap.featureKey) return true; // No feature restriction\r\n    return this.subscriptionService.isModuleEnabled(cap.featureKey);\r\n  }\r\n\r\n  // Returns reversed capItems for top navigation display\r\n  get reversedCapItems(): CapItem[] {\r\n    return this.appConfig.capItems ? [...this.appConfig.capItems].reverse() : [];\r\n  }\r\n\r\n  // Changed: Opens terms dialog or redirects to URL based on appConfig\r\n  openTerms() {\r\n    if (this.appConfig.termsUrl && this.appConfig.termsUrl.trim() !== '') {\r\n      window.open(this.appConfig.termsUrl, '_blank');\r\n    } else {\r\n      this.dialog.open(TermsDialogComponent, { width: '600px', maxHeight: '80vh' });\r\n    }\r\n  }\r\n\r\n  // Changed: Opens privacy dialog or redirects to URL based on appConfig\r\n  openPrivacy() {\r\n    if (this.appConfig.privacyUrl && this.appConfig.privacyUrl.trim() !== '') {\r\n      window.open(this.appConfig.privacyUrl, '_blank');\r\n    } else {\r\n      this.dialog.open(PrivacyDialogComponent, { width: '600px', maxHeight: '80vh' });\r\n    }\r\n  }\r\n\r\n  // Changed: Toggle mini/icon-only sidebar mode\r\n  toggleMiniSidebar() {\r\n    this.isMiniSidebar = !this.isMiniSidebar;\r\n    this.isMiniHovered = false;\r\n  }\r\n\r\n  // Changed: Hover handlers for mini sidebar overlay expansion\r\n  onMiniMouseEnter() {\r\n    if (this.isMiniSidebar) this.isMiniHovered = true;\r\n  }\r\n\r\n  onMiniMouseLeave() {\r\n    if (this.isMiniSidebar) this.isMiniHovered = false;\r\n  }\r\n\r\n  // Changed: Toggle parent menu expand/collapse in side-modern\r\n  toggleModernMenu(capName: string) {\r\n    if (this.openMenus.has(capName)) {\r\n      this.openMenus.delete(capName);\r\n    } else {\r\n      this.openMenus.add(capName);\r\n    }\r\n  }\r\n\r\n  // Changed: Check if parent menu is expanded\r\n  isMenuOpen(capName: string): boolean {\r\n    return this.openMenus.has(capName);\r\n  }\r\n\r\n  // Changed: Check if route matches current URL (supports HashLocationStrategy)\r\n  isActiveRoute(link: string): boolean {\r\n    if (!link || !this.currentUrl) return false;\r\n    const cleanUrl = this.currentUrl.replace(/^#\\//, '/').split('?')[0];\r\n    const cleanLink = '/' + link.replace(/^\\//, '');\r\n    return cleanUrl === cleanLink;\r\n  }\r\n\r\n  // Changed: Check if any sub-item of a parent is active\r\n  isParentActive(cap: CapItem): boolean {\r\n    if (!cap.capSubItems) return false;\r\n    return cap.capSubItems.some(sub => this.isActiveRoute(sub.link));\r\n  }\r\n\r\n  // Changed: Generate letter initials for sub-items without specific icons\r\n  getInitials(display: string): string {\r\n    if (!display) return '?';\r\n    const words = display.trim().split(/\\s+/);\r\n    return words.length > 1\r\n      ? (words[0][0] + words[1][0]).toUpperCase()\r\n      : display.substring(0, 2).toUpperCase();\r\n  }\r\n\r\n  // Changed: Navigate and close sidebar on mobile for side-modern\r\n  modernNavigate(link: string) {\r\n    if (link) this.router.navigate([link]);\r\n    if (this.smallScreen) this.isExpanded = false;\r\n  }\r\n\r\n  // Changed: Whether side-modern sidebar should display as expanded\r\n  get isModernExpanded(): boolean {\r\n    return !this.isMiniSidebar || this.isMiniHovered;\r\n  }\r\n\r\n}\r\n","<header *ngIf=\"loggedin && dataService.appConfig.navigation == 'top'\">\r\n\r\n  <!-- Changed: Removed mb-3 class to eliminate gap between toolbar and content -->\r\n  <nav class=\"toolbar navbar navbar-expand-sm navbar-toggleable-sm navbar-light border-bottom box-shadow\" style=\"padding-right: 10px;\">\r\n\r\n\r\n    <div class=\"container-fluid\" style=\"padding-right: 0px;\">\r\n\r\n      <img *ngIf=\"appConfig.logo!=''\" [src]=\"appConfig.logo\" style=\"height: 50px; margin-right: 2em\" />\r\n\r\n      <div>\r\n            <!-- <div style=\"font-size: 20px;\">\r\n              {{appConfig.appName}}\r\n            </div>\r\n\r\n            <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px;\">\r\n              {{tenantName}}\r\n            </div> -->\r\n\r\n        <div *ngIf=\"!dataService.appConfig.multitenant\" style=\"font-size: 22px;\">\r\n          {{appConfig.appName}}\r\n        </div>\r\n\r\n        <div *ngIf=\"dataService.appConfig.multitenant\" style=\"font-size: 20px; ; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n          {{appConfig.appName}}\r\n        </div>\r\n\r\n        <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n          {{tenantName}}\r\n        </div>\r\n\r\n      </div>\r\n\r\n\r\n\r\n      <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\".navbar-collapse\" aria-label=\"Toggle navigation\" [attr.aria-expanded]=\"isExpanded\" (click)=\"toggle()\">\r\n        <span class=\"navbar-toggler-icon\"></span>\r\n      </button>\r\n\r\n      <div *ngIf=\"myRole\" class=\" navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse stack-top\" style=\"margin-right: 0px;\" [ngClass]=\"{ show: isExpanded, navitems: isExpanded }\" >\r\n\r\n        <button mat-icon-button (click)=\"logoff()\" > <mat-icon>logout</mat-icon> </button>\r\n\r\n        <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n          <button mat-icon-button (click)=\"redirectTo('home/tenancy/settings')\" > <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button>\r\n\r\n          <!-- Removed: Support icon — replaced by floating assistant chat widget -->\r\n        </div>\r\n\r\n\r\n        <button id=\"btnUser\" mat-button [matMenuTriggerFor]=\"profileMenu\"  ><mat-icon style=\"font-size: 24px;\">account_circle</mat-icon>  &nbsp;{{loggedUserFullName}}</button>\r\n\r\n        <mat-menu #profileMenu=\"matMenu\">\r\n          <button id=\"btnProfile\" mat-menu-item (click)=\"redirectTo('home/user/profile')\" >Profile</button>\r\n          <button id=\"btnLogOff\" mat-menu-item (click)=\"logoff()\">Log Off</button>\r\n        </mat-menu>\r\n\r\n        <div *ngFor=\"let item of reversedCapItems\">\r\n\r\n          <!-- Menu Item — Added: isFeatureAllowed check for plan-based gating -->\r\n          <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && !item.capSubItems && item.showMenu && isFeatureAllowed(item)\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n          <!-- Menu Item with Sub items ignored — Added: isFeatureAllowed check -->\r\n          <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && item.ignoreSubsDisplay && isFeatureAllowed(item)\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n          <!-- Menu Item with Sub items to display — Added: isFeatureAllowed check -->\r\n          <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && !item.ignoreSubsDisplay && isFeatureAllowed(item)\" mat-button [matMenuTriggerFor]=\"adminMenu\">{{item.display}}</button>\r\n\r\n\r\n          <!-- Sub Menu Items — Added: isFeatureAllowed check on sub-items -->\r\n          <mat-menu #adminMenu=\"matMenu\">\r\n\r\n            <div *ngFor=\"let subItem of item.capSubItems\">\r\n\r\n              <button *ngIf=\"myRole[subItem.name] && subItem.showMenu && isFeatureAllowed(subItem)\" mat-menu-item (click)=\"redirectTo(subItem.link)\">{{subItem.display}}</button>\r\n\r\n            </div>\r\n\r\n          </mat-menu>\r\n\r\n        </div>\r\n\r\n      </div>\r\n\r\n\r\n    </div>\r\n\r\n  </nav>\r\n\r\n</header>\r\n\r\n<!-- Changed: Removed top/bottom padding to eliminate gaps, but kept left/right padding for content spacing -->\r\n<div class=\"container-fluid tin-bg-image\" *ngIf=\"dataService.appConfig.navigation == 'top'\" style=\"padding: 12px 12px; margin: 0;\">\r\n  <router-outlet></router-outlet>\r\n  <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- SIDE -->\r\n<mat-toolbar class=\"tin-bg-image-toolbar\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\" style=\"padding: 0px 8px;\">\r\n\r\n  <button mat-icon-button (click)=\"toggle()\" matTooltip=\"Menu\">\r\n    <mat-icon>menu</mat-icon>\r\n  </button>\r\n\r\n  <img [src]=\"dataService.appConfig.logo\" style=\"height: 50px;\" />\r\n\r\n  <div style=\"padding-left: 10px; \">\r\n\r\n    <div style=\"font-size: 22px; font-weight: 400;\">\r\n      {{appConfig.appName}}\r\n    </div>\r\n\r\n    <!-- <div style=\"font-size: 20px; height: 25px; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n      {{appConfig.appName}}\r\n    </div> -->\r\n\r\n    <!-- <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n      {{tenantName}}\r\n    </div> -->\r\n\r\n  </div>\r\n\r\n\r\n\r\n  <span class=\"toolbar-item-spacer\"></span>\r\n\r\n  <!-- buttons -->\r\n\r\n  <div *ngIf=\"dataService.appConfig.multitenant\" style=\"display: flex; align-items: center;\">\r\n\r\n    <!-- <label style=\"font-size: 14px;\">Hi, {{loggedUserFullName}}</label> -->\r\n\r\n    <button mat-icon-button (click)=\"redirectTo('home/tenancy/settings')\" matTooltip=\"Organisation Settings\">\r\n      <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon>\r\n    </button>\r\n    <label style=\"font-size: 14px;margin-right: 20px;\">{{tenantName}}</label>\r\n\r\n    <!-- Changed: Support/help icon removed — replaced by floating agent chat widget -->\r\n\r\n    <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/workflow/notifications')\" matTooltip=\"Notifications\">\r\n      <mat-icon [matBadge]=\"notificationCount$ | async\" [matBadgeHidden]=\"(notificationCount$ | async) === 0\" matBadgeColor=\"warn\" matBadgeSize=\"small\">notifications</mat-icon>\r\n    </button>\r\n\r\n  </div>\r\n\r\n\r\n\r\n  <button mat-icon-button matTooltip=\"My Account\" [matMenuTriggerFor]=\"userAccountMenu\"><mat-icon>account_circle</mat-icon></button>\r\n  <label style=\"font-size: 14px;\">{{loggedUserFullName}}</label>\r\n\r\n  <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"logoff()\"  matTooltip=\"Signout\">\r\n    <mat-icon>logout</mat-icon>\r\n  </button>\r\n\r\n\r\n  <!-- my account menu -->\r\n  <mat-menu #userAccountMenu [overlapTrigger]=\"false\" yPosition=\"below\">\r\n\r\n\r\n    <button mat-menu-item routerLink=\"home/user/profile\">\r\n      <mat-icon>person</mat-icon><span>Profile</span>\r\n    </button>\r\n\r\n    <!-- Removed: Help menu item — replaced by floating assistant chat widget -->\r\n\r\n    <mat-divider></mat-divider>\r\n\r\n    <button mat-menu-item (click)=\"logoff()\">\r\n      <mat-icon>logout</mat-icon>Logout\r\n    </button>\r\n\r\n  </mat-menu>\r\n\r\n</mat-toolbar>\r\n\r\n\r\n\r\n\r\n<mat-sidenav-container class=\"app-container\" [hasBackdrop]=\"smallScreen\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n\r\n  <mat-sidenav #sidenav [mode]=\"smallScreen ? 'over' : 'side'\" [class.mat-elevation-z4]=\"true\" [opened]=\"isExpanded\"  class=\"app-sidenav side-color\" style=\"height: 100%;\"\r\n  [ngStyle]=\"{'width': dataService.appConfig.navWidth}\">\r\n    <mat-nav-list >\r\n\r\n      <ng-container *ngFor=\"let cap of dataService.appConfig.capItems\" >\r\n\r\n        <!-- Menu item — Added: isFeatureAllowed check for plan-based gating -->\r\n        <mat-list-item [routerLink]=\"cap.link\"  *ngIf=\"myRole[cap.name] && cap.showMenu && (!cap.capSubItems || cap.capSubItems && cap.ignoreSubsDisplay) && isFeatureAllowed(cap)\" style=\"height: 40px;font-size: 15px;\"\r\n        (click)=\"smallScreen ? toggle() : null\">\r\n          <mat-icon [ngStyle]=\"{'color': cap.color}\" style=\"margin-right: 5px;\">{{cap.icon}}</mat-icon>{{cap.display}}\r\n        </mat-list-item>\r\n\r\n        <!-- Menu With Sub items — Added: isFeatureAllowed check -->\r\n        <mat-expansion-panel class=\"side-color\" [class.mat-elevation-z0]=\"true\"  *ngIf=\"myRole[cap.name] && cap.showMenu && cap.capSubItems && !cap.ignoreSubsDisplay && isFeatureAllowed(cap)\">\r\n\r\n          <mat-expansion-panel-header style=\"height: 40px;padding-left: 15px;\">\r\n            <mat-icon [ngStyle]=\"{'color': cap.color}\" style=\"margin-right: 5px;\">{{cap.icon != 'navigate_next' ? cap.icon : 'fiber_manual_record' }}</mat-icon>{{cap.display}}\r\n          </mat-expansion-panel-header>\r\n\r\n          <!-- Sub items - Changed: Use ng-container to avoid blank spaces for hidden items -->\r\n          <mat-nav-list>\r\n            <ng-container *ngFor=\"let capSub of getSubItems(cap)\">\r\n              <mat-list-item [routerLink]=\"capSub.link\" style=\"height: 30px; font-size: 15px; padding-left: 4px; padding-right: 10px; margin-bottom: 5px;\" (click)=\"smallScreen ? toggle() : null\" *ngIf=\"myRole[capSub.name] && capSub.showMenu && isFeatureAllowed(capSub)\" [matTooltip]=\"capSub.display\" matTooltipPosition=\"right\">\r\n                <mat-icon [ngStyle]=\"{'color': capSub.color}\" style=\"margin-right: 5px;\">{{capSub.icon}}</mat-icon>{{capSub.display}}\r\n              </mat-list-item>\r\n            </ng-container>\r\n          </mat-nav-list>\r\n\r\n        </mat-expansion-panel>\r\n\r\n      </ng-container>\r\n\r\n    </mat-nav-list>\r\n  </mat-sidenav>\r\n\r\n\r\n\r\n  <mat-sidenav-content class=\"tin-bg-image\" style=\"padding: 0px 12px;\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n    <hr style=\"margin-top: 0px;\">\r\n    <router-outlet></router-outlet>\r\n    <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n  </mat-sidenav-content>\r\n\r\n</mat-sidenav-container>\r\n\r\n\r\n<!-- footer -->\r\n<div class=\"tin-center\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n  <label style=\"text-align: center; font-size: 12px;\">&copy; {{nowDate | date : 'yyyy'}} <a color=\"primary\" class=\"terms-link\" [href]=\"appConfig.siteUrl\" target=\"_blank\">{{footer}}</a> | <a color=\"primary\" class=\"terms-link\" style=\"cursor: pointer;\" (click)=\"openTerms()\">Terms</a> | <a color=\"primary\" class=\"terms-link\" style=\"cursor: pointer;\" (click)=\"openPrivacy()\">Privacy Policy</a></label>\r\n</div>\r\n\r\n\r\n<div class=\"tin-bg-image\" *ngIf=\"!loggedin && dataService.appConfig.navigation == 'side'\">\r\n  <router-outlet></router-outlet>\r\n  <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n\r\n\r\n<!-- SIDE-MODERN -->\r\n\r\n<!-- Changed: Side-modern navigation layout -->\r\n<div class=\"sm-layout\"\r\n  *ngIf=\"loggedin && dataService.appConfig.navigation == 'side-modern'\"\r\n  [class.sm-mini]=\"isMiniSidebar && !isMiniHovered\"\r\n  [class.sm-mini-hovered]=\"isMiniSidebar && isMiniHovered\"\r\n  [class.sm-mobile-open]=\"smallScreen && isExpanded\">\r\n\r\n  <!-- Sidebar -->\r\n  <aside class=\"sm-sidebar\"\r\n    (mouseenter)=\"onMiniMouseEnter()\"\r\n    (mouseleave)=\"onMiniMouseLeave()\">\r\n\r\n    <!-- Background layers -->\r\n    <div class=\"sm-sidebar-bg\">\r\n      <div class=\"sm-sidebar-bg-image\" *ngIf=\"appConfig.navImage\" [ngStyle]=\"{'background-image': 'url(' + appConfig.navImage + ')'}\"></div>\r\n      <div class=\"sm-sidebar-bg-overlay\" [ngStyle]=\"{'background-color': appConfig.navColor}\"></div>\r\n    </div>\r\n\r\n    <!-- Sidebar content -->\r\n    <div class=\"sm-sidebar-content\">\r\n\r\n      <!-- Brand -->\r\n      <div class=\"sm-brand\">\r\n        <img *ngIf=\"appConfig.logo\" [src]=\"appConfig.logo\" alt=\"logo\" />\r\n        <span class=\"sm-brand-name\">{{appConfig.appName}}</span>\r\n      </div>\r\n\r\n      <mat-divider></mat-divider>\r\n\r\n      <!-- Profile -->\r\n      <div class=\"sm-profile\">\r\n        <mat-icon class=\"sm-profile-icon\">account_circle</mat-icon>\r\n        <div class=\"sm-profile-info\">\r\n          <div class=\"sm-profile-name\">{{loggedUserFullName}}</div>\r\n          <div class=\"sm-profile-role\">{{tenantName || 'User'}}</div>\r\n        </div>\r\n      </div>\r\n\r\n      <mat-divider></mat-divider>\r\n\r\n      <!-- Scrollable menu -->\r\n      <div class=\"sm-menu-scroll\">\r\n\r\n        <ng-container *ngFor=\"let cap of dataService.appConfig.capItems\">\r\n\r\n          <!-- Simple menu item (no sub-items or ignoring sub display) — Added: isFeatureAllowed check -->\r\n          <div *ngIf=\"myRole[cap.name] && cap.showMenu && (!cap.capSubItems || cap.ignoreSubsDisplay) && isFeatureAllowed(cap)\"\r\n            class=\"sm-menu-item\"\r\n            [class.sm-active]=\"isActiveRoute(cap.link)\"\r\n            (click)=\"modernNavigate(cap.link)\">\r\n            <mat-icon class=\"sm-menu-icon\">{{cap.icon != 'navigate_next' ? cap.icon : 'dashboard'}}</mat-icon>\r\n            <span class=\"sm-menu-text\">{{cap.display}}</span>\r\n          </div>\r\n\r\n          <!-- Parent menu item with sub-items — Added: isFeatureAllowed check -->\r\n          <ng-container *ngIf=\"myRole[cap.name] && cap.showMenu && cap.capSubItems && !cap.ignoreSubsDisplay && isFeatureAllowed(cap)\">\r\n\r\n            <!-- Parent item (toggles sub-menu) -->\r\n            <div class=\"sm-menu-item\"\r\n              [class.sm-active]=\"isParentActive(cap) && !isMenuOpen(cap.name)\"\r\n              (click)=\"toggleModernMenu(cap.name)\">\r\n              <mat-icon class=\"sm-menu-icon\">{{cap.icon != 'navigate_next' ? cap.icon : 'dashboard'}}</mat-icon>\r\n              <span class=\"sm-menu-text\">{{cap.display}}</span>\r\n              <mat-icon class=\"sm-caret\" [class.sm-caret-open]=\"isMenuOpen(cap.name)\">expand_more</mat-icon>\r\n            </div>\r\n\r\n            <!-- Sub-menu container (animated) -->\r\n            <div class=\"sm-submenu\" [class.sm-submenu-open]=\"isMenuOpen(cap.name)\">\r\n              <ng-container *ngFor=\"let sub of getSubItems(cap)\">\r\n                <div *ngIf=\"myRole[sub.name] && sub.showMenu && isFeatureAllowed(sub)\"\r\n                  class=\"sm-submenu-item\"\r\n                  [class.sm-active]=\"isActiveRoute(sub.link)\"\r\n                  (click)=\"modernNavigate(sub.link)\">\r\n                  <mat-icon *ngIf=\"sub.icon && sub.icon != 'navigate_next'\" class=\"sm-sub-icon\">{{sub.icon}}</mat-icon>\r\n                  <span *ngIf=\"!sub.icon || sub.icon == 'navigate_next'\" class=\"sm-initials\">{{getInitials(sub.display)}}</span>\r\n                  <span class=\"sm-menu-text\">{{sub.display}}</span>\r\n                </div>\r\n              </ng-container>\r\n            </div>\r\n\r\n          </ng-container>\r\n\r\n        </ng-container>\r\n\r\n      </div>\r\n\r\n    </div>\r\n  </aside>\r\n\r\n  <!-- Mobile backdrop -->\r\n  <div class=\"sm-backdrop\" (click)=\"isExpanded = false\"></div>\r\n\r\n  <!-- Main content -->\r\n  <div class=\"sm-main\">\r\n\r\n    <!-- Top bar - Changed: Added scroll class for frosted glass effect -->\r\n    <div class=\"sm-topbar\" [class.sm-topbar-scrolled]=\"topbarScrolled\">\r\n      <button mat-icon-button (click)=\"smallScreen ? toggle() : toggleMiniSidebar()\" matTooltip=\"Menu\">\r\n        <mat-icon>menu</mat-icon>\r\n      </button>\r\n\r\n      <!-- Changed: Mobile branding - show logo + app name when sidebar is hidden on small screens -->\r\n      <img *ngIf=\"smallScreen && appConfig.logo\" [src]=\"appConfig.logo\" alt=\"logo\" class=\"sm-topbar-logo\" />\r\n      <span *ngIf=\"smallScreen\" class=\"sm-topbar-brand\">{{appConfig.appName}}</span>\r\n\r\n      <span class=\"sm-topbar-spacer\"></span>\r\n\r\n      <!-- Multitenant buttons -->\r\n      <div *ngIf=\"dataService.appConfig.multitenant\" style=\"display: flex; align-items: center;\">\r\n        <button mat-icon-button (click)=\"redirectTo('home/tenancy/settings')\" matTooltip=\"Organisation Settings\">\r\n          <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon>\r\n        </button>\r\n        <span class=\"sm-topbar-label\">{{tenantName}}</span>\r\n\r\n        <!-- Changed: Support/help icon removed — replaced by floating agent chat widget -->\r\n\r\n        <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/workflow/notifications')\" matTooltip=\"Notifications\">\r\n          <mat-icon [matBadge]=\"notificationCount$ | async\" [matBadgeHidden]=\"(notificationCount$ | async) === 0\" matBadgeColor=\"warn\" matBadgeSize=\"small\">notifications</mat-icon>\r\n        </button>\r\n      </div>\r\n\r\n      <!-- Profile menu -->\r\n      <button mat-icon-button matTooltip=\"My Account\" [matMenuTriggerFor]=\"smProfileMenu\">\r\n        <mat-icon>account_circle</mat-icon>\r\n      </button>\r\n      <span class=\"sm-topbar-label\">{{loggedUserFullName}}</span>\r\n\r\n      <mat-menu #smProfileMenu=\"matMenu\" [overlapTrigger]=\"false\" yPosition=\"below\">\r\n        <button mat-menu-item routerLink=\"home/user/profile\">\r\n          <mat-icon>person</mat-icon><span>Profile</span>\r\n        </button>\r\n        <!-- Changed: Help menu item removed — replaced by floating agent chat widget -->\r\n        <mat-divider></mat-divider>\r\n        <button mat-menu-item (click)=\"logoff()\">\r\n          <mat-icon>logout</mat-icon>Logout\r\n        </button>\r\n      </mat-menu>\r\n\r\n      <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"logoff()\" matTooltip=\"Signout\">\r\n        <mat-icon>logout</mat-icon>\r\n      </button>\r\n    </div>\r\n\r\n    <!-- Page content - Changed: Replaced tin-bg-image with sm-content modern texture -->\r\n    <div class=\"sm-content\">\r\n      <router-outlet></router-outlet>\r\n      <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div class=\"sm-footer\">\r\n      &copy; {{nowDate | date : 'yyyy'}} <a [href]=\"appConfig.siteUrl\" target=\"_blank\">{{footer}}</a> | <a (click)=\"openTerms()\">Terms</a> | <a (click)=\"openPrivacy()\">Privacy Policy</a>\r\n    </div>\r\n\r\n  </div>\r\n\r\n</div>\r\n\r\n<!-- Not logged in fallback for side-modern -->\r\n<div class=\"tin-bg-image\" *ngIf=\"!loggedin && dataService.appConfig.navigation == 'side-modern'\">\r\n  <router-outlet></router-outlet>\r\n  <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n\r\n<!-- Changed: Cascading toast notifications for real-time entity changes — visible in all layouts -->\r\n<spa-toast *ngIf=\"loggedin && dataService.appConfig.multitenant\"></spa-toast>\r\n\r\n<!-- Changed: Floating agent chat widget — renamed from spa-assistant -->\r\n<spa-agent *ngIf=\"loggedin && dataService.appConfig.multitenant\"></spa-agent>","import { Router } from '@angular/router';\r\nimport { AuthService } from './auth.service';\r\nimport { MessageService } from './message.service';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpResponse, HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, BehaviorSubject, throwError } from 'rxjs';\r\nimport { catchError, filter, take, switchMap, finalize } from 'rxjs/operators';\r\nimport { LoaderService } from './loader.service';\r\nimport { LogService } from './log.service';\r\nimport { Constants } from '../classes/Classes';\r\nimport { StorageService } from './storage.service';\r\n\r\n@Injectable()\r\nexport class LoaderInterceptor implements HttpInterceptor {\r\n\r\n  private requests: HttpRequest<any>[] = [];\r\n  private isRefreshing = false; // Changed: Tracks whether a token refresh is in progress\r\n  private refreshResult$ = new BehaviorSubject<string | null>(null); // Changed: Signals queued requests when refresh completes\r\n\r\n  constructor(private loaderService: LoaderService, private messageService: MessageService, private authService: AuthService, private router: Router, private logService: LogService, private storage: StorageService) { }\r\n\r\n\r\n  removeRequest(req: HttpRequest<any>) {\r\n\r\n    const i = this.requests.indexOf(req);\r\n\r\n    if (i >= 0) {\r\n      this.requests.splice(i, 1);\r\n    }\r\n\r\n    this.loaderService.isLoading.next(this.requests.length > 0);\r\n  }\r\n\r\n  showError(userMessage : string,  error : HttpErrorResponse){\r\n\r\n    console.log(error)\r\n\r\n    let url = new URL(window.location.href);\r\n\r\n    if (url.host.includes('localhost')) {\r\n      this.messageService.error(error.error.Message)\r\n    } else {\r\n      this.messageService.toast(userMessage)\r\n    }\r\n  }\r\n\r\n  // Changed: Helper to clone a request with the current bearer token\r\n  private addToken(request: HttpRequest<any>): HttpRequest<any> {\r\n    return request.clone({\r\n      setHeaders: {\r\n        Authorization: \"Bearer \" + this.authService.tokenSource.value,\r\n      }\r\n    });\r\n  }\r\n\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\r\n    // Changed: Don't attach Bearer token to refresh/revoke — they use AllowAnonymous and authenticate via body\r\n    const url = request.url || '';\r\n    let requestClone = (url.includes('User/refresh') || url.includes('User/revoke'))\r\n      ? request.clone()\r\n      : this.addToken(request);\r\n\r\n    // Changed: Skip loader tracking for SignalR hub and agent chat requests — they're background\r\n    // infrastructure and should never show the loading spinner or block UI interactions\r\n    if (request.url.includes('/hubs/') || url.includes('/agent/')) {\r\n      return next.handle(requestClone).pipe(\r\n        catchError((error: HttpErrorResponse) => throwError(() => error))\r\n      );\r\n    }\r\n\r\n    this.requests.push(requestClone);\r\n\r\n    if (this.requests.length > 1) {\r\n      this.logService.info(\"Multiple connections detected >= \" + this.requests.length)\r\n    }\r\n\r\n    this.loaderService.isLoading.next(true);\r\n\r\n    return next.handle(requestClone).pipe(\r\n      // Changed: Track response for loading spinner\r\n      finalize(() => this.removeRequest(requestClone)),\r\n      catchError((error: HttpErrorResponse) => {\r\n\r\n        if (error.status === 401) {\r\n          // Changed: Skip refresh logic for refresh/revoke URLs to avoid infinite loops\r\n          const url = request.url || '';\r\n          if (url.includes('User/refresh') || url.includes('User/revoke')) {\r\n            this.authService.sessionExpired();\r\n            this.messageService.toast('Session expired: Please login again');\r\n            return throwError(() => error);\r\n          }\r\n\r\n          // Changed: Handle 401 with request queuing during token refresh\r\n          return this.handle401(request, next);\r\n        }\r\n        else if (error.status === 500){\r\n          this.showError(\"System Error\", error)\r\n        }\r\n        else if (error.statusText == 'Unknown Error'){\r\n          this.showError(\"Connection Error\", error)\r\n        }\r\n        else{\r\n          this.showError(\"Error\", error)\r\n        }\r\n\r\n        return throwError(() => error);\r\n      })\r\n    );\r\n  }\r\n\r\n  // Changed: Handles 401 errors — first caller starts refresh, subsequent callers queue and wait\r\n  private handle401(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    if (!this.isRefreshing) {\r\n      this.isRefreshing = true;\r\n      this.refreshResult$.next(null); // Reset the signal\r\n\r\n      const refreshToken = this.storage.getPersistent(Constants.AUTH_REFRESH_TOKEN);\r\n      if (!refreshToken) {\r\n        this.isRefreshing = false;\r\n        this.authService.sessionExpired();\r\n        this.messageService.toast('Session expired: Please login again');\r\n        return throwError(() => new Error('No refresh token'));\r\n      }\r\n\r\n      // Changed: Start refresh, then retry the original request with new token\r\n      return new Observable(observer => {\r\n        this.authService.silentRefresh().then((success) => {\r\n          this.isRefreshing = false;\r\n\r\n          if (success) {\r\n            this.refreshResult$.next(this.authService.tokenSource.value); // Signal waiting requests\r\n\r\n            // Retry original request with new token\r\n            const retryReq = this.addToken(request);\r\n            next.handle(retryReq).subscribe({\r\n              next: (event) => observer.next(event),\r\n              error: (err) => observer.error(err),\r\n              complete: () => observer.complete()\r\n            });\r\n          } else {\r\n            this.refreshResult$.next('FAILED'); // Unblock waiting requests\r\n            this.authService.sessionExpired();\r\n            this.messageService.toast('Session expired: Please login again');\r\n            observer.error(new Error('Token refresh failed'));\r\n          }\r\n        });\r\n      });\r\n    } else {\r\n      // Changed: Another refresh is in progress — wait for it, then retry with new token\r\n      return this.refreshResult$.pipe(\r\n        filter(result => result !== null), // Wait until refresh completes\r\n        take(1),\r\n        switchMap((result) => {\r\n          if (result === 'FAILED') {\r\n            return throwError(() => new Error('Token refresh failed'));\r\n          }\r\n          // Retry with the refreshed token\r\n          const retryReq = this.addToken(request);\r\n          return next.handle(retryReq);\r\n        })\r\n      );\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { CurrencyInputMaskDirective } from './currency-input-mask.directive';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule\r\n  ],\r\n  declarations: [\r\n    CurrencyInputMaskDirective\r\n  ],\r\n  exports: [\r\n    CurrencyInputMaskDirective\r\n  ]\r\n})\r\nexport class CurrencyInputModule {\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Icon, Color } from '../classes/Classes';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ConditionService {\r\n\r\n\r\n  testIconCondition(icon: Icon, row: any): boolean {\r\n    if (!icon) return false;\r\n    return icon.condition ? icon.condition(row) : true;\r\n  }\r\n\r\n\r\n  testColorCondition(color: Color, row: any): boolean {\r\n    if (!color) return false;\r\n    return color.condition ? color.condition(row) : true;\r\n  }\r\n\r\n\r\n  getColor(value: any, options: any[]): string {\r\n    if (!options) return 'lightgrey';\r\n    const option = options.find(opt => opt.value === value);\r\n    return option ? option.color : 'lightgrey';\r\n  }\r\n\r\n\r\n  testCondition(condition: (value: any) => boolean, value: any): boolean {\r\n    return condition ? condition(value) : true;\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { SearchConfig } from '../../classes/Classes';\r\nimport { Core } from '../../classes/TinCore';\r\n\r\n@Component({\r\n    selector: 'spa-search',\r\n    templateUrl: './search.component.html',\r\n    styleUrls: ['./search.component.css'],\r\n    standalone: false\r\n})\r\nexport class SearchComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n    this.data = Core.generateObject(this.config.fields)\r\n  }\r\n\r\n  data;\r\n  @Input() config: SearchConfig;\r\n  @Output() searchClick = new EventEmitter();\r\n\r\n  @Input() smallScreen: boolean;\r\n  @Input() tableDataSource: any;\r\n\r\n  search(){\r\n    this.searchClick.emit(this.data);\r\n  }\r\n\r\n}\r\n","\r\n<div class=\"tin-between\">\r\n\r\n  <div class=\"col tin-row\">\r\n\r\n    <div *ngFor=\"let field of config.fields\">\r\n\r\n      <spa-option \r\n        [type]=\"field.type\" \r\n        [required]=\"field.required\"  \r\n        [show]=\"field.show\" \r\n        [display]=\"field.alias ?? field.name | camelToWords\"\r\n        [options]=\"field.options\" \r\n        [optionDisplay]=\"field.optionDisplay ?? 'name'\" \r\n        [optionValue]=\"field.optionValue ?? 'value'\" \r\n        [(value)]=\"data[field.name]\" (enterPress)=\"search()\"\r\n        [infoMessage]=\"field.infoMessage\" \r\n        [suffix]=\"field.suffix\" \r\n        [copyContent]=\"field.copyContent\" \r\n        [loadAction]=\"field.loadAction\"\r\n      ></spa-option>\r\n\r\n    </div>\r\n\r\n  </div>\r\n\r\n  <div class=\"col-2 tin-end\">\r\n    <spa-filter [showText]=\"!smallScreen || (smallScreen && tableDataSource?.length > 10)\" [showButton]=\"false\" [data]=\"tableDataSource\" ></spa-filter>\r\n    <button mat-icon-button color=\"primary\" (click)=\"search()\" matTooltip=\"Search\" matTooltipPosition=\"right\">\r\n      <mat-icon>search</mat-icon>\r\n    </button>\r\n  </div>\r\n\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { TableConfig } from '../classes/Classes';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CsvService {\r\n  generateCsv(data: any[], columns: string[], filename: string = 'export.csv', config: TableConfig): void {\r\n    const csvContent = this.convertToCsv(data, columns, config);\r\n    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\r\n    const link = document.createElement('a');\r\n    if (link.download !== undefined) {\r\n      const url = URL.createObjectURL(blob);\r\n      link.setAttribute('href', url);\r\n      link.setAttribute('download', filename);\r\n      link.style.visibility = 'hidden';\r\n      document.body.appendChild(link);\r\n      link.click();\r\n      document.body.removeChild(link);\r\n    }\r\n  }\r\n\r\n  private convertToCsv(data: any[], columns: string[], config: TableConfig): string {\r\n    const columnMap = this.createColumnMap(columns, config);\r\n    const header = columns.map(col => columnMap[col] || col).join(',');\r\n    const rows = data.map(row =>\r\n      columns.map(col => this.escapeCommas(row[col])).join(',')\r\n    );\r\n    return [header, ...rows].join('\\n');\r\n  }\r\n\r\n  private createColumnMap(columns: string[], config: TableConfig): { [key: string]: string } {\r\n    const columnMap = {};\r\n    config.columns.forEach(col => {\r\n      if (columns.includes(col.name) && col.alias) {\r\n        columnMap[col.name] = col.alias;\r\n      }\r\n    });\r\n    return columnMap;\r\n  }\r\n\r\n  private escapeCommas(value: any): string {\r\n    const stringValue = String(value);\r\n    if (stringValue.includes(',') || stringValue.includes('\"') || stringValue.includes('\\n')) {\r\n      return `\"${stringValue.replace(/\"/g, '\"\"')}\"`;\r\n    }\r\n    return stringValue;\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { TableConfig, Button, TileConfig, DetailsDialogConfig, Action, ApiResponse } from '../../classes/Classes';\r\nimport { Subject } from 'rxjs';\r\nimport { ButtonService } from '../../services/button.service';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { CsvService } from '../../services/csv.service';\r\nimport { Core } from '../../classes/TinCore';\r\n// Removed: Direct DetailsDialog import — uses dialogService.openDefaultDialog() to avoid circular dependency\r\n\r\n@Component({\r\n    selector: 'app-table-header',\r\n    templateUrl: './table-header.component.html',\r\n    styleUrls: ['./table-header.component.css'],\r\n    standalone: false\r\n})\r\nexport class TableHeaderComponent {\r\n\r\n  constructor(private buttonService: ButtonService, private dialogService: DialogService, private messageService: MessageService, private csvService: CsvService) { }\r\n\r\n  ngOnInit() {\r\n    this.createButton = this.buttonService.getCreateButton(this.config?.buttons);\r\n\r\n    if (this.config.upload){\r\n\r\n      let uploadAction : Action = { ...this.config.upload.action, method : 'post', isFormData: true }\r\n\r\n      this.uploadDetailsDialog.buttons.find(b => b.name == \"create\").action = uploadAction;\r\n      this.uploadDetailsDialog.formConfig.alertConfig.messages = this.config.upload.messages;\r\n    }\r\n  }\r\n\r\n  createButton: Button;\r\n\r\n  @Input() lastSearch;\r\n  @Input() config: TableConfig;\r\n  @Input() hideTitle: boolean;\r\n  @Input() tableDataSource: any;\r\n  @Input() tileConfig: TileConfig;\r\n  @Input() smallScreen: boolean;\r\n  @Input() tileReload: Subject<boolean>;\r\n  @Input() showFilterButton: boolean;\r\n  @Input() data: any = [];\r\n  @Input() tileData: any = [];\r\n  @Input() isRealTime: boolean = false; // Changed: Whether this table uses real-time SignalR updates\r\n  @Input() isConnected: boolean = false; // Changed: Whether the SignalR data hub is currently connected\r\n\r\n  @Output() createClick = new EventEmitter<void>();\r\n  @Output() customClick = new EventEmitter();\r\n  @Output() refreshClick = new EventEmitter<void>();\r\n  @Output() tileClick = new EventEmitter<string>();\r\n  @Output() tileUnClick = new EventEmitter<string>();\r\n\r\n\r\n  uploadDetailsDialog : DetailsDialogConfig = {\r\n\r\n    formConfig : {\r\n      title: \"Upload\",\r\n      fixedTitle : true,\r\n      alertConfig: {\r\n        messages: [],\r\n      },\r\n\r\n      mode: 'create',\r\n      fields: [\r\n        { name: \"file\", type: \"file\", required: true, span : true }\r\n      ]\r\n    },\r\n\r\n\r\n    buttons: [\r\n      { name: \"create\", color: \"primary\", dialog: true, inDialog : true },\r\n    ]\r\n\r\n  }\r\n\r\n  onButtonClick(button: Button) {\r\n    if (button.name === 'create') {\r\n      this.createClick.emit();\r\n    } else {\r\n      this.customClick.emit(button.name);\r\n    }\r\n  }\r\n\r\n  onDownloadClick() {\r\n\r\n    if (!this.config.download) return;\r\n\r\n    this.messageService.confirm(\"Are you sure you want to download this data?\").subscribe(result => {\r\n      if (result == 'yes') {\r\n        this.customClick.emit(\"download\");\r\n\r\n        this.csvService.generateCsv(this.data, this.config.download.columns, this.config.download.fileName, this.config);\r\n      }\r\n    });\r\n\r\n\r\n  }\r\n\r\n  onUploadClick() {\r\n    this.customClick.emit(\"upload\");\r\n\r\n    this.dialogService.openDefaultDialog(this.uploadDetailsDialog).afterClosed.subscribe(result=> { // Changed: Use token pattern to avoid circular dependency\r\n\r\n      // console.log(result)\r\n      if (result.message == 'success'){\r\n        this.refreshClick.emit();\r\n        this.messageService.toast(\"Upload successful\");\r\n      }\r\n\r\n    });\r\n  }\r\n\r\n  onRefreshClick() {\r\n    this.refreshClick.emit();\r\n  }\r\n\r\n  onTileClick(tile) {\r\n    this.tileClick.emit(tile);\r\n  }\r\n\r\n  onTileUnClick(tile) {\r\n    this.tileUnClick.emit(tile);\r\n  }\r\n\r\n  getHeaderButtons(): Button[] {\r\n\r\n    if (this.config?.buttons == undefined) {\r\n      return [];\r\n    }\r\n    if (!this.config?.buttons) {\r\n      return [];\r\n    }\r\n    return this.config.buttons.filter(b => b.name == 'create' || b.inHeader);\r\n  }\r\n\r\n  testVisibleHeaderButton(btn): boolean {\r\n    return Core.testVisibleHeaderButton(this.config.parentData,btn);\r\n  }\r\n  testVisible(button: Button): boolean {\r\n    return this.buttonService.testVisible(button, this.config.parentData, this.config);\r\n  }\r\n\r\n  testDisabled(button: Button): boolean {\r\n    return this.buttonService.testDisabled(button, this.config.parentData);\r\n  }\r\n\r\n  getButtonColor(button: Button, row: any): string {\r\n    return this.buttonService.getButtonColor(button, row);\r\n  }\r\n\r\n\r\n}\r\n","<!--Tiles Top Position -->\r\n<ng-container *ngIf=\"config.tileConfig && !smallScreen && config.tileConfig.headerPosition == 'top'\">\r\n  <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" [lastSearch]=\"lastSearch\" (tileClick)=\"onTileClick($event)\" (tileUnClick)=\"onTileUnClick($event)\"></spa-tiles>\r\n</ng-container>\r\n\r\n<!-- Changed: Small screen tiles render above header buttons/filter -->\r\n<div *ngIf=\"config.tileConfig && smallScreen\" style=\"width: 100%;\">\r\n  <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" [lastSearch]=\"lastSearch\" (tileClick)=\"onTileClick($event)\" (tileUnClick)=\"onTileUnClick($event)\"></spa-tiles>\r\n</div>\r\n\r\n<div class=\"top\">\r\n\r\n    <!-- Changed: Dot + buttons in a single flex row so they cascade together -->\r\n  <div class=\"tin-row d-flex align-items-center\" style=\"margin-right: 5px;\">\r\n\r\n    <!-- Changed: Real-time connection indicator — first item, with left padding for alignment -->\r\n    <div *ngIf=\"isRealTime\" class=\"d-flex align-items-center\" style=\"padding-left: 10px;\"\r\n      [matTooltip]=\"isConnected ? 'Live — connected to server' : 'Offline — not connected'\" matTooltipPosition=\"above\">\r\n      <span style=\"display: inline-block; width: 10px; height: 10px; border-radius: 50%;\"\r\n        [style.background-color]=\"isConnected ? '#4caf50' : '#9e9e9e'\"></span>\r\n    </div>\r\n\r\n    <ng-container *ngFor=\"let button of getHeaderButtons()\">\r\n      <ng-container *ngIf=\"testVisible(button)\" >\r\n        <button *ngIf=\"!config.flatButtons\" mat-raised-button color=\"primary\" [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" >\r\n          {{button.display}}\r\n        </button>\r\n        <button *ngIf=\"config.flatButtons\" mat-stroked-button [disabled]=\"testDisabled(button)\" (click)=\"onButtonClick(button)\" [ngStyle]=\"{'color': getButtonColor(button, config.parentData)}\">\r\n          {{button.display}}\r\n        </button>\r\n      </ng-container>\r\n    </ng-container>\r\n\r\n  </div>\r\n  <div *ngIf=\"!isRealTime && getHeaderButtons().length == 0 && config.holdHeaderButtonSpace || !isRealTime && getHeaderButtons().length == 0 && !config.tileConfig\"></div>\r\n\r\n  <!-- tiles -->\r\n  <div *ngIf=\"config.tileConfig && !smallScreen && (!config.tileConfig.headerPosition || config.tileConfig.headerPosition == 'middle')\" style=\"min-width: 75%;\">\r\n    <spa-tiles [config]=\"config.tileConfig\" [reload]=\"tileReload\" [data]=\"tileData\" [lastSearch]=\"lastSearch\" (tileClick)=\"onTileClick($event)\" (tileUnClick)=\"onTileUnClick($event)\"></spa-tiles>\r\n  </div>\r\n\r\n  <!-- filter -->\r\n  <div class=\"tin-row d-flex justify-content-end\" >\r\n\r\n    <button *ngIf=\"config.download && testVisibleHeaderButton(config.download)\" mat-icon-button class=\"header-action-btn\" matTooltip=\"Download\" matTooltipPosition=\"above\" color=\"primary\" (click)=\"onDownloadClick()\">\r\n      <mat-icon>download</mat-icon>\r\n    </button>\r\n\r\n    <button *ngIf=\"config.upload && testVisibleHeaderButton(config.upload)\" mat-icon-button class=\"header-action-btn\" matTooltip=\"Upload\" matTooltipPosition=\"above\" color=\"primary\"  (click)=\"onUploadClick()\">\r\n      <mat-icon>upload</mat-icon>\r\n    </button>\r\n\r\n    <div *ngIf=\"config.showFilter\" >\r\n      <spa-filter [showText]=\"!smallScreen || (smallScreen && tableDataSource?.data?.length > 10)\" [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" [flatButtons]=\"config.flatButtons\" [smallScreen]=\"smallScreen\" (refreshClick)=\"onRefreshClick()\"></spa-filter> <!-- Changed: Use .data.length for MatTableDataSource, pass smallScreen for compact width -->\r\n    </div>\r\n    <div *ngIf=\"!config.showFilter && config.holdFilterSpace\"></div>\r\n  </div>\r\n\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"config.title && !hideTitle\" class=\"title\">\r\n  {{config.title | camelToWords}}\r\n</div> -->\r\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core'; // Changed: Added ViewEncapsulation\r\nimport { Column, Button, TableConfig, Icon } from '../../classes/Classes';\r\nimport { ButtonService } from '../../services/button.service';\r\n\r\n@Component({\r\n    selector: 'app-table-row',\r\n    templateUrl: './table-row.component.html',\r\n    styleUrls: ['./table-row.component.css'],\r\n    encapsulation: ViewEncapsulation.None, // Changed: Required to override Material button height\r\n    standalone: false\r\n})\r\nexport class TableRowComponent {\r\n  @Input() column: Column;\r\n  @Input() row: any;\r\n  @Input() config: TableConfig;\r\n  @Input() smallScreen: boolean = false;\r\n\r\n  @Output() actionClick = new EventEmitter<{ name: string, row: any }>();\r\n  @Output() columnClick = new EventEmitter<{ column: Column, row: any }>();\r\n  @Output() showBannerEvent = new EventEmitter<string>();\r\n\r\n\r\n\r\n  constructor(private buttonService: ButtonService) { }\r\n\r\n  testIconCondition(row: any, icon: Icon): boolean {\r\n    return icon.condition ? icon.condition(row) : true;\r\n  }\r\n\r\n  getColorOnCondition(row: any, column: Column) {\r\n\r\n    if (column.options) {\r\n      const color = this.getColor(row[column.name], column.options);\r\n      return column.type === 'chip' ? color : (color === 'lightgrey' ? '' : color);\r\n    }\r\n\r\n\r\n    if (column.colors){\r\n      for (const color of column.colors) {\r\n        if (color.condition(row)) {\r\n          return color.name;\r\n        }\r\n\r\n      }\r\n    }\r\n    else{\r\n\r\n      if (column.color && column.color.condition) {\r\n        return column.color.condition(row) ? column.color.name : '';\r\n      }\r\n\r\n    }\r\n\r\n\r\n    return '';\r\n\r\n\r\n  }\r\n\r\n  getColor(value: any, options: any[]): string {\r\n    if (!options) return 'lightgrey';\r\n    const option = options.find(opt => opt.value === value);\r\n    return option ? option.color : 'lightgrey';\r\n  }\r\n\r\n  onActionClick(name: string, row: any) {\r\n    this.actionClick.emit({ name, row });\r\n  }\r\n\r\n  onColumnClick(column: Column, row: any) {\r\n    this.columnClick.emit({ column, row });\r\n  }\r\n\r\n  showBanner(message: string) {\r\n    this.showBannerEvent.emit(message);\r\n  }\r\n\r\n  textDisplayed(row: any, column: Column){\r\n\r\n    let txt = row[column.name]\r\n    let max = !this.smallScreen ? column?.maxLength : column?.maxLength/2;\r\n\r\n    if (max && txt.length > max){\r\n      return txt.substring(0, max);\r\n    }\r\n\r\n    return txt;\r\n\r\n  }\r\n  textTruncated(row: any, column: Column) {\r\n\r\n    let txt = row[column.name]\r\n\r\n    let max = !this.smallScreen ? column?.maxLength : column?.maxLength / 2;\r\n\r\n    if (max && txt.length > max) {\r\n      return true\r\n    }\r\n\r\n    return false;\r\n\r\n  }\r\n}\r\n","<ng-container [ngSwitch]=\"column.type\">\r\n  <ng-container *ngSwitchCase=\"'checkbox'\">\r\n    <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'select'\">\r\n    <spa-select-lite [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\"></spa-select-lite>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'chip'\">\r\n    <button mat-stroked-button (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'background-color': getColorOnCondition(row, column), 'color': 'rgba(0, 0, 0, 0.87)', 'border': 'none'}\">{{row[column.name]}}</button>\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'icon'\">\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'date'\">\r\n    {{row[column.name] | date : 'dd/MM/yyyy'}}\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'date-short'\">\r\n    {{row[column.name] | date : 'd MMM'}}\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'datetime'\">\r\n    {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'datetimesec'\">\r\n    {{row[column.name] | date : 'dd/MM/yyyy HH:mm:ss'}}\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'money'\">\r\n    <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">{{row[column.name] | currency:'':''}}</label>\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchCase=\"'button'\">\r\n    <button mat-stroked-button (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'color': getColorOnCondition(row, column)}\" >{{row[column.name]}}</button>\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n\r\n  <ng-container *ngSwitchDefault>\r\n    <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">\r\n      <ng-container *ngIf=\"column.type === 'number'\">\r\n        {{row[column.name] | number:'1.0-2'}}\r\n      </ng-container>\r\n      <ng-container *ngIf=\"column.type !== 'number'\">\r\n        {{textDisplayed(row, column)}}\r\n      </ng-container>\r\n    </label>\r\n    <mat-icon class=\"col-icon\" *ngIf=\"textTruncated(row, column)\" matTooltip='Show more'  matTooltipPosition=\"above\" (click)=\"showBanner(row[column.name])\">more_horiz</mat-icon>\r\n    <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n    <ng-container *ngFor=\"let icon of column.icons\">\r\n      <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-container>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { Button, TableConfig } from '../../classes/Classes';\r\nimport { ButtonService } from '../../services/button.service';\r\n\r\n@Component({\r\n    selector: 'app-table-action',\r\n    templateUrl: './table-action.component.html',\r\n    styleUrls: ['./table-action.component.css'],\r\n    standalone: false\r\n})\r\nexport class TableActionComponent  {\r\n\r\n  constructor(private buttonService: ButtonService) {\r\n   }\r\n\r\n  @Input() displayedButtons: Button[];\r\n  @Input() config: TableConfig;\r\n  @Input() row: any;\r\n  @Input() smallScreen = false;\r\n\r\n  @Output() actionClick = new EventEmitter<{ name: string, row: any }>();\r\n\r\n  testVisible(row: any, buttonName: string): boolean {\r\n    const button = this.displayedButtons.find(b => b.name === buttonName);\r\n    return button ? this.buttonService.testVisible(button, row, this.config) : false;\r\n  }\r\n\r\n  testDisabled(row: any, buttonName: string): boolean {\r\n    const button = this.displayedButtons.find(b => b.name === buttonName);\r\n    return button ? this.buttonService.testDisabled(button, row, this.config) : true;\r\n  }\r\n\r\n  getButtonColor(button: Button, row: any): string {\r\n    return this.buttonService.getButtonColor(button, row);\r\n  }\r\n\r\n  getIcon(buttonName: string): string {\r\n    const button = this.displayedButtons.find(b => b.name === buttonName);\r\n    return button ? this.buttonService.getIcon(button, this.config) : '';\r\n  }\r\n\r\n  onActionClick(buttonName: string, row: any) {\r\n    this.actionClick.emit({ name: buttonName, row });\r\n  }\r\n\r\n  get visibleButtons() {\r\n\r\n    // Get visible buttons first\r\n    const visibleButtons = this.buttonService.getVisibleButtons(this.displayedButtons, this.row, this.config);\r\n    const maxCount = this.config?.maxButtonsCount ?? 3;\r\n\r\n    if (this.smallScreen) {\r\n      if (this.config?.minButtons) {\r\n        // Get buttons defined in minButtons\r\n        const minButtonsList = visibleButtons.filter(button => this.config.minButtons.includes(button.name));\r\n        const remainingButtons = visibleButtons.filter(button => !this.config.minButtons.includes(button.name));\r\n        // Changed: If there are overflow buttons, reduce visible by 1 to make room for More button\r\n        const hasOverflow = remainingButtons.length > 0;\r\n        return hasOverflow && minButtonsList.length > 0\r\n          ? minButtonsList.slice(0, minButtonsList.length - 1)\r\n          : minButtonsList;\r\n      } else {\r\n        // Changed: If more than 1 button, show none inline (More button takes the slot)\r\n        return visibleButtons.length > 1 ? [] : visibleButtons.slice(0, 1);\r\n      }\r\n    }\r\n\r\n    // Changed: If overflow exists, reduce visible count by 1 to make room for More button\r\n    const hasOverflow = visibleButtons.length > maxCount;\r\n    return hasOverflow\r\n      ? visibleButtons.slice(0, maxCount - 1)\r\n      : visibleButtons.slice(0, maxCount);\r\n  }\r\n\r\n  get overflowButtons() {\r\n\r\n    // Get visible buttons first\r\n    const visibleButtons = this.displayedButtons?.filter(button => this.testVisible(this.row, button.name) ) ?? [];\r\n    const maxCount = this.config?.maxButtonsCount ?? 3;\r\n\r\n    if (this.smallScreen) {\r\n      if (this.config?.minButtons) {\r\n        const minButtonsList = visibleButtons.filter(button => this.config.minButtons.includes(button.name));\r\n        const remainingButtons = visibleButtons.filter(button => !this.config.minButtons.includes(button.name));\r\n        // Changed: Include displaced minButton (if any) plus remaining buttons\r\n        const hasOverflow = remainingButtons.length > 0;\r\n        const displacedButton = hasOverflow && minButtonsList.length > 0\r\n          ? minButtonsList.slice(-1)\r\n          : [];\r\n        return [...displacedButton, ...remainingButtons];\r\n      } else {\r\n        // Changed: All buttons go to overflow when more than 1 exists\r\n        return visibleButtons.length > 1 ? visibleButtons : [];\r\n      }\r\n    }\r\n\r\n    // Changed: If overflow exists, include displaced button plus remaining\r\n    const hasOverflow = visibleButtons.length > maxCount;\r\n    return hasOverflow\r\n      ? visibleButtons.slice(maxCount - 1)\r\n      : [];\r\n  }\r\n}\r\n","<ng-container *ngFor=\"let button of visibleButtons\">\r\n\r\n  <ng-container *ngIf=\"button.name != 'create' && testVisible(row, button.name)\">\r\n    <!-- <button *ngIf=\"!config.flatButtons\" mat-mini-fab [matTooltip]=\"button.tip ?? button.name | titlecase\" matTooltipPosition=\"above\" style=\"margin-right:5px\" [ngStyle]=\"{'background-color': getButtonColor(button, row)}\" [disabled]=\"testDisabled(row, button.name)\" (click)=\"onActionClick(button.name, row)\">\r\n      <mat-icon>{{getIcon(button.name)}}</mat-icon>\r\n    </button> -->\r\n\r\n    <button mat-icon-button [matTooltip]=\"button.tip ?? button.name | titlecase\" matTooltipPosition=\"above\" style=\"margin-right:5px\" [disabled]=\"testDisabled(row, button.name)\" (click)=\"onActionClick(button.name, row)\">\r\n      <mat-icon [ngStyle]=\"{'color': getButtonColor(button, row)}\">{{getIcon(button.name)}}</mat-icon>\r\n    </button>\r\n  </ng-container>\r\n\r\n  <ng-container *ngIf=\"button.name != 'create' && !testVisible(row, button.name) && config?.collapseButtons === false\">\r\n    <label style=\"margin-right: 35px;\"></label>\r\n  </ng-container>\r\n\r\n</ng-container>\r\n\r\n<button *ngIf=\"overflowButtons.length > 0\" mat-icon-button [matMenuTriggerFor]=\"menu\" [matTooltip]=\"'More actions'\" matTooltipPosition=\"above\">\r\n  <mat-icon>more_vert</mat-icon>\r\n</button>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n  <ng-container *ngFor=\"let button of overflowButtons\">\r\n    <button *ngIf=\"testVisible(row, button.name)\" mat-menu-item [disabled]=\"testDisabled(row, button.name)\" (click)=\"onActionClick(button.name, row)\">\r\n      <mat-icon [ngStyle]=\"{'color': getButtonColor(button, row)}\">\r\n        {{getIcon(button.name)}}\r\n      </mat-icon>\r\n      <span>{{button.tip ?? button.name | titlecase}}</span>\r\n    </button>\r\n  </ng-container>\r\n</mat-menu>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Button, TableConfig } from '../../classes/Classes';\r\nimport { ButtonService } from '../../services/button.service';\r\nimport { ConditionService } from '../../services/condition.service';\r\n\r\n@Component({\r\n    selector: 'spa-capsules',\r\n    templateUrl: './capsules.component.html',\r\n    styleUrls: ['./capsules.component.css'],\r\n    standalone: false\r\n})\r\nexport class CapsulesComponent {\r\n  constructor(\r\n    public buttonService: ButtonService,\r\n    private conditionService: ConditionService\r\n  ) {}\r\n\r\n  @Input() config: TableConfig;\r\n  @Input() dataSource: any[];\r\n  @Input() displayedButtons: Button[] = [];\r\n\r\n  @Output() actionClick = new EventEmitter<{name: string, row: any}>();\r\n\r\n  // Extract display value based on config\r\n  getDisplayValue(row: any): string {\r\n    if (!this.config?.capsuleConfig?.displayField) {\r\n      return '';\r\n    }\r\n    return row[this.config.capsuleConfig.displayField];\r\n  }\r\n\r\n  // Check icon visibility condition\r\n  testIconCondition(row: any, icon: any): boolean {\r\n    return this.conditionService.testIconCondition(icon, row);\r\n  }\r\n\r\n  // Handle button click from menu\r\n  onActionClick(buttonName: string, row: any): void {\r\n    this.actionClick.emit({ name: buttonName, row });\r\n  }\r\n\r\n  // Get button color using service\r\n  getButtonColor(button: Button, row: any): string {\r\n    return this.buttonService.getButtonColor(button, row);\r\n  }\r\n\r\n  // Get icon for button using service\r\n  getIcon(buttonName: string): string {\r\n    return this.buttonService.getIcon(this.getButton(buttonName), this.config);\r\n  }\r\n\r\n  // Test if button should be disabled\r\n  testDisabled(row: any, buttonName: string): boolean {\r\n    const button = this.getButton(buttonName);\r\n    return this.buttonService.testDisabled(button, row, this.config);\r\n  }\r\n\r\n  // Get button by name\r\n  private getButton(name: string): Button | null {\r\n    return this.displayedButtons?.find(x => x.name === name) || null;\r\n  }\r\n}","<mat-chip-set>\r\n    <mat-chip *ngFor=\"let row of dataSource\" [matMenuTriggerFor]=\"itemMenu\" [matMenuTriggerData]=\"{item: row}\">\r\n      <!-- Left icons -->\r\n      <ng-container *ngFor=\"let icon of config.capsuleConfig?.leftIcons\">\r\n        <mat-icon *ngIf=\"testIconCondition(row, icon)\" \r\n                  [ngStyle]=\"{'color': icon?.color}\" \r\n                  style=\"font-size: 18px; padding-top: 3px; margin-right: 5px;\">\r\n          {{icon.name}}\r\n        </mat-icon>\r\n      </ng-container>\r\n  \r\n      <!-- Display text -->\r\n      <label style=\"margin-right: 5px;\">{{getDisplayValue(row)}}</label>\r\n  \r\n      <!-- Right icons -->\r\n      <ng-container *ngFor=\"let icon of config.capsuleConfig?.rightIcons\">\r\n        <mat-icon *ngIf=\"testIconCondition(row, icon)\" \r\n                  [ngStyle]=\"{'color': icon?.color}\" \r\n                  style=\"font-size: 18px; padding-top: 3px; margin-left: 5px;\">\r\n          {{icon.name}}\r\n        </mat-icon>\r\n      </ng-container>\r\n    </mat-chip>\r\n</mat-chip-set>\r\n  \r\n  <!-- Context menu -->\r\n<mat-menu #itemMenu=\"matMenu\">\r\n    <ng-template matMenuContent let-item=\"item\">\r\n      <button mat-menu-item *ngFor=\"let button of buttonService.getVisibleButtons(displayedButtons, item, config)\" \r\n              [disabled]=\"testDisabled(item, button.name)\"\r\n              (click)=\"onActionClick(button.name, item)\">\r\n        <mat-icon [ngStyle]=\"{'color': getButtonColor(button, item)}\">\r\n          {{getIcon(button.name)}}\r\n        </mat-icon>\r\n        <span>{{button.display || (button.name | titlecase)}}</span>\r\n      </button>\r\n    </ng-template>\r\n</mat-menu>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Button, TableConfig } from '../../classes/Classes';\r\nimport { ButtonService } from '../../services/button.service';\r\nimport { ConditionService } from '../../services/condition.service';\r\n\r\n@Component({\r\n    selector: 'spa-cards',\r\n    templateUrl: './cards.component.html',\r\n    styleUrls: ['./cards.component.css'],\r\n    standalone: false\r\n})\r\nexport class CardsComponent {\r\n  constructor(\r\n    public buttonService: ButtonService,\r\n    private conditionService: ConditionService\r\n  ) {}\r\n\r\n  @Input() config: TableConfig;\r\n  @Input() dataSource: any[];\r\n  @Input() displayedButtons: Button[] = [];\r\n  @Input() smallScreen = false;\r\n\r\n  @Output() actionClick = new EventEmitter<{name: string, row: any}>();\r\n  @Output() columnClick = new EventEmitter<{column: any, row: any}>();\r\n  @Output() showBannerEvent = new EventEmitter<string>();\r\n\r\n  // Get title value for a card\r\n  getTitleValue(row: any): string {\r\n    const titleField = this.config?.cardConfig?.titleField;\r\n    return titleField ? row[titleField] : '';\r\n  }\r\n\r\n  // Get subtitle value for a card\r\n  getSubtitleValue(row: any): string {\r\n    const subtitleField = this.config?.cardConfig?.subtitleField;\r\n    return subtitleField ? row[subtitleField] : '';\r\n  }\r\n\r\n  // Get content values for a card\r\n  getContentValues(row: any): {label: string, value: any}[] {\r\n    const contentFields = this.config?.cardConfig?.contentFields || [];\r\n    return contentFields.map(field => {\r\n      const column = this.config.columns.find(col => col.name === field);\r\n      return {\r\n        label: column?.alias || field,\r\n        value: row[field]\r\n      };\r\n    });\r\n  }\r\n\r\n  // Handle button click from menu\r\n  onActionClick(buttonName: string, row: any): void {\r\n    this.actionClick.emit({ name: buttonName, row });\r\n  }\r\n\r\n  // Get color for button\r\n  getButtonColor(button: Button, row: any): string {\r\n    return this.buttonService.getButtonColor(button, row);\r\n  }\r\n\r\n  // Get icon for button\r\n  getIcon(buttonName: string): string {\r\n    return this.buttonService.getIcon(this.getButton(buttonName), this.config);\r\n  }\r\n\r\n  // Test if button should be disabled\r\n  testDisabled(row: any, buttonName: string): boolean {\r\n    const button = this.getButton(buttonName);\r\n    return this.buttonService.testDisabled(button, row, this.config);\r\n  }\r\n\r\n  // Test if button should be visible\r\n  testVisible(row: any, buttonName: string): boolean {\r\n    const button = this.getButton(buttonName);\r\n    return this.buttonService.testVisible(button, row, this.config);\r\n  }\r\n\r\n  // Get elevation class based on config\r\n  getElevationClass(): string {\r\n    const elevation = this.config?.cardConfig?.elevation || 'medium';\r\n    switch(elevation) {\r\n      case 'low': return 'mat-elevation-z1';\r\n      case 'high': return 'mat-elevation-z8';\r\n      default: return 'mat-elevation-z4';\r\n    }\r\n  }\r\n\r\n  // Get number of columns for grid\r\n  getColumnCount(): number {\r\n    if (this.smallScreen) return 1;\r\n    return this.config?.cardConfig?.columns || 3;\r\n  }\r\n\r\n  // Get button by name\r\n  private getButton(name: string): Button | null {\r\n    return this.displayedButtons?.find(x => x.name === name) || null;\r\n  }\r\n}","<div class=\"cards-container\" [style.grid-template-columns]=\"'repeat(' + getColumnCount() + ', 1fr)'\">\r\n    <mat-card *ngFor=\"let row of dataSource\" [class]=\"getElevationClass()\" class=\"card-item\">\r\n      <mat-card-header>\r\n        <mat-card-title>{{getTitleValue(row)}}</mat-card-title>\r\n        <mat-card-subtitle *ngIf=\"getSubtitleValue(row)\">{{getSubtitleValue(row)}}</mat-card-subtitle>\r\n      </mat-card-header>\r\n  \r\n      <mat-card-content>\r\n        <div class=\"content-item\" *ngFor=\"let content of getContentValues(row)\">\r\n          <span class=\"label\">{{content.label}}:</span>\r\n          <span class=\"value\">{{content.value}}</span>\r\n        </div>\r\n      </mat-card-content>\r\n  \r\n      <mat-card-actions align=\"end\">\r\n        <ng-container *ngFor=\"let button of displayedButtons\">\r\n          <button *ngIf=\"!config.flatButtons && testVisible(row, button.name)\" \r\n                  mat-mini-fab\r\n                  [matTooltip]=\"button.tip ?? button.name | titlecase\"\r\n                  matTooltipPosition=\"above\"\r\n                  [ngStyle]=\"{'background-color': getButtonColor(button, row)}\"\r\n                  [disabled]=\"testDisabled(row, button.name)\"\r\n                  (click)=\"onActionClick(button.name, row)\">\r\n            <mat-icon>{{getIcon(button.name)}}</mat-icon>\r\n          </button>\r\n  \r\n          <button *ngIf=\"config.flatButtons && testVisible(row, button.name)\"\r\n                  mat-icon-button \r\n                  [matTooltip]=\"button.tip ?? button.name | titlecase\"\r\n                  matTooltipPosition=\"above\"\r\n                  [disabled]=\"testDisabled(row, button.name)\"\r\n                  (click)=\"onActionClick(button.name, row)\">\r\n            <mat-icon [ngStyle]=\"{'color': getButtonColor(button, row)}\">{{getIcon(button.name)}}</mat-icon>\r\n          </button>\r\n        </ng-container>\r\n      </mat-card-actions>\r\n    </mat-card>\r\n  </div>","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { CdkDragDrop, CdkDragEnter, CdkDragExit, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop'; // Changed: Added CdkDragEnter/Exit for drop zone highlighting\r\nimport { Button, TableConfig, GroupConfig, GroupData, Icon, ApiResponse } from '../../classes/Classes'; // Changed: Added ApiResponse import\r\nimport { ConditionService } from '../../services/condition.service';\r\nimport { ButtonService } from '../../services/button.service';\r\nimport { DataServiceLib } from '../../services/datalib.service'; // Changed: Added for drop action API calls\r\nimport { MatSnackBar } from '@angular/material/snack-bar'; // Changed: Added for error feedback on failed drops\r\n\r\n// Displays data in grouped card format with chips for items\r\n@Component({\r\n  selector: 'spa-groups',\r\n  templateUrl: './groups.component.html',\r\n  styleUrls: ['./groups.component.css'],\r\n  standalone: false\r\n})\r\nexport class GroupsComponent implements OnInit {\r\n\r\n  constructor(\r\n    private conditionService: ConditionService,\r\n    private buttonService: ButtonService,\r\n    private dataService: DataServiceLib, // Changed: Injected for drop action API calls\r\n    private snackBar: MatSnackBar // Changed: Injected for error feedback on failed drops\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.mapServerData();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['dataSource']) {\r\n      this.mapServerData();\r\n    }\r\n  }\r\n\r\n  @Input() config: TableConfig;\r\n  @Input() dataSource: any[];\r\n  @Input() displayedButtons: Button[];\r\n\r\n  @Output() actionClick = new EventEmitter<{ name: string, row: any, group?: GroupData, button?: Button }>();\r\n\r\n  groupedData: GroupData[] = [];\r\n  allGroupedData: GroupData[] = []; // Changed: Unfiltered groups for search\r\n  filterText = ''; // Changed: Search/filter text for groups and items\r\n  highlightedGroup: GroupData | null = null; // Changed: Track which group is being hovered during drag\r\n\r\n  // Maps server-driven grouped response to GroupData[] using field name config with defaults\r\n  private mapServerData(): void {\r\n    if (!this.dataSource || !this.config?.groupConfig) {\r\n      this.groupedData = [];\r\n      return;\r\n    }\r\n\r\n    const gc = this.config.groupConfig;\r\n    const groupValueField = gc.groupValueField ?? 'groupValue';\r\n    const displayNameField = gc.displayNameField ?? 'displayName';\r\n    const iconField = gc.iconField ?? 'icon';\r\n    const colorField = gc.colorField ?? 'color';\r\n    const orderField = gc.orderField ?? 'order';\r\n    const itemsField = gc.itemsField ?? 'items';\r\n\r\n    const allGroups: GroupData[] = this.dataSource.map((group: any) => ({\r\n      groupValue: group[groupValueField],\r\n      displayName: group[displayNameField] ?? String(group[groupValueField]),\r\n      icon: group[iconField] ?? this.getGroupIconFromConfig(group),\r\n      color: group[colorField] ?? this.getGroupColorFromConfig(group),\r\n      items: group[itemsField] ?? [],\r\n      order: group[orderField] ?? 999\r\n    }));\r\n\r\n    allGroups.sort((a, b) => a.order - b.order);\r\n\r\n    // Apply frontend showEmptyGroups filter\r\n    this.allGroupedData = gc.showEmptyGroups !== false\r\n      ? allGroups\r\n      : allGroups.filter(g => g.items.length > 0);\r\n\r\n    this.applyFilter(); // Changed: Apply current filter to new data\r\n  }\r\n\r\n  // Changed: Filter groups by group name or item text\r\n  applyFilter(): void {\r\n    if (!this.filterText.trim()) {\r\n      this.groupedData = this.allGroupedData;\r\n      return;\r\n    }\r\n    const term = this.filterText.toLowerCase().trim();\r\n    const textField = this.config.groupConfig?.itemTextField ?? 'name';\r\n\r\n    this.groupedData = this.allGroupedData\r\n      .map(group => {\r\n        const groupNameMatch = group.displayName.toLowerCase().includes(term);\r\n        const matchingItems = group.items.filter(item =>\r\n          (item[textField] ?? '').toString().toLowerCase().includes(term)\r\n        );\r\n        // Show group if name matches (with all items) or if any items match\r\n        if (groupNameMatch) return group;\r\n        if (matchingItems.length > 0) return { ...group, items: matchingItems };\r\n        return null;\r\n      })\r\n      .filter(g => g !== null);\r\n  }\r\n\r\n  // Fallback: evaluate groupIcons conditions against group data when backend doesn't provide icon\r\n  private getGroupIconFromConfig(group: any): string | null {\r\n    const groupIcons = this.config.groupConfig?.groupIcons;\r\n    if (!groupIcons || groupIcons.length === 0) return null;\r\n\r\n    const matchedIcon = groupIcons.find(icon =>\r\n      this.conditionService.testIconCondition(icon, group)\r\n    );\r\n    return matchedIcon?.name || null;\r\n  }\r\n\r\n  // Fallback: evaluate groupIcons conditions against group data when backend doesn't provide color\r\n  private getGroupColorFromConfig(group: any): string | null {\r\n    const groupIcons = this.config.groupConfig?.groupIcons;\r\n    if (!groupIcons || groupIcons.length === 0) return null;\r\n\r\n    const matchedIcon = groupIcons.find(icon =>\r\n      this.conditionService.testIconCondition(icon, group)\r\n    );\r\n    return matchedIcon?.color || null;\r\n  }\r\n\r\n  // Changed: Highlight only the drop zone being hovered, not all zones\r\n  onDropListEntered(event: CdkDragEnter<any[]>): void {\r\n    this.highlightedGroup = this.groupedData.find(g => g.items === event.container.data) ?? null;\r\n  }\r\n\r\n  onDropListExited(event: CdkDragExit<any[]>): void {\r\n    if (this.highlightedGroup && this.highlightedGroup.items === event.container.data) {\r\n      this.highlightedGroup = null;\r\n    }\r\n  }\r\n\r\n  // Changed: Handle drag-drop between groups with optimistic move and API sync\r\n  onDrop(event: CdkDragDrop<any[]>): void {\r\n    this.highlightedGroup = null; // Changed: Clear highlight on drop\r\n    if (event.previousContainer === event.container) {\r\n      // Reorder within same group\r\n      moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n      return;\r\n    }\r\n\r\n    const item = event.previousContainer.data[event.previousIndex];\r\n    const targetGroup = this.groupedData.find(g => g.items === event.container.data);\r\n\r\n    // Optimistic move\r\n    transferArrayItem(event.previousContainer.data, event.container.data,\r\n      event.previousIndex, event.currentIndex);\r\n\r\n    // Call backend drop action if configured\r\n    const dropAction = this.config.groupConfig?.dropAction;\r\n    if (dropAction) {\r\n      const groupValueField = this.config.groupConfig?.groupValueField ?? 'groupValue';\r\n      const payload = { ...item, [groupValueField]: targetGroup?.groupValue };\r\n      this.dataService.CallApi(dropAction, payload).subscribe({\r\n        next: (response: ApiResponse) => {\r\n          if (!response.success) {\r\n            // Revert on failure\r\n            transferArrayItem(event.container.data, event.previousContainer.data,\r\n              event.currentIndex, event.previousIndex);\r\n            this.snackBar.open(response.message || 'Move failed', 'OK', { duration: 3000 });\r\n          }\r\n        },\r\n        error: () => {\r\n          // Revert on error\r\n          transferArrayItem(event.container.data, event.previousContainer.data,\r\n            event.currentIndex, event.previousIndex);\r\n          this.snackBar.open('Failed to update item', 'OK', { duration: 3000 });\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  getItemText(item: any): string {\r\n    const textField = this.config.groupConfig.itemTextField;\r\n    return item[textField] ?? '';\r\n  }\r\n\r\n  getItemIcon(item: any): string | null {\r\n    const groupConfig = this.config.groupConfig;\r\n\r\n    if (groupConfig.itemIcons && groupConfig.itemIcons.length > 0) {\r\n      const matchedIcon = groupConfig.itemIcons.find(icon =>\r\n        this.conditionService.testIconCondition(icon, item)\r\n      );\r\n      return matchedIcon?.name || null;\r\n    }\r\n\r\n    if (groupConfig.itemIcon) {\r\n      if (this.conditionService.testIconCondition(groupConfig.itemIcon, item)) {\r\n        return groupConfig.itemIcon.name;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  // Changed: Get tooltip for primary item icon from matched itemIcons config\r\n  getItemIconTip(item: any): string {\r\n    const groupConfig = this.config.groupConfig;\r\n    if (groupConfig.itemIcons?.length > 0) {\r\n      const matchedIcon = groupConfig.itemIcons.find(icon => this.conditionService.testIconCondition(icon, item));\r\n      return matchedIcon ? this.getIconTooltip(matchedIcon, item) : '';\r\n    }\r\n    if (groupConfig.itemIcon) return this.getIconTooltip(groupConfig.itemIcon, item);\r\n    return '';\r\n  }\r\n\r\n  getItemIconColor(item: any): string | null {\r\n    const groupConfig = this.config.groupConfig;\r\n\r\n    if (groupConfig.itemIcons && groupConfig.itemIcons.length > 0) {\r\n      const matchedIcon = groupConfig.itemIcons.find(icon =>\r\n        this.conditionService.testIconCondition(icon, item)\r\n      );\r\n      return matchedIcon?.color || null;\r\n    }\r\n\r\n    if (groupConfig.itemIcon) {\r\n      if (this.conditionService.testIconCondition(groupConfig.itemIcon, item)) {\r\n        return groupConfig.itemIcon.color || null;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  getVisibleAdditionalIcons(item: any): Icon[] {\r\n    const additionalIcons = this.config.groupConfig.itemAdditionalIcons;\r\n    if (!additionalIcons) return [];\r\n\r\n    return additionalIcons.filter(icon =>\r\n      this.conditionService.testIconCondition(icon, item)\r\n    );\r\n  }\r\n\r\n  getIconTooltip(icon: Icon, item: any): string {\r\n    if (icon.tipField) {\r\n      return item[icon.tipField] ?? icon.tip ?? '';\r\n    }\r\n    return icon.tip ?? '';\r\n  }\r\n\r\n  getVisibleHeaderButtons(group: GroupData): Button[] {\r\n    const headerButtons = this.config.groupConfig.headerButtons;\r\n    if (!headerButtons) return [];\r\n\r\n    return headerButtons.filter(button =>\r\n      this.buttonService.testVisible(button, group)\r\n    );\r\n  }\r\n\r\n  getHeaderButtonIcon(button: Button): string {\r\n    return this.buttonService.getIcon(button, this.config);\r\n  }\r\n\r\n  getHeaderButtonColor(button: Button, group: GroupData): string {\r\n    return this.buttonService.getButtonColor(button, group);\r\n  }\r\n\r\n  getHeaderButtonTooltip(button: Button): string {\r\n    return button.tip || button.display || button.name;\r\n  }\r\n\r\n  isHeaderButtonDisabled(button: Button, group: GroupData): boolean {\r\n    return this.buttonService.testDisabled(button, group);\r\n  }\r\n\r\n  getVisibleButtons(item: any): Button[] {\r\n    if (!this.displayedButtons) return [];\r\n\r\n    return this.displayedButtons.filter(button => {\r\n      if (!button.visible) return true;\r\n      return button.visible(item);\r\n    });\r\n  }\r\n\r\n  // Get button icon using ButtonService to apply defaults for standard buttons\r\n  getButtonIcon(button: Button): string {\r\n    return this.buttonService.getIcon(button, this.config);\r\n  }\r\n\r\n  // Get button color using ButtonService to apply defaults (red for delete, green for create, etc.)\r\n  getButtonIconColor(button: Button, item: any): string {\r\n    return this.buttonService.getButtonColor(button, item);\r\n  }\r\n\r\n  // Check if button is disabled\r\n  isButtonDisabled(button: Button, item: any): boolean {\r\n    return this.buttonService.testDisabled(button, item, this.config);\r\n  }\r\n\r\n  itemActionClicked(buttonName: string, item: any, group: GroupData): void {\r\n    this.actionClick.emit({\r\n      name: buttonName,\r\n      row: item,\r\n      group: group\r\n    });\r\n  }\r\n\r\n  headerButtonClicked(button: Button, group: GroupData): void {\r\n    if (button.onClick) {\r\n      button.onClick(group);\r\n    }\r\n\r\n    this.actionClick.emit({\r\n      name: button.name,\r\n      row: group,\r\n      group: group,\r\n      button: button\r\n    });\r\n  }\r\n\r\n}\r\n","<div class=\"groups-filter\" *ngIf=\"config?.groupConfig?.filterEnabled !== false\">\r\n  <mat-form-field appearance=\"outline\" class=\"filter-field\">\r\n    <mat-icon matPrefix>search</mat-icon>\r\n    <input matInput placeholder=\"Filter\" [(ngModel)]=\"filterText\" (ngModelChange)=\"applyFilter()\">\r\n    <button *ngIf=\"filterText\" mat-icon-button matSuffix (click)=\"filterText = ''; applyFilter()\">\r\n      <mat-icon>close</mat-icon>\r\n    </button>\r\n  </mat-form-field>\r\n</div>\r\n\r\n<div class=\"groups-container\" cdkDropListGroup>\r\n\r\n  <mat-card *ngFor=\"let group of groupedData\" class=\"group-card\">\r\n\r\n    <div class=\"group-header\">\r\n      <div class=\"header-left\">\r\n        <mat-icon *ngIf=\"group.icon\" [style.color]=\"group.color\" class=\"group-icon\">{{group.icon}}</mat-icon>\r\n        <label class=\"group-title\">{{group.displayName}}</label>\r\n        <label *ngIf=\"config.groupConfig.showGroupCount !== false\" class=\"group-count\">({{group.items.length}})</label>\r\n      </div>\r\n\r\n      <div class=\"header-right\">\r\n        <button\r\n          *ngFor=\"let button of getVisibleHeaderButtons(group)\"\r\n          mat-icon-button\r\n          [matTooltip]=\"getHeaderButtonTooltip(button)\"\r\n          matTooltipPosition=\"above\"\r\n          [style.color]=\"getHeaderButtonColor(button, group)\"\r\n          [disabled]=\"isHeaderButtonDisabled(button, group)\"\r\n          (click)=\"headerButtonClicked(button, group)\">\r\n          <mat-icon>{{getHeaderButtonIcon(button)}}</mat-icon>\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <hr class=\"group-divider\" />\r\n\r\n    <!-- Empty state: show when no items and drag is disabled -->\r\n    <div *ngIf=\"group.items.length === 0 && !config.groupConfig.dragEnabled\" class=\"empty-state\">\r\n      <label>{{config.groupConfig.emptyGroupMessage ?? 'Empty'}}</label>\r\n    </div>\r\n\r\n    <!-- Changed: Replaced mat-chip-set with flex container of mat-stroked-button for cleaner button style -->\r\n    <div\r\n      *ngIf=\"group.items.length > 0 || config.groupConfig.dragEnabled\"\r\n      cdkDropList\r\n      [cdkDropListData]=\"group.items\"\r\n      [cdkDropListDisabled]=\"!config.groupConfig.dragEnabled\"\r\n      (cdkDropListDropped)=\"onDrop($event)\"\r\n      (cdkDropListEntered)=\"onDropListEntered($event)\"\r\n      (cdkDropListExited)=\"onDropListExited($event)\"\r\n      [class.drop-highlight]=\"group === highlightedGroup\"\r\n      class=\"drop-list items-container\">\r\n\r\n      <!-- Empty state inside drop list when drag is enabled -->\r\n      <div *ngIf=\"group.items.length === 0\" class=\"empty-state drop-empty\">\r\n        <label>{{config.groupConfig.emptyGroupMessage ?? 'Empty'}}</label>\r\n      </div>\r\n\r\n      <button\r\n        mat-stroked-button\r\n        *ngFor=\"let item of group.items\"\r\n        cdkDrag [cdkDragData]=\"item\"\r\n        [cdkDragDisabled]=\"!config.groupConfig.dragEnabled\"\r\n        [matMenuTriggerFor]=\"config.groupConfig.contextMenuEnabled !== false ? itemMenu : null\"\r\n        [matMenuTriggerData]=\"{item: item, group: group}\"\r\n        class=\"item-button\">\r\n\r\n        <mat-icon\r\n          *ngIf=\"getItemIcon(item)\"\r\n          [style.color]=\"getItemIconColor(item)\"\r\n          [matTooltip]=\"getItemIconTip(item)\"\r\n          matTooltipPosition=\"above\"\r\n          class=\"item-icon\">\r\n          {{getItemIcon(item)}}\r\n        </mat-icon>\r\n\r\n        {{getItemText(item)}}\r\n\r\n        <ng-container *ngFor=\"let additionalIcon of getVisibleAdditionalIcons(item)\">\r\n          <mat-icon\r\n            [style.color]=\"additionalIcon.color\"\r\n            [matTooltip]=\"getIconTooltip(additionalIcon, item)\"\r\n            matTooltipPosition=\"above\"\r\n            class=\"item-additional-icon\">\r\n            {{additionalIcon.name}}\r\n          </mat-icon>\r\n        </ng-container>\r\n\r\n      </button>\r\n    </div>\r\n\r\n  </mat-card>\r\n\r\n</div>\r\n\r\n<mat-menu #itemMenu=\"matMenu\">\r\n  <ng-template matMenuContent let-item=\"item\" let-group=\"group\">\r\n    <button\r\n      *ngFor=\"let button of getVisibleButtons(item)\"\r\n      mat-menu-item\r\n      [disabled]=\"isButtonDisabled(button, item)\"\r\n      (click)=\"itemActionClicked(button.name, item, group)\">\r\n      <mat-icon [style.color]=\"getButtonIconColor(button, item)\">{{getButtonIcon(button)}}</mat-icon>\r\n      <span>{{button.display ?? button.tip ?? (button.name | titlecase)}}</span>\r\n    </button>\r\n  </ng-template>\r\n</mat-menu>\r\n","import { Component, EventEmitter, Input, OnInit, OnDestroy, Output, SimpleChanges, ViewChild, AfterViewInit } from '@angular/core'; // Changed: Added OnDestroy\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Action, Button, Color, Column, DetailsDialogConfig, FormConfig, Icon, TableConfig, ApiResponse } from '../../classes/Classes';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { Core, DetailsDialogProcessor } from '../../classes/TinCore';\r\nimport { Subject, Subscription } from 'rxjs'; // Changed: Added Subscription for cleanup\r\nimport { ButtonService } from '../../services/button.service';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { TableConfigService } from '../../services/table-config.service';\r\nimport { ConditionService } from '../../services/condition.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { SignalRService } from '../../services/signalr.service'; // Changed: Added for real-time table updates\r\n\r\n@Component({\r\n    selector: 'spa-table',\r\n    templateUrl: './table.component.html',\r\n    styleUrls: ['./table.component.css'],\r\n    standalone: false\r\n})\r\nexport class TableComponent implements OnInit, AfterViewInit, OnDestroy { // Changed: Added OnDestroy\r\n\r\n  constructor(private dataService: DataServiceLib, private messageService: MessageService, private breakpointObserver: BreakpointObserver, public dialog: MatDialog,\r\n    private buttonService: ButtonService, private dialogService: DialogService, private tableConfigService: TableConfigService, private conditionService: ConditionService, private authService: AuthService, private signalRService: SignalRService ) // Changed: Added SignalRService\r\n    {\r\n    // detect screen size changes\r\n    this.breakpointObserver.observe([\"(max-width: 600px)\"]).subscribe((result: BreakpointState) => {\r\n      this.smallScreen = result.matches;\r\n      this.updateTableConfiguration();\r\n    });\r\n  }\r\n\r\n  ngOnInit() {\r\n\r\n    if (this.config?.formConfig) {\r\n      this.hasFormAccess = Core.hasFormAccess( this.config.formConfig, this.authService.currentRoleSource.value );\r\n    }\r\n\r\n    if (this.hasFormAccess){\r\n      this.initializeComponent();\r\n    }\r\n\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // Set paginator after view initialization to ensure ViewChild is ready\r\n    this.setPaginator();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n\r\n    if (!this.config.loadAction && !this.config.searchConfig) {\r\n      this.dataSource = this.data;\r\n      this.tableDataSource = new MatTableDataSource<any>(this.dataSource);\r\n      this.setPaginator(); // Set paginator after datasource update\r\n    }\r\n\r\n    if (this.inTab && changes['activeTab']) {\r\n      if (!this.hasBeenActivated && this.activeTab && this.config?.lazyLoad && this.config.loadAction) {\r\n        this.loadData(this.config.loadAction, \"\");\r\n        this.hasBeenActivated = true;\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n\r\n  elevation = \"mat-elevation-z5\";\r\n  actionsWidth = \"50px\";\r\n  showFilterButton = true;\r\n  tileReload: Subject<boolean> = new Subject();\r\n  hasBeenActivated = false; \r\n\r\n  smallScreen = false\r\n  hasFormAccess = true;\r\n\r\n  //Table\r\n  tableDataSource;\r\n  dataSource: any[];\r\n  displayedColumns = []\r\n  displayedButtons = []\r\n  originalTableLoadAction: Action\r\n\r\n  // Changed: Explicitly set static: false to ensure ViewChild is available after view init\r\n  @ViewChild('tablePaginator', { static: false }) tablePaginator: MatPaginator;\r\n\r\n  @Input() data: any = [];\r\n  @Input() tileData: any = [];\r\n  @Input() config: TableConfig;\r\n  @Input() reload: Subject<boolean>;\r\n  @Input() activeTab = false;\r\n  @Input() inTab = false;\r\n  @Input() nestingLevel: number = 0; // Changed: Track nesting depth for dialog recursion control\r\n  @Output() dataLoad = new EventEmitter();\r\n  @Output() actionSuccess = new EventEmitter();\r\n  @Output() refreshClick = new EventEmitter();\r\n  @Output() searchClick = new EventEmitter();\r\n  @Output() createClick = new EventEmitter();\r\n  @Output() actionClick = new EventEmitter();\r\n  @Output() inputChange = new EventEmitter();\r\n  @Output() actionResponse = new EventEmitter();\r\n\r\n  // Changed: Real-time SignalR subscription management\r\n  private realTimeSubs: Subscription[] = [];\r\n  private realTimeEntityName = '';\r\n  isSignalRConnected = false; // Changed: Tracks data hub connection state for indicator\r\n\r\n  private initializeComponent() {\r\n    this.updateTableConfiguration();\r\n    this.setupDataLoading();\r\n    this.formDefaults();\r\n    this.originalTableLoadAction = { ...this.config.loadAction } //Core.getClone(this.config.loadAction);\r\n    this.dataSource = this.data;\r\n    this.tableDataSource = new MatTableDataSource<any>(this.dataSource);\r\n    this.setPaginator(); // Set paginator after datasource initialization\r\n    if (this.config.realTime) this.setupRealTimeSubscriptions(); // Changed: Subscribe to SignalR entity changes\r\n  }\r\n\r\n  private updateTableConfiguration() {\r\n    this.elevation = this.getElevationClass(this.config?.elevation);\r\n    this.displayedColumns = this.tableConfigService.setColumns(this.config, this.smallScreen);\r\n    this.displayedButtons = this.tableConfigService.getDisplayedButtons(this.config?.buttons, this.smallScreen, this.config);\r\n    this.actionsWidth = this.tableConfigService.getActionsWidth(this.displayedButtons, this.smallScreen, this.config);\r\n\r\n    if (this.config?.searchConfig) {\r\n      this.showFilterButton = false;\r\n    }\r\n\r\n    if (this.config?.showFilterButton === false) {\r\n      this.showFilterButton = false;\r\n    }\r\n\r\n  }\r\n\r\n  private setupDataLoading() {\r\n\r\n    if (this.config.lazyLoad && this.inTab) return;\r\n\r\n    if (this.config.loadAction) {\r\n      this.loadData(this.config.loadAction, \"\");\r\n    }\r\n\r\n\r\n    if (this.reload) {\r\n      this.reload.subscribe(v => {\r\n        if (v && this.config?.loadAction) {\r\n          this.loadData(this.config.loadAction, \"\");\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n\r\n  loadData(action: Action, data: any) {\r\n\r\n    //if searchConfig is set, use last search\r\n\r\n\r\n    if (action.method == 'post') {\r\n      if (this.config.searchConfig) {\r\n        if (!this.lastSearch) return;\r\n        data = this.lastSearch;\r\n      }\r\n    }\r\n\r\n\r\n    if (action) {\r\n\r\n      this.dataService.CallApi(action, data).subscribe((apiResponse: ApiResponse) => {\r\n\r\n        if (this.config.logResponse) {\r\n          console.log(apiResponse)\r\n        }\r\n\r\n        if (apiResponse.success) {\r\n          this.dataSource = apiResponse.data\r\n          this.tableDataSource = new MatTableDataSource(apiResponse.data);\r\n          this.setPaginator(); // Set paginator safely after datasource update\r\n\r\n          this.dataLoaded(apiResponse.data);\r\n\r\n          if (apiResponse.message != \"success\" && apiResponse.message != \"\"){\r\n            this.messageService.toast(apiResponse.message);\r\n          }\r\n\r\n        } else {\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n\r\n  private setPaginator() {\r\n    // Changed: Since paginator is now always in DOM, this should always work on mobile\r\n    // Safely set paginator with null checks to ensure connection on all screen sizes\r\n    if (this.tableDataSource && this.tablePaginator) {\r\n      this.tableDataSource.paginator = this.tablePaginator;\r\n    }\r\n  }\r\n\r\n  inputChanged(event) {\r\n    this.inputChange.emit({ field: event.field, value: event.value })\r\n  }\r\n\r\n  formDefaults() {\r\n\r\n    if (!this.config.formConfig) {\r\n      let config = new FormConfig\r\n\r\n      config.fields = []\r\n\r\n      this.config.columns.forEach(column => {\r\n\r\n        let field = { name: column.name, type: column.type }\r\n        config.fields.push(field)\r\n\r\n      });\r\n\r\n      this.config.formConfig = config;\r\n    }\r\n  }\r\n\r\n  setButtons(){\r\n    if (!this.config.buttons) return\r\n    if (!this.smallScreen){\r\n      this.displayedButtons = this.config.buttons;\r\n    }else{\r\n      this.displayedButtons = this.config.buttons;\r\n    }\r\n  }\r\n\r\n  getButton(name: string) {\r\n    let button = this.buttonService.getButton(this.config.buttons, name);\r\n    // If not found in main buttons, check header buttons in groupConfig\r\n    if (!button && this.config.groupConfig?.headerButtons) {\r\n      button = this.buttonService.getButton(this.config.groupConfig.headerButtons, name);\r\n    }\r\n    return button;\r\n  }\r\n\r\n  getIcon(buttonName: string) {\r\n    const button = this.getButton(buttonName);\r\n    return this.buttonService.getIcon(button, this.config);\r\n  }\r\n\r\n  getButtonColor(button: Button, row) {\r\n    return this.buttonService.getButtonColor(button, row);\r\n  }\r\n\r\n  getOptions(column){\r\n    let x = this.config.columns.find(opt => opt.name === column);\r\n    return  x\r\n  }\r\n\r\n  getColor(value: any, options: any[]): string {\r\n    return this.conditionService.getColor(value, options);\r\n  }\r\n\r\n  testIconCondition(row: any, icon: Icon): boolean {\r\n    return this.conditionService.testIconCondition(icon, row);\r\n  }\r\n\r\n  testColorCondition(row: any, color: Color): boolean {\r\n    return this.conditionService.testColorCondition(color, row);\r\n  }\r\n\r\n  showBanner(message: string) {\r\n    if (message && message !== '') {\r\n      this.messageService.info(message);\r\n    }\r\n  }\r\n\r\n  testDisabled(row, buttonName: string): boolean {\r\n    const button = this.getButton(buttonName);\r\n    return this.buttonService.testDisabled(button, row);\r\n  }\r\n\r\n  // testVisible(row, buttonName: string): boolean {\r\n  //   const button = this.getButton(buttonName);\r\n  //   return this.buttonService.testVisible(button, row, this.config);\r\n  // }\r\n\r\n\r\n\r\n  //Events\r\n  lastSearch\r\n  searchClicked(x){\r\n    this.searchClick.emit(x);\r\n    this.lastSearch = x;\r\n\r\n    if (this.config.searchConfig.searchAction){\r\n      this.config.loadAction = { ...this.config.searchConfig.searchAction } //Core.getClone(this.config.searchConfig.searchAction);\r\n      this.originalTableLoadAction = { ...this.config.searchConfig.searchAction } //Core.getClone(this.config.searchConfig.searchAction);\r\n      this.loadData(this.config.loadAction, x);\r\n    }\r\n  }\r\n\r\n  tileClicked(tile){\r\n    this.config.loadAction = { ...tile.data.action } //Core.getClone(tile.data.action);\r\n    this.refreshClicked();\r\n  }\r\n\r\n  tileUnClicked(tile) {\r\n    this.config.loadAction = { ...this.originalTableLoadAction } //Core.getClone(this.originalTableLoadAction);\r\n    this.refreshClicked();\r\n  }\r\n\r\n  refreshClicked() {\r\n    this.refreshClick.emit();\r\n\r\n    if (this.config.loadAction) {\r\n\r\n      this.loadData(this.config.loadAction,\"\");\r\n    }else{\r\n      this.dataLoad.emit();\r\n    }\r\n\r\n\r\n  }\r\n\r\n  dataLoaded(x) {\r\n    this.dataLoad.emit(x)\r\n\r\n    if (this.config.tileConfig?.loadAction) {\r\n      this.tileReload.next(true);\r\n    }\r\n\r\n  }\r\n\r\n  actionClicked(name: string, row: any, group?: any, button?: Button) {\r\n\r\n\r\n    const actionButton = button || this.getButton(name);\r\n  \r\n    if (actionButton?.onClick) {\r\n      actionButton.onClick(row);\r\n    }\r\n\r\n\r\n    // For item context menu actions, use the row data as-is (which contains the full item)\r\n    // For group header button actions, pass group-level data + items using server field mapping\r\n    let actionData = row;\r\n    if (button && group && group.groupValue !== undefined) {\r\n      const gc = this.config?.groupConfig;\r\n      if (gc) {\r\n        const groupValueField = gc.groupValueField ?? 'groupValue';\r\n        const displayNameField = gc.displayNameField ?? 'displayName';\r\n        actionData = {\r\n          [groupValueField]: group.groupValue,\r\n          [displayNameField]: group.displayName,\r\n          items: group.items // Changed: Include group items so header actions can act on all items\r\n        };\r\n      }\r\n    }\r\n\r\n    // Changed: Apply rowDataMap — string for simple field mapping, function for computed values\r\n    if (actionButton?.rowDataMap) {\r\n      const mapped = { ...actionData };\r\n      for (const [targetField, sourceOrFn] of Object.entries(actionButton.rowDataMap)) {\r\n        mapped[targetField] = typeof sourceOrFn === 'function' ? sourceOrFn(actionData) : actionData[sourceOrFn];\r\n      }\r\n      actionData = mapped;\r\n    }\r\n\r\n    // Changed: Group header buttons with action but no dialog/detailsConfig go directly to doAction\r\n    if (button && group && actionButton?.action && !actionButton?.dialog && !actionButton?.detailsConfig) {\r\n      this.doAction(actionButton.name, actionData);\r\n      return;\r\n    }\r\n\r\n    if (name === 'view') {\r\n      this.viewModel(actionData, actionButton);\r\n    } else if (name === 'edit') {\r\n      this.editModel(actionData, actionButton);\r\n    } else if (name === 'delete') {\r\n      this.deleteModel(actionData, actionButton);\r\n    } else {\r\n      this.customModel(name, actionData, actionButton);\r\n    }\r\n  }\r\n\r\n\r\n  //Dialog events\r\n  columnClicked(column : Column, row){\r\n    if (column.detailsConfig) {\r\n      const button : Button = { name: column.name, dialog: true, detailsConfig: column.detailsConfig }\r\n      this.open(button, row, );\r\n    } else {\r\n      this.actionClickedEmit(column.name, row);\r\n    }\r\n  }\r\n\r\n  customModel(name, row, button?: Button) {\r\n    const actionButton = button || this.getButton(name);\r\n    this.open(actionButton, row);\r\n  }\r\n\r\n\r\n  actionClickedEmit(name, row) {\r\n    this.actionClick.emit({name:name,data : row});\r\n  }\r\n\r\n  viewModel(row, button?: Button) {\r\n    const actionButton = button || this.getButton('view');\r\n    this.open(actionButton, row);\r\n  }\r\n\r\n  newModel() {\r\n    const button = this.getButton('create');\r\n    this.open(button, null);\r\n  }\r\n\r\n  editModel(row, button?: Button) {\r\n    let actionButton = button || this.getButton('edit');\r\n    this.open(actionButton, row);\r\n  }\r\n\r\n  private open(button: Button, row: any | null ): void {\r\n\r\n    const buttonName = button.name\r\n\r\n\r\n    let btn : Button = { \r\n      ...button,\r\n      detailsConfig: {\r\n        ...(button.detailsConfig ?? {\r\n          formConfig: this.config.formConfig,\r\n          stepConfig: this.config.stepConfig,\r\n          buttons: this.config.buttons,\r\n          heroField: this.config.heroField,\r\n          heroValue: this.config.heroValue,\r\n        }),\r\n        allowUserKeepOpen: this.config.allowUserKeepOpen, // Changed: table config is the single source of truth for this setting\r\n        keepOpenBehavior: this.config.keepOpenBehavior, // Changed: propagate create behavior preference from table config\r\n      }\r\n    }\r\n\r\n\r\n    this.dialogService.openDefaultDetailsDialog(btn, row, this.nestingLevel).subscribe(result => { // Changed: Use token pattern instead of direct DetailsDialog import\r\n      if (result.action === 'doAction') {\r\n        this.doAction(result.name, result.row);\r\n        this.actionClickedEmit(result.name, result.row);\r\n      } else if (result.action === 'inputChange') {\r\n        this.inputChanged(result.change);\r\n      } else if (result.message === 'success') {\r\n        this.actionClickedEmit(buttonName, result.data);\r\n        this.actionResponse.emit({ name: buttonName, data: result.data });\r\n        this.realTimeRefreshOrFallback(); // Changed: Use real-time update if enabled, otherwise refresh\r\n        this.actionSuccess.emit();\r\n\r\n        if (buttonName == 'create' && btn.editOnSuccess) {\r\n          this.editModel(result.data.data);\r\n        }\r\n\r\n        if (btn.onSuccessButton){\r\n          this.open(btn.onSuccessButton, result.data.data);\r\n        }\r\n\r\n      } else if (result.message === 'emit') {\r\n        this.actionClickedEmit(buttonName, result.data);\r\n      }\r\n    });\r\n  }\r\n\r\n  deleteModel(row, button?: Button) {\r\n\r\n    let actionButton = button || this.getButton('delete');\r\n    if (!actionButton) return;\r\n\r\n    let confirmMessage = this.buttonService.getConfirmMessage(actionButton, row);\r\n    if (!confirmMessage) {\r\n      confirmMessage = `Are you sure you want to delete ?`;\r\n    }\r\n\r\n    this.messageService.confirm(confirmMessage).subscribe((result) => {\r\n      if (result == \"yes\") {\r\n        this.actionClickedEmit('delete', row)\r\n        this.doAction(actionButton.name,row);\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n\r\n  //Actions\r\n  doAction(buttonName: string, row) {\r\n\r\n    let b = this.getButton(buttonName)\r\n\r\n    if (!b) return;\r\n    if (!b.action) return;\r\n\r\n    if (b.setHeroField && this.config.heroValue) {\r\n      row[this.config.heroField] = this.config.heroValue;\r\n    }\r\n\r\n    if (b.confirm && b.name != \"delete\") {\r\n      const confirmMessage = this.buttonService.getConfirmMessage(b, row);\r\n      this.messageService.confirm(confirmMessage).subscribe((result) => {\r\n        if (result == \"yes\") {\r\n          this.execAction(b,row)\r\n        }\r\n      });\r\n    }else{\r\n      this.execAction(b, row)\r\n    }\r\n\r\n  }\r\n\r\n  execAction(button: Button, row){\r\n    this.dataService.CallApi(button.action, row).subscribe((apiResponse : ApiResponse) => {\r\n\r\n      if (apiResponse.success) {\r\n\r\n        if (apiResponse.message.includes(\"approval\") || apiResponse.message.includes(\"approve\") || apiResponse.message.includes(\"decline\")) {\r\n          this.messageService.toast(apiResponse.message);\r\n        }else if (button.action.successMessage) {\r\n          this.messageService.toast(button.action.successMessage);\r\n        } else if (apiResponse.message != \"success\" && apiResponse.message != \"\") {\r\n          this.messageService.toast(apiResponse.message);\r\n        } else {\r\n          this.messageService.toast(\"Updated\");\r\n        }\r\n\r\n        this.realTimeRefreshOrFallback(); // Changed: Use real-time update if enabled, otherwise refresh\r\n        this.actionSuccess.emit();\r\n      } else {\r\n        this.messageService.toast(\"Error: \" + apiResponse.message);\r\n      }\r\n\r\n      this.actionResponse.emit({name:button.name, data:apiResponse});\r\n    },\r\n      (error) => {\r\n        this.messageService.toast(\"Error: \" + error);\r\n      }\r\n    );\r\n  }\r\n\r\n\r\n  //Misc\r\n  private getElevationClass(elevation: string): string {\r\n\r\n    if (elevation == \"none\"){\r\n      return \"\"\r\n    }\r\n    else if (elevation == \"low\"){\r\n      return \"mat-elevation-z1\"\r\n    }\r\n    else if (elevation == \"medium\"){\r\n      return \"mat-elevation-z5\"\r\n    }\r\n    else if (elevation == \"high\"){\r\n      return \"mat-elevation-z9\"\r\n    }\r\n    else{\r\n      return \"mat-elevation-z5\"\r\n    }\r\n\r\n  }\r\n\r\n  // Changed: Real-time tables fall back to full refresh when SignalR is disconnected\r\n  private realTimeRefreshOrFallback() {\r\n    if (!this.config.realTime || !this.isSignalRConnected) {\r\n      this.refreshClicked();\r\n    }\r\n  }\r\n\r\n  // Changed: Set up SignalR subscriptions for real-time entity change updates\r\n  private setupRealTimeSubscriptions() {\r\n    this.realTimeEntityName = this.config.entityName || this.deriveEntityName();\r\n\r\n    // Changed: Subscribe to data hub connection state for real-time indicator\r\n    this.realTimeSubs.push(\r\n      this.signalRService.dataHubConnected$.subscribe(connected => {\r\n        this.isSignalRConnected = connected;\r\n      })\r\n    );\r\n\r\n    // Changed: Subscribe to entity created — add new row to table\r\n    this.realTimeSubs.push(\r\n      this.signalRService.entityCreated$.subscribe(event => {\r\n        if (event.entityName !== this.realTimeEntityName) return;\r\n        if (!this.tableDataSource) return;\r\n\r\n        const data = [event.data, ...this.tableDataSource.data]; // Changed: Insert at top so new records are immediately visible\r\n        this.tableDataSource.data = data;\r\n        this.dataSource = data;\r\n      })\r\n    );\r\n\r\n    // Changed: Subscribe to entity updated — replace existing row by ID\r\n    this.realTimeSubs.push(\r\n      this.signalRService.entityUpdated$.subscribe(event => {\r\n        if (event.entityName !== this.realTimeEntityName) return;\r\n        if (!this.tableDataSource) return;\r\n\r\n        const idKey = this.findIdKey(event.data);\r\n        if (!idKey) return;\r\n        const data = this.tableDataSource.data.map(row =>\r\n          row[idKey] === event.data[idKey] ? event.data : row\r\n        );\r\n        this.tableDataSource.data = data;\r\n        this.dataSource = data;\r\n      })\r\n    );\r\n\r\n    // Changed: Subscribe to entity deleted — remove row by ID\r\n    this.realTimeSubs.push(\r\n      this.signalRService.entityDeleted$.subscribe(event => {\r\n        if (event.entityName !== this.realTimeEntityName) return;\r\n        if (!this.tableDataSource) return;\r\n\r\n        const idKey = this.findIdKey(this.tableDataSource.data[0]);\r\n        if (!idKey) return;\r\n        const data = this.tableDataSource.data.filter(row => row[idKey] !== event.data);\r\n        this.tableDataSource.data = data;\r\n        this.dataSource = data;\r\n      })\r\n    );\r\n  }\r\n\r\n  // Changed: Derive entity name from loadAction URL (e.g. 'products/all/x' → 'Product')\r\n  private deriveEntityName(): string {\r\n    const url = this.config.loadAction?.url || '';\r\n    const segment = url.split('/')[0]; // First URL segment (e.g. 'products')\r\n    if (!segment) return '';\r\n    const name = segment.charAt(0).toUpperCase() + segment.slice(1); // Capitalize\r\n    return name.endsWith('s') ? name.slice(0, -1) : name; // Remove trailing 's' for singular\r\n  }\r\n\r\n  // Changed: Find the ID property key in a row object (convention: ends with 'ID')\r\n  private findIdKey(row: any): string | null {\r\n    if (!row) return null;\r\n    return Object.keys(row).find(k => k.endsWith('ID') && k !== 'TenantID') || null;\r\n  }\r\n\r\n  // Changed: Clean up SignalR subscriptions on component destroy\r\n  ngOnDestroy() {\r\n    this.realTimeSubs.forEach(s => s.unsubscribe());\r\n  }\r\n}\r\n","\r\n<ng-container *ngIf=\"hasFormAccess\">\r\n\r\n  <!-- Search -->\r\n  <spa-search\r\n    *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" [smallScreen]=\"smallScreen\" [tableDataSource]=\"tableDataSource\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\r\n  </spa-search>\r\n\r\n  <!-- Header -->\r\n  <app-table-header\r\n    [config]=\"config\" [data]=\"dataSource\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [tileReload]=\"tileReload\" [lastSearch]=\"lastSearch\" [smallScreen]=\"smallScreen\"\r\n    [showFilterButton]=\"showFilterButton\" [isRealTime]=\"config.realTime\" [isConnected]=\"isSignalRConnected\"\r\n    (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\r\n    (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\r\n  </app-table-header>\r\n\r\n\r\n  <!-- Table -->\r\n  <div *ngIf=\"!config.viewType || config?.viewType === 'table'\">\r\n\r\n    <p *ngIf=\"!config\"><em>Configure Table</em></p>\r\n    <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\r\n\r\n    <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\r\n\r\n      <table mat-table [dataSource]=\"tableDataSource\"  [ngClass]=\"elevation\">\r\n\r\n        <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\r\n          <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\r\n          <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\r\n\r\n            <!-- Rows -->\r\n            <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\" [smallScreen]=\"smallScreen\"\r\n              (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\r\n            </app-table-row>\r\n\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container matColumnDef=\"action\">\r\n          <th mat-header-cell *matHeaderCellDef> Action </th>\r\n          <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '20px' : actionsWidth}\">\r\n            <div class=\"action-buttons-container\">\r\n\r\n              <!-- Actions -->\r\n              <app-table-action\r\n                [displayedButtons]=\"displayedButtons\" [config]=\"config\" [smallScreen]=\"smallScreen\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\r\n              </app-table-action>\r\n\r\n            </div>\r\n          </td>\r\n        </ng-container>\r\n\r\n\r\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n        <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': (config.greyOut && config.greyOut(row)) || row.pendingApproval}\"></tr>\r\n      </table>\r\n\r\n    </div>\r\n\r\n    <!-- Changed: Removed *ngIf condition to keep paginator always in DOM and maintain ViewChild reference -->\r\n    <!-- Changed: Added CSS class binding to hide when no data instead of conditional rendering -->\r\n    <mat-paginator \r\n      #tablePaginator \r\n      [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" \r\n      [ngClass]=\"{'paginator-hidden': !dataSource || (smallScreen && dataSource?.length === 0)}\"\r\n      showFirstLastButtons>\r\n    </mat-paginator>\r\n\r\n  </div>\r\n  \r\n  <!-- Capsules -->\r\n  <spa-capsules *ngIf=\"config?.viewType === 'capsule'\"\r\n    [config]=\"config\"\r\n    [dataSource]=\"dataSource\"\r\n    [displayedButtons]=\"displayedButtons\"\r\n    (actionClick)=\"actionClicked($event.name, $event.row)\">\r\n  </spa-capsules>\r\n\r\n\r\n  <!-- Cards -->\r\n  <spa-cards *ngIf=\"config?.viewType === 'card'\"\r\n    [config]=\"config\"\r\n    [dataSource]=\"dataSource\"\r\n    [displayedButtons]=\"displayedButtons\"\r\n    [smallScreen]=\"smallScreen\"\r\n    (actionClick)=\"actionClicked($event.name, $event.row)\"\r\n    (columnClick)=\"columnClicked($event.column, $event.row)\"\r\n    (showBannerEvent)=\"showBanner($event)\">\r\n  </spa-cards>\r\n\r\n  <!-- Groups - Added: New grouped view type -->\r\n  <spa-groups *ngIf=\"config?.viewType === 'grouped'\"\r\n    [config]=\"config\"\r\n    [dataSource]=\"dataSource\"\r\n    [displayedButtons]=\"displayedButtons\"\r\n    (actionClick)=\"actionClicked($event.name, $event.row, $event.group, $event.button)\">\r\n  </spa-groups>\r\n\r\n\r\n  <div class=\"tin-center\">\r\n    <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\r\n  </div>\r\n\r\n</ng-container>\r\n\r\n\r\n<ng-container *ngIf=\"!hasFormAccess\">\r\n  <div class=\"tin-center\">\r\n    <p><em>Access Restricted</em></p>\r\n  </div>\r\n</ng-container>\r\n\r\n","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'spa-number',\r\n    templateUrl: './number.component.html',\r\n    styleUrls: ['./number.component.css'],\r\n    standalone: false\r\n})\r\nexport class NumberComponent implements OnInit, OnChanges {\r\n\r\n  constructor() { }\r\n\r\n  // Sync @Input value changes with FormControl\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['value'] && this.control) {\r\n      // Update FormControl when parent changes the value, including first change\r\n      if (this.control.value !== changes['value'].currentValue) {\r\n        this.control.setValue(changes['value'].currentValue, { emitEvent: false });\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.placeholder == \"\") {\r\n      this.placeholder = \"Enter \" + this.display;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.initControl(this.control)\r\n\r\n    // Set initial value after view init\r\n    if (this.value !== 0) {\r\n      this.control.setValue(this.value, { emitEvent: false });\r\n    }\r\n\r\n    // Subscribe to control value changes AFTER initial value is set\r\n    this.control.valueChanges.subscribe(val => {\r\n      this.value = val;\r\n      this.valueChange.emit(val);\r\n    });\r\n  }\r\n\r\n  initControl(control: FormControl) {\r\n    if (this.readonly) {\r\n      control.setValidators(null);\r\n      control.updateValueAndValidity();\r\n    }\r\n    if (!this.required && !this.readonly) {\r\n\r\n      control.setValidators([Validators.minLength(this.min), Validators.maxLength(this.max)]);\r\n      this.control.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  // options: FormGroup;\r\n  hideRequiredControl = new FormControl(true);\r\n  hide = true; //for password only\r\n\r\n  @Input() readonly = false;\r\n  @Input() hint = \"\";\r\n  @Input() display = \"\";\r\n  @Input() placeholder = \"\";\r\n  @Input() value = 0;\r\n  @Input() width = \"100%\"\r\n\r\n  @Output() valueChange = new EventEmitter();\r\n  @Output() leave = new EventEmitter();\r\n  @Output() enterPress = new EventEmitter();\r\n\r\n\r\n\r\n\r\n\r\n\r\n  //validation input\r\n  @Input() required = true;\r\n  @Input() min = 0;\r\n  @Input() max = 9000000000000000; //Math.max\r\n  @Input() step = 1;\r\n\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n  @Output() infoClick = new EventEmitter<void>();\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n  isHovered = false;\r\n  onMouseEnter(): void {\r\n    this.isHovered = true;\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    this.isHovered = false;\r\n  }\r\n\r\n  clear() {\r\n    // Clear both value and FormControl\r\n    this.value = 0;\r\n    this.control.setValue(0, { emitEvent: false }); // emitEvent: false prevents double emission\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  onInfoClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.infoClick.emit();\r\n  }\r\n\r\n  leaved() {\r\n    this.leave.emit();\r\n  }\r\n\r\n  enterPressed() {\r\n    this.enterPress.emit();\r\n  }\r\n\r\n  //validation\r\n  control = new FormControl(0, [Validators.required, Validators.min(this.min), Validators.max(this.max)]);\r\n\r\n  validate(control: FormControl): string {\r\n\r\n    if (this.required  && control.hasError('required')) {\r\n      return `Required`;\r\n    }\r\n\r\n    if (control.hasError('min')) {\r\n      return `Minimun value is ${this.min}`;\r\n    }\r\n\r\n    if (control.hasError('max')) {\r\n      return `Maximum value is ${this.max}`;\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n}\r\n","\r\n<mat-form-field hideRequiredMarker=\"true\" [hintLabel]=\"hint\" [hideRequiredMarker]=\"!required\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" subscriptSizing=\"dynamic\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <input matInput autocomplete=\"off\" type=\"number\" [min]=\"min\" [max]=\"max\" [step]=\"step\" (blur)=\"leaved()\" (keyup.enter)=\"enterPressed()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\" />\r\n  <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n</mat-form-field>\r\n","//-------------------------------------------EDIT\r\n\r\nimport { Component, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n// import { HttpService } from 'tin-core';\r\n\r\n@Component({\r\n    selector: 'app-editRequest',\r\n    templateUrl: './viewerDialog.component.html',\r\n    styleUrls: ['./viewer.component.css'],\r\n    standalone: false\r\n})\r\nexport class viewerDialog implements OnInit {\r\n\r\n  constructor(private httpService: HttpService, private dataServiceLib : DataServiceLib, @Inject(MAT_DIALOG_DATA) public data) { }\r\n\r\n  ngOnInit() {\r\n\r\n    this.fileNames = this.data.fileNames;\r\n    this.fullPath = this.data.path;\r\n    this.fileName = this.data.fileName;\r\n    this.currIndex = this.data.fileNames.indexOf(this.fileName);\r\n    this.setURL();\r\n\r\n  }\r\n\r\n  isProcessing: boolean = false;\r\n\r\n  fullPath: string;\r\n  fileNames = new Array();\r\n  fileName: string;\r\n  currIndex = 0;\r\n\r\n  currentFileUrl = \"\";\r\n\r\n\r\n  previous() {\r\n\r\n    if (this.fileNames.length == 0) {\r\n      return;\r\n    }\r\n\r\n    if (this.currIndex -1 >= 0)\r\n    {\r\n      this.currIndex = this.currIndex - 1;\r\n    }\r\n    else if (this.currIndex == 0)\r\n    {\r\n      this.currIndex = this.fileNames.length -1;\r\n    }\r\n\r\n    this.setURL();\r\n\r\n  }\r\n\r\n  next() {\r\n\r\n    if (this.fileNames.length == 0){\r\n      return;\r\n    }\r\n\r\n    if (this.currIndex +1 < this.fileNames.length)\r\n    {\r\n      this.currIndex = this.currIndex + 1;\r\n    }\r\n    else if (this.currIndex +1 > this.fileNames.length -1)\r\n    {\r\n      this.currIndex = 0;\r\n    }\r\n\r\n    this.setURL();\r\n\r\n  }\r\n\r\n  imageDoc = false;\r\n\r\n  setURL() {\r\n\r\n    if (this.dataServiceLib.appConfig?.docsBaseUrl){\r\n      this.currentFileUrl = `${this.dataServiceLib.appConfig.docsBaseUrl}/${this.fullPath}/${this.fileNames[this.currIndex]}`;\r\n    }\r\n    else{\r\n      if (this.httpService.apiUrl.includes('localhost')) {\r\n        this.currentFileUrl = `./assets/${this.fullPath}/${this.fileNames[this.currIndex]}`;\r\n      }\r\n      else {\r\n        this.currentFileUrl = `${this.httpService.apiUrl.replace(\"/api\", \"\").replace(\"/api\", \"\")}${this.fullPath}/${this.fileNames[this.currIndex]}`;\r\n      }\r\n    }\r\n\r\n\r\n\r\n\r\n    // this.currentFileUrl = this.currentFileUrl.replace(\"//\",\"/\");\r\n\r\n    console.log(this.currentFileUrl)\r\n    // this.currentFileUrl = \"./assets/TinasheOxygen.pdf\"\r\n\r\n    if (this.currentFileUrl.toLocaleLowerCase().endsWith(\".pdf\") || this.currentFileUrl.toLocaleLowerCase().endsWith(\".jpg\") || this.currentFileUrl.toLocaleLowerCase().endsWith(\".jpeg\")){\r\n      this.imageDoc = true;\r\n    }else{\r\n      this.imageDoc = false\r\n      window.open(this.currentFileUrl, '_blank');\r\n\r\n    }\r\n\r\n  }\r\n\r\n  change(fileName){\r\n\r\n\r\n    if (typeof fileName != 'string') {\r\n      return;\r\n    }\r\n\r\n    this.currIndex = this.fileNames.indexOf(fileName);\r\n\r\n\r\n    this.setURL();\r\n  }\r\n\r\n}\r\n","\r\n\r\n<mat-dialog-content class=\"mat-typography\">\r\n\r\n  <div class=\"row\">\r\n\r\n    <div class=\"col\">\r\n      <ngx-doc-viewer *ngIf=\"imageDoc\"\r\n        [url]=\"currentFileUrl\"\r\n        viewer=\"url\"\r\n        style=\"width:100%;height:60vh;\">\r\n      </ngx-doc-viewer>\r\n\r\n      <div *ngIf=\"!imageDoc\" class=\"d-flex justify-content-center row align-items-center\" style=\"height:60vh;\">\r\n\r\n        This file type will be downloaded\r\n\r\n      </div>\r\n    </div>\r\n\r\n\r\n    <div class=\"col-3\">\r\n      <spa-chips [chips]=\"fileNames\" display=\"Documents\" icon=\"description\" (click)=\"change($event)\"></spa-chips>\r\n    </div>\r\n\r\n  </div>\r\n\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n<button mat-button [disabled]=\"currIndex == 0\" (click)=\"previous()\" cdkFocusInitial>Previous</button>\r\n<button mat-button [disabled]=\"currIndex+1 == fileNames.length\" (click)=\"next()\" cdkFocusInitial>Next</button>\r\n<button mat-button mat-dialog-close>Cancel</button>\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { viewerDialog } from './viewerDialog.component';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { Action, ApiResponse } from '../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-viewer',\r\n    templateUrl: './viewer.component.html',\r\n    styleUrls: ['./viewer.component.css'],\r\n    standalone: false\r\n})\r\nexport class ViewerComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib,public dialog: MatDialog) { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    if (this.fileAction){\r\n      this.loadData();\r\n    }else{\r\n      this.convert();\r\n    }\r\n  }\r\n\r\n\r\n\r\n  @Input() fileAction : Action;\r\n  @Input() path = \"\";\r\n  @Input() folderName=\"\";\r\n  @Input() fileNames;// new Array()\r\n  @Input() removable = false;\r\n  @Output() remove = new EventEmitter();\r\n  @Input() display = \"Documents\";\r\n  @Input() title = \"Documents\";\r\n\r\n  // fileList: string[];\r\n\r\n  loadData() {\r\n\r\n    console.log(\"Calling files\")\r\n    let url = this.fileAction.url;\r\n    \r\n    // Changed: Support generic {propertyName} placeholders first\r\n    if (url.includes('{')) {\r\n      url = url.replace(/\\{(\\w+)\\}/g, (match, propName) => {\r\n        const value = { folderName: this.folderName }[propName];\r\n        return value !== undefined && value !== null ? String(value) : match;\r\n      });\r\n    } else {\r\n      // Fallback: Legacy /x replacement for backward compatibility\r\n      url = url.replace(\"/x\", '/' + this.folderName);\r\n    }\r\n    \r\n    this.dataService.CallApi({url: url}, \"\").subscribe((apiResponse: ApiResponse) => {\r\n      this.fileNames = apiResponse.data;\r\n      // console.log(this.fileNames)\r\n      this.convert();\r\n    });\r\n  }\r\n\r\n  convert(){\r\n    if (typeof this.fileNames == 'string') {\r\n      if (this.fileNames == \"\") {\r\n        this.fileNames = []\r\n        return\r\n      }\r\n      this.fileNames = this.fileNames.split(\"|\")\r\n\r\n    }\r\n  }\r\n\r\n  viewDocs(fileName: string) {\r\n\r\n    if (typeof fileName != 'string') {\r\n      return;\r\n    }\r\n\r\n\r\n\r\n    const dialogRef = this.dialog.open(viewerDialog, {\r\n      minWidth: '95%',\r\n      maxWidth: '80vw',\r\n\r\n      data: { fileNames: this.fileNames, fileName: fileName, path: `${this.path ?? ''}/${this.folderName ?? ''}` }\r\n    });\r\n\r\n  }\r\n\r\n  removed(i){\r\n    this.remove.emit(i);\r\n  }\r\n\r\n}\r\n","<div class=\"tin-input-row mt-3\" *ngIf=\"title != ''\">\r\n  <mat-label style=\"font-size: 20px; font-weight: 300\" >  {{title}}</mat-label >\r\n</div>\r\n\r\n<spa-chips [chips]=\"fileNames\" [title]=\"title\"  [removable]=\"removable\" icon=\"description\" (click)=\"viewDocs($event)\" (remove)=\"removed($event)\"></spa-chips>\r\n\r\n\r\n\r\n<div *ngIf=\"!fileNames || fileNames.length ==0\" class=\"d-flex justify-content-center row align-items-center\" style=\"max-height:200px\">\r\n\r\n  No {{title.toLowerCase()}}\r\n\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\r\n\r\nimport { MatChipInputEvent, MatChipGrid } from '@angular/material/chips';\r\nimport { Observable } from 'rxjs';\r\nimport { map, startWith } from 'rxjs/operators';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n@Component({\r\n    selector: 'spa-email',\r\n    templateUrl: './email.component.html',\r\n    styleUrls: ['./email.component.css'],\r\n    standalone: false\r\n})\r\nexport class EmailComponent implements OnInit {\r\n\r\n  constructor(private messageService : MessageService) { }\r\n\r\n  @Input() display = \"\";\r\n  @Input() value = \"\";\r\n  @Output() valueChange = new EventEmitter<string>();\r\n  @Input() readonly = false;\r\n  @Input() required = true;\r\n  @Input() hint = \"\";\r\n  @Input() suffix: string;\r\n  @Input() infoMessage: string;\r\n  @Input() copyContent = false;\r\n  @Input() clearContent = false;\r\n\r\n  // New inputs for autocomplete\r\n  @Input() options: any[] = [];\r\n  @Input() optionValue = \"\";\r\n\r\n  emails: string[] = [];\r\n  emailControl: FormControl;\r\n  filteredOptions: Observable<string[]>;\r\n\r\n\r\n  ngOnInit() {\r\n    this.emailControl = new FormControl('', [\r\n      Validators.required,\r\n      Validators.pattern('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$')\r\n    ]);\r\n    this.emails = this.value.split(';').filter(email => email.trim() !== '');\r\n\r\n    // Set up autocomplete filtering\r\n    this.filteredOptions = this.emailControl.valueChanges.pipe(\r\n      startWith(''),\r\n      map(value => this._filter(value))\r\n    );\r\n  }\r\n\r\n  private _filter(value: string): string[] {\r\n    const filterValue = value.toLowerCase();\r\n    return this.options\r\n      .map(option => this.optionValue ? option[this.optionValue] : option)\r\n      .filter(option => option.toLowerCase().includes(filterValue));\r\n  }\r\n\r\n  addEmail(event: MatChipInputEvent): void {\r\n    const value = (event.value || '').trim();\r\n    if (value) {\r\n      this.addMultipleEmails(value);\r\n    }\r\n    event.chipInput!.clear(); // Clear the input\r\n  }\r\n\r\n  addMultipleEmails(value: string): void {\r\n    const emailsToAdd = this.extractEmails(value);\r\n\r\n    for (const email of emailsToAdd) {\r\n      if (this.isValidEmail(email) && !this.emails.includes(email)) {\r\n        this.emails.push(email);\r\n      }\r\n    }\r\n\r\n    this.emailControl.setValue(''); // Reset the form control\r\n    this.updateValue();\r\n    // this.scrollToBottom();\r\n  }\r\n\r\n  isValidEmail(email: string): boolean {\r\n    return this.emailControl.validator(new FormControl(email)) === null;\r\n  }\r\n\r\n  handlePaste(event: ClipboardEvent): void {\r\n    event.preventDefault();\r\n    const pastedText = event.clipboardData.getData('text');\r\n    const extractedEmails = this.extractEmails(pastedText);\r\n    this.addMultipleEmails(extractedEmails.join(';'));\r\n  }\r\n\r\n  extractEmails(text: string): string[] {\r\n    const emailRegex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi;\r\n    const matches = text.match(emailRegex);\r\n    return matches ? matches : [];\r\n  }\r\n\r\n  removeEmail(email: string): void {\r\n    const index = this.emails.indexOf(email);\r\n    if (index >= 0) {\r\n      this.emails.splice(index, 1);\r\n      this.updateValue();\r\n    }\r\n  }\r\n\r\n  clearEmails(): void {\r\n    this.emails = [];\r\n    this.updateValue();\r\n  }\r\n\r\n  updateValue(): void {\r\n    this.value = this.emails.join(';');\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n\r\n\r\n  optionSelected(event: MatAutocompleteSelectedEvent): void {\r\n    this.addMultipleEmails(event.option.viewValue);\r\n    this.emailControl.setValue('');\r\n  }\r\n\r\n  copyEmails(): void {\r\n    const emailString = this.emails.join(';');\r\n    navigator.clipboard.writeText(emailString).then(() => {\r\n      this.messageService.toast('Copied');\r\n    });\r\n  }\r\n\r\n\r\n}\r\n","<mat-form-field style=\"width: 100%;\" subscriptSizing=\"dynamic\">\r\n  <mat-label>{{display}}</mat-label>\r\n  <mat-chip-grid #chipList>\r\n    <mat-chip-row *ngFor=\"let email of emails\" [removable]=\"!readonly\" (removed)=\"removeEmail(email)\">\r\n      {{email}}\r\n      <button matChipRemove *ngIf=\"!readonly\"><mat-icon class=\"tinyIcon\">cancel</mat-icon></button>\r\n    </mat-chip-row>\r\n    <input autocomplete=\"off\" #emailInput [placeholder]=\"readonly ? '' : 'Enter email addresses'\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"[13, 186]\" [matChipInputAddOnBlur]=\"true\" (matChipInputTokenEnd)=\"addEmail($event)\" [formControl]=\"emailControl\" (paste)=\"handlePaste($event)\" [readonly]=\"readonly\" [matAutocomplete]=\"auto\">\r\n  </mat-chip-grid>\r\n  <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"optionSelected($event)\">\r\n    <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"optionValue ? option[optionValue] : option\">\r\n      {{optionValue ? option[optionValue] : option}}\r\n    </mat-option>\r\n  </mat-autocomplete>\r\n  <mat-error *ngIf=\"emailControl.invalid && emailControl.touched\">Invalid email format</mat-error>\r\n  <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\r\n  <div matSuffix class=\"suffix-icons\">\r\n    <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clearEmails()\" [isHovered]=\"true\" [(value)]=\"value\"></spa-suffix>\r\n  </div>\r\n</mat-form-field>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Component({\r\n    selector: 'spa-html',\r\n    templateUrl: './html.component.html',\r\n    styleUrls: ['./html.component.css'],\r\n    standalone: false\r\n})\r\nexport class HtmlComponent implements OnInit {\r\n  constructor(private sanitizer: DomSanitizer) { }\r\n\r\n  ngOnInit(): void {\r\n    this.sanitizeHtml();\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    this.sanitizeHtml();\r\n  }\r\n\r\n  @Input() value = '';\r\n  @Input() maxHeight = '500px'; // Default maximum height\r\n  @Input() display = ''; // For consistency with other components\r\n\r\n  sanitizedHtml: SafeHtml;\r\n\r\n  private sanitizeHtml(): void {\r\n    this.sanitizedHtml = this.sanitizer.bypassSecurityTrustHtml(this.value);\r\n  }\r\n}","<div *ngIf=\"display\" class=\"html-label\">{{display}}</div>\r\n<div class=\"html-container\" [ngStyle]=\"{'max-height': maxHeight}\">\r\n  <div class=\"html-content\" [innerHTML]=\"sanitizedHtml\"></div>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { ApiResponse } from '../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-notes',\r\n    templateUrl: './notes.component.html',\r\n    styleUrls: ['./notes.component.css'],\r\n    standalone: false\r\n})\r\nexport class NotesComponent implements OnInit {\r\n  constructor(private dataService: DataServiceLib) { }\r\n\r\n  ngOnInit(): void {\r\n    this.loadNotes();\r\n  }\r\n\r\n  // Input properties\r\n  @Input() title = \"Notes\";\r\n  @Input() notes: any[] = []; // Data array if provided directly\r\n  @Input() loadAction: any; // URL config if notes need to be loaded \r\n  @Input() loadIDField: string; // Field to use for ID when loading notes\r\n  @Input() data: any; // Parent data object for ID reference\r\n\r\n  // Field mapping inputs (defaults match the existing activity component)\r\n  @Input() nameField = \"createdByName\";\r\n  @Input() dateField = \"createdDate\";\r\n  @Input() commentField = \"details\";\r\n\r\n  private loadNotes(): void {\r\n\r\n    // If notes are already provided as an object, use them directly\r\n    if (this.notes && this.notes.length > 0) {\r\n      return;\r\n    }\r\n\r\n    // Otherwise, load from the URL if configured\r\n    if (this.loadAction && this.data) {\r\n      let url = this.loadAction.url;\r\n      \r\n      // Changed: Support generic {propertyName} placeholders first\r\n      if (url.includes('{')) {\r\n        url = url.replace(/\\{(\\w+)\\}/g, (match, propName) => {\r\n          const value = this.data?.[propName];\r\n          return value !== undefined && value !== null ? String(value) : match;\r\n        });\r\n      } else if (this.loadIDField) {\r\n        // Fallback: Use loadIDField for backward compatibility\r\n        const idValue = this.data[this.loadIDField];\r\n        if (!idValue) return;\r\n        url = url.replace('/x', '/' + idValue);\r\n      }\r\n\r\n      this.dataService.CallApi({ ...this.loadAction, url }).subscribe((apiResponse: ApiResponse) => {\r\n        if (apiResponse.success && apiResponse.data) {\r\n          this.notes = apiResponse.data;\r\n        }\r\n      });\r\n    }\r\n  }\r\n}","  <div class=\"notes-container\" *ngIf=\"notes && notes.length > 0\">\r\n    <div class=\"tin-input-row mt-3\" *ngIf=\"title != ''\">\r\n      <mat-label style=\"font-size: 20px; font-weight: 300\">{{title}}</mat-label>\r\n    </div>\r\n  \r\n    <ul class=\"list-group list-group-flush\" style=\"max-height:350px; margin-left:5px\">\r\n      <li *ngFor=\"let note of notes\" class=\"list-group-item list-group-item-action flex-column align-items-start\">\r\n        <div class=\"d-flex w-100 justify-content-between\">\r\n          <div class=\"mb-0\">{{note[nameField] || note.createdByName}}</div>\r\n        </div>\r\n        <small>{{note[commentField] || note.details}} (<em>{{note[dateField] || note.createdDate | date: 'dd MMM yyyy HH:mm'}}</em>)</small>\r\n      </li>\r\n    </ul>\r\n  </div>\r\n  \r\n  <div *ngIf=\"!notes || notes.length == 0\" class=\"d-flex justify-content-center row align-items-center\" style=\"max-height:200px\">\r\n    No {{title.toLowerCase()}}\r\n  </div>","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\r\nimport { FormConfig, Field, Button, ApiResponse } from '../../classes/Classes';\r\nimport { Core } from '../../classes/TinCore';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-form',\r\n    templateUrl: './form.component.html',\r\n    styleUrls: ['./form.component.css'],\r\n    standalone: false\r\n})\r\nexport class FormComponent implements OnInit {\r\n\r\n  constructor(private messageService: MessageService, private dataService: DataServiceLib, private authService: AuthService) { }\r\n\r\n  ngOnInit() {\r\n\r\n    this.hasAccess = Core.hasFormAccess(this.config, this.authService.currentRoleSource.value);\r\n\r\n    if (!this.hasAccess) {\r\n      // this.messageService.toast('Access denied'); // Optional - notify user\r\n      return;\r\n    }\r\n\r\n    if (!this.config.fields){\r\n      this.messageService.toast(\"Please Configure Form Fields\")\r\n      return;\r\n    }\r\n\r\n    if (!this.data) {\r\n      this.messageService.toast(\"Please Configure Form Data\")\r\n      return;\r\n    }\r\n\r\n    this.fields = this.config.fields;\r\n\r\n    // Initialize BehaviorSubjects for fields with loadActions\r\n    this.fields?.forEach(field => {\r\n      if (field.loadAction && !field.optionsSubject && !field.masterField) {\r\n        field.optionsSubject = new BehaviorSubject<any[]>([]);\r\n\r\n        // Subscribe to options changes\r\n        field.optionsSubject.subscribe(newOptions => {\r\n          field.options = newOptions;\r\n\r\n          // Update child fields that depend on this field\r\n          if (this.childFields?.some(x => x.masterField === field.name)) {\r\n            this.updateChildOptions(field.name);\r\n          }\r\n        });\r\n      }\r\n    });\r\n\r\n\r\n    if (this.config.multiColumn){\r\n      this.multiColumn = this.config.multiColumn\r\n    }else{\r\n      this.multiColumn = this.fields.length > 2\r\n    }\r\n\r\n    if (this.config?.button?.display){\r\n      this.buttonDisplay = this.config.button.display;\r\n    }\r\n\r\n    this.fileField = this.fields.find(x => x.type == 'file')\r\n\r\n    if (this.config?.button?.action && this.fileField || this.config?.button?.action.url.includes(\"/form\")) {\r\n      this.config.button.action.isFormData = true;\r\n\r\n    }\r\n\r\n    this.childFields = this.fields.filter(x => x.masterField)\r\n\r\n\r\n    this.childFields.forEach(child => {\r\n      let master = this.fields.find(x => x.name == child.masterField)\r\n      if (child.loadAction) {\r\n        this.loadChildMasterOptions(child);\r\n      }else{\r\n        this.updateChildOptions(master.name);\r\n      }\r\n\r\n    });\r\n\r\n    this.fields.forEach(field => {\r\n      if (field.loadAction) {\r\n        this.loadChildMasterOptions(field);\r\n      }\r\n    });\r\n\r\n    this.initializeCompositeFields();\r\n\r\n    this.initializeSectionStates();\r\n\r\n    this.applyValueCalculations();\r\n  }\r\n\r\n  @ContentChild('dynamicSelect') dynamicSelectTemplate: TemplateRef<any>;\r\n\r\n  hasAccess = false;\r\n  fileNames\r\n  fileField: Field;\r\n  fileViewField: Field;\r\n  @Input() files: any[] = [];\r\n  fields: Field[];\r\n  buttonDisplay = \"Submit\";\r\n  isProcessing: boolean = false;\r\n  multiColumn: boolean = false;\r\n\r\n  childFields: Field[];\r\n  manuallyToggledSections: Set<string> = new Set();\r\n\r\n  @Input() data: any;\r\n  @Input() config: FormConfig;\r\n  @Output() buttonClick = new EventEmitter();\r\n  @Output() inputChange = new EventEmitter();\r\n\r\n  // Changed: Resolve {placeholder} in loadAction URLs from form data — e.g. 'pigs/list/bypen-{fromPenID}' → 'pigs/list/bypen-5'\r\n  resolveLoadAction(field: Field): any {\r\n    if (!field.loadAction?.url || !field.loadAction.url.includes('{')) return field.loadAction;\r\n    const resolvedUrl = field.loadAction.url.replace(/\\{(\\w+)\\}/g, (_, key) => this.data?.[key] ?? '');\r\n    return { ...field.loadAction, url: resolvedUrl };\r\n  }\r\n\r\n  initializeCompositeFields() {\r\n    this.fields.forEach(field => {\r\n      if (field.type === 'composite' && field.subfields) {\r\n        field.subfields.forEach(subfield => {\r\n          if (this.data[subfield.name] === undefined) {\r\n            this.data[subfield.name] = Core.getInitialValue(subfield);\r\n          }\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n  initializeSectionStates() {\r\n    if (!this.fields) return;\r\n    \r\n    this.fields.forEach(field => {\r\n      if (field.type === 'section' && field.collapsedCondition && !this.manuallyToggledSections.has(field.name)) {\r\n        field.collapsed = field.collapsedCondition(this.data);\r\n      }\r\n    });\r\n  }\r\n\r\n  private applyValueCalculations() {\r\n    if (!this.data || !this.fields) return;\r\n    \r\n    // Get visible fields that have valueCalculation functions\r\n    const calculatedFields = this.getVisibleFields()\r\n      .filter(field => typeof field.valueCalculation === 'function');\r\n    \r\n    if (calculatedFields.length === 0) return;\r\n    \r\n    // Apply calculations to each field\r\n    calculatedFields.forEach(field => {\r\n      try {\r\n        const calculatedValue = field.valueCalculation(this.data);\r\n        if (calculatedValue !== undefined) {\r\n          this.data[field.name] = calculatedValue;\r\n        }\r\n      } catch (error) {\r\n        console.error(`Error calculating value for field ${field.name}:`, error);\r\n      }\r\n    });\r\n  }\r\n\r\n  getVisibleSubfields(field : Field){\r\n    return Core.getVisibleSubfields(this.config, this.data, field, this.authService.currentRoleSource.value);\r\n\r\n\r\n  }\r\n\r\n\r\n  getVisibleFields() {\r\n    let visibleFields = this.fields?.filter(x => Core.testVisible(this.config, this.data, x, this.authService.currentRoleSource.value)) ?? [];\r\n\r\n    // Filter out fields under collapsed sections\r\n    return visibleFields.filter(field => {\r\n      if (field.type === 'section') return true;\r\n      if (field.section) {\r\n        const sectionField = this.fields.find(f => f.type === 'section' && f.name === field.section);\r\n        return !sectionField?.collapsed;\r\n      }\r\n      return true;\r\n    });\r\n  }\r\n\r\n  testReadOnly(field: Field): boolean {\r\n    return Core.testReadOnly(this.config, this.data, field);\r\n  }\r\n\r\n  testRequired(field: Field): boolean {\r\n    return Core.testRequired(this.config, this.data, field);\r\n  }\r\n\r\n  toggleSection(field: Field) {\r\n    if (field.type === 'section') {\r\n      field.collapsed = !field.collapsed;\r\n      this.manuallyToggledSections.add(field.name);\r\n    }\r\n  }\r\n\r\n  hasSectionFields(sectionName: string): boolean {\r\n    return this.fields?.some(field =>\r\n      field.section === sectionName &&\r\n      Core.testVisible(this.config, this.data, field, this.authService.currentRoleSource.value)\r\n    ) ?? false;\r\n  }\r\n\r\n  shouldSectionCollapse(field: Field): boolean {\r\n\r\n    return field.collapsed ?? false;\r\n  }\r\n\r\n\r\n  onInfoClick(event: MouseEvent, infoMessage: string): void {\r\n    event.stopPropagation();\r\n    this.messageService.info(infoMessage);\r\n  }\r\n\r\n\r\n  selectChanged(field: Field){\r\n    this.inputChanged(field, this.data[field.name] )\r\n    \r\n    if (field.onSelectChange) {\r\n      // Changed: Find and pass the selected option as the third parameter\r\n      const selectedOption = field.options?.find(opt => opt[field.optionValue || 'value'] === this.data[field.name]);\r\n      field.onSelectChange(this.data[field.name], this.data, selectedOption);\r\n    }\r\n  }\r\n\r\n\r\n\r\n  inputChanged(field : Field, value){\r\n\r\n    this.inputChange.emit({ field: field, value: value})\r\n\r\n    this.updateChildOptions(field.name)\r\n\r\n\r\n    if (this.config.mode == 'create' && field.children){\r\n      field.children.forEach(childConfig => {\r\n        let child = this.fields.find(x => x.name == childConfig.childField)\r\n        this.data[child.name] = field.options.find(x => x[field.optionValue ?? 'value'] == value)[childConfig.childValueField]\r\n      });\r\n    }\r\n\r\n    this.applyValueCalculations();\r\n\r\n  }\r\n\r\n  updateChildOptions(masterFieldName: string){\r\n\r\n    let children = this.childFields.filter(x => x.masterField == masterFieldName)\r\n\r\n    if (children != null) {\r\n\r\n      //current is master\r\n      let masterField = this.fields.find(x => x.name == masterFieldName)\r\n\r\n      if (!masterField || !masterField.options) return;\r\n\r\n      let masterOption = masterField.options?.find(x => x[masterField.optionValue ?? 'value'] == this.data[masterFieldName])\r\n\r\n      console.log(\"masterOption\", masterOption);\r\n\r\n      children.forEach(child => {\r\n\r\n        if (child.masterOptions){\r\n\r\n          if (child.masterValueField) {\r\n            \r\n            if (masterOption) {\r\n              child.options = child.masterOptions?.filter(x => x[child.masterOptionValue ?? 'masterValue'] == masterOption[child.masterValueField]);\r\n\r\n              if (child.masterDefaultValueField && !this.data[child.name]) {\r\n                \r\n                this.data[child.name] = masterOption[child.masterDefaultValueField];\r\n              }\r\n            }\r\n            \r\n          }else{\r\n            child.options = child.masterOptions?.filter(x => x[child.masterOptionValue ?? 'masterValue'] == this.data[masterFieldName])\r\n          }\r\n        }\r\n      });\r\n\r\n    }\r\n  }\r\n\r\n  private loadChildMasterOptions(child: Field) {\r\n    if (!child.loadAction) return;\r\n\r\n    this.dataService.CallApi(child.loadAction).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n\r\n        child.masterOptions = apiResponse.data;\r\n        this.updateChildOptions(child.masterField);\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n  buttonClicked(){\r\n\r\n    this.buttonClick.emit(this.data);\r\n\r\n    let button = this.config.button;\r\n\r\n    if (!button) {\r\n      return;\r\n    }\r\n\r\n    //validation\r\n    let resp = Core.validateObject(this.getVisibleFields(),this.data);\r\n    if (resp != ''){\r\n      this.messageService.toast(resp)\r\n      return;\r\n    }\r\n\r\n\r\n\r\n    if (this.files.length < 1 && this.fileField?.required && this.config.mode =='create') {\r\n      this.messageService.toast(\"Please attach file(s)\");\r\n      return;\r\n    }\r\n\r\n\r\n    if (button.confirm){\r\n\r\n      this.messageService.confirm(`${button.confirm.message}`).subscribe((result) => {\r\n        if (result == \"yes\") {\r\n          this.processCall(button)\r\n        }\r\n      });\r\n\r\n    }else{\r\n      this.processCall(button)\r\n    }\r\n\r\n\r\n\r\n\r\n  }\r\n\r\n  processCall(button: Button){\r\n\r\n    if (!button.action) return\r\n\r\n    let dataOut;\r\n\r\n    if (button.action.isFormData){\r\n\r\n      let formData: FormData = new FormData();\r\n      for (let i = 0; i < this.files.length; i++) {\r\n        formData.append(`uploadFile${i}`, this.files[i], this.files[i].name);\r\n      }\r\n\r\n      formData.append(\"data\", JSON.stringify(this.data));\r\n\r\n\r\n      dataOut = formData\r\n    }else{\r\n\r\n      dataOut = this.data\r\n    }\r\n\r\n\r\n\r\n\r\n    this.isProcessing = true\r\n    this.dataService.CallApi(button.action, dataOut).subscribe((apiResponse) => {\r\n      this.isProcessing = false\r\n\r\n      if (apiResponse.success) {\r\n\r\n        if (button.action.successMessage) {\r\n          this.messageService.toast(button.action.successMessage);\r\n        } else {\r\n          this.messageService.toast(\"Submitted\");\r\n        }\r\n\r\n        if (this.config.reset) {\r\n          Core.resetObject(this.fields, this.data)\r\n          this.files = [];\r\n          this.manuallyToggledSections.clear();\r\n          this.initializeSectionStates();\r\n          this.applyValueCalculations();\r\n        }\r\n\r\n\r\n      } else {\r\n        this.messageService.toast(\"Error: \" + apiResponse.message);\r\n      }\r\n    });\r\n  }\r\n\r\n  processForm(){\r\n\r\n\r\n\r\n\r\n\r\n  }\r\n\r\n}\r\n\r\n\r\n","\r\n\r\n\r\n<div class=\"tin-form-container\" >\r\n  <div [ngClass]=\"[multiColumn ? 'tin-grid' : 'tin-col', config.notesConfig ? 'width-75' : 'width-100']\" class=\"form-main-content\">\r\n\r\n    <div *ngIf=\"!hasAccess\" class=\"tin-center\">\r\n      <p><em>Access Restricted</em></p>\r\n    </div>\r\n  \r\n    <div [ngClass]=\"field.span || field.type =='section' || field.type =='file' || field.type =='file-view'  ? 'span-col' : ''\" *ngFor=\"let field of getVisibleFields()\">\r\n  \r\n      <ng-container>\r\n  \r\n        <ng-container [ngSwitch]=\"field.type\" class=\"highlight\">\r\n  \r\n          <div *ngSwitchCase=\"'section'\" class=\"title d-flex align-items-center\" (click)=\"toggleSection(field)\" style=\"cursor: pointer;\">\r\n            <label style=\"font-size: larger;margin-right: 10px;\">{{field.alias ?? field.name | camelToWords}}</label>\r\n            <mat-icon *ngIf=\"field.infoMessage\" (click)=\"onInfoClick($event, field.infoMessage)\" style=\"color: steelblue; font-size: 14px;\">info</mat-icon>\r\n            <!-- <button  mat-icon-button class=\"info-icon-button\"  matTooltip=\"Info\" matTooltipPosition=\"above\">\r\n  \r\n            </button> -->\r\n            <mat-icon *ngIf=\"hasSectionFields(field.name)\">{{shouldSectionCollapse(field) ? 'expand_more' : 'expand_less'}}</mat-icon>\r\n          </div>\r\n  \r\n          <ng-container *ngSwitchCase=\"'file'\">\r\n            <div class=\"mt-1 mb-2\" *ngIf=\"config.mode !='view'\">\r\n              <spa-attach [message]=\"field.alias ?? 'Drag and Drop files here'\" [(files)]=\"files\" [fileOptions]=\"field.fileOptions\"></spa-attach>\r\n            </div>\r\n          </ng-container>\r\n  \r\n          <ng-container *ngSwitchCase=\"'file-view'\">\r\n            <div class=\"mt-1 mb-2\" *ngIf=\"config.mode && config.mode !='create'\">\r\n              <spa-viewer [fileAction]=\"field.loadAction\" [path]=\"field.path\" [folderName]=\"data[field.keyField]\" ></spa-viewer>\r\n            </div>\r\n          </ng-container>\r\n  \r\n          <spa-html *ngSwitchCase=\"'html'\" [display]=\"field.alias | camelToWords\" [value]=\"data[field.name]\" [maxHeight]=\"field.maxHeight\"></spa-html>\r\n  \r\n          <label *ngSwitchCase=\"'blank'\"></label>\r\n  \r\n          <label *ngSwitchCase=\"'string'\" [ngStyle]=\"{'font-size':field.size ?? '14px'}\" >{{data[field.name] ?? field.alias ?? field.name}} {{field.suffix ?? ''}}</label>\r\n  \r\n          <spa-label *ngSwitchCase=\"'label'\" [display]=\"field.alias ?? field.name | camelToWords\" [value]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [format]=\"field.format ?? 'text'\" [suffix]=\"field.suffix\" [size]=\"field.size\"></spa-label>\r\n  \r\n          <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"testRequired(field)\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-number>\r\n  \r\n          <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"testRequired(field)\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n  \r\n          <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [infoMessage]=\"field.infoMessage\" ></spa-check>\r\n  \r\n          <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [min]=\"field?.min\" [max]=\"field?.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" ></spa-date>\r\n  \r\n          <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [min]=\"field.min\" [max]=\"field.max\" [infoMessage]=\"field.infoMessage\" ></spa-datetime>\r\n  \r\n          <spa-email *ngSwitchCase=\"'email'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"testRequired(field)\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\"  [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-email>\r\n  \r\n          <spa-text-mask *ngSwitchCase=\"'text-mask'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"testRequired(field)\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\"></spa-text-mask>\r\n  \r\n  \r\n          <ng-container *ngSwitchCase=\"'select'\">\r\n            <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n                    $implicit: field,\r\n                    field: field,\r\n                    data: data,\r\n                    testReadOnly: testReadOnly.bind(this),\r\n                    testRequired: testRequired.bind(this),\r\n                    selectChanged: selectChanged.bind(this)\r\n                  }\">\r\n            </ng-container>\r\n          </ng-container>\r\n  \r\n  \r\n          <spa-select-multi *ngSwitchCase=\"'select-multi'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"testRequired(field)\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"resolveLoadAction(field)\" [selectAll]=\"field.selectAll\">\r\n          </spa-select-multi>\r\n  \r\n          <spa-text-multi *ngSwitchCase=\"'text-multi'\" [strict]=\"field.strict\" [display]=\"field.alias ?? field.name | camelToWords\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"testRequired(field)\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"resolveLoadAction(field)\"></spa-text-multi>\r\n  \r\n  \r\n  \r\n          <ng-container *ngSwitchCase=\"'composite'\">\r\n            <div class=\"composite-field-container\">\r\n              <div class=\"composite-field-group\">\r\n                <ng-container *ngFor=\"let subfield of getVisibleSubfields(field)\">\r\n                  <ng-container [ngSwitch]=\"subfield.type\">\r\n  \r\n                    <label *ngSwitchCase=\"'string'\" [ngStyle]=\"{'font-size':field.size ?? '14px'}\" >{{data[field.name] ?? field.alias ?? field.name}} {{field.suffix ?? ''}}</label>\r\n                    \r\n                    <spa-number *ngSwitchCase=\"'number'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"testRequired(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\"  [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\"></spa-number>\r\n  \r\n                    <spa-money *ngSwitchCase=\"'money'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"testRequired(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n  \r\n                    <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [infoMessage]=\"subfield.infoMessage\" ></spa-check>\r\n  \r\n                    <spa-date *ngSwitchCase=\"'date'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" ></spa-date>\r\n  \r\n                    <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [infoMessage]=\"subfield.infoMessage\" ></spa-datetime>\r\n  \r\n                    <ng-container *ngSwitchCase=\"'select'\">\r\n                      <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n                                      $implicit: field,\r\n                                      field: field,\r\n                                      data: data,\r\n                                      testReadOnly: testReadOnly.bind(this),\r\n                                      selectChanged: selectChanged.bind(this)\r\n                                    }\">\r\n                      </ng-container>\r\n                    </ng-container>\r\n  \r\n                    <spa-text-single *ngSwitchCase=\"'text-single'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [options]=\"subfield.options\" [optionDisplay]=\"subfield.optionDisplay ?? 'name'\" [optionValue]=\"subfield.optionValue ?? 'value'\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"testRequired(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\" [loadAction]=\"resolveLoadAction(subfield)\" [regex]=\"subfield.regex\" [field]=\"subfield\" [data]=\"data\" [detailsConfig]=\"subfield.detailsConfig\" [masterField]=\"subfield.masterField\"></spa-text-single>\r\n\r\n                    <spa-text-area *ngSwitchCase=\"'text-area'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [rows]=\"subfield.rows\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"testRequired(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\" [regex]=\"subfield.regex\"></spa-text-area>\r\n\r\n                    <spa-text *ngSwitchDefault [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"testRequired(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\" [regex]=\"subfield.regex\"></spa-text>\r\n  \r\n  \r\n                  </ng-container>\r\n                </ng-container>\r\n              </div>\r\n            </div>\r\n          </ng-container>\r\n  \r\n  \r\n          <spa-text-single *ngSwitchCase=\"'text-single'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"testRequired(field)\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"resolveLoadAction(field)\" [regex]=\"field.regex\" [field]=\"field\" [data]=\"data\" [detailsConfig]=\"field.detailsConfig\" [masterField]=\"field.masterField\"></spa-text-single>\r\n\r\n          <spa-text-area *ngSwitchCase=\"'text-area'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"testRequired(field)\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [regex]=\"field.regex\"></spa-text-area>\r\n\r\n          <spa-text *ngSwitchDefault [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"testRequired(field)\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [regex]=\"field.regex\"></spa-text>\r\n  \r\n        </ng-container>\r\n  \r\n      </ng-container>\r\n  \r\n    </div>\r\n  \r\n  \r\n    <div class=\"span-col-center\" *ngIf=\"config.button\">\r\n      <button mat-raised-button color=\"primary\"  (click)=\"buttonClicked()\"  cdkFocusInitial>{{buttonDisplay}}</button>\r\n    </div>\r\n  \r\n  \r\n  </div>\r\n  <div class=\"notes-section\" *ngIf=\"config.notesConfig\">\r\n    <spa-notes\r\n      [title]=\"config.notesConfig.title || 'Notes'\"\r\n      [notes]=\"config.notesConfig.notes || []\"\r\n      [loadAction]=\"config.notesConfig.loadAction\"\r\n      [loadIDField]=\"config.notesConfig.loadIDField\"\r\n      [data]=\"data\"\r\n      [nameField]=\"config.notesConfig.nameField || 'createdByName'\"\r\n      [dateField]=\"config.notesConfig.dateField || 'createdDate'\"\r\n      [commentField]=\"config.notesConfig.commentField || 'details'\">\r\n    </spa-notes>\r\n  </div>\r\n</div>\r\n\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { AlertMessage, AlertConfig } from '../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-alert',\r\n    templateUrl: './alert.component.html',\r\n    styleUrls: ['./alert.component.css'],\r\n    standalone: false\r\n})\r\nexport class AlertComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n\r\n  @Input() config: AlertConfig;\r\n  @Input() data;\r\n\r\n\r\n  getAlertMessages(type = undefined): AlertMessage[] {\r\n    return this.config?.messages\r\n      .filter(x => this.testVisible(x))\r\n      .filter(x => x.type === type) || [];\r\n  }\r\n\r\n  hasAlertMessages(type = undefined): boolean {\r\n    return this.config?.messages\r\n      .filter(x => this.testVisible(x))\r\n      .some(x => x.type === type) || false;\r\n  }\r\n\r\n  hasAnyAlertMessages(): boolean {\r\n    return this.config?.messages?.some(x => this.testVisible(x)) || false;\r\n  }\r\n\r\n  testVisible(msg: AlertMessage): boolean {\r\n\r\n    if (msg.showCondition) {\r\n      // Guard: Don't evaluate condition if data is not loaded yet\r\n      if (!this.data) {\r\n        return false;\r\n      }\r\n      return msg.showCondition(this.data);\r\n    }\r\n    \r\n    // Guard: Don't evaluate hiddenCondition if data is not loaded yet\r\n    if (msg.hiddenCondition && !this.data) {\r\n      return false;\r\n    }\r\n    \r\n    return msg.hiddenCondition ? !msg.hiddenCondition(this.data) : true;\r\n\r\n  }\r\n\r\n  getMessageContent(msg: AlertMessage): string {\r\n    // If messageField is specified and data exists, use dynamic message\r\n    if (msg.messageField && this.data && this.data[msg.messageField]) {  // Changed: contentField to messageField\r\n      return this.data[msg.messageField];  // Changed: contentField to messageField\r\n    }\r\n\r\n    // Fall back to static message\r\n    return msg.message || '';  // Changed: content to message\r\n  }\r\n\r\n}\r\n","<div [style.margin-bottom]=\"hasAnyAlertMessages() ? '15px' : '0'\">\r\n  \r\n<div *ngIf=\"hasAlertMessages()\" class=\"alert alert-secondary\" [ngClass]=\"{'alert-compact': config.compact}\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n  <p *ngIf=\"config.subject\">{{config.subject}}</p>\r\n  <ng-container *ngFor=\"let msg of getAlertMessages(); let last = last\">\r\n    <label *ngIf=\"testVisible(msg)\">{{getMessageContent(msg)}}</label>\r\n    <br *ngIf=\"!last\">\r\n  </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('success')\" class=\"alert alert-success\" [ngClass]=\"{'alert-compact': config.compact}\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n  <p *ngIf=\"config.subject\">{{config.subject}}</p>\r\n  <ng-container *ngFor=\"let msg of getAlertMessages('success'); let last = last\">\r\n    <label *ngIf=\"testVisible(msg)\">{{getMessageContent(msg)}}</label>\r\n    <br *ngIf=\"!last\">\r\n  </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('info')\" class=\"alert alert-info\" [ngClass]=\"{'alert-compact': config.compact}\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n  <p *ngIf=\"config.subject\">{{config.subject}}</p>\r\n  <ng-container *ngFor=\"let msg of getAlertMessages('info'); let last = last\">\r\n    <label *ngIf=\"testVisible(msg)\">{{getMessageContent(msg)}}</label>\r\n    <br *ngIf=\"!last\">\r\n  </ng-container>\r\n\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('warn')\" class=\"alert alert-warning\" [ngClass]=\"{'alert-compact': config.compact}\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n  <p *ngIf=\"config.subject\">{{config.subject}}</p>\r\n  <ng-container *ngFor=\"let msg of getAlertMessages('warn'); let last = last\">\r\n    <label *ngIf=\"testVisible(msg)\">{{getMessageContent(msg)}}</label>\r\n    <br *ngIf=\"!last\">\r\n  </ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"hasAlertMessages('critical')\" class=\"alert alert-danger\" [ngClass]=\"{'alert-compact': config.compact}\" style=\"font-size: 14px;margin-bottom: 5px;\" role=\"alert\">\r\n  <p *ngIf=\"config.subject\">{{config.subject}}</p>\r\n  <ng-container *ngFor=\"let msg of getAlertMessages('critical'); let last = last\">\r\n    <label *ngIf=\"testVisible(msg)\">{{getMessageContent(msg)}}</label>\r\n    <br *ngIf=\"!last\">\r\n  </ng-container>\r\n</div>\r\n\r\n</div>","import { Component, Input, OnInit, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core'; // Changed: Added OnChanges, SimpleChanges\r\nimport { TableConfig } from '../../classes/Classes';\r\nimport { Subject } from 'rxjs';\r\nimport { TabService, VisibleTab } from '../../services/tab.service';\r\n\r\n// Component to display multiple tables in tabs with lazy loading and count badges\r\n@Component({\r\n    selector: 'spa-tabs',\r\n    templateUrl: './tabs.component.html',\r\n    styleUrls: ['./tabs.component.css'],\r\n    standalone: false\r\n})\r\nexport class TabsComponent implements OnInit, OnChanges { // Changed: Implement OnChanges\r\n\r\n  constructor(private tabService: TabService) { }\r\n\r\n  ngOnInit(): void {\r\n    // Initialize tabs with counts and reload subjects using service\r\n    const initialized = this.tabService.initializeTabs(this.tableConfigs, this.parentDetails);\r\n    this.tabCounts = initialized.tabCounts;\r\n    this.tableReloads = initialized.tableReloads;\r\n    this.updateVisibleTabs(); // Changed: Cache visible tabs on init\r\n  }\r\n\r\n  // Changed: Recalculate visible tabs when inputs change\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['tableConfigs'] || changes['parentDetails']) {\r\n      this.updateVisibleTabs();\r\n    }\r\n  }\r\n\r\n  @Input() tableConfigs: TableConfig[] = [];\r\n  @Input() reload: Subject<boolean>;\r\n  @Input() parentDetails: any;\r\n  @Input() nestingLevel: number = 0; // Changed: Track nesting depth for dialog recursion control\r\n  @Output() formRefresh = new EventEmitter<void>();\r\n\r\n  tabCounts: { [index: number]: number } = {};\r\n  activeTabsLoaded: { [index: number]: boolean } = {};\r\n  selectedTabIndex = 0;\r\n  tableReloads: { [index: number]: Subject<boolean> } = {};\r\n  visibleTabs: VisibleTab[] = []; // Changed: Cache visible tabs to prevent infinite loop\r\n\r\n  // Changed: Use service for tab change handling\r\n  onTabChange(event: any): void {\r\n    this.selectedTabIndex = event.index;\r\n    this.tabService.handleTabChange(this.selectedTabIndex, this.activeTabsLoaded);\r\n  }\r\n\r\n  // Changed: Use service to get tab count\r\n  getTabCount(index: number): number | undefined {\r\n    return this.tabService.getTabCount(index, this.tabCounts);\r\n  }\r\n\r\n  // Changed: Use service to check if badge should be shown\r\n  shouldShowBadge(index: number): boolean {\r\n    return this.tabService.shouldShowBadge(index, this.tableConfigs, this.tabCounts);\r\n  }\r\n\r\n  // Changed: Use service to get tab title\r\n  getTabTitle(config: TableConfig): string {\r\n    return this.tabService.getTabTitle(config);\r\n  }\r\n\r\n  // Changed: Use service to check if tab data should be loaded\r\n  shouldLoadTabData(index: number): boolean {\r\n    return this.tabService.shouldLoadTabData(index, this.activeTabsLoaded);\r\n  }\r\n\r\n  // Refresh count for specific tab\r\n  refreshTabCount(index: number): void {\r\n    this.tabService.refreshTabCount(index, this.tableConfigs, this.tabCounts, this.parentDetails); // Changed: Pass parentDetails for URL placeholder replacement\r\n  }\r\n\r\n  // Changed: Handle action success from table (matching tabs-internal)\r\n  onTableActionSuccess(tabIndex: number, event: any): void {\r\n    const config = this.tableConfigs[tabIndex];\r\n    \r\n    // Refresh count if available\r\n    this.refreshTabCount(tabIndex);\r\n    \r\n    // Trigger form refresh if configured\r\n    if (config.causeFormRefresh) {\r\n      this.formRefresh.emit();\r\n    }\r\n  }\r\n\r\n  // Changed: Check if tab is visible based on permissions and conditions\r\n  isTabVisible(config: TableConfig): boolean {\r\n    return this.tabService.isTabVisible(config, this.parentDetails);\r\n  }\r\n\r\n  // Changed: Update cached visible tabs - called on init and when inputs change\r\n  updateVisibleTabs(): void {\r\n    this.visibleTabs = this.tabService.getVisibleTabs(this.tableConfigs, this.parentDetails);\r\n  }\r\n\r\n  // Changed: Get reload subject for specific tab or use global reload\r\n  getReloadSubject(index: number): Subject<boolean> {\r\n    return this.reload || this.tableReloads[index];\r\n  }\r\n}","<mat-tab-group (selectedTabChange)=\"onTabChange($event)\" [selectedIndex]=\"selectedTabIndex\">\r\n\r\n  <!-- Changed: Use cached visibleTabs property to prevent infinite change detection loop -->\r\n  <ng-container *ngFor=\"let tab of visibleTabs; let i = index\">\r\n    <mat-tab *ngIf=\"isTabVisible(tab.config)\">\r\n\r\n      <!-- Tab label with optional count badge -->\r\n      <ng-template matTabLabel>\r\n        <span\r\n          [matBadge]=\"shouldShowBadge(tab.originalIndex) ? getTabCount(tab.originalIndex) : null\"\r\n          [matBadgeHidden]=\"!shouldShowBadge(tab.originalIndex)\"\r\n          matBadgeOverlap=\"false\">\r\n          {{getTabTitle(tab.config)}}\r\n        </span>\r\n      </ng-template>\r\n\r\n      <!-- Tab content with lazy-loaded table -->\r\n      <div *ngIf=\"shouldLoadTabData(i)\" class=\"tab-content\">\r\n        <spa-table\r\n          [config]=\"tab.config\"\r\n          [reload]=\"getReloadSubject(tab.originalIndex)\"\r\n          [inTab]=\"true\"\r\n          [activeTab]=\"selectedTabIndex === i\"\r\n          [nestingLevel]=\"nestingLevel\"\r\n          (actionSuccess)=\"onTableActionSuccess(tab.originalIndex, $event)\">\r\n        </spa-table>\r\n      </div>\r\n\r\n      <!-- Placeholder for non-loaded tabs -->\r\n      <div *ngIf=\"!shouldLoadTabData(i)\" class=\"tab-placeholder\">\r\n        <!-- Empty placeholder - content will load when tab is activated -->\r\n      </div>\r\n\r\n    </mat-tab>\r\n  </ng-container>\r\n\r\n</mat-tab-group>","import { Component, Input } from '@angular/core';\r\nimport { StatusConfig, StatusItem } from '../../classes/Classes';\r\n\r\n\r\n\r\n@Component({\r\n    selector: 'spa-statuses',\r\n    templateUrl: './statuses.component.html',\r\n    styleUrls: ['./statuses.component.css'],\r\n    standalone: false\r\n})\r\nexport class StatusesComponent {\r\n\r\n  @Input() config: StatusConfig;\r\n  @Input() data: any;\r\n\r\n  // Check if the entire component should be visible\r\n  isComponentVisible(): boolean {\r\n    if (!this.config || !this.data) return false;\r\n    return this.config.hiddenCondition ? !this.config.hiddenCondition(this.data) : true;\r\n  }\r\n\r\n  // Check if individual status item should be visible\r\n  isItemVisible(item: StatusItem): boolean {\r\n    if (!this.data) return false;\r\n    return item.hiddenCondition ? !item.hiddenCondition(this.data) : true;\r\n  }\r\n\r\n  // Get the icon based on status value and state conditions\r\n  getIcon(item: StatusItem): string {\r\n    if (!this.data || !item.states) return '';\r\n    \r\n    const matchingState = item.states.find(state => state.condition(this.data));\r\n    \r\n    return matchingState ? matchingState.icon : '';\r\n  }\r\n\r\n  // Get the icon color based on status value and state conditions\r\n  getIconColor(item: StatusItem): string {\r\n    if (!this.data || !item.states) return '';\r\n    \r\n    const matchingState = item.states.find(state => state.condition(this.data));\r\n    \r\n    return matchingState ? matchingState.color : '';\r\n  }\r\n}","<div *ngIf=\"isComponentVisible()\" class=\"statuses-container\">\r\n  <ng-container *ngFor=\"let item of config.items\">\r\n    <button \r\n      *ngIf=\"isItemVisible(item)\"\r\n      mat-stroked-button \r\n      class=\"status-button\">\r\n      {{item.name}} \r\n      <mat-icon [ngStyle]=\"{'color': getIconColor(item)}\">{{getIcon(item)}}</mat-icon>\r\n    </button>\r\n  </ng-container>\r\n</div>","\r\nimport { Component, OnInit, Inject, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { FormConfig, Field, TableConfig, Button, DetailsDialogConfig, Action, ApiResponse, StepConfig, StatusConfig, CloseOptions } from '../../classes/Classes';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { Core, DetailsDialogProcessor } from '../../classes/TinCore';\r\nimport { LoaderService } from '../../services/loader.service';\r\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { Subject, Subscription, config, interval } from 'rxjs';\r\nimport { ButtonService } from '../../services/button.service';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { TableConfigService } from '../../services/table-config.service';\r\n// Removed: MatTabChangeEvent import - tab logic moved to spa-tabs-internal\r\n\r\n@Component({\r\n    selector: 'spa-detailsDialog',\r\n    templateUrl: './detailsDialog.component.html',\r\n    styleUrls: ['./table.component.css'],\r\n    standalone: false\r\n})\r\nexport class DetailsDialog implements OnInit, OnDestroy {\r\n\r\n  constructor(private breakpointObserver: BreakpointObserver,private loaderService: LoaderService,public dataService: DataServiceLib,private messageService: MessageService,\r\n    private dialogRef: MatDialogRef<DetailsDialog>, @Inject(MAT_DIALOG_DATA) public detailsConfig: DetailsDialogConfig, private buttonService: ButtonService,\r\n    private dialogService: DialogService, private authService: AuthService, public tableConfigService: TableConfigService)\r\n  {\r\n    // detect screen size changes\r\n    this.breakpointObserver.observe([\"(max-width: 600px)\"]).subscribe((result: BreakpointState) => {\r\n\r\n      if (result.matches) {\r\n        this.smallScreen = true\r\n      }else {\r\n        this.smallScreen = false\r\n      }\r\n\r\n    });\r\n  }\r\n\r\n  ngOnInit() {\r\n    // Changed: Read nestingLevel from injected config and determine if tabs should be shown\r\n    this.nestingLevel = this.detailsConfig.nestingLevel ?? 0;\r\n    this.showTabs = this.nestingLevel < 2;\r\n\r\n    const { tableConfig, tableConfigs, formConfig, stepConfig, statusConfig, buttons } = DetailsDialogProcessor.initializeConfigs(this.detailsConfig);\r\n    this.tableConfig = tableConfig;\r\n    this.tableConfigs = tableConfigs;\r\n    this.formConfig = formConfig;\r\n    this.stepConfig = stepConfig;\r\n    this.statusConfig = statusConfig;\r\n    this.buttons = buttons;\r\n\r\n    let resp = DetailsDialogProcessor.handleFormMode(this.detailsConfig, this.formConfig,);\r\n\r\n    if (resp.loadByAction){\r\n      this.loadByAction = true;\r\n      formConfig.loadAction = resp.action;\r\n      this.loadData(resp.action, false);\r\n    }else{\r\n      this.details = resp.details;\r\n      DetailsDialogProcessor.setHeroValue(this.detailsConfig, this.details);\r\n      this.loadByAction = false;\r\n      this.isLoadComplete = true;\r\n    }\r\n\r\n    this.fileField = DetailsDialogProcessor.setFileField(this.formConfig);\r\n\r\n    this.loaderService.isLoading.subscribe(x => this.isProcessing = x);\r\n\r\n    const { extraButtons, createButton, editButton, deleteButton } = DetailsDialogProcessor.setupButtons(this.buttons);\r\n    this.extraButtons = extraButtons;\r\n    this.createButton = createButton;\r\n    this.editButton = editButton;\r\n    this.deleteButton = deleteButton;\r\n\r\n    this.setTitleAction();\r\n    this.initAutoRefresh();\r\n\r\n    // Changed: Check backend state on open if initAction configured\r\n    if (this.detailsConfig.initAction) {\r\n      this.isLoadComplete = false;\r\n      this.dataService.CallApi(this.detailsConfig.initAction).subscribe((apiResponse: ApiResponse) => {\r\n        if (apiResponse.success && apiResponse.data?.hasItems) {\r\n          this.details = apiResponse.data;\r\n          this.formConfig.mode = 'edit';\r\n          this.formConfig.loadAction = this.detailsConfig.initAction;\r\n          this.loadByAction = true;\r\n          this.setTitleAction();\r\n          if (this.tableConfigs) {\r\n            this.tableReload.next(true);\r\n          }\r\n        }\r\n        this.isLoadComplete = true;\r\n      });\r\n    }\r\n\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    // Cleanup subscription on component destroy\r\n    this.stopAutoRefresh();\r\n  }\r\n\r\n  private refreshSubscription: Subscription;\r\n  autoRefreshEnabled: boolean = false;\r\n  userKeepOpen: boolean = false; // Added: runtime state for the user-controlled Keep Open checkbox\r\n  \r\n  titleAction = \"View\";\r\n  loadByAction = false;\r\n\r\n  extraButtons: Button[];\r\n  buttons: Button[];\r\n  createButton: Button;\r\n  editButton: Button;\r\n  deleteButton: Button;\r\n\r\n  // modeButton : Button\r\n  fileField: Field;\r\n  files: any[] = [];\r\n\r\n  tableReload: Subject<boolean> = new Subject();\r\n\r\n  tableConfig: TableConfig\r\n  tableConfigs : TableConfig[]\r\n  details: any\r\n  formConfig: FormConfig;\r\n  stepConfig : StepConfig;\r\n  statusConfig : StatusConfig;\r\n  smallScreen = false;\r\n\r\n  nestingLevel: number = 0; // Changed: Track dialog nesting depth for recursion control\r\n  showTabs: boolean = true; // Changed: Controls whether tabs are rendered — false when nestingLevel >= 2\r\n\r\n  isLoadComplete: boolean = false;\r\n  isProcessing: boolean = false;\r\n\r\n  @Output() inputChange = new EventEmitter();\r\n\r\n  private initAutoRefresh() {\r\n    const config = this.detailsConfig.autoRefreshConfig;\r\n    if (!config) return;\r\n\r\n    // Set initial state based on defaultOn configuration\r\n    this.autoRefreshEnabled = config.defaultOn || false;\r\n\r\n    // Start auto-refresh if enabled by default\r\n    if (this.autoRefreshEnabled) {\r\n      this.startAutoRefresh();\r\n    }\r\n  }\r\n\r\n  private startAutoRefresh() {\r\n\r\n    if (!this.detailsConfig.autoRefreshConfig) return;\r\n    \r\n    const refreshInterval = this.detailsConfig.autoRefreshConfig.interval || 5000; // Default to 5 seconds\r\n    \r\n    // Clear any existing subscription\r\n    this.stopAutoRefresh();\r\n    \r\n    // Create new subscription\r\n    this.refreshSubscription = interval(refreshInterval).subscribe(() => {\r\n      if (this.isLoadComplete && !this.isProcessing) {\r\n        this.refreshData();\r\n      }\r\n    });\r\n  }\r\n\r\n  private stopAutoRefresh() {\r\n    if (this.refreshSubscription) {\r\n      this.refreshSubscription.unsubscribe();\r\n      this.refreshSubscription = null;\r\n    }\r\n  }\r\n\r\n  toggleAutoRefresh() {\r\n    // this.autoRefreshEnabled = !this.autoRefreshEnabled;\r\n    \r\n    if (this.autoRefreshEnabled) {\r\n      this.startAutoRefresh();\r\n    } else {\r\n      this.stopAutoRefresh();\r\n    }\r\n  }\r\n\r\n  loadData(action: Action, causeTablesReload) {\r\n\r\n    if (action && this.loadByAction) {\r\n\r\n      this.dataService.CallApi(action).subscribe((apiResponse: ApiResponse) => {\r\n\r\n        if (apiResponse.success) {\r\n          this.details = apiResponse.data\r\n          this.isLoadComplete = true;\r\n          // DetailsDialogProcessor.setHeroValue(this.detailsConfig, this.details);\r\n          if(causeTablesReload) this.tableReload.next(true);\r\n\r\n          const config = this.detailsConfig.autoRefreshConfig;\r\n          if (this.autoRefreshEnabled && config?.stopCondition && config.stopCondition(this.details)) {\r\n            this.autoRefreshEnabled = false;\r\n            this.stopAutoRefresh();\r\n          }\r\n        }\r\n        else{\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n\r\n          if (this.autoRefreshEnabled) {\r\n            this.autoRefreshEnabled = false;\r\n            this.stopAutoRefresh();\r\n          }\r\n        }\r\n\r\n      });\r\n    }\r\n\r\n  }\r\n\r\n  inputChanged(event) {\r\n    this.inputChange.emit({ field: event.field, value: event.value })\r\n  }\r\n\r\n\r\n  setMode(newMode){\r\n    this.formConfig.mode = newMode\r\n    this.setTitleAction()\r\n  }\r\n\r\n  setTitleAction(){\r\n    if (this.formConfig.fixedTitle) {\r\n      this.titleAction = \"\";\r\n      return;\r\n    }\r\n\r\n    this.titleAction = this.buttonService.getTitleAction(this.formConfig.mode, this.buttons);\r\n  }\r\n\r\n  getButton(name: string) {\r\n    return this.buttonService.getButton(this.buttons, name);\r\n  }\r\n\r\n  testDisabled(row, buttonName: string): boolean {\r\n    const button = this.getButton(buttonName);\r\n\r\n    if (!button) return false;\r\n\r\n    // Create a copy of the button with component's detailsConfig\r\n    const buttonWithConfig = {\r\n      ...button,\r\n      detailsConfig: button.detailsConfig ? { ...button.detailsConfig } : this.detailsConfig\r\n    };\r\n\r\n    return this.buttonService.testDisabled(buttonWithConfig, row);\r\n  }\r\n\r\n\r\n  testVisible(row, buttonName: string): boolean {\r\n    const button = this.getButton(buttonName);\r\n    if (!button) return false;\r\n\r\n    // Create a copy of the button with component's detailsConfig\r\n    const buttonWithConfig = {\r\n      ...button,\r\n      detailsConfig: button.detailsConfig ? { ...button.detailsConfig } : this.detailsConfig\r\n    };\r\n\r\n    return this.buttonService.testVisible(buttonWithConfig, row)\r\n  }\r\n\r\n  // Removed: testVisibleTab method - handled by TabService in spa-tabs-internal\r\n\r\n  getButtonColor(button: Button, row) {\r\n    return this.buttonService.getButtonColor(button, row);\r\n  }\r\n\r\n  getVisibleFields() {\r\n    return this.formConfig.fields?.filter(x => Core.testVisible(this.formConfig, this.details, x, this.authService.currentRoleSource.value))\r\n  }\r\n\r\n\r\n  create() {\r\n    this.handleButtonAction('create');\r\n  }\r\n\r\n  edit() {\r\n    this.handleButtonAction('edit');\r\n  }\r\n\r\n  delete() {\r\n    const button = this.buttonService.getButton(this.buttons, 'delete');\r\n    if (!button) return;\r\n\r\n    let confirmMessage = this.buttonService.getConfirmMessage(button, this.details);\r\n    if (!confirmMessage) {\r\n      confirmMessage = `Are you sure you want to delete ?`;\r\n    }\r\n\r\n    this.messageService.confirm(confirmMessage).subscribe((result) => {\r\n      if (result == \"yes\") {\r\n        this.handleButtonAction('delete');\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n  custom(button: Button ) {\r\n    if (button.dialog && button.detailsConfig) {\r\n      this.openNestedDetailsDialog(button);\r\n    } else {\r\n      this.handleButtonAction(button.name);\r\n    }\r\n  }\r\n\r\n  private openNestedDetailsDialog(button: Button): void {\r\n    // Changed: Use token pattern instead of direct DetailsDialog import, propagate nestingLevel\r\n    this.dialogService.openDefaultDetailsDialog(button, this.details, this.nestingLevel).subscribe(result => {\r\n\r\n      if (result.action === 'inputChange') {\r\n        this.inputChanged(result.change);\r\n      } else if (result && result.message === 'success') {\r\n        this.refreshData();\r\n      }\r\n\r\n    });\r\n  }\r\n\r\n  private refreshData(): void {\r\n    if (this.formConfig.loadAction) {\r\n      this.loadData(this.formConfig.loadAction, true);\r\n    }\r\n  }\r\n\r\n  handleButtonAction(buttonName: string) {\r\n    \r\n    const button = this.getButton(buttonName);\r\n    if (!button) return;\r\n   \r\n\r\n    if (button.onClick) {\r\n      button.onClick(this.details);\r\n    }\r\n\r\n    this.processButtonAction(button);\r\n  }\r\n\r\n  // Added: returns the effective keepOpen value — user checkbox takes precedence when allowUserKeepOpen is enabled\r\n  private effectiveKeepOpen(button: Button): boolean {\r\n    if (this.detailsConfig.allowUserKeepOpen) return this.userKeepOpen;\r\n    return button.keepOpen ?? false;\r\n  }\r\n\r\n  processButtonAction(button : Button) {\r\n    if (!button.action) {\r\n      if (!this.effectiveKeepOpen(button)) { // Changed: use effectiveKeepOpen to respect user checkbox\r\n        this.dialogRef.close({ message: 'emit', data: this.details });\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (button.skipValidation || this.validateForm()) {\r\n      this.executeAction(button, this.details);\r\n    }\r\n  }\r\n\r\n  private validateForm(): boolean {\r\n    let validationResult = Core.validateObject(this.getVisibleFields(), this.details);\r\n    if (validationResult !== '') {\r\n      this.messageService.toast(validationResult);\r\n      return false;\r\n    }\r\n\r\n    if (this.files.length < 1 && this.fileField?.required && this.formConfig.mode === 'create') {\r\n      this.messageService.toast(\"Please attach file(s)\");\r\n      return false;\r\n    }\r\n\r\n    // Validate composite fields\r\n    for (const field of this.getVisibleFields()) {\r\n      if (field.type === 'composite') {\r\n        validationResult = Core.validateObject(Core.getVisibleSubfields(this.formConfig, this.details, field, this.authService.currentRoleSource.value), this.details, );\r\n        if (validationResult !== '') {\r\n          this.messageService.toast(validationResult);\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private prepareActionData(button: Button, data: any): any {\r\n    if (this.buttonService.isFormButton(button)) {\r\n      const formData = new FormData();\r\n      for (let i = 0; i < this.files.length; i++) {\r\n        formData.append(`uploadFile${i}`, this.files[i], this.files[i].name);\r\n      }\r\n      formData.append(\"data\", JSON.stringify(data));\r\n      return formData;\r\n    }\r\n    return data;\r\n  }\r\n\r\n  private executeAction(button: Button, data: any) {\r\n    const actionData = this.prepareActionData(button, data);\r\n\r\n    if (button.confirm) {\r\n      let confirmMessage = this.buttonService.getConfirmMessage(button, this.details);\r\n\r\n      if (!confirmMessage && button.name == 'delete') {\r\n        confirmMessage = `Are you sure you want to delete ?`;\r\n      }\r\n\r\n      this.messageService.confirm(confirmMessage).subscribe((result) => {\r\n        if (result == \"yes\") {\r\n          this.performApiCall(button, actionData);\r\n        }\r\n      });\r\n\r\n    } else {\r\n      this.performApiCall(button, actionData);\r\n    }\r\n\r\n  }\r\n\r\n  private performApiCall(button: Button, data: any) {\r\n    this.dataService.CallApi(button.action, data).subscribe((apiResponse: ApiResponse) => {\r\n\r\n      if (apiResponse.data){\r\n        this.details = apiResponse.data;\r\n      }\r\n\r\n      if (apiResponse.success) {\r\n\r\n        if (apiResponse.message.includes(\"approval\") || apiResponse.message.includes(\"approve\") || apiResponse.message.includes(\"decline\")) {\r\n          this.messageService.toast(apiResponse.message);\r\n        } else if (button.action.successMessage) {\r\n          this.messageService.toast(button.action.successMessage);\r\n        } else if (apiResponse.message != \"success\" && apiResponse.message != \"\") {\r\n          this.messageService.toast(apiResponse.message);\r\n        } else {\r\n          this.messageService.toast(\"Updated\");\r\n        }\r\n\r\n        if (button.onSuccess) {\r\n          button.onSuccess(apiResponse.data, this.details);\r\n        }\r\n\r\n        if (this.effectiveKeepOpen(button)) { // Changed: use effectiveKeepOpen to respect user checkbox\r\n          if (button.resetMode) {\r\n            // Changed: Reset values in-place to preserve loaded select options\r\n            Core.resetObject(this.formConfig.fields, this.details);\r\n            this.formConfig.mode = button.resetMode;\r\n            this.loadByAction = false;\r\n            this.isLoadComplete = true;\r\n            this.setTitleAction();\r\n          } else if (button.name === 'create' && this.detailsConfig.allowUserKeepOpen && this.userKeepOpen && this.detailsConfig.keepOpenBehavior === 'reset') {\r\n            // Changed: Reset values in-place to preserve loaded select options for next capture\r\n            Core.resetObject(this.formConfig.fields, this.details);\r\n          } else if (button.name === 'create' && apiResponse.data) {\r\n            this.details = apiResponse.data;\r\n\r\n            if (this.detailsConfig.heroField && apiResponse.data[this.detailsConfig.heroField]) {\r\n              this.detailsConfig.heroValue = apiResponse.data[this.detailsConfig.heroField];\r\n              this.formConfig.heroField = this.detailsConfig.heroField;\r\n              this.formConfig.heroValue = this.detailsConfig.heroValue;\r\n            }\r\n\r\n            // Changed: Re-transform tableConfigs URLs with new details after keepOpen create\r\n            if (this.tableConfigs) {\r\n              this.tableConfigs.forEach(tc => {\r\n                if (tc.loadAction && tc.loadCriteria && tc.loadIDField) {\r\n                  const idValue = this.details?.[tc.loadIDField];\r\n                  tc.loadAction.url = `${tc.loadAction.url.split('/')[0]}/${tc.loadCriteria}/${idValue ?? 'x'}`;\r\n                }\r\n              });\r\n              this.tableReload.next(true); // Changed: Trigger nested table reload with resolved URLs\r\n            }\r\n\r\n            // Changed: Set loadAction from initAction for future refreshes\r\n            if (this.detailsConfig.initAction) {\r\n              this.formConfig.loadAction = this.detailsConfig.initAction;\r\n              this.loadByAction = true;\r\n            }\r\n\r\n            this.formConfig.mode = 'edit';\r\n            this.setTitleAction();\r\n            this.isLoadComplete = true;\r\n\r\n          } else {\r\n            this.refreshData();\r\n          }\r\n        }else{\r\n          this.dialogRef.close({ message: 'success', data: { ...apiResponse, data: button.name == 'create' ? apiResponse.data : this.details  } });\r\n        }\r\n        \r\n      } else {\r\n        this.messageService.toast(\"Error: \" + apiResponse.message);\r\n      }\r\n    });\r\n  }\r\n\r\n  getClosePosition(): 'top' | 'bottom' {\r\n    return this.detailsConfig.closeOptions?.position || 'bottom';\r\n  }\r\n\r\n  getCloseText(): string {\r\n    return this.detailsConfig.closeOptions?.text || 'Cancel';\r\n  }\r\n\r\n  shouldShowTopClose(): boolean {\r\n    return this.getClosePosition() === 'top';\r\n  }\r\n\r\n  shouldShowBottomClose(): boolean {\r\n    return this.getClosePosition() === 'bottom';\r\n  }\r\n\r\n  close(){\r\n    if (this.detailsConfig.refreshOnClose){\r\n      this.dialogRef.close({ message: 'success', data: this.details });\r\n    }else{\r\n      this.dialogRef.close({ message: 'emit', data: this.details });\r\n    }\r\n  }\r\n\r\n};\r\n","<div class=\"dialog-container\">\r\n\r\n  <div class=\"dialog-content\">\r\n\r\n    <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n\r\n    <div class=\"d-flex justify-content-between align-items-center mt-2\" style=\"padding-left: 24px; padding-right: 24px;\">\r\n\r\n      <div>\r\n        <label style=\"font-size: 20px; font-weight:500;margin-top: 10px;margin-bottom: 5px;\" >{{titleAction | titlecase}} {{formConfig?.title}}</label>\r\n      </div>\r\n\r\n      <div class=\"d-flex align-items-center\" style=\"gap: 8px;\">\r\n\r\n        <!-- Changed: Auto Refresh icon button — grey when off, green when on, with dynamic tooltip -->\r\n        <button *ngIf=\"detailsConfig.autoRefreshConfig\" mat-icon-button\r\n          [matTooltip]=\"autoRefreshEnabled ? 'Click to disable auto refresh' : 'Click to enable auto refresh'\" matTooltipPosition=\"above\"\r\n          [style.color]=\"autoRefreshEnabled ? '#4caf50' : '#9e9e9e'\"\r\n          (click)=\"autoRefreshEnabled = !autoRefreshEnabled; toggleAutoRefresh()\">\r\n          <mat-icon>autorenew</mat-icon>\r\n        </button>\r\n        <!-- Changed: Keep Open icon button — grey when off, green when on, with dynamic tooltip -->\r\n        <button *ngIf=\"detailsConfig.allowUserKeepOpen\" mat-icon-button\r\n          [matTooltip]=\"userKeepOpen ? 'Click to disable keep open' : 'Click to enable keep open'\" matTooltipPosition=\"above\"\r\n          [style.color]=\"userKeepOpen ? '#4caf50' : '#9e9e9e'\"\r\n          (click)=\"userKeepOpen = !userKeepOpen\">\r\n          <mat-icon>push_pin</mat-icon>\r\n        </button>\r\n\r\n        <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\">\r\n          <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n        </div>\r\n\r\n        <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, detailsConfig.causeTableRefresh)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n        \r\n        <!-- Added: Top close button when position is 'top' -->\r\n        <button *ngIf=\"shouldShowTopClose()\" [disabled]=\"isProcessing\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Close\" (click)=\"close()\"><mat-icon>close</mat-icon></button>\r\n\r\n      </div>\r\n\r\n    </div>\r\n\r\n    <div style=\"padding-left: 24px; padding-right: 24px;\">\r\n      <spa-steps *ngIf=\"stepConfig && details && stepConfig.sticky\" [config]=\"stepConfig\" [data]=\"details\"></spa-steps>\r\n      <spa-statuses *ngIf=\"statusConfig && details && statusConfig?.sticky\" [config]=\"statusConfig\" [data]=\"details\"></spa-statuses>\r\n      <spa-alert *ngIf=\"formConfig.alertConfig && formConfig.alertConfig?.sticky\" [config]=\"formConfig.alertConfig\" [data]=\"details\"></spa-alert>\r\n    </div>\r\n\r\n    <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n      <spa-steps *ngIf=\"stepConfig && details && !stepConfig.sticky\" [config]=\"stepConfig\" [data]=\"details\"></spa-steps>\r\n      <spa-statuses *ngIf=\"statusConfig && details && !statusConfig?.sticky\" [config]=\"statusConfig\" [data]=\"details\"></spa-statuses>\r\n      <spa-alert *ngIf=\"formConfig.alertConfig && !formConfig.alertConfig?.sticky\" [config]=\"formConfig.alertConfig\" [data]=\"details\"></spa-alert>\r\n\r\n      <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n        <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n        <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n          <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-testRequired=\"testRequired\" let-selectChanged=\"selectChanged\">\r\n            <spa-select\r\n              [display]=\"field.alias ?? field.name | camelToWords\"\r\n              [width]=\"field.width\"\r\n              [nullable]=\"field.nullable\"\r\n              [options]=\"field.options\"\r\n              [masterOptions]=\"field.masterOptions\"\r\n              [masterField]=\"field.masterField\"\r\n              [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n              [optionValue]=\"field.optionValue ?? 'value'\"\r\n              [(value)]=\"data[field.name]\"\r\n              [defaultFirstValue]=\"field.defaultFirstValue\"\r\n              [required]=\"testRequired(field)\"\r\n              [readonly]=\"testReadOnly(field)\"\r\n              [hint]=\"field.hint\"\r\n              [detailsConfig]=\"field.detailsConfig\"\r\n              [loadAction]=\"field.loadAction\"\r\n              [loadIDField]=\"field.loadIDField\"\r\n              [field]=\"field\"\r\n              [data]=\"data\"\r\n              [infoMessage]=\"field.infoMessage\"\r\n              [copyContent]=\"field.copyContent\"\r\n              (valueChange)=\"selectChanged(field)\"\r\n            ></spa-select>\r\n          </ng-template>\r\n        </spa-form>\r\n\r\n        <!-- Changed: Use unified spa-tabs with nestingLevel control — tabs hidden when nestingLevel >= 2 -->\r\n        <spa-tabs\r\n          *ngIf=\"showTabs && tableConfigs && !(detailsConfig.hideTablesInCreateMode && formConfig?.mode === 'create')\"\r\n          [tableConfigs]=\"tableConfigs\"\r\n          [reload]=\"tableReload\"\r\n          [parentDetails]=\"details\"\r\n          [nestingLevel]=\"nestingLevel + 1\"\r\n          (formRefresh)=\"loadData(formConfig.loadAction, false)\">\r\n        </spa-tabs>\r\n\r\n      </div>\r\n\r\n    </mat-dialog-content>\r\n\r\n\r\n  </div>\r\n\r\n  <mat-dialog-actions >\r\n\r\n    <div>\r\n\r\n      <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='create' && createButton\" color=\"primary\"\r\n        (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n      </button>\r\n\r\n      <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='edit' && editButton\" color=\"primary\"\r\n        (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n      </button>\r\n\r\n      <ng-container *ngFor=\"let btn of extraButtons\">\r\n        <button *ngIf=\"formConfig.mode !== 'create' && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial>\r\n          <mat-icon *ngIf=\"btn.icon\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>\r\n          {{btn.display ?? btn.name | titlecase}}\r\n        </button>\r\n      </ng-container>\r\n\r\n      <!-- Changed: Bottom close button now uses conditional display and custom text -->\r\n      <button *ngIf=\"shouldShowBottomClose()\" mat-stroked-button color=\"primary\" (click)=\"close()\">{{getCloseText()}}</button>\r\n\r\n    </div>\r\n\r\n    <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n      <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create'  && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n    </div>\r\n\r\n\r\n  </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormConfig, ListDialogConfig, TableConfig } from '../../classes/Classes';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'spa-list-dialog',\r\n    templateUrl: './list-dialog.component.html',\r\n    styleUrls: ['./list-dialog.component.css'],\r\n    standalone: false\r\n})\r\nexport class ListDialogComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib, private dialogRef: MatDialogRef<ListDialogComponent>, @Inject(MAT_DIALOG_DATA) public data : ListDialogConfig) { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    this.listConfig = this.data;\r\n    this.formConfig.fields.find(x => x.name == 'listName').defaultValue = this.listConfig.listName;\r\n    this.config.loadAction = { url: 'general/lists/' + this.listConfig.listName }\r\n    // this.config.buttons.find(x => x.name == 'create').display = \"New \" + this.listConfig.name\r\n\r\n\r\n  }\r\n\r\n  clicked = false;\r\n\r\n  actionClicked(){\r\n    this.clicked = true;\r\n  }\r\n\r\n  close(){\r\n    if (this.clicked){\r\n      this.dialogRef.close(\"success\")\r\n    }else{\r\n      this.dialogRef.close(\"\")\r\n    }\r\n  }\r\n\r\n  item: string = \"\";\r\n  tableReload: Subject<boolean> = new Subject();\r\n\r\n\r\n  listConfig: ListDialogConfig\r\n\r\n  formConfig: FormConfig = {\r\n\r\n    fields: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'listName', type: 'text',  hidden : true },\r\n    ],\r\n\r\n    reset: true,\r\n  }\r\n\r\n\r\n  config: TableConfig = {\r\n\r\n    showFilter : true,\r\n    minColumns: ['name',],\r\n    minButtons: ['edit'],\r\n    elevation: 'none',\r\n\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create' , display : 'New', dialog: true, action: { url: 'general/lists?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'general/lists?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'general/lists?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    formConfig : this.formConfig\r\n\r\n  }\r\n\r\n}\r\n","<div>\r\n\r\n  <label style=\"font-size: 24px;\">{{listConfig?.title ?? 'List'}}</label>\r\n\r\n</div>\r\n\r\n<mat-dialog-content class=\"mat-typography\">\r\n\r\n  <div style=\" font-size: 14px;\">\r\n    <spa-table [config]=\"config\" [reload]=\"tableReload\" (actionClick)=\"actionClicked()\"></spa-table>\r\n  </div>\r\n\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n  <button mat-button (click)=\"close()\" >Ok</button>\r\n</mat-dialog-actions>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ApiResponse, TableConfig } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'spa-invitations-table',\r\n    templateUrl: './invitations-table.component.html',\r\n    styleUrls: ['./invitations-table.component.css'],\r\n    standalone: false\r\n})\r\nexport class InvitationsTableComponent implements OnInit {\r\n\r\n  constructor(public dataService: DataServiceLib, private messageService: MessageService, public authService: AuthService) { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  invActionClicked(x) {\r\n\r\n    let message = \"Accept\"\r\n    let action = \"accept\"\r\n    if (x.name == \"decline\") {\r\n      action = \"remove\";\r\n      message = \"Decline\"\r\n    }\r\n\r\n\r\n\r\n    //accept / decline\r\n    this.messageService.confirm(`${message} membership to organisation (${x.data.tenantName}) ?`).subscribe((result) => {\r\n\r\n      if (result == \"yes\") {\r\n        this.dataService.CallApi({ url: 'members/dto?action=' + action, method: 'post', }, x.data).subscribe((apiResponse: ApiResponse) => {\r\n\r\n          if (apiResponse.success) {\r\n            this.tableReload.next(true)\r\n            this.messageService.toast(\"Updated Successfully\");\r\n\r\n            // switch\r\n            this.messageService.confirm(`Switch to organisation (${x.data.tenantName}) now ?`).subscribe((result) => {\r\n              if (result == \"yes\") {\r\n\r\n                let tenant = {tenantID : x.data.tenantID}\r\n\r\n                this.dataService.CallApi({ url: 'tenants/dto?action=switch', method: 'post' }, tenant).subscribe((apiResponse: ApiResponse) => {\r\n\r\n                  if (apiResponse.success) {\r\n                    this.messageService.toast(\"Switched Successfully, please login again\");\r\n                    this.authService.logoff();\r\n                  }\r\n                });\r\n              }\r\n            });\r\n\r\n          }\r\n        });\r\n      }\r\n\r\n    });\r\n\r\n  }\r\n\r\n  tableReload: Subject<boolean> = new Subject();\r\n  invitationsTableConfig: TableConfig = {\r\n\r\n    greyOut: (value) => value.accepted == false,\r\n    elevation: 'low',\r\n    minColumns: ['tenantName'],\r\n    minButtons: ['accept', 'decline'],\r\n    flatButtons : true,\r\n\r\n    columns: [\r\n      { name: 'tenantName', alias: 'Organisation', type: 'text' },\r\n      { name: 'ownerName', type: 'text', },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'accept', icon: { 'name': 'done', }, color: 'green', confirm: { message: 'Accept ?' }, disabled: (x) => x.accepted },\r\n      { name: 'decline', icon: { 'name': 'close', }, color: 'red', confirm: { message: 'Decline ?' }, disabled: (x) => x.accepted },\r\n    ],\r\n\r\n    loadAction: { url: 'tenants/invitations/x' },\r\n\r\n  }\r\n}\r\n","<spa-table [config]=\"invitationsTableConfig\" (actionClick)=\"invActionClicked($event)\" [reload]=\"tableReload\"></spa-table>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Field, Action, ApiResponse } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n@Component({\r\n    selector: 'spa-title-actions',\r\n    templateUrl: './title-actions.component.html',\r\n    styleUrls: ['./title-actions.component.css'],\r\n    standalone: false\r\n})\r\nexport class TitleActionsComponent implements OnInit {\r\n\r\n  constructor(\r\n    private dataService: DataServiceLib,\r\n    private messageService: MessageService\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    // Load options for select/multi-select fields with loadAction\r\n    this.titleActions?.forEach(action => {\r\n      if (action.loadAction && (action.type === 'select' || action.type === 'select-multi')) { // Changed: multi-select -> select-multi\r\n        this.loadActionOptions(action);\r\n      }\r\n    });\r\n\r\n    // Set default values\r\n    this.titleActions?.forEach(action => {\r\n      if (action.defaultValue !== undefined && this.actionValues[action.name] === undefined) {\r\n        this.actionValues[action.name] = action.defaultValue;\r\n      }\r\n    });\r\n  }\r\n\r\n  @Input() titleActions: Field[] = [];\r\n  @Output() actionChange = new EventEmitter<{ name: string, value: any }>();\r\n\r\n  // Store values for each action\r\n  actionValues: { [key: string]: any } = {};\r\n\r\n  // Load options for select/multi-select fields\r\n  private loadActionOptions(action: Field) {\r\n    if (!action.loadAction) return;\r\n\r\n    this.dataService.CallApi(action.loadAction).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        action.options = apiResponse.data;\r\n      } else {\r\n        this.messageService.toast(\"Error loading options: \" + apiResponse.message);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Handle value changes for any action type\r\n  onActionChange(action: Field, value: any) {\r\n    this.actionValues[action.name] = value;\r\n    \r\n    // Call custom onChange callback if provided\r\n    if (action.onChange) {\r\n      action.onChange(value, this.actionValues);\r\n    }\r\n    \r\n    // Emit event to parent component\r\n    this.actionChange.emit({\r\n      name: action.name,\r\n      value: value\r\n    });\r\n  }\r\n\r\n  // Handle button clicks\r\n  onButtonClick(action: Field) {\r\n    // Call custom onChange callback if provided\r\n    if (action.onChange) {\r\n      action.onChange(null, this.actionValues);\r\n    }\r\n    \r\n    // Emit event with current value (null for buttons)\r\n    this.actionChange.emit({\r\n      name: action.name,\r\n      value: null\r\n    });\r\n  }\r\n\r\n  // Get display value for options\r\n  getOptionDisplay(action: Field): string {\r\n    return action.optionDisplay ?? 'name';\r\n  }\r\n\r\n  // Get value field for options\r\n  getOptionValue(action: Field): string {\r\n    return action.optionValue ?? 'value';\r\n  }\r\n\r\n  // Check if action should be hidden\r\n  isHidden(action: Field): boolean {\r\n    if (action.hidden) return true;\r\n    if (action.hiddenCondition) {\r\n      return action.hiddenCondition(this.actionValues);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  // Check if action should be readonly\r\n  isReadonly(action: Field): boolean {\r\n    if (action.readonly) return true;\r\n    if (action.readonlyCondition) {\r\n      return action.readonlyCondition(this.actionValues);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  // Get value for a field\r\n  getValue(action: Field): any {\r\n    return this.actionValues[action.name];\r\n  }\r\n\r\n  // Set value for a field\r\n  setValue(action: Field, value: any) {\r\n    this.actionValues[action.name] = value;\r\n  }\r\n}\r\n","<div class=\"title-actions-container\" *ngIf=\"titleActions && titleActions.length > 0\">\r\n  \r\n  <ng-container *ngFor=\"let action of titleActions\">\r\n    \r\n    <!-- Date Field -->\r\n    <spa-date \r\n      *ngIf=\"action.type === 'date' && !isHidden(action)\"\r\n      [display]=\"action.alias ?? action.name | camelToWords\"\r\n      [width]=\"action.width\"\r\n      [(value)]=\"actionValues[action.name]\"\r\n      [required]=\"action.required\"\r\n      [readonly]=\"isReadonly(action)\"\r\n      [hint]=\"action.hint\"\r\n      (valueChange)=\"onActionChange(action, actionValues[action.name])\">\r\n    </spa-date>\r\n\r\n    <!-- DateTime Field -->\r\n    <spa-datetime \r\n      *ngIf=\"action.type === 'datetime' && !isHidden(action)\"\r\n      [display]=\"action.alias ?? action.name | camelToWords\"\r\n      [width]=\"action.width\"\r\n      [(value)]=\"actionValues[action.name]\"\r\n      [readonly]=\"isReadonly(action)\"\r\n      (valueChange)=\"onActionChange(action, actionValues[action.name])\">\r\n    </spa-datetime>\r\n\r\n    <!-- Select Field -->\r\n    <spa-select \r\n      *ngIf=\"action.type === 'select' && !isHidden(action)\"\r\n      [display]=\"action.alias ?? action.name | camelToWords\"\r\n      [width]=\"action.width\"\r\n      [nullable]=\"action.nullable\"\r\n      [options]=\"action.options\"\r\n      [optionDisplay]=\"getOptionDisplay(action)\"\r\n      [optionValue]=\"getOptionValue(action)\"\r\n      [(value)]=\"actionValues[action.name]\"\r\n      [defaultFirstValue]=\"action.defaultFirstValue\"\r\n      [required]=\"action.required\"\r\n      [readonly]=\"isReadonly(action)\"\r\n      [hint]=\"action.hint\"\r\n      (valueChange)=\"onActionChange(action, actionValues[action.name])\">\r\n    </spa-select>\r\n\r\n    <!-- Multi-Select Field -->\r\n    <spa-select-multi \r\n      *ngIf=\"action.type === 'select-multi' && !isHidden(action)\"\r\n      [display]=\"action.alias ?? action.name | camelToWords\"\r\n      [width]=\"action.width\"\r\n      [options]=\"action.options\"\r\n      [optionDisplay]=\"getOptionDisplay(action)\"\r\n      [optionValue]=\"getOptionValue(action)\"\r\n      [(value)]=\"actionValues[action.name]\"\r\n      [required]=\"action.required\"\r\n      [readonly]=\"isReadonly(action)\"\r\n      [hint]=\"action.hint\"\r\n      (valueChange)=\"onActionChange(action, actionValues[action.name])\">\r\n    </spa-select-multi>\r\n\r\n    <!-- Checkbox Field -->\r\n    <spa-check \r\n      *ngIf=\"action.type === 'checkbox' && !isHidden(action)\"\r\n      [display]=\"action.alias ?? action.name | camelToWords\"\r\n      [(value)]=\"actionValues[action.name]\"\r\n      [readonly]=\"isReadonly(action)\"\r\n      (valueChange)=\"onActionChange(action, actionValues[action.name])\">\r\n    </spa-check>\r\n\r\n    <!-- Button Field -->\r\n    <button \r\n      *ngIf=\"action.type === 'button' && !isHidden(action)\"\r\n      mat-icon-button\r\n      [disabled]=\"isReadonly(action)\"\r\n      [matTooltip]=\"action.hint ?? (action.alias ?? action.name | camelToWords)\"\r\n      matTooltipPosition=\"above\"\r\n      [color]=\"action.color ?? 'primary'\"\r\n      (click)=\"onButtonClick(action)\">\r\n      <mat-icon *ngIf=\"action.icon\">{{action.icon.name}}</mat-icon>\r\n      <span *ngIf=\"!action.icon\">{{action.alias ?? action.name | camelToWords}}</span>\r\n    </button>\r\n\r\n  </ng-container>\r\n\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { ApiResponse, PageConfig, TableConfig } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { Subject } from 'rxjs';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n@Component({\r\n    selector: 'spa-page',\r\n    templateUrl: './page.component.html',\r\n    styleUrls: ['./page.component.css'],\r\n    standalone: false\r\n})\r\nexport class PageComponent implements OnInit {\r\n\r\n  constructor(public dataServiceLib: DataServiceLib, private messageService: MessageService,) { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    this.normalTableConfig = this.getNormalTableConfig();\r\n    this.searchTableConfig = this.getSearchTableConfig();\r\n\r\n  }\r\n\r\n  @Input() config: PageConfig = new PageConfig();\r\n  @Output() searchModeActivated = new EventEmitter();\r\n  @Output() searchModeDeactivated = new EventEmitter();\r\n  @Output() refreshClick = new EventEmitter();\r\n  @Output() actionClick = new EventEmitter();\r\n  @Output() actionResponse = new EventEmitter();\r\n  @Output() inputChange = new EventEmitter();\r\n  @Output() createClick = new EventEmitter();\r\n  @Output() searchClick = new EventEmitter();\r\n  @Output() dataLoad = new EventEmitter();\r\n  @Output() titleActionChange = new EventEmitter<{ name: string, value: any }>();\r\n\r\n  tableReload: Subject<boolean> = new Subject();\r\n\r\n  searchMode = false;\r\n\r\n  normalTableConfig: TableConfig;\r\n  searchTableConfig: TableConfig;\r\n\r\n  toggleSearch() {\r\n    if (this.searchMode) {\r\n      this.searchModeActivated.emit();\r\n    }\r\n    else{\r\n      this.searchModeDeactivated.emit();\r\n    }\r\n  }\r\n\r\n\r\n  titleActionChanged(event: { name: string, value: any }) {\r\n    this.titleActionChange.emit(event);\r\n  }\r\n\r\n\r\n\r\n  getNormalTableConfig() : TableConfig {\r\n    return {\r\n      ...this.config.tableConfig,\r\n      searchConfig: null\r\n    }\r\n  }\r\n\r\n\r\n  getSearchTableConfig() : TableConfig {\r\n\r\n    return {\r\n      ...this.config.searchTableConfig,\r\n      loadAction: null,\r\n      showFilter: false,\r\n      holdHeaderButtonSpace: true,\r\n    }\r\n\r\n  }\r\n\r\n  refreshClicked(){\r\n    this.refreshClick.emit();\r\n  }\r\n\r\n  actionClicked(x){\r\n    this.actionClick.emit(x);\r\n  }\r\n\r\n  actionResponded(x){\r\n    this.actionResponse.emit(x);\r\n  }\r\n\r\n  inputChanged(x){\r\n    this.inputChange.emit(x);\r\n  }\r\n\r\n  createClicked(x){\r\n    this.createClick.emit(x);\r\n  }\r\n\r\n  searchClicked(x){\r\n    this.searchClick.emit(x);\r\n  }\r\n\r\n  dataLoaded(x){\r\n    this.dataLoad.emit(x);\r\n  }\r\n\r\n}\r\n","<div class=\"row\">\r\n\r\n  <div class=\"col-auto\">\r\n    <h4>{{config.title ?? 'Untitled'}} </h4>\r\n  </div>\r\n\r\n  <div class=\"col d-flex justify-content-end align-items-center\" style=\"font-size: 14px; gap: 15px;\">\r\n    <!-- Added: Title actions component -->\r\n    <spa-title-actions \r\n      *ngIf=\"config.titleActions\" \r\n      [titleActions]=\"config.titleActions\"\r\n      (actionChange)=\"titleActionChanged($event)\">\r\n    </spa-title-actions>\r\n    \r\n    <spa-check *ngIf=\"config.searchTableConfig\" [(value)]=\"searchMode\" display=\"Search Mode\" (valueChange)=\"toggleSearch()\" style=\"margin-right: 10px;\"></spa-check>\r\n  </div>\r\n\r\n</div>\r\n\r\n<hr style=\"margin-top: 0px;\" />\r\n\r\n\r\n<div style=\" font-size: 14px;\">\r\n  <!-- Normal -->\r\n  <spa-table *ngIf=\"!searchMode\"  [config]=\"normalTableConfig\" [reload]=\"tableReload\"\r\n    (refreshClick)=\"refreshClicked()\" (actionClick)=\"actionClicked($event)\" (actionResponse)=\"actionResponded($event)\"\r\n    (inputChange)=\"inputChanged($event)\" (createClick)=\"createClicked($event)\" (searchClick)=\"searchClicked($event)\" (dataLoad)=\"dataLoaded($event)\">\r\n  </spa-table>\r\n\r\n  <!-- Search -->\r\n  <spa-table *ngIf=\"searchMode\" [config]=\"searchTableConfig\" [reload]=\"tableReload\"\r\n    (refreshClick)=\"refreshClicked()\" (actionClick)=\"actionClicked($event)\" (actionResponse)=\"actionResponded($event)\"\r\n    (inputChange)=\"inputChanged($event)\" (createClick)=\"createClicked($event)\" (searchClick)=\"searchClicked($event)\" (dataLoad)=\"dataLoaded($event)\">\r\n  </spa-table>\r\n</div>\r\n\r\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[selectContext]',\r\n    standalone: false\r\n})\r\nexport class SelectContextDirective {\r\n  constructor(\r\n    private templateRef: TemplateRef<any>,\r\n    private viewContainer: ViewContainerRef\r\n  ) { }\r\n\r\n  @Input() set selectContext(context: any) {\r\n    this.viewContainer.clear();\r\n    this.viewContainer.createEmbeddedView(this.templateRef, context);\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { BitwiseOption, Icon } from '../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-select-bitwise',\r\n    templateUrl: './select-bitwise.component.html',\r\n    styleUrls: ['./select-bitwise.component.css'],\r\n    standalone: false\r\n})\r\nexport class SelectBitwiseComponent implements OnInit {\r\n\r\n  @Input() display = '';\r\n  @Input() hint = '';\r\n  @Input() required = false;\r\n  @Input() readonly = false;\r\n  @Input() width = '100%';\r\n  @Input() infoMessage: string;\r\n  @Input() options: { name?: string; value: number; icon?: Icon; }[] = [];\r\n\r\n  @Input() set value(val: number) {\r\n    this._value = val;\r\n    this.updateSelectedValues();\r\n  }\r\n  get value(): number {\r\n    return this._value;\r\n  }\r\n\r\n  @Output() valueChange = new EventEmitter<number>();\r\n  @Output() infoClick = new EventEmitter<void>();\r\n\r\n  private _value = 0;\r\n  bitwiseOptions: BitwiseOption[] = [];\r\n  selectedValues: number[] = [];\r\n  hasNames = false;  // Flag to track if options have names\r\n\r\n  get selectedOptions(): BitwiseOption[] {\r\n    return this.bitwiseOptions.filter(opt => this.selectedValues.includes(opt.value));\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.bitwiseOptions = this.options.map(opt => ({\r\n      ...opt,\r\n      selected: false\r\n    }));\r\n    // Check if any options have names\r\n    this.hasNames = this.options.some(opt => !!opt.name);\r\n    this.updateSelectedValues();\r\n  }\r\n\r\n  onSelectionChange(event: any) {\r\n    const newValue = this.selectedValues.reduce((acc, curr) => acc | curr, 0);\r\n    this._value = newValue;\r\n    this.valueChange.emit(newValue);\r\n    console.log(newValue)\r\n  }\r\n\r\n  private updateSelectedValues() {\r\n    this.selectedValues = this.options\r\n      .filter(opt => (this._value & opt.value) === opt.value)\r\n      .map(opt => opt.value);\r\n  }\r\n\r\n  onInfoClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.infoClick.emit();\r\n  }\r\n}\r\n","<mat-form-field [ngStyle]=\"{'width':width ?? '100%'}\" subscriptSizing=\"dynamic\">\r\n  <mat-label>{{display}}</mat-label>\r\n\r\n  <mat-select multiple [(ngModel)]=\"selectedValues\" (selectionChange)=\"onSelectionChange($event)\" [required]=\"required\" [disabled]=\"readonly\">\r\n    <mat-option *ngFor=\"let option of bitwiseOptions\" [value]=\"option.value\">\r\n\r\n      <mat-icon *ngIf=\"option.icon && !hasNames\" [ngStyle]=\"{'color': option.icon.color}\" [matTooltip]=\"option.icon.tip\" >\r\n        {{option.icon.name}}\r\n      </mat-icon>\r\n\r\n      <span *ngIf=\"hasNames\">\r\n        {{option.name}}\r\n      </span>\r\n\r\n    </mat-option>\r\n  </mat-select>\r\n\r\n  <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\r\n\r\n  <div matSuffix class=\"suffix-icons\">\r\n\r\n    <ng-container *ngIf=\"!hasNames\">\r\n      <mat-icon *ngFor=\"let option of selectedOptions\" [ngStyle]=\"{'color': option.icon?.color, 'margin-right': '4px'}\" style=\"font-size: 14px;\" [matTooltip]=\"option.icon?.tip\">\r\n        {{option.icon?.name}}\r\n      </mat-icon>\r\n    </ng-container>\r\n\r\n    <button mat-icon-button *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\">\r\n      <mat-icon style=\"color: steelblue;\">info</mat-icon>\r\n    </button>\r\n\r\n  </div>\r\n\r\n</mat-form-field>\r\n","// Tin-SPA Welcome Component - Showcases the comprehensive modules and features available in the framework\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n  selector: 'spa-welcome',\r\n  templateUrl: './welcome.component.html',\r\n  styleUrls: ['./welcome.component.css'],\r\n  standalone: false\r\n})\r\nexport class WelcomeComponent implements OnInit {\r\n\r\n  constructor(private router: Router, public dataService: DataServiceLib) { }\r\n\r\n  ngOnInit(): void {\r\n    this.calculateModuleStats();\r\n  }\r\n\r\n  // Core business modules available in Tin-SPA\r\n  businessModules = [\r\n    {\r\n      name: 'Accounting',\r\n      icon: this.dataService.capAccounts.icon, // Changed: Use centralized capItem icon\r\n      description: 'Comprehensive financial management with accounts, transactions, and invoicing',\r\n      features: [\r\n        'Chart of Accounts',\r\n        'Transaction Management',\r\n        'Invoice Tracking',\r\n        'Outstanding Payments',\r\n        'Financial Reports'\r\n      ],\r\n      components: 5,\r\n      demoUrl: this.dataService.capAccounts.link, // Changed: Use centralized capItem link\r\n      color: '#667eea'\r\n    },\r\n    {\r\n      name: 'Inventory',\r\n      icon: this.dataService.capInventoryDashboard.icon, // Changed: Use centralized capItem icon\r\n      description: 'Full inventory lifecycle from procurement to sales and stock management',\r\n      features: [\r\n        'Product Catalog',\r\n        'Stock Management',\r\n        'Purchase Orders',\r\n        'Sales Orders',\r\n        'Inventory Adjustments',\r\n        'Requisitions',\r\n        'Real-time Dashboard'\r\n      ],\r\n      components: 12,\r\n      demoUrl: this.dataService.capInventoryDashboard.link, // Changed: Use centralized capItem link\r\n      color: '#4CAF50'\r\n    },\r\n    {\r\n      name: 'Loans',\r\n      icon: this.dataService.capLoanProducts.icon, // Changed: Use centralized capItem icon\r\n      description: 'Loan origination and management for customers and employees',\r\n      features: [\r\n        'Loan Products',\r\n        'Loan Applications',\r\n        'Payment Tracking',\r\n        'Interest Calculations',\r\n        'Outstanding Balances'\r\n      ],\r\n      components: 3,\r\n      demoUrl: this.dataService.capLoanProducts.link, // Changed: Use centralized capItem link\r\n      color: '#FF9800'\r\n    },\r\n    {\r\n      name: 'Human Resources',\r\n      icon: this.dataService.capEmployees.icon, // Changed: Use centralized capItem icon\r\n      description: 'Employee information and organizational structure management',\r\n      features: [\r\n        'Employee Records',\r\n        'Department Management',\r\n        'Position Tracking',\r\n        'Employment Status',\r\n        'User Integration'\r\n      ],\r\n      components: 3,\r\n      demoUrl: this.dataService.capEmployees.link, // Changed: Use centralized capItem link\r\n      color: '#E91E63'\r\n    }\r\n  ];\r\n\r\n  // Advanced features demonstrated across modules\r\n  advancedFeatures = [\r\n    { \r\n      name: 'Workflow Automation', \r\n      modules: 'Accounting, Inventory, Loans',\r\n      description: 'Status tracking, approval flows, and automated transitions'\r\n    },\r\n    { \r\n      name: 'Dashboard Analytics', \r\n      modules: 'Inventory, Accounting',\r\n      description: 'Real-time tiles and KPIs with visual indicators'\r\n    },\r\n    { \r\n      name: 'Document Management', \r\n      modules: 'All Modules',\r\n      description: 'File attachments and document tracking'\r\n    },\r\n    { \r\n      name: 'Relationship Management', \r\n      modules: 'Inventory, Accounting, Loans',\r\n      description: 'Customer, supplier, and employee linking'\r\n    },\r\n    { \r\n      name: 'Financial Tracking', \r\n      modules: 'Accounting, Loans, Inventory',\r\n      description: 'Money fields, calculations, and reporting'\r\n    },\r\n    { \r\n      name: 'Complex Forms', \r\n      modules: 'All Modules',\r\n      description: 'Multi-section layouts with conditional fields'\r\n    },\r\n    { \r\n      name: 'Activity Logging', \r\n      modules: 'All Modules',\r\n      description: 'Audit trails and notes for all entities'\r\n    },\r\n    { \r\n      name: 'Advanced Search', \r\n      modules: 'All Modules',\r\n      description: 'Multi-field filtering with operators'\r\n    }\r\n  ];\r\n\r\n  // Supporting modules\r\n  supportingModules = [\r\n    { name: 'Customers', icon: this.dataService.capCustomers.icon, link: this.dataService.capCustomers.link, description: 'Customer database management' }, // Changed: Use centralized capItem icon and link\r\n    { name: 'Suppliers', icon: this.dataService.capSuppliers.icon, link: this.dataService.capSuppliers.link, description: 'Supplier relationship management' }, // Changed: Use centralized capItem icon and link\r\n    { name: 'Brands', icon: this.dataService.capBrands.icon, link: this.dataService.capBrands.link, description: 'Product brand catalog' }, // Changed: Use centralized capItem icon and link\r\n    { name: 'Categories', icon: this.dataService.capCategories.icon, link: this.dataService.capCategories.link, description: 'Product categorization' }, // Changed: Use centralized capItem icon and link\r\n    { name: 'Departments', icon: this.dataService.capDepartments.icon, link: this.dataService.capDepartments.link, description: 'Organizational departments' }, // Changed: Use centralized capItem icon and link\r\n    { name: 'Tasks', icon: this.dataService.capTasks.icon, link: this.dataService.capTasks.link, description: 'Task management system' }, // Changed: Use centralized capItem icon and link\r\n    { name: 'Approvals', icon: this.dataService.capApprovals.icon, link: this.dataService.capApprovals.link, description: 'Workflow approvals' }, // Changed: Use centralized capItem icon and link\r\n    { name: 'Notifications', icon: this.dataService.capNotifications.icon, link: this.dataService.capNotifications.link, description: 'System notifications' } // Changed: Use centralized capItem icon and link\r\n  ];\r\n\r\n  // Component features available in Tin-SPA\r\n  componentFeatures = [\r\n    { category: 'Form', count: 15, items: 'Text, Money, Date, Select, Multi-Select, Checkbox, File Upload, Email, etc.' },\r\n    { category: 'Display', count: 13, items: 'Tables, Cards, Capsules, Tiles, Steps, Notes, Chips, Icons, etc.' },\r\n    { category: 'Layout', count: 5, items: 'Sections, Tabs, Multi-Column, Composite Fields, Responsive Design' },\r\n    { category: 'Actions', count: 8, items: 'Buttons, Dialogs, Workflows, Custom Actions, Bulk Operations' }\r\n  ];\r\n\r\n  moduleStats = {\r\n    totalModules: 0,\r\n    totalComponents: 0,\r\n    totalFeatures: 0\r\n  };\r\n\r\n  navigateTo(url: string): void {\r\n    this.router.navigate([url]);\r\n  }\r\n\r\n  private calculateModuleStats(): void {\r\n    this.moduleStats.totalModules = this.businessModules.length;\r\n    this.moduleStats.totalComponents = this.businessModules.reduce((sum, m) => sum + m.components, 0);\r\n    this.moduleStats.totalFeatures = this.advancedFeatures.length;\r\n    \r\n    console.log(`Tin-SPA Framework Overview:`);\r\n    console.log(`- ${this.moduleStats.totalModules} Core Business Modules`);\r\n    console.log(`- ${this.moduleStats.totalComponents} Module Components`);\r\n    console.log(`- ${this.moduleStats.totalFeatures} Advanced Features`);\r\n  }\r\n}\r\n","<div class=\"welcome-container\">\r\n  <div class=\"header-section\">\r\n    <h2>Tin-SPA Business Framework</h2>\r\n    <p class=\"subtitle\">Comprehensive enterprise modules for Accounting, Inventory, Loans, and HR Management</p>\r\n  </div>\r\n\r\n  <!-- Quick Navigation to Core Modules -->\r\n  <div class=\"row mb-4\">\r\n    <div class=\"col-md-12\">\r\n      <h4>Quick Access</h4>\r\n      <div class=\"navigation-grid\">\r\n        <button mat-raised-button (click)=\"navigateTo(dataService.capAccounts.link)\" class=\"nav-button accounting\">\r\n          <mat-icon>{{dataService.capAccounts.icon}}</mat-icon>\r\n          Accounting\r\n        </button>\r\n        <button mat-raised-button (click)=\"navigateTo(dataService.capInventoryDashboard.link)\" class=\"nav-button inventory\">\r\n          <mat-icon>{{dataService.capInventoryDashboard.icon}}</mat-icon>\r\n          Inventory\r\n        </button>\r\n        <button mat-raised-button (click)=\"navigateTo(dataService.capLoanProducts.link)\" class=\"nav-button loans\">\r\n          <mat-icon>{{dataService.capLoanProducts.icon}}</mat-icon>\r\n          Loans\r\n        </button>\r\n        <button mat-raised-button (click)=\"navigateTo(dataService.capEmployees.link)\" class=\"nav-button hr\">\r\n          <mat-icon>{{dataService.capEmployees.icon}}</mat-icon>\r\n          Human Resources\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Core Business Modules -->\r\n  <div class=\"row mb-4\">\r\n    <div class=\"col-md-12\">\r\n      <h4>Core Business Modules</h4>\r\n      <div class=\"row\">\r\n        <div class=\"col-md-6 mb-3\" *ngFor=\"let module of businessModules\">\r\n          <div class=\"module-card\" (click)=\"navigateTo(module.demoUrl)\" [style.border-left]=\"'4px solid ' + module.color\">\r\n            <div class=\"module-header\">\r\n              <mat-icon [style.color]=\"module.color\" class=\"module-icon\">{{module.icon}}</mat-icon>\r\n              <div class=\"module-title\">\r\n                <h5>{{module.name}}</h5>\r\n                <span class=\"component-count\">{{module.components}} Components</span>\r\n              </div>\r\n            </div>\r\n            <div class=\"module-content\">\r\n              <p class=\"module-description\">{{module.description}}</p>\r\n              <div class=\"features-list\">\r\n                <span class=\"feature-tag\" *ngFor=\"let feature of module.features\">\r\n                  <mat-icon class=\"feature-icon\">check_circle</mat-icon>\r\n                  {{feature}}\r\n                </span>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Quick Navigation to Core Modules -->\r\n  <div class=\"row mb-4\">\r\n    <div class=\"col-md-12\">\r\n      <h4>Advanced Features Across Modules</h4>\r\n      <div class=\"features-grid\">\r\n        <div class=\"feature-item\" *ngFor=\"let feature of advancedFeatures\">\r\n          <div class=\"feature-name\">{{feature.name}}</div>\r\n          <div class=\"feature-modules\">\r\n            <mat-icon class=\"small-icon\">widgets</mat-icon>\r\n            {{feature.modules}}\r\n          </div>\r\n          <div class=\"feature-description\">{{feature.description}}</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Supporting Modules -->\r\n  <div class=\"row mb-4\">\r\n    <div class=\"col-md-12\">\r\n      <h4>Supporting Modules</h4>\r\n      <div class=\"supporting-grid\">\r\n        <div class=\"support-item\" *ngFor=\"let support of supportingModules\" (click)=\"navigateTo(support.link)\">\r\n          <mat-icon>{{support.icon}}</mat-icon>\r\n          <div class=\"support-details\">\r\n            <div class=\"support-name\">{{support.name}}</div>\r\n            <div class=\"support-description\">{{support.description}}</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Module Details Sections -->\r\n  <div class=\"row\">\r\n    <div class=\"col-md-12\">\r\n      <h4>Module Details</h4>\r\n      \r\n      <!-- Accounting Details -->\r\n      <div class=\"detail-section\">\r\n        <div class=\"detail-header\">\r\n          <mat-icon style=\"color: #667eea\">account_balance</mat-icon>\r\n          <h5>Accounting Module</h5>\r\n        </div>\r\n        <p>\r\n          The Accounting module provides comprehensive financial management capabilities including:\r\n        </p>\r\n        <ul>\r\n          <li><strong>Chart of Accounts:</strong> Hierarchical account structure with categories and types</li>\r\n          <li><strong>Transactions:</strong> Record debits and credits with full audit trail</li>\r\n          <li><strong>Invoicing:</strong> Create and track invoices with multiple status workflows</li>\r\n          <li><strong>Outstanding Management:</strong> Monitor and manage outstanding payments</li>\r\n          <li><strong>Financial Reporting:</strong> Real-time financial summaries and analytics</li>\r\n        </ul>\r\n      </div>\r\n\r\n      <!-- Inventory Details -->\r\n      <div class=\"detail-section\">\r\n        <div class=\"detail-header\">\r\n          <mat-icon style=\"color: #4CAF50\">inventory</mat-icon>\r\n          <h5>Inventory Module</h5>\r\n        </div>\r\n        <p>\r\n          The Inventory module covers the complete inventory lifecycle from procurement to sales:\r\n        </p>\r\n        <ul>\r\n          <li><strong>Product Management:</strong> Catalog with categories, brands, and pricing</li>\r\n          <li><strong>Stock Control:</strong> Real-time stock levels with location tracking</li>\r\n          <li><strong>Purchase Orders:</strong> Supplier ordering with receipt management</li>\r\n          <li><strong>Sales Orders:</strong> Customer orders with fulfillment tracking</li>\r\n          <li><strong>Requisitions:</strong> Internal requests and transfers between locations</li>\r\n          <li><strong>Adjustments & Returns:</strong> Stock adjustments and return processing</li>\r\n          <li><strong>Dashboard:</strong> Visual analytics with tiles showing key metrics</li>\r\n        </ul>\r\n      </div>\r\n\r\n      <!-- Loans Details -->\r\n      <div class=\"detail-section\">\r\n        <div class=\"detail-header\">\r\n          <mat-icon style=\"color: #FF9800\">payments</mat-icon>\r\n          <h5>Loans Module</h5>\r\n        </div>\r\n        <p>\r\n          The Loans module enables loan origination and management for both customers and employees:\r\n        </p>\r\n        <ul>\r\n          <li><strong>Loan Products:</strong> Define loan types with interest rates and terms</li>\r\n          <li><strong>Loan Applications:</strong> Customer and employee loan processing</li>\r\n          <li><strong>Payment Tracking:</strong> Record and monitor loan payments</li>\r\n          <li><strong>Interest Calculations:</strong> Automated interest computation based on method</li>\r\n          <li><strong>Outstanding Balances:</strong> Real-time balance and status monitoring</li>\r\n        </ul>\r\n      </div>\r\n\r\n      <!-- HR Details -->\r\n      <div class=\"detail-section\">\r\n        <div class=\"detail-header\">\r\n          <mat-icon style=\"color: #E91E63\">diversity_3</mat-icon>\r\n          <h5>Human Resources Module</h5>\r\n        </div>\r\n        <p>\r\n          The HR module manages employee information and organizational structure:\r\n        </p>\r\n        <ul>\r\n          <li><strong>Employee Records:</strong> Comprehensive employee database with demographics</li>\r\n          <li><strong>Department Management:</strong> Organizational department structure</li>\r\n          <li><strong>Position Tracking:</strong> Job positions and hierarchies</li>\r\n          <li><strong>Employment Status:</strong> Track employment and active status</li>\r\n          <li><strong>User Integration:</strong> Link employees to system user accounts</li>\r\n        </ul>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Footer -->\r\n  <div class=\"footer-section mt-5\">\r\n    <p class=\"text-center\">\r\n      <strong>Tin-SPA Business Framework</strong> - Enterprise-grade modules for complete business management\r\n      <br>\r\n      <small>Built with Angular Material and designed for scalability and extensibility</small>\r\n    </p>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Action, ChartConfig, ChartItem, ApiResponse } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { Subject } from 'rxjs';\r\nimport { Chart, ChartData, ChartOptions, Plugin } from 'chart.js'; // Changed: Added Chart import for animation control\r\nimport ChartDataLabels from 'chartjs-plugin-datalabels'; // Changed: Import datalabels plugin for pie/doughnut percentage callouts\r\n\r\n// Changed: Callout plugin — projects labels strictly left/right to maximize pie vertical space\r\nconst OuterCalloutPlugin: Plugin = {\r\n  id: 'outerCallout',\r\n  afterDraw: (chart: any) => {\r\n    const { ctx } = chart;\r\n    const meta = chart.getDatasetMeta(0);\r\n    if (!meta?.data?.length) return;\r\n\r\n    const dataset = chart.data.datasets[0];\r\n    const total = dataset.data.reduce((a: number, b: number) => a + b, 0);\r\n    if (total === 0) return;\r\n\r\n    const labels = chart.data.labels || [];\r\n    const colors = dataset.backgroundColor || [];\r\n\r\n    // Changed: Reset clip region so callout labels can draw in the padding area outside chartArea\r\n    ctx.save();\r\n    ctx.resetTransform();\r\n    ctx.beginPath();\r\n    ctx.rect(0, 0, chart.canvas.width, chart.canvas.height);\r\n    ctx.clip();\r\n    const dpr = window.devicePixelRatio || 1;\r\n    ctx.scale(dpr, dpr);\r\n\r\n    // Changed: Collect callout items per side, then space vertically to avoid overlap\r\n    const leftItems: any[] = [];\r\n    const rightItems: any[] = [];\r\n\r\n    meta.data.forEach((arc: any, i: number) => {\r\n      const value = dataset.data[i];\r\n      const pct = Math.round((value / total) * 100);\r\n      if (pct < 5) return; // Changed: Skip tiny segments\r\n\r\n      const midAngle = (arc.startAngle + arc.endAngle) / 2;\r\n      const outerRadius = arc.outerRadius;\r\n      const cx = arc.x;\r\n      const cy = arc.y;\r\n      const edgeX = cx + Math.cos(midAngle) * outerRadius;\r\n      const edgeY = cy + Math.sin(midAngle) * outerRadius;\r\n      const isRight = Math.cos(midAngle) >= 0; // Changed: Use cos to determine left/right\r\n      const color = Array.isArray(colors) ? colors[i % colors.length] : '#333';\r\n      const item = { edgeX, edgeY, cx, cy, outerRadius, pct, label: labels[i] ? String(labels[i]) : '', color, isRight };\r\n      if (isRight) rightItems.push(item); else leftItems.push(item);\r\n    });\r\n\r\n    // Changed: Sort by Y and enforce minimum vertical gap between labels\r\n    leftItems.sort((a: any, b: any) => a.edgeY - b.edgeY);\r\n    rightItems.sort((a: any, b: any) => a.edgeY - b.edgeY);\r\n    // Changed: Space labels vertically — minimum 16px (single row needs less gap)\r\n    const spaceLabels = (items: any[]) => {\r\n      const minGap = 16;\r\n      for (let j = 1; j < items.length; j++) {\r\n        if (items[j].edgeY - items[j - 1].edgeY < minGap) {\r\n          items[j].edgeY = items[j - 1].edgeY + minGap;\r\n        }\r\n      }\r\n    };\r\n    spaceLabels(leftItems);\r\n    spaceLabels(rightItems);\r\n\r\n    // Changed: Draw callouts — label name and percentage on the SAME row, side by side\r\n    const drawSide = (items: any[]) => {\r\n      items.forEach((item: any) => {\r\n        const { edgeX, edgeY, cx, outerRadius, pct, label, color, isRight } = item;\r\n\r\n        // Changed: Connector endpoint near the pie edge\r\n        const tailX = isRight ? cx + outerRadius + 16 : cx - outerRadius - 16;\r\n        const tailY = edgeY;\r\n\r\n        // Changed: Draw connector line from arc edge to label area\r\n        ctx.beginPath();\r\n        ctx.moveTo(edgeX, edgeY);\r\n        ctx.lineTo(tailX, tailY);\r\n        ctx.strokeStyle = '#999';\r\n        ctx.lineWidth = 1;\r\n        ctx.stroke();\r\n\r\n        // Changed: Same row — percentage near pie, label name further out\r\n        ctx.textBaseline = 'middle';\r\n        const textX = tailX + (isRight ? 4 : -4);\r\n\r\n        // Changed: Percentage closest to pie — bold, segment-colored\r\n        ctx.font = 'bold 12px Arial';\r\n        ctx.fillStyle = color;\r\n        ctx.textAlign = isRight ? 'left' : 'right';\r\n        ctx.fillText(pct + '%', textX, tailY);\r\n\r\n        // Changed: Label name next to percentage — muted\r\n        if (label) {\r\n          ctx.font = '11px Arial';\r\n          ctx.fillStyle = '#888';\r\n          if (isRight) {\r\n            const pctWidth = ctx.measureText(pct + '%').width;\r\n            ctx.textAlign = 'left';\r\n            ctx.fillText(label, textX + pctWidth + 4, tailY); // Changed: Right of percentage\r\n          } else {\r\n            const pctWidth = ctx.measureText(pct + '%').width;\r\n            ctx.textAlign = 'right';\r\n            ctx.fillText(label, textX - pctWidth - 4, tailY); // Changed: Left of percentage\r\n          }\r\n        }\r\n      });\r\n    };\r\n\r\n    drawSide(leftItems);\r\n    drawSide(rightItems);\r\n    ctx.restore();\r\n  }\r\n};\r\n\r\n@Component({\r\n    selector: 'spa-charts',\r\n    templateUrl: './charts.component.html',\r\n    styleUrls: ['./charts.component.css'],\r\n    standalone: false\r\n})\r\nexport class ChartsComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib, private messageService: MessageService) { }\r\n\r\n  @Input() config: ChartConfig;\r\n  @Input() data: any;\r\n  @Input() reload: Subject<boolean>;\r\n\r\n  ngOnInit(): void {\r\n    // Auto-load data on init if configured\r\n    if (this.config?.loadAction && this.config.loadInit) {\r\n      this.loadData(this.config.loadAction, '');\r\n    }\r\n\r\n    // Subscribe to reload trigger from parent\r\n    if (this.reload) {\r\n      this.reload.subscribe(v => {\r\n        if (v == true) {\r\n          if (this.config?.loadAction) {\r\n            this.loadData(this.config.loadAction, '');\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  // Load chart data from API endpoint\r\n  loadData(action: Action, data: any) {\r\n    if (action) {\r\n      this.dataService.CallApi(action, data).subscribe((apiResponse: ApiResponse) => {\r\n        if (apiResponse.success) {\r\n          this.data = apiResponse.data;\r\n        } else {\r\n          this.messageService.toast('Error: ' + apiResponse.message);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  // Build Chart.js data object for a chart item\r\n  getChartData(chart: ChartItem): ChartData {\r\n    // Gauge mode: auto-generate doughnut data from percentage value\r\n    if (chart.gaugeValue != null) {\r\n      return {\r\n        datasets: [{\r\n          data: [chart.gaugeValue, 100 - chart.gaugeValue],\r\n          backgroundColor: [chart.gaugeColor ?? '#4acccd', '#e8e8e8'],\r\n          borderWidth: 0\r\n        }]\r\n      };\r\n    }\r\n    // Standard mode: resolve data from API response by chart name, or use pre-loaded data\r\n    const chartData: any = this.data?.[chart.name] ?? chart.data ?? { labels: [], datasets: [] };\r\n\r\n    // Changed: Apply chart.colors to dataset backgroundColor if not already set (ensures pie/doughnut render correctly)\r\n    if (chart.colors?.length && chartData.datasets?.length) {\r\n      chartData.datasets.forEach((ds: any) => {\r\n        if (!ds.backgroundColor) {\r\n          ds.backgroundColor = chart.colors;\r\n        }\r\n      });\r\n    }\r\n\r\n    return chartData;\r\n  }\r\n\r\n  // Changed: Enhanced chart options for all chart types — better styling, datalabels for pie/doughnut\r\n  getChartOptions(chart: ChartItem): ChartOptions {\r\n    const options: any = chart.options ?? {};\r\n\r\n    options.responsive = true;\r\n    options.maintainAspectRatio = false;\r\n\r\n    // Changed: Animate once on initial load, then disable animation to prevent re-triggering on hover/click\r\n    options.animation = options.animation ?? {};\r\n    options.animation.onComplete = function(this: Chart) { this.options.animation = { duration: 0 }; };\r\n\r\n    if (chart.type === 'line') {\r\n      // Changed: Line chart — smooth curves, subtle grid\r\n      options.elements = options.elements ?? {};\r\n      options.elements.line = { tension: chart.tension ?? 0.4, borderWidth: 2.5 };\r\n      options.elements.point = { radius: chart.showPoints ? 4 : 0, hoverRadius: 6, hitRadius: 10 };\r\n      options.plugins = options.plugins ?? {};\r\n      options.plugins.legend = chart.showLegend ? { display: true, position: 'bottom', labels: { usePointStyle: true, pointStyle: 'circle', padding: 16, font: { size: 12 } } } : { display: false }; // Changed: Show Chart.js legend only when showLegend is true\r\n      options.plugins.tooltip = options.plugins.tooltip ?? { mode: 'index', intersect: false, backgroundColor: 'rgba(0,0,0,0.8)', padding: 10, cornerRadius: 6 };\r\n      options.plugins.datalabels = { display: false }; // Changed: No datalabels on line charts\r\n      options.scales = options.scales ?? {};\r\n      options.scales.x = options.scales.x ?? { grid: { display: false }, ticks: { font: { size: 11 }, color: '#999' } };\r\n      options.scales.y = options.scales.y ?? { grid: { color: '#f0f0f0', drawBorder: false }, ticks: { font: { size: 11 }, color: '#999' }, border: { display: false } };\r\n    }\r\n\r\n    if (chart.type === 'bar') {\r\n      // Changed: Bar chart — clean grid, rounded bars\r\n      options.plugins = options.plugins ?? {};\r\n      options.plugins.legend = chart.showLegend ? { display: true, position: 'bottom', labels: { usePointStyle: true, pointStyle: 'circle', padding: 16, font: { size: 12 } } } : { display: false }; // Changed: Show Chart.js legend only when showLegend is true\r\n      options.plugins.tooltip = options.plugins.tooltip ?? { backgroundColor: 'rgba(0,0,0,0.8)', padding: 10, cornerRadius: 6 };\r\n      options.plugins.datalabels = { display: false }; // Changed: No datalabels on bar charts\r\n      options.scales = options.scales ?? {};\r\n      options.scales.x = options.scales.x ?? { grid: { display: false }, ticks: { font: { size: 11 }, color: '#999' } };\r\n      options.scales.y = options.scales.y ?? { grid: { color: '#f0f0f0', drawBorder: false }, ticks: { font: { size: 11 }, color: '#999' }, border: { display: false }, beginAtZero: true };\r\n      options.elements = options.elements ?? {};\r\n      options.elements.bar = options.elements.bar ?? { borderRadius: 4 }; // Changed: Rounded bar corners\r\n    }\r\n\r\n    if (chart.type === 'pie') {\r\n      // Changed: Pie chart — outer callout labels, legend always disabled (callout plugin handles labeling)\r\n      options.plugins = options.plugins ?? {};\r\n      options.plugins.legend = { display: false };\r\n      options.plugins.tooltip = options.plugins.tooltip ?? { backgroundColor: 'rgba(0,0,0,0.8)', padding: 10, cornerRadius: 6 };\r\n      options.plugins.datalabels = { display: false }; // Changed: Disabled — outerCallout plugin draws labels instead\r\n      options.layout = options.layout ?? { padding: { top: 10, bottom: 10, left: 70, right: 70 } }; // Changed: Minimal top/bottom — callouts project left/right only\r\n    }\r\n\r\n    if (chart.type === 'doughnut') {\r\n      // Changed: Doughnut — outer callout labels\r\n      options.plugins = options.plugins ?? {};\r\n      if (chart.gaugeValue != null) {\r\n        // Changed: Gauge mode — no legend, no tooltip, center text via plugin\r\n        options.plugins.legend = { display: false };\r\n        options.plugins.tooltip = { enabled: false };\r\n        options.plugins.datalabels = { display: false };\r\n        options.cutout = options.cutout ?? '70%';\r\n        options.layout = options.layout ?? { padding: 10 };\r\n      } else {\r\n        // Changed: Standard doughnut — legend always disabled (callout plugin handles labeling)\r\n        options.plugins.legend = { display: false };\r\n        options.plugins.tooltip = options.plugins.tooltip ?? { backgroundColor: 'rgba(0,0,0,0.8)', padding: 10, cornerRadius: 6 };\r\n        options.plugins.datalabels = { display: false }; // Changed: Disabled — outerCallout plugin draws labels\r\n        options.cutout = options.cutout ?? '50%';\r\n        options.layout = options.layout ?? { padding: { top: 10, bottom: 10, left: 70, right: 70 } }; // Changed: Minimal top/bottom — callouts project left/right only\r\n      }\r\n    }\r\n\r\n    return options;\r\n  }\r\n\r\n  // Changed: Return Chart.js plugins array — outer callout for pie/doughnut, center text for gauges\r\n  getPlugins(chart: ChartItem): Plugin[] {\r\n    const plugins: Plugin[] = [];\r\n\r\n    // Changed: Add outer callout plugin for pie and doughnut (non-gauge) — draws labels with connector lines\r\n    if (chart.type === 'pie' || (chart.type === 'doughnut' && chart.gaugeValue == null)) {\r\n      plugins.push(OuterCalloutPlugin);\r\n    }\r\n\r\n    // Changed: Center text plugin for doughnut gauge — displays percentage inside the ring\r\n    if (chart.type === 'doughnut' && chart.gaugeValue != null) {\r\n      plugins.push({\r\n        id: 'centerText',\r\n        afterDraw: (chartInstance: any) => {\r\n          const ctx = chartInstance.ctx;\r\n          const { width, height } = chartInstance;\r\n          ctx.save();\r\n          const text = chart.gaugeValue + '%';\r\n          ctx.font = 'bold 28px Arial';\r\n          ctx.fillStyle = chart.gaugeColor ?? '#4acccd';\r\n          ctx.textAlign = 'center';\r\n          ctx.textBaseline = 'middle';\r\n          ctx.fillText(text, width / 2, height / 2);\r\n          ctx.restore();\r\n        }\r\n      });\r\n    }\r\n\r\n    return plugins;\r\n  }\r\n\r\n  // Check if a chart should be hidden\r\n  isHidden(chart: ChartItem): boolean {\r\n    if (chart.hidden) return true;\r\n    if (chart.hiddenCondition) return chart.hiddenCondition(this.data);\r\n    return false;\r\n  }\r\n}\r\n","<div class=\"charts-grid\" [style.--columns]=\"config?.columns\">\r\n  <ng-container *ngFor=\"let chart of config?.charts\">\r\n    <mat-card *ngIf=\"!isHidden(chart)\" class=\"chart-card\">\r\n\r\n      <!-- Header -->\r\n      <div class=\"chart-header\" *ngIf=\"chart.title\">\r\n        <h4 class=\"chart-title\">{{ chart.title }}</h4>\r\n        <p class=\"chart-subtitle\" *ngIf=\"chart.subtitle\">{{ chart.subtitle }}</p>\r\n      </div>\r\n\r\n      <!-- Chart Area -->\r\n      <div class=\"chart-body\" [style.height]=\"chart.height ?? '300px'\">\r\n        <canvas baseChart\r\n          [type]=\"chart.type\"\r\n          [data]=\"getChartData(chart)\"\r\n          [options]=\"getChartOptions(chart)\"\r\n          [plugins]=\"getPlugins(chart)\">\r\n        </canvas>\r\n      </div>\r\n\r\n      <!-- Footer -->\r\n      <div class=\"chart-footer\" *ngIf=\"chart.footer\">\r\n        <mat-divider></mat-divider>\r\n        <div class=\"footer-content\">\r\n          <mat-icon *ngIf=\"chart.footerIcon\">{{ chart.footerIcon }}</mat-icon>\r\n          <span>{{ chart.footer }}</span>\r\n        </div>\r\n      </div>\r\n\r\n    </mat-card>\r\n  </ng-container>\r\n</div>\r\n","import { Component, Input, OnInit, AfterViewInit, OnDestroy, HostListener, ElementRef } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser'; // Changed: needed for SVG injection\nimport { Router } from '@angular/router';\nimport { AuthService } from '../../services/auth.service';\nimport { LandingConfig } from './landing.config';\n\n@Component({\n  selector: 'spa-landing',\n  templateUrl: './landing.component.html',\n  styleUrls: ['./landing.component.css'],\n  standalone: false\n})\nexport class SpaLandingComponent implements OnInit, AfterViewInit, OnDestroy {\n  @Input() config!: LandingConfig;\n\n  mobileMenuOpen = false;\n  navScrolled = false;\n  currentYear = new Date().getFullYear(); // Used in footer copyright\n  private observer: IntersectionObserver | null = null;\n\n  constructor(\n    private router: Router,\n    private authService: AuthService,\n    private el: ElementRef,\n    private sanitizer: DomSanitizer // Changed: inject sanitizer for safe SVG rendering\n  ) {}\n\n  // Sanitizes the navBrand SVG string so Angular allows [innerHTML] binding (developer config, not user input)\n  // Changed: inject width/height before sanitising — CSS ::ng-deep cannot reach innerHTML content in library builds\n  get safeNavBrandSvg(): SafeHtml | null {\n    if (!this.config.navBrand?.svgMarkup) return null;\n    const sized = this.config.navBrand.svgMarkup.replace(/^<svg/, '<svg width=\"36\" height=\"36\"');\n    return this.sanitizer.bypassSecurityTrustHtml(sized);\n  }\n\n  // Sanitizes the hero watermark SVG string\n  get safeHeroWatermarkSvg(): SafeHtml | null {\n    return this.config.hero.watermarkSvg\n      ? this.sanitizer.bypassSecurityTrustHtml(this.config.hero.watermarkSvg)\n      : null;\n  }\n\n  // Sanitizes the footer brand SVG string\n  // Changed: inject width/height before sanitising — same encapsulation fix as navBrand\n  get safeFooterBrandSvg(): SafeHtml | null {\n    if (!this.config.footerBrand?.svgMarkup) return null;\n    const sized = this.config.footerBrand.svgMarkup.replace(/^<svg/, '<svg width=\"36\" height=\"36\"');\n    return this.sanitizer.bypassSecurityTrustHtml(sized);\n  }\n\n  ngOnInit(): void {\n    // Apply brand colors as CSS variables on the host element so all child rules inherit them\n    this.applyColors();\n    // Restore session if possible and redirect to home\n    this.authService.tryRestoreSession().then(success => {\n      if (success) this.router.navigate(['home']);\n    });\n  }\n\n  ngAfterViewInit(): void {\n    // Scroll-triggered fade-in for sections with lp-animate class\n    this.observer = new IntersectionObserver((entries) => {\n      entries.forEach(entry => {\n        if (entry.isIntersecting) entry.target.classList.add('lp-visible');\n      });\n    }, { threshold: 0.1 });\n    // Observe only within this component's DOM to avoid affecting other pages\n    this.el.nativeElement.querySelectorAll('.lp-animate').forEach((el: Element) => {\n      this.observer?.observe(el);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.observer?.disconnect();\n  }\n\n  @HostListener('window:scroll')\n  onWindowScroll(): void {\n    // Add frosted-glass background to navbar after scrolling past hero\n    this.navScrolled = window.scrollY > 50;\n  }\n\n  scrollToSection(target: string): void {\n    this.mobileMenuOpen = false; // Close mobile menu on nav click\n    const element = document.getElementById(target);\n    element?.scrollIntoView({ behavior: 'smooth' });\n  }\n\n  toggleMobileMenu(): void {\n    this.mobileMenuOpen = !this.mobileMenuOpen;\n  }\n\n  navigateTo(path: string): void {\n    this.router.navigate([path]);\n    this.mobileMenuOpen = false;\n  }\n\n  // Returns light tinted background for feature icon (hex + '20' = ~12% opacity)\n  iconBg(hex: string): string {\n    return hex + '20';\n  }\n\n  // Sets CSS custom properties on host element so child rules use app-specific brand colors\n  private applyColors(): void {\n    const s = this.el.nativeElement.style;\n    const c = this.config.colors;\n    s.setProperty('--lp-primary', c.primary);\n    s.setProperty('--lp-primary-dark', c.primaryDark);\n    s.setProperty('--lp-primary-light', c.primaryLight);\n    s.setProperty('--lp-secondary', c.secondary);\n    s.setProperty('--lp-secondary-light', c.secondaryLight);\n  }\n}\n","<!-- ===== NAVBAR ===== -->\n<nav class=\"lp-navbar\" [class.lp-navbar-scrolled]=\"navScrolled\">\n  <div class=\"lp-container lp-nav-inner\">\n    <!-- Brand: custom SVG override OR default img+name -->\n    <div class=\"lp-nav-brand\" (click)=\"scrollToSection('lp-hero')\">\n      <ng-container *ngIf=\"config.navBrand; else defaultNavBrand\">\n        <span class=\"lp-nav-brand-svg\" [innerHTML]=\"safeNavBrandSvg\"></span>\n        <div *ngIf=\"config.navBrand.wordmarkLine1\" class=\"lp-nav-brand-wordmark\">\n          <span class=\"lp-nav-wordmark-line1\">{{ config.navBrand.wordmarkLine1 }}</span>\n          <span *ngIf=\"config.navBrand.wordmarkLine2\" class=\"lp-nav-wordmark-line2\">{{ config.navBrand.wordmarkLine2 }}</span>\n        </div>\n      </ng-container>\n      <ng-template #defaultNavBrand>\n        <img [src]=\"config.logoSrc\" [alt]=\"config.appName\" class=\"lp-nav-logo\">\n        <span class=\"lp-nav-brand-text\">{{ config.appName }}</span>\n      </ng-template>\n    </div>\n    <!-- Desktop nav links -->\n    <div class=\"lp-nav-links\">\n      <a *ngFor=\"let link of config.navLinks\" (click)=\"scrollToSection(link.target)\">{{ link.label }}</a>\n    </div>\n    <!-- Mobile menu overlay -->\n    <div class=\"lp-mobile-menu\" [class.lp-mobile-menu-open]=\"mobileMenuOpen\">\n      <a *ngFor=\"let link of config.navLinks\" (click)=\"scrollToSection(link.target)\">{{ link.label }}</a>\n      <div class=\"lp-mobile-auth\">\n        <a class=\"lp-nav-login\" (click)=\"navigateTo('login')\">Log in</a>\n        <button class=\"lp-btn lp-btn-primary\" (click)=\"navigateTo(config.hero.primaryCTARoute || 'signup')\">Get Started</button>\n      </div>\n    </div>\n    <!-- Desktop auth -->\n    <div class=\"lp-nav-auth\">\n      <a class=\"lp-nav-login\" (click)=\"navigateTo('login')\">Log in</a>\n      <button class=\"lp-btn lp-btn-primary lp-btn-sm\" (click)=\"navigateTo(config.hero.primaryCTARoute || 'signup')\">Get Started</button>\n    </div>\n    <!-- Hamburger for mobile -->\n    <button class=\"lp-hamburger\" (click)=\"toggleMobileMenu()\" [class.lp-hamburger-open]=\"mobileMenuOpen\">\n      <span></span><span></span><span></span>\n    </button>\n  </div>\n</nav>\n\n<!-- ===== HERO ===== -->\n<section id=\"lp-hero\" class=\"lp-hero-bg\" [class.lp-hero-split]=\"config.hero.layout === 'split'\">\n  <!-- Optional faded watermark SVG (e.g. company logo) -->\n  <!-- Changed: wrapper div gets Angular scoping attribute; inner div holds innerHTML so svg size CSS applies to scoped .lp-hero-watermark-inner -->\n  <div *ngIf=\"config.hero.watermarkSvg\" class=\"lp-hero-watermark\" aria-hidden=\"true\">\n    <div class=\"lp-hero-watermark-inner\" [innerHTML]=\"safeHeroWatermarkSvg\"></div>\n  </div>\n\n  <div class=\"lp-container lp-hero-content\">\n    <!-- Left / centered column: brand, headline, CTAs -->\n    <div class=\"lp-hero-main\">\n      <!-- App brand: logo + name + decorative divider -->\n      <div class=\"lp-hero-brand\">\n        <div class=\"lp-hero-brand-logo\">\n          <img [src]=\"config.logoSrc\" [alt]=\"config.appName\" class=\"lp-hero-brand-icon\">\n          <span class=\"lp-hero-brand-name\">{{ config.appName }}</span>\n        </div>\n        <div class=\"lp-hero-divider\" aria-hidden=\"true\">\n          <span class=\"lp-hero-divider-line\"></span>\n          <span class=\"lp-hero-divider-dot\"></span>\n          <span class=\"lp-hero-divider-line\"></span>\n        </div>\n      </div>\n      <!-- Hero text: headline, subtitle, CTAs, trust signals -->\n      <div class=\"lp-hero-text\">\n        <div *ngIf=\"config.hero.badge\" class=\"lp-hero-badge\">{{ config.hero.badge }}</div>\n        <h1>{{ config.hero.headline }} <span class=\"lp-gradient-text\">{{ config.hero.gradientText }}</span></h1>\n        <p class=\"lp-hero-subtitle\">{{ config.hero.subtitle }}</p>\n        <div class=\"lp-hero-ctas\">\n          <button class=\"lp-btn lp-btn-primary lp-btn-lg\" (click)=\"navigateTo(config.hero.primaryCTARoute || 'signup')\">\n            {{ config.hero.primaryCTA }}\n          </button>\n          <button class=\"lp-btn lp-btn-outline lp-btn-lg\" (click)=\"scrollToSection(config.hero.secondaryCTASection)\">\n            {{ config.hero.secondaryCTA }}\n          </button>\n        </div>\n        <!-- Trust signals with checkmark SVG icons -->\n        <div class=\"lp-trust-signals\">\n          <div *ngFor=\"let signal of config.hero.trustSignals\" class=\"lp-trust-item\">\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n              <path d=\"M20 6L9 17l-5-5\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n            <span>{{ signal }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n    <!-- App visual: always rendered when projected content exists (stacked below hero text) -->\n    <!-- Changed: removed *ngIf so visual always renders below text; layout is always stacked/column -->\n    <div class=\"lp-hero-visual\">\n      <ng-content select=\"[lpHeroVisual]\"></ng-content>\n    </div>\n  </div>\n</section>\n\n<!-- ===== METRICS (optional) ===== -->\n<section *ngIf=\"config.metrics\" class=\"lp-section lp-animate\">\n  <div class=\"lp-container\">\n    <div class=\"lp-metrics-grid\">\n      <div *ngFor=\"let metric of config.metrics\" class=\"lp-metric-card\">\n        <div class=\"lp-metric-value\">{{ metric.value }}</div>\n        <div class=\"lp-metric-label\">{{ metric.label }}</div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- ===== FEATURES ===== -->\n<section id=\"lp-features\" class=\"lp-section lp-animate\">\n  <div class=\"lp-container\">\n    <div class=\"lp-section-header\">\n      <h2>{{ config.features.title }}</h2>\n      <p>{{ config.features.subtitle }}</p>\n    </div>\n    <div class=\"lp-features-grid\">\n      <div *ngFor=\"let feature of config.features.items\" class=\"lp-feature-card\">\n        <!-- Icon tint: hex + '20' = ~12% opacity background -->\n        <div class=\"lp-feature-icon\"\n             [style.background]=\"iconBg(feature.color)\"\n             [style.color]=\"feature.color\">\n          <span class=\"material-icons\">{{ feature.icon }}</span>\n        </div>\n        <h3 class=\"lp-feature-title\">{{ feature.title }}</h3>\n        <p class=\"lp-feature-desc\">{{ feature.description }}</p>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- ===== WORKFLOW (optional) ===== -->\n<section *ngIf=\"config.workflow\" id=\"lp-workflow\" class=\"lp-section lp-section-alt lp-animate\">\n  <div class=\"lp-container\">\n    <div class=\"lp-section-header\">\n      <h2>{{ config.workflow!.title }}</h2>\n      <p *ngIf=\"config.workflow!.subtitle\">{{ config.workflow!.subtitle }}</p>\n    </div>\n\n    <!-- Road metaphor layout: horizontal road line with waypoints -->\n    <div *ngIf=\"config.workflow!.style === 'road'\" class=\"lp-workflow-road\">\n      <div class=\"lp-road-line\"></div>\n      <div *ngFor=\"let step of config.workflow!.steps\" class=\"lp-waypoint\">\n        <div class=\"lp-waypoint-marker\">\n          <span class=\"material-icons\">{{ step.icon }}</span>\n        </div>\n        <div class=\"lp-waypoint-number\">Step {{ step.number }}</div>\n        <div class=\"lp-waypoint-title\">{{ step.title }}</div>\n        <div class=\"lp-waypoint-desc\">{{ step.description }}</div>\n      </div>\n    </div>\n\n    <!-- Default steps grid layout -->\n    <div *ngIf=\"!config.workflow!.style || config.workflow!.style === 'steps'\" class=\"lp-steps-grid\">\n      <div *ngFor=\"let step of config.workflow!.steps; let i = index\" class=\"lp-step-card\">\n        <div class=\"lp-step-number\">{{ step.number }}</div>\n        <div class=\"lp-step-icon\">\n          <span class=\"material-icons\">{{ step.icon }}</span>\n        </div>\n        <h3 class=\"lp-step-title\">{{ step.title }}</h3>\n        <p class=\"lp-step-desc\">{{ step.description }}</p>\n        <!-- Connector line between steps, not after last -->\n        <div *ngIf=\"i < config.workflow!.steps.length - 1\" class=\"lp-step-connector\"></div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- ===== CUSTOM SECTION SLOT ===== -->\n<!-- Consumer projects app-specific sections here (fleet board, benefits rows, etc.)\n     using [lpCustomSection] attribute on a wrapper element -->\n<ng-content select=\"[lpCustomSection]\"></ng-content>\n\n<!-- ===== MODULES (optional) ===== -->\n<section *ngIf=\"config.modules\" id=\"lp-modules\" class=\"lp-section lp-section-alt lp-animate\">\n  <div class=\"lp-container\">\n    <div class=\"lp-section-header\">\n      <h2>{{ config.modules!.title }}</h2>\n      <p>{{ config.modules!.subtitle }}</p>\n    </div>\n    <div class=\"lp-modules-grid\">\n      <div *ngFor=\"let group of config.modules!.groups\" class=\"lp-module-group\">\n        <div class=\"lp-module-group-label\">{{ group.category }}</div>\n        <div class=\"lp-module-tiles\">\n          <div *ngFor=\"let tile of group.tiles\" class=\"lp-module-tile\">\n            <span class=\"material-icons\">{{ tile.icon }}</span>\n            <span>{{ tile.name }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- ===== SECURITY (optional — dark background) ===== -->\n<section *ngIf=\"config.security\" class=\"lp-section lp-section-dark lp-animate\">\n  <div class=\"lp-container\">\n    <div class=\"lp-section-header lp-header-light\">\n      <h2>{{ config.security!.title }}</h2>\n      <p>{{ config.security!.subtitle }}</p>\n    </div>\n    <div class=\"lp-security-grid\">\n      <div *ngFor=\"let item of config.security!.items\" class=\"lp-security-card\">\n        <div class=\"lp-security-icon\">\n          <span class=\"material-icons\">{{ item.icon }}</span>\n        </div>\n        <h3>{{ item.title }}</h3>\n        <p>{{ item.description }}</p>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- ===== TESTIMONIALS (optional) ===== -->\n<section *ngIf=\"config.testimonials\" class=\"lp-section lp-animate\">\n  <div class=\"lp-container\">\n    <div class=\"lp-section-header\">\n      <h2>{{ config.testimonials!.title }}</h2>\n      <p *ngIf=\"config.testimonials!.subtitle\">{{ config.testimonials!.subtitle }}</p>\n    </div>\n    <div class=\"lp-testimonials-grid\">\n      <div *ngFor=\"let item of config.testimonials!.items\" class=\"lp-testimonial-card\">\n        <div class=\"lp-stars\">\n          <span class=\"material-icons\">star</span>\n          <span class=\"material-icons\">star</span>\n          <span class=\"material-icons\">star</span>\n          <span class=\"material-icons\">star</span>\n          <span class=\"material-icons\">star</span>\n        </div>\n        <p class=\"lp-testimonial-quote\">\"{{ item.quote }}\"</p>\n        <div class=\"lp-testimonial-author\">\n          <div class=\"lp-author-avatar\">{{ item.authorInitials }}</div>\n          <div>\n            <div class=\"lp-author-name\">{{ item.authorName }}</div>\n            <div class=\"lp-author-role\">{{ item.authorRole }}</div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- ===== PRICING (optional) ===== -->\n<section *ngIf=\"config.pricing\" id=\"lp-pricing\" class=\"lp-section lp-animate\">\n  <div class=\"lp-container\">\n    <div class=\"lp-section-header\">\n      <h2>{{ config.pricing!.title }}</h2>\n      <p *ngIf=\"config.pricing!.subtitle\">{{ config.pricing!.subtitle }}</p>\n    </div>\n    <div class=\"lp-pricing-grid\">\n      <div *ngFor=\"let plan of config.pricing!.plans\"\n           class=\"lp-pricing-card\"\n           [class.lp-pricing-popular]=\"plan.popular\">\n        <div *ngIf=\"plan.popular\" class=\"lp-popular-badge\">Most Popular</div>\n        <div class=\"lp-pricing-header\">\n          <h3>{{ plan.name }}</h3>\n          <div class=\"lp-pricing-price\">\n            <span class=\"lp-price-amount\">{{ plan.price }}</span>\n            <span *ngIf=\"plan.period\" class=\"lp-price-period\">{{ plan.period }}</span>\n          </div>\n          <p class=\"lp-pricing-desc\">{{ plan.description }}</p>\n        </div>\n        <ul class=\"lp-pricing-features\">\n          <li *ngFor=\"let feature of plan.features\">{{ feature }}</li>\n        </ul>\n        <!-- Popular plans get primary button, others get outline -->\n        <button *ngIf=\"plan.popular\"\n                class=\"lp-btn lp-btn-primary lp-btn-block\"\n                (click)=\"plan.ctaRoute ? navigateTo(plan.ctaRoute) : scrollToSection(plan.ctaSection || '')\">\n          {{ plan.ctaLabel }}\n        </button>\n        <button *ngIf=\"!plan.popular\"\n                class=\"lp-btn lp-btn-outline lp-btn-block\"\n                (click)=\"plan.ctaRoute ? navigateTo(plan.ctaRoute) : scrollToSection(plan.ctaSection || '')\">\n          {{ plan.ctaLabel }}\n        </button>\n      </div>\n    </div>\n  </div>\n</section>\n\n<!-- ===== FINAL CTA BANNER (optional) ===== -->\n<section *ngIf=\"config.finalCta\" class=\"lp-final-cta lp-animate\">\n  <div class=\"lp-container lp-cta-content\">\n    <h2>{{ config.finalCta!.headline }}</h2>\n    <p>{{ config.finalCta!.subtitle }}</p>\n    <div class=\"lp-cta-buttons\">\n      <button class=\"lp-btn lp-btn-white lp-btn-lg\"\n              (click)=\"navigateTo(config.finalCta!.primaryCTARoute || 'signup')\">\n        {{ config.finalCta!.primaryCTA }}\n      </button>\n      <button *ngIf=\"config.finalCta!.secondaryCTA\"\n              class=\"lp-btn lp-btn-outline-white lp-btn-lg\"\n              (click)=\"scrollToSection(config.finalCta!.secondaryCTASection || '')\">\n        {{ config.finalCta!.secondaryCTA }}\n      </button>\n    </div>\n  </div>\n</section>\n\n<!-- ===== FOOTER ===== -->\n<footer class=\"lp-footer\" id=\"lp-footer\">\n  <div class=\"lp-container\">\n\n    <!-- Rich multi-column footer when footerColumns provided -->\n    <div *ngIf=\"config.footerColumns && config.footerColumns.length; else simpleFooter\" class=\"lp-footer-grid\">\n      <!-- Brand column -->\n      <div class=\"lp-footer-brand-col\">\n        <!-- Custom SVG footer brand OR default img+name -->\n        <ng-container *ngIf=\"config.footerBrand; else defaultFooterBrand\">\n          <div class=\"lp-footer-brand-custom\">\n            <span class=\"lp-footer-brand-svg\" [innerHTML]=\"safeFooterBrandSvg\"></span>\n            <div *ngIf=\"config.footerBrand.wordmarkLine1\" class=\"lp-footer-brand-wordmark\">\n              <span class=\"lp-footer-wordmark-line1\">{{ config.footerBrand.wordmarkLine1 }}</span>\n              <span *ngIf=\"config.footerBrand.wordmarkLine2\" class=\"lp-footer-wordmark-line2\">{{ config.footerBrand.wordmarkLine2 }}</span>\n            </div>\n          </div>\n        </ng-container>\n        <ng-template #defaultFooterBrand>\n          <div class=\"lp-footer-brand-default\">\n            <img [src]=\"config.logoSrc\" [alt]=\"config.appName\" class=\"lp-footer-logo\">\n            <span class=\"lp-footer-name\">{{ config.appName }}</span>\n          </div>\n        </ng-template>\n        <p *ngIf=\"config.footerTagline\" class=\"lp-footer-tagline\">{{ config.footerTagline }}</p>\n      </div>\n      <!-- Link columns -->\n      <div *ngFor=\"let col of config.footerColumns\" class=\"lp-footer-col\">\n        <h4>{{ col.title }}</h4>\n        <a *ngFor=\"let link of col.links\"\n           (click)=\"link.section ? scrollToSection(link.section) : (link.route ? navigateTo(link.route) : null)\">\n          {{ link.label }}\n        </a>\n      </div>\n    </div>\n\n    <!-- Simple single-row footer (default) -->\n    <ng-template #simpleFooter>\n      <div class=\"lp-footer-inner\">\n        <div class=\"lp-footer-brand\">\n          <img [src]=\"config.logoSrc\" [alt]=\"config.appName\" class=\"lp-footer-logo\">\n          <span class=\"lp-footer-name\">{{ config.appName }}</span>\n        </div>\n        <div class=\"lp-footer-links\">\n          <a (click)=\"navigateTo('login')\">Log in</a>\n          <a (click)=\"navigateTo(config.hero.primaryCTARoute || 'signup')\">Sign up</a>\n        </div>\n        <div class=\"lp-footer-copy\">\n          &copy; {{ currentYear }} {{ config.footerCompany || 'alsquare technologies' }}. All rights reserved.\n        </div>\n      </div>\n    </ng-template>\n\n    <!-- Footer bottom bar (shown for both layouts) -->\n    <div *ngIf=\"config.footerColumns && config.footerColumns.length\" class=\"lp-footer-bottom\">\n      <span>&copy; {{ currentYear }} {{ config.footerCompany || 'alsquare technologies' }}. All rights reserved.</span>\n    </div>\n  </div>\n</footer>\n","import { NgModule } from '@angular/core';\r\nimport { TinSpaComponent } from './components/tin-spa.component';\r\nimport { SpaMatModule } from \"./modules/spa-mat.module\";\r\nimport { TextComponent } from './components/text/text.component';\r\nimport { TextMaskComponent } from './components/text-mask/text-mask.component';\r\nimport { TextAreaComponent } from './components/text-area/text-area.component';\r\nimport { TextSingleComponent } from './components/text-single/text-single.component';\r\nimport { CheckComponent } from './components/check/check.component';\r\nimport { DateComponent } from './components/date/date.component';\r\nimport { DatetimeComponent } from './components/datetime/datetime.component';\r\nimport { LabelComponent } from './components/label/label.component';\r\nimport { SelectComponent } from './components/select/select.component';\r\nimport { ActivityComponent } from './components/activity/activity.component';\r\nimport { FilterComponent } from './components/filter/filter.component';\r\nimport { messageDialog } from './components/message/messageDialog.component';\r\nimport { MoneyComponent } from './components/money/money.component';\r\nimport { OptionComponent } from './components/option/option.component';\r\nimport { TilesComponent } from './components/tiles/tiles.component';\r\nimport { StepsComponent } from './components/steps/steps.component';\r\nimport { AttachComponent } from './components/attach/attach.component';\r\nimport { ChipsComponent } from './components/chips/chips.component';\r\nimport { LoaderComponent } from './components/loader/loader.component';\r\nimport { NavMenuComponent } from './components/nav-menu/nav-menu.component';\r\nimport { LoaderInterceptor } from './services/loader-interceptor.service';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { CurrencyPipe, DatePipe, HashLocationStrategy, LocationStrategy, PathLocationStrategy } from '@angular/common';\r\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\r\nimport { CurrencyInputModule } from './components/money/currency-input-mask.module';\r\nimport { TableComponent } from './components/table/table.component';\r\nimport { DetailsDialog as DetailsDialog } from './components/table/detailsDialog.component';\r\nimport { FormComponent } from './components/form/form.component';\r\nimport { CamelToWordsPipe } from './pipes/camelToWords.pipe';\r\nimport { NumberComponent } from './components/number/number.component';\r\nimport { SearchComponent } from './components/search/search.component';\r\nimport { ViewerComponent } from './components/viewer/viewer.component';\r\nimport { viewerDialog } from './components/viewer/viewerDialog.component';\r\nimport { NgxDocViewerModule } from 'ngx-doc-viewer';\r\nimport { ListDialogComponent } from './components/list-dialog/list-dialog.component';\r\nimport { InvitationsTableComponent } from './pages/invitations-table/invitations-table.component';\r\nimport { TableHeaderComponent } from './components/table-header/table-header.component';\r\nimport { TableRowComponent } from './components/table-row/table-row.component';\r\nimport { TableActionComponent } from './components/table-action/table-action.component';\r\nimport { AlertComponent } from './components/alert/alert.component';\r\nimport { EmailComponent } from './components/email/email.component';\r\nimport { PageComponent } from './components/page/page.component';\r\nimport { SelectCommonComponent } from './components/select-common/select-common.component';\r\nimport { SuffixComponent } from './components/suffix/suffix.component';\r\nimport { SelectContextDirective } from './select-context.directive';\r\nimport { SelectLiteComponent } from './components/select-lite/select-lite.component';\r\nimport { TextMultiComponent } from './components/text-multi/text-multi.component';\r\nimport { SelectMultiComponent } from './components/select-multi/select-multi.component';\r\nimport { SelectBitwiseComponent } from './components/select-bitwise/select-bitwise.component';\r\nimport { HtmlComponent } from './components/html/html.component';\r\nimport { NotesComponent } from './components/notes/notes.component';\r\nimport { CapsulesComponent } from './components/capsules/capsules.component';\r\nimport { CardsComponent } from './components/cards/cards.component';\r\nimport { TabsComponent } from './components/tabs/tabs.component';\r\nimport { StatusesComponent } from './components/statuses/statuses.component';\r\nimport { GroupsComponent } from './components/groups/groups.component';\r\nimport { TitleActionsComponent } from './components/title-actions/title-actions.component';\r\nimport { AccountingService } from './services/accounting.service';\r\nimport { LoansService } from './services/loans.service';\r\nimport { TabService } from './services/tab.service'; // Changed: Import tab service\r\nimport { DETAILS_DIALOG_COMPONENT } from './services/dialog-component.token'; // Changed: Import token for default dialog component\r\nimport { WelcomeComponent } from './pages/welcome/welcome.component'; // Tin-SPA business modules welcome page\r\nimport { TermsDialogComponent } from './components/terms-dialog/terms-dialog.component'; // Changed: Added terms dialog\r\nimport { PrivacyDialogComponent } from './components/privacy-dialog/privacy-dialog.component'; // Changed: Added privacy dialog\r\nimport { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; // Changed: Added Chart.js support for spa-charts and tile mini charts\r\nimport { ChartsComponent } from './components/charts/charts.component'; // Changed: Added ChartsComponent for config-driven chart cards\r\nimport { DragDropModule } from '@angular/cdk/drag-drop'; // Changed: Added for CDK drag-drop between groups\r\nimport { FeatureDirective } from './directives/feature.directive'; // Added: Structural directive for plan-based feature gating\r\nimport { SubscriptionService } from './services/subscription.service'; // Added: Subscription feature-checking service\r\nimport { AnalyticsService } from './services/analytics.service'; // Changed: GA4 route tracking service\r\nimport { SpaLandingComponent } from './pages/landing/landing.component'; // Added: Config-driven landing page component\r\nimport { ToastComponent } from './components/toast/toast.component'; // Changed: Cascading toast notifications for real-time entity changes\r\nimport { AgentComponent } from './components/agent/agent.component'; // Changed: Renamed from AgentComponent\r\n\r\n@NgModule({\r\n  declarations: [\r\n    // Changed: Removed page components now declared in domain-specific modules (accounting, inventory, sales, purchasing, hr, payroll, manufacturing, loans, general, tenancy, workflow, overview)\r\n    TinSpaComponent, TextComponent, TextMaskComponent, TextAreaComponent, TextSingleComponent, CheckComponent,DateComponent,DatetimeComponent,LabelComponent,SelectComponent,\r\n    ActivityComponent, FilterComponent, messageDialog, MoneyComponent, OptionComponent, TilesComponent, StepsComponent,\r\n    AttachComponent, ChipsComponent, LoaderComponent, NavMenuComponent, TableComponent, DetailsDialog, FormComponent, CamelToWordsPipe, NumberComponent, SearchComponent, ViewerComponent, viewerDialog,\r\n    ListDialogComponent,\r\n    InvitationsTableComponent,\r\n    TableHeaderComponent, TableRowComponent, TableActionComponent,\r\n    AlertComponent, EmailComponent, PageComponent, SelectCommonComponent, SuffixComponent, SelectContextDirective, SelectLiteComponent,\r\n    TextMultiComponent,\r\n    SelectMultiComponent, SelectBitwiseComponent,\r\n    HtmlComponent, NotesComponent, CapsulesComponent, CardsComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent,\r\n    WelcomeComponent,\r\n    TermsDialogComponent, PrivacyDialogComponent,\r\n    ChartsComponent,\r\n    FeatureDirective,\r\n    SpaLandingComponent,\r\n    ToastComponent,\r\n    AgentComponent\r\n\r\n  ],\r\n  imports: [\r\n    SpaMatModule,\r\n    HttpClientModule,\r\n    CurrencyInputModule,\r\n    NgxDocViewerModule,\r\n    BaseChartDirective, // Changed: Added for Chart.js canvas rendering in charts and tiles\r\n    DragDropModule // Changed: Added for CDK drag-drop between groups\r\n\r\n  ],\r\n  exports: [\r\n    TinSpaComponent,\r\n    SpaMatModule,\r\n    AlertComponent,\r\n    TextComponent,\r\n    TextMaskComponent,\r\n    TextAreaComponent,\r\n    TextSingleComponent,\r\n    TextMultiComponent,\r\n    messageDialog,\r\n    NavMenuComponent,\r\n    LoaderComponent,\r\n    TilesComponent,\r\n    DateComponent,\r\n    SelectComponent,\r\n    SelectBitwiseComponent,\r\n    SelectMultiComponent,\r\n    DatetimeComponent,\r\n    CheckComponent,\r\n    AttachComponent,\r\n    MoneyComponent,\r\n    ChipsComponent,\r\n    ActivityComponent,\r\n    OptionComponent,\r\n    LabelComponent,\r\n    StepsComponent,\r\n    FilterComponent,\r\n    TableComponent, DetailsDialog,\r\n    FormComponent,\r\n    NumberComponent,\r\n    SearchComponent,\r\n    ViewerComponent,\r\n    viewerDialog,\r\n    ListDialogComponent,\r\n\r\n    ListDialogComponent,\r\n    EmailComponent, PageComponent,\r\n    HtmlComponent,\r\n    NotesComponent,\r\n    CapsulesComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent,\r\n\r\n    WelcomeComponent,\r\n    InvitationsTableComponent, // Changed: Exported for use in HRModule (onboarding) and TenancyModule (tenant-settings)\r\n    TermsDialogComponent, PrivacyDialogComponent,\r\n    SelectLiteComponent,\r\n    ChartsComponent,\r\n    FeatureDirective,\r\n    SpaLandingComponent,\r\n    AgentComponent\r\n\r\n  ],\r\n  providers: [\r\n    { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },\r\n    { provide: LocationStrategy, useClass: HashLocationStrategy },\r\n    {provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: {appearance: 'outline'}},\r\n    { provide: DETAILS_DIALOG_COMPONENT, useValue: DetailsDialog }, // Changed: Token now provides unified DetailsDialog (was DetailsDialogInternal)\r\n    CurrencyPipe, DatePipe,\r\n    AccountingService,\r\n    LoansService,\r\n    TabService, // Changed: Added TabService to providers\r\n    provideCharts(withDefaultRegisterables()), // Changed: Register Chart.js with all default chart types\r\n    SubscriptionService, // Added: Subscription feature-checking service\r\n    AnalyticsService // Changed: GA4 route tracking for SPA page views\r\n\r\n  ],\r\n})\r\nexport class TinSpaModule {\r\n  // Changed: Removed auto-init — consumer apps now call analytics.init() with environment config\r\n}\r\n","import { MessageService } from \"../../services/message.service\";\r\nimport { StorageService } from \"../../services/storage.service\";\r\nimport { AuthService } from \"../../services/auth.service\";\r\nimport { Component, OnInit, Input } from \"@angular/core\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\nimport { DataServiceLib } from \"../../services/datalib.service\";\r\nimport { LogService } from \"../../services/log.service\";\r\nimport { AppConfig, ApiResponse, Constants } from \"../../classes/Classes\";\r\nimport { HttpService } from \"../../services/http.service\";\r\nimport { SocialAuthService, SocialUser } from '@abacritt/angularx-social-login';\r\nimport { SignupData, User } from \"../../classes/LibClasses\"; // Changed: Added SignupData import\r\nimport { NotificationsService } from \"../../services/notifications.service\";\r\nimport { SignalRService } from \"../../services/signalr.service\"; // Changed: Added for starting SignalR connection after login\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { MatDialog } from '@angular/material/dialog'; // Changed: Added MatDialog for terms/privacy dialogs\r\nimport { TermsDialogComponent } from '../../components/terms-dialog/terms-dialog.component'; // Changed: Added terms dialog\r\nimport { PrivacyDialogComponent } from '../../components/privacy-dialog/privacy-dialog.component'; // Changed: Added privacy dialog\r\n\r\n\r\n@Component({\r\n    selector: \"spa-login\",\r\n    templateUrl: \"./login.component.html\",\r\n    styleUrls: [\"./login.component.css\"],\r\n    standalone: false\r\n})\r\nexport class LoginComponent implements OnInit {\r\n\r\n\r\n  constructor(private httpService: HttpService, private storageService: StorageService, public router: Router, private messageService: MessageService, public dataService: DataServiceLib,\r\n    public authService: AuthService, private logService: LogService, private route: ActivatedRoute,\r\n    private notificationsService: NotificationsService, private signalRService: SignalRService, private msalService : MsalService, private dialog: MatDialog ) { } // Changed: Added SignalRService injection // Changed: Added MatDialog injection\r\n\r\n  ngOnInit() {\r\n\r\n\r\n    this.dataService.appConfigObserv.subscribe(x => this.appConfig = x);\r\n\r\n    if (this.route.snapshot.queryParams[\"redirectTo\"] != undefined) {\r\n      this.redirectPath = this.route.snapshot.queryParams[\"redirectTo\"]\r\n    }else{\r\n      this.redirectPath = \"home\"\r\n    }\r\n\r\n    // Changed: Use shared tryRestoreSession — handles valid-session check and silent refresh in one call\r\n    this.isProcessing = true;\r\n    this.authService.tryRestoreSession().then(success => {\r\n      this.isProcessing = false;\r\n      if (success) { this.notifications(); this.router.navigate([this.redirectPath]); return; }\r\n      this.setupForm(); // Changed: Only set up login form if no session could be restored\r\n    });\r\n\r\n  }\r\n\r\n  loginWithMS() {\r\n    this.msalService.loginPopup({\r\n      scopes: [\"openid\", \"profile\", \"email\"],\r\n      // prompt: \"select_account\"\r\n    }).subscribe({\r\n      next: (response) => {\r\n        \r\n\r\n        // Get user claims from response\r\n        const claims = response.account;\r\n        \r\n        // Set user details\r\n        this.user.userName = claims.username;\r\n        this.user.password = response.requestId;\r\n        this.user.token = response.idToken;\r\n        this.user.authType = 'MSAL';\r\n \r\n\r\n        // Proceed with your existing login flow\r\n        this.login();\r\n      },\r\n      error: (error) => {\r\n        console.error('MSAL login error:', error);\r\n        this.messageService.toast(\"Microsoft login failed. Please try again.\");\r\n      }\r\n    });\r\n  }\r\n\r\n  \r\n  autoLogin: boolean;\r\n  socialUser: SocialUser | null;\r\n  rememberMe: boolean = false; // Changed: Added for \"Keep me signed in\" checkbox\r\n\r\n  style: string = \"default\";\r\n\r\n  email: string = \"\";\r\n  password: string = \"\";\r\n\r\n  redirectPath\r\n\r\n  public user = new User();\r\n  hide = true;\r\n  isProcessing: boolean = false;\r\n\r\n  appConfig = new AppConfig();\r\n\r\n  public signup() {\r\n    this.router.navigate([\"signup\"]);\r\n  }\r\n\r\n  public recoverAccount() {\r\n    this.router.navigate([\"recover-account\"]);\r\n  }\r\n\r\n  // Changed: Extracted from ngOnInit — runs only when no session could be restored\r\n  private setupForm(): void {\r\n    if (this.route.snapshot.queryParams[\"sso\"] == \"msal\" && this.appConfig.microsoftAuth) {\r\n      this.loginWithMS();\r\n    }\r\n    this.authService.autoLoginObserv.subscribe(x => { this.autoLogin = x; });\r\n    this.socialUser = null;\r\n    this.authService.socialUserObserv.subscribe((socialUser: SocialUser | null) => {\r\n      if (!socialUser) return;\r\n      this.socialUser = socialUser;\r\n      this.user.userName = socialUser.id;\r\n      this.user.password = socialUser.id;\r\n      this.user.token = socialUser.idToken;\r\n      this.user.authType = socialUser.provider;\r\n      this.login();\r\n    });\r\n    this.style = this.dataService.appConfig.loginStyle ?? 'default';\r\n  }\r\n\r\n  public login() {\r\n\r\n\r\n    if (this.user.userName == \"\" || this.user.password == \"\") {\r\n      this.messageService.toast(\"Please enter your credentials\");\r\n      return;\r\n    }\r\n\r\n\r\n    // this.logService.info(\"logging in\");\r\n\r\n    this.isProcessing = true;\r\n\r\n\r\n    this.user.userName = this.user.userName\r\n    this.user.rememberMe = this.rememberMe; // Changed: Set before API call so backend receives the flag\r\n\r\n    this.dataService.Login(this.user).subscribe((apiResponse: ApiResponse) => {\r\n\r\n      this.isProcessing = false;\r\n\r\n\r\n      if (apiResponse.success) {\r\n\r\n        // Changed: Use centralized applyLoginResponse + store username separately\r\n        this.authService.UpdateCurrentUser(this.user.userName);\r\n        this.authService.applyLoginResponse(apiResponse.data, this.rememberMe);\r\n        this.storageService.store(Constants.AUTH_USER, this.user.userName);\r\n\r\n        this.dataService.ClearCache();\r\n\r\n        this.notifications();\r\n\r\n\r\n        if (apiResponse.data.changePassword == true && apiResponse.data.authType == 'local') {\r\n\r\n          this.router.navigate([\"home/user/change-password\"], {\r\n            queryParams: { redirectTo: this.redirectPath },\r\n            queryParamsHandling: 'merge',\r\n            skipLocationChange: false\r\n          });\r\n          return\r\n        }\r\n\r\n        this.router.navigate([this.redirectPath]);\r\n\r\n\r\n\r\n\r\n      } else if (apiResponse.message == \"signup_required\" && apiResponse.data) {\r\n        // Changed: Detect signup_required response and redirect to signup page\r\n        let signupData = new SignupData();\r\n        signupData.token = this.user.token;\r\n        signupData.authType = this.user.authType;\r\n        signupData.firstName = apiResponse.data.firstName;\r\n        signupData.lastName = apiResponse.data.lastName;\r\n        signupData.email = apiResponse.data.email;\r\n        signupData.orgName = apiResponse.data.firstName + \"'s Org\";\r\n        signupData.invitations = apiResponse.data.invitations || [];\r\n        this.dataService.SetPendingSignup(signupData);\r\n        this.router.navigate([\"signup\"]);\r\n      } else {\r\n        this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        this.user.password = \"\";\r\n      }\r\n    },\r\n      (error) => {\r\n        this.isProcessing = false;\r\n\r\n        this.messageService.toast(this.httpService.Error(error));\r\n      }\r\n    );\r\n  }\r\n\r\n  notifications(){\r\n    if (this.appConfig.multitenant){\r\n      this.notificationsService.loadNotifications()\r\n\r\n      // Changed: Start single consolidated SignalR connection for notifications and entity broadcasts\r\n      const appHubUrl = this.httpService.apiUrl.replace(/\\/api\\/$/, '/hubs/app');\r\n      this.storageService.get(Constants.AUTH_TOKEN).then((token: string) => {\r\n        if (token) {\r\n          this.signalRService.startConnection(appHubUrl, token);\r\n        }\r\n      });\r\n    }\r\n\r\n  }\r\n\r\n  // Changed: Opens terms dialog or redirects to URL based on appConfig\r\n  openTerms() {\r\n    if (this.appConfig.termsUrl && this.appConfig.termsUrl.trim() !== '') {\r\n      window.open(this.appConfig.termsUrl, '_blank');\r\n    } else {\r\n      this.dialog.open(TermsDialogComponent, { width: '600px', maxHeight: '80vh' });\r\n    }\r\n  }\r\n\r\n  // Changed: Opens privacy dialog or redirects to URL based on appConfig\r\n  openPrivacy() {\r\n    if (this.appConfig.privacyUrl && this.appConfig.privacyUrl.trim() !== '') {\r\n      window.open(this.appConfig.privacyUrl, '_blank');\r\n    } else {\r\n      this.dialog.open(PrivacyDialogComponent, { width: '600px', maxHeight: '80vh' });\r\n    }\r\n  }\r\n\r\n}\r\n","\r\n  <div *ngIf=\"style=='default'\" class=\"login-page background tin-bg-login\">\r\n\r\n    <div class=\"container\" >\r\n\r\n      <div class=\"logo\">\r\n        <img *ngIf=\"appConfig.logoSize=='normal'\"  [src]=\"appConfig.logo\" style=\"width: 100px\" />\r\n        <img *ngIf=\"appConfig.logoSize=='medium'\"  [src]=\"appConfig.logo\" style=\"width: 150px\" />\r\n        <img *ngIf=\"appConfig.logoSize=='large'\"  [src]=\"appConfig.logo\" style=\"width: 250px\" />\r\n      </div>\r\n\r\n      <mat-card class=\"mat-elevation-z3 \" style=\"width:400px; \">\r\n\r\n        <mat-card-header style=\"margin-bottom: 30px;margin-top: 30px;\">\r\n          <mat-card-title style=\"font-size: 40px;margin-bottom: 10px; margin-top: 20px; font-weight: 300\">{{appConfig.appName}}</mat-card-title>\r\n        </mat-card-header>\r\n\r\n        <mat-card-content *ngIf=\"appConfig.localAuth || appConfig.ADAuth\">\r\n\r\n          <div class=\"tin-input mt-2\">\r\n\r\n            <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"user.userName\" style=\"margin-bottom: 20px;\"></spa-text>\r\n\r\n            <spa-text-mask id=\"txtPassword\" display=\"Password\" [(value)]=\"user.password\" (enterPress)=\"login()\"></spa-text-mask>\r\n\r\n            <!-- Changed: Added \"Keep me signed in\" checkbox -->\r\n            <mat-checkbox [(ngModel)]=\"rememberMe\" color=\"primary\" style=\"margin-top: 10px;\">Keep me signed in</mat-checkbox>\r\n\r\n          </div>\r\n\r\n        </mat-card-content>\r\n\r\n\r\n        <mat-card-actions style=\"margin-bottom: 10px;\">\r\n\r\n          <div class=\"button mt-0\" *ngIf=\"appConfig.localAuth || appConfig.ADAuth\">\r\n            <button id=\"btnLogin\" mat-flat-button [disabled]=\"isProcessing\" style=\"width: 350px;\" (click)=\"login()\" color=\"primary\">Login</button>\r\n          </div>\r\n\r\n          <!-- Changed: Show signup button whenever selfService is enabled, not just for local/AD auth -->\r\n          <div class=\"button\" *ngIf=\"appConfig.selfService\" >\r\n            <button  id=\"btnSignup\" mat-stroked-button color=\"primary\" style=\"width: 350px;\" (click)=\"signup()\">Create an account</button>\r\n          </div>\r\n\r\n          <div class=\"divider\" *ngIf=\"appConfig.googleAuth || appConfig.microsoftAuth\">\r\n            <span>OR</span>\r\n          </div>\r\n\r\n          <div class=\"button\" *ngIf=\"appConfig.googleAuth\">\r\n            <asl-google-signin-button type='standard' width=\"320px\" size='medium' logo_alignment=\"center\" style=\"text-align: center;\"></asl-google-signin-button>\r\n          </div>\r\n\r\n          <div class=\"button\" *ngIf=\"appConfig.microsoftAuth\">\r\n            <button mat-stroked-button color=\"primary\" style=\"width: 350px;\" (click)=\"loginWithMS()\">{{appConfig.microsoftAuthMessage}}</button>\r\n          </div>\r\n\r\n        </mat-card-actions>\r\n\r\n      </mat-card>\r\n\r\n      <a *ngIf=\"appConfig.selfService\" mat-button id=\"lnkRecover\" style=\"margin-top: 1em\" (click)=\"recoverAccount()\">Forgot your password ?</a>\r\n\r\n\r\n\r\n\r\n    </div>\r\n  </div>\r\n\r\n\r\n <div *ngIf=\"style=='modern'\" class=\"modern-login\">\r\n  <mat-card class=\"login-card\">\r\n    <!-- Logo -->\r\n    <div class=\"logo-container\">\r\n        <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px\" />\r\n        <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px\" />\r\n        <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px\" />\r\n    </div>\r\n\r\n    <!-- Welcome text -->\r\n    <div class=\"header-section\"> <!-- Changed: Use custom div instead of mat-card-header -->\r\n      <h2 class=\"login-title\">{{appConfig.loginTitle ?? appConfig.appName}}</h2> <!-- Changed: Use h2 for title -->\r\n      <p class=\"login-subtitle\" *ngIf=\"appConfig.loginMessage\">{{appConfig.loginMessage}}</p> <!-- Changed: Use p for subtitle -->\r\n    </div>\r\n\r\n    <mat-card-content>\r\n      <div class=\"login-form\">\r\n        <!-- Username -->\r\n        <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"user.userName\" [appearance]=\"'outline'\" style=\"margin-bottom: 20px;\"></spa-text>\r\n\r\n        <!-- Password -->\r\n        <spa-text-mask id=\"txtPassword\" display=\"Password\" [(value)]=\"user.password\" [appearance]=\"'outline'\" (enterPress)=\"login()\"></spa-text-mask>\r\n\r\n        <!-- Changed: Added \"Keep me signed in\" checkbox -->\r\n        <mat-checkbox [(ngModel)]=\"rememberMe\" color=\"primary\" style=\"margin-top: 10px; margin-bottom: 10px;\">Keep me signed in</mat-checkbox>\r\n\r\n        <!-- Login Button -->\r\n        <div class=\"button-container\">\r\n          <button id=\"btnLogin\" mat-flat-button color=\"primary\" [disabled]=\"isProcessing\" (click)=\"login()\">\r\n            Login\r\n          </button>\r\n        </div>\r\n\r\n        <!-- Divider -->\r\n        <div class=\"divider\">\r\n          <span>OR</span>\r\n        </div>\r\n\r\n        <!-- Social Login -->\r\n        <div *ngIf=\"appConfig.googleAuth\" class=\"social-login\">\r\n          <asl-google-signin-button type='standard' size='medium' width=\"320\" logo_alignment=\"center\" shape=\"pill\"></asl-google-signin-button>\r\n        </div>\r\n\r\n         <!-- Microsoft Login -->\r\n        <div class=\"button\" *ngIf=\"appConfig.microsoftAuth\">\r\n          <button mat-stroked-button color=\"primary\" style=\"width: 350px;\" (click)=\"loginWithMS()\">{{appConfig.microsoftAuthMessage}}</button>\r\n        </div>\r\n\r\n        <!-- Links -->\r\n        <div class=\"links-container mb-5\">\r\n          <a *ngIf=\"appConfig.selfService\" mat-button id=\"lnkRecover\" color=\"primary\" (click)=\"recoverAccount()\">\r\n            Forgot password?\r\n          </a>\r\n\r\n          <div *ngIf=\"appConfig.selfService\" class=\"signup-container\">\r\n            <span>Don't have an account?</span>\r\n            <a mat-button id=\"btnSignup\" color=\"primary\" (click)=\"signup()\">Sign up</a>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </mat-card-content>\r\n\r\n    <mat-card-footer>\r\n      <div class=\"terms-container\">\r\n        <mat-divider></mat-divider>\r\n          <p class=\"terms-text\">\r\n            By continuing, you acknowledge that you accept our\r\n            <a mat-button color=\"primary\" class=\"terms-link\" (click)=\"openTerms()\">Terms and Conditions</a>\r\n            and\r\n            <a mat-button color=\"primary\" class=\"terms-link\" (click)=\"openPrivacy()\">Privacy Policy</a>.\r\n          </p>\r\n      </div>\r\n    </mat-card-footer>\r\n  </mat-card>\r\n</div>\r\n\r\n\r\n\r\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; // Changed: Added ChangeDetectorRef for invitation toggle\r\nimport { Router } from '@angular/router';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { StorageService } from '../../services/storage.service';\r\nimport { ApiResponse, AppConfig, Constants } from '../../classes/Classes';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { SignupData, User } from '../../classes/LibClasses';\r\nimport { SocialAuthService, SocialUser } from '@abacritt/angularx-social-login';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { NotificationsService } from '../../services/notifications.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { TermsDialogComponent } from '../../components/terms-dialog/terms-dialog.component';\r\nimport { PrivacyDialogComponent } from '../../components/privacy-dialog/privacy-dialog.component';\r\n\r\n// Rewritten: Step-based signup flow for Google/MSAL OAuth users\r\n@Component({\r\n    selector: 'spa-signup',\r\n    templateUrl: './signup.component.html',\r\n    styleUrls: ['./signup.component.css'],\r\n    standalone: false\r\n})\r\nexport class SignupComponent implements OnInit {\r\n\r\n  constructor(\r\n    private httpService: HttpService,\r\n    private messageService: MessageService,\r\n    public dataService: DataServiceLib,\r\n    public authService: AuthService,\r\n    private storageService: StorageService,\r\n    public router: Router,\r\n    private msalService: MsalService,\r\n    private notificationsService: NotificationsService,\r\n    private dialog: MatDialog,\r\n    private cdr: ChangeDetectorRef // Changed: Inject ChangeDetectorRef for invitation toggle\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.dataService.appConfigObserv.subscribe(x => this.appConfig = x);\r\n    this.style = this.dataService.appConfig.loginStyle ?? 'default';\r\n\r\n    // Check for pending signup data from login redirect\r\n    this.dataService.pendingSignup$.subscribe(data => {\r\n      if (data) {\r\n        this.signupData = data;\r\n        this.dataService.ClearPendingSignup();\r\n        // Skip provider step since we already have token from login\r\n        this.step = data.invitations.length > 0 ? 'invitations' : 'form';\r\n      }\r\n    });\r\n\r\n    // Listen for Google social login events (for direct /signup visits)\r\n    this.authService.socialUserObserv.subscribe((socialUser: SocialUser | null) => {\r\n      if (!socialUser || this.step !== 'provider') return;\r\n      this.handleProviderAuth(socialUser.idToken, socialUser.provider, socialUser.id);\r\n    });\r\n  }\r\n\r\n  appConfig = new AppConfig();\r\n  style: string = 'default';\r\n  signupData = new SignupData();\r\n  step: 'provider' | 'form' | 'invitations' | 'complete' = 'provider';\r\n  isProcessing: boolean = false;\r\n\r\n  // Handle provider authentication from direct /signup visit\r\n  handleProviderAuth(token: string, authType: string, userName: string) {\r\n    this.isProcessing = true;\r\n\r\n    // Use the login endpoint to validate token and get user details\r\n    let user = new User();\r\n    user.userName = userName;\r\n    user.password = userName;\r\n    user.token = token;\r\n    user.authType = authType;\r\n\r\n    this.dataService.Login(user).subscribe((apiResponse: ApiResponse) => {\r\n      this.isProcessing = false;\r\n\r\n      if (apiResponse.message == \"signup_required\" && apiResponse.data) {\r\n        // Expected: user doesn't exist, populate signup data\r\n        this.signupData.token = token;\r\n        this.signupData.authType = authType;\r\n        this.signupData.firstName = apiResponse.data.firstName;\r\n        this.signupData.lastName = apiResponse.data.lastName;\r\n        this.signupData.email = apiResponse.data.email;\r\n        this.signupData.orgName = apiResponse.data.firstName + \"'s Org\";\r\n        this.signupData.invitations = apiResponse.data.invitations || [];\r\n        this.step = this.signupData.invitations.length > 0 ? 'invitations' : 'form';\r\n      } else if (apiResponse.success) {\r\n        // User already exists, complete login normally\r\n        this.completeLogin(apiResponse);\r\n      } else {\r\n        this.messageService.toast(\"Error: \" + apiResponse.message);\r\n      }\r\n    },\r\n    (error) => {\r\n      this.isProcessing = false;\r\n      this.messageService.toast(this.httpService.Error(error));\r\n    });\r\n  }\r\n\r\n  // Login with Microsoft from signup page\r\n  loginWithMS() {\r\n    this.msalService.loginPopup({\r\n      scopes: [\"openid\", \"profile\", \"email\"],\r\n    }).subscribe({\r\n      next: (response) => {\r\n        this.handleProviderAuth(response.idToken, 'MSAL', response.account.username);\r\n      },\r\n      error: (error) => {\r\n        console.error('MSAL login error:', error);\r\n        this.messageService.toast(\"Microsoft login failed. Please try again.\");\r\n      }\r\n    });\r\n  }\r\n\r\n  // Toggle invitation acceptance\r\n  toggleInvitation(invitation: any) {\r\n    invitation.accepted = !invitation.accepted;\r\n    this.cdr.detectChanges(); // Changed: Force change detection for invitation card icon update\r\n  }\r\n\r\n  // Submit signup form\r\n  submit() {\r\n    if (!this.signupData.termsAccepted) {\r\n      this.messageService.toast(\"Please accept the terms and conditions\");\r\n      return;\r\n    }\r\n\r\n    if (!this.signupData.firstName.trim() || !this.signupData.lastName.trim()) {\r\n      this.messageService.toast(\"Please enter your first and last name\");\r\n      return;\r\n    }\r\n\r\n    // For invitation flow, collect accepted invitation IDs\r\n    if (this.step === 'invitations') {\r\n      this.signupData.acceptedInvitationIds = this.signupData.invitations\r\n        .filter(inv => inv.accepted)\r\n        .map(inv => inv.memberID);\r\n\r\n      if (this.signupData.acceptedInvitationIds.length === 0) {\r\n        this.messageService.toast(\"Please accept at least one invitation\");\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.isProcessing = true;\r\n\r\n    this.dataService.Signup(this.signupData).subscribe((apiResponse: ApiResponse) => {\r\n      this.isProcessing = false;\r\n\r\n      if (apiResponse.success) {\r\n        // Store auth data and show completion\r\n        this.completeLogin(apiResponse);\r\n        this.step = 'complete';\r\n      } else {\r\n        this.messageService.toast(\"Error: \" + apiResponse.message);\r\n      }\r\n    },\r\n    (error) => {\r\n      this.isProcessing = false;\r\n      this.messageService.toast(this.httpService.Error(error));\r\n    });\r\n  }\r\n\r\n  // Store auth data (same pattern as login component)\r\n  completeLogin(apiResponse: ApiResponse) {\r\n    this.authService.Updateloggedin(true);\r\n    this.authService.UpdateToken(apiResponse.data.token);\r\n    this.storageService.store(Constants.AUTH_TOKEN, apiResponse.data.token);\r\n    this.authService.UpdateTokenExpire(apiResponse.data.expiration);\r\n    this.storageService.store(Constants.AUTH_TOKEN_EXPIRE, apiResponse.data.expiration);\r\n    this.authService.UpdateCurrentUser(this.signupData.email.toUpperCase());\r\n    this.storageService.store(Constants.AUTH_USER, this.signupData.email.toUpperCase());\r\n    this.authService.updateLoggedUserFullName(apiResponse.data.firstName);\r\n    this.storageService.store(Constants.AUTH_NAME, apiResponse.data.firstName);\r\n    this.authService.UpdateRole(apiResponse.data.role);\r\n    this.storageService.store(Constants.AUTH_ROLES, JSON.stringify(apiResponse.data.role));\r\n    this.authService.updateTenantName(apiResponse.data.tenantName);\r\n    this.storageService.store(Constants.AUTH_TENANT_NAME, apiResponse.data.tenantName);\r\n    this.dataService.ClearCache();\r\n\r\n    if (this.appConfig.multitenant) {\r\n      this.notificationsService.loadNotifications();\r\n    }\r\n  }\r\n\r\n  // Navigate to dashboard after signup completion\r\n  goToDashboard() {\r\n    this.router.navigate([\"home\"]);\r\n  }\r\n\r\n  // Navigate back to login\r\n  goToLogin() {\r\n    this.router.navigate([\"login\"]);\r\n  }\r\n\r\n  // Open terms dialog or URL\r\n  openTerms() {\r\n    if (this.appConfig.termsUrl && this.appConfig.termsUrl.trim() !== '') {\r\n      window.open(this.appConfig.termsUrl, '_blank');\r\n    } else {\r\n      this.dialog.open(TermsDialogComponent, { width: '600px', maxHeight: '80vh' });\r\n    }\r\n  }\r\n\r\n  // Open privacy dialog or URL\r\n  openPrivacy() {\r\n    if (this.appConfig.privacyUrl && this.appConfig.privacyUrl.trim() !== '') {\r\n      window.open(this.appConfig.privacyUrl, '_blank');\r\n    } else {\r\n      this.dialog.open(PrivacyDialogComponent, { width: '600px', maxHeight: '80vh' });\r\n    }\r\n  }\r\n}\r\n","<!-- Modern Style -->\r\n<div *ngIf=\"style=='modern'\" class=\"modern-signup\">\r\n  <mat-card class=\"signup-card\">\r\n\r\n    <!-- Logo -->\r\n    <div class=\"logo-container\">\r\n      <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px\" />\r\n      <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px\" />\r\n      <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px\" />\r\n    </div>\r\n\r\n    <!-- Provider Step -->\r\n    <div *ngIf=\"step === 'provider'\">\r\n      <div class=\"header-section\">\r\n        <h2 class=\"signup-title\">Create your account</h2>\r\n        <p class=\"signup-subtitle\">Get started with {{appConfig.appName}}</p>\r\n      </div>\r\n\r\n      <div class=\"provider-buttons\">\r\n        <div *ngIf=\"appConfig.googleAuth\" class=\"social-login\">\r\n          <asl-google-signin-button type='standard' size='medium' width=\"320\" logo_alignment=\"center\" shape=\"pill\"></asl-google-signin-button>\r\n        </div>\r\n\r\n        <div class=\"button\" *ngIf=\"appConfig.microsoftAuth\">\r\n          <button mat-stroked-button color=\"primary\" (click)=\"loginWithMS()\">{{appConfig.microsoftAuthMessage ?? 'Continue with Microsoft'}}</button>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"links-container\">\r\n        <div class=\"login-link-container\">\r\n          <span>Already have an account?</span>\r\n          <a mat-button color=\"primary\" (click)=\"goToLogin()\">Log in</a>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Form Step (New Org) -->\r\n    <div *ngIf=\"step === 'form'\">\r\n      <div class=\"header-section\">\r\n        <h2 class=\"signup-title\">Almost there</h2>\r\n        <p class=\"signup-subtitle\">Confirm your details to get started</p>\r\n      </div>\r\n\r\n      <div class=\"signup-form\">\r\n        <div class=\"name-row\">\r\n          <mat-form-field appearance=\"outline\" class=\"name-field\">\r\n            <mat-label>First Name</mat-label>\r\n            <input matInput [(ngModel)]=\"signupData.firstName\">\r\n          </mat-form-field>\r\n\r\n          <mat-form-field appearance=\"outline\" class=\"name-field\">\r\n            <mat-label>Last Name</mat-label>\r\n            <input matInput [(ngModel)]=\"signupData.lastName\">\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n          <mat-label>Email</mat-label>\r\n          <input matInput [value]=\"signupData.email\" readonly>\r\n        </mat-form-field>\r\n\r\n        <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n          <mat-label>Organisation Name</mat-label>\r\n          <input matInput [(ngModel)]=\"signupData.orgName\">\r\n        </mat-form-field>\r\n\r\n        <mat-checkbox [(ngModel)]=\"signupData.termsAccepted\" color=\"primary\" class=\"terms-checkbox\">\r\n          I agree to the\r\n          <a (click)=\"openTerms(); $event.preventDefault()\" class=\"terms-link\">Terms and Conditions</a>\r\n          and\r\n          <a (click)=\"openPrivacy(); $event.preventDefault()\" class=\"terms-link\">Privacy Policy</a>\r\n        </mat-checkbox>\r\n\r\n        <div class=\"button-container\">\r\n          <button mat-flat-button color=\"primary\" [disabled]=\"isProcessing\" (click)=\"submit()\">\r\n            <mat-spinner *ngIf=\"isProcessing\" diameter=\"20\" class=\"inline-spinner\"></mat-spinner>\r\n            <span *ngIf=\"!isProcessing\">Create Account</span>\r\n          </button>\r\n        </div>\r\n\r\n        <div class=\"links-container\">\r\n          <a mat-button color=\"primary\" (click)=\"goToLogin()\">Back to Login</a>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Invitations Step (Join Existing Org) -->\r\n    <div *ngIf=\"step === 'invitations'\">\r\n      <div class=\"header-section\">\r\n        <mat-icon class=\"invite-icon\" color=\"primary\">mail</mat-icon>\r\n        <h2 class=\"signup-title\">You've been invited!</h2>\r\n        <p class=\"signup-subtitle\">Accept an invitation to get started</p>\r\n      </div>\r\n\r\n      <div class=\"signup-form\">\r\n        <div class=\"invitation-list\">\r\n          <mat-card *ngFor=\"let inv of signupData.invitations\" class=\"invitation-card\" [class.accepted]=\"inv.accepted\" (click)=\"toggleInvitation(inv)\">\r\n            <div class=\"invitation-content\">\r\n              <mat-icon [color]=\"inv.accepted ? 'primary' : ''\">{{inv.accepted ? 'check_circle' : 'circle'}}</mat-icon>\r\n              <span class=\"invitation-org-name\">{{inv.tenantName}}</span>\r\n            </div>\r\n          </mat-card>\r\n        </div>\r\n\r\n        <div class=\"name-row\">\r\n          <mat-form-field appearance=\"outline\" class=\"name-field\">\r\n            <mat-label>First Name</mat-label>\r\n            <input matInput [(ngModel)]=\"signupData.firstName\">\r\n          </mat-form-field>\r\n\r\n          <mat-form-field appearance=\"outline\" class=\"name-field\">\r\n            <mat-label>Last Name</mat-label>\r\n            <input matInput [(ngModel)]=\"signupData.lastName\">\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <mat-checkbox [(ngModel)]=\"signupData.termsAccepted\" color=\"primary\" class=\"terms-checkbox\">\r\n          I agree to the\r\n          <a (click)=\"openTerms(); $event.preventDefault()\" class=\"terms-link\">Terms and Conditions</a>\r\n          and\r\n          <a (click)=\"openPrivacy(); $event.preventDefault()\" class=\"terms-link\">Privacy Policy</a>\r\n        </mat-checkbox>\r\n\r\n        <div class=\"button-container\">\r\n          <button mat-flat-button color=\"primary\" [disabled]=\"isProcessing\" (click)=\"submit()\">\r\n            <mat-spinner *ngIf=\"isProcessing\" diameter=\"20\" class=\"inline-spinner\"></mat-spinner>\r\n            <span *ngIf=\"!isProcessing\">Complete Signup</span>\r\n          </button>\r\n        </div>\r\n\r\n        <div class=\"links-container\">\r\n          <a mat-button color=\"primary\" (click)=\"goToLogin()\">Back to Login</a>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Complete Step -->\r\n    <div *ngIf=\"step === 'complete'\" class=\"complete-section\">\r\n      <mat-icon class=\"complete-icon\">check_circle</mat-icon>\r\n      <h2 class=\"signup-title\">You're all set!</h2>\r\n      <p class=\"signup-subtitle\">Welcome to {{appConfig.appName}}</p>\r\n      <div class=\"button-container\">\r\n        <button mat-flat-button color=\"primary\" (click)=\"goToDashboard()\">Go to Dashboard</button>\r\n      </div>\r\n    </div>\r\n\r\n  </mat-card>\r\n</div>\r\n\r\n\r\n<!-- Default Style -->\r\n<div *ngIf=\"style=='default'\" class=\"default-signup background tin-bg-login\">\r\n  <div class=\"container\">\r\n\r\n    <div class=\"logo\">\r\n      <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px\" />\r\n      <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px\" />\r\n      <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px\" />\r\n    </div>\r\n\r\n    <mat-card class=\"mat-elevation-z3\" style=\"width:400px;\">\r\n\r\n      <!-- Provider Step -->\r\n      <div *ngIf=\"step === 'provider'\">\r\n        <mat-card-header style=\"margin-bottom: 30px; margin-top: 30px;\">\r\n          <mat-card-title style=\"font-size: 28px; margin-bottom: 10px; margin-top: 20px; font-weight: 300\">Create Account</mat-card-title>\r\n          <mat-card-subtitle>Get started with {{appConfig.appName}}</mat-card-subtitle>\r\n        </mat-card-header>\r\n\r\n        <mat-card-actions style=\"margin-bottom: 10px;\">\r\n          <div *ngIf=\"appConfig.googleAuth\" class=\"button\">\r\n            <asl-google-signin-button type='standard' width=\"320px\" size='medium' logo_alignment=\"center\" style=\"text-align: center;\"></asl-google-signin-button>\r\n          </div>\r\n\r\n          <div class=\"button\" *ngIf=\"appConfig.microsoftAuth\">\r\n            <button mat-stroked-button color=\"primary\" style=\"width: 350px;\" (click)=\"loginWithMS()\">{{appConfig.microsoftAuthMessage ?? 'Continue with Microsoft'}}</button>\r\n          </div>\r\n\r\n          <div class=\"button\" style=\"margin-top: 20px;\">\r\n            <a mat-button color=\"primary\" (click)=\"goToLogin()\">Already have an account? Log in</a>\r\n          </div>\r\n        </mat-card-actions>\r\n      </div>\r\n\r\n      <!-- Form Step (New Org) -->\r\n      <div *ngIf=\"step === 'form'\">\r\n        <mat-card-header style=\"margin-bottom: 20px; margin-top: 20px;\">\r\n          <mat-card-title style=\"font-size: 28px; margin-bottom: 10px; font-weight: 300\">Almost there</mat-card-title>\r\n          <mat-card-subtitle>Confirm your details to get started</mat-card-subtitle>\r\n        </mat-card-header>\r\n\r\n        <mat-card-content>\r\n          <div class=\"signup-form-default\">\r\n            <mat-form-field class=\"full-width\">\r\n              <mat-label>First Name</mat-label>\r\n              <input matInput [(ngModel)]=\"signupData.firstName\">\r\n            </mat-form-field>\r\n\r\n            <mat-form-field class=\"full-width\">\r\n              <mat-label>Last Name</mat-label>\r\n              <input matInput [(ngModel)]=\"signupData.lastName\">\r\n            </mat-form-field>\r\n\r\n            <mat-form-field class=\"full-width\">\r\n              <mat-label>Email</mat-label>\r\n              <input matInput [value]=\"signupData.email\" readonly>\r\n            </mat-form-field>\r\n\r\n            <mat-form-field class=\"full-width\">\r\n              <mat-label>Organisation Name</mat-label>\r\n              <input matInput [(ngModel)]=\"signupData.orgName\">\r\n            </mat-form-field>\r\n\r\n            <mat-checkbox [(ngModel)]=\"signupData.termsAccepted\" color=\"primary\" class=\"terms-checkbox\">\r\n              I agree to the\r\n              <a (click)=\"openTerms(); $event.preventDefault()\" class=\"terms-link\">Terms</a>\r\n              and\r\n              <a (click)=\"openPrivacy(); $event.preventDefault()\" class=\"terms-link\">Privacy Policy</a>\r\n            </mat-checkbox>\r\n          </div>\r\n        </mat-card-content>\r\n\r\n        <mat-card-actions style=\"margin-bottom: 10px;\">\r\n          <div class=\"button\">\r\n            <button mat-flat-button color=\"primary\" style=\"width: 350px;\" [disabled]=\"isProcessing\" (click)=\"submit()\">\r\n              <mat-spinner *ngIf=\"isProcessing\" diameter=\"20\" class=\"inline-spinner\"></mat-spinner>\r\n              <span *ngIf=\"!isProcessing\">Create Account</span>\r\n            </button>\r\n          </div>\r\n          <div class=\"button\">\r\n            <a mat-button color=\"primary\" (click)=\"goToLogin()\">Back to Login</a>\r\n          </div>\r\n        </mat-card-actions>\r\n      </div>\r\n\r\n      <!-- Invitations Step -->\r\n      <div *ngIf=\"step === 'invitations'\">\r\n        <mat-card-header style=\"margin-bottom: 20px; margin-top: 20px;\">\r\n          <mat-card-title style=\"font-size: 28px; margin-bottom: 10px; font-weight: 300\">You've been invited!</mat-card-title>\r\n          <mat-card-subtitle>Accept an invitation to get started</mat-card-subtitle>\r\n        </mat-card-header>\r\n\r\n        <mat-card-content>\r\n          <div class=\"signup-form-default\">\r\n            <div class=\"invitation-list\">\r\n              <mat-card *ngFor=\"let inv of signupData.invitations\" class=\"invitation-card\" [class.accepted]=\"inv.accepted\" (click)=\"toggleInvitation(inv)\">\r\n                <div class=\"invitation-content\">\r\n                  <mat-icon [color]=\"inv.accepted ? 'primary' : ''\">{{inv.accepted ? 'check_circle' : 'circle'}}</mat-icon>\r\n                  <span class=\"invitation-org-name\">{{inv.tenantName}}</span>\r\n                </div>\r\n              </mat-card>\r\n            </div>\r\n\r\n            <mat-form-field class=\"full-width\">\r\n              <mat-label>First Name</mat-label>\r\n              <input matInput [(ngModel)]=\"signupData.firstName\">\r\n            </mat-form-field>\r\n\r\n            <mat-form-field class=\"full-width\">\r\n              <mat-label>Last Name</mat-label>\r\n              <input matInput [(ngModel)]=\"signupData.lastName\">\r\n            </mat-form-field>\r\n\r\n            <mat-checkbox [(ngModel)]=\"signupData.termsAccepted\" color=\"primary\" class=\"terms-checkbox\">\r\n              I agree to the\r\n              <a (click)=\"openTerms(); $event.preventDefault()\" class=\"terms-link\">Terms</a>\r\n              and\r\n              <a (click)=\"openPrivacy(); $event.preventDefault()\" class=\"terms-link\">Privacy Policy</a>\r\n            </mat-checkbox>\r\n          </div>\r\n        </mat-card-content>\r\n\r\n        <mat-card-actions style=\"margin-bottom: 10px;\">\r\n          <div class=\"button\">\r\n            <button mat-flat-button color=\"primary\" style=\"width: 350px;\" [disabled]=\"isProcessing\" (click)=\"submit()\">\r\n              <mat-spinner *ngIf=\"isProcessing\" diameter=\"20\" class=\"inline-spinner\"></mat-spinner>\r\n              <span *ngIf=\"!isProcessing\">Complete Signup</span>\r\n            </button>\r\n          </div>\r\n          <div class=\"button\">\r\n            <a mat-button color=\"primary\" (click)=\"goToLogin()\">Back to Login</a>\r\n          </div>\r\n        </mat-card-actions>\r\n      </div>\r\n\r\n      <!-- Complete Step -->\r\n      <div *ngIf=\"step === 'complete'\" class=\"complete-section-default\">\r\n        <mat-icon class=\"complete-icon-default\">check_circle</mat-icon>\r\n        <h3 style=\"font-weight: 300; font-size: 28px;\">You're all set!</h3>\r\n        <p style=\"color: rgba(0,0,0,0.6);\">Welcome to {{appConfig.appName}}</p>\r\n        <div class=\"button\" style=\"margin-bottom: 20px;\">\r\n          <button mat-flat-button color=\"primary\" style=\"width: 350px;\" (click)=\"goToDashboard()\">Go to Dashboard</button>\r\n        </div>\r\n      </div>\r\n\r\n    </mat-card>\r\n\r\n  </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { ApiResponse } from '../../classes/Classes';\r\nimport { Location } from '@angular/common';\r\nimport { User } from '../../classes/LibClasses';\r\n\r\n@Component({\r\n    selector: 'spa-recover-account',\r\n    templateUrl: './recover-account.component.html',\r\n    styleUrls: ['./recover-account.component.css'],\r\n    standalone: false\r\n})\r\nexport class RecoverAccountComponent implements OnInit {\r\n\r\n  constructor(private location: Location, private dataService: DataServiceLib, public authService: AuthService, private messageService: MessageService) { }\r\n\r\n  ngOnInit() {\r\n  }\r\n\r\n  userName: string = \"\";\r\n\r\n  recover(){\r\n\r\n\r\n    if (this.userName == \"\") {\r\n\r\n      this.messageService.toast(\"Please enter your userName\");\r\n      return;\r\n    } else {\r\n      let u = new User();\r\n      u.userName = this.userName;\r\n\r\n      this.dataService.SelfReset(u).subscribe((apiResponse: ApiResponse) => {\r\n        if (apiResponse.message == \"success\") {\r\n          this.messageService.toast(\"The password has been sent to your email\");\r\n          this.location.back();\r\n        } else {\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n\r\n}\r\n","\r\n<div class=\"container\" style=\"padding-top: 30px;\">\r\n<h4>Recover Account</h4>\r\n\r\n<hr />\r\n\r\nSubmit your Username and we will send you details to your registered email address.\r\n\r\n<div style=\"font-size: 14px;\">\r\n  <spa-text class=\"mt-3\" display=\"Username\" [(value)]=\"userName\"></spa-text>\r\n\r\n  <div class=\"tin-center\">\r\n    <button class=\"mt-3 w-50\" mat-raised-button color=\"primary\" (click)=\"recover()\" cdkFocusInitial>Submit</button>\r\n  </div>\r\n\r\n</div>\r\n\r\n</div>\r\n\r\n","import { SpaMatModule } from \"./spa-mat.module\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { LoginComponent } from \"../pages/login/login.component\";\r\nimport { SignupComponent } from \"../pages/signup/signup.component\";\r\nimport { RecoverAccountComponent } from \"../pages/recover-account/recover-account.component\";\r\nimport { TinSpaModule } from \"../tin-spa.module\";\r\nimport { SocialLoginModule } from \"@abacritt/angularx-social-login\";\r\n\r\n@NgModule({\r\n  declarations: [LoginComponent, SignupComponent, RecoverAccountComponent],\r\n\r\n\r\n\r\n  imports: [\r\n    ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: \"never\" }),\r\n    CommonModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    TinSpaModule,\r\n    SocialLoginModule\r\n  ],\r\n\r\n  exports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    TinSpaModule,\r\n    LoginComponent,\r\n    SignupComponent,\r\n    RecoverAccountComponent,\r\n  ],\r\n})\r\nexport class SpaIndexModule {}\r\n","\r\nimport { ApiResponse } from './../../classes/Classes';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { Location } from '@angular/common';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { ChangeUserPassword } from '../../classes/LibClasses';\r\n\r\n@Component({\r\n    selector: 'spa-change-password',\r\n    templateUrl: './change-password.component.html',\r\n    styleUrls: ['./change-password.component.css'],\r\n    standalone: false\r\n})\r\nexport class ChangePasswordComponent implements OnInit {\r\n\r\n  constructor(public router: Router, private location: Location, private httpService: HttpService, private messageService: MessageService, public dataService: DataServiceLib, private authService: AuthService, private route: ActivatedRoute) { }\r\n\r\n  ngOnInit() {\r\n    this.myRole = this.authService.currentRoleSource.value\r\n\r\n    if (this.dataService.tmpProfileuserName==\"\"){\r\n      this.changePassword.userName = this.authService.currentUser;\r\n\r\n    }else{\r\n      this.changePassword.userName = this.dataService.tmpProfileuserName;\r\n      this.dataService.tmpProfileuserName = \"\";\r\n    }\r\n\r\n    if (this.route.snapshot.queryParams[\"redirectTo\"] != undefined) {\r\n      this.redirectPath = this.route.snapshot.queryParams[\"redirectTo\"]\r\n    } else {\r\n      this.redirectPath = \"home\"\r\n    }\r\n\r\n  }\r\n\r\n  myRole;\r\n  redirectPath\r\n  isProcessing: boolean = false;\r\n  changePassword = new ChangeUserPassword();\r\n\r\n  public change() {\r\n\r\n    if (!this.myRole[this.dataService.capUsers.name]){\r\n      if (this.changePassword.currentPassword == \"\") {\r\n        this.messageService.toast(\"Please enter current Password\");\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (this.changePassword.newPassword == \"\") {\r\n      this.messageService.toast(\"Please enter new Password\");\r\n      return;\r\n    }\r\n\r\n    if (this.changePassword.confirmPassword == \"\") {\r\n      this.messageService.toast(\"Please confirm new Password\");\r\n      return;\r\n    }\r\n\r\n    if (this.changePassword.confirmPassword != this.changePassword.newPassword ) {\r\n      this.messageService.toast(\"Passwords do not match\");\r\n      return;\r\n    }\r\n\r\n    this.isProcessing = true;\r\n\r\n    if (this.myRole[this.dataService.capUsers.name]){\r\n\r\n\r\n      this.dataService.ChangePasswordAdmin(this.changePassword).subscribe((apiResponse: ApiResponse) => {\r\n        this.isProcessing = false;\r\n\r\n        if (apiResponse.message == \"success\") {\r\n          this.messageService.toast(\"Password Changed\");\r\n\r\n          this.router.navigate([this.redirectPath]);\r\n\r\n        } else {\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        }\r\n      }\r\n      );\r\n\r\n    }else{\r\n\r\n      this.dataService.ChangePassword(this.changePassword).subscribe((apiResponse: ApiResponse) => {\r\n        this.isProcessing = false;\r\n\r\n        if (apiResponse.message == \"success\") {\r\n          this.messageService.toast(\"Password Changed\");\r\n\r\n          this.router.navigate([this.redirectPath]);\r\n        } else {\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        }\r\n      }\r\n      );\r\n\r\n    }\r\n  }\r\n}\r\n","<h4>Change Password</h4>\r\n<hr>\r\n\r\n\r\n<div class=\"container tin-grid\" style=\"font-size:14px;\">\r\n\r\n  <div class=\"fill\">\r\n\r\n    <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\"  [readonly]=\"true\"></spa-text>\r\n    <spa-text-mask id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\"  type=\"password\"></spa-text-mask>\r\n    <spa-text-mask id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" type=\"password\"></spa-text-mask>\r\n    <spa-text-mask id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\"  type=\"password\"></spa-text-mask>\r\n    <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n\r\n  </div>\r\n\r\n      <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n        <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n        At least 8 characters<br>\r\n        At least 1 uppercase letter (A-Z)<br>\r\n        At least 2 lowercase letters (a-z)<br>\r\n        At least 1 digit (0-9)<br>\r\n        At least 1 special character (~`! …)<br>\r\n\r\n      </div>\r\n\r\n</div>\r\n\r\n\r\n<!-- <div class=\"container\">\r\n\r\n  <div class=\"d-flex justify-content-center row align-items-center\" >\r\n\r\n    <div class=\"col\">\r\n\r\n      <div class=\"tin-input \" style=\"font-size:14px;\">\r\n\r\n        <div class=\"col\" *ngIf=\"changePassword.userName!=''\">\r\n          <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" width=\"300px\" [readonly]=\"true\"></spa-text>\r\n        </div>\r\n\r\n        <div class=\"col\" *ngIf=\"!myRole[dataService.capUsers.name]\">\r\n          <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n        </div>\r\n\r\n        <div class=\"col\">\r\n          <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n        </div>\r\n\r\n        <div class=\"col\">\r\n           <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n        </div>\r\n\r\n        <div class=\"col mt-3\">\r\n          <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n        </div>\r\n\r\n      </div>\r\n\r\n    </div>\r\n\r\n    <div class=\"col\">\r\n\r\n      <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n        <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n        At least 8 characters<br>\r\n        At least 1 uppercase letter (A-Z)<br>\r\n        At least 2 lowercase letters (a-z)<br>\r\n        At least 1 digit (0-9)<br>\r\n        At least 1 special character (~`! …)<br>\r\n\r\n      </div>\r\n\r\n    </div>\r\n\r\n\r\n\r\n\r\n\r\n  </div>\r\n</div> -->\r\n\r\n","import { AuthService } from './../../services/auth.service';\r\nimport { MessageService } from './../../services/message.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { ApiResponse, AppConfig } from '../../classes/Classes';\r\nimport { Router } from '@angular/router';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { Profile } from '../../classes/LibClasses';\r\n\r\n@Component({\r\n    selector: 'spa-profile',\r\n    templateUrl: './profile.component.html',\r\n    styleUrls: ['./profile.component.css'],\r\n    standalone: false\r\n})\r\nexport class ProfileComponent implements OnInit {\r\n\r\n  constructor(public dataService: DataServiceLib, private messageService: MessageService, private httpService: HttpService, private router: Router, private authService: AuthService) { }\r\n\r\n  ngOnInit() {\r\n\r\n    this.myRole = this.authService.currentRoleSource.value\r\n\r\n    if (this.dataService.tmpProfileuserName==\"\"){\r\n      this.loadProfile(this.authService.currentUser);\r\n\r\n    }else{\r\n      this.loadProfile(this.dataService.tmpProfileuserName);\r\n      this.dataService.tmpProfileuserName = \"\";\r\n    }\r\n\r\n\r\n\r\n  }\r\n\r\n  isProcessing: boolean;\r\n  myRole;\r\n  initials = \"\";\r\n  @Input() appConfig = new AppConfig();\r\n\r\n\r\n  selfProfile : boolean = false;\r\n\r\n  profile = new Profile ;\r\n  roles;\r\n  approvalRoles;\r\n  employees;\r\n\r\n\r\n  loadProfile(userName: string){\r\n\r\n    let action = \"all\";\r\n\r\n    this.dataService.GetUserByID(userName).subscribe( (apiResponse: ApiResponse) => {\r\n\r\n        this.profile = apiResponse.data;\r\n\r\n        if (this.profile.userName.toLocaleLowerCase() == this.authService.currentUser.toLocaleLowerCase()){\r\n          this.selfProfile = true\r\n        }\r\n        this.loadRoles()\r\n        this.initials = `${this.profile.firstName?.toUpperCase().charAt(0)}${this.profile.lastName?.toUpperCase().charAt(0)}`\r\n      },\r\n      (error) => {\r\n        this.isProcessing = false;\r\n        this.messageService.toast(this.httpService.Error(error));\r\n      }\r\n    );\r\n  }\r\n\r\n  loadRoles(){\r\n\r\n    this.dataService.GetRole(\"all\", \"\").subscribe(\r\n      (apiResponse: ApiResponse) => {\r\n        this.roles = apiResponse;\r\n      },\r\n      (error) => {\r\n        this.isProcessing = false;\r\n        this.messageService.toast(this.httpService.Error(error));\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n  changePassword(){\r\n    this.dataService.tmpProfileuserName = this.profile.userName;\r\n    this.router.navigate([\"home/user/change-password\"]);\r\n  }\r\n\r\n  gotoUsers(){\r\n    this.router.navigate([\"home/admin/users\"]);\r\n  }\r\n\r\n  update(){\r\n\r\n  }\r\n\r\n  updateProfile(){\r\n    this.isProcessing = true;\r\n\r\n    // return\r\n    this.dataService.UpdateUser(this.profile).subscribe(\r\n      (apiResponse: ApiResponse) => {\r\n        this.isProcessing = false;\r\n\r\n        if (apiResponse.success) {\r\n          this.messageService.toast(\"Profile Updated\");\r\n        } else {\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        }\r\n      },\r\n      (error) => {\r\n        this.messageService.toast(\"Connection failed \");\r\n        this.isProcessing = false;\r\n      }\r\n    );\r\n   }\r\n\r\n}\r\n","\r\n<h4>Profile</h4>\r\n<hr>\r\n\r\n<div class=\"container tin-grid-auto\" style=\"font-size:14px;\">\r\n\r\n  <div class=\"tin-center centa\">\r\n    <div class=\"profileImage\">{{initials}}</div>\r\n    <mat-label id=\"lbluserName\" >{{profile?.userName}}</mat-label>\r\n  </div>\r\n\r\n  <div>\r\n\r\n    <spa-text id=\"txtFirstName\" display=\"First Name\" [(value)]=\"profile.firstName\" [readonly]=\"selfProfile\"></spa-text>\r\n    <spa-text id=\"txtLastName\" display=\"Last Name\" [(value)]=\"profile.lastName\" [readonly]=\"selfProfile\"></spa-text>\r\n    <spa-text id=\"txtAuth\" display=\"Authentication\" [(value)]=\"profile.authType\" [readonly]=\"true\"></spa-text>\r\n    <spa-text id=\"txtEmail\" display=\"Email\" [(value)]=\"profile.email\" [readonly]=\"selfProfile\"></spa-text>\r\n    <spa-text id=\"txtRole\" display=\"Role\" [(value)]=\"profile.role.roleName\" [readonly]=\"selfProfile\"></spa-text>\r\n    <!-- <spa-select id=\"cboRole\" display=\"Role\" [options]=\"roles\" optionDisplay=\"roleName\" optionValue=\"roleID\" [(value)]=\"profile.roleID\" [readonly]=\"selfProfile\"></spa-select> -->\r\n    <spa-label *ngIf=\"dataService.appConfig.multitenant\" display=\"Code\" [value]=\"profile.code\" ></spa-label>\r\n\r\n    <button id=\"btnUpdate\" class=\"w-100\"   mat-raised-button color=\"primary\" *ngIf=\"!selfProfile\" [disabled]=\"isProcessing\" (click)=\"updateProfile()\">Update Profile</button>\r\n  </div>\r\n\r\n\r\n  <div class=\"tin-center centa\">\r\n    <a mat-button id=\"lnkUserManager\" style=\"margin-left: 1em\" *ngIf=\"!selfProfile\" (click)=\"gotoUsers()\">User Manager</a>\r\n    <a mat-button id=\"lnkChangePassword\" style=\"margin-left: 1em\" *ngIf=\"(selfProfile || myRole[dataService.capUsers.name]) && profile.authType=='local'\" (click)=\"changePassword()\">Change Password</a>\r\n  </div>\r\n\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n","import { SpaMatModule } from \"./spa-mat.module\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { ChangePasswordComponent } from \"../pages/change-password/change-password.component\";\r\nimport { ProfileComponent } from \"../pages/profile/profile.component\";\r\nimport { TinSpaModule } from \"../tin-spa.module\";\r\n\r\n@NgModule({\r\n  declarations: [ChangePasswordComponent, ProfileComponent],\r\n\r\n\r\n\r\n  imports: [\r\n    ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: \"never\" }),\r\n    CommonModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    TinSpaModule\r\n  ],\r\n\r\n  exports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    TinSpaModule,\r\n    ChangePasswordComponent,\r\n    ProfileComponent,\r\n  ],\r\n})\r\nexport class SpaUserModule {}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { ApiResponse } from '../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-settings',\r\n    templateUrl: './settings.component.html',\r\n    styleUrls: ['./settings.component.css'],\r\n    standalone: false\r\n})\r\nexport class SettingsComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib, private messageService: MessageService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.loadSettings();\r\n  }\r\n\r\n  _filterText = \"\";\r\n  settings;\r\n  isProcessing = false;\r\n\r\n  applyFilter(filterValue: string) {\r\n    this.settings.filter = filterValue.trim().toLowerCase();\r\n  }\r\n\r\n  loadSettings(){\r\n    this.dataService.GetSetting(\"all\", \"\").subscribe((apiResponse : ApiResponse) => {\r\n        this.settings = apiResponse.data;\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n  updateSetting(setting) {\r\n\r\n    this.isProcessing = true;\r\n    this.dataService.UpdateSetting(setting, \"edit\").subscribe((apiResponse: ApiResponse) => {\r\n      this.isProcessing = false;\r\n\r\n      if (apiResponse.success) {\r\n        this.messageService.toast(`Setting ${setting.sName} Updated`);\r\n        this.loadSettings();\r\n\r\n      } else {\r\n        this.messageService.toast(\"Error: \" + apiResponse.message);\r\n      }\r\n\r\n    });\r\n\r\n  };\r\n\r\n  addSetting() {\r\n\r\n    this.messageService.toast(\"Feature not Available\");\r\n\r\n  }\r\n\r\n}\r\n","<h4>Settings</h4>\r\n<hr>\r\n\r\n<div class=\"container\">\r\n\r\n  <div class=\"header-row\">\r\n    <button mat-raised-button (click)=\"loadSettings()\">Refresh</button>\r\n  </div>\r\n\r\n  <div class=\"tin-row setting-row\" *ngFor=\"let setting of settings\">\r\n\r\n    <mat-form-field *ngIf=\"!setting.encrypted\" class=\"setting-input\">\r\n      <mat-label>{{setting.sName}}</mat-label>\r\n      <input matInput autocomplete=\"off\" [(ngModel)]=\"setting.sValue\">\r\n    </mat-form-field>\r\n\r\n    <spa-text-mask *ngIf=\"setting.encrypted\" class=\"setting-input\" [display]=\"setting.sName\" [(value)]=\"setting.sValue\"></spa-text-mask>\r\n\r\n    <button mat-mini-fab color=\"primary\" (click)=\"updateSetting(setting)\"><mat-icon>done_all</mat-icon></button>\r\n\r\n    <span class=\"setting-meta\">Last Updated by {{setting.updatedBy}} on {{setting.updatedDate | date: 'dd MMM yy HH:mm'}}</span>\r\n\r\n  </div>\r\n\r\n</div>\r\n\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { DataServiceLib } from \"../../services/datalib.service\";\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { PageConfig } from '../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-logs',\r\n    templateUrl: './logs.component.html',\r\n    styleUrls: ['./logs.component.css'],\r\n    standalone: false\r\n})\r\nexport class LogsComponent implements OnInit {\r\n  constructor(private authService: AuthService, private dataService: DataServiceLib,) { }\r\n\r\n\r\n  logsPageConfig: PageConfig;\r\n\r\n  ngOnInit() {\r\n    this.authService.isAuthorised(this.dataService.capLogs.name);\r\n\r\n    this.initializeConfig();\r\n  }\r\n\r\n\r\n  private initializeConfig(): void {\r\n    this.logsPageConfig = {\r\n      title : 'Logs',\r\n\r\n\r\n      tableConfig: {\r\n        showFilter: true,\r\n        minColumns: ['dateLogged', 'userFullName', 'details'],\r\n        flatButtons : this.dataService.appConfig.multitenant,\r\n        logResponse : true,\r\n        columns: [\r\n          { name: 'dateLogged', type : 'datetimesec', alias: 'Date' },\r\n          { name: 'userName', alias: 'User' },\r\n          { name: 'userFullName', alias: 'Name' },\r\n          { name: 'source', },\r\n          { name: 'details', maxLength : 150 },\r\n          { name: 'tenantName', alias: 'Tenant', hiddenCondition: x =>  !this.dataService.appConfig.multitenant },\r\n\r\n        ],\r\n        loadAction: { url: 'logs/all/x' },\r\n        buttons :[\r\n          // { name: 'view', dialog : true, tip: 'View Log' },\r\n        ]\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n","\r\n <spa-page [config]=\"logsPageConfig\"></spa-page>\r\n","import { Component, OnInit, Inject, ViewChild, inject } from \"@angular/core\";\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\nimport { DataServiceLib } from \"../../services/datalib.service\";\r\nimport { Router } from \"@angular/router\";\r\nimport { MessageService } from \"../../services/message.service\";\r\nimport { AuthService } from \"../../services/auth.service\";\r\nimport { TableConfig, ApiResponse, FormConfig, Button, DetailsDialogConfig, PageConfig } from '../../classes/Classes';\r\nimport { HttpService } from \"../../services/http.service\";\r\nimport { User } from \"../../classes/LibClasses\";\r\n\r\n@Component({\r\n    selector: \"spa-users\",\r\n    templateUrl: \"./users.component.html\",\r\n    styleUrls: [\"./users.component.css\"],\r\n    standalone: false\r\n})\r\n\r\nexport class UsersComponent implements OnInit {\r\n  private httpService = inject(HttpService);\r\n  private router = inject(Router);\r\n  private authService = inject(AuthService);\r\n  private dataService = inject(DataServiceLib);\r\n  private dialog = inject(MatDialog);\r\n  private messageService = inject(MessageService);\r\n\r\n  userBaseFormConfig: FormConfig = {\r\n    fields: [\r\n      { name: 'userName', type: 'text', alias: 'Username', required: true, span : true, readonly : true },\r\n      { name: 'authType', type: 'select', alias: 'Authentication Type', readonly: true, span: true, required: true, defaultFirstValue: true },\r\n      {\r\n        name: 'firstName', type: 'text', required: true,\r\n        readonlyCondition: x => x.authType !== 'local',\r\n      },\r\n      {\r\n        name: 'lastName', type: 'text', required: true,\r\n        readonlyCondition: x => x.authType !== 'local',\r\n      },\r\n      {\r\n        name: 'password', type: 'text-mask', required: true, // Changed: password -> text-mask\r\n        hiddenCondition: x => x.authType !== 'local', span: true,\r\n      },\r\n      {\r\n        name: 'confirmPassword', type: 'text-mask', required: true, // Changed: password -> text-mask\r\n        hiddenCondition: x => x.authType !== 'local', span: true\r\n      },\r\n      { name: 'email', type: 'text', required: false, span: true },\r\n      { name: 'roleID', type: 'select', alias: 'Role', required: true,  span: true, defaultFirstValue: true },\r\n    ],\r\n  };\r\n\r\n  createDialog: DetailsDialogConfig = {\r\n    formConfig: {\r\n      title: 'User',\r\n      fields: [\r\n        { name: 'userName', type: 'text', alias: 'Username', required: true, span: true },\r\n        { \r\n          name: 'authType', type: 'select', alias: 'Authentication Type', span: true, required: true, defaultFirstValue: true,\r\n          onSelectChange: (value, data) => {\r\n            if (value === 'AD' && data.userName?.trim()) {\r\n              this.dataService.CallApi({ url: `user/ad/${data.userName}` }).subscribe((response: ApiResponse) => {\r\n                if (response.success && response.data) {\r\n                  data.firstName = response.data.firstName || '';\r\n                  data.lastName = response.data.surname || '';\r\n                  data.email = response.data.emailAddress || '';\r\n                  this.messageService.toast('AD user found');\r\n                } else {\r\n                  this.messageService.toast(response.message || 'AD user not found');\r\n                }\r\n              });\r\n            }\r\n          }\r\n        },\r\n        { name: 'firstName', type: 'text', required: true, readonlyCondition: x => x.authType !== 'local' },\r\n        { name: 'lastName', type: 'text', required: true, readonlyCondition: x => x.authType !== 'local' },\r\n        { name: 'password', type: 'text-mask', required: true, hiddenCondition: x => x.authType !== 'local', span: true }, // Changed: password -> text-mask\r\n        { name: 'confirmPassword', type: 'text-mask', required: true, hiddenCondition: x => x.authType !== 'local', span: true }, // Changed: password -> text-mask\r\n        { name: 'email', type: 'text', required: false, span: true },\r\n        { name: 'roleID', type: 'select', alias: 'Role', required: true, span: true, defaultFirstValue: true },\r\n      ]\r\n    },\r\n    mode: 'create',\r\n    buttons: [\r\n      { name: 'create', action: { method: 'post', url: 'User/register', successMessage: \"User Created\" }}\r\n    ]\r\n  };\r\n\r\n  editDialog: DetailsDialogConfig = {\r\n    formConfig: {\r\n      ...this.userBaseFormConfig,\r\n      title : 'User',\r\n      fields : this.userBaseFormConfig.fields.filter(x => x.name !== 'password' && x.name !== 'confirmPassword')\r\n    },\r\n    mode: 'view',\r\n    buttons: [\r\n      { name: 'edit', action: { method: 'post', url: 'User/edit', successMessage: \"User Updated\" } }\r\n    ]\r\n  };\r\n\r\n  passwordDialog: DetailsDialogConfig = {\r\n    formConfig: {\r\n      ...this.userBaseFormConfig,\r\n      title : 'Change Password',\r\n      fixedTitle: true,\r\n      alertConfig: { messages: [\r\n        { type: 'info', message: '*Please consider these requirements for your new password.' },  // Changed: content to message\r\n        { type: 'info', message: 'At least 8 characters.' },  // Changed: content to message\r\n        { type: 'info', message: 'At least 1 uppercase letter' },  // Changed: content to message\r\n        { type: 'info', message: 'At least 2 lowercase letters (a-z)' },  // Changed: content to message\r\n        { type: 'info', message: 'At least 1 digit (0-9)' },  // Changed: content to message\r\n        { type: 'info', message: ' At least 1 special character (~`! …)' },  // Changed: content to message\r\n      ]},\r\n      fields: [\r\n        { name: 'newPassword', type: 'text-mask', required: true }, // Changed: password -> text-mask\r\n        { name: 'confirmPassword', type: 'text-mask',  required: true } // Changed: password -> text-mask\r\n      ]\r\n    },\r\n    mode: 'edit',\r\n    buttons: [\r\n      { name: 'edit', action: { method: 'post', url: 'User/changepassword-admin', successMessage: 'Password Changed' }    }\r\n    ]\r\n  };\r\n\r\n  usersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minButtons: ['fullName','roleName'],\r\n    greyOut : (value) => value.disabled == 1,\r\n    collapseButtons: true,\r\n    minColumns: ['userName', 'fullName', 'roleName', 'locked', 'dateCreated'],\r\n    flatButtons: this.dataService.appConfig.multitenant,\r\n    columns: [\r\n      { name: 'userName', type: 'text'},\r\n      { name: 'fullName', type: 'text' },\r\n      { name: 'roleName', type: 'text' },\r\n      { name: 'locked', type: 'checkbox' },\r\n      { name: 'createdDate', type: 'date' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'New User', dialog: true, detailsConfig : this.createDialog  },\r\n      { name: 'view', dialog: true, icon: { name: 'account_circle' }, detailsConfig: this.editDialog },\r\n      {\r\n        name: 'changePassword', display: 'Change Password', tip : 'Change Password', icon: { name: 'key' }, dialog: true, detailsConfig: this.passwordDialog,\r\n        visible: x => x.authType === 'local'\r\n      },\r\n      { name: 'lock', action: { method: 'post', url: 'User/lock', successMessage: \"User locked\" }, color: 'red', tip: 'lock', icon: { name: 'lock' },\r\n        visible: (value) => value.locked == 0\r\n      },\r\n      { name: 'unlock', action: { method: 'post', url: 'User/unlock', successMessage: \"User Unlocked\" }, color: 'green', tip: 'unlock', icon: { name: 'lock_open' },\r\n        visible: (value) => value.locked == 1\r\n      },\r\n      { name: 'delete', action: { method: 'post', url: 'User/delete', successMessage: \"User Deleted\" }, color: 'red' },\r\n    ],\r\n    loadAction: { url: 'User/all/x' },\r\n  };\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Users',\r\n    tableConfig: this.usersTableConfig\r\n  };\r\n\r\n  ngOnInit() {\r\n    this.authService.isAuthorised(this.dataService.capUsers.name);\r\n    this.loadMeta();\r\n  }\r\n\r\n  inputChanged(x) {\r\n    console.log(x);\r\n  }\r\n\r\n  loadMeta(){\r\n    this.dataService.CallApi({ url: 'role/meta/x' }).subscribe((apiResponse: ApiResponse) => {\r\n      console.log(apiResponse.data);\r\n      this.userBaseFormConfig.fields.find(x => x.name == 'roleID').options = apiResponse.data.roles;\r\n      this.userBaseFormConfig.fields.find(x => x.name == 'authType').options = apiResponse.data.authTypes;\r\n\r\n      this.createDialog.formConfig.fields.find(x => x.name == 'roleID').options = apiResponse.data.roles;\r\n      this.createDialog.formConfig.fields.find(x => x.name == 'authType').options = apiResponse.data.authTypes.filter(x => x.value == 'local' || x.value == 'AD');\r\n    })\r\n  }\r\n\r\n}\r\n","\r\n<spa-page [config]=\"pageConfig\" (inputChange)=\"inputChanged($event)\"></spa-page>\r\n\r\n","import { ApiResponse, AppConfig, Button, CapItem, DetailsDialogConfig, RoleAccess } from './../../classes/Classes';\r\nimport { Component, OnInit, Input } from \"@angular/core\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { DataServiceLib } from \"../../services/datalib.service\";\r\nimport { Router } from \"@angular/router\";\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { DetailsDialog } from '../../components/table/detailsDialog.component';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { Role } from '../../classes/LibClasses';\r\n\r\n\r\n@Component({\r\n    selector: \"spa-roles\",\r\n    templateUrl: \"./roles.component.html\",\r\n    styleUrls: [\"./roles.component.css\"],\r\n    standalone: false\r\n})\r\nexport class RolesComponent implements OnInit {\r\n\r\n  constructor(private httpService: HttpService, private router: Router, private authService: AuthService, private dataService: DataServiceLib, private dialogService : DialogService, public dialog: MatDialog, private messageService: MessageService) { }\r\n\r\n  ngOnInit() {\r\n    this.authService.isAuthorised(this.dataService.capRoles.name);\r\n    this.loadRoles();\r\n    this.dataService.appConfigObserv.subscribe(x => this.appConfig = x);\r\n  }\r\n\r\n  isProcessing = false;\r\n  roles: Role[];\r\n  RoleAccess = RoleAccess;\r\n\r\n  appConfig = new AppConfig();\r\n\r\n  roleAccessOptions = [\r\n    { value: RoleAccess.None, name: 'None' },\r\n    { value: RoleAccess.View, name: 'View' },\r\n    { value: RoleAccess.Edit, name: 'Edit' },\r\n    { value: RoleAccess.Create, name: 'Create' },\r\n    { value: RoleAccess.Full, name: 'Full' }\r\n  ];\r\n\r\n\r\n\r\n  loadRoles() {\r\n    this.dataService.GetRole(\"all\", \"\").subscribe((apiResponse : ApiResponse) => {\r\n      this.roles = apiResponse.data;\r\n    });\r\n  }\r\n\r\n  refresh() {\r\n    this.loadRoles();\r\n  }\r\n\r\n  onCapItemChange(capItem: CapItem, checked: boolean, role: any) {\r\n\r\n    return; //disabled to allow sub component access without granting whole menu access\r\n\r\n    if (!checked && capItem.capSubItems) {\r\n      // When parent is unchecked, set all subitems to Restricted\r\n      capItem.capSubItems.forEach(subItem => {\r\n        role[subItem.name] = RoleAccess.None;\r\n      });\r\n    }\r\n  }\r\n\r\n  hasSubItemsAccess(capItem: CapItem, role: any): boolean {\r\n    if (!capItem.capSubItems) return false;\r\n\r\n    // Check if any sub-item has access\r\n    return capItem.capSubItems.some(subItem => {\r\n      // Check direct sub-items\r\n      if (role[subItem.name] > 0) return true;\r\n\r\n      // Check sub-sub-items recursively\r\n      if (subItem.capSubItems) {\r\n        return subItem.capSubItems.some(subSubItem => role[subSubItem.name] > 0);\r\n      }\r\n      return false;\r\n    });\r\n  }\r\n\r\n\r\n  addRole() {\r\n    // Create empty role object with just the roleName field\r\n    const newRole = { roleName: '' };\r\n\r\n    // Open add role dialog using the same approach as rename\r\n    const dialogRef = this.dialogService.openConfiguredDetailsDialog(\r\n      this.addRoleButton,\r\n      newRole,\r\n      DetailsDialog\r\n    ).subscribe(result => {\r\n      if (result.message === 'success') {\r\n        this.loadRoles();\r\n      }\r\n    });\r\n  }\r\n\r\n  updateRole(role: Role) {\r\n\r\n    this.messageService.confirm(`UPDATE ${role.roleName} ?`).subscribe((result) => {\r\n\r\n      if (result == \"yes\") {\r\n\r\n        this.dataService.PostRole(role, \"edit\").subscribe((apiResponse: ApiResponse) => {\r\n\r\n          if (apiResponse.success) {\r\n            this.messageService.toast(\"Role Updated\");\r\n            this.loadRoles();\r\n          } else {\r\n            this.messageService.toast(\"Error: \" + apiResponse);\r\n          }\r\n        });\r\n\r\n      }\r\n\r\n    })\r\n\r\n\r\n  };\r\n\r\n  deleteRole(role: Role) {\r\n\r\n    this.messageService.confirm(`DELETE ${role.roleName} ?`).subscribe((result) => {\r\n\r\n      if (result == \"yes\") {\r\n\r\n        this.dataService.PostRole(role, \"delete\").subscribe((apiResponse: ApiResponse) => {\r\n          if (apiResponse.success) {\r\n            this.messageService.toast(\"Role Deleted\");\r\n            this.loadRoles();\r\n          } else {\r\n            this.messageService.toast(\"Error: \" + apiResponse);\r\n          }\r\n        });\r\n\r\n      }\r\n\r\n    })\r\n\r\n  }\r\n\r\n  renameDialogConfig: DetailsDialogConfig = {\r\n    formConfig: {\r\n      title: 'Rename Role',\r\n      fixedTitle: true,\r\n      fields: [\r\n        { name: 'roleName', type: 'text', required: true, span: true, alias: 'Role Name' }\r\n      ]\r\n    },\r\n    mode: 'edit',\r\n    buttons: [\r\n      { name: 'edit', dialog: true, action: { url: 'role?action=edit', method: 'post', successMessage: 'Role renamed successfully' } }\r\n    ]\r\n  };\r\n\r\n  renameButton : Button = {name : 'edit', dialog : true, detailsConfig : this.renameDialogConfig};\r\n\r\n  // Add role dialog configuration\r\n  addRoleDialogConfig: DetailsDialogConfig = {\r\n    formConfig: {\r\n      title: 'Add New Role',\r\n      fixedTitle: true,\r\n      fields: [\r\n        { name: 'roleName', type: 'text', required: true, span: true, alias: 'Role Name' }\r\n      ]\r\n    },\r\n    mode: 'create',\r\n    buttons: [\r\n      { name: 'create', dialog: true, action: { url: 'role?action=create', method: 'post', successMessage: 'Role created successfully' } }\r\n    ]\r\n  };\r\n\r\n  addRoleButton : Button = {name : 'create', dialog : true, detailsConfig : this.addRoleDialogConfig};\r\n\r\n  renameRole(role: Role) {\r\n    // Create role copy to avoid modifying the original during editing\r\n    const roleData = { ...role };\r\n\r\n    // Open rename dialog\r\n    const dialogRef = this.dialogService.openConfiguredDetailsDialog(\r\n      this.renameButton,\r\n      roleData,\r\n      DetailsDialog\r\n    ).subscribe(result => {\r\n      if (result.message === 'success') {\r\n        this.loadRoles();\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n}\r\n\r\n\r\n","<h4> Roles </h4>\r\n<hr />\r\n\r\n<div class=\"container-fluid mb-5\">\r\n\r\n  <div class=\"d-flex justify-content-between mb-2\">\r\n\r\n    <div >\r\n      <button id=\"btnNewRole\" mat-raised-button color=\"primary\" (click)=\"addRole()\">New Role</button>\r\n    </div>\r\n\r\n    <div class=\"d-flex justify-content-end\">\r\n      <button id=\"btnRefresh\" mat-icon-button color=\"primary\" (click)=\"refresh()\"  matTooltip=\"refresh data\" matTooltipPosition=\"right\"><mat-icon >refresh</mat-icon></button>\r\n    </div>\r\n\r\n  </div>\r\n\r\n\r\n  <div class=\"row mt-2 mb-1\"  *ngFor=\"let role of roles\">\r\n\r\n    <mat-card class=\"mat-elevation-z8\" style=\"width:100%\">\r\n\r\n      <div class=\"d-flex justify-content-between align-items-center\">\r\n\r\n        <label style=\"font-size: 16px;\">{{role.roleName}}</label>\r\n\r\n        <button mat-icon-button color=\"primary\" matTooltip=\"Rename Role\" (click)=\"renameRole(role)\">\r\n          <mat-icon>edit</mat-icon>\r\n        </button>\r\n      </div>\r\n\r\n      <hr style=\"margin-top: 0px;\">\r\n\r\n      <div class=\"tin-row\" style=\" font-size:12px;\">\r\n\r\n\r\n        <div class=\"tin-row\"  *ngFor=\"let capItem of appConfig.capItems\">\r\n\r\n          <!-- Main item-->\r\n          <mat-checkbox  *ngIf=\"capItem.isBool || capItem.capSubItems\"\r\n            color=\"primary\" style=\"min-width: 100px;\" [(ngModel)]=\"role[capItem.name]\" (ngModelChange)=\"onCapItemChange(capItem, $event, role)\">\r\n            {{capItem.display}}\r\n            <span *ngIf=\"!role[capItem.name] && hasSubItemsAccess(capItem, role)\" class=\"asterisk\" style=\"color: red;\">*</span>\r\n          </mat-checkbox>\r\n\r\n          <spa-select\r\n           *ngIf=\"!capItem.isBool && !capItem.capSubItems\"\r\n            [options]=\"roleAccessOptions\"\r\n            optionDisplay=\"name\"\r\n            optionValue=\"value\"\r\n            [display]=\"capItem.display\"\r\n            [(value)]=\"role[capItem.name]\"\r\n            width=\"150px\" \r\n            style=\"font-size: 12px;\">\r\n          </spa-select>\r\n\r\n\r\n          <ng-container *ngIf=\"capItem.capSubItems && role[capItem.name]\">\r\n\r\n            <div class=\"tin-row\" *ngFor=\"let capSubItem of capItem.capSubItems\">\r\n\r\n\r\n              <!-- Sub Item -->\r\n              <mat-checkbox *ngIf=\"capSubItem.isBool\"\r\n                color=\"primary\" style=\"min-width: 100px;\" [(ngModel)]=\"role[capSubItem.name]\">\r\n                {{capSubItem.display}}\r\n              </mat-checkbox>\r\n\r\n              <spa-select\r\n                *ngIf=\"!capSubItem.isBool\"\r\n                [options]=\"roleAccessOptions\"\r\n                optionDisplay=\"name\"\r\n                optionValue=\"value\"\r\n                [display]=\"capSubItem.display\"\r\n                [(value)]=\"role[capSubItem.name]\"\r\n                width=\"150px\"\r\n                style=\"font-size: 12px;\">\r\n              </spa-select>\r\n\r\n              <ng-container *ngIf=\"capSubItem.capSubItems\">\r\n\r\n                <div class=\"tin-row\" *ngFor=\"let capSubSubItem of capSubItem.capSubItems\">\r\n\r\n                  <!-- Sub Sub Items -->\r\n                  <mat-checkbox *ngIf=\"capSubSubItem.isBool\"\r\n                    color=\"primary\" style=\"min-width: 100px;\" [(ngModel)]=\"role[capSubSubItem.name]\">\r\n                    {{capSubSubItem.display}}\r\n                  </mat-checkbox>\r\n\r\n                  <spa-select\r\n                    *ngIf=\"!capSubSubItem.isBool\"\r\n                    [options]=\"roleAccessOptions\"\r\n                    optionDisplay=\"name\"\r\n                    optionValue=\"value\"\r\n                    [display]=\"capSubSubItem.display\"\r\n                    [(value)]=\"role[capSubSubItem.name]\"\r\n                    width=\"150px\" \r\n                    style=\"font-size: 12px;\">\r\n                  </spa-select>\r\n\r\n                </div>\r\n\r\n              </ng-container>\r\n\r\n\r\n\r\n            </div>\r\n\r\n          </ng-container>\r\n\r\n        </div>\r\n\r\n      </div>\r\n\r\n\r\n      <mat-card-actions>\r\n\r\n        <button  mat-raised-button color=\"primary\" (click)=\"updateRole(role)\" style=\"margin-right:10px;\">\r\n           <mat-icon>done_all</mat-icon>\r\n           Update\r\n        </button>\r\n\r\n        <button mat-raised-button  (click)=\"deleteRole(role)\" style=\"margin-right:10px\">\r\n          <mat-icon>delete</mat-icon>\r\n          Delete\r\n        </button>\r\n\r\n      </mat-card-actions>\r\n\r\n    </mat-card>\r\n\r\n  </div>\r\n\r\n  <hr style=\"margin-top: 50px;\" />\r\n\r\n\r\n</div>\r\n\r\n","import { DataServiceLib } from '../../services/datalib.service';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { AppConfig, ApiResponse } from '../../classes/Classes';\r\nimport { Router } from '@angular/router';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { Register } from '../../classes/LibClasses';\r\n\r\n@Component({\r\n    selector: 'spa-create-account',\r\n    templateUrl: './create-account.component.html',\r\n    styleUrls: ['./create-account.component.css'],\r\n    standalone: false\r\n})\r\nexport class CreateAccountComponent implements OnInit {\r\n\r\n  constructor(private httpService: HttpService, private messageService: MessageService, private dataService: DataServiceLib, private authService: AuthService, public router: Router) { }\r\n\r\n  ngOnInit() {\r\n    this.appConfig = this.dataService.appConfig;\r\n    this.loadRoles();\r\n  }\r\n\r\n\r\n\r\n  @Input() appConfig = new AppConfig();\r\n\r\n  isProcessing: boolean = false;\r\n  register = new Register();\r\n  confirmPassword: string;\r\n  openProfile: boolean = true;\r\n\r\n  authTypes = [\r\n    { name: \"Local Authentication\", value: \"local\" },\r\n    { name: \"AD Authentication\", value: \"AD\" }\r\n  ]\r\n\r\n  roles;\r\n\r\n  check(){\r\n\r\n    if ( this.register.authType != \"AD\") {\r\n\r\n      return;\r\n    }\r\n\r\n    if (this.register.userName == \"\"){\r\n      this.messageService.toast(\"Please enter UserName\")\r\n      return;\r\n    }\r\n\r\n    this.dataService.CallApi({url: 'User/ad/' + this.register.userName}, '').subscribe((apiResponse : ApiResponse) => {\r\n\r\n      if (apiResponse.success){\r\n        this.register.firstName = apiResponse.data.firstName;\r\n        this.register.lastName = apiResponse.data.surname;\r\n        this.register.email = apiResponse.data.emailAddress;\r\n      }\r\n      else{\r\n        this.messageService.toast(apiResponse.message)\r\n      }\r\n\r\n    })\r\n  }\r\n\r\n  loadRoles() {\r\n\r\n    this.dataService.GetRole(\"all\", \"\").subscribe(\r\n      (apiResponse: ApiResponse) => {\r\n        this.roles = apiResponse;\r\n      },\r\n      (error) => {\r\n        this.isProcessing = false;\r\n        this.messageService.toast(this.httpService.Error(error));\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n  create() {\r\n\r\n    if (this.register.authType == \"\") {\r\n      this.messageService.toast(\"Choose Authentication Type\");\r\n      return;\r\n    }\r\n\r\n    if (this.register.firstName == \"\") {\r\n      this.messageService.toast(\"Enter First Name\");\r\n      return;\r\n    }\r\n\r\n    if (this.register.lastName == \"\") {\r\n      this.messageService.toast(\"Enter Last Name\");\r\n      return;\r\n    }\r\n\r\n\r\n    this.isProcessing = true;\r\n    this.dataService.RegisterAccount(this.register).subscribe((apiResponse: ApiResponse) => {\r\n        this.isProcessing = false;\r\n\r\n        if (apiResponse.success) {\r\n          this.messageService.toast(\"Account Created\");\r\n\r\n          if (this.openProfile) {\r\n            this.viewProfile(this.register.userName);\r\n          } else {\r\n            // this.user = new User();\r\n            this.register = new Register();\r\n            this.confirmPassword = \"\";\r\n          }\r\n\r\n\r\n        } else {\r\n          this.messageService.toast(\"Error: \" + apiResponse.message);\r\n        }\r\n      },\r\n      (error) => {\r\n        this.isProcessing = false;\r\n        this.messageService.toast(this.httpService.Error(error));\r\n      }\r\n    );\r\n  }\r\n\r\n  viewProfile(userName: string) {\r\n\r\n    this.dataService.tmpProfileuserName = userName;\r\n    this.router.navigate([\"home/user/profile\"]);\r\n\r\n  }\r\n\r\n}\r\n","<h4>Create User</h4>\r\n\r\n<hr/>\r\n\r\n<div class=\"container tin-grid\" style=\"font-size:14px; max-width: 70%;\">\r\n\r\n  <spa-text id=\"txtUserName\" display=\"Username\" [(value)]=\"register.userName\"></spa-text>\r\n\r\n  &nbsp;\r\n\r\n  <spa-select id=\"cboAuth\" display=\"Authentication Type\" [options]=\"authTypes\" optionDisplay=\"name\" optionValue=\"value\" [(value)]=\"register.authType\" (valueChange)=\"check()\" ></spa-select>\r\n\r\n  &nbsp;\r\n\r\n  <spa-text id=\"txtFirstName\" display=\"FirstName\" [(value)]=\"register.firstName\" [readonly]=\"register.authType =='AD'\"></spa-text>\r\n\r\n  <spa-text id=\"txtLastName\" display=\"LastName\" [(value)]=\"register.lastName\" [readonly]=\"register.authType =='AD'\"></spa-text>\r\n\r\n\r\n  <spa-text-mask *ngIf=\"register.authType == 'local'\" id=\"txtPassword\" display=\"Password\" [(value)]=\"register.password\" ></spa-text-mask>\r\n\r\n  <spa-text-mask *ngIf=\"register.authType == 'local'\" id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"confirmPassword\" ></spa-text-mask>\r\n\r\n  <spa-text id=\"txtEmail\" display=\"Email\" [(value)]=\"register.email\"></spa-text>\r\n\r\n  &nbsp;\r\n\r\n  <spa-select id=\"cboRole\" display=\"Role\" [options]=\"roles\" optionDisplay=\"roleName\" optionValue=\"roleID\" [(value)]=\"register.roleID\"></spa-select>\r\n\r\n  &nbsp;\r\n\r\n  <spa-check display=\"Open profile after creation\" [(value)]=\"openProfile\"></spa-check>\r\n\r\n  <div class=\"span-col-center\">\r\n    <button id=\"btnCreate\" [disabled]=\"register.authType ==''\" mat-raised-button color=\"primary\" (click)=\"create()\" cdkFocusInitial>Create</button>\r\n  </div>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../classes/Classes';\r\nimport { TinSpaModule } from '../../tin-spa.module';\r\nimport { GeneralService } from '../../services/general.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-categories',\r\n    standalone: true,\r\n    imports: [TinSpaModule],\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class CategoriesComponent {\r\n  private generalService = inject(GeneralService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Categories',\r\n    tableConfig: this.generalService.categoriesTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../classes/Classes';\r\nimport { TinSpaModule } from '../../tin-spa.module';\r\nimport { GeneralService } from '../../services/general.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-subcategories',\r\n    standalone: true,\r\n    imports: [TinSpaModule],\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class SubCategoriesComponent {\r\n  private generalService = inject(GeneralService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Sub Categories',\r\n    tableConfig: this.generalService.subCategoriesTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../classes/Classes';\r\nimport { TinSpaModule } from '../../tin-spa.module';\r\nimport { GeneralService } from '../../services/general.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-brands',\r\n    standalone: true,\r\n    imports: [TinSpaModule],\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class BrandsComponent {\r\n  private generalService = inject(GeneralService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Brands',\r\n    tableConfig: this.generalService.brandsTableConfig\r\n  };\r\n}\r\n","import { SettingsComponent } from '../pages/settings/settings.component';\r\nimport { LogsComponent } from '../pages/logs/logs.component';\r\nimport { SpaMatModule } from \"./spa-mat.module\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { UsersComponent } from \"../pages/users/users.component\";\r\nimport { RolesComponent } from \"../pages/roles/roles.component\";\r\nimport { CreateAccountComponent } from \"../pages/create-account/create-account.component\";\r\nimport { TinSpaModule } from '../tin-spa.module';\r\nimport { CategoriesComponent } from '../pages/categories/categories.component';\r\nimport { SubCategoriesComponent } from '../pages/subcategories/subcategories.component';\r\nimport { BrandsComponent } from '../pages/brands/brands.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    UsersComponent,\r\n    RolesComponent,\r\n    CreateAccountComponent,\r\n    LogsComponent,\r\n    SettingsComponent\r\n\r\n\r\n  ],\r\n\r\n\r\n\r\n  imports: [\r\n    ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: \"never\" }),\r\n    CommonModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    TinSpaModule,\r\n\r\n    CategoriesComponent,\r\n    SubCategoriesComponent,\r\n    BrandsComponent\r\n  ],\r\n\r\n  exports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    TinSpaModule,\r\n    UsersComponent,\r\n    RolesComponent,\r\n    CreateAccountComponent,\r\n    LogsComponent,\r\n    SettingsComponent,\r\n\r\n    CategoriesComponent,\r\n    SubCategoriesComponent,\r\n    BrandsComponent\r\n\r\n\r\n  ],\r\n})\r\nexport class SpaAdminModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { SignupComponent } from '../../pages/signup/signup.component';\r\nimport { RecoverAccountComponent } from '../../pages/recover-account/recover-account.component';\r\nimport { LoginComponent } from '../../pages/login/login.component';\r\n\r\nconst routes: Routes = [\r\n\r\n    { path: \"signup\", component: SignupComponent },\r\n    { path: 'recover-account', component: RecoverAccountComponent },\r\n    { path: 'login', component: LoginComponent },\r\n    { path: '', redirectTo: 'login', pathMatch: 'full' },\r\n    { path: '**', redirectTo: '' },\r\n\r\n];\r\n\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule]\r\n})\r\nexport class IndexRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { IndexRoutingModule } from './index-routing.module';\r\nimport { SpaIndexModule } from '../spa-index.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    CommonModule,\r\n    IndexRoutingModule,\r\n    SpaIndexModule\r\n  ]\r\n})\r\nexport class IndexModule { }\r\n","import { Component, inject } from '@angular/core';\r\nimport { DataServiceLib } from \"../../services/datalib.service\";\r\nimport { PageConfig } from '../../classes/Classes';\r\nimport { TinSpaModule } from '../../tin-spa.module';\r\n\r\n@Component({\r\n    selector: 'spa-gpt-caches',\r\n    standalone: true,\r\n    imports: [TinSpaModule],\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class GptCachesComponent {\r\n  private dataService = inject(DataServiceLib);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'GPT Cache',\r\n    tableConfig: this.dataService.gptCachesTableConfig\r\n  };\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ApiResponse } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n// Tenant-level preferences component for customizing application behavior\r\n@Component({\r\n  selector: 'spa-preferences',\r\n  templateUrl: './preferences.component.html',\r\n  styleUrls: ['./preferences.component.css'],\r\n  standalone: false\r\n})\r\nexport class PreferencesComponent implements OnInit {\r\n  constructor(public dataServiceLib: DataServiceLib, private messageService: MessageService) { }\r\n\r\n  preference: any = {};\r\n\r\n  ngOnInit(): void {\r\n    this.loadPreferences();\r\n  }\r\n\r\n  loadPreferences(): void {\r\n    this.dataServiceLib.CallApi({ url: 'preferences/get' }, \"\").subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.preference = apiResponse.data;\r\n      }\r\n    });\r\n  }\r\n\r\n  onSubmit(): void {\r\n    this.dataServiceLib.CallApi({ url: 'preferences/update', method: 'post' }, this.preference).subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.messageService.toast(\"Preferences updated successfully\");\r\n        this.loadPreferences();\r\n      } else {\r\n        this.messageService.toast(\"Error updating preferences\");\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n\r\n  monthOptions: any[] = [\r\n    { name: \"January\", value: 1 },\r\n    { name: \"February\", value: 2 },\r\n    { name: \"March\", value: 3 },\r\n    { name: \"April\", value: 4 },\r\n    { name: \"May\", value: 5 },\r\n    { name: \"June\", value: 6 },\r\n    { name: \"July\", value: 7 },\r\n    { name: \"August\", value: 8 },\r\n    { name: \"September\", value: 9 },\r\n    { name: \"October\", value: 10 },\r\n    { name: \"November\", value: 11 },\r\n    { name: \"December\", value: 12 }\r\n  ];\r\n\r\n  dayOptions: any[] = Array.from({ length: 28 }, (_, i) => ({ name: `${i + 1}`, value: i + 1 }));\r\n}\r\n","<h4>Preferences</h4>\r\n<hr>\r\n\r\n<mat-card>\r\n  <mat-card-content>\r\n    <form (ngSubmit)=\"onSubmit()\">\r\n\r\n      <div class=\"tin-col mt-3\">\r\n\r\n        <div class=\"header-title\">General</div>\r\n        <hr class=\"header-line\">\r\n        <div class=\"ml-4 header\">\r\n          <spa-select display=\"Default Currency\" [(value)]=\"preference.baseCurrencyID\" optionDisplay=\"name\" optionValue=\"value\" [loadAction]=\"{url: 'currencies/list'}\"></spa-select>\r\n        </div>\r\n\r\n        <div class=\"header-title\">Accounting</div>\r\n        <hr class=\"header-line\">\r\n        <div class=\"ml-4 header\">\r\n          <spa-select display=\"First Month of Year\" [(value)]=\"preference.firstMonthOfYear\" optionDisplay=\"name\" optionValue=\"value\" [options]=\"monthOptions\"></spa-select>\r\n          <spa-select display=\"First Day of Month\" [(value)]=\"preference.firstDayOfMonth\" optionDisplay=\"name\" optionValue=\"value\" [options]=\"dayOptions\"></spa-select>\r\n        </div>\r\n\r\n      </div>\r\n\r\n      <mat-card-actions>\r\n        <button mat-raised-button color=\"primary\" type=\"submit\">Save Preferences</button>\r\n      </mat-card-actions>\r\n    </form>\r\n  </mat-card-content>\r\n</mat-card>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { GptCachesComponent } from '../../pages/gpt-caches/gpt-caches.component';\nimport { PreferencesComponent } from '../../pages/preferences/preferences.component';\n\n@NgModule({\n  declarations: [\n    PreferencesComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule,\n    GptCachesComponent // Changed: Standalone component must be imported\n  ]\n})\nexport class AdminModule { }\n","\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SpaUserModule } from '../spa-user.module';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    CommonModule,\r\n    SpaUserModule\r\n  ]\r\n})\r\nexport class UserModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { ChangePasswordComponent } from '../../pages/change-password/change-password.component';\r\nimport { ProfileComponent } from '../../pages/profile/profile.component';\r\n\r\n// Changed: Exported routes array for use by SpaHomeRoutingModule\r\nexport const USER_ROUTES: Routes = [\r\n  {path: \"change-password\", component: ChangePasswordComponent },\r\n  {path: \"profile\", component: ProfileComponent },\r\n];\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forChild(USER_ROUTES)],\r\n  exports: [RouterModule]\r\n})\r\nexport class UserRoutingModule { }\r\n","\nimport { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { UsersComponent } from '../../pages/users/users.component';\nimport { RolesComponent } from '../../pages/roles/roles.component';\nimport { CreateAccountComponent } from '../../pages/create-account/create-account.component';\nimport { LogsComponent } from '../../pages/logs/logs.component';\nimport { SettingsComponent } from '../../pages/settings/settings.component';\nimport { GptCachesComponent } from '../../pages/gpt-caches/gpt-caches.component';\nimport { PreferencesComponent } from '../../pages/preferences/preferences.component';\n\n// Changed: Exported routes array for use by SpaHomeRoutingModule\nexport const ADMIN_ROUTES: Routes = [\n  { path: \"users\", component: UsersComponent },\n  { path: \"roles\", component: RolesComponent },\n  { path: \"create-account\", component: CreateAccountComponent },\n  { path: \"logs\", component: LogsComponent },\n  { path: \"gpt-caches\", component: GptCachesComponent },\n  { path: \"settings\", component: SettingsComponent },\n  { path: \"preferences\", component: PreferencesComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(ADMIN_ROUTES)],\n  exports: [RouterModule]\n})\nexport class AdminRoutingModule { }\n","import { Component, OnInit } from '@angular/core';\r\nimport { TableConfig, TileConfig, ApiResponse } from '../../../classes/Classes';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { DataServiceLib } from '../../../services/datalib.service';\r\n\r\n@Component({\r\n  selector: 'spa-accounts',\r\n  template: `\r\n    <h4>Accounts</h4>\r\n    <hr>\r\n\r\n    <spa-tiles [config]=\"accountTileConfig\"></spa-tiles>\r\n\r\n    <spa-tabs [tableConfigs]=\"accountTabConfigs\"></spa-tabs>\r\n  `,\r\n  standalone: false\r\n})\r\nexport class AccountsComponent implements OnInit {\r\n\r\n  constructor(private dataServiceLib: DataServiceLib, public accountingService: AccountingService) {\r\n    this.accountTabConfigs = [\r\n      {\r\n        ...this.accountingService.accountsTableConfig,\r\n        tabTitle: 'Assets',\r\n        loadAction: { url: 'accounts/type/asset' },\r\n        countAction: { url: 'accounts/count/asset' }\r\n      },\r\n      {\r\n        ...this.accountingService.accountsTableConfig,\r\n        tabTitle: 'Liabilities',\r\n        loadAction: { url: 'accounts/type/liability' },\r\n        countAction: { url: 'accounts/count/liability' }\r\n      },\r\n      {\r\n        ...this.accountingService.accountsTableConfig,\r\n        tabTitle: 'Income',\r\n        loadAction: { url: 'accounts/type/income' },\r\n        countAction: { url: 'accounts/count/income' }\r\n      },\r\n      {\r\n        ...this.accountingService.accountsTableConfig,\r\n        tabTitle: 'Expenses',\r\n        loadAction: { url: 'accounts/type/expense' },\r\n        countAction: { url: 'accounts/count/expense' }\r\n      },\r\n      {\r\n        ...this.accountingService.accountsTableConfig,\r\n        tabTitle: 'Equity',\r\n        loadAction: { url: 'accounts/type/equity' },\r\n        countAction: { url: 'accounts/count/equity' }\r\n      },\r\n      // Removed: Aggregate tab - no longer used\r\n    ];\r\n  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  accountTabConfigs: TableConfig[];\r\n\r\n  // Changed: Tile config with Cash, Bank, Income MTD, and Expenses MTD\r\n  accountTileConfig: TileConfig = {\r\n    tiles: [\r\n      { name: 'cashBalance', alias: 'Cash', color: '#4CAF50', icon: 'payments', style: 'icon', info: 'Total balance of all cash accounts' },\r\n      { name: 'bankBalance', alias: 'Bank', color: '#2196F3', icon: 'account_balance', style: 'icon', info: 'Total balance of all bank accounts' },\r\n      { name: 'mtdIncome', alias: 'Income (MTD)', color: '#9C27B0', icon: 'trending_up', style: 'icon', info: 'Month-to-date income from revenue accounts' },\r\n      { name: 'mtdExpenses', alias: 'Expenses (MTD)', color: '#F44336', icon: 'trending_down', style: 'icon', info: 'Month-to-date expenses' },\r\n    ],\r\n    loadAction: { url: 'accounts/summary/tiles' },\r\n    loadInit: true\r\n  };\r\n}\r\n","// Accounting Aggregates component with monthly aggregated financial data\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { TableConfig, ApiResponse } from '../../../classes/Classes';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { DataServiceLib } from '../../../services/datalib.service';\r\n\r\n@Component({\r\n  selector: 'spa-aggregates',\r\n  template: `\r\n    <h4>Aggregates</h4>\r\n    <hr>\r\n\r\n    <spa-tabs [tableConfigs]=\"aggregateTabConfigs\"></spa-tabs>\r\n  `,\r\n  standalone: false\r\n})\r\nexport class AggregatesComponent implements OnInit {\r\n\r\n  constructor(private dataServiceLib: DataServiceLib, public accountingService: AccountingService) {\r\n    this.aggregateTabConfigs = [\r\n      {\r\n        ...this.accountingService.aggregatesTableConfig,\r\n        tabTitle: 'Monthly Summary',\r\n        loadAction: { url: 'accounts/aggregates/monthly' },\r\n      },\r\n      {\r\n        ...this.accountingService.cashFlowAggregatesTableConfig,\r\n        tabTitle: 'Cash Flow',\r\n        loadAction: { url: 'accounts/aggregates/cashflow' },\r\n      },\r\n      {\r\n        ...this.accountingService.cumulativeAggregatesTableConfig,\r\n        tabTitle: 'Cumulative Balances',\r\n        loadAction: { url: 'accounts/aggregates/cumulative' },\r\n      },\r\n      {\r\n        ...this.accountingService.balanceSheetAggregatesTableConfig,\r\n        tabTitle: 'Balance Sheet',\r\n        loadAction: { url: 'accounts/aggregates/balancesheet' },\r\n      }\r\n    ];\r\n  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  aggregateTabConfigs: TableConfig[];\r\n}\r\n","// Aging report component for accounts receivable tracking\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { ApiResponse, TableConfig, TileConfig } from '../../../classes/Classes';\r\nimport { DataServiceLib } from '../../../services/datalib.service';\r\n\r\n@Component({\r\n  selector: 'spa-aging',\r\n  template: `\r\n    <h4>Accounts Receivable Aging</h4>\r\n    <hr>\r\n    <div *ngIf=\"summaryData\" class=\"mt-3 mb-3\">\r\n      <spa-tiles [config]=\"tileConfig\" [data]=\"summaryData\"></spa-tiles>\r\n    </div>\r\n    \r\n    <spa-tabs [tableConfigs]=\"agingTableConfigs\"></spa-tabs>\r\n  `,\r\n  standalone: false\r\n})\r\nexport class AgingComponent implements OnInit {\r\n\r\n  public accountingService = inject(AccountingService);\r\n\r\n  ngOnInit(): void {\r\n    this.loadSummaryData();\r\n  }\r\n\r\n  summaryData: any;\r\n\r\n  loadSummaryData(): void {\r\n    this.dataServiceLib.CallApi({ url: 'invoices/aging-summary/x' }, '').subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.summaryData = apiResponse.data;\r\n      }\r\n    });\r\n  }\r\n  \r\n  agingTableConfigs: TableConfig[];\r\n  tileConfig = this.accountingService.agingTileConfig;\r\n\r\n  constructor(private dataServiceLib: DataServiceLib) {\r\n\r\n    // this.tileConfig = this.accountingService.agingTileConfig;\r\n    this.agingTableConfigs = [\r\n      {\r\n        ...this.accountingService.agingBaseTableConfig,\r\n        tabTitle: 'Current',\r\n        loadAction: { url: 'invoices/aging-current/x' },\r\n        countAction: { url: 'invoices/count/aging-current' }\r\n      },\r\n      {\r\n        ...this.accountingService.agingBaseTableConfig,\r\n        tabTitle: '1-30 Days',\r\n        loadAction: { url: 'invoices/aging-30/x' },\r\n        countAction: { url: 'invoices/count/aging-30' }\r\n      },\r\n      {\r\n        ...this.accountingService.agingBaseTableConfig,\r\n        tabTitle: '31-60 Days',\r\n        loadAction: { url: 'invoices/aging-60/x' },\r\n        countAction: { url: 'invoices/count/aging-60' }\r\n      },\r\n      {\r\n        ...this.accountingService.agingBaseTableConfig,\r\n        tabTitle: '61-90 Days',\r\n        loadAction: { url: 'invoices/aging-90/x' },\r\n        countAction: { url: 'invoices/count/aging-90' }\r\n      },\r\n      {\r\n        ...this.accountingService.agingBaseTableConfig,\r\n        tabTitle: '90+ Days',\r\n        loadAction: { url: 'invoices/aging-90plus/x' },\r\n        countAction: { url: 'invoices/count/aging-90plus' }\r\n      }\r\n    ];\r\n  }\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { FormConfig, TableConfig, DetailsDialogConfig, Button, StepConfig, PurchaseStatus, TileConfig } from '../classes/Classes'; // Changed: InventoryReceiptStatus → PurchaseStatus\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { InventoryService } from './inventory.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class PurchasingService {\r\n\r\n  private dataService = inject(DataServiceLib);\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  // Changed: Updated references from inventoryReceiptDetailsConfig to purchaseDetailsConfig\r\n  constructor() {\r\n    this.purchaseDetailsConfig.tableConfigs!.push(this.receiptsTableConfig); // Added: Receipts tab in purchase details\r\n    this.purchaseDetailsConfig.tableConfigs!.push(this.supplierPaymentsTableConfig);\r\n    this.purchaseDetailsConfig.buttons!.push(this.supplierRecordPaymentButton);\r\n  }\r\n\r\n  //--------------------------Purchase Orders-------------------------\r\n\r\n  private paymentTypeOptions = [\r\n    { value: 0, name: 'Cash' },\r\n    { value: 1, name: 'Bank' }\r\n  ];\r\n\r\n  purchaseOrderItemFormConfig: FormConfig = {\r\n    title: 'PO Item',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'productID', type: 'select', alias: 'Product', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.inventoryService.productDetailsConfig },\r\n      { name: 'orderedQuantity', type: 'number', alias: 'Quantity', required: true },\r\n      { name: 'estimatedUnitCost', type: 'money', alias: 'Est. Unit Cost', required: true },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total', readonly: true, hideOnCreate: true }\r\n    ],\r\n    loadAction: { url: 'purchaseorderitems/id' }\r\n  }\r\n\r\n  purchaseOrderItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'orderedQuantity', type: 'number', alias: 'Ordered' },\r\n      { name: 'receivedQuantity', type: 'number', alias: 'Received' },\r\n      { name: 'remainingQuantity', type: 'number', alias: 'Remaining' },\r\n      { name: 'estimatedUnitCost', type: 'money', alias: 'Est. Cost' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total' },\r\n      { name: 'isFullyReceived', type: 'checkbox', alias: 'Complete', icon: { name: 'check_circle', color: 'green' } }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'purchaseorderitems?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'purchaseorderitems?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'purchaseorderitems?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'purchaseorderitems/x/x' },\r\n    loadCriteria: 'po',\r\n    loadIDField: 'purchaseOrderID',\r\n    formConfig: this.purchaseOrderItemFormConfig\r\n  }\r\n\r\n  purchaseOrderFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryReceipts] },\r\n    title: 'Purchase Order',\r\n    fixedTitle: true,\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'poInfo', type: 'section', alias: 'Purchase Order Information' },\r\n      { name: 'poNumber', type: 'text', alias: 'PO Number', readonly: true, hideOnCreate: true, section: 'poInfo' },\r\n      { name: 'supplierID', type: 'select', required: true, alias: 'Supplier', section: 'poInfo', loadAction: { url: 'suppliers/list/x' }, detailsConfig: this.dataService.supplierDetailsConfig },\r\n      { name: 'orderDate', type: 'date', required: true, alias: 'Order Date', section: 'poInfo' },\r\n      { name: 'expectedDeliveryDate', type: 'date', alias: 'Expected Delivery', section: 'poInfo' },\r\n      { name: 'totals', type: 'section', alias: 'Totals', hideOnCreate: true, collapsed: true },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals' },\r\n      { name: 'totalReceivedAmount', type: 'money', alias: 'Received Amount', readonly: true, section: 'totals' },\r\n      { name: 'remainingAmount', type: 'money', alias: 'Remaining', readonly: true, section: 'totals' },\r\n      { name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo' }\r\n    ],\r\n    loadAction: { url: 'purchaseorders/id' },\r\n    heroField: 'purchaseOrderID'\r\n  }\r\n\r\n  receiveGoodsFormConfig: FormConfig = {\r\n    title: 'Receive Goods',\r\n    multiColumn: true,\r\n    fields: [\r\n      { name: 'purchaseOrderID', type: 'number', alias: 'PO ID', readonly: true, hidden: true },\r\n      { name: 'poNumber', type: 'text', alias: 'PO Number', readonly: true },\r\n      { name: 'supplierID', type: 'number', alias: 'Supplier ID', readonly: true, hidden: true },\r\n      { name: 'supplierName', type: 'text', alias: 'Supplier', readonly: true },\r\n      { name: 'purchaseDate', type: 'date', required: true, alias: 'Purchase Date' }, // Changed: receiptDate → purchaseDate\r\n      { name: 'paymentType', type: 'select', required: true, alias: 'Payment Type', options: this.paymentTypeOptions },\r\n      { name: 'supplierInvoiceNumber', type: 'text', alias: 'Supplier Invoice #' },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true }\r\n    ]\r\n  }\r\n\r\n  receiveGoodsDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.receiveGoodsFormConfig,\r\n    buttons: []\r\n  }\r\n\r\n  purchaseOrderEditButton: Button = { name: 'edit', dialog: true, action: { url: 'purchaseorders?action=edit', method: 'post' } }\r\n  purchaseOrderConfirmButton: Button = { name: 'confirm', display: 'Confirm PO', inDialog: true, icon: { name: 'check_circle', color: 'blue' }, action: { url: 'purchaseorders?action=confirm', method: 'post', successMessage: 'PO Confirmed' }, confirm: { message: 'Confirm this purchase order? Items will be locked.' }, visible: (po: any) => po.statusName === 'Draft' }\r\n  purchaseOrderCancelButton: Button = { name: 'cancel', display: 'Cancel PO', inDialog: true, icon: { name: 'cancel', color: 'red' }, action: { url: 'purchaseorders?action=cancel', method: 'post', successMessage: 'PO Cancelled' }, confirm: { message: 'Cancel this purchase order?' }, visible: (po: any) => po.statusName !== 'FullyReceived' && po.statusName !== 'PartiallyReceived' }\r\n\r\n  purchaseOrderReceiveButton: Button = {\r\n    name: 'receive',\r\n    display: 'Receive Goods',\r\n    inDialog: true,\r\n    icon: { name: 'inventory_2', color: 'green' },\r\n    dialog: true,\r\n    detailsConfig: this.receiveGoodsDetailsConfig,\r\n    action: { url: 'purchases?action=create', method: 'post' }, // Changed: inventoryreceipts → purchases\r\n    visible: (po: any) => po.statusName === 'Confirmed' || po.statusName === 'PartiallyReceived'\r\n  }\r\n\r\n  purchaseOrderDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.purchaseOrderFormConfig,\r\n    tableConfigs: [this.purchaseOrderItemsTableConfig],\r\n    heroField: 'purchaseOrderID',\r\n    buttons: [this.purchaseOrderEditButton, this.purchaseOrderConfirmButton, this.purchaseOrderReceiveButton, this.purchaseOrderCancelButton]\r\n  }\r\n\r\n  purchaseOrderViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.purchaseOrderDetailsConfig }\r\n\r\n  purchaseOrdersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['poNumber', 'supplierName', 'orderDate'],\r\n    columns: [\r\n      { name: 'poNumber', type: 'text', alias: 'PO #' },\r\n      { name: 'supplierName', type: 'text', alias: 'Supplier' },\r\n      { name: 'orderDate', type: 'date', alias: 'Order Date' },\r\n      { name: 'expectedDeliveryDate', type: 'date', alias: 'Expected Delivery' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' },\r\n      { name: 'totalReceivedAmount', type: 'money', alias: 'Received' },\r\n      { name: 'remainingAmount', type: 'money', alias: 'Remaining' },\r\n      { name: 'statusName', type: 'chip', alias: 'Status', colors: [{ name: '#E0E0E0', condition: x => x.statusName == 'Draft' }, { name: '#BBDEFB', condition: x => x.statusName == 'Confirmed' }, { name: '#FFE0B2', condition: x => x.statusName == 'PartiallyReceived' }, { name: '#C8E6C9', condition: x => x.statusName == 'FullyReceived' }, { name: '#FFCDD2', condition: x => x.statusName == 'Cancelled' }] }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'New Purchase Order', dialog: true, action: { url: 'purchaseorders?action=create', method: 'post' }, onSuccessButton: this.purchaseOrderViewButton },\r\n      { name: 'view', dialog: true, detailsConfig: this.purchaseOrderDetailsConfig },\r\n      { name: 'delete', dialog: true, action: { url: 'purchaseorders?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'purchaseorders/all/x' },\r\n    formConfig: this.purchaseOrderFormConfig,\r\n    entityName: 'PurchaseOrder'\r\n  }\r\n\r\n  //--------------------------Purchases (renamed from Inventory Receipts)-------------------------\r\n\r\n  // Changed: Renamed from inventoryReceiptItemFormConfig to purchaseItemFormConfig\r\n  purchaseItemFormConfig: FormConfig = {\r\n    title: 'Purchase Item', // Changed: \"Receipt Item\" → \"Purchase Item\"\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'productID', type: 'select', alias: 'Product', required: true, span: true,\r\n        loadAction: { url: 'products/list/x' },\r\n        detailsConfig: this.inventoryService.productDetailsConfig, infoMessage: 'Product being received'\r\n      },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity', required: true, infoMessage: 'Number of units received' },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost', required: true, infoMessage: 'Cost per unit' },\r\n      { name: 'serialNumbers', type: 'text', alias: 'Serial Numbers (comma-separated)', infoMessage: 'Comma-separated list of serial numbers for tracked items' }\r\n    ],\r\n    loadAction: { url: 'purchaseitems/id' } // Changed: inventoryreceiptitems → purchaseitems\r\n  }\r\n\r\n  // Changed: Renamed from inventoryReceiptItemsTableConfig to purchaseItemsTableConfig\r\n  purchaseItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'unitName', type: 'text', alias: 'Unit' },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'purchaseitems?action=create', method: 'post' } }, // Changed: inventoryreceiptitems → purchaseitems\r\n      { name: 'edit', dialog: true, action: { url: 'purchaseitems?action=edit', method: 'post' } }, // Changed: inventoryreceiptitems → purchaseitems\r\n      { name: 'delete', dialog: true, action: { url: 'purchaseitems?action=delete', method: 'post' } } // Changed: inventoryreceiptitems → purchaseitems\r\n    ],\r\n    loadAction: { url: 'purchaseitems/x/x' }, loadCriteria: 'purchase', loadIDField: 'purchaseID', // Changed: inventoryreceiptitems → purchaseitems, receipt → purchase, inventoryReceiptID → purchaseID\r\n    formConfig: this.purchaseItemFormConfig // Changed: inventoryReceiptItemFormConfig → purchaseItemFormConfig\r\n  }\r\n\r\n  // Changed: Renamed from inventoryReceiptFormConfig to purchaseFormConfig\r\n  purchaseFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryReceipts] },\r\n    title: 'Purchase', // Changed: \"Inventory Receipt\" → \"Purchase\"\r\n    alertConfig: {\r\n      compact: true,\r\n      messages: [\r\n      { message: 'Please capture the products purchased and click complete to proceed', type: 'success',\r\n        showCondition: (x: any) => x.status === PurchaseStatus.Draft || x.status === PurchaseStatus.Confirmed // Changed: InventoryReceiptStatus → PurchaseStatus, Receiving → Confirmed\r\n      }]\r\n    },\r\n    fixedTitle: true,\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'purchaseInfo', type: 'section', alias: 'Purchase Information' }, // Changed: receiptInfo → purchaseInfo\r\n\r\n      { name: 'purchaseDate', type: 'date', required: true, alias: 'Purchase Date', section: 'purchaseInfo', infoMessage: 'Date goods were purchased' }, // Changed: receiptDate → purchaseDate, receiptInfo → purchaseInfo\r\n      { name: 'supplierID', type: 'select', required: true, alias: 'Supplier', section: 'purchaseInfo', // Changed: receiptInfo → purchaseInfo\r\n        loadAction: { url: 'suppliers/list/x' }, detailsConfig: this.dataService.supplierDetailsConfig, infoMessage: 'Supplier providing the goods'\r\n      },\r\n      { name: 'timing', type: 'select', required: true, alias: 'Transaction Type', section: 'purchaseInfo', // Changed: receiptInfo → purchaseInfo\r\n        loadAction: { url: 'purchases/list/timing' }, defaultFirstValue: true, // Changed: inventoryreceipts → purchases\r\n        infoMessage: 'Cash Purchase (pay now) or Credit Purchase (pay later)'\r\n      },\r\n      { name: 'currencyID', type: 'select', alias: 'Currency', section: 'purchaseInfo', loadAction: { url: 'currencies/list/x' }, defaultFirstValue: true, infoMessage: 'Currency for this purchase (defaults to base currency)' }, // Changed: receiptInfo → purchaseInfo\r\n\r\n      { name: 'paymentType', type: 'select', required: true, alias: 'Payment Method', section: 'purchaseInfo', defaultFirstValue: true, // Changed: receiptInfo → purchaseInfo\r\n        options: this.paymentTypeOptions, infoMessage: 'Payment method used for this purchase',\r\n        hiddenCondition: x => x.timing === 1,\r\n        requiredCondition: x => x.timing === 0\r\n      },\r\n\r\n      { name: 'purchaseNumber', type: 'text', alias: 'Purchase Number', readonly: true, hideOnCreate: true, section: 'purchaseInfo', infoMessage: 'Auto-generated unique purchase identifier' }, // Changed: receiptNumber → purchaseNumber\r\n      { name: 'poNumber', type: 'text', alias: 'PO Number', hideOnCreate: true, section: 'purchaseInfo', infoMessage: 'Linked purchase order if receiving against a PO', // Changed: receiptInfo → purchaseInfo\r\n        hiddenCondition: (row) => !row.purchaseOrderID,\r\n      },\r\n      { name: 'multipleProducts', type: 'checkbox', alias: 'Multiple Products', defaultValue: false, hideOnExists: true, infoMessage: 'Check this box if you want to add multiple products to this purchase' }, // Changed: receipt → purchase\r\n\r\n      { name: 'quickPurchaseItem', type: 'section', alias: 'Quick Purchase Item',\r\n        hiddenCondition: x => x.multipleProducts === true || x.purchaseID // Changed: inventoryReceiptID → purchaseID\r\n      },\r\n      { name: 'productID', type: 'select', required: true, alias: 'Product', section: 'quickPurchaseItem', span: true,\r\n        loadAction: { url: 'products/list/x' },\r\n        hiddenCondition: x => x.multipleProducts === true,\r\n        onSelectChange: (selectedProductId: number, formData: any, option?: any) => {\r\n          if (option && option.costPrice) {\r\n            formData.unitCost = option.costPrice;\r\n          }\r\n        },\r\n        detailsConfig: this.inventoryService.productDetailsConfig, infoMessage: 'Product being purchased'\r\n      },\r\n      { name: 'quantity', type: 'number', required: true, alias: 'Quantity', section: 'quickPurchaseItem',\r\n        hiddenCondition: x => x.multipleProducts === true, infoMessage: 'Number of units purchased'\r\n      },\r\n      { name: 'unitCost', type: 'money', required: true, alias: 'Unit Cost', section: 'quickPurchaseItem',\r\n        hiddenCondition: x => x.multipleProducts === true, infoMessage: 'Cost per unit'\r\n      },\r\n\r\n      { name: 'totals', type: 'section', alias: 'Totals', hideOnCreate: true, collapsed: true },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals', infoMessage: 'Total value of all items' },\r\n      { name: 'dueDate', type: 'date', alias: 'Due Date', readonly: true, section: 'totals', hiddenCondition: (x: any) => x.timing !== 1, infoMessage: 'Payment due date (auto-set to purchase date + 30 days)' }, // Changed: receipt date → purchase date\r\n      { name: 'outstandingAmount', type: 'money', alias: 'Outstanding', readonly: true, section: 'totals', hiddenCondition: (x: any) => x.timing !== 1, infoMessage: 'Amount still owed to supplier' },\r\n\r\n      { name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo', infoMessage: 'Additional notes about this purchase' }, // Changed: receipt → purchase\r\n      { name: 'supplierInvoiceNumber', type: 'text', alias: 'Supplier Invoice #', section: 'additionalInfo', infoMessage: 'Invoice number from supplier' },\r\n    ],\r\n    loadAction: { url: 'purchases/id' }, // Changed: inventoryreceipts → purchases\r\n    heroField: 'purchaseID' // Changed: inventoryReceiptID → purchaseID\r\n  }\r\n\r\n\r\n  // Changed: Renamed from inventoryReceiptEditButton to purchaseEditButton\r\n  purchaseEditButton: Button =\r\n  { name: 'edit', dialog: true,\r\n    action: { url: 'purchases?action=edit', method: 'post' }, // Changed: inventoryreceipts → purchases\r\n    visible: (x: any) => x.status !== PurchaseStatus.Completed // Changed: InventoryReceiptStatus → PurchaseStatus\r\n  }\r\n\r\n  // Changed: Renamed from inventoryReceiptCompleteButton to purchaseCompleteButton\r\n  purchaseCompleteButton: Button =\r\n    { name: 'complete', display: 'Complete Purchase', inDialog: true, // Changed: \"Complete Receipt\" → \"Complete Purchase\"\r\n      icon: { name: 'check_circle', color: 'green' },\r\n      action: { url: 'purchases?action=complete', method: 'post', successMessage: 'Purchase Completed' }, // Changed: inventoryreceipts → purchases, \"Receipt Completed\" → \"Purchase Completed\"\r\n      confirm: { message: 'Complete this purchase? Inventory will be updated and purchase will become read-only.' }, // Changed: receipt → purchase\r\n      visible: (x: any) => x.status !== PurchaseStatus.Completed // Changed: InventoryReceiptStatus → PurchaseStatus\r\n    }\r\n\r\n  // Changed: Renamed from inventoryReceiptStepConfig to purchaseStepConfig\r\n  purchaseStepConfig: StepConfig = {\r\n    valueField: 'status',\r\n    sticky: true,\r\n    steps: [\r\n      { name: 'Draft', value: PurchaseStatus.Draft, icon: 'article' }, // Changed: InventoryReceiptStatus → PurchaseStatus\r\n      { name: 'Confirmed', value: PurchaseStatus.Confirmed, icon: 'inventory_2' }, // Changed: \"Receiving\" → \"Confirmed\"\r\n      { name: 'Completed', value: PurchaseStatus.Completed, icon: 'check_circle' } // Changed: InventoryReceiptStatus → PurchaseStatus\r\n    ]\r\n  }\r\n\r\n  // Changed: Renamed from inventoryReceiptDetailsConfig to purchaseDetailsConfig\r\n  purchaseDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.purchaseFormConfig, // Changed: inventoryReceiptFormConfig → purchaseFormConfig\r\n    tableConfigs: [this.purchaseItemsTableConfig], // Changed: inventoryReceiptItemsTableConfig → purchaseItemsTableConfig\r\n    heroField: 'purchaseID', // Changed: inventoryReceiptID → purchaseID\r\n    stepConfig: this.purchaseStepConfig, // Changed: inventoryReceiptStepConfig → purchaseStepConfig\r\n    buttons: [this.purchaseEditButton, this.purchaseCompleteButton] // Changed: inventoryReceiptEditButton → purchaseEditButton, etc.\r\n  }\r\n\r\n  // Changed: Renamed from inventoryReceiptViewButton to purchaseViewButton\r\n  purchaseViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.purchaseDetailsConfig }\r\n  // Changed: Renamed from inventoryQuickPurchaseButton\r\n  quickPurchaseButton: Button = { name: 'create', display: 'Quick Purchase', dialog: true, action: { url: 'purchases?action=create', method: 'post' } }; // Changed: inventoryreceipts → purchases\r\n\r\n  // Changed: Renamed from inventoryReceiptsTableConfig to purchasesTableConfig\r\n  purchasesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['purchaseNumber', 'supplierName', 'purchaseDate'], // Changed: receiptNumber → purchaseNumber, receiptDate → purchaseDate\r\n    columns: [\r\n      { name: 'purchaseDate', type: 'date', alias: 'Date' }, // Changed: receiptDate → purchaseDate\r\n      { name: 'supplierName', type: 'text', alias: 'Supplier' },\r\n      { name: 'detailsDisplay', type: 'text', alias: 'Details' }, // Changed: Renamed from productsDisplay/Products\r\n      { name: 'timingName', type: 'text', alias: 'Payment' },\r\n      { name: 'status', type: 'icon', alias: 'Status', detailsConfig: this.purchaseDetailsConfig, // Changed: inventoryReceiptDetailsConfig → purchaseDetailsConfig\r\n        icons: [\r\n          { name: 'article', color: '#9E9E9E', condition: (x: any) => x.status === PurchaseStatus.Draft, tip: 'Draft' }, // Changed: InventoryReceiptStatus → PurchaseStatus\r\n          { name: 'inventory_2', color: '#2196F3', condition: (x: any) => x.status === PurchaseStatus.Confirmed, tip: 'Confirmed' }, // Changed: Receiving → Confirmed\r\n          { name: 'check_circle', color: '#4CAF50', condition: (x: any) => x.status === PurchaseStatus.Completed, tip: 'Completed' } // Changed: InventoryReceiptStatus → PurchaseStatus\r\n        ]\r\n      },\r\n\r\n      { name: 'totalAmount', type: 'money', alias: 'Total Value' },\r\n      { name: 'outstandingAmount', type: 'money', alias: 'Outstanding', hiddenCondition: (x: any) => x?.timing !== 1 }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', icon: { name: 'launch' }, dialog: true, detailsConfig: this.purchaseDetailsConfig }, // Changed: inventoryReceiptDetailsConfig → purchaseDetailsConfig\r\n      this.quickPurchaseButton, // Changed: inventoryQuickPurchaseButton → quickPurchaseButton\r\n      { name: 'delete', dialog: true, icon: { name: 'delete_forever', color: 'red' }, action: { url: 'purchases?action=delete', method: 'post' }, confirm: { message: 'CAUTION: Deleting this purchase will reverse all inventory additions, any sales of this inventory, and all related accounting transactions. This action cannot be undone. Are you sure you want to proceed?' } }, // Changed: inventoryreceipts → purchases, \"receipt\" → \"purchase\"\r\n    ],\r\n    loadAction: { url: 'purchases/all/x' }, // Changed: inventoryreceipts → purchases\r\n    formConfig: this.purchaseFormConfig, // Changed: inventoryReceiptFormConfig → purchaseFormConfig\r\n    entityName: 'Purchase' // Changed: \"InventoryReceipt\" → \"Purchase\"\r\n  }\r\n\r\n  //--------------------------Receipts (Goods Confirmation)-------------------------\r\n\r\n  // Added: Receipt item form for goods received\r\n  receiptItemFormConfig: FormConfig = {\r\n    title: 'Receipt Item',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'purchaseItemID', type: 'select', alias: 'Purchase Item', required: true, loadAction: { url: 'purchaseitems/list/x' } },\r\n      { name: 'productID', type: 'select', alias: 'Product', required: true, span: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.inventoryService.productDetailsConfig },\r\n      { name: 'receivedQuantity', type: 'number', alias: 'Received Qty', required: true },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost', required: true },\r\n      { name: 'serialNumbers', type: 'text', alias: 'Serial Numbers (comma-separated)' }\r\n    ],\r\n    loadAction: { url: 'receiptitems/id' }\r\n  }\r\n\r\n  // Added: Receipt items table — shows what was physically received\r\n  receiptItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'receivedQuantity', type: 'number', alias: 'Received' },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'receiptitems?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'receiptitems?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'receiptitems?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'receiptitems/x/x' }, loadCriteria: 'receipt', loadIDField: 'receiptID',\r\n    formConfig: this.receiptItemFormConfig\r\n  }\r\n\r\n  // Added: Receipt form for goods confirmation\r\n  receiptFormConfig: FormConfig = {\r\n    title: 'Receipt',\r\n    fixedTitle: true,\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'receiptInfo', type: 'section', alias: 'Receipt Information' },\r\n      { name: 'purchaseID', type: 'number', hidden: true },\r\n      { name: 'receiptNumber', type: 'text', alias: 'Receipt #', readonly: true, hideOnCreate: true, section: 'receiptInfo' },\r\n      { name: 'purchaseNumber', type: 'text', alias: 'Purchase #', readonly: true, section: 'receiptInfo' },\r\n      { name: 'supplierName', type: 'text', alias: 'Supplier', readonly: true, section: 'receiptInfo' },\r\n      { name: 'receivedDate', type: 'date', required: true, alias: 'Received Date', section: 'receiptInfo' },\r\n      { name: 'statusName', type: 'text', alias: 'Status', readonly: true, hideOnCreate: true, section: 'receiptInfo' },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'receiptInfo' }\r\n    ],\r\n    loadAction: { url: 'receipts/id' },\r\n    heroField: 'receiptID'\r\n  }\r\n\r\n  // Added: Receipt complete button\r\n  receiptCompleteButton: Button = { name: 'complete', display: 'Complete Receipt', inDialog: true, icon: { name: 'check_circle', color: 'green' }, action: { url: 'receipts?action=complete', method: 'post', successMessage: 'Receipt Completed — Inventory Updated' }, confirm: { message: 'Complete this receipt? Inventory will be increased.' }, visible: (x: any) => x.statusName === 'Draft' }\r\n\r\n  // Added: Receipt edit button\r\n  receiptEditButton: Button = { name: 'edit', dialog: true, action: { url: 'receipts?action=edit', method: 'post' }, visible: (x: any) => x.statusName === 'Draft' }\r\n\r\n  // Added: Receipt details dialog with items table and complete button\r\n  receiptDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.receiptFormConfig,\r\n    tableConfigs: [this.receiptItemsTableConfig],\r\n    heroField: 'receiptID',\r\n    buttons: [this.receiptEditButton, this.receiptCompleteButton]\r\n  }\r\n\r\n  // Added: Receipt view button\r\n  receiptViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.receiptDetailsConfig }\r\n\r\n  // Added: Receipts table — shows goods receipts for a purchase (tab in purchase details)\r\n  receiptsTableConfig: TableConfig = {\r\n    tabTitle: 'Receipts',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'receiptNumber', type: 'text', alias: 'Receipt #' },\r\n      { name: 'receivedDate', type: 'date', alias: 'Received' },\r\n      { name: 'statusName', type: 'chip', alias: 'Status', colors: [{ name: '#E0E0E0', condition: x => x.statusName === 'Draft' }, { name: '#C8E6C9', condition: x => x.statusName === 'Completed' }] },\r\n      { name: 'detailsDisplay', type: 'text', alias: 'Details' } // Changed: Renamed from productsDisplay/Products\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'New Receipt', dialog: true, action: { url: 'receipts?action=create', method: 'post' } },\r\n      { name: 'view', dialog: true, detailsConfig: this.receiptDetailsConfig },\r\n      { name: 'delete', dialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'receipts?action=delete', method: 'post' }, confirm: { message: 'Delete this receipt? Inventory changes will be reversed.' } }\r\n    ],\r\n    loadAction: { url: 'receipts/x/x' }, loadCriteria: 'purchase', loadIDField: 'purchaseID',\r\n    formConfig: this.receiptFormConfig\r\n  }\r\n\r\n  //--------------------------Supplier Payments-------------------------\r\n\r\n  supplierPaymentFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capInventoryReceipts] },\r\n    title: 'Record Payment',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'purchaseID', type: 'number', hidden: true }, // Changed: inventoryReceiptID → purchaseID\r\n      { name: 'paymentDate', type: 'date', alias: 'Payment Date', required: true },\r\n      { name: 'method', type: 'select', alias: 'Payment Method', required: true, defaultValue: 2, loadAction: { url: 'supplierpayments/list/methods' } },\r\n      { name: 'currencyID', type: 'select', alias: 'Currency', loadAction: { url: 'currencies/list/x' }, defaultFirstValue: true, infoMessage: 'Currency for this payment (defaults to base currency)' },\r\n      { name: 'outstandingAmount', type: 'label', alias: 'Outstanding', readonly: true },\r\n      { name: 'amount', type: 'money', alias: 'Amount', required: true, span: true },\r\n      { name: 'reference', type: 'text', alias: 'Reference', span: true }\r\n    ],\r\n  }\r\n\r\n  supplierPaymentCreateButton: Button = { name: 'edit', action: { url: 'supplierpayments?action=create', method: 'post', successMessage: 'Payment Recorded' } }\r\n\r\n  supplierPaymentCreateDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.supplierPaymentFormConfig,\r\n    heroField: 'purchaseID', // Changed: inventoryReceiptID → purchaseID\r\n    mode: 'edit',\r\n    buttons: [this.supplierPaymentCreateButton]\r\n  }\r\n\r\n  supplierRecordPaymentButton: Button = { name: 'record-payment', display: 'Record Payment', dialog: true, icon: { name: 'payment', color: 'blue' },\r\n    detailsConfig: this.supplierPaymentCreateDetailsConfig,\r\n    visible: (x: any) => x.timing === 1 && x.status === PurchaseStatus.Completed && x.outstandingAmount > 0 // Changed: InventoryReceiptStatus → PurchaseStatus\r\n  }\r\n\r\n  supplierPaymentsTableConfig: TableConfig = {\r\n    tabTitle: 'Payments',\r\n    hideTabCondition: (x: any) => x.timing !== 1, // Changed: Hide Payments tab for Immediate purchases (only show for Deferred/Credit)\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'paymentDate', type: 'date', alias: 'Date' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'methodName', type: 'text', alias: 'Method' },\r\n      { name: 'reference', type: 'text', alias: 'Reference' }\r\n    ],\r\n    buttons: [\r\n      { name: 'delete', dialog: true, icon: { name: 'delete', color: 'red' }, action: { url: 'supplierpayments?action=delete', method: 'post' }, confirm: { message: 'Void this payment? The accounting transaction will be reversed.' } }\r\n    ],\r\n    loadAction: { url: 'supplierpayments/x/x' }, loadCriteria: 'purchase', loadIDField: 'purchaseID', // Changed: receipt → purchase, inventoryReceiptID → purchaseID\r\n    formConfig: this.supplierPaymentFormConfig\r\n  }\r\n\r\n  //--------------------------AP Aging Report-------------------------\r\n\r\n  apAgingTileConfig: TileConfig = {\r\n    tiles: [\r\n      { name: 'current', alias: 'Current', color: '#4CAF50', icon: 'check_circle', info: 'Not yet due' },\r\n      { name: 'days30', alias: '1-30 Days', color: '#FFC107', icon: 'schedule', info: '1-30 days overdue' },\r\n      { name: 'days60', alias: '31-60 Days', color: '#FF9800', icon: 'warning', info: '31-60 days overdue' },\r\n      { name: 'days90', alias: '61-90 Days', color: '#F44336', icon: 'error', info: '61-90 days overdue' },\r\n      { name: 'days90Plus', alias: '90+ Days', color: '#B71C1C', icon: 'dangerous', info: 'Over 90 days overdue' },\r\n      { name: 'total', alias: 'Total Outstanding', color: '#9E9E9E', icon: 'account_balance_wallet', info: 'Total outstanding amount' }\r\n    ],\r\n  }\r\n\r\n  apAgingBaseTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['purchaseNumber', 'supplierName', 'outstandingAmount'], // Changed: receiptNumber → purchaseNumber\r\n    columns: [\r\n      { name: 'purchaseNumber', type: 'text', alias: 'Purchase #', detailsConfig: this.purchaseDetailsConfig }, // Changed: receiptNumber → purchaseNumber, inventoryReceiptDetailsConfig → purchaseDetailsConfig\r\n      { name: 'supplierName', type: 'text', alias: 'Supplier' },\r\n      { name: 'purchaseDate', type: 'date', alias: 'Purchase Date' }, // Changed: receiptDate → purchaseDate\r\n      { name: 'dueDate', type: 'date', alias: 'Due Date' },\r\n      { name: 'daysOverdue', type: 'number', alias: 'Days Overdue' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' },\r\n      { name: 'paidAmount', type: 'money', alias: 'Paid' },\r\n      { name: 'outstandingAmount', type: 'money', alias: 'Outstanding' }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true, detailsConfig: this.purchaseDetailsConfig }, // Changed: inventoryReceiptDetailsConfig → purchaseDetailsConfig\r\n      this.supplierRecordPaymentButton,\r\n    ]\r\n  }\r\n}\r\n","// AP Aging report component for accounts payable tracking — mirrors AR AgingComponent pattern\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { PurchasingService } from '../../../services/purchasing.service';\r\nimport { ApiResponse, TableConfig, TileConfig } from '../../../classes/Classes';\r\nimport { DataServiceLib } from '../../../services/datalib.service';\r\n\r\n@Component({\r\n  selector: 'spa-supplier-aging',\r\n  template: `\r\n    <h4>Accounts Payable Aging</h4>\r\n    <hr>\r\n    <div *ngIf=\"summaryData\" class=\"mt-3 mb-3\">\r\n      <spa-tiles [config]=\"tileConfig\" [data]=\"summaryData\"></spa-tiles>\r\n    </div>\r\n\r\n    <spa-tabs [tableConfigs]=\"agingTableConfigs\"></spa-tabs>\r\n  `,\r\n  standalone: false\r\n})\r\nexport class SupplierAgingComponent implements OnInit {\r\n\r\n  public purchasingService = inject(PurchasingService);\r\n\r\n  ngOnInit(): void {\r\n    this.loadSummaryData();\r\n  }\r\n\r\n  summaryData: any;\r\n\r\n  loadSummaryData(): void {\r\n    this.dataServiceLib.CallApi({ url: 'purchases/aging-summary/x' }, '').subscribe((apiResponse: ApiResponse) => {\r\n      if (apiResponse.success) {\r\n        this.summaryData = apiResponse.data;\r\n      }\r\n    });\r\n  }\r\n\r\n  agingTableConfigs: TableConfig[];\r\n  tileConfig = this.purchasingService.apAgingTileConfig;\r\n\r\n  constructor(private dataServiceLib: DataServiceLib) {\r\n    // Changed: Build 5-tab aging table layout using AP aging base config from PurchasingService\r\n    this.agingTableConfigs = [\r\n      {\r\n        ...this.purchasingService.apAgingBaseTableConfig,\r\n        tabTitle: 'Current',\r\n        loadAction: { url: 'purchases/aging-current/x' },\r\n        countAction: { url: 'purchases/count/aging-current' }\r\n      },\r\n      {\r\n        ...this.purchasingService.apAgingBaseTableConfig,\r\n        tabTitle: '1-30 Days',\r\n        loadAction: { url: 'purchases/aging-30/x' },\r\n        countAction: { url: 'purchases/count/aging-30' }\r\n      },\r\n      {\r\n        ...this.purchasingService.apAgingBaseTableConfig,\r\n        tabTitle: '31-60 Days',\r\n        loadAction: { url: 'purchases/aging-60/x' },\r\n        countAction: { url: 'purchases/count/aging-60' }\r\n      },\r\n      {\r\n        ...this.purchasingService.apAgingBaseTableConfig,\r\n        tabTitle: '61-90 Days',\r\n        loadAction: { url: 'purchases/aging-90/x' },\r\n        countAction: { url: 'purchases/count/aging-90' }\r\n      },\r\n      {\r\n        ...this.purchasingService.apAgingBaseTableConfig,\r\n        tabTitle: '90+ Days',\r\n        loadAction: { url: 'purchases/aging-90plus/x' },\r\n        countAction: { url: 'purchases/count/aging-90plus' }\r\n      }\r\n    ];\r\n  }\r\n\r\n}\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n  selector: 'spa-transaction-types',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class TransactionTypesComponent implements OnInit {\r\n  private accountingService = inject(AccountingService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Transaction Types',\r\n    tableConfig: this.accountingService.transactionTypesTableConfig\r\n  };\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n  selector: 'spa-transactions',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class TransactionsComponent implements OnInit {\r\n  private accountingService = inject(AccountingService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Transactions',\r\n    tableConfig: this.accountingService.transactionsTableConfig,\r\n    searchTableConfig: this.accountingService.transactionSearchTableConfig // Changed: Enable search mode with date range, description, account filters\r\n  };\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n","// Invoice management component for tin-spa library\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Component, OnInit, inject } from '@angular/core';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { HttpService } from '../../../services/http.service';\r\nimport { MessageService } from '../../../services/message.service';\r\n\r\n@Component({\r\n  selector: 'spa-invoices',\r\n  template: '<spa-page [config]=\"pageConfig\" (actionClick)=\"actionClicked($event)\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class InvoicesComponent implements OnInit {\r\n  public accountingService = inject(AccountingService);\r\n  private httpService = inject(HttpService);\r\n  private http = inject(HttpClient);\r\n  private messageService = inject(MessageService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Invoices',\r\n    tableConfig: this.accountingService.invoicesTableConfig\r\n  };\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  // Handle action click events from the table\r\n  actionClicked(event: { name: string, data: any }) {\r\n    if (event.name === 'pdf') {\r\n      this.messageService.confirm(`Download Invoice ?`).subscribe((result) => {\r\n        if (result == \"yes\") {\r\n          this.download(event.data);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  // Download invoice as PDF\r\n  download(invoice: any) {\r\n    this.http.post(`${this.httpService.apiUrl}invoices/pdf?action=x`, invoice,\r\n      { responseType: 'blob' })\r\n      .subscribe((response: Blob) => {\r\n        const blob = new Blob([response], { type: 'application/pdf' });\r\n        const url = window.URL.createObjectURL(blob);\r\n        const link = document.createElement('a');\r\n        link.href = url;\r\n        link.download = `Invoice_${invoice.invoiceID}.pdf`;\r\n        link.click();\r\n        window.URL.revokeObjectURL(url);\r\n      });\r\n  }\r\n}\r\n","// Changed: Statement component replaces Outstanding Invoices — read-only invoice history with search mode\r\nimport { Component, OnInit, inject } from '@angular/core';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n  selector: 'spa-statement', // Changed: Updated selector for statement component\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class StatementComponent implements OnInit {\r\n  public accountingService = inject(AccountingService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Statement', // Changed: Updated title from Outstanding Invoices\r\n    tableConfig: this.accountingService.statementTableConfig, // Changed: Use statement table config\r\n    searchTableConfig: this.accountingService.statementSearchTableConfig // Changed: Add search mode support\r\n  };\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n","// Financial Reports component with Trial Balance, P&L, Balance Sheet tabs\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { TableConfig } from '../../../classes/Classes';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { DataServiceLib } from '../../../services/datalib.service';\r\n\r\n@Component({\r\n  selector: 'spa-reports',\r\n  template: `\r\n    <h4>Financial Reports</h4>\r\n    <hr>\r\n\r\n    <spa-tabs [tableConfigs]=\"reportTabConfigs\"></spa-tabs>\r\n  `,\r\n  standalone: false\r\n})\r\nexport class ReportsComponent implements OnInit {\r\n\r\n  constructor(private dataServiceLib: DataServiceLib, public accountingService: AccountingService) {\r\n    this.reportTabConfigs = [\r\n      {\r\n        ...this.accountingService.trialBalanceTableConfig,\r\n        tabTitle: 'Trial Balance',\r\n        loadAction: { url: 'accounts/reports/trialbalance' },\r\n      },\r\n      {\r\n        ...this.accountingService.pnlTableConfig,\r\n        tabTitle: 'Profit & Loss',\r\n        loadAction: { url: 'accounts/reports/pnl' },\r\n      },\r\n      {\r\n        ...this.accountingService.balanceSheetReportTableConfig,\r\n        tabTitle: 'Balance Sheet',\r\n        loadAction: { url: 'accounts/reports/balancesheet' },\r\n      }\r\n    ];\r\n  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  reportTabConfigs: TableConfig[];\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { TinSpaModule } from '../../../tin-spa.module';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\n\r\n// Tax Rates management page - CRUD for VAT tax rates\r\n@Component({\r\n  selector: 'spa-tax-rates',\r\n  standalone: true,\r\n  imports: [TinSpaModule],\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class TaxRatesComponent {\r\n  private accountingService = inject(AccountingService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Tax Rates',\r\n    tableConfig: this.accountingService.taxRatesTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { TinSpaModule } from '../../../tin-spa.module';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\n\r\n// Standing Orders management page — CRUD for recurring scheduled transactions\r\n@Component({\r\n  selector: 'spa-standing-orders',\r\n  standalone: true,\r\n  imports: [TinSpaModule],\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class StandingOrdersComponent {\r\n  private accountingService = inject(AccountingService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Standing Orders',\r\n    tableConfig: this.accountingService.standingOrdersTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { TinSpaModule } from '../../../tin-spa.module';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\n\r\n// Currency management page - CRUD for multi-currency support\r\n@Component({\r\n  selector: 'spa-currencies',\r\n  standalone: true,\r\n  imports: [TinSpaModule],\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class CurrenciesComponent {\r\n  private accountingService = inject(AccountingService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Currencies',\r\n    tableConfig: this.accountingService.currenciesTableConfig\r\n  };\r\n}\r\n","// Budget management component for CRUD operations\r\nimport { Component, inject } from '@angular/core';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n  selector: 'spa-budgets',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class BudgetsComponent {\r\n  private accountingService = inject(AccountingService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Budgets',\r\n    tableConfig: this.accountingService.budgetsTableConfig\r\n  };\r\n}\r\n","// Budget vs Actual report component with budget selector, tiles, and tabbed tables\r\nimport { Component, inject } from '@angular/core';\r\nimport { AccountingService } from '../../../services/accounting.service';\r\nimport { TableConfig, TileConfig } from '../../../classes/Classes';\r\nimport { HttpService } from '../../../services/http.service';\r\n\r\n@Component({\r\n  selector: 'spa-budget-vs-actual',\r\n  template: `\r\n    <h4>Budget vs Actual</h4>\r\n    <hr>\r\n\r\n    <div style=\"max-width: 300px; margin-bottom: 16px;\">\r\n      <spa-select-lite display=\"Select Budget\" [loadAction]=\"{ url: 'budgets/list/x' }\" [(value)]=\"selectedBudgetID\" (valueChange)=\"onBudgetSelected()\"></spa-select-lite>\r\n    </div>\r\n\r\n    <spa-tiles *ngIf=\"summaryTileConfig.loadAction\" [config]=\"summaryTileConfig\"></spa-tiles>\r\n\r\n    <spa-tabs *ngIf=\"reportTabConfigs.length > 0\" [tableConfigs]=\"reportTabConfigs\"></spa-tabs>\r\n  `,\r\n  standalone: false\r\n})\r\nexport class BudgetVsActualComponent {\r\n  private accountingService = inject(AccountingService);\r\n  private httpService = inject(HttpService);\r\n\r\n  selectedBudgetID: number | null = null;\r\n  reportTabConfigs: TableConfig[] = [];\r\n\r\n  summaryTileConfig: TileConfig = { ...this.accountingService.budgetSummaryTileConfig };\r\n\r\n  // Load report data when a budget is selected\r\n  onBudgetSelected() {\r\n    if (!this.selectedBudgetID) {\r\n      this.reportTabConfigs = [];\r\n      return;\r\n    }\r\n\r\n    // Update tile config to load summary for selected budget\r\n    this.summaryTileConfig = {\r\n      ...this.accountingService.budgetSummaryTileConfig,\r\n      loadAction: { url: `budgetreport/summary/${this.selectedBudgetID}` }\r\n    };\r\n\r\n    // Build tab configs with dynamic URLs for selected budget\r\n    this.reportTabConfigs = [\r\n      {\r\n        ...this.accountingService.budgetVsActualByPeriodTableConfig,\r\n        loadAction: { url: `budgetreport/vsactual/${this.selectedBudgetID}` }\r\n      },\r\n      {\r\n        ...this.accountingService.budgetVsActualByAccountTableConfig,\r\n        loadAction: { url: `budgetreport/summary/${this.selectedBudgetID}` }\r\n      }\r\n    ];\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { TileConfig, ChartConfig } from '../../../classes/Classes';\r\n\r\n// Accounting module dashboard — pure financial/account performance (invoice-specific moved to invoicing)\r\n@Component({\r\n  selector: 'spa-accounting-dashboard',\r\n  template: `\r\n    <div class=\"dashboard-container\">\r\n      <h4 class=\"dashboard-title\"><mat-icon>account_balance</mat-icon> Accounting Dashboard</h4>\r\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\r\n      <div style=\"margin-top: 16px;\"></div>\r\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\r\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\r\n      <!-- Changed: Separate cash/bank balance chart with own data source -->\r\n      <spa-charts [config]=\"cashBankChartConfig\"></spa-charts>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .dashboard-container { padding: 16px; }\r\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class AccountingDashboardComponent {\r\n  summaryTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'inflows', alias: 'Inflows (MTD)', color: '#4caf50', icon: 'arrow_downward', style: 'icon', info: 'MTD cash inflows' }, // Changed: Cash inflows tile\r\n      { name: 'outflows', alias: 'Outflows (MTD)', color: '#f44336', icon: 'arrow_upward', style: 'icon', info: 'MTD cash outflows' }, // Changed: Cash outflows tile\r\n      { name: 'netCashFlow', alias: 'Net Cash Flow', color: '#2196f3', icon: 'swap_vert', style: 'icon', info: 'Net cash movement' }, // Changed: Net cash flow tile\r\n      { name: 'revenue', alias: 'Revenue (MTD)', color: '#4caf50', icon: 'trending_up', style: 'icon', info: 'MTD revenue' },\r\n      { name: 'expenses', alias: 'Expenses (MTD)', color: '#f44336', icon: 'trending_down', style: 'icon', info: 'MTD expenses' },\r\n      { name: 'cashBalance', alias: 'Cash & Bank', color: '#ff9800', icon: 'account_balance_wallet', style: 'icon', info: 'Cash + bank total' },\r\n    ],\r\n    loadAction: { url: 'accounts/dashboard-summary/x' },\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Replaced collectionRate/invoiceStatusSplit with profitMargin/expenseBreakdown\r\n  chartTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'profitMargin', alias: 'Profit Margin', color: '#4caf50', chart: { type: 'doughnut', gaugeColor: '#4caf50', height: 130, dataField: 'profitMargin' }, footer: 'Net profit / revenue', footerIcon: 'pie_chart' }, // Changed: Replaced collectionRate\r\n      { name: 'revenueTrendSpark', alias: 'Revenue Trend', color: '#2196f3', chart: { type: 'line', color: '#2196f3', height: 100, dataField: 'revenueTrendSpark' }, footer: 'Last 12 months', footerIcon: 'show_chart' },\r\n      { name: 'expenseBreakdown', alias: 'Expense Breakdown', color: '#ff9800', chart: { type: 'pie', colors: ['#f44336', '#ff5722', '#ff9800', '#ffc107', '#ffeb3b', '#9e9e9e'], height: 130, dataField: 'expenseBreakdown' }, footer: 'Top 5 + Other', footerIcon: 'donut_large' }, // Changed: Replaced invoiceStatusSplit\r\n      { name: 'expenseTrendSpark', alias: 'Expense Trend', color: '#f44336', chart: { type: 'bar', colors: ['#f44336', '#ef5350', '#e57373', '#ef9a9a', '#ffcdd2', '#f44336'], height: 100, dataField: 'expenseTrendSpark' }, footer: 'Last 6 months', footerIcon: 'trending_down' },\r\n    ],\r\n    loadAction: { url: 'accounts/dashboard-chart-tiles/x' },\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Replaced arAging/invoiceStatus with cashFlow/transactionVolume\r\n  chartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'revenueTrend', title: 'Revenue vs Expenses Trend', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#4caf50', '#f44336'], showLegend: true },\r\n      { name: 'cashFlow', title: 'Monthly Cash Flow', type: 'bar', height: '300px', colors: ['#4caf50', '#f44336'], showLegend: true }, // Changed: Replaced arAging\r\n      { name: 'accountBalances', title: 'Account Balances by Type', type: 'bar', height: '300px', colors: ['#2196f3', '#f44336', '#4caf50', '#ff9800', '#9c27b0'] },\r\n      { name: 'transactionVolume', title: 'Monthly Transaction Volume', type: 'bar', height: '300px', colors: ['#7c4dff'] }, // Changed: Replaced invoiceStatus\r\n    ],\r\n    loadAction: { url: 'accounts/dashboard-charts/x' },\r\n    loadInit: true,\r\n    columns: 2\r\n  };\r\n\r\n  // Changed: New cash/bank running balance line chart with separate data source\r\n  cashBankChartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'cashBankBalances', title: 'Cash & Bank Balances (30 Days)', type: 'line', height: '500px', showPoints: true, tension: 0.4, showLegend: true,\r\n        options: { scales: { y: { grid: { color: '#f0f0f0', drawBorder: false }, ticks: { font: { size: 11 }, color: '#999', maxTicksLimit: 12 }, border: { display: false } } } } }, // Changed: More granular Y-axis ticks for better readability\r\n    ],\r\n    loadAction: { url: 'accounts/dashboard-cash-balances/x' },\r\n    loadInit: true,\r\n    columns: 1\r\n  };\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TileConfig, ChartConfig, ApiResponse } from '../../../classes/Classes';\r\nimport { DataServiceLib } from '../../../services/datalib.service';\r\n\r\n// Invoice module dashboard with pipeline visibility, aging, and collection KPIs\r\n@Component({\r\n  selector: 'spa-invoice-dashboard',\r\n  template: `\r\n    <div class=\"dashboard-container\">\r\n      <h4 class=\"dashboard-title\"><mat-icon>receipt_long</mat-icon> Invoice Dashboard</h4>\r\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\r\n      <div style=\"margin-top: 16px;\"></div>\r\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\r\n\r\n      <!-- Attention Required sub-table -->\r\n      <div *ngIf=\"attentionItems.length > 0\" class=\"attention-section\">\r\n        <h5 class=\"section-title\">\r\n          <mat-icon style=\"vertical-align: middle; margin-right: 4px; color: #f44336;\">warning</mat-icon>\r\n          Needs Attention\r\n        </h5>\r\n        <table class=\"kpi-table\">\r\n          <thead>\r\n            <tr>\r\n              <th>Invoice</th>\r\n              <th>Customer</th>\r\n              <th>Due Date</th>\r\n              <th>Days Overdue</th>\r\n              <th>Outstanding</th>\r\n            </tr>\r\n          </thead>\r\n          <tbody>\r\n            <tr *ngFor=\"let item of attentionItems\">\r\n              <td>{{ item.invoiceNumber }}</td>\r\n              <td>{{ item.customerName }}</td>\r\n              <td>{{ item.dueDate | date:'mediumDate' }}</td>\r\n              <td style=\"color: #f44336; font-weight: 500;\">{{ item.daysOverdue }}</td>\r\n              <td>{{ item.outstandingAmount | currency }}</td>\r\n            </tr>\r\n          </tbody>\r\n        </table>\r\n      </div>\r\n\r\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .dashboard-container { padding: 16px; }\r\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n    .attention-section { margin-top: 16px; }\r\n    .section-title { display: flex; align-items: center; margin-bottom: 8px; color: #333; font-weight: 500; }\r\n    .kpi-table { width: 100%; border-collapse: collapse; font-size: 13px; }\r\n    .kpi-table th { text-align: left; padding: 8px 12px; background: #f5f5f5; border-bottom: 2px solid #e0e0e0; font-weight: 500; }\r\n    .kpi-table td { padding: 8px 12px; border-bottom: 1px solid #eee; }\r\n    .kpi-table tr:hover { background: #fafafa; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class InvoiceDashboardComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib) { }\r\n\r\n  attentionItems: any[] = [];\r\n\r\n  // Changed: Summary tiles — invoice pipeline KPIs\r\n  summaryTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'totalInvoices', alias: 'Total Invoices', color: '#1565c0', icon: 'receipt_long', style: 'icon', info: 'All active invoices' },\r\n      { name: 'drafts', alias: 'Drafts', color: '#9e9e9e', icon: 'edit_note', style: 'icon', info: 'Invoices awaiting submission' },\r\n      { name: 'outstandingAmount', alias: 'Outstanding', color: '#ff9800', icon: 'pending', style: 'icon', prefix: '$', info: 'Total unpaid amount' },\r\n      { name: 'overdueCount', alias: 'Overdue', color: '#f44336', icon: 'warning', style: 'icon', info: 'Invoices past due date' },\r\n      { name: 'paidThisMonth', alias: 'Paid (Month)', color: '#4caf50', icon: 'check_circle', style: 'icon', info: 'Fully paid this month' },\r\n      { name: 'avgDaysToPay', alias: 'Avg Days to Pay', color: '#7b1fa2', icon: 'schedule', style: 'icon', suffix: ' days', info: 'Average payment turnaround' },\r\n    ],\r\n    loadAction: { url: 'invoices/dashboard-summary/x' },\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Chart tiles — collection gauge, trend sparkline, status pie, aging bar\r\n  chartTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'collectionRate', alias: 'Collection Rate', color: '#4caf50', chart: { type: 'doughnut', gaugeColor: '#4caf50', height: 130, dataField: 'collectionRate' }, footer: 'Amount collected vs invoiced', footerIcon: 'check_circle' },\r\n      { name: 'invoiceTrend', alias: 'Invoice Trend', color: '#2196f3', chart: { type: 'line', color: '#2196f3', height: 100, dataField: 'invoiceTrend' }, footer: 'Last 12 months', footerIcon: 'timeline' },\r\n      { name: 'statusDistribution', alias: 'Status Split', color: '#ff9800', chart: { type: 'pie', colors: ['#9e9e9e', '#2196f3', '#ff9800', '#4caf50', '#f44336'], height: 130, dataField: 'statusDistribution' }, footer: 'Current distribution', footerIcon: 'pie_chart' },\r\n      { name: 'agingSnapshot', alias: 'Aging Snapshot', color: '#f44336', chart: { type: 'bar', colors: ['#4caf50', '#ff9800', '#ff5722', '#f44336', '#b71c1c'], height: 100, dataField: 'agingSnapshot' }, footer: 'Outstanding by age', footerIcon: 'bar_chart' },\r\n    ],\r\n    loadAction: { url: 'invoices/dashboard-chart-tiles/x' },\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Full charts — revenue pipeline, aging breakdown, top customers, payment trend\r\n  chartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'revenuePipeline', title: 'Invoiced vs Collected', type: 'bar', height: '300px', showLegend: true, colors: ['#2196f3', '#4caf50'] },\r\n      { name: 'agingBreakdown', title: 'AR Aging Breakdown', type: 'bar', height: '300px', colors: ['#4caf50', '#ff9800', '#ff5722', '#f44336', '#b71c1c'] },\r\n      { name: 'topCustomers', title: 'Top Customers by Outstanding', type: 'bar', height: '300px', colors: ['#1565c0', '#1976d2', '#1e88e5', '#2196f3', '#42a5f5'] },\r\n      { name: 'paymentTrend', title: 'Payment Collection Trend', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#4caf50'], showLegend: true },\r\n      { name: 'collectionPerformance', title: 'Collection Performance (12 Months)', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#f57c00', '#4caf50'], showLegend: true }, // Changed: Avg days to pay + on-time rate trend\r\n    ],\r\n    loadAction: { url: 'invoices/dashboard-charts/x' },\r\n    loadInit: true,\r\n    columns: 2\r\n  };\r\n\r\n  ngOnInit(): void {\r\n    // Load attention items — top overdue invoices needing action\r\n    this.dataService.CallApi({ url: 'invoices/dashboard-attention/x' }).subscribe((res: ApiResponse) => {\r\n      if (res.success) this.attentionItems = res.data || [];\r\n    });\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AccountsComponent as AccountingAccountsComponent } from '../../pages/accounting/accounts/accounts.component';\nimport { AggregatesComponent as AccountingAggregatesComponent } from '../../pages/accounting/aggregates/aggregates.component';\nimport { AgingComponent as AccountingAgingComponent } from '../../pages/accounting/aging/aging.component';\nimport { SupplierAgingComponent as AccountingSupplierAgingComponent } from '../../pages/accounting/supplier-aging/supplier-aging.component';\nimport { TransactionTypesComponent } from '../../pages/accounting/transaction-types/transaction-types.component';\nimport { TransactionsComponent as AccountingTransactionsComponent } from '../../pages/accounting/transactions/transactions.component';\nimport { InvoicesComponent as AccountingInvoicesComponent } from '../../pages/accounting/invoices/invoices.component';\nimport { StatementComponent as AccountingStatementComponent } from '../../pages/accounting/outstanding-invoices/outstanding-invoices.component';\nimport { ReportsComponent as AccountingReportsComponent } from '../../pages/accounting/reports/reports.component';\nimport { TaxRatesComponent } from '../../pages/accounting/tax-rates/tax-rates.component';\nimport { StandingOrdersComponent } from '../../pages/accounting/standing-orders/standing-orders.component';\nimport { CurrenciesComponent } from '../../pages/accounting/currencies/currencies.component'; // Changed: Removed Fixed Assets imports — moved to Assets module\nimport { BudgetsComponent as AccountingBudgetsComponent } from '../../pages/accounting/budgets/budgets.component';\nimport { BudgetVsActualComponent as AccountingBudgetVsActualComponent } from '../../pages/accounting/budget-vs-actual/budget-vs-actual.component';\nimport { AccountingDashboardComponent } from '../../pages/accounting/accounting-dashboard/accounting-dashboard.component';\nimport { InvoiceDashboardComponent } from '../../pages/accounting/invoice-dashboard/invoice-dashboard.component';\n\n// Changed: Exported routes array for use by SpaHomeRoutingModule\nexport const ACCOUNTING_ROUTES: Routes = [\n  { path: \"accounts\", component: AccountingAccountsComponent },\n  { path: \"aggregates\", component: AccountingAggregatesComponent },\n  { path: \"transaction-types\", component: TransactionTypesComponent },\n  { path: \"transactions\", component: AccountingTransactionsComponent },\n  { path: \"invoices\", component: AccountingInvoicesComponent },\n  { path: \"aging\", component: AccountingAgingComponent },\n  { path: \"supplier-aging\", component: AccountingSupplierAgingComponent },\n  { path: \"statements\", component: AccountingStatementComponent },\n  { path: \"reports\", component: AccountingReportsComponent },\n  { path: \"tax-rates\", component: TaxRatesComponent },\n  { path: \"standing-orders\", component: StandingOrdersComponent },\n  { path: \"currencies\", component: CurrenciesComponent }, // Changed: Removed Fixed Assets routes — moved to Assets module\n  { path: \"budgets\", component: AccountingBudgetsComponent },\n  { path: \"budget-vs-actual\", component: AccountingBudgetVsActualComponent },\n  { path: \"dashboard\", component: AccountingDashboardComponent },\n  { path: \"invoice-dashboard\", component: InvoiceDashboardComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(ACCOUNTING_ROUTES)],\n  exports: [RouterModule]\n})\nexport class AccountingRoutingModule { }\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// Component now uses centralized inventory service for configurations\r\n@Component({\r\n  selector: 'spa-products',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class ProductsComponent implements OnInit {\r\n\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Products',\r\n    tableConfig: this.inventoryService.productsTableConfig\r\n  };\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// Component now uses centralized inventory service for configurations\r\n@Component({\r\n  selector: 'spa-inventory-items',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class InventoryItemsComponent implements OnInit {\r\n\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Inventory Items',\r\n    tableConfig: this.inventoryService.inventoryItemsTableConfig\r\n  };\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// Component now uses centralized inventory service for configurations\r\n@Component({\r\n  selector: 'spa-requisitions',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class RequisitionsComponent implements OnInit {\r\n\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Requisitions',\r\n    tableConfig: this.inventoryService.requisitionsTableConfig\r\n  };\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// Component now uses centralized inventory service for configurations\r\n@Component({\r\n  selector: 'spa-inventory-adjustments',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class InventoryAdjustmentsComponent implements OnInit {\r\n\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Inventory Adjustments',\r\n    tableConfig: this.inventoryService.inventoryAdjustmentsTableConfig\r\n  };\r\n}\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n@Component({\r\n  selector: 'spa-inventory-returns',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class InventoryReturnsComponent implements OnInit {\r\n  // Changed: Inject InventoryService and use shared config instead of inline config\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  tableConfig = this.inventoryService.inventoryReturnsTableConfig;\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Inventory Returns',\r\n    tableConfig: this.tableConfig\r\n  };\r\n\r\n  ngOnInit(): void { }\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// Component now uses centralized inventory service for configurations\r\n@Component({\r\n  selector: 'spa-inventory-transactions',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class InventoryTransactionsComponent implements OnInit {\r\n\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Inventory Transactions',\r\n    tableConfig: this.inventoryService.inventoryTransactionsTableConfig\r\n  };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { TileConfig, ChartConfig } from '../../../classes/Classes';\r\n\r\n// Inventory module dashboard with stock KPI tiles and charts\r\n@Component({\r\n  selector: 'spa-inventory-dashboard',\r\n  template: `\r\n    <div class=\"dashboard-container\">\r\n      <h4 class=\"dashboard-title\"><mat-icon>inventory_2</mat-icon> Inventory Dashboard</h4>\r\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\r\n      <!-- Changed: Spacer div ensures margin between summary and chart tiles -->\r\n      <div style=\"margin-top: 16px;\"></div>\r\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\r\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .dashboard-container { padding: 16px; }\r\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class InventoryDashboardComponent {\r\n  summaryTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'totalProducts', alias: 'Total Products', color: '#2196f3', icon: 'category', style: 'icon', info: 'Total active products' },\r\n      { name: 'lowStockItems', alias: 'Low Stock Items', color: '#f44336', icon: 'warning', style: 'icon', info: 'Products below reorder level' },\r\n      { name: 'totalStockValue', alias: 'Stock Value', color: '#4caf50', icon: 'attach_money', style: 'icon', info: 'Total inventory value' }, // Changed: Removed prefix\r\n      { name: 'itemsInStock', alias: 'Items In Stock', color: '#ff9800', icon: 'inventory', style: 'icon', info: 'Total inventory item count' },\r\n      { name: 'adjustmentsThisMonth', alias: 'Adjustments (MTD)', color: '#9c27b0', icon: 'tune', style: 'icon', info: 'Inventory adjustments this month' },\r\n    ],\r\n    loadAction: { url: 'products/dashboard-summary/x' }, // Changed: Use module-specific CustomCriteria endpoint\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Chart-style tiles now use loadAction with dataField for dynamic data\r\n  chartTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'stockHealth', alias: 'Stock Health', color: '#4caf50', chart: { type: 'doughnut', gaugeColor: '#4caf50', height: 130, dataField: 'stockHealth' }, footer: 'Items above reorder level', footerIcon: 'health_and_safety' }, // Changed: dataField replaces gaugeValue\r\n      { name: 'movementSpark', alias: 'Stock Movement', color: '#2196f3', chart: { type: 'line', color: '#2196f3', height: 130, dataField: 'movementSpark' }, footer: 'Last 12 months', footerIcon: 'trending_up' }, // Changed: dataField replaces inline data\r\n      { name: 'categorySplit', alias: 'By Category', color: '#ff9800', chart: { type: 'pie', colors: ['#2196f3', '#4caf50', '#ff9800', '#f44336', '#9c27b0'], height: 130, dataField: 'categorySplit' }, footer: 'Value distribution', footerIcon: 'donut_large' }, // Changed: dataField replaces inline data\r\n    ],\r\n    loadAction: { url: 'products/dashboard-chart-tiles/x' }, // Changed: Load chart tile data from API\r\n    loadInit: true\r\n  };\r\n\r\n  chartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'stockByCategory', title: 'Stock Levels by Category', type: 'bar', height: '300px', colors: ['#2196f3', '#4caf50', '#ff9800', '#f44336', '#9c27b0', '#795548', '#607d8b'] },\r\n      { name: 'lowStockProducts', title: 'Low Stock Products', type: 'bar', height: '300px', colors: ['#f44336'] },\r\n      { name: 'valueByCategory', title: 'Value by Category', type: 'pie', height: '300px', colors: ['#2196f3', '#4caf50', '#ff9800', '#f44336', '#9c27b0', '#795548', '#607d8b'] },\r\n      { name: 'movementTrend', title: 'Stock Movement Trend', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#4caf50', '#f44336', '#2196f3'], showLegend: true }, // Changed: showLegend for line chart\r\n    ],\r\n    loadAction: { url: 'products/dashboard-charts/x' }, // Changed: Use module-specific CustomCriteria endpoint\r\n    loadInit: true,\r\n    columns: 2\r\n  };\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// Component to display inventory stock grouped by product\r\n@Component({\r\n  selector: 'spa-inventory-stock',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class InventoryStockComponent implements OnInit {\r\n\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Inventory Stock',\r\n    tableConfig: this.inventoryService.inventoryStockTableConfig\r\n  };\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// Component for managing bundle/combo products\r\n@Component({\r\n  selector: 'spa-bundle-products',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class BundleProductsComponent implements OnInit {\r\n\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Bundle Products',\r\n    tableConfig: this.inventoryService.bundleProductsTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { InventoryService } from '../../../services/inventory.service';\r\n\r\n// ServiceItems component for managing service items\r\n@Component({\r\n  selector: 'spa-service-items',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class ServiceItemsComponent {\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Services',\r\n    tableConfig: this.inventoryService.serviceItemsTableConfig\r\n  };\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { ProductsComponent } from '../../pages/inventory/products/products.component';\nimport { InventoryItemsComponent } from '../../pages/inventory/inventory-items/inventory-items.component';\nimport { RequisitionsComponent } from '../../pages/inventory/requisitions/requisitions.component';\nimport { InventoryAdjustmentsComponent } from '../../pages/inventory/inventory-adjustments/inventory-adjustments.component';\nimport { InventoryReturnsComponent } from '../../pages/inventory/inventory-returns/inventory-returns.component';\nimport { InventoryTransactionsComponent } from '../../pages/inventory/inventory-transactions/inventory-transactions.component';\nimport { InventoryDashboardComponent } from '../../pages/inventory/inventory-dashboard/inventory-dashboard.component';\nimport { InventoryStockComponent } from '../../pages/inventory/inventory-stock/inventory-stock.component';\nimport { BundleProductsComponent } from '../../pages/inventory/bundle-products/bundle-products.component';\nimport { ServiceItemsComponent } from '../../pages/inventory/service-items/service-items.component';\n\n// Changed: Exported routes array for use by SpaHomeRoutingModule\nexport const INVENTORY_ROUTES: Routes = [\n  { path: \"products\", component: ProductsComponent },\n  { path: \"service-items\", component: ServiceItemsComponent },\n  { path: \"items\", component: InventoryItemsComponent },\n  { path: \"requisitions\", component: RequisitionsComponent },\n  { path: \"adjustments\", component: InventoryAdjustmentsComponent },\n  { path: \"returns\", component: InventoryReturnsComponent },\n  { path: \"transactions\", component: InventoryTransactionsComponent },\n  { path: \"dashboard\", component: InventoryDashboardComponent },\n  { path: \"stock\", component: InventoryStockComponent },\n  { path: \"bundle-products\", component: BundleProductsComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(INVENTORY_ROUTES)],\n  exports: [RouterModule]\n})\nexport class InventoryRoutingModule { }\n","import { inject, Injectable } from '@angular/core';\r\nimport { FormConfig, TableConfig, DetailsDialogConfig, Button, StepConfig } from '../classes/Classes';\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { InventoryService } from './inventory.service'; // Changed: Import for product detailsConfig reference\r\n\r\n// Changed: Sales service extracted from inventory.service.ts for Sales module\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class SalesService {\r\n\r\n  private dataService = inject(DataServiceLib);\r\n  private inventoryService = inject(InventoryService); // Changed: Reference for product detailsConfig\r\n\r\n  //--------------------------Sales Order Items-------------------------\r\n\r\n  salesOrderItemFormConfig: FormConfig = {\r\n    title: 'Sales Order Item',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'productID', type: 'select', alias: 'Product', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.inventoryService.productDetailsConfig },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity', required: true },\r\n      { name: 'unitPrice', type: 'money', alias: 'Unit Price', required: true },\r\n      { name: 'discount', type: 'money', alias: 'Discount' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total', readonly: true },\r\n      { name: 'inventoryItemID', type: 'select', alias: 'Serial Number', loadAction: { url: 'inventoryitems/list/x' } }\r\n    ],\r\n    loadAction: { url: 'salesorderitems/id' }\r\n  }\r\n\r\n  salesOrderItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'unitPrice', type: 'money', alias: 'Unit Price' },\r\n      { name: 'discount', type: 'money', alias: 'Discount' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total' },\r\n      { name: 'serialNumber', type: 'text', alias: 'Serial Number' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'salesorderitems?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'salesorderitems?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'salesorderitems?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'salesorderitems/x/x' }, loadCriteria: 'order', loadIDField: 'salesOrderID',\r\n    formConfig: this.salesOrderItemFormConfig\r\n  }\r\n\r\n  //--------------------------Sales Orders-------------------------\r\n\r\n  salesOrderFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capSalesOrders] },\r\n    title: 'Sales Order',\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'orderInfo', type: 'section', alias: 'Order Information' },\r\n      { name: 'orderNumber', type: 'text', alias: 'Order #', readonly: true, section: 'orderInfo' },\r\n      { name: 'customerID', type: 'select', required: true, alias: 'Customer', section: 'orderInfo', loadAction: { url: 'customers/list/x' }, detailsConfig: this.dataService.customerDetailsConfig },\r\n      { name: 'orderDate', type: 'date', required: true, alias: 'Order Date', section: 'orderInfo' },\r\n      { name: 'requiredDate', type: 'date', alias: 'Required Date', section: 'orderInfo' },\r\n      { name: 'quickProcess', type: 'section', alias: 'Quick Processing' },\r\n      { name: 'quickDelivery', type: 'checkbox', alias: 'Quick Delivery (Skip to Delivered)', section: 'quickProcess' },\r\n      { name: 'deliveredDate', type: 'date', alias: 'Delivery Date', section: 'quickProcess' },\r\n      { name: 'paymentInfo', type: 'section', alias: 'Payment (For Delivery)' },\r\n      { name: 'paymentMethod', type: 'select', alias: 'Payment Method', section: 'paymentInfo', options: [{ name: 'Cash', value: 0 }, { name: 'Bank Transfer', value: 1 }, { name: 'Mobile Money', value: 2 }, { name: 'Card', value: 3 }, { name: 'Credit', value: 4 }, { name: 'Complementary', value: 5 }] },\r\n      { name: 'paymentReference', type: 'text', alias: 'Payment Reference', section: 'paymentInfo' },\r\n      { name: 'status', type: 'select', alias: 'Status', readonly: true, loadAction: { url: 'salesorders/list/status' } },\r\n      { name: 'totals', type: 'section', alias: 'Totals' },\r\n      { name: 'subTotal', type: 'money', alias: 'Sub Total', readonly: true, section: 'totals' },\r\n      { name: 'discount', type: 'money', alias: 'Discount', section: 'totals' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals' },\r\n      { name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo' }\r\n    ],\r\n    loadAction: { url: 'salesorders/id' },\r\n    heroField: 'salesOrderID'\r\n  }\r\n\r\n  salesOrderEditButton: Button = { name: 'edit', dialog: true, action: { url: 'salesorders?action=edit', method: 'post' } }\r\n  salesOrderConfirmButton: Button = { name: 'confirm', display: 'Confirm Order', icon: { name: 'check_circle', color: 'primary' }, inDialog : true, action: { url: 'salesorders?action=confirm', method: 'post', successMessage: 'Order Confirmed' }, confirm: { message: 'Confirm this order?' }, visible: (row) => row.status === 0 }\r\n  salesOrderDeliverButton: Button = { name: 'deliver', display: 'Mark Delivered', icon: { name: 'local_shipping', color: 'green' }, inDialog : true, action: { url: 'salesorders?action=deliver', method: 'post', successMessage: 'Order Delivered' }, confirm: { message: 'Mark this order as delivered?' }, visible: (row) => row.status === 1 }\r\n\r\n  salesOrderDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.salesOrderFormConfig,\r\n    tableConfigs: [this.salesOrderItemsTableConfig],\r\n    heroField: 'salesOrderID',\r\n    buttons: [ this.salesOrderEditButton, this.salesOrderConfirmButton, this.salesOrderDeliverButton]\r\n  }\r\n\r\n  salesOrderViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.salesOrderDetailsConfig }\r\n\r\n  salesOrdersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['orderNumber', 'displayCustomerName', 'orderDate'],\r\n    columns: [\r\n      { name: 'orderNumber', type: 'text', alias: 'Order #' },\r\n      { name: 'displayCustomerName', type: 'text', alias: 'Customer' },\r\n      { name: 'orderDate', type: 'date', alias: 'Order Date' },\r\n      { name: 'requiredDate', type: 'date', alias: 'Required Date' },\r\n      { name: 'deliveredDate', type: 'date', alias: 'Delivered Date' },\r\n      { name: 'status', type: 'text', alias: 'Status' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' },\r\n      { name: 'pendingApproval', type: 'checkbox', alias: 'Pending' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'New Order', dialog: true, action: { url: 'salesorders?action=create', method: 'post' }, onSuccessButton: this.salesOrderViewButton},\r\n      { name: 'view', dialog: true, detailsConfig: this.salesOrderDetailsConfig },\r\n      { name: 'edit', dialog: true, detailsConfig: this.salesOrderDetailsConfig },\r\n      { name: 'delete', dialog: true, action: { url: 'salesorders?action=delete', method: 'post' } },\r\n      this.salesOrderConfirmButton,\r\n      this.salesOrderDeliverButton\r\n    ],\r\n    loadAction: { url: 'salesorders/all/x' },\r\n    formConfig: this.salesOrderFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'SalesOrder'\r\n  }\r\n\r\n  //--------------------------Sale Items-------------------------\r\n\r\n  saleItemFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capSales] },\r\n    title: 'Sale Item',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'productID', type: 'select', required: true, alias: 'Product', span: true, loadAction: { url: 'products/list/x' },\r\n        onSelectChange: (selectedProductId: number, formData: any, option?: any) => {\r\n          if (option && option.sellingPrice) {\r\n            formData.unitPrice = option.sellingPrice;\r\n          }\r\n        }\r\n      },\r\n      { name: 'quantity', type: 'number', required: true, alias: 'Quantity' },\r\n      { name: 'unitPrice', type: 'money', required: true, alias: 'Unit Price' },\r\n      { name: 'discount', type: 'money', alias: 'Discount', hideOnCreate: true },\r\n      { name: 'inventoryItemID', type: 'select', alias: 'Serial Number', loadAction: { url: 'inventoryitems/list/serialized' } }\r\n    ],\r\n    loadAction: { url: 'saleitems/id' }\r\n  }\r\n\r\n  saleItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Items',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productName', type: 'text', alias: 'Product' },\r\n      { name: 'quantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'unitPrice', type: 'money', alias: 'Unit Price' },\r\n      { name: 'discount', type: 'money', alias: 'Discount' },\r\n      { name: 'lineTotal', type: 'money', alias: 'Line Total' },\r\n      { name: 'serialNumber', type: 'text', alias: 'Serial Number' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Item', dialog: true, action: { url: 'saleitems?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'saleitems?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'saleitems?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'saleitems/x/x' }, loadCriteria: 'sale', loadIDField: 'saleID',\r\n    formConfig: this.saleItemFormConfig\r\n  }\r\n\r\n  //--------------------------Sales-------------------------\r\n\r\n  saleFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capSales] },\r\n    title: 'Sale',\r\n    fixedTitle: true,\r\n    alertConfig: {\r\n      compact: true,\r\n      sticky : true,\r\n      messages: [\r\n        { message: 'Please add sale items and click complete to finalise the sale', type: 'success',\r\n          showCondition: (x: any) => x.paymentStatus === 0\r\n        }\r\n      ]\r\n    },\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'saleInfo', type: 'section', alias: 'Sale Information' },\r\n      { name: 'saleDate', type: 'date', required: true, alias: 'Sale Date', section: 'saleInfo', infoMessage: 'Date when the sale was completed' },\r\n      { name: 'customerID', type: 'select', required: true, alias: 'Customer', section: 'saleInfo', loadAction: { url: 'customers/list/x' }, detailsConfig: this.dataService.customerDetailsConfig },\r\n      { name: 'timing', type: 'select', required: true, alias: 'Transaction Type', section: 'saleInfo', loadAction: { url: 'sales/list/timing' }, defaultFirstValue : true, infoMessage: 'Cash Sale (pay now) or Credit Sale (pay later)' },\r\n      { name: 'currencyID', type: 'select', alias: 'Currency', section: 'saleInfo', loadAction: { url: 'currencies/list/x' }, defaultFirstValue: true, infoMessage: 'Currency for this sale (defaults to base currency)' }, // Changed: Added currency select for multi-currency sales\r\n      { name: 'paymentMethod', type: 'select', required: true, alias: 'Payment Method', section: 'saleInfo', defaultFirstValue: true, infoMessage: 'Method of payment used for this sale', requiredCondition: x => x.timing === 0, hiddenCondition: x => x.timing === 1,\r\n        options: [\r\n          { name: 'Cash', value: 0 },\r\n          { name: 'Bank Transfer', value: 1 },\r\n          { name: 'Mobile Money', value: 2 },\r\n          { name: 'Card', value: 3 },\r\n          { name: 'Complementary', value: 5 }\r\n        ],\r\n      },\r\n      { name: 'multipleProducts', type: 'checkbox', alias: 'Multiple Products', defaultValue: false, hideOnExists: true, infoMessage: 'Check this box if you want to add multiple products to this sale' },\r\n      { name: 'saleType', type: 'select', required: true, alias: 'Sale Type', section: 'saleInfo', options: [{ name: 'Quick Sale', value: 0 }, { name: 'From Order', value: 1 }], defaultFirstValue: true, hideOnCreate: true, infoMessage: 'Select if this is a quick sale or created from an order' },\r\n      { name: 'quickSaleItem', type: 'section', alias: 'Quick Sale Item', hiddenCondition: x => x.multipleProducts === true || x.saleID },\r\n      { name: 'productID', type: 'select', required: true, alias: 'Product', section: 'quickSaleItem', span: true, loadAction: { url: 'products/list/x' }, hiddenCondition: x => x.multipleProducts === true,\r\n        onSelectChange: (selectedProductId: number, formData: any, option?: any) => {\r\n          if (option && option.sellingPrice) {\r\n            formData.unitPrice = option.sellingPrice;\r\n          }\r\n        }\r\n      },\r\n      { name: 'quantity', type: 'number', required: true, alias: 'Quantity', section: 'quickSaleItem', defaultValue: 1, hiddenCondition: x => x.multipleProducts === true, infoMessage: 'Quantity of the product' },\r\n      { name: 'unitPrice', type: 'money', required: true, alias: 'Unit Price', section: 'quickSaleItem', hiddenCondition: x => x.multipleProducts === true, infoMessage: 'Price per unit' },\r\n      { name: 'totals', type: 'section', alias: 'Totals', collapsed: true, hideOnCreate: true },\r\n      { name: 'subTotal', type: 'money', alias: 'Sub Total', readonly: true, section: 'totals', infoMessage: 'Total before tax and discounts' },\r\n      { name: 'taxAmount', type: 'money', alias: 'Tax Amount', section: 'totals', infoMessage: 'Tax amount applied to the sale' },\r\n      { name: 'discount', type: 'money', alias: 'Discount', section: 'totals', infoMessage: 'Discount amount applied to the sale' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals', infoMessage: 'Final amount after tax and discounts' },\r\n      { name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },\r\n      { name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo', infoMessage: 'Additional notes or comments about this sale' },\r\n      { name: 'paymentReference', type: 'text', alias: 'Payment Reference', section: 'additionalInfo', infoMessage: 'Transaction reference number or payment receipt', hiddenCondition: x => x.timing === 1 },\r\n    ],\r\n    loadAction: { url: 'sales/id' },\r\n    heroField: 'saleID'\r\n  }\r\n\r\n  saleStepConfig: StepConfig = {\r\n    valueField: 'paymentStatus',\r\n    sticky: true,\r\n    steps: [\r\n      { name: 'Unpaid', value: 0, icon: 'hourglass_empty' },\r\n      { name: 'Paid', value: 1, icon: 'check_circle' },\r\n      { name: 'Partial', value: 2, icon: 'payment' }\r\n    ]\r\n  }\r\n\r\n  salePaymentFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capSales] },\r\n    title: 'Record Payment',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'saleID', type: 'number', hidden: true },\r\n      { name: 'paymentDate', type: 'date', alias: 'Payment Date', required: true },\r\n      { name: 'method', type: 'select', alias: 'Payment Method', required: true, defaultValue: 1, loadAction: { url: 'invoicepayments/list/methods' } },\r\n      { name: 'currencyID', type: 'select', alias: 'Currency', loadAction: { url: 'currencies/list/x' }, defaultFirstValue: true, infoMessage: 'Currency for this payment (defaults to base currency)' }, // Changed: Added currency select for multi-currency sale payments\r\n      { name: 'totalAmount', type: 'label', alias: 'Total Amount', readonly: true },\r\n      { name: 'amount', type: 'money', alias: 'Amount', required: true, span: true },\r\n      { name: 'paymentReferenceTemp', type: 'text', alias: 'Reference', span: true }\r\n    ],\r\n  }\r\n\r\n  salePaymentCreateButton: Button = { name: 'edit', action: { url: 'sales?action=record-payment', method: 'post', successMessage: 'Payment recorded successfully' } };\r\n\r\n  salePaymentDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.salePaymentFormConfig,\r\n    heroField: 'saleID',\r\n    mode: 'edit',\r\n    buttons: [this.salePaymentCreateButton]\r\n  }\r\n\r\n  saleRecordPaymentButton: Button = { name: 'record-payment', display: 'Record Payment', inDialog: true, dialog: true, icon: { name: 'payment', color: 'blue' }, detailsConfig: this.salePaymentDetailsConfig, visible: x => x.timing === 1 && x.paymentStatus !== 1 }\r\n\r\n  salePaymentsTableConfig: TableConfig = {\r\n    tabTitle: 'Payment History',\r\n    showFilter: false,\r\n    minColumns: ['paymentDate', 'amount', 'methodName'],\r\n    columns: [\r\n      { name: 'paymentDate', type: 'date', alias: 'Date' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'methodName', type: 'text', alias: 'Method' },\r\n      { name: 'reference', type: 'text', alias: 'Reference' }\r\n    ],\r\n    loadAction: { url: 'invoicepayments/x/x' }, loadCriteria: 'invoice', loadIDField: 'invoiceID',\r\n    hideTabCondition: (x: any) => x.timing !== 1\r\n  }\r\n\r\n  saleDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.saleFormConfig,\r\n    tableConfigs: [this.saleItemsTableConfig, this.salePaymentsTableConfig],\r\n    heroField: 'saleID',\r\n    stepConfig: this.saleStepConfig,\r\n    buttons: [\r\n        { name: 'complete', display: 'Complete Sale', color: 'primary', inDialog: true, action: { url: 'sales?action=complete', method: 'post' }, confirm: { message: 'Complete this sale? This will reduce inventory and create accounting entries.' }, visible: x => x.timing === 0 && x.paymentStatus !== 1 },\r\n        this.saleRecordPaymentButton\r\n      ]\r\n  }\r\n\r\n  saleViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.saleDetailsConfig }\r\n  saleCreateButton: Button = { name: 'create', display: 'Quick Sale', dialog: true, action: { url: 'sales?action=create', method: 'post' } };\r\n  saleVoidButton: Button = { name: 'void', display: 'Void', icon: { name: 'undo', color: 'red' }, confirm: { message: 'Caution: Voiding this sale will reverse all inventory transactions and void accounting entries. This action cannot be undone.' }, action: { url: 'sales?action=void', method: 'post', successMessage: 'Sale voided successfully' }, visible: (row) => !row.deleted };\r\n\r\n  salesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['saleNumber', 'displayCustomerName', 'totalAmount'],\r\n    columns: [\r\n      { name: 'saleDate', type: 'date', alias: 'Date' },\r\n      { name: 'displayCustomerName', type: 'text', alias: 'Customer' },\r\n      { name: 'detailsDisplay', type: 'text', alias: 'Details' }, // Changed: Renamed from productsDisplay/Products\r\n      { name: 'timingName', type: 'text', alias: 'Payment' },\r\n      { name: 'paymentStatus', type: 'icon', alias: 'Status', detailsConfig: this.saleDetailsConfig,\r\n        icons: [\r\n          { name: 'article', color: '#9E9E9E', condition: (x: any) => x.paymentStatus === 0, tip: 'Unpaid' },\r\n          { name: 'inventory_2', color: '#2196F3', condition: (x: any) => x.paymentStatus === 2, tip: 'Partial' },\r\n          { name: 'check_circle', color: '#4CAF50', condition: (x: any) => x.paymentStatus === 1, tip: 'Paid' }\r\n        ]\r\n      },\r\n      { name: 'subTotal', type: 'money', alias: 'Sub Total' },\r\n      { name: 'taxAmount', type: 'money', alias: 'Tax' },\r\n      { name: 'totalAmount', type: 'money', alias: 'Total' }\r\n    ],\r\n    buttons: [\r\n      this.saleViewButton,\r\n      this.saleRecordPaymentButton,\r\n      this.saleCreateButton,\r\n      this.saleVoidButton\r\n    ],\r\n    loadAction: { url: 'sales/all/x' },\r\n    formConfig: this.saleFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'Sale'\r\n  }\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { SalesService } from '../../../services/sales.service'; // Changed: Use SalesService instead of InventoryService\r\n\r\n@Component({\r\n  selector: 'spa-sales-orders',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class SalesOrdersComponent implements OnInit {\r\n  private salesService = inject(SalesService); // Changed: Use SalesService\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Sales Orders',\r\n    tableConfig: this.salesService.salesOrdersTableConfig // Changed: Use SalesService\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { SalesService } from '../../../services/sales.service'; // Changed: Use SalesService instead of InventoryService\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n  selector: 'app-sales',\r\n  template: '<spa-page [config]=\"config\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class SalesComponent {\r\n  private salesService = inject(SalesService); // Changed: Use SalesService\r\n\r\n  config: PageConfig = {\r\n    title: 'Sales',\r\n    tableConfig: this.salesService.salesTableConfig // Changed: Use SalesService\r\n  };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { TileConfig, ChartConfig } from '../../../classes/Classes';\r\n\r\n// Sales module dashboard with revenue tracking and pipeline visibility\r\n@Component({\r\n  selector: 'spa-sales-dashboard',\r\n  template: `\r\n    <div class=\"dashboard-container\">\r\n      <h4 class=\"dashboard-title\"><mat-icon>point_of_sale</mat-icon> Sales Dashboard</h4>\r\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\r\n      <!-- Changed: Chart tiles for sales visual indicators -->\r\n      <div style=\"margin-top: 16px;\"></div>\r\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\r\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .dashboard-container { padding: 16px; }\r\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class SalesDashboardComponent {\r\n  summaryTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'salesRevenue', alias: 'Sales Revenue (MTD)', color: '#4caf50', icon: 'attach_money', style: 'icon', info: 'Total sales revenue this month' }, // Changed: Removed prefix\r\n      { name: 'salesCount', alias: 'Sales Count', color: '#2196f3', icon: 'shopping_cart', style: 'icon', info: 'Number of sales this month' },\r\n      { name: 'avgSaleValue', alias: 'Avg Sale Value', color: '#ff9800', icon: 'analytics', style: 'icon', info: 'Average sale value this month' }, // Changed: Removed prefix\r\n      { name: 'creditSalesOutstanding', alias: 'Credit Outstanding', color: '#f44336', icon: 'credit_card', style: 'icon', info: 'Outstanding credit sale amounts' }, // Changed: Removed prefix\r\n      { name: 'topProduct', alias: 'Top Product', color: '#9c27b0', icon: 'star', style: 'icon', info: 'Best selling product this month' },\r\n    ],\r\n    loadAction: { url: 'sales/dashboard-summary/x' }, // Changed: Use module-specific CustomCriteria endpoint\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Chart-style tiles now use loadAction with dataField for dynamic data\r\n  chartTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'conversionRate', alias: 'Conversion Rate', color: '#4caf50', chart: { type: 'doughnut', gaugeColor: '#4caf50', height: 130, dataField: 'conversionRate' }, footer: 'Quote to sale conversion', footerIcon: 'swap_horiz' }, // Changed: dataField replaces gaugeValue\r\n      { name: 'salesTrendSpark', alias: 'Sales Trend', color: '#2196f3', chart: { type: 'line', color: '#2196f3', height: 100, dataField: 'salesTrendSpark' }, footer: 'Last 12 months', footerIcon: 'show_chart' }, // Changed: dataField replaces inline data\r\n      { name: 'paymentSplit', alias: 'Payment Methods', color: '#9c27b0', chart: { type: 'doughnut', colors: ['#4caf50', '#2196f3', '#ff9800', '#9c27b0'], height: 130, dataField: 'paymentSplit' }, footer: 'Current distribution', footerIcon: 'payment' }, // Changed: dataField replaces inline data\r\n    ],\r\n    loadAction: { url: 'sales/dashboard-chart-tiles/x' }, // Changed: Load chart tile data from API\r\n    loadInit: true\r\n  };\r\n\r\n  chartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'salesTrend', title: 'Sales Revenue Trend', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#4caf50', '#2196f3'], showLegend: true }, // Changed: showLegend for line chart\r\n      { name: 'paymentMethods', title: 'Payment Method Breakdown', type: 'doughnut', height: '300px', colors: ['#4caf50', '#2196f3', '#ff9800', '#9c27b0', '#f44336'] },\r\n      { name: 'topProducts', title: 'Top Selling Products', type: 'bar', height: '300px', colors: ['#4caf50', '#66bb6a', '#81c784', '#a5d6a7', '#c8e6c9'] },\r\n      { name: 'orderPipeline', title: 'Sales Order Pipeline', type: 'bar', height: '300px', colors: ['#9e9e9e', '#2196f3', '#4caf50', '#f44336', '#ff9800'] },\r\n    ],\r\n    loadAction: { url: 'sales/dashboard-charts/x' }, // Changed: Use module-specific CustomCriteria endpoint\r\n    loadInit: true,\r\n    columns: 2\r\n  };\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { SalesOrdersComponent } from '../../pages/sales/sales-orders/sales-orders.component';\nimport { SalesComponent } from '../../pages/sales/sales/sales.component';\nimport { SalesDashboardComponent } from '../../pages/sales/sales-dashboard/sales-dashboard.component';\n\nexport const SALES_ROUTES: Routes = [\n  { path: \"orders\", component: SalesOrdersComponent },\n  { path: \"sales\", component: SalesComponent },\n  { path: \"dashboard\", component: SalesDashboardComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(SALES_ROUTES)],\n  exports: [RouterModule]\n})\nexport class SalesRoutingModule { }\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { PurchasingService } from '../../../services/purchasing.service'; // Changed: Use PurchasingService instead of InventoryService\r\n\r\n@Component({\r\n  selector: 'spa-purchase-orders',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class PurchaseOrdersComponent implements OnInit {\r\n\r\n  private purchasingService = inject(PurchasingService); // Changed: Inject PurchasingService\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Purchase Orders',\r\n    tableConfig: this.purchasingService.purchaseOrdersTableConfig // Changed: Use PurchasingService config\r\n  };\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { PurchasingService } from '../../../services/purchasing.service'; // Changed: Use PurchasingService instead of InventoryService\r\n\r\n// Changed: Component moved from inventory module to purchasing module\r\n@Component({\r\n  selector: 'spa-inventory-receipts',\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>',\r\n  standalone: false\r\n})\r\nexport class InventoryReceiptsComponent implements OnInit {\r\n\r\n  private purchasingService = inject(PurchasingService); // Changed: Inject PurchasingService\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Purchases', // Changed: \"Inventory Receipts\" → \"Purchases\"\r\n    tableConfig: this.purchasingService.purchasesTableConfig // Changed: inventoryReceiptsTableConfig → purchasesTableConfig\r\n  };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { TileConfig, ChartConfig } from '../../../classes/Classes';\r\n\r\n// Purchasing module dashboard with procurement tracking\r\n@Component({\r\n  selector: 'spa-purchasing-dashboard',\r\n  template: `\r\n    <div class=\"dashboard-container\">\r\n      <h4 class=\"dashboard-title\"><mat-icon>local_shipping</mat-icon> Purchasing Dashboard</h4>\r\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\r\n      <!-- Changed: Chart tiles for purchasing visual indicators -->\r\n      <div style=\"margin-top: 16px;\"></div>\r\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\r\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .dashboard-container { padding: 16px; }\r\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class PurchasingDashboardComponent {\r\n  summaryTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'totalPurchases', alias: 'Purchases (MTD)', color: '#2196f3', icon: 'shopping_bag', style: 'icon', info: 'Total purchase amount this month' },\r\n      { name: 'openPOs', alias: 'Open POs', color: '#ff9800', icon: 'pending_actions', style: 'icon', info: 'Purchase orders awaiting fulfillment' },\r\n      { name: 'pendingPurchases', alias: 'Pending Purchases', color: '#9c27b0', icon: 'inventory_2', style: 'icon', info: 'Purchases awaiting processing' }, // Changed: pendingReceipts → pendingPurchases\r\n      { name: 'supplierPaymentsOutstanding', alias: 'AP Outstanding', color: '#f44336', icon: 'payments', style: 'icon', info: 'Outstanding supplier payment amounts' },\r\n      { name: 'purchasesThisMonth', alias: 'Purchases (MTD)', color: '#4caf50', icon: 'receipt', style: 'icon', info: 'Purchases processed this month' }, // Changed: receiptsThisMonth → purchasesThisMonth\r\n    ],\r\n    loadAction: { url: 'purchases/dashboard-summary/x' }, // Changed: inventoryreceipts → purchases\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Chart-style tiles now use loadAction with dataField for dynamic data\r\n  chartTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'fulfillmentRate', alias: 'Fulfillment Rate', color: '#4caf50', chart: { type: 'doughnut', gaugeColor: '#4caf50', height: 130, dataField: 'fulfillmentRate' }, footer: 'PO fulfillment rate', footerIcon: 'verified' }, // Changed: dataField replaces gaugeValue\r\n      { name: 'spendTrendSpark', alias: 'Spend Trend', color: '#2196f3', chart: { type: 'line', color: '#2196f3', height: 100, dataField: 'spendTrendSpark' }, footer: 'Last 12 months', footerIcon: 'show_chart' }, // Changed: dataField replaces inline data\r\n      { name: 'poStatusSplit', alias: 'PO Status', color: '#ff9800', chart: { type: 'doughnut', colors: ['#9e9e9e', '#2196f3', '#4caf50', '#f44336'], height: 130, dataField: 'poStatusSplit' }, footer: 'Current distribution', footerIcon: 'assignment' }, // Changed: dataField replaces inline data\r\n    ],\r\n    loadAction: { url: 'purchases/dashboard-chart-tiles/x' }, // Changed: inventoryreceipts → purchases\r\n    loadInit: true\r\n  };\r\n\r\n  chartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'purchaseTrend', title: 'Purchase Spend Trend', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#2196f3', '#f44336'], showLegend: true }, // Changed: showLegend for line chart\r\n      { name: 'poStatus', title: 'PO Status Distribution', type: 'doughnut', height: '300px', colors: ['#9e9e9e', '#2196f3', '#4caf50', '#f44336', '#ff9800'] },\r\n      { name: 'topSuppliers', title: 'Top Suppliers by Spend', type: 'bar', height: '300px', colors: ['#2196f3', '#42a5f5', '#64b5f6', '#90caf9', '#bbdefb'] },\r\n      { name: 'apAging', title: 'AP Aging Breakdown', type: 'bar', height: '300px', colors: ['#4caf50', '#ff9800', '#ff5722', '#f44336', '#b71c1c'] },\r\n    ],\r\n    loadAction: { url: 'purchases/dashboard-charts/x' }, // Changed: inventoryreceipts → purchases\r\n    loadInit: true,\r\n    columns: 2\r\n  };\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { PurchaseOrdersComponent } from '../../pages/purchasing/purchase-orders/purchase-orders.component';\nimport { InventoryReceiptsComponent } from '../../pages/purchasing/inventory-receipts/inventory-receipts.component';\nimport { PurchasingDashboardComponent } from '../../pages/purchasing/purchasing-dashboard/purchasing-dashboard.component';\n\nexport const PURCHASING_ROUTES: Routes = [\n  { path: \"orders\", component: PurchaseOrdersComponent },\n  { path: \"purchases\", component: InventoryReceiptsComponent },\n  { path: \"dashboard\", component: PurchasingDashboardComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(PURCHASING_ROUTES)],\n  exports: [RouterModule]\n})\nexport class PurchasingRoutingModule { }\n","import { Component, inject } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { PageConfig } from '../../classes/Classes';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-employees',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class EmployeesComponent {\r\n  private dataService = inject(DataServiceLib);\r\n  private authService = inject(AuthService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Employees',\r\n    tableConfig: this.dataService.employeesTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { PageConfig } from '../../classes/Classes';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-departments',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class DepartmentsComponent {\r\n  private dataService = inject(DataServiceLib);\r\n  private messageService = inject(MessageService);\r\n  private authService = inject(AuthService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Departments',\r\n    tableConfig: this.dataService.departmentTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { PageConfig } from '../../classes/Classes';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-positions',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class PositionsComponent {\r\n  private dataService = inject(DataServiceLib);\r\n  private authService = inject(AuthService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Positions',\r\n    tableConfig: this.dataService.positionsTableConfig\r\n  };\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'spa-grades',\r\n    templateUrl: './grades.component.html',\r\n    styleUrls: ['./grades.component.css'],\r\n    standalone: false\r\n})\r\nexport class GradesComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n}\r\n","<h4>Grades</h4>\r\n<hr>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TableConfig, ApiResponse } from '../../classes/Classes';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n    selector: 'spa-onboarding', // Changed: renamed selector from spa-welcome\r\n    templateUrl: './onboarding.component.html', // Changed: updated template file reference\r\n    styleUrls: ['./onboarding.component.css'], // Changed: updated style file reference\r\n    standalone: false\r\n})\r\nexport class OnboardingComponent implements OnInit { // Changed: renamed class from WelcomeComponent\r\n\r\n  constructor(public dataService : DataServiceLib, public authService: AuthService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.loadMeta();\r\n\r\n    this.authService.loggedUserFullName.subscribe(x => this.username = x)\r\n  }\r\n\r\n  username;\r\n\r\n  step = \"terms\"\r\n  agree = false\r\n  own = true;\r\n  invitations = false;\r\n\r\n  myTenant\r\n\r\n  loadMeta(){\r\n    this.dataService.CallApi({ url:'tenants/welcome_meta/x'}).subscribe((api) => {\r\n      this.invitations = api.data.invitations;\r\n      this.own = api.data.own;\r\n      this.myTenant = api.data.tenant;\r\n    })\r\n  }\r\n\r\n  renameTenant() {\r\n\r\n    this.dataService.CallApi({ url: 'tenants/dto?action=rename', method: 'post' }, this.myTenant).subscribe((apiResponse: ApiResponse) => {\r\n\r\n      if (apiResponse.success) {\r\n        this.authService.updateTenantName(this.myTenant.name)\r\n      }\r\n    });\r\n  }\r\n\r\n  next(){\r\n\r\n    if (this.step == 'terms' && this.own){\r\n      this.step = \"name\"\r\n      return;\r\n    }\r\n    else if (this.step == \"terms\" && !this.own) {\r\n      this.step = \"hi\"\r\n      return;\r\n    }\r\n    else if (this.step == \"name\" && this.own){\r\n\r\n      this.renameTenant();\r\n      if (this.invitations == true){\r\n        this.step = \"invitations\"\r\n        return;\r\n      }\r\n\r\n\r\n    }\r\n\r\n\r\n    this.setWelcome();\r\n  }\r\n\r\n  setWelcome() {\r\n    this.dataService.CallApi({ url: 'tenants/set_welcome/x' }).subscribe((api) => {\r\n      this.home();\r\n    })\r\n  }\r\n\r\n  home(){\r\n    this.dataService.Navigate('home');\r\n  }\r\n\r\n\r\n  invTableConfig: TableConfig = {\r\n\r\n    greyOut: (value) => value.accepted == false,\r\n    elevation: 'low',\r\n    minColumns: ['tenantName'],\r\n    minButtons: ['accept', 'decline'],\r\n\r\n    columns: [\r\n      { name: 'tenantName', alias: 'Organisation', type: 'text' },\r\n      { name: 'owner', type: 'text', },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'accept', icon: { 'name': 'done', }, color: 'green', action: { url: 'members/dto?action=accept', method: 'post', }, confirm: { message: 'Accept ?' }, disabled: (x) => x.accepted },\r\n      { name: 'decline', icon: { 'name': 'close', }, color: 'red', action: { url: 'members/dto?action=remove', method: 'post', }, confirm: { message: 'Decline ?' }, disabled: (x) => x.accepted },\r\n    ],\r\n\r\n    loadAction: { url: 'tenants/invitations/x' },\r\n\r\n  }\r\n\r\n}\r\n","<label class=\"title\">Welcome,  {{username}}</label>\r\n\r\n\r\n\r\n<!-- terms -->\r\n<div class=\"mt-3\" *ngIf=\"step=='terms'\">\r\n\r\n  <label class=\"subtitle text-muted mb-2\" >We care about our users and are dedicated to protecting your data and privacy -\r\n    thats why we want to be clear about what data we collect and how we use it to improve your experience.</label>\r\n\r\n  <br>\r\n  <spa-check display=\"I agree to the Terms and Privacy Policy\" [(value)]=\"agree\"></spa-check>\r\n</div>\r\n\r\n<!-- owner -->\r\n<div class=\"mt-3\" *ngIf=\"step=='name' && own\">\r\n\r\n  <label class=\"subtitle text-muted\" style=\" margin-bottom: 20px;\">The follow steps will guide you to customise your application.</label>\r\n\r\n  <div style=\"max-width: 400px;\">\r\n   <spa-text display=\"Organisation Name\" [(value)]=\"myTenant.name\" ></spa-text>\r\n  </div>\r\n\r\n  <label class=\"text-muted\" style=\" font-size: 12px;\">You can change the Organisation's name to your team or company name.</label><br>\r\n  <label class=\"text-muted\" style=\" font-size: 12px;margin-top: 10px;\">The name can be changed later.</label>\r\n\r\n</div>\r\n\r\n<!-- guest -->\r\n<div *ngIf=\"step=='hi' && !own\">\r\n  <label class=\"subtitle text-muted\">You are now signed in to {{myTenant.name}}.</label>\r\n</div>\r\n\r\n\r\n<!-- invitations -->\r\n<div class=\"mt-3\" *ngIf=\"step=='invitations' && own\">\r\n\r\n  <label class=\"subtitle text-muted\">You have been requested to join the following organisations. If you accept, you have the option to switch to that org now or stay in you org.</label><br>\r\n  <label class=\"text-muted\" style=\" font-size: 12px;margin-top: 10px;\">You will be able to switch later.</label>\r\n  <spa-invitations-table></spa-invitations-table>\r\n\r\n</div>\r\n\r\n\r\n<!-- Actions -->\r\n<div class=\"mt-3\">\r\n  <button  mat-stroked-button color=\"primary\" [disabled]=\"!agree\" (click)=\"next()\">Next <mat-icon>arrow_right_alt</mat-icon></button>\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { EmployeesComponent } from '../../pages/employees/employees.component';\nimport { DepartmentsComponent } from '../../pages/departments/departments.component';\nimport { PositionsComponent } from '../../pages/positions/positions.component';\nimport { GradesComponent } from '../../pages/grades/grades.component';\nimport { OnboardingComponent } from '../../pages/onboarding/onboarding.component';\n\nexport const HR_ROUTES: Routes = [\n  { path: \"employees\", component: EmployeesComponent },\n  { path: \"departments\", component: DepartmentsComponent },\n  { path: \"positions\", component: PositionsComponent },\n  { path: \"grades\", component: GradesComponent },\n  { path: \"onboarding\", component: OnboardingComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(HR_ROUTES)],\n  exports: [RouterModule]\n})\nexport class HRRoutingModule { }\n","import { inject, Injectable } from '@angular/core';\r\nimport { FormConfig, TableConfig, Button } from '../classes/Classes';\r\nimport { DataServiceLib } from './datalib.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class PayrollService {\r\n\r\n  private dataService = inject(DataServiceLib);\r\n\r\n  //--------------------------Salary Components (child of SalaryStructure)-------------------------\r\n\r\n  salaryComponentFormConfig: FormConfig = {\r\n    title: 'Salary Component',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'componentType', alias: 'Type', type: 'select', loadAction: { url: 'salarycomponents/list/component-type' }, required: true },\r\n      { name: 'calculationMethod', alias: 'Calculation', type: 'select', loadAction: { url: 'salarycomponents/list/calculation-method' }, required: true },\r\n      { name: 'sortOrder', alias: 'Sort Order', type: 'number', defaultValue: 0 },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', defaultValue: true },\r\n    ],\r\n    loadAction: { url: 'salarycomponents/id' },\r\n    heroField: 'salaryComponentID',\r\n  }\r\n\r\n  salaryComponentsTableConfig: TableConfig = {\r\n    tabTitle: 'Components',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'componentTypeName', type: 'text', alias: 'Type' },\r\n      { name: 'calculationMethodName', type: 'text', alias: 'Calculation' },\r\n      { name: 'sortOrder', type: 'text', alias: 'Order' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'salarycomponents?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'salarycomponents?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'salarycomponents?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'salarycomponents/x/x' }, loadCriteria: 'structure', loadIDField: 'salaryStructureID',\r\n    formConfig: this.salaryComponentFormConfig,\r\n  }\r\n\r\n  //--------------------------Salary Structures-------------------------\r\n\r\n  editSalaryStructureButton: Button = { name: 'edit', dialog: true, inDialog: true, action: { url: 'salarystructures?action=edit', method: 'post' } };\r\n\r\n  salaryStructureFormConfig: FormConfig = {\r\n    title: 'Salary Structure',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'description', type: 'text-area', rows: 2, span: true },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', defaultValue: true },\r\n    ],\r\n    loadAction: { url: 'salarystructures/id' },\r\n    heroField: 'salaryStructureID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  salaryStructuresTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'componentCount', 'employeeCount'],\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'description', type: 'text' },\r\n      { name: 'componentCount', type: 'text', alias: 'Components' },\r\n      { name: 'employeeCount', type: 'text', alias: 'Employees' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'salarystructures?action=create', method: 'post' } },\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.salaryStructureFormConfig,\r\n          heroField: 'salaryStructureID',\r\n          buttons: [this.editSalaryStructureButton],\r\n          tableConfigs: [this.salaryComponentsTableConfig],\r\n        }\r\n      },\r\n      { name: 'edit', dialog: true, action: { url: 'salarystructures?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'salarystructures?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'salarystructures/all/x' },\r\n    formConfig: this.salaryStructureFormConfig,\r\n    realTime: true,\r\n    entityName: 'SalaryStructure'\r\n  }\r\n\r\n  //--------------------------Statutory Deduction Bands (child of StatutoryDeductionType)-------------------------\r\n\r\n  statutoryDeductionBandFormConfig: FormConfig = {\r\n    title: 'Tax Band',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'validFrom', type: 'date', alias: 'Valid From', required: true },\r\n      { name: 'bandMin', type: 'money', alias: 'Minimum', required: true },\r\n      { name: 'bandMax', type: 'money', alias: 'Maximum' },\r\n      { name: 'rate', type: 'number', alias: 'Rate %', required: true },\r\n      { name: 'fixedAmount', type: 'money', alias: 'Fixed Amount' },\r\n    ],\r\n    loadAction: { url: 'statutorydeductionbands/id' },\r\n    heroField: 'statutoryDeductionBandID',\r\n  }\r\n\r\n  statutoryDeductionBandsTableConfig: TableConfig = {\r\n    tabTitle: 'Tax Bands',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'validFrom', type: 'date', alias: 'Valid From' },\r\n      { name: 'bandMin', type: 'money', alias: 'Min' },\r\n      { name: 'bandMax', type: 'money', alias: 'Max' },\r\n      { name: 'rate', type: 'text', alias: 'Rate %' },\r\n      { name: 'fixedAmount', type: 'money', alias: 'Fixed Amount' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'statutorydeductionbands?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'statutorydeductionbands?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'statutorydeductionbands?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'statutorydeductionbands/x/x' }, loadCriteria: 'type', loadIDField: 'statutoryDeductionTypeID',\r\n    formConfig: this.statutoryDeductionBandFormConfig,\r\n  }\r\n\r\n  //--------------------------Statutory Deduction Types-------------------------\r\n\r\n  editStatutoryDeductionTypeButton: Button = { name: 'edit', dialog: true, inDialog: true, action: { url: 'statutorydeductiontypes?action=edit', method: 'post' } };\r\n\r\n  statutoryDeductionTypeFormConfig: FormConfig = {\r\n    title: 'Statutory Deduction Type',\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'category', type: 'select', loadAction: { url: 'statutorydeductiontypes/list/deduction-category' }, required: true },\r\n      { name: 'referencedDeductionTypeID', alias: 'Referenced Deduction', type: 'select', loadAction: { url: 'statutorydeductiontypes/list/x' }, nullable: true, infoMessage: 'For levies calculated as % of another deduction' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', defaultValue: true },\r\n    ],\r\n    loadAction: { url: 'statutorydeductiontypes/id' },\r\n    heroField: 'statutoryDeductionTypeID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  statutoryDeductionTypesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['name', 'categoryName', 'bandCount'],\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'categoryName', type: 'text', alias: 'Category' },\r\n      { name: 'referencedDeductionTypeName', type: 'text', alias: 'Referenced Deduction' },\r\n      { name: 'bandCount', type: 'text', alias: 'Bands' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'statutorydeductiontypes?action=create', method: 'post' } },\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.statutoryDeductionTypeFormConfig,\r\n          heroField: 'statutoryDeductionTypeID',\r\n          buttons: [this.editStatutoryDeductionTypeButton],\r\n          tableConfigs: [this.statutoryDeductionBandsTableConfig],\r\n        }\r\n      },\r\n      { name: 'edit', dialog: true, action: { url: 'statutorydeductiontypes?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'statutorydeductiontypes?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'statutorydeductiontypes/all/x' },\r\n    formConfig: this.statutoryDeductionTypeFormConfig,\r\n    realTime: true,\r\n    entityName: 'StatutoryDeductionType'\r\n  }\r\n\r\n  //--------------------------Payslip Lines (child of Payslip)-------------------------\r\n\r\n  payslipLineFormConfig: FormConfig = {\r\n    title: 'Payslip Line',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'componentName', type: 'text', alias: 'Component', required: true },\r\n      { name: 'componentType', alias: 'Type', type: 'select', loadAction: { url: 'salarycomponents/list/component-type' }, required: true },\r\n      { name: 'amount', type: 'money', alias: 'Amount', required: true },\r\n      { name: 'isStatutory', type: 'checkbox', alias: 'Statutory' },\r\n      { name: 'sortOrder', alias: 'Sort Order', type: 'number', defaultValue: 0 },\r\n    ],\r\n    loadAction: { url: 'paysliplines/id' },\r\n    heroField: 'payslipLineID',\r\n  }\r\n\r\n  payslipLinesTableConfig: TableConfig = {\r\n    tabTitle: 'Payslip Lines',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'componentName', type: 'text', alias: 'Component' },\r\n      { name: 'componentTypeName', type: 'text', alias: 'Type' },\r\n      { name: 'isStatutory', type: 'checkbox', alias: 'Statutory' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'sortOrder', type: 'text', alias: 'Order' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Line', dialog: true, action: { url: 'paysliplines?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'paysliplines?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'paysliplines?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'paysliplines/x/x' }, loadCriteria: 'payslip', loadIDField: 'payslipID',\r\n    formConfig: this.payslipLineFormConfig,\r\n  }\r\n\r\n  //--------------------------Payslips (child of PayrollRun, also used in employee details)-------------------------\r\n\r\n  payslipFormConfig: FormConfig = {\r\n    title: 'Payslip',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'employeeName', alias: 'Employee', type: 'text', readonly: true },\r\n      { name: 'grossPay', alias: 'Gross Pay', type: 'money', readonly: true },\r\n      { name: 'totalDeductions', alias: 'Deductions', type: 'money', readonly: true },\r\n      { name: 'netPay', alias: 'Net Pay', type: 'money', readonly: true },\r\n      { name: 'statusName', alias: 'Status', type: 'text', readonly: true },\r\n    ],\r\n    loadAction: { url: 'payslips/id' },\r\n    heroField: 'payslipID',\r\n  }\r\n\r\n  payslipsChildTableConfig: TableConfig = {\r\n    tabTitle: 'Payslips',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'employeeName', type: 'text', alias: 'Employee' },\r\n      { name: 'grossPay', type: 'money', alias: 'Gross Pay' },\r\n      { name: 'totalDeductions', type: 'money', alias: 'Deductions' },\r\n      { name: 'netPay', type: 'money', alias: 'Net Pay' },\r\n      { name: 'statusName', type: 'text', alias: 'Status' },\r\n    ],\r\n    buttons: [\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.payslipFormConfig,\r\n          heroField: 'payslipID',\r\n          tableConfigs: [this.payslipLinesTableConfig],\r\n        }\r\n      },\r\n    ],\r\n    loadAction: { url: 'payslips/x/x' }, loadCriteria: 'run', loadIDField: 'payrollRunID',\r\n    formConfig: this.payslipFormConfig,\r\n  }\r\n\r\n  // Employee Payslip History (child table in Employee details)\r\n  employeePayslipHistoryTableConfig: TableConfig = {\r\n    tabTitle: 'Payslip History',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'grossPay', type: 'money', alias: 'Gross Pay' },\r\n      { name: 'totalDeductions', type: 'money', alias: 'Deductions' },\r\n      { name: 'netPay', type: 'money', alias: 'Net Pay' },\r\n      { name: 'statusName', type: 'text', alias: 'Status' },\r\n    ],\r\n    buttons: [\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.payslipFormConfig,\r\n          heroField: 'payslipID',\r\n          tableConfigs: [this.payslipLinesTableConfig],\r\n        }\r\n      },\r\n    ],\r\n    loadAction: { url: 'payslips/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n    formConfig: this.payslipFormConfig,\r\n  }\r\n\r\n  //--------------------------Employee Salary Components (child of Employee)-------------------------\r\n\r\n  employeeSalaryComponentFormConfig: FormConfig = {\r\n    title: 'Salary Component',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'salaryComponentID', alias: 'Component', type: 'select', loadAction: { url: 'salarycomponents/list/x' }, required: true },\r\n      { name: 'value', type: 'money', alias: 'Value', required: true },\r\n    ],\r\n    loadAction: { url: 'employeesalarycomponents/id' },\r\n    heroField: 'employeeSalaryComponentID',\r\n  }\r\n\r\n  employeeSalaryComponentsTableConfig: TableConfig = {\r\n    tabTitle: 'Salary Components',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'componentName', type: 'text', alias: 'Component' },\r\n      { name: 'componentType', type: 'text', alias: 'Type' },\r\n      { name: 'calculationMethod', type: 'text', alias: 'Calculation' },\r\n      { name: 'value', type: 'money', alias: 'Value' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'employeesalarycomponents?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'employeesalarycomponents?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'employeesalarycomponents?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'employeesalarycomponents/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n    formConfig: this.employeeSalaryComponentFormConfig,\r\n  }\r\n\r\n  //--------------------------Commission Configs-------------------------\r\n\r\n  commissionConfigFormConfig: FormConfig = {\r\n    title: 'Commission Config',\r\n    fields: [\r\n      { name: 'employeeID', type: 'select', alias: 'Employee', loadAction: { url: 'employees/list/x' }, required: true },\r\n      { name: 'name', type: 'text', required: true },\r\n      { name: 'metricType', alias: 'Metric Type', type: 'select', loadAction: { url: 'commissionconfigs/list/metric-type' }, required: true },\r\n      { name: 'rateType', alias: 'Rate Type', type: 'select', loadAction: { url: 'commissionconfigs/list/rate-type' }, required: true },\r\n      { name: 'rate', type: 'number', required: true },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', defaultValue: true },\r\n    ],\r\n    loadAction: { url: 'commissionconfigs/id' },\r\n    heroField: 'commissionConfigID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  commissionConfigsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['employeeName', 'name', 'rate'],\r\n    columns: [\r\n      { name: 'employeeName', type: 'text', alias: 'Employee' },\r\n      { name: 'name', type: 'text' },\r\n      { name: 'metricTypeName', type: 'text', alias: 'Metric Type' },\r\n      { name: 'rateTypeName', type: 'text', alias: 'Rate Type' },\r\n      { name: 'rate', type: 'text', alias: 'Rate' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'commissionconfigs?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'commissionconfigs?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'commissionconfigs?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'commissionconfigs/all/x' },\r\n    formConfig: this.commissionConfigFormConfig,\r\n    realTime: true,\r\n    entityName: 'CommissionConfig'\r\n  }\r\n\r\n  // Employee commission configs child table\r\n  employeeCommissionConfigsTableConfig: TableConfig = {\r\n    tabTitle: 'Commission Configs',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'name', type: 'text' },\r\n      { name: 'metricTypeName', type: 'text', alias: 'Metric Type' },\r\n      { name: 'rateTypeName', type: 'text', alias: 'Rate Type' },\r\n      { name: 'rate', type: 'text', alias: 'Rate' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'commissionconfigs?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'commissionconfigs?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'commissionconfigs?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'commissionconfigs/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n    formConfig: this.commissionConfigFormConfig,\r\n  }\r\n\r\n  //--------------------------Commission Entries-------------------------\r\n\r\n  commissionEntryFormConfig: FormConfig = {\r\n    title: 'Commission Entry',\r\n    fields: [\r\n      { name: 'employeeID', type: 'select', alias: 'Employee', loadAction: { url: 'employees/list/x' }, required: true },\r\n      { name: 'periodYear', alias: 'Year', type: 'number', required: true },\r\n      { name: 'periodMonth', alias: 'Month', type: 'number', required: true },\r\n      { name: 'metricValue', alias: 'Metric Value', type: 'number', required: true },\r\n      { name: 'commissionAmount', alias: 'Commission Amount', type: 'money', required: true },\r\n      { name: 'description', type: 'text' },\r\n      { name: 'sourceType', alias: 'Source Type', type: 'text' },\r\n      { name: 'sourceReference', alias: 'Source Reference', type: 'text' },\r\n    ],\r\n    loadAction: { url: 'commissionentries/id' },\r\n    heroField: 'commissionEntryID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  commissionEntriesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['employeeName', 'commissionAmount', 'periodYear'],\r\n    columns: [\r\n      { name: 'employeeName', type: 'text', alias: 'Employee' },\r\n      { name: 'periodYear', type: 'text', alias: 'Year' },\r\n      { name: 'periodMonth', type: 'text', alias: 'Month' },\r\n      { name: 'metricValue', type: 'text', alias: 'Metric Value' },\r\n      { name: 'commissionAmount', type: 'money', alias: 'Amount' },\r\n      { name: 'description', type: 'text' },\r\n      { name: 'sourceType', type: 'text', alias: 'Source' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'commissionentries?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'commissionentries?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'commissionentries?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'commissionentries/all/x' },\r\n    formConfig: this.commissionEntryFormConfig,\r\n    realTime: true,\r\n    entityName: 'CommissionEntry'\r\n  }\r\n\r\n  // Employee commission entries child table\r\n  employeeCommissionEntriesTableConfig: TableConfig = {\r\n    tabTitle: 'Commission History',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'periodYear', type: 'text', alias: 'Year' },\r\n      { name: 'periodMonth', type: 'text', alias: 'Month' },\r\n      { name: 'metricValue', type: 'text', alias: 'Metric Value' },\r\n      { name: 'commissionAmount', type: 'money', alias: 'Amount' },\r\n      { name: 'description', type: 'text' },\r\n      { name: 'sourceType', type: 'text', alias: 'Source' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'commissionentries?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'commissionentries?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'commissionentries?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'commissionentries/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n    formConfig: this.commissionEntryFormConfig,\r\n  }\r\n\r\n  //--------------------------Salary Advances-------------------------\r\n\r\n  salaryAdvanceFormConfig: FormConfig = {\r\n    title: 'Salary Advance',\r\n    fields: [\r\n      { name: 'employeeID', type: 'select', alias: 'Employee', loadAction: { url: 'employees/list/x' }, required: true },\r\n      { name: 'amount', type: 'money', required: true },\r\n      { name: 'advanceDate', alias: 'Advance Date', type: 'date', required: true },\r\n      { name: 'reason', type: 'text' },\r\n    ],\r\n    loadAction: { url: 'salaryadvances/id' },\r\n    heroField: 'salaryAdvanceID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  salaryAdvancesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['employeeName', 'amount', 'statusDisplay'],\r\n    columns: [\r\n      { name: 'employeeName', type: 'text', alias: 'Employee' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'advanceDate', type: 'date', alias: 'Date' },\r\n      { name: 'reason', type: 'text' },\r\n      { name: 'statusDisplay', type: 'text', alias: 'Status' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'salaryadvances?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'salaryadvances?action=edit', method: 'post' }, visible: (row: any) => !row?.isDeducted },\r\n      { name: 'delete', dialog: true, action: { url: 'salaryadvances?action=delete', method: 'post' }, visible: (row: any) => !row?.isDeducted },\r\n    ],\r\n    loadAction: { url: 'salaryadvances/all/x' },\r\n    formConfig: this.salaryAdvanceFormConfig,\r\n    realTime: true,\r\n    entityName: 'SalaryAdvance'\r\n  }\r\n\r\n  // Employee salary advances child table\r\n  employeeSalaryAdvancesTableConfig: TableConfig = {\r\n    tabTitle: 'Salary Advances',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n      { name: 'advanceDate', type: 'date', alias: 'Date' },\r\n      { name: 'reason', type: 'text' },\r\n      { name: 'statusDisplay', type: 'text', alias: 'Status' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'salaryadvances?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'salaryadvances?action=edit', method: 'post' }, visible: (row: any) => !row?.isDeducted },\r\n      { name: 'delete', dialog: true, action: { url: 'salaryadvances?action=delete', method: 'post' }, visible: (row: any) => !row?.isDeducted },\r\n    ],\r\n    loadAction: { url: 'salaryadvances/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n    formConfig: this.salaryAdvanceFormConfig,\r\n  }\r\n\r\n  //--------------------------Overtime Entries-------------------------\r\n\r\n  overtimeEntryFormConfig: FormConfig = {\r\n    title: 'Overtime Entry',\r\n    fields: [\r\n      { name: 'employeeID', type: 'select', alias: 'Employee', loadAction: { url: 'employees/list/x' }, required: true },\r\n      { name: 'overtimeDate', alias: 'Date', type: 'date', required: true },\r\n      { name: 'hours', type: 'number', required: true },\r\n      { name: 'overtimeType', alias: 'Overtime Type', type: 'select', loadAction: { url: 'overtimeentries/list/overtime-type' }, required: true },\r\n      { name: 'hourlyRate', alias: 'Hourly Rate', type: 'money', required: true },\r\n      { name: 'amount', type: 'money', alias: 'Amount', readonly: true },\r\n    ],\r\n    loadAction: { url: 'overtimeentries/id' },\r\n    heroField: 'overtimeEntryID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  overtimeEntriesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['employeeName', 'hours', 'amount'],\r\n    columns: [\r\n      { name: 'employeeName', type: 'text', alias: 'Employee' },\r\n      { name: 'overtimeDate', type: 'date', alias: 'Date' },\r\n      { name: 'hours', type: 'text', alias: 'Hours' },\r\n      { name: 'overtimeTypeName', type: 'text', alias: 'Type' },\r\n      { name: 'hourlyRate', type: 'money', alias: 'Hourly Rate' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'overtimeentries?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'overtimeentries?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'overtimeentries?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'overtimeentries/all/x' },\r\n    formConfig: this.overtimeEntryFormConfig,\r\n    realTime: true,\r\n    entityName: 'OvertimeEntry'\r\n  }\r\n\r\n  // Employee overtime entries child table\r\n  employeeOvertimeHistoryTableConfig: TableConfig = {\r\n    tabTitle: 'Overtime History',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'overtimeDate', type: 'date', alias: 'Date' },\r\n      { name: 'hours', type: 'text', alias: 'Hours' },\r\n      { name: 'overtimeTypeName', type: 'text', alias: 'Type' },\r\n      { name: 'hourlyRate', type: 'money', alias: 'Hourly Rate' },\r\n      { name: 'amount', type: 'money', alias: 'Amount' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'overtimeentries?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'overtimeentries?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'overtimeentries?action=delete', method: 'post' } },\r\n    ],\r\n    loadAction: { url: 'overtimeentries/x/x' }, loadCriteria: 'employee', loadIDField: 'employeeID',\r\n    formConfig: this.overtimeEntryFormConfig,\r\n  }\r\n\r\n  //--------------------------Payroll Runs-------------------------\r\n\r\n  // Action buttons with status-based visibility\r\n  submitPayrollButton: Button = { name: 'submit', display: 'Submit', inDialog: true, action: { url: 'payrollruns?action=submit', method: 'post' }, visible: (row: any) => row?.status === 1 }; // Changed: null-check row to prevent TypeError when dialog renders before row data loads\r\n  postPayrollButton: Button = { name: 'post', display: 'Post', inDialog: true, action: { url: 'payrollruns?action=post', method: 'post' }, visible: (row: any) => row?.status === 2 }; // Changed: null-check row\r\n  markPaidButton: Button = { name: 'paid', display: 'Mark Paid', inDialog: true, action: { url: 'payrollruns?action=paid', method: 'post' }, visible: (row: any) => row?.status === 3 }; // Changed: null-check row\r\n\r\n  payrollRunFormConfig: FormConfig = {\r\n    title: 'Payroll Run',\r\n    fields: [\r\n      { name: 'periodYear', alias: 'Year', type: 'number', required: true },\r\n      { name: 'periodMonth', alias: 'Month', type: 'number', required: true },\r\n      { name: 'payDate', alias: 'Pay Date', type: 'date', required: true },\r\n      { name: 'description', type: 'text-area', rows: 2, span: true },\r\n    ],\r\n    loadAction: { url: 'payrollruns/id' },\r\n    heroField: 'payrollRunID',\r\n    includeAudit: true,\r\n  }\r\n\r\n  payrollRunsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    flatButtons: true,\r\n    minColumns: ['periodYear', 'totalGrossPay', 'statusName'],\r\n    columns: [\r\n      { name: 'periodYear', type: 'text', alias: 'Year' },\r\n      { name: 'periodMonth', type: 'text', alias: 'Month' },\r\n      { name: 'payDate', type: 'date', alias: 'Pay Date' },\r\n      { name: 'payslipCount', type: 'text', alias: 'Payslips' },\r\n      { name: 'totalGrossPay', type: 'money', alias: 'Gross Pay' },\r\n      { name: 'totalNetPay', type: 'money', alias: 'Net Pay' },\r\n      { name: 'statusName', type: 'text', alias: 'Status' },\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'payrollruns?action=create', method: 'post' } },\r\n      {\r\n        name: 'view',\r\n        dialog: true,\r\n        detailsConfig: {\r\n          formConfig: this.payrollRunFormConfig,\r\n          heroField: 'payrollRunID',\r\n          buttons: [this.submitPayrollButton, this.postPayrollButton, this.markPaidButton],\r\n          tableConfigs: [this.payslipsChildTableConfig],\r\n        }\r\n      },\r\n      { name: 'edit', dialog: true, action: { url: 'payrollruns?action=edit', method: 'post' }, visible: (row: any) => row?.status === 1 }, // Changed: null-check row\r\n      { name: 'delete', dialog: true, action: { url: 'payrollruns?action=delete', method: 'post' }, visible: (row: any) => row?.status === 1 }, // Changed: null-check row\r\n    ],\r\n    loadAction: { url: 'payrollruns/all/x' },\r\n    formConfig: this.payrollRunFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'PayrollRun'\r\n  }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PayrollService } from '../../../services/payroll.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-salary-structures',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class SalaryStructuresComponent {\r\n  private payrollService = inject(PayrollService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Salary Structures',\r\n    tableConfig: this.payrollService.salaryStructuresTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PayrollService } from '../../../services/payroll.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-statutory-deductions',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class StatutoryDeductionsComponent {\r\n  private payrollService = inject(PayrollService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Statutory Deductions',\r\n    tableConfig: this.payrollService.statutoryDeductionTypesTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PayrollService } from '../../../services/payroll.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-payroll-runs',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class PayrollRunsComponent {\r\n  private payrollService = inject(PayrollService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Payroll Runs',\r\n    tableConfig: this.payrollService.payrollRunsTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PayrollService } from '../../../services/payroll.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-commission-configs',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class CommissionConfigsComponent {\r\n  private payrollService = inject(PayrollService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Commission Configs',\r\n    tableConfig: this.payrollService.commissionConfigsTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PayrollService } from '../../../services/payroll.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-commission-entries',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class CommissionEntriesComponent {\r\n  private payrollService = inject(PayrollService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Commission Entries',\r\n    tableConfig: this.payrollService.commissionEntriesTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PayrollService } from '../../../services/payroll.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-salary-advances',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class SalaryAdvancesComponent {\r\n  private payrollService = inject(PayrollService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Salary Advances',\r\n    tableConfig: this.payrollService.salaryAdvancesTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PayrollService } from '../../../services/payroll.service';\r\nimport { PageConfig } from '../../../classes/Classes';\r\n\r\n@Component({\r\n    selector: 'spa-overtime-entries',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class OvertimeEntriesComponent {\r\n  private payrollService = inject(PayrollService);\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Overtime Entries',\r\n    tableConfig: this.payrollService.overtimeEntriesTableConfig\r\n  };\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TileConfig, ChartConfig, ApiResponse } from '../../../classes/Classes';\r\nimport { DataServiceLib } from '../../../services/datalib.service';\r\n\r\n// Payroll module dashboard with cost tracking, department analysis, and employee metrics\r\n@Component({\r\n  selector: 'spa-payroll-dashboard',\r\n  template: `\r\n    <div class=\"dashboard-container\">\r\n      <h4 class=\"dashboard-title\"><mat-icon>payments</mat-icon> Payroll Dashboard</h4>\r\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\r\n      <div style=\"margin-top: 16px;\"></div>\r\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\r\n\r\n      <!-- Recent Payroll Runs sub-table -->\r\n      <div *ngIf=\"recentRuns.length > 0\" class=\"runs-section\">\r\n        <h5 class=\"section-title\">\r\n          <mat-icon style=\"vertical-align: middle; margin-right: 4px;\">play_circle</mat-icon>\r\n          Recent Payroll Runs\r\n        </h5>\r\n        <table class=\"kpi-table\">\r\n          <thead>\r\n            <tr>\r\n              <th>Period</th>\r\n              <th>Pay Date</th>\r\n              <th>Status</th>\r\n              <th>Employees</th>\r\n              <th>Gross Pay</th>\r\n              <th>Net Pay</th>\r\n            </tr>\r\n          </thead>\r\n          <tbody>\r\n            <tr *ngFor=\"let run of recentRuns\">\r\n              <td>{{ run.periodName }}</td>\r\n              <td>{{ run.payDate | date:'mediumDate' }}</td>\r\n              <td>\r\n                <span class=\"status-chip\" [style.background]=\"run.statusColor\">{{ run.statusName }}</span>\r\n              </td>\r\n              <td>{{ run.payslipCount }}</td>\r\n              <td>{{ run.totalGrossPay | currency }}</td>\r\n              <td>{{ run.totalNetPay | currency }}</td>\r\n            </tr>\r\n          </tbody>\r\n        </table>\r\n      </div>\r\n\r\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .dashboard-container { padding: 16px; }\r\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n    .runs-section { margin-top: 16px; }\r\n    .section-title { display: flex; align-items: center; margin-bottom: 8px; color: #333; font-weight: 500; }\r\n    .kpi-table { width: 100%; border-collapse: collapse; font-size: 13px; }\r\n    .kpi-table th { text-align: left; padding: 8px 12px; background: #f5f5f5; border-bottom: 2px solid #e0e0e0; font-weight: 500; }\r\n    .kpi-table td { padding: 8px 12px; border-bottom: 1px solid #eee; }\r\n    .kpi-table tr:hover { background: #fafafa; }\r\n    .status-chip { padding: 2px 8px; border-radius: 12px; color: white; font-size: 11px; font-weight: 500; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class PayrollDashboardComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib) { }\r\n\r\n  recentRuns: any[] = [];\r\n\r\n  // Changed: Summary tiles — payroll KPIs\r\n  summaryTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'eligibleEmployees', alias: 'Eligible Employees', color: '#1565c0', icon: 'group', style: 'icon', info: 'Active employees with salary structures' },\r\n      { name: 'lastPayrollNet', alias: 'Last Payroll (Net)', color: '#4caf50', icon: 'account_balance', style: 'icon', prefix: '$', info: 'Net pay of last completed run' },\r\n      { name: 'pendingAdvances', alias: 'Pending Advances', color: '#f44336', icon: 'money_off', style: 'icon', info: 'Undeducted salary advances' },\r\n      { name: 'overtimeMTD', alias: 'Overtime (MTD)', color: '#ff9800', icon: 'more_time', style: 'icon', prefix: '$', info: 'Total overtime this month' },\r\n      { name: 'payrollRunsYTD', alias: 'Runs (YTD)', color: '#7b1fa2', icon: 'play_circle', style: 'icon', info: 'Payroll runs this year' },\r\n      { name: 'totalPayrollCostYTD', alias: 'Payroll Cost (YTD)', color: '#00695c', icon: 'attach_money', style: 'icon', prefix: '$', info: 'Year-to-date gross payroll' },\r\n    ],\r\n    loadAction: { url: 'payrollruns/dashboard-summary/x' },\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Chart tiles — cost ratio gauge, trend sparkline, department pie, run status bar\r\n  chartTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'payrollCostRatio', alias: 'Payroll Cost Ratio', color: '#ff9800', chart: { type: 'doughnut', gaugeColor: '#ff9800', height: 130, dataField: 'payrollCostRatio' }, footer: 'Payroll as % of expenses', footerIcon: 'info' },\r\n      { name: 'payrollTrend', alias: 'Payroll Trend', color: '#2196f3', chart: { type: 'line', color: '#2196f3', height: 100, dataField: 'payrollTrend' }, footer: 'Last 12 months gross', footerIcon: 'timeline' },\r\n      { name: 'departmentSplit', alias: 'By Department', color: '#4caf50', chart: { type: 'pie', colors: ['#2196f3', '#4caf50', '#ff9800', '#f44336', '#9c27b0'], height: 130, dataField: 'departmentSplit' }, footer: 'Employee distribution', footerIcon: 'pie_chart' },\r\n      { name: 'runStatusSplit', alias: 'Run Status', color: '#9c27b0', chart: { type: 'bar', colors: ['#9e9e9e', '#2196f3', '#ff9800', '#4caf50'], height: 100, dataField: 'runStatusSplit' }, footer: 'All-time run status', footerIcon: 'bar_chart' },\r\n    ],\r\n    loadAction: { url: 'payrollruns/dashboard-chart-tiles/x' },\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Full charts — cost trend, department breakdown, earnings vs deductions, commission & overtime\r\n  chartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'payrollCostTrend', title: 'Payroll Cost Trend', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#2196f3', '#4caf50', '#f44336'], showLegend: true },\r\n      { name: 'departmentCosts', title: 'Cost by Department', type: 'bar', height: '300px', colors: ['#2196f3', '#4caf50', '#ff9800', '#f44336', '#9c27b0'] },\r\n      { name: 'earningsVsDeductions', title: 'Earnings vs Deductions', type: 'doughnut', height: '300px', colors: ['#4caf50', '#f44336'] },\r\n      { name: 'variablePayTrend', title: 'Commission & Overtime', type: 'bar', height: '300px', showLegend: true, colors: ['#9c27b0', '#ff9800'] },\r\n    ],\r\n    loadAction: { url: 'payrollruns/dashboard-charts/x' },\r\n    loadInit: true,\r\n    columns: 2\r\n  };\r\n\r\n  ngOnInit(): void {\r\n    // Load recent payroll runs for sub-table\r\n    this.dataService.CallApi({ url: 'payrollruns/dashboard-recent/x' }).subscribe((res: ApiResponse) => {\r\n      if (res.success) this.recentRuns = res.data || [];\r\n    });\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { SalaryStructuresComponent } from '../../pages/payroll/salary-structures/salary-structures.component';\nimport { StatutoryDeductionsComponent } from '../../pages/payroll/statutory-deductions/statutory-deductions.component';\nimport { PayrollRunsComponent } from '../../pages/payroll/payroll-runs/payroll-runs.component';\nimport { CommissionConfigsComponent } from '../../pages/payroll/commission-configs/commission-configs.component';\nimport { CommissionEntriesComponent } from '../../pages/payroll/commission-entries/commission-entries.component';\nimport { SalaryAdvancesComponent } from '../../pages/payroll/salary-advances/salary-advances.component';\nimport { OvertimeEntriesComponent } from '../../pages/payroll/overtime-entries/overtime-entries.component';\nimport { PayrollDashboardComponent } from '../../pages/payroll/payroll-dashboard/payroll-dashboard.component';\n\nexport const PAYROLL_ROUTES: Routes = [\n  { path: \"salary-structures\", component: SalaryStructuresComponent },\n  { path: \"statutory-deductions\", component: StatutoryDeductionsComponent },\n  { path: \"runs\", component: PayrollRunsComponent },\n  { path: \"commission-configs\", component: CommissionConfigsComponent },\n  { path: \"commission-entries\", component: CommissionEntriesComponent },\n  { path: \"salary-advances\", component: SalaryAdvancesComponent },\n  { path: \"overtime-entries\", component: OvertimeEntriesComponent },\n  { path: \"dashboard\", component: PayrollDashboardComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(PAYROLL_ROUTES)],\n  exports: [RouterModule]\n})\nexport class PayrollRoutingModule { }\n","import { inject, Injectable } from '@angular/core';\r\nimport { FormConfig, DetailsDialogConfig, Button, TableConfig } from '../classes/Classes';\r\nimport { DataServiceLib } from './datalib.service';\r\nimport { InventoryService } from './inventory.service';\r\n\r\n// Service for managing production/manufacturing configurations\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ProductionService {\r\n\r\n  private dataService = inject(DataServiceLib);\r\n  private inventoryService = inject(InventoryService);\r\n\r\n  // ==================== PRODUCTION RECIPES ====================\r\n\r\n  recipeItemFormConfig: FormConfig = {\r\n    title: 'Recipe Item',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'productionRecipeItemID', type: 'number', alias: 'ID', hidden: true },\r\n      { name: 'productionRecipeID', type: 'number', alias: 'Recipe ID', hidden: true },\r\n      { name: 'rawMaterialProductID', type: 'select', alias: 'Raw Material', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.inventoryService.productDetailsConfig },\r\n      { name: 'requiredQuantity', type: 'number', alias: 'Required Quantity', required: true }\r\n    ],\r\n    loadAction: { url: 'productionrecipeitems/id' },\r\n    heroField: 'productionRecipeItemID'\r\n  }\r\n\r\n  recipeItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Materials',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    minColumns: ['rawMaterialName', 'requiredQuantity', 'estimatedCost'],\r\n    columns: [\r\n      { name: 'rawMaterialName', type: 'text', alias: 'Raw Material' },\r\n      { name: 'requiredQuantity', type: 'number', alias: 'Quantity' },\r\n      { name: 'estimatedCost', type: 'money', alias: 'Est. Cost' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Add Material', dialog: true, action: { url: 'productionrecipeitems?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'productionrecipeitems?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'productionrecipeitems?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'productionrecipeitems/x/x' }, loadCriteria: 'recipe', loadIDField: 'productionRecipeID',\r\n    formConfig: this.recipeItemFormConfig\r\n  }\r\n\r\n  recipeFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capProductionRecipes] },\r\n    title: 'Production Recipe',\r\n    fixedTitle: true,\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'productionRecipeID', type: 'number', alias: 'Recipe ID', hidden: true },\r\n      { name: 'recipeInfo', type: 'section', alias: 'Recipe Information' },\r\n      { name: 'finishedProductID', type: 'select', alias: 'Finished Product', required: true, section: 'recipeInfo', loadAction: { url: 'products/list/x' }, detailsConfig: this.inventoryService.productDetailsConfig },\r\n      { name: 'recipeName', type: 'text', alias: 'Recipe Name', required: true, section: 'recipeInfo' },\r\n      { name: 'yieldQuantity', type: 'number', alias: 'Yield Quantity', required: true, section: 'recipeInfo' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active', section: 'recipeInfo' },\r\n      { name: 'notes', type: 'text', alias: 'Notes', nullable: true, span: true, section: 'recipeInfo' },\r\n      { name: 'costInfo', type: 'section', alias: 'Cost Information', collapsed: true, hideOnCreate: true },\r\n      { name: 'estimatedCost', type: 'money', alias: 'Total Cost', readonly: true, section: 'costInfo' },\r\n      { name: 'estimatedCostPerUnit', type: 'money', alias: 'Cost Per Unit', readonly: true, section: 'costInfo' }\r\n    ],\r\n    loadAction: { url: 'productionrecipes/id' },\r\n    heroField: 'productionRecipeID'\r\n  }\r\n\r\n  recipeDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.recipeFormConfig,\r\n    heroField: 'productionRecipeID',\r\n    tableConfigs: [this.recipeItemsTableConfig],\r\n    buttons: [\r\n      { name: 'edit', dialog: true, action: { url: 'productionrecipes?action=edit', method: 'post' } }\r\n    ]\r\n  }\r\n\r\n  recipeViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.recipeDetailsConfig }\r\n  recipeCreateButton: Button = { name: 'create', display: 'Create Recipe', dialog: true, \r\n    action: { url: 'productionrecipes?action=create', method: 'post' },\r\n    onSuccessButton: this.recipeViewButton\r\n  }\r\n\r\n  recipesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['recipeName', 'finishedProductName', 'yieldQuantity'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productionRecipeID', type: 'number', alias: 'ID' },\r\n      { name: 'recipeName', type: 'text', alias: 'Recipe Name' },\r\n      { name: 'finishedProductName', type: 'text', alias: 'Finished Product' },\r\n      { name: 'yieldQuantity', type: 'number', alias: 'Yield' },\r\n      { name: 'estimatedCost', type: 'money', alias: 'Est. Cost' },\r\n      { name: 'estimatedCostPerUnit', type: 'money', alias: 'Cost/Unit' },\r\n      { name: 'isActive', type: 'checkbox', alias: 'Active' }\r\n    ],\r\n    buttons: [\r\n      this.recipeCreateButton,\r\n      this.recipeViewButton,\r\n      { name: 'delete', dialog: true, action: { url: 'productionrecipes?action=delete', method: 'post' } }\r\n    ],\r\n    loadAction: { url: 'productionrecipes/all/x' },\r\n    formConfig: this.recipeFormConfig,\r\n    realTime: true,\r\n    entityName: 'ProductionRecipe'\r\n  }\r\n\r\n  // ==================== PRODUCTION ORDERS ====================\r\n\r\n  orderItemFormConfig: FormConfig = {\r\n    title: 'Order Item',\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'productionOrderItemID', type: 'number', alias: 'ID', hidden: true },\r\n      { name: 'productionOrderID', type: 'number', alias: 'Order ID', hidden: true },\r\n      { name: 'rawMaterialProductID', type: 'number', alias: 'Raw Material ID', hidden: true },\r\n      { name: 'rawMaterialName', type: 'text', alias: 'Raw Material', readonly: true },\r\n      { name: 'requiredQuantity', type: 'number', alias: 'Required', readonly: true },\r\n      { name: 'allocatedQuantity', type: 'number', alias: 'Allocated', readonly: true },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost', readonly: true },\r\n      { name: 'totalCost', type: 'money', alias: 'Total Cost', readonly: true }\r\n    ],\r\n    loadAction: { url: 'productionorderitems/id' },\r\n    heroField: 'productionOrderItemID'\r\n  }\r\n\r\n  orderItemsTableConfig: TableConfig = {\r\n    tabTitle: 'Materials Used',\r\n    showFilter: false,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    minColumns: ['rawMaterialName', 'allocatedQuantity', 'totalCost'],\r\n    columns: [\r\n      { name: 'rawMaterialName', type: 'text', alias: 'Raw Material' },\r\n      { name: 'requiredQuantity', type: 'number', alias: 'Required' },\r\n      { name: 'allocatedQuantity', type: 'number', alias: 'Allocated' },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost' },\r\n      { name: 'totalCost', type: 'money', alias: 'Total Cost' }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true }\r\n    ],\r\n    loadAction: { url: 'productionorderitems/x/x' }, loadCriteria: 'order', loadIDField: 'productionOrderID',\r\n    formConfig: this.orderItemFormConfig\r\n  }\r\n\r\n  orderFormConfig: FormConfig = {\r\n    security: { allow: [this.dataService.capProductionOrders] },\r\n    title: 'Production Order',\r\n    fixedTitle: true,\r\n    alertConfig: {\r\n      compact: true,\r\n      sticky: true,\r\n      messages: [\r\n        { message: 'Click Complete to process production and consume materials', type: 'success',  // Changed: content to message\r\n          showCondition: (x: any) => x.statusName === 'Draft'\r\n        }\r\n      ]\r\n    },\r\n    multiColumn: true,\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'productionOrderID', type: 'number', alias: 'Order ID', hidden: true },\r\n      { name: 'orderInfo', type: 'section', alias: 'Order Information' },\r\n      { name: 'productionOrderNumber', type: 'text', alias: 'Order Number', readonly: true, section: 'orderInfo', hideOnCreate: true },\r\n      { name: 'productionRecipeID', type: 'select', alias: 'Recipe', required: true, section: 'orderInfo', loadAction: { url: 'productionrecipes/list/x' }, detailsConfig: this.recipeDetailsConfig },\r\n      { name: 'plannedQuantity', type: 'number', alias: 'Planned Quantity', required: true, section: 'orderInfo' },\r\n      { name: 'productionDate', type: 'date', alias: 'Production Date', required: true, section: 'orderInfo' },\r\n      { name: 'notes', type: 'text', alias: 'Notes', nullable: true, span: true, section: 'orderInfo' },\r\n      { name: 'statusInfo', type: 'section', alias: 'Status', collapsed: true, hideOnCreate: true },\r\n      { name: 'statusName', type: 'text', alias: 'Status', readonly: true, section: 'statusInfo' },\r\n      { name: 'actualQuantity', type: 'number', alias: 'Actual Quantity', readonly: true, section: 'statusInfo' },\r\n      { name: 'totalCost', type: 'money', alias: 'Total Cost', readonly: true, section: 'statusInfo' }\r\n    ],\r\n    loadAction: { url: 'productionorders/id' },\r\n    heroField: 'productionOrderID'\r\n  }\r\n\r\n  orderDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.orderFormConfig,\r\n    heroField: 'productionOrderID',\r\n    tableConfigs: [this.orderItemsTableConfig],\r\n    buttons: [\r\n      { name: 'edit', dialog: true, action: { url: 'productionorders?action=edit', method: 'post' }, visible: (x: any) => x.statusName === 'Draft' },\r\n      { name: 'complete', display: 'Complete', icon: { name: 'check', color: 'green' }, inDialog: true, dialog: true, \r\n        action: { url: 'productionorders?action=complete', method: 'post', successMessage: 'Production order completed successfully' }, \r\n        confirm: { message: 'Complete this production order? Materials will be consumed and finished goods will be added to inventory.' },\r\n        visible: (x: any) => x.statusName === 'Draft' \r\n      },\r\n      { name: 'cancel', display: 'Cancel', icon: { name: 'close', color: 'red' }, inDialog: true, dialog: true, \r\n        action: { url: 'productionorders?action=cancel', method: 'post', successMessage: 'Production order cancelled' }, \r\n        confirm: { message: 'Cancel this production order?' },\r\n        visible: (x: any) => x.statusName === 'Draft' \r\n      }\r\n    ]\r\n  }\r\n\r\n  orderViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.orderDetailsConfig }\r\n  orderCreateButton: Button = { name: 'create', display: 'Create Order', dialog: true, \r\n    action: { url: 'productionorders?action=create', method: 'post' },\r\n    onSuccessButton: this.orderViewButton\r\n  }\r\n\r\n  ordersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['productionOrderNumber', 'finishedProductName', 'plannedQuantity'],\r\n    flatButtons: true,\r\n    columns: [\r\n      { name: 'productionOrderID', type: 'number', alias: 'ID' },\r\n      { name: 'productionOrderNumber', type: 'text', alias: 'Order #' },\r\n      { name: 'recipeName', type: 'text', alias: 'Recipe' },\r\n      { name: 'finishedProductName', type: 'text', alias: 'Product' },\r\n      { name: 'plannedQuantity', type: 'number', alias: 'Planned' },\r\n      { name: 'actualQuantity', type: 'number', alias: 'Actual' },\r\n      { name: 'productionDate', type: 'date', alias: 'Date' },\r\n      { name: 'totalCost', type: 'money', alias: 'Total Cost' },\r\n      { name: 'unitCost', type: 'money', alias: 'Unit Cost' },\r\n      { name: 'statusName', type: 'icon', alias: 'Status', \r\n        icons: [\r\n          { name: 'edit', color: 'primary', condition: (x: any) => x.statusName === 'Draft', tip: 'Draft' }, \r\n          { name: 'check_circle', color: 'green', condition: (x: any) => x.statusName === 'Completed', tip: 'Completed' }, \r\n          { name: 'cancel', color: 'red', condition: (x: any) => x.statusName === 'Cancelled', tip: 'Cancelled' }\r\n        ] \r\n      }\r\n    ],\r\n    buttons: [\r\n      this.orderCreateButton,\r\n      this.orderViewButton,\r\n      { name: 'delete', dialog: true, action: { url: 'productionorders?action=delete', method: 'post' }, visible: (x: any) => x.statusName === 'Draft' }\r\n    ],\r\n    loadAction: { url: 'productionorders/all/x' },\r\n    formConfig: this.orderFormConfig,\r\n    // realTime: true, // Disabled: testing realtime on transactions table only\r\n    entityName: 'ProductionOrder'\r\n  }\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { ProductionService } from '../../../services/production.service';\r\n\r\n// Component for managing production recipes\r\n@Component({\r\n  selector: 'spa-production-recipes',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class ProductionRecipesComponent implements OnInit {\r\n\r\n  private productionService = inject(ProductionService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Production Recipes',\r\n    tableConfig: this.productionService.recipesTableConfig\r\n  };\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { ProductionService } from '../../../services/production.service';\r\n\r\n// Component for managing production orders\r\n@Component({\r\n  selector: 'spa-production-orders',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class ProductionOrdersComponent implements OnInit {\r\n\r\n  private productionService = inject(ProductionService);\r\n\r\n  ngOnInit(): void { }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Production Orders',\r\n    tableConfig: this.productionService.ordersTableConfig\r\n  };\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { ProductionRecipesComponent } from '../../pages/manufacturing/production-recipes/production-recipes.component';\nimport { ProductionOrdersComponent } from '../../pages/manufacturing/production-orders/production-orders.component';\n\nexport const MANUFACTURING_ROUTES: Routes = [\n  { path: \"production-recipes\", component: ProductionRecipesComponent },\n  { path: \"production-orders\", component: ProductionOrdersComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(MANUFACTURING_ROUTES)],\n  exports: [RouterModule]\n})\nexport class ManufacturingRoutingModule { }\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { LoansService } from '../../../services/loans.service';\r\n\r\n\r\n@Component({\r\n  selector: 'spa-loan-products',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class LoanProductsComponent {\r\n  private loansService = inject(LoansService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Loan Products',\r\n    tableConfig: this.loansService.loanProductTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { LoansService } from '../../../services/loans.service';\r\n\r\n\r\n@Component({\r\n  selector: 'spa-loans',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class LoansComponent {\r\n  private loansService = inject(LoansService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Loans',\r\n    tableConfig: this.loansService.loanTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { PageConfig } from '../../../classes/Classes';\r\nimport { LoansService } from '../../../services/loans.service';\r\n\r\n\r\n@Component({\r\n  selector: 'spa-loan-payments',\r\n  standalone: false,\r\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class LoanPaymentsComponent {\r\n  private loansService = inject(LoansService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Loan Payments',\r\n    tableConfig: this.loansService.loanPaymentTableConfig\r\n  };\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { LoanProductsComponent } from '../../pages/loans/loan-products/loan-products.component';\nimport { LoansComponent } from '../../pages/loans/loans/loans.component';\nimport { LoanPaymentsComponent } from '../../pages/loans/loan-payments/loan-payments.component';\n\nexport const LOANS_ROUTES: Routes = [\n  { path: \"products\", component: LoanProductsComponent },\n  { path: \"loans\", component: LoansComponent },\n  { path: \"payments\", component: LoanPaymentsComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(LOANS_ROUTES)],\n  exports: [RouterModule]\n})\nexport class LoansRoutingModule { }\n","import { Component, inject } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { PageConfig } from '../../classes/Classes';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-customers',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class CustomersComponent {\r\n  private dataService = inject(DataServiceLib);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Customers',\r\n    tableConfig: this.dataService.customersTableConfig\r\n  };\r\n\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { PageConfig } from '../../classes/Classes';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-suppliers',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class SuppliersComponent {\r\n  private dataService = inject(DataServiceLib);\r\n  private messageService = inject(MessageService);\r\n  private authService = inject(AuthService);\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Suppliers',\r\n    tableConfig: this.dataService.suppliersTableConfig\r\n  };\r\n\r\n\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { FormConfig, ListDialogConfig, TableConfig, ApiResponse } from '../../classes/Classes';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { ListDialogComponent } from '../../components/list-dialog/list-dialog.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'spa-tasks',\r\n    templateUrl: './tasks.component.html',\r\n    styleUrls: ['./tasks.component.css'],\r\n    standalone: false\r\n})\r\nexport class TasksComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib, private messageService: MessageService, public authService: AuthService, public dialog: MatDialog) { }\r\n\r\n  ngOnInit(): void {\r\n    this.loadData();\r\n  }\r\n\r\n  loadData(){\r\n    this.dataService.CallApi({ url:'tasks/meta/x'}).subscribe((api : ApiResponse) => {\r\n      this.formConfig.fields.find(x => x.name == 'assignee').options = api.data.members;\r\n      this.formConfig.fields.find(x => x.name == 'assignee').defaultValue = this.authService.currentUser;\r\n      this.formConfig.fields.find(x => x.name == 'categoryID').options = api.data.categories;\r\n    })\r\n  }\r\n\r\n  cats() {\r\n\r\n    let conf: ListDialogConfig = { title: \"Task Categories\", name: 'Category', listName: 'TaskCategories' }\r\n\r\n    const dialogRef = this.dialog.open(ListDialogComponent, {\r\n      width: \"900px\",\r\n      data: conf,\r\n    });\r\n\r\n    dialogRef.afterClosed().subscribe((result) => {\r\n\r\n      if (result == 'success') {\r\n        this.reload.next(true);\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n\r\n  reload: Subject<boolean> = new Subject();\r\n\r\n  statuses = [\r\n    { name: 'Not Started', value: 0 },\r\n    { name: 'In-Progress', value: 1 },\r\n    { name: 'Completed', value: 2 },\r\n  ]\r\n\r\n  formConfig: FormConfig = {\r\n\r\n    fields: [\r\n      { name: 'name', type: 'text', span : true, required : true },\r\n      { name: 'status', type: 'select', options : this.statuses, defaultFirstValue : true, required : true },\r\n      { name: 'dueDate', type: 'date' },\r\n      { name: 'assignee', type: 'select', optionDisplay : 'name', optionValue : 'userName' },\r\n      { name: 'categoryID', alias: 'Category', type: 'select', optionDisplay: 'name', optionValue: 'listItemID', defaultFirstValue: true, required: true },\r\n    ],\r\n\r\n    reset: true,\r\n  }\r\n\r\n  tasksTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name', 'assigneeName'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n\r\n      { name: 'name', type: 'text'},\r\n      { name: 'statusName', type: 'text' },\r\n      { name: 'dueDate', type: 'date' },\r\n      { name: 'assigneeName', alias:'assignee', type: 'text'},\r\n      { name: 'categoryName', alias: 'Category', type: 'text' },\r\n      { name: 'createdDate', alias : 'Created', type: 'date' },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'tasks?action=create', method: 'post' } },\r\n      { name: 'view', dialog: true },\r\n      { name: 'edit', dialog: true, action: { url: 'tasks?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'tasks?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'tasks/all/x' },\r\n\r\n    formConfig: this.formConfig\r\n\r\n  }\r\n}\r\n","<div class=\"d-flex align-items-center justify-content-between mt-0\" style=\"margin-left: 10px\">\r\n\r\n  <label style=\"font-size: 16px;\">Tasks</label>\r\n\r\n  <div>\r\n    <button mat-mini-fab color=\"primary\" style=\"margin-right:1em;\" (click)=\"cats()\" matTooltip=\"Categories\" matTooltipPosition=\"above\"><mat-icon>category</mat-icon></button>\r\n  </div>\r\n\r\n</div>\r\n<hr>\r\n\r\n<div class=\"mt-3\" style=\" font-size: 14px;\">\r\n  <spa-table [config]=\"tasksTableConfig\" [reload]=\"reload\"></spa-table>\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { CustomersComponent } from '../../pages/customers/customers.component';\nimport { SuppliersComponent } from '../../pages/suppliers/suppliers.component';\nimport { CategoriesComponent } from '../../pages/categories/categories.component';\nimport { SubCategoriesComponent } from '../../pages/subcategories/subcategories.component';\nimport { BrandsComponent } from '../../pages/brands/brands.component';\nimport { TasksComponent } from '../../pages/tasks/tasks.component';\n\nexport const GENERAL_ROUTES: Routes = [\n  { path: \"customers\", component: CustomersComponent },\n  { path: \"suppliers\", component: SuppliersComponent },\n  { path: \"categories\", component: CategoriesComponent },\n  { path: \"subcategories\", component: SubCategoriesComponent },\n  { path: \"brands\", component: BrandsComponent },\n  { path: \"tasks\", component: TasksComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(GENERAL_ROUTES)],\n  exports: [RouterModule]\n})\nexport class GeneralRoutingModule { }\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormConfig, TableConfig, ApiResponse, DetailsDialogConfig, Field } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'spa-tenant-settings',\r\n    templateUrl: './tenant-settings.component.html',\r\n    styleUrls: ['./tenant-settings.component.css'],\r\n    standalone: false\r\n})\r\nexport class TenantSettingsComponent implements OnInit {\r\n\r\n  constructor(public dataService: DataServiceLib, private messageService: MessageService, public authService: AuthService, public dialog: MatDialog ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.authService.myRoleObserv.subscribe(rol => this.myRole = rol);\r\n    this.loadData();\r\n    this.loadTenants()\r\n  }\r\n\r\n  newName;\r\n\r\n  myRole\r\n  tenants;\r\n  currTenant;\r\n  currentTenantID;\r\n  plan;\r\n  ownTenant;\r\n  roles = [\r\n    { roleName: 'Default', roleID: 1 },\r\n  ]\r\n\r\n  loadData(){\r\n    this.dataService.CallApi({ url: 'tenants/meta/x' }, \"\").subscribe((apiResponse: ApiResponse) => {\r\n      this.currTenant = apiResponse.data.tenant;\r\n      this.currentTenantID = apiResponse.data.currentTenantID;\r\n      this.plan = apiResponse.data.plan;\r\n      this.ownTenant = apiResponse.data.ownTenant\r\n      this.membersFormConfig.fields.find(x => x.name == 'roleID').options = apiResponse.data.roles;\r\n    });\r\n  }\r\n\r\n  loadTenants() {\r\n    this.dataService.CallApi({ url: 'tenants/meta_tenants/x' }, \"\").subscribe((apiResponse: ApiResponse) => {\r\n      this.tenants = apiResponse.data.tenants;\r\n    });\r\n  }\r\n\r\n\r\n  updateTenant(x){\r\n\r\n    if (x.name == \"edit\" && x.data.success ) {\r\n      if (x.data.data.tenantID == this.currentTenantID){\r\n        this.authService.updateTenantName(x.data.data.name)\r\n      }\r\n      this.refreshOrgsLists();\r\n    }\r\n\r\n    if (x.name == \"login\" && x.data.success) {\r\n      this.forceLogin();\r\n    }\r\n\r\n    if (x.name == \"leave\" && x.data.success) {\r\n      this.refreshOrgsLists();\r\n    }\r\n  }\r\n\r\n  refreshOrgsLists(){\r\n    this.loadTenants();\r\n  }\r\n\r\n  switchTenant() {\r\n\r\n    this.messageService.confirm(`Switch Organisation ?`).subscribe((result) => {\r\n      if (result == \"yes\") {\r\n\r\n        this.currTenant.tenantID = this.currentTenantID;\r\n\r\n        this.dataService.CallApi({ url: 'tenants/dto?action=switch', method: 'post' }, this.currTenant).subscribe((apiResponse: ApiResponse) => {\r\n\r\n          if (apiResponse.success) {\r\n            this.forceLogin()\r\n          }\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  forceLogin(){\r\n    this.messageService.toast(\"Switched Successfully, please login again\");\r\n    this.authService.logoff();\r\n  }\r\n\r\n\r\n\r\n\r\n  //Members\r\n\r\n  roleField: Field = { name: 'roleID', type: 'select', required: true, span : true, options: this.roles, optionDisplay: 'roleName', optionValue: 'roleID', defaultFirstValue: true }\r\n\r\n  inviteDialogConfig: DetailsDialogConfig = {\r\n    formConfig: {\r\n      title: 'Add Member',\r\n      fixedTitle: true,\r\n      fields: [\r\n        { name: 'email', type: 'text', required: true, span: true },\r\n        { name: 'firstName', type: 'text', required: true, min: 2, },\r\n        { name: 'lastName', type: 'text', required: true, min: 2, },\r\n        this.roleField,\r\n      ]\r\n    },\r\n    mode: 'create',\r\n    buttons: [\r\n      { name: 'create', action: { url: 'members/dto?action=invite', method: 'post', successMessage: 'Updated successfully' } }\r\n    ]\r\n  };\r\n\r\n  membersFormConfig: FormConfig = {\r\n\r\n    title : 'Member Access',\r\n    alertConfig : {messages :[ {type : 'warn', message : 'You can amend the member\\'s role here'}] },  // Changed: content to message\r\n    fields: [\r\n      { name: 'email', type: 'text',readonly: true, span: true },\r\n      { name: 'firstName', type: 'text', readonly: true },\r\n      { name: 'lastName', type: 'text',  readonly: true },\r\n      this.roleField,\r\n    ],\r\n\r\n  }\r\n\r\n  tableReload: Subject<boolean> = new Subject();\r\n  membersTableConfig: TableConfig = {\r\n\r\n    greyOut : (value) => value.accepted == false,\r\n    elevation: 'low',\r\n    logResponse : true,\r\n    minColumns: ['memberName'],\r\n    minButtons: ['edit','remove'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n      { name: 'memberName', type: 'text', icons : [\r\n        { name: 'schedule', tip : 'Waiting for user to accept invitation',  condition: x => !x.accepted }\r\n      ] },\r\n      { name: 'email', type: 'text' },\r\n      { name: 'roleName', alias : 'Role', type: 'text'},\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'Add Member', dialog : true, detailsConfig: this.inviteDialogConfig },\r\n      { name: 'edit', icon: { name: 'security' }, tip : 'Edit Access', dialog: true, action: { url: 'members/dto?action=role', method: 'post' }, },\r\n      { name: 'remove', icon: { name: 'close', color : 'red' }, tip : 'Remove Member', confirm: { message: 'Remove Member from this Organisation ?' }, action: { url: 'members/dto?action=remove', method: 'post' }, disabled : x => x.own },\r\n    ],\r\n\r\n    loadAction: { url: 'members/all/x' },\r\n\r\n    formConfig: this.membersFormConfig,\r\n  }\r\n\r\n\r\n\r\n  //Organsations\r\n\r\n  orgFormConfig: FormConfig = {\r\n    fixedTitle: true,\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, min: 2 },\r\n    ]\r\n  }\r\n  createOrgDialogConfig: DetailsDialogConfig = {\r\n    formConfig: {...this.orgFormConfig, title: 'New Organisation'},\r\n    mode: 'create',\r\n    buttons: [\r\n      { name: 'create', action: { url: 'tenants/dto?action=create', method: 'post', successMessage: 'Created successfully' } }\r\n    ]\r\n  };\r\n\r\n  renameOrgDialogConfig: DetailsDialogConfig = {\r\n    formConfig: {\r\n      ...this.orgFormConfig,\r\n      title: 'Organisation Details',\r\n      fields: [\r\n        ...this.orgFormConfig.fields,\r\n        { name: 'companyDetails', type: 'section', },\r\n        { name: 'companyName', type: 'text', span: true, alias: 'Company Name' },\r\n        { name: 'address', type: 'text', rows : 3, span: true },\r\n        { name: 'phone', type: 'text' },\r\n        { name: 'email', type: 'text' }\r\n      ]\r\n\r\n    },\r\n    mode: 'edit',\r\n    buttons: [\r\n      { name: 'edit', action: { url: 'tenants?action=edit', method: 'post', successMessage: 'Renamed successfully' } }\r\n    ]\r\n  }\r\n\r\n  orgsReload: Subject<boolean> = new Subject();\r\n  orgsTableConfig: TableConfig = {\r\n\r\n    greyOut: (value) => value.accepted == false,\r\n    elevation: 'low',\r\n    minColumns: ['name'],\r\n    minButtons: ['login','edit','leave'],\r\n    flatButtons: true,\r\n    collapseButtons : true,\r\n\r\n    columns: [\r\n      { name: 'name', alias : 'Organisation', type: 'text', icons: [{ name: 'radio_button_checked', tip : 'Current Organisation', color: 'green', condition: x => x.tenantID == this.currentTenantID }] },\r\n      { name: 'ownerName', type: 'text', alias: 'Owner' },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'New Organisation', dialog: true, detailsConfig: this.createOrgDialogConfig },\r\n      {\r\n        name: 'login', display: 'Switch to this Organisation', confirm: { message: 'Switch to this Organisation ?' }, action: { url: 'tenants/dto?action=switch', method: 'post' }, icon: { name: 'login', },\r\n        visible: x => x.tenantID != this.currentTenantID\r\n      },\r\n      {\r\n        name: 'edit', display: 'Rename Organisation', dialog: true, detailsConfig: this.renameOrgDialogConfig ,\r\n        visible: x => x.own\r\n      },\r\n      {\r\n        name: 'leave', tip: 'Leave', icon: { name: 'directions_run', color : 'red'}, confirm: { message: 'Leave this Organisation ?' }, action: { url: 'members/dto?action=remove', method: 'post' } ,\r\n        disabled : x => x.own\r\n      },\r\n    ],\r\n\r\n    loadAction: { url: 'tenants/my_tenants/x' },\r\n\r\n  }\r\n\r\n\r\n\r\n  //Email\r\n  mailerFormConfig: FormConfig = {\r\n    fields: [\r\n      { name: 'smtp', type: 'text', required: true, alias: 'SMTP Server' },\r\n      { name: 'port', type: 'number', required: true, defaultValue: 587 },\r\n      { name: 'address', type: 'text', required: true, alias: 'Email Address' },\r\n      { name: 'display', type: 'text', required: true, alias: 'Display Name' },\r\n      { name: 'password', type: 'text-mask', required: true, span: true }, // Changed: password -> text-mask\r\n\r\n      { name: 'enableSsl', type: 'checkbox', alias: 'Enable SSL' },\r\n      { name: 'isBodyHtml', type: 'checkbox', alias: 'HTML Body' },\r\n\r\n\r\n    ]\r\n  }\r\n\r\n  mailerTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    elevation: 'low',\r\n    minColumns: ['smtp', 'address'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n      { name: 'smtp', type: 'text', alias: 'SMTP Server' },\r\n      { name: 'port', type: 'number' },\r\n      { name: 'address', type: 'text', alias: 'Email Address' },\r\n      { name: 'display', type: 'text', alias: 'Display Name' },\r\n      { name: 'enableSsl', type: 'checkbox', alias: 'SSL Enabled' },\r\n      { name: 'isBodyHtml', type: 'checkbox', alias: 'HTML Body' },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'Configure Email', dialog: true, action: { url: 'mailerconfigs?action=create', method: 'post' } },\r\n      { name: 'edit', dialog: true, action: { url: 'mailerconfigs?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'mailerconfigs?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'mailerconfigs/all/x' },\r\n    formConfig: this.mailerFormConfig\r\n  }\r\n}\r\n","<div class=\"container\">\r\n\r\n  <div>\r\n\r\n    <label class=\"title\" >Organisation Details</label>\r\n    <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n    <div *ngIf=\"currTenant && plan\" class=\"mb-2 mt-3 tin-grid\" style=\" font-size: 14px;\">\r\n\r\n      <div class=\"tin-col mb-3\" style=\"max-width: 500px;\">\r\n        <spa-select display=\"Current Organisation\" [options]=\"tenants\" optionDisplay=\"name\" optionValue=\"tenantID\" [(value)]=\"currentTenantID\"\r\n          hint=\"You are required to login again after switching organisations.\" style=\"min-width: 300px;margin-bottom: 10px;\"></spa-select>\r\n        <button mat-stroked-button color=\"primary\" [disabled]=\"currentTenantID == currTenant.tenantID\" (click)=\"switchTenant()\">Switch</button>\r\n      </div>\r\n\r\n    </div>\r\n\r\n  </div>\r\n\r\n\r\n  <ng-container *ngIf=\"ownTenant\" >\r\n <!-- Members -->\r\n  <div class=\"mt-3\" >\r\n\r\n    <label class=\"title\" >Members</label>\r\n    <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n    <label class=\"subtitle text-muted\">Invite other users to join your organisation as partners or employees to form a partnership or company.</label>\r\n\r\n    <spa-table [config]=\"membersTableConfig\" [reload]=\"tableReload\" ></spa-table>\r\n\r\n  </div>\r\n\r\n\r\n<!-- My Organisations -->\r\n  <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n    <label class=\"title\" >My Organisations</label>\r\n    <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n    <label class=\"subtitle text-muted\">Organisations that you are a member of.</label>\r\n\r\n    <spa-table [config]=\"orgsTableConfig\" [reload]=\"orgsReload\" (actionResponse)=\"updateTenant($event)\"></spa-table>\r\n\r\n  </div>\r\n\r\n\r\n  <!-- My Invitations -->\r\n  <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n    <label class=\"title\">My Invitations</label>\r\n    <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n    <label class=\"subtitle text-muted\">Requests for you to join other organisations.</label>\r\n\r\n\r\n    <spa-invitations-table></spa-invitations-table>\r\n\r\n  </div>\r\n\r\n  <!-- Billing -->\r\n  <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n    <label class=\"title\" >Billing and Subscription</label>\r\n    <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n      <div *ngIf=\"currTenant && plan\" class=\"mb-1 mt-3\" style=\"max-width: 300px; font-size: 14px;\">\r\n        <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n        <spa-label display=\"Next Payment\" format=\"money\" [value]=\"plan.price\"></spa-label>\r\n        <spa-label display=\"Due Date\" format=\"date\" value=\"2024-01-01\"></spa-label>\r\n      </div>\r\n\r\n  </div>\r\n\r\n    <!-- Email -->\r\n  <div class=\"mt-3 mb-5\" *ngIf=\"ownTenant\">\r\n\r\n  <label class=\"title\">Email Configuration</label>\r\n  <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n  <label class=\"subtitle text-muted\">Configure email settings for sending notifications.</label>\r\n\r\n  <spa-table [config]=\"mailerTableConfig\"></spa-table>\r\n\r\n  </div>\r\n\r\n\r\n  </ng-container>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n","import { Component, inject } from '@angular/core';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { FormConfig, TableConfig, PageConfig } from '../../classes/Classes';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-tenants',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class TenantsComponent {\r\n  private dataService = inject(DataServiceLib);\r\n  private messageService = inject(MessageService);\r\n  private authService = inject(AuthService);\r\n\r\n  tenantFormConfig: FormConfig = {\r\n\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, min: 2 },\r\n      { name: 'planID', alias :'Plan', type: 'number', required: true },\r\n    ],\r\n\r\n    reset: true,\r\n\r\n  }\r\n\r\n  tenantsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n      { name: 'tenantID', type: 'number', alias: 'ID' },\r\n      { name: 'name', type: 'text' },\r\n      { name: 'planName', alias : 'Plan', type: 'text' },\r\n\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'tenants?action=create', method: 'post' }},\r\n      { name: 'view', dialog: true },\r\n      { name: 'edit', dialog: true, action: { url: 'tenants?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'tenants?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'tenants/all_tenants/x' },\r\n\r\n    formConfig: this.tenantFormConfig\r\n\r\n  }\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Tenants',\r\n    tableConfig: this.tenantsTableConfig\r\n  };\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'spa-bug',\r\n    templateUrl: './bug.component.html',\r\n    styleUrls: ['./bug.component.css'],\r\n    standalone: false\r\n})\r\nexport class BugComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n}\r\n","<p>Report a fault</p>\r\n","import { Component, inject } from '@angular/core';\r\nimport { FormConfig, TableConfig, PageConfig } from '../../classes/Classes';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-membership',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class MembershipComponent {\r\n  private authService = inject(AuthService);\r\n\r\n  formConfig: FormConfig = {\r\n\r\n    fields: [\r\n      { name: 'tenantName', type: 'text', required: true, readonly: true },\r\n      { name: 'memberName', type: 'text', required: true, min: 2, readonly: true },\r\n\r\n    ],\r\n\r\n    reset: true,\r\n  }\r\n\r\n  membersTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['memberName','tenantName', 'roleName'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n      { name: 'tenantName', type: 'text' },\r\n      { name: 'memberName', type: 'text' },\r\n      { name: 'roleName', type: 'text' },\r\n      { name: 'status', type: 'text' },\r\n    ],\r\n\r\n    buttons: [\r\n      // { name: 'create', display: 'Create', dialog: true, action: { url: 'members?action=create', method: 'post' } },\r\n      { name: 'view', dialog: true },\r\n      { name: 'edit', dialog: true, action: { url: 'members?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'members?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'members/every/x' },\r\n\r\n    formConfig: this.formConfig\r\n  }\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Membership',\r\n    tableConfig: this.membersTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { FormConfig, TableConfig, PageConfig } from '../../classes/Classes';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-plans',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class PlansComponent {\r\n  private authService = inject(AuthService);\r\n\r\n  formConfig: FormConfig = {\r\n\r\n    fields: [\r\n      { name: 'name', type: 'text', required: true, min: 2, span: true },\r\n      { name: 'description', type: 'text', required: true, min: 2, span: true },\r\n      { name: 'price', type: 'money', required: true, span: true },\r\n      { name: 'billingCycle', alias: 'Billing Cycle', type: 'select', required: true, span: true, options: [{ value: 0, display: 'Monthly' }, { value: 1, display: 'Annual' }] }, // Added: billing period\r\n      { name: 'trialDays', alias: 'Trial Days', type: 'number', span: true }, // Added: free trial length\r\n      { name: 'maxUsers', alias: 'Max Users', type: 'number', span: true }, // Added: user count limit (0 = unlimited)\r\n      { name: 'isActive', alias: 'Active', type: 'checkbox', span: true }, // Added: plan visibility toggle\r\n      { name: 'sortOrder', alias: 'Sort Order', type: 'number', span: true }, // Added: display ordering\r\n    ],\r\n\r\n    reset: true,\r\n  }\r\n\r\n  plansTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n      { name: 'planID', type: 'text' },\r\n      { name: 'name', type: 'text' },\r\n      { name: 'price', type: 'money' },\r\n      { name: 'billingCycle', alias: 'Billing', type: 'text', options: [{ value: 0, display: 'Monthly' }, { value: 1, display: 'Annual' }] }, // Added: billing period column\r\n      { name: 'trialDays', alias: 'Trial Days', type: 'text' }, // Added: trial days column\r\n      { name: 'maxUsers', alias: 'Max Users', type: 'text' }, // Added: user limit column\r\n      { name: 'isActive', alias: 'Active', type: 'checkbox' }, // Added: active status column\r\n      { name: 'sortOrder', alias: 'Order', type: 'text' }, // Added: sort order column\r\n      { name: 'featureCount', alias: 'Features', type: 'text' }, // Added: enabled feature count\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'plans?action=create', method: 'post' } },\r\n      { name: 'view', dialog: true },\r\n      { name: 'edit', dialog: true, action: { url: 'plans?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'plans?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'plans/all/x' },\r\n\r\n    formConfig: this.formConfig\r\n\r\n  }\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Plans',\r\n    tableConfig: this.plansTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { FormConfig, TableConfig, PageConfig } from '../../classes/Classes';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n// Feature registry admin component — CRUD for master feature list (admin-only, TenantID=1)\r\n@Component({\r\n    selector: 'spa-features',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class FeaturesComponent {\r\n  private authService = inject(AuthService);\r\n\r\n  formConfig: FormConfig = {\r\n\r\n    fields: [\r\n      { name: 'featureKey', alias: 'Feature Key', type: 'text', required: true, min: 2, span: true },\r\n      { name: 'name', type: 'text', required: true, min: 2, span: true },\r\n      { name: 'description', type: 'text', required: true, min: 2, span: true },\r\n      { name: 'featureType', alias: 'Feature Type', type: 'select', required: true, span: true, options: [{ value: 0, display: 'Module' }, { value: 1, display: 'Feature' }] },\r\n      { name: 'moduleCapName', alias: 'Module Cap Name', type: 'text', span: true },\r\n    ],\r\n\r\n    reset: true,\r\n  }\r\n\r\n  featuresTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['name', 'featureKey'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n      { name: 'featureID', alias: 'ID', type: 'text' },\r\n      { name: 'featureKey', alias: 'Feature Key', type: 'text' },\r\n      { name: 'name', type: 'text' },\r\n      { name: 'description', type: 'text' },\r\n      { name: 'featureType', alias: 'Type', type: 'text', options: [{ value: 0, display: 'Module' }, { value: 1, display: 'Feature' }] },\r\n      { name: 'moduleCapName', alias: 'Cap Name', type: 'text' },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'features?action=create', method: 'post' } },\r\n      { name: 'view', dialog: true },\r\n      { name: 'edit', dialog: true, action: { url: 'features?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'features?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'features/all/x' },\r\n\r\n    formConfig: this.formConfig\r\n\r\n  }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Features',\r\n    tableConfig: this.featuresTableConfig\r\n  };\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { FormConfig, TableConfig, PageConfig } from '../../classes/Classes';\r\nimport { AuthService } from '../../services/auth.service';\r\n\r\n// Plan-Feature mapping admin component — manage which features are enabled per plan (admin-only, TenantID=1)\r\n@Component({\r\n    selector: 'spa-plan-features',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class PlanFeaturesComponent {\r\n  private authService = inject(AuthService);\r\n\r\n  formConfig: FormConfig = {\r\n\r\n    fields: [\r\n      { name: 'planID', alias: 'Plan', type: 'select', required: true, span: true, loadAction: { url: 'plans/list/x' } },\r\n      { name: 'featureID', alias: 'Feature', type: 'select', required: true, span: true, loadAction: { url: 'features/list/x' } },\r\n      { name: 'enabled', type: 'checkbox', span: true },\r\n      { name: 'limit', type: 'number', span: true },\r\n    ],\r\n\r\n    reset: true,\r\n  }\r\n\r\n  planFeaturesTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['planName', 'featureName'],\r\n    flatButtons: true,\r\n\r\n    columns: [\r\n      { name: 'planFeatureID', alias: 'ID', type: 'text' },\r\n      { name: 'planName', alias: 'Plan', type: 'text' },\r\n      { name: 'featureName', alias: 'Feature', type: 'text' },\r\n      { name: 'featureKey', alias: 'Feature Key', type: 'text' },\r\n      { name: 'featureType', alias: 'Type', type: 'text', options: [{ value: 0, display: 'Module' }, { value: 1, display: 'Feature' }] },\r\n      { name: 'enabled', type: 'checkbox' },\r\n      { name: 'limit', type: 'text' },\r\n    ],\r\n\r\n    buttons: [\r\n      { name: 'create', display: 'Create', dialog: true, action: { url: 'planfeatures?action=create', method: 'post' } },\r\n      { name: 'view', dialog: true },\r\n      { name: 'edit', dialog: true, action: { url: 'planfeatures?action=edit', method: 'post' } },\r\n      { name: 'delete', dialog: true, action: { url: 'planfeatures?action=delete', method: 'post' } },\r\n    ],\r\n\r\n    loadAction: { url: 'planfeatures/all/x' },\r\n\r\n    formConfig: this.formConfig\r\n\r\n  }\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Plan Features',\r\n    tableConfig: this.planFeaturesTableConfig\r\n  };\r\n}\r\n","// Subscription management page — current plan display, plan comparison, upgrade/downgrade\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { SubscriptionService } from '../../services/subscription.service';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\n@Component({\r\n  selector: 'spa-subscription',\r\n  template: `\r\n    <div class=\"subscription-container\">\r\n      <h4 class=\"page-title\"><mat-icon>card_membership</mat-icon> Subscription</h4>\r\n\r\n      <!-- Current Plan Card -->\r\n      <mat-card class=\"current-plan-card\" *ngIf=\"currentSubscription\">\r\n        <mat-card-header>\r\n          <mat-icon mat-card-avatar class=\"plan-avatar\">verified</mat-icon>\r\n          <mat-card-title>{{ currentSubscription.planName || 'No Plan' }}</mat-card-title>\r\n          <mat-card-subtitle>\r\n            <span class=\"status-badge\" [ngClass]=\"'status-' + (currentSubscription.status || 0)\">\r\n              {{ getStatusLabel(currentSubscription.status) }}\r\n            </span>\r\n          </mat-card-subtitle>\r\n        </mat-card-header>\r\n        <mat-card-content>\r\n          <div class=\"plan-details\">\r\n            <div class=\"detail-item\">\r\n              <span class=\"detail-label\">Price</span>\r\n              <span class=\"detail-value\">\\${{ currentSubscription.planPrice | number:'1.2-2' }}/{{ currentSubscription.planBillingCycle === 1 ? 'year' : 'month' }}</span>\r\n            </div>\r\n            <div class=\"detail-item\">\r\n              <span class=\"detail-label\">Start Date</span>\r\n              <span class=\"detail-value\">{{ currentSubscription.startDate | date:'mediumDate' }}</span>\r\n            </div>\r\n            <div class=\"detail-item\">\r\n              <span class=\"detail-label\">End Date</span>\r\n              <span class=\"detail-value\">{{ currentSubscription.endDate | date:'mediumDate' }}</span>\r\n            </div>\r\n            <div class=\"detail-item\" *ngIf=\"currentSubscription.trialEndDate\">\r\n              <span class=\"detail-label\">Trial Ends</span>\r\n              <span class=\"detail-value\">{{ currentSubscription.trialEndDate | date:'mediumDate' }}</span>\r\n            </div>\r\n          </div>\r\n        </mat-card-content>\r\n      </mat-card>\r\n\r\n      <!-- No Subscription Message -->\r\n      <mat-card class=\"current-plan-card\" *ngIf=\"!currentSubscription && !loading\">\r\n        <mat-card-content>\r\n          <p class=\"no-plan-message\"><mat-icon>info</mat-icon> No active subscription. Choose a plan below to get started.</p>\r\n        </mat-card-content>\r\n      </mat-card>\r\n\r\n      <!-- Plan Comparison Grid -->\r\n      <h5 class=\"section-title\">Available Plans</h5>\r\n      <div class=\"plans-grid\">\r\n        <mat-card *ngFor=\"let plan of availablePlans\" class=\"plan-card\" [ngClass]=\"{'current': plan.planID === currentSubscription?.planID}\">\r\n          <mat-card-header>\r\n            <mat-card-title>{{ plan.name }}</mat-card-title>\r\n            <mat-card-subtitle>{{ plan.description }}</mat-card-subtitle>\r\n          </mat-card-header>\r\n          <mat-card-content>\r\n            <div class=\"plan-price\">\r\n              <span class=\"price-amount\">\\${{ plan.price | number:'1.2-2' }}</span>\r\n              <span class=\"price-period\">/{{ plan.billingCycle === 1 ? 'year' : 'month' }}</span>\r\n            </div>\r\n            <div class=\"plan-limits\">\r\n              <div class=\"limit-item\">\r\n                <mat-icon>group</mat-icon>\r\n                <span>{{ plan.maxUsers === 0 ? 'Unlimited' : plan.maxUsers }} users</span>\r\n              </div>\r\n              <div class=\"limit-item\" *ngIf=\"plan.trialDays > 0\">\r\n                <mat-icon>schedule</mat-icon>\r\n                <span>{{ plan.trialDays }}-day free trial</span>\r\n              </div>\r\n            </div>\r\n            <mat-divider></mat-divider>\r\n            <div class=\"feature-list\">\r\n              <div *ngFor=\"let feature of plan.features\" class=\"feature-item\">\r\n                <mat-icon class=\"feature-check\">check_circle</mat-icon>\r\n                <span>{{ feature.name }}</span>\r\n                <span class=\"feature-limit\" *ngIf=\"feature.limit > 0\">(limit: {{ feature.limit }})</span>\r\n              </div>\r\n              <div *ngIf=\"!plan.features || plan.features.length === 0\" class=\"no-features\">\r\n                <mat-icon>info_outline</mat-icon> No features configured\r\n              </div>\r\n            </div>\r\n          </mat-card-content>\r\n          <mat-card-actions>\r\n            <button mat-raised-button *ngIf=\"plan.planID === currentSubscription?.planID\" disabled color=\"primary\">\r\n              <mat-icon>check</mat-icon> Current Plan\r\n            </button>\r\n            <button mat-raised-button *ngIf=\"plan.planID !== currentSubscription?.planID\" color=\"accent\" (click)=\"confirmChangePlan(plan)\">\r\n              <mat-icon>{{ isPlanUpgrade(plan) ? 'upgrade' : 'arrow_downward' }}</mat-icon>\r\n              {{ isPlanUpgrade(plan) ? 'Upgrade' : 'Switch' }}\r\n            </button>\r\n          </mat-card-actions>\r\n        </mat-card>\r\n      </div>\r\n\r\n      <!-- Confirmation Dialog (inline) -->\r\n      <div class=\"overlay\" *ngIf=\"showConfirmation\" (click)=\"cancelChange()\">\r\n        <mat-card class=\"confirm-dialog\" (click)=\"$event.stopPropagation()\">\r\n          <mat-card-header>\r\n            <mat-card-title>Confirm Plan Change</mat-card-title>\r\n          </mat-card-header>\r\n          <mat-card-content>\r\n            <p>Are you sure you want to {{ isPlanUpgrade(selectedPlan) ? 'upgrade' : 'switch' }} to the <strong>{{ selectedPlan?.name }}</strong> plan?</p>\r\n            <p class=\"price-info\">Price: <strong>\\${{ selectedPlan?.price | number:'1.2-2' }}/{{ selectedPlan?.billingCycle === 1 ? 'year' : 'month' }}</strong></p>\r\n            <p *ngIf=\"selectedPlan?.trialDays > 0\" class=\"trial-info\">\r\n              <mat-icon>schedule</mat-icon> Includes {{ selectedPlan?.trialDays }}-day free trial\r\n            </p>\r\n          </mat-card-content>\r\n          <mat-card-actions align=\"end\">\r\n            <button mat-button (click)=\"cancelChange()\">Cancel</button>\r\n            <button mat-raised-button color=\"primary\" (click)=\"executePlanChange()\" [disabled]=\"changingPlan\">\r\n              <mat-icon *ngIf=\"changingPlan\">hourglass_empty</mat-icon>\r\n              {{ changingPlan ? 'Processing...' : 'Confirm' }}\r\n            </button>\r\n          </mat-card-actions>\r\n        </mat-card>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .subscription-container { padding: 16px; max-width: 1200px; }\r\n    .page-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n    .section-title { margin: 24px 0 16px; color: #555; }\r\n\r\n    .current-plan-card { margin-bottom: 24px; }\r\n    .plan-avatar { font-size: 40px; width: 40px; height: 40px; color: #1976d2; }\r\n    .plan-details { display: flex; gap: 32px; flex-wrap: wrap; padding: 8px 0; }\r\n    .detail-item { display: flex; flex-direction: column; }\r\n    .detail-label { font-size: 12px; color: #888; text-transform: uppercase; }\r\n    .detail-value { font-size: 16px; font-weight: 500; }\r\n\r\n    .status-badge { padding: 2px 10px; border-radius: 12px; font-size: 12px; font-weight: 500; }\r\n    .status-0 { background: #e3f2fd; color: #1565c0; } /* Trial */\r\n    .status-1 { background: #e8f5e9; color: #2e7d32; } /* Active */\r\n    .status-2 { background: #fff3e0; color: #e65100; } /* PastDue */\r\n    .status-3 { background: #fce4ec; color: #c62828; } /* Cancelled */\r\n    .status-4 { background: #f5f5f5; color: #616161; } /* Expired */\r\n\r\n    .no-plan-message { display: flex; align-items: center; gap: 8px; color: #666; margin: 0; }\r\n\r\n    .plans-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }\r\n    .plan-card { display: flex; flex-direction: column; }\r\n    .plan-card.current { border: 2px solid #1976d2; }\r\n    .plan-price { text-align: center; padding: 16px 0; }\r\n    .price-amount { font-size: 32px; font-weight: 700; color: #1976d2; }\r\n    .price-period { font-size: 14px; color: #888; }\r\n\r\n    .plan-limits { display: flex; gap: 16px; justify-content: center; padding-bottom: 12px; }\r\n    .limit-item { display: flex; align-items: center; gap: 4px; font-size: 13px; color: #666; }\r\n    .limit-item mat-icon { font-size: 18px; width: 18px; height: 18px; }\r\n\r\n    .feature-list { padding: 12px 0; }\r\n    .feature-item { display: flex; align-items: center; gap: 8px; padding: 4px 0; font-size: 14px; }\r\n    .feature-check { color: #4caf50; font-size: 18px; width: 18px; height: 18px; }\r\n    .feature-limit { font-size: 12px; color: #999; }\r\n    .no-features { display: flex; align-items: center; gap: 4px; color: #999; font-size: 13px; }\r\n\r\n    mat-card-actions { margin-top: auto; }\r\n    mat-card-actions button { width: 100%; }\r\n\r\n    .overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.4); display: flex; align-items: center; justify-content: center; z-index: 1000; }\r\n    .confirm-dialog { max-width: 440px; width: 90%; }\r\n    .price-info { font-size: 16px; }\r\n    .trial-info { display: flex; align-items: center; gap: 4px; color: #1976d2; font-size: 14px; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class SubscriptionPageComponent implements OnInit {\r\n\r\n  currentSubscription: any = null;\r\n  availablePlans: any[] = [];\r\n  loading = true;\r\n  showConfirmation = false;\r\n  selectedPlan: any = null;\r\n  changingPlan = false;\r\n\r\n  constructor(\r\n    private httpService: HttpService,\r\n    private subscriptionService: SubscriptionService,\r\n    private snackBar: MatSnackBar\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.loadCurrentSubscription();\r\n    this.loadAvailablePlans();\r\n  }\r\n\r\n  // Load the current tenant's active subscription\r\n  loadCurrentSubscription() {\r\n    this.httpService.Get('subscriptions/current').subscribe({\r\n      next: (response: any) => {\r\n        if (response?.success) {\r\n          this.currentSubscription = response.data;\r\n        }\r\n        this.loading = false;\r\n      },\r\n      error: () => { this.loading = false; }\r\n    });\r\n  }\r\n\r\n  // Load all available plans with their features\r\n  loadAvailablePlans() {\r\n    this.httpService.Get('subscriptions/plans').subscribe({\r\n      next: (response: any) => {\r\n        if (response?.success) {\r\n          this.availablePlans = response.data || [];\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  // Get human-readable subscription status label\r\n  getStatusLabel(status: number): string {\r\n    const labels: Record<number, string> = { 0: 'Trial', 1: 'Active', 2: 'Past Due', 3: 'Cancelled', 4: 'Expired' };\r\n    return labels[status] || 'Unknown';\r\n  }\r\n\r\n  // Check if the target plan is an upgrade (higher price)\r\n  isPlanUpgrade(plan: any): boolean {\r\n    if (!this.currentSubscription) return true;\r\n    return (plan?.price || 0) > (this.currentSubscription?.planPrice || 0);\r\n  }\r\n\r\n  // Show confirmation dialog for plan change\r\n  confirmChangePlan(plan: any) {\r\n    this.selectedPlan = plan;\r\n    this.showConfirmation = true;\r\n  }\r\n\r\n  // Cancel the plan change dialog\r\n  cancelChange() {\r\n    this.showConfirmation = false;\r\n    this.selectedPlan = null;\r\n  }\r\n\r\n  // Execute the plan change via API\r\n  executePlanChange() {\r\n    if (!this.selectedPlan) return;\r\n    this.changingPlan = true;\r\n\r\n    this.httpService.Post('subscriptions/change', { planID: this.selectedPlan.planID }).subscribe({\r\n      next: (response: any) => {\r\n        this.changingPlan = false;\r\n        this.showConfirmation = false;\r\n        if (response?.success) {\r\n          this.snackBar.open('Plan changed successfully', '', { duration: 3000 });\r\n          this.loadCurrentSubscription(); // Refresh current subscription\r\n          this.subscriptionService.loadFeatures(); // Refresh enabled features for UI gating\r\n        } else {\r\n          this.snackBar.open(response?.message || 'Failed to change plan', '', { duration: 3000 });\r\n        }\r\n      },\r\n      error: () => {\r\n        this.changingPlan = false;\r\n        this.snackBar.open('Failed to change plan', '', { duration: 3000 });\r\n      }\r\n    });\r\n  }\r\n}\r\n","// Billing page — invoice history table, invoice detail dialog, and payment flow dialog\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\n@Component({\r\n  selector: 'spa-billing',\r\n  template: `\r\n    <div class=\"billing-container\">\r\n      <h4 class=\"page-title\"><mat-icon>receipt_long</mat-icon> Billing & Invoices</h4>\r\n\r\n      <!-- Current Subscription Summary -->\r\n      <mat-card class=\"summary-card\" *ngIf=\"currentSubscription\">\r\n        <mat-card-content>\r\n          <div class=\"summary-row\">\r\n            <div class=\"summary-item\">\r\n              <span class=\"summary-label\">Current Plan</span>\r\n              <span class=\"summary-value\">{{ currentSubscription.planName || 'No Plan' }}</span>\r\n            </div>\r\n            <div class=\"summary-item\">\r\n              <span class=\"summary-label\">Status</span>\r\n              <span class=\"status-badge\" [ngClass]=\"'status-' + (currentSubscription.status || 0)\">\r\n                {{ getStatusLabel(currentSubscription.status) }}\r\n              </span>\r\n            </div>\r\n            <div class=\"summary-item\">\r\n              <span class=\"summary-label\">Next Billing</span>\r\n              <span class=\"summary-value\">{{ currentSubscription.endDate | date:'mediumDate' }}</span>\r\n            </div>\r\n          </div>\r\n        </mat-card-content>\r\n      </mat-card>\r\n\r\n      <!-- Invoice History Table -->\r\n      <mat-card class=\"invoices-card\">\r\n        <mat-card-header>\r\n          <mat-card-title>Invoice History</mat-card-title>\r\n        </mat-card-header>\r\n        <mat-card-content>\r\n          <div class=\"table-container\" *ngIf=\"invoices.length > 0\">\r\n            <table class=\"invoice-table\">\r\n              <thead>\r\n                <tr>\r\n                  <th>Date</th>\r\n                  <th>Description</th>\r\n                  <th>Amount</th>\r\n                  <th>Status</th>\r\n                  <th>Payment Method</th>\r\n                  <th>Actions</th>\r\n                </tr>\r\n              </thead>\r\n              <tbody>\r\n                <tr *ngFor=\"let invoice of invoices\">\r\n                  <td>{{ invoice.invoiceDate | date:'mediumDate' }}</td>\r\n                  <td>{{ invoice.description || invoice.planName + ' Subscription' }}</td>\r\n                  <td>{{ invoice.currency }} {{ invoice.amount | number:'1.2-2' }}</td>\r\n                  <td>\r\n                    <span class=\"invoice-status\" [ngClass]=\"'inv-status-' + invoice.status\">\r\n                      {{ getInvoiceStatusLabel(invoice.status) }}\r\n                    </span>\r\n                  </td>\r\n                  <td>{{ invoice.paymentMethod || '-' }}</td>\r\n                  <td>\r\n                    <button mat-icon-button (click)=\"viewInvoiceDetail(invoice)\" matTooltip=\"View Details\">\r\n                      <mat-icon>visibility</mat-icon>\r\n                    </button>\r\n                    <button mat-icon-button *ngIf=\"invoice.status === 0\" (click)=\"initiatePayment(invoice)\" matTooltip=\"Pay Now\" color=\"primary\">\r\n                      <mat-icon>payment</mat-icon>\r\n                    </button>\r\n                  </td>\r\n                </tr>\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n          <div class=\"empty-state\" *ngIf=\"invoices.length === 0 && !loading\">\r\n            <mat-icon>receipt</mat-icon>\r\n            <p>No invoices yet</p>\r\n          </div>\r\n          <div class=\"loading-state\" *ngIf=\"loading\">\r\n            <mat-spinner diameter=\"32\"></mat-spinner>\r\n            <p>Loading invoices...</p>\r\n          </div>\r\n        </mat-card-content>\r\n      </mat-card>\r\n\r\n      <!-- Invoice Detail Dialog (inline overlay) -->\r\n      <div class=\"overlay\" *ngIf=\"showDetail\" (click)=\"closeDetail()\">\r\n        <mat-card class=\"detail-dialog\" (click)=\"$event.stopPropagation()\">\r\n          <mat-card-header>\r\n            <mat-card-title>Invoice Detail</mat-card-title>\r\n            <button mat-icon-button class=\"close-btn\" (click)=\"closeDetail()\">\r\n              <mat-icon>close</mat-icon>\r\n            </button>\r\n          </mat-card-header>\r\n          <mat-card-content *ngIf=\"selectedInvoice\">\r\n            <div class=\"detail-grid\">\r\n              <div class=\"detail-field\">\r\n                <span class=\"field-label\">Plan</span>\r\n                <span class=\"field-value\">{{ selectedInvoice.planName }}</span>\r\n              </div>\r\n              <div class=\"detail-field\">\r\n                <span class=\"field-label\">Amount</span>\r\n                <span class=\"field-value\">{{ selectedInvoice.currency }} {{ selectedInvoice.amount | number:'1.2-2' }}</span>\r\n              </div>\r\n              <div class=\"detail-field\">\r\n                <span class=\"field-label\">Status</span>\r\n                <span class=\"invoice-status\" [ngClass]=\"'inv-status-' + selectedInvoice.status\">\r\n                  {{ getInvoiceStatusLabel(selectedInvoice.status) }}\r\n                </span>\r\n              </div>\r\n              <div class=\"detail-field\">\r\n                <span class=\"field-label\">Invoice Date</span>\r\n                <span class=\"field-value\">{{ selectedInvoice.invoiceDate | date:'medium' }}</span>\r\n              </div>\r\n              <div class=\"detail-field\" *ngIf=\"selectedInvoice.paidDate\">\r\n                <span class=\"field-label\">Paid Date</span>\r\n                <span class=\"field-value\">{{ selectedInvoice.paidDate | date:'medium' }}</span>\r\n              </div>\r\n              <div class=\"detail-field\" *ngIf=\"selectedInvoice.paymentReference\">\r\n                <span class=\"field-label\">Payment Reference</span>\r\n                <span class=\"field-value\">{{ selectedInvoice.paymentReference }}</span>\r\n              </div>\r\n              <div class=\"detail-field\" *ngIf=\"selectedInvoice.paymentMethod\">\r\n                <span class=\"field-label\">Payment Method</span>\r\n                <span class=\"field-value\">{{ selectedInvoice.paymentMethod }}</span>\r\n              </div>\r\n            </div>\r\n\r\n            <!-- Payment Transaction Audit Trail -->\r\n            <div class=\"transactions-section\" *ngIf=\"selectedInvoice.transactions?.length > 0\">\r\n              <h5>Payment Transactions</h5>\r\n              <table class=\"transaction-table\">\r\n                <thead>\r\n                  <tr>\r\n                    <th>Date</th>\r\n                    <th>Reference</th>\r\n                    <th>Amount</th>\r\n                    <th>Status</th>\r\n                  </tr>\r\n                </thead>\r\n                <tbody>\r\n                  <tr *ngFor=\"let txn of selectedInvoice.transactions\">\r\n                    <td>{{ txn.createdDate | date:'medium' }}</td>\r\n                    <td>{{ txn.gatewayReference || '-' }}</td>\r\n                    <td>{{ txn.currency }} {{ txn.amount | number:'1.2-2' }}</td>\r\n                    <td>\r\n                      <span class=\"txn-status\" [ngClass]=\"'txn-status-' + txn.status\">\r\n                        {{ getPaymentStatusLabel(txn.status) }}\r\n                      </span>\r\n                    </td>\r\n                  </tr>\r\n                </tbody>\r\n              </table>\r\n            </div>\r\n            <div class=\"transactions-section\" *ngIf=\"!selectedInvoice.transactions || selectedInvoice.transactions.length === 0\">\r\n              <h5>Payment Transactions</h5>\r\n              <p class=\"no-transactions\">No payment transactions recorded</p>\r\n            </div>\r\n          </mat-card-content>\r\n        </mat-card>\r\n      </div>\r\n\r\n      <!-- Payment Flow Dialog (inline overlay) -->\r\n      <div class=\"overlay\" *ngIf=\"showPayment\" (click)=\"closePayment()\">\r\n        <mat-card class=\"payment-dialog\" (click)=\"$event.stopPropagation()\">\r\n          <mat-card-header>\r\n            <mat-card-title>Process Payment</mat-card-title>\r\n          </mat-card-header>\r\n          <mat-card-content *ngIf=\"paymentInvoice\">\r\n            <div class=\"payment-summary\">\r\n              <p>Plan: <strong>{{ paymentInvoice.planName }}</strong></p>\r\n              <p>Amount: <strong>{{ paymentInvoice.currency }} {{ paymentInvoice.amount | number:'1.2-2' }}</strong></p>\r\n            </div>\r\n\r\n            <!-- Payment processing state -->\r\n            <div class=\"payment-state\" *ngIf=\"paymentProcessing\">\r\n              <mat-spinner diameter=\"40\"></mat-spinner>\r\n              <p>Processing payment...</p>\r\n            </div>\r\n\r\n            <!-- Payment success state -->\r\n            <div class=\"payment-state success\" *ngIf=\"paymentResult?.success\">\r\n              <mat-icon class=\"result-icon success-icon\">check_circle</mat-icon>\r\n              <p>Payment completed successfully!</p>\r\n              <p class=\"payment-ref\" *ngIf=\"paymentResult.reference\">Reference: {{ paymentResult.reference }}</p>\r\n            </div>\r\n\r\n            <!-- Payment redirect state (live mode) -->\r\n            <div class=\"payment-state redirect\" *ngIf=\"paymentResult && !paymentResult.success && paymentResult.redirectUrl\">\r\n              <mat-icon class=\"result-icon redirect-icon\">open_in_new</mat-icon>\r\n              <p>You will be redirected to complete payment</p>\r\n              <a mat-raised-button color=\"primary\" [href]=\"paymentResult.redirectUrl\" target=\"_blank\">\r\n                <mat-icon>payment</mat-icon> Complete Payment\r\n              </a>\r\n            </div>\r\n\r\n            <!-- Payment failure state -->\r\n            <div class=\"payment-state error\" *ngIf=\"paymentResult && !paymentResult.success && !paymentResult.redirectUrl\">\r\n              <mat-icon class=\"result-icon error-icon\">error</mat-icon>\r\n              <p>{{ paymentResult.message || 'Payment failed. Please try again.' }}</p>\r\n            </div>\r\n          </mat-card-content>\r\n          <mat-card-actions align=\"end\">\r\n            <button mat-button (click)=\"closePayment()\">{{ paymentResult?.success ? 'Done' : 'Cancel' }}</button>\r\n            <button mat-raised-button color=\"primary\" *ngIf=\"!paymentProcessing && !paymentResult\" (click)=\"processPayment()\">\r\n              <mat-icon>payment</mat-icon> Pay Now\r\n            </button>\r\n          </mat-card-actions>\r\n        </mat-card>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .billing-container { padding: 16px; max-width: 1200px; }\r\n    .page-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n\r\n    .summary-card { margin-bottom: 24px; }\r\n    .summary-row { display: flex; gap: 32px; flex-wrap: wrap; }\r\n    .summary-item { display: flex; flex-direction: column; }\r\n    .summary-label { font-size: 12px; color: #888; text-transform: uppercase; }\r\n    .summary-value { font-size: 16px; font-weight: 500; }\r\n\r\n    .status-badge { padding: 2px 10px; border-radius: 12px; font-size: 12px; font-weight: 500; }\r\n    .status-0 { background: #e3f2fd; color: #1565c0; }\r\n    .status-1 { background: #e8f5e9; color: #2e7d32; }\r\n    .status-2 { background: #fff3e0; color: #e65100; }\r\n    .status-3 { background: #fce4ec; color: #c62828; }\r\n    .status-4 { background: #f5f5f5; color: #616161; }\r\n\r\n    .invoices-card { margin-bottom: 24px; }\r\n    .table-container { overflow-x: auto; }\r\n    .invoice-table, .transaction-table { width: 100%; border-collapse: collapse; }\r\n    .invoice-table th, .invoice-table td,\r\n    .transaction-table th, .transaction-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid #e0e0e0; font-size: 14px; }\r\n    .invoice-table th, .transaction-table th { font-weight: 500; color: #666; font-size: 12px; text-transform: uppercase; }\r\n    .invoice-table tbody tr:hover { background: #f5f5f5; }\r\n\r\n    .invoice-status { padding: 2px 8px; border-radius: 10px; font-size: 12px; font-weight: 500; }\r\n    .inv-status-0 { background: #fff3e0; color: #e65100; } /* Pending */\r\n    .inv-status-1 { background: #e8f5e9; color: #2e7d32; } /* Paid */\r\n    .inv-status-2 { background: #fce4ec; color: #c62828; } /* Failed */\r\n    .inv-status-3 { background: #f3e5f5; color: #6a1b9a; } /* Refunded */\r\n\r\n    .txn-status { padding: 2px 8px; border-radius: 10px; font-size: 12px; font-weight: 500; }\r\n    .txn-status-0 { background: #e3f2fd; color: #1565c0; } /* Initiated */\r\n    .txn-status-1 { background: #fff3e0; color: #e65100; } /* Pending */\r\n    .txn-status-2 { background: #e8f5e9; color: #2e7d32; } /* Success */\r\n    .txn-status-3 { background: #fce4ec; color: #c62828; } /* Failed */\r\n    .txn-status-4 { background: #f5f5f5; color: #616161; } /* Cancelled */\r\n\r\n    .empty-state, .loading-state { display: flex; flex-direction: column; align-items: center; padding: 32px; color: #999; }\r\n    .empty-state mat-icon { font-size: 48px; width: 48px; height: 48px; margin-bottom: 8px; }\r\n\r\n    .overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.4); display: flex; align-items: center; justify-content: center; z-index: 1000; }\r\n    .detail-dialog { max-width: 640px; width: 90%; max-height: 80vh; overflow-y: auto; }\r\n    .payment-dialog { max-width: 440px; width: 90%; }\r\n\r\n    .close-btn { position: absolute; top: 8px; right: 8px; }\r\n\r\n    .detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }\r\n    .detail-field { display: flex; flex-direction: column; }\r\n    .field-label { font-size: 12px; color: #888; text-transform: uppercase; }\r\n    .field-value { font-size: 14px; font-weight: 500; }\r\n\r\n    .transactions-section { margin-top: 16px; }\r\n    .transactions-section h5 { margin: 0 0 8px; color: #555; }\r\n    .no-transactions { color: #999; font-size: 13px; }\r\n\r\n    .payment-summary { margin-bottom: 16px; }\r\n    .payment-summary p { margin: 4px 0; font-size: 15px; }\r\n\r\n    .payment-state { display: flex; flex-direction: column; align-items: center; padding: 24px; text-align: center; }\r\n    .result-icon { font-size: 48px; width: 48px; height: 48px; margin-bottom: 8px; }\r\n    .success-icon { color: #4caf50; }\r\n    .redirect-icon { color: #1976d2; }\r\n    .error-icon { color: #f44336; }\r\n    .payment-ref { font-size: 12px; color: #888; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class BillingPageComponent implements OnInit {\r\n\r\n  currentSubscription: any = null;\r\n  invoices: any[] = [];\r\n  loading = true;\r\n\r\n  // Invoice detail dialog state\r\n  showDetail = false;\r\n  selectedInvoice: any = null;\r\n\r\n  // Payment dialog state\r\n  showPayment = false;\r\n  paymentInvoice: any = null;\r\n  paymentProcessing = false;\r\n  paymentResult: any = null;\r\n\r\n  constructor(\r\n    private httpService: HttpService,\r\n    private snackBar: MatSnackBar\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.loadCurrentSubscription();\r\n    this.loadInvoices();\r\n  }\r\n\r\n  // Load current subscription summary\r\n  loadCurrentSubscription() {\r\n    this.httpService.Get('subscriptions/current').subscribe({\r\n      next: (response: any) => {\r\n        if (response?.success) {\r\n          this.currentSubscription = response.data;\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  // Load invoice history for the current tenant\r\n  loadInvoices() {\r\n    this.httpService.Get('tenantinvoices/all/x').subscribe({\r\n      next: (response: any) => {\r\n        if (response?.success) {\r\n          this.invoices = response.data || [];\r\n        }\r\n        this.loading = false;\r\n      },\r\n      error: () => { this.loading = false; }\r\n    });\r\n  }\r\n\r\n  // Subscription status label mapping\r\n  getStatusLabel(status: number): string {\r\n    const labels: Record<number, string> = { 0: 'Trial', 1: 'Active', 2: 'Past Due', 3: 'Cancelled', 4: 'Expired' };\r\n    return labels[status] || 'Unknown';\r\n  }\r\n\r\n  // Invoice status label mapping (TenantInvoiceStatus enum)\r\n  getInvoiceStatusLabel(status: number): string {\r\n    const labels: Record<number, string> = { 0: 'Pending', 1: 'Paid', 2: 'Failed', 3: 'Refunded' };\r\n    return labels[status] || 'Unknown';\r\n  }\r\n\r\n  // Payment transaction status label mapping (GatewayPaymentStatus enum)\r\n  getPaymentStatusLabel(status: number): string {\r\n    const labels: Record<number, string> = { 0: 'Initiated', 1: 'Pending', 2: 'Success', 3: 'Failed', 4: 'Cancelled' };\r\n    return labels[status] || 'Unknown';\r\n  }\r\n\r\n  // View invoice detail with payment transaction audit trail\r\n  viewInvoiceDetail(invoice: any) {\r\n    this.httpService.Get('tenantinvoices/detail/' + invoice.tenantInvoiceID).subscribe({\r\n      next: (response: any) => {\r\n        if (response?.success) {\r\n          this.selectedInvoice = response.data;\r\n          this.showDetail = true;\r\n        } else {\r\n          this.snackBar.open(response?.message || 'Failed to load invoice detail', '', { duration: 3000 });\r\n        }\r\n      },\r\n      error: () => {\r\n        this.snackBar.open('Failed to load invoice detail', '', { duration: 3000 });\r\n      }\r\n    });\r\n  }\r\n\r\n  // Close the invoice detail dialog\r\n  closeDetail() {\r\n    this.showDetail = false;\r\n    this.selectedInvoice = null;\r\n  }\r\n\r\n  // Open payment dialog for a pending invoice\r\n  initiatePayment(invoice: any) {\r\n    this.paymentInvoice = invoice;\r\n    this.paymentProcessing = false;\r\n    this.paymentResult = null;\r\n    this.showPayment = true;\r\n  }\r\n\r\n  // Process payment via payments API\r\n  processPayment() {\r\n    if (!this.paymentInvoice) return;\r\n    this.paymentProcessing = true;\r\n\r\n    this.httpService.Post('payments/process/' + this.paymentInvoice.tenantInvoiceID, {}).subscribe({\r\n      next: (response: any) => {\r\n        this.paymentProcessing = false;\r\n        if (response?.success) {\r\n          // Dev mode: payment auto-completed\r\n          this.paymentResult = { success: true, reference: response.data?.reference };\r\n          this.loadInvoices(); // Refresh invoice list\r\n        } else if (response?.data?.redirectUrl) {\r\n          // Live mode: redirect to Paynow\r\n          this.paymentResult = { success: false, redirectUrl: response.data.redirectUrl };\r\n        } else {\r\n          this.paymentResult = { success: false, message: response?.message || 'Payment failed' };\r\n        }\r\n      },\r\n      error: () => {\r\n        this.paymentProcessing = false;\r\n        this.paymentResult = { success: false, message: 'Payment request failed. Please try again.' };\r\n      }\r\n    });\r\n  }\r\n\r\n  // Close the payment dialog\r\n  closePayment() {\r\n    this.showPayment = false;\r\n    this.paymentInvoice = null;\r\n    this.paymentResult = null;\r\n    if (this.paymentResult?.success) {\r\n      this.loadInvoices(); // Refresh if payment was successful\r\n    }\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { TenantSettingsComponent } from '../../pages/tenant-settings/tenant-settings.component';\nimport { TenantsComponent } from '../../pages/tenants/tenants.component';\nimport { BugComponent } from '../../pages/bug/bug.component';\nimport { MembershipComponent } from '../../pages/membership/membership.component';\nimport { PlansComponent } from '../../pages/plans/plans.component';\nimport { FeaturesComponent } from '../../pages/features/features.component';\nimport { PlanFeaturesComponent } from '../../pages/plan-features/plan-features.component';\nimport { SubscriptionPageComponent } from '../../pages/subscription/subscription.component';\nimport { BillingPageComponent } from '../../pages/billing/billing.component';\n\nexport const TENANCY_ROUTES: Routes = [\n  { path: \"settings\", component: TenantSettingsComponent }, // Changed: Removed \"tenant-\" prefix — module path provides the namespace\n  { path: \"tenants\", component: TenantsComponent },\n  { path: \"bug\", component: BugComponent },\n  { path: \"membership\", component: MembershipComponent },\n  { path: \"plans\", component: PlansComponent },\n  { path: \"features\", component: FeaturesComponent },\n  { path: \"plan-features\", component: PlanFeaturesComponent },\n  { path: \"subscription\", component: SubscriptionPageComponent },\n  { path: \"billing\", component: BillingPageComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(TENANCY_ROUTES)],\n  exports: [RouterModule]\n})\nexport class TenancyRoutingModule { }\n","import { Component, OnInit } from '@angular/core';\r\nimport { DetailsDialogConfig, FormConfig, PageConfig, TableConfig } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n    selector: 'spa-approvals',\r\n    templateUrl: './approvals.component.html',\r\n    styleUrls: ['./approvals.component.css'],\r\n    standalone: false\r\n})\r\nexport class ApprovalsComponent implements OnInit {\r\n\r\n  constructor(public dataService : DataServiceLib) { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n\r\n}\r\n","<h4>Approvals</h4>\r\n<hr>\r\n\r\n<mat-tab-group>\r\n  <mat-tab label=\"Received\">\r\n    <div class=\"mt-3\">\r\n      <spa-table [config]=\"dataService.receivedApprovalsTableConfig\"></spa-table>\r\n    </div>\r\n  </mat-tab>\r\n  <mat-tab label=\"Sent\">\r\n    <div class=\"mt-3\">\r\n      <spa-table [config]=\"dataService.sentApprovalsTableConfig\"></spa-table>\r\n    </div>\r\n  </mat-tab>\r\n</mat-tab-group>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Button, DetailsDialogConfig, FormConfig, PageConfig, TableConfig } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n    selector: 'spa-approvals-config',\r\n    templateUrl: './approvals-config.component.html',\r\n    styleUrls: ['./approvals-config.component.css'],\r\n    standalone: false\r\n})\r\nexport class ApprovalsConfigComponent implements OnInit {\r\n\r\n  constructor(private dataService : DataServiceLib) { }\r\n\r\n\r\n  approvalRoleFormConfig: FormConfig;\r\n  approvalRolesTableConfig: TableConfig;\r\n  approvalLevelOptions: any[];\r\n  approvalLevelFormConfig: FormConfig;\r\n  approvalLevelDetailsConfig: DetailsDialogConfig;\r\n  approvalLevelsTableConfig: TableConfig;\r\n  approvalConfigFormConfig: FormConfig;\r\n  approvalConfigDetailsConfig: DetailsDialogConfig;\r\n  approvalConfigTable: TableConfig;\r\n  pageConfig: PageConfig;\r\n\r\n  ngOnInit(): void {\r\n\r\n    this.initializeConfigs();\r\n  }\r\n\r\n\r\n  private initializeConfigs(): void {\r\n    // Approval Roles\r\n    this.approvalRoleFormConfig = {\r\n      title: 'Approval Role',\r\n      security: { allow: [this.dataService.capApprovalsConfig] },\r\n      fields: [\r\n        { name: 'roleID', type: 'select', required: true, alias: 'Role', loadAction: { url: 'role/list/x' } }\r\n      ]\r\n    };\r\n\r\n    this.approvalRolesTableConfig = {\r\n      tabTitle: 'Level Roles',\r\n      showFilter: true,\r\n      elevation: 'none',\r\n      flatButtons: true,\r\n      minColumns: ['roleName'],\r\n      columns: [\r\n        { name: 'roleName', type: 'text', alias: 'Role' }\r\n      ],\r\n      buttons: [\r\n        { name: 'create', display: 'Add Role', dialog: true, action: { url: 'approvalroles?action=create', method: 'post' } },\r\n        { name: 'delete', dialog: true, action: { url: 'approvalroles?action=delete', method: 'post' } }\r\n      ],\r\n      loadAction: { url: 'approvalroles/level/x' },\r\n      loadCriteria: 'level',\r\n      loadIDField: 'approvalLevelID',\r\n      formConfig: this.approvalRoleFormConfig\r\n    };\r\n\r\n\r\n    // Approval Levels\r\n\r\n    this.approvalLevelOptions = [1,2,3,4,5].map(x => ({name: x, value: x}));\r\n\r\n    this.approvalLevelFormConfig = {\r\n      title: 'Approval Level',\r\n      security: { allow: [this.dataService.capApprovalsConfig] },\r\n      fields: [\r\n        { name: 'name', type: 'text', required: true, span: true, infoMessage: 'Name of approval level e.g. Supervisor Approval' },\r\n        { name: 'level', type: 'select', required: true, min: 1, defaultFirstValue : true, infoMessage: 'Order of approval',\r\n          options: this.approvalLevelOptions\r\n        }\r\n      ],\r\n    };\r\n\r\n    this.approvalLevelDetailsConfig = {\r\n      formConfig: this.approvalLevelFormConfig,\r\n      heroField: 'approvalLevelID',\r\n      tableConfigs: [this.approvalRolesTableConfig],\r\n      buttons: [\r\n        { name: 'edit', dialog: true, action: { url: 'approvallevels?action=edit', method: 'post' } }\r\n      ]\r\n    };\r\n\r\n    // Changed: view + create after detailsConfig for onSuccessButton\r\n    const approvalLevelViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.approvalLevelDetailsConfig };\r\n    const approvalLevelCreateButton: Button = { name: 'create', display: 'Add Level', dialog: true, onSuccessButton: approvalLevelViewButton, action: { url: 'approvallevels?action=create', method: 'post' } };\r\n\r\n    this.approvalLevelsTableConfig = {\r\n      tabTitle: 'Approval Levels',\r\n      showFilter: true,\r\n      elevation: 'none',\r\n      flatButtons: true,\r\n      minColumns: ['level','name', ],\r\n      minButtons : ['up', 'down', 'view'],\r\n      collapseButtons : true,\r\n      columns: [\r\n        { name: 'level', type: 'number' },\r\n        { name: 'name', type: 'chip', detailsConfig: this.approvalLevelDetailsConfig },\r\n        { name: 'rolesDisplay', type: 'text', alias: 'Roles' }\r\n      ],\r\n      buttons: [\r\n        approvalLevelCreateButton, // Changed: uses onSuccessButton to auto-open view after create\r\n        { name: 'up', display: 'Move Up', icon: { name: 'arrow_upward' }, action: { url: 'approvallevels?action=up', method: 'post' }, visible: x => x.level > 1 },\r\n        { name: 'down', display: 'Move Down', icon: { name: 'arrow_downward' }, action: { url: 'approvallevels?action=down', method: 'post' } },\r\n        approvalLevelViewButton,\r\n        { name: 'delete', dialog: true, action: { url: 'approvallevels?action=delete', method: 'post' } }\r\n      ],\r\n\r\n      formConfig: this.approvalLevelFormConfig,\r\n      loadAction: { url: 'approvallevels/config/x' },\r\n      loadCriteria: 'config',\r\n      loadIDField: 'approvalConfigID'\r\n    };\r\n\r\n\r\n    // Approval Config\r\n    this.approvalConfigFormConfig = {\r\n      title: 'Approval Configuration',\r\n      includeAudit: true,\r\n      security : {allow : [this.dataService.capApprovalsConfig]},\r\n      fields: [\r\n        // { name: 'modelName', type: 'text', required: true, alias: 'Entity Name', span: true, },\r\n        { name: 'enabled', type: 'checkbox', span: true, alias: 'Enable Approvals', defaultValue : true, infoMessage: 'Enable or disable approval workflow for this entity' },\r\n        // { name: 'modelName', type: 'select', required: true, span: true, alias: 'Entity', optionDisplay: 'name', optionValue: 'value', loadAction: { url: 'approvalconfigs/meta/x' }, },\r\n        { name: 'appModelID', type: 'text-single', required: true, span: true, alias: 'Entity', optionDisplay: 'name', optionValue: 'value', loadAction: { url: 'appmodels/list/approvable' }, }, // Changed: select -> text-single for typeable autocomplete\r\n        { name: 'createApprovalRequired', type: 'checkbox', span: true, alias: 'Create Approval' },\r\n        { name: 'editApprovalRequired', type: 'checkbox', span: true, alias: 'Edit Approval' },\r\n        { name: 'deleteApprovalRequired', type: 'checkbox', span: true, alias: 'Delete Approval' },\r\n        { name: 'customActions', type: 'text', span: true, alias: 'Custom Actions', infoMessage: 'Comma-separated list of actions that require approval e.g receive,disburse' },\r\n        { name: 'notify', type: 'checkbox', defaultValue : true,},\r\n        {\r\n          name: 'channels', type: 'select', alias: 'Notification Channels', span: false, defaultFirstValue: true, required: true,\r\n          hiddenCondition : x => x.notify === false,\r\n          options: this.dataService.notificationOptions,\r\n        }\r\n      ]\r\n    }\r\n\r\n    this.approvalConfigDetailsConfig = {\r\n      formConfig: this.approvalConfigFormConfig,\r\n      heroField: 'approvalConfigID',\r\n      tableConfigs: [this.approvalLevelsTableConfig],\r\n      buttons: [\r\n        { name: 'edit', dialog: true, action: { url: 'approvalconfigs?action=edit', method: 'post' } },\r\n      ]\r\n    };\r\n\r\n    // Changed: view + create after detailsConfig for onSuccessButton\r\n    const approvalConfigViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.approvalConfigDetailsConfig };\r\n    const approvalConfigCreateButton: Button = { name: 'create', display: 'Create', dialog: true, onSuccessButton: approvalConfigViewButton, action: { url: 'approvalconfigs?action=create', method: 'post' } };\r\n\r\n    this.approvalConfigTable = {\r\n      showFilter: true,\r\n      flatButtons: true,\r\n      minColumns: ['modelNameDisplay', 'enabled', 'approvalTypes'],\r\n      columns: [\r\n        { name: 'modelNameDisplay', type: 'text', alias: 'Entity' },\r\n        { name: 'enabled', type: 'checkbox',\r\n          icons: [\r\n            { name: 'warning', color: 'orange', tip: 'No approval levels or roles configured', condition: x => x.enabled && (x.hasNoLevels || x.hasNoRoles) }\r\n          ]\r\n        },\r\n        {\r\n          name: 'approvalTypes',\r\n          type: 'icon',\r\n          alias: 'Approval Types',\r\n          icons: [\r\n            { name: 'add_circle', color: 'green', tip: 'Create Approval Required', condition: x => x.enabled && x.createApprovalRequired },\r\n            { name: 'edit', color: 'orange', tip: 'Edit Approval Required', condition: x => x.enabled && x.editApprovalRequired },\r\n            { name: 'delete', color: 'red', tip: 'Delete Approval Required', condition: x => x.enabled && x.deleteApprovalRequired },\r\n            { name: 'settings', color: 'blue', tip: 'Custom Actions', condition: x => x.enabled && x.customActions?.length > 0, tipField: 'customActions' }\r\n          ]\r\n        },\r\n        { name: 'customActions', type: 'text', alias: 'Custom Actions' },\r\n        {\r\n          name: 'levelCount', type: 'number', alias: 'Levels',\r\n          icons: [\r\n            {\r\n              name: 'warning', color: 'orange', tip: 'No approval levels configured',\r\n              condition: x => x.levelCount === 0\r\n            }\r\n          ]\r\n        },\r\n      ],\r\n\r\n      buttons: [\r\n        approvalConfigCreateButton, // Changed: uses onSuccessButton to auto-open view after create\r\n        approvalConfigViewButton,\r\n        { name: 'edit', dialog: true, detailsConfig: this.approvalConfigDetailsConfig },\r\n        { name: 'delete', action: { url: 'approvalconfigs?action=delete', method: 'post' } },\r\n      ],\r\n\r\n      loadAction: { url: 'approvalconfigs/all/x' },\r\n      formConfig: this.approvalConfigFormConfig\r\n    };\r\n\r\n    this.pageConfig ={\r\n      title: 'Approval Configuration',\r\n      tableConfig: this.approvalConfigTable\r\n    }\r\n  }\r\n\r\n}\r\n","<spa-page [config]=\"pageConfig\"></spa-page>\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { ApiResponse, DetailsDialogConfig, FormConfig, PageConfig, TableConfig } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\nimport { NotificationsService } from '../../services/notifications.service';\r\n\r\n@Component({\r\n    selector: 'spa-notifications',\r\n    templateUrl: './notifications.component.html',\r\n    styleUrls: ['./notifications.component.css'],\r\n    standalone: false\r\n})\r\nexport class NotificationsComponent implements OnInit {\r\n  private dataService = inject(DataServiceLib);\r\n  private notificationsService = inject(NotificationsService);\r\n\r\n  createDialog: DetailsDialogConfig = {\r\n    formConfig: {\r\n      security : { allow : [this.dataService.capNotifications] },\r\n      title: 'Send Notification',\r\n      fixedTitle: true,\r\n      fields: [\r\n        { name: 'message', type: 'text', required: true,  span: true },\r\n        {\r\n          name: 'category', type: 'select', required: true, defaultFirstValue : true,\r\n          options: [\r\n            { name: 'System', value: 0 },\r\n            { name: 'Security', value: 1 },\r\n            { name: 'Task', value: 2 },\r\n            { name: 'Approval', value: 3 },\r\n            { name: 'Other', value: 4 }\r\n          ]\r\n        },\r\n        {\r\n          name: 'type', type: 'select', required: true, defaultFirstValue: true,\r\n          options: [\r\n            { name: 'Info', value: 'info' },\r\n            { name: 'Warning', value: 'warn' },\r\n            { name: 'Error', value: 'error' }\r\n          ]\r\n        },\r\n        { name: 'durationHours', type: 'number', required: true, defaultValue: 24, hint: 'How long to keep this notification active' },\r\n        { name: 'notifyAllUsers', type: 'checkbox', alias: 'Notify All Users', span: false },\r\n        { name: 'usernames', type: 'text-multi', alias: 'Recipients', copyContent : true, clearContent : true, span: true,  hiddenCondition: x => x.notifyAllUsers, loadAction : { url: 'user/list/x' } }, // Changed: multi-text -> text-multi\r\n        { name: 'roleIDs', type: 'select-multi', strict : true, copyContent : true, alias: 'Roles',  span: false, hiddenCondition: x => x.notifyAllUsers,  loadAction : { url: 'role/list/x' } }, // Changed: multi-select -> select-multi\r\n        {\r\n          name: 'channels', type: 'select', alias: 'Notification Channels', span: false, defaultFirstValue: true, required: true,\r\n          options: this.dataService.notificationOptions,\r\n        }\r\n      ]\r\n    },\r\n    mode: 'create',\r\n    buttons: [\r\n      { name: 'create', display: 'Send', action: { url: 'notifications?action=notify', method: 'post', successMessage: 'Notification sent successfully' } }\r\n    ]\r\n  };\r\n\r\n  notificationsTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    minColumns: ['message', 'categoryName'],\r\n    flatButtons: true,\r\n    columns: [\r\n      {\r\n        name: 'type', type: 'icon',\r\n        icons: [\r\n          {name : 'info',  color: 'steelblue', condition: x => x.type === 'info' },\r\n          { name: 'warning', color: '#FF9800', condition: x => x.type === 'warn' },\r\n          { name: 'error', color: '#f44336', condition: x => x.type === 'error' }\r\n        ]\r\n      },\r\n      { name: 'createdDate', type: 'datetime', alias: 'Date' },\r\n      { name: 'message', type: 'text' },\r\n      { name: 'categoryName', type: 'text', alias: 'Category' },\r\n\r\n      // { name: 'createdByName', type: 'text', alias: 'From' }\r\n    ],\r\n    buttons: [\r\n      { name: 'create', display: 'Send Notification', dialog: true, detailsConfig: this.createDialog },\r\n      { name: 'dismiss', icon: { name: 'done' }, color: 'green', action: { url: 'notifications?action=dismiss', method: 'post' }, visible: x => x.canDismiss },\r\n      { name: 'dismissAll', display: 'Dismiss All', inHeader : true, icon: { name: 'done_all' }, color: 'green', action: { url: 'notifications/dismiss-all', method: 'post' } },\r\n      { name: 'delete', action: { url: 'notifications?action=delete', method: 'post' } }\r\n    ],\r\n\r\n    loadAction: { url: 'notifications/all/x' }\r\n  };\r\n  \r\n  pageConfig: PageConfig = {\r\n    title: 'Notifications',\r\n    tableConfig: this.notificationsTableConfig\r\n  };\r\n\r\n  ngOnInit(): void {\r\n    this.notificationsService.loadNotifications();\r\n  }\r\n\r\n\r\n  actionClicked(x){\r\n    this.notificationsService.loadNotifications()\r\n  }\r\n}\r\n","<spa-page [config]=\"pageConfig\" (actionResponse)=\"actionClicked($event)\"></spa-page>\r\n","import { Component } from '@angular/core';\r\nimport { DetailsDialogConfig, FormConfig, PageConfig, TableConfig } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n\r\n@Component({\r\n    selector: 'spa-app-models',\r\n    standalone: false,\r\n    template: '<spa-page [config]=\"pageConfig\"></spa-page>'\r\n})\r\nexport class AppModelsComponent {\r\n  constructor(private dataService: DataServiceLib) { }\r\n\r\n  appModelFormConfig: FormConfig = {\r\n    title: 'Application Model',\r\n    includeAudit: true,\r\n    fields: [\r\n      { name: 'fullModelName', type: 'text', required: true, span: true, alias: 'Full Model Name', readonly: true },\r\n      { name: 'name', type: 'text', span: true, alias: 'Display Name', infoMessage: 'Custom display name (optional)' },\r\n      { name: 'endpoint', type: 'text', span: true, alias: 'Endpoint Name', infoMessage: 'Name of associated endpoint (optional)' },\r\n      { name: 'approvable', type: 'checkbox', span: true, alias: 'Approvable', readonly: true }\r\n    ]\r\n  };\r\n\r\n  appModelDetailsConfig: DetailsDialogConfig = {\r\n    formConfig: this.appModelFormConfig,\r\n    heroField: 'appModelID',\r\n    buttons: [\r\n      { name: 'edit', dialog: true, action: { url: 'appmodels?action=edit', method: 'post' } }\r\n    ]\r\n  };\r\n\r\n  appModelTableConfig: TableConfig = {\r\n    showFilter: true,\r\n    elevation: 'none',\r\n    flatButtons: true,\r\n    minColumns: ['displayName', 'approvable'],\r\n    columns: [\r\n      { name: 'displayName', type: 'chip', alias: 'Name', detailsConfig: this.appModelDetailsConfig },\r\n      { name: 'fullModelName', type: 'text', alias: 'Full Model Name' },\r\n      { name: 'endpoint', type: 'text', alias: 'Endpoint' },\r\n      { name: 'approvable', type: 'checkbox', alias: 'Approvable' }\r\n    ],\r\n    buttons: [\r\n      { name: 'view', dialog: true, detailsConfig: this.appModelDetailsConfig },\r\n      { name: 'edit', dialog: true, detailsConfig: this.appModelDetailsConfig },\r\n    ],\r\n    loadAction: { url: 'appmodels/all/x' }\r\n  };\r\n\r\n  pageConfig: PageConfig = {\r\n    title: 'Application Models',\r\n    tableConfig: this.appModelTableConfig\r\n  };\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Button, DetailsDialogConfig, FormConfig, PageConfig, TableConfig } from '../../classes/Classes';\r\nimport { DataServiceLib } from '../../services/datalib.service';\r\n\r\n@Component({\r\n    selector: 'spa-notifications-config',\r\n    templateUrl: './notifications-config.component.html',\r\n    standalone: false\r\n})\r\nexport class NotificationsConfigComponent implements OnInit {\r\n\r\n  constructor(private dataService: DataServiceLib) { }\r\n\r\n\r\n  notificationOperationFormConfig: FormConfig;\r\n  notificationOperationsTableConfig: TableConfig;\r\n  notificationConfigFormConfig: FormConfig;\r\n  notificationConfigDetailsConfig: DetailsDialogConfig;\r\n  notificationConfigTable: TableConfig;\r\n  pageConfig: PageConfig;\r\n\r\n  ngOnInit(): void {\r\n\r\n    this.initializeConfigs();\r\n  }\r\n\r\n\r\n  private initializeConfigs(): void {\r\n    // Notification Operations\r\n    this.notificationOperationFormConfig = {\r\n      title: 'Notification Operation',\r\n      security: { allow: [this.dataService.capNotificationsConfig] },\r\n      fields: [\r\n        { name: 'operationType', type: 'select', required: true, alias: 'Operation Type', loadAction: { url: 'notificationconfigs/meta/x' }, optionDisplay: 'name', optionValue: 'value' },\r\n        { name: 'customAction', type: 'text', required: true, alias: 'Custom Action', hiddenCondition: x => x.operationType !== 4 }, // 4 = Custom\r\n        { name: 'enabled', type: 'checkbox', alias: 'Enable Notifications', defaultValue: true },\r\n        { name: 'roleIDs', type: 'select-multi', alias: 'Notify Roles', required: true, loadAction: { url: 'role/list/x' }, }, //hiddenCondition: x => !x.enabled // Changed: multi-select -> select-multi\r\n        {\r\n            name: 'channels', type: 'select', alias: 'Notification Channels', span: false, defaultFirstValue: true, required: true,\r\n            options: this.dataService.notificationOptions,\r\n          }\r\n      ]\r\n    };\r\n\r\n    this.notificationOperationsTableConfig = {\r\n      tabTitle: 'Notification Operations',\r\n      showFilter: true,\r\n      elevation: 'none',\r\n      flatButtons: true,\r\n      minColumns: ['operationTypeName', 'enabled', 'channels'],\r\n      columns: [\r\n        { name: 'operationTypeName', type: 'text', alias: 'Operation' },\r\n        { name: 'customAction', type: 'text', alias: 'Custom Action' },\r\n        { name: 'enabled', type: 'checkbox' },\r\n        { name: 'roleIDs', type: 'text', alias: 'Roles' },\r\n        { name: 'channels', type: 'text', alias: 'Channels' }\r\n      ],\r\n      buttons: [\r\n        { name: 'create', display: 'Add Operation', dialog: true, action: { url: 'notificationoperations?action=create', method: 'post' } },\r\n        { name: 'edit', dialog: true, action: { url: 'notificationoperations?action=edit', method: 'post' } },\r\n        { name: 'delete', dialog: true, action: { url: 'notificationoperations?action=delete', method: 'post' } }\r\n      ],\r\n      loadAction: { url: 'notificationoperations/config/x' },\r\n      loadCriteria: 'config',\r\n      loadIDField: 'notificationConfigID',\r\n      formConfig: this.notificationOperationFormConfig\r\n    };\r\n\r\n    // Main Notification Config\r\n    this.notificationConfigFormConfig = {\r\n      title: 'Notification Configuration',\r\n      includeAudit: true,\r\n      security: { allow: [this.dataService.capNotificationsConfig] },\r\n      fields: [\r\n        { name: 'enabled', type: 'checkbox', alias: 'Enable Notifications', defaultValue: true, span: true },\r\n        { name: 'appModelID', type: 'text-single', required: true, span: true, alias: 'Entity', loadAction: { url: 'appmodels/list/x' } }, // Changed: select -> text-single for typeable autocomplete\r\n        // { name: 'customActions', type: 'text', span: true, alias: 'Custom Actions', infoMessage: 'Comma-separated list of actions that can trigger notifications e.g receive,disburse' }\r\n      ]\r\n    };\r\n\r\n    this.notificationConfigDetailsConfig = {\r\n      formConfig: this.notificationConfigFormConfig,\r\n      heroField: 'notificationConfigID',\r\n      tableConfigs: [this.notificationOperationsTableConfig],\r\n      buttons: [\r\n        { name: 'edit', dialog: true, action: { url: 'notificationconfigs?action=edit', method: 'post' } }\r\n      ]\r\n    };\r\n\r\n    // Changed: view + create after detailsConfig for onSuccessButton\r\n    const notifConfigViewButton: Button = { name: 'view', dialog: true, detailsConfig: this.notificationConfigDetailsConfig };\r\n    const notifConfigCreateButton: Button = { name: 'create', display: 'Create', dialog: true, onSuccessButton: notifConfigViewButton, action: { url: 'notificationconfigs?action=create', method: 'post' } };\r\n\r\n    this.notificationConfigTable = {\r\n      showFilter: true,\r\n      flatButtons: true,\r\n      minColumns: ['modelNameDisplay', 'enabled', 'operations'],\r\n      columns: [\r\n        { name: 'modelNameDisplay', type: 'chip', alias: 'Entity', detailsConfig: this.notificationConfigDetailsConfig },\r\n        {\r\n          name: 'enabled', type: 'checkbox',\r\n          icons: [\r\n            { name: 'warning', color: 'orange', tip: 'No operations configured', condition: x => x.enabled && x.hasNoOperations },\r\n            { name: 'warning', color: 'orange', tip: 'Some operations have no roles configured', condition: x => x.enabled && x.hasNoRoles },\r\n            { name: 'warning', color: 'orange', tip: 'Some operations have no channels configured', condition: x => x.enabled && x.hasIncompleteChannels }\r\n          ]\r\n        },\r\n        {\r\n          name: 'operations', type: 'icon', alias: 'Operations',\r\n          icons: [\r\n            { name: 'done_all', color: 'green', tip: 'All Operations', condition: x => x.enabled && x.operations.some(o => o.operationType === 0) },\r\n            { name: 'add_circle', color: 'green', tip: 'Create', condition: x => x.enabled && x.operations.some(o => o.operationType === 1) },\r\n            { name: 'edit', color: 'orange', tip: 'Edit', condition: x => x.enabled && x.operations.some(o => o.operationType === 2) },\r\n            { name: 'delete', color: 'red', tip: 'Delete', condition: x => x.enabled && x.operations.some(o => o.operationType === 3) },\r\n            { name: 'settings', color: 'blue', tip: 'Custom Actions', condition: x => x.enabled && x.operations.some(o => o.operationType === 4) }\r\n          ]\r\n        }\r\n      ],\r\n      buttons: [\r\n        notifConfigCreateButton, // Changed: uses onSuccessButton to auto-open view after create\r\n        notifConfigViewButton,\r\n        { name: 'edit', dialog: true, detailsConfig: this.notificationConfigDetailsConfig },\r\n        { name: 'delete', action: { url: 'notificationconfigs?action=delete', method: 'post' } }\r\n      ],\r\n      loadAction: { url: 'notificationconfigs/all/x' },\r\n      formConfig: this.notificationConfigFormConfig\r\n    };\r\n\r\n    this.pageConfig = {\r\n      title: 'Notification Configuration',\r\n      tableConfig: this.notificationConfigTable\r\n    };\r\n  }\r\n}\r\n","<spa-page [config]=\"pageConfig\"></spa-page>\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { ApprovalsComponent } from '../../pages/approvals/approvals.component';\nimport { ApprovalsConfigComponent } from '../../pages/approvals-config/approvals-config.component';\nimport { NotificationsComponent } from '../../pages/notifications/notifications.component';\nimport { AppModelsComponent } from '../../pages/app-models/app-models.component';\nimport { NotificationsConfigComponent } from '../../pages/notifications-config/notifications-config.component';\n\nexport const WORKFLOW_ROUTES: Routes = [\n  { path: \"approvals\", component: ApprovalsComponent },\n  { path: \"approvals-config\", component: ApprovalsConfigComponent },\n  { path: \"notifications\", component: NotificationsComponent },\n  { path: \"appmodels\", component: AppModelsComponent },\n  { path: \"notifications-config\", component: NotificationsConfigComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(WORKFLOW_ROUTES)],\n  exports: [RouterModule]\n})\nexport class WorkflowRoutingModule { }\n","import { Component } from '@angular/core';\r\nimport { TileConfig, ChartConfig } from '../../../classes/Classes';\r\n\r\n// Executive overview dashboard combining key metrics from all ERP modules\r\n@Component({\r\n  selector: 'spa-overview-dashboard',\r\n  template: `\r\n    <div class=\"dashboard-container\">\r\n      <h4 class=\"dashboard-title\"><mat-icon>dashboard</mat-icon> Overview Dashboard</h4>\r\n      <!-- Changed: Icon tiles for primary KPIs -->\r\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\r\n      <!-- Changed: Chart tiles for mini visual indicators -->\r\n      <div style=\"margin-top: 16px;\"></div>\r\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\r\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .dashboard-container { padding: 16px; }\r\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\r\n  `],\r\n  standalone: false\r\n})\r\nexport class OverviewDashboardComponent {\r\n  summaryTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'revenue', alias: 'Revenue (MTD)', color: '#4caf50', icon: 'trending_up', style: 'icon', info: 'MTD revenue' },\r\n      { name: 'expenses', alias: 'Expenses (MTD)', color: '#f44336', icon: 'trending_down', style: 'icon', info: 'MTD expenses' },\r\n      { name: 'netProfit', alias: 'Net Profit (MTD)', color: '#2196f3', icon: 'account_balance', style: 'icon', info: 'MTD profit' },\r\n      { name: 'stockValue', alias: 'Stock Value', color: '#ff9800', icon: 'inventory_2', style: 'icon', info: 'Inventory value' },\r\n      { name: 'netCashFlow', alias: 'Net Cash Flow', color: '#9c27b0', icon: 'swap_vert', style: 'icon', info: 'Net cash movement' }, // Changed: Replaced totalLiabilities with net cash flow\r\n      { name: 'cashBalance', alias: 'Cash & Bank', color: '#e91e63', icon: 'account_balance_wallet', style: 'icon', info: 'Cash + bank total' },\r\n    ],\r\n    loadAction: { url: 'dashboard/overview/summary' },\r\n    loadInit: true\r\n  };\r\n\r\n  // Changed: Chart-style tiles now use loadAction with dataField for dynamic data\r\n  chartTiles: TileConfig = {\r\n    tiles: [\r\n      { name: 'profitMarginValue', alias: 'Profit Margin', color: '#4caf50', chart: { type: 'doughnut', gaugeColor: '#4caf50', height: 130, dataField: 'profitMarginValue' }, footer: 'Based on all-time revenue', footerIcon: 'info' }, // Changed: dataField replaces gaugeValue\r\n      { name: 'revenueSparkline', alias: 'Revenue Trend', color: '#2196f3', chart: { type: 'line', color: '#2196f3', height: 100, dataField: 'revenueSparkline' }, footer: 'Last 12 months', footerIcon: 'timeline' }, // Changed: dataField replaces inline data\r\n      { name: 'expenseBreakdown', alias: 'Expense Split', color: '#ff9800', chart: { type: 'doughnut', colors: ['#ff9800', '#f44336', '#9c27b0', '#2196f3', '#4caf50'], height: 130, dataField: 'expenseBreakdown' }, footer: 'By category', footerIcon: 'pie_chart' }, // Changed: dataField replaces inline data\r\n      { name: 'monthlyOrders', alias: 'Monthly Orders', color: '#9c27b0', chart: { type: 'bar', colors: ['#9c27b0', '#ba68c8', '#ce93d8', '#e1bee7', '#9c27b0', '#ba68c8'], height: 100, dataField: 'monthlyOrders' }, footer: 'Last 6 months', footerIcon: 'bar_chart' }, // Changed: dataField replaces inline data\r\n    ],\r\n    loadAction: { url: 'dashboard/overview/chart-tiles' }, // Changed: Load chart tile data from API\r\n    loadInit: true\r\n  };\r\n\r\n  chartConfig: ChartConfig = {\r\n    charts: [\r\n      { name: 'revenueTrend', title: 'Revenue vs Expenses Trend', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#4caf50', '#f44336'], showLegend: true }, // Changed: showLegend for line chart\r\n      { name: 'cashFlow', title: 'Monthly Cash Flow', type: 'bar', height: '300px', colors: ['#4caf50', '#f44336'], showLegend: true }, // Changed: showLegend for multi-dataset bar chart\r\n      { name: 'profitMargin', title: 'Profit Margin', type: 'doughnut', height: '300px', colors: ['#4caf50', '#e0e0e0'] },\r\n      { name: 'healthIndicators', title: 'Business Health Indicators', type: 'doughnut', height: '300px', colors: ['#4caf50', '#e0e0e0', '#2196f3', '#e0e0e0', '#ff9800', '#e0e0e0'] },\r\n    ],\r\n    loadAction: { url: 'dashboard/overview/charts' },\r\n    loadInit: true,\r\n    columns: 2\r\n  };\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { OverviewDashboardComponent } from '../../pages/overview/overview-dashboard/overview-dashboard.component';\n\nexport const OVERVIEW_ROUTES: Routes = [\n  { path: \"dashboard\", component: OverviewDashboardComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(OVERVIEW_ROUTES)],\n  exports: [RouterModule]\n})\nexport class OverviewRoutingModule { }\n","import { Component } from '@angular/core';\nimport { TileConfig, ChartConfig } from '../../../classes/Classes';\n\n// Fixed Assets module dashboard — asset performance, depreciation trends, and portfolio overview\n@Component({\n  selector: 'spa-fixed-assets-dashboard',\n  template: `\n    <div class=\"dashboard-container\">\n      <h4 class=\"dashboard-title\"><mat-icon>precision_manufacturing</mat-icon> Fixed Assets Dashboard</h4>\n      <spa-tiles [config]=\"summaryTiles\"></spa-tiles>\n      <div style=\"margin-top: 16px;\"></div>\n      <spa-tiles [config]=\"chartTiles\"></spa-tiles>\n      <spa-charts [config]=\"chartConfig\"></spa-charts>\n    </div>\n  `,\n  styles: [`\n    .dashboard-container { padding: 16px; }\n    .dashboard-title { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; color: #333; font-weight: 500; }\n  `],\n  standalone: false\n})\nexport class FixedAssetsDashboardComponent {\n  summaryTiles: TileConfig = {\n    tiles: [\n      { name: 'draft', alias: 'Draft', color: '#FFC107', icon: 'edit_note', style: 'icon', info: 'Assets awaiting activation' },\n      { name: 'active', alias: 'Active', color: '#4CAF50', icon: 'check_circle', style: 'icon', info: 'Actively depreciating assets' },\n      { name: 'fullyDepreciated', alias: 'Fully Depreciated', color: '#2196F3', icon: 'task_alt', style: 'icon', info: 'Zero book value assets' },\n      { name: 'disposed', alias: 'Disposed', color: '#9E9E9E', icon: 'delete_forever', style: 'icon', info: 'Sold or retired assets' },\n      { name: 'totalCost', alias: 'Total Cost', color: '#ff9800', icon: 'attach_money', style: 'icon', info: 'Total acquisition cost' },\n      { name: 'totalNBV', alias: 'Net Book Value', color: '#4CAF50', icon: 'trending_up', style: 'icon', info: 'Current net book value' },\n      { name: 'depreciationThisMonth', alias: 'Depreciation (MTD)', color: '#f44336', icon: 'trending_down', style: 'icon', info: 'Depreciation posted this month' },\n    ],\n    loadAction: { url: 'fixedassets/dashboard/summary' },\n    loadInit: true\n  };\n\n  chartTiles: TileConfig = {\n    tiles: [\n      { name: 'depreciationGauge', alias: 'Depreciation %', color: '#2196F3', chart: { type: 'doughnut', gaugeColor: '#2196F3', height: 130, dataField: 'depreciationGauge' }, footer: 'Total depreciated vs cost', footerIcon: 'pie_chart' },\n      { name: 'depreciationSparkline', alias: 'Depreciation Trend', color: '#f44336', chart: { type: 'bar', colors: ['#f44336', '#ef5350', '#e57373', '#ef9a9a', '#ffcdd2', '#f44336', '#ef5350', '#e57373', '#ef9a9a', '#ffcdd2', '#f44336', '#ef5350'], height: 100, dataField: 'depreciationSparkline' }, footer: 'Last 12 months', footerIcon: 'trending_down' },\n      { name: 'costByCategory', alias: 'Cost by Category', color: '#ff9800', chart: { type: 'pie', colors: ['#ff9800', '#f44336', '#9c27b0', '#2196F3', '#4CAF50', '#607d8b'], height: 130, dataField: 'costByCategory' }, footer: 'Acquisition cost split', footerIcon: 'donut_large' },\n      { name: 'nbvTrend', alias: 'NBV Trend', color: '#4CAF50', chart: { type: 'line', color: '#4CAF50', height: 100, dataField: 'nbvTrend' }, footer: 'Last 6 months', footerIcon: 'show_chart' },\n    ],\n    loadAction: { url: 'fixedassets/dashboard/chart-tiles' },\n    loadInit: true\n  };\n\n  chartConfig: ChartConfig = {\n    charts: [\n      { name: 'depreciationTrend', title: 'Monthly Depreciation', type: 'bar', height: '300px', colors: ['#2196F3'] },\n      { name: 'statusDistribution', title: 'Asset Status Distribution', type: 'doughnut', height: '300px', colors: ['#FFC107', '#4CAF50', '#2196F3', '#9E9E9E'] },\n      { name: 'costByCategory', title: 'Cost by Category', type: 'bar', height: '300px', colors: ['#ff9800'] },\n      { name: 'nbvVsCost', title: 'Cost vs Net Book Value', type: 'line', height: '300px', showPoints: true, showLegend: true, tension: 0.4, colors: ['#ff9800', '#4CAF50'] },\n      { name: 'remainingLife', title: 'Remaining Useful Life', type: 'bar', height: '300px', colors: ['#7c4dff'] },\n      { name: 'acquisitionsTimeline', title: 'Acquisitions Timeline', type: 'line', height: '300px', showPoints: true, tension: 0.4, colors: ['#2196F3'] },\n    ],\n    loadAction: { url: 'fixedassets/dashboard/charts' },\n    loadInit: true,\n    columns: 2\n  };\n}\n","import { Component, inject } from '@angular/core';\nimport { PageConfig } from '../../../classes/Classes';\nimport { TinSpaModule } from '../../../tin-spa.module';\nimport { AssetsService } from '../../../services/assets.service'; // Changed: Moved to AssetsService\n\n// Fixed Assets management page — full lifecycle with tiles, CRUD, activation, depreciation, and disposal\n@Component({\n  selector: 'spa-fixed-assets',\n  standalone: true,\n  imports: [TinSpaModule],\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\n})\nexport class FixedAssetsComponent {\n  private assetsService = inject(AssetsService); // Changed: Use AssetsService\n\n  pageConfig: PageConfig = {\n    title: 'Fixed Assets',\n    tableConfig: this.assetsService.assetsTableConfig // Changed: Use AssetsService\n  };\n}\n","import { Component, inject } from '@angular/core';\nimport { PageConfig } from '../../../classes/Classes';\nimport { TinSpaModule } from '../../../tin-spa.module';\nimport { AssetsService } from '../../../services/assets.service';\n\n// Depreciation Categories management page — CRUD for depreciation categories with default settings\n@Component({\n  selector: 'spa-fixed-asset-categories',\n  standalone: true,\n  imports: [TinSpaModule],\n  template: '<spa-page [config]=\"pageConfig\"></spa-page>'\n})\nexport class FixedAssetCategoriesComponent { // Changed: display title renamed, component class kept for routing compatibility\n  private assetsService = inject(AssetsService);\n\n  pageConfig: PageConfig = {\n    title: 'Depreciation Categories', // Changed: Renamed from Asset Categories\n    tableConfig: this.assetsService.categoryTableConfig\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { FixedAssetsDashboardComponent } from '../../pages/assets/fixed-assets-dashboard/fixed-assets-dashboard.component';\nimport { FixedAssetsComponent } from '../../pages/accounting/fixed-assets/fixed-assets.component';\nimport { FixedAssetCategoriesComponent } from '../../pages/accounting/fixed-asset-categories/fixed-asset-categories.component';\n\n// Changed: Fixed Assets routes — separated from Accounting module\nexport const ASSETS_ROUTES: Routes = [\n  { path: \"dashboard\", component: FixedAssetsDashboardComponent },\n  { path: \"register\", component: FixedAssetsComponent },\n  { path: \"depreciation-categories\", component: FixedAssetCategoriesComponent }, // Changed: Renamed from categories\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(ASSETS_ROUTES)],\n  exports: [RouterModule]\n})\nexport class AssetsRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { USER_ROUTES } from './user/user-routing.module';\nimport { ADMIN_ROUTES } from './admin/admin-routing.module';\nimport { ACCOUNTING_ROUTES } from './accounting/accounting-routing.module';\nimport { INVENTORY_ROUTES } from './inventory/inventory-routing.module';\nimport { SALES_ROUTES } from './sales/sales-routing.module';\nimport { PURCHASING_ROUTES } from './purchasing/purchasing-routing.module';\nimport { HR_ROUTES } from './hr/hr-routing.module';\nimport { PAYROLL_ROUTES } from './payroll/payroll-routing.module';\nimport { MANUFACTURING_ROUTES } from './manufacturing/manufacturing-routing.module';\nimport { LOANS_ROUTES } from './loans/loans-routing.module';\nimport { GENERAL_ROUTES } from './general/general-routing.module';\nimport { TENANCY_ROUTES } from './tenancy/tenancy-routing.module';\nimport { WORKFLOW_ROUTES } from './workflow/workflow-routing.module';\nimport { OVERVIEW_ROUTES } from './overview/overview-routing.module';\nimport { ASSETS_ROUTES } from './assets/assets-routing.module'; // Changed: Added Fixed Assets module routes\n\n// All domain routes nested under their module path\n// Consumer apps import SpaHomeModule once — no need to declare routes per app\nconst routes: Routes = [\n  { path: 'user', children: USER_ROUTES },\n  { path: 'admin', children: ADMIN_ROUTES },\n  { path: 'accounting', children: ACCOUNTING_ROUTES },\n  { path: 'inventory', children: INVENTORY_ROUTES },\n  { path: 'sales', children: SALES_ROUTES },\n  { path: 'purchasing', children: PURCHASING_ROUTES },\n  { path: 'hr', children: HR_ROUTES },\n  { path: 'payroll', children: PAYROLL_ROUTES },\n  { path: 'manufacturing', children: MANUFACTURING_ROUTES },\n  { path: 'loans', children: LOANS_ROUTES },\n  { path: 'general', children: GENERAL_ROUTES },\n  { path: 'tenancy', children: TENANCY_ROUTES },\n  { path: 'workflow', children: WORKFLOW_ROUTES },\n  { path: 'overview', children: OVERVIEW_ROUTES },\n  { path: 'fixed-assets', children: ASSETS_ROUTES } // Changed: Added Fixed Assets module\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class SpaHomeRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { AccountsComponent as AccountingAccountsComponent } from '../../pages/accounting/accounts/accounts.component';\nimport { AggregatesComponent as AccountingAggregatesComponent } from '../../pages/accounting/aggregates/aggregates.component';\nimport { AgingComponent as AccountingAgingComponent } from '../../pages/accounting/aging/aging.component';\nimport { SupplierAgingComponent as AccountingSupplierAgingComponent } from '../../pages/accounting/supplier-aging/supplier-aging.component';\nimport { TransactionTypesComponent } from '../../pages/accounting/transaction-types/transaction-types.component';\nimport { TransactionsComponent as AccountingTransactionsComponent } from '../../pages/accounting/transactions/transactions.component';\nimport { InvoicesComponent as AccountingInvoicesComponent } from '../../pages/accounting/invoices/invoices.component';\nimport { StatementComponent as AccountingStatementComponent } from '../../pages/accounting/outstanding-invoices/outstanding-invoices.component';\nimport { ReportsComponent as AccountingReportsComponent } from '../../pages/accounting/reports/reports.component';\nimport { TaxRatesComponent } from '../../pages/accounting/tax-rates/tax-rates.component';\nimport { StandingOrdersComponent } from '../../pages/accounting/standing-orders/standing-orders.component';\nimport { CurrenciesComponent } from '../../pages/accounting/currencies/currencies.component'; // Changed: Removed Fixed Assets imports — moved to Assets module\nimport { BudgetsComponent as AccountingBudgetsComponent } from '../../pages/accounting/budgets/budgets.component';\nimport { BudgetVsActualComponent as AccountingBudgetVsActualComponent } from '../../pages/accounting/budget-vs-actual/budget-vs-actual.component';\nimport { AccountingDashboardComponent } from '../../pages/accounting/accounting-dashboard/accounting-dashboard.component';\nimport { InvoiceDashboardComponent } from '../../pages/accounting/invoice-dashboard/invoice-dashboard.component';\n\n@NgModule({\n  declarations: [\n    AccountingAccountsComponent,\n    AccountingAggregatesComponent,\n    AccountingAgingComponent,\n    AccountingSupplierAgingComponent,\n    TransactionTypesComponent,\n    AccountingTransactionsComponent,\n    AccountingInvoicesComponent,\n    AccountingStatementComponent,\n    AccountingReportsComponent,\n    AccountingBudgetsComponent,\n    AccountingBudgetVsActualComponent,\n    AccountingDashboardComponent,\n    InvoiceDashboardComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule,\n    // Changed: Standalone components must be imported, not declared\n    TaxRatesComponent,\n    StandingOrdersComponent,\n    CurrenciesComponent // Changed: Removed Fixed Assets — moved to Assets module\n  ]\n})\nexport class AccountingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { ProductsComponent } from '../../pages/inventory/products/products.component';\nimport { InventoryItemsComponent } from '../../pages/inventory/inventory-items/inventory-items.component';\nimport { RequisitionsComponent } from '../../pages/inventory/requisitions/requisitions.component';\nimport { InventoryAdjustmentsComponent } from '../../pages/inventory/inventory-adjustments/inventory-adjustments.component';\nimport { InventoryReturnsComponent } from '../../pages/inventory/inventory-returns/inventory-returns.component';\nimport { InventoryTransactionsComponent } from '../../pages/inventory/inventory-transactions/inventory-transactions.component';\nimport { InventoryDashboardComponent } from '../../pages/inventory/inventory-dashboard/inventory-dashboard.component';\nimport { InventoryStockComponent } from '../../pages/inventory/inventory-stock/inventory-stock.component';\nimport { BundleProductsComponent } from '../../pages/inventory/bundle-products/bundle-products.component';\nimport { ServiceItemsComponent } from '../../pages/inventory/service-items/service-items.component';\n\n@NgModule({\n  declarations: [\n    ProductsComponent,\n    InventoryItemsComponent,\n    RequisitionsComponent,\n    InventoryAdjustmentsComponent,\n    InventoryReturnsComponent,\n    InventoryTransactionsComponent,\n    InventoryDashboardComponent,\n    InventoryStockComponent,\n    BundleProductsComponent,\n    ServiceItemsComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class InventoryModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { SalesOrdersComponent } from '../../pages/sales/sales-orders/sales-orders.component';\nimport { SalesComponent } from '../../pages/sales/sales/sales.component';\nimport { SalesDashboardComponent } from '../../pages/sales/sales-dashboard/sales-dashboard.component';\n\n@NgModule({\n  declarations: [\n    SalesOrdersComponent,\n    SalesComponent,\n    SalesDashboardComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class SalesModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { PurchaseOrdersComponent } from '../../pages/purchasing/purchase-orders/purchase-orders.component';\nimport { InventoryReceiptsComponent } from '../../pages/purchasing/inventory-receipts/inventory-receipts.component';\nimport { PurchasingDashboardComponent } from '../../pages/purchasing/purchasing-dashboard/purchasing-dashboard.component';\n\n@NgModule({\n  declarations: [\n    PurchaseOrdersComponent,\n    InventoryReceiptsComponent,\n    PurchasingDashboardComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class PurchasingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { EmployeesComponent } from '../../pages/employees/employees.component';\nimport { DepartmentsComponent } from '../../pages/departments/departments.component';\nimport { PositionsComponent } from '../../pages/positions/positions.component';\nimport { GradesComponent } from '../../pages/grades/grades.component';\nimport { OnboardingComponent } from '../../pages/onboarding/onboarding.component';\n\n@NgModule({\n  declarations: [\n    EmployeesComponent,\n    DepartmentsComponent,\n    PositionsComponent,\n    GradesComponent,\n    OnboardingComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class HRModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { SalaryStructuresComponent } from '../../pages/payroll/salary-structures/salary-structures.component';\nimport { StatutoryDeductionsComponent } from '../../pages/payroll/statutory-deductions/statutory-deductions.component';\nimport { PayrollRunsComponent } from '../../pages/payroll/payroll-runs/payroll-runs.component';\nimport { CommissionConfigsComponent } from '../../pages/payroll/commission-configs/commission-configs.component';\nimport { CommissionEntriesComponent } from '../../pages/payroll/commission-entries/commission-entries.component';\nimport { SalaryAdvancesComponent } from '../../pages/payroll/salary-advances/salary-advances.component';\nimport { OvertimeEntriesComponent } from '../../pages/payroll/overtime-entries/overtime-entries.component';\nimport { PayrollDashboardComponent } from '../../pages/payroll/payroll-dashboard/payroll-dashboard.component';\n\n@NgModule({\n  declarations: [\n    SalaryStructuresComponent,\n    StatutoryDeductionsComponent,\n    PayrollRunsComponent,\n    CommissionConfigsComponent,\n    CommissionEntriesComponent,\n    SalaryAdvancesComponent,\n    OvertimeEntriesComponent,\n    PayrollDashboardComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class PayrollModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { ProductionRecipesComponent } from '../../pages/manufacturing/production-recipes/production-recipes.component';\nimport { ProductionOrdersComponent } from '../../pages/manufacturing/production-orders/production-orders.component';\n\n@NgModule({\n  declarations: [\n    ProductionRecipesComponent,\n    ProductionOrdersComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class ManufacturingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { LoanProductsComponent } from '../../pages/loans/loan-products/loan-products.component';\nimport { LoansComponent } from '../../pages/loans/loans/loans.component';\nimport { LoanPaymentsComponent } from '../../pages/loans/loan-payments/loan-payments.component';\n\n@NgModule({\n  declarations: [\n    LoanProductsComponent,\n    LoansComponent,\n    LoanPaymentsComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class LoansModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { CustomersComponent } from '../../pages/customers/customers.component';\nimport { SuppliersComponent } from '../../pages/suppliers/suppliers.component';\nimport { TasksComponent } from '../../pages/tasks/tasks.component';\n\n@NgModule({\n  declarations: [\n    CustomersComponent,\n    SuppliersComponent,\n    TasksComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class GeneralModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { TenantSettingsComponent } from '../../pages/tenant-settings/tenant-settings.component';\nimport { TenantsComponent } from '../../pages/tenants/tenants.component';\nimport { BugComponent } from '../../pages/bug/bug.component';\nimport { MembershipComponent } from '../../pages/membership/membership.component';\nimport { PlansComponent } from '../../pages/plans/plans.component';\nimport { FeaturesComponent } from '../../pages/features/features.component';\nimport { PlanFeaturesComponent } from '../../pages/plan-features/plan-features.component';\nimport { SubscriptionPageComponent } from '../../pages/subscription/subscription.component';\nimport { BillingPageComponent } from '../../pages/billing/billing.component';\n\n@NgModule({\n  declarations: [\n    TenantSettingsComponent,\n    TenantsComponent,\n    BugComponent,\n    MembershipComponent,\n    PlansComponent,\n    FeaturesComponent,\n    PlanFeaturesComponent,\n    SubscriptionPageComponent,\n    BillingPageComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class TenancyModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { ApprovalsComponent } from '../../pages/approvals/approvals.component';\nimport { ApprovalsConfigComponent } from '../../pages/approvals-config/approvals-config.component';\nimport { NotificationsComponent } from '../../pages/notifications/notifications.component';\nimport { AppModelsComponent } from '../../pages/app-models/app-models.component';\nimport { NotificationsConfigComponent } from '../../pages/notifications-config/notifications-config.component';\n\n@NgModule({\n  declarations: [\n    ApprovalsComponent,\n    ApprovalsConfigComponent,\n    NotificationsComponent,\n    AppModelsComponent,\n    NotificationsConfigComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class WorkflowModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { OverviewDashboardComponent } from '../../pages/overview/overview-dashboard/overview-dashboard.component';\n\n@NgModule({\n  declarations: [\n    OverviewDashboardComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule\n  ]\n})\nexport class OverviewModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpaAdminModule } from '../spa-admin.module';\nimport { FixedAssetsDashboardComponent } from '../../pages/assets/fixed-assets-dashboard/fixed-assets-dashboard.component';\nimport { FixedAssetsComponent } from '../../pages/accounting/fixed-assets/fixed-assets.component';\nimport { FixedAssetCategoriesComponent } from '../../pages/accounting/fixed-asset-categories/fixed-asset-categories.component';\n\n// Changed: Fixed Assets module — separated from Accounting module\n@NgModule({\n  declarations: [\n    FixedAssetsDashboardComponent\n  ],\n  imports: [\n    CommonModule,\n    SpaAdminModule,\n    FixedAssetsComponent,\n    FixedAssetCategoriesComponent\n  ]\n})\nexport class AssetsModule { }\n","import { NgModule } from '@angular/core';\nimport { SpaHomeRoutingModule } from './spa-home-routing.module';\n// Domain modules (component declarations only, no routing)\nimport { AdminModule } from './admin/admin.module';\nimport { UserModule } from './user/user.module';\nimport { AccountingModule } from './accounting/accounting.module';\nimport { InventoryModule } from './inventory/inventory.module';\nimport { SalesModule } from './sales/sales.module';\nimport { PurchasingModule } from './purchasing/purchasing.module';\nimport { HRModule } from './hr/hr.module';\nimport { PayrollModule } from './payroll/payroll.module';\nimport { ManufacturingModule } from './manufacturing/manufacturing.module';\nimport { LoansModule } from './loans/loans.module';\nimport { GeneralModule } from './general/general.module';\nimport { TenancyModule } from './tenancy/tenancy.module';\nimport { WorkflowModule } from './workflow/workflow.module';\nimport { OverviewModule } from './overview/overview.module';\nimport { AssetsModule } from './assets/assets.module'; // Changed: Added Fixed Assets module\n\n// Single import for consumer apps — provides all domain routes and components\n// Usage in consumer home-routing.module.ts:\n//   { path: '', loadChildren: () => import('tin-spa').then(m => m.SpaHomeModule) }\n@NgModule({\n  imports: [\n    SpaHomeRoutingModule,\n    AdminModule,\n    UserModule,\n    AccountingModule,\n    InventoryModule,\n    SalesModule,\n    PurchasingModule,\n    HRModule,\n    PayrollModule,\n    ManufacturingModule,\n    LoansModule,\n    GeneralModule,\n    TenancyModule,\n    WorkflowModule,\n    OverviewModule,\n    AssetsModule // Changed: Added Fixed Assets module\n  ]\n})\nexport class SpaHomeModule { }\n","// Config interfaces for the spa-landing component\n// Consumer apps provide this config to drive the entire landing page\n\nexport interface LandingColors {\n  primary: string;        // e.g. '#1E3A5F'\n  primaryDark: string;    // e.g. '#152C4A'\n  primaryLight: string;   // e.g. '#EBF0F7'\n  secondary: string;      // e.g. '#F59E0B'\n  secondaryLight: string; // e.g. '#FEF3C7'\n}\n\n// Custom navbar/footer brand (replaces img+appName with inline SVG + wordmark)\nexport interface LandingBrandOverride {\n  svgMarkup: string;         // raw SVG string — will be sanitized before rendering\n  wordmarkLine1?: string;    // e.g. 'alsquare'\n  wordmarkLine2?: string;    // e.g. 'TECHNOLOGIES'\n}\n\nexport interface LandingNavLink {\n  label: string;  // 'Features'\n  target: string; // section ID e.g. 'lp-features'\n}\n\nexport interface LandingFeature {\n  title: string;\n  description: string;\n  icon: string;  // material icon name e.g. 'directions_bus'\n  color: string; // hex color for icon tint e.g. '#1E3A5F'\n}\n\nexport interface LandingStep {\n  number: string;      // e.g. '01', '02'\n  title: string;\n  description: string;\n  icon: string;        // material icon name\n}\n\nexport interface LandingModuleTile {\n  name: string;\n  icon: string; // material icon name\n}\n\nexport interface LandingModuleGroup {\n  category: string;\n  tiles: LandingModuleTile[];\n}\n\nexport interface LandingMetric {\n  value: string; // e.g. '35%'\n  label: string; // e.g. 'Reduction in fuel costs'\n}\n\nexport interface LandingSecurityItem {\n  icon: string;        // material icon name e.g. 'shield'\n  title: string;\n  description: string;\n}\n\nexport interface LandingTestimonial {\n  quote: string;\n  authorName: string;\n  authorRole: string;\n  authorInitials: string; // 2-letter initials for the avatar circle e.g. 'MN'\n}\n\nexport interface LandingPricingPlan {\n  name: string;         // 'Starter', 'Fleet', 'Enterprise'\n  price: string;        // '$0', '$99', 'Custom'\n  period?: string;      // '/month' (omit for Custom)\n  description: string;\n  features: string[];\n  ctaLabel: string;     // 'Get Started Free', 'Start Free Trial'\n  ctaRoute?: string;    // navigateTo route e.g. 'signup'\n  ctaSection?: string;  // scrollToSection target e.g. 'lp-footer'\n  popular?: boolean;    // shows 'Most Popular' badge + primary button styling\n  outline?: boolean;    // use outline button (default when popular is not set)\n}\n\nexport interface LandingFooterLink {\n  label: string;\n  section?: string;  // scrollToSection target\n  route?: string;    // navigateTo route\n}\n\nexport interface LandingFooterColumn {\n  title: string;\n  links: LandingFooterLink[];\n}\n\nexport interface LandingConfig {\n  // Branding\n  appName: string;    // 'Shift', 'Pulse', etc.\n  logoSrc: string;    // './assets/icon.png'\n  colors: LandingColors;\n\n  // Custom navbar brand (optional — replaces img+appName with SVG+wordmark)\n  navBrand?: LandingBrandOverride;\n\n  // Navbar\n  navLinks: LandingNavLink[];\n\n  // Hero section\n  hero: {\n    badge?: string;              // optional pill above headline e.g. '✦ Now available'\n    headline: string;            // text before gradientText\n    gradientText: string;        // colored/gradient portion of headline\n    subtitle: string;\n    primaryCTA: string;          // 'Start Free Trial'\n    primaryCTARoute?: string;    // defaults to 'signup'\n    secondaryCTA: string;        // 'Explore Features'\n    secondaryCTASection: string; // section ID to scroll to\n    trustSignals: string[];      // ['No credit card required', ...]\n    layout?: 'centered' | 'split'; // 'split' shows ng-content[lpHeroVisual] on right. Default: 'centered'\n    watermarkSvg?: string;       // raw SVG string shown as faded background watermark\n  };\n\n  // Features section\n  features: {\n    title: string;\n    subtitle: string;\n    items: LandingFeature[];\n  };\n\n  // Workflow/Steps section (optional)\n  workflow?: {\n    title: string;\n    subtitle?: string;\n    style?: 'steps' | 'road'; // 'steps' = numbered card grid (default), 'road' = waypoints on a road line\n    steps: LandingStep[];\n  };\n\n  // Modules section (optional)\n  modules?: {\n    title: string;\n    subtitle: string;\n    groups: LandingModuleGroup[];\n  };\n\n  // Metrics/stats section (optional)\n  metrics?: LandingMetric[];\n\n  // Security section (optional — dark background, icon cards)\n  security?: {\n    title: string;\n    subtitle: string;\n    items: LandingSecurityItem[];\n  };\n\n  // Testimonials section (optional)\n  testimonials?: {\n    title: string;\n    subtitle?: string;\n    items: LandingTestimonial[];\n  };\n\n  // Pricing section (optional)\n  pricing?: {\n    title: string;\n    subtitle?: string;\n    plans: LandingPricingPlan[];\n  };\n\n  // Final CTA banner section (optional)\n  finalCta?: {\n    headline: string;\n    subtitle: string;\n    primaryCTA: string;\n    primaryCTARoute?: string;    // navigateTo route\n    secondaryCTA?: string;\n    secondaryCTASection?: string; // scrollToSection target\n  };\n\n  // Footer\n  footerCompany?: string;        // copyright name — defaults to 'alsquare technologies'\n  footerTagline?: string;        // tagline text below footer brand\n  footerBrand?: LandingBrandOverride; // custom SVG brand in footer (same type as navBrand)\n  footerColumns?: LandingFooterColumn[]; // multi-column link groups (Product, Resources, Contact…)\n}\n\n// Alsquare brand SVG — dark variant (for navbar on light backgrounds)\nexport const ALSQUARE_SVG_DARK = `<svg viewBox=\"0 0 80 80\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n  <path d=\"M32 62C17.6 62 6 50.4 6 36S17.6 10 32 10c9.2 0 17.3 4.9 21.8 12.2\" stroke=\"#1a3a7a\" stroke-width=\"9\" stroke-linecap=\"round\" fill=\"none\"/>\n  <circle cx=\"32\" cy=\"36\" r=\"10\" fill=\"white\" stroke=\"#1a3a7a\" stroke-width=\"7\"/>\n  <circle cx=\"32\" cy=\"36\" r=\"5.5\" fill=\"#e8a020\"/>\n  <line x1=\"48\" y1=\"22\" x2=\"48\" y2=\"62\" stroke=\"#1a3a7a\" stroke-width=\"9\" stroke-linecap=\"round\"/>\n  <rect x=\"56\" y=\"6\" width=\"7\" height=\"56\" rx=\"3.5\" fill=\"#e8a020\"/>\n  <rect x=\"67\" y=\"0\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#1a3a7a\"/>\n  <rect x=\"67\" y=\"9\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#1a3a7a\"/>\n  <rect x=\"75\" y=\"0\" width=\"5\" height=\"5\" rx=\"1\" fill=\"#1a3a7a\" opacity=\"0.7\"/>\n  <rect x=\"75\" y=\"8\" width=\"5\" height=\"5\" rx=\"1\" fill=\"#1a3a7a\" opacity=\"0.5\"/>\n</svg>`;\n\n// Alsquare brand SVG — white variant (for footer on dark backgrounds)\nexport const ALSQUARE_SVG_WHITE = `<svg viewBox=\"0 0 80 80\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n  <path d=\"M32 62C17.6 62 6 50.4 6 36S17.6 10 32 10c9.2 0 17.3 4.9 21.8 12.2\" stroke=\"#ffffff\" stroke-width=\"9\" stroke-linecap=\"round\" fill=\"none\"/>\n  <circle cx=\"32\" cy=\"36\" r=\"10\" fill=\"#0f172a\" stroke=\"#ffffff\" stroke-width=\"7\"/>\n  <circle cx=\"32\" cy=\"36\" r=\"5.5\" fill=\"#e8a020\"/>\n  <line x1=\"48\" y1=\"22\" x2=\"48\" y2=\"62\" stroke=\"#ffffff\" stroke-width=\"9\" stroke-linecap=\"round\"/>\n  <rect x=\"56\" y=\"6\" width=\"7\" height=\"56\" rx=\"3.5\" fill=\"#e8a020\"/>\n  <rect x=\"67\" y=\"0\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#ffffff\"/>\n  <rect x=\"67\" y=\"9\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#ffffff\"/>\n  <rect x=\"75\" y=\"0\" width=\"5\" height=\"5\" rx=\"1\" fill=\"#ffffff\" opacity=\"0.7\"/>\n  <rect x=\"75\" y=\"8\" width=\"5\" height=\"5\" rx=\"1\" fill=\"#ffffff\" opacity=\"0.5\"/>\n</svg>`;\n","/*\r\n * Public API Surface of tin-spa\r\n */\r\n\r\n\r\n\r\n//Services\r\nexport * from './lib/services/tin-spa.service';\r\nexport * from './lib/services/storage.service';\r\nexport * from './lib/services/message.service';\r\nexport * from './lib/services/export.service';\r\nexport * from './lib/services/auth.service';\r\nexport * from './lib/services/datalib.service';\r\nexport * from './lib/services/log.service';\r\nexport * from './lib/services/http.service';\r\nexport * from './lib/services/loader.service';\r\nexport * from './lib/services/dialog.service';\r\nexport * from './lib/services/accounting.service';\r\nexport * from './lib/services/assets.service'; // Changed: Added Fixed Assets service export\r\nexport * from './lib/services/loans.service';\r\nexport * from './lib/services/inventory.service';\r\nexport * from './lib/services/general.service';\r\nexport * from './lib/services/tab.service'; // Changed: Export tab service\r\nexport * from './lib/services/subscription.service'; // Added: Subscription feature-checking service\r\nexport * from './lib/services/update.service'; // Added: PWA update notification service\r\nexport * from './lib/services/push-notification.service'; // Changed: PWA push notification service\r\nexport * from './lib/services/notifications.service'; // Changed: Notification count + push message listener\r\nexport * from './lib/services/agent.service'; // Changed: Agent chat state management + API service (renamed from assistant)\r\nexport * from './lib/services/analytics.service'; // Changed: GA4 route tracking service for SPA page_view events\r\n\r\n// Guards\r\n\r\nexport * from './lib/guards/auth.guard';\r\nexport * from './lib/guards/feature.guard'; // Added: Plan-based feature route guard\r\n\r\n// Directives\r\nexport * from './lib/directives/feature.directive'; // Added: *spaFeature structural directive\r\n\r\n//classes\r\nexport * from './lib/classes/Classes';\r\nexport * from './lib/classes/TinCore';\r\nexport * from './lib/classes/LibClasses';\r\n\r\n\r\n//modules\r\nexport * from './lib/tin-spa.module';\r\nexport * from './lib/modules/spa-mat.module'\r\nexport * from './lib/modules/spa-index.module'\r\nexport * from './lib/modules/spa-user.module'\r\nexport * from './lib/modules/spa-admin.module'\r\nexport * from './lib/modules/index/index.module'\r\nexport * from './lib/modules/admin/admin.module'\r\nexport * from './lib/modules/user/user.module'\r\n// Changed: SpaHomeModule — single import for consumer apps (includes all domain modules + routing)\r\nexport * from './lib/modules/spa-home.module'\r\n// Domain-specific feature modules (used internally by SpaHomeModule)\r\nexport * from './lib/modules/accounting/accounting.module'\r\nexport * from './lib/modules/inventory/inventory.module'\r\nexport * from './lib/modules/sales/sales.module'\r\nexport * from './lib/modules/purchasing/purchasing.module'\r\nexport * from './lib/modules/hr/hr.module'\r\nexport * from './lib/modules/payroll/payroll.module'\r\nexport * from './lib/modules/manufacturing/manufacturing.module'\r\nexport * from './lib/modules/loans/loans.module'\r\nexport * from './lib/modules/general/general.module'\r\nexport * from './lib/modules/tenancy/tenancy.module'\r\nexport * from './lib/modules/workflow/workflow.module'\r\nexport * from './lib/modules/overview/overview.module'\r\n\r\n\r\n\r\n//components\r\nexport * from './lib/components/tin-spa.component';\r\nexport * from './lib/components/tiles/tiles.component';\r\nexport * from './lib/components/alert/alert.component';\r\nexport * from './lib/components/date/date.component';\r\nexport * from './lib/components/text/text.component';\r\nexport * from './lib/components/text-mask/text-mask.component'; // Changed: Export text-mask instead of password\r\nexport * from './lib/components/text-area/text-area.component'; // Changed: Export text-area component\r\nexport * from './lib/components/text-single/text-single.component'; // Changed: Export text-single (autocomplete)\r\nexport * from './lib/components/text-multi/text-multi.component'; // Changed: Renamed from multi-text\r\nexport * from './lib/components/label/label.component';\r\nexport * from './lib/components/datetime/datetime.component';\r\nexport * from './lib/components/select/select.component';\r\nexport * from './lib/components/select-lite/select-lite.component'; // Changed: Export select-lite component\r\nexport * from './lib/components/select-multi/select-multi.component'; // Changed: Renamed from multi-select\r\nexport * from './lib/components/select-bitwise/select-bitwise.component';\r\nexport * from './lib/components/attach/attach.component';\r\nexport * from './lib/components/check/check.component';\r\n// export * from './lib/components/viewer/viewer.component';\r\nexport * from './lib/components/money/money.component';\r\nexport * from './lib/components/chips/chips.component';\r\nexport * from './lib/components/activity/activity.component';\r\n// export * from './lib/components/html/html.component';\r\nexport * from './lib/components/option/option.component';\r\nexport * from './lib/components/steps/steps.component';\r\nexport * from './lib/components/filter/filter.component';\r\nexport * from './lib/components/message/messageDialog.component';\r\nexport * from './lib/components/loader/loader.component';\r\n\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/table/detailsDialog.component';\r\nexport * from './lib/components/form/form.component';\r\nexport * from './lib/components/number/number.component';\r\nexport * from './lib/components/search/search.component';\r\nexport * from './lib/components/viewer/viewer.component';\r\nexport * from './lib/components/viewer/viewerDialog.component';\r\nexport * from './lib/components/nav-menu/nav-menu.component';\r\nexport * from './lib/components/list-dialog/list-dialog.component';\r\nexport * from './lib/components/terms-dialog/terms-dialog.component';  // Changed: Added missing export\r\nexport * from './lib/components/privacy-dialog/privacy-dialog.component';  // Changed: Added missing export\r\nexport * from './lib/components/email/email.component';\r\nexport * from './lib/components/page/page.component';\r\nexport * from './lib/components/html/html.component';\r\nexport * from './lib/components/notes/notes.component';\r\nexport * from './lib/components/capsules/capsules.component';\r\nexport * from './lib/components/tabs/tabs.component';\r\n// Removed: tabs-internal and tabs-lite exports — consolidated into TabsComponent\r\nexport * from './lib/components/statuses/statuses.component';\r\nexport * from './lib/components/groups/groups.component';\r\nexport * from './lib/components/title-actions/title-actions.component';\r\nexport * from './lib/components/charts/charts.component'; // Changed: Export ChartsComponent for consumer apps\r\nexport * from './lib/components/agent/agent.component'; // Changed: Agent chat widget (renamed from assistant)\r\n\r\n//pages\r\nexport * from './lib/pages/tasks/tasks.component';\r\n\r\nexport * from './lib/pages/departments/departments.component';\r\nexport * from './lib/pages/employees/employees.component';\r\nexport * from './lib/pages/positions/positions.component';\r\nexport * from './lib/pages/grades/grades.component';\r\nexport * from './lib/pages/onboarding/onboarding.component'; // Changed: updated path from welcome to onboarding\r\nexport * from './lib/pages/customers/customers.component';\r\nexport * from './lib/pages/suppliers/suppliers.component';\r\nexport * from './lib/pages/categories/categories.component';\r\nexport * from './lib/pages/subcategories/subcategories.component';\r\nexport * from './lib/pages/brands/brands.component';\r\n\r\nexport * from './lib/pages/tenants/tenants.component';\r\nexport * from './lib/pages/membership/membership.component';\r\nexport * from './lib/pages/plans/plans.component';\r\nexport * from './lib/pages/subscription/subscription.component'; // Added: Subscription management page export\r\nexport * from './lib/pages/billing/billing.component'; // Added: Billing & invoice history page export\r\nexport * from './lib/pages/app-models/app-models.component';\r\nexport * from './lib/pages/users/users.component';\r\nexport * from './lib/pages/login/login.component';\r\n\r\nexport * from './lib/pages/roles/roles.component';\r\nexport * from './lib/pages/signup/signup.component';\r\nexport * from './lib/pages/change-password/change-password.component';\r\nexport * from './lib/pages/profile/profile.component';\r\nexport * from './lib/pages/recover-account/recover-account.component';\r\nexport * from './lib/pages/create-account/create-account.component';\r\n\r\nexport * from './lib/pages/logs/logs.component';\r\nexport * from './lib/pages/settings/settings.component';\r\n\r\n// Accounting Module - New accounting components\r\nexport { AccountsComponent as AccountingAccountsComponent } from './lib/pages/accounting/accounts/accounts.component';\r\nexport { AggregatesComponent as AccountingAggregatesComponent } from './lib/pages/accounting/aggregates/aggregates.component'; // Added: Aggregates component export\r\nexport { AgingComponent as AccountingAgingComponent } from './lib/pages/accounting/aging/aging.component'; // Added: Aging component export\r\nexport { TransactionTypesComponent as AccountingTransactionTypesComponent } from './lib/pages/accounting/transaction-types/transaction-types.component';\r\nexport { TransactionsComponent as AccountingTransactionsComponent } from './lib/pages/accounting/transactions/transactions.component';\r\nexport { InvoicesComponent as AccountingInvoicesComponent } from './lib/pages/accounting/invoices/invoices.component';\r\nexport { StatementComponent as AccountingStatementComponent } from './lib/pages/accounting/outstanding-invoices/outstanding-invoices.component'; // Changed: Export StatementComponent (replaces OutstandingInvoicesComponent)\r\nexport { ReportsComponent as AccountingReportsComponent } from './lib/pages/accounting/reports/reports.component'; // Added: Financial Reports component export\r\nexport { CurrenciesComponent as AccountingCurrenciesComponent } from './lib/pages/accounting/currencies/currencies.component'; // Changed: Currencies component export for multi-currency support\r\n\r\n// Accounting Dashboard\r\nexport { AccountingDashboardComponent } from './lib/pages/accounting/accounting-dashboard/accounting-dashboard.component'; // Changed: Added accounting dashboard export\r\n\r\n// Inventory Dashboard (re-export for consumer apps)\r\nexport { InventoryDashboardComponent } from './lib/pages/inventory/inventory-dashboard/inventory-dashboard.component'; // Changed: Added inventory dashboard export\r\n\r\n// Sales Dashboard\r\nexport { SalesDashboardComponent } from './lib/pages/sales/sales-dashboard/sales-dashboard.component'; // Changed: Added sales dashboard export\r\n\r\n// Purchasing Dashboard\r\nexport { PurchasingDashboardComponent } from './lib/pages/purchasing/purchasing-dashboard/purchasing-dashboard.component'; // Changed: Added purchasing dashboard export\r\n\r\n// Overview Dashboard\r\nexport { OverviewDashboardComponent } from './lib/pages/overview/overview-dashboard/overview-dashboard.component'; // Changed: Added overview dashboard export\r\n\r\n// Invoice Dashboard\r\nexport { InvoiceDashboardComponent } from './lib/pages/accounting/invoice-dashboard/invoice-dashboard.component'; // Changed: Added invoice dashboard export\r\n\r\n// Payroll Dashboard\r\nexport { PayrollDashboardComponent } from './lib/pages/payroll/payroll-dashboard/payroll-dashboard.component'; // Changed: Added payroll dashboard export\r\n\r\n// Loans Module\r\nexport * from './lib/pages/loans/loan-products/loan-products.component';\r\nexport * from './lib/pages/loans/loans/loans.component';\r\nexport * from './lib/pages/loans/loan-payments/loan-payments.component';\r\n\r\n// Preferences Component\r\nexport * from './lib/pages/preferences/preferences.component'; // Changed: Added Preferences component export\r\n\r\n// Invitations Table Component\r\nexport * from './lib/pages/invitations-table/invitations-table.component'; // Changed: Exported for use in HRModule and TenancyModule\r\n\r\n// Welcome/Overview Component\r\nexport * from './lib/pages/welcome/welcome.component';\r\n\r\n// Landing Page Component\r\nexport * from './lib/pages/landing/landing.config';\r\nexport * from './lib/pages/landing/landing.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i5","i1","i2","i3.StorageService","i4.HttpService","i5.MessageService","i6.LogService","i7.SignalRService","i1.HttpService","i3.AuthService","i1.AuthService","i1.DataServiceLib","i2.AuthService","i2.ButtonService","i3.TableConfigService","i2.SignalRService","i3.MessageService","i1.SubscriptionService","i1.MessageService","i4","i5.SuffixComponent","i6","i2.DialogService","i3.ButtonService","i4.MessageService","i7","i8","i9","i10","i11","i13","i14.SuffixComponent","i6.SuffixComponent","i2.DataServiceLib","i9.SuffixComponent","i3.DialogService","i4.ButtonService","i9.SelectCommonComponent","i5.CurrencyInputMaskDirective","i1.SelectCommonComponent","i12.SuffixComponent","i10.SuffixComponent","i8.TextSingleComponent","i9.DateComponent","i10.SelectLiteComponent","i11.TextMultiComponent","i12.SelectMultiComponent","i2.MessageService","i10.CamelToWordsPipe","i1.LoaderService","i1.SignalRService","i1.AgentService","i4.NotificationsService","i6.DataServiceLib","i8.SubscriptionService","i12","i15","i19.LoaderComponent","i20.ToastComponent","i21.AgentComponent","finalize","i5.LogService","i6.StorageService","i5.FilterComponent","i6.OptionComponent","i7.CamelToWordsPipe","i1.ButtonService","i4.CsvService","i9.FilterComponent","i10.TilesComponent","i6.CheckComponent","i7.SelectLiteComponent","i2.ConditionService","i1.ConditionService","i3.DataServiceLib","i14","i5.ButtonService","i6.DialogService","i7.TableConfigService","i8.ConditionService","i9.AuthService","i10.SignalRService","i14.SearchComponent","i15.TableHeaderComponent","i16.TableRowComponent","i17.TableActionComponent","i18.CapsulesComponent","i19.CardsComponent","i20.GroupsComponent","i21.CamelToWordsPipe","i7.ChipsComponent","i5.ChipsComponent","i7.TextComponent","i8.TextMaskComponent","i9.TextAreaComponent","i10.TextSingleComponent","i11.CheckComponent","i12.DateComponent","i13.DatetimeComponent","i14.LabelComponent","i15.MoneyComponent","i16.AttachComponent","i17.NumberComponent","i18.ViewerComponent","i19.EmailComponent","i20.TextMultiComponent","i21.SelectMultiComponent","i22.HtmlComponent","i23.NotesComponent","i24.CamelToWordsPipe","i1.TabService","i5.TableComponent","i6.ButtonService","i7.DialogService","i8.AuthService","i9.TableConfigService","i15.SelectComponent","i16.StepsComponent","i17.FormComponent","i18.AlertComponent","i19.TabsComponent","i20.StatusesComponent","i4.TableComponent","i7.CheckComponent","i8.DateComponent","i9.DatetimeComponent","i10.SelectComponent","i11.SelectMultiComponent","i12.CamelToWordsPipe","i4.CheckComponent","i6.TitleActionsComponent","i2.StorageService","i5.DataServiceLib","i6.AuthService","i7.LogService","i8.NotificationsService","i9.SignalRService","i16","i17","i18.TextComponent","i19.TextMaskComponent","i20","i4.AuthService","i5.StorageService","i18","i19","i6.TextComponent","i3.HttpService","i8.TextComponent","i9.TextMaskComponent","i5.AuthService","i9.TextComponent","i10.LabelComponent","i3.PageComponent","i1.PageComponent","i4.DataServiceLib","i5.DialogService","i7.MessageService","routes","i6.SelectComponent","i2.AccountingService","i3.TilesComponent","i4.TabsComponent","i3.TabsComponent","i2.TilesComponent","i4.SelectLiteComponent","i3.ChartsComponent","i4.TilesComponent","i5.ChartsComponent","AccountingAccountsComponent","AccountingAggregatesComponent","AccountingTransactionsComponent","AccountingInvoicesComponent","AccountingAgingComponent","AccountingSupplierAgingComponent","AccountingStatementComponent","AccountingReportsComponent","AccountingBudgetsComponent","AccountingBudgetVsActualComponent","i8.InvitationsTableComponent","i8.TableComponent","i7.SelectComponent","i8.LabelComponent","i9.TableComponent","i10.InvitationsTableComponent","i2.SubscriptionService","i3.TableComponent","i2.PageComponent"],"mappings":"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AAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAEnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAA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"}