@foxeltech/angular-ui 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/foxeltech-angular-ui-chart.mjs +392 -0
- package/fesm2022/foxeltech-angular-ui-chart.mjs.map +1 -0
- package/fesm2022/foxeltech-angular-ui-flow.mjs +38 -0
- package/fesm2022/foxeltech-angular-ui-flow.mjs.map +1 -0
- package/fesm2022/foxeltech-angular-ui-rich-text.mjs +156 -0
- package/fesm2022/foxeltech-angular-ui-rich-text.mjs.map +1 -0
- package/fesm2022/foxeltech-angular-ui.mjs +890 -1499
- package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
- package/fx-icons.svg +97 -0
- package/package.json +23 -16
- package/src/lib/styles/tailwind.css +0 -1
- package/src/lib/ui/components/button/button.component.html +14 -14
- package/src/lib/ui/components/checkbox/checkbox.component.html +2 -2
- package/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.html +2 -2
- package/src/lib/ui/components/datetime-picker/datetime-picker.component.html +54 -28
- package/src/lib/ui/components/datetime-picker/datetime-picker.component.scss +25 -137
- package/src/lib/ui/components/dnd-upload/dnd-upload.component.html +3 -3
- package/src/lib/ui/components/drawer/drawer.component.html +75 -61
- package/src/lib/ui/components/empty-state/empty-state.component.html +2 -2
- package/src/lib/ui/components/hero-icon/hero-icon.component.html +10 -9
- package/src/lib/ui/components/info-field/info-field.component.html +1 -1
- package/src/lib/ui/components/input/input.component.html +6 -6
- package/src/lib/ui/components/kanban-board/kanban-board.component.html +1 -1
- package/src/lib/ui/components/loading-panel/loading-panel.component.html +53 -53
- package/src/lib/ui/components/master-detail/master-detail.component.html +9 -9
- package/src/lib/ui/components/menu/menu.component.html +27 -0
- package/src/lib/ui/components/radio-button/radio-button.component.html +26 -26
- package/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html +3 -3
- package/src/lib/ui/components/search-bar/search-bar.component.html +12 -11
- package/src/lib/ui/components/section-card/section-card.component.html +1 -1
- package/src/lib/ui/components/select/select.component.html +14 -12
- package/src/lib/ui/components/skeleton-detail/skeleton-detail.component.html +2 -2
- package/src/lib/ui/components/skeleton-list/skeleton-list.component.html +1 -1
- package/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html +5 -5
- package/src/lib/ui/components/slider/slider.component.html +22 -20
- package/src/lib/ui/components/stat-cards/stat-cards.component.html +1 -1
- package/src/lib/ui/components/switch/switch.component.html +1 -1
- package/src/lib/ui/components/tab-group/tab-group.component.html +35 -32
- package/src/lib/ui/components/table-cell/table-cell.component.html +2 -2
- package/src/lib/ui/components/tag/tag.component.html +4 -4
- package/src/lib/ui/components/toast/toast.component.html +42 -40
- package/src/lib/ui/components/toast-container/toast-container.component.html +1 -0
- package/src/lib/ui/components/tree-diagram/tree-diagram.component.html +22 -20
- package/tailwind.css +0 -1
- package/types/foxeltech-angular-ui-chart.d.ts +53 -0
- package/types/foxeltech-angular-ui-flow.d.ts +14 -0
- package/types/foxeltech-angular-ui-rich-text.d.ts +35 -0
- package/{index.d.ts → types/foxeltech-angular-ui.d.ts} +394 -387
- package/src/lib/ui/components/chart/chart.component.html +0 -20
- package/src/lib/ui/components/chart/chart.component.scss +0 -49
- package/src/lib/ui/components/flow-connection/flow-connection.component.html +0 -10
- package/src/lib/ui/components/flow-connection/flow-connection.component.scss +0 -0
- package/src/lib/ui/components/rich-text-area/rich-text-area.component.html +0 -3
- package/src/lib/ui/components/rich-text-area/rich-text-area.component.scss +0 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foxeltech-angular-ui.mjs","sources":["../../../projects/ui/src/lib/core/components/base.component.ts","../../../projects/ui/src/lib/ui/components/hero-icon/hero-icon.component.ts","../../../projects/ui/src/lib/ui/components/hero-icon/hero-icon.component.html","../../../projects/ui/src/lib/ui/components/toast/toast.component.ts","../../../projects/ui/src/lib/ui/components/toast/toast.component.html","../../../projects/ui/src/lib/ui/components/toast-container/toast-container.component.ts","../../../projects/ui/src/lib/ui/components/toast-container/toast-container.component.html","../../../projects/ui/src/lib/core/services/toastr.service.ts","../../../projects/ui/src/lib/core/utils.ts","../../../projects/ui/src/lib/core/services/http-wrapper.service.ts","../../../projects/ui/src/lib/core/components/base-table.component.ts","../../../projects/ui/src/lib/core/components/base-master-detail.component.ts","../../../projects/ui/src/lib/core/components/base-dialog.component.ts","../../../projects/ui/src/lib/core/services/loading.service.ts","../../../projects/ui/src/lib/core/resolvers/base-resolver.resolver.ts","../../../projects/ui/src/lib/core/services/storage.service.ts","../../../projects/ui/src/lib/core/resolvers/fx-list.resolver.ts","../../../projects/ui/src/lib/core/services/api-factory.ts","../../../projects/ui/src/lib/core/services/realtime-table-sync.ts","../../../projects/ui/src/lib/core/value-tone.util.ts","../../../projects/ui/src/lib/core/validators.ts","../../../projects/ui/src/lib/translation/translation.module.ts","../../../projects/ui/src/lib/translation/translation.service.ts","../../../projects/ui/src/lib/core/services/permissions.service.ts","../../../projects/ui/src/lib/core/directives/has-permission.directive.ts","../../../projects/ui/src/lib/core/directives/trim.directive.ts","../../../projects/ui/src/lib/core/guards/permissions.guard.ts","../../../projects/ui/src/lib/core/services/auth-state.service.ts","../../../projects/ui/src/lib/core/interceptors/auth.interceptor.ts","../../../projects/ui/src/lib/core/services/breadcrumb.service.ts","../../../projects/ui/src/lib/core/services/quill-style-loader.service.ts","../../../projects/ui/src/lib/core/services/theme.service.ts","../../../projects/ui/src/lib/core/services/notification.service.ts","../../../projects/ui/src/lib/ui/material.module.ts","../../../projects/ui/src/lib/ui/components/button/button.component.ts","../../../projects/ui/src/lib/ui/components/button/button.component.html","../../../projects/ui/src/lib/ui/components/chart/chart.component.ts","../../../projects/ui/src/lib/ui/components/chart/chart.component.html","../../../projects/ui/src/lib/ui/components/fx-component.component.ts","../../../projects/ui/src/lib/ui/components/checkbox/checkbox.component.ts","../../../projects/ui/src/lib/ui/components/checkbox/checkbox.component.html","../../../projects/ui/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.ts","../../../projects/ui/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.html","../../../projects/ui/src/lib/ui/components/datetime-picker/datetime-picker.component.ts","../../../projects/ui/src/lib/ui/components/datetime-picker/datetime-picker.component.html","../../../projects/ui/src/lib/ui/components/dnd-upload/dnd-upload.component.ts","../../../projects/ui/src/lib/ui/components/dnd-upload/dnd-upload.component.html","../../../projects/ui/src/lib/ui/components/flow-connection/flow-connection.component.ts","../../../projects/ui/src/lib/ui/components/flow-connection/flow-connection.component.html","../../../projects/ui/src/lib/ui/components/input/input.component.ts","../../../projects/ui/src/lib/ui/components/input/input.component.html","../../../projects/ui/src/lib/ui/components/loading-panel/loading-panel.component.ts","../../../projects/ui/src/lib/ui/components/loading-panel/loading-panel.component.html","../../../projects/ui/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.ts","../../../projects/ui/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html","../../../projects/ui/src/lib/ui/components/radio-button/radio-button.component.ts","../../../projects/ui/src/lib/ui/components/radio-button/radio-button.component.html","../../../projects/ui/src/lib/ui/components/rich-text-area/rich-text-area.component.ts","../../../projects/ui/src/lib/ui/components/rich-text-area/rich-text-area.component.html","../../../projects/ui/src/lib/ui/components/search-bar/search-bar.component.ts","../../../projects/ui/src/lib/ui/components/search-bar/search-bar.component.html","../../../projects/ui/src/lib/ui/components/select/select.component.ts","../../../projects/ui/src/lib/ui/components/select/select.component.html","../../../projects/ui/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.ts","../../../projects/ui/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html","../../../projects/ui/src/lib/ui/components/slider/slider.component.ts","../../../projects/ui/src/lib/ui/components/slider/slider.component.html","../../../projects/ui/src/lib/ui/components/switch/switch.component.ts","../../../projects/ui/src/lib/ui/components/switch/switch.component.html","../../../projects/ui/src/lib/ui/components/tab-component/tab.component.ts","../../../projects/ui/src/lib/ui/components/tab-component/tab.component.html","../../../projects/ui/src/lib/ui/components/tab-group/tab-group.component.ts","../../../projects/ui/src/lib/ui/components/tab-group/tab-group.component.html","../../../projects/ui/src/lib/ui/components/table-cell/table-cell.component.ts","../../../projects/ui/src/lib/ui/components/table-cell/table-cell.component.html","../../../projects/ui/src/lib/ui/components/tag/tag.component.ts","../../../projects/ui/src/lib/ui/components/tag/tag.component.html","../../../projects/ui/src/lib/ui/components/tree-diagram/tree-diagram.component.ts","../../../projects/ui/src/lib/ui/components/tree-diagram/tree-diagram.component.html","../../../projects/ui/src/lib/ui/components/kanban-board/kanban-board.component.ts","../../../projects/ui/src/lib/ui/components/kanban-board/kanban-board.component.html","../../../projects/ui/src/lib/ui/components/drawer/drawer.component.ts","../../../projects/ui/src/lib/ui/components/drawer/drawer.component.html","../../../projects/ui/src/lib/ui/components/skeleton-list/skeleton-list.component.ts","../../../projects/ui/src/lib/ui/components/skeleton-list/skeleton-list.component.html","../../../projects/ui/src/lib/ui/components/skeleton-detail/skeleton-detail.component.ts","../../../projects/ui/src/lib/ui/components/skeleton-detail/skeleton-detail.component.html","../../../projects/ui/src/lib/ui/components/stat-cards/stat-cards.component.ts","../../../projects/ui/src/lib/ui/components/stat-cards/stat-cards.component.html","../../../projects/ui/src/lib/ui/components/empty-state/empty-state.component.ts","../../../projects/ui/src/lib/ui/components/empty-state/empty-state.component.html","../../../projects/ui/src/lib/ui/components/filter-chips/filter-chips.component.ts","../../../projects/ui/src/lib/ui/components/filter-chips/filter-chips.component.html","../../../projects/ui/src/lib/ui/components/meter/meter.component.ts","../../../projects/ui/src/lib/ui/components/meter/meter.component.html","../../../projects/ui/src/lib/ui/components/section-card/section-card.component.ts","../../../projects/ui/src/lib/ui/components/section-card/section-card.component.html","../../../projects/ui/src/lib/ui/components/info-field/info-field.component.ts","../../../projects/ui/src/lib/ui/components/info-field/info-field.component.html","../../../projects/ui/src/lib/ui/components/severity-badges/severity-badges.component.ts","../../../projects/ui/src/lib/ui/components/severity-badges/severity-badges.component.html","../../../projects/ui/src/lib/ui/components/master-detail/master-detail.component.ts","../../../projects/ui/src/lib/ui/components/master-detail/master-detail.component.html","../../../projects/ui/src/lib/ui/components/index.ts","../../../projects/ui/src/lib/ui/dialogs/confirmation/confirmation.component.ts","../../../projects/ui/src/lib/ui/dialogs/confirmation/confirmation.component.html","../../../projects/ui/src/lib/ui/dialogs/index.ts","../../../projects/ui/src/lib/ui/ui.module.ts","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/foxeltech-angular-ui.ts"],"sourcesContent":["import { DestroyRef, Directive, Injector, OnDestroy, inject } from '@angular/core';\n\n@Directive()\nexport abstract class BaseComponent implements OnDestroy {\n protected injector: Injector;\n /** Teardown hook for subscriptions: takeUntilDestroyed(this.destroyRef). */\n protected destroyRef = inject(DestroyRef);\n\n constructor(injector?: Injector) {\n // Some subclasses historically passed non-injector values (e.g. dialog\n // data) to super(); fall back to the component's own injector so\n // this.injector.get(...) always works.\n this.injector = injector instanceof Injector ? injector : inject(Injector);\n }\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method -- subclasses across host apps call super.ngOnDestroy(); removing this breaks them at runtime\n ngOnDestroy(): void {}\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-hero-icon',\n standalone: false,\n templateUrl: './hero-icon.component.html',\n styleUrl: './hero-icon.component.scss',\n})\nexport class HeroIconComponent {\n @Input() stroke = 1.5;\n @Input() icon: any;\n @Input() solid: boolean;\n @Input() outline: boolean;\n @Input() size: number;\n @Input() color: any;\n @Input() class?: any;\n}\n","<ng-heroicons\n [stroke]=\"stroke\"\n [icon]=\"icon\"\n [size]=\"size\"\n [solid]=\"solid\"\n [outline]=\"outline\"\n [color]=\"color\"\n [class]=\"class\"\n/>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-toast',\n standalone: false,\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss'\n})\nexport class ToastComponent {\n @Input() toastId!: number;\n @Input() title?: string = '';\n @Input() message = '';\n @Input() type: 'success' | 'error' | 'info' | 'warning';\n}\n","<div\n animate.enter=\"horizontal-fade-in-animation\"\n animate.leave=\"horizontal-fade-out-animation\"\n [attr.role]=\"type === 'error' ? 'alert' : 'status'\"\n class=\"flex border-l-[3px] items-center bg-bg-primary gap-semi min-w-[250px] max-w-[400px] px-large py-semi rounded shadow-lg transition-all duration-300 ease-in-out transform opacity-100 translate-y-0\"\n [ngClass]=\"{\n 'border-success': type === 'success',\n 'border-critical': type === 'error',\n 'border-warning': type === 'warning',\n 'border-information': type === 'info'\n }\"\n>\n <div class=\"\" aria-hidden=\"true\">\n @switch (type) { @case('success') {\n <fx-ui-hero-icon\n icon=\"check-circle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-success\"\n ></fx-ui-hero-icon>\n } @case('error') {\n <fx-ui-hero-icon\n icon=\"exclamation-circle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-critical\"\n ></fx-ui-hero-icon>\n } @case('warning') {\n <fx-ui-hero-icon\n icon=\"exclamation-triangle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-warning\"\n ></fx-ui-hero-icon>\n } @default {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-information\"\n ></fx-ui-hero-icon>\n } }\n </div>\n\n <div class=\"flex flex-col\">\n <strong *ngIf=\"title\" class=\"txt-field-label\">{{ title }}</strong>\n <p class=\"txt-default\">{{ message }}</p>\n </div>\n</div>\n","import { ChangeDetectorRef, Component } from '@angular/core';\n// import { ToastData } from '../../../../public-api';\n\n@Component({\n selector: 'fx-ui-toast-container',\n standalone: false,\n templateUrl: './toast-container.component.html',\n styleUrl: './toast-container.component.scss'\n})\nexport class ToastContainerComponent {\n toasts: any[] = [];\n\n constructor(private ref: ChangeDetectorRef) {}\n\n addToast(toast: any) {\n this.toasts.push(toast);\n this.ref.detectChanges()\n setTimeout(() => this.removeToast(toast.id), 3000);\n }\n\n removeToast(id: number) {\n this.toasts = this.toasts.filter(t => t.id !== id);\n this.ref.detectChanges();\n }\n}\n","<div\n class=\"fixed top-5 right-5 flex flex-col items-end gap-3 z-[10000] pointer-events-none\"\n>\n @for (toast of toasts; track toast) {\n <fx-ui-toast\n class=\"pointer-events-auto\"\n [message]=\"toast.message\"\n [title]=\"toast.title\"\n [type]=\"toast.type\"\n ></fx-ui-toast>\n }\n</div>","import { Injectable, ApplicationRef, ComponentRef, Injector, createComponent } from '@angular/core';\nimport { ToastContainerComponent } from '../../ui/components/toast-container/toast-container.component';\n\nexport interface ToastData {\n id: number;\n message: string;\n title?: string;\n type: 'success' | 'error' | 'info' | 'warning';\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FxToastrService {\n private containerRef?: ComponentRef<ToastContainerComponent>;\n private idCounter = 0;\n private recentMessages = new Set<string>();\n\n constructor(private appRef: ApplicationRef) {\n this.ensureContainerExists();\n }\n\n private ensureContainerExists() {\n if (!this.containerRef) {\n this.containerRef = createComponent(ToastContainerComponent, {\n environmentInjector: this.appRef.injector,\n });\n\n this.appRef.attachView(this.containerRef.hostView);\n document.body.appendChild(this.containerRef.location.nativeElement);\n }\n }\n\n private show(message: string, type: ToastData['type'], title?: string) {\n const dedupeKey = `${type}:${message}`;\n if (this.recentMessages.has(dedupeKey)) {\n return;\n }\n this.recentMessages.add(dedupeKey);\n setTimeout(() => this.recentMessages.delete(dedupeKey), 2000);\n\n const toast: ToastData = {\n id: ++this.idCounter,\n message,\n title,\n type,\n };\n\n this.containerRef?.instance.addToast(toast);\n }\n\n success(message: string, title?: string) {\n this.show(message, 'success', title);\n }\n\n error(message: string, title?: string) {\n this.show(message, 'error', title);\n }\n\n info(message: string, title?: string) {\n this.show(message, 'info', title);\n }\n\n warning(message: string, title?: string) {\n this.show(message, 'warning', title);\n }\n}\n","import { Observable, firstValueFrom } from 'rxjs';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { NgForm } from '@angular/forms';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { TagType } from '../../public-api';\n\nexport class FxUtils {\n private static async preresolve(promises: any, value: any, key?: string) {\n if (key === 'callback' || key === 'socket' || key === 'listener') {\n promises.push(value);\n return;\n }\n if (value instanceof Function) {\n this.preresolve(promises, value());\n } else if (value instanceof Array) {\n const inpromises: any = [];\n value.forEach((v) => {\n this.preresolve(inpromises, v);\n });\n promises.push(Promise.all(inpromises));\n } else if (value instanceof Observable) {\n promises.push(firstValueFrom(value));\n } else if (value instanceof Promise) {\n promises.push(value);\n } else if (value instanceof Object) {\n promises.push(this.resolve(value));\n } else {\n promises.push(value);\n }\n }\n\n static async resolve(value: object) {\n const keys = [];\n const promises: any = [];\n for (const i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n keys.push(i);\n this.preresolve(promises, (value as any)[i], i);\n }\n }\n const values = await Promise.all(promises);\n const raw = {};\n keys.forEach((key: string, index: number) => {\n _.set(raw, key, values[index]);\n });\n return raw;\n }\n\n static isNotNull(obj: any): boolean {\n return !this.isNull(obj);\n }\n\n static isNull(obj: any): boolean {\n return obj === undefined || obj === null;\n }\n\n static isFunction(obj: any): boolean {\n return this.isNotNull(obj) && obj instanceof Function;\n }\n\n static isNotFunction(obj: any): boolean {\n return !this.isFunction(obj);\n }\n\n static isStringEmpty(obj: string): boolean {\n return this.isNull(obj) || obj === '';\n }\n\n static isStringNotEmpty(obj: string): boolean {\n return !this.isStringEmpty(obj);\n }\n\n static isArrayEmpty(obj: any[]): boolean {\n return this.isNull(obj) || obj.length === 0;\n }\n\n static isArrayNotEmpty(obj: any[]): boolean {\n return !this.isArrayEmpty(obj);\n }\n\n static replaceStartWithAsterisk(inputString: string, numToReplace: number): string {\n if (numToReplace >= inputString.length) {\n return '*'.repeat(inputString.length);\n } else if (numToReplace <= 0) {\n return inputString;\n } else {\n const asterisks = '*'.repeat(numToReplace);\n const remainingString = inputString.substring(numToReplace);\n return asterisks + remainingString;\n }\n }\n\n static checkInvalidField(form: NgForm): void {\n Object.keys(form.controls).forEach((field) => {\n const control = form.controls[field];\n control.markAsTouched({ onlySelf: true });\n });\n }\n\n static checkInlineErrorField(err: any, f: NgForm) {\n if (err) {\n Object.keys(err).forEach((field) => {\n const formControl = f.form.get(field);\n\n if (formControl) {\n const error = { apiError: err[field] };\n formControl.setErrors(error);\n }\n });\n }\n }\n\n static isSameCollection(collection: any[], compareCollection: any): boolean {\n return _.isEmpty(_.xor(collection, compareCollection));\n }\n\n static isSameValue(model: any, compareModel: any) {\n return _.isEqual(model, compareModel);\n }\n\n static parseError(err: HttpErrorResponse) {\n const status = _.get(err, 'status');\n\n switch (status) {\n case 401:\n return 'Session timeout. Please login again.';\n case 403:\n return 'You do not have permission to perform this action.';\n case 404:\n return 'The requested resource was not found.';\n case 408:\n return 'The request timed out. Please try again.';\n case 409:\n return 'A conflict occurred. Please refresh and try again.';\n case 413:\n return 'The uploaded data is too large.';\n case 415:\n return 'Unsupported media type. Please check the file format.';\n case 429:\n return 'Too many requests. Please wait a moment and try again.';\n case 500:\n return 'An internal server error occurred. Please try again later.';\n case 502:\n return 'The server is temporarily unavailable. Please try again later.';\n case 503:\n return 'The service is currently unavailable. Please try again later.';\n case 504:\n return 'The server took too long to respond. Please try again later.';\n }\n\n const message = this.isStringEmpty(_.get(err, 'error.errors', ''))\n ? _.get(err, 'error.message', 'Unknown Error')\n : _.get(err, 'error.errors');\n\n if (this.isStringEmpty(_.get(err, 'error.code'))) {\n return message;\n }\n return `${_.get(err, 'error.code')}: ${message}`;\n }\n\n /**\n * Resolve a theme channel triple (`--danger: 255 122 0`) to a CSS colour.\n * Pass `legacyCommaSyntax: true` for canvas/ECharts consumers: canvas paints\n * both forms, but zrender's colour parser can't read the CSS4 space syntax\n * and renders slices black on hover when given it.\n */\n static convertColorFromVariable(\n name: string,\n alpha = 1,\n options?: { legacyCommaSyntax?: boolean },\n ): string {\n const value = getComputedStyle(document.body)\n .getPropertyValue(name)\n .trim()\n .replace(/\\s+/g, ' ');\n if (options?.legacyCommaSyntax) {\n const [r, g, b] = value.replace(/[/,]/g, ' ').split(/\\s+/).filter(Boolean);\n if (r === undefined || g === undefined || b === undefined) {\n return `rgba(148, 163, 184, ${alpha})`;\n }\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return value ? `rgba(${value} / ${alpha})` : `rgba(255 255 255 / ${alpha})`;\n }\n\n static getTagClass(key: string, isCriticalExist = true): TagType {\n switch (key.toLowerCase()) {\n case 'error':\n case 'failed':\n case 'inactive':\n case 'critical':\n case 'stopped':\n return 'critical';\n case 'high':\n if (!isCriticalExist) {\n return 'critical';\n }\n return 'danger';\n case 'inprogress':\n case 'processing':\n case 'paused':\n case 'medium':\n case 'warning':\n return 'warning';\n case 'completed':\n case 'success':\n case 'active':\n case 'low':\n case 'running':\n return 'success';\n case 'queue':\n case 'waiting':\n case 'info':\n case 'system':\n return 'information';\n case 'discovery':\n return 'discovery';\n case 'disabled':\n default:\n return 'default';\n }\n }\n\n static validateEmail(value: string) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const isEmail = emailRegex.test(value);\n return isEmail;\n }\n\n /** Safe deep accessor with the org-wide empty placeholder. */\n static value(model: any, key: string, defaultValue: any = '---') {\n return _.get(model, key, defaultValue);\n }\n\n /**\n * Severity weight for ordering — kept next to getTagClass so ordering and\n * colouring can never drift apart.\n */\n static severityWeight(level: string): number {\n switch (String(level ?? '').toUpperCase()) {\n case 'CRITICAL':\n return 5;\n case 'HIGH':\n return 4;\n case 'MEDIUM':\n return 3;\n case 'LOW':\n return 2;\n case 'INFO':\n case 'INFORMATION':\n return 1;\n default:\n return 0;\n }\n }\n\n /** Org-wide date-time rendering (DD/MM/YYYY HH:mm:ss, local time). */\n static formatDateTime(time: string | Date): string {\n if (FxUtils.isNull(time)) return '';\n return moment.parseZone(time).local().format('DD/MM/YYYY HH:mm:ss');\n }\n\n /** Seconds → compact duration (\"2d 4h\", \"3h 12m\", \"45s\"). */\n static formatDuration(totalSeconds: number): string {\n const sec = Number(totalSeconds);\n if (!_.isFinite(sec) || sec < 0) return '';\n const d = Math.floor(sec / 86400);\n const h = Math.floor((sec % 86400) / 3600);\n const m = Math.floor((sec % 3600) / 60);\n const s = Math.floor(sec % 60);\n if (d > 0) return h > 0 ? `${d}d ${h}h` : `${d}d`;\n if (h > 0) return m > 0 ? `${h}h ${m}m` : `${h}h`;\n if (m > 0) return s > 0 ? `${m}m ${s}s` : `${m}m`;\n return `${s}s`;\n }\n\n /** Relative time within the last 24h (\"3 hours ago\"), else DD/MM/YYYY. */\n static formatRelative(time: string | Date): string {\n if (FxUtils.isNull(time)) return '';\n const m = moment.parseZone(time).local();\n return moment().diff(m, 'hours') < 24 ? m.fromNow() : m.format('DD/MM/YYYY');\n }\n\n /**\n * Normalize a snake_case + protobuf-Long API payload for camelCase binding:\n * - genuine snake_case keys -> camelCase (data-as-key entries such as DLL\n * names like \"kernel32.dll\" are left untouched by the strict regex);\n * - Long-encoded numbers `{ high, low, unsigned }` -> plain number.\n */\n static camelizeDeep(input: any): any {\n if (Array.isArray(input)) {\n return input.map((v) => FxUtils.camelizeDeep(v));\n }\n if (input !== null && typeof input === 'object') {\n const keys = Object.keys(input);\n if (\n keys.length === 3 &&\n keys.includes('high') &&\n keys.includes('low') &&\n keys.includes('unsigned')\n ) {\n const high = Number((input as any).high) || 0;\n const low = Number((input as any).low) || 0;\n return high * 4294967296 + (low >>> 0);\n }\n const out: any = {};\n for (const k of keys) {\n const nk = /^[a-z][a-z0-9]*(_[a-z0-9]+)+$/.test(k) ? _.camelCase(k) : k;\n out[nk] = FxUtils.camelizeDeep((input as any)[k]);\n }\n return out;\n }\n return input;\n }\n\n static formatSizeUnits(bytes: number) {\n if (bytes >= 1073741824) {\n return (bytes / 1073741824).toFixed(2) + ' GB';\n } else if (bytes >= 1048576) {\n return (bytes / 1048576).toFixed(2) + ' MB';\n } else if (bytes >= 1024) {\n return (bytes / 1024).toFixed(2) + ' KB';\n } else if (bytes > 1) {\n return bytes + ' bytes';\n } else if (bytes == 1) {\n return bytes + ' byte';\n }\n return '0 bytes';\n }\n}\n","import { HttpClient, HttpEvent, HttpHeaders, HttpRequest } from '@angular/common/http';\nimport { Observable, firstValueFrom } from 'rxjs';\n\nexport class HttpWrapper {\n constructor(public http: HttpClient, public baseURL: string) {}\n\n /**\n * Hook applied to every resolved response (get/post/put/delete and all verb\n * helpers built on them). Default is identity; override to normalize a\n * backend convention once (e.g. FxUtils.camelizeDeep for snake_case +\n * protobuf-Long payloads) instead of wrapping each method.\n */\n protected transformResponse(res: any): any {\n return res;\n }\n\n private addCredentials(options: any = {}): any {\n return {\n withCredentials: true,\n ...options,\n };\n }\n\n async get(url = '', params?: any): Promise<any> {\n const options = {\n withCredentials: true,\n params: {\n ...params,\n },\n };\n return this.transformResponse(await firstValueFrom(this.http.get(this.baseURL + url, options)));\n }\n\n async post(url: string, body: any = {}, options: any = {}): Promise<any> {\n return this.transformResponse(\n await firstValueFrom(this.http.post(this.baseURL + url, body, this.addCredentials(options))),\n );\n }\n\n async put(url: string, body: any, options: any = {}): Promise<any> {\n return this.transformResponse(\n await firstValueFrom(this.http.put(this.baseURL + url, body, this.addCredentials(options))),\n );\n }\n\n async delete(url: string, options: any = {}): Promise<any> {\n return this.transformResponse(\n await firstValueFrom(this.http.delete(this.baseURL + url, this.addCredentials(options))),\n );\n }\n\n upload(url: string, body: FormData, options: any = {}): Observable<HttpEvent<any>> {\n const req = new HttpRequest(\n 'POST',\n this.baseURL + url,\n body,\n {\n reportProgress: true,\n ...this.addCredentials(options)\n }\n );\n\n return this.http.request(req);\n }\n\n async search(params: any = {}) {\n return await this.get('/search', params);\n }\n\n async detail(params: any) {\n return await this.get(`/detail`, params);\n }\n\n async remove(params: any = {}) {\n return await this.delete(`/remove`, params);\n }\n\n async create(data: any) {\n return await this.post(`/create`, data);\n }\n\n async updateInfo(data: any, params?: any) {\n return await this.put(`/update-info`, data, { params: params });\n }\n\n async updateStatus(data: any, params?: any) {\n return await this.put(`/update-status`, data, { params: params });\n }\n\n async update(data: any, params?: any) {\n return await this.put(`/update`, data, { params: params });\n }\n\n async single(code: string) {\n return await this.post(`/${code}`, {});\n }\n\n async selectize() {\n return await this.post('/search', {});\n }\n\n async fetch(filter: any = {}, params: any = {}) {\n return await this.post('', filter, { params: params });\n }\n\n async published(idOrCode: string) {\n return await this.post(`/published/${idOrCode}`);\n }\n\n async unpublished(idOrCode: string) {\n return await this.post(`/unpublished/${idOrCode}`);\n }\n\n async terminated(idOrCode: string) {\n return await this.post(`/terminated/${idOrCode}`);\n }\n\n async disable(params: any) {\n return await this.post(`/disable`, params);\n }\n}\n","import { AfterViewInit, Directive, Injector, OnInit, Type, ViewChild } from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\nimport { BaseComponent } from './base.component';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport { FxToastrService } from '../services/toastr.service';\nimport { ChangeDetectorRef } from '@angular/core';\nimport _ from 'lodash';\nimport { FxUtils } from '../utils';\nimport { Subject, debounceTime, distinctUntilChanged, firstValueFrom } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface TableResult<T> {\n data: T[];\n total: number;\n}\n\n@Directive()\nexport class BaseTableComponent<T = any> extends BaseComponent implements OnInit, AfterViewInit {\n dataSource = new MatTableDataSource<T>();\n cols: string[] = [];\n total = 0;\n page = 0;\n pageSize = 10;\n filters: any = {};\n loading = false;\n expandedElement: any | null;\n toastr: FxToastrService;\n public _lock = false;\n keywordChange$ = new Subject<string>();\n dataSourcePlaceholder: any[];\n public config: {\n create?: {\n dialog?: Type<{}>;\n size?: string;\n disableClose?: boolean;\n label?: string;\n title?: string;\n message?: string;\n };\n update?: {\n dialog?: Type<{}>;\n size?: string;\n disableClose?: boolean;\n label?: string;\n title?: string;\n message?: string;\n };\n view?: {\n dialog?: Type<{}>;\n size?: string;\n disableClose?: boolean;\n label?: string;\n title?: string;\n message?: string;\n };\n delete?: {\n dialog?: Type<{}>;\n title?: string;\n message?: string;\n cancelTitle?: string;\n confirmTitle?: string;\n };\n updateStatus?: {\n message?: string;\n };\n };\n\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n @ViewChild(MatTable) table!: MatTable<T>;\n\n constructor(\n injector: Injector,\n public api: HttpWrapper,\n public modal: any,\n public ref: ChangeDetectorRef,\n ) {\n super(injector);\n this.toastr = injector.get(FxToastrService);\n }\n\n ngOnInit(): void {\n this.keywordChange$\n .pipe(debounceTime(300), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe(async () => {\n await this.refresh();\n });\n this.dataSourcePlaceholder = Array(this.pageSize).fill({});\n this.init();\n }\n\n public init() {}\n\n ngAfterViewInit(): void {\n if (this.paginator && this.paginator.page) {\n this.paginator.page.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.onPageChange(event);\n });\n }\n this.ref.detectChanges();\n }\n\n public async refresh(): Promise<void> {\n this.page = 0;\n if (this.paginator) {\n this.paginator.pageIndex = 0;\n }\n await this.fetch();\n }\n\n /**\n * Where the list is fetched from. Default (null) keeps the legacy behavior\n * of calling `api.search()` (GET /search) untouched. Subclasses whose list\n * lives elsewhere override this instead of re-implementing fetch() — and\n * keep the stale-response sequence guard for free.\n */\n protected listRequest(): { method: 'get' | 'post'; url: string } | null {\n return null;\n }\n\n /** Result keys the list/total are read from. Override alongside listRequest(). */\n protected listKey = 'data';\n protected totalKey = 'total';\n\n public setDataSource(result: any): void {\n this.dataSource.data = _.get(result, this.listKey);\n this.total = _.get(result, this.totalKey);\n }\n\n private _fetchSeq = 0;\n\n public async fetch(): Promise<void> {\n // Sequence guard: without it a slow earlier request could resolve after\n // a newer one and overwrite the table with stale data.\n const seq = ++this._fetchSeq;\n this.loading = true;\n try {\n const params = { page: (this.page ?? 0) + 1, pageSize: this.pageSize, ...this.filters };\n const req = this.listRequest();\n const result = req\n ? req.method === 'post'\n ? await this.api.post(req.url, params)\n : await this.api.get(req.url, params)\n : await this.api.search(params);\n if (seq !== this._fetchSeq) return;\n this.setDataSource(result);\n } catch (err: any) {\n if (seq !== this._fetchSeq) return;\n this.toastr.error(FxUtils.parseError(err));\n } finally {\n if (seq === this._fetchSeq) {\n this.loading = false;\n this.ref.detectChanges();\n }\n }\n }\n\n public async onPageChange(event: any) {\n this.page = event.pageIndex;\n this.pageSize = event.pageSize;\n await this.fetch();\n }\n\n public resolve() {\n return {};\n }\n\n public empty() {\n return {};\n }\n\n public onKeywordChange(keyword: string) {\n this.keywordChange$.next(keyword);\n }\n\n public async create() {\n const conf = _.get(this.config, 'create');\n const dialog = _.get(conf, 'dialog');\n const size = _.get(conf, 'size');\n if (_.isNil(conf) || _.isNil(dialog)) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n\n let panelClass = 'fx-dialog';\n if (size == '100%') {\n panelClass = 'fx-fullsize-dialog';\n }\n\n const instance = this.modal.open(dialog, {\n panelClass: panelClass,\n autoFocus: 'first-tabbable',\n width: size,\n disableClose: conf.disableClose ?? false,\n data: {\n method: 'create',\n data: this.empty(),\n title: conf.title,\n message: conf.message,\n resolve: this.resolve(),\n },\n });\n\n instance.afterClosed().subscribe((result: any) => {\n if (result) {\n this.refresh();\n }\n this._lock = false;\n });\n }\n\n public async update(model: any) {\n const conf = _.get(this.config, 'update');\n const dialog = _.get(conf, 'dialog');\n const size = _.get(conf, 'size');\n if (_.isNil(dialog) || _.isNil(conf)) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n let panelClass = 'fx-dialog';\n if (size == '100%') {\n panelClass = 'fx-fullsize-dialog';\n }\n\n const instance = this.modal.open(dialog, {\n panelClass: panelClass,\n autoFocus: 'first-tabbable',\n width: size,\n disableClose: conf.disableClose ?? false,\n data: {\n method: 'update',\n data: model,\n title: conf.title,\n message: conf.message,\n resolve: this.resolve(),\n },\n });\n\n instance.afterClosed().subscribe((result: any) => {\n if (result) {\n this.refresh();\n }\n this._lock = false;\n });\n }\n\n public async view(model: any) {\n const conf = _.get(this.config, 'view');\n const dialog = _.get(conf, 'dialog');\n const size = _.get(conf, 'size');\n if (_.isNil(dialog) || _.isNil(conf)) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n\n let panelClass = 'fx-dialog';\n if (size == '100%') {\n panelClass = 'fx-fullsize-dialog';\n }\n\n const instance = this.modal.open(dialog, {\n panelClass: panelClass,\n autoFocus: 'first-tabbable',\n width: size,\n disableClose: conf.disableClose ?? false,\n data: {\n data: model,\n title: conf.title,\n message: conf.message,\n resolve: this.resolve(),\n disabled: true,\n method: 'view',\n },\n });\n\n instance.afterClosed().subscribe(() => {\n this._lock = false;\n });\n }\n\n async delete(model: any) {\n const conf = _.get(this.config, 'delete');\n const dialog = _.get(conf, 'dialog');\n if (_.isNil(conf) || _.isNil(dialog)) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n\n try {\n const dialogRef = this.modal.open(dialog, {\n panelClass: 'fx-dialog',\n autoFocus: 'first-tabbable',\n width: '400px',\n data: {\n title: _.get(conf, 'title'),\n message: _.get(conf, 'message'),\n cancelLabel: _.get(conf, 'cancelTitle'),\n confirmLabel: _.get(conf, 'confirmTitle'),\n callback: async () => {\n await this.remove(model);\n },\n },\n });\n\n const state = await firstValueFrom(dialogRef.afterClosed());\n\n if (state) {\n try {\n await this.refresh();\n } catch (err: any) {\n this.toastr.error(FxUtils.parseError(err));\n }\n }\n } finally {\n this._lock = false;\n }\n }\n\n async remove(model: any) {\n try {\n return await this.api.remove({ ...model });\n } catch (err: any) {\n this.toastr.error(FxUtils.parseError(err));\n }\n }\n\n public tagClass(tag: string) {\n return FxUtils.getTagClass(tag, true);\n }\n\n public capitalize(label: string) {\n return _.capitalize(label);\n }\n\n public value(model: any, key: string, defaultValue: any = '---') {\n return _.get(model, key, defaultValue);\n }\n\n public toggleExpand(element: any): void {\n this.expandedElement = this.expandedElement === element ? null : element;\n }\n\n async updateStatus(params: any) {\n try {\n await this.api.updateStatus(params);\n this.toastr.success(_.get(this.config, 'updateStatus.message', 'Update Success'));\n } catch (err: any) {\n this.toastr.error(FxUtils.parseError(err));\n } finally {\n await this.refresh();\n }\n }\n}\n","import { ChangeDetectorRef, Directive, Injector } from '@angular/core';\nimport { BaseTableComponent } from './base-table.component';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport { FxUtils } from '../utils';\n\n/**\n * List + detail-pane counterpart of BaseTableComponent: the page keeps a\n * selectable row list on one side and a lazily fetched, per-id-cached detail\n * on the other. Pair it with `<fx-ui-master-detail>` which renders the\n * two-column shell from this state.\n *\n * Subclasses declare where ids and details come from:\n * protected override idKey = 'licenseId';\n * protected override detailUrl(id: string) { return `/license/${id}`; }\n * `detailUrl` returning null (the default) means the selected row itself is\n * the detail and no request is made.\n */\n@Directive()\nexport class BaseMasterDetailComponent<T = any> extends BaseTableComponent<T> {\n selectedId: string | null = null;\n selected: T | null = null;\n detailMap = new Map<string, any>();\n detailLoading = new Set<string>();\n\n // Explicit ctor: Ivy refuses to inherit a constructor whose `modal: any`\n // parameter is not DI-resolvable (NG2016).\n constructor(injector: Injector, api: HttpWrapper, modal: any, ref: ChangeDetectorRef) {\n super(injector, api, modal, ref);\n }\n\n /** Key the row id is read from. Override idOf() instead for composite ids. */\n protected idKey = 'id';\n\n public idOf(row: any): string | null {\n return this.value(row, this.idKey, null);\n }\n\n protected detailUrl(id: string): string | null {\n return null;\n }\n\n /** What the detail pane shows: the fetched detail when cached, else the row. */\n get detail(): any {\n return (this.selectedId != null && this.detailMap.get(this.selectedId)) || this.selected;\n }\n\n get detailBusy(): boolean {\n return this.selectedId != null && this.detailLoading.has(this.selectedId);\n }\n\n override setDataSource(result: any): void {\n super.setDataSource(result);\n this.autoSelectFirst();\n }\n\n /** Keep the previous selection when it survived the new page, else pick row 0. */\n autoSelectFirst(): void {\n const list = this.dataSource.data || [];\n if (!list.length) {\n this.selectedId = null;\n this.selected = null;\n return;\n }\n const still = list.find((row) => this.idOf(row) === this.selectedId);\n this.selectItem(still ?? list[0]);\n }\n\n selectItem(row: T): void {\n const id = this.idOf(row);\n this.selectedId = id;\n this.selected = row;\n if (id != null && !this.detailMap.has(id)) {\n this.fetchDetail(id);\n }\n }\n\n fetchDetail(id: string): void {\n const url = this.detailUrl(id);\n if (!url || this.detailLoading.has(id)) {\n return;\n }\n this.detailLoading.add(id);\n this.api\n .get(url)\n .then((res: any) => {\n // New Map identity so OnPush consumers of the pane see the change.\n this.detailMap = new Map(this.detailMap).set(id, res);\n })\n .catch((err: any) => {\n this.toastr.error(FxUtils.parseError(err));\n })\n .finally(() => {\n this.detailLoading.delete(id);\n this.ref.detectChanges();\n });\n }\n}\n","import { AfterViewInit, Directive, Inject, OnInit, ViewChild } from '@angular/core';\nimport { BaseComponent } from './base.component';\nimport { NgForm } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { FxToastrService } from '../services/toastr.service';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport _ from 'lodash';\nimport { FxUtils } from '../utils';\n\n@Directive()\nexport class BaseDialogComponent<T = any> extends BaseComponent implements AfterViewInit, OnInit {\n @ViewChild('f', { static: true }) ngForm: NgForm;\n public method: string;\n public title: string;\n public model: any;\n public disabled: boolean;\n public loading: boolean;\n public message: string;\n public resolve: any;\n formChangesSubscription: any;\n public onSubmit = true;\n\n constructor(\n public ref: MatDialogRef<any>,\n @Inject(MAT_DIALOG_DATA) public bindings: any,\n public toastr: FxToastrService,\n public api: HttpWrapper,\n public dialog: MatDialog,\n ) {\n super();\n // Deep clone: a shallow clone let dialog edits mutate nested fields of\n // the live table row even when the user cancelled.\n this.model = _.cloneDeep(_.get(bindings, 'data'));\n this.method = _.get(bindings, 'method');\n this.title = _.get(bindings, 'title');\n this.disabled = _.get(bindings, 'disabled');\n this.message = _.get(bindings, 'message');\n this.resolve = _.get(bindings, 'resolve');\n }\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method -- subclasses across host apps call super lifecycle methods; removing these breaks them at runtime\n ngAfterViewInit(): void {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method -- see ngAfterViewInit note\n ngOnInit(): void {}\n\n async accept(form: NgForm, params = null) {\n if (form.invalid) {\n FxUtils.checkInvalidField(form);\n return;\n }\n if (!this.disabled) {\n if (!this.validate()) return;\n if (this.method === 'create') {\n await this.create(params);\n return;\n } else {\n await this.update(params);\n return;\n }\n }\n\n this.cancel();\n }\n\n async create(params: any = null) {\n if (this.loading) {\n return;\n }\n this.loading = true;\n try {\n await this.api.create({ ...this.model, ...params });\n this.toastr.success(this.message);\n this.ref.close(true);\n } catch (error: any) {\n this.toastr.error(FxUtils.parseError(error));\n } finally {\n this.loading = false;\n }\n }\n\n async update(params: any = null) {\n if (this.loading) {\n return;\n }\n this.loading = true;\n try {\n await this.api.update({ ...this.model, ...params });\n this.toastr.success(this.message);\n this.ref.close(true);\n } catch (error: any) {\n this.toastr.error(FxUtils.parseError(error));\n } finally {\n this.loading = false;\n }\n }\n\n async updateInfo(params: any = null) {\n if (this.loading) {\n return;\n }\n this.loading = true;\n try {\n await this.api.updateInfo({ ...this.model, ...params });\n this.toastr.success(this.message);\n this.ref.close(true);\n } catch (error: any) {\n this.toastr.error(FxUtils.parseError(error));\n } finally {\n this.loading = false;\n }\n }\n\n cancel() {\n this.ref.close(false);\n }\n\n validate() {\n return true;\n }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FxLoadingService {\n public listener = new EventEmitter<boolean>();\n public listenerAction = new EventEmitter<boolean>();\n start() {\n this.listener.emit(true);\n }\n\n stop() {\n this.listener.emit(false);\n }\n startAction() {\n this.listenerAction.emit(true);\n }\n stopAction() {\n this.listenerAction.emit(false);\n }\n}\n","import { Injector } from '@angular/core';\nimport { FxLoadingService } from '../services/loading.service';\n\nexport class BaseResolver {\n constructor(public loadingService: FxLoadingService, public injector: Injector) {}\n\n baseResolverInit() {\n this.loadingService.start();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FxUtils } from '../utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FxStorageService {\n resolve(key: string, value?: any): any {\n if (FxUtils.isNotNull(value)) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n const loc = localStorage.getItem(key);\n return loc ? JSON.parse(loc) : undefined;\n }\n\n remove(key: string) {\n localStorage.removeItem(key);\n }\n}\n","import { Type, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport { FxLoadingService } from '../services/loading.service';\nimport { FxToastrService } from '../services/toastr.service';\nimport { FxStorageService } from '../services/storage.service';\nimport { FxUtils } from '../utils';\n\nexport interface FxListRequest {\n /** Defaults to 'get'. */\n method?: 'get' | 'post';\n url: string;\n /** Query params (get) — for post they are sent as the body unless `body` is set. */\n params?: any;\n body?: any;\n}\n\nexport interface FxListResolverContext {\n /** Page size remembered for this route url (FxStorageService convention), default 10. */\n pageSize: number;\n}\n\n/**\n * Functional replacement for the copy-pasted list-resolver class:\n * starts the loading overlay, runs one API request, and on failure stops the\n * overlay and shows a parsed error toast — the exact convention every\n * BaseResolver subclass hand-rolls today. BaseResolver stays for existing\n * classes; new routes should use this factory.\n *\n * Usage:\n * resolve: { histories: fxListResolver(ScanManagementApi, (route, state, ctx) =>\n * ({ url: `/${route.paramMap.get('id')}/history`, params: { page: 1, pageSize: ctx.pageSize } })) }\n */\nexport function fxListResolver<A extends HttpWrapper>(\n apiType: Type<A>,\n request: (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n ctx: FxListResolverContext,\n ) => FxListRequest,\n): ResolveFn<any> {\n return async (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const api = inject(apiType);\n const loading = inject(FxLoadingService);\n const toastr = inject(FxToastrService);\n const storage = inject(FxStorageService);\n try {\n loading.start();\n const ctx: FxListResolverContext = { pageSize: storage.resolve(state.url) || 10 };\n const req = request(route, state, ctx);\n if ((req.method ?? 'get') === 'post') {\n return await api.post(req.url, req.body ?? req.params ?? {});\n }\n return await api.get(req.url, req.params);\n } catch (err: any) {\n loading.stop();\n toastr.error(FxUtils.parseError(err), 'Error');\n return null;\n }\n };\n}\n","import { Provider, Type } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { HttpWrapper } from './http-wrapper.service';\n\nexport type FxApiClass = Type<HttpWrapper> & { provider: Provider };\n\n/**\n * Factory for the 11-line HttpWrapper subclasses copy-pasted per endpoint.\n * Returns a distinct injectable class per call (so constructor injection by\n * type keeps working) without needing a decorator:\n *\n * export const ScanManagementApi = createApi(() => `${environment.baseService}/scarf/scan`);\n * // module: providers: [ScanManagementApi.provider]\n * // usage: constructor(private api: InstanceType<typeof ScanManagementApi>)\n *\n * `baseURL` accepts a string or a lazy factory (for environment-derived URLs).\n * An optional `transform` plugs into HttpWrapper.transformResponse — e.g.\n * FxUtils.camelizeDeep for snake_case/Long-encoded backends.\n *\n * IMPORTANT — when subclassing (`@Injectable() class X extends createApi(...)`),\n * declare an explicit `constructor(http: HttpClient) { super(http); }`.\n * The generated base carries no Angular factory metadata, so an inherited\n * constructor makes Ivy fall back to `new X()` with NO arguments: the class\n * silently gets `http = undefined` and every call fails at runtime while the\n * build stays green.\n */\nexport function createApi(\n baseURL: string | (() => string),\n transform?: (res: any) => any,\n): FxApiClass {\n class GeneratedApi extends HttpWrapper {\n static provider: Provider = {\n provide: GeneratedApi,\n useFactory: (http: HttpClient) => new GeneratedApi(http),\n deps: [HttpClient],\n };\n\n constructor(http: HttpClient) {\n super(http, typeof baseURL === 'function' ? baseURL() : baseURL);\n }\n\n protected override transformResponse(res: any): any {\n return transform ? transform(res) : res;\n }\n }\n return GeneratedApi as FxApiClass;\n}\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subscription } from 'rxjs';\nimport { NotificationService } from './notification.service';\n\nexport interface RealtimeTableEvent<T> {\n /** Value the event is matched to a row with (via `matchKey`). */\n key: any;\n /** Fields to merge onto the matched row. */\n patch: Partial<T>;\n /** Marks a final state (e.g. COMPLETED) — forwarded to `onApplied`. */\n terminal?: boolean;\n}\n\nexport interface RealtimeTableSyncOptions<T> {\n /** Hub event name to subscribe to (via NotificationService.on$). */\n event: string;\n /** Parse the raw payload; return null to ignore the event. */\n parse: (raw: any) => RealtimeTableEvent<T> | null;\n /** Current table rows (live reference is fine). */\n getRows: () => T[];\n /** Replace table rows (callers usually also trigger change detection here). */\n setRows: (rows: T[]) => void;\n /** Key events match rows on (e.g. row.analyzeCode). */\n matchKey: (row: T) => any;\n /**\n * Stable identity used when merging a background re-fetch into the current\n * rows (existing row objects are patched in place so the table keeps their\n * identity — no flash).\n */\n identityKey: (row: T) => any;\n /** Background list re-fetch used to pick up rows that don't exist yet. */\n fetchList: () => Promise<{ rows: T[]; total?: number } | null>;\n /** Called after a patch lands on a row (change detection, terminal enrich…). */\n onApplied?: (row: T, event: RealtimeTableEvent<T>) => void;\n /** Called when a background re-fetch produced a new total. */\n onTotal?: (total: number) => void;\n /** Debounce for the background sync (default 1200ms). */\n debounceMs?: number;\n /** Consecutive no-op syncs before giving up on buffered keys (default 3). */\n idleCap?: number;\n}\n\n/**\n * Live-progress plumbing for server-paginated tables fed by hub events:\n * events matching a visible row are merged in place; events for rows that\n * are not in the list yet (a just-created record whose list read lags) are\n * buffered by key and replayed after a debounced, idle-capped background\n * re-fetch that merges by stable identity.\n *\n * The domain contract (event name, payload parsing, terminal semantics) is\n * injected via options — nothing app-specific lives here.\n */\nexport class RealtimeTableSync<T = any> {\n private pending = new Map<any, RealtimeTableEvent<T>>();\n private syncTimer: ReturnType<typeof setTimeout> | null = null;\n private idleSyncs = 0;\n private stopped = false;\n private subscription: Subscription | null = null;\n\n constructor(\n private notifications: NotificationService,\n private options: RealtimeTableSyncOptions<T>,\n ) {}\n\n /**\n * Subscribe to the hub event. Pass a DestroyRef to tie teardown to a\n * component lifecycle; stop() is still available for manual control.\n */\n start(destroyRef?: DestroyRef): this {\n const source = this.notifications.on$(this.options.event);\n const piped = destroyRef ? source.pipe(takeUntilDestroyed(destroyRef)) : source;\n this.stopped = false;\n this.subscription = piped.subscribe((raw: any) => this.handleEvent(raw));\n if (destroyRef) {\n destroyRef.onDestroy(() => this.stop());\n }\n return this;\n }\n\n stop(): void {\n this.stopped = true;\n this.subscription?.unsubscribe();\n this.subscription = null;\n if (this.syncTimer) {\n clearTimeout(this.syncTimer);\n this.syncTimer = null;\n }\n this.pending.clear();\n }\n\n /**\n * Replay buffered events onto the current rows (call from setDataSource so\n * a regular refresh also applies buffered progress). Returns true if\n * anything was applied.\n */\n applyPending(): boolean {\n if (!this.pending.size) return false;\n let changed = false;\n for (const row of this.options.getRows()) {\n const key = this.options.matchKey(row);\n const event = this.pending.get(key);\n if (!event) continue;\n Object.assign(row as any, event.patch);\n this.pending.delete(key);\n changed = true;\n this.options.onApplied?.(row, event);\n }\n if (changed) {\n this.options.setRows([...this.options.getRows()]);\n }\n return changed;\n }\n\n private handleEvent(raw: any): void {\n const event = this.options.parse(raw);\n if (!event) return;\n\n const row = this.options.getRows().find((r) => this.options.matchKey(r) === event.key);\n if (!row) {\n // Not in the list yet (e.g. just-created record whose list read lags):\n // keep only the latest state per key and schedule a background sync.\n this.pending.set(event.key, event);\n this.scheduleSync();\n return;\n }\n this.idleSyncs = 0;\n Object.assign(row as any, event.patch);\n this.options.setRows([...this.options.getRows()]);\n this.options.onApplied?.(row, event);\n }\n\n private scheduleSync(): void {\n const idleCap = this.options.idleCap ?? 3;\n if (this.syncTimer || this.stopped || this.idleSyncs >= idleCap) return;\n this.syncTimer = setTimeout(async () => {\n this.syncTimer = null;\n await this.syncFromServer();\n }, this.options.debounceMs ?? 1200);\n }\n\n private async syncFromServer(): Promise<void> {\n try {\n const result = await this.options.fetchList();\n if (this.stopped || !result) return;\n const existingByIdentity = new Map(\n this.options.getRows().map((r) => [this.options.identityKey(r), r]),\n );\n const merged = result.rows.map((item) => {\n const existing = existingByIdentity.get(this.options.identityKey(item));\n if (existing) {\n Object.assign(existing as any, item); // reuse the object → stable identity\n return existing;\n }\n return item;\n });\n this.options.setRows(merged);\n if (result.total !== undefined) {\n this.options.onTotal?.(result.total);\n }\n const applied = this.applyPending();\n this.idleSyncs = applied ? 0 : this.idleSyncs + 1;\n if (this.pending.size) {\n this.scheduleSync();\n }\n } catch {\n // Background sync is best-effort; the next event retries.\n this.idleSyncs += 1;\n }\n }\n}\n","import _ from 'lodash';\nimport { FxUtils } from './utils';\n\n/**\n * Shared value→colour rules for report/metric displays.\n *\n * Every metric that varies in meaning (severity, score, count…) gets ONE rule\n * so the colour is consistent everywhere and callers never hardcode a tone\n * for a value that can be good or bad. Domain-specific rules (EPSS, exploit\n * maturity, license categories…) stay in the consuming app — only the\n * mechanism and the org-wide rules live here.\n *\n * There is intentionally NO `default` text/bg colour in the theme, so rule\n * helpers return `null` for \"no meaningful value\" and the `toneText` /\n * `toneBg` / `toneBadge` wrappers fall back to a neutral class.\n *\n * Every emitted utility must appear below as a WHOLE literal string — the\n * Tailwind content scanner (v4 has no safelist) only sees complete class\n * names. Never rebuild these with string interpolation.\n */\nexport type Tone = 'critical' | 'danger' | 'warning' | 'success' | 'information';\n\nconst NEUTRAL_TEXT = 'text-text-secondary';\nconst NEUTRAL_BG = 'bg-bg-hover';\n\nconst TONE_TEXT: Record<Tone, string> = {\n critical: 'text-critical',\n danger: 'text-danger',\n warning: 'text-warning',\n success: 'text-success',\n information: 'text-information',\n};\n\nconst TONE_BG: Record<Tone, string> = {\n critical: 'bg-critical',\n danger: 'bg-danger',\n warning: 'bg-warning',\n success: 'bg-success',\n information: 'bg-information',\n};\n\nconst TONE_BADGE: Record<Tone, string> = {\n critical: 'bg-critical/10 text-critical',\n danger: 'bg-danger/10 text-danger',\n warning: 'bg-warning/10 text-warning',\n success: 'bg-success/10 text-success',\n information: 'bg-information/10 text-information',\n};\n\nfunction hasVal(v: any): boolean {\n if (_.isNil(v)) return false;\n const s = String(v).trim();\n return s !== '' && s !== '-' && s !== '--';\n}\n\n/** Severity / risk-level string → tone (Critical & High → danger, Medium → warning, Low → success). */\nexport function severityTone(value: any): Tone | null {\n if (!hasVal(value)) return null;\n const t = FxUtils.getTagClass(String(value), true);\n return t === 'default' || t === 'discovery' ? null : (t as Tone);\n}\n\n/**\n * CVSS-style 0–10 score → tone, following the CVSS v3 qualitative bands\n * (≥9 Critical, ≥7 High, ≥4 Medium, else Low). Backends occasionally send a\n * 0–100 scale, so values > 10 are normalised down by /10.\n */\nexport function scoreTone(score: any): Tone | null {\n let n = Number(score);\n if (!_.isFinite(n) || n <= 0) return null;\n if (n > 10) n = n / 10;\n if (n >= 9) return 'critical';\n if (n >= 7) return 'danger';\n if (n >= 4) return 'warning';\n return 'success';\n}\n\n/**\n * Count of \"bad\" things → tone: 0 is good (success), anything positive is bad.\n * `positiveTone` sets how severe a non-zero count reads (default `danger`;\n * pass `critical` for the worst metrics, `warning` for milder ones).\n * Non-numeric values (e.g. \"--\") return null → neutral.\n */\nexport function countTone(count: any, positiveTone: Tone = 'danger'): Tone | null {\n const n = Number(count);\n if (!_.isFinite(n)) return null;\n return n > 0 ? positiveTone : 'success';\n}\n\n/** Tone → text colour class, with a neutral fallback when there is no value. */\nexport function toneText(tone: Tone | null): string {\n return tone ? TONE_TEXT[tone] : NEUTRAL_TEXT;\n}\n\n/** Tone → background colour class, with a neutral fallback when there is no value. */\nexport function toneBg(tone: Tone | null): string {\n return tone ? TONE_BG[tone] : NEUTRAL_BG;\n}\n\n/** Tone → soft pill/badge classes (tinted bg + matching text), neutral fallback. */\nexport function toneBadge(tone: Tone | null): string {\n return tone ? TONE_BADGE[tone] : 'bg-bg-hover text-text-secondary';\n}\n\n/**\n * Tone → resolved CSS colour string for ECharts / canvas where a Tailwind\n * class can't be used (e.g. per-slice pie `itemStyle.color`). Emits the\n * legacy comma syntax — see FxUtils.convertColorFromVariable.\n */\nexport function toneColor(tone: Tone | null, alpha = 1): string {\n const name = tone ? `--${tone}` : '--text-secondary';\n return FxUtils.convertColorFromVariable(name, alpha, { legacyCommaSyntax: true });\n}\n","import { ValidationErrors } from '@angular/forms';\n\nexport class FxValidators {\n /**\n * Name fields: firstName, lastName, groupName, projectName, displayName\n * Allows: letters (Unicode), spaces, hyphens, apostrophes, periods\n */\n static validateName(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[\\p{L}\\s'\\-.]{1,100}$/u;\n return regex.test(value) ? null : { invalidName: 'Only letters, spaces, hyphens, apostrophes, and periods are allowed (max 100 characters)' };\n }\n\n /**\n * Description fields\n * Allows: letters, digits, spaces, basic punctuation\n */\n static validateDescription(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[\\p{L}\\d\\s.,;:!?'/()\"&\\-\\n\\r]{1,500}$/u;\n return regex.test(value) ? null : { invalidDescription: 'Contains disallowed characters (max 500 characters)' };\n }\n\n /**\n * Email fields\n */\n static validateEmail(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return regex.test(value) ? null : { invalidEmail: 'Please enter a valid email address' };\n }\n\n /**\n * Phone fields\n * Allows: digits, optional leading +, spaces, hyphens, parentheses (7-15 digits)\n */\n static validatePhone(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^\\+?[\\d\\s\\-()]{7,20}$/;\n const digitCount = value.replace(/\\D/g, '').length;\n if (!regex.test(value) || digitCount < 7 || digitCount > 15) {\n return { invalidPhone: 'Please enter a valid phone number' };\n }\n return null;\n }\n\n /**\n * Code/identifier fields: server code, template code, templateId\n * Allows: alphanumeric, hyphens, underscores\n */\n static validateCode(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[a-zA-Z0-9_-]{1,50}$/;\n return regex.test(value) ? null : { invalidCode: 'Only letters, numbers, hyphens, and underscores are allowed (max 50 characters)' };\n }\n\n /**\n * Domain fields\n * Standard domain pattern with optional port\n */\n static validateDomain(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}(:\\d{1,5})?$/;\n return regex.test(value) ? null : { invalidDomain: 'Please enter a valid domain (e.g., mail.example.com)' };\n }\n\n /**\n * Subject fields (email subject)\n * Allows: letters, digits, spaces, common punctuation, template placeholders {{}}\n */\n static validateSubject(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[\\p{L}\\d\\s.,;:!?'/()\"&\\-{}]{1,200}$/u;\n return regex.test(value) ? null : { invalidSubject: 'Contains disallowed characters (max 200 characters)' };\n }\n\n /**\n * Tag fields\n * Allows: alphanumeric, hyphens, underscores, dots, spaces\n */\n static validateTag(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[a-zA-Z0-9_\\-.\\s]{1,50}$/;\n return regex.test(value) ? null : { invalidTag: 'Only letters, numbers, hyphens, underscores, dots, and spaces are allowed' };\n }\n\n /**\n * URL fields: proxy, masterUrl\n * Standard URL pattern\n */\n static validateUrl(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^https?:\\/\\/[a-zA-Z0-9\\-._~:/?#[\\]@!$&'()*+,;=%]{1,2000}$/;\n return regex.test(value) ? null : { invalidUrl: 'Please enter a valid URL (http:// or https://)' };\n }\n\n /**\n * Numeric string fields: timeout, memoryLimit, cpuCores\n * Allows: digits, optional decimal point\n */\n static validateNumeric(value: string): ValidationErrors | null {\n if (!value || value.toString().trim() === '') return null;\n const regex = /^\\d+(\\.\\d+)?$/;\n return regex.test(value.toString()) ? null : { invalidNumeric: 'Please enter a valid number' };\n }\n\n /**\n * Version fields (semver-like)\n * Allows: digits, dots, hyphens, plus, letters\n */\n static validateVersion(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[a-zA-Z0-9.\\-+]{1,50}$/;\n return regex.test(value) ? null : { invalidVersion: 'Please enter a valid version (e.g., 1.0.0)' };\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateModule, TranslateLoader } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\n\nexport function HttpLoaderFactory(http: HttpClient) {\n return new TranslateHttpLoader(http, '/assets/i18n/', '.json');\n}\n\n@NgModule({\n imports: [TranslateModule],\n exports: [TranslateModule]\n})\nexport class TranslationModule {\n static forRoot(): ModuleWithProviders<TranslationModule> {\n return {\n ngModule: TranslationModule,\n providers: [\n {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n ]\n };\n }\n\n static forChild(): ModuleWithProviders<TranslationModule> {\n return {\n ngModule: TranslationModule,\n providers: []\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslationService {\n private currentLangSubject = new BehaviorSubject<string>('en');\n readonly currentLang$ = this.currentLangSubject.asObservable();\n\n constructor(\n private translate: TranslateService,\n private http: HttpClient\n ) {\n // Default fallback\n this.translate.addLangs(['en', 'vi']);\n this.translate.setDefaultLang('en');\n }\n\n init(lang: string) {\n this.setLanguage(lang);\n }\n\n currentLang(): string {\n return this.translate.currentLang || this.translate.defaultLang;\n }\n\n setLanguage(lang: string) {\n this.translate.use(lang);\n this.currentLangSubject.next(lang);\n }\n\n loadTranslations(lang: string, path: string) {\n const url = `${path}${lang}.json`;\n this.http.get(url).subscribe({\n next: (translations: any) => {\n this.translate.setTranslation(lang, translations, true);\n },\n error: (err) => {\n console.warn(`[TranslationService] Failed to load ${url}`, err);\n }\n });\n }\n\n onLanguageChange(callback: (lang: string) => void) {\n this.currentLang$.subscribe(callback);\n }\n}\n","import { Injectable } from '@angular/core';\nimport _ from 'lodash';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionService {\n private permissions: string[] = [];\n\n setPermissions(perms: string[]) {\n this.permissions = perms;\n }\n\n hasPermission(requiredPermissions: string[]): boolean {\n return _.some(requiredPermissions, permission => this.permissions.includes(permission));\n }\n\n getPermissions(): string[] {\n return [...this.permissions];\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { PermissionService } from '../services/permissions.service';\nimport _ from 'lodash';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector -- renaming is a breaking change for all host-app templates\n selector: '[hasPermission]'\n})\nexport class HasPermissionDirective {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainerRef: ViewContainerRef,\n private permissionService: PermissionService\n ) {}\n\n @Input() set hasPermission(required: string | string[]) {\n const requiredPermissions = _.isArray(required) ? required : [required];\n this.viewContainerRef.clear();\n if (this.permissionService.hasPermission(requiredPermissions)) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector -- renaming is a breaking change for all host-app templates\n selector: '[appTrimOnBlur]'\n})\nexport class TrimOnBlurDirective {\n @Input('appTrimOnBlurCollapse') collapseWhitespace = false;\n\n constructor(private el: ElementRef<HTMLInputElement>, private ngControl: NgControl) {}\n\n @HostListener('blur')\n onBlur(): void {\n const native = this.el.nativeElement;\n if (!native) return;\n\n let value: string = native.value ?? '';\n\n if (this.collapseWhitespace) {\n value = value.replace(/\\s+/g, ' ').trim();\n } else {\n value = value.trim();\n }\n\n if (native.value === value) return;\n\n native.value = value;\n\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValue(value);\n } else {\n const ev = new Event('input', { bubbles: true });\n native.dispatchEvent(ev);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate, Router } from '@angular/router';\nimport { PermissionService } from '../services/permissions.service';\nimport { FxUtils } from '../utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PermissionGuard implements CanActivate {\n constructor(private permissionService: PermissionService, private router: Router) {}\n\n canActivate(route: any): boolean {\n const requiredPermissions = route.data?.['permissions'] as string[] | undefined;\n\n if (!requiredPermissions || this.permissionService.hasPermission(requiredPermissions)) {\n return true;\n }\n\n this.router.navigate(['/unauthorized']);\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthStateService {\n private _isLoggedIn$ = new BehaviorSubject<boolean | null>(null);\n readonly isLoggedIn$ = this._isLoggedIn$.asObservable();\n readonly unauthorized$ = new Subject<void>();\n\n constructor() {}\n\n setLoggedIn(value: boolean): void {\n this._isLoggedIn$.next(value);\n }\n\n get isLoggedIn(): boolean {\n return this._isLoggedIn$.value === true;\n }\n\n handleUnauthorized(): void {\n this.setLoggedIn(false);\n this.unauthorized$.next();\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpEvent,\n HttpInterceptor,\n HttpHandler,\n HttpRequest,\n HttpErrorResponse,\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AuthStateService } from '../services/auth-state.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n private handlingUnauthorized = false;\n\n constructor(private authState: AuthStateService) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // Multi-tenant: all tenant domains hit one shared API endpoint, so the\n // backend can no longer resolve the tenant from the Host header. Send the\n // originating domain explicitly for tenant resolution.\n const cloned = req.clone({\n withCredentials: true,\n setHeaders: { 'X-Tenant-Domain': window.location.hostname },\n });\n\n return next.handle(cloned).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 401 && !this.handlingUnauthorized) {\n this.handlingUnauthorized = true;\n this.authState.handleUnauthorized();\n setTimeout(() => {\n this.handlingUnauthorized = false;\n }, 2000);\n }\n return throwError(() => error);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface Breadcrumb {\n label: string;\n url?: string;\n code?: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreadcrumbService {\n private breadcrumbs$ = new BehaviorSubject<Breadcrumb[]>([]);\n\n set(breadcrumbs: Breadcrumb[]) {\n this.breadcrumbs$.next(breadcrumbs);\n }\n\n get() {\n return this.breadcrumbs$.asObservable();\n }\n\n clear() {\n this.breadcrumbs$.next([]);\n }\n}\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class QuillStyleLoaderService {\n private loaded = false;\n private loadingPromise: Promise<void> | null = null;\n\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\n\n /**\n * Load Quill CSS (only in browser). Returns a promise that resolves when\n * the CSS links have been appended.\n */\n load(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n // Server: do nothing and resolve immediately.\n return Promise.resolve();\n }\n\n if (this.loaded) return Promise.resolve();\n if (this.loadingPromise) return this.loadingPromise;\n\n this.loadingPromise = new Promise<void>((resolve) => {\n const cssUrls = [\n // Using CDN is simplest — no consumer angular.json edits needed.\n 'https://cdn.jsdelivr.net/npm/quill/dist/quill.core.css',\n 'https://cdn.jsdelivr.net/npm/quill/dist/quill.snow.css'\n ];\n\n let remaining = cssUrls.length;\n\n const onLoad = () => {\n remaining -= 1;\n if (remaining === 0) {\n this.loaded = true;\n resolve();\n }\n };\n\n cssUrls.forEach((href) => {\n // Do not add duplicate links\n if (document.querySelector(`link[href=\"${href}\"]`)) {\n onLoad();\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.onload = () => onLoad();\n link.onerror = () => {\n // still count it as loaded to avoid hanging if CDN fails\n console.warn(`[QuillStyleLoader] failed to load: ${href}`);\n onLoad();\n };\n document.head.appendChild(link);\n });\n });\n\n return this.loadingPromise;\n }\n}\n","import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private renderer: Renderer2;\n private lightClass = 'light_theme';\n private theme$ = new BehaviorSubject<'light' | 'dark'>('light');\n themeStorageKey = 'host-theme';\n\n constructor(rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n const savedTheme = localStorage.getItem(this.themeStorageKey) as 'light' | 'dark' | null;\n\n if (savedTheme) {\n this.setLightMode(savedTheme === 'light');\n } else {\n this.setLightMode(true);\n }\n }\n\n setLightMode(enable: boolean) {\n if (enable) {\n this.renderer.addClass(document.body, this.lightClass);\n this.theme$.next('light');\n localStorage.setItem(this.themeStorageKey, 'light');\n } else {\n this.renderer.removeClass(document.body, this.lightClass);\n this.theme$.next('dark');\n localStorage.setItem(this.themeStorageKey, 'dark');\n }\n\n window.dispatchEvent(new CustomEvent('theme-changed', { detail: { dark: !enable } }));\n }\n\n toggleTheme() {\n const isLight = this.theme$.value === 'light';\n this.setLightMode(!isLight);\n }\n\n themeChanges() {\n return this.theme$.asObservable();\n }\n\n getCurrentTheme(): 'light' | 'dark' {\n return this.theme$.value;\n }\n\n isLight(): boolean {\n return this.theme$.value === 'light';\n }\n\n getLogoPath(): string {\n return 'assets/images/logo.png';\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\nimport { Observable } from 'rxjs';\n\nexport type NotificationCallback = (...args: any[]) => void;\n\nexport interface NotificationConnectOptions {\n headers?: any;\n accessTokenFactory?: () => string | Promise<string>;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationService {\n private hubConnection: signalR.HubConnection | null = null;\n private connectionStatus: 'disconnected' | 'connecting' | 'connected' = 'disconnected';\n\n /**\n * Single source of truth for subscriptions. The hub connection gets exactly\n * one dispatcher per event, so:\n * - off(event, callback) can remove one subscriber without nuking the rest\n * (hubConnection.off(event) removes every handler for the event);\n * - handlers registered before connect() are attached once connected;\n * - handlers survive a re-connect that builds a new HubConnection.\n */\n private handlers = new Map<string, Set<NotificationCallback>>();\n\n private connectPromise: Promise<void> | null = null;\n private lastHubUrl: string | null = null;\n private lastOptions?: NotificationConnectOptions;\n private manualDisconnect = false;\n private restartAttempts = 0;\n private restartTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Connect to SignalR Hub. Overlapping calls share the same in-flight\n * promise instead of building two competing connections.\n */\n async connect(hubUrl: string, options?: NotificationConnectOptions): Promise<void> {\n if (this.hubConnection && this.connectionStatus === 'connected') {\n return;\n }\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = this.doConnect(hubUrl, options).finally(() => {\n this.connectPromise = null;\n });\n return this.connectPromise;\n }\n\n private async doConnect(hubUrl: string, options?: NotificationConnectOptions): Promise<void> {\n try {\n this.connectionStatus = 'connecting';\n this.manualDisconnect = false;\n this.lastHubUrl = hubUrl;\n this.lastOptions = options;\n\n const connectionOptions: signalR.IHttpConnectionOptions = {\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n withCredentials: true, // Include cookies if any\n ...options\n };\n\n this.hubConnection = new signalR.HubConnectionBuilder()\n .withUrl(hubUrl, connectionOptions)\n .withAutomaticReconnect()\n .configureLogging(signalR.LogLevel.Information)\n .build();\n\n // A new HubConnection knows nothing about previous listeners:\n // re-attach one dispatcher per known event.\n for (const eventName of this.handlers.keys()) {\n this.attachDispatcher(eventName);\n }\n\n // Fires when the automatic-reconnect policy is exhausted (or the\n // server closes the socket). Restart with backoff unless the app\n // disconnected on purpose.\n this.hubConnection.onclose((error) => {\n this.connectionStatus = 'disconnected';\n if (error) {\n console.error('SignalR connection closed with error:', error);\n }\n if (!this.manualDisconnect) {\n this.scheduleRestart();\n }\n });\n\n this.hubConnection.onreconnecting(() => {\n this.connectionStatus = 'connecting';\n });\n\n this.hubConnection.onreconnected(() => {\n this.connectionStatus = 'connected';\n this.restartAttempts = 0;\n });\n\n await this.hubConnection.start();\n this.connectionStatus = 'connected';\n this.restartAttempts = 0;\n } catch (error) {\n this.connectionStatus = 'disconnected';\n console.error('Error connecting to SignalR hub:', error);\n throw error;\n }\n }\n\n private scheduleRestart(): void {\n if (this.restartTimer || !this.lastHubUrl) {\n return;\n }\n const delay = Math.min(30_000, 1_000 * 2 ** this.restartAttempts++);\n this.restartTimer = setTimeout(async () => {\n this.restartTimer = null;\n try {\n await this.connect(this.lastHubUrl!, this.lastOptions);\n } catch {\n this.scheduleRestart();\n }\n }, delay);\n }\n\n /**\n * Disconnect from SignalR Hub. Stops any pending auto-restart.\n */\n async disconnect(): Promise<void> {\n this.manualDisconnect = true;\n if (this.restartTimer) {\n clearTimeout(this.restartTimer);\n this.restartTimer = null;\n }\n if (this.hubConnection) {\n try {\n await this.hubConnection.stop();\n this.connectionStatus = 'disconnected';\n } catch (error) {\n console.error('Error disconnecting from SignalR hub:', error);\n }\n }\n }\n\n /**\n * Listen to a specific event from the server. Safe to call before\n * connect(): the handler is attached once the connection is up.\n */\n on(eventName: string, callback: NotificationCallback): void {\n let set = this.handlers.get(eventName);\n if (!set) {\n set = new Set<NotificationCallback>();\n this.handlers.set(eventName, set);\n this.attachDispatcher(eventName);\n }\n set.add(callback);\n }\n\n /**\n * Remove listener(s) for an event.\n * Prefer passing the callback (or using on$()): calling off(event) without\n * one removes EVERY handler for the event, including other features'.\n */\n off(eventName: string, callback?: NotificationCallback): void {\n const set = this.handlers.get(eventName);\n if (!set) {\n return;\n }\n if (callback) {\n set.delete(callback);\n } else {\n console.warn(\n `NotificationService.off('${eventName}') without a callback removes ALL handlers for this event. ` +\n 'Pass the callback registered with on(), or migrate to on$().'\n );\n set.clear();\n }\n if (set.size === 0) {\n this.handlers.delete(eventName);\n this.hubConnection?.off(eventName);\n }\n }\n\n /**\n * Observable stream of an event. Teardown removes exactly this\n * subscriber — the safe replacement for manual on()/off().\n * Emits the event's first argument (SignalR payloads are single-arg here).\n */\n on$<T = any>(eventName: string): Observable<T> {\n return new Observable<T>((subscriber) => {\n const callback: NotificationCallback = (payload: T) => subscriber.next(payload);\n this.on(eventName, callback);\n return () => this.off(eventName, callback);\n });\n }\n\n private attachDispatcher(eventName: string): void {\n if (!this.hubConnection) {\n return;\n }\n this.hubConnection.on(eventName, (...args: any[]) => this.dispatch(eventName, args));\n }\n\n private dispatch(eventName: string, args: any[]): void {\n const set = this.handlers.get(eventName);\n if (!set) {\n return;\n }\n // Copy: a callback may add/remove handlers while we iterate.\n for (const callback of [...set]) {\n try {\n callback(...args);\n } catch (error) {\n console.error(`Error in '${eventName}' notification handler:`, error);\n }\n }\n }\n\n /**\n * Invoke a method on the server\n * @param methodName - Name of the method to invoke\n * @param args - Arguments to pass to the method\n */\n async invoke(methodName: string, ...args: any[]): Promise<any> {\n if (!this.hubConnection || this.connectionStatus !== 'connected') {\n throw new Error('Not connected to SignalR hub');\n }\n\n try {\n return await this.hubConnection.invoke(methodName, ...args);\n } catch (error) {\n console.error(`Error invoking method ${methodName}:`, error);\n throw error;\n }\n }\n\n /**\n * Get current connection status\n */\n getConnectionStatus(): 'disconnected' | 'connecting' | 'connected' {\n return this.connectionStatus;\n }\n\n /**\n * Get connection ID\n */\n getConnectionId(): string | null {\n return this.hubConnection?.connectionId ?? null;\n }\n}\n","import { MatSelectModule } from '@angular/material/select';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatTimepickerModule } from '@angular/material/timepicker';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nexport const MATERIAL_MODULE = [\n MatSelectModule,\n MatRadioModule,\n MatButtonModule,\n MatIconModule,\n MatPaginatorModule,\n MatTableModule,\n MatSnackBarModule,\n MatDialogModule,\n MatCheckboxModule,\n MatCardModule,\n MatDatepickerModule,\n MatTimepickerModule,\n MatBadgeModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatMenuModule,\n MatTooltipModule,\n DragDropModule,\n];\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { T_OUTLINE_ICONS, T_SOLID_ICONS } from '@dimaslz/ng-heroicons';\n\n@Component({\n selector: 'fx-ui-button',\n standalone: false,\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss',\n})\nexport class ButtonComponent {\n @Input() label: string;\n @Input() disabled = false;\n @Input() buttonVariant: 'default' | 'primary' | 'success' | 'alternative' = 'alternative';\n @Input() icon?: any;\n @Input() class?: any;\n @Input() loading = false;\n /** Native button type. Defaults to 'button' so it never implicitly submits a form. */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n /** Accessible name for icon-only usage (icon set, no label). */\n @Input() ariaLabel = '';\n @Output() clicked = new EventEmitter<void>();\n\n onClick() {\n if (!this.disabled) this.clicked.emit();\n }\n}\n","<button\n [attr.type]=\"type\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-busy]=\"loading || null\"\n [class]=\"class\"\n [ngClass]=\"{\n 'btn-default': buttonVariant === 'default',\n 'btn-primary': buttonVariant === 'primary',\n 'btn-success': buttonVariant === 'success',\n 'btn-alternative': buttonVariant === 'alternative',\n }\"\n [disabled]=\"disabled || loading\"\n (click)=\"onClick()\"\n>\n @if (loading) {\n <div class=\"flex w-full items-center justify-center\" aria-hidden=\"true\">\n <svg\n [attr.fill]=\"\n buttonVariant !== 'alternative' ? 'rgb(var(--text-primary))' : 'rgb(var(--primary))'\n \"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"4\" cy=\"12\" r=\"0\">\n <animate\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_OLMs.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_UHR2.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_lo66\"\n begin=\"spinner_Aguh.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_z0Or\"\n begin=\"spinner_lo66.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n </circle>\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_OLMs.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_JsnR\"\n begin=\"spinner_UHR2.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_Aguh\"\n begin=\"spinner_JsnR.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_Aguh.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\">\n <animate\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_hSjk\"\n begin=\"spinner_OLMs.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_UHR2\"\n begin=\"spinner_hSjk.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_UHR2.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_Aguh.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\">\n <animate\n id=\"spinner_4v5M\"\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_OLMs\"\n begin=\"spinner_4v5M.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_OLMs.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_UHR2.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_Aguh.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n </circle>\n </svg>\n </div>\n } @else {\n <ng-container>\n <div class=\"flex items-center justify-center gap-small\">\n @if (icon) {\n <fx-ui-hero-icon\n [icon]=\"icon\"\n [size]=\"20\"\n class=\"flex\"\n [ngClass]=\"{\n 'text-text-inverse': buttonVariant === 'default',\n 'text-text-primary': buttonVariant === 'alternative',\n 'text-white': buttonVariant === 'primary' || buttonVariant === 'success',\n }\"\n ></fx-ui-hero-icon>\n }\n @if (label) {\n <div>{{ label }}</div>\n }\n </div>\n </ng-container>\n }\n</button>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { ECharts, EChartsOption } from 'echarts';\nimport { FxUtils } from '../../../core/utils';\n\n// 'line' and 'radar' were advertised here but have no builder in the\n// registry — they silently rendered an empty chart. Re-add when implemented.\nexport type IChartType = 'bar' | 'pie' | 'sunburst' | 'auto';\n\n@Component({\n selector: 'fx-ui-chart',\n templateUrl: './chart.component.html',\n styleUrl: './chart.component.scss',\n standalone: false,\n})\nexport class ChartComponent implements OnChanges, AfterViewInit, OnDestroy {\n /* ================= INPUTS ================= */\n\n @Input() type: IChartType = 'auto';\n @Input() data: any;\n @Input() options?: EChartsOption;\n @Input() palette?: string[];\n @Input() height = '400px';\n @Input() loading = false;\n\n // pie controls\n @Input() pieLegendAlign: string | number = '10%';\n @Input() pieLegendPosition: string | number = 'middle';\n @Input() showPieLabel = true;\n @Input() mobileWidth = 350;\n @Input() labelFontFamily = 'Roboto';\n @Input() emptyText = 'No data available';\n\n /* ================= OUTPUTS ================= */\n\n @Output() chartClick = new EventEmitter<any>();\n @Output() chartInit = new EventEmitter<ECharts>();\n\n /* ================= INTERNAL ================= */\n\n chartOptions: EChartsOption = {};\n isEmpty = false;\n labelFontSize = 12;\n\n private chartInstance?: ECharts;\n private resizeObserver?: ResizeObserver;\n private intersectionObserver?: IntersectionObserver;\n\n private canInit = false;\n private isMobile = false;\n private containerWidth = 0;\n\n constructor(\n private ref: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n ) {}\n\n /* ================= LIFECYCLE ================= */\n\n ngAfterViewInit(): void {\n // Only initialize when visible (tab-safe)\n this.intersectionObserver = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && !this.canInit) {\n this.canInit = true;\n this.updateResponsiveState();\n this.rebuildChart();\n this.cdr.detectChanges();\n }\n },\n { threshold: 0.1 },\n );\n\n this.intersectionObserver.observe(this.ref.nativeElement);\n\n // Resize-safe (tabs, flex, async layout)\n this.resizeObserver = new ResizeObserver(() => {\n if (!this.canInit) return;\n this.updateResponsiveState();\n this.forceMediaRecalc();\n });\n\n this.resizeObserver.observe(this.ref.nativeElement);\n }\n\n ngOnChanges(): void {\n if (this.canInit) {\n this.updateResponsiveState();\n this.rebuildChart();\n }\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.intersectionObserver?.disconnect();\n }\n\n @HostListener('window:theme-changed')\n onThemeChange(): void {\n if (!this.canInit) return;\n requestAnimationFrame(() => this.rebuildChart());\n }\n\n /* ================= EVENTS ================= */\n\n onChartClick(event: any) {\n this.chartClick.emit(event);\n }\n\n onChartInit(chart: any) {\n this.chartInstance = chart;\n this.chartInit.emit(chart);\n\n requestAnimationFrame(() => this.forceMediaRecalc());\n }\n\n /* ================= CORE FIX ================= */\n\n private updateResponsiveState() {\n const { width } = this.ref.nativeElement.getBoundingClientRect();\n if (width > 0) {\n this.containerWidth = width;\n this.isMobile = width < this.mobileWidth;\n }\n }\n\n private forceMediaRecalc(retry = 0) {\n if (!this.chartInstance) return;\n\n const { width, height } = this.ref.nativeElement.getBoundingClientRect();\n\n if ((width === 0 || height === 0) && retry < 10) {\n requestAnimationFrame(() => this.forceMediaRecalc(retry + 1));\n return;\n }\n\n this.rebuildChart();\n this.chartInstance.resize();\n }\n\n private rebuildChart(): void {\n this.isEmpty = this.checkEmpty();\n\n if (this.isEmpty) {\n if (this.chartInstance) {\n this.chartInstance.clear();\n }\n return;\n }\n\n this.chartOptions = this.buildOptions();\n\n if (this.chartInstance) {\n this.chartInstance.clear();\n this.chartInstance.setOption(this.chartOptions, true);\n }\n }\n\n private checkEmpty(): boolean {\n const type = this.detectType();\n\n if (type === 'bar') {\n const categories = this.data?.categories;\n const values = this.data?.values;\n return !categories?.length || !values?.length;\n }\n\n if (type === 'pie') {\n if (!Array.isArray(this.data) || this.data.length === 0) return true;\n const total = this.data.reduce((sum: number, d: any) => sum + (d.value || 0), 0);\n return total === 0;\n }\n\n return false;\n }\n\n /* ================= REGISTRY ================= */\n\n private registry: Record<string, (data: any, palette: string[]) => EChartsOption> = {\n bar: (data, colors) => ({\n color: colors,\n tooltip: { trigger: 'axis' },\n grid: { left: '5%', right: '5%', bottom: '10%', containLabel: true },\n xAxis: {\n type: 'category',\n data: data?.categories || [],\n axisLabel: {\n interval: 0,\n width: 80,\n overflow: 'truncate',\n ellipsis: '…',\n fontFamily: this.labelFontFamily,\n fontSize: this.labelFontSize,\n color: FxUtils.convertColorFromVariable('--text-secondary'),\n },\n axisLine: {\n lineStyle: {\n color: FxUtils.convertColorFromVariable('--border-strong'),\n },\n },\n },\n yAxis: {\n type: 'value',\n axisLabel: {\n fontFamily: this.labelFontFamily,\n fontSize: this.labelFontSize,\n color: FxUtils.convertColorFromVariable('--text-secondary'),\n },\n axisLine: {\n lineStyle: {\n color: FxUtils.convertColorFromVariable('--border-strong'),\n },\n },\n splitLine: {\n lineStyle: {\n color: FxUtils.convertColorFromVariable('--border-default'),\n },\n },\n },\n series: [\n {\n type: 'bar',\n data: data?.values || [],\n barMaxWidth: 70,\n itemStyle: {\n color: (p: any) => colors[p.dataIndex % colors.length],\n },\n label: {\n show: true,\n position: 'top',\n fontFamily: this.labelFontFamily,\n fontSize: this.labelFontSize,\n color: FxUtils.convertColorFromVariable('--text-primary'),\n },\n },\n ],\n }),\n\n pie: (data, colors) => {\n const total = data.reduce((sum: number, d: any) => sum + d.value, 0);\n const layout = this.calcPieLayout(data);\n\n return {\n color: colors,\n tooltip: { trigger: 'item' },\n\n legend: {\n type: 'scroll' as const,\n orient: layout.legendOrient,\n icon: 'circle',\n itemGap: 12,\n\n right: layout.legendRight,\n top: layout.legendTop,\n left: layout.legendLeft,\n bottom: layout.legendBottom,\n width: layout.legendWidth,\n\n formatter: (name: string) => {\n const item = data.find((d: any) => d.name === name);\n return item ? `${name}: ${item.value}` : name;\n },\n\n textStyle: {\n fontFamily: this.labelFontFamily,\n fontSize: 13,\n fontWeight: 500,\n color: FxUtils.convertColorFromVariable('--text-primary'),\n overflow: 'truncate',\n },\n },\n\n series: [\n {\n type: 'pie',\n radius: ['40%', '70%'],\n center: layout.pieCenter,\n data,\n\n label: {\n show: this.showPieLabel,\n position: 'outside',\n formatter: '{d}%',\n fontSize: this.labelFontSize,\n fontFamily: this.labelFontFamily,\n color: FxUtils.convertColorFromVariable('--text-primary'),\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n\n labelLine: {\n show: this.showPieLabel,\n length: 7,\n length2: 7,\n },\n },\n ],\n\n graphic: {\n type: 'group',\n left: layout.graphicLeft,\n top: layout.graphicTop,\n bounding: 'raw',\n children: [\n {\n type: 'text',\n style: {\n text: total.toString(),\n fontSize: 24,\n fontWeight: 600,\n fontFamily: this.labelFontFamily,\n fill: FxUtils.convertColorFromVariable('--text-primary'),\n align: 'center',\n verticalAlign: 'middle',\n },\n },\n ],\n },\n };\n },\n sunburst: (data, colors) => ({\n color: colors,\n series: [\n {\n type: 'sunburst',\n data,\n radius: ['15%', '90%'],\n itemStyle: {\n borderWidth: 1,\n borderColor: FxUtils.convertColorFromVariable('--border-default'),\n },\n label: {\n rotate: 'tangential',\n fontSize: this.labelFontSize,\n fontFamily: this.labelFontFamily,\n color: FxUtils.convertColorFromVariable('--text-primary'),\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n },\n ],\n }),\n };\n\n /* ================= PIE LAYOUT ================= */\n\n private calcPieLayout(data: any[]) {\n const cw = this.containerWidth || 400;\n\n if (this.isMobile) {\n return {\n legendOrient: 'horizontal' as const,\n legendLeft: 'center' as string | undefined,\n legendRight: undefined as string | undefined,\n legendTop: undefined as string | undefined,\n legendBottom: 0 as number | undefined,\n legendWidth: undefined as number | undefined,\n pieCenter: ['50%', '40%'],\n graphicLeft: '50%',\n graphicTop: '40%',\n };\n }\n\n // Estimate legend pixel width from longest formatted label\n const CHAR_WIDTH = 7.5; // approx px per char at fontSize 13\n const ICON_GAP = 30; // legend icon + padding\n const longestLabel = data.reduce((max: number, d: any) => {\n return Math.max(max, `${d.name}: ${d.value}`.length);\n }, 0);\n const rawLegendPx = longestLabel * CHAR_WIDTH + ICON_GAP;\n\n // Clamp: min 100px, max 45% of container\n const legendPx = Math.max(100, Math.min(rawLegendPx, cw * 0.45));\n const legendPct = (legendPx / cw) * 100;\n\n // Pie center: middle of the remaining space after legend\n const pieCenterX = Math.round((100 - legendPct) / 2);\n\n return {\n legendOrient: 'vertical' as const,\n legendLeft: undefined,\n legendRight: '2%',\n legendTop: 'middle' as string | undefined,\n legendBottom: undefined,\n legendWidth: Math.round(legendPx),\n pieCenter: [`${pieCenterX}%`, '50%'],\n graphicLeft: `${pieCenterX}%`,\n graphicTop: '50%',\n };\n }\n\n /* ================= BUILD ================= */\n\n private detectType(): string {\n if (this.type !== 'auto') return this.type;\n if (this.data?.children) return 'sunburst';\n if (this.data?.categories && this.data?.values) return 'bar';\n if (Array.isArray(this.data)) return 'pie';\n return 'bar';\n }\n\n private buildOptions(): EChartsOption {\n const type = this.detectType();\n const palette = this.resolvePalette();\n const base = this.registry[type]?.(this.data, palette) || {};\n\n return {\n ...base,\n ...this.options,\n };\n }\n\n private resolvePalette(): string[] {\n const defaults = [\n 'rgba(var(--success) / 1)',\n 'rgba(var(--information) / 1)',\n 'rgba(var(--critical) / 1)',\n 'rgba(var(--danger) / 1)',\n 'rgba(var(--warning) / 1)',\n 'rgba(var(--discovery) / 1)',\n ];\n\n const palette = this.palette?.length ? this.palette : defaults;\n\n return palette.map((raw) => {\n if (!raw.includes('var(')) return raw;\n\n const cssVar = raw.match(/var\\((.*?)\\)/)?.[1];\n const rgb = getComputedStyle(document.body)\n .getPropertyValue(cssVar || '')\n .trim()\n .replace(/\\s+/g, ',');\n return `rgba(${rgb},1)`;\n });\n }\n}\n","<div class=\"chart-wrapper\" [style.height]=\"height\">\n @if (isEmpty) {\n <div class=\"chart-empty\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"chart-empty-icon\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z\" />\n </svg>\n <span class=\"chart-empty-text\">{{ emptyText }}</span>\n </div>\n } @else {\n <div\n echarts\n [options]=\"chartOptions\"\n [loading]=\"loading\"\n (chartInit)=\"onChartInit($event)\"\n (chartClick)=\"onChartClick($event)\"\n class=\"fx-chart\"\n [style.height]=\"height\"\n ></div>\n }\n</div>\n","import { Directive, Input, inject } from '@angular/core';\nimport { ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\nimport { FxUtils } from '../../core/utils';\n\nexport type ErrorMessages = Record<string, any>;\n\n@Directive()\nexport abstract class FxComponent<T> implements ControlValueAccessor {\n /**\n * Injected via inject() rather than a constructor parameter: parameter\n * decorators (@Optional/@Self) are NOT inherited by subclasses, which used\n * to make every control crash when used without a form binding, or silently\n * bind to an ancestor's NgControl.\n */\n public ngControl = inject(NgControl, { optional: true, self: true });\n\n @Input() disabled = false;\n\n value: T;\n public onChange: (value: T) => void = () => undefined;\n public onTouched: () => void = () => undefined;\n\n validationError?: ErrorMessages;\n errorMessages?: ErrorMessages;\n\n constructor() {\n if (this.ngControl) this.ngControl.valueAccessor = this;\n }\n\n setValue(value: T) {\n if (this.onChange) {\n this.onChange(value);\n }\n }\n\n onEnter(value: T) {\n if (this.onChange) {\n this.onChange(value);\n }\n }\n\n writeValue(value: T): void {\n // Pass through as-is. Coercing null to '' here broke boolean/number\n // controls; string controls that want '' as their empty value override.\n this.value = value;\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n get invalid(): boolean {\n return !!(this.ngControl?.invalid && this.ngControl?.touched);\n }\n\n get errors(): Record<string, any> {\n return this.ngControl?.errors || {};\n }\n\n validate(validateFn?: (value: T) => ValidationErrors | null | undefined): void {\n if (this.invalid) return;\n if (validateFn) {\n const error = validateFn(this.value);\n if (FxUtils.isNotNull(error)) {\n this.setErrors(error ?? {});\n }\n }\n }\n\n public setErrors(error: ValidationErrors) {\n this.validationError = error;\n const control = this.ngControl?.control;\n if (!control) return;\n control.setErrors({ ...control.errors, ...error });\n }\n\n /**\n * Removes only the errors this component set imperatively via setErrors().\n * Errors owned by the validator pipeline (built-in or custom validators)\n * are left untouched.\n */\n public clearErrors() {\n const control = this.ngControl?.control;\n if (!control || !this.validationError) return;\n const remaining = { ...(control.errors || {}) };\n for (const key of Object.keys(this.validationError)) {\n delete remaining[key];\n }\n this.validationError = undefined;\n control.setErrors(Object.keys(remaining).length ? remaining : null);\n }\n\n getErrorMessage(label?: string): string | null {\n if (!this.errors) return null;\n const displayLabel = FxUtils.isStringEmpty(label ?? '') ? 'This field' : label;\n const defaultMessages: ErrorMessages = {\n required: `${displayLabel} is required`,\n minlength: `${displayLabel} minimum length is ${this.errors['minlength']?.requiredLength}`,\n email: 'Please enter a valid email',\n };\n const messages = { ...defaultMessages, ...this.validationError, ...this.errorMessages };\n const firstKey = Object.keys(this.errors)[0];\n return messages[firstKey] || `Invalid ${label ?? 'value'}`;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\n\n@Component({\n selector: 'fx-ui-checkbox',\n standalone: false,\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss',\n})\nexport class CheckboxComponent extends FxComponent<any> implements AfterViewInit {\n @Input() label = '';\n @Input() rounded: boolean;\n @Output() valueChange = new EventEmitter<boolean>();\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n override writeValue(value: any): void {\n this.value = value ?? false;\n }\n\n onInputChange(event: Event) {\n const checked = (event.target as HTMLInputElement).checked;\n this.value = checked;\n this.onChange(checked);\n this.valueChange.emit(checked);\n }\n\n markTouched() {\n this.onTouched();\n }\n}\n","<label\n class=\"flex items-center gap-normal cursor-pointer select-none\"\n [class.opacity-50]=\"disabled\"\n [class.cursor-not-allowed]=\"disabled\"\n>\n <!-- sr-only (not `hidden`): keeps the input focusable and in the a11y tree -->\n <input\n type=\"checkbox\"\n class=\"peer sr-only\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onTouched()\"\n />\n <span\n class=\"relative w-4 h-4 border rounded-full transition-colors duration-150 shrink-0 peer-focus-visible:ring-2 peer-focus-visible:ring-primary/50\"\n [ngClass]=\"{\n 'rounded-full': rounded,\n 'rounded-sm': !rounded,\n 'border-border-strong bg-transparent': !value,\n 'border-transparent bg-gradient-primary': value,\n }\"\n >\n <!-- Keep SVG space reserved always -->\n <span class=\"absolute inset-0 flex items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"text-white w-4 h-4 transition-opacity duration-150\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [style.opacity]=\"value ? 1 : 0\"\n >\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n </span>\n </span>\n\n @if (label) {\n <span class=\"mb-0 txt-field-label\">{{ label }}</span>\n }\n</label>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-circle-progress-bar',\n standalone: false,\n templateUrl: './circle-progress-bar.component.html',\n styleUrl: './circle-progress-bar.component.scss'\n})\nexport class CircleProgressBar {\n @Input() percent = 0;\n @Input() showPercent = false;\n\n readonly radius = 35;\n readonly stroke = 10;\n readonly normalizedRadius = this.radius - this.stroke / 2;\n readonly circumference = 2 * Math.PI * this.normalizedRadius;\n\n get dashOffset(): number {\n const clamped = Math.max(0, Math.min(100, this.percent));\n return this.circumference - (clamped / 100) * this.circumference;\n }\n\n get ariaLabel(): string {\n return `${Math.round(this.percent)}%`;\n }\n}\n","<div class=\"flex items-center justify-center w-full h-full\">\n <svg\n class=\"transform -rotate-90 block\"\n [attr.viewBox]=\"'0 0 ' + radius * 2 + ' ' + radius * 2\"\n width=\"100%\"\n height=\"100%\"\n >\n <circle\n class=\"opacity-20\"\n [attr.cx]=\"radius\"\n [attr.cy]=\"radius\"\n [attr.r]=\"normalizedRadius\"\n [attr.stroke-width]=\"stroke\"\n fill=\"transparent\"\n stroke=\"currentColor\"\n ></circle>\n\n <circle\n class=\"stroke-current\"\n [attr.cx]=\"radius\"\n [attr.cy]=\"radius\"\n [attr.r]=\"normalizedRadius\"\n [attr.stroke-width]=\"stroke\"\n fill=\"transparent\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"dashOffset\"\n style=\"transition: stroke-dashoffset 300ms linear\"\n ></circle>\n\n @if(showPercent){\n <text\n [attr.x]=\"radius\"\n [attr.y]=\"radius\"\n dominant-baseline=\"central\"\n text-anchor=\"middle\"\n class=\"text-xs font-medium\"\n fill=\"currentColor\"\n >\n {{ percent }}%\n </text>\n }\n </svg>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n} from '@angular/core';\nimport { ErrorMessages, FxComponent } from '../fx-component.component';\nimport { ValidationErrors } from '@angular/forms';\n\nlet nextPickerId = 0;\n\n@Component({\n selector: 'fx-ui-datetime-picker',\n standalone: false,\n templateUrl: './datetime-picker.component.html',\n styleUrl: './datetime-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatetimePicker extends FxComponent<any> implements AfterViewInit {\n @Input() label?: string;\n @Input() placeholder = 'Select date and time';\n @Input() required = false;\n @Input() type: any = 'both';\n @Input() minDate?: any;\n @Input() maxDate?: any;\n @Input() override errorMessages: ErrorMessages = {};\n @Input() validateFn: (date: string) => ValidationErrors | null;\n\n readonly fieldId = `fx-datetime-${nextPickerId++}`;\n startAt: any;\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.ref.detectChanges();\n });\n }\n\n onBlur() {\n this.onTouched();\n this.validate(this.validateFn);\n }\n\n override writeValue(value: any): void {\n this.value = value ?? '';\n this.startAt = value ?? '';\n this.ref.markForCheck();\n }\n\n onValueChange(date: any): void {\n if (this.disabled) return;\n this.value = date;\n this.onChange(date);\n this.onTouched();\n }\n}\n","<div class=\"flex flex-col mb-4 w-full text-left\">\n @if (label) {\n <label class=\"txt-field-label\" [attr.for]=\"fieldId\">\n {{ label }}\n <span *ngIf=\"required\" class=\"txt-required\" aria-hidden=\"true\">*</span>\n </label>\n }\n\n <div class=\"relative\">\n <input\n [id]=\"fieldId\"\n [owlDateTimeTrigger]=\"picker\"\n [owlDateTime]=\"picker\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n (blur)=\"onBlur()\"\n [value]=\"value\"\n readonly\n class=\"input-default pr-9\"\n />\n <span\n [owlDateTimeTrigger]=\"picker\"\n class=\"absolute inset-y-0 right-0 flex items-center pr-2.5 cursor-pointer text-text-placeholder hover:text-text-primary transition-colors\"\n >\n <fx-ui-hero-icon icon=\"calendar\" [size]=\"20\" class=\"text-text-primary\"></fx-ui-hero-icon>\n </span>\n </div>\n <owl-date-time\n #picker\n [startAt]=\"startAt\"\n [pickerType]=\"type\"\n (afterPickerClosed)=\"onValueChange($event)\"\n ></owl-date-time>\n <div *ngIf=\"invalid\" class=\"txt-invalid\">{{ getErrorMessage(label) }}</div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface UploadResult {\n files: File[];\n accepted: File[];\n rejected: { file: File; reason: string }[];\n}\n\n@Component({\n selector: 'fx-ui-dnd-upload',\n standalone: false,\n templateUrl: './dnd-upload.component.html',\n styleUrl: './dnd-upload.component.scss',\n})\nexport class DndUploadComponent {\n @Input() multiple = false;\n @Input() accept = '';\n @Input() maxSizeMB = 10;\n @Input() strictSize = true;\n /** Icon name from heroicons (outline). Default: 'arrow-up-tray' */\n @Input() icon = 'arrow-up-tray';\n /** CSS color value for accent (border, icon, link). Default uses --gradient-primary-start */\n @Input() accentColor = '';\n\n @Output() fileDrop = new EventEmitter<File[]>();\n @Output() fileClick = new EventEmitter<void>();\n @Output() uploadComplete = new EventEmitter<File[]>();\n @Output() uploadError = new EventEmitter<{ file: File; reason: string }>();\n\n isDragOver = false;\n private isOpening = false;\n\n get accentStyle(): Record<string, string> {\n if (!this.accentColor) return {};\n return { '--dnd-accent': this.accentColor } as Record<string, string>;\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n this.isDragOver = false;\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.isDragOver = false;\n\n if (!event.dataTransfer?.files?.length) return;\n const files = Array.from(event.dataTransfer.files);\n this.processFiles(files);\n }\n\n onAreaClick(inputEl: HTMLInputElement | null, event?: Event) {\n if (this.isOpening) return;\n this.isOpening = true;\n\n this.fileClick.emit();\n (event?.currentTarget as HTMLElement)?.blur?.();\n\n setTimeout(() => {\n inputEl?.click();\n this.isOpening = false;\n }, 0);\n }\n\n onFileSelected(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) return;\n const files = Array.from(input.files);\n this.processFiles(files);\n input.value = '';\n }\n\n private processFiles(files: File[]) {\n const valid: File[] = [];\n\n const acceptedTypes = this.accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter((t) => t);\n\n for (const file of files) {\n const sizeMB = file.size / 1024 / 1024;\n if (this.strictSize && sizeMB > this.maxSizeMB) {\n this.uploadError.emit({\n file,\n reason: `File too large: ${sizeMB.toFixed(2)} MB > ${this.maxSizeMB} MB`,\n });\n continue;\n }\n if (acceptedTypes.length && !this.isAccepted(file, acceptedTypes)) {\n this.uploadError.emit({\n file,\n reason: `File type not allowed: \"${file.name}\"`,\n });\n continue;\n }\n valid.push(file);\n }\n if (valid.length) {\n this.fileDrop.emit(valid);\n this.onUpload(valid);\n }\n }\n\n private onUpload(files: File[]) {\n this.uploadComplete.emit(files);\n }\n\n private isAccepted(file: File, accepted: string[]): boolean {\n const fileType = file.type.toLowerCase();\n const fileExt = '.' + file.name.split('.').pop()!.toLowerCase();\n\n return accepted.some((a) => {\n if (a.startsWith('.')) {\n return a === fileExt;\n }\n if (a.endsWith('/*')) {\n return fileType.startsWith(a.replace('/*', ''));\n }\n return a === fileType;\n });\n }\n}\n","<div\n class=\"dnd-wrapper\"\n [ngStyle]=\"accentStyle\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <div\n role=\"button\"\n tabindex=\"0\"\n class=\"dnd-area\"\n [class.drag-over]=\"isDragOver\"\n (click)=\"onAreaClick(fileInput, $event)\"\n (keydown.enter)=\"onAreaClick(fileInput, $event)\"\n >\n <fx-ui-hero-icon\n [icon]=\"icon\"\n [size]=\"40\"\n class=\"flex dnd-icon\"\n ></fx-ui-hero-icon>\n <div class=\"dnd-text\">\n <span class=\"dnd-link\">Click to upload</span>\n <span class=\"dnd-or\">or drag and drop</span>\n </div>\n <div class=\"dnd-hint\">\n @if (accept) {\n Accepted: {{ accept }}\n } @else {\n Any file type\n }\n — Max {{ maxSizeMB }} MB\n </div>\n\n <input\n #fileInput\n type=\"file\"\n class=\"dnd-input\"\n [attr.multiple]=\"multiple ? '' : null\"\n [attr.accept]=\"accept\"\n (change)=\"onFileSelected($event)\"\n />\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Node, Edge, Vflow, Connection } from 'ngx-vflow';\n\n@Component({\n selector: 'fx-ui-flow-connection',\n standalone: false,\n templateUrl: './flow-connection.component.html',\n styleUrl: './flow-connection.component.scss',\n})\nexport class FlowConnection {\n @Input() nodes: Node[] = [];\n @Input() edges: Edge[] = [];\n @Input() backgroundColor: any = '--bg-hover-primary'\n @Input() view: any = ['100%', '400px'];\n\n handleConnection(connection: Connection) {\n this.edges = [\n ...this.edges,\n {\n id: `${connection.source} -> ${connection.target}`,\n ...connection,\n },\n ];\n }\n}\n","<vflow\n [background]=\"{\n type: 'solid',\n color: `rgba(var(${backgroundColor})`\n}\"\n [nodes]=\"nodes\"\n [edges]=\"edges\"\n (onConnect)=\"handleConnection($event)\"\n [view]=\"view\"\n/>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { FxComponent } from '../fx-component.component';\n\nlet nextInputId = 0;\n\n@Component({\n selector: 'fx-ui-input',\n standalone: false,\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.css'],\n})\nexport class InputComponent extends FxComponent<string> implements AfterViewInit {\n @Input() label = '';\n @Input() tooltip = '';\n @Input() type = 'text';\n @Input() placeholder = '';\n @Input() override errorMessages: Record<string, string> = {};\n @Input() required: string | boolean = false;\n @Input() suffixIcon?: string;\n @Input() class?: any;\n @Input() maxlength?: number;\n @Input() validateFn?: (value: string) => ValidationErrors | null;\n @Output() blurred = new EventEmitter<void>();\n @Output() focused = new EventEmitter<void>();\n @Output() suffixClick = new EventEmitter<void>();\n /** Accessible name for the suffix icon button (it renders no text). */\n @Input() suffixAriaLabel = '';\n\n readonly fieldId = `fx-input-${nextInputId++}`;\n showPassword = false;\n validateError: ValidationErrors | null = null;\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n override writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n let newValue = input.value;\n\n if (this.maxlength && newValue.length > this.maxlength) {\n newValue = newValue.slice(0, this.maxlength);\n input.value = newValue;\n }\n\n this.value = newValue;\n this.onChange(this.value);\n }\n\n onFocus() {\n this.clearErrors();\n this.focused.emit();\n }\n\n onBlur() {\n this.onTouched();\n this.blurred.emit();\n if (this.validateFn) {\n this.validateError = this.validateFn(this.value);\n this.validate(this.validateFn);\n }\n }\n\n togglePassword(): void {\n this.showPassword = !this.showPassword;\n }\n\n onSuffixClick(): void {\n if (this.type === 'password') {\n this.togglePassword();\n } else {\n this.suffixClick.emit();\n }\n }\n\n get displayType(): string {\n if (this.type === 'password' && this.showPassword) return 'text';\n if (this.type === 'otp') return 'number';\n return this.type;\n }\n}\n","<div class=\"mb-4 text-left w-full text-text-primary\" [class]=\"class\">\n @if (label) {\n <label class=\"block txt-field-label\" [attr.for]=\"fieldId\">\n {{ label }}\n @if (required) {\n <span class=\"txt-required\" aria-hidden=\"true\">*</span>\n }\n @if (tooltip) {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [size]=\"16\"\n class=\"inline-block align-middle ml-0.5 text-text-secondary cursor-help relative -top-px\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n ></fx-ui-hero-icon>\n }\n </label>\n }\n\n <div class=\"relative\">\n <input\n appTrimOnBlur\n [appTrimOnBlurCollapse]=\"true\"\n [id]=\"fieldId\"\n [type]=\"displayType\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.maxlength]=\"maxlength\"\n [attr.aria-invalid]=\"invalid || null\"\n [attr.aria-describedby]=\"invalid ? fieldId + '-error' : null\"\n [attr.aria-required]=\"required ? true : null\"\n [class]=\"type === 'otp' ? 'input-otp' : 'input-default'\"\n [class.input-invalid]=\"invalid\"\n [class.pr-8]=\"type === 'password' || suffixIcon\"\n [class.txt-otp-input]=\"type === 'otp'\"\n />\n @if (type === 'password' || suffixIcon) {\n <button\n type=\"button\"\n class=\"absolute inset-y-0 right-2 flex items-center text-text-primary hover:text-text-secondary\"\n (click)=\"onSuffixClick()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n type === 'password'\n ? (showPassword ? 'Hide password' : 'Show password')\n : (suffixAriaLabel || null)\n \"\n [attr.aria-pressed]=\"type === 'password' ? showPassword : null\"\n >\n @if (type === 'password') {\n <fx-ui-hero-icon\n [icon]=\"showPassword ? 'eye-slash' : 'eye'\"\n [size]=\"18\"\n class=\"text-text-primary\"\n aria-hidden=\"true\"\n ></fx-ui-hero-icon>\n } @else if (suffixIcon) {\n <fx-ui-hero-icon\n [icon]=\"suffixIcon\"\n [size]=\"18\"\n class=\"text-text-primary\"\n aria-hidden=\"true\"\n ></fx-ui-hero-icon>\n }\n </button>\n }\n </div>\n\n @if (invalid) {\n <div class=\"txt-invalid\" role=\"alert\" [id]=\"fieldId + '-error'\">\n {{ getErrorMessage(label) }}\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-loading-panel',\n standalone: false,\n templateUrl: './loading-panel.component.html',\n styleUrl: './loading-panel.component.scss'\n})\nexport class LoadingPanel {\n @Input() show = false;\n @Input() message?: string = \"Loading\";\n}\n","<!-- Full-screen glass overlay -->\n<div\n *ngIf=\"show\"\n class=\"fixed inset-0 z-50 flex items-center justify-center\"\n aria-hidden=\"false\"\n role=\"alert\"\n aria-busy=\"true\"\n>\n <div class=\"absolute inset-0 bg-bg-primary/30 backdrop-blur-xl\" aria-hidden=\"true\"></div>\n\n <div\n class=\"relative z-10 flex flex-col items-center gap-4 p-6 rounded-2xl shadow-xl bg-bg-primary/70 border border-border-strong backdrop-bg-primary/70\"\n style=\"min-width: 220px; max-width: 90%\"\n >\n <svg fill=\"url(#spinner-gradient)\" width=\"50\" height=\"50\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient id=\"spinner-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" style=\"stop-color: rgb(var(--gradient-primary-start)); stop-opacity: 1\" />\n <stop offset=\"100%\" style=\"stop-color: rgb(var(--gradient-primary-end)); stop-opacity: 1\" />\n </linearGradient>\n </defs>\n <circle cx=\"4\" cy=\"12\" r=\"0\">\n <animate begin=\"0;spinner_z0Or.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n <animate begin=\"spinner_OLMs.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n <animate begin=\"spinner_UHR2.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n <animate id=\"spinner_lo66\" begin=\"spinner_Aguh.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_z0Or\" begin=\"spinner_lo66.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n </circle>\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate begin=\"0;spinner_z0Or.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n <animate begin=\"spinner_OLMs.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n <animate id=\"spinner_JsnR\" begin=\"spinner_UHR2.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_Aguh\" begin=\"spinner_JsnR.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n <animate begin=\"spinner_Aguh.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\">\n <animate begin=\"0;spinner_z0Or.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n <animate id=\"spinner_hSjk\" begin=\"spinner_OLMs.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_UHR2\" begin=\"spinner_hSjk.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n <animate begin=\"spinner_UHR2.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n <animate begin=\"spinner_Aguh.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\">\n <animate id=\"spinner_4v5M\" begin=\"0;spinner_z0Or.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_OLMs\" begin=\"spinner_4v5M.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n <animate begin=\"spinner_OLMs.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n <animate begin=\"spinner_UHR2.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n <animate begin=\"spinner_Aguh.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n </circle>\n </svg>\n \n\n <div *ngIf=\"message\" class=\"text-sm text-text-primary text-center\">\n {{ message }}\n </div>\n </div>\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, Input } from '@angular/core';\nimport { ErrorMessages, FxComponent } from '../fx-component.component';\n\nlet nextToggleGroupId = 0;\n\n@Component({\n selector: 'fx-ui-radio-toggle, [fx-ui-radio-toggle]',\n standalone: false,\n templateUrl: './radio-button-toggle.component.html',\n styleUrl: './radio-button-toggle.component.scss',\n})\nexport class RadioButtonToggleComponent extends FxComponent<any> implements AfterViewInit {\n readonly groupId = `fx-radio-toggle-${nextToggleGroupId++}`;\n @Input() label?: string;\n @Input() required?: boolean = false;\n @Input() options: { label: string; value: any; icon?: any }[] = [];\n @Input() override errorMessages: ErrorMessages = {};\n @Input() class?: any\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n onSelectValue(value: any): void {\n if (this.disabled) return;\n this.value = value;\n this.onChange(value);\n this.onTouched();\n }\n}\n","<div class=\"flex flex-col text-left mb-4 w-full\" [class]=\"class\">\n <!-- A radiogroup has no single control a <label> could point at — name it via aria-labelledby. -->\n @if(label){<span class=\"txt-field-label\" [id]=\"groupId + '-label'\">\n {{ label }}\n @if(required) {<span class=\"txt-required\" aria-hidden=\"true\">*</span>} </span\n >}\n\n <div\n class=\"inline-flex w-full rounded-lg overflow-hidden\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"label ? groupId + '-label' : null\"\n >\n @for(opt of options; track opt){<button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"value === opt.value\"\n (click)=\"onSelectValue(opt.value)\"\n [disabled]=\"disabled\"\n [class.text-gray-900]=\"value !== opt.value\"\n class=\"flex-1 bg-bg-primary flex items-center pl-normal gap-normal h-10 rounded-md hover:bg-bg-hover transition-all duration-150 disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n <span\n [ngClass]=\"{\n 'radio-checked': value === opt.value,\n 'radio-uncheck': value !== opt.value\n }\"\n class=\"radio-container\"\n >\n @if(value === opt.value) {<span class=\"radio-dot\"></span>}\n </span>\n\n <span class=\"txt-field-label mb-0\">{{ opt.label }}</span></button\n >}\n </div>\n\n @if(invalid){\n <div class=\"txt-invalid\">{{ getErrorMessage(label) }}</div>\n }\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, Input } from '@angular/core';\nimport { ErrorMessages, FxComponent } from '../fx-component.component';\n\nexport interface IRadioButton {\n label: string;\n value: any;\n description?: string;\n tooltip?: string;\n}\n\nlet nextRadioGroupId = 0;\n\n@Component({\n selector: 'fx-ui-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.css'],\n standalone: false\n})\nexport class RadioButtonComponent extends FxComponent<IRadioButton> implements AfterViewInit {\n readonly groupId = `fx-radio-${nextRadioGroupId++}`;\n @Input() label?: string;\n @Input() tooltip = '';\n @Input() required?: boolean = false;\n @Input() options: { label: string; value: any; icon?: any; tooltip?: string }[] = [];\n @Input() override errorMessages: ErrorMessages = {};\n @Input() class?: any\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n onSelectValue(value: any): void {\n if (this.disabled) return;\n this.value = value;\n this.onChange(value);\n this.onTouched();\n }\n}\n","<div\n class=\"w-full rounded-lg overflow-hidden\"\n [class]=\"class\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"label ? groupId + '-label' : null\"\n>\n <!-- A radiogroup has no single control a <label> could point at — name it via aria-labelledby. -->\n @if (label) {\n <span class=\"txt-field-label block\" [id]=\"groupId + '-label'\">\n {{ label }}\n @if (required) {\n <span class=\"txt-required\" aria-hidden=\"true\">*</span>\n }\n @if (tooltip) {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [size]=\"16\"\n class=\"inline-block align-middle ml-0.5 text-text-secondary cursor-help relative -top-px\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n ></fx-ui-hero-icon>\n }\n </span>\n }\n\n <button\n *ngFor=\"let opt of options\"\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"value === opt.value\"\n (click)=\"onSelectValue(opt.value)\"\n [disabled]=\"disabled\"\n [class.text-gray-900]=\"value !== opt.value\"\n class=\"flex-1 px-normal w-full flex items-center gap-normal h-10 rounded-md hover:bg-bg-hover transition-all duration-150 disabled:opacity-60 disabled:cursor-not-allowed\"\n [matTooltip]=\"opt.tooltip || ''\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n >\n <span\n [ngClass]=\"{\n 'radio-checked': value === opt.value,\n 'radio-uncheck': value !== opt.value,\n }\"\n class=\"radio-container\"\n >\n @if (value === opt.value) {\n <span class=\"radio-dot\"></span>\n }\n </span>\n\n <span class=\"txt-default mb-0\">{{ opt.label }}</span>\n </button>\n @if (invalid) {\n <div class=\"txt-invalid\">\n {{ getErrorMessage(label) }}\n </div>\n }\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n Output,\n PLATFORM_ID,\n ViewChild,\n} from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\nimport { QuillStyleLoaderService } from '../../../core/services/quill-style-loader.service';\nimport { isPlatformBrowser } from '@angular/common';\nimport { FxUtils } from '../../../core/utils';\n\n@Component({\n selector: 'fx-ui-rich-text-area',\n standalone: false,\n templateUrl: './rich-text-area.component.html',\n styleUrl: './rich-text-area.component.scss',\n})\nexport class RichTextAreaComponent extends FxComponent<any> implements AfterViewInit {\n @ViewChild('editorContainer', { static: true }) editorContainer!: ElementRef<HTMLDivElement>;\n\n @Input() placeholder = 'Write something...';\n\n @Input() toolbarOptions: any = [\n // ['undo', 'redo'],\n [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\n [{ 'font': [] }],\n [{ 'size': ['small', false, 'large', 'huge'] }],\n [{ 'align': [] }],\n [{ 'color': [] }, { 'background': [] }],\n ['bold', 'italic', 'underline', 'strike'],\n ['blockquote', 'code-block'],\n [{ 'list': 'ordered' }, { 'list': 'bullet' }],\n [{ 'indent': '-1' }, { 'indent': '+1' }],\n ['link', 'image'],\n ['clean']\n ];\n\n @Output() contentChange = new EventEmitter<string>();\n\n private quillInstance: any;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private styleLoader: QuillStyleLoaderService,\n @Inject(PLATFORM_ID) private platformId: object\n ) {\n super();\n }\n\n async ngAfterViewInit(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) return;\n\n await this.styleLoader.load();\n\n const QuillModule = await import('quill');\n const Quill = (QuillModule as any).default || QuillModule;\n\n const icons = Quill.import('ui/icons');\n // icons['undo'] = `<svg viewBox=\"0 0 18 18\"><path d=\"M6.4 5.2H3L6.8 1l3.8 4.2H7.9C10.2 5.4 12 7.4 12 9.8c0 2.7-2.2 4.9-4.9 4.9S2.2 12.5 2.2 9.8H0c0 3.8 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9S10.7 3 7 3v2.2z\"></path></svg>`;\n // icons['redo'] = `<svg viewBox=\"0 0 18 18\"><path d=\"M11.6 5.2H15L11.2 1 7.4 5.2h2.7C7.8 5.4 6 7.4 6 9.8c0 2.7 2.2 4.9 4.9 4.9s4.9-2.2 4.9-4.9H18c0 3.8-3.1 6.9-6.9 6.9S4.2 13.6 4.2 9.8 7.3 3 11 3v2.2z\"></path></svg>`;\n\n this.quillInstance = new Quill(this.editorContainer.nativeElement, {\n theme: 'snow',\n placeholder: this.placeholder,\n modules: {\n history: true,\n toolbar: this.toolbarOptions,\n }\n });\n this.quillInstance.root.style.color = FxUtils.convertColorFromVariable('--text-primary')\n\n const toolbar = this.quillInstance.getModule('toolbar');\n toolbar.addHandler('undo', () => this.quillInstance.history.undo());\n toolbar.addHandler('redo', () => this.quillInstance.history.redo());\n\n if (this.value) {\n this.quillInstance.root.innerHTML = this.value;\n }\n\n this.quillInstance.on('text-change', () => {\n const html = this.quillInstance.root.innerHTML || '';\n this.value = html;\n this.onChange(html);\n this.contentChange.emit(html);\n });\n }\n\n override writeValue(value: any): void {\n this.value = value || '';\n if (this.quillInstance) {\n this.quillInstance.root.innerHTML = this.value;\n }\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (this.quillInstance) {\n this.quillInstance.enable(!isDisabled);\n }\n }\n}\n","<div class=\"w-full rounded-2xl shadow-sm p-1 bg-bg-primary\">\n <div #editorContainer class=\"min-h-[200px] text-base\"></div>\n</div>","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\n\n@Component({\n selector: 'fx-ui-search-bar',\n standalone: false,\n templateUrl: './search-bar.component.html',\n styleUrl: './search-bar.component.scss'\n})\nexport class SearchBarComponent extends FxComponent<string> implements AfterViewInit {\n @Input() placeholder = 'Search...';\n @Output() search = new EventEmitter<string>();\n @Output() valueChange = new EventEmitter<string>();\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n override writeValue(value: string): void {\n this.value = value ?? '';\n }\n \n onValueChange(value: string) {\n this.value = value;\n this.setValue(value);\n this.valueChange.emit(value);\n }\n\n onEnterKey() {\n this.onEnter(this.value);\n this.search.emit(this.value.trim());\n }\n\n clear() {\n this.value = '';\n this.setValue(this.value);\n this.valueChange.emit('');\n this.search.emit('');\n }\n}\n","<div class=\"relative\">\n <fx-ui-hero-icon icon=\"magnifying-glass\" [size]=\"18\" class=\"absolute left-1 top-[3px] text-text-primary\"></fx-ui-hero-icon>\n <input\n type=\"text\"\n class=\"input-default px-9\"\n [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (keydown.enter)=\"onEnterKey()\"\n />\n\n <button\n *ngIf=\"value && !disabled\"\n type=\"button\"\n class=\"absolute inset-y-0 right-2 flex items-center text-text-primary hover:text-text-secondary\"\n (click)=\"clear()\"\n aria-label=\"Clear\"\n >\n <i class=\"material-symbols-outlined text-lg select-none\">close</i>\n </button>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FxComponent } from '../fx-component.component';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\n\nlet nextSelectId = 0;\n\n@Component({\n selector: 'fx-ui-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.css'],\n standalone: false,\n})\nexport class SelectComponent\n extends FxComponent<string | string[]>\n implements AfterViewInit, OnInit, OnChanges\n{\n @Input() label = '';\n @Input() tooltip = '';\n @Input() placeholder = '';\n @Input() options: { label: string; value: string }[] = [];\n @Input() multiple = false;\n @Input() override errorMessages: Record<string, string> = {};\n @Input() required = false;\n @Input() class?: any;\n @Input() enableSearch = false;\n @Input() searchFn?: (query: string) => Promise<{ label: string; value: string }[]>;\n /** Emits the current value when the select panel closes (useful for multiple mode). */\n @Output() closed = new EventEmitter<string | string[]>();\n\n readonly fieldId = `fx-select-${nextSelectId++}`;\n searchTerm = '';\n filteredOptions: { label: string; value: string }[] = [];\n private search$ = new Subject<string>();\n private destroyRef = inject(DestroyRef);\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n // mat-select treats '' as \"nothing selected\"; keep the legacy empty value.\n override writeValue(value: string | string[]): void {\n this.value = value ?? '';\n }\n\n ngOnInit(): void {\n this.filteredOptions = this.options;\n\n this.search$\n .pipe(debounceTime(300), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((term) => this.performSearch(term));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Sync the rendered list when options arrive/refresh asynchronously\n // (ngOnInit captures the initial — often empty — array only).\n if (changes['options']) {\n this.filteredOptions = this.options ?? [];\n this.ref?.detectChanges();\n }\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n onOpened(open: boolean) {\n if (open) {\n this.filteredOptions = this.options;\n if (this.enableSearch) this.searchTerm = '';\n } else {\n this.closed.emit(this.value);\n }\n }\n\n onSearchChange(value: string) {\n if (!this.enableSearch) return;\n this.search$.next(value);\n }\n\n async performSearch(term: string) {\n if (!this.enableSearch) return;\n \n if (!this.searchFn) {\n this.filteredOptions = this.options.filter((o) =>\n o.label?.toLowerCase().includes(term.toLowerCase())\n );\n this.ref.detectChanges();\n return;\n }\n \n const result = await this.searchFn(term);\n this.filteredOptions = result;\n\n Promise.resolve().then(() => this.ref.detectChanges());\n }\n\n onSelectionChange(value: any): void {\n this.value = value;\n this.onChange(this.value);\n }\n\n isSelected(value: string): boolean {\n if (Array.isArray(this.value)) {\n return this.value.includes(value);\n }\n return this.value === value;\n }\n}\n","<div class=\"mb-4 text-left w-full\" [class]=\"class\">\n @if (label) {\n <label class=\"block txt-field-label\" [attr.for]=\"fieldId\">\n {{ label }}\n @if (required) {\n <span class=\"txt-required\" aria-hidden=\"true\">*</span>\n }\n @if (tooltip) {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [size]=\"16\"\n class=\"inline-block align-middle ml-0.5 text-text-secondary cursor-help relative -top-px\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n ></fx-ui-hero-icon>\n }\n </label>\n }\n\n <mat-form-field\n [attr.invalid]=\"invalid || null\"\n class=\"fx-select-field w-full shadow-sm\"\n appearance=\"fill\"\n >\n <mat-select\n [id]=\"fieldId\"\n [required]=\"!!required\"\n [attr.aria-invalid]=\"invalid || null\"\n [attr.aria-describedby]=\"invalid ? fieldId + '-error' : null\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n [value]=\"value\"\n (selectionChange)=\"onSelectionChange($event.value)\"\n (openedChange)=\"onOpened($event)\"\n (blur)=\"onTouched()\"\n >\n @if (enableSearch) {\n <div class=\"px-semi w-full\">\n <input\n type=\"text\"\n aria-label=\"Search\"\n [placeholder]=\"'Search'\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n (click)=\"$event.stopPropagation()\"\n class=\"text-text-primary placeholder:text-text-placeholder w-full bg-bg-primary border-b px-semi py-normal border-border-default focus:outline-none focus:border-gradient-primary-start focus-visible:ring-2 focus-visible:ring-primary/50 text-sm text-text-primary tracking-normal ring-0 transition-colors duration-500 ease-in-out\"\n />\n </div>\n }\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option.value\">\n <span class=\"txt-default\">{{ option.label }}</span>\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n @if (invalid) {\n <div class=\"txt-invalid text-left\" role=\"alert\" [id]=\"fieldId + '-error'\">\n {{ getErrorMessage(label) }}\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-skeleton-table-loading',\n standalone: false,\n templateUrl: './skeleton-table-loading.component.html',\n styleUrl: './skeleton-table-loading.component.scss'\n})\nexport class SkeletonTableLoadingComponent {\n @Input() columns = 5;\n @Input() rows = 5; \n}\n","<div class=\"w-full animate-pulse space-y-normal\">\n <div\n class=\"grid gap-small\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + columns + ', minmax(0, 1fr))' }\"\n >\n @for(col of [].constructor(columns); track col) {\n <div class=\"h-6 bg-bg-hover rounded\"></div>\n }\n </div>\n\n @for(row of [].constructor(rows); track row) {\n <div\n class=\"grid gap-small\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + columns + ', minmax(0, 1fr))' }\"\n >\n @for(col of [].constructor(columns); track col) {\n <div class=\"h-7 bg-bg-hover rounded\"></div>\n }\n </div>\n }\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\nimport { clamp } from 'lodash';\n\n@Component({\n selector: 'fx-ui-slider',\n standalone: false,\n templateUrl: './slider.component.html',\n styleUrl: './slider.component.scss'\n})\nexport class SliderComponent extends FxComponent<any> implements AfterViewInit {\n @ViewChild('track', { static: true }) trackRef!: ElementRef<HTMLElement>;\n @ViewChild('thumb', { static: true }) thumbRef!: ElementRef<HTMLElement>;\n\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() vertical = false;\n @Output() valueChange = new EventEmitter<number>();\n dragging = false;\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n this._normalizeValue(this.value);\n this.ref.markForCheck();\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.ref.markForCheck();\n }\n\n override writeValue(value: number): void {\n this.value = this._normalizeValue(value ?? this.min);\n this.ref.markForCheck();\n }\n\n private _normalizeValue(v: number): number {\n if (!Number.isFinite(v)) v = this.min;\n const clamped = clamp(v, this.min, this.max);\n const stepped =\n Math.round((clamped - this.min) / this.step) * this.step + this.min;\n const precision = Math.max(0, this._decimalPlaces(this.step));\n return parseFloat(stepped.toFixed(precision));\n }\n\n private _decimalPlaces(n: number) {\n const s = String(n);\n if (s.indexOf('.') === -1) return 0;\n return s.length - s.indexOf('.') - 1;\n }\n\n /** Pointer events */\n onPointerDown(event: PointerEvent) {\n if (this.disabled) return;\n (event.target as Element).setPointerCapture(event.pointerId);\n this.dragging = true;\n this._setFromPointer(event);\n }\n\n onPointerMove(event: PointerEvent) {\n if (!this.dragging || this.disabled) return;\n this._setFromPointer(event);\n }\n\n onPointerUp(event: PointerEvent) {\n if (this.disabled) return;\n try {\n (event.target as Element).releasePointerCapture(event.pointerId);\n } catch {\n // pointer capture may already be released\n }\n this.dragging = false;\n this.onTouched();\n }\n\n private _setFromPointer(event: PointerEvent) {\n const newVal = this._coordToValue(event.clientX, event.clientY);\n this._applyValue(newVal);\n }\n\n private _coordToValue(clientX: number, clientY: number) {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n let ratio = this.vertical\n ? 1 - (clientY - rect.top) / rect.height\n : (clientX - rect.left) / rect.width;\n ratio = clamp(ratio, 0, 1);\n const raw = this.min + ratio * (this.max - this.min);\n return this._normalizeValue(raw);\n }\n\n onTrackClick(event: MouseEvent) {\n if (this.disabled) return;\n const newVal = this._coordToValue(event.clientX, event.clientY);\n this._applyValue(newVal);\n this.onTouched();\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(ev: KeyboardEvent) {\n if (this.disabled) return;\n const key = ev.key;\n const largeStep = (this.max - this.min) / 10;\n let delta = 0;\n if (key === 'ArrowLeft' || key === 'ArrowDown') delta = -this.step;\n else if (key === 'ArrowRight' || key === 'ArrowUp') delta = this.step;\n else if (key === 'PageDown') delta = -largeStep;\n else if (key === 'PageUp') delta = largeStep;\n else if (key === 'Home') return this._applyValue(this.min);\n else if (key === 'End') return this._applyValue(this.max);\n\n if (delta !== 0) {\n this._applyValue(this.value + delta);\n ev.preventDefault();\n }\n }\n\n private _applyValue(newVal: number) {\n const v = this._normalizeValue(newVal);\n if (v !== this.value) {\n this.value = v;\n this.ref.markForCheck();\n this.valueChange.emit(v);\n this.onChange(v);\n }\n }\n\n get percent(): number {\n if (this.max === this.min) return 0;\n return ((this.value - this.min) / (this.max - this.min)) * 100;\n }\n\n thumbStyle() {\n return this.vertical\n ? { bottom: `${this.percent}%`, transform: 'translateY(50%)' }\n : { left: `${this.percent}%`, transform: 'translateX(-50%)' };\n }\n\n}\n","<div\n class=\"w-full select-none\"\n [class.cursor-not-allowed]=\"disabled\"\n [class.opacity-60]=\"disabled\"\n role=\"group\"\n>\n <!-- Track click is a pointer shortcut; the thumb button below owns keyboard/focus. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n #track\n class=\"relative touch-none py-4\"\n (click)=\"onTrackClick($event)\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-orientation]=\"vertical ? 'vertical' : 'horizontal'\"\n >\n <div\n class=\"relative flex items-center\"\n [ngClass]=\"{ 'flex-col h-48': vertical }\"\n >\n <div\n class=\"relative flex-1 rounded-full bg-gray-600 h-2\"\n [ngClass]=\"{ 'w-1 rotate-0 h-full w-auto bg-border-gray-700': vertical }\"\n >\n <div\n class=\"absolute left-0 top-0 h-full rounded-full bg-primary\"\n *ngIf=\"!vertical\"\n [style.width.%]=\"percent\"\n ></div>\n\n <div\n class=\"absolute bottom-0 left-0 w-full rounded-full bg-primary\"\n *ngIf=\"vertical\"\n [style.height.%]=\"percent\"\n style=\"transform-origin: bottom;\"\n ></div>\n\n <button\n #thumb\n type=\"button\"\n class=\"absolute -mt-1 -ml-1.5 w-4 h-4 rounded-full shadow focus:ring-primary bg-primary border-2 border-text-primary\"\n [ngStyle]=\"thumbStyle()\"\n role=\"slider\"\n aria-label=\"Slider\"\n [attr.aria-valuemin]=\"min\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-disabled]=\"disabled\"\n tabindex=\"0\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n [disabled]=\"disabled\"\n ></button>\n </div>\n </div>\n </div>\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\n\n@Component({\n selector: 'fx-ui-switch',\n standalone: false,\n templateUrl: './switch.component.html',\n styleUrl: './switch.component.scss'\n})\nexport class SwitchComponent extends FxComponent<any> implements AfterViewInit {\n @Output() onSwitch: EventEmitter<boolean> = new EventEmitter<boolean>();\n /** Accessible name — the switch renders no visible text of its own. */\n @Input() ariaLabel = '';\n\n ngAfterViewInit(): void {\n this.cdr.detectChanges();\n }\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n override writeValue(value: any): void {\n this.value = value ?? false;\n }\n\n toggle() {\n if (this.disabled) return;\n this.value = !this.value;\n this.onSwitch.emit(this.value);\n this.onChange(this.value);\n this.onTouched();\n }\n}\n","<button\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"!!value\"\n [attr.aria-label]=\"ariaLabel || null\"\n [disabled]=\"disabled\"\n class=\"relative flex items-center w-10 h-5 rounded-full transition-colors duration-300 cursor-pointer disabled:cursor-not-allowed focus-visible:ring-2 focus-visible:ring-primary/50\"\n [ngClass]=\"{\n 'bg-success': value && !disabled,\n 'bg-button-default': !value && !disabled,\n 'bg-bg-hover': disabled\n }\"\n (click)=\"toggle()\"\n>\n @if(value) {\n <i style=\"font-size: 20px;\" class=\"material-symbols-outlined absolute left-0.5 top-0 text-text-inverse\" aria-hidden=\"true\">check</i>\n\n }\n @if(!value) {\n <i style=\"font-size: 20px;\" class=\"material-symbols-outlined absolute right-0.5 top-0 text-text-inverse\" aria-hidden=\"true\">close</i>\n }\n <div\n class=\"absolute top-0.5 left-0.5 w-4 h-4 bg-text-inverse rounded-full shadow-md transform transition-transform duration-300\"\n [ngClass]=\"{ 'translate-x-5': value }\"\n ></div>\n</button>\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-tab',\n standalone: false,\n templateUrl: './tab.component.html',\n})\nexport class TabComponent {\n @Input() label!: string;\n @Input() icon?: string;\n @ViewChild(TemplateRef, { static: true }) content!: TemplateRef<any>;\n}\n","<ng-template><ng-content></ng-content></ng-template>\n","import {\n AfterContentInit,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n QueryList,\n Renderer2,\n ViewChild,\n HostListener\n} from '@angular/core';\nimport { TabComponent } from '../tab-component/tab.component';\n\n@Component({\n selector: 'fx-ui-tab-group',\n standalone: false,\n templateUrl: './tab-group.component.html',\n styleUrl: './tab-group.component.scss',\n})\nexport class TabGroupComponent implements AfterContentInit {\n @ContentChildren(TabComponent) tabs!: QueryList<TabComponent>;\n @Input() activeIndex = 0;\n\n @ViewChild('tabList', { static: true }) tabListRef!: ElementRef<HTMLElement>;\n @ViewChild('underline', { static: true }) underlineRef!: ElementRef<HTMLElement>;\n\n canScrollLeft = false;\n canScrollRight = false;\n\n private animateDelay = 50;\n private scrollAmount = 160;\n private sidePadding = 32; // same as button width space\n\n constructor(private renderer: Renderer2) {}\n\n ngAfterContentInit() {\n setTimeout(() => {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n this.scrollToActiveTab(false);\n }, 0);\n }\n\n selectTab(index: number) {\n this.activeIndex = index;\n this.scrollToActiveTab(true);\n }\n\n /** Roving tablist keyboard nav: arrows move AND activate (selection follows focus). */\n onTabKeydown(event: KeyboardEvent, index: number) {\n const count = this.tabs.length;\n if (!count) return;\n let next: number;\n switch (event.key) {\n case 'ArrowRight':\n next = (index + 1) % count;\n break;\n case 'ArrowLeft':\n next = (index - 1 + count) % count;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = count - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n this.selectTab(next);\n const buttons = this.tabListRef.nativeElement.querySelectorAll('.tab-btn');\n (buttons[next] as HTMLElement | undefined)?.focus();\n }\n\n private updateUnderlinePosition() {\n const tabListEl = this.tabListRef.nativeElement;\n const underlineEl = this.underlineRef.nativeElement;\n const tabButtons = tabListEl.querySelectorAll('.tab-btn');\n const activeTab = tabButtons[this.activeIndex] as HTMLElement | undefined;\n \n if (!activeTab || !underlineEl) return;\n \n const tabRect = activeTab.getBoundingClientRect();\n const containerRect = tabListEl.getBoundingClientRect();\n \n // Calculate X position relative to scrollable area (not viewport)\n const translateX = tabRect.left - containerRect.left + tabListEl.scrollLeft - this.sidePadding;\n \n this.renderer.setStyle(underlineEl, 'width', `${activeTab.offsetWidth}px`);\n this.renderer.setStyle(underlineEl, 'transform', `translateX(${translateX}px)`);\n }\n \n\n private scrollToActiveTab(updateUnderlineAfter = true) {\n const tabListEl = this.tabListRef.nativeElement;\n const tabButtons = tabListEl.querySelectorAll('.tab-btn');\n const activeTab = tabButtons[this.activeIndex] as HTMLElement | undefined;\n\n if (!activeTab) return;\n\n const elLeft = activeTab.offsetLeft;\n const elRight = elLeft + activeTab.offsetWidth;\n const containerLeft = tabListEl.scrollLeft;\n const containerRight = containerLeft + tabListEl.clientWidth;\n\n if (elLeft < containerLeft) {\n tabListEl.scrollTo({ left: Math.max(elLeft - 32, 0), behavior: 'smooth' });\n } else if (elRight > containerRight) {\n const target = elRight - tabListEl.clientWidth + 32;\n tabListEl.scrollTo({ left: target, behavior: 'smooth' });\n }\n\n setTimeout(() => {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n }, updateUnderlineAfter ? this.animateDelay : 0);\n }\n\n scroll(direction: 'left' | 'right') {\n const tabListEl = this.tabListRef.nativeElement;\n const delta = direction === 'left' ? -this.scrollAmount : this.scrollAmount;\n tabListEl.scrollBy({ left: delta, behavior: 'smooth' });\n\n setTimeout(() => {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n }, this.animateDelay);\n }\n\n onScroll() {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n }\n\n private updateScrollButtons() {\n const el = this.tabListRef.nativeElement;\n const scrollLeft = el.scrollLeft;\n const maxScrollLeft = el.scrollWidth - el.clientWidth;\n \n this.canScrollLeft = scrollLeft > 2;\n \n this.canScrollRight = scrollLeft < maxScrollLeft - 2;\n }\n\n @HostListener('window:resize')\n onResize() {\n this.updateUnderlinePosition();\n }\n}\n","<div class=\"relative\">\n <!-- Left scroll button -->\n <button\n class=\"left-scroll-button\"\n type=\"button\"\n aria-label=\"Scroll tabs left\"\n (click)=\"scroll('left')\"\n [style.opacity]=\"canScrollLeft ? 1 : 0\"\n [style.pointerEvents]=\"canScrollLeft ? 'auto' : 'none'\"\n [attr.tabindex]=\"canScrollLeft ? null : -1\"\n [attr.aria-hidden]=\"!canScrollLeft\"\n >\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-5 w-5 text-text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div\n #tabList\n role=\"tablist\"\n class=\"relative flex overflow-x-auto no-scrollbar scroll-smooth\"\n (scroll)=\"onScroll()\"\n >\n <button\n *ngFor=\"let tab of tabs.toArray(); let i = index\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"i === activeIndex\"\n [tabindex]=\"i === activeIndex ? 0 : -1\"\n (click)=\"selectTab(i)\"\n (keydown)=\"onTabKeydown($event, i)\"\n class=\"tab-btn tab-bar-btn\"\n >\n <div class=\"flex flex-row items-center justify-center\">\n @if (tab.icon) {\n <fx-ui-hero-icon\n [icon]=\"tab.icon\"\n [size]=\"20\"\n class=\"flex mr-[2px]\"\n [ngClass]=\"{\n 'text-gradient-primary-start mb-small': i === activeIndex,\n 'text-text-placeholder': i !== activeIndex,\n }\"\n ></fx-ui-hero-icon>\n }\n <div\n [ngClass]=\"\n i === activeIndex ? 'txt-field-label text-gradient-primary-start' : 'txt-placeholder'\n \"\n >\n {{ tab.label }}\n </div>\n </div>\n </button>\n\n <span #underline class=\"underline\" style=\"width: 0; transform: translateX(0)\"></span>\n </div>\n\n <button\n class=\"right-scroll-button\"\n type=\"button\"\n aria-label=\"Scroll tabs right\"\n (click)=\"scroll('right')\"\n [style.opacity]=\"canScrollRight ? 1 : 0\"\n [style.pointerEvents]=\"canScrollRight ? 'auto' : 'none'\"\n [attr.tabindex]=\"canScrollRight ? null : -1\"\n [attr.aria-hidden]=\"!canScrollRight\"\n >\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-5 w-5 text-text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n</div>\n\n<!-- Tab content -->\n<div class=\"transition-all duration-300 ease-in-out mt-4\">\n <ng-container *ngFor=\"let tab of tabs.toArray(); let i = index\">\n <div *ngIf=\"i === activeIndex\" role=\"tabpanel\" class=\"animate-fadeIn\">\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </ng-container>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-table-cell',\n standalone: false,\n templateUrl: './table-cell.component.html',\n styleUrl: './table-cell.component.scss'\n})\nexport class TableCell {\n @Input({ required: true }) loading!: boolean;\n @Input() skeletonClass = 'h-4 w-full';\n}\n","@if (!loading) {\n <div animate.enter=\"fade-in-animation\" class=\"inline-block my-normal\">\n <ng-content />\n </div>\n} @else {\n <div animate.enter=\"fade-in-animation\" class=\"skeleton-load my-semi\" [class]=\"skeletonClass\"></div>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport type TagType =\n | 'success'\n | 'warning'\n | 'critical'\n | 'information'\n | 'discovery'\n | 'default'\n | 'danger';\n\n@Component({\n selector: 'fx-ui-tag',\n standalone: false,\n templateUrl: './tag.component.html',\n styleUrl: './tag.component.scss',\n})\nexport class TagComponent {\n @Input() label: string;\n @Input() type: TagType = 'default';\n @Input() rounded = true;\n @Input() icon?: any;\n @Input() solid = false;\n @Output() clicked = new EventEmitter<void>();\n\n onClick() {\n this.clicked.emit();\n }\n}\n","<!-- Interactive semantics only when a (clicked) listener is attached. -->\n<div\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"$event.preventDefault(); onClick()\"\n [attr.role]=\"clicked.observed ? 'button' : null\"\n [attr.tabindex]=\"clicked.observed ? 0 : null\"\n [class]=\"\n `flex flex-row gap-small ${rounded ? 'tag-round' : 'tag-square'} tag-${type}${solid ? '-solid' : ''}${clicked.observed ? ' cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50' : ''}`\n \"\n>\n @if (icon) {\n <fx-ui-hero-icon\n [class]=\"`flex txt-tag-${type} ${solid && type !== 'default' ? 'text-white' : ''}`\"\n [icon]=\"icon\"\n [size]=\"18\"\n ></fx-ui-hero-icon>\n }\n\n <div [class]=\"`txt-tag-${type} ${solid && type !== 'default' ? 'text-white font-medium' : ''}`\">\n {{ label }}\n </div>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\n\nexport interface TreeNode {\n id: string;\n label: string;\n status?: string;\n children?: TreeNode[];\n}\n\n@Component({\n selector: 'fx-ui-tree-diagram',\n standalone: false,\n templateUrl: './tree-diagram.component.html',\n styleUrl: './tree-diagram.component.scss',\n})\nexport class TreeDiagram implements AfterViewInit, OnDestroy {\n @Input() data!: any;\n\n @ViewChild('container') container!: ElementRef;\n @ViewChild('root') root!: ElementRef;\n @ViewChildren('child') children!: QueryList<ElementRef>;\n\n lines: any[] = [];\n svgWidth = 0;\n svgHeight = 0;\n\n private resizeObserver!: ResizeObserver;\n private rafId?: number;\n\n constructor(private zone: NgZone, private cdr: ChangeDetectorRef) {}\n\n ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver((entries) => {\n const rect = entries[0].contentRect;\n\n if (rect.width === 0 || rect.height === 0) return;\n\n this.scheduleDraw();\n });\n\n this.resizeObserver.observe(this.container.nativeElement);\n\n setTimeout(() => this.scheduleDraw(), 50);\n setTimeout(() => this.scheduleDraw(), 150);\n });\n\n this.children.changes.subscribe(() => this.scheduleDraw());\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n if (this.rafId) cancelAnimationFrame(this.rafId);\n }\n\n private scheduleDraw() {\n if (this.rafId) cancelAnimationFrame(this.rafId);\n\n this.rafId = requestAnimationFrame(() => {\n this.drawLines();\n });\n }\n\n private drawLines() {\n if (!this.root || !this.children.length) return;\n \n const containerEl = this.container.nativeElement;\n const rect = containerEl.getBoundingClientRect();\n if (rect.width === 0 || rect.height === 0) return;\n \n const rootRect = this.root.nativeElement.getBoundingClientRect();\n \n const rootX = rootRect.left + rootRect.width / 2 - rect.left;\n const rootBottomY = rootRect.bottom - rect.top;\n \n const childRects = this.children.map(c =>\n c.nativeElement.getBoundingClientRect()\n );\n \n const childCenters = childRects.map(r => ({\n x: r.left + r.width / 2 - rect.left,\n y: r.top - rect.top\n }));\n \n const horizontalY = childCenters[0].y - 24;\n \n this.zone.run(() => {\n this.svgWidth = rect.width;\n this.svgHeight = rect.height;\n \n this.lines = [\n {\n x1: rootX,\n y1: rootBottomY,\n x2: rootX,\n y2: horizontalY\n },\n {\n x1: childCenters[0].x,\n y1: horizontalY,\n x2: childCenters[childCenters.length - 1].x,\n y2: horizontalY\n },\n ...childCenters.map(c => ({\n x1: c.x,\n y1: horizontalY,\n x2: c.x,\n y2: c.y\n }))\n ];\n });\n\n this.cdr.detectChanges();\n } \n}\n","<div class=\"relative p-8\" #container>\n\n <!-- ROOT -->\n <div\n #root\n class=\"mx-auto w-fit bg-blue-600 text-white px-7 py-3 rounded-md font-semibold text-center\"\n >\n {{ data.label }}\n </div>\n\n <!-- CHILDREN -->\n <div class=\"mt-16 flex justify-center gap-16\">\n <div\n *ngFor=\"let child of data.children\"\n #child\n class=\"w-48 bg-rose-600 text-white px-4 py-4 rounded-lg text-center\"\n >\n <div class=\"font-semibold text-lg\">{{ child.label }}</div>\n <div class=\"mt-1 text-sm opacity-90\">{{ child.status }}</div>\n </div>\n </div>\n\n <!-- SVG CONNECTORS -->\n <svg\n class=\"absolute inset-0 pointer-events-none\"\n [attr.width]=\"svgWidth\"\n [attr.height]=\"svgHeight\"\n >\n <line\n *ngFor=\"let line of lines\"\n [attr.x1]=\"line.x1\"\n [attr.y1]=\"line.y1\"\n [attr.x2]=\"line.x2\"\n [attr.y2]=\"line.y2\"\n stroke=\"#1f2937\"\n stroke-width=\"2\"\n />\n </svg>\n\n</div>\n","import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { KanbanColumn, ColumnChangedEvent } from './kanban-board.types';\n\n@Component({\n selector: 'fx-ui-kanban-board',\n standalone: false,\n templateUrl: './kanban-board.component.html',\n styleUrl: './kanban-board.component.scss',\n})\nexport class KanbanBoardComponent<T = any> {\n @Input() columns: KanbanColumn<T>[] = [];\n @Input() itemTemplate?: TemplateRef<any>;\n @Output() columnChanged = new EventEmitter<ColumnChangedEvent<T>>();\n\n /**\n * Get all column IDs for connecting drop lists\n */\n getColumnIds(): string[] {\n return this.columns.map((col) => col.id);\n }\n\n /**\n * Handle drop event when item is moved\n */\n onDrop(event: CdkDragDrop<T[]>, columnId: string) {\n const previousColumnId = event.previousContainer.id;\n const currentColumnId = columnId;\n\n if (event.previousContainer === event.container) {\n // Reorder within the same column\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n // Transfer between columns\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n // Emit the change event\n const item = event.container.data[event.currentIndex];\n this.columnChanged.emit({\n previousColumnId,\n currentColumnId,\n item,\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n }\n}\n","<div class=\"kanban-board\">\n <div class=\"kanban-columns\">\n @for (column of columns; track column.id) {\n <div class=\"kanban-column\">\n <div class=\"kanban-column-header\">\n <h3 class=\"kanban-column-title\">{{ column.title }}</h3>\n <span class=\"kanban-column-count\">{{ column.items.length }}</span>\n </div>\n \n <div\n class=\"kanban-column-content\"\n cdkDropList\n [id]=\"column.id\"\n [cdkDropListData]=\"column.items\"\n [cdkDropListConnectedTo]=\"getColumnIds()\"\n (cdkDropListDropped)=\"onDrop($event, column.id)\"\n >\n @for (item of column.items; track $index) {\n <div class=\"kanban-item\" cdkDrag>\n <div class=\"kanban-item-placeholder\" *cdkDragPlaceholder></div>\n \n @if (itemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item, index: $index }\"\n ></ng-container>\n } @else {\n <div class=\"kanban-item-default\">\n {{ item }}\n </div>\n }\n </div>\n }\n \n @if (column.items.length === 0) {\n <div class=\"kanban-column-empty\">\n Drop items here\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { Subject, filter, takeUntil } from 'rxjs';\nimport { DrawerItem } from './drawer.types';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\n@Component({\n selector: 'fx-ui-drawer',\n standalone: false,\n templateUrl: './drawer.component.html',\n styleUrl: './drawer.component.scss',\n animations: [\n trigger('drawerExpand', [\n state('collapsed', style({ width: '70px' })),\n state('expanded', style({ width: '260px' })),\n transition('collapsed <=> expanded', animate('300ms cubic-bezier(0.4, 0, 0.2, 1)')),\n ]),\n trigger('accordionExpand', [\n state('collapsed', style({ height: '0', overflow: 'hidden', opacity: 0 })),\n state('expanded', style({ height: '*', overflow: 'visible', opacity: 1 })),\n transition('collapsed <=> expanded', animate('300ms cubic-bezier(0.4, 0, 0.2, 1)')),\n ]),\n ],\n})\nexport class DrawerComponent implements OnInit, OnDestroy {\n @Input() items: DrawerItem[] = [];\n @Input() isExpanded = true;\n @Input() logo?: string;\n @Input() version?: string;\n @Output() toggleExpanded = new EventEmitter<boolean>();\n @Output() itemClicked = new EventEmitter<DrawerItem>();\n\n expandedItems = new Set<string>();\n currentRoute = '';\n private destroy$ = new Subject<void>();\n\n constructor(private router: Router) {}\n\n ngOnInit(): void {\n // Track current route\n this.currentRoute = this.router.url;\n\n // Subscribe to route changes\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe((event: any) => {\n this.currentRoute = event.urlAfterRedirects || event.url;\n this.autoExpandActiveParents();\n });\n\n // Auto-expand parents of active route on init\n this.autoExpandActiveParents();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n toggleDrawer(): void {\n this.isExpanded = !this.isExpanded;\n this.toggleExpanded.emit(this.isExpanded);\n }\n\n toggleAccordion(itemId: string): void {\n if (this.expandedItems.has(itemId)) {\n this.expandedItems.delete(itemId);\n } else {\n this.expandedItems.add(itemId);\n }\n }\n\n isAccordionExpanded(itemId: string): boolean {\n return this.expandedItems.has(itemId);\n }\n\n onItemClick(item: DrawerItem, event?: Event): void {\n // If item has children, toggle accordion\n if (item.children && item.children.length > 0) {\n event?.preventDefault();\n this.toggleAccordion(item.id);\n return;\n }\n\n // Emit click event\n this.itemClicked.emit(item);\n\n // If item has action, execute it\n if (item.action) {\n event?.preventDefault();\n item.action();\n }\n\n // Navigation is handled by routerLink in template\n }\n\n isActiveRoute(route?: string): boolean {\n if (!route) return false;\n return this.currentRoute === route || this.currentRoute.startsWith(route + '/');\n }\n\n hasActiveChild(item: DrawerItem): boolean {\n if (!item.children) return false;\n\n return item.children.some((child) => {\n if (this.isActiveRoute(child.route)) return true;\n if (child.children) return this.hasActiveChild(child);\n return false;\n });\n }\n\n private autoExpandActiveParents(): void {\n const expandParents = (items: DrawerItem[]): boolean => {\n for (const item of items) {\n if (item.route && this.isActiveRoute(item.route)) {\n return true;\n }\n if (item.children) {\n const hasActiveChild = expandParents(item.children);\n if (hasActiveChild) {\n this.expandedItems.add(item.id);\n return true;\n }\n }\n }\n return false;\n };\n\n expandParents(this.items);\n }\n\n getAccordionState(itemId: string): string {\n return this.isAccordionExpanded(itemId) ? 'expanded' : 'collapsed';\n }\n\n getDrawerState(): string {\n return this.isExpanded ? 'expanded' : 'collapsed';\n }\n}\n","<div class=\"drawer-host-wrapper\">\n <a\n href=\"/\"\n class=\"h-[60px]\"\n [ngClass]=\"{ 'flex items-center justify-center': !isExpanded, 'p-4': isExpanded }\"\n >\n @if (logo) {\n <img\n [src]=\"logo\"\n alt=\"Home\"\n class=\"h-[20px] w-auto transition-all duration-300 ease-in-out\"\n [ngClass]=\"{ 'scale-90': !isExpanded, 'ml-5': isExpanded }\"\n />\n } @else {\n <div class=\"h-[30px] w-auto transition-all duration-300 ease-in-out\"></div>\n }\n </a>\n <div class=\"drawer-container\" [@drawerExpand]=\"getDrawerState()\">\n <!-- Navigation Items -->\n <nav class=\"drawer-nav\">\n <ng-container *ngFor=\"let item of items\">\n <ng-container\n *ngTemplateOutlet=\"drawerItem; context: { $implicit: item, level: 0 }\"\n ></ng-container>\n </ng-container>\n </nav>\n\n <!-- Version -->\n <div *ngIf=\"version\" class=\"drawer-version\" [matTooltip]=\"!isExpanded ? version : ''\" matTooltipPosition=\"right\">\n <span *ngIf=\"isExpanded\">{{ version }}</span>\n <span *ngIf=\"!isExpanded\" class=\"drawer-version-dot\"></span>\n </div>\n </div>\n\n <!-- Floating Toggle Button on right border -->\n <button\n type=\"button\"\n class=\"toggle-btn\"\n [attr.aria-label]=\"isExpanded ? 'Collapse navigation' : 'Expand navigation'\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"toggleDrawer()\"\n [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand'\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n matTooltipPosition=\"right\"\n >\n <fx-ui-hero-icon\n [icon]=\"isExpanded ? 'chevron-left' : 'chevron-right'\"\n [size]=\"16\"\n class=\"text-text-primary\"\n ></fx-ui-hero-icon>\n </button>\n</div>\n\n<!-- Recursive Template for Drawer Items -->\n<ng-template #drawerItem let-item let-level=\"level\">\n <div class=\"drawer-item-wrapper\">\n <!-- Item Button/Link -->\n <a\n *ngIf=\"item.route && !item.children\"\n [routerLink]=\"item.route\"\n class=\"drawer-item\"\n [class.active]=\"isActiveRoute(item.route)\"\n [class.has-children]=\"item.children && item.children.length > 0\"\n [style.paddingLeft.px]=\"isExpanded ? 16 + level * 16 : 16\"\n [matTooltip]=\"!isExpanded ? item.label : ''\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n (click)=\"onItemClick(item, $event)\"\n >\n <div class=\"item-content\">\n <fx-ui-hero-icon [icon]=\"item.icon\" [size]=\"20\" class=\"item-icon\"></fx-ui-hero-icon>\n <span *ngIf=\"isExpanded\" class=\"item-label\">{{ item.label }}</span>\n </div>\n </a>\n\n <button\n *ngIf=\"!item.route || item.children\"\n type=\"button\"\n class=\"drawer-item\"\n [class.active]=\"isActiveRoute(item.route)\"\n [class.has-children]=\"item.children && item.children.length > 0\"\n [style.paddingLeft.px]=\"isExpanded ? 16 + level * 16 : 16\"\n [matTooltip]=\"!isExpanded ? item.label : ''\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"text-text-primary text-sm font-semibold\"\n (click)=\"onItemClick(item, $event)\"\n >\n <div class=\"item-content\">\n <fx-ui-hero-icon [icon]=\"item.icon\" [size]=\"20\" class=\"item-icon\"></fx-ui-hero-icon>\n <span *ngIf=\"isExpanded\" class=\"item-label\">{{ item.label }}</span>\n <fx-ui-hero-icon\n *ngIf=\"isExpanded && item.children && item.children.length > 0\"\n [icon]=\"'chevron-down'\"\n [size]=\"16\"\n class=\"chevron-icon\"\n [class.rotated]=\"isAccordionExpanded(item.id)\"\n ></fx-ui-hero-icon>\n </div>\n </button>\n\n <!-- Accordion Children -->\n <div\n *ngIf=\"item.children && item.children.length > 0\"\n class=\"accordion-children\"\n [@accordionExpand]=\"getAccordionState(item.id)\"\n >\n <ng-container *ngFor=\"let child of item.children\">\n <ng-container\n *ngTemplateOutlet=\"drawerItem; context: { $implicit: child, level: level + 1 }\"\n ></ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n","import { Component, Input } from '@angular/core';\n\n/** Row-card skeleton placeholder for master-detail list panes. */\n@Component({\n selector: 'fx-ui-skeleton-list',\n standalone: false,\n templateUrl: './skeleton-list.component.html',\n})\nexport class SkeletonListComponent {\n @Input() rows = 5;\n\n range(n: number): number[] {\n return Array.from({ length: Number(n) || 0 }, (_, i) => i);\n }\n}\n","<div class=\"flex flex-col gap-normal animate-pulse\">\n @for (r of range(rows); track r) {\n <div class=\"rounded-lg border border-border-default p-semi\">\n <div class=\"flex items-center gap-normal mb-small\">\n <div class=\"w-8 h-8 rounded-lg bg-bg-hover shrink-0\"></div>\n <div class=\"h-4 flex-1 rounded bg-bg-hover\"></div>\n <div class=\"h-5 w-12 rounded-full bg-bg-hover shrink-0\"></div>\n </div>\n <div class=\"h-3 w-3/4 rounded bg-bg-hover\"></div>\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\n\n/** Card-shaped skeleton placeholder for detail panels. */\n@Component({\n selector: 'fx-ui-skeleton-detail',\n standalone: false,\n templateUrl: './skeleton-detail.component.html',\n})\nexport class SkeletonDetailComponent {\n /** Number of content cards rendered below the header card. */\n @Input() cards = 3;\n /** Rows per content card. */\n @Input() rows = 4;\n\n range(n: number): number[] {\n return Array.from({ length: Number(n) || 0 }, (_, i) => i);\n }\n\n rowWidth(i: number): number {\n return [90, 70, 80, 60][i % 4];\n }\n}\n","<div class=\"flex flex-col gap-xl animate-pulse\">\n <div class=\"card-common\">\n <div class=\"flex items-start gap-normal\">\n <div class=\"w-10 h-10 rounded-lg bg-bg-hover shrink-0\"></div>\n <div class=\"flex-1 min-w-0 flex flex-col gap-normal\">\n <div class=\"h-5 w-1/2 rounded bg-bg-hover\"></div>\n <div class=\"h-3 w-3/4 rounded bg-bg-hover\"></div>\n </div>\n </div>\n </div>\n\n @for (c of range(cards); track c) {\n <div class=\"card-common flex flex-col gap-large\">\n <div class=\"h-4 w-1/3 rounded bg-bg-hover\"></div>\n <div class=\"flex flex-col gap-normal\">\n @for (r of range(rows); track r) {\n <div class=\"h-3 rounded bg-bg-hover\" [style.width.%]=\"rowWidth(r)\"></div>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Tone, toneBadge, toneText } from '../../../core/value-tone.util';\n\nexport interface FxStatCard {\n /** Caller-translated caption. */\n label: string;\n value: string | number;\n /** hero-icon name shown in the tinted box. */\n icon?: any;\n /** Colours the number and the icon box; null/undefined renders neutral. */\n tone?: Tone | null;\n}\n\n/** KPI tile row: big number + tinted icon box + caption, in a responsive grid. */\n@Component({\n selector: 'fx-ui-stat-cards',\n standalone: false,\n templateUrl: './stat-cards.component.html',\n})\nexport class StatCardsComponent {\n @Input() cards: FxStatCard[] = [];\n /** Grid columns; defaults to one column per card. */\n @Input() cols?: number;\n\n get gridColumns(): string {\n // No explicit cols → responsive auto-fit so tiles stack on narrow viewports.\n if (this.cols === undefined) {\n return 'repeat(auto-fit, minmax(180px, 1fr))';\n }\n return `repeat(${this.cols}, minmax(0, 1fr))`;\n }\n\n numClass(card: FxStatCard): string {\n return card.tone ? toneText(card.tone) : 'text-text-primary';\n }\n\n boxClass(card: FxStatCard): string {\n return card.tone ? toneBadge(card.tone) : 'bg-bg-hover text-text-secondary';\n }\n}\n","<div class=\"grid gap-normal\" [ngStyle]=\"{ 'grid-template-columns': gridColumns }\">\n @for (card of cards; track card.label) {\n <div class=\"card-common flex items-center gap-normal\">\n @if (card.icon) {\n <div\n class=\"w-10 h-10 rounded-lg flex items-center justify-center shrink-0\"\n [ngClass]=\"boxClass(card)\"\n >\n <fx-ui-hero-icon [icon]=\"card.icon\" [size]=\"20\"></fx-ui-hero-icon>\n </div>\n }\n <div class=\"flex flex-col min-w-0\">\n <span class=\"txt-heading-04\" [ngClass]=\"numClass(card)\">{{ card.value }}</span>\n <span class=\"txt-utility-caption text-text-secondary truncate\">{{ card.label }}</span>\n </div>\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\n\n/** Centered \"no data\" block. The message is caller-translated (no i18n in lib). */\n@Component({\n selector: 'fx-ui-empty-state',\n standalone: false,\n templateUrl: './empty-state.component.html',\n})\nexport class EmptyStateComponent {\n @Input() message = 'No data';\n /** Optional icon (hero-icon name). */\n @Input() icon?: any;\n /** Min height of the block, CSS length. */\n @Input() height = '120px';\n}\n","<div\n class=\"flex flex-col items-center justify-center gap-small w-full\"\n [style.minHeight]=\"height\"\n>\n @if (icon) {\n <fx-ui-hero-icon class=\"text-text-placeholder\" [icon]=\"icon\" [size]=\"24\"></fx-ui-hero-icon>\n }\n <div class=\"txt-default text-text-placeholder\">{{ message }}</div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Tone, severityTone, toneBadge, toneBg } from '../../../core/value-tone.util';\n\nexport interface FxFilterChipOption {\n /** Caller-translated label. */\n label: string;\n /** '' (empty) renders as the neutral \"All\" chip. */\n value: string;\n}\n\n/**\n * Tone-tinted filter chip row. Replaces the per-tab chipClass() copies —\n * including their classic bug of comparing a hardcoded filter key: the active\n * chip here is always derived from [value].\n */\n@Component({\n selector: 'fx-ui-filter-chips',\n standalone: false,\n templateUrl: './filter-chips.component.html',\n})\nexport class FilterChipsComponent {\n @Input() options: FxFilterChipOption[] = [];\n @Input() value = '';\n @Output() valueChange = new EventEmitter<string>();\n /** Per-value tone overrides (e.g. { Safe: 'information', Protected: 'discovery' as any }). */\n @Input() toneOverrides: Record<string, Tone | null> = {};\n\n select(option: FxFilterChipOption): void {\n this.value = option.value;\n this.valueChange.emit(option.value);\n }\n\n chipClass(option: FxFilterChipOption): string {\n const active = this.value === option.value;\n if (!option.value) {\n return active\n ? 'bg-text-primary text-text-focus'\n : 'bg-bg-hover text-text-secondary hover:bg-gradient-primary-start/10 hover:text-gradient-primary-start';\n }\n const tone =\n option.value in this.toneOverrides\n ? this.toneOverrides[option.value]\n : severityTone(option.value);\n if (!tone) {\n return active ? 'bg-text-primary text-text-focus' : `${toneBadge(null)} hover:opacity-50`;\n }\n return active ? `${toneBg(tone)} text-text-focus` : `${toneBadge(tone)} hover:opacity-50`;\n }\n}\n","<div class=\"flex flex-wrap items-center gap-small\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n class=\"px-3 py-1 rounded-full txt-utility-caption font-medium transition-colors cursor-pointer\"\n [ngClass]=\"chipClass(option)\"\n (click)=\"select(option)\"\n >\n {{ option.label }}\n </button>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Tone, toneBg } from '../../../core/value-tone.util';\n\n/** Thin tone-coloured progress/score bar with optional label and caption. */\n@Component({\n selector: 'fx-ui-meter',\n standalone: false,\n templateUrl: './meter.component.html',\n})\nexport class MeterComponent {\n @Input() value = 0;\n @Input() max = 10;\n @Input() tone: Tone | null = null;\n /** Caller-translated texts; omitted → bar only. */\n @Input() label?: string;\n @Input() caption?: string;\n\n get percent(): number {\n const max = Number(this.max) || 1;\n const pct = (Number(this.value) / max) * 100;\n return Math.min(100, Math.max(0, pct));\n }\n\n get fillClass(): string {\n return toneBg(this.tone);\n }\n}\n","<div class=\"flex flex-col gap-small w-full\">\n @if (label || caption) {\n <div class=\"flex items-center justify-between gap-normal\">\n @if (label) {\n <span class=\"txt-field-label !mb-0\">{{ label }}</span>\n }\n @if (caption) {\n <span class=\"txt-utility-caption text-text-secondary\">{{ caption }}</span>\n }\n </div>\n }\n <div\n class=\"h-2 rounded-full bg-bg-hover overflow-hidden\"\n role=\"progressbar\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-label]=\"label || null\"\n >\n <div class=\"h-full rounded-full\" [ngClass]=\"fillClass\" [style.width.%]=\"percent\"></div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Tone, toneText } from '../../../core/value-tone.util';\n\n/** Detail-panel section: card with an icon + heading header and projected body. */\n@Component({\n selector: 'fx-ui-section-card',\n standalone: false,\n templateUrl: './section-card.component.html',\n})\nexport class SectionCardComponent {\n /** Caller-translated heading. */\n @Input() title = '';\n /** hero-icon name; omitted → text-only header. */\n @Input() icon?: any;\n @Input() iconTone: Tone | null = null;\n\n get iconClass(): string {\n return this.iconTone ? toneText(this.iconTone) : 'text-text-secondary';\n }\n}\n","<div class=\"card-common\">\n <div class=\"flex items-center gap-normal mb-large\">\n @if (icon) {\n <fx-ui-hero-icon [ngClass]=\"iconClass\" [icon]=\"icon\" [size]=\"18\"></fx-ui-hero-icon>\n }\n <span class=\"txt-heading-06\">{{ title }}</span>\n </div>\n <ng-content></ng-content>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Tone, toneText } from '../../../core/value-tone.util';\n\n/**\n * Label-over-value field for detail panels. The label uses txt-field-label\n * with its baked-in margin neutralised (the known mb-1 alignment gotcha) —\n * spacing is owned by this component.\n */\n@Component({\n selector: 'fx-ui-info-field',\n standalone: false,\n templateUrl: './info-field.component.html',\n})\nexport class InfoFieldComponent {\n /** Caller-translated label. */\n @Input() label = '';\n @Input() value: string | number | null | undefined;\n /** Colours the value; null/undefined renders the primary text colour. */\n @Input() tone: Tone | null = null;\n /** Monospace value (hashes, paths). */\n @Input() mono = false;\n /** Placeholder when value is empty. */\n @Input() placeholder = '---';\n\n get displayValue(): string {\n if (this.value === null || this.value === undefined || this.value === '') {\n return this.placeholder;\n }\n return String(this.value);\n }\n\n get valueClass(): string {\n const toneClass = this.tone ? toneText(this.tone) : 'text-text-primary';\n return this.mono ? `${toneClass} font-mono break-all` : toneClass;\n }\n}\n","<div class=\"flex flex-col gap-small min-w-0\">\n <span class=\"txt-field-label !mb-0\">{{ label }}</span>\n <span class=\"txt-default\" [ngClass]=\"valueClass\">{{ displayValue }}</span>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Tone, toneBadge } from '../../../core/value-tone.util';\n\nexport interface FxSeverityBadge {\n key: string;\n label: string | number;\n tone: Tone | null;\n}\n\n/**\n * Compact total/critical/high/medium(/low) badge cluster used in table cells.\n * Pass counts via [stats]; missing fields are skipped. Labels are numbers, so\n * no i18n is involved; the total badge renders neutral.\n */\n@Component({\n selector: 'fx-ui-severity-badges',\n standalone: false,\n templateUrl: './severity-badges.component.html',\n})\nexport class SeverityBadgesComponent {\n @Input() stats: {\n total?: number;\n critical?: number;\n high?: number;\n medium?: number;\n low?: number;\n } | null = null;\n /** Show zero-count badges (default true, mirrors the table-cell usage). */\n @Input() showZero = true;\n /** Append the severity letter to counts (\"3C\", \"5H\", \"2M\") per the report design. */\n @Input() suffixed = false;\n @Output() badgeClick = new EventEmitter<string>();\n\n private static readonly TONES: Record<string, Tone | null> = {\n total: null,\n critical: 'critical',\n high: 'danger',\n medium: 'warning',\n low: 'success',\n };\n\n get badges(): FxSeverityBadge[] {\n const s = this.stats ?? {};\n return (['total', 'critical', 'high', 'medium', 'low'] as const)\n .filter((key) => s[key] !== undefined && (this.showZero || Number(s[key]) > 0))\n .map((key) => {\n const count = Number(s[key]) || 0;\n const label =\n this.suffixed && key !== 'total' ? `${count}${key.charAt(0).toUpperCase()}` : count;\n return { key, label, tone: SeverityBadgesComponent.TONES[key] };\n });\n }\n\n badgeClass(badge: FxSeverityBadge): string {\n return badge.tone ? toneBadge(badge.tone) : 'bg-bg-hover text-text-primary';\n }\n}\n","<div class=\"flex items-center gap-small\">\n @for (badge of badges; track badge.key) {\n <button\n type=\"button\"\n class=\"px-2 py-0.5 rounded-full txt-utility-caption font-medium cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50\"\n [ngClass]=\"badgeClass(badge)\"\n [attr.aria-label]=\"badge.key + ': ' + badge.label\"\n (click)=\"badgeClick.emit(badge.key)\"\n >{{ badge.label }}</button>\n }\n</div>\n","import { Component, ContentChild, Input, TemplateRef, ViewChild, AfterViewInit } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { BaseMasterDetailComponent } from '../../../core/components/base-master-detail.component';\n\nlet nextUid = 0;\n\n/**\n * Two-column master-detail shell driven by a BaseMasterDetailComponent.\n * The host page projects its own header/filters and supplies templates for\n * the parts that vary per entity:\n *\n * <fx-ui-master-detail [table]=\"this\" [emptyMessage]=\"'noData' | translate\">\n * <div mdHeader>…title / stat cards…</div>\n * <div mdFilters>…search bar / filter chips…</div>\n * <ng-template #row let-item let-selected=\"selected\">…row body…</ng-template>\n * <ng-template #detail let-detail>…detail pane…</ng-template>\n * </fx-ui-master-detail>\n *\n * The list behaves as a single-select listbox: the selected option is the\n * tab stop, ArrowUp/Down/Home/End move the selection.\n */\n@Component({\n selector: 'fx-ui-master-detail',\n standalone: false,\n templateUrl: './master-detail.component.html',\n styleUrl: './master-detail.component.css',\n})\nexport class MasterDetailComponent implements AfterViewInit {\n @Input() table!: BaseMasterDetailComponent<any>;\n /** Fixed list-pane width on lg+ viewports (stacked full-width below). */\n @Input() listWidth = '420px';\n @Input() maxListHeight = '640px';\n @Input() pageSizeOptions = [5, 10, 20, 50];\n /** Labels come in via inputs — the lib carries no i18n. */\n @Input() emptyMessage = 'No data';\n @Input() listLabel = '';\n @Input() skeletonCards = 3;\n\n @ContentChild('row') rowTemplate!: TemplateRef<any>;\n @ContentChild('detail') detailTemplate!: TemplateRef<any>;\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n\n readonly uid = `fx-md-${nextUid++}`;\n\n ngAfterViewInit(): void {\n // The paginator lives in this view, not the host page's, so the host's\n // @ViewChild(MatPaginator) never finds it. Hand it to the table so\n // refresh() keeps resetting pageIndex.\n if (this.table) {\n this.table.paginator = this.paginator;\n }\n }\n\n isSelected(row: any): boolean {\n return this.table.idOf(row) === this.table.selectedId;\n }\n\n optionId(index: number): string {\n return `${this.uid}-opt-${index}`;\n }\n\n onKeydown(event: KeyboardEvent, index: number): void {\n const rows = this.table.dataSource.data || [];\n if (!rows.length) {\n return;\n }\n let next: number;\n switch (event.key) {\n case 'ArrowDown':\n next = Math.min(index + 1, rows.length - 1);\n break;\n case 'ArrowUp':\n next = Math.max(index - 1, 0);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = rows.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n if (next === index) {\n return;\n }\n this.table.selectItem(rows[next]);\n const el = document.getElementById(this.optionId(next));\n el?.focus();\n el?.scrollIntoView({ block: 'nearest' });\n }\n}\n","<div class=\"flex flex-col lg:flex-row items-start gap-xl\" [style.--fx-md-list-width]=\"listWidth\">\n <!-- Master: list pane -->\n <div class=\"fx-md-list card-common\">\n <ng-content select=\"[mdHeader]\"></ng-content>\n <ng-content select=\"[mdFilters]\"></ng-content>\n <div\n class=\"flex flex-col gap-normal overflow-auto pr-xs\"\n [style.maxHeight]=\"maxListHeight\"\n role=\"listbox\"\n [attr.aria-label]=\"listLabel || null\"\n >\n @if (table.loading) {\n <fx-ui-skeleton-list [rows]=\"table.pageSize\"></fx-ui-skeleton-list>\n } @else {\n @for (row of table.dataSource.data; track table.idOf(row); let i = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [id]=\"optionId(i)\"\n [attr.aria-selected]=\"isSelected(row)\"\n [tabindex]=\"isSelected(row) ? 0 : -1\"\n (click)=\"table.selectItem(row)\"\n (keydown)=\"onKeydown($event, i)\"\n class=\"text-left rounded-lg border p-semi transition-colors\"\n [ngClass]=\"\n isSelected(row)\n ? 'border-gradient-primary-start bg-gradient-primary-start/5'\n : 'border-border-default hover:border-border-interactive bg-bg-primary'\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"rowTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, selected: isSelected(row) }\"\n ></ng-container>\n </button>\n }\n @if (!table.dataSource.data.length) {\n <fx-ui-empty-state [message]=\"emptyMessage\"></fx-ui-empty-state>\n }\n }\n </div>\n <!-- No (page) binding: ngAfterViewInit hands this paginator to the table,\n whose own BaseTable subscription (running after this child's hook)\n wires page events — a binding here would double-fetch every change. -->\n <mat-paginator\n class=\"mt-normal\"\n [length]=\"table.total\"\n [pageSize]=\"table.pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n ></mat-paginator>\n </div>\n\n <!-- Detail pane -->\n <div class=\"w-full lg:flex-1 min-w-0\">\n @if (table.selected) {\n @if (table.detailBusy) {\n <fx-ui-skeleton-detail [cards]=\"skeletonCards\"></fx-ui-skeleton-detail>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"detailTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: table.detail, selected: table.selected }\"\n ></ng-container>\n }\n } @else {\n <div class=\"card-common flex items-center justify-center h-[300px]\">\n <fx-ui-empty-state [message]=\"emptyMessage\"></fx-ui-empty-state>\n </div>\n }\n </div>\n</div>\n","import { ButtonComponent } from './button/button.component';\nimport { ChartComponent } from './chart/chart.component';\nimport { CheckboxComponent } from './checkbox/checkbox.component';\nimport { CircleProgressBar } from './circle-progress-bar/circle-progress-bar.component';\nimport { DatetimePicker } from './datetime-picker/datetime-picker.component';\nimport { DndUploadComponent } from './dnd-upload/dnd-upload.component';\nimport { FlowConnection } from './flow-connection/flow-connection.component';\nimport { HeroIconComponent } from './hero-icon/hero-icon.component';\nimport { InputComponent } from './input/input.component';\nimport { LoadingPanel } from './loading-panel/loading-panel.component';\nimport { RadioButtonToggleComponent } from './radio-button-toggle/radio-button-toggle.component';\nimport { RadioButtonComponent } from './radio-button/radio-button.component';\nimport { RichTextAreaComponent } from './rich-text-area/rich-text-area.component';\nimport { SearchBarComponent } from './search-bar/search-bar.component';\nimport { SelectComponent } from './select/select.component';\nimport { SkeletonTableLoadingComponent } from './skeleton-table-loading/skeleton-table-loading.component';\nimport { SliderComponent } from './slider/slider.component';\nimport { SwitchComponent } from './switch/switch.component';\nimport { TabComponent } from './tab-component/tab.component';\nimport { TabGroupComponent } from './tab-group/tab-group.component';\nimport { TableCell } from './table-cell/table-cell.component';\nimport { TagComponent } from './tag/tag.component';\nimport { ToastContainerComponent } from './toast-container/toast-container.component';\nimport { ToastComponent } from './toast/toast.component';\nimport { TreeDiagram } from './tree-diagram/tree-diagram.component';\nimport { KanbanBoardComponent } from './kanban-board/kanban-board.component';\nimport { DrawerComponent } from './drawer/drawer.component';\nimport { SkeletonListComponent } from './skeleton-list/skeleton-list.component';\nimport { SkeletonDetailComponent } from './skeleton-detail/skeleton-detail.component';\nimport { StatCardsComponent } from './stat-cards/stat-cards.component';\nimport { EmptyStateComponent } from './empty-state/empty-state.component';\nimport { FilterChipsComponent } from './filter-chips/filter-chips.component';\nimport { MeterComponent } from './meter/meter.component';\nimport { SectionCardComponent } from './section-card/section-card.component';\nimport { InfoFieldComponent } from './info-field/info-field.component';\nimport { SeverityBadgesComponent } from './severity-badges/severity-badges.component';\nimport { MasterDetailComponent } from './master-detail/master-detail.component';\n\nexport { ButtonComponent } from './button/button.component';\nexport { ChartComponent } from './chart/chart.component';\nexport { CheckboxComponent } from './checkbox/checkbox.component';\nexport { CircleProgressBar } from './circle-progress-bar/circle-progress-bar.component';\nexport { FlowConnection } from './flow-connection/flow-connection.component';\nexport { RichTextAreaComponent } from './rich-text-area/rich-text-area.component';\nexport { SkeletonTableLoadingComponent } from './skeleton-table-loading/skeleton-table-loading.component';\nexport { TreeDiagram } from './tree-diagram/tree-diagram.component';\nexport { DatetimePicker } from './datetime-picker/datetime-picker.component';\nexport { DndUploadComponent } from './dnd-upload/dnd-upload.component';\nexport { HeroIconComponent } from './hero-icon/hero-icon.component';\nexport { InputComponent } from './input/input.component';\nexport { LoadingPanel } from './loading-panel/loading-panel.component';\nexport { RadioButtonToggleComponent } from './radio-button-toggle/radio-button-toggle.component';\nexport { RadioButtonComponent } from './radio-button/radio-button.component';\nexport { SearchBarComponent } from './search-bar/search-bar.component';\nexport { SelectComponent } from './select/select.component';\nexport { SliderComponent } from './slider/slider.component';\nexport { SwitchComponent } from './switch/switch.component';\nexport { TabComponent } from './tab-component/tab.component';\nexport { TabGroupComponent } from './tab-group/tab-group.component';\nexport { TagComponent } from './tag/tag.component';\nexport { ToastContainerComponent } from './toast-container/toast-container.component';\nexport { ToastComponent } from './toast/toast.component';\nexport { TableCell } from './table-cell/table-cell.component';\nexport { KanbanBoardComponent } from './kanban-board/kanban-board.component';\nexport { DrawerComponent } from './drawer/drawer.component';\nexport type { DrawerItem } from './drawer/drawer.types';\nexport { SkeletonListComponent } from './skeleton-list/skeleton-list.component';\nexport { SkeletonDetailComponent } from './skeleton-detail/skeleton-detail.component';\nexport { StatCardsComponent } from './stat-cards/stat-cards.component';\nexport type { FxStatCard } from './stat-cards/stat-cards.component';\nexport { EmptyStateComponent } from './empty-state/empty-state.component';\nexport { FilterChipsComponent } from './filter-chips/filter-chips.component';\nexport type { FxFilterChipOption } from './filter-chips/filter-chips.component';\nexport { MeterComponent } from './meter/meter.component';\nexport { SectionCardComponent } from './section-card/section-card.component';\nexport { InfoFieldComponent } from './info-field/info-field.component';\nexport { SeverityBadgesComponent } from './severity-badges/severity-badges.component';\nexport type { FxSeverityBadge } from './severity-badges/severity-badges.component';\nexport { MasterDetailComponent } from './master-detail/master-detail.component';\n\nexport const FX_COMPONENTS = [\n InputComponent,\n SelectComponent,\n RadioButtonComponent,\n CheckboxComponent,\n DndUploadComponent,\n ButtonComponent,\n RadioButtonToggleComponent,\n DatetimePicker,\n LoadingPanel,\n SearchBarComponent,\n TabGroupComponent,\n TabComponent,\n HeroIconComponent,\n ToastComponent,\n ToastContainerComponent,\n TagComponent,\n ChartComponent,\n SliderComponent,\n SwitchComponent,\n RichTextAreaComponent,\n SkeletonTableLoadingComponent,\n FlowConnection,\n CircleProgressBar,\n TreeDiagram,\n TableCell,\n KanbanBoardComponent,\n DrawerComponent,\n SkeletonListComponent,\n SkeletonDetailComponent,\n StatCardsComponent,\n EmptyStateComponent,\n FilterChipsComponent,\n MeterComponent,\n SectionCardComponent,\n InfoFieldComponent,\n SeverityBadgesComponent,\n MasterDetailComponent,\n];\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport _ from 'lodash';\n\n@Component({\n selector: 'fx-ui-confirmation-dialog',\n standalone: false,\n templateUrl: './confirmation.component.html',\n styleUrl: './confirmation.component.scss',\n})\nexport class ConfirmationDialogComponent {\n loading = false;\n title = '';\n message = '';\n cancelLabel = 'Cancel';\n confirmLabel = 'Submit';\n\n constructor(\n private ref: MatDialogRef<ConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public bindings: any\n ) {\n this.title = _.get(bindings, 'title');\n this.message = _.get(bindings, 'message');\n this.cancelLabel = _.get(bindings, 'cancelLabel');\n this.confirmLabel = _.get(bindings, 'confirmLabel');\n }\n\n async accept() {\n this.loading = true;\n if (_.get(this.bindings, 'callback')) {\n await this.bindings.callback();\n this.loading = false;\n }\n this.ref.close(true);\n }\n\n cancel() {\n this.ref.close(false);\n }\n}\n","<div animate.enter=\"fade-in-animation\" class=\"dialog-container\">\n <h1 mat-dialog-title class=\"txt-heading-05 dialog-header\">{{ title }}</h1>\n <mat-dialog-content>\n <div class=\"txt-default\">{{ message }}</div>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <fx-ui-button class=\"mr-1\" [label]=\"cancelLabel\" (clicked)=\"cancel()\"></fx-ui-button>\n <fx-ui-button\n buttonVariant=\"primary\"\n class=\"mr-1\"\n [label]=\"confirmLabel\"\n (clicked)=\"accept()\"\n [loading]=\"loading\"\n class=\"min-w-[100px]\"\n ></fx-ui-button>\n </mat-dialog-actions>\n</div>\n","import { ConfirmationDialogComponent } from \"./confirmation/confirmation.component\";\n\nexport { ConfirmationDialogComponent } from \"./confirmation/confirmation.component\";\n\nexport const DIALOGS_COMPONENT = [\n ConfirmationDialogComponent\n]","import { NgModule, importProvidersFrom } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { MATERIAL_MODULE } from './material.module';\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker';\nimport { FX_COMPONENTS } from './components';\nimport { DIALOGS_COMPONENT } from './dialogs';\nimport { HasPermissionDirective } from '../core/directives/has-permission.directive';\nimport { NgHeroiconsModule } from '@dimaslz/ng-heroicons';\nimport { NgxEchartsModule } from 'ngx-echarts';\nimport { OWL_DATE_TIME_FORMATS } from '@danielmoncada/angular-datetime-picker';\nimport { TrimOnBlurDirective } from '../core/directives/trim.directive';\nimport { Vflow } from 'ngx-vflow';\nimport { OwlMomentDateTimeModule } from '@danielmoncada/angular-datetime-picker-moment-adapter';\n\nexport const MY_MOMENT_FORMATS = {\n parseInput: 'YYYY-MM-DD',\n fullPickerInput: 'YYYY-MM-DD HH:mm',\n datePickerInput: 'YYYY-MM-DD',\n timePickerInput: 'HH:mm',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY',\n};\n\n@NgModule({\n declarations: [...FX_COMPONENTS, ...DIALOGS_COMPONENT],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n OwlDateTimeModule,\n OwlNativeDateTimeModule,\n OwlMomentDateTimeModule,\n HasPermissionDirective,\n TrimOnBlurDirective,\n NgHeroiconsModule,\n ...Vflow,\n NgxEchartsModule.forRoot({ echarts: () => import('echarts') }),\n ...MATERIAL_MODULE,\n ],\n exports: [\n // Component\n ...FX_COMPONENTS,\n ...DIALOGS_COMPONENT,\n // Module\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n OwlDateTimeModule,\n OwlNativeDateTimeModule,\n HasPermissionDirective,\n NgHeroiconsModule,\n ...MATERIAL_MODULE,\n ],\n providers: [\n importProvidersFrom(NgHeroiconsModule.forRoot()),\n { provide: OWL_DATE_TIME_FORMATS, useValue: MY_MOMENT_FORMATS },\n ],\n})\nexport class UiModule { }\n","/*\n * Public API Surface of ui\n */\n\nexport * from './lib/core/components/base.component';\nexport * from './lib/core/components/base-table.component';\nexport * from './lib/core/components/base-master-detail.component';\nexport * from './lib/core/components/base-dialog.component';\nexport * from './lib/core/services/http-wrapper.service';\nexport * from './lib/core/services/toastr.service';\nexport * from './lib/core/services/loading.service';\nexport * from './lib/core/resolvers/base-resolver.resolver';\nexport * from './lib/core/resolvers/fx-list.resolver';\nexport * from './lib/core/services/api-factory';\nexport * from './lib/core/services/realtime-table-sync';\nexport * from './lib/core/utils';\nexport * from './lib/core/value-tone.util';\nexport * from './lib/core/validators';\nexport * from './lib/translation/translation.module';\nexport * from './lib/translation/translation.service';\nexport * from './lib/core/directives/has-permission.directive';\nexport * from './lib/core/directives/trim.directive';\nexport * from './lib/core/guards/permissions.guard';\nexport * from './lib/core/services/permissions.service';\nexport * from './lib/core/services/storage.service';\nexport * from './lib/core/interceptors/auth.interceptor';\nexport * from './lib/core/services/auth-state.service';\nexport * from './lib/core/services/breadcrumb.service';\nexport * from './lib/core/services/quill-style-loader.service';\nexport * from './lib/core/services/theme.service';\nexport * from './lib/core/services/notification.service';\n\nexport * from './lib/ui/ui.module';\nexport * from './lib/ui/components/button/button.component';\nexport * from './lib/ui/components/checkbox/checkbox.component';\nexport * from './lib/ui/components/datetime-picker/datetime-picker.component';\nexport * from './lib/ui/components/dnd-upload/dnd-upload.component';\nexport * from './lib/ui/components/input/input.component';\nexport * from './lib/ui/components/radio-button/radio-button.component';\nexport * from './lib/ui/components/radio-button-toggle/radio-button-toggle.component';\nexport * from './lib/ui/components/select/select.component';\nexport * from './lib/ui/components/loading-panel/loading-panel.component';\nexport * from './lib/ui/components/tab-group/tab-group.component';\nexport * from './lib/ui/components/tab-component/tab.component';\nexport * from './lib/ui/components/search-bar/search-bar.component';\nexport * from './lib/ui/components/hero-icon/hero-icon.component';\nexport * from './lib/ui/components/toast/toast.component';\nexport * from './lib/ui/components/toast-container/toast-container.component';\nexport * from './lib/ui/components/tag/tag.component';\nexport * from './lib/ui/components/chart/chart.component';\nexport * from './lib/ui/components/slider/slider.component';\nexport * from './lib/ui/dialogs/confirmation/confirmation.component';\nexport * from './lib/ui/components/switch/switch.component';\nexport * from './lib/ui/components/rich-text-area/rich-text-area.component';\nexport * from './lib/ui/components/skeleton-table-loading/skeleton-table-loading.component';\nexport * from './lib/ui/components/flow-connection/flow-connection.component';\nexport * from './lib/ui/components/circle-progress-bar/circle-progress-bar.component';\nexport * from './lib/ui/components/tree-diagram/tree-diagram.component';\nexport * from './lib/ui/components/table-cell/table-cell.component';\nexport * from './lib/ui/components/kanban-board/kanban-board.component';\nexport * from './lib/ui/components/kanban-board/kanban-board.types';\nexport * from './lib/ui/components/drawer/drawer.component';\nexport * from './lib/ui/components/skeleton-list/skeleton-list.component';\nexport * from './lib/ui/components/skeleton-detail/skeleton-detail.component';\nexport * from './lib/ui/components/stat-cards/stat-cards.component';\nexport * from './lib/ui/components/empty-state/empty-state.component';\nexport * from './lib/ui/components/filter-chips/filter-chips.component';\nexport * from './lib/ui/components/meter/meter.component';\nexport * from './lib/ui/components/section-card/section-card.component';\nexport * from './lib/ui/components/info-field/info-field.component';\nexport * from './lib/ui/components/severity-badges/severity-badges.component';\nexport * from './lib/ui/components/master-detail/master-detail.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.HeroIconComponent","i1.ToastComponent","i2.FxToastrService","i3.HttpWrapper","i1.PermissionService","i2","i1.AuthStateService","i3.HeroIconComponent","i1.TrimOnBlurDirective","i4","i5.HeroIconComponent","i1.HeroIconComponent","i3","i4.HeroIconComponent","i3.SkeletonListComponent","i4.SkeletonDetailComponent","i5.EmptyStateComponent","i2.ButtonComponent","i40","i41","i48","i58","i1.InputComponent","i2.SelectComponent","i3.RadioButtonComponent","i4.CheckboxComponent","i5.DndUploadComponent","i6.ButtonComponent","i7.RadioButtonToggleComponent","i8.DatetimePicker","i9.LoadingPanel","i10.SearchBarComponent","i11.TabGroupComponent","i12.TabComponent","i13.HeroIconComponent","i14.ToastComponent","i15.ToastContainerComponent","i16.TagComponent","i17.ChartComponent","i18.SliderComponent","i19.SwitchComponent","i20.RichTextAreaComponent","i21.SkeletonTableLoadingComponent","i22.FlowConnection","i23.CircleProgressBar","i24.TreeDiagram","i25.TableCell","i26.KanbanBoardComponent","i27.DrawerComponent","i28.SkeletonListComponent","i29.SkeletonDetailComponent","i30.StatCardsComponent","i31.EmptyStateComponent","i32.FilterChipsComponent","i33.MeterComponent","i34.SectionCardComponent","i35.InfoFieldComponent","i36.SeverityBadgesComponent","i37.MasterDetailComponent","i38.ConfirmationDialogComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"foxeltech-angular-ui.mjs","sources":["../../../projects/ui/src/lib/core/components/base.component.ts","../../../projects/ui/src/lib/ui/components/hero-icon/hero-icon.component.ts","../../../projects/ui/src/lib/ui/components/hero-icon/hero-icon.component.html","../../../projects/ui/src/lib/ui/components/toast/toast.component.ts","../../../projects/ui/src/lib/ui/components/toast/toast.component.html","../../../projects/ui/src/lib/ui/components/toast-container/toast-container.component.ts","../../../projects/ui/src/lib/ui/components/toast-container/toast-container.component.html","../../../projects/ui/src/lib/core/services/toastr.service.ts","../../../projects/ui/src/lib/core/utils.ts","../../../projects/ui/src/lib/core/services/http-wrapper.service.ts","../../../projects/ui/src/lib/core/components/base-table.component.ts","../../../projects/ui/src/lib/core/components/base-master-detail.component.ts","../../../projects/ui/src/lib/core/components/base-dialog.component.ts","../../../projects/ui/src/lib/core/services/loading.service.ts","../../../projects/ui/src/lib/core/resolvers/base-resolver.resolver.ts","../../../projects/ui/src/lib/core/services/storage.service.ts","../../../projects/ui/src/lib/core/resolvers/fx-list.resolver.ts","../../../projects/ui/src/lib/core/services/api-factory.ts","../../../projects/ui/src/lib/core/services/realtime-table-sync.ts","../../../projects/ui/src/lib/core/value-tone.util.ts","../../../projects/ui/src/lib/core/validators.ts","../../../projects/ui/src/lib/translation/translation.module.ts","../../../projects/ui/src/lib/translation/translation.service.ts","../../../projects/ui/src/lib/core/services/permissions.service.ts","../../../projects/ui/src/lib/core/directives/has-permission.directive.ts","../../../projects/ui/src/lib/core/directives/trim.directive.ts","../../../projects/ui/src/lib/core/guards/permissions.guard.ts","../../../projects/ui/src/lib/core/services/auth-state.service.ts","../../../projects/ui/src/lib/core/interceptors/auth.interceptor.ts","../../../projects/ui/src/lib/core/services/breadcrumb.service.ts","../../../projects/ui/src/lib/core/services/theme.service.ts","../../../projects/ui/src/lib/core/services/notification.service.ts","../../../projects/ui/src/lib/ui/components/button/button.component.ts","../../../projects/ui/src/lib/ui/components/button/button.component.html","../../../projects/ui/src/lib/ui/dialogs/confirmation/confirmation.component.ts","../../../projects/ui/src/lib/ui/dialogs/confirmation/confirmation.component.html","../../../projects/ui/src/lib/core/services/dialog.service.ts","../../../projects/ui/src/lib/ui/components/fx-component.component.ts","../../../projects/ui/src/lib/ui/components/checkbox/checkbox.component.ts","../../../projects/ui/src/lib/ui/components/checkbox/checkbox.component.html","../../../projects/ui/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.ts","../../../projects/ui/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.html","../../../projects/ui/src/lib/ui/components/datetime-picker/datetime-picker.component.ts","../../../projects/ui/src/lib/ui/components/datetime-picker/datetime-picker.component.html","../../../projects/ui/src/lib/ui/components/dnd-upload/dnd-upload.component.ts","../../../projects/ui/src/lib/ui/components/dnd-upload/dnd-upload.component.html","../../../projects/ui/src/lib/ui/components/input/input.component.ts","../../../projects/ui/src/lib/ui/components/input/input.component.html","../../../projects/ui/src/lib/ui/components/loading-panel/loading-panel.component.ts","../../../projects/ui/src/lib/ui/components/loading-panel/loading-panel.component.html","../../../projects/ui/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.ts","../../../projects/ui/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html","../../../projects/ui/src/lib/ui/components/radio-button/radio-button.component.ts","../../../projects/ui/src/lib/ui/components/radio-button/radio-button.component.html","../../../projects/ui/src/lib/ui/components/search-bar/search-bar.component.ts","../../../projects/ui/src/lib/ui/components/search-bar/search-bar.component.html","../../../projects/ui/src/lib/ui/components/select/select.component.ts","../../../projects/ui/src/lib/ui/components/select/select.component.html","../../../projects/ui/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.ts","../../../projects/ui/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html","../../../projects/ui/src/lib/ui/components/slider/slider.component.ts","../../../projects/ui/src/lib/ui/components/slider/slider.component.html","../../../projects/ui/src/lib/ui/components/switch/switch.component.ts","../../../projects/ui/src/lib/ui/components/switch/switch.component.html","../../../projects/ui/src/lib/ui/components/tab-component/tab.component.ts","../../../projects/ui/src/lib/ui/components/tab-component/tab.component.html","../../../projects/ui/src/lib/ui/components/tab-group/tab-group.component.ts","../../../projects/ui/src/lib/ui/components/tab-group/tab-group.component.html","../../../projects/ui/src/lib/ui/components/table-cell/table-cell.component.ts","../../../projects/ui/src/lib/ui/components/table-cell/table-cell.component.html","../../../projects/ui/src/lib/ui/components/tag/tag.component.ts","../../../projects/ui/src/lib/ui/components/tag/tag.component.html","../../../projects/ui/src/lib/ui/components/tree-diagram/tree-diagram.component.ts","../../../projects/ui/src/lib/ui/components/tree-diagram/tree-diagram.component.html","../../../projects/ui/src/lib/ui/components/kanban-board/kanban-board.component.ts","../../../projects/ui/src/lib/ui/components/kanban-board/kanban-board.component.html","../../../projects/ui/src/lib/ui/components/drawer/drawer.component.ts","../../../projects/ui/src/lib/ui/components/drawer/drawer.component.html","../../../projects/ui/src/lib/ui/components/skeleton-list/skeleton-list.component.ts","../../../projects/ui/src/lib/ui/components/skeleton-list/skeleton-list.component.html","../../../projects/ui/src/lib/ui/components/skeleton-detail/skeleton-detail.component.ts","../../../projects/ui/src/lib/ui/components/skeleton-detail/skeleton-detail.component.html","../../../projects/ui/src/lib/ui/components/stat-cards/stat-cards.component.ts","../../../projects/ui/src/lib/ui/components/stat-cards/stat-cards.component.html","../../../projects/ui/src/lib/ui/components/empty-state/empty-state.component.ts","../../../projects/ui/src/lib/ui/components/empty-state/empty-state.component.html","../../../projects/ui/src/lib/ui/components/filter-chips/filter-chips.component.ts","../../../projects/ui/src/lib/ui/components/filter-chips/filter-chips.component.html","../../../projects/ui/src/lib/ui/components/meter/meter.component.ts","../../../projects/ui/src/lib/ui/components/meter/meter.component.html","../../../projects/ui/src/lib/ui/components/section-card/section-card.component.ts","../../../projects/ui/src/lib/ui/components/section-card/section-card.component.html","../../../projects/ui/src/lib/ui/components/info-field/info-field.component.ts","../../../projects/ui/src/lib/ui/components/info-field/info-field.component.html","../../../projects/ui/src/lib/ui/components/severity-badges/severity-badges.component.ts","../../../projects/ui/src/lib/ui/components/severity-badges/severity-badges.component.html","../../../projects/ui/src/lib/ui/components/master-detail/master-detail.component.ts","../../../projects/ui/src/lib/ui/components/master-detail/master-detail.component.html","../../../projects/ui/src/lib/ui/components/menu/menu.component.ts","../../../projects/ui/src/lib/ui/components/menu/menu.component.html","../../../projects/ui/src/lib/ui/components/index.ts","../../../projects/ui/src/lib/ui/dialogs/index.ts","../../../projects/ui/src/lib/ui/ui.module.ts","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/foxeltech-angular-ui.ts"],"sourcesContent":["import { DestroyRef, Directive, Injector, OnDestroy, inject } from '@angular/core';\n\n@Directive()\nexport abstract class BaseComponent implements OnDestroy {\n protected injector: Injector;\n /** Teardown hook for subscriptions: takeUntilDestroyed(this.destroyRef). */\n protected destroyRef = inject(DestroyRef);\n\n constructor(injector?: Injector) {\n // Some subclasses historically passed non-injector values (e.g. dialog\n // data) to super(); fall back to the component's own injector so\n // this.injector.get(...) always works.\n this.injector = injector instanceof Injector ? injector : inject(Injector);\n }\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method -- subclasses across host apps call super.ngOnDestroy(); removing this breaks them at runtime\n ngOnDestroy(): void {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n inject,\n isDevMode,\n input\n} from '@angular/core';\n\n/**\n * Where the generated Heroicons sprite is served from. Defaults to\n * 'fx-icons.svg' at the app base — consumers copy it from the package via an\n * angular.json assets glob (same pattern as the lib fonts):\n * { \"input\": \"node_modules/@foxeltech/angular-ui\", \"glob\": \"fx-icons.svg\", \"output\": \".\" }\n */\nexport const FX_ICON_SPRITE_URL = new InjectionToken<string>('FX_ICON_SPRITE_URL', {\n providedIn: 'root',\n factory: () => 'fx-icons.svg',\n});\n\nlet spriteChecked = false;\n\n/**\n * Heroicons rendered from the self-hosted sprite (see\n * scripts/generate-icon-sprite.mjs) — every 24px outline/solid icon is\n * available by name with no per-icon registration and no runtime icon\n * library. API kept compatible with the old @dimaslz/ng-heroicons wrapper.\n */\n@Component({\n selector: 'fx-ui-hero-icon',\n templateUrl: './hero-icon.component.html',\n styleUrl: './hero-icon.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeroIconComponent {\n readonly stroke = input(1.5);\n readonly icon = input<string>();\n readonly solid = input<boolean>();\n readonly outline = input<boolean>();\n readonly size = input<number>();\n readonly color = input<string>();\n readonly class = input<string>();\n\n readonly spriteUrl = inject(FX_ICON_SPRITE_URL);\n\n constructor() {\n // One warning per app when the sprite asset was not copied — otherwise\n // every icon just renders blank and nobody knows why.\n if (isDevMode() && !spriteChecked && typeof fetch === 'function') {\n spriteChecked = true;\n fetch(this.spriteUrl, { method: 'HEAD' })\n .then((r) => {\n if (!r.ok) throw new Error(String(r.status));\n })\n .catch(() =>\n console.warn(\n `[fx-ui-hero-icon] Sprite '${this.spriteUrl}' not found — add the fx-icons.svg ` +\n `assets glob from @foxeltech/angular-ui to angular.json (see FX_ICON_SPRITE_URL docs).`,\n ),\n );\n }\n }\n\n get href(): string {\n const name = this.solid() ? `${this.icon()}-solid` : this.icon();\n return `${this.spriteUrl}#${name}`;\n }\n}\n","<svg\n [attr.width]=\"size() || 24\"\n [attr.height]=\"size() || 24\"\n [attr.stroke-width]=\"solid() ? null : stroke()\"\n [style.color]=\"color() || null\"\n [class]=\"class()\"\n aria-hidden=\"true\"\n>\n <use [attr.href]=\"href\" />\n</svg>\n","import { Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\n@Component({\n selector: 'fx-ui-toast',\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass, HeroIconComponent],\n})\nexport class ToastComponent {\n readonly toastId = input.required<number>();\n @Input() title?: string = '';\n readonly message = input('');\n readonly type = input<'success' | 'error' | 'info' | 'warning'>();\n}\n","<div\n animate.enter=\"horizontal-fade-in-animation\"\n animate.leave=\"horizontal-fade-out-animation\"\n [attr.role]=\"type() === 'error' ? 'alert' : 'status'\"\n class=\"flex border-l-[3px] items-center bg-bg-primary gap-semi min-w-[250px] max-w-[400px] px-large py-semi rounded shadow-lg transition-all duration-300 ease-in-out transform opacity-100 translate-y-0\"\n [ngClass]=\"{\n 'border-success': type() === 'success',\n 'border-critical': type() === 'error',\n 'border-warning': type() === 'warning',\n 'border-information': type() === 'info'\n }\"\n >\n <div class=\"\" aria-hidden=\"true\">\n @switch (type()) { @case('success') {\n <fx-ui-hero-icon\n icon=\"check-circle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-success\"\n ></fx-ui-hero-icon>\n } @case('error') {\n <fx-ui-hero-icon\n icon=\"exclamation-circle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-critical\"\n ></fx-ui-hero-icon>\n } @case('warning') {\n <fx-ui-hero-icon\n icon=\"exclamation-triangle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-warning\"\n ></fx-ui-hero-icon>\n } @default {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [solid]=\"true\"\n [size]=\"30\"\n class=\"text-information\"\n ></fx-ui-hero-icon>\n } }\n </div>\n\n <div class=\"flex flex-col\">\n @if (title) {\n <strong class=\"txt-field-label\">{{ title }}</strong>\n }\n <p class=\"txt-default\">{{ message() }}</p>\n </div>\n </div>\n","import { ChangeDetectorRef, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { ToastComponent } from '../toast/toast.component';\n// import { ToastData } from '../../../../public-api';\n\n@Component({\n selector: 'fx-ui-toast-container',\n templateUrl: './toast-container.component.html',\n styleUrl: './toast-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ToastComponent],\n})\nexport class ToastContainerComponent {\n toasts: any[] = [];\n\n constructor(private ref: ChangeDetectorRef) {}\n\n addToast(toast: any) {\n this.toasts.push(toast);\n this.ref.detectChanges()\n setTimeout(() => this.removeToast(toast.id), 3000);\n }\n\n removeToast(id: number) {\n this.toasts = this.toasts.filter(t => t.id !== id);\n this.ref.detectChanges();\n }\n}\n","<div\n class=\"fixed top-5 right-5 flex flex-col items-end gap-3 z-[10000] pointer-events-none\"\n>\n @for (toast of toasts; track toast) {\n <fx-ui-toast\n class=\"pointer-events-auto\"\n [toastId]=\"toast.id\"\n [message]=\"toast.message\"\n [title]=\"toast.title\"\n [type]=\"toast.type\"\n ></fx-ui-toast>\n }\n</div>","import { Injectable, ApplicationRef, ComponentRef, Injector, createComponent } from '@angular/core';\nimport { ToastContainerComponent } from '../../ui/components/toast-container/toast-container.component';\n\nexport interface ToastData {\n id: number;\n message: string;\n title?: string;\n type: 'success' | 'error' | 'info' | 'warning';\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FxToastrService {\n private containerRef?: ComponentRef<ToastContainerComponent>;\n private idCounter = 0;\n private recentMessages = new Set<string>();\n\n constructor(private appRef: ApplicationRef) {\n this.ensureContainerExists();\n }\n\n private ensureContainerExists() {\n if (!this.containerRef) {\n this.containerRef = createComponent(ToastContainerComponent, {\n environmentInjector: this.appRef.injector,\n });\n\n this.appRef.attachView(this.containerRef.hostView);\n document.body.appendChild(this.containerRef.location.nativeElement);\n }\n }\n\n private show(message: string, type: ToastData['type'], title?: string) {\n const dedupeKey = `${type}:${message}`;\n if (this.recentMessages.has(dedupeKey)) {\n return;\n }\n this.recentMessages.add(dedupeKey);\n setTimeout(() => this.recentMessages.delete(dedupeKey), 2000);\n\n const toast: ToastData = {\n id: ++this.idCounter,\n message,\n title,\n type,\n };\n\n this.containerRef?.instance.addToast(toast);\n }\n\n success(message: string, title?: string) {\n this.show(message, 'success', title);\n }\n\n error(message: string, title?: string) {\n this.show(message, 'error', title);\n }\n\n info(message: string, title?: string) {\n this.show(message, 'info', title);\n }\n\n warning(message: string, title?: string) {\n this.show(message, 'warning', title);\n }\n}\n","import { Observable, firstValueFrom } from 'rxjs';\nimport { NgForm } from '@angular/forms';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { TagType } from '../../public-api';\n\nexport class FxUtils {\n /** Dot-path accessor (lodash _.get replacement — supports 'a.b.c'). */\n static get(obj: any, path: string, defaultValue?: any): any {\n if (obj == null) return defaultValue;\n let cur: any = obj;\n for (const key of path.split('.')) {\n if (cur == null) return defaultValue;\n cur = cur[key];\n }\n return cur === undefined ? defaultValue : cur;\n }\n\n /** Dot-path setter (lodash _.set replacement — creates missing objects). */\n static set(obj: any, path: string, value: any): any {\n const keys = path.split('.');\n let cur: any = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n if (cur[keys[i]] == null || typeof cur[keys[i]] !== 'object') cur[keys[i]] = {};\n cur = cur[keys[i]];\n }\n cur[keys[keys.length - 1]] = value;\n return obj;\n }\n\n /** Structural equality (lodash _.isEqual replacement for plain data). */\n static deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n const ka = Object.keys(a);\n const kb = Object.keys(b);\n if (ka.length !== kb.length) return false;\n return ka.every((k) => FxUtils.deepEqual(a[k], b[k]));\n }\n\n /** Deep clone for plain data (objects/arrays/Date); functions stay by reference. */\n static cloneDeep<T>(v: T): T {\n if (v === null || typeof v !== 'object') return v;\n if (v instanceof Date) return new Date(v.getTime()) as any;\n if (Array.isArray(v)) return v.map((x) => FxUtils.cloneDeep(x)) as any;\n const out: any = {};\n for (const k of Object.keys(v as any)) out[k] = FxUtils.cloneDeep((v as any)[k]);\n return out;\n }\n\n private static async preresolve(promises: any, value: any, key?: string) {\n if (key === 'callback' || key === 'socket' || key === 'listener') {\n promises.push(value);\n return;\n }\n if (value instanceof Function) {\n this.preresolve(promises, value());\n } else if (value instanceof Array) {\n const inpromises: any = [];\n value.forEach((v) => {\n this.preresolve(inpromises, v);\n });\n promises.push(Promise.all(inpromises));\n } else if (value instanceof Observable) {\n promises.push(firstValueFrom(value));\n } else if (value instanceof Promise) {\n promises.push(value);\n } else if (value instanceof Object) {\n promises.push(this.resolve(value));\n } else {\n promises.push(value);\n }\n }\n\n static async resolve(value: object) {\n const keys = [];\n const promises: any = [];\n for (const i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n keys.push(i);\n this.preresolve(promises, (value as any)[i], i);\n }\n }\n const values = await Promise.all(promises);\n const raw = {};\n keys.forEach((key: string, index: number) => {\n FxUtils.set(raw, key, values[index]);\n });\n return raw;\n }\n\n static isNotNull(obj: any): boolean {\n return !this.isNull(obj);\n }\n\n static isNull(obj: any): boolean {\n return obj === undefined || obj === null;\n }\n\n static isFunction(obj: any): boolean {\n return this.isNotNull(obj) && obj instanceof Function;\n }\n\n static isNotFunction(obj: any): boolean {\n return !this.isFunction(obj);\n }\n\n static isStringEmpty(obj: string): boolean {\n return this.isNull(obj) || obj === '';\n }\n\n static isStringNotEmpty(obj: string): boolean {\n return !this.isStringEmpty(obj);\n }\n\n static isArrayEmpty(obj: any[]): boolean {\n return this.isNull(obj) || obj.length === 0;\n }\n\n static isArrayNotEmpty(obj: any[]): boolean {\n return !this.isArrayEmpty(obj);\n }\n\n static replaceStartWithAsterisk(inputString: string, numToReplace: number): string {\n if (numToReplace >= inputString.length) {\n return '*'.repeat(inputString.length);\n } else if (numToReplace <= 0) {\n return inputString;\n } else {\n const asterisks = '*'.repeat(numToReplace);\n const remainingString = inputString.substring(numToReplace);\n return asterisks + remainingString;\n }\n }\n\n static checkInvalidField(form: NgForm): void {\n Object.keys(form.controls).forEach((field) => {\n const control = form.controls[field];\n control.markAsTouched({ onlySelf: true });\n });\n }\n\n static checkInlineErrorField(err: any, f: NgForm) {\n if (err) {\n Object.keys(err).forEach((field) => {\n const formControl = f.form.get(field);\n\n if (formControl) {\n const error = { apiError: err[field] };\n formControl.setErrors(error);\n }\n });\n }\n }\n\n static isSameCollection(collection: any[], compareCollection: any): boolean {\n const a = new Set(collection ?? []);\n const b = new Set(compareCollection ?? []);\n return a.size === b.size && [...a].every((x) => b.has(x));\n }\n\n static isSameValue(model: any, compareModel: any) {\n return FxUtils.deepEqual(model, compareModel);\n }\n\n static parseError(err: HttpErrorResponse) {\n const status = err?.status;\n\n switch (status) {\n case 401:\n return 'Session timeout. Please login again.';\n case 403:\n return 'You do not have permission to perform this action.';\n case 404:\n return 'The requested resource was not found.';\n case 408:\n return 'The request timed out. Please try again.';\n case 409:\n return 'A conflict occurred. Please refresh and try again.';\n case 413:\n return 'The uploaded data is too large.';\n case 415:\n return 'Unsupported media type. Please check the file format.';\n case 429:\n return 'Too many requests. Please wait a moment and try again.';\n case 500:\n return 'An internal server error occurred. Please try again later.';\n case 502:\n return 'The server is temporarily unavailable. Please try again later.';\n case 503:\n return 'The service is currently unavailable. Please try again later.';\n case 504:\n return 'The server took too long to respond. Please try again later.';\n }\n\n const message = this.isStringEmpty(err?.error?.errors ?? '')\n ? (err?.error?.message ?? 'Unknown Error')\n : err?.error?.errors;\n\n if (this.isStringEmpty(err?.error?.code)) {\n return message;\n }\n return `${err?.error?.code}: ${message}`;\n }\n\n /**\n * Resolve a theme channel triple (`--danger: 255 122 0`) to a CSS colour.\n * Pass `legacyCommaSyntax: true` for canvas/ECharts consumers: canvas paints\n * both forms, but zrender's colour parser can't read the CSS4 space syntax\n * and renders slices black on hover when given it.\n */\n static convertColorFromVariable(\n name: string,\n alpha = 1,\n options?: { legacyCommaSyntax?: boolean },\n ): string {\n const value = getComputedStyle(document.body)\n .getPropertyValue(name)\n .trim()\n .replace(/\\s+/g, ' ');\n if (options?.legacyCommaSyntax) {\n const [r, g, b] = value.replace(/[/,]/g, ' ').split(/\\s+/).filter(Boolean);\n if (r === undefined || g === undefined || b === undefined) {\n return `rgba(148, 163, 184, ${alpha})`;\n }\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return value ? `rgba(${value} / ${alpha})` : `rgba(255 255 255 / ${alpha})`;\n }\n\n static getTagClass(key: string, isCriticalExist = true): TagType {\n switch (key.toLowerCase()) {\n case 'error':\n case 'failed':\n case 'inactive':\n case 'critical':\n case 'stopped':\n return 'critical';\n case 'high':\n if (!isCriticalExist) {\n return 'critical';\n }\n return 'danger';\n case 'inprogress':\n case 'processing':\n case 'paused':\n case 'medium':\n case 'warning':\n return 'warning';\n case 'completed':\n case 'success':\n case 'active':\n case 'low':\n case 'running':\n return 'success';\n case 'queue':\n case 'waiting':\n case 'info':\n case 'system':\n return 'information';\n case 'discovery':\n return 'discovery';\n case 'disabled':\n default:\n return 'default';\n }\n }\n\n static validateEmail(value: string) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const isEmail = emailRegex.test(value);\n return isEmail;\n }\n\n /** Safe deep accessor with the org-wide empty placeholder. */\n static value(model: any, key: string, defaultValue: any = '---') {\n return FxUtils.get(model, key, defaultValue);\n }\n\n /**\n * Severity weight for ordering — kept next to getTagClass so ordering and\n * colouring can never drift apart.\n */\n static severityWeight(level: string): number {\n switch (String(level ?? '').toUpperCase()) {\n case 'CRITICAL':\n return 5;\n case 'HIGH':\n return 4;\n case 'MEDIUM':\n return 3;\n case 'LOW':\n return 2;\n case 'INFO':\n case 'INFORMATION':\n return 1;\n default:\n return 0;\n }\n }\n\n /** Org-wide date-time rendering (DD/MM/YYYY HH:mm:ss, local time). */\n static formatDateTime(time: string | Date): string {\n if (FxUtils.isNull(time)) return '';\n const d = time instanceof Date ? time : new Date(String(time).replace(' ', 'T'));\n if (isNaN(d.getTime())) return '';\n const p = (n: number) => String(n).padStart(2, '0');\n return `${p(d.getDate())}/${p(d.getMonth() + 1)}/${d.getFullYear()} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;\n }\n\n /** Seconds → compact duration (\"2d 4h\", \"3h 12m\", \"45s\"). */\n static formatDuration(totalSeconds: number): string {\n const sec = Number(totalSeconds);\n if (!Number.isFinite(sec) || sec < 0) return '';\n const d = Math.floor(sec / 86400);\n const h = Math.floor((sec % 86400) / 3600);\n const m = Math.floor((sec % 3600) / 60);\n const s = Math.floor(sec % 60);\n if (d > 0) return h > 0 ? `${d}d ${h}h` : `${d}d`;\n if (h > 0) return m > 0 ? `${h}h ${m}m` : `${h}h`;\n if (m > 0) return s > 0 ? `${m}m ${s}s` : `${m}m`;\n return `${s}s`;\n }\n\n /** Relative time within the last 24h (\"3 hours ago\"), else DD/MM/YYYY. */\n static formatRelative(time: string | Date): string {\n if (FxUtils.isNull(time)) return '';\n const d = time instanceof Date ? time : new Date(String(time).replace(' ', 'T'));\n if (isNaN(d.getTime())) return '';\n const diffMs = Date.now() - d.getTime();\n if (diffMs < 24 * 3600_000) {\n // Same wording moment.fromNow() produced for the < 24h range.\n const rtf = new Intl.RelativeTimeFormat('en', { numeric: 'auto' });\n const mins = Math.round(diffMs / 60_000);\n if (Math.abs(mins) < 60) return rtf.format(-mins, 'minute');\n return rtf.format(-Math.round(mins / 60), 'hour');\n }\n const p = (n: number) => String(n).padStart(2, '0');\n return `${p(d.getDate())}/${p(d.getMonth() + 1)}/${d.getFullYear()}`;\n }\n\n /**\n * Normalize a snake_case + protobuf-Long API payload for camelCase binding:\n * - genuine snake_case keys -> camelCase (data-as-key entries such as DLL\n * names like \"kernel32.dll\" are left untouched by the strict regex);\n * - Long-encoded numbers `{ high, low, unsigned }` -> plain number.\n */\n static camelizeDeep(input: any): any {\n if (Array.isArray(input)) {\n return input.map((v) => FxUtils.camelizeDeep(v));\n }\n if (input !== null && typeof input === 'object') {\n const keys = Object.keys(input);\n if (\n keys.length === 3 &&\n keys.includes('high') &&\n keys.includes('low') &&\n keys.includes('unsigned')\n ) {\n const high = Number((input as any).high) || 0;\n const low = Number((input as any).low) || 0;\n return high * 4294967296 + (low >>> 0);\n }\n const out: any = {};\n for (const k of keys) {\n const nk = /^[a-z][a-z0-9]*(_[a-z0-9]+)+$/.test(k) ? k.replace(/_([a-z0-9])/g, (_m, c) => c.toUpperCase()) : k;\n out[nk] = FxUtils.camelizeDeep((input as any)[k]);\n }\n return out;\n }\n return input;\n }\n\n static formatSizeUnits(bytes: number) {\n if (bytes >= 1073741824) {\n return (bytes / 1073741824).toFixed(2) + ' GB';\n } else if (bytes >= 1048576) {\n return (bytes / 1048576).toFixed(2) + ' MB';\n } else if (bytes >= 1024) {\n return (bytes / 1024).toFixed(2) + ' KB';\n } else if (bytes > 1) {\n return bytes + ' bytes';\n } else if (bytes == 1) {\n return bytes + ' byte';\n }\n return '0 bytes';\n }\n}\n","import { HttpClient, HttpEvent, HttpHeaders, HttpRequest } from '@angular/common/http';\nimport { Observable, firstValueFrom } from 'rxjs';\n\nexport class HttpWrapper {\n constructor(public http: HttpClient, public baseURL: string) {}\n\n /**\n * Hook applied to every resolved response (get/post/put/delete and all verb\n * helpers built on them). Default is identity; override to normalize a\n * backend convention once (e.g. FxUtils.camelizeDeep for snake_case +\n * protobuf-Long payloads) instead of wrapping each method.\n */\n protected transformResponse(res: any): any {\n return res;\n }\n\n private addCredentials(options: any = {}): any {\n return {\n withCredentials: true,\n ...options,\n };\n }\n\n async get(url = '', params?: any): Promise<any> {\n const options = {\n withCredentials: true,\n params: {\n ...params,\n },\n };\n return this.transformResponse(await firstValueFrom(this.http.get(this.baseURL + url, options)));\n }\n\n async post(url: string, body: any = {}, options: any = {}): Promise<any> {\n return this.transformResponse(\n await firstValueFrom(this.http.post(this.baseURL + url, body, this.addCredentials(options))),\n );\n }\n\n async put(url: string, body: any, options: any = {}): Promise<any> {\n return this.transformResponse(\n await firstValueFrom(this.http.put(this.baseURL + url, body, this.addCredentials(options))),\n );\n }\n\n async delete(url: string, options: any = {}): Promise<any> {\n return this.transformResponse(\n await firstValueFrom(this.http.delete(this.baseURL + url, this.addCredentials(options))),\n );\n }\n\n upload(url: string, body: FormData, options: any = {}): Observable<HttpEvent<any>> {\n const req = new HttpRequest(\n 'POST',\n this.baseURL + url,\n body,\n {\n reportProgress: true,\n ...this.addCredentials(options)\n }\n );\n\n return this.http.request(req);\n }\n\n async search(params: any = {}) {\n return await this.get('/search', params);\n }\n\n async detail(params: any) {\n return await this.get(`/detail`, params);\n }\n\n async remove(params: any = {}) {\n return await this.delete(`/remove`, params);\n }\n\n async create(data: any) {\n return await this.post(`/create`, data);\n }\n\n async updateInfo(data: any, params?: any) {\n return await this.put(`/update-info`, data, { params: params });\n }\n\n async updateStatus(data: any, params?: any) {\n return await this.put(`/update-status`, data, { params: params });\n }\n\n async update(data: any, params?: any) {\n return await this.put(`/update`, data, { params: params });\n }\n\n async single(code: string) {\n return await this.post(`/${code}`, {});\n }\n\n async selectize() {\n return await this.post('/search', {});\n }\n\n async fetch(filter: any = {}, params: any = {}) {\n return await this.post('', filter, { params: params });\n }\n\n async published(idOrCode: string) {\n return await this.post(`/published/${idOrCode}`);\n }\n\n async unpublished(idOrCode: string) {\n return await this.post(`/unpublished/${idOrCode}`);\n }\n\n async terminated(idOrCode: string) {\n return await this.post(`/terminated/${idOrCode}`);\n }\n\n async disable(params: any) {\n return await this.post(`/disable`, params);\n }\n}\n","import { AfterViewInit, Directive, Injector, OnInit, Type, ViewChild, viewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\nimport { BaseComponent } from './base.component';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport { FxToastrService } from '../services/toastr.service';\nimport { ChangeDetectorRef } from '@angular/core';\nimport { FxUtils } from '../utils';\nimport { Subject, debounceTime, distinctUntilChanged, firstValueFrom } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface TableResult<T> {\n data: T[];\n total: number;\n}\n\n/**\n * Filter bag for BaseTable screens. The platform-wide keys are declared so\n * templates keep dot access under noPropertyAccessFromIndexSignature;\n * screen-specific keys ride on the index signature (bracket access).\n */\nexport interface FxTableFilters {\n keyword?: string;\n status?: string;\n statuses?: string[];\n severity?: string;\n riskLevel?: string;\n priority?: string;\n category?: string;\n integrityLevel?: string;\n tags?: string[];\n name?: string;\n groupId?: string;\n [key: string]: any;\n}\n\n@Directive()\nexport class BaseTableComponent<T = any> extends BaseComponent implements OnInit, AfterViewInit {\n dataSource = new MatTableDataSource<T>();\n cols: string[] = [];\n total = 0;\n page = 0;\n pageSize = 10;\n filters: FxTableFilters = {};\n loading = false;\n expandedElement: T | null;\n toastr: FxToastrService;\n public _lock = false;\n keywordChange$ = new Subject<string>();\n dataSourcePlaceholder: any[];\n public config: {\n create?: {\n dialog?: Type<{}>;\n size?: string;\n disableClose?: boolean;\n label?: string;\n title?: string;\n message?: string;\n };\n update?: {\n dialog?: Type<{}>;\n size?: string;\n disableClose?: boolean;\n label?: string;\n title?: string;\n message?: string;\n };\n view?: {\n dialog?: Type<{}>;\n size?: string;\n disableClose?: boolean;\n label?: string;\n title?: string;\n message?: string;\n };\n delete?: {\n dialog?: Type<{}>;\n title?: string;\n message?: string;\n cancelTitle?: string;\n confirmTitle?: string;\n };\n updateStatus?: {\n message?: string;\n };\n };\n\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n readonly table = viewChild.required(MatTable);\n\n constructor(\n injector: Injector,\n public api: HttpWrapper,\n public modal: MatDialog,\n public ref: ChangeDetectorRef,\n ) {\n super(injector);\n this.toastr = injector.get(FxToastrService);\n }\n\n ngOnInit(): void {\n this.keywordChange$\n .pipe(debounceTime(300), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe(async () => {\n await this.refresh();\n });\n this.dataSourcePlaceholder = Array(this.pageSize).fill({});\n this.init();\n }\n\n public init() {}\n\n ngAfterViewInit(): void {\n if (this.paginator && this.paginator.page) {\n this.paginator.page.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.onPageChange(event);\n });\n }\n this.ref.detectChanges();\n }\n\n public async refresh(): Promise<void> {\n this.page = 0;\n if (this.paginator) {\n this.paginator.pageIndex = 0;\n }\n await this.fetch();\n }\n\n /**\n * Where the list is fetched from. Default (null) keeps the legacy behavior\n * of calling `api.search()` (GET /search) untouched. Subclasses whose list\n * lives elsewhere override this instead of re-implementing fetch() — and\n * keep the stale-response sequence guard for free.\n */\n protected listRequest(): { method: 'get' | 'post'; url: string } | null {\n return null;\n }\n\n /** Result keys the list/total are read from. Override alongside listRequest(). */\n protected listKey = 'data';\n protected totalKey = 'total';\n\n public setDataSource(result: any): void {\n this.dataSource.data = FxUtils.get(result, this.listKey);\n this.total = FxUtils.get(result, this.totalKey);\n }\n\n private _fetchSeq = 0;\n\n public async fetch(): Promise<void> {\n // Sequence guard: without it a slow earlier request could resolve after\n // a newer one and overwrite the table with stale data.\n const seq = ++this._fetchSeq;\n this.loading = true;\n try {\n const params = { page: (this.page ?? 0) + 1, pageSize: this.pageSize, ...this.filters };\n const req = this.listRequest();\n const result = req\n ? req.method === 'post'\n ? await this.api.post(req.url, params)\n : await this.api.get(req.url, params)\n : await this.api.search(params);\n if (seq !== this._fetchSeq) return;\n this.setDataSource(result);\n } catch (err: any) {\n if (seq !== this._fetchSeq) return;\n this.toastr.error(FxUtils.parseError(err));\n } finally {\n if (seq === this._fetchSeq) {\n this.loading = false;\n this.ref.detectChanges();\n }\n }\n }\n\n public async onPageChange(event: PageEvent) {\n this.page = event.pageIndex;\n this.pageSize = event.pageSize;\n await this.fetch();\n }\n\n public resolve() {\n return {};\n }\n\n public empty() {\n return {};\n }\n\n public onKeywordChange(keyword: string) {\n this.keywordChange$.next(keyword);\n }\n\n public async create() {\n const conf = this.config?.create;\n const dialog = conf?.dialog;\n const size = conf?.size;\n if (conf == null || dialog == null) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n\n let panelClass = 'fx-dialog';\n if (size == '100%') {\n panelClass = 'fx-fullsize-dialog';\n }\n\n const instance = this.modal.open(dialog, {\n panelClass: panelClass,\n autoFocus: 'first-tabbable',\n width: size,\n disableClose: conf.disableClose ?? false,\n data: {\n method: 'create',\n data: this.empty(),\n title: conf.title,\n message: conf.message,\n resolve: this.resolve(),\n },\n });\n\n instance.afterClosed().subscribe((result: any) => {\n if (result) {\n this.refresh();\n }\n this._lock = false;\n });\n }\n\n public async update(model: T) {\n const conf = this.config?.update;\n const dialog = conf?.dialog;\n const size = conf?.size;\n if (dialog == null || conf == null) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n let panelClass = 'fx-dialog';\n if (size == '100%') {\n panelClass = 'fx-fullsize-dialog';\n }\n\n const instance = this.modal.open(dialog, {\n panelClass: panelClass,\n autoFocus: 'first-tabbable',\n width: size,\n disableClose: conf.disableClose ?? false,\n data: {\n method: 'update',\n data: model,\n title: conf.title,\n message: conf.message,\n resolve: this.resolve(),\n },\n });\n\n instance.afterClosed().subscribe((result: any) => {\n if (result) {\n this.refresh();\n }\n this._lock = false;\n });\n }\n\n public async view(model: T) {\n const conf = this.config?.view;\n const dialog = conf?.dialog;\n const size = conf?.size;\n if (dialog == null || conf == null) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n\n let panelClass = 'fx-dialog';\n if (size == '100%') {\n panelClass = 'fx-fullsize-dialog';\n }\n\n const instance = this.modal.open(dialog, {\n panelClass: panelClass,\n autoFocus: 'first-tabbable',\n width: size,\n disableClose: conf.disableClose ?? false,\n data: {\n data: model,\n title: conf.title,\n message: conf.message,\n resolve: this.resolve(),\n disabled: true,\n method: 'view',\n },\n });\n\n instance.afterClosed().subscribe(() => {\n this._lock = false;\n });\n }\n\n async delete(model: T) {\n const conf = this.config?.delete;\n const dialog = conf?.dialog;\n if (conf == null || dialog == null) {\n return;\n }\n if (this._lock) {\n return;\n }\n this._lock = true;\n\n try {\n const dialogRef = this.modal.open(dialog, {\n panelClass: 'fx-dialog',\n autoFocus: 'first-tabbable',\n width: '400px',\n data: {\n title: conf?.title,\n message: conf?.message,\n cancelLabel: (conf as any)?.cancelTitle,\n confirmLabel: (conf as any)?.confirmTitle,\n callback: async () => {\n await this.remove(model);\n },\n },\n });\n\n const state = await firstValueFrom(dialogRef.afterClosed());\n\n if (state) {\n try {\n await this.refresh();\n } catch (err: any) {\n this.toastr.error(FxUtils.parseError(err));\n }\n }\n } finally {\n this._lock = false;\n }\n }\n\n async remove(model: T) {\n try {\n return await this.api.remove({ ...model });\n } catch (err: any) {\n this.toastr.error(FxUtils.parseError(err));\n }\n }\n\n public tagClass(tag: string) {\n return FxUtils.getTagClass(tag, true);\n }\n\n public capitalize(label: string) {\n return label ? label.charAt(0).toUpperCase() + label.slice(1).toLowerCase() : label;\n }\n\n public value(model: any, key: string, defaultValue: any = '---') {\n return FxUtils.get(model, key, defaultValue);\n }\n\n public toggleExpand(element: any): void {\n this.expandedElement = this.expandedElement === element ? null : element;\n }\n\n async updateStatus(params: any) {\n try {\n await this.api.updateStatus(params);\n this.toastr.success(this.config?.updateStatus?.message ?? 'Update Success');\n } catch (err: any) {\n this.toastr.error(FxUtils.parseError(err));\n } finally {\n await this.refresh();\n }\n }\n}\n","import { ChangeDetectorRef, Directive, Injector } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BaseTableComponent } from './base-table.component';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport { FxUtils } from '../utils';\n\n/**\n * List + detail-pane counterpart of BaseTableComponent: the page keeps a\n * selectable row list on one side and a lazily fetched, per-id-cached detail\n * on the other. Pair it with `<fx-ui-master-detail>` which renders the\n * two-column shell from this state.\n *\n * Subclasses declare where ids and details come from:\n * protected override idKey = 'licenseId';\n * protected override detailUrl(id: string) { return `/license/${id}`; }\n * `detailUrl` returning null (the default) means the selected row itself is\n * the detail and no request is made.\n */\n@Directive()\nexport class BaseMasterDetailComponent<T = any> extends BaseTableComponent<T> {\n selectedId: string | null = null;\n selected: T | null = null;\n detailMap = new Map<string, any>();\n detailLoading = new Set<string>();\n\n // Explicit ctor: Ivy refuses to inherit a constructor whose `modal: any`\n // parameter is not DI-resolvable (NG2016).\n constructor(injector: Injector, api: HttpWrapper, modal: MatDialog, ref: ChangeDetectorRef) {\n super(injector, api, modal, ref);\n }\n\n /** Key the row id is read from. Override idOf() instead for composite ids. */\n protected idKey = 'id';\n\n public idOf(row: T): string | null {\n return this.value(row, this.idKey, null);\n }\n\n protected detailUrl(id: string): string | null {\n return null;\n }\n\n /** What the detail pane shows: the fetched detail when cached, else the row. */\n get detail(): any {\n return (this.selectedId != null && this.detailMap.get(this.selectedId)) || this.selected;\n }\n\n get detailBusy(): boolean {\n return this.selectedId != null && this.detailLoading.has(this.selectedId);\n }\n\n override setDataSource(result: any): void {\n super.setDataSource(result);\n this.autoSelectFirst();\n }\n\n /** Keep the previous selection when it survived the new page, else pick row 0. */\n autoSelectFirst(): void {\n const list = this.dataSource.data || [];\n if (!list.length) {\n this.selectedId = null;\n this.selected = null;\n return;\n }\n const still = list.find((row) => this.idOf(row) === this.selectedId);\n this.selectItem(still ?? list[0]);\n }\n\n selectItem(row: T): void {\n const id = this.idOf(row);\n this.selectedId = id;\n this.selected = row;\n if (id != null && !this.detailMap.has(id)) {\n this.fetchDetail(id);\n }\n }\n\n fetchDetail(id: string): void {\n const url = this.detailUrl(id);\n if (!url || this.detailLoading.has(id)) {\n return;\n }\n this.detailLoading.add(id);\n this.api\n .get(url)\n .then((res: any) => {\n // New Map identity so OnPush consumers of the pane see the change.\n this.detailMap = new Map(this.detailMap).set(id, res);\n })\n .catch((err: any) => {\n this.toastr.error(FxUtils.parseError(err));\n })\n .finally(() => {\n this.detailLoading.delete(id);\n this.ref.detectChanges();\n });\n }\n}\n","import { AfterViewInit, Directive, Inject, OnInit, viewChild } from '@angular/core';\nimport { BaseComponent } from './base.component';\nimport { NgForm } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { FxToastrService } from '../services/toastr.service';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport { FxUtils } from '../utils';\n\n@Directive()\nexport class BaseDialogComponent<T = any> extends BaseComponent implements AfterViewInit, OnInit {\n readonly ngForm = viewChild<NgForm>('f');\n public method: string;\n public title: string;\n public model: any;\n public disabled: boolean;\n public loading: boolean;\n public message: string;\n public resolve: any;\n formChangesSubscription: any;\n public onSubmit = true;\n\n constructor(\n public ref: MatDialogRef<any>,\n @Inject(MAT_DIALOG_DATA) public bindings: any,\n public toastr: FxToastrService,\n public api: HttpWrapper,\n public dialog: MatDialog,\n ) {\n super();\n // Deep clone: a shallow clone let dialog edits mutate nested fields of\n // the live table row even when the user cancelled.\n this.model = FxUtils.cloneDeep(bindings?.['data']);\n this.method = bindings?.['method'];\n this.title = bindings?.['title'];\n this.disabled = bindings?.['disabled'];\n this.message = bindings?.['message'];\n this.resolve = bindings?.['resolve'];\n }\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method -- subclasses across host apps call super lifecycle methods; removing these breaks them at runtime\n ngAfterViewInit(): void {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method -- see ngAfterViewInit note\n ngOnInit(): void {}\n\n async accept(form: NgForm, params = null) {\n if (form.invalid) {\n FxUtils.checkInvalidField(form);\n return;\n }\n if (!this.disabled) {\n if (!this.validate()) return;\n if (this.method === 'create') {\n await this.create(params);\n return;\n } else {\n await this.update(params);\n return;\n }\n }\n\n this.cancel();\n }\n\n async create(params: any = null) {\n if (this.loading) {\n return;\n }\n this.loading = true;\n try {\n await this.api.create({ ...this.model, ...params });\n this.toastr.success(this.message);\n this.ref.close(true);\n } catch (error: any) {\n this.toastr.error(FxUtils.parseError(error));\n } finally {\n this.loading = false;\n }\n }\n\n async update(params: any = null) {\n if (this.loading) {\n return;\n }\n this.loading = true;\n try {\n await this.api.update({ ...this.model, ...params });\n this.toastr.success(this.message);\n this.ref.close(true);\n } catch (error: any) {\n this.toastr.error(FxUtils.parseError(error));\n } finally {\n this.loading = false;\n }\n }\n\n async updateInfo(params: any = null) {\n if (this.loading) {\n return;\n }\n this.loading = true;\n try {\n await this.api.updateInfo({ ...this.model, ...params });\n this.toastr.success(this.message);\n this.ref.close(true);\n } catch (error: any) {\n this.toastr.error(FxUtils.parseError(error));\n } finally {\n this.loading = false;\n }\n }\n\n cancel() {\n this.ref.close(false);\n }\n\n validate() {\n return true;\n }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FxLoadingService {\n public listener = new EventEmitter<boolean>();\n public listenerAction = new EventEmitter<boolean>();\n start() {\n this.listener.emit(true);\n }\n\n stop() {\n this.listener.emit(false);\n }\n startAction() {\n this.listenerAction.emit(true);\n }\n stopAction() {\n this.listenerAction.emit(false);\n }\n}\n","import { Injector } from '@angular/core';\nimport { FxLoadingService } from '../services/loading.service';\n\nexport class BaseResolver {\n constructor(public loadingService: FxLoadingService, public injector: Injector) {}\n\n baseResolverInit() {\n this.loadingService.start();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FxUtils } from '../utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FxStorageService {\n resolve(key: string, value?: any): any {\n if (FxUtils.isNotNull(value)) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n const loc = localStorage.getItem(key);\n return loc ? JSON.parse(loc) : undefined;\n }\n\n remove(key: string) {\n localStorage.removeItem(key);\n }\n}\n","import { Type, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { HttpWrapper } from '../services/http-wrapper.service';\nimport { FxLoadingService } from '../services/loading.service';\nimport { FxToastrService } from '../services/toastr.service';\nimport { FxStorageService } from '../services/storage.service';\nimport { FxUtils } from '../utils';\n\nexport interface FxListRequest {\n /** Defaults to 'get'. */\n method?: 'get' | 'post';\n url: string;\n /** Query params (get) — for post they are sent as the body unless `body` is set. */\n params?: any;\n body?: any;\n}\n\nexport interface FxListResolverContext {\n /** Page size remembered for this route url (FxStorageService convention), default 10. */\n pageSize: number;\n}\n\n/**\n * Functional replacement for the copy-pasted list-resolver class:\n * starts the loading overlay, runs one API request, and on failure stops the\n * overlay and shows a parsed error toast — the exact convention every\n * BaseResolver subclass hand-rolls today. BaseResolver stays for existing\n * classes; new routes should use this factory.\n *\n * Usage:\n * resolve: { histories: fxListResolver(ScanManagementApi, (route, state, ctx) =>\n * ({ url: `/${route.paramMap.get('id')}/history`, params: { page: 1, pageSize: ctx.pageSize } })) }\n */\nexport function fxListResolver<A extends HttpWrapper>(\n apiType: Type<A>,\n request: (\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n ctx: FxListResolverContext,\n ) => FxListRequest,\n): ResolveFn<any> {\n return async (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const api = inject(apiType);\n const loading = inject(FxLoadingService);\n const toastr = inject(FxToastrService);\n const storage = inject(FxStorageService);\n try {\n loading.start();\n const ctx: FxListResolverContext = { pageSize: storage.resolve(state.url) || 10 };\n const req = request(route, state, ctx);\n if ((req.method ?? 'get') === 'post') {\n return await api.post(req.url, req.body ?? req.params ?? {});\n }\n return await api.get(req.url, req.params);\n } catch (err: any) {\n loading.stop();\n toastr.error(FxUtils.parseError(err), 'Error');\n return null;\n }\n };\n}\n","import { Provider, Type } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { HttpWrapper } from './http-wrapper.service';\n\nexport type FxApiClass = Type<HttpWrapper> & { provider: Provider };\n\n/**\n * Factory for the 11-line HttpWrapper subclasses copy-pasted per endpoint.\n * Returns a distinct injectable class per call (so constructor injection by\n * type keeps working) without needing a decorator:\n *\n * export const ScanManagementApi = createApi(() => `${environment.baseService}/scarf/scan`);\n * // module: providers: [ScanManagementApi.provider]\n * // usage: constructor(private api: InstanceType<typeof ScanManagementApi>)\n *\n * `baseURL` accepts a string or a lazy factory (for environment-derived URLs).\n * An optional `transform` plugs into HttpWrapper.transformResponse — e.g.\n * FxUtils.camelizeDeep for snake_case/Long-encoded backends.\n *\n * IMPORTANT — when subclassing (`@Injectable() class X extends createApi(...)`),\n * declare an explicit `constructor(http: HttpClient) { super(http); }`.\n * The generated base carries no Angular factory metadata, so an inherited\n * constructor makes Ivy fall back to `new X()` with NO arguments: the class\n * silently gets `http = undefined` and every call fails at runtime while the\n * build stays green.\n */\nexport function createApi(\n baseURL: string | (() => string),\n transform?: (res: any) => any,\n): FxApiClass {\n class GeneratedApi extends HttpWrapper {\n static provider: Provider = {\n provide: GeneratedApi,\n useFactory: (http: HttpClient) => new GeneratedApi(http),\n deps: [HttpClient],\n };\n\n constructor(http: HttpClient) {\n super(http, typeof baseURL === 'function' ? baseURL() : baseURL);\n }\n\n protected override transformResponse(res: any): any {\n return transform ? transform(res) : res;\n }\n }\n return GeneratedApi as FxApiClass;\n}\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subscription } from 'rxjs';\nimport { NotificationService } from './notification.service';\n\nexport interface RealtimeTableEvent<T> {\n /** Value the event is matched to a row with (via `matchKey`). */\n key: any;\n /** Fields to merge onto the matched row. */\n patch: Partial<T>;\n /** Marks a final state (e.g. COMPLETED) — forwarded to `onApplied`. */\n terminal?: boolean;\n}\n\nexport interface RealtimeTableSyncOptions<T> {\n /** Hub event name to subscribe to (via NotificationService.on$). */\n event: string;\n /** Parse the raw payload; return null to ignore the event. */\n parse: (raw: any) => RealtimeTableEvent<T> | null;\n /** Current table rows (live reference is fine). */\n getRows: () => T[];\n /** Replace table rows (callers usually also trigger change detection here). */\n setRows: (rows: T[]) => void;\n /** Key events match rows on (e.g. row.analyzeCode). */\n matchKey: (row: T) => any;\n /**\n * Stable identity used when merging a background re-fetch into the current\n * rows (existing row objects are patched in place so the table keeps their\n * identity — no flash).\n */\n identityKey: (row: T) => any;\n /** Background list re-fetch used to pick up rows that don't exist yet. */\n fetchList: () => Promise<{ rows: T[]; total?: number } | null>;\n /** Called after a patch lands on a row (change detection, terminal enrich…). */\n onApplied?: (row: T, event: RealtimeTableEvent<T>) => void;\n /** Called when a background re-fetch produced a new total. */\n onTotal?: (total: number) => void;\n /** Debounce for the background sync (default 1200ms). */\n debounceMs?: number;\n /** Consecutive no-op syncs before giving up on buffered keys (default 3). */\n idleCap?: number;\n}\n\n/**\n * Live-progress plumbing for server-paginated tables fed by hub events:\n * events matching a visible row are merged in place; events for rows that\n * are not in the list yet (a just-created record whose list read lags) are\n * buffered by key and replayed after a debounced, idle-capped background\n * re-fetch that merges by stable identity.\n *\n * The domain contract (event name, payload parsing, terminal semantics) is\n * injected via options — nothing app-specific lives here.\n */\nexport class RealtimeTableSync<T = any> {\n private pending = new Map<any, RealtimeTableEvent<T>>();\n private syncTimer: ReturnType<typeof setTimeout> | null = null;\n private idleSyncs = 0;\n private stopped = false;\n private subscription: Subscription | null = null;\n\n constructor(\n private notifications: NotificationService,\n private options: RealtimeTableSyncOptions<T>,\n ) {}\n\n /**\n * Subscribe to the hub event. Pass a DestroyRef to tie teardown to a\n * component lifecycle; stop() is still available for manual control.\n */\n start(destroyRef?: DestroyRef): this {\n const source = this.notifications.on$(this.options.event);\n const piped = destroyRef ? source.pipe(takeUntilDestroyed(destroyRef)) : source;\n this.stopped = false;\n this.subscription = piped.subscribe((raw: any) => this.handleEvent(raw));\n if (destroyRef) {\n destroyRef.onDestroy(() => this.stop());\n }\n return this;\n }\n\n stop(): void {\n this.stopped = true;\n this.subscription?.unsubscribe();\n this.subscription = null;\n if (this.syncTimer) {\n clearTimeout(this.syncTimer);\n this.syncTimer = null;\n }\n this.pending.clear();\n }\n\n /**\n * Replay buffered events onto the current rows (call from setDataSource so\n * a regular refresh also applies buffered progress). Returns true if\n * anything was applied.\n */\n applyPending(): boolean {\n if (!this.pending.size) return false;\n let changed = false;\n for (const row of this.options.getRows()) {\n const key = this.options.matchKey(row);\n const event = this.pending.get(key);\n if (!event) continue;\n Object.assign(row as any, event.patch);\n this.pending.delete(key);\n changed = true;\n this.options.onApplied?.(row, event);\n }\n if (changed) {\n this.options.setRows([...this.options.getRows()]);\n }\n return changed;\n }\n\n private handleEvent(raw: any): void {\n const event = this.options.parse(raw);\n if (!event) return;\n\n const row = this.options.getRows().find((r) => this.options.matchKey(r) === event.key);\n if (!row) {\n // Not in the list yet (e.g. just-created record whose list read lags):\n // keep only the latest state per key and schedule a background sync.\n this.pending.set(event.key, event);\n this.scheduleSync();\n return;\n }\n this.idleSyncs = 0;\n Object.assign(row as any, event.patch);\n this.options.setRows([...this.options.getRows()]);\n this.options.onApplied?.(row, event);\n }\n\n private scheduleSync(): void {\n const idleCap = this.options.idleCap ?? 3;\n if (this.syncTimer || this.stopped || this.idleSyncs >= idleCap) return;\n this.syncTimer = setTimeout(async () => {\n this.syncTimer = null;\n await this.syncFromServer();\n }, this.options.debounceMs ?? 1200);\n }\n\n private async syncFromServer(): Promise<void> {\n try {\n const result = await this.options.fetchList();\n if (this.stopped || !result) return;\n const existingByIdentity = new Map(\n this.options.getRows().map((r) => [this.options.identityKey(r), r]),\n );\n const merged = result.rows.map((item) => {\n const existing = existingByIdentity.get(this.options.identityKey(item));\n if (existing) {\n Object.assign(existing as any, item); // reuse the object → stable identity\n return existing;\n }\n return item;\n });\n this.options.setRows(merged);\n if (result.total !== undefined) {\n this.options.onTotal?.(result.total);\n }\n const applied = this.applyPending();\n this.idleSyncs = applied ? 0 : this.idleSyncs + 1;\n if (this.pending.size) {\n this.scheduleSync();\n }\n } catch {\n // Background sync is best-effort; the next event retries.\n this.idleSyncs += 1;\n }\n }\n}\n","import { FxUtils } from './utils';\n\n/**\n * Shared value→colour rules for report/metric displays.\n *\n * Every metric that varies in meaning (severity, score, count…) gets ONE rule\n * so the colour is consistent everywhere and callers never hardcode a tone\n * for a value that can be good or bad. Domain-specific rules (EPSS, exploit\n * maturity, license categories…) stay in the consuming app — only the\n * mechanism and the org-wide rules live here.\n *\n * There is intentionally NO `default` text/bg colour in the theme, so rule\n * helpers return `null` for \"no meaningful value\" and the `toneText` /\n * `toneBg` / `toneBadge` wrappers fall back to a neutral class.\n *\n * Every emitted utility must appear below as a WHOLE literal string — the\n * Tailwind content scanner (v4 has no safelist) only sees complete class\n * names. Never rebuild these with string interpolation.\n */\nexport type Tone = 'critical' | 'danger' | 'warning' | 'success' | 'information';\n\nconst NEUTRAL_TEXT = 'text-text-secondary';\nconst NEUTRAL_BG = 'bg-bg-hover';\n\nconst TONE_TEXT: Record<Tone, string> = {\n critical: 'text-critical',\n danger: 'text-danger',\n warning: 'text-warning',\n success: 'text-success',\n information: 'text-information',\n};\n\nconst TONE_BG: Record<Tone, string> = {\n critical: 'bg-critical',\n danger: 'bg-danger',\n warning: 'bg-warning',\n success: 'bg-success',\n information: 'bg-information',\n};\n\nconst TONE_BADGE: Record<Tone, string> = {\n critical: 'bg-critical/10 text-critical',\n danger: 'bg-danger/10 text-danger',\n warning: 'bg-warning/10 text-warning',\n success: 'bg-success/10 text-success',\n information: 'bg-information/10 text-information',\n};\n\nfunction hasVal(v: any): boolean {\n if (v == null) return false;\n const s = String(v).trim();\n return s !== '' && s !== '-' && s !== '--';\n}\n\n/** Severity / risk-level string → tone (Critical & High → danger, Medium → warning, Low → success). */\nexport function severityTone(value: any): Tone | null {\n if (!hasVal(value)) return null;\n const t = FxUtils.getTagClass(String(value), true);\n return t === 'default' || t === 'discovery' ? null : (t as Tone);\n}\n\n/**\n * CVSS-style 0–10 score → tone, following the CVSS v3 qualitative bands\n * (≥9 Critical, ≥7 High, ≥4 Medium, else Low). Backends occasionally send a\n * 0–100 scale, so values > 10 are normalised down by /10.\n */\nexport function scoreTone(score: any): Tone | null {\n let n = Number(score);\n if (!Number.isFinite(n) || n <= 0) return null;\n if (n > 10) n = n / 10;\n if (n >= 9) return 'critical';\n if (n >= 7) return 'danger';\n if (n >= 4) return 'warning';\n return 'success';\n}\n\n/**\n * Count of \"bad\" things → tone: 0 is good (success), anything positive is bad.\n * `positiveTone` sets how severe a non-zero count reads (default `danger`;\n * pass `critical` for the worst metrics, `warning` for milder ones).\n * Non-numeric values (e.g. \"--\") return null → neutral.\n */\nexport function countTone(count: any, positiveTone: Tone = 'danger'): Tone | null {\n const n = Number(count);\n if (!Number.isFinite(n)) return null;\n return n > 0 ? positiveTone : 'success';\n}\n\n/** Tone → text colour class, with a neutral fallback when there is no value. */\nexport function toneText(tone: Tone | null): string {\n return tone ? TONE_TEXT[tone] : NEUTRAL_TEXT;\n}\n\n/** Tone → background colour class, with a neutral fallback when there is no value. */\nexport function toneBg(tone: Tone | null): string {\n return tone ? TONE_BG[tone] : NEUTRAL_BG;\n}\n\n/** Tone → soft pill/badge classes (tinted bg + matching text), neutral fallback. */\nexport function toneBadge(tone: Tone | null): string {\n return tone ? TONE_BADGE[tone] : 'bg-bg-hover text-text-secondary';\n}\n\n/**\n * Tone → resolved CSS colour string for ECharts / canvas where a Tailwind\n * class can't be used (e.g. per-slice pie `itemStyle.color`). Emits the\n * legacy comma syntax — see FxUtils.convertColorFromVariable.\n */\nexport function toneColor(tone: Tone | null, alpha = 1): string {\n const name = tone ? `--${tone}` : '--text-secondary';\n return FxUtils.convertColorFromVariable(name, alpha, { legacyCommaSyntax: true });\n}\n","import { ValidationErrors } from '@angular/forms';\n\nexport class FxValidators {\n /**\n * Name fields: firstName, lastName, groupName, projectName, displayName\n * Allows: letters (Unicode), spaces, hyphens, apostrophes, periods\n */\n static validateName(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[\\p{L}\\s'\\-.]{1,100}$/u;\n return regex.test(value) ? null : { invalidName: 'Only letters, spaces, hyphens, apostrophes, and periods are allowed (max 100 characters)' };\n }\n\n /**\n * Description fields\n * Allows: letters, digits, spaces, basic punctuation\n */\n static validateDescription(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[\\p{L}\\d\\s.,;:!?'/()\"&\\-\\n\\r]{1,500}$/u;\n return regex.test(value) ? null : { invalidDescription: 'Contains disallowed characters (max 500 characters)' };\n }\n\n /**\n * Email fields\n */\n static validateEmail(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return regex.test(value) ? null : { invalidEmail: 'Please enter a valid email address' };\n }\n\n /**\n * Phone fields\n * Allows: digits, optional leading +, spaces, hyphens, parentheses (7-15 digits)\n */\n static validatePhone(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^\\+?[\\d\\s\\-()]{7,20}$/;\n const digitCount = value.replace(/\\D/g, '').length;\n if (!regex.test(value) || digitCount < 7 || digitCount > 15) {\n return { invalidPhone: 'Please enter a valid phone number' };\n }\n return null;\n }\n\n /**\n * Code/identifier fields: server code, template code, templateId\n * Allows: alphanumeric, hyphens, underscores\n */\n static validateCode(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[a-zA-Z0-9_-]{1,50}$/;\n return regex.test(value) ? null : { invalidCode: 'Only letters, numbers, hyphens, and underscores are allowed (max 50 characters)' };\n }\n\n /**\n * Domain fields\n * Standard domain pattern with optional port\n */\n static validateDomain(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}(:\\d{1,5})?$/;\n return regex.test(value) ? null : { invalidDomain: 'Please enter a valid domain (e.g., mail.example.com)' };\n }\n\n /**\n * Subject fields (email subject)\n * Allows: letters, digits, spaces, common punctuation, template placeholders {{}}\n */\n static validateSubject(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[\\p{L}\\d\\s.,;:!?'/()\"&\\-{}]{1,200}$/u;\n return regex.test(value) ? null : { invalidSubject: 'Contains disallowed characters (max 200 characters)' };\n }\n\n /**\n * Tag fields\n * Allows: alphanumeric, hyphens, underscores, dots, spaces\n */\n static validateTag(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[a-zA-Z0-9_\\-.\\s]{1,50}$/;\n return regex.test(value) ? null : { invalidTag: 'Only letters, numbers, hyphens, underscores, dots, and spaces are allowed' };\n }\n\n /**\n * URL fields: proxy, masterUrl\n * Standard URL pattern\n */\n static validateUrl(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^https?:\\/\\/[a-zA-Z0-9\\-._~:/?#[\\]@!$&'()*+,;=%]{1,2000}$/;\n return regex.test(value) ? null : { invalidUrl: 'Please enter a valid URL (http:// or https://)' };\n }\n\n /**\n * Numeric string fields: timeout, memoryLimit, cpuCores\n * Allows: digits, optional decimal point\n */\n static validateNumeric(value: string): ValidationErrors | null {\n if (!value || value.toString().trim() === '') return null;\n const regex = /^\\d+(\\.\\d+)?$/;\n return regex.test(value.toString()) ? null : { invalidNumeric: 'Please enter a valid number' };\n }\n\n /**\n * Version fields (semver-like)\n * Allows: digits, dots, hyphens, plus, letters\n */\n static validateVersion(value: string): ValidationErrors | null {\n if (!value || value.trim() === '') return null;\n const regex = /^[a-zA-Z0-9.\\-+]{1,50}$/;\n return regex.test(value) ? null : { invalidVersion: 'Please enter a valid version (e.g., 1.0.0)' };\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateModule, TranslateLoader } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\n\nexport function HttpLoaderFactory(http: HttpClient) {\n return new TranslateHttpLoader(http, '/assets/i18n/', '.json');\n}\n\n@NgModule({\n imports: [TranslateModule],\n exports: [TranslateModule]\n})\nexport class TranslationModule {\n static forRoot(): ModuleWithProviders<TranslationModule> {\n return {\n ngModule: TranslationModule,\n providers: [\n {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n ]\n };\n }\n\n static forChild(): ModuleWithProviders<TranslationModule> {\n return {\n ngModule: TranslationModule,\n providers: []\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslationService {\n private currentLangSubject = new BehaviorSubject<string>('en');\n readonly currentLang$ = this.currentLangSubject.asObservable();\n\n constructor(\n private translate: TranslateService,\n private http: HttpClient\n ) {\n // Default fallback\n this.translate.addLangs(['en', 'vi']);\n this.translate.setDefaultLang('en');\n }\n\n init(lang: string) {\n this.setLanguage(lang);\n }\n\n currentLang(): string {\n return this.translate.currentLang || this.translate.defaultLang;\n }\n\n setLanguage(lang: string) {\n this.translate.use(lang);\n this.currentLangSubject.next(lang);\n }\n\n loadTranslations(lang: string, path: string) {\n const url = `${path}${lang}.json`;\n this.http.get(url).subscribe({\n next: (translations: any) => {\n this.translate.setTranslation(lang, translations, true);\n },\n error: (err) => {\n console.warn(`[TranslationService] Failed to load ${url}`, err);\n }\n });\n }\n\n onLanguageChange(callback: (lang: string) => void) {\n this.currentLang$.subscribe(callback);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionService {\n private permissions: string[] = [];\n\n setPermissions(perms: string[]) {\n this.permissions = perms;\n }\n\n hasPermission(requiredPermissions: string[]): boolean {\n return requiredPermissions.some((permission: string) => this.permissions.includes(permission));\n }\n\n getPermissions(): string[] {\n return [...this.permissions];\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { PermissionService } from '../services/permissions.service';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector -- renaming is a breaking change for all host-app templates\n selector: '[hasPermission]'\n})\nexport class HasPermissionDirective {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainerRef: ViewContainerRef,\n private permissionService: PermissionService\n ) {}\n\n @Input() set hasPermission(required: string | string[]) {\n const requiredPermissions = Array.isArray(required) ? required : [required];\n this.viewContainerRef.clear();\n if (this.permissionService.hasPermission(requiredPermissions)) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, ElementRef, HostListener, inject, input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector -- renaming is a breaking change for all host-app templates\n selector: '[appTrimOnBlur]'\n})\nexport class TrimOnBlurDirective {\n readonly collapseWhitespace = input(false, { alias: \"appTrimOnBlurCollapse\" });\n\n /* Optional on purpose: the onBlur fallback below already handles the\n * no-form case, but the injection was required and crashed any unbound\n * input once the directive actually entered the compilation scope. */\n private ngControl = inject(NgControl, { optional: true });\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n @HostListener('blur')\n onBlur(): void {\n const native = this.el.nativeElement;\n if (!native) return;\n\n let value: string = native.value ?? '';\n\n if (this.collapseWhitespace()) {\n value = value.replace(/\\s+/g, ' ').trim();\n } else {\n value = value.trim();\n }\n\n if (native.value === value) return;\n\n native.value = value;\n\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValue(value);\n } else {\n const ev = new Event('input', { bubbles: true });\n native.dispatchEvent(ev);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate, Router } from '@angular/router';\nimport { PermissionService } from '../services/permissions.service';\nimport { FxUtils } from '../utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PermissionGuard implements CanActivate {\n constructor(private permissionService: PermissionService, private router: Router) {}\n\n canActivate(route: any): boolean {\n const requiredPermissions = route.data?.['permissions'] as string[] | undefined;\n\n if (!requiredPermissions || this.permissionService.hasPermission(requiredPermissions)) {\n return true;\n }\n\n this.router.navigate(['/unauthorized']);\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthStateService {\n private _isLoggedIn$ = new BehaviorSubject<boolean | null>(null);\n readonly isLoggedIn$ = this._isLoggedIn$.asObservable();\n readonly unauthorized$ = new Subject<void>();\n\n constructor() {}\n\n setLoggedIn(value: boolean): void {\n this._isLoggedIn$.next(value);\n }\n\n get isLoggedIn(): boolean {\n return this._isLoggedIn$.value === true;\n }\n\n handleUnauthorized(): void {\n this.setLoggedIn(false);\n this.unauthorized$.next();\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpEvent,\n HttpInterceptor,\n HttpHandler,\n HttpRequest,\n HttpErrorResponse,\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AuthStateService } from '../services/auth-state.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n private handlingUnauthorized = false;\n\n constructor(private authState: AuthStateService) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // Multi-tenant: all tenant domains hit one shared API endpoint, so the\n // backend can no longer resolve the tenant from the Host header. Send the\n // originating domain explicitly for tenant resolution.\n const cloned = req.clone({\n withCredentials: true,\n setHeaders: { 'X-Tenant-Domain': window.location.hostname },\n });\n\n return next.handle(cloned).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 401 && !this.handlingUnauthorized) {\n this.handlingUnauthorized = true;\n this.authState.handleUnauthorized();\n setTimeout(() => {\n this.handlingUnauthorized = false;\n }, 2000);\n }\n return throwError(() => error);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface Breadcrumb {\n label: string;\n url?: string;\n code?: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreadcrumbService {\n private breadcrumbs$ = new BehaviorSubject<Breadcrumb[]>([]);\n\n set(breadcrumbs: Breadcrumb[]) {\n this.breadcrumbs$.next(breadcrumbs);\n }\n\n get() {\n return this.breadcrumbs$.asObservable();\n }\n\n clear() {\n this.breadcrumbs$.next([]);\n }\n}\n","import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private renderer: Renderer2;\n private lightClass = 'light_theme';\n private theme$ = new BehaviorSubject<'light' | 'dark'>('light');\n themeStorageKey = 'host-theme';\n\n constructor(rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n const savedTheme = localStorage.getItem(this.themeStorageKey) as 'light' | 'dark' | null;\n\n if (savedTheme) {\n this.setLightMode(savedTheme === 'light');\n } else {\n this.setLightMode(true);\n }\n }\n\n setLightMode(enable: boolean) {\n if (enable) {\n this.renderer.addClass(document.body, this.lightClass);\n this.theme$.next('light');\n localStorage.setItem(this.themeStorageKey, 'light');\n } else {\n this.renderer.removeClass(document.body, this.lightClass);\n this.theme$.next('dark');\n localStorage.setItem(this.themeStorageKey, 'dark');\n }\n\n window.dispatchEvent(new CustomEvent('theme-changed', { detail: { dark: !enable } }));\n }\n\n toggleTheme() {\n const isLight = this.theme$.value === 'light';\n this.setLightMode(!isLight);\n }\n\n themeChanges() {\n return this.theme$.asObservable();\n }\n\n getCurrentTheme(): 'light' | 'dark' {\n return this.theme$.value;\n }\n\n isLight(): boolean {\n return this.theme$.value === 'light';\n }\n\n getLogoPath(): string {\n return 'assets/images/logo.png';\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\nimport { Observable } from 'rxjs';\n\nexport type NotificationCallback = (...args: any[]) => void;\n\nexport interface NotificationConnectOptions {\n headers?: any;\n accessTokenFactory?: () => string | Promise<string>;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationService {\n private hubConnection: signalR.HubConnection | null = null;\n private connectionStatus: 'disconnected' | 'connecting' | 'connected' = 'disconnected';\n\n /**\n * Single source of truth for subscriptions. The hub connection gets exactly\n * one dispatcher per event, so:\n * - off(event, callback) can remove one subscriber without nuking the rest\n * (hubConnection.off(event) removes every handler for the event);\n * - handlers registered before connect() are attached once connected;\n * - handlers survive a re-connect that builds a new HubConnection.\n */\n private handlers = new Map<string, Set<NotificationCallback>>();\n\n private connectPromise: Promise<void> | null = null;\n private lastHubUrl: string | null = null;\n private lastOptions?: NotificationConnectOptions;\n private manualDisconnect = false;\n private restartAttempts = 0;\n private restartTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Connect to SignalR Hub. Overlapping calls share the same in-flight\n * promise instead of building two competing connections.\n */\n async connect(hubUrl: string, options?: NotificationConnectOptions): Promise<void> {\n if (this.hubConnection && this.connectionStatus === 'connected') {\n return;\n }\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = this.doConnect(hubUrl, options).finally(() => {\n this.connectPromise = null;\n });\n return this.connectPromise;\n }\n\n private async doConnect(hubUrl: string, options?: NotificationConnectOptions): Promise<void> {\n try {\n this.connectionStatus = 'connecting';\n this.manualDisconnect = false;\n this.lastHubUrl = hubUrl;\n this.lastOptions = options;\n\n const connectionOptions: signalR.IHttpConnectionOptions = {\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n withCredentials: true, // Include cookies if any\n ...options\n };\n\n this.hubConnection = new signalR.HubConnectionBuilder()\n .withUrl(hubUrl, connectionOptions)\n .withAutomaticReconnect()\n .configureLogging(signalR.LogLevel.Information)\n .build();\n\n // A new HubConnection knows nothing about previous listeners:\n // re-attach one dispatcher per known event.\n for (const eventName of this.handlers.keys()) {\n this.attachDispatcher(eventName);\n }\n\n // Fires when the automatic-reconnect policy is exhausted (or the\n // server closes the socket). Restart with backoff unless the app\n // disconnected on purpose.\n this.hubConnection.onclose((error) => {\n this.connectionStatus = 'disconnected';\n if (error) {\n console.error('SignalR connection closed with error:', error);\n }\n if (!this.manualDisconnect) {\n this.scheduleRestart();\n }\n });\n\n this.hubConnection.onreconnecting(() => {\n this.connectionStatus = 'connecting';\n });\n\n this.hubConnection.onreconnected(() => {\n this.connectionStatus = 'connected';\n this.restartAttempts = 0;\n });\n\n await this.hubConnection.start();\n this.connectionStatus = 'connected';\n this.restartAttempts = 0;\n } catch (error) {\n this.connectionStatus = 'disconnected';\n console.error('Error connecting to SignalR hub:', error);\n throw error;\n }\n }\n\n private scheduleRestart(): void {\n if (this.restartTimer || !this.lastHubUrl) {\n return;\n }\n const delay = Math.min(30_000, 1_000 * 2 ** this.restartAttempts++);\n this.restartTimer = setTimeout(async () => {\n this.restartTimer = null;\n try {\n await this.connect(this.lastHubUrl!, this.lastOptions);\n } catch {\n this.scheduleRestart();\n }\n }, delay);\n }\n\n /**\n * Disconnect from SignalR Hub. Stops any pending auto-restart.\n */\n async disconnect(): Promise<void> {\n this.manualDisconnect = true;\n if (this.restartTimer) {\n clearTimeout(this.restartTimer);\n this.restartTimer = null;\n }\n if (this.hubConnection) {\n try {\n await this.hubConnection.stop();\n this.connectionStatus = 'disconnected';\n } catch (error) {\n console.error('Error disconnecting from SignalR hub:', error);\n }\n }\n }\n\n /**\n * Listen to a specific event from the server. Safe to call before\n * connect(): the handler is attached once the connection is up.\n */\n on(eventName: string, callback: NotificationCallback): void {\n let set = this.handlers.get(eventName);\n if (!set) {\n set = new Set<NotificationCallback>();\n this.handlers.set(eventName, set);\n this.attachDispatcher(eventName);\n }\n set.add(callback);\n }\n\n /**\n * Remove listener(s) for an event.\n * Prefer passing the callback (or using on$()): calling off(event) without\n * one removes EVERY handler for the event, including other features'.\n */\n off(eventName: string, callback?: NotificationCallback): void {\n const set = this.handlers.get(eventName);\n if (!set) {\n return;\n }\n if (callback) {\n set.delete(callback);\n } else {\n console.warn(\n `NotificationService.off('${eventName}') without a callback removes ALL handlers for this event. ` +\n 'Pass the callback registered with on(), or migrate to on$().'\n );\n set.clear();\n }\n if (set.size === 0) {\n this.handlers.delete(eventName);\n this.hubConnection?.off(eventName);\n }\n }\n\n /**\n * Observable stream of an event. Teardown removes exactly this\n * subscriber — the safe replacement for manual on()/off().\n * Emits the event's first argument (SignalR payloads are single-arg here).\n */\n on$<T = any>(eventName: string): Observable<T> {\n return new Observable<T>((subscriber) => {\n const callback: NotificationCallback = (payload: T) => subscriber.next(payload);\n this.on(eventName, callback);\n return () => this.off(eventName, callback);\n });\n }\n\n private attachDispatcher(eventName: string): void {\n if (!this.hubConnection) {\n return;\n }\n this.hubConnection.on(eventName, (...args: any[]) => this.dispatch(eventName, args));\n }\n\n private dispatch(eventName: string, args: any[]): void {\n const set = this.handlers.get(eventName);\n if (!set) {\n return;\n }\n // Copy: a callback may add/remove handlers while we iterate.\n for (const callback of [...set]) {\n try {\n callback(...args);\n } catch (error) {\n console.error(`Error in '${eventName}' notification handler:`, error);\n }\n }\n }\n\n /**\n * Invoke a method on the server\n * @param methodName - Name of the method to invoke\n * @param args - Arguments to pass to the method\n */\n async invoke(methodName: string, ...args: any[]): Promise<any> {\n if (!this.hubConnection || this.connectionStatus !== 'connected') {\n throw new Error('Not connected to SignalR hub');\n }\n\n try {\n return await this.hubConnection.invoke(methodName, ...args);\n } catch (error) {\n console.error(`Error invoking method ${methodName}:`, error);\n throw error;\n }\n }\n\n /**\n * Get current connection status\n */\n getConnectionStatus(): 'disconnected' | 'connecting' | 'connected' {\n return this.connectionStatus;\n }\n\n /**\n * Get connection ID\n */\n getConnectionId(): string | null {\n return this.hubConnection?.connectionId ?? null;\n }\n}\n","import { Component, Input, ViewEncapsulation, ChangeDetectionStrategy, input, output } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\n@Component({\n selector: 'fx-ui-button',\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass, HeroIconComponent],\n})\nexport class ButtonComponent {\n @Input() label: string;\n readonly disabled = input(false);\n readonly buttonVariant = input<'default' | 'primary' | 'success' | 'alternative'>('alternative');\n @Input() icon?: any;\n readonly class = input<any>();\n readonly loading = input(false);\n /** Native button type. Defaults to 'button' so it never implicitly submits a form. */\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n /** Accessible name for icon-only usage (icon set, no label). */\n readonly ariaLabel = input('');\n readonly clicked = output<void>();\n\n onClick() {\n if (!this.disabled()) this.clicked.emit();\n }\n}\n","<button\n [attr.type]=\"type()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-busy]=\"loading() || null\"\n [class]=\"class()\"\n [ngClass]=\"{\n 'btn-default': buttonVariant() === 'default',\n 'btn-primary': buttonVariant() === 'primary',\n 'btn-success': buttonVariant() === 'success',\n 'btn-alternative': buttonVariant() === 'alternative',\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onClick()\"\n>\n @if (loading()) {\n <div class=\"flex w-full items-center justify-center\" aria-hidden=\"true\">\n <svg\n [attr.fill]=\"\n buttonVariant() !== 'alternative' ? 'rgb(var(--text-primary))' : 'rgb(var(--primary))'\n \"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"4\" cy=\"12\" r=\"0\">\n <animate\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_OLMs.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_UHR2.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_lo66\"\n begin=\"spinner_Aguh.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_z0Or\"\n begin=\"spinner_lo66.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n </circle>\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_OLMs.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_JsnR\"\n begin=\"spinner_UHR2.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_Aguh\"\n begin=\"spinner_JsnR.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_Aguh.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\">\n <animate\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_hSjk\"\n begin=\"spinner_OLMs.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_UHR2\"\n begin=\"spinner_hSjk.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_UHR2.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_Aguh.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\">\n <animate\n id=\"spinner_4v5M\"\n begin=\"0;spinner_z0Or.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"3;0\"\n fill=\"freeze\"\n />\n <animate\n id=\"spinner_OLMs\"\n begin=\"spinner_4v5M.end\"\n attributeName=\"cx\"\n dur=\"0.001s\"\n values=\"20;4\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_OLMs.end\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"0;3\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_UHR2.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"4;12\"\n fill=\"freeze\"\n />\n <animate\n begin=\"spinner_Aguh.end\"\n attributeName=\"cx\"\n calcMode=\"spline\"\n dur=\"0.5s\"\n keySplines=\".36,.6,.31,1\"\n values=\"12;20\"\n fill=\"freeze\"\n />\n </circle>\n </svg>\n </div>\n } @else {\n <ng-container>\n <div class=\"flex items-center justify-center gap-small\">\n @if (icon) {\n <fx-ui-hero-icon\n [icon]=\"icon\"\n [size]=\"20\"\n class=\"flex\"\n [ngClass]=\"{\n 'text-text-inverse': buttonVariant() === 'default',\n 'text-text-primary': buttonVariant() === 'alternative',\n 'text-white': buttonVariant() === 'primary' || buttonVariant() === 'success',\n }\"\n ></fx-ui-hero-icon>\n }\n @if (label) {\n <div>{{ label }}</div>\n }\n </div>\n </ng-container>\n }\n</button>\n","import { Component, Inject, ChangeDetectionStrategy } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions } from '@angular/material/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { ButtonComponent } from '../../components/button/button.component';\n\n@Component({\n selector: 'fx-ui-confirmation-dialog',\n templateUrl: './confirmation.component.html',\n styleUrl: './confirmation.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatDialogActions,\n ButtonComponent,\n ],\n})\nexport class ConfirmationDialogComponent {\n loading = false;\n title = '';\n message = '';\n cancelLabel = 'Cancel';\n confirmLabel = 'Submit';\n\n constructor(\n private ref: MatDialogRef<ConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public bindings: any\n ) {\n this.title = bindings?.['title'];\n this.message = bindings?.['message'];\n this.cancelLabel = bindings?.['cancelLabel'];\n this.confirmLabel = bindings?.['confirmLabel'];\n }\n\n async accept() {\n this.loading = true;\n if (this.bindings?.['callback']) {\n await this.bindings.callback();\n this.loading = false;\n }\n this.ref.close(true);\n }\n\n cancel() {\n this.ref.close(false);\n }\n}\n","<div animate.enter=\"fade-in-animation\" class=\"dialog-container\">\n <h1 mat-dialog-title class=\"txt-heading-05 dialog-header\">{{ title }}</h1>\n <mat-dialog-content>\n <div class=\"txt-default\">{{ message }}</div>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <fx-ui-button class=\"mr-1\" [label]=\"cancelLabel\" (clicked)=\"cancel()\"></fx-ui-button>\n <fx-ui-button\n buttonVariant=\"primary\"\n class=\"mr-1\"\n [label]=\"confirmLabel\"\n (clicked)=\"accept()\"\n [loading]=\"loading\"\n class=\"min-w-[100px]\"\n ></fx-ui-button>\n </mat-dialog-actions>\n</div>\n","import { Injectable, TemplateRef, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { ConfirmationDialogComponent } from '../../ui/dialogs/confirmation/confirmation.component';\n\nexport interface FxConfirmOptions {\n title?: string;\n message?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\n/**\n * Thin façade over MatDialog so app code never imports @angular/material\n * directly (behavior-layer rule, Playbook §5.1). Same semantics — the\n * returned ref is the Material one, typed through this service.\n */\n@Injectable({ providedIn: 'root' })\nexport class FxDialogService {\n private dialog = inject(MatDialog);\n\n open<T, D = any, R = any>(\n component: ComponentType<T> | TemplateRef<T>,\n config?: MatDialogConfig<D>,\n ): MatDialogRef<T, R> {\n return this.dialog.open(component, config);\n }\n\n /** Standard confirmation flow — resolves true when the user confirms. */\n async confirm(options: FxConfirmOptions = {}): Promise<boolean> {\n // ConfirmationDialogComponent reads MAT_DIALOG_DATA as its bindings and\n // closes with true/false.\n const ref = this.dialog.open(ConfirmationDialogComponent, { data: { ...options } });\n return !!(await firstValueFrom(ref.afterClosed()));\n }\n\n closeAll(): void {\n this.dialog.closeAll();\n }\n}\n","import { ChangeDetectorRef, Directive, Input, inject } from '@angular/core';\nimport { ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\nimport { FxUtils } from '../../core/utils';\n\nexport type ErrorMessages = Record<string, any>;\n\n@Directive()\nexport abstract class FxComponent<T> implements ControlValueAccessor {\n /**\n * Injected via inject() rather than a constructor parameter: parameter\n * decorators (@Optional/@Self) are NOT inherited by subclasses, which used\n * to make every control crash when used without a form binding, or silently\n * bind to an ancestor's NgControl.\n */\n public ngControl = inject(NgControl, { optional: true, self: true });\n\n /** With OnPush, programmatic writes (form.setValue / setDisabledState) must\n * mark the view — CVA calls come from outside the component's own events. */\n protected cdr = inject(ChangeDetectorRef);\n\n @Input() disabled = false;\n\n value: T;\n public onChange: (value: T) => void = () => undefined;\n public onTouched: () => void = () => undefined;\n\n validationError?: ErrorMessages;\n errorMessages?: ErrorMessages;\n\n constructor() {\n if (this.ngControl) this.ngControl.valueAccessor = this;\n }\n\n setValue(value: T) {\n if (this.onChange) {\n this.onChange(value);\n }\n }\n\n onEnter(value: T) {\n if (this.onChange) {\n this.onChange(value);\n }\n }\n\n writeValue(value: T): void {\n // Pass through as-is. Coercing null to '' here broke boolean/number\n // controls; string controls that want '' as their empty value override.\n this.value = value;\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n get invalid(): boolean {\n return !!(this.ngControl?.invalid && this.ngControl?.touched);\n }\n\n get errors(): Record<string, any> {\n return this.ngControl?.errors || {};\n }\n\n validate(validateFn?: (value: T) => ValidationErrors | null | undefined): void {\n if (this.invalid) return;\n if (validateFn) {\n const error = validateFn(this.value);\n if (FxUtils.isNotNull(error)) {\n this.setErrors(error ?? {});\n }\n }\n }\n\n public setErrors(error: ValidationErrors) {\n this.validationError = error;\n const control = this.ngControl?.control;\n if (!control) return;\n control.setErrors({ ...control.errors, ...error });\n }\n\n /**\n * Removes only the errors this component set imperatively via setErrors().\n * Errors owned by the validator pipeline (built-in or custom validators)\n * are left untouched.\n */\n public clearErrors() {\n const control = this.ngControl?.control;\n if (!control || !this.validationError) return;\n const remaining = { ...(control.errors || {}) };\n for (const key of Object.keys(this.validationError)) {\n delete remaining[key];\n }\n this.validationError = undefined;\n control.setErrors(Object.keys(remaining).length ? remaining : null);\n }\n\n getErrorMessage(label?: string): string | null {\n if (!this.errors) return null;\n const displayLabel = FxUtils.isStringEmpty(label ?? '') ? 'This field' : label;\n const defaultMessages: ErrorMessages = {\n required: `${displayLabel} is required`,\n minlength: `${displayLabel} minimum length is ${this.errors['minlength']?.requiredLength}`,\n email: 'Please enter a valid email',\n };\n const messages = { ...defaultMessages, ...this.validationError, ...this.errorMessages };\n const firstKey = Object.keys(this.errors)[0];\n return messages[firstKey] || `Invalid ${label ?? 'value'}`;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n Input,\n ChangeDetectionStrategy,\n input,\n output\n} from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'fx-ui-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class CheckboxComponent extends FxComponent<any> implements AfterViewInit {\n @Input() label = '';\n readonly rounded = input<boolean>();\n readonly valueChange = output<boolean>();\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n override writeValue(value: any): void {\n this.value = value ?? false;\n }\n\n onInputChange(event: Event) {\n const checked = (event.target as HTMLInputElement).checked;\n this.value = checked;\n this.onChange(checked);\n this.valueChange.emit(checked);\n }\n\n markTouched() {\n this.onTouched();\n }\n}\n","<label\n class=\"flex items-center gap-normal cursor-pointer select-none\"\n [class.opacity-50]=\"disabled\"\n [class.cursor-not-allowed]=\"disabled\"\n>\n <!-- sr-only (not `hidden`): keeps the input focusable and in the a11y tree -->\n <input\n type=\"checkbox\"\n class=\"peer sr-only\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onTouched()\"\n />\n <span\n class=\"relative w-4 h-4 border rounded-full transition-colors duration-150 shrink-0 peer-focus-visible:ring-2 peer-focus-visible:ring-primary/50\"\n [ngClass]=\"{\n 'rounded-full': rounded(),\n 'rounded-sm': !rounded(),\n 'border-border-strong bg-transparent': !value,\n 'border-transparent bg-gradient-primary': value,\n }\"\n >\n <!-- Keep SVG space reserved always -->\n <span class=\"absolute inset-0 flex items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"text-white w-4 h-4 transition-opacity duration-150\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [style.opacity]=\"value ? 1 : 0\"\n >\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n </span>\n </span>\n\n @if (label) {\n <span class=\"mb-0 txt-field-label\">{{ label }}</span>\n }\n</label>\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-circle-progress-bar',\n templateUrl: './circle-progress-bar.component.html',\n styleUrl: './circle-progress-bar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CircleProgressBar {\n readonly percent = input(0);\n readonly showPercent = input(false);\n\n readonly radius = 35;\n readonly stroke = 10;\n readonly normalizedRadius = this.radius - this.stroke / 2;\n readonly circumference = 2 * Math.PI * this.normalizedRadius;\n\n get dashOffset(): number {\n const clamped = Math.max(0, Math.min(100, this.percent()));\n return this.circumference - (clamped / 100) * this.circumference;\n }\n\n get ariaLabel(): string {\n return `${Math.round(this.percent())}%`;\n }\n}\n","<div class=\"flex items-center justify-center w-full h-full\">\n <svg\n class=\"transform -rotate-90 block\"\n [attr.viewBox]=\"'0 0 ' + radius * 2 + ' ' + radius * 2\"\n width=\"100%\"\n height=\"100%\"\n >\n <circle\n class=\"opacity-20\"\n [attr.cx]=\"radius\"\n [attr.cy]=\"radius\"\n [attr.r]=\"normalizedRadius\"\n [attr.stroke-width]=\"stroke\"\n fill=\"transparent\"\n stroke=\"currentColor\"\n ></circle>\n\n <circle\n class=\"stroke-current\"\n [attr.cx]=\"radius\"\n [attr.cy]=\"radius\"\n [attr.r]=\"normalizedRadius\"\n [attr.stroke-width]=\"stroke\"\n fill=\"transparent\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"dashOffset\"\n style=\"transition: stroke-dashoffset 300ms linear\"\n ></circle>\n\n @if(showPercent()){\n <text\n [attr.x]=\"radius\"\n [attr.y]=\"radius\"\n dominant-baseline=\"central\"\n text-anchor=\"middle\"\n class=\"text-xs font-medium\"\n fill=\"currentColor\"\n >\n {{ percent() }}%\n </text>\n }\n </svg>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n input\n} from '@angular/core';\nimport { ErrorMessages, FxComponent } from '../fx-component.component';\nimport { ValidationErrors } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatTimepickerModule } from '@angular/material/timepicker';\nimport { MAT_DATE_LOCALE, provideNativeDateAdapter } from '@angular/material/core';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\nlet nextPickerId = 0;\n\nconst pad = (n: number) => String(n).padStart(2, '0');\n\n/**\n * Date/time field backed by first-party Material pickers (mat-datepicker +\n * mat-timepicker, the latter first-party since Material 19) — replaces the\n * former @danielmoncada/angular-datetime-picker + moment adapter stack.\n *\n * The public contract is unchanged: the CVA value is a plain string\n * ('YYYY-MM-DD HH:mm' for type 'both', 'YYYY-MM-DD' for 'calendar',\n * 'HH:mm' for 'timer'), so existing forms keep working as-is.\n */\n@Component({\n selector: 'fx-ui-datetime-picker',\n templateUrl: './datetime-picker.component.html',\n styleUrl: './datetime-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDatepickerModule, MatTimepickerModule, HeroIconComponent],\n providers: [\n provideNativeDateAdapter(),\n // en-GB display ⇒ DD/MM/YYYY + 24h — matches FxUtils.formatDateTime.\n { provide: MAT_DATE_LOCALE, useValue: 'en-GB' },\n ],\n})\nexport class DatetimePicker extends FxComponent<any> implements AfterViewInit {\n @Input() label?: string;\n readonly placeholder = input('Select date and time');\n readonly required = input(false);\n /** 'both' | 'calendar' | 'timer' — same values the Owl picker accepted. */\n readonly type = input<'both' | 'calendar' | 'timer'>('both');\n readonly minDate = input<any>();\n readonly maxDate = input<any>();\n @Input() override errorMessages: ErrorMessages = {};\n readonly validateFn = input<(date: string) => ValidationErrors | null>();\n\n readonly fieldId = `fx-datetime-${nextPickerId++}`;\n\n /** Internal Date the Material pickers operate on; `value` stays a string. */\n dateValue: Date | null = null;\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.ref.detectChanges();\n });\n }\n\n get showDate(): boolean {\n return this.type() !== 'timer';\n }\n get showTime(): boolean {\n return this.type() !== 'calendar';\n }\n get min(): Date | null {\n return this.toDate(this.minDate());\n }\n get max(): Date | null {\n return this.toDate(this.maxDate());\n }\n\n onBlur() {\n this.onTouched();\n this.validate(this.validateFn());\n }\n\n override writeValue(value: any): void {\n this.value = value ?? '';\n this.dateValue = this.toDate(value);\n this.ref.markForCheck();\n }\n\n onDateChange(date: Date | null): void {\n if (this.disabled) return;\n const next = date ? new Date(date) : null;\n // Keep the already-picked time when only the calendar part changes.\n if (next && this.dateValue) {\n next.setHours(this.dateValue.getHours(), this.dateValue.getMinutes(), 0, 0);\n }\n this.commit(next);\n }\n\n onTimeChange(time: Date | null): void {\n if (this.disabled || !time) return;\n const next = this.dateValue ? new Date(this.dateValue) : new Date();\n next.setHours(time.getHours(), time.getMinutes(), 0, 0);\n this.commit(next);\n }\n\n private commit(next: Date | null): void {\n this.dateValue = next;\n this.value = this.format(next);\n this.onChange(this.value);\n this.onTouched();\n this.ref.markForCheck();\n }\n\n private toDate(value: any): Date | null {\n if (!value) return null;\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\n // Accepted string shapes: 'YYYY-MM-DD', 'YYYY-MM-DD HH:mm[:ss]', 'HH:mm'.\n const s = String(value).trim();\n if (/^\\d{2}:\\d{2}/.test(s)) {\n const d = new Date();\n d.setHours(+s.slice(0, 2), +s.slice(3, 5), 0, 0);\n return d;\n }\n const d = new Date(s.replace(' ', 'T'));\n return isNaN(d.getTime()) ? null : d;\n }\n\n private format(d: Date | null): string {\n if (!d) return '';\n const date = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n const time = `${pad(d.getHours())}:${pad(d.getMinutes())}`;\n const type = this.type();\n if (type === 'calendar') return date;\n if (type === 'timer') return time;\n return `${date} ${time}`;\n }\n}\n","<div class=\"flex flex-col mb-4 w-full text-left\">\n @if (label) {\n <label class=\"txt-field-label\" [attr.for]=\"fieldId\">\n {{ label }}\n @if (required()) {\n <span class=\"txt-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div class=\"flex gap-normal\">\n @if (showDate) {\n <div class=\"relative flex-1\">\n <input\n [id]=\"fieldId\"\n [matDatepicker]=\"datePicker\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n [min]=\"min\"\n [max]=\"max\"\n [value]=\"dateValue\"\n (dateChange)=\"onDateChange($event.value)\"\n (click)=\"!disabled && datePicker.open()\"\n (blur)=\"onBlur()\"\n readonly\n class=\"input-default pr-9\"\n />\n <span\n (click)=\"!disabled && datePicker.open()\"\n class=\"absolute inset-y-0 right-0 flex items-center pr-2.5 cursor-pointer text-text-placeholder hover:text-text-primary transition-colors\"\n >\n <fx-ui-hero-icon icon=\"calendar\" [size]=\"20\" class=\"text-text-primary\"></fx-ui-hero-icon>\n </span>\n <mat-datepicker #datePicker></mat-datepicker>\n </div>\n }\n @if (showTime) {\n <div class=\"relative\" [class.flex-1]=\"!showDate\" [class.w-32]=\"showDate\">\n <input\n [matTimepicker]=\"timePicker\"\n placeholder=\"HH:mm\"\n [disabled]=\"disabled\"\n [value]=\"dateValue\"\n (valueChange)=\"onTimeChange($event)\"\n (click)=\"!disabled && timePicker.open()\"\n (blur)=\"onBlur()\"\n readonly\n class=\"input-default pr-9\"\n />\n <span\n (click)=\"!disabled && timePicker.open()\"\n class=\"absolute inset-y-0 right-0 flex items-center pr-2.5 cursor-pointer text-text-placeholder hover:text-text-primary transition-colors\"\n >\n <fx-ui-hero-icon icon=\"clock\" [size]=\"20\" class=\"text-text-primary\"></fx-ui-hero-icon>\n </span>\n <mat-timepicker #timePicker></mat-timepicker>\n </div>\n }\n </div>\n @if (invalid) {\n <div class=\"txt-invalid\">{{ getErrorMessage(label) }}</div>\n }\n</div>\n","import { Component, Input, ChangeDetectorRef, inject, ChangeDetectionStrategy, input, output } from '@angular/core';\nimport { NgStyle } from '@angular/common';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\nexport interface UploadResult {\n files: File[];\n accepted: File[];\n rejected: { file: File; reason: string }[];\n}\n\n@Component({\n selector: 'fx-ui-dnd-upload',\n templateUrl: './dnd-upload.component.html',\n styleUrl: './dnd-upload.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgStyle, HeroIconComponent],\n})\nexport class DndUploadComponent {\n private cdr = inject(ChangeDetectorRef);\n readonly multiple = input(false);\n @Input() accept = '';\n readonly maxSizeMB = input(10);\n readonly strictSize = input(true);\n /** Icon name from heroicons (outline). Default: 'arrow-up-tray' */\n readonly icon = input('arrow-up-tray');\n /** CSS color value for accent (border, icon, link). Default uses --gradient-primary-start */\n readonly accentColor = input('');\n\n readonly fileDrop = output<File[]>();\n readonly fileClick = output<void>();\n readonly uploadComplete = output<File[]>();\n readonly uploadError = output<{\n file: File;\n reason: string;\n}>();\n\n isDragOver = false;\n private isOpening = false;\n\n get accentStyle(): Record<string, string> {\n const accentColor = this.accentColor();\n if (!accentColor) return {};\n return { '--dnd-accent': accentColor } as Record<string, string>;\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n this.isDragOver = false;\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.isDragOver = false;\n\n if (!event.dataTransfer?.files?.length) return;\n const files = Array.from(event.dataTransfer.files);\n this.processFiles(files);\n }\n\n onAreaClick(inputEl: HTMLInputElement | null, event?: Event) {\n if (this.isOpening) return;\n this.isOpening = true;\n\n this.fileClick.emit();\n (event?.currentTarget as HTMLElement)?.blur?.();\n\n setTimeout(() => {\n inputEl?.click();\n this.isOpening = false;\n this.cdr.markForCheck();\n }, 0);\n }\n\n onFileSelected(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) return;\n const files = Array.from(input.files);\n this.processFiles(files);\n input.value = '';\n }\n\n private processFiles(files: File[]) {\n const valid: File[] = [];\n\n const acceptedTypes = this.accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter((t) => t);\n\n for (const file of files) {\n const sizeMB = file.size / 1024 / 1024;\n if (this.strictSize() && sizeMB > this.maxSizeMB()) {\n this.uploadError.emit({\n file,\n reason: `File too large: ${sizeMB.toFixed(2)} MB > ${this.maxSizeMB()} MB`,\n });\n continue;\n }\n if (acceptedTypes.length && !this.isAccepted(file, acceptedTypes)) {\n this.uploadError.emit({\n file,\n reason: `File type not allowed: \"${file.name}\"`,\n });\n continue;\n }\n valid.push(file);\n }\n if (valid.length) {\n this.fileDrop.emit(valid);\n this.onUpload(valid);\n }\n }\n\n private onUpload(files: File[]) {\n this.uploadComplete.emit(files);\n }\n\n private isAccepted(file: File, accepted: string[]): boolean {\n const fileType = file.type.toLowerCase();\n const fileExt = '.' + file.name.split('.').pop()!.toLowerCase();\n\n return accepted.some((a) => {\n if (a.startsWith('.')) {\n return a === fileExt;\n }\n if (a.endsWith('/*')) {\n return fileType.startsWith(a.replace('/*', ''));\n }\n return a === fileType;\n });\n }\n}\n","<div\n class=\"dnd-wrapper\"\n [ngStyle]=\"accentStyle\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <div\n role=\"button\"\n tabindex=\"0\"\n class=\"dnd-area\"\n [class.drag-over]=\"isDragOver\"\n (click)=\"onAreaClick(fileInput, $event)\"\n (keydown.enter)=\"onAreaClick(fileInput, $event)\"\n >\n <fx-ui-hero-icon\n [icon]=\"icon()\"\n [size]=\"40\"\n class=\"flex dnd-icon\"\n ></fx-ui-hero-icon>\n <div class=\"dnd-text\">\n <span class=\"dnd-link\">Click to upload</span>\n <span class=\"dnd-or\">or drag and drop</span>\n </div>\n <div class=\"dnd-hint\">\n @if (accept) {\n Accepted: {{ accept }}\n } @else {\n Any file type\n }\n — Max {{ maxSizeMB() }} MB\n </div>\n\n <input\n #fileInput\n type=\"file\"\n class=\"dnd-input\"\n [attr.multiple]=\"multiple() ? '' : null\"\n [attr.accept]=\"accept\"\n (change)=\"onFileSelected($event)\"\n />\n </div>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n Input,\n ChangeDetectionStrategy,\n input,\n output\n} from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { FxComponent } from '../fx-component.component';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { TrimOnBlurDirective } from '../../../core/directives/trim.directive';\n\nlet nextInputId = 0;\n\n@Component({\n selector: 'fx-ui-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n HeroIconComponent,\n MatTooltip,\n TrimOnBlurDirective,\n ],\n})\nexport class InputComponent extends FxComponent<string> implements AfterViewInit {\n @Input() label = '';\n @Input() tooltip = '';\n @Input() type = 'text';\n readonly placeholder = input('');\n @Input() override errorMessages: Record<string, string> = {};\n readonly required = input<string | boolean>(false);\n @Input() suffixIcon?: string;\n readonly class = input<any>();\n readonly maxlength = input<number>();\n readonly validateFn = input<(value: string) => ValidationErrors | null>();\n readonly blurred = output<void>();\n readonly focused = output<void>();\n readonly suffixClick = output<void>();\n /** Accessible name for the suffix icon button (it renders no text). */\n readonly suffixAriaLabel = input('');\n\n readonly fieldId = `fx-input-${nextInputId++}`;\n showPassword = false;\n validateError: ValidationErrors | null = null;\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n override writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n let newValue = input.value;\n\n const maxlength = this.maxlength();\n if (maxlength && newValue.length > maxlength) {\n newValue = newValue.slice(0, maxlength);\n input.value = newValue;\n }\n\n this.value = newValue;\n this.onChange(this.value);\n }\n\n onFocus() {\n this.clearErrors();\n this.focused.emit();\n }\n\n onBlur() {\n this.onTouched();\n this.blurred.emit();\n const validateFn = this.validateFn();\n if (validateFn) {\n this.validateError = validateFn(this.value);\n this.validate(validateFn);\n }\n }\n\n togglePassword(): void {\n this.showPassword = !this.showPassword;\n }\n\n onSuffixClick(): void {\n if (this.type === 'password') {\n this.togglePassword();\n } else {\n this.suffixClick.emit();\n }\n }\n\n get displayType(): string {\n if (this.type === 'password' && this.showPassword) return 'text';\n if (this.type === 'otp') return 'number';\n return this.type;\n }\n}\n","<div class=\"mb-4 text-left w-full text-text-primary\" [class]=\"class()\">\n @if (label) {\n <label class=\"block txt-field-label\" [attr.for]=\"fieldId\">\n {{ label }}\n @if (required()) {\n <span class=\"txt-required\" aria-hidden=\"true\">*</span>\n }\n @if (tooltip) {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [size]=\"16\"\n class=\"inline-block align-middle ml-0.5 text-text-secondary cursor-help relative -top-px\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n ></fx-ui-hero-icon>\n }\n </label>\n }\n\n <div class=\"relative\">\n <input\n appTrimOnBlur\n [appTrimOnBlurCollapse]=\"true\"\n [id]=\"fieldId\"\n [type]=\"displayType\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-invalid]=\"invalid || null\"\n [attr.aria-describedby]=\"invalid ? fieldId + '-error' : null\"\n [attr.aria-required]=\"required() ? true : null\"\n [class]=\"type === 'otp' ? 'input-otp' : 'input-default'\"\n [class.input-invalid]=\"invalid\"\n [class.pr-8]=\"type === 'password' || suffixIcon\"\n [class.txt-otp-input]=\"type === 'otp'\"\n />\n @if (type === 'password' || suffixIcon) {\n <button\n type=\"button\"\n class=\"absolute inset-y-0 right-2 flex items-center text-text-primary hover:text-text-secondary\"\n (click)=\"onSuffixClick()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n type === 'password'\n ? (showPassword ? 'Hide password' : 'Show password')\n : (suffixAriaLabel() || null)\n \"\n [attr.aria-pressed]=\"type === 'password' ? showPassword : null\"\n >\n @if (type === 'password') {\n <fx-ui-hero-icon\n [icon]=\"showPassword ? 'eye-slash' : 'eye'\"\n [size]=\"18\"\n class=\"text-text-primary\"\n aria-hidden=\"true\"\n ></fx-ui-hero-icon>\n } @else if (suffixIcon) {\n <fx-ui-hero-icon\n [icon]=\"suffixIcon\"\n [size]=\"18\"\n class=\"text-text-primary\"\n aria-hidden=\"true\"\n ></fx-ui-hero-icon>\n }\n </button>\n }\n </div>\n\n @if (invalid) {\n <div class=\"txt-invalid\" role=\"alert\" [id]=\"fieldId + '-error'\">\n {{ getErrorMessage(label) }}\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-loading-panel',\n templateUrl: './loading-panel.component.html',\n styleUrl: './loading-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoadingPanel {\n readonly show = input(false);\n @Input() message?: string = \"Loading\";\n}\n","<!-- Full-screen glass overlay -->\n@if (show()) {\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center\"\n aria-hidden=\"false\"\n role=\"alert\"\n aria-busy=\"true\"\n >\n <div class=\"absolute inset-0 bg-bg-primary/30 backdrop-blur-xl\" aria-hidden=\"true\"></div>\n <div\n class=\"relative z-10 flex flex-col items-center gap-4 p-6 rounded-2xl shadow-xl bg-bg-primary/70 border border-border-strong backdrop-bg-primary/70\"\n style=\"min-width: 220px; max-width: 90%\"\n >\n <svg fill=\"url(#spinner-gradient)\" width=\"50\" height=\"50\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient id=\"spinner-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" style=\"stop-color: rgb(var(--gradient-primary-start)); stop-opacity: 1\" />\n <stop offset=\"100%\" style=\"stop-color: rgb(var(--gradient-primary-end)); stop-opacity: 1\" />\n </linearGradient>\n </defs>\n <circle cx=\"4\" cy=\"12\" r=\"0\">\n <animate begin=\"0;spinner_z0Or.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n <animate begin=\"spinner_OLMs.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n <animate begin=\"spinner_UHR2.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n <animate id=\"spinner_lo66\" begin=\"spinner_Aguh.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_z0Or\" begin=\"spinner_lo66.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n </circle>\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate begin=\"0;spinner_z0Or.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n <animate begin=\"spinner_OLMs.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n <animate id=\"spinner_JsnR\" begin=\"spinner_UHR2.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_Aguh\" begin=\"spinner_JsnR.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n <animate begin=\"spinner_Aguh.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\">\n <animate begin=\"0;spinner_z0Or.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n <animate id=\"spinner_hSjk\" begin=\"spinner_OLMs.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_UHR2\" begin=\"spinner_hSjk.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n <animate begin=\"spinner_UHR2.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n <animate begin=\"spinner_Aguh.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\">\n <animate id=\"spinner_4v5M\" begin=\"0;spinner_z0Or.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/>\n <animate id=\"spinner_OLMs\" begin=\"spinner_4v5M.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/>\n <animate begin=\"spinner_OLMs.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/>\n <animate begin=\"spinner_UHR2.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/>\n <animate begin=\"spinner_Aguh.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/>\n </circle>\n </svg>\n @if (message) {\n <div class=\"text-sm text-text-primary text-center\">\n {{ message }}\n </div>\n }\n </div>\n </div>\n}\n","import { AfterViewInit, ChangeDetectorRef, Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { ErrorMessages, FxComponent } from '../fx-component.component';\nimport { NgClass } from '@angular/common';\n\nlet nextToggleGroupId = 0;\n\n@Component({\n selector: 'fx-ui-radio-toggle, [fx-ui-radio-toggle]',\n templateUrl: './radio-button-toggle.component.html',\n styleUrl: './radio-button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class RadioButtonToggleComponent extends FxComponent<any> implements AfterViewInit {\n readonly groupId = `fx-radio-toggle-${nextToggleGroupId++}`;\n @Input() label?: string;\n readonly required = input<boolean | undefined>(false);\n readonly options = input<{\n label: string;\n value: any;\n icon?: any;\n}[]>([]);\n @Input() override errorMessages: ErrorMessages = {};\n readonly class = input<any>();\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n onSelectValue(value: any): void {\n if (this.disabled) return;\n this.value = value;\n this.onChange(value);\n this.onTouched();\n }\n}\n","<div class=\"flex flex-col text-left mb-4 w-full\" [class]=\"class()\">\n <!-- A radiogroup has no single control a <label> could point at — name it via aria-labelledby. -->\n @if(label){<span class=\"txt-field-label\" [id]=\"groupId + '-label'\">\n {{ label }}\n @if(required()) {<span class=\"txt-required\" aria-hidden=\"true\">*</span>} </span\n >}\n\n <div\n class=\"inline-flex w-full rounded-lg overflow-hidden\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"label ? groupId + '-label' : null\"\n >\n @for(opt of options(); track opt){<button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"value === opt.value\"\n (click)=\"onSelectValue(opt.value)\"\n [disabled]=\"disabled\"\n [class.text-gray-900]=\"value !== opt.value\"\n class=\"flex-1 bg-bg-primary flex items-center pl-normal gap-normal h-10 rounded-md hover:bg-bg-hover transition-all duration-150 disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n <span\n [ngClass]=\"{\n 'radio-checked': value === opt.value,\n 'radio-uncheck': value !== opt.value\n }\"\n class=\"radio-container\"\n >\n @if(value === opt.value) {<span class=\"radio-dot\"></span>}\n </span>\n\n <span class=\"txt-field-label mb-0\">{{ opt.label }}</span></button\n >}\n </div>\n\n @if(invalid){\n <div class=\"txt-invalid\">{{ getErrorMessage(label) }}</div>\n }\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { ErrorMessages, FxComponent } from '../fx-component.component';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { NgClass } from '@angular/common';\n\nexport interface IRadioButton {\n label: string;\n value: any;\n description?: string;\n tooltip?: string;\n}\n\nlet nextRadioGroupId = 0;\n\n@Component({\n selector: 'fx-ui-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n HeroIconComponent,\n MatTooltip,\n NgClass,\n ],\n})\nexport class RadioButtonComponent extends FxComponent<IRadioButton> implements AfterViewInit {\n readonly groupId = `fx-radio-${nextRadioGroupId++}`;\n @Input() label?: string;\n @Input() tooltip = '';\n readonly required = input<boolean | undefined>(false);\n readonly options = input<{\n label: string;\n value: any;\n icon?: any;\n tooltip?: string;\n}[]>([]);\n @Input() override errorMessages: ErrorMessages = {};\n readonly class = input<any>();\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n onSelectValue(value: any): void {\n if (this.disabled) return;\n this.value = value;\n this.onChange(value);\n this.onTouched();\n }\n}\n","<div\n class=\"w-full rounded-lg overflow-hidden\"\n [class]=\"class()\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"label ? groupId + '-label' : null\"\n >\n <!-- A radiogroup has no single control a <label> could point at — name it via aria-labelledby. -->\n @if (label) {\n <span class=\"txt-field-label block\" [id]=\"groupId + '-label'\">\n {{ label }}\n @if (required()) {\n <span class=\"txt-required\" aria-hidden=\"true\">*</span>\n }\n @if (tooltip) {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [size]=\"16\"\n class=\"inline-block align-middle ml-0.5 text-text-secondary cursor-help relative -top-px\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n ></fx-ui-hero-icon>\n }\n </span>\n }\n\n @for (opt of options(); track opt) {\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"value === opt.value\"\n (click)=\"onSelectValue(opt.value)\"\n [disabled]=\"disabled\"\n [class.text-gray-900]=\"value !== opt.value\"\n class=\"flex-1 px-normal w-full flex items-center gap-normal h-10 rounded-md hover:bg-bg-hover transition-all duration-150 disabled:opacity-60 disabled:cursor-not-allowed\"\n [matTooltip]=\"opt.tooltip || ''\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n >\n <span\n [ngClass]=\"{\n 'radio-checked': value === opt.value,\n 'radio-uncheck': value !== opt.value,\n }\"\n class=\"radio-container\"\n >\n @if (value === opt.value) {\n <span class=\"radio-dot\"></span>\n }\n </span>\n <span class=\"txt-default mb-0\">{{ opt.label }}</span>\n </button>\n }\n @if (invalid) {\n <div class=\"txt-invalid\">\n {{ getErrorMessage(label) }}\n </div>\n }\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, ChangeDetectionStrategy, input, output } from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\n@Component({\n selector: 'fx-ui-search-bar',\n templateUrl: './search-bar.component.html',\n styleUrl: './search-bar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HeroIconComponent],\n})\nexport class SearchBarComponent extends FxComponent<string> implements AfterViewInit {\n readonly placeholder = input('Search...');\n readonly search = output<string>();\n readonly valueChange = output<string>();\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n override writeValue(value: string): void {\n this.value = value ?? '';\n }\n \n onValueChange(value: string) {\n this.value = value;\n this.setValue(value);\n this.valueChange.emit(value);\n }\n\n onEnterKey() {\n this.onEnter(this.value);\n this.search.emit(this.value.trim());\n }\n\n clear() {\n this.value = '';\n this.setValue(this.value);\n this.valueChange.emit('');\n this.search.emit('');\n }\n}\n","<div class=\"relative\">\n <fx-ui-hero-icon icon=\"magnifying-glass\" [size]=\"18\" class=\"absolute left-1 top-[3px] text-text-primary\"></fx-ui-hero-icon>\n <input\n type=\"text\"\n class=\"input-default px-9\"\n [attr.placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (keydown.enter)=\"onEnterKey()\"\n />\n\n @if (value && !disabled) {\n <button\n type=\"button\"\n class=\"absolute inset-y-0 right-2 flex items-center text-text-primary hover:text-text-secondary\"\n (click)=\"clear()\"\n aria-label=\"Clear\"\n >\n <i class=\"material-symbols-outlined text-lg select-none\">close</i>\n </button>\n }\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n inject, ChangeDetectionStrategy,\n input,\n output\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FxComponent } from '../fx-component.component';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatFormField, MatSelect, MatOption } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\n\nlet nextSelectId = 0;\n\n@Component({\n selector: 'fx-ui-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n HeroIconComponent,\n MatTooltip,\n MatFormField,\n MatSelect,\n FormsModule,\n MatOption,\n ],\n})\nexport class SelectComponent\n extends FxComponent<string | string[]>\n implements AfterViewInit, OnInit, OnChanges\n{\n @Input() label = '';\n @Input() tooltip = '';\n readonly placeholder = input('');\n readonly options = input<{\n label: string;\n value: string;\n}[]>([]);\n readonly multiple = input(false);\n @Input() override errorMessages: Record<string, string> = {};\n readonly required = input(false);\n readonly class = input<any>();\n readonly enableSearch = input(false);\n readonly searchFn = input<(query: string) => Promise<{\n label: string;\n value: string;\n}[]>>();\n /** Emits the current value when the select panel closes (useful for multiple mode). */\n readonly closed = output<string | string[]>();\n\n readonly fieldId = `fx-select-${nextSelectId++}`;\n searchTerm = '';\n filteredOptions: { label: string; value: string }[] = [];\n private search$ = new Subject<string>();\n private destroyRef = inject(DestroyRef);\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n // mat-select treats '' as \"nothing selected\"; keep the legacy empty value.\n override writeValue(value: string | string[]): void {\n this.value = value ?? '';\n }\n\n ngOnInit(): void {\n this.filteredOptions = this.options();\n\n this.search$\n .pipe(debounceTime(300), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((term) => this.performSearch(term));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Sync the rendered list when options arrive/refresh asynchronously\n // (ngOnInit captures the initial — often empty — array only).\n if (changes['options']) {\n this.filteredOptions = this.options() ?? [];\n this.ref?.detectChanges();\n }\n }\n ngAfterViewInit(): void {\n this.ref.detectChanges();\n }\n\n onOpened(open: boolean) {\n if (open) {\n this.filteredOptions = this.options();\n if (this.enableSearch()) this.searchTerm = '';\n } else {\n this.closed.emit(this.value);\n }\n }\n\n onSearchChange(value: string) {\n if (!this.enableSearch()) return;\n this.search$.next(value);\n }\n\n async performSearch(term: string) {\n if (!this.enableSearch()) return;\n \n const searchFn = this.searchFn();\n if (!searchFn) {\n this.filteredOptions = this.options().filter((o) =>\n o.label?.toLowerCase().includes(term.toLowerCase())\n );\n this.ref.detectChanges();\n return;\n }\n \n const result = await searchFn(term);\n this.filteredOptions = result;\n\n Promise.resolve().then(() => this.ref.detectChanges());\n }\n\n onSelectionChange(value: any): void {\n this.value = value;\n this.onChange(this.value);\n }\n\n isSelected(value: string): boolean {\n if (Array.isArray(this.value)) {\n return this.value.includes(value);\n }\n return this.value === value;\n }\n}\n","<div class=\"mb-4 text-left w-full\" [class]=\"class()\">\n @if (label) {\n <label class=\"block txt-field-label\" [attr.for]=\"fieldId\">\n {{ label }}\n @if (required()) {\n <span class=\"txt-required\" aria-hidden=\"true\">*</span>\n }\n @if (tooltip) {\n <fx-ui-hero-icon\n icon=\"information-circle\"\n [size]=\"16\"\n class=\"inline-block align-middle ml-0.5 text-text-secondary cursor-help relative -top-px\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n ></fx-ui-hero-icon>\n }\n </label>\n }\n\n <mat-form-field\n [attr.invalid]=\"invalid || null\"\n class=\"fx-select-field w-full shadow-sm\"\n appearance=\"fill\"\n >\n <mat-select\n [id]=\"fieldId\"\n [required]=\"!!required()\"\n [attr.aria-invalid]=\"invalid || null\"\n [attr.aria-describedby]=\"invalid ? fieldId + '-error' : null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple()\"\n [value]=\"value\"\n (selectionChange)=\"onSelectionChange($event.value)\"\n (openedChange)=\"onOpened($event)\"\n (blur)=\"onTouched()\"\n >\n @if (enableSearch()) {\n <div class=\"px-semi w-full\">\n <input\n type=\"text\"\n aria-label=\"Search\"\n [placeholder]=\"'Search'\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n (click)=\"$event.stopPropagation()\"\n class=\"text-text-primary placeholder:text-text-placeholder w-full bg-bg-primary border-b px-semi py-normal border-border-default focus:outline-none focus:border-gradient-primary-start focus-visible:ring-2 focus-visible:ring-primary/50 text-sm text-text-primary tracking-normal ring-0 transition-colors duration-500 ease-in-out\"\n />\n </div>\n }\n @for (option of filteredOptions; track option) {\n <mat-option [value]=\"option.value\">\n <span class=\"txt-default\">{{ option.label }}</span>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (invalid) {\n <div class=\"txt-invalid text-left\" role=\"alert\" [id]=\"fieldId + '-error'\">\n {{ getErrorMessage(label) }}\n </div>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { NgStyle } from '@angular/common';\n\n@Component({\n selector: 'fx-ui-skeleton-table-loading',\n templateUrl: './skeleton-table-loading.component.html',\n styleUrl: './skeleton-table-loading.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgStyle],\n})\nexport class SkeletonTableLoadingComponent {\n readonly columns = input(5);\n readonly rows = input(5); \n}\n","<div class=\"w-full animate-pulse space-y-normal\">\n <div\n class=\"grid gap-small\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + columns() + ', minmax(0, 1fr))' }\"\n >\n @for(col of [].constructor(columns()); track col) {\n <div class=\"h-6 bg-bg-hover rounded\"></div>\n }\n </div>\n\n @for(row of [].constructor(rows()); track row) {\n <div\n class=\"grid gap-small\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + columns() + ', minmax(0, 1fr))' }\"\n >\n @for(col of [].constructor(columns()); track col) {\n <div class=\"h-7 bg-bg-hover rounded\"></div>\n }\n </div>\n }\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, ChangeDetectionStrategy, input, output, viewChild } from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { InputComponent } from '../input/input.component';\n\n@Component({\n selector: 'fx-ui-slider',\n templateUrl: './slider.component.html',\n styleUrl: './slider.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n NgStyle,\n InputComponent,\n ],\n})\nexport class SliderComponent extends FxComponent<any> implements AfterViewInit {\n readonly trackRef = viewChild.required<ElementRef<HTMLElement>>('track');\n readonly thumbRef = viewChild.required<ElementRef<HTMLElement>>('thumb');\n\n readonly min = input(0);\n readonly max = input(100);\n readonly step = input(1);\n readonly vertical = input(false);\n readonly valueChange = output<number>();\n dragging = false;\n\n constructor(private ref: ChangeDetectorRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n this._normalizeValue(this.value);\n this.ref.markForCheck();\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.ref.markForCheck();\n }\n\n override writeValue(value: number): void {\n this.value = this._normalizeValue(value ?? this.min());\n this.ref.markForCheck();\n }\n\n private _normalizeValue(v: number): number {\n if (!Number.isFinite(v)) v = this.min();\n const clamped = Math.min(this.max(), Math.max(this.min(), v));\n const stepped =\n Math.round((clamped - this.min()) / this.step()) * this.step() + this.min();\n const precision = Math.max(0, this._decimalPlaces(this.step()));\n return parseFloat(stepped.toFixed(precision));\n }\n\n private _decimalPlaces(n: number) {\n const s = String(n);\n if (s.indexOf('.') === -1) return 0;\n return s.length - s.indexOf('.') - 1;\n }\n\n /** Pointer events */\n onPointerDown(event: PointerEvent) {\n if (this.disabled) return;\n (event.target as Element).setPointerCapture(event.pointerId);\n this.dragging = true;\n this._setFromPointer(event);\n }\n\n onPointerMove(event: PointerEvent) {\n if (!this.dragging || this.disabled) return;\n this._setFromPointer(event);\n }\n\n onPointerUp(event: PointerEvent) {\n if (this.disabled) return;\n try {\n (event.target as Element).releasePointerCapture(event.pointerId);\n } catch {\n // pointer capture may already be released\n }\n this.dragging = false;\n this.onTouched();\n }\n\n private _setFromPointer(event: PointerEvent) {\n const newVal = this._coordToValue(event.clientX, event.clientY);\n this._applyValue(newVal);\n }\n\n private _coordToValue(clientX: number, clientY: number) {\n const rect = this.trackRef().nativeElement.getBoundingClientRect();\n let ratio = this.vertical()\n ? 1 - (clientY - rect.top) / rect.height\n : (clientX - rect.left) / rect.width;\n ratio = Math.min(1, Math.max(0, ratio));\n const raw = this.min() + ratio * (this.max() - this.min());\n return this._normalizeValue(raw);\n }\n\n onTrackClick(event: MouseEvent) {\n if (this.disabled) return;\n const newVal = this._coordToValue(event.clientX, event.clientY);\n this._applyValue(newVal);\n this.onTouched();\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(ev: KeyboardEvent) {\n if (this.disabled) return;\n const key = ev.key;\n const largeStep = (this.max() - this.min()) / 10;\n let delta = 0;\n if (key === 'ArrowLeft' || key === 'ArrowDown') delta = -this.step();\n else if (key === 'ArrowRight' || key === 'ArrowUp') delta = this.step();\n else if (key === 'PageDown') delta = -largeStep;\n else if (key === 'PageUp') delta = largeStep;\n else if (key === 'Home') return this._applyValue(this.min());\n else if (key === 'End') return this._applyValue(this.max());\n\n if (delta !== 0) {\n this._applyValue(this.value + delta);\n ev.preventDefault();\n }\n }\n\n private _applyValue(newVal: number) {\n const v = this._normalizeValue(newVal);\n if (v !== this.value) {\n this.value = v;\n this.ref.markForCheck();\n this.valueChange.emit(v);\n this.onChange(v);\n }\n }\n\n get percent(): number {\n const min = this.min();\n const max = this.max();\n if (max === min) return 0;\n return ((this.value - min) / (max - min)) * 100;\n }\n\n thumbStyle() {\n return this.vertical()\n ? { bottom: `${this.percent}%`, transform: 'translateY(50%)' }\n : { left: `${this.percent}%`, transform: 'translateX(-50%)' };\n }\n\n}\n","<div\n class=\"w-full select-none\"\n [class.cursor-not-allowed]=\"disabled\"\n [class.opacity-60]=\"disabled\"\n role=\"group\"\n >\n <!-- Track click is a pointer shortcut; the thumb button below owns keyboard/focus. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n #track\n class=\"relative touch-none py-4\"\n (click)=\"onTrackClick($event)\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-orientation]=\"vertical() ? 'vertical' : 'horizontal'\"\n >\n <div\n class=\"relative flex items-center\"\n [ngClass]=\"{ 'flex-col h-48': vertical() }\"\n >\n <div\n class=\"relative flex-1 rounded-full bg-gray-600 h-2\"\n [ngClass]=\"{ 'w-1 rotate-0 h-full w-auto bg-border-gray-700': vertical() }\"\n >\n @if (!vertical()) {\n <div\n class=\"absolute left-0 top-0 h-full rounded-full bg-primary\"\n [style.width.%]=\"percent\"\n ></div>\n }\n\n @if (vertical()) {\n <div\n class=\"absolute bottom-0 left-0 w-full rounded-full bg-primary\"\n [style.height.%]=\"percent\"\n style=\"transform-origin: bottom;\"\n ></div>\n }\n\n <button\n #thumb\n type=\"button\"\n class=\"absolute -mt-1 -ml-1.5 w-4 h-4 rounded-full shadow focus:ring-primary bg-primary border-2 border-text-primary\"\n [ngStyle]=\"thumbStyle()\"\n role=\"slider\"\n aria-label=\"Slider\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-disabled]=\"disabled\"\n tabindex=\"0\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n [disabled]=\"disabled\"\n ></button>\n </div>\n </div>\n </div>\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, ChangeDetectionStrategy, input, output } from '@angular/core';\nimport { FxComponent } from '../fx-component.component';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'fx-ui-switch',\n templateUrl: './switch.component.html',\n styleUrl: './switch.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class SwitchComponent extends FxComponent<any> implements AfterViewInit {\n readonly onSwitch = output<boolean>();\n /** Accessible name — the switch renders no visible text of its own. */\n readonly ariaLabel = input('');\n\n ngAfterViewInit(): void {\n this.cdr.detectChanges();\n }\n\n override writeValue(value: any): void {\n this.value = value ?? false;\n }\n\n toggle() {\n if (this.disabled) return;\n this.value = !this.value;\n this.onSwitch.emit(this.value);\n this.onChange(this.value);\n this.onTouched();\n }\n}\n","<button\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"!!value\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [disabled]=\"disabled\"\n class=\"relative flex items-center w-10 h-5 rounded-full transition-colors duration-300 cursor-pointer disabled:cursor-not-allowed focus-visible:ring-2 focus-visible:ring-primary/50\"\n [ngClass]=\"{\n 'bg-success': value && !disabled,\n 'bg-button-default': !value && !disabled,\n 'bg-bg-hover': disabled\n }\"\n (click)=\"toggle()\"\n>\n @if(value) {\n <i style=\"font-size: 20px;\" class=\"material-symbols-outlined absolute left-0.5 top-0 text-text-inverse\" aria-hidden=\"true\">check</i>\n\n }\n @if(!value) {\n <i style=\"font-size: 20px;\" class=\"material-symbols-outlined absolute right-0.5 top-0 text-text-inverse\" aria-hidden=\"true\">close</i>\n }\n <div\n class=\"absolute top-0.5 left-0.5 w-4 h-4 bg-text-inverse rounded-full shadow-md transform transition-transform duration-300\"\n [ngClass]=\"{ 'translate-x-5': value }\"\n ></div>\n</button>\n","import { Component, Input, TemplateRef, ChangeDetectionStrategy, input, viewChild } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-tab',\n templateUrl: './tab.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent {\n readonly label = input.required<string>();\n @Input() icon?: string;\n readonly content = viewChild.required(TemplateRef);\n}\n","<ng-template><ng-content></ng-content></ng-template>\n","import {\n AfterContentInit,\n Component,\n ElementRef,\n Input,\n Renderer2,\n HostListener, ChangeDetectorRef, inject, ChangeDetectionStrategy,\n contentChildren,\n viewChild\n} from '@angular/core';\nimport { TabComponent } from '../tab-component/tab.component';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { InputComponent } from '../input/input.component';\n\n@Component({\n selector: 'fx-ui-tab-group',\n templateUrl: './tab-group.component.html',\n styleUrl: './tab-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n HeroIconComponent,\n NgClass,\n NgTemplateOutlet,\n InputComponent,\n ],\n})\nexport class TabGroupComponent implements AfterContentInit {\n private cdr = inject(ChangeDetectorRef);\n readonly tabs = contentChildren(TabComponent);\n @Input() activeIndex = 0;\n\n readonly tabListRef = viewChild.required<ElementRef<HTMLElement>>('tabList');\n readonly underlineRef = viewChild.required<ElementRef<HTMLElement>>('underline');\n\n canScrollLeft = false;\n canScrollRight = false;\n\n private animateDelay = 50;\n private scrollAmount = 160;\n private sidePadding = 32; // same as button width space\n\n constructor(private renderer: Renderer2) {}\n\n ngAfterContentInit() {\n setTimeout(() => {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n this.scrollToActiveTab(false);\n this.cdr.markForCheck();\n }, 0);\n }\n\n selectTab(index: number) {\n this.activeIndex = index;\n this.scrollToActiveTab(true);\n }\n\n /** Roving tablist keyboard nav: arrows move AND activate (selection follows focus). */\n onTabKeydown(event: KeyboardEvent, index: number) {\n const count = this.tabs().length;\n if (!count) return;\n let next: number;\n switch (event.key) {\n case 'ArrowRight':\n next = (index + 1) % count;\n break;\n case 'ArrowLeft':\n next = (index - 1 + count) % count;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = count - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n this.selectTab(next);\n const buttons = this.tabListRef().nativeElement.querySelectorAll('.tab-btn');\n (buttons[next] as HTMLElement | undefined)?.focus();\n }\n\n private updateUnderlinePosition() {\n const tabListEl = this.tabListRef().nativeElement;\n const underlineEl = this.underlineRef().nativeElement;\n const tabButtons = tabListEl.querySelectorAll('.tab-btn');\n const activeTab = tabButtons[this.activeIndex] as HTMLElement | undefined;\n \n if (!activeTab || !underlineEl) return;\n \n const tabRect = activeTab.getBoundingClientRect();\n const containerRect = tabListEl.getBoundingClientRect();\n \n // Calculate X position relative to scrollable area (not viewport)\n const translateX = tabRect.left - containerRect.left + tabListEl.scrollLeft - this.sidePadding;\n \n this.renderer.setStyle(underlineEl, 'width', `${activeTab.offsetWidth}px`);\n this.renderer.setStyle(underlineEl, 'transform', `translateX(${translateX}px)`);\n }\n \n\n private scrollToActiveTab(updateUnderlineAfter = true) {\n const tabListEl = this.tabListRef().nativeElement;\n const tabButtons = tabListEl.querySelectorAll('.tab-btn');\n const activeTab = tabButtons[this.activeIndex] as HTMLElement | undefined;\n\n if (!activeTab) return;\n\n const elLeft = activeTab.offsetLeft;\n const elRight = elLeft + activeTab.offsetWidth;\n const containerLeft = tabListEl.scrollLeft;\n const containerRight = containerLeft + tabListEl.clientWidth;\n\n if (elLeft < containerLeft) {\n tabListEl.scrollTo({ left: Math.max(elLeft - 32, 0), behavior: 'smooth' });\n } else if (elRight > containerRight) {\n const target = elRight - tabListEl.clientWidth + 32;\n tabListEl.scrollTo({ left: target, behavior: 'smooth' });\n }\n\n setTimeout(() => {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n this.cdr.markForCheck();\n }, updateUnderlineAfter ? this.animateDelay : 0);\n }\n\n scroll(direction: 'left' | 'right') {\n const tabListEl = this.tabListRef().nativeElement;\n const delta = direction === 'left' ? -this.scrollAmount : this.scrollAmount;\n tabListEl.scrollBy({ left: delta, behavior: 'smooth' });\n\n setTimeout(() => {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n this.cdr.markForCheck();\n }, this.animateDelay);\n }\n\n onScroll() {\n this.updateScrollButtons();\n this.updateUnderlinePosition();\n }\n\n private updateScrollButtons() {\n const el = this.tabListRef().nativeElement;\n const scrollLeft = el.scrollLeft;\n const maxScrollLeft = el.scrollWidth - el.clientWidth;\n \n this.canScrollLeft = scrollLeft > 2;\n \n this.canScrollRight = scrollLeft < maxScrollLeft - 2;\n }\n\n @HostListener('window:resize')\n onResize() {\n this.updateUnderlinePosition();\n }\n}\n","<div class=\"relative\">\n <!-- Left scroll button -->\n <button\n class=\"left-scroll-button\"\n type=\"button\"\n aria-label=\"Scroll tabs left\"\n (click)=\"scroll('left')\"\n [style.opacity]=\"canScrollLeft ? 1 : 0\"\n [style.pointerEvents]=\"canScrollLeft ? 'auto' : 'none'\"\n [attr.tabindex]=\"canScrollLeft ? null : -1\"\n [attr.aria-hidden]=\"!canScrollLeft\"\n >\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-5 w-5 text-text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <div\n #tabList\n role=\"tablist\"\n class=\"relative flex overflow-x-auto no-scrollbar scroll-smooth\"\n (scroll)=\"onScroll()\"\n >\n @for (tab of tabs(); track tab; let i = $index) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"i === activeIndex\"\n [tabindex]=\"i === activeIndex ? 0 : -1\"\n (click)=\"selectTab(i)\"\n (keydown)=\"onTabKeydown($event, i)\"\n class=\"tab-btn tab-bar-btn\"\n >\n <div class=\"flex flex-row items-center justify-center\">\n @if (tab.icon) {\n <fx-ui-hero-icon\n [icon]=\"tab.icon\"\n [size]=\"20\"\n class=\"flex mr-[2px]\"\n [ngClass]=\"{\n 'text-gradient-primary-start mb-small': i === activeIndex,\n 'text-text-placeholder': i !== activeIndex,\n }\"\n ></fx-ui-hero-icon>\n }\n <div\n [ngClass]=\"\n i === activeIndex ? 'txt-field-label text-gradient-primary-start' : 'txt-placeholder'\n \"\n >\n {{ tab.label() }}\n </div>\n </div>\n </button>\n }\n\n <span #underline class=\"underline\" style=\"width: 0; transform: translateX(0)\"></span>\n </div>\n\n <button\n class=\"right-scroll-button\"\n type=\"button\"\n aria-label=\"Scroll tabs right\"\n (click)=\"scroll('right')\"\n [style.opacity]=\"canScrollRight ? 1 : 0\"\n [style.pointerEvents]=\"canScrollRight ? 'auto' : 'none'\"\n [attr.tabindex]=\"canScrollRight ? null : -1\"\n [attr.aria-hidden]=\"!canScrollRight\"\n >\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-5 w-5 text-text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n</div>\n\n<!-- Tab content -->\n<div class=\"transition-all duration-300 ease-in-out mt-4\">\n @for (tab of tabs(); track tab; let i = $index) {\n @if (i === activeIndex) {\n <div role=\"tabpanel\" class=\"animate-fadeIn\">\n <ng-container *ngTemplateOutlet=\"tab.content()\"></ng-container>\n </div>\n }\n }\n</div>\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n@Component({\n selector: 'fx-ui-table-cell',\n templateUrl: './table-cell.component.html',\n styleUrl: './table-cell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableCell {\n readonly loading = input.required<boolean>();\n readonly skeletonClass = input('h-4 w-full');\n}\n","@if (!loading()) {\n <div animate.enter=\"fade-in-animation\" class=\"inline-block my-normal\">\n <ng-content />\n </div>\n} @else {\n <div animate.enter=\"fade-in-animation\" class=\"skeleton-load my-semi\" [class]=\"skeletonClass()\"></div>\n}\n","import { Component, Input, ChangeDetectionStrategy, input, output, Output, EventEmitter } from '@angular/core';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\nexport type TagType =\n | 'success'\n | 'warning'\n | 'critical'\n | 'information'\n | 'discovery'\n | 'default'\n | 'danger';\n\n@Component({\n selector: 'fx-ui-tag',\n templateUrl: './tag.component.html',\n styleUrl: './tag.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HeroIconComponent],\n})\nexport class TagComponent {\n readonly label = input<string>();\n readonly type = input<TagType>('default');\n readonly rounded = input(true);\n @Input() icon?: string;\n readonly solid = input(false);\n /* EventEmitter (not output()) on purpose: the template branches on\n * `clicked.observed` to only expose button semantics when someone listens —\n * OutputEmitterRef has no equivalent. */\n @Output() clicked = new EventEmitter<void>();\n\n onClick() {\n this.clicked.emit();\n }\n}\n","<!-- Interactive semantics only when a (clicked) listener is attached. -->\n<div\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"$event.preventDefault(); onClick()\"\n [attr.role]=\"clicked.observed ? 'button' : null\"\n [attr.tabindex]=\"clicked.observed ? 0 : null\"\n [class]=\"\n `flex flex-row gap-small ${rounded() ? 'tag-round' : 'tag-square'} tag-${type()}${solid() ? '-solid' : ''}${clicked.observed ? ' cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50' : ''}`\n \"\n>\n @if (icon) {\n <fx-ui-hero-icon\n [class]=\"`flex txt-tag-${type()} ${solid() && type() !== 'default' ? 'text-white' : ''}`\"\n [icon]=\"icon\"\n [size]=\"18\"\n ></fx-ui-hero-icon>\n }\n\n <div [class]=\"`txt-tag-${type()} ${solid() && type() !== 'default' ? 'text-white font-medium' : ''}`\">\n {{ label() }}\n </div>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n QueryList,\n ViewChildren, ChangeDetectionStrategy,\n input,\n viewChild\n} from '@angular/core';\n\nexport interface TreeNode {\n id: string;\n label: string;\n status?: string;\n children?: TreeNode[];\n}\n\n@Component({\n selector: 'fx-ui-tree-diagram',\n templateUrl: './tree-diagram.component.html',\n styleUrl: './tree-diagram.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeDiagram implements AfterViewInit, OnDestroy {\n readonly data = input.required<any>();\n\n readonly container = viewChild.required<ElementRef>('container');\n readonly root = viewChild.required<ElementRef>('root');\n @ViewChildren('child') children!: QueryList<ElementRef>;\n\n lines: any[] = [];\n svgWidth = 0;\n svgHeight = 0;\n\n private resizeObserver!: ResizeObserver;\n private rafId?: number;\n\n constructor(private zone: NgZone, private cdr: ChangeDetectorRef) {}\n\n ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver((entries) => {\n const rect = entries[0].contentRect;\n\n if (rect.width === 0 || rect.height === 0) return;\n\n this.scheduleDraw();\n });\n\n this.resizeObserver.observe(this.container().nativeElement);\n\n setTimeout(() => this.scheduleDraw(), 50);\n setTimeout(() => this.scheduleDraw(), 150);\n });\n\n this.children.changes.subscribe(() => this.scheduleDraw());\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n if (this.rafId) cancelAnimationFrame(this.rafId);\n }\n\n private scheduleDraw() {\n if (this.rafId) cancelAnimationFrame(this.rafId);\n\n this.rafId = requestAnimationFrame(() => {\n this.drawLines();\n });\n }\n\n private drawLines() {\n const root = this.root();\n if (!root || !this.children.length) return;\n \n const containerEl = this.container().nativeElement;\n const rect = containerEl.getBoundingClientRect();\n if (rect.width === 0 || rect.height === 0) return;\n \n const rootRect = root.nativeElement.getBoundingClientRect();\n \n const rootX = rootRect.left + rootRect.width / 2 - rect.left;\n const rootBottomY = rootRect.bottom - rect.top;\n \n const childRects = this.children.map(c =>\n c.nativeElement.getBoundingClientRect()\n );\n \n const childCenters = childRects.map(r => ({\n x: r.left + r.width / 2 - rect.left,\n y: r.top - rect.top\n }));\n \n const horizontalY = childCenters[0].y - 24;\n \n this.zone.run(() => {\n this.svgWidth = rect.width;\n this.svgHeight = rect.height;\n \n this.lines = [\n {\n x1: rootX,\n y1: rootBottomY,\n x2: rootX,\n y2: horizontalY\n },\n {\n x1: childCenters[0].x,\n y1: horizontalY,\n x2: childCenters[childCenters.length - 1].x,\n y2: horizontalY\n },\n ...childCenters.map(c => ({\n x1: c.x,\n y1: horizontalY,\n x2: c.x,\n y2: c.y\n }))\n ];\n });\n\n this.cdr.detectChanges();\n } \n}\n","<div class=\"relative p-8\" #container>\n\n <!-- ROOT -->\n <div\n #root\n class=\"mx-auto w-fit bg-blue-600 text-white px-7 py-3 rounded-md font-semibold text-center\"\n >\n {{ data().label }}\n </div>\n\n <!-- CHILDREN -->\n <div class=\"mt-16 flex justify-center gap-16\">\n @for (child of data().children; track child) {\n <div\n #child\n class=\"w-48 bg-rose-600 text-white px-4 py-4 rounded-lg text-center\"\n >\n <div class=\"font-semibold text-lg\">{{ child.label }}</div>\n <div class=\"mt-1 text-sm opacity-90\">{{ child.status }}</div>\n </div>\n }\n </div>\n\n <!-- SVG CONNECTORS -->\n <svg\n class=\"absolute inset-0 pointer-events-none\"\n [attr.width]=\"svgWidth\"\n [attr.height]=\"svgHeight\"\n >\n @for (line of lines; track line) {\n <line\n [attr.x1]=\"line.x1\"\n [attr.y1]=\"line.y1\"\n [attr.x2]=\"line.x2\"\n [attr.y2]=\"line.y2\"\n stroke=\"#1f2937\"\n stroke-width=\"2\"\n />\n }\n </svg>\n\n</div>\n","import { Component, ContentChild, Input, TemplateRef, ChangeDetectionStrategy, input, output } from '@angular/core';\nimport { CdkDragDrop, moveItemInArray, transferArrayItem, CdkDropList, CdkDrag, CdkDragPlaceholder } from '@angular/cdk/drag-drop';\nimport { KanbanColumn, ColumnChangedEvent } from './kanban-board.types';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'fx-ui-kanban-board',\n templateUrl: './kanban-board.component.html',\n styleUrl: './kanban-board.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CdkDropList,\n CdkDrag,\n CdkDragPlaceholder,\n NgTemplateOutlet,\n ],\n})\nexport class KanbanBoardComponent<T = any> {\n readonly columns = input<KanbanColumn<T>[]>([]);\n @Input() itemTemplate?: TemplateRef<any>;\n readonly columnChanged = output<ColumnChangedEvent<T>>();\n\n /**\n * Get all column IDs for connecting drop lists\n */\n getColumnIds(): string[] {\n return this.columns().map((col) => col.id);\n }\n\n /**\n * Handle drop event when item is moved\n */\n onDrop(event: CdkDragDrop<T[]>, columnId: string) {\n const previousColumnId = event.previousContainer.id;\n const currentColumnId = columnId;\n\n if (event.previousContainer === event.container) {\n // Reorder within the same column\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n // Transfer between columns\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n // Emit the change event\n const item = event.container.data[event.currentIndex];\n this.columnChanged.emit({\n previousColumnId,\n currentColumnId,\n item,\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n }\n}\n","<div class=\"kanban-board\">\n <div class=\"kanban-columns\">\n @for (column of columns(); track column.id) {\n <div class=\"kanban-column\">\n <div class=\"kanban-column-header\">\n <h3 class=\"kanban-column-title\">{{ column.title }}</h3>\n <span class=\"kanban-column-count\">{{ column.items.length }}</span>\n </div>\n \n <div\n class=\"kanban-column-content\"\n cdkDropList\n [id]=\"column.id\"\n [cdkDropListData]=\"column.items\"\n [cdkDropListConnectedTo]=\"getColumnIds()\"\n (cdkDropListDropped)=\"onDrop($event, column.id)\"\n >\n @for (item of column.items; track $index) {\n <div class=\"kanban-item\" cdkDrag>\n <div class=\"kanban-item-placeholder\" *cdkDragPlaceholder></div>\n \n @if (itemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item, index: $index }\"\n ></ng-container>\n } @else {\n <div class=\"kanban-item-default\">\n {{ item }}\n </div>\n }\n </div>\n }\n \n @if (column.items.length === 0) {\n <div class=\"kanban-column-empty\">\n Drop items here\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, Input, OnInit, OnDestroy, ChangeDetectorRef, inject, ChangeDetectionStrategy, input, output } from '@angular/core';\nimport { Router, NavigationEnd, RouterLink } from '@angular/router';\nimport { Subject, filter, takeUntil } from 'rxjs';\nimport { DrawerItem } from './drawer.types';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\n@Component({\n selector: 'fx-ui-drawer',\n templateUrl: './drawer.component.html',\n styleUrl: './drawer.component.scss',\n animations: [\n trigger('drawerExpand', [\n state('collapsed', style({ width: '70px' })),\n state('expanded', style({ width: '260px' })),\n transition('collapsed <=> expanded', animate('300ms cubic-bezier(0.4, 0, 0.2, 1)')),\n ]),\n trigger('accordionExpand', [\n state('collapsed', style({ height: '0', overflow: 'hidden', opacity: 0 })),\n state('expanded', style({ height: '*', overflow: 'visible', opacity: 1 })),\n transition('collapsed <=> expanded', animate('300ms cubic-bezier(0.4, 0, 0.2, 1)')),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n NgTemplateOutlet,\n MatTooltip,\n HeroIconComponent,\n RouterLink,\n ],\n})\nexport class DrawerComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n readonly items = input<DrawerItem[]>([]);\n @Input() isExpanded = true;\n @Input() logo?: string;\n @Input() version?: string;\n readonly toggleExpanded = output<boolean>();\n readonly itemClicked = output<DrawerItem>();\n\n expandedItems = new Set<string>();\n currentRoute = '';\n private destroy$ = new Subject<void>();\n\n constructor(private router: Router) {}\n\n ngOnInit(): void {\n // Track current route\n this.currentRoute = this.router.url;\n\n // Subscribe to route changes\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe((event: any) => {\n this.currentRoute = event.urlAfterRedirects || event.url;\n this.autoExpandActiveParents();\n this.cdr.markForCheck();\n });\n\n // Auto-expand parents of active route on init\n this.autoExpandActiveParents();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n toggleDrawer(): void {\n this.isExpanded = !this.isExpanded;\n this.toggleExpanded.emit(this.isExpanded);\n }\n\n toggleAccordion(itemId: string): void {\n if (this.expandedItems.has(itemId)) {\n this.expandedItems.delete(itemId);\n } else {\n this.expandedItems.add(itemId);\n }\n }\n\n isAccordionExpanded(itemId: string): boolean {\n return this.expandedItems.has(itemId);\n }\n\n onItemClick(item: DrawerItem, event?: Event): void {\n // If item has children, toggle accordion\n if (item.children && item.children.length > 0) {\n event?.preventDefault();\n this.toggleAccordion(item.id);\n return;\n }\n\n // Emit click event\n this.itemClicked.emit(item);\n\n // If item has action, execute it\n if (item.action) {\n event?.preventDefault();\n item.action();\n }\n\n // Navigation is handled by routerLink in template\n }\n\n isActiveRoute(route?: string): boolean {\n if (!route) return false;\n return this.currentRoute === route || this.currentRoute.startsWith(route + '/');\n }\n\n hasActiveChild(item: DrawerItem): boolean {\n if (!item.children) return false;\n\n return item.children.some((child) => {\n if (this.isActiveRoute(child.route)) return true;\n if (child.children) return this.hasActiveChild(child);\n return false;\n });\n }\n\n private autoExpandActiveParents(): void {\n const expandParents = (items: DrawerItem[]): boolean => {\n for (const item of items) {\n if (item.route && this.isActiveRoute(item.route)) {\n return true;\n }\n if (item.children) {\n const hasActiveChild = expandParents(item.children);\n if (hasActiveChild) {\n this.expandedItems.add(item.id);\n return true;\n }\n }\n }\n return false;\n };\n\n expandParents(this.items());\n }\n\n getAccordionState(itemId: string): string {\n return this.isAccordionExpanded(itemId) ? 'expanded' : 'collapsed';\n }\n\n getDrawerState(): string {\n return this.isExpanded ? 'expanded' : 'collapsed';\n }\n}\n","<div class=\"drawer-host-wrapper\">\n <a\n href=\"/\"\n class=\"h-[60px]\"\n [ngClass]=\"{ 'flex items-center justify-center': !isExpanded, 'p-4': isExpanded }\"\n >\n @if (logo) {\n <img\n [src]=\"logo\"\n alt=\"Home\"\n class=\"h-[20px] w-auto transition-all duration-300 ease-in-out\"\n [ngClass]=\"{ 'scale-90': !isExpanded, 'ml-5': isExpanded }\"\n />\n } @else {\n <div class=\"h-[30px] w-auto transition-all duration-300 ease-in-out\"></div>\n }\n </a>\n <div class=\"drawer-container\" [@drawerExpand]=\"getDrawerState()\">\n <!-- Navigation Items -->\n <nav class=\"drawer-nav\">\n @for (item of items(); track item) {\n <ng-container\n *ngTemplateOutlet=\"drawerItem; context: { $implicit: item, level: 0 }\"\n ></ng-container>\n }\n </nav>\n\n <!-- Version -->\n @if (version) {\n <div class=\"drawer-version\" [matTooltip]=\"!isExpanded ? version : ''\" matTooltipPosition=\"right\">\n @if (isExpanded) {\n <span>{{ version }}</span>\n }\n @if (!isExpanded) {\n <span class=\"drawer-version-dot\"></span>\n }\n </div>\n }\n </div>\n\n <!-- Floating Toggle Button on right border -->\n <button\n type=\"button\"\n class=\"toggle-btn\"\n [attr.aria-label]=\"isExpanded ? 'Collapse navigation' : 'Expand navigation'\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"toggleDrawer()\"\n [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand'\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n matTooltipPosition=\"right\"\n >\n <fx-ui-hero-icon\n [icon]=\"isExpanded ? 'chevron-left' : 'chevron-right'\"\n [size]=\"16\"\n class=\"text-text-primary\"\n ></fx-ui-hero-icon>\n </button>\n</div>\n\n<!-- Recursive Template for Drawer Items -->\n<ng-template #drawerItem let-item let-level=\"level\">\n <div class=\"drawer-item-wrapper\">\n <!-- Item Button/Link -->\n @if (item.route && !item.children) {\n <a\n [routerLink]=\"item.route\"\n class=\"drawer-item\"\n [class.active]=\"isActiveRoute(item.route)\"\n [class.has-children]=\"item.children && item.children.length > 0\"\n [style.paddingLeft.px]=\"isExpanded ? 16 + level * 16 : 16\"\n [matTooltip]=\"!isExpanded ? item.label : ''\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"text-text-primary text-xs font-semibold\"\n (click)=\"onItemClick(item, $event)\"\n >\n <div class=\"item-content\">\n <fx-ui-hero-icon [icon]=\"item.icon\" [size]=\"20\" class=\"item-icon\"></fx-ui-hero-icon>\n @if (isExpanded) {\n <span class=\"item-label\">{{ item.label }}</span>\n }\n </div>\n </a>\n }\n\n @if (!item.route || item.children) {\n <button\n type=\"button\"\n class=\"drawer-item\"\n [class.active]=\"isActiveRoute(item.route)\"\n [class.has-children]=\"item.children && item.children.length > 0\"\n [style.paddingLeft.px]=\"isExpanded ? 16 + level * 16 : 16\"\n [matTooltip]=\"!isExpanded ? item.label : ''\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"text-text-primary text-sm font-semibold\"\n (click)=\"onItemClick(item, $event)\"\n >\n <div class=\"item-content\">\n <fx-ui-hero-icon [icon]=\"item.icon\" [size]=\"20\" class=\"item-icon\"></fx-ui-hero-icon>\n @if (isExpanded) {\n <span class=\"item-label\">{{ item.label }}</span>\n }\n @if (isExpanded && item.children && item.children.length > 0) {\n <fx-ui-hero-icon\n [icon]=\"'chevron-down'\"\n [size]=\"16\"\n class=\"chevron-icon\"\n [class.rotated]=\"isAccordionExpanded(item.id)\"\n ></fx-ui-hero-icon>\n }\n </div>\n </button>\n }\n\n <!-- Accordion Children -->\n @if (item.children && item.children.length > 0) {\n <div\n class=\"accordion-children\"\n [@accordionExpand]=\"getAccordionState(item.id)\"\n >\n @for (child of item.children; track child) {\n <ng-container\n *ngTemplateOutlet=\"drawerItem; context: { $implicit: child, level: level + 1 }\"\n ></ng-container>\n }\n </div>\n }\n </div>\n</ng-template>\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n/** Row-card skeleton placeholder for master-detail list panes. */\n@Component({\n selector: 'fx-ui-skeleton-list',\n templateUrl: './skeleton-list.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonListComponent {\n readonly rows = input(5);\n\n range(n: number): number[] {\n return Array.from({ length: Number(n) || 0 }, (_, i) => i);\n }\n}\n","<div class=\"flex flex-col gap-normal animate-pulse\">\n @for (r of range(rows()); track r) {\n <div class=\"rounded-lg border border-border-default p-semi\">\n <div class=\"flex items-center gap-normal mb-small\">\n <div class=\"w-8 h-8 rounded-lg bg-bg-hover shrink-0\"></div>\n <div class=\"h-4 flex-1 rounded bg-bg-hover\"></div>\n <div class=\"h-5 w-12 rounded-full bg-bg-hover shrink-0\"></div>\n </div>\n <div class=\"h-3 w-3/4 rounded bg-bg-hover\"></div>\n </div>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n/** Card-shaped skeleton placeholder for detail panels. */\n@Component({\n selector: 'fx-ui-skeleton-detail',\n templateUrl: './skeleton-detail.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonDetailComponent {\n /** Number of content cards rendered below the header card. */\n readonly cards = input(3);\n /** Rows per content card. */\n readonly rows = input(4);\n\n range(n: number): number[] {\n return Array.from({ length: Number(n) || 0 }, (_, i) => i);\n }\n\n rowWidth(i: number): number {\n return [90, 70, 80, 60][i % 4];\n }\n}\n","<div class=\"flex flex-col gap-xl animate-pulse\">\n <div class=\"card-common\">\n <div class=\"flex items-start gap-normal\">\n <div class=\"w-10 h-10 rounded-lg bg-bg-hover shrink-0\"></div>\n <div class=\"flex-1 min-w-0 flex flex-col gap-normal\">\n <div class=\"h-5 w-1/2 rounded bg-bg-hover\"></div>\n <div class=\"h-3 w-3/4 rounded bg-bg-hover\"></div>\n </div>\n </div>\n </div>\n\n @for (c of range(cards()); track c) {\n <div class=\"card-common flex flex-col gap-large\">\n <div class=\"h-4 w-1/3 rounded bg-bg-hover\"></div>\n <div class=\"flex flex-col gap-normal\">\n @for (r of range(rows()); track r) {\n <div class=\"h-3 rounded bg-bg-hover\" [style.width.%]=\"rowWidth(r)\"></div>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { Tone, toneBadge, toneText } from '../../../core/value-tone.util';\nimport { NgStyle, NgClass } from '@angular/common';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\nexport interface FxStatCard {\n /** Caller-translated caption. */\n label: string;\n value: string | number;\n /** hero-icon name shown in the tinted box. */\n icon?: string;\n /** Colours the number and the icon box; null/undefined renders neutral. */\n tone?: Tone | null;\n}\n\n/** KPI tile row: big number + tinted icon box + caption, in a responsive grid. */\n@Component({\n selector: 'fx-ui-stat-cards',\n templateUrl: './stat-cards.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgStyle,\n NgClass,\n HeroIconComponent,\n ],\n})\nexport class StatCardsComponent {\n readonly cards = input<FxStatCard[]>([]);\n /** Grid columns; defaults to one column per card. */\n @Input() cols?: number;\n\n get gridColumns(): string {\n // No explicit cols → responsive auto-fit so tiles stack on narrow viewports.\n if (this.cols === undefined) {\n return 'repeat(auto-fit, minmax(180px, 1fr))';\n }\n return `repeat(${this.cols}, minmax(0, 1fr))`;\n }\n\n numClass(card: FxStatCard): string {\n return card.tone ? toneText(card.tone) : 'text-text-primary';\n }\n\n boxClass(card: FxStatCard): string {\n return card.tone ? toneBadge(card.tone) : 'bg-bg-hover text-text-secondary';\n }\n}\n","<div class=\"grid gap-normal\" [ngStyle]=\"{ 'grid-template-columns': gridColumns }\">\n @for (card of cards(); track card.label) {\n <div class=\"card-common flex items-center gap-normal\">\n @if (card.icon) {\n <div\n class=\"w-10 h-10 rounded-lg flex items-center justify-center shrink-0\"\n [ngClass]=\"boxClass(card)\"\n >\n <fx-ui-hero-icon [icon]=\"card.icon\" [size]=\"20\"></fx-ui-hero-icon>\n </div>\n }\n <div class=\"flex flex-col min-w-0\">\n <span class=\"txt-heading-04\" [ngClass]=\"numClass(card)\">{{ card.value }}</span>\n <span class=\"txt-utility-caption text-text-secondary truncate\">{{ card.label }}</span>\n </div>\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\n\n/** Centered \"no data\" block. The message is caller-translated (no i18n in lib). */\n@Component({\n selector: 'fx-ui-empty-state',\n templateUrl: './empty-state.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HeroIconComponent],\n})\nexport class EmptyStateComponent {\n readonly message = input('No data');\n /** Optional icon (hero-icon name). */\n @Input() icon?: any;\n /** Min height of the block, CSS length. */\n readonly height = input('120px');\n}\n","<div\n class=\"flex flex-col items-center justify-center gap-small w-full\"\n [style.minHeight]=\"height()\"\n>\n @if (icon) {\n <fx-ui-hero-icon class=\"text-text-placeholder\" [icon]=\"icon\" [size]=\"24\"></fx-ui-hero-icon>\n }\n <div class=\"txt-default text-text-placeholder\">{{ message() }}</div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy, output } from '@angular/core';\nimport { Tone, severityTone, toneBadge, toneBg } from '../../../core/value-tone.util';\nimport { NgClass } from '@angular/common';\n\nexport interface FxFilterChipOption {\n /** Caller-translated label. */\n label: string;\n /** '' (empty) renders as the neutral \"All\" chip. */\n value: string;\n}\n\n/**\n * Tone-tinted filter chip row. Replaces the per-tab chipClass() copies —\n * including their classic bug of comparing a hardcoded filter key: the active\n * chip here is always derived from [value].\n */\n@Component({\n selector: 'fx-ui-filter-chips',\n templateUrl: './filter-chips.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class FilterChipsComponent {\n @Input() options: FxFilterChipOption[] = [];\n /* Accepts undefined so screens can bind [value]=\"filters.x\" where the\n * filter bag keys are optional; '' and undefined both mean \"All\". */\n @Input() value: string | undefined = '';\n readonly valueChange = output<string>();\n /** Per-value tone overrides (e.g. { Safe: 'information', Protected: 'discovery' as any }). */\n @Input() toneOverrides: Record<string, Tone | null> = {};\n\n select(option: FxFilterChipOption): void {\n this.value = option.value;\n this.valueChange.emit(option.value);\n }\n\n chipClass(option: FxFilterChipOption): string {\n const active = (this.value ?? '') === option.value;\n if (!option.value) {\n return active\n ? 'bg-text-primary text-text-focus'\n : 'bg-bg-hover text-text-secondary hover:bg-gradient-primary-start/10 hover:text-gradient-primary-start';\n }\n const tone =\n option.value in this.toneOverrides\n ? this.toneOverrides[option.value]\n : severityTone(option.value);\n if (!tone) {\n return active ? 'bg-text-primary text-text-focus' : `${toneBadge(null)} hover:opacity-50`;\n }\n return active ? `${toneBg(tone)} text-text-focus` : `${toneBadge(tone)} hover:opacity-50`;\n }\n}\n","<div class=\"flex flex-wrap items-center gap-small\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n class=\"px-3 py-1 rounded-full txt-utility-caption font-medium transition-colors cursor-pointer\"\n [ngClass]=\"chipClass(option)\"\n (click)=\"select(option)\"\n >\n {{ option.label }}\n </button>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { Tone, toneBg } from '../../../core/value-tone.util';\nimport { NgClass } from '@angular/common';\n\n/** Thin tone-coloured progress/score bar with optional label and caption. */\n@Component({\n selector: 'fx-ui-meter',\n templateUrl: './meter.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class MeterComponent {\n @Input() value = 0;\n @Input() max = 10;\n readonly tone = input<Tone | null>(null);\n /** Caller-translated texts; omitted → bar only. */\n @Input() label?: string;\n @Input() caption?: string;\n\n get percent(): number {\n const max = Number(this.max) || 1;\n const pct = (Number(this.value) / max) * 100;\n return Math.min(100, Math.max(0, pct));\n }\n\n get fillClass(): string {\n return toneBg(this.tone());\n }\n}\n","<div class=\"flex flex-col gap-small w-full\">\n @if (label || caption) {\n <div class=\"flex items-center justify-between gap-normal\">\n @if (label) {\n <span class=\"txt-field-label !mb-0\">{{ label }}</span>\n }\n @if (caption) {\n <span class=\"txt-utility-caption text-text-secondary\">{{ caption }}</span>\n }\n </div>\n }\n <div\n class=\"h-2 rounded-full bg-bg-hover overflow-hidden\"\n role=\"progressbar\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-label]=\"label || null\"\n >\n <div class=\"h-full rounded-full\" [ngClass]=\"fillClass\" [style.width.%]=\"percent\"></div>\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { Tone, toneText } from '../../../core/value-tone.util';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\nimport { NgClass } from '@angular/common';\n\n/** Detail-panel section: card with an icon + heading header and projected body. */\n@Component({\n selector: 'fx-ui-section-card',\n templateUrl: './section-card.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HeroIconComponent, NgClass],\n})\nexport class SectionCardComponent {\n /** Caller-translated heading. */\n readonly title = input('');\n /** hero-icon name; omitted → text-only header. */\n @Input() icon?: any;\n readonly iconTone = input<Tone | null>(null);\n\n get iconClass(): string {\n const iconTone = this.iconTone();\n return iconTone ? toneText(iconTone) : 'text-text-secondary';\n }\n}\n","<div class=\"card-common\">\n <div class=\"flex items-center gap-normal mb-large\">\n @if (icon) {\n <fx-ui-hero-icon [ngClass]=\"iconClass\" [icon]=\"icon\" [size]=\"18\"></fx-ui-hero-icon>\n }\n <span class=\"txt-heading-06\">{{ title() }}</span>\n </div>\n <ng-content></ng-content>\n</div>\n","import { Component, Input, ChangeDetectionStrategy, input } from '@angular/core';\nimport { Tone, toneText } from '../../../core/value-tone.util';\nimport { NgClass } from '@angular/common';\n\n/**\n * Label-over-value field for detail panels. The label uses txt-field-label\n * with its baked-in margin neutralised (the known mb-1 alignment gotcha) —\n * spacing is owned by this component.\n */\n@Component({\n selector: 'fx-ui-info-field',\n templateUrl: './info-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class InfoFieldComponent {\n /** Caller-translated label. */\n readonly label = input('');\n @Input() value: string | number | null | undefined;\n /** Colours the value; null/undefined renders the primary text colour. */\n @Input() tone: Tone | null = null;\n /** Monospace value (hashes, paths). */\n @Input() mono = false;\n /** Placeholder when value is empty. */\n readonly placeholder = input('---');\n\n get displayValue(): string {\n if (this.value === null || this.value === undefined || this.value === '') {\n return this.placeholder();\n }\n return String(this.value);\n }\n\n get valueClass(): string {\n const toneClass = this.tone ? toneText(this.tone) : 'text-text-primary';\n return this.mono ? `${toneClass} font-mono break-all` : toneClass;\n }\n}\n","<div class=\"flex flex-col gap-small min-w-0\">\n <span class=\"txt-field-label !mb-0\">{{ label() }}</span>\n <span class=\"txt-default\" [ngClass]=\"valueClass\">{{ displayValue }}</span>\n</div>\n","import { Component, Input, ChangeDetectionStrategy, output } from '@angular/core';\nimport { Tone, toneBadge } from '../../../core/value-tone.util';\nimport { NgClass } from '@angular/common';\n\nexport interface FxSeverityBadge {\n key: string;\n label: string | number;\n tone: Tone | null;\n}\n\n/**\n * Compact total/critical/high/medium(/low) badge cluster used in table cells.\n * Pass counts via [stats]; missing fields are skipped. Labels are numbers, so\n * no i18n is involved; the total badge renders neutral.\n */\n@Component({\n selector: 'fx-ui-severity-badges',\n templateUrl: './severity-badges.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class SeverityBadgesComponent {\n @Input() stats: {\n total?: number;\n critical?: number;\n high?: number;\n medium?: number;\n low?: number;\n } | null = null;\n /** Show zero-count badges (default true, mirrors the table-cell usage). */\n @Input() showZero = true;\n /** Append the severity letter to counts (\"3C\", \"5H\", \"2M\") per the report design. */\n @Input() suffixed = false;\n readonly badgeClick = output<string>();\n\n private static readonly TONES: Record<string, Tone | null> = {\n total: null,\n critical: 'critical',\n high: 'danger',\n medium: 'warning',\n low: 'success',\n };\n\n get badges(): FxSeverityBadge[] {\n const s = this.stats ?? {};\n return (['total', 'critical', 'high', 'medium', 'low'] as const)\n .filter((key) => s[key] !== undefined && (this.showZero || Number(s[key]) > 0))\n .map((key) => {\n const count = Number(s[key]) || 0;\n const label =\n this.suffixed && key !== 'total' ? `${count}${key.charAt(0).toUpperCase()}` : count;\n return { key, label, tone: SeverityBadgesComponent.TONES[key] };\n });\n }\n\n badgeClass(badge: FxSeverityBadge): string {\n return badge.tone ? toneBadge(badge.tone) : 'bg-bg-hover text-text-primary';\n }\n}\n","<div class=\"flex items-center gap-small\">\n @for (badge of badges; track badge.key) {\n <button\n type=\"button\"\n class=\"px-2 py-0.5 rounded-full txt-utility-caption font-medium cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50\"\n [ngClass]=\"badgeClass(badge)\"\n [attr.aria-label]=\"badge.key + ': ' + badge.label\"\n (click)=\"badgeClick.emit(badge.key)\"\n >{{ badge.label }}</button>\n }\n</div>\n","import { Component, Input, TemplateRef, AfterViewInit, input, contentChild, viewChild } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { BaseMasterDetailComponent } from '../../../core/components/base-master-detail.component';\nimport { SkeletonListComponent } from '../skeleton-list/skeleton-list.component';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { EmptyStateComponent } from '../empty-state/empty-state.component';\nimport { SkeletonDetailComponent } from '../skeleton-detail/skeleton-detail.component';\n\nlet nextUid = 0;\n\n/**\n * Two-column master-detail shell driven by a BaseMasterDetailComponent.\n * The host page projects its own header/filters and supplies templates for\n * the parts that vary per entity:\n *\n * <fx-ui-master-detail [table]=\"this\" [emptyMessage]=\"'noData' | translate\">\n * <div mdHeader>…title / stat cards…</div>\n * <div mdFilters>…search bar / filter chips…</div>\n * <ng-template #row let-item let-selected=\"selected\">…row body…</ng-template>\n * <ng-template #detail let-detail>…detail pane…</ng-template>\n * </fx-ui-master-detail>\n *\n * The list behaves as a single-select listbox: the selected option is the\n * tab stop, ArrowUp/Down/Home/End move the selection.\n */\n@Component({\n selector: 'fx-ui-master-detail',\n templateUrl: './master-detail.component.html',\n styleUrl: './master-detail.component.css',\n imports: [\n SkeletonListComponent,\n NgClass,\n NgTemplateOutlet,\n EmptyStateComponent,\n MatPaginator,\n SkeletonDetailComponent,\n ],\n})\nexport class MasterDetailComponent implements AfterViewInit {\n @Input() table!: BaseMasterDetailComponent<any>;\n /** Fixed list-pane width on lg+ viewports (stacked full-width below). */\n readonly listWidth = input('420px');\n readonly maxListHeight = input('640px');\n readonly pageSizeOptions = input([5, 10, 20, 50]);\n /** Labels come in via inputs — the lib carries no i18n. */\n readonly emptyMessage = input('No data');\n readonly listLabel = input('');\n readonly skeletonCards = input(3);\n\n readonly rowTemplate = contentChild.required<TemplateRef<any>>('row');\n readonly detailTemplate = contentChild.required<TemplateRef<any>>('detail');\n readonly paginator = viewChild.required(MatPaginator);\n\n readonly uid = `fx-md-${nextUid++}`;\n\n ngAfterViewInit(): void {\n // The paginator lives in this view, not the host page's, so the host's\n // @ViewChild(MatPaginator) never finds it. Hand it to the table so\n // refresh() keeps resetting pageIndex.\n if (this.table) {\n this.table.paginator = this.paginator();\n }\n }\n\n isSelected(row: any): boolean {\n return this.table.idOf(row) === this.table.selectedId;\n }\n\n optionId(index: number): string {\n return `${this.uid}-opt-${index}`;\n }\n\n onKeydown(event: KeyboardEvent, index: number): void {\n const rows = this.table.dataSource.data || [];\n if (!rows.length) {\n return;\n }\n let next: number;\n switch (event.key) {\n case 'ArrowDown':\n next = Math.min(index + 1, rows.length - 1);\n break;\n case 'ArrowUp':\n next = Math.max(index - 1, 0);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = rows.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n if (next === index) {\n return;\n }\n this.table.selectItem(rows[next]);\n const el = document.getElementById(this.optionId(next));\n el?.focus();\n el?.scrollIntoView({ block: 'nearest' });\n }\n}\n","<div class=\"flex flex-col lg:flex-row items-start gap-xl\" [style.--fx-md-list-width]=\"listWidth()\">\n <!-- Master: list pane -->\n <div class=\"fx-md-list card-common\">\n <ng-content select=\"[mdHeader]\"></ng-content>\n <ng-content select=\"[mdFilters]\"></ng-content>\n <div\n class=\"flex flex-col gap-normal overflow-auto pr-xs\"\n [style.maxHeight]=\"maxListHeight()\"\n role=\"listbox\"\n [attr.aria-label]=\"listLabel() || null\"\n >\n @if (table.loading) {\n <fx-ui-skeleton-list [rows]=\"table.pageSize\"></fx-ui-skeleton-list>\n } @else {\n @for (row of table.dataSource.data; track table.idOf(row); let i = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [id]=\"optionId(i)\"\n [attr.aria-selected]=\"isSelected(row)\"\n [tabindex]=\"isSelected(row) ? 0 : -1\"\n (click)=\"table.selectItem(row)\"\n (keydown)=\"onKeydown($event, i)\"\n class=\"text-left rounded-lg border p-semi transition-colors\"\n [ngClass]=\"\n isSelected(row)\n ? 'border-gradient-primary-start bg-gradient-primary-start/5'\n : 'border-border-default hover:border-border-interactive bg-bg-primary'\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"rowTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: row, selected: isSelected(row) }\"\n ></ng-container>\n </button>\n }\n @if (!table.dataSource.data.length) {\n <fx-ui-empty-state [message]=\"emptyMessage()\"></fx-ui-empty-state>\n }\n }\n </div>\n <!-- No (page) binding: ngAfterViewInit hands this paginator to the table,\n whose own BaseTable subscription (running after this child's hook)\n wires page events — a binding here would double-fetch every change. -->\n <mat-paginator\n class=\"mt-normal\"\n [length]=\"table.total\"\n [pageSize]=\"table.pageSize\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n ></mat-paginator>\n </div>\n\n <!-- Detail pane -->\n <div class=\"w-full lg:flex-1 min-w-0\">\n @if (table.selected) {\n @if (table.detailBusy) {\n <fx-ui-skeleton-detail [cards]=\"skeletonCards()\"></fx-ui-skeleton-detail>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"detailTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: table.detail, selected: table.selected }\"\n ></ng-container>\n }\n } @else {\n <div class=\"card-common flex items-center justify-center h-[300px]\">\n <fx-ui-empty-state [message]=\"emptyMessage()\"></fx-ui-empty-state>\n </div>\n }\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output\n} from '@angular/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { HeroIconComponent } from '../hero-icon/hero-icon.component';\nimport { Tone } from '../../../core/value-tone.util';\n\nexport interface FxMenuItem {\n /** Caller-translated label. */\n label: string;\n /** Optional hero-icon name shown before the label. */\n icon?: string;\n /** Danger/warning items get the matching text tone. */\n tone?: Tone | null;\n disabled?: boolean;\n /** Free-form identifier handed back on (select). */\n value?: any;\n}\n\n/**\n * Row-action dropdown wrapper over mat-menu (behavior-layer rule, Playbook\n * §5.1 — apps never import @angular/material directly). Project the trigger\n * content; items render from [items] and come back through (select).\n *\n * <fx-ui-menu [items]=\"actions\" (select)=\"onAction($event)\">\n * <fx-ui-hero-icon icon=\"ellipsis-vertical\" [size]=\"20\" />\n * </fx-ui-menu>\n */\n@Component({\n selector: 'fx-ui-menu',\n templateUrl: './menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatMenuModule, HeroIconComponent],\n})\nexport class MenuComponent {\n readonly items = input<FxMenuItem[]>([]);\n readonly disabled = input(false);\n /** Accessible name for the trigger button. */\n readonly ariaLabel = input('Open menu');\n readonly select = output<FxMenuItem>();\n\n toneClass(item: FxMenuItem): string {\n switch (item.tone) {\n case 'critical':\n case 'danger':\n return 'text-danger';\n case 'warning':\n return 'text-warning';\n case 'success':\n return 'text-success';\n case 'information':\n return 'text-information';\n default:\n return 'text-text-primary';\n }\n }\n}\n","<button\n type=\"button\"\n class=\"inline-flex items-center justify-center rounded-lg p-1 hover:bg-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n [matMenuTriggerFor]=\"menu\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <ng-content></ng-content>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n @for (item of items(); track item.label) {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"item.disabled\"\n (click)=\"select.emit(item)\"\n >\n <span class=\"flex items-center gap-normal\" [class]=\"toneClass(item)\">\n @if (item.icon) {\n <fx-ui-hero-icon [icon]=\"item.icon\" [size]=\"18\"></fx-ui-hero-icon>\n }\n <span>{{ item.label }}</span>\n </span>\n </button>\n }\n</mat-menu>\n","import { ButtonComponent } from './button/button.component';\nimport { CheckboxComponent } from './checkbox/checkbox.component';\nimport { CircleProgressBar } from './circle-progress-bar/circle-progress-bar.component';\nimport { DatetimePicker } from './datetime-picker/datetime-picker.component';\nimport { DndUploadComponent } from './dnd-upload/dnd-upload.component';\nimport { HeroIconComponent } from './hero-icon/hero-icon.component';\nimport { InputComponent } from './input/input.component';\nimport { LoadingPanel } from './loading-panel/loading-panel.component';\nimport { RadioButtonToggleComponent } from './radio-button-toggle/radio-button-toggle.component';\nimport { RadioButtonComponent } from './radio-button/radio-button.component';\nimport { SearchBarComponent } from './search-bar/search-bar.component';\nimport { SelectComponent } from './select/select.component';\nimport { SkeletonTableLoadingComponent } from './skeleton-table-loading/skeleton-table-loading.component';\nimport { SliderComponent } from './slider/slider.component';\nimport { SwitchComponent } from './switch/switch.component';\nimport { TabComponent } from './tab-component/tab.component';\nimport { TabGroupComponent } from './tab-group/tab-group.component';\nimport { TableCell } from './table-cell/table-cell.component';\nimport { TagComponent } from './tag/tag.component';\nimport { ToastContainerComponent } from './toast-container/toast-container.component';\nimport { ToastComponent } from './toast/toast.component';\nimport { TreeDiagram } from './tree-diagram/tree-diagram.component';\nimport { KanbanBoardComponent } from './kanban-board/kanban-board.component';\nimport { DrawerComponent } from './drawer/drawer.component';\nimport { SkeletonListComponent } from './skeleton-list/skeleton-list.component';\nimport { SkeletonDetailComponent } from './skeleton-detail/skeleton-detail.component';\nimport { StatCardsComponent } from './stat-cards/stat-cards.component';\nimport { EmptyStateComponent } from './empty-state/empty-state.component';\nimport { FilterChipsComponent } from './filter-chips/filter-chips.component';\nimport { MeterComponent } from './meter/meter.component';\nimport { SectionCardComponent } from './section-card/section-card.component';\nimport { InfoFieldComponent } from './info-field/info-field.component';\nimport { SeverityBadgesComponent } from './severity-badges/severity-badges.component';\nimport { MasterDetailComponent } from './master-detail/master-detail.component';\nimport { MenuComponent } from './menu/menu.component';\n\nexport { ButtonComponent } from './button/button.component';\nexport { CheckboxComponent } from './checkbox/checkbox.component';\nexport { CircleProgressBar } from './circle-progress-bar/circle-progress-bar.component';\nexport { SkeletonTableLoadingComponent } from './skeleton-table-loading/skeleton-table-loading.component';\nexport { TreeDiagram } from './tree-diagram/tree-diagram.component';\nexport { DatetimePicker } from './datetime-picker/datetime-picker.component';\nexport { DndUploadComponent } from './dnd-upload/dnd-upload.component';\nexport { HeroIconComponent } from './hero-icon/hero-icon.component';\nexport { InputComponent } from './input/input.component';\nexport { LoadingPanel } from './loading-panel/loading-panel.component';\nexport { RadioButtonToggleComponent } from './radio-button-toggle/radio-button-toggle.component';\nexport { RadioButtonComponent } from './radio-button/radio-button.component';\nexport { SearchBarComponent } from './search-bar/search-bar.component';\nexport { SelectComponent } from './select/select.component';\nexport { SliderComponent } from './slider/slider.component';\nexport { SwitchComponent } from './switch/switch.component';\nexport { TabComponent } from './tab-component/tab.component';\nexport { TabGroupComponent } from './tab-group/tab-group.component';\nexport { TagComponent } from './tag/tag.component';\nexport { ToastContainerComponent } from './toast-container/toast-container.component';\nexport { ToastComponent } from './toast/toast.component';\nexport { TableCell } from './table-cell/table-cell.component';\nexport { KanbanBoardComponent } from './kanban-board/kanban-board.component';\nexport { DrawerComponent } from './drawer/drawer.component';\nexport type { DrawerItem } from './drawer/drawer.types';\nexport { SkeletonListComponent } from './skeleton-list/skeleton-list.component';\nexport { SkeletonDetailComponent } from './skeleton-detail/skeleton-detail.component';\nexport { StatCardsComponent } from './stat-cards/stat-cards.component';\nexport type { FxStatCard } from './stat-cards/stat-cards.component';\nexport { EmptyStateComponent } from './empty-state/empty-state.component';\nexport { FilterChipsComponent } from './filter-chips/filter-chips.component';\nexport type { FxFilterChipOption } from './filter-chips/filter-chips.component';\nexport { MeterComponent } from './meter/meter.component';\nexport { SectionCardComponent } from './section-card/section-card.component';\nexport { InfoFieldComponent } from './info-field/info-field.component';\nexport { SeverityBadgesComponent } from './severity-badges/severity-badges.component';\nexport type { FxSeverityBadge } from './severity-badges/severity-badges.component';\nexport { MasterDetailComponent } from './master-detail/master-detail.component';\nexport { MenuComponent } from './menu/menu.component';\nexport type { FxMenuItem } from './menu/menu.component';\n\nexport const FX_COMPONENTS = [\n InputComponent,\n SelectComponent,\n RadioButtonComponent,\n CheckboxComponent,\n DndUploadComponent,\n ButtonComponent,\n RadioButtonToggleComponent,\n DatetimePicker,\n LoadingPanel,\n SearchBarComponent,\n TabGroupComponent,\n TabComponent,\n HeroIconComponent,\n ToastComponent,\n ToastContainerComponent,\n TagComponent,\n SliderComponent,\n SwitchComponent,\n SkeletonTableLoadingComponent,\n CircleProgressBar,\n TreeDiagram,\n TableCell,\n KanbanBoardComponent,\n DrawerComponent,\n SkeletonListComponent,\n SkeletonDetailComponent,\n StatCardsComponent,\n EmptyStateComponent,\n FilterChipsComponent,\n MeterComponent,\n SectionCardComponent,\n InfoFieldComponent,\n SeverityBadgesComponent,\n MasterDetailComponent,\n MenuComponent,\n];\n","import { ConfirmationDialogComponent } from \"./confirmation/confirmation.component\";\n\nexport { ConfirmationDialogComponent } from \"./confirmation/confirmation.component\";\n\nexport const DIALOGS_COMPONENT = [\n ConfirmationDialogComponent\n]","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { FX_COMPONENTS } from './components';\nimport { DIALOGS_COMPONENT } from './dialogs';\nimport { HasPermissionDirective } from '../core/directives/has-permission.directive';\nimport { TrimOnBlurDirective } from '../core/directives/trim.directive';\n\n/**\n * Compatibility barrel over the (now standalone) core components.\n *\n * Deliberately NOT re-exported anymore: Angular Material —\n * Material is a behavior layer that stays an\n * implementation detail of this lib (Playbook §5.1); each standalone\n * component imports what it needs itself. Apps consume fx-ui-* only.\n *\n * Heavy components live in secondary entry points and are not part of this\n * barrel: @foxeltech/angular-ui/chart, /flow, /rich-text.\n */\n@NgModule({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n HasPermissionDirective,\n TrimOnBlurDirective,\n ...FX_COMPONENTS,\n ...DIALOGS_COMPONENT,\n ],\n exports: [\n ...FX_COMPONENTS,\n ...DIALOGS_COMPONENT,\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n HasPermissionDirective,\n TrimOnBlurDirective,\n ],\n})\nexport class UiModule { }\n","/*\n * Public API Surface of ui\n */\n\nexport * from './lib/core/components/base.component';\nexport * from './lib/core/components/base-table.component';\nexport * from './lib/core/components/base-master-detail.component';\nexport * from './lib/core/components/base-dialog.component';\nexport * from './lib/core/services/http-wrapper.service';\nexport * from './lib/core/services/toastr.service';\nexport * from './lib/core/services/loading.service';\nexport * from './lib/core/resolvers/base-resolver.resolver';\nexport * from './lib/core/resolvers/fx-list.resolver';\nexport * from './lib/core/services/api-factory';\nexport * from './lib/core/services/realtime-table-sync';\nexport * from './lib/core/utils';\nexport * from './lib/core/value-tone.util';\nexport * from './lib/core/validators';\nexport * from './lib/translation/translation.module';\nexport * from './lib/translation/translation.service';\nexport * from './lib/core/directives/has-permission.directive';\nexport * from './lib/core/directives/trim.directive';\nexport * from './lib/core/guards/permissions.guard';\nexport * from './lib/core/services/permissions.service';\nexport * from './lib/core/services/storage.service';\nexport * from './lib/core/interceptors/auth.interceptor';\nexport * from './lib/core/services/auth-state.service';\nexport * from './lib/core/services/breadcrumb.service';\nexport * from './lib/core/services/theme.service';\nexport * from './lib/core/services/notification.service';\nexport * from './lib/core/services/dialog.service';\n\nexport * from './lib/ui/components/fx-component.component'\nexport * from './lib/ui/ui.module';\nexport * from './lib/ui/components/button/button.component';\nexport * from './lib/ui/components/checkbox/checkbox.component';\nexport * from './lib/ui/components/datetime-picker/datetime-picker.component';\nexport * from './lib/ui/components/dnd-upload/dnd-upload.component';\nexport * from './lib/ui/components/input/input.component';\nexport * from './lib/ui/components/radio-button/radio-button.component';\nexport * from './lib/ui/components/radio-button-toggle/radio-button-toggle.component';\nexport * from './lib/ui/components/select/select.component';\nexport * from './lib/ui/components/loading-panel/loading-panel.component';\nexport * from './lib/ui/components/tab-group/tab-group.component';\nexport * from './lib/ui/components/tab-component/tab.component';\nexport * from './lib/ui/components/search-bar/search-bar.component';\nexport * from './lib/ui/components/hero-icon/hero-icon.component';\nexport * from './lib/ui/components/toast/toast.component';\nexport * from './lib/ui/components/toast-container/toast-container.component';\nexport * from './lib/ui/components/tag/tag.component';\nexport * from './lib/ui/components/slider/slider.component';\nexport * from './lib/ui/dialogs/confirmation/confirmation.component';\nexport * from './lib/ui/components/switch/switch.component';\nexport * from './lib/ui/components/skeleton-table-loading/skeleton-table-loading.component';\nexport * from './lib/ui/components/circle-progress-bar/circle-progress-bar.component';\nexport * from './lib/ui/components/tree-diagram/tree-diagram.component';\nexport * from './lib/ui/components/table-cell/table-cell.component';\nexport * from './lib/ui/components/kanban-board/kanban-board.component';\nexport * from './lib/ui/components/kanban-board/kanban-board.types';\nexport * from './lib/ui/components/drawer/drawer.component';\nexport * from './lib/ui/components/skeleton-list/skeleton-list.component';\nexport * from './lib/ui/components/skeleton-detail/skeleton-detail.component';\nexport * from './lib/ui/components/stat-cards/stat-cards.component';\nexport * from './lib/ui/components/empty-state/empty-state.component';\nexport * from './lib/ui/components/filter-chips/filter-chips.component';\nexport * from './lib/ui/components/meter/meter.component';\nexport * from './lib/ui/components/section-card/section-card.component';\nexport * from './lib/ui/components/info-field/info-field.component';\nexport * from './lib/ui/components/severity-badges/severity-badges.component';\nexport * from './lib/ui/components/master-detail/master-detail.component';\nexport * from './lib/ui/components/menu/menu.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.HttpWrapper","i2","i2.FxToastrService","i3.HttpWrapper","i1","i1.PermissionService","i1.AuthStateService"],"mappings":"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"}
|