@elasticias/ui 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"elasticias-ui.mjs","sources":["../../../../libs/ui/src/lib/pipes/ef-currency.pipe.ts","../../../../libs/ui/src/lib/pipes/truncate.pipe.ts","../../../../libs/ui/src/lib/commerce/ef-price-display.component.ts","../../../../libs/ui/src/lib/commerce/ef-quantity-selector.component.ts","../../../../libs/ui/src/lib/commerce/ef-order-builder/ef-order-builder.component.types.ts","../../../../libs/ui/src/lib/commerce/ef-order-summary/ef-order-summary.component.ts","../../../../libs/ui/src/lib/commerce/ef-order-summary/ef-order-summary.component.html","../../../../libs/ui/src/lib/layout/ef-label/ef-label.component.ts","../../../../libs/ui/src/lib/forms/ef-select/ef-select.component.ts","../../../../libs/ui/src/lib/forms/ef-select/ef-select.component.html","../../../../libs/ui/src/lib/forms/ef-datepicker/ef-datepicker.component.ts","../../../../libs/ui/src/lib/forms/ef-datepicker/ef-datepicker.component.html","../../../../libs/ui/src/lib/forms/ef-inputnumber/ef-inputnumber.component.ts","../../../../libs/ui/src/lib/forms/ef-inputnumber/ef-inputnumber.component.html","../../../../libs/ui/src/lib/layout/ef-fieldset/ef-fieldset.component.ts","../../../../libs/ui/src/lib/layout/ef-fieldset/ef-fieldset.component.html","../../../../libs/ui/src/lib/layout/ef-button/ef-button.component.ts","../../../../libs/ui/src/lib/layout/ef-button/ef-button.component.html","../../../../libs/ui/src/lib/commerce/ef-order-builder/ef-order-builder.component.ts","../../../../libs/ui/src/lib/commerce/ef-order-builder/ef-order-builder.component.html","../../../../libs/ui/src/lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component.ts","../../../../libs/ui/src/lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component.html","../../../../libs/ui/src/lib/forms/ef-quantity-stepper/ef-quantity-stepper.component.ts","../../../../libs/ui/src/lib/forms/ef-quantity-stepper/ef-quantity-stepper.component.html","../../../../libs/ui/src/lib/commerce/ef-product-catalogue/ef-product-catalogue.component.ts","../../../../libs/ui/src/lib/commerce/ef-product-catalogue/ef-product-catalogue.component.html","../../../../libs/ui/src/lib/layout/ef-dialog/ef-dialog.component.ts","../../../../libs/ui/src/lib/layout/ef-dialog/ef-dialog.component.html","../../../../libs/ui/src/lib/layout/ef-badge/ef-badge.component.types.ts","../../../../libs/ui/src/lib/layout/ef-badge/ef-badge.component.ts","../../../../libs/ui/src/lib/layout/ef-badge/ef-badge.component.html","../../../../libs/ui/src/lib/layout/ef-toolbar/ef-toolbar.component.ts","../../../../libs/ui/src/lib/layout/ef-toolbar/ef-toolbar.component.html","../../../../libs/ui/src/lib/feedback/ef-block-ui/ef-block-ui.component.ts","../../../../libs/ui/src/lib/feedback/ef-block-ui/ef-block-ui.component.html","../../../../libs/ui/src/lib/feedback/ef-blockable-div/ef-blockable-div.component.ts","../../../../libs/ui/src/lib/forms/ef-input-text/ef-input-text.component.ts","../../../../libs/ui/src/lib/forms/ef-input-text/ef-input-text.component.html","../../../../libs/ui/src/lib/forms/ef-checkbox/ef-checkbox.component.ts","../../../../libs/ui/src/lib/forms/ef-checkbox/ef-checkbox.component.html","../../../../libs/ui/src/lib/forms/ef-password/ef-password.component.ts","../../../../libs/ui/src/lib/forms/ef-password/ef-password.component.html","../../../../libs/ui/src/lib/forms/ef-multi-select/ef-multi-select.component.ts","../../../../libs/ui/src/lib/forms/ef-multi-select/ef-multi-select.component.html","../../../../libs/ui/src/lib/forms/ef-selectbutton/ef-selectbutton.component.ts","../../../../libs/ui/src/lib/forms/ef-selectbutton/ef-selectbutton.component.html","../../../../libs/ui/src/lib/forms/index.ts","../../../../libs/ui/src/lib/data/ef-datatable/ef-datatable.component.types.ts","../../../../libs/ui/src/lib/data/ef-datatable-actionbar/ef-datatable-actionbar.component.ts","../../../../libs/ui/src/lib/data/ef-datatable-actionbar/ef-datatable-actionbar.component.html","../../../../libs/ui/src/lib/data/ef-datatable/ef-datatable.component.ts","../../../../libs/ui/src/lib/data/ef-datatable/ef-datatable.component.html","../../../../libs/ui/src/lib/ef-theme-configurator/ef-theme-configurator.component.ts","../../../../libs/ui/src/lib/analytics/ef-email-metrics-card/ef-email-metrics-card.component.ts","../../../../libs/ui/src/lib/analytics/ef-email-metrics-card/ef-email-metrics-card.component.html","../../../../libs/ui/src/index.ts","../../../../libs/ui/src/elasticias-ui.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Merged currency pipe from ERP (AppCurrencyPipe) and Store (CurrencyFormatPipe).\n * Uses Intl.NumberFormat for formatting — no CurrencyPipe dependency needed.\n * Default: MAD currency, fr-MA locale.\n */\n@Pipe({ name: 'efCurrency', standalone: true })\nexport class EfCurrencyPipe implements PipeTransform {\n transform(value: number | null | undefined, currency = 'MAD', locale = 'fr-MA'): string {\n if (value == null) return '';\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'truncate', standalone: true })\nexport class TruncatePipe implements PipeTransform {\n transform(value: string, maxLength = 50, suffix = '...'): string {\n if (!value) return '';\n return value.length > maxLength ? value.slice(0, maxLength) + suffix : value;\n }\n}\n","import { Component, input } from '@angular/core';\nimport { EfCurrencyPipe } from '../pipes/ef-currency.pipe';\n\n@Component({\n selector: 'ef-price-display',\n standalone: true,\n imports: [EfCurrencyPipe],\n template: `<span class=\"font-medium\">{{ amount() | efCurrency }}</span>`,\n})\nexport class EfPriceDisplayComponent {\n readonly amount = input.required<number>();\n}\n","import { Component, input, output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'ef-quantity-selector',\n standalone: true,\n imports: [ButtonModule],\n template: `\n <div class=\"flex items-center gap-2\">\n <p-button\n icon=\"pi pi-minus\"\n [rounded]=\"true\"\n [text]=\"true\"\n size=\"small\"\n (onClick)=\"decrement()\"\n [disabled]=\"quantity() <= 1\"\n />\n <span class=\"w-8 text-center font-medium\">{{ quantity() }}</span>\n <p-button\n icon=\"pi pi-plus\"\n [rounded]=\"true\"\n [text]=\"true\"\n size=\"small\"\n (onClick)=\"increment()\"\n />\n </div>\n `,\n})\nexport class EfQuantitySelectorComponent {\n readonly quantity = input(1);\n readonly quantityChange = output<number>();\n\n increment(): void {\n this.quantityChange.emit(this.quantity() + 1);\n }\n\n decrement(): void {\n if (this.quantity() > 1) {\n this.quantityChange.emit(this.quantity() - 1);\n }\n }\n}\n","import { UuidUtils } from '@elasticias/utils';\n\n/**\n * Summary item for product count groups\n */\nexport interface OrderSummaryItem {\n code: string;\n label: string;\n count: number;\n column: number;\n}\n\n/**\n * Order products summary grouped by countGroup\n */\nexport interface OrderProductsSummary {\n items: OrderSummaryItem[];\n totalCount: number;\n}\n\n/**\n * Represents a line item in an order, invoice, or quote\n */\nexport interface OrderLineItem {\n id?: string | number;\n product?: Record<string, unknown>;\n productId?: unknown;\n variantId?: string | null;\n countGroup?: string;\n productDescription?: string;\n productUnitPrice: number;\n quantity: number;\n discount: number;\n grossAmount: number;\n amount?: number;\n taxeId?: number | null;\n taxRate?: number;\n taxAmount?: number;\n position?: number;\n isEditing?: boolean;\n editingField?: string | null;\n}\n\n/**\n * Standard order entity contract\n */\nexport interface OrderEntity {\n // Core identification\n id?: number;\n documentNumber?: string;\n documentType: 'order' | 'invoice' | 'quote';\n status?: 'draft' | 'confirmed' | 'processing' | 'completed' | 'cancelled';\n\n // Customer information\n customerId?: string | null;\n customerName?: string;\n\n // Dates\n orderDate: Date;\n deliveryDate?: Date | null;\n dueDate?: Date | null;\n\n // Line items\n orderLines: OrderLineItem[];\n\n // Financial calculations\n grossTotal: number;\n discountTotal: number;\n taxTotal: number;\n finalTotal: number;\n\n // Optional fields\n notes?: string;\n internalNotes?: string;\n paymentTerms?: string;\n shippingAddress?: string;\n billingAddress?: string;\n\n // Products summary by countGroup\n productsSummary?: OrderProductsSummary;\n}\n\n/**\n * Configuration for document types (order, invoice, quote)\n */\nexport interface DocumentConfig {\n documentType: 'order' | 'invoice' | 'quote';\n headerLabel: string;\n dateLabel: string;\n customerLabel: string;\n enableTax?: boolean;\n enableDiscount?: boolean;\n showCatalogue?: boolean;\n allowInlineEdit?: boolean;\n enableQuickAdd?: boolean;\n showNotes?: boolean;\n showProductsSummary?: boolean;\n currencyCode?: string;\n locale?: string;\n}\n\n/**\n * Change tracking metadata\n */\nexport interface OrderChangeInfo {\n hasChanges: boolean;\n lastModified: Date;\n modifiedFields: Set<string>;\n}\n\n/**\n * Validation result\n */\nexport interface ValidationResult {\n isValid: boolean;\n errors: { [key: string]: string[] };\n warnings?: { [key: string]: string[] };\n}\n\n/**\n * Helper functions for order line items\n */\nexport class OrderLineItemHelper {\n /**\n * Calculate subtotal for a line item (price * quantity - discount)\n */\n static calculateSubtotal(item: OrderLineItem): number {\n if (!item.productUnitPrice || !item.quantity) return 0;\n const subtotal = item.productUnitPrice * item.quantity;\n const discount = item.discount || 0;\n return subtotal - (subtotal * discount) / 100;\n }\n\n /**\n * Calculate tax amount for a line item\n */\n static calculateTaxAmount(item: OrderLineItem): number {\n if (!item.taxRate) return 0;\n const subtotal = this.calculateSubtotal(item);\n return (subtotal * item.taxRate) / 100;\n }\n\n /**\n * Calculate final amount including tax\n */\n static calculateFinalAmount(item: OrderLineItem): number {\n const subtotal = this.calculateSubtotal(item);\n const taxAmount = this.calculateTaxAmount(item);\n return subtotal + taxAmount;\n }\n\n /**\n * Compose a line description from a product and (optionally) its variant.\n * Variable product → \"{displayName} ({variantTitle})\"\n * Simple product → displayName\n * Mirrors the legacy PDF format `[PF] {ref} - {NAME} ({volume})` after\n * the parent displayName has been cleaned of its baked-in volume suffix.\n */\n static composeDescription(\n product: Record<string, unknown> | null | undefined,\n variant?: Record<string, unknown>,\n ): string {\n if (!product) return '';\n const base = (product['displayName'] || product['name'] || '') as string;\n if (!base) return '';\n const title = variant?.['title'] as string | undefined;\n if (title && title.trim().length > 0) {\n return `${base} (${title})`;\n }\n return base;\n }\n\n /**\n * Create a new empty line item\n */\n static createEmptyItem(): OrderLineItem {\n return {\n id: UuidUtils.randomUUID(),\n product: null,\n productId: undefined,\n productUnitPrice: 0,\n quantity: 1,\n discount: 0,\n grossAmount: 0,\n taxRate: 0,\n taxAmount: 0,\n isEditing: true,\n editingField: null,\n };\n }\n\n /**\n * Create a line item from product selection\n * @param keyField - Field name used to identify the product (default: 'id')\n */\n static createFromProduct(product: Record<string, unknown>, quantity = 1, keyField = 'id', variantId?: string): OrderLineItem {\n // Resolve variant data if variantId is provided and product has variants\n const variants = product['variants'] as Array<Record<string, unknown>> | undefined;\n const variant = variantId && variants?.length\n ? variants.find((v) => v['variantId'] === variantId)\n : undefined;\n\n const unitPrice = variant?.['price'] ?? product.unitPrice ?? product.salePrice ?? 0;\n const taxRate = product.taxRate || 0;\n const countGroup = (variant?.['countGroup'] ?? product['countGroup'] ?? '') as string;\n\n const item: OrderLineItem = {\n id: UuidUtils.randomUUID(),\n productId: product[keyField] as string,\n variantId: variantId ?? null,\n countGroup: countGroup,\n product: product,\n productDescription: OrderLineItemHelper.composeDescription(product, variant),\n productUnitPrice: unitPrice as number,\n quantity: quantity,\n discount: 0,\n grossAmount: 0,\n amount: 0,\n taxeId: (product.taxeId || null) as number | null,\n taxRate: taxRate as number,\n taxAmount: 0,\n isEditing: false,\n editingField: null,\n };\n\n // Calculate amounts\n item.grossAmount = OrderLineItemHelper.calculateSubtotal(item);\n item.taxAmount = OrderLineItemHelper.calculateTaxAmount(item);\n item.amount = OrderLineItemHelper.calculateFinalAmount(item);\n\n return item;\n }\n\n /**\n * Update calculations for an existing line item\n */\n static updateCalculations(item: OrderLineItem): OrderLineItem {\n return {\n ...item,\n grossAmount: this.calculateSubtotal(item),\n taxAmount: this.calculateTaxAmount(item),\n amount: this.calculateFinalAmount(item),\n };\n }\n\n /**\n * Validate a line item\n */\n static validate(item: OrderLineItem): ValidationResult {\n const errors: { [key: string]: string[] } = {};\n\n if (!item.product && !item.productId) {\n errors['product'] = ['Le produit est requis'];\n }\n\n if (!item.productUnitPrice || item.productUnitPrice <= 0) {\n errors['productUnitPrice'] = [\"Le prix d'unité doit être supérieur à 0\"];\n }\n\n if (!item.quantity || item.quantity <= 0) {\n errors['quantity'] = ['La quantité doit être supérieure à 0'];\n }\n\n if (item.discount && (item.discount < 0 || item.discount > 100)) {\n errors['discount'] = ['La remise doit être entre 0 et 100'];\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors,\n };\n }\n\n /**\n * Compare two line items for equality\n */\n static areEqual(item1: OrderLineItem, item2: OrderLineItem): boolean {\n return (\n item1.productId === item2.productId &&\n item1.productUnitPrice === item2.productUnitPrice &&\n item1.quantity === item2.quantity &&\n item1.discount === item2.discount &&\n item1.taxRate === item2.taxRate\n );\n }\n}\n\n/**\n * Helper functions for order entity\n */\nexport class OrderEntityHelper {\n /**\n * Create a new empty order entity\n */\n static createEmpty(\n documentType: 'order' | 'invoice' | 'quote' = 'order',\n ): OrderEntity {\n return {\n documentType,\n orderDate: new Date(),\n orderLines: [],\n grossTotal: 0,\n discountTotal: 0,\n taxTotal: 0,\n finalTotal: 0,\n status: 'draft',\n };\n }\n\n /**\n * Calculate all totals for an order\n */\n static calculateTotals(order: OrderEntity): OrderEntity {\n const grossTotal = order.orderLines.reduce(\n (total, item) =>\n total + (item.productUnitPrice || 0) * (item.quantity || 0),\n 0,\n );\n\n const discountTotal = order.orderLines.reduce((total, item) => {\n const itemTotal = (item.productUnitPrice || 0) * (item.quantity || 0);\n const discount = item.discount || 0;\n return total + (itemTotal * discount) / 100;\n }, 0);\n\n const taxTotal = order.orderLines.reduce((total, item) => {\n return total + (item.taxAmount || 0);\n }, 0);\n\n const finalTotal = grossTotal - discountTotal + taxTotal;\n\n return {\n ...order,\n grossTotal,\n discountTotal,\n taxTotal,\n finalTotal,\n };\n }\n\n /**\n * Validate order entity\n */\n static validate(order: OrderEntity): ValidationResult {\n const errors: { [key: string]: string[] } = {};\n const warnings: { [key: string]: string[] } = {};\n\n // Validate required fields\n if (!order.customerId) {\n errors['customerId'] = ['Le client est requis'];\n }\n\n if (!order.orderDate) {\n errors['orderDate'] = ['La date est requise'];\n }\n\n if (!order.orderLines || order.orderLines.length === 0) {\n errors['orderLines'] = ['Au moins un article est requis'];\n }\n\n // Validate line items\n order.orderLines.forEach((item, index) => {\n const itemValidation = OrderLineItemHelper.validate(item);\n if (!itemValidation.isValid) {\n Object.keys(itemValidation.errors).forEach((key) => {\n errors[`orderLines[${index}].${key}`] = itemValidation.errors[key];\n });\n }\n });\n\n // Check for warnings\n if (order.finalTotal <= 0) {\n warnings['finalTotal'] = ['Le montant total est invalide'];\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors,\n warnings,\n };\n }\n\n /**\n * Clone order entity for immutability\n */\n static clone(order: OrderEntity): OrderEntity {\n return {\n ...order,\n orderDate: new Date(order.orderDate),\n deliveryDate: order.deliveryDate ? new Date(order.deliveryDate) : null,\n dueDate: order.dueDate ? new Date(order.dueDate) : null,\n orderLines: order.orderLines.map((item) => ({ ...item })),\n };\n }\n\n /**\n * Compare two orders for changes\n */\n static detectChanges(\n original: OrderEntity,\n current: OrderEntity,\n ): OrderChangeInfo {\n const modifiedFields = new Set<string>();\n\n // Compare basic fields\n const fieldsToCompare: (keyof OrderEntity)[] = [\n 'customerId',\n 'orderDate',\n 'deliveryDate',\n 'dueDate',\n 'notes',\n 'internalNotes',\n 'status',\n ];\n\n fieldsToCompare.forEach((field) => {\n if (original[field] !== current[field]) {\n modifiedFields.add(field as string);\n }\n });\n\n // Compare order items\n if (original.orderLines.length !== current.orderLines.length) {\n modifiedFields.add('orderLines');\n } else {\n for (let i = 0; i < original.orderLines.length; i++) {\n if (\n !OrderLineItemHelper.areEqual(\n original.orderLines[i],\n current.orderLines[i],\n )\n ) {\n modifiedFields.add('orderLines');\n break;\n }\n }\n }\n\n return {\n hasChanges: modifiedFields.size > 0,\n lastModified: new Date(),\n modifiedFields,\n };\n }\n}\n","import { Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { OrderLineItem } from '../ef-order-builder/ef-order-builder.component.types';\n\n/**\n * Product count group entry for displaying grouped counts\n */\nexport interface ProductCountGroup {\n code: string;\n label: string;\n count: number;\n column: number;\n}\n\n/**\n * Reference data item for product count group labels\n */\nexport interface ProductCountGroupLabel {\n code: string;\n label: string;\n description?: string;\n isActive?: boolean;\n sortOrder?: number;\n column?: number;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Product with countGroup field\n */\nexport interface ProductWithCountGroup {\n countGroup?: string;\n [key: string]: unknown;\n}\n\n/**\n * Displays a summary of product quantities grouped by their countGroup field.\n * Maps countGroup codes to labels from product_count_group_labels reference data.\n *\n * @example\n * <ef-order-summary\n * [orderLines]=\"orderLines()\"\n * [countGroupLabels]=\"countGroupLabels\"\n * />\n */\n@Component({\n selector: 'ef-order-summary',\n standalone: true,\n imports: [CommonModule, FieldsetModule],\n templateUrl: './ef-order-summary.component.html',\n styleUrl: './ef-order-summary.component.scss',\n})\nexport class EfOrderSummaryComponent {\n /**\n * Order line items to summarize\n */\n orderLines = input.required<OrderLineItem[]>();\n\n /**\n * Product count group labels from reference data\n */\n countGroupLabels = input<ProductCountGroupLabel[]>([]);\n\n /**\n * Legend text for the fieldset\n */\n legend = input<string>('Récapitulatif');\n\n /**\n * Computed grouped counts by countGroup\n */\n groupedCounts = computed<ProductCountGroup[]>(() => {\n const lines = this.orderLines();\n const labels = this.countGroupLabels();\n\n const countMap = new Map<string, number>();\n\n lines.forEach((line) => {\n const product = line.product as ProductWithCountGroup;\n const countGroup = (line as { countGroup?: string }).countGroup || product?.countGroup;\n\n if (countGroup) {\n const currentCount = countMap.get(countGroup) || 0;\n countMap.set(countGroup, currentCount + (line.quantity || 0));\n }\n });\n\n const groups: ProductCountGroup[] = [];\n\n countMap.forEach((count, code) => {\n const labelItem = labels.find(\n (l) => l.code.toUpperCase() === code.toUpperCase(),\n );\n groups.push({\n code,\n label: labelItem?.label || code,\n count,\n column: labelItem?.column ?? 1,\n });\n });\n\n // Sort by the sortOrder from labels, then by label alphabetically\n groups.sort((a, b) => {\n const labelA = labels.find(\n (l) => l.code.toUpperCase() === a.code.toUpperCase(),\n );\n const labelB = labels.find(\n (l) => l.code.toUpperCase() === b.code.toUpperCase(),\n );\n const orderA = labelA?.sortOrder ?? 999;\n const orderB = labelB?.sortOrder ?? 999;\n\n if (orderA !== orderB) {\n return orderA - orderB;\n }\n return a.label.localeCompare(b.label);\n });\n\n return groups;\n });\n\n /**\n * Total quantity across all groups\n */\n totalCount = computed(() => {\n return this.groupedCounts().reduce((sum, group) => sum + group.count, 0);\n });\n\n /**\n * Split groups into columns based on column field from reference data\n */\n columnGroups = computed(() => {\n const groups = this.groupedCounts();\n const columnMap = new Map<number, ProductCountGroup[]>();\n\n groups.forEach((group) => {\n const colIndex = group.column;\n if (!columnMap.has(colIndex)) {\n columnMap.set(colIndex, []);\n }\n const col = columnMap.get(colIndex);\n if (col) {\n col.push(group);\n }\n });\n\n // Sort columns by key and return as array\n const sortedKeys = Array.from(columnMap.keys()).sort((a, b) => a - b);\n return sortedKeys.map((key) => columnMap.get(key) as ProductCountGroup[]);\n });\n\n /**\n * Check if there are any groups to display\n */\n hasGroups = computed(() => this.groupedCounts().length > 0);\n}\n","@if (hasGroups()) {\n <p-fieldset [legend]=\"legend()\">\n <div class=\"ef-order-summary\">\n <div class=\"ef-order-summary__content\">\n @for (column of columnGroups(); track $index) {\n <div class=\"ef-order-summary__column\">\n @for (group of column; track group.code) {\n <div class=\"ef-order-summary__item\">\n <span class=\"ef-order-summary__label\">{{ group.label }}:</span>\n <span class=\"ef-order-summary__count\">{{ group.count }}</span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ef-order-summary__footer\">\n <span class=\"ef-order-summary__total-label\">Total:</span>\n <span class=\"ef-order-summary__total-count\">{{ totalCount() }}</span>\n </div>\n </div>\n </p-fieldset>\n}\n","import {\n booleanAttribute,\n Component,\n Input,\n} from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-label',\n standalone: true,\n template: `<label [attr.for]=\"for\" [class]=\"styleClass\" [class.required]=\"required\">{{ labelKey ? (labelKey | translate) : label }}</label>`,\n styles: [`:host { display: contents; }`],\n imports: [TranslateModule],\n})\nexport class EfLabelComponent {\n /** Direct label text (not translated) */\n @Input() label?: string;\n /** Translation key — takes priority over label */\n @Input() labelKey?: string;\n /** The for attribute linking to an input id */\n @Input() for?: string;\n /** CSS classes for the label element */\n @Input() styleClass = 'form-label';\n /** Show required indicator */\n @Input({ transform: booleanAttribute }) required = false;\n}\n","import {\n booleanAttribute,\n Component,\n ContentChild,\n forwardRef,\n HostBinding,\n inject,\n Injector,\n Input,\n OnInit,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { SelectModule } from 'primeng/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-select',\n standalone: true,\n templateUrl: './ef-select.component.html',\n styleUrls: ['./ef-select.component.scss'],\n imports: [SelectModule, FormsModule, TranslateModule, EfLabelComponent, CommonModule],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EfSelectComponent),\n multi: true,\n }],\n})\nexport class EfSelectComponent implements ControlValueAccessor, OnInit, OnChanges {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() options: any[] = [];\n @Input() optionLabel = 'name';\n @Input() optionValue?: string;\n @Input() placeholder = '';\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input({ transform: booleanAttribute }) filter = false;\n @Input({ transform: booleanAttribute }) showClear = false;\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input() appendTo?: string;\n\n /** Filter options by matching key-value pairs */\n @Input() filterByKeys?: { [key: string]: any };\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @ContentChild('item') itemTemplate: TemplateRef<any> | null = null;\n @ContentChild('selectedItem') selectedItemTemplate: TemplateRef<any> | null = null;\n\n @Output() selectionChangeEvent = new EventEmitter<any>();\n\n value: any = null;\n filteredOptions: any[] = [];\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n /** Resolved lazily in ngOnInit to avoid circular DI with NG_VALUE_ACCESSOR */\n ngControl: NgControl | null = null;\n private readonly injector = inject(Injector);\n private readonly translateService = inject(TranslateService);\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options'] || changes['filterByKeys']) {\n this.applyFilters();\n }\n }\n\n writeValue(value: any): void {\n this.value = value ?? null;\n }\n\n registerOnChange(fn: (value: any) => 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 handleSelectionChange(event: { originalEvent?: Event; value: any }): void {\n const val = event?.value ?? null;\n this.value = val;\n this.onChange(val);\n this.onTouched();\n this.selectionChangeEvent.emit(val);\n }\n\n handleClear(): void {\n this.value = null;\n this.onChange(null);\n this.onTouched();\n this.selectionChangeEvent.emit(null);\n }\n\n private applyFilters(): void {\n if (this.options && this.filterByKeys && typeof this.filterByKeys === 'object') {\n this.filteredOptions = this.options.filter(option =>\n Object.keys(this.filterByKeys!).every(key => option[key] === this.filterByKeys![key])\n );\n } else {\n this.filteredOptions = this.options ?? [];\n }\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-select\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (onChange)=\"handleSelectionChange($event)\"\n (onClear)=\"handleClear()\"\n [options]=\"filteredOptions\"\n [optionLabel]=\"optionLabel\"\n [optionValue]=\"optionValue\"\n [placeholder]=\"effectivePlaceholder\"\n [size]=\"size\"\n [filter]=\"filter\"\n [showClear]=\"showClear\"\n [disabled]=\"disabled\"\n [appendTo]=\"appendTo\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n fluid\n >\n @if (itemTemplate) {\n <ng-template #item let-item>\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (selectedItemTemplate) {\n <ng-template #selectedItem let-item>\n <ng-container *ngTemplateOutlet=\"selectedItemTemplate; context: { $implicit: item }\"></ng-container>\n </ng-template>\n }\n </p-select>\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-datepicker',\n standalone: true,\n templateUrl: './ef-datepicker.component.html',\n styleUrls: ['./ef-datepicker.component.scss'],\n imports: [DatePickerModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfDatepickerComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) showIcon = true;\n @Input() iconDisplay: 'input' | 'button' = 'input';\n @Input() selectionMode: 'single' | 'multiple' | 'range' = 'single';\n @Input() dateFormat?: string;\n @Input() appendTo?: string;\n @Input({ transform: booleanAttribute }) showTime = false;\n @Input({ transform: booleanAttribute }) showButtonBar = false;\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @Output() dateSelectEvent = new EventEmitter<any>();\n\n value: any = null;\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: any) => 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 handleChange(value: any): void {\n this.value = value;\n this.onChange(value);\n this.dateSelectEvent.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-datepicker\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"handleChange($event)\"\n (onBlur)=\"handleBlur()\"\n [placeholder]=\"effectivePlaceholder\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [showIcon]=\"showIcon\"\n [iconDisplay]=\"iconDisplay\"\n [selectionMode]=\"selectionMode\"\n [dateFormat]=\"dateFormat\"\n [appendTo]=\"appendTo\"\n [showTime]=\"showTime\"\n [showButtonBar]=\"showButtonBar\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [fluid]=\"fluid\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport {\n InputNumber,\n InputNumberInputEvent,\n InputNumberModule,\n} from 'primeng/inputnumber';\nimport { Nullable } from 'primeng/ts-helpers';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-inputnumber',\n standalone: true,\n templateUrl: './ef-inputnumber.component.html',\n styleUrls: ['./ef-inputnumber.component.scss'],\n imports: [InputNumberModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfInputNumberComponent implements ControlValueAccessor {\n @ViewChild('inputNumber', { static: false }) inputNumber?: InputNumber;\n\n // ============================================================================\n // LABEL & VALIDATION\n // ============================================================================\n\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input({ transform: booleanAttribute }) required = false;\n\n // ============================================================================\n // VALUE & MODEL\n // ============================================================================\n\n @Input() value?: Nullable<number>;\n @Input() invalid = false;\n @Input() disabled?: boolean;\n @Input() readonly = false;\n\n // ============================================================================\n // FORMAT & DISPLAY\n // ============================================================================\n\n @Input() format = true;\n @Input() showButtons = false;\n @Input() buttonLayout: 'stacked' | 'horizontal' | 'vertical' = 'stacked';\n @Input() incrementButtonClass?: string;\n @Input() decrementButtonClass?: string;\n @Input() incrementButtonIcon?: string;\n @Input() decrementButtonIcon?: string;\n @Input() prefix?: string;\n @Input() suffix?: string;\n @Input() currency?: string;\n @Input() currencyDisplay?: string;\n @Input() locale?: string;\n @Input() localeMatcher?: 'lookup' | 'best fit';\n @Input() mode: 'decimal' | 'currency' = 'decimal';\n @Input() useGrouping = true;\n @Input() minFractionDigits?: number;\n @Input() maxFractionDigits?: number;\n\n // ============================================================================\n // CONSTRAINTS\n // ============================================================================\n\n @Input() min?: number;\n @Input() max?: number;\n @Input() step = 1;\n @Input() allowEmpty = true;\n\n // ============================================================================\n // INPUT ATTRIBUTES\n // ============================================================================\n\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() inputSize?: number;\n @Input() size?: 'small' | 'large' = 'small';\n @Input() maxlength?: number;\n @Input() minlength?: number;\n @Input() pattern?: string;\n @Input() tabindex?: number;\n @Input() title?: string;\n @Input() ariaLabel?: string;\n @Input() ariaLabelledBy?: string;\n @Input() ariaDescribedBy?: string;\n @Input() ariaRequired?: boolean;\n @Input() inputStyle?: any;\n @Input() inputStyleClass?: string;\n @Input() style?: any;\n @Input() styleClass?: string;\n @Input() showClear = false;\n @Input() variant?: 'filled' | 'outlined';\n @Input() autofocus?: boolean;\n @Input() autocomplete?: string;\n @Input() fluid?: boolean = true;\n @Input({ transform: booleanAttribute }) inline = false;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n // ============================================================================\n // STYLING & CUSTOMIZATION\n // ============================================================================\n\n @Input() pt?: any;\n @Input() ptOptions?: any;\n @Input() dt?: any;\n @Input() unstyled?: boolean;\n\n // ============================================================================\n // EVENTS\n // ============================================================================\n\n @Output() inputEvent = new EventEmitter<InputNumberInputEvent>();\n @Output() focusEvent = new EventEmitter<Event>();\n @Output() blurEvent = new EventEmitter<Event>();\n @Output() keyDownEvent = new EventEmitter<KeyboardEvent>();\n @Output() clearEvent = new EventEmitter<void>();\n\n // ============================================================================\n // CONTROL VALUE ACCESSOR\n // ============================================================================\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return this.invalid || (ctrl?.invalid && (ctrl?.touched || ctrl?.dirty));\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // ============================================================================\n // EVENT HANDLERS\n // ============================================================================\n\n handleInput(event: InputNumberInputEvent): void {\n this.value = event.value;\n this.onChange(event.value);\n this.inputEvent.emit(event);\n }\n\n handleFocus(event: Event): void {\n this.focusEvent.emit(event);\n }\n\n handleBlur(event: Event): void {\n this.onTouched();\n this.blurEvent.emit(event);\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n this.keyDownEvent.emit(event);\n }\n\n handleClear(): void {\n this.value = null;\n this.onChange(null);\n this.clearEvent.emit();\n }\n\n // ============================================================================\n // PUBLIC METHODS\n // ============================================================================\n\n focus(): void {\n this.inputNumber?.input?.nativeElement?.focus();\n }\n\n clear(): void {\n if (this.inputNumber) {\n this.inputNumber.clear();\n this.handleClear();\n }\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-inputnumber\n #inputNumber\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n [invalid]=\"isInvalid\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [format]=\"format\"\n [showButtons]=\"showButtons\"\n [buttonLayout]=\"buttonLayout\"\n [incrementButtonClass]=\"incrementButtonClass\"\n [decrementButtonClass]=\"decrementButtonClass\"\n [incrementButtonIcon]=\"incrementButtonIcon\"\n [decrementButtonIcon]=\"decrementButtonIcon\"\n [prefix]=\"prefix\"\n [suffix]=\"suffix\"\n [currency]=\"currency\"\n [currencyDisplay]=\"currencyDisplay\"\n [locale]=\"locale\"\n [localeMatcher]=\"localeMatcher\"\n [mode]=\"mode\"\n [useGrouping]=\"useGrouping\"\n [minFractionDigits]=\"minFractionDigits\"\n [maxFractionDigits]=\"maxFractionDigits\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [allowEmpty]=\"allowEmpty\"\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [placeholder]=\"effectivePlaceholder\"\n [inputSize]=\"inputSize\"\n [size]=\"size\"\n [maxlength]=\"maxlength\"\n [minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [tabindex]=\"tabindex\"\n [title]=\"title\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ariaRequired]=\"ariaRequired\"\n [inputStyle]=\"inputStyle\"\n [inputStyleClass]=\"inputStyleClass\"\n [style]=\"style\"\n [styleClass]=\"styleClass\"\n [showClear]=\"showClear\"\n [variant]=\"variant\"\n [autofocus]=\"autofocus\"\n [autocomplete]=\"autocomplete\"\n [fluid]=\"fluid\"\n [pt]=\"pt\"\n [ptOptions]=\"ptOptions\"\n [dt]=\"dt\"\n [unstyled]=\"unstyled\"\n (onInput)=\"handleInput($event)\"\n (onFocus)=\"handleFocus($event)\"\n (onBlur)=\"handleBlur($event)\"\n (onKeyDown)=\"handleKeyDown($event)\"\n (onClear)=\"handleClear()\"\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n Input,\n} from '@angular/core';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-fieldset',\n standalone: true,\n templateUrl: './ef-fieldset.component.html',\n imports: [FieldsetModule, TranslateModule],\n})\nexport class EfFieldsetComponent {\n /** Direct legend text (not translated) */\n @Input() legend?: string;\n /** Translation key — takes priority over legend */\n @Input() legendKey?: string;\n\n @Input({ transform: booleanAttribute }) toggleable = false;\n @Input({ transform: booleanAttribute }) collapsed = false;\n @Input() styleClass?: string;\n}\n","<p-fieldset\n [legend]=\"legendKey ? (legendKey | translate) : legend\"\n [toggleable]=\"toggleable\"\n [collapsed]=\"collapsed\"\n [styleClass]=\"styleClass\"\n>\n <ng-content />\n</p-fieldset>\n","import {\n booleanAttribute,\n Component,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-button',\n standalone: true,\n templateUrl: './ef-button.component.html',\n imports: [ButtonModule, TooltipModule, TranslateModule],\n})\nexport class EfButtonComponent {\n /** Direct label text (not translated) */\n @Input() label?: string;\n /** Translation key — takes priority over label */\n @Input() labelKey?: string;\n\n @Input() icon?: string;\n @Input() severity: 'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'help' | 'contrast' = 'primary';\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) rounded = false;\n @Input({ transform: booleanAttribute }) outlined = false;\n @Input({ transform: booleanAttribute }) raised = false;\n @Input({ transform: booleanAttribute }) text = false;\n @Input({ transform: booleanAttribute }) loading = false;\n @Input() styleClass?: string;\n @Input() type: 'button' | 'submit' = 'button';\n @Input() badge?: string;\n @Input() badgeSeverity?: 'success' | 'info' | 'warn' | 'danger' | 'help' | 'primary' | 'secondary' | 'contrast';\n\n /** Direct tooltip text (not translated) */\n @Input() tooltip?: string;\n /** Translation key for tooltip — takes priority over tooltip */\n @Input() tooltipKey?: string;\n @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\n\n @Output() clickEvent = new EventEmitter<Event>();\n\n handleClick(event: Event): void {\n this.clickEvent.emit(event);\n }\n}\n","<p-button\n [label]=\"labelKey ? (labelKey | translate) : label\"\n [icon]=\"icon\"\n [severity]=\"severity\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [rounded]=\"rounded\"\n [outlined]=\"outlined\"\n [raised]=\"raised\"\n [text]=\"text\"\n [loading]=\"loading\"\n [styleClass]=\"styleClass\"\n [type]=\"type\"\n [badge]=\"badge\"\n [badgeSeverity]=\"badgeSeverity\"\n [pTooltip]=\"tooltipKey ? (tooltipKey | translate) : tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (onClick)=\"handleClick($event)\"\n/>\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n OnDestroy,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport {\n DocumentConfig,\n OrderEntity,\n OrderLineItem,\n OrderLineItemHelper,\n OrderEntityHelper,\n OrderChangeInfo,\n ValidationResult,\n OrderProductsSummary,\n OrderSummaryItem,\n} from './ef-order-builder.component.types';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ButtonModule } from 'primeng/button';\nimport { TableModule } from 'primeng/table';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { DividerModule } from 'primeng/divider';\nimport { TooltipModule } from 'primeng/tooltip';\nimport {\n EfOrderSummaryComponent,\n ProductCountGroupLabel,\n} from '../ef-order-summary/ef-order-summary.component';\nimport { EfSelectComponent } from '../../forms/ef-select/ef-select.component';\nimport { EfDatepickerComponent } from '../../forms/ef-datepicker/ef-datepicker.component';\nimport { EfInputNumberComponent } from '../../forms/ef-inputnumber/ef-inputnumber.component';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\nimport { EfFieldsetComponent } from '../../layout/ef-fieldset/ef-fieldset.component';\nimport { EfButtonComponent } from '../../layout/ef-button/ef-button.component';\nimport { UuidUtils, AppUtils } from '@elasticias/utils';\n\n/**\n * Reusable order builder component for orders, invoices, and quotes\n * Manages complete order entity with automatic change tracking\n *\n * @example\n * <ef-order-builder\n * [(order)]=\"orderEntity\"\n * [config]=\"documentConfig\"\n * [products]=\"products\"\n * [customers]=\"customers\"\n * (openCatalogue)=\"handleCatalogueOpen()\"\n * (orderChanged)=\"handleOrderChange($event)\"\n * />\n */\n@Component({\n selector: 'ef-order-builder',\n standalone: true,\n templateUrl: 'ef-order-builder.component.html',\n styleUrl: 'ef-order-builder.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n TextareaModule,\n ButtonModule,\n TableModule,\n FieldsetModule,\n DividerModule,\n TooltipModule,\n EfOrderSummaryComponent,\n EfSelectComponent,\n EfDatepickerComponent,\n EfInputNumberComponent,\n EfLabelComponent,\n EfFieldsetComponent,\n EfButtonComponent,\n ],\n})\nexport class EfOrderBuilderComponent implements OnInit, OnDestroy {\n rowTrackBy = (_: number, item: OrderLineItem) => item.id;\n\n // Expose AppUtils to template\n protected readonly AppUtils = AppUtils;\n\n config = input<DocumentConfig>({\n documentType: 'order',\n headerLabel: 'Commamnde',\n dateLabel: 'Date de commande',\n customerLabel: 'Client',\n enableTax: true,\n enableDiscount: true,\n showCatalogue: true,\n allowInlineEdit: true,\n currencyCode: 'MAD',\n locale: 'fr-FR',\n });\n\n order = model.required<OrderEntity>();\n products = input.required<Record<string, unknown>[]>();\n customers = input.required<Record<string, unknown>[]>();\n readonly = input<boolean>(false);\n countGroupLabels = input<ProductCountGroupLabel[]>([]);\n /** Field name used to identify products (must match catalogue's trackByField) */\n productKeyField = input<string>('id');\n backendErrors = input<{ [key: string]: string[] }>({});\n\n openCatalogue = output<void>();\n orderChanged = output<OrderChangeInfo>();\n orderValidated = output<ValidationResult>();\n productsAdded = output<OrderLineItem[]>();\n\n private originalOrder = signal<OrderEntity | null>(null);\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n private initialized = signal(false);\n\n quickAddProduct = signal<Record<string, unknown> | null>(null);\n quickAddPrice = signal<number>(0);\n quickAddQuantity = signal<number>(1);\n\n quickAddDisabled = computed(\n () => this.quickAddProduct() === null || (this.quickAddQuantity() ?? 0) <= 0,\n );\n\n orderLines = computed(() => this.order().orderLines || []);\n\n /**\n * Flatten products → one option per active variant for the inline ef-select.\n * Simple products (no variants) get a single row with the product label.\n * Each option exposes `_displayLabel` for `optionLabel` and carries the\n * underlying product/variant references for `onProductSelect`.\n */\n flattenedProductOptions = computed<Array<Record<string, unknown>>>(() => {\n const keyField = this.productKeyField();\n const list: Array<Record<string, unknown>> = [];\n\n for (const product of this.products()) {\n const variants = product['variants'] as\n | Array<Record<string, unknown>>\n | undefined;\n const activeVariants = (variants ?? []).filter(\n (v) => v['isActive'] !== false,\n );\n const productLabel = (product['displayName'] ||\n product['name'] ||\n '') as string;\n\n if (activeVariants.length === 0) {\n list.push({\n _product: product,\n _variant: null,\n _displayLabel: productLabel,\n _key: `${product[keyField]}::`,\n });\n continue;\n }\n\n for (const variant of activeVariants) {\n const variantTitle = (variant['title'] || '') as string;\n const label = variantTitle\n ? `${productLabel} - ${variantTitle}`\n : productLabel;\n list.push({\n _product: product,\n _variant: variant,\n _displayLabel: label,\n _key: `${product[keyField]}::${variant['variantId']}`,\n });\n }\n }\n\n return list;\n });\n\n grossTotal = computed(() => {\n return this.orderLines().reduce((total, item) => {\n return total + (item.productUnitPrice || 0) * (item.quantity || 0);\n }, 0);\n });\n\n discountTotal = computed(() => {\n return this.orderLines().reduce((total, item) => {\n const itemTotal = (item.productUnitPrice || 0) * (item.quantity || 0);\n const discount = item.discount || 0;\n return total + (itemTotal * discount) / 100;\n }, 0);\n });\n\n tvaTotal = computed(() => {\n return this.orderLines().reduce((total, item) => {\n return total + (item.taxAmount || 0);\n }, 0);\n });\n\n finalTotal = computed(() => {\n return this.grossTotal() - this.discountTotal() + this.tvaTotal();\n });\n\n currency = computed(() => this.config().currencyCode || 'MAD');\n locale = computed(() => this.config().locale || 'fr-FR');\n hasItems = computed(() => this.orderLines().length > 0);\n\n productsSummary = computed<OrderProductsSummary>(() => {\n const lines = this.orderLines();\n const labels = this.countGroupLabels();\n const countMap = new Map<string, number>();\n\n lines.forEach((line) => {\n const product = line.product as { countGroup?: string };\n const countGroup = line.countGroup || product?.countGroup;\n\n if (countGroup) {\n const currentCount = countMap.get(countGroup) || 0;\n countMap.set(countGroup, currentCount + (line.quantity || 0));\n }\n });\n\n const items: OrderSummaryItem[] = [];\n\n countMap.forEach((count, code) => {\n const labelItem = labels.find(\n (l) => l.code.toUpperCase() === code.toUpperCase(),\n );\n items.push({\n code,\n label: labelItem?.label || code,\n count,\n column: labelItem?.column ?? 1,\n });\n });\n\n items.sort((a, b) => {\n const labelA = labels.find((l) => l.code === a.code);\n const labelB = labels.find((l) => l.code === b.code);\n const orderA = labelA?.sortOrder ?? 999;\n const orderB = labelB?.sortOrder ?? 999;\n return orderA - orderB;\n });\n\n const totalCount = items.reduce((sum, item) => sum + item.count, 0);\n\n return { items, totalCount };\n });\n\n hasEditingRow = computed(() =>\n this.orderLines().some((item) => item.isEditing),\n );\n\n validationResult = computed(() => {\n return OrderEntityHelper.validate(this.order());\n });\n\n combinedErrors = computed(() => {\n const clientErrors = this.validationResult().errors;\n const serverErrors = this.backendErrors();\n return { ...clientErrors, ...serverErrors };\n });\n\n hasErrors = computed(() => Object.keys(this.combinedErrors()).length > 0);\n\n isValid = computed(\n () =>\n this.validationResult().isValid &&\n Object.keys(this.backendErrors()).length === 0,\n );\n\n changeInfo = computed<OrderChangeInfo | null>(() => {\n const original = this.originalOrder();\n if (!original || !this.initialized()) return null;\n\n return OrderEntityHelper.detectChanges(original, this.order());\n });\n\n hasChanges = computed(() => this.changeInfo()?.hasChanges ?? false);\n\n constructor() {\n effect(\n () => {\n if (!this.initialized()) return;\n\n const updatedOrder = OrderEntityHelper.calculateTotals(this.order());\n const summary = this.productsSummary();\n\n if (\n updatedOrder.grossTotal !== this.order().grossTotal ||\n updatedOrder.discountTotal !== this.order().discountTotal ||\n updatedOrder.taxTotal !== this.order().taxTotal ||\n updatedOrder.finalTotal !== this.order().finalTotal ||\n JSON.stringify(updatedOrder.productsSummary) !==\n JSON.stringify(summary)\n ) {\n this.order.set({ ...updatedOrder, productsSummary: summary });\n }\n },\n { allowSignalWrites: true },\n );\n\n effect(() => {\n const info = this.changeInfo();\n if (info && info.hasChanges) {\n this.orderChanged.emit(info);\n }\n });\n\n effect(() => {\n if (!this.initialized()) return;\n\n const validation = this.validationResult();\n this.orderValidated.emit(validation);\n });\n }\n\n ngOnInit(): void {\n this.originalOrder.set(OrderEntityHelper.clone(this.order()));\n this.initialized.set(true);\n }\n\n ngOnDestroy(): void {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n }\n\n addNewProductRow(): void {\n if (this.readonly() || this.hasEditingRow()) {\n return;\n }\n\n const newItem = OrderLineItemHelper.createEmptyItem();\n this.updateOrderLines([...this.orderLines(), newItem]);\n }\n\n removeOrderLine(id: number | undefined): void {\n if (this.readonly() || id === undefined) return;\n\n const updatedItems = this.orderLines().filter((item) => item.id !== id);\n this.updateOrderLines(updatedItems);\n }\n\n onProductSelect(item: OrderLineItem): void {\n if (this.readonly() || !item.product) return;\n\n const items = this.orderLines();\n const index = items.findIndex((i) => i.id === item.id);\n if (index === -1) return;\n\n // The dropdown emits a flattened option `{ _product, _variant, _displayLabel, _key }`.\n const option = item.product as Record<string, unknown>;\n const product = (option['_product'] as Record<string, unknown>) ?? option;\n const variant =\n (option['_variant'] as Record<string, unknown> | null | undefined) ??\n undefined;\n\n const unitPrice = (variant?.['price'] ??\n product['unitPrice'] ??\n product['salePrice'] ??\n 0) as number;\n const countGroup = (variant?.['countGroup'] ??\n product['countGroup'] ??\n '') as string;\n\n const updatedItem = OrderLineItemHelper.updateCalculations({\n ...item,\n product,\n productId: this.productKey(product),\n variantId: (variant?.['variantId'] as string) ?? null,\n countGroup,\n productDescription: OrderLineItemHelper.composeDescription(\n product,\n variant,\n ),\n productUnitPrice: unitPrice,\n taxRate: (product['taxRate'] || 0) as number,\n isEditing: false,\n });\n\n const updatedItems = [...items];\n updatedItems[index] = updatedItem;\n this.updateOrderLines(updatedItems);\n }\n\n startEditField(item: OrderLineItem, fieldName: string): void {\n if (this.readonly() || !this.config().allowInlineEdit) return;\n\n const items = this.orderLines();\n const index = items.findIndex((i) => i.id === item.id);\n\n if (index !== -1) {\n const updatedItems = [...items];\n updatedItems[index] = { ...item, editingField: fieldName };\n this.updateOrderLines(updatedItems);\n }\n }\n\n stopEditField(item: OrderLineItem): void {\n item.editingField = null;\n\n const updatedItem = OrderLineItemHelper.updateCalculations(item);\n Object.assign(item, updatedItem);\n\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n\n this.updateTimeout = setTimeout(() => {\n this.updateOrderLines([...this.orderLines()]);\n this.updateTimeout = null;\n }, 50);\n }\n\n onFieldChange(item: OrderLineItem): void {\n const updatedItem = OrderLineItemHelper.updateCalculations(item);\n Object.assign(item, updatedItem);\n }\n\n saveEditingRow(item: OrderLineItem): void {\n if (this.readonly()) return;\n\n const validation = OrderLineItemHelper.validate(item);\n\n if (validation.isValid) {\n const items = this.orderLines();\n const index = items.findIndex((i) => i.id === item.id);\n\n if (index !== -1) {\n const updatedItem = OrderLineItemHelper.updateCalculations({\n ...item,\n isEditing: false,\n });\n\n const updatedItems = [...items];\n updatedItems[index] = updatedItem;\n this.updateOrderLines(updatedItems);\n }\n }\n }\n\n calculateSubtotal(item: OrderLineItem): number {\n return OrderLineItemHelper.calculateSubtotal(item);\n }\n\n handleOpenCatalogue(): void {\n if (this.readonly()) return;\n this.openCatalogue.emit();\n }\n\n onQuickAddProductSelect(option: Record<string, unknown> | null): void {\n this.quickAddProduct.set(option);\n\n if (!option) {\n this.quickAddPrice.set(0);\n return;\n }\n\n const product = (option['_product'] as Record<string, unknown>) ?? option;\n const variant =\n (option['_variant'] as Record<string, unknown> | null | undefined) ??\n undefined;\n\n const unitPrice = (variant?.['price'] ??\n product['unitPrice'] ??\n product['salePrice'] ??\n 0) as number;\n\n this.quickAddPrice.set(unitPrice);\n }\n\n addQuickProduct(): void {\n if (this.readonly() || this.quickAddDisabled()) return;\n\n const option = this.quickAddProduct() as Record<string, unknown>;\n const product = (option['_product'] as Record<string, unknown>) ?? option;\n const variant =\n (option['_variant'] as Record<string, unknown> | null | undefined) ??\n undefined;\n const variantId = (variant?.['variantId'] as string | undefined) ?? undefined;\n\n const newItem = OrderLineItemHelper.createFromProduct(\n product,\n this.quickAddQuantity(),\n this.productKeyField(),\n variantId,\n );\n\n const overriddenItem = OrderLineItemHelper.updateCalculations({\n ...newItem,\n productUnitPrice: this.quickAddPrice(),\n });\n\n this.updateOrderLines([...this.orderLines(), overriddenItem]);\n this.productsAdded.emit([overriddenItem]);\n\n this.quickAddProduct.set(null);\n this.quickAddPrice.set(0);\n this.quickAddQuantity.set(1);\n }\n\n addProductsFromCatalogue(\n selectedProducts: Array<{\n product: Record<string, unknown>;\n quantity: number;\n variantId?: string;\n }>,\n ): void {\n if (this.readonly() || !selectedProducts || selectedProducts.length === 0) {\n return;\n }\n\n const currentItems = [...this.orderLines()];\n const addedItems: OrderLineItem[] = [];\n\n const keyField = this.productKeyField();\n\n selectedProducts.forEach(({ product, quantity, variantId }) => {\n const productKeyValue = product[keyField];\n // Match by both productId AND variantId to avoid merging different variants\n const existingIndex = currentItems.findIndex(\n (item) =>\n item.productId === productKeyValue &&\n item.variantId === (variantId ?? null),\n );\n\n if (existingIndex !== -1) {\n // The catalogue is seeded with current order lines via\n // `initialSelectedItems` and shows live steppers, so the emitted\n // selection represents the desired final quantity for each product\n // — replace rather than add, otherwise reopening the catalogue and\n // re-validating doubles every previously-selected line.\n const existing = currentItems[existingIndex];\n const updated = OrderLineItemHelper.updateCalculations({\n ...existing,\n quantity,\n });\n currentItems[existingIndex] = updated;\n } else {\n const newItem = OrderLineItemHelper.createFromProduct(\n product,\n quantity,\n keyField,\n variantId,\n );\n currentItems.push(newItem);\n addedItems.push(newItem);\n }\n });\n\n this.updateOrderLines(currentItems);\n\n if (addedItems.length > 0) {\n this.productsAdded.emit(addedItems);\n }\n }\n\n updateCustomer(customerId: string | null): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n customerId,\n customerName: this.getCustomerName(customerId),\n }));\n }\n\n updateOrderDate(date: Date): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n orderDate: date,\n }));\n }\n\n updateDeliveryDate(date: Date | null): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n deliveryDate: date,\n }));\n }\n\n updateNotes(notes: string): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n notes,\n }));\n }\n\n resetChanges(): void {\n const original = this.originalOrder();\n if (original) {\n this.order.set(OrderEntityHelper.clone(original));\n }\n }\n\n markAsSaved(): void {\n this.originalOrder.set(OrderEntityHelper.clone(this.order()));\n }\n\n validate(): ValidationResult {\n return this.validationResult();\n }\n\n private updateOrderLines(items: OrderLineItem[]): void {\n this.order.update((order) => ({\n ...order,\n orderLines: items,\n }));\n }\n\n private getCustomerName(customerId: string | null): string | undefined {\n if (!customerId) return undefined;\n\n const customer = this.customers().find(\n (c) => c['customerId'] === customerId,\n );\n return (customer?.['companyName'] || customer?.['name']) as\n | string\n | undefined;\n }\n\n private productKey(product: Record<string, unknown>): unknown {\n return product[this.productKeyField()];\n }\n\n getProduct(productId: unknown): Record<string, unknown> | undefined {\n const field = this.productKeyField();\n return this.products().find((p) => p[field] === productId);\n }\n\n getCustomer(customerId: string): Record<string, unknown> | undefined {\n return this.customers().find((c) => c['customerId'] === customerId);\n }\n\n initializeOrderLines(): void {\n const items = this.order().orderLines || [];\n\n const initializedItems = items.map((item: OrderLineItem) => {\n let product = item.product;\n\n if (item.productId && !item.product) {\n product = this.getProduct(item.productId);\n }\n\n if (product && !item.productDescription) {\n const variants = product['variants'] as\n | Array<Record<string, unknown>>\n | undefined;\n const variant =\n item.variantId && variants?.length\n ? variants.find((v) => v['variantId'] === item.variantId)\n : undefined;\n item.productDescription = OrderLineItemHelper.composeDescription(\n product,\n variant,\n );\n }\n\n return OrderLineItemHelper.updateCalculations({\n ...item,\n product,\n id: item.id || UuidUtils.randomUUID(),\n isEditing: item.isEditing ?? false,\n editingField: item.editingField ?? null,\n });\n });\n\n this.updateOrderLines(initializedItems);\n }\n\n getTotals() {\n return {\n grossTotal: this.grossTotal(),\n discountTotal: this.discountTotal(),\n tvaTotal: this.tvaTotal(),\n finalTotal: this.finalTotal(),\n };\n }\n\n exportOrder(): OrderEntity {\n return OrderEntityHelper.calculateTotals(this.order());\n }\n}\n","<!-- Order Header -->\n<p-fieldset [legend]=\"config().headerLabel\">\n <div class=\"grid grid-cols-12 items-baseline gap-2 mb-2\">\n <ef-label [label]=\"config().customerLabel\" for=\"order.customerId\" styleClass=\"col-span-12 md:col-span-6 form-label-left\" required />\n <ef-label [label]=\"config().dateLabel\" for=\"order.orderDate\" styleClass=\"col-span-3 form-label-left\" required />\n </div>\n <div class=\"grid grid-cols-12 items-baseline gap-2 mb-2 mt-4\">\n <div class=\"col-span-12 md:col-span-6\">\n <ef-select\n [ngModel]=\"order().customerId\"\n (ngModelChange)=\"updateCustomer($event)\"\n name=\"order.customerId\"\n inputId=\"order.customerId\"\n [options]=\"customers()\"\n optionValue=\"customerId\"\n optionLabel=\"companyName\"\n [placeholder]=\"config().customerLabel\"\n filter\n showClear\n [disabled]=\"readonly()\"\n required\n />\n </div>\n <div class=\"col-span-3\">\n <ef-datepicker\n [ngModel]=\"order().orderDate\"\n (ngModelChange)=\"updateOrderDate($event)\"\n name=\"order.orderDate\"\n inputId=\"order.orderDate\"\n [disabled]=\"readonly()\"\n required\n />\n </div>\n </div>\n\n @if (config().enableQuickAdd && !readonly()) {\n <div class=\"grid grid-cols-12 items-baseline gap-2 mt-4 mb-2\">\n <ef-label labelKey=\"label.article\" for=\"quickAdd.product\" styleClass=\"col-span-12 md:col-span-6 form-label-left\" />\n <ef-label labelKey=\"label.sale_price\" for=\"quickAdd.price\" styleClass=\"col-span-2 form-label-left\" />\n <ef-label labelKey=\"label.quantity\" for=\"quickAdd.quantity\" styleClass=\"col-span-2 form-label-left\" />\n </div>\n <div class=\"grid grid-cols-12 items-center gap-2\">\n <div class=\"col-span-12 md:col-span-6\">\n <ef-select\n [ngModel]=\"quickAddProduct()\"\n (ngModelChange)=\"onQuickAddProductSelect($event)\"\n name=\"quickAdd.product\"\n inputId=\"quickAdd.product\"\n [options]=\"flattenedProductOptions()\"\n optionLabel=\"_displayLabel\"\n placeholderKey=\"placeholder.select_article\"\n filter\n showClear\n [disabled]=\"readonly()\"\n />\n </div>\n <div class=\"col-span-2\">\n <ef-inputnumber\n id=\"quickAdd.price\"\n name=\"quickAdd.price\"\n [ngModel]=\"quickAddPrice()\"\n (ngModelChange)=\"quickAddPrice.set($event)\"\n mode=\"currency\"\n [currency]=\"currency()\"\n [locale]=\"locale()\"\n [min]=\"0\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </div>\n <div class=\"col-span-2\">\n <ef-inputnumber\n id=\"quickAdd.quantity\"\n name=\"quickAdd.quantity\"\n [ngModel]=\"quickAddQuantity()\"\n (ngModelChange)=\"quickAddQuantity.set($event)\"\n [min]=\"1\"\n [minFractionDigits]=\"4\"\n [maxFractionDigits]=\"4\"\n [locale]=\"locale()\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </div>\n <div class=\"col-span-2 flex justify-start gap-2\">\n <ef-button\n icon=\"pi pi-plus\"\n [rounded]=\"true\"\n severity=\"primary\"\n tooltipKey=\"tooltip.add_article\"\n [disabled]=\"quickAddDisabled()\"\n (clickEvent)=\"addQuickProduct()\"\n />\n @if (config().showCatalogue) {\n <ef-button\n icon=\"pi pi-search\"\n [rounded]=\"true\"\n severity=\"primary\"\n tooltipKey=\"tooltip.open_catalogue\"\n [disabled]=\"readonly()\"\n (clickEvent)=\"handleOpenCatalogue()\"\n />\n }\n </div>\n </div>\n }\n</p-fieldset>\n\n<div class=\"my-4\"></div>\n\n<!-- Order Line Items -->\n<p-fieldset legend=\"Détails\">\n <p-table\n #pTable\n class=\"text-sm\"\n size=\"small\"\n [value]=\"orderLines()\"\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n [resizableColumns]=\"true\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n columnResizeMode=\"expand\"\n [showCurrentPageReport]=\"true\"\n stateStorage=\"local\"\n dataKey=\"id\"\n [rowTrackBy]=\"rowTrackBy\"\n >\n <ng-template #header>\n <tr>\n <th>{{ 'label.article' | translate }}</th>\n <th class=\"w-[120px] !text-end\">{{ 'label.sale_price' | translate }}</th>\n <th class=\"w-[120px] !text-end\">{{ 'label.quantity' | translate }}</th>\n @if (config().enableTax) {\n <th class=\"w-[120px] !text-end\">TVA (%)</th>\n }\n @if (config().enableDiscount) {\n <th class=\"w-[120px] !text-end\">\n Remise (%)\n </th>\n }\n <th class=\"w-[120px] !text-end\">Sous-Total</th>\n @if (!readonly()) {\n <th class=\"w-10 !text-end\"></th>\n }\n </tr>\n </ng-template>\n\n <ng-template #body let-item let-rowIndex=\"rowIndex\">\n <!-- Editing mode for new row -->\n @if (item.isEditing) {\n <tr>\n <td>\n <div class=\"align-items-center flex gap-2\">\n <ef-select\n [(ngModel)]=\"item.product\"\n (ngModelChange)=\"onProductSelect(item)\"\n [name]=\"'item.product.' + rowIndex\"\n [inputId]=\"'item.product.' + rowIndex\"\n [options]=\"flattenedProductOptions()\"\n optionLabel=\"_displayLabel\"\n placeholderKey=\"placeholder.select_article\"\n filter\n showClear\n [disabled]=\"readonly()\"\n appendTo=\"body\"\n />\n </div>\n </td>\n <td class=\"w-[120px]\">\n <ef-inputnumber\n [id]=\"'item.productUnitPrice.' + rowIndex\"\n [name]=\"'item.productUnitPrice.' + rowIndex\"\n [(ngModel)]=\"item.productUnitPrice\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n mode=\"currency\"\n [currency]=\"currency()\"\n [locale]=\"locale()\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </td>\n <td class=\"w-[120px]\">\n <ef-inputnumber\n [id]=\"'item.quantity.' + rowIndex\"\n [name]=\"'item.quantity.' + rowIndex\"\n [(ngModel)]=\"item.quantity\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"saveEditingRow(item)\"\n [min]=\"1\"\n [minFractionDigits]=\"4\"\n [maxFractionDigits]=\"4\"\n [locale]=\"locale()\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </td>\n @if (config().enableTax) {\n <td class=\"w-[120px] !text-end\">\n {{ item.taxRate || 0 }} %\n </td>\n }\n @if (config().enableDiscount) {\n <td class=\"w-[120px]\">\n <ef-inputnumber\n [id]=\"'item.discount.' + rowIndex\"\n [name]=\"'item.discount.' + rowIndex\"\n [(ngModel)]=\"item.discount\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"saveEditingRow(item)\"\n [min]=\"0\"\n [max]=\"100\"\n suffix=\"%\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </td>\n }\n <td class=\"w-[120px] !text-end\">\n {{ calculateSubtotal(item) | currency: currency() }}\n </td>\n @if (!readonly()) {\n <td class=\"w-10 !text-end\">\n <p-button\n icon=\"pi pi-trash\"\n size=\"small\"\n [outlined]=\"true\"\n pTooltip=\"Supprimer\"\n tooltipPosition=\"top\"\n (click)=\"removeOrderLine(item.id)\"\n />\n </td>\n }\n </tr>\n }\n\n <!-- Display mode for saved row -->\n @if (!item.isEditing) {\n <tr>\n <td>\n <div\n [innerHTML]=\"AppUtils.truncate(item.productDescription)\"\n [pTooltip]=\"item.productDescription\"\n tooltipPosition=\"top\"\n ></div>\n </td>\n <td\n class=\"w-[120px]\"\n [class.cursor-pointer]=\"config().allowInlineEdit && !readonly()\"\n (click)=\"startEditField(item, 'productUnitPrice')\"\n >\n @if (\n item.editingField === 'productUnitPrice' &&\n config().allowInlineEdit &&\n !readonly()\n ) {\n <ef-inputnumber\n [id]=\"'item.productUnitPrice.edit.' + rowIndex\"\n [name]=\"'item.productUnitPrice.edit.' + rowIndex\"\n [(ngModel)]=\"item.productUnitPrice\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n mode=\"currency\"\n [currency]=\"currency()\"\n [locale]=\"locale()\"\n size=\"small\"\n class=\"!text-end\"\n />\n } @else {\n <span\n [class]=\"\n config().allowInlineEdit && !readonly()\n ? 'block cursor-pointer rounded px-2 py-1 text-end hover:bg-surface-100 dark:hover:bg-surface-700'\n : 'block px-2 py-1 text-end'\n \"\n >\n {{ item.productUnitPrice | currency: currency() }}\n </span>\n }\n </td>\n <td\n class=\"w-[120px]\"\n [class.cursor-pointer]=\"config().allowInlineEdit && !readonly()\"\n (click)=\"startEditField(item, 'quantity')\"\n >\n @if (\n item.editingField === 'quantity' &&\n config().allowInlineEdit &&\n !readonly()\n ) {\n <ef-inputnumber\n [id]=\"'item.quantity.edit.' + rowIndex\"\n [name]=\"'item.quantity.edit.' + rowIndex\"\n [(ngModel)]=\"item.quantity\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n [min]=\"1\"\n [minFractionDigits]=\"4\"\n [maxFractionDigits]=\"4\"\n [locale]=\"locale()\"\n size=\"small\"\n class=\"!text-end\"\n />\n } @else {\n <span\n [class]=\"\n config().allowInlineEdit && !readonly()\n ? 'block cursor-pointer rounded px-2 py-1 text-end hover:bg-surface-100 dark:hover:bg-surface-700'\n : 'block px-2 py-1 text-end'\n \"\n >\n {{ item.quantity | number: '1.4-4' : locale() }}\n </span>\n }\n </td>\n @if (config().enableTax) {\n <td class=\"w-[120px] !text-end\">\n {{ item.taxRate || 0 }} %\n </td>\n }\n @if (config().enableDiscount) {\n <td\n class=\"w-[120px]\"\n [class.cursor-pointer]=\"config().allowInlineEdit && !readonly()\"\n (click)=\"startEditField(item, 'discount')\"\n >\n @if (\n item.editingField === 'discount' &&\n config().allowInlineEdit &&\n !readonly()\n ) {\n <ef-inputnumber\n [id]=\"'item.discount.edit.' + rowIndex\"\n [name]=\"'item.discount.edit.' + rowIndex\"\n [(ngModel)]=\"item.discount\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n [min]=\"0\"\n [max]=\"100\"\n suffix=\"%\"\n size=\"small\"\n class=\"!text-end\"\n />\n } @else {\n <span\n [class]=\"\n config().allowInlineEdit && !readonly()\n ? 'block cursor-pointer rounded px-2 py-1 text-end hover:bg-surface-100 dark:hover:bg-surface-700'\n : 'block px-2 py-1 text-end'\n \"\n >\n {{ item.discount || 0 }}%\n </span>\n }\n </td>\n }\n <td class=\"w-[120px] !text-end\">\n {{ item.grossAmount | currency: currency() }}\n </td>\n @if (!readonly()) {\n <td class=\"w-10 !text-end\">\n <p-button\n icon=\"pi pi-trash\"\n size=\"small\"\n [outlined]=\"true\"\n tooltipPosition=\"top\"\n pTooltip=\"Supprimer\"\n (click)=\"removeOrderLine(item.id)\"\n />\n </td>\n }\n </tr>\n }\n </ng-template>\n\n <ng-template #footer>\n @if (!readonly()) {\n <tr>\n <td\n [attr.colspan]=\"\n config().enableTax && config().enableDiscount\n ? 7\n : config().enableTax || config().enableDiscount\n ? 6\n : 5\n \"\n >\n <a\n href=\"javascript:void(0)\"\n class=\"inline-flex items-center gap-2 text-sm font-medium text-primary-500 hover:text-primary-700\"\n [class.opacity-50]=\"hasEditingRow()\"\n [class.pointer-events-none]=\"hasEditingRow()\"\n (click)=\"addNewProductRow()\"\n >\n <i class=\"pi pi-plus text-xs\"></i>\n Ajouter un article\n </a>\n @if (config().showCatalogue) {\n <ng-container>\n &nbsp; | &nbsp;\n <a\n href=\"javascript:void(0)\"\n class=\"inline-flex items-center gap-2 text-sm font-medium text-primary-500 hover:text-primary-700\"\n (click)=\"handleOpenCatalogue()\"\n >\n <i class=\"pi pi-search text-xs\"></i>\n Ouvrir le catalogue des articles\n </a>\n </ng-container>\n }\n </td>\n </tr>\n }\n\n <!-- Totals Section -->\n <tr class=\"border-t\">\n <td\n [attr.colspan]=\"\n config().enableTax && config().enableDiscount\n ? 5\n : config().enableTax || config().enableDiscount\n ? 4\n : 3\n \"\n >\n @if (config().showProductsSummary) {\n <div class=\"w-[500px]\">\n <div class=\"my-4\"></div>\n <ef-order-summary\n [orderLines]=\"orderLines()\"\n [countGroupLabels]=\"countGroupLabels()\"\n legend=\"Récapitulatif\"\n />\n </div>\n }\n </td>\n <td [attr.colspan]=\"readonly() ? 2 : 3\" class=\"!text-end\">\n <p-fieldset [legend]=\"'Totaux'\">\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-end justify-between gap-4\">\n <span\n class=\"font-semibold text-surface-700 dark:text-surface-300\"\n >\n Montant brut :\n </span>\n <span class=\"font-semibold\">\n {{ grossTotal() | currency: currency() }}\n </span>\n </div>\n @if (config().enableDiscount) {\n <div class=\"flex justify-between gap-4\">\n <span\n class=\"font-semibold text-surface-700 dark:text-surface-300\"\n >\n Remise :\n </span>\n <span class=\"font-semibold\">\n {{ discountTotal() | currency: currency() }}\n </span>\n </div>\n }\n @if (config().enableTax) {\n <div class=\"flex justify-between gap-4\">\n <span\n class=\"font-semibold text-surface-700 dark:text-surface-300\"\n >\n TVA :\n </span>\n <span class=\"font-semibold\">\n {{ tvaTotal() | currency: currency() }}\n </span>\n </div>\n }\n <p-divider class=\"!my-1\" />\n <div class=\"flex justify-between gap-4\">\n <span class=\"text-lg font-bold text-primary\">\n Montant Total :\n </span>\n <span class=\"text-lg font-bold text-primary\">\n {{ finalTotal() | currency: currency() }}\n </span>\n </div>\n </div>\n </p-fieldset>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</p-fieldset>\n\n<!-- Optional Notes Section -->\n@if (config().showNotes) {\n <p-fieldset legend=\"Notes\">\n <textarea\n pTextarea\n id=\"order.notes\"\n name=\"order.notes\"\n [ngModel]=\"order().notes\"\n (ngModelChange)=\"updateNotes($event)\"\n [disabled]=\"readonly()\"\n [placeholder]=\"'common.notes_placeholder' | translate\"\n rows=\"5\"\n class=\"w-full\"\n ></textarea>\n </p-fieldset>\n}\n\n<!-- Validation Messages -->\n@if (hasErrors()) {\n <div\n class=\"my-4 rounded border border-red-200 bg-red-50 p-4 dark:bg-red-900/20\"\n >\n <div class=\"flex items-start gap-2\">\n <i\n class=\"pi pi-exclamation-triangle mt-1 text-red-600 dark:text-red-400\"\n ></i>\n <div class=\"flex-1\">\n <h4 class=\"mb-2 font-semibold text-red-800 dark:text-red-200\">\n Erreurs de validation\n </h4>\n <ul class=\"list-inside list-disc text-sm text-red-700 dark:text-red-300\">\n @for (error of combinedErrors() | keyvalue; track error.key) {\n <li>\n {{ error.value[0] }}\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n}\n\n<!-- Change Indicator -->\n@if (hasChanges()) {\n <div\n class=\"my-4 flex items-center gap-2 rounded border border-orange-200 bg-orange-50 p-3 dark:bg-orange-900/20\"\n >\n <i class=\"pi pi-info-circle text-orange-600 dark:text-orange-400\"></i>\n <span class=\"text-sm text-orange-800 dark:text-orange-200\">\n Modifications non sauvegardées détectées\n </span>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccordionModule } from 'primeng/accordion';\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ChipModule } from 'primeng/chip';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\nexport interface CategoryItem {\n code: string;\n label: string;\n description?: string | null;\n isActive: boolean;\n sortOrder: number;\n metadata?: Record<string, unknown> | null;\n children?: CategoryItem[];\n}\n\nexport interface CategoryGroup {\n code: string;\n label: string;\n description?: string | null;\n isActive: boolean;\n sortOrder: number;\n metadata?: Record<string, unknown> | null;\n children?: CategoryItem[];\n}\n\nexport interface CategoryAssignment {\n type: string;\n code: string;\n}\n\nexport interface SelectedFilter {\n type: string;\n code: string;\n label: string;\n}\n\n@Component({\n selector: 'ef-product-catalogue-filter',\n templateUrl: './ef-product-catalogue-filter.component.html',\n imports: [\n FormsModule,\n AccordionModule,\n BadgeModule,\n ButtonModule,\n CheckboxModule,\n ChipModule,\n IconFieldModule,\n InputIconModule,\n InputTextModule,\n EfLabelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EfProductCatalogueFilterComponent {\n /** Category groups from reference_data (product_categories items with children) */\n categoryGroups = input.required<CategoryGroup[]>();\n\n /** Products to calculate counts */\n products = input.required<Array<{ categoryAssignments?: CategoryAssignment[] }>>();\n\n /** Selected filters (two-way binding) */\n selectedFilters = model<SelectedFilter[]>([]);\n\n /** Emitted when filters change */\n filtersChanged = output<SelectedFilter[]>();\n\n /** Search terms for each category group */\n searchTerms = signal<Record<string, string>>({});\n\n /** Accordion panel values (expanded panels) */\n expandedPanels = computed(() =>\n this.categoryGroups()\n .filter((g) => g.children && g.children.length > 0)\n .map((g) => g.code)\n );\n\n /** Get filtered children for a category group based on search */\n getFilteredChildren(group: CategoryGroup): CategoryItem[] {\n const children = group.children || [];\n const searchTerm = this.searchTerms()[group.code]?.toLowerCase() || '';\n\n if (!searchTerm) {\n return children.filter((c) => c.isActive);\n }\n\n return children.filter(\n (c) => c.isActive && c.label.toLowerCase().includes(searchTerm)\n );\n }\n\n /** Get product count for a specific category item */\n getItemCount(groupCode: string, itemCode: string): number {\n return this.products().filter((product) =>\n product.categoryAssignments?.some(\n (ca) => ca.type === groupCode && ca.code === itemCode\n )\n ).length;\n }\n\n /** Check if a filter is selected */\n isFilterSelected(groupCode: string, itemCode: string): boolean {\n return this.selectedFilters().some(\n (f) => f.type === groupCode && f.code === itemCode\n );\n }\n\n /** Toggle a filter selection */\n toggleFilter(group: CategoryGroup, item: CategoryItem): void {\n const currentFilters = this.selectedFilters();\n const existingIndex = currentFilters.findIndex(\n (f) => f.type === group.code && f.code === item.code\n );\n\n let newFilters: SelectedFilter[];\n if (existingIndex >= 0) {\n newFilters = currentFilters.filter((_, i) => i !== existingIndex);\n } else {\n newFilters = [\n ...currentFilters,\n { type: group.code, code: item.code, label: item.label },\n ];\n }\n\n this.selectedFilters.set(newFilters);\n this.filtersChanged.emit(newFilters);\n }\n\n /** Remove a specific filter */\n removeFilter(filter: SelectedFilter): void {\n const newFilters = this.selectedFilters().filter(\n (f) => !(f.type === filter.type && f.code === filter.code)\n );\n this.selectedFilters.set(newFilters);\n this.filtersChanged.emit(newFilters);\n }\n\n /** Clear all filters */\n clearAllFilters(): void {\n this.selectedFilters.set([]);\n this.filtersChanged.emit([]);\n }\n\n /** Update search term for a category group */\n updateSearchTerm(groupCode: string, term: string): void {\n this.searchTerms.update((current) => ({\n ...current,\n [groupCode]: term,\n }));\n }\n\n /** Get color class from metadata if available */\n getColorClass(item: CategoryItem): string | null {\n const color = item.metadata?.['color'];\n return typeof color === 'string' ? color : null;\n }\n\n /** Check if group should show search input (more than 5 items) */\n shouldShowSearch(group: CategoryGroup): boolean {\n return (group.children?.length || 0) > 5;\n }\n}\n","<div class=\"flex w-80 shrink-0 flex-col items-start justify-start sticky top-4 max-h-[calc(100vh-2rem)] overflow-y-auto\">\n <div\n class=\"mb-4 flex flex-col items-start justify-center gap-2 self-stretch border-b border-surface-200 px-2 pb-4 dark:border-surface-700\"\n >\n <div class=\"flex items-center justify-between gap-2 self-stretch\">\n <div\n class=\"text-base font-semibold leading-tight text-surface-900 dark:text-surface-0\"\n >\n Filters\n </div>\n <p-button\n size=\"small\"\n severity=\"secondary\"\n [text]=\"true\"\n class=\"py-1! px-2! text-base! font-normal!\"\n (clickEvent)=\"clearAllFilters()\"\n >\n <span pButtonLabel>\n <i class=\"pi pi-eraser\"></i>\n Clear\n </span>\n </p-button>\n </div>\n @if (selectedFilters().length > 0) {\n <div\n class=\"flex flex-wrap items-start justify-start gap-2 self-stretch\"\n >\n @for (filter of selectedFilters(); track filter.type + filter.code) {\n <p-chip\n [label]=\"filter.label\"\n [removable]=\"true\"\n size=\"small\"\n class=\"h-auto rounded-full px-6\"\n removeIcon=\"pi pi-times\"\n (onRemove)=\"removeFilter(filter)\"\n ></p-chip>\n }\n </div>\n }\n </div>\n\n <p-accordion\n [multiple]=\"true\"\n [value]=\"expandedPanels()\"\n class=\"w-full\"\n >\n @for (group of categoryGroups(); track group.code) {\n @if (group.children && group.children.length > 0) {\n <p-accordion-panel [value]=\"group.code\">\n <p-accordion-header>\n <span\n class=\"text-base font-semibold leading-tight text-surface-900 dark:text-surface-0\"\n >{{ group.label }}</span>\n </p-accordion-header>\n <p-accordion-content>\n <div class=\"flex flex-col gap-4\">\n @if (shouldShowSearch(group)) {\n <p-iconfield iconPosition=\"left\" class=\"w-full\">\n <p-inputicon class=\"pi pi-search\"></p-inputicon>\n <input\n pInputText\n size=\"small\"\n [ngModel]=\"searchTerms()[group.code] || ''\"\n (ngModelChange)=\"updateSearchTerm(group.code, $event)\"\n [placeholder]=\"'Rechercher ' + group.label.toLowerCase()\"\n class=\"w-full\"\n />\n </p-iconfield>\n }\n\n @for (item of getFilteredChildren(group); track item.code) {\n <div class=\"flex items-center justify-between gap-2\">\n <div class=\"flex flex-1 items-center gap-2\">\n <p-checkbox\n size=\"small\"\n [inputId]=\"group.code + '_' + item.code\"\n [binary]=\"true\"\n [ngModel]=\"isFilterSelected(group.code, item.code)\"\n (ngModelChange)=\"toggleFilter(group, item)\"\n ></p-checkbox>\n @if (getColorClass(item)) {\n <div\n class=\"h-5 w-5 rounded-full\"\n [class]=\"getColorClass(item)\"\n ></div>\n }\n <ef-label\n [label]=\"item.label\"\n [for]=\"group.code + '_' + item.code\"\n styleClass=\"cursor-pointer text-base font-normal leading-tight text-surface-700 dark:text-surface-300\"\n />\n </div>\n @if (getItemCount(group.code, item.code) > 0) {\n <p-badge\n [value]=\"getItemCount(group.code, item.code)\"\n size=\"small\"\n class=\"rounded-xl! h-6! min-w-6!\"\n severity=\"secondary\"\n ></p-badge>\n }\n </div>\n }\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n }\n }\n </p-accordion>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n FormsModule,\n} from '@angular/forms';\nimport { Nullable } from 'primeng/ts-helpers';\nimport { EfInputNumberComponent } from '../ef-inputnumber/ef-inputnumber.component';\n\n/**\n * EfQuantityStepper is a specialized component for quantity selection with increment/decrement buttons.\n * Perfect for shopping carts, POS systems, and order forms where users need to adjust quantities.\n *\n * Features:\n * - Increment/decrement buttons with customizable styling\n * - Min/max value constraints\n * - Configurable step value\n * - Fully integrated with Angular Forms (ngModel, FormControl)\n * - Rounded button design optimized for touch interfaces\n *\n * @group Components\n */\n@Component({\n selector: 'ef-quantity-stepper',\n templateUrl: './ef-quantity-stepper.component.html',\n styleUrls: ['./ef-quantity-stepper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [EfInputNumberComponent, FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EfQuantityStepperComponent),\n multi: true,\n },\n ],\n})\nexport class EfQuantityStepperComponent implements ControlValueAccessor {\n /**\n * Current quantity value\n */\n @Input() value: Nullable<number> = 0;\n\n /**\n * Minimum allowed value\n */\n @Input() min = 0;\n\n /**\n * Maximum allowed value\n */\n @Input() max = 999;\n\n /**\n * Step increment/decrement value\n */\n @Input() step = 1;\n\n /**\n * Minimum fraction digits to display (forwarded to ef-inputnumber).\n */\n @Input() minFractionDigits?: number;\n\n /**\n * Maximum fraction digits to display (forwarded to ef-inputnumber).\n */\n @Input() maxFractionDigits?: number;\n\n /**\n * Locale used for number formatting (forwarded to ef-inputnumber).\n */\n @Input() locale?: string;\n\n /**\n * When present, it specifies that the component should be disabled\n */\n @Input() disabled = false;\n\n /**\n * Callback to invoke when the value changes\n */\n @Output() valueChange = new EventEmitter<number>();\n\n /**\n * Pass Through configuration for custom styling\n */\n ptConfig = {\n root: {\n class: 'flex items-center justify-center gap-2',\n },\n pcInputText: {\n root: {\n class:\n '!w-12 !border-none !rounded-full bg-transparent font-bold text-primary dark:text-primary-contrast !text-center',\n },\n },\n decrementButton: {\n class:\n '!w-9 !border-none cursor-pointer !rounded-full !bg-white px-3 py-2 font-bold !text-primary dark:!text-primary-contrast !text-center',\n },\n incrementButton: {\n class:\n '!w-9 !border-none cursor-pointer !rounded-full !bg-white px-3 py-2 font-bold !text-primary dark:!text-primary-contrast !text-center',\n },\n decrementButtonIcon: {\n innerHTML: '-',\n },\n incrementButtonIcon: {\n innerHTML: '+',\n },\n };\n\n // ============================================================================\n // CONTROL VALUE ACCESSOR\n // ============================================================================\n\n private onChange: (value: any) => void = () => {\n /* noop */\n };\n private onTouched: () => void = () => {\n /* noop */\n };\n\n // ============================================================================\n // CONTROL VALUE ACCESSOR IMPLEMENTATION\n // ============================================================================\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // ============================================================================\n // EVENT HANDLERS\n // ============================================================================\n\n handleValueChange(value: number | null): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","<div\n class=\"flex h-12 items-center text-center justify-center gap-2 rounded-full !border !border-gray-200 bg-gray-100 dark:bg-slate-500 p-2\"\n>\n <ef-inputnumber\n [(ngModel)]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [minFractionDigits]=\"minFractionDigits\"\n [maxFractionDigits]=\"maxFractionDigits\"\n [locale]=\"locale\"\n [disabled]=\"disabled\"\n [showButtons]=\"true\"\n buttonLayout=\"horizontal\"\n decrementButtonIcon=\"-\"\n incrementButtonIcon=\"+\"\n [pt]=\"ptConfig\"\n (ngModelChange)=\"handleValueChange($event)\"\n (blurEvent)=\"handleBlur()\"\n >\n </ef-inputnumber>\n</div>\n","import { CommonModule, CurrencyPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n LOCALE_ID,\n OnChanges,\n output,\n signal,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BadgeModule } from 'primeng/badge';\nimport { CardModule } from 'primeng/card';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { Menu, MenuModule } from 'primeng/menu';\nimport { SelectModule } from 'primeng/select';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfQuantityStepperComponent } from '../../forms/ef-quantity-stepper/ef-quantity-stepper.component';\nimport { EfProductCatalogueFilterComponent } from '../ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nimport {\n CategoryAssignment,\n CategoryGroup,\n SelectedFilter,\n} from '../ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nimport { EfButtonComponent } from '../../layout/ef-button/ef-button.component';\n\nexport interface CatalogueProductVariant {\n variantId: string;\n title: string;\n sku?: string | null;\n price: number;\n compareAtPrice?: number | null;\n optionValues?: Record<string, string>;\n isActive?: boolean;\n countGroup?: string | null;\n [key: string]: unknown;\n}\n\nexport interface CatalogueProduct {\n id: number;\n productCode: string;\n name: string;\n displayName: string;\n unitPrice?: number | null;\n packagingVolume?: number | null;\n categoryAssignments?: CategoryAssignment[];\n productType?: string | null; // 'SIMPLE' | 'VARIABLE'\n variants?: CatalogueProductVariant[];\n defaultVariantId?: string | null;\n [key: string]: unknown;\n}\n\n@Component({\n selector: 'ef-product-catalogue',\n styleUrl: './ef-product-catalogue.component.scss',\n templateUrl: './ef-product-catalogue.component.html',\n imports: [\n CommonModule,\n FormsModule,\n BadgeModule,\n EfButtonComponent,\n CardModule,\n IconFieldModule,\n InputIconModule,\n InputTextModule,\n MenuModule,\n SelectModule,\n EfQuantityStepperComponent,\n EfProductCatalogueFilterComponent,\n TranslateModule,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EfProductCatalogueComponent implements OnChanges {\n private readonly locale = inject(LOCALE_ID);\n private readonly currencyPipe = new CurrencyPipe(this.locale);\n\n /** Products to display */\n products = input<CatalogueProduct[]>([]);\n\n /** Category groups for filtering */\n categoryGroups = input<CategoryGroup[]>([]);\n\n /** Initial selected items (for editing existing orders) */\n initialSelectedItems = input<Array<{ productId?: unknown; quantity: number; variantId?: string | null }>>(\n [],\n );\n\n /** Default filters to apply on init */\n defaultFilters = input<SelectedFilter[]>([]);\n\n /** Property name used as unique key for tracking products in the list */\n trackByField = input<string>('id');\n\n /** Currency code for price formatting */\n currencyCode = input<string>('MAD');\n\n /** Locale used for number/currency formatting and the quantity stepper */\n localeCode = input<string>('fr-FR');\n\n /**\n * Custom product thumbnail template.\n * Context: { $implicit: CatalogueProduct }\n *\n * @example\n * <ef-product-catalogue [products]=\"products()\">\n * <ng-template #productThumbnail let-product>\n * <my-custom-thumbnail [product]=\"product\" />\n * </ng-template>\n * </ef-product-catalogue>\n */\n productThumbnailTpl = contentChild<TemplateRef<unknown>>('productThumbnail');\n\n @ViewChild('sortMenu') sortMenu!: Menu;\n\n /** Emitted when products are validated */\n productsValidated =\n output<Array<{ product: CatalogueProduct; quantity: number; variantId?: string }>>();\n\n productSearch = signal('');\n selectedFilters = signal<SelectedFilter[]>([]);\n selectedSort = signal('Sort By');\n selectedProducts = signal<\n Array<{ product: CatalogueProduct; quantity: number; variantId?: string }>\n >([]);\n\n /** Tracks the currently selected variantId per product key */\n selectedVariants = signal<Record<string, string>>({});\n\n filteredProducts = computed(() => {\n let filtered = this.products();\n const filters = this.selectedFilters();\n const searchTerm = this.productSearch().toLowerCase().trim();\n\n if (searchTerm) {\n filtered = filtered.filter((p) => {\n const displayName = (p.displayName || '').toLowerCase();\n const name = (p.name || '').toLowerCase();\n return displayName.includes(searchTerm) || name.includes(searchTerm);\n });\n }\n\n if (filters.length === 0) {\n return filtered;\n }\n\n const filtersByType = filters.reduce(\n (acc, filter) => {\n if (!acc[filter.type]) {\n acc[filter.type] = [];\n }\n acc[filter.type].push(filter.code);\n return acc;\n },\n {} as Record<string, string[]>,\n );\n\n filtered = filtered.filter((product) => {\n const assignments = product.categoryAssignments || [];\n return Object.entries(filtersByType).every(([type, codes]) => {\n return assignments.some(\n (a) => a.type === type && codes.includes(a.code),\n );\n });\n });\n\n return filtered;\n });\n\n sortOptions = [\n {\n label: 'Newest First',\n icon: 'pi pi-calendar-plus',\n command: () => {\n this.selectedSort.set('Newest First');\n this.sortMenu.hide();\n },\n },\n {\n label: 'Price: Low to High',\n icon: 'pi pi-sort-amount-up',\n command: () => {\n this.selectedSort.set('Price: Low to High');\n this.sortMenu.hide();\n },\n },\n {\n label: 'Price: High to Low',\n icon: 'pi pi-sort-amount-down',\n command: () => {\n this.selectedSort.set('Price: High to Low');\n this.sortMenu.hide();\n },\n },\n ];\n\n onFiltersChanged(filters: SelectedFilter[]): void {\n this.selectedFilters.set(filters);\n }\n\n ngOnChanges(): void {\n this.initializeSelectedProducts();\n this.initializeDefaultFilters();\n }\n\n productKey(product: CatalogueProduct): unknown {\n return product[this.trackByField()];\n }\n\n private initializeSelectedProducts(): void {\n const initialItems = this.initialSelectedItems();\n const allProducts = this.products();\n\n if (\n !initialItems ||\n initialItems.length === 0 ||\n !allProducts ||\n allProducts.length === 0\n ) {\n return;\n }\n\n const selectedProductsArray: Array<{\n product: CatalogueProduct;\n quantity: number;\n variantId?: string;\n }> = [];\n\n initialItems.forEach((orderItem) => {\n const matchingProduct = allProducts.find(\n (p) => this.productKey(p) === orderItem.productId,\n );\n if (matchingProduct) {\n selectedProductsArray.push({\n product: matchingProduct,\n quantity: orderItem.quantity || 1,\n variantId: orderItem.variantId ?? undefined,\n });\n }\n });\n\n this.selectedProducts.set(selectedProductsArray);\n }\n\n private initializeDefaultFilters(): void {\n const defaults = this.defaultFilters();\n if (defaults.length > 0 && this.selectedFilters().length === 0) {\n this.selectedFilters.set(defaults);\n }\n }\n\n toggleSortMenu(event: Event): void {\n this.sortMenu.toggle(event);\n }\n\n /** Composite key for tracking product+variant selections */\n private selectionKey(productKey: unknown, variantId?: string): string {\n return variantId ? `${productKey}::${variantId}` : `${productKey}`;\n }\n\n /** Get the selected variantId for a product, or its defaultVariantId */\n getSelectedVariantId(product: CatalogueProduct): string | undefined {\n const key = String(this.productKey(product));\n const selected = this.selectedVariants()[key];\n if (selected) return selected;\n if (this.isVariableProduct(product)) {\n const activeVariants = this.getActiveVariants(product);\n return product.defaultVariantId ?? activeVariants[0]?.variantId;\n }\n return undefined;\n }\n\n /** Set the selected variant for a product */\n setSelectedVariant(product: CatalogueProduct, variantId: string): void {\n const key = String(this.productKey(product));\n this.selectedVariants.update((v) => ({ ...v, [key]: variantId }));\n }\n\n /** Check if product is a VARIABLE product with variants */\n isVariableProduct(product: CatalogueProduct): boolean {\n return product.productType === 'VARIABLE' && !!product.variants?.length;\n }\n\n /** Get active variants for a product */\n getActiveVariants(product: CatalogueProduct): CatalogueProductVariant[] {\n return (product.variants || []).filter((v) => v.isActive !== false);\n }\n\n /** Get total quantity for a product across all its variants */\n getProductQuantity(product: CatalogueProduct): number {\n const key = this.productKey(product);\n if (this.isVariableProduct(product)) {\n return this.selectedProducts()\n .filter((sp) => this.productKey(sp.product) === key)\n .reduce((sum, sp) => sum + sp.quantity, 0);\n }\n const selected = this.selectedProducts().find(\n (sp) => this.productKey(sp.product) === key,\n );\n return selected?.quantity || 0;\n }\n\n /** Get quantity for a specific product+variant combination */\n getVariantQuantity(product: CatalogueProduct, variantId: string): number {\n const key = this.productKey(product);\n const selected = this.selectedProducts().find(\n (sp) => this.productKey(sp.product) === key && sp.variantId === variantId,\n );\n return selected?.quantity || 0;\n }\n\n addProduct(product: CatalogueProduct): void {\n const key = this.productKey(product);\n const variantId = this.isVariableProduct(product)\n ? this.getSelectedVariantId(product)\n : undefined;\n const selKey = this.selectionKey(key, variantId);\n const currentProducts = this.selectedProducts();\n\n const existingIndex = currentProducts.findIndex(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) === selKey,\n );\n\n if (existingIndex !== -1) {\n this.selectedProducts.set(\n currentProducts.map((sp, i) =>\n i === existingIndex ? { ...sp, quantity: sp.quantity + 1 } : sp,\n ),\n );\n } else {\n this.selectedProducts.set([\n ...currentProducts,\n { product, quantity: 1, variantId },\n ]);\n }\n }\n\n removeProduct(product: CatalogueProduct): void {\n const key = this.productKey(product);\n if (this.isVariableProduct(product)) {\n // Remove all variant selections for this product\n this.selectedProducts.set(\n this.selectedProducts().filter(\n (sp) => this.productKey(sp.product) !== key,\n ),\n );\n } else {\n this.selectedProducts.set(\n this.selectedProducts().filter(\n (sp) => this.productKey(sp.product) !== key,\n ),\n );\n }\n }\n\n removeVariantSelection(product: CatalogueProduct, variantId: string): void {\n const key = this.productKey(product);\n const selKey = this.selectionKey(key, variantId);\n this.selectedProducts.set(\n this.selectedProducts().filter(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) !== selKey,\n ),\n );\n }\n\n updateProductQuantity(product: CatalogueProduct, quantity: number): void {\n const key = this.productKey(product);\n const variantId = this.isVariableProduct(product)\n ? this.getSelectedVariantId(product)\n : undefined;\n const selKey = this.selectionKey(key, variantId);\n const currentProducts = this.selectedProducts();\n\n if (quantity === 0) {\n this.selectedProducts.set(\n currentProducts.filter(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) !== selKey,\n ),\n );\n } else {\n this.selectedProducts.set(\n currentProducts.map((sp) =>\n this.selectionKey(this.productKey(sp.product), sp.variantId) === selKey\n ? { ...sp, quantity }\n : sp,\n ),\n );\n }\n }\n\n updateVariantQuantity(product: CatalogueProduct, variantId: string, quantity: number): void {\n const key = this.productKey(product);\n const selKey = this.selectionKey(key, variantId);\n const currentProducts = this.selectedProducts();\n\n if (quantity === 0) {\n this.removeVariantSelection(product, variantId);\n } else {\n const existingIndex = currentProducts.findIndex(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) === selKey,\n );\n if (existingIndex !== -1) {\n this.selectedProducts.set(\n currentProducts.map((sp, i) =>\n i === existingIndex ? { ...sp, quantity } : sp,\n ),\n );\n } else {\n this.selectedProducts.set([\n ...currentProducts,\n { product, quantity, variantId },\n ]);\n }\n }\n }\n\n validateSelection(): void {\n const selectedItems = this.selectedProducts();\n if (selectedItems.length > 0) {\n this.productsValidated.emit([...selectedItems]);\n this.selectedProducts.set([]);\n this.selectedVariants.set({});\n }\n }\n\n getPackagingLabel(product: CatalogueProduct): string {\n const packagingAssignment = product.categoryAssignments?.find(\n (ca) => ca.type === 'PACKAGING',\n );\n return packagingAssignment?.code || '';\n }\n\n getVariantTitle(product: CatalogueProduct, variantId: string): string {\n const variant = product.variants?.find((v) => v.variantId === variantId);\n return variant?.title || variantId;\n }\n\n trackKey(product: CatalogueProduct): unknown {\n return this.productKey(product);\n }\n\n formatPrice(product: CatalogueProduct): string {\n if (this.isVariableProduct(product)) {\n const variantId = this.getSelectedVariantId(product);\n const variant = product.variants?.find((v) => v.variantId === variantId);\n if (variant) {\n return this.formatCurrency(variant.price);\n }\n // Fallback: show price range\n const activeVariants = this.getActiveVariants(product);\n if (activeVariants.length > 0) {\n const min = Math.min(...activeVariants.map((v) => v.price));\n const max = Math.max(...activeVariants.map((v) => v.price));\n if (min === max) return this.formatCurrency(min);\n return `${this.formatCurrency(min)} - ${this.formatCurrency(max)}`;\n }\n }\n const price = product.unitPrice;\n if (price == null) return '';\n return this.formatCurrency(price);\n }\n\n formatVariantPrice(variant: CatalogueProductVariant): string {\n return this.formatCurrency(variant.price);\n }\n\n private formatCurrency(value: number | null | undefined): string {\n if (value == null) return '';\n return (\n this.currencyPipe.transform(\n value,\n this.currencyCode(),\n 'symbol-narrow',\n '1.2-2',\n ) || ''\n );\n }\n}\n","<div class=\"bg-surface-0 dark:bg-surface-950\">\n <div class=\"flex flex-row gap-4\">\n <!-- Filter Sidebar -->\n <ef-product-catalogue-filter\n [categoryGroups]=\"categoryGroups()\"\n [products]=\"products()\"\n [(selectedFilters)]=\"selectedFilters\"\n (filtersChanged)=\"onFiltersChanged($event)\"\n />\n\n <!-- Product Grid -->\n <div\n class=\"min-h-96 flex-1 rounded-md border-2 border-dotted border-surface-200 bg-surface-50 p-4 dark:border-surface-700 dark:bg-surface-800\"\n >\n <div class=\"sticky top-0 z-10 w-full mb-4 bg-surface-50 dark:bg-surface-800 pb-2 -mt-4 pt-4 -mx-4 px-4\">\n <p-iconfield iconPosition=\"left\" class=\"w-full\">\n <p-inputicon class=\"pi pi-search\"></p-inputicon>\n <input\n pInputText\n size=\"small\"\n [(ngModel)]=\"productSearch\"\n [placeholder]=\"'placeholder.search_products' | translate\"\n class=\"w-full\"\n />\n </p-iconfield>\n </div>\n <div class=\"grid grid-cols-2 gap-4 lg:grid-cols-3 xl:grid-cols-4\">\n @for (product of filteredProducts(); track trackKey(product)) {\n <p-card\n [header]=\"''\"\n [class.border-2]=\"true\"\n [class.border-blue-100]=\"getProductQuantity(product) > 0\"\n [class.!bg-blue-100]=\"getProductQuantity(product) > 0\"\n [class.dark:!border-blue-900]=\"getProductQuantity(product) > 0\"\n [class.dark:!bg-blue-900]=\"getProductQuantity(product) > 0\"\n [class.border-transparent]=\"getProductQuantity(product) === 0\"\n class=\"cursor-pointer hover:shadow-md dark:hover:shadow-md dark:hover:shadow-gray-300/50\"\n >\n <ng-template pTemplate=\"header\">\n <div class=\"w-full\">\n @if (productThumbnailTpl()) {\n <ng-container *ngTemplateOutlet=\"productThumbnailTpl(); context: { $implicit: product }\"></ng-container>\n } @else {\n <!-- Default fallback thumbnail -->\n <div class=\"flex h-[13rem] items-center justify-center bg-surface-100 text-3xl text-surface-400 dark:bg-surface-800\">\n <i class=\"pi pi-box\"></i>\n </div>\n }\n </div>\n </ng-template>\n <ng-template pTemplate=\"content\">\n <div [innerHTML]=\"product.displayName\" class=\"h-14 font-semibold\"></div>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (isVariableProduct(product)) {\n <!-- Variable product: variant selector + per-variant quantities -->\n <div class=\"flex items-center justify-between mb-2\">\n <p-badge\n severity=\"secondary\"\n [value]=\"getActiveVariants(product).length + ' ' + ('catalogue.variants' | translate)\"\n badgeSize=\"small\"\n />\n <div class=\"text-lg font-bold\">\n {{ formatPrice(product) }}\n </div>\n </div>\n\n <!-- Variant selector -->\n <p-select\n [options]=\"getActiveVariants(product)\"\n optionLabel=\"title\"\n optionValue=\"variantId\"\n [ngModel]=\"getSelectedVariantId(product)\"\n (ngModelChange)=\"setSelectedVariant(product, $event)\"\n size=\"small\"\n styleClass=\"w-full mb-3\"\n [placeholder]=\"'placeholder.select_variant' | translate\"\n />\n\n <!-- Add button or quantity stepper for selected variant -->\n <div class=\"mt-2\">\n @if (getProductQuantity(product) > 0) {\n <!-- Show per-variant breakdown -->\n @for (entry of selectedProducts(); track $index) {\n @if (productKey(entry.product) === productKey(product) && entry.variantId) {\n <div class=\"flex items-center justify-center gap-2 mb-2\">\n <span class=\"text-xs font-medium text-surface-600 dark:text-surface-400 min-w-12 text-center\">\n {{ getVariantTitle(product, entry.variantId) }}\n </span>\n <ef-quantity-stepper\n [ngModel]=\"entry.quantity\"\n (ngModelChange)=\"updateVariantQuantity(product, entry.variantId!, $event)\"\n [min]=\"0\"\n [max]=\"1000\"\n [minFractionDigits]=\"4\"\n [maxFractionDigits]=\"4\"\n [locale]=\"localeCode()\"\n />\n <ef-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n styleClass=\"!rounded-full !w-7 !h-7 !p-0\"\n size=\"small\"\n (clickEvent)=\"removeVariantSelection(product, entry.variantId!)\"\n />\n </div>\n }\n }\n <!-- Add another variant button -->\n <ef-button\n icon=\"pi pi-plus\"\n [label]=\"'button.add_variant' | translate\"\n severity=\"primary\"\n styleClass=\"w-full !rounded-full !h-10 mt-1\"\n size=\"small\"\n (clickEvent)=\"addProduct(product)\"\n />\n } @else {\n <ef-button\n [label]=\"'button.add' | translate\"\n icon=\"pi pi-shopping-cart\"\n severity=\"primary\"\n styleClass=\"w-full !rounded-full !h-12\"\n (clickEvent)=\"addProduct(product)\"\n />\n }\n </div>\n } @else {\n <!-- Simple product: original behavior -->\n <div class=\"flex items-center justify-between\">\n <p-badge\n severity=\"secondary\"\n [value]=\"getPackagingLabel(product)\"\n badgeSize=\"small\"\n />\n <div class=\"text-lg font-bold\">\n {{ formatPrice(product) }}\n </div>\n </div>\n <div class=\"mt-4\">\n @if (getProductQuantity(product) > 0) {\n <div class=\"flex items-center justify-between\">\n <ef-button\n icon=\"pi pi-trash\"\n severity=\"primary\"\n styleClass=\"!rounded-full\"\n (clickEvent)=\"removeProduct(product)\"\n />\n <ef-quantity-stepper\n [ngModel]=\"getProductQuantity(product)\"\n (ngModelChange)=\"updateProductQuantity(product, $event)\"\n [min]=\"0\"\n [max]=\"1000\"\n [minFractionDigits]=\"4\"\n [maxFractionDigits]=\"4\"\n [locale]=\"localeCode()\"\n />\n </div>\n } @else {\n <ef-button\n [label]=\"'button.add' | translate\"\n icon=\"pi pi-shopping-cart\"\n severity=\"primary\"\n styleClass=\"w-full !rounded-full !h-12\"\n (clickEvent)=\"addProduct(product)\"\n />\n }\n </div>\n }\n </ng-template>\n </p-card>\n } @empty {\n <div class=\"p-2\">{{ 'message.no_products_found' | translate }}</div>\n }\n </div>\n </div>\n </div>\n</div>\n","import {\n booleanAttribute,\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfButtonComponent } from '../ef-button/ef-button.component';\n\n@Component({\n selector: 'ef-dialog',\n standalone: true,\n templateUrl: './ef-dialog.component.html',\n imports: [DialogModule, TranslateModule, EfButtonComponent],\n})\nexport class EfDialogComponent {\n /** Direct header text (not translated) */\n @Input() header?: string;\n /** Translation key — takes priority over header */\n @Input() headerKey?: string;\n\n @Input({ transform: booleanAttribute }) visible = false;\n @Input({ transform: booleanAttribute }) modal = true;\n @Input({ transform: booleanAttribute }) closable = true;\n @Input({ transform: booleanAttribute }) draggable = false;\n @Input({ transform: booleanAttribute }) resizable = false;\n @Input() style?: { [key: string]: string };\n @Input() styleClass?: string;\n @Input() position:\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'topleft'\n | 'topright'\n | 'bottomleft'\n | 'bottomright' = 'center';\n @Input() appendTo?: string;\n\n // ── Default action footer (opt-in) ────────────────────────────────────────\n /**\n * Render a standard cancel + save action footer. Caller wires (saveAction)\n * and (cancelAction). When false (default), the footer falls back to the\n * `[dialogFooter]` projection slot for fully custom footers.\n */\n @Input({ transform: booleanAttribute }) defaultActions = true;\n @Input() saveLabelKey = 'button.save';\n @Input() cancelLabelKey = 'button.cancel';\n @Input() saveLabel?: string;\n @Input() cancelLabel?: string;\n @Input() saveIcon = 'pi pi-check';\n @Input({ transform: booleanAttribute }) saveDisabled = false;\n @Input() saveStyleClass = 'p-button-sm';\n @Input() cancelStyleClass = 'p-button-sm p-button-text';\n\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() showEvent = new EventEmitter<void>();\n @Output() hideEvent = new EventEmitter<void>();\n @Output() saveAction = new EventEmitter<void>();\n @Output() cancelAction = new EventEmitter<void>();\n\n // Captured here so we can pipe it directly into <p-dialog>'s [footerTemplate]\n // input. Templates declared inside this component's view are NOT content\n // children of <p-dialog>, so its @ContentChild('footer') lookup never finds\n // them — the input is the only reliable wiring.\n @ViewChild('defaultFooter', { static: true }) defaultFooterTpl?: TemplateRef<void>;\n\n handleVisibleChange(value: boolean): void {\n this.visible = value;\n this.visibleChange.emit(value);\n }\n\n handleShow(): void {\n this.showEvent.emit();\n }\n\n handleHide(): void {\n this.hideEvent.emit();\n }\n\n /**\n * Default cancel handler — emits and also closes the dialog. Callers can\n * override behavior via (cancelAction) (close still happens).\n */\n onDefaultCancel(): void {\n this.cancelAction.emit();\n this.handleVisibleChange(false);\n }\n\n onDefaultSave(): void {\n if (this.saveDisabled) return;\n this.saveAction.emit();\n }\n}\n","<p-dialog\n [header]=\"headerKey ? (headerKey | translate) : header\"\n [visible]=\"visible\"\n (visibleChange)=\"handleVisibleChange($event)\"\n [modal]=\"modal\"\n [closable]=\"closable\"\n [draggable]=\"draggable\"\n [resizable]=\"resizable\"\n [style]=\"style\"\n [styleClass]=\"styleClass\"\n [position]=\"position\"\n [appendTo]=\"appendTo\"\n [footerTemplate]=\"defaultActions ? defaultFooterTpl : null\"\n (onShow)=\"handleShow()\"\n (onHide)=\"handleHide()\"\n>\n <ng-content />\n</p-dialog>\n\n<!-- Default action footer. Declared outside <p-dialog> because its <ng-template>\n is a view child of ef-dialog, not a content child of <p-dialog>; we hand it\n to <p-dialog> via the [footerTemplate] input above. -->\n<ng-template #defaultFooter>\n <div class=\"flex justify-end gap-2\">\n <ef-button\n [labelKey]=\"cancelLabelKey\"\n [label]=\"cancelLabel\"\n [styleClass]=\"cancelStyleClass\"\n (clickEvent)=\"onDefaultCancel()\"\n />\n <ef-button\n [labelKey]=\"saveLabelKey\"\n [label]=\"saveLabel\"\n [icon]=\"saveIcon\"\n [styleClass]=\"saveStyleClass\"\n [disabled]=\"saveDisabled\"\n (clickEvent)=\"onDefaultSave()\"\n />\n </div>\n</ng-template>\n","/**\n * Available Tailwind color names for badges\n */\nexport type EfBadgeColor =\n | 'emerald'\n | 'green'\n | 'lime'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose'\n | 'slate'\n | 'gray'\n | 'zinc'\n | 'neutral'\n | 'stone'\n | 'red';\n\n/**\n * Badge size variants\n */\nexport type EfBadgeSize = 'sm' | 'md' | 'lg';\n\n/**\n * Badge style variants\n */\nexport type EfBadgeVariant = 'filled' | 'outline' | 'dot' | 'pill';\n\n/**\n * Badge configuration interface\n */\nexport interface EfBadgeConfig {\n /**\n * Text label to display (optional for 'dot' variant)\n */\n label?: string;\n\n /**\n * Badge color (Tailwind color name)\n * @default 'blue'\n */\n color?: EfBadgeColor;\n\n /**\n * Badge size\n * @default 'md'\n */\n size?: EfBadgeSize;\n\n /**\n * Badge style variant\n * @default 'filled'\n */\n variant?: EfBadgeVariant;\n\n /**\n * Custom CSS classes to apply\n */\n styleClass?: string;\n\n /**\n * Icon class (e.g., PrimeIcons) to display before label\n */\n icon?: string;\n\n /**\n * Whether to show the dot indicator\n * @default true for 'dot' variant, false otherwise\n */\n showDot?: boolean;\n}\n\n/**\n * Default badge configuration\n */\nexport const EF_BADGE_DEFAULTS: Required<Omit<EfBadgeConfig, 'label' | 'icon'>> = {\n color: 'blue',\n size: 'md',\n variant: 'filled',\n styleClass: '',\n showDot: false,\n};\n\n/**\n * Maps Tailwind colors to their background classes\n */\nexport const EF_BADGE_BG_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'bg-emerald-500',\n green: 'bg-green-500',\n lime: 'bg-lime-500',\n orange: 'bg-orange-500',\n amber: 'bg-amber-500',\n yellow: 'bg-yellow-500',\n teal: 'bg-teal-500',\n cyan: 'bg-cyan-500',\n sky: 'bg-sky-500',\n blue: 'bg-blue-500',\n indigo: 'bg-indigo-500',\n violet: 'bg-violet-500',\n purple: 'bg-purple-500',\n fuchsia: 'bg-fuchsia-500',\n pink: 'bg-pink-500',\n rose: 'bg-rose-500',\n slate: 'bg-slate-500',\n gray: 'bg-gray-500',\n zinc: 'bg-zinc-500',\n neutral: 'bg-neutral-500',\n stone: 'bg-stone-500',\n red: 'bg-red-500',\n};\n\n/**\n * Maps Tailwind colors to their text classes\n */\nexport const EF_BADGE_TEXT_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'text-emerald-700',\n green: 'text-green-700',\n lime: 'text-lime-700',\n orange: 'text-orange-700',\n amber: 'text-amber-700',\n yellow: 'text-yellow-700',\n teal: 'text-teal-700',\n cyan: 'text-cyan-700',\n sky: 'text-sky-700',\n blue: 'text-blue-700',\n indigo: 'text-indigo-700',\n violet: 'text-violet-700',\n purple: 'text-purple-700',\n fuchsia: 'text-fuchsia-700',\n pink: 'text-pink-700',\n rose: 'text-rose-700',\n slate: 'text-slate-700',\n gray: 'text-gray-700',\n zinc: 'text-zinc-700',\n neutral: 'text-neutral-700',\n stone: 'text-stone-700',\n red: 'text-red-700',\n};\n\n/**\n * Maps Tailwind colors to their border classes\n */\nexport const EF_BADGE_BORDER_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'border-emerald-500',\n green: 'border-green-500',\n lime: 'border-lime-500',\n orange: 'border-orange-500',\n amber: 'border-amber-500',\n yellow: 'border-yellow-500',\n teal: 'border-teal-500',\n cyan: 'border-cyan-500',\n sky: 'border-sky-500',\n blue: 'border-blue-500',\n indigo: 'border-indigo-500',\n violet: 'border-violet-500',\n purple: 'border-purple-500',\n fuchsia: 'border-fuchsia-500',\n pink: 'border-pink-500',\n rose: 'border-rose-500',\n slate: 'border-slate-500',\n gray: 'border-gray-500',\n zinc: 'border-zinc-500',\n neutral: 'border-neutral-500',\n stone: 'border-stone-500',\n red: 'border-red-500',\n};\n\n/**\n * Maps Tailwind colors to their light background classes (for filled variant)\n */\nexport const EF_BADGE_BG_LIGHT_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'bg-emerald-100',\n green: 'bg-green-100',\n lime: 'bg-lime-100',\n orange: 'bg-orange-100',\n amber: 'bg-amber-100',\n yellow: 'bg-yellow-100',\n teal: 'bg-teal-100',\n cyan: 'bg-cyan-100',\n sky: 'bg-sky-100',\n blue: 'bg-blue-100',\n indigo: 'bg-indigo-100',\n violet: 'bg-violet-100',\n purple: 'bg-purple-100',\n fuchsia: 'bg-fuchsia-100',\n pink: 'bg-pink-100',\n rose: 'bg-rose-100',\n slate: 'bg-slate-100',\n gray: 'bg-gray-100',\n zinc: 'bg-zinc-100',\n neutral: 'bg-neutral-100',\n stone: 'bg-stone-100',\n red: 'bg-red-100',\n};\n","import { Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n EfBadgeConfig,\n EfBadgeColor,\n EfBadgeSize,\n EfBadgeVariant,\n EF_BADGE_DEFAULTS,\n EF_BADGE_BG_COLORS,\n EF_BADGE_TEXT_COLORS,\n EF_BADGE_BORDER_COLORS,\n EF_BADGE_BG_LIGHT_COLORS,\n} from './ef-badge.component.types';\n\n/**\n * ef-badge - Reusable status badge component\n *\n * Features:\n * - Multiple color variants (Tailwind colors)\n * - Multiple size options (sm, md, lg)\n * - Multiple style variants (filled, outline, dot, pill)\n * - Icon support\n * - Fully customizable with styleClass\n *\n * @example\n * ```html\n * <!-- Simple filled badge -->\n * <ef-badge label=\"Active\" color=\"green\" />\n *\n * <!-- Dot variant -->\n * <ef-badge label=\"En attente\" color=\"yellow\" variant=\"dot\" />\n *\n * <!-- With icon -->\n * <ef-badge label=\"Error\" color=\"red\" icon=\"pi pi-exclamation-circle\" />\n *\n * <!-- Outline variant -->\n * <ef-badge label=\"Info\" color=\"blue\" variant=\"outline\" />\n *\n * <!-- Pill variant -->\n * <ef-badge label=\"New\" color=\"purple\" variant=\"pill\" />\n * ```\n */\n@Component({\n selector: 'ef-badge',\n standalone: true,\n templateUrl: './ef-badge.component.html',\n styleUrl: './ef-badge.component.scss',\n imports: [CommonModule],\n})\nexport class EfBadgeComponent {\n /**\n * Badge label text\n */\n label = input<string>();\n\n /**\n * Badge color (Tailwind color name)\n */\n color = input<EfBadgeColor>(EF_BADGE_DEFAULTS.color);\n\n /**\n * Badge size\n */\n size = input<EfBadgeSize>(EF_BADGE_DEFAULTS.size);\n\n /**\n * Badge style variant\n */\n variant = input<EfBadgeVariant>(EF_BADGE_DEFAULTS.variant);\n\n /**\n * Custom CSS classes\n */\n styleClass = input<string>(EF_BADGE_DEFAULTS.styleClass);\n\n /**\n * Icon class (e.g., PrimeIcons)\n */\n icon = input<string>();\n\n /**\n * Whether to show the dot indicator\n */\n showDot = input<boolean>(EF_BADGE_DEFAULTS.showDot);\n\n /**\n * Computed badge configuration with defaults\n */\n config = computed<Required<EfBadgeConfig>>(() => ({\n label: this.label() || '',\n color: this.color(),\n size: this.size(),\n variant: this.variant(),\n styleClass: this.styleClass(),\n icon: this.icon() || '',\n showDot: this.showDot() || this.variant() === 'dot',\n }));\n\n /**\n * Computed CSS classes for the badge\n */\n badgeClasses = computed(() => {\n const cfg = this.config();\n const classes: string[] = ['ef-badge'];\n\n // Base classes\n classes.push('inline-flex', 'items-center', 'gap-1.5', 'font-medium');\n\n // Size classes\n switch (cfg.size) {\n case 'sm':\n classes.push('text-xs', 'px-2', 'py-0.5');\n break;\n case 'md':\n classes.push('text-sm', 'px-2.5', 'py-1');\n break;\n case 'lg':\n classes.push('text-base', 'px-3', 'py-1.5');\n break;\n }\n\n // Variant-specific classes\n switch (cfg.variant) {\n case 'filled':\n classes.push('rounded');\n classes.push(EF_BADGE_BG_LIGHT_COLORS[cfg.color]);\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n break;\n\n case 'outline':\n classes.push('rounded', 'border-2');\n classes.push(EF_BADGE_BORDER_COLORS[cfg.color]);\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n classes.push('bg-white');\n break;\n\n case 'dot':\n classes.push('rounded');\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n break;\n\n case 'pill':\n classes.push('rounded-full');\n classes.push(EF_BADGE_BG_LIGHT_COLORS[cfg.color]);\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n break;\n }\n\n // Custom classes\n if (cfg.styleClass) {\n classes.push(cfg.styleClass);\n }\n\n return classes.join(' ');\n });\n\n /**\n * Computed CSS classes for the dot indicator\n */\n dotClasses = computed(() => {\n const cfg = this.config();\n const classes: string[] = ['inline-block', 'shrink-0', 'rounded-full'];\n\n // Dot size based on badge size\n switch (cfg.size) {\n case 'sm':\n classes.push('w-2', 'h-2');\n break;\n case 'md':\n classes.push('w-2.5', 'h-2.5');\n break;\n case 'lg':\n classes.push('w-3', 'h-3');\n break;\n }\n\n // Dot color\n classes.push(EF_BADGE_BG_COLORS[cfg.color]);\n\n return classes.join(' ');\n });\n\n /**\n * Computed CSS classes for the icon\n */\n iconClasses = computed(() => {\n const cfg = this.config();\n const classes: string[] = [];\n\n if (cfg.icon) {\n classes.push(cfg.icon);\n }\n\n // Icon size based on badge size\n switch (cfg.size) {\n case 'sm':\n classes.push('text-xs');\n break;\n case 'md':\n classes.push('text-sm');\n break;\n case 'lg':\n classes.push('text-base');\n break;\n }\n\n return classes.join(' ');\n });\n}\n","<span [class]=\"badgeClasses()\">\n <!-- Dot indicator -->\n @if (config().showDot) {\n <span [class]=\"dotClasses()\"></span>\n }\n\n <!-- Icon -->\n @if (config().icon) {\n <i [class]=\"iconClasses()\"></i>\n }\n\n <!-- Label -->\n @if (config().label) {\n <span>{{ config().label }}</span>\n }\n</span>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n Output,\n} from '@angular/core';\nimport { EfButtonComponent } from '../ef-button/ef-button.component';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ScreenStateEnum, ScreenContext } from '@elasticias/screens';\nimport { Router } from '@angular/router';\nimport { PermissionsEnum } from '@elasticias/types';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-toolbar',\n standalone: true,\n templateUrl: 'ef-toolbar.component.html',\n styleUrl: 'ef-toolbar.component.scss',\n imports: [\n CommonModule,\n ToolbarModule,\n EfButtonComponent,\n IconFieldModule,\n InputIconModule,\n InputTextModule,\n FormsModule,\n TranslateModule,\n ],\n})\nexport class EfToolbarComponent {\n @Input() context: ScreenContext;\n\n @Input() state: string;\n @Input() disabled: boolean;\n\n // Detail Action\n @Output() back = new EventEmitter();\n @Output() save = new EventEmitter();\n @Output() delete = new EventEmitter();\n @Output() duplicate = new EventEmitter();\n @Output() print = new EventEmitter();\n @Output() triggerCustoAction = new EventEmitter<any>();\n\n // Search Actions\n @Output() add = new EventEmitter();\n // `search` collides with the native HTMLInputElement `search` event under\n // @angular-eslint/no-output-native, but renaming would churn every consumer\n // template — keep the name, suppress the rule for this line only.\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() search = new EventEmitter();\n @Output() clear = new EventEmitter();\n\n searchText = '';\n\n // Flags\n @Input() backButton = false;\n @Input() deleteButton = false;\n @Input() duplicateButton = true;\n @Input() saveButton = true;\n @Input() exportButton = false;\n @Input() printButton = false;\n @Input() addButton = true;\n @Input() clearButton = true;\n @Input() searchButton = true;\n @Input() showFreeSearchInput = false;\n\n private router = inject(Router);\n\n get isSearchState(): boolean {\n return this.state === ScreenStateEnum.SEARCH;\n }\n\n get isDetailState(): boolean {\n return this.state === ScreenStateEnum.DETAIL;\n }\n\n get hasReadPermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Read);\n }\n\n get hasWritePermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Write);\n }\n\n get hasEditPermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Edit);\n }\n\n get hasDeletePermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Delete);\n }\n\n get hasDuplicatePermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Duplicate);\n }\n\n get hasExportPermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Export);\n }\n\n get isDuplicateMode(): boolean {\n return this.context?.duplicateMode ?? false;\n }\n\n backAction() {\n this.back.emit();\n this.navigateBack();\n }\n\n deleteAction() {\n this.delete.emit();\n }\n\n saveAction() {\n this.save.emit();\n }\n\n duplicateAction() {\n this.duplicate.emit();\n }\n\n printAction() {\n this.print.emit();\n }\n\n exportAction() {\n this.add.emit();\n }\n\n addAction() {\n this.add.emit();\n }\n\n searchAction() {\n this.search.emit();\n }\n\n clearAction() {\n this.clear.emit();\n }\n\n navigateBack() {\n const currentUrl = this.router.url;\n const baseUrl = currentUrl.substring(0, currentUrl.indexOf('/details'));\n this.router.navigate([baseUrl]);\n }\n}\n","<p-toolbar>\n <ng-template #start>\n <div class=\"flex items-center gap-3\">\n @if (isDetailState || backButton) {\n <ef-button\n icon=\"pi pi-angle-left\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipKey=\"common.back\"\n labelKey=\"common.back\"\n size=\"small\"\n (clickEvent)=\"backAction()\"\n />\n }\n <!-- Custom content slot for start section (e.g., status badge) -->\n <ng-content select=\"[toolbarStart]\" />\n </div>\n </ng-template>\n <ng-template #center>\n @if (showFreeSearchInput) {\n <p-iconfield iconPosition=\"left\">\n <p-inputicon styleClass=\"pi pi-search\" />\n <input\n id=\"freeTextSearch\"\n type=\"text\"\n pInputText\n [placeholder]=\"'common.search' | translate\"\n />\n </p-iconfield>\n }\n </ng-template>\n <ng-template #end>\n <!-- DETAIL state -->\n <!-- Custom content slot for start section (e.g., status badge) -->\n <ng-content select=\"[toolbarEnd]\" />\n @if (isDetailState && isDuplicateMode) {\n <span\n class=\"duplicate-badge flex items-center gap-1 rounded bg-blue-100 px-2 py-1 text-sm text-blue-700\"\n >\n <i class=\"pi pi-copy\"></i> {{ 'common.duplicate' | translate }}\n </span>\n }\n @if (isDetailState && deleteButton && hasDeletePermission) {\n <ef-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.delete\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"deleteAction()\"\n />\n }\n @if (isDetailState && printButton) {\n <ef-button\n icon=\"pi pi-print\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.print\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"printAction()\"\n />\n }\n @if (\n isDetailState &&\n duplicateButton &&\n hasDuplicatePermission &&\n !isDuplicateMode\n ) {\n <ef-button\n icon=\"pi pi-copy\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"left\"\n tooltipKey=\"common.duplicate\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"duplicateAction()\"\n />\n }\n @if (isDetailState && saveButton && hasWritePermission) {\n <ef-button\n icon=\"pi pi-save\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.save\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"saveAction()\"\n />\n }\n <!-- SEARCH state -->\n @if (isSearchState && exportButton && hasExportPermission) {\n <ef-button\n icon=\"pi pi-upload\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.export\"\n size=\"small\"\n (clickEvent)=\"exportAction()\"\n />\n }\n @if (isSearchState && addButton && hasWritePermission) {\n <ef-button\n icon=\"pi pi-plus\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.add\"\n labelKey=\"common.add\"\n size=\"small\"\n (clickEvent)=\"addAction()\"\n />\n }\n @if (isSearchState && clearButton) {\n <ef-button\n icon=\"pi pi-filter-slash\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.clear_search_criteria\"\n labelKey=\"common.clear\"\n size=\"small\"\n (clickEvent)=\"clearAction()\"\n />\n }\n @if (isSearchState && searchButton && hasReadPermission) {\n <ef-button\n icon=\"pi pi-search\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.search\"\n labelKey=\"common.search\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"searchAction()\"\n />\n }\n </ng-template>\n</p-toolbar>\n","import { Component, Input } from '@angular/core';\nimport { BlockUIModule } from 'primeng/blockui';\n\n@Component({\n selector: 'ef-block-ui',\n standalone: true,\n templateUrl: './ef-block-ui.component.html',\n styleUrls: ['./ef-block-ui.component.scss'],\n imports: [BlockUIModule],\n})\nexport class EfBlockUiComponent {\n @Input() isLoading = false;\n @Input() contentPanel!: any;\n}\n","@if (isLoading) {\n <p-blockUI\n [target]=\"contentPanel\"\n [blocked]=\"isLoading\"\n styleClass=\"appBlockUI w-full h-full fixed top-0 left-0 right-0 flex items-start justify-center bg-black/30 z-20\">\n\n <ng-template pTemplate=\"loader\">\n <!-- Loader Container -->\n <div class=\"mt-2 flex flex-row items-center space-x-4 rounded-lg bg-white px-4 py-2 shadow\">\n <!-- Spinning Loader -->\n <div class=\"h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent dark:border-primary-contrast dark:border-t-transparent\"></div>\n\n <!-- Loading Text -->\n <div id=\"loading-text\" class=\"font-normal text-primary dark:text-primary-contrast\">\n Chargement en cours... !\n </div>\n </div>\n </ng-template>\n </p-blockUI>\n}\n","import { Component, ElementRef, inject, Input, HostBinding } from '@angular/core';\nimport { BlockableUI } from 'primeng/api';\n\n@Component({\n selector: 'ef-blockable-div',\n standalone: true,\n template: `<ng-content></ng-content>`,\n})\nexport class EfBlockableDivComponent implements BlockableUI {\n @Input() style: { [key: string]: string } = {};\n @Input() cssClass = '';\n\n private readonly el = inject(ElementRef);\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement;\n }\n\n @HostBinding('style') get componentStyle() {\n return this.style;\n }\n\n @HostBinding('class') get componentClass() {\n return this.cssClass;\n }\n}\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-input-text',\n standalone: true,\n templateUrl: './ef-input-text.component.html',\n styleUrls: ['./ef-input-text.component.scss'],\n imports: [InputTextModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfInputTextComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input() type = 'text';\n @Input() maxlength?: number;\n @Input({ transform: booleanAttribute }) readonly = false;\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input() autocomplete?: string;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @Output() valueChangeEvent = new EventEmitter<string>();\n\n value = '';\n disabled = false;\n\n private onChange: (value: string) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => 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 handleInput(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChangeEvent.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <input\n [id]=\"effectiveId\"\n [type]=\"type\"\n pInputText\n [pSize]=\"size\"\n [value]=\"value\"\n (input)=\"handleInput($any($event.target).value)\"\n (blur)=\"handleBlur()\"\n [placeholder]=\"effectivePlaceholder\"\n [attr.maxlength]=\"maxlength\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [attr.autocomplete]=\"autocomplete\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n fluid\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n inject,\n Input,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-checkbox',\n standalone: true,\n templateUrl: './ef-checkbox.component.html',\n styleUrls: ['./ef-checkbox.component.scss'],\n imports: [CheckboxModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfCheckboxComponent implements ControlValueAccessor {\n /** Direct label text (not translated) */\n @Input() label?: string;\n /** Translation key — takes priority over label */\n @Input() labelKey?: string;\n\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() value?: any;\n @Input({ transform: booleanAttribute }) binary = false;\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) disabled = false;\n\n checked: any = false;\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get effectiveLabel(): string | undefined {\n return this.labelKey ? undefined : this.label;\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n writeValue(value: any): void {\n this.checked = value;\n }\n\n registerOnChange(fn: (value: any) => 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 handleChange(event: any): void {\n this.checked = event.checked;\n this.onChange(this.binary ? event.checked : event.checked);\n this.onTouched();\n }\n}\n","<p-checkbox\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"checked\"\n [ngModelOptions]=\"{standalone: true}\"\n (onChange)=\"handleChange($event)\"\n [value]=\"value\"\n [binary]=\"binary\"\n [disabled]=\"disabled\"\n/>\n@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" styleClass=\"form-label-left\" />\n}\n@if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n}\n@if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n}\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { PasswordModule } from 'primeng/password';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-password',\n standalone: true,\n templateUrl: './ef-password.component.html',\n styleUrls: ['./ef-password.component.scss'],\n imports: [PasswordModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfPasswordComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input({ transform: booleanAttribute }) toggleMask = true;\n @Input({ transform: booleanAttribute }) feedback = false;\n @Input() autocomplete?: string;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @Output() valueChangeEvent = new EventEmitter<string>();\n\n value = '';\n disabled = false;\n\n private onChange: (value: string) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => 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 handleChange(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChangeEvent.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-password\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"handleChange($event)\"\n (onBlur)=\"handleBlur()\"\n [toggleMask]=\"toggleMask\"\n [feedback]=\"feedback\"\n [placeholder]=\"effectivePlaceholder\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [attr.autocomplete]=\"autocomplete\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n fluid\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import { booleanAttribute, Component, HostBinding, inject, Input, Output, EventEmitter, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-multi-select',\n templateUrl: 'ef-multi-select.component.html',\n styleUrls: ['./ef-multi-select.component.scss'],\n standalone: true,\n imports: [FormsModule, MultiSelectModule, TranslateModule, EfLabelComponent],\n})\nexport class EfMultiSelectComponent implements ControlValueAccessor, OnChanges {\n @Output() changeEvent = new EventEmitter<string[]>();\n\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() id = '';\n @Input() name = '';\n @Input() optionLabel = 'name';\n @Input() optionValue = 'id';\n @Input() options: any;\n @Input() filteredOptions: any;\n @Input() maxSelectedLabels = 3;\n @Input() disabled = false;\n @Input() display: 'comma' | 'chip' = 'comma';\n @Input() size: 'large' | 'small';\n @Input() selectionLimit: any;\n @Input() filters: any;\n @Input() placeholder = '';\n @Input() placeholderKey?: string;\n @Input({ transform: booleanAttribute }) showClear = false;\n @Input() required = false;\n @Input({ transform: booleanAttribute }) inline = false;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n @HostBinding('class.ef-required') get isRequired() { return this.required; }\n\n selectedValues: any[] = [];\n\n private propagateChange: (value: any[]) => void = () => { /* noop */ };\n private propagateTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n writeValue(value: string[]): void {\n if (Array.isArray(value) && value.length > 0 && this.options) {\n this.selectedValues = value\n .map(v => this.options.find((opt: any) => opt[this.optionValue] === v)?.[this.optionValue])\n .filter((opt: any) => !!opt);\n } else {\n this.selectedValues = [];\n }\n }\n\n registerOnChange(fn: (value: any[]) => void): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onInternalModelChange(val: any[]): void {\n const value = val ?? [];\n this.selectedValues = value;\n this.propagateChange(value);\n this.changeEvent.emit(value);\n this.propagateTouched();\n }\n\n handleClear(): void {\n this.selectedValues = [];\n this.propagateChange([]);\n this.changeEvent.emit([]);\n this.propagateTouched();\n }\n\n ngOnChanges(): void {\n if (this.options && this.filters && typeof this.filters === 'object') {\n this.applyFilters(this.filters);\n } else {\n this.filteredOptions = this.options;\n }\n }\n\n private applyFilters(filters: { [key: string]: any }): void {\n this.filteredOptions = this.options.filter((option: any) =>\n Object.keys(filters).every(key => option[key] === filters[key])\n );\n this.selectedValues = [];\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"id\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-multiSelect\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"effectivePlaceholder\"\n [options]=\"filteredOptions\"\n [optionLabel]=\"optionLabel\"\n [optionValue]=\"optionValue\"\n [maxSelectedLabels]=\"maxSelectedLabels\"\n [ngModel]=\"selectedValues\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onInternalModelChange($event)\"\n (onClear)=\"handleClear()\"\n [disabled]=\"disabled\"\n [display]=\"display\"\n [size]=\"size\"\n [selectionLimit]=\"selectionLimit\"\n [showClear]=\"showClear\"\n fluid\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n inject,\n Input,\n TemplateRef,\n ContentChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ef-selectbutton',\n standalone: true,\n templateUrl: './ef-selectbutton.component.html',\n imports: [SelectButtonModule, FormsModule, TranslateModule, CommonModule, EfLabelComponent],\n})\nexport class EfSelectButtonComponent implements ControlValueAccessor {\n /** Direct label text above the selectbutton (not translated) */\n @Input() label?: string;\n /** Translation key for label — takes priority over label */\n @Input() labelKey?: string;\n\n @Input() options: any[] = [];\n @Input() optionLabel = 'label';\n @Input() optionValue = 'value';\n @Input({ transform: booleanAttribute }) multiple = false;\n @Input({ transform: booleanAttribute }) allowEmpty = true;\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input() size: 'small' | 'large' = 'small';\n @Input() styleClass?: string;\n\n @ContentChild('item') itemTemplate?: TemplateRef<any>;\n\n value: any = null;\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: any) => 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 handleChange(event: any): void {\n this.value = event.value;\n this.onChange(event.value);\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" />\n}\n<p-selectbutton\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (onChange)=\"handleChange($event)\"\n [options]=\"options\"\n [optionLabel]=\"optionLabel\"\n [optionValue]=\"optionValue\"\n [multiple]=\"multiple\"\n [allowEmpty]=\"allowEmpty\"\n [disabled]=\"disabled\"\n [size]=\"size\"\n [styleClass]=\"styleClass\"\n>\n @if (itemTemplate) {\n <ng-template let-item pTemplate=\"item\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\" />\n </ng-template>\n }\n</p-selectbutton>\n","// Form components\nexport { EfInputTextComponent } from './ef-input-text/ef-input-text.component';\nexport { EfSelectComponent } from './ef-select/ef-select.component';\nexport { EfCheckboxComponent } from './ef-checkbox/ef-checkbox.component';\nexport { EfDatepickerComponent } from './ef-datepicker/ef-datepicker.component';\nexport { EfInputNumberComponent } from './ef-inputnumber/ef-inputnumber.component';\nexport { EfPasswordComponent } from './ef-password/ef-password.component';\nexport { EfMultiSelectComponent } from './ef-multi-select/ef-multi-select.component';\nexport { EfSelectButtonComponent } from './ef-selectbutton/ef-selectbutton.component';\nexport { EfQuantityStepperComponent } from './ef-quantity-stepper/ef-quantity-stepper.component';\n","import { TemplateRef } from '@angular/core';\n\n/**\n * Column alignment options for ef-datatable\n */\nexport type EfDatatableColumnAlign = 'start' | 'center' | 'end';\n\n/**\n * Column data types for automatic formatting\n */\nexport type EfDatatableColumnType = 'text' | 'number' | 'money' | 'date' | 'datetime' | 'boolean' | 'reference';\n\n/**\n * Column definition interface for ef-datatable\n */\nexport interface EfDatatableColumn {\n /** Property name in data object */\n field: string;\n\n /** Column header text */\n header: string;\n\n /** Data type for automatic formatting (default: 'text') */\n type?: EfDatatableColumnType;\n\n /** Text alignment (default: 'start' except money/number = 'end') */\n align?: EfDatatableColumnAlign;\n\n /** Enable sorting for this column (default: true) */\n sortable?: boolean;\n\n /** Enable resizing for this column (default: true) */\n resizable?: boolean;\n\n /** CSS width (e.g., '100px', 'w-[200px]') */\n width?: string;\n\n /** Custom Tailwind or CSS classes */\n styleClass?: string;\n\n // Type-specific formatting options\n\n /** Date format string for DatePipe (default: 'shortDate') */\n dateFormat?: string;\n\n /** Currency code for money type (default: 'EUR') */\n currencyCode?: string;\n\n /** Currency display format (default: 'symbol') */\n currencyDisplay?: 'symbol' | 'code' | 'name';\n\n /** Locale for number/date/currency formatting (default: 'fr-FR') */\n locale?: string;\n\n /** Minimum fraction digits for numbers (default: 2) */\n minFractionDigits?: number;\n\n /** Maximum fraction digits for numbers (default: 2) */\n maxFractionDigits?: number;\n\n // Reference data integration\n\n /** Key for context.ref.get() to lookup reference data */\n referenceKey?: string;\n\n /** Field to match in reference data (default: 'code') */\n referenceValueField?: string;\n\n /** Field to display from reference data (default: 'name') */\n referenceLabelField?: string;\n\n // Template support\n\n /** Custom cell template (receives rowData and column) */\n template?: TemplateRef<unknown>;\n\n /** Custom header template (receives column) */\n headerTemplate?: TemplateRef<unknown>;\n}\n\n/**\n * Action column configuration for edit/delete/duplicate buttons\n */\nexport interface EfDatatableActions {\n /** Show action column (default: true if config provided) */\n show?: boolean;\n\n /** Action column width (default: 'w-20') */\n width?: string;\n\n /** Show edit button (default: true) */\n showEdit?: boolean;\n\n /** Show delete button (default: true) */\n showDelete?: boolean;\n\n /** Show duplicate button (default: false) */\n showDuplicate?: boolean;\n\n /** Position of action column (default: 'end') */\n position?: 'start' | 'end';\n}\n\n/**\n * Main table configuration options\n */\nexport interface EfDatatableConfig {\n // Data binding\n\n /** Enable lazy loading (default: true) */\n lazy?: boolean;\n\n /** Unique identifier field name (default: 'id') */\n dataKey?: string;\n\n // Pagination\n\n /** Enable pagination (default: true) */\n paginator?: boolean;\n\n /** Rows per page (default: 10) */\n rows?: number;\n\n /** Page size options (default: [5, 10, 25, 50]) */\n rowsPerPageOptions?: number[];\n\n // Scrolling\n\n /** Enable scrolling (default: true) */\n scrollable?: boolean;\n\n /** Scroll viewport height (default: '300px') */\n scrollHeight?: string;\n\n // Column features\n\n /** Enable column resizing (default: true) */\n resizableColumns?: boolean;\n\n /** Column resize behavior (default: 'expand') */\n columnResizeMode?: 'fit' | 'expand';\n\n // State persistence\n\n /** State storage location (default: 'local') */\n stateStorage?: 'local' | 'session';\n\n /** State storage key (auto-generated if not provided) */\n stateKey?: string;\n\n // Styling\n\n /** Table size (default: 'small') */\n size?: 'small' | 'large';\n\n /** Custom CSS classes (default: 'text-sm') */\n styleClass?: string;\n\n /** Inline table styles */\n tableStyle?: Record<string, string>;\n\n // i18n\n\n /** Message when no data (default: 'Aucune entree trouvee') */\n emptyMessage?: string;\n\n /** Pagination report template */\n currentPageReportTemplate?: string;\n}\n\n/**\n * Default table configuration values\n */\nexport const EF_DATATABLE_DEFAULTS: Required<EfDatatableConfig> = {\n lazy: true,\n dataKey: 'id',\n paginator: true,\n rows: 10,\n rowsPerPageOptions: [5, 10, 25, 50],\n scrollable: true,\n scrollHeight: '300px',\n resizableColumns: true,\n columnResizeMode: 'expand',\n stateStorage: 'local',\n stateKey: '',\n size: 'small',\n styleClass: 'text-sm',\n tableStyle: { 'min-width': '50rem' },\n emptyMessage: 'Aucune entree trouvee',\n currentPageReportTemplate: '{currentPage} de {totalPages}'\n};\n\n/**\n * Default column configuration values\n */\nexport const EF_DATATABLE_COLUMN_DEFAULTS: Partial<EfDatatableColumn> = {\n type: 'text',\n sortable: true,\n resizable: true,\n dateFormat: 'shortDate',\n currencyCode: 'MAD',\n currencyDisplay: 'symbol',\n locale: 'fr-FR',\n minFractionDigits: 2,\n maxFractionDigits: 2,\n referenceValueField: 'code',\n referenceLabelField: 'name'\n};\n\n/**\n * Default action column configuration\n */\nexport const EF_DATATABLE_ACTIONS_DEFAULTS: Required<EfDatatableActions> = {\n show: true,\n width: 'w-20',\n showEdit: true,\n showDelete: true,\n showDuplicate: false,\n position: 'end'\n};\n\n/**\n * Helper function to determine column alignment based on type\n * @param column - The column configuration\n * @returns The computed alignment\n */\nexport function getColumnAlignment(column: EfDatatableColumn): EfDatatableColumnAlign {\n if (column.align) return column.align;\n if (column.type === 'money' || column.type === 'number') return 'end';\n return 'start';\n}\n\n/**\n * Helper function to merge column configuration with defaults\n * @param column - The column configuration\n * @returns Column with defaults applied\n */\nexport function mergeColumnDefaults(column: EfDatatableColumn): EfDatatableColumn {\n return { ...EF_DATATABLE_COLUMN_DEFAULTS, ...column };\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ScreenContext } from '@elasticias/screens';\nimport { PermissionsEnum } from '@elasticias/types';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfButtonComponent } from '../../layout/ef-button/ef-button.component';\n\n@Component({\n selector: 'ef-datatable-actionbar',\n standalone: true,\n templateUrl: 'ef-datatable-actionbar.component.html',\n imports: [\n EfButtonComponent,\n TranslateModule,\n ],\n})\nexport class EfDatatableActionBarComponent {\n @Input() context?: ScreenContext;\n\n @Input() state?: string;\n\n @Output() duplicate = new EventEmitter();\n @Output() edit = new EventEmitter();\n @Output() delete = new EventEmitter();\n\n // Flags\n @Input() duplicateButton = true;\n @Input() editButton = true;\n @Input() deleteButton = true;\n\n get hasReadPermission(): boolean {\n return this.context?.isGranted(PermissionsEnum.Read) ?? false;\n }\n\n get hasEditPermission(): boolean {\n return this.context?.isGranted(PermissionsEnum.Edit) ?? false;\n }\n\n get hasDeletePermission(): boolean {\n return this.context?.isGranted(PermissionsEnum.Delete) ?? false;\n }\n\n duplicateAction() {\n this.duplicate.emit();\n }\n\n editAction() {\n this.edit.emit();\n }\n\n deleteAction() {\n this.delete.emit();\n }\n}\n","<div class=\"flex justify-end\" role=\"toolbar\" tabindex=\"0\" (click)=\"$event.stopPropagation()\" (keyup.enter)=\"$event.stopPropagation()\">\n @if (duplicateButton) {\n <ef-button\n icon=\"pi pi-copy\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipKey=\"common.duplicate\"\n (clickEvent)=\"duplicateAction()\" />\n }\n @if (editButton && hasEditPermission) {\n <ef-button\n icon=\"pi pi-pencil\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n size=\"small\"\n tooltipKey=\"common.edit\"\n (clickEvent)=\"editAction()\" />\n }\n @if (deleteButton && hasDeletePermission) {\n <ef-button\n icon=\"pi pi-trash\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n size=\"small\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.delete\"\n (clickEvent)=\"deleteAction()\" />\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n LOCALE_ID,\n OnInit,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Table, TableLazyLoadEvent, TableModule } from 'primeng/table';\nimport {\n EfDatatableActions,\n EfDatatableColumn,\n EfDatatableColumnAlign,\n EfDatatableConfig,\n EF_DATATABLE_ACTIONS_DEFAULTS,\n EF_DATATABLE_DEFAULTS,\n getColumnAlignment,\n mergeColumnDefaults,\n} from './ef-datatable.component.types';\nimport { ScreenContext } from '@elasticias/screens';\nimport { EfDatatableActionBarComponent } from '../ef-datatable-actionbar/ef-datatable-actionbar.component';\n\n/**\n * SearchEntity interface for datatable consumption.\n * Matches the shape expected from the consuming application's SearchEntity.\n */\nexport interface DatatableSearchEntity {\n items?: Record<string, unknown>[];\n totalCount?: number;\n pagination?: {\n pageNumber: number;\n pageSize: number;\n };\n sort?: Array<{\n field: string;\n sortDirection: string;\n }>;\n}\n\n/**\n * ef-datatable - Reusable table component wrapping PrimeNG Table\n *\n * Features:\n * - Typed columns with automatic formatting (text, number, money, date, datetime, boolean, reference)\n * - Built-in action column with edit/delete/duplicate buttons\n * - Support for custom templates\n * - PassThrough (PT) support for deep customization\n * - Lazy loading, pagination, sorting, column resizing\n * - State persistence (localStorage/sessionStorage)\n * - Reference data integration via ScreenContext\n *\n * @example\n * ```html\n * <ef-datatable\n * [columns]=\"tableColumns\"\n * [searchEntity]=\"searchEntity\"\n * [context]=\"context\"\n * [screenStateKey]=\"screenStateKey\"\n * [actions]=\"{ showDuplicate: true }\"\n * (editRow)=\"edit($event)\"\n * (deleteRow)=\"delete($event)\"\n * (lazyLoad)=\"search($event)\">\n * </ef-datatable>\n * ```\n */\n@Component({\n selector: 'ef-datatable',\n standalone: true,\n templateUrl: './ef-datatable.component.html',\n styleUrl: './ef-datatable.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TableModule,\n TranslateModule,\n EfDatatableActionBarComponent,\n ],\n})\nexport class EfDatatableComponent implements OnInit {\n /**\n * Reference to the underlying PrimeNG Table component\n */\n @ViewChild('pTable') pTable?: Table;\n\n selectedItem: Record<string, unknown> | undefined;\n\n // ============================================================================\n // INPUTS\n // ============================================================================\n\n /**\n * Column definitions with type, alignment, and formatting options\n */\n columns = input<EfDatatableColumn[]>([]);\n\n /**\n * Table configuration (pagination, scrolling, sizing, etc.)\n */\n config = input<EfDatatableConfig>({});\n\n /**\n * Action column configuration (edit/delete/duplicate buttons)\n */\n actions = input<EfDatatableActions | undefined>();\n\n /**\n * SearchEntity containing items, pagination, etc.\n */\n searchEntity = input<DatatableSearchEntity | undefined>();\n\n /**\n * ScreenContext for reference data access\n */\n context = input<ScreenContext | undefined>();\n\n /**\n * PassThrough options for deep DOM customization\n */\n pt = input<Record<string, unknown>>();\n\n /**\n * Screen state key for state persistence (auto-generates stateKey if not provided in config)\n */\n screenStateKey = input<string | undefined>();\n\n // ============================================================================\n // OUTPUTS\n // ============================================================================\n\n /**\n * Emitted when edit button is clicked (emits row ID)\n */\n editRow = output<unknown>();\n\n /**\n * Emitted when delete button is clicked (emits row ID)\n */\n deleteRow = output<unknown>();\n\n /**\n * Emitted when duplicate button is clicked (emits row ID)\n */\n duplicateRow = output<unknown>();\n\n /**\n * Emitted on lazy load events (pagination, sorting, filtering)\n */\n lazyLoad = output<TableLazyLoadEvent>();\n\n /**\n * Emitted when a row is selected\n */\n rowSelect = output<unknown>();\n\n // ============================================================================\n // INTERNAL STATE\n // ============================================================================\n\n /**\n * Loading indicator\n */\n loading = signal(false);\n\n /**\n * Merged configuration with defaults\n */\n mergedConfig!: Required<EfDatatableConfig>;\n\n /**\n * Merged action configuration with defaults\n */\n mergedActions!: Required<EfDatatableActions>;\n\n /**\n * Processed columns with defaults and computed alignment\n * Reactive to changes in columns input\n */\n processedColumns = computed(() => {\n return this.columns().map(col => {\n const merged = mergeColumnDefaults(col);\n return {\n ...merged,\n align: getColumnAlignment(merged)\n };\n });\n });\n\n /**\n * Computed sort field from searchEntity for restoring table state\n */\n sortField = computed(() => {\n const sort = this.searchEntity()?.sort;\n return sort && sort.length > 0 ? sort[0].field : undefined;\n });\n\n /**\n * Computed sort order from searchEntity for restoring table state\n * 1 = ascending, -1 = descending\n */\n sortOrder = computed(() => {\n const sort = this.searchEntity()?.sort;\n if (sort && sort.length > 0) {\n return sort[0].sortDirection === 'Ascending' ? 1 : -1;\n }\n return 1;\n });\n\n // Angular pipes for formatting (use app's configured locale)\n private readonly locale = inject(LOCALE_ID);\n private readonly datePipe = new DatePipe(this.locale);\n private readonly decimalPipe = new DecimalPipe(this.locale);\n private readonly currencyPipe = new CurrencyPipe(this.locale);\n\n // ============================================================================\n // LIFECYCLE HOOKS\n // ============================================================================\n\n ngOnInit(): void {\n // Merge config with defaults\n this.mergedConfig = { ...EF_DATATABLE_DEFAULTS, ...this.config() };\n\n // Merge action config with defaults (only if actions are provided)\n if (this.actions()) {\n this.mergedActions = { ...EF_DATATABLE_ACTIONS_DEFAULTS, ...this.actions() };\n } else {\n this.mergedActions = { ...EF_DATATABLE_ACTIONS_DEFAULTS, show: false };\n }\n\n // Auto-generate state key if not provided\n if (!this.mergedConfig.stateKey && this.screenStateKey()) {\n this.mergedConfig.stateKey = `APP_TABLE_${this.screenStateKey()}`;\n }\n }\n\n // ============================================================================\n // EVENT HANDLERS\n // ============================================================================\n\n /**\n * Handle lazy loading events from PrimeNG Table\n * Prevents duplicate events caused by reactive sortField/sortOrder binding updates\n * @param event - Table lazy load event containing pagination, sorting, filtering info\n */\n handleLazyLoad(event: TableLazyLoadEvent): void {\n // Skip if this event matches the current searchEntity state exactly.\n // This indicates a reactive binding echo: after parent updates searchEntity,\n // our sortField()/sortOrder() computed signals update, PrimeNG detects the\n // binding change and fires onLazyLoad again with the same values.\n if (this.isBindingEcho(event)) {\n return;\n }\n\n this.lazyLoad.emit(event);\n }\n\n /**\n * Detects if the event is a reactive binding echo (matches current searchEntity state)\n */\n private isBindingEcho(event: TableLazyLoadEvent): boolean {\n const entity = this.searchEntity();\n if (!entity?.sort || entity.sort.length === 0) {\n return false;\n }\n\n const currentSort = entity.sort[0];\n const eventSortField = Array.isArray(event.sortField)\n ? event.sortField[0]\n : event.sortField;\n const eventSortOrder = event.sortOrder ?? 1;\n const currentSortOrder = currentSort.sortDirection === 'Ascending' ? 1 : -1;\n\n // Calculate current and event page numbers\n const currentPage = entity.pagination?.pageNumber || 1;\n const currentPageSize = entity.pagination?.pageSize || 10;\n const eventFirst = event.first ?? 0;\n const eventRows = event.rows ?? 10;\n const eventPage = Math.floor(eventFirst / eventRows) + 1;\n\n // If event matches current state exactly, it's a binding echo\n return (\n currentSort.field === eventSortField &&\n currentSortOrder === eventSortOrder &&\n currentPage === eventPage &&\n currentPageSize === eventRows\n );\n }\n\n /**\n * Handle edit button click\n * @param rowData - The row data object\n */\n handleEdit(rowData: Record<string, unknown>): void {\n const id = rowData[this.mergedConfig.dataKey];\n this.editRow.emit(id);\n }\n\n handleDelete(rowData: Record<string, unknown>): void {\n const id = rowData[this.mergedConfig.dataKey];\n this.deleteRow.emit(id);\n }\n\n handleDuplicate(rowData: Record<string, unknown>): void {\n const id = rowData[this.mergedConfig.dataKey];\n this.duplicateRow.emit(id);\n }\n\n // ============================================================================\n // FORMATTING METHODS\n // ============================================================================\n\n /**\n * Format cell value based on column type\n * @param rowData - The row data object\n * @param column - The column configuration\n * @returns Formatted string value\n */\n formatCellValue(rowData: Record<string, unknown>, column: EfDatatableColumn): string | null {\n const value = rowData[column.field];\n if (value == null) return '';\n\n switch (column.type) {\n case 'date':\n return this.datePipe.transform(value as string | number | Date, column.dateFormat);\n\n case 'datetime':\n return this.datePipe.transform(value as string | number | Date, 'short');\n\n case 'number':\n return this.decimalPipe.transform(\n value as string | number,\n `1.${column.minFractionDigits}-${column.maxFractionDigits}`\n );\n\n case 'money':\n return this.currencyPipe.transform(\n value as string | number,\n column.currencyCode,\n column.currencyDisplay,\n `1.${column.minFractionDigits}-${column.maxFractionDigits}`\n );\n\n case 'boolean':\n return value ? 'Oui' : 'Non';\n\n case 'reference':\n return this.resolveReferenceValue(rowData, column);\n\n default:\n return String(value);\n }\n }\n\n /**\n * Resolve reference data value to display label\n * @param rowData - The row data object\n * @param column - The column configuration\n * @returns Display label from reference data\n */\n private resolveReferenceValue(rowData: Record<string, unknown>, column: EfDatatableColumn): string {\n const ctx = this.context();\n if (!ctx || !column.referenceKey) {\n return String(rowData[column.field]);\n }\n\n const refData = ctx.ref.get(column.referenceKey)();\n const value = rowData[column.field];\n\n if (!refData || !Array.isArray(refData)) {\n return String(value);\n }\n\n const valueField = column.referenceValueField ?? 'code';\n const labelField = column.referenceLabelField ?? 'name';\n const match = refData.find(\n (item: Record<string, unknown>) => item[valueField] === value\n );\n\n return match ? String(match[labelField]) : String(value);\n }\n\n /**\n * Get CSS class for text alignment\n * @param align - Alignment option\n * @returns CSS class name\n */\n getAlignmentClass(align?: EfDatatableColumnAlign): string {\n switch (align) {\n case 'start':\n return 'text-start';\n case 'center':\n return 'text-center';\n case 'end':\n return 'text-end';\n default:\n return 'text-start';\n }\n }\n\n // ============================================================================\n // PUBLIC API\n // ============================================================================\n\n /**\n * Reset table to first page and clear filters\n */\n reset(): void {\n this.pTable?.reset();\n }\n\n /**\n * Export table data as CSV\n */\n exportCSV(): void {\n this.pTable?.exportCSV();\n }\n\n /**\n * Get the current filter state\n */\n getFilters(): Record<string, unknown> | undefined {\n return this.pTable?.filters as Record<string, unknown> | undefined;\n }\n}\n","<p-table #pTable\n [value]=\"searchEntity()?.items || []\"\n [columns]=\"processedColumns()\"\n [dataKey]=\"mergedConfig.dataKey\"\n\n [lazy]=\"mergedConfig.lazy\"\n (onLazyLoad)=\"handleLazyLoad($event)\"\n\n [paginator]=\"mergedConfig.paginator\"\n [rows]=\"searchEntity()?.pagination?.pageSize || mergedConfig.rows\"\n [rowsPerPageOptions]=\"mergedConfig.rowsPerPageOptions\"\n [totalRecords]=\"searchEntity()?.totalCount || 0\"\n [first]=\"searchEntity()?.pagination ? (searchEntity()!.pagination!.pageNumber - 1) * searchEntity()!.pagination!.pageSize : 0\"\n\n [scrollable]=\"mergedConfig.scrollable\"\n [scrollHeight]=\"mergedConfig.scrollHeight\"\n\n [resizableColumns]=\"mergedConfig.resizableColumns\"\n [columnResizeMode]=\"mergedConfig.columnResizeMode\"\n\n [stateStorage]=\"mergedConfig.stateStorage\"\n [stateKey]=\"mergedConfig.stateKey\"\n\n [size]=\"mergedConfig.size\"\n [class]=\"mergedConfig.styleClass\"\n [tableStyle]=\"mergedConfig.tableStyle\"\n\n [currentPageReportTemplate]=\"searchEntity()?.totalCount ? 'Affichage de {first} a {last} sur {totalRecords} entrees' : mergedConfig.emptyMessage\"\n [showCurrentPageReport]=\"true\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n [loading]=\"loading()\"\n\n [pt]=\"pt()\"\n\n selectionMode=\"single\" [(selection)]=\"selectedItem\">\n\n <!-- Header Template -->\n <ng-template #header>\n <tr>\n <!-- Action column at start if configured -->\n @if (mergedActions.show && mergedActions.position === 'start') {\n <th [class]=\"mergedActions.width\"></th>\n }\n\n <!-- Data columns -->\n @for (column of processedColumns(); track column.field) {\n @if (column.sortable && column.resizable) {\n <th\n [pSortableColumn]=\"column.field\"\n pResizableColumn\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n <p-sortIcon [field]=\"column.field\" />\n }\n </th>\n } @else if (column.sortable) {\n <th\n [pSortableColumn]=\"column.field\"\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n <p-sortIcon [field]=\"column.field\" />\n }\n </th>\n } @else if (column.resizable) {\n <th\n pResizableColumn\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n }\n </th>\n } @else {\n <th\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n }\n </th>\n }\n }\n\n <!-- Action column at end if configured -->\n @if (mergedActions.show && mergedActions.position === 'end') {\n <th [class]=\"mergedActions.width\"></th>\n }\n </tr>\n </ng-template>\n\n <!-- Body Template -->\n <ng-template #body let-rowData let-rowIndex=\"rowIndex\">\n <tr (dblclick)=\"handleEdit(rowData)\" style=\"cursor: pointer\"\n [pSelectableRow]=\"rowData\" [pSelectableRowIndex]=\"rowIndex\">\n <!-- Action column at start if configured -->\n @if (mergedActions.show && mergedActions.position === 'start') {\n <td>\n <ef-datatable-actionbar\n [context]=\"context()\"\n (edit)=\"handleEdit(rowData)\"\n (delete)=\"handleDelete(rowData)\"\n (duplicate)=\"handleDuplicate(rowData)\">\n </ef-datatable-actionbar>\n </td>\n }\n\n <!-- Data columns -->\n @for (column of processedColumns(); track column.field) {\n <td [ngClass]=\"getAlignmentClass(column.align)\">\n @if (column.template) {\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: rowData, column: column }\"></ng-container>\n } @else {\n {{ formatCellValue(rowData, column) }}\n }\n </td>\n }\n\n <!-- Action column at end if configured -->\n @if (mergedActions.show && mergedActions.position === 'end') {\n <td>\n <ef-datatable-actionbar\n [context]=\"context()\"\n (edit)=\"handleEdit(rowData)\"\n (delete)=\"handleDelete(rowData)\"\n (duplicate)=\"handleDuplicate(rowData)\">\n </ef-datatable-actionbar>\n </td>\n }\n </tr>\n </ng-template>\n</p-table>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Input, OnInit, PLATFORM_ID } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport Lara from '@primeng/themes/lara';\nimport Material from '@primeng/themes/material';\nimport Nora from '@primeng/themes/nora';\nimport { PrimeNG } from 'primeng/config';\nimport { SelectButton } from 'primeng/selectbutton';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { EfThemeConfigService } from '@elasticias/core';\n\nconst PRESETS: Record<string, Record<string, unknown>> = {\n Aura,\n Lara,\n Material,\n Nora,\n};\n\n/**\n * Theme configurator panel for switching PrimeNG presets, primary colors,\n * surface palettes, ripple effect, and RTL direction.\n *\n * All labels use translation keys (ngx-translate). Pass keys via inputs.\n *\n * Usage:\n * ```html\n * <ef-theme-configurator\n * primaryLabelKey=\"configurator.primary_color\"\n * surfaceLabelKey=\"configurator.surface\"\n * presetLabelKey=\"configurator.preset\"\n * rippleLabelKey=\"configurator.ripple\"\n * rtlLabelKey=\"configurator.rtl\"\n * [presetsDisplayNameKeys]=\"{ Aura: 'configurator.preset_compact', Lara: 'configurator.preset_modern', Material: 'configurator.preset_google', Nora: 'configurator.preset_classic' }\"\n * />\n * ```\n */\n@Component({\n selector: 'ef-theme-configurator',\n standalone: true,\n template: `\n <div class=\"config-panel-content\">\n <div class=\"config-panel-colors\">\n <span class=\"config-panel-label\">{{ primaryLabelKey | translate }}</span>\n <div>\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n type=\"button\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"\n [ngClass]=\"{ 'active-color': primaryColor.name === selectedPrimaryColor() }\"\n [style]=\"{\n 'background-color': primaryColor.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette['500']\n }\"\n ></button>\n }\n </div>\n </div>\n\n <div class=\"config-panel-colors\">\n <span class=\"config-panel-label\">{{ surfaceLabelKey | translate }}</span>\n <div>\n @for (surface of surfaces; track surface.name) {\n <button\n type=\"button\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"\n [ngClass]=\"{ 'active-color': selectedSurfaceColor() ? selectedSurfaceColor() === surface.name : configService.appState().darkTheme ? surface.name === 'zinc' : surface.name === 'slate' }\"\n [style]=\"{\n 'background-color': surface.name === 'noir' ? 'var(--text-color)' : surface?.palette['500']\n }\"\n ></button>\n }\n </div>\n </div>\n\n <div class=\"config-panel-settings\">\n <span class=\"config-panel-label\">{{ presetLabelKey | translate }}</span>\n <p-selectbutton\n [options]=\"presetsOptions\"\n [ngModel]=\"selectedPreset()\"\n (ngModelChange)=\"onPresetChange($event)\"\n [allowEmpty]=\"false\"\n size=\"small\"\n >\n <ng-template #item let-item>\n {{ (presetsDisplayNameKeys[item] || item) | translate }}\n </ng-template>\n </p-selectbutton>\n </div>\n\n <div class=\"flex\">\n <div class=\"flex-1\">\n <div class=\"config-panel-settings\">\n <span class=\"config-panel-label\">{{ rippleLabelKey | translate }}</span>\n <p-toggleswitch [(ngModel)]=\"ripple\" />\n </div>\n </div>\n <div class=\"flex-1\">\n <div class=\"config-panel-settings items-end\">\n <span class=\"config-panel-label\">{{ rtlLabelKey | translate }}</span>\n <p-toggleswitch [ngModel]=\"isRTL\" (ngModelChange)=\"onRTLChange($event)\" />\n </div>\n </div>\n </div>\n </div>\n `,\n host: {},\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n SelectButton,\n ToggleSwitchModule,\n ],\n})\nexport class EfThemeConfiguratorComponent implements OnInit {\n @Input() primaryLabelKey = 'configurator.primary_color';\n @Input() surfaceLabelKey = 'configurator.surface';\n @Input() presetLabelKey = 'configurator.preset';\n @Input() rippleLabelKey = 'configurator.ripple';\n @Input() rtlLabelKey = 'configurator.rtl';\n @Input() presetsDisplayNameKeys: Record<string, string> = {\n Aura: 'configurator.preset_compact',\n Lara: 'configurator.preset_modern',\n Material: 'configurator.preset_google',\n Nora: 'configurator.preset_classic',\n };\n\n get ripple() {\n return this.config.ripple();\n }\n\n set ripple(value: boolean) {\n this.config.ripple.set(value);\n }\n\n get isRTL() {\n return this.configService.appState().RTL;\n }\n\n config: PrimeNG = inject(PrimeNG);\n configService: EfThemeConfigService = inject(EfThemeConfigService);\n platformId = inject(PLATFORM_ID);\n\n presetsOptions = Object.keys(PRESETS);\n\n onRTLChange(value: boolean) {\n this.configService.appState.update((state) => ({ ...state, RTL: value }));\n }\n\n ngOnInit() {\n this.onPresetChange(this.configService.appState().preset);\n }\n\n surfaces = [\n { name: 'slate', palette: { 0: '#ffffff', 50: '#f8fafc', 100: '#f1f5f9', 200: '#e2e8f0', 300: '#cbd5e1', 400: '#94a3b8', 500: '#64748b', 600: '#475569', 700: '#334155', 800: '#1e293b', 900: '#0f172a', 950: '#020617' } },\n { name: 'gray', palette: { 0: '#ffffff', 50: '#f9fafb', 100: '#f3f4f6', 200: '#e5e7eb', 300: '#d1d5db', 400: '#9ca3af', 500: '#6b7280', 600: '#4b5563', 700: '#374151', 800: '#1f2937', 900: '#111827', 950: '#030712' } },\n { name: 'zinc', palette: { 0: '#ffffff', 50: '#fafafa', 100: '#f4f4f5', 200: '#e4e4e7', 300: '#d4d4d8', 400: '#a1a1aa', 500: '#71717a', 600: '#52525b', 700: '#3f3f46', 800: '#27272a', 900: '#18181b', 950: '#09090b' } },\n { name: 'neutral', palette: { 0: '#ffffff', 50: '#fafafa', 100: '#f5f5f5', 200: '#e5e5e5', 300: '#d4d4d4', 400: '#a3a3a3', 500: '#737373', 600: '#525252', 700: '#404040', 800: '#262626', 900: '#171717', 950: '#0a0a0a' } },\n { name: 'stone', palette: { 0: '#ffffff', 50: '#fafaf9', 100: '#f5f5f4', 200: '#e7e5e4', 300: '#d6d3d1', 400: '#a8a29e', 500: '#78716c', 600: '#57534e', 700: '#44403c', 800: '#292524', 900: '#1c1917', 950: '#0c0a09' } },\n { name: 'soho', palette: { 0: '#ffffff', 50: '#ececec', 100: '#dedfdf', 200: '#c4c4c6', 300: '#adaeb0', 400: '#97979b', 500: '#7f8084', 600: '#6a6b70', 700: '#55565b', 800: '#3f4046', 900: '#2c2c34', 950: '#16161d' } },\n { name: 'viva', palette: { 0: '#ffffff', 50: '#f3f3f3', 100: '#e7e7e8', 200: '#cfd0d0', 300: '#b7b8b9', 400: '#9fa1a1', 500: '#87898a', 600: '#6e7173', 700: '#565a5b', 800: '#3e4244', 900: '#262b2c', 950: '#0e1315' } },\n { name: 'ocean', palette: { 0: '#ffffff', 50: '#fbfcfc', 100: '#F7F9F8', 200: '#EFF3F2', 300: '#DADEDD', 400: '#B1B7B6', 500: '#828787', 600: '#5F7274', 700: '#415B61', 800: '#29444E', 900: '#183240', 950: '#0c1920' } },\n ];\n\n selectedPrimaryColor = computed(() => this.configService.appState().primary);\n selectedSurfaceColor = computed(() => this.configService.appState().surface);\n selectedPreset = computed(() => this.configService.appState().preset);\n\n primaryColors = computed(() => {\n const presetPalette = (PRESETS[this.configService.appState().preset ?? ''] as Record<string, Record<string, unknown>> | undefined)?.primitive;\n const colors = ['emerald', 'green', 'lime', 'orange', 'amber', 'yellow', 'teal', 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose'];\n const palettes: { name: string; palette: Record<string, string> }[] = [{ name: 'noir', palette: {} }];\n\n colors.forEach((color) => {\n if (presetPalette?.[color]) {\n palettes.push({ name: color, palette: presetPalette[color] as Record<string, string> });\n }\n });\n\n return palettes;\n });\n\n getPresetExt(): Record<string, unknown> {\n const color = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor());\n\n if (color?.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}', 100: '{surface.100}', 200: '{surface.200}', 300: '{surface.300}',\n 400: '{surface.400}', 500: '{surface.500}', 600: '{surface.600}', 700: '{surface.700}',\n 800: '{surface.800}', 900: '{surface.900}', 950: '{surface.950}',\n },\n colorScheme: {\n light: {\n primary: { color: '{primary.950}', contrastColor: '#ffffff', hoverColor: '{primary.800}', activeColor: '{primary.700}' },\n highlight: { background: '{primary.950}', focusBackground: '{primary.700}', color: '#ffffff', focusColor: '#ffffff' },\n },\n dark: {\n primary: { color: '{primary.50}', contrastColor: '{primary.950}', hoverColor: '{primary.200}', activeColor: '{primary.300}' },\n highlight: { background: '{primary.50}', focusBackground: '{primary.300}', color: '{primary.950}', focusColor: '{primary.950}' },\n },\n },\n },\n };\n }\n\n const preset = this.configService.appState().preset;\n if (preset === 'Nora') {\n return {\n semantic: {\n primary: color?.palette,\n colorScheme: {\n light: {\n primary: { color: '{primary.600}', contrastColor: '#ffffff', hoverColor: '{primary.700}', activeColor: '{primary.800}' },\n highlight: { background: '{primary.600}', focusBackground: '{primary.700}', color: '#ffffff', focusColor: '#ffffff' },\n },\n dark: {\n primary: { color: '{primary.500}', contrastColor: '{surface.900}', hoverColor: '{primary.400}', activeColor: '{primary.300}' },\n highlight: { background: '{primary.500}', focusBackground: '{primary.400}', color: '{surface.900}', focusColor: '{surface.900}' },\n },\n },\n },\n };\n } else if (preset === 'Material') {\n return {\n semantic: {\n primary: color?.palette,\n colorScheme: {\n light: {\n primary: { color: '{primary.500}', contrastColor: '#ffffff', hoverColor: '{primary.400}', activeColor: '{primary.300}' },\n highlight: { background: 'color-mix(in srgb, {primary.color}, transparent 88%)', focusBackground: 'color-mix(in srgb, {primary.color}, transparent 76%)', color: '{primary.700}', focusColor: '{primary.800}' },\n },\n dark: {\n primary: { color: '{primary.400}', contrastColor: '{surface.900}', hoverColor: '{primary.300}', activeColor: '{primary.200}' },\n highlight: { background: 'color-mix(in srgb, {primary.400}, transparent 84%)', focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)', color: 'rgba(255,255,255,.87)', focusColor: 'rgba(255,255,255,.87)' },\n },\n },\n },\n };\n }\n\n return {\n semantic: {\n primary: color?.palette,\n colorScheme: {\n light: {\n primary: { color: '{primary.500}', contrastColor: '#ffffff', hoverColor: '{primary.600}', activeColor: '{primary.700}' },\n highlight: { background: '{primary.50}', focusBackground: '{primary.100}', color: '{primary.700}', focusColor: '{primary.800}' },\n },\n dark: {\n primary: { color: '{primary.400}', contrastColor: '{surface.900}', hoverColor: '{primary.300}', activeColor: '{primary.200}' },\n highlight: { background: 'color-mix(in srgb, {primary.400}, transparent 84%)', focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)', color: 'rgba(255,255,255,.87)', focusColor: 'rgba(255,255,255,.87)' },\n },\n },\n },\n };\n }\n\n updateColors(event: Event, type: string, color: { name: string; palette: Record<string, string> }) {\n if (type === 'primary') {\n this.configService.appState.update((state) => ({ ...state, primary: color.name }));\n } else if (type === 'surface') {\n this.configService.appState.update((state) => ({ ...state, surface: color.name }));\n }\n this.applyTheme(type, color);\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: { name: string; palette: Record<string, string> }) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n onPresetChange(event: string) {\n this.configService.appState.update((state) => ({ ...state, preset: event }));\n const preset = PRESETS[event];\n const surfacePalette = this.surfaces.find((s) => s.name === this.selectedSurfaceColor())?.palette;\n\n if (this.configService.appState().preset === 'Material') {\n document.body.classList.add('material');\n this.config.ripple.set(true);\n } else {\n document.body.classList.remove('material');\n this.config.ripple.set(false);\n }\n\n $t()\n .preset(preset)\n .preset(this.getPresetExt())\n .surfacePalette(surfacePalette)\n .use({ useDefaultOptions: true });\n\n // Lara gets fully rounded (pill-shaped) components; others use default preset radius\n updatePreset({\n primitive: {\n borderRadius: event === 'Lara'\n ? { none: '0', xs: '6px', sm: '12px', md: '16px', lg: '20px', xl: '28px' }\n : { none: '0', xs: '2px', sm: '4px', md: '6px', lg: '8px', xl: '12px' },\n },\n });\n }\n}\n","import { Component, computed, input, output } from '@angular/core';\nimport { CommonModule, DecimalPipe, DatePipe } from '@angular/common';\nimport { CardModule } from 'primeng/card';\nimport { TableModule } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { FormsModule } from '@angular/forms';\nimport type { EmailMetrics, EmailEventRecord, EmailEventKind } from '@elasticias/types';\n\ntype RangeKey = '7d' | '30d' | '90d';\n\n/**\n * Manager dashboard widget: email engagement KPIs, category breakdown, recent events.\n * Keep this presentational — host app fetches metrics + supplies `rangeChange` callback.\n *\n * @example\n * <ef-email-metrics-card\n * [metrics]=\"metrics()\"\n * [recentEvents]=\"events()\"\n * [loading]=\"loading()\"\n * (rangeChange)=\"reload($event)\"\n * />\n */\n@Component({\n selector: 'ef-email-metrics-card',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CardModule,\n TableModule,\n TagModule,\n ButtonModule,\n SelectButtonModule,\n DecimalPipe,\n DatePipe,\n ],\n templateUrl: './ef-email-metrics-card.component.html',\n styleUrl: './ef-email-metrics-card.component.scss',\n})\nexport class EfEmailMetricsCardComponent {\n metrics = input<EmailMetrics | null>(null);\n recentEvents = input<EmailEventRecord[]>([]);\n loading = input<boolean>(false);\n title = input<string>('Email engagement');\n\n selectedRange: RangeKey = '7d';\n rangeOptions = [\n { label: '7 j', value: '7d' },\n { label: '30 j', value: '30d' },\n { label: '90 j', value: '90d' },\n ];\n\n hasData = computed(() => (this.metrics()?.sent ?? 0) > 0);\n\n kpis = computed(() => {\n const m = this.metrics();\n if (!m) return [];\n return [\n { label: 'Envoyés', value: m.sent, tone: 'neutral' as const },\n { label: 'Taux d’ouverture', value: m.openRate, rate: true, tone: this.rateTone(m.openRate, 0.2, 0.35) },\n { label: 'Taux de clic', value: m.clickRate, rate: true, tone: this.rateTone(m.clickRate, 0.02, 0.05) },\n { label: 'Taux de rebond', value: m.bounceRate, rate: true, tone: this.rateTone(m.bounceRate, 0.05, 0.02, true) },\n ];\n });\n\n onRangeChange(value: RangeKey) {\n this.selectedRange = value;\n this.rangeChange.emit(value);\n }\n\n readonly rangeChange = output<RangeKey>();\n\n kindSeverity(kind: EmailEventKind): 'success' | 'info' | 'warn' | 'danger' | 'secondary' {\n switch (kind) {\n case 'Open': return 'success';\n case 'Click': return 'info';\n case 'SoftBounce': return 'warn';\n case 'HardBounce':\n case 'Spam': return 'danger';\n default: return 'secondary';\n }\n }\n\n private rateTone(rate: number, warnThreshold: number, goodThreshold: number, lowerIsBetter = false): 'good' | 'warn' | 'neutral' {\n if (lowerIsBetter) {\n if (rate > warnThreshold) return 'warn';\n if (rate < goodThreshold) return 'good';\n return 'neutral';\n }\n if (rate >= goodThreshold) return 'good';\n if (rate >= warnThreshold) return 'neutral';\n return 'warn';\n }\n}\n","<p-card styleClass=\"ef-email-metrics-card\">\n <ng-template pTemplate=\"header\">\n <div class=\"ef-email-metrics-card__header\">\n <div>\n <h3 class=\"ef-email-metrics-card__title\">{{ title() }}</h3>\n @if (metrics(); as m) {\n <p class=\"ef-email-metrics-card__subtitle\">\n {{ m.from | date: 'dd MMM' }} – {{ m.to | date: 'dd MMM yyyy' }}\n </p>\n }\n </div>\n <p-selectButton\n [options]=\"rangeOptions\"\n [(ngModel)]=\"selectedRange\"\n optionLabel=\"label\"\n optionValue=\"value\"\n styleClass=\"ef-email-metrics-card__range\"\n (onChange)=\"onRangeChange($event.value)\"\n />\n </div>\n </ng-template>\n\n @if (metrics(); as m) {\n <div class=\"ef-email-metrics-card__kpis\">\n @for (kpi of kpis(); track kpi.label) {\n <div class=\"ef-email-metrics-card__kpi\" [attr.data-tone]=\"kpi.tone\">\n <span class=\"ef-email-metrics-card__kpi-label\">{{ kpi.label }}</span>\n <span class=\"ef-email-metrics-card__kpi-value\">\n @if (kpi.rate) {\n {{ kpi.value | number: '1.1-1' : 'fr' }}\n <span class=\"ef-email-metrics-card__kpi-unit\">%</span>\n } @else {\n {{ kpi.value | number: '1.0-0' : 'fr' }}\n }\n </span>\n </div>\n }\n </div>\n\n @if (m.categories.length > 0) {\n <div class=\"ef-email-metrics-card__section\">\n <h4 class=\"ef-email-metrics-card__section-title\">Par catégorie</h4>\n <p-table [value]=\"m.categories\" styleClass=\"ef-email-metrics-card__table\" [scrollable]=\"true\" scrollHeight=\"180px\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>Catégorie</th>\n <th class=\"ef-email-metrics-card__num\">Envoyés</th>\n <th class=\"ef-email-metrics-card__num\">Ouverts</th>\n <th class=\"ef-email-metrics-card__num\">Cliqués</th>\n <th class=\"ef-email-metrics-card__num\">Rebonds</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-row>\n <tr>\n <td class=\"ef-email-metrics-card__category\">{{ row.category }}</td>\n <td class=\"ef-email-metrics-card__num\">{{ row.sent }}</td>\n <td class=\"ef-email-metrics-card__num\">{{ row.opened }}</td>\n <td class=\"ef-email-metrics-card__num\">{{ row.clicked }}</td>\n <td class=\"ef-email-metrics-card__num\" [class.ef-email-metrics-card__num--danger]=\"row.bounced > 0\">{{ row.bounced }}</td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\n\n @if (recentEvents().length > 0) {\n <div class=\"ef-email-metrics-card__section\">\n <h4 class=\"ef-email-metrics-card__section-title\">Événements récents</h4>\n <p-table [value]=\"recentEvents()\" styleClass=\"ef-email-metrics-card__table\" [scrollable]=\"true\" scrollHeight=\"240px\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>Quand</th>\n <th>Destinataire</th>\n <th>Catégorie</th>\n <th>Type</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-row>\n <tr>\n <td class=\"ef-email-metrics-card__when\">{{ row.occurredAt | date: 'dd/MM HH:mm' }}</td>\n <td class=\"ef-email-metrics-card__recipient\">{{ row.recipient }}</td>\n <td>{{ row.category || '—' }}</td>\n <td>\n <p-tag [severity]=\"kindSeverity(row.kind)\" [value]=\"row.kind\" styleClass=\"ef-email-metrics-card__kind\" />\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\n } @else {\n <div class=\"ef-email-metrics-card__empty\">\n <p-button label=\"Aucune donnée encore\" [text]=\"true\" icon=\"pi pi-envelope\" [disabled]=\"true\" />\n </div>\n }\n</p-card>\n","// Pipes\nexport { EfCurrencyPipe } from './lib/pipes/ef-currency.pipe';\nexport { TruncatePipe } from './lib/pipes/truncate.pipe';\n\n// Commerce\nexport { EfPriceDisplayComponent } from './lib/commerce/ef-price-display.component';\nexport { EfQuantitySelectorComponent } from './lib/commerce/ef-quantity-selector.component';\nexport { EfOrderBuilderComponent } from './lib/commerce/ef-order-builder/ef-order-builder.component';\nexport * from './lib/commerce/ef-order-builder/ef-order-builder.component.types';\nexport { EfOrderSummaryComponent } from './lib/commerce/ef-order-summary/ef-order-summary.component';\nexport type { ProductCountGroup, ProductCountGroupLabel, ProductWithCountGroup } from './lib/commerce/ef-order-summary/ef-order-summary.component';\nexport { EfProductCatalogueFilterComponent } from './lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nexport type { CategoryItem, CategoryGroup, CategoryAssignment, SelectedFilter } from './lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nexport { EfProductCatalogueComponent } from './lib/commerce/ef-product-catalogue/ef-product-catalogue.component';\nexport type { CatalogueProduct, CatalogueProductVariant } from './lib/commerce/ef-product-catalogue/ef-product-catalogue.component';\n\n// Layout components\nexport { EfDialogComponent } from './lib/layout/ef-dialog/ef-dialog.component';\nexport { EfFieldsetComponent } from './lib/layout/ef-fieldset/ef-fieldset.component';\nexport { EfButtonComponent } from './lib/layout/ef-button/ef-button.component';\nexport { EfLabelComponent } from './lib/layout/ef-label/ef-label.component';\nexport { EfBadgeComponent } from './lib/layout/ef-badge/ef-badge.component';\nexport * from './lib/layout/ef-badge/ef-badge.component.types';\nexport { EfToolbarComponent } from './lib/layout/ef-toolbar/ef-toolbar.component';\n\n// Feedback components\nexport { EfBlockUiComponent } from './lib/feedback/ef-block-ui/ef-block-ui.component';\nexport { EfBlockableDivComponent } from './lib/feedback/ef-blockable-div/ef-blockable-div.component';\n\n// Forms\nexport * from './lib/forms';\n\n// Data components\nexport { EfDatatableComponent } from './lib/data/ef-datatable/ef-datatable.component';\nexport type { DatatableSearchEntity } from './lib/data/ef-datatable/ef-datatable.component';\nexport * from './lib/data/ef-datatable/ef-datatable.component.types';\nexport { EfDatatableActionBarComponent } from './lib/data/ef-datatable-actionbar/ef-datatable-actionbar.component';\n\n// Theme\nexport { EfThemeConfiguratorComponent } from './lib/ef-theme-configurator/ef-theme-configurator.component';\n\n// Analytics\nexport { EfEmailMetricsCardComponent } from './lib/analytics/ef-email-metrics-card/ef-email-metrics-card.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4","i2","i5","i7","i9","i6","i8","i10"],"mappings":"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"}
1
+ {"version":3,"file":"elasticias-ui.mjs","sources":["../../../../libs/ui/src/lib/pipes/ef-currency.pipe.ts","../../../../libs/ui/src/lib/pipes/truncate.pipe.ts","../../../../libs/ui/src/lib/commerce/ef-price-display.component.ts","../../../../libs/ui/src/lib/commerce/ef-quantity-selector.component.ts","../../../../libs/ui/src/lib/commerce/ef-order-builder/ef-order-builder.component.types.ts","../../../../libs/ui/src/lib/commerce/ef-order-summary/ef-order-summary.component.ts","../../../../libs/ui/src/lib/commerce/ef-order-summary/ef-order-summary.component.html","../../../../libs/ui/src/lib/layout/ef-label/ef-label.component.ts","../../../../libs/ui/src/lib/forms/ef-select/ef-select.component.ts","../../../../libs/ui/src/lib/forms/ef-select/ef-select.component.html","../../../../libs/ui/src/lib/forms/ef-datepicker/ef-datepicker.component.ts","../../../../libs/ui/src/lib/forms/ef-datepicker/ef-datepicker.component.html","../../../../libs/ui/src/lib/forms/ef-inputnumber/ef-inputnumber.component.ts","../../../../libs/ui/src/lib/forms/ef-inputnumber/ef-inputnumber.component.html","../../../../libs/ui/src/lib/layout/ef-fieldset/ef-fieldset.component.ts","../../../../libs/ui/src/lib/layout/ef-fieldset/ef-fieldset.component.html","../../../../libs/ui/src/lib/layout/ef-button/ef-button.component.ts","../../../../libs/ui/src/lib/layout/ef-button/ef-button.component.html","../../../../libs/ui/src/lib/commerce/ef-order-builder/ef-order-builder.component.ts","../../../../libs/ui/src/lib/commerce/ef-order-builder/ef-order-builder.component.html","../../../../libs/ui/src/lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component.ts","../../../../libs/ui/src/lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component.html","../../../../libs/ui/src/lib/forms/ef-quantity-stepper/ef-quantity-stepper.component.ts","../../../../libs/ui/src/lib/forms/ef-quantity-stepper/ef-quantity-stepper.component.html","../../../../libs/ui/src/lib/commerce/ef-product-catalogue/ef-product-catalogue.component.ts","../../../../libs/ui/src/lib/commerce/ef-product-catalogue/ef-product-catalogue.component.html","../../../../libs/ui/src/lib/layout/ef-dialog/ef-dialog.component.ts","../../../../libs/ui/src/lib/layout/ef-dialog/ef-dialog.component.html","../../../../libs/ui/src/lib/layout/ef-badge/ef-badge.component.types.ts","../../../../libs/ui/src/lib/layout/ef-badge/ef-badge.component.ts","../../../../libs/ui/src/lib/layout/ef-badge/ef-badge.component.html","../../../../libs/ui/src/lib/layout/ef-toolbar/ef-toolbar.component.ts","../../../../libs/ui/src/lib/layout/ef-toolbar/ef-toolbar.component.html","../../../../libs/ui/src/lib/feedback/ef-block-ui/ef-block-ui.component.ts","../../../../libs/ui/src/lib/feedback/ef-block-ui/ef-block-ui.component.html","../../../../libs/ui/src/lib/feedback/ef-blockable-div/ef-blockable-div.component.ts","../../../../libs/ui/src/lib/forms/ef-input-text/ef-input-text.component.ts","../../../../libs/ui/src/lib/forms/ef-input-text/ef-input-text.component.html","../../../../libs/ui/src/lib/forms/ef-checkbox/ef-checkbox.component.ts","../../../../libs/ui/src/lib/forms/ef-checkbox/ef-checkbox.component.html","../../../../libs/ui/src/lib/forms/ef-password/ef-password.component.ts","../../../../libs/ui/src/lib/forms/ef-password/ef-password.component.html","../../../../libs/ui/src/lib/forms/ef-multi-select/ef-multi-select.component.ts","../../../../libs/ui/src/lib/forms/ef-multi-select/ef-multi-select.component.html","../../../../libs/ui/src/lib/forms/ef-selectbutton/ef-selectbutton.component.ts","../../../../libs/ui/src/lib/forms/ef-selectbutton/ef-selectbutton.component.html","../../../../libs/ui/src/lib/forms/index.ts","../../../../libs/ui/src/lib/data/ef-datatable/ef-datatable.component.types.ts","../../../../libs/ui/src/lib/data/ef-datatable-actionbar/ef-datatable-actionbar.component.ts","../../../../libs/ui/src/lib/data/ef-datatable-actionbar/ef-datatable-actionbar.component.html","../../../../libs/ui/src/lib/data/ef-datatable/ef-datatable.component.ts","../../../../libs/ui/src/lib/data/ef-datatable/ef-datatable.component.html","../../../../libs/ui/src/lib/ef-theme-configurator/ef-theme-configurator.component.ts","../../../../libs/ui/src/lib/analytics/ef-email-metrics-card/ef-email-metrics-card.component.ts","../../../../libs/ui/src/lib/analytics/ef-email-metrics-card/ef-email-metrics-card.component.html","../../../../libs/ui/src/index.ts","../../../../libs/ui/src/elasticias-ui.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Merged currency pipe from ERP (AppCurrencyPipe) and Store (CurrencyFormatPipe).\n * Uses Intl.NumberFormat for formatting — no CurrencyPipe dependency needed.\n * Default: MAD currency, fr-MA locale.\n */\n@Pipe({ name: 'efCurrency', standalone: true })\nexport class EfCurrencyPipe implements PipeTransform {\n transform(value: number | null | undefined, currency = 'MAD', locale = 'fr-MA'): string {\n if (value == null) return '';\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'truncate', standalone: true })\nexport class TruncatePipe implements PipeTransform {\n transform(value: string, maxLength = 50, suffix = '...'): string {\n if (!value) return '';\n return value.length > maxLength ? value.slice(0, maxLength) + suffix : value;\n }\n}\n","import { Component, input } from '@angular/core';\nimport { EfCurrencyPipe } from '../pipes/ef-currency.pipe';\n\n@Component({\n selector: 'ef-price-display',\n standalone: true,\n imports: [EfCurrencyPipe],\n template: `<span class=\"font-medium\">{{ amount() | efCurrency }}</span>`,\n})\nexport class EfPriceDisplayComponent {\n readonly amount = input.required<number>();\n}\n","import { Component, input, output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'ef-quantity-selector',\n standalone: true,\n imports: [ButtonModule],\n template: `\n <div class=\"flex items-center gap-2\">\n <p-button\n icon=\"pi pi-minus\"\n [rounded]=\"true\"\n [text]=\"true\"\n size=\"small\"\n (onClick)=\"decrement()\"\n [disabled]=\"quantity() <= 1\"\n />\n <span class=\"w-8 text-center font-medium\">{{ quantity() }}</span>\n <p-button\n icon=\"pi pi-plus\"\n [rounded]=\"true\"\n [text]=\"true\"\n size=\"small\"\n (onClick)=\"increment()\"\n />\n </div>\n `,\n})\nexport class EfQuantitySelectorComponent {\n readonly quantity = input(1);\n readonly quantityChange = output<number>();\n\n increment(): void {\n this.quantityChange.emit(this.quantity() + 1);\n }\n\n decrement(): void {\n if (this.quantity() > 1) {\n this.quantityChange.emit(this.quantity() - 1);\n }\n }\n}\n","import { UuidUtils } from '@elasticias/utils';\n\n/**\n * Summary item for product count groups\n */\nexport interface OrderSummaryItem {\n code: string;\n label: string;\n count: number;\n column: number;\n}\n\n/**\n * Order products summary grouped by countGroup\n */\nexport interface OrderProductsSummary {\n items: OrderSummaryItem[];\n totalCount: number;\n}\n\n/**\n * Represents a line item in an order, invoice, or quote\n */\nexport interface OrderLineItem {\n id?: string | number;\n product?: Record<string, unknown>;\n productId?: unknown;\n variantId?: string | null;\n countGroup?: string;\n productDescription?: string;\n productUnitPrice: number;\n quantity: number;\n discount: number;\n grossAmount: number;\n amount?: number;\n taxeId?: number | null;\n taxRate?: number;\n taxAmount?: number;\n position?: number;\n isEditing?: boolean;\n editingField?: string | null;\n}\n\n/**\n * Standard order entity contract\n */\nexport interface OrderEntity {\n // Core identification\n id?: number;\n documentNumber?: string;\n documentType: 'order' | 'invoice' | 'quote';\n status?: 'draft' | 'confirmed' | 'processing' | 'completed' | 'cancelled';\n\n // Customer information\n customerId?: string | null;\n customerName?: string;\n\n // Dates\n orderDate: Date;\n deliveryDate?: Date | null;\n dueDate?: Date | null;\n\n // Line items\n orderLines: OrderLineItem[];\n\n // Financial calculations\n grossTotal: number;\n discountTotal: number;\n taxTotal: number;\n finalTotal: number;\n\n // Optional fields\n notes?: string;\n internalNotes?: string;\n paymentTerms?: string;\n shippingAddress?: string;\n billingAddress?: string;\n\n // Products summary by countGroup\n productsSummary?: OrderProductsSummary;\n}\n\n/**\n * Configuration for document types (order, invoice, quote)\n */\nexport interface DocumentConfig {\n documentType: 'order' | 'invoice' | 'quote';\n headerLabel: string;\n dateLabel: string;\n customerLabel: string;\n enableTax?: boolean;\n enableDiscount?: boolean;\n showCatalogue?: boolean;\n allowInlineEdit?: boolean;\n enableQuickAdd?: boolean;\n showNotes?: boolean;\n showProductsSummary?: boolean;\n currencyCode?: string;\n locale?: string;\n}\n\n/**\n * Change tracking metadata\n */\nexport interface OrderChangeInfo {\n hasChanges: boolean;\n lastModified: Date;\n modifiedFields: Set<string>;\n}\n\n/**\n * Validation result\n */\nexport interface ValidationResult {\n isValid: boolean;\n errors: { [key: string]: string[] };\n warnings?: { [key: string]: string[] };\n}\n\n/**\n * Helper functions for order line items\n */\nexport class OrderLineItemHelper {\n /**\n * Calculate subtotal for a line item (price * quantity - discount)\n */\n static calculateSubtotal(item: OrderLineItem): number {\n if (!item.productUnitPrice || !item.quantity) return 0;\n const subtotal = item.productUnitPrice * item.quantity;\n const discount = item.discount || 0;\n return subtotal - (subtotal * discount) / 100;\n }\n\n /**\n * Calculate tax amount for a line item\n */\n static calculateTaxAmount(item: OrderLineItem): number {\n if (!item.taxRate) return 0;\n const subtotal = this.calculateSubtotal(item);\n return (subtotal * item.taxRate) / 100;\n }\n\n /**\n * Calculate final amount including tax\n */\n static calculateFinalAmount(item: OrderLineItem): number {\n const subtotal = this.calculateSubtotal(item);\n const taxAmount = this.calculateTaxAmount(item);\n return subtotal + taxAmount;\n }\n\n /**\n * Compose a line description from a product and (optionally) its variant.\n * Variable product → \"{displayName} ({variantTitle})\"\n * Simple product → displayName\n * Mirrors the legacy PDF format `[PF] {ref} - {NAME} ({volume})` after\n * the parent displayName has been cleaned of its baked-in volume suffix.\n */\n static composeDescription(\n product: Record<string, unknown> | null | undefined,\n variant?: Record<string, unknown>,\n ): string {\n if (!product) return '';\n const base = (product['displayName'] || product['name'] || '') as string;\n if (!base) return '';\n const title = variant?.['title'] as string | undefined;\n if (title && title.trim().length > 0) {\n return `${base} (${title})`;\n }\n return base;\n }\n\n /**\n * Create a new empty line item\n */\n static createEmptyItem(): OrderLineItem {\n return {\n id: UuidUtils.randomUUID(),\n product: null,\n productId: undefined,\n productUnitPrice: 0,\n quantity: 1,\n discount: 0,\n grossAmount: 0,\n taxRate: 0,\n taxAmount: 0,\n isEditing: true,\n editingField: null,\n };\n }\n\n /**\n * Create a line item from product selection\n * @param keyField - Field name used to identify the product (default: 'id')\n */\n static createFromProduct(product: Record<string, unknown>, quantity = 1, keyField = 'id', variantId?: string): OrderLineItem {\n // Resolve variant data if variantId is provided and product has variants\n const variants = product['variants'] as Array<Record<string, unknown>> | undefined;\n const variant = variantId && variants?.length\n ? variants.find((v) => v['variantId'] === variantId)\n : undefined;\n\n const unitPrice = variant?.['price'] ?? product.unitPrice ?? product.salePrice ?? 0;\n const taxRate = product.taxRate || 0;\n const countGroup = (variant?.['countGroup'] ?? product['countGroup'] ?? '') as string;\n\n const item: OrderLineItem = {\n id: UuidUtils.randomUUID(),\n productId: product[keyField] as string,\n variantId: variantId ?? null,\n countGroup: countGroup,\n product: product,\n productDescription: OrderLineItemHelper.composeDescription(product, variant),\n productUnitPrice: unitPrice as number,\n quantity: quantity,\n discount: 0,\n grossAmount: 0,\n amount: 0,\n taxeId: (product.taxeId || null) as number | null,\n taxRate: taxRate as number,\n taxAmount: 0,\n isEditing: false,\n editingField: null,\n };\n\n // Calculate amounts\n item.grossAmount = OrderLineItemHelper.calculateSubtotal(item);\n item.taxAmount = OrderLineItemHelper.calculateTaxAmount(item);\n item.amount = OrderLineItemHelper.calculateFinalAmount(item);\n\n return item;\n }\n\n /**\n * Update calculations for an existing line item\n */\n static updateCalculations(item: OrderLineItem): OrderLineItem {\n return {\n ...item,\n grossAmount: this.calculateSubtotal(item),\n taxAmount: this.calculateTaxAmount(item),\n amount: this.calculateFinalAmount(item),\n };\n }\n\n /**\n * Validate a line item\n */\n static validate(item: OrderLineItem): ValidationResult {\n const errors: { [key: string]: string[] } = {};\n\n if (!item.product && !item.productId) {\n errors['product'] = ['Le produit est requis'];\n }\n\n if (!item.productUnitPrice || item.productUnitPrice <= 0) {\n errors['productUnitPrice'] = [\"Le prix d'unité doit être supérieur à 0\"];\n }\n\n if (!item.quantity || item.quantity <= 0) {\n errors['quantity'] = ['La quantité doit être supérieure à 0'];\n }\n\n if (item.discount && (item.discount < 0 || item.discount > 100)) {\n errors['discount'] = ['La remise doit être entre 0 et 100'];\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors,\n };\n }\n\n /**\n * Compare two line items for equality\n */\n static areEqual(item1: OrderLineItem, item2: OrderLineItem): boolean {\n return (\n item1.productId === item2.productId &&\n item1.productUnitPrice === item2.productUnitPrice &&\n item1.quantity === item2.quantity &&\n item1.discount === item2.discount &&\n item1.taxRate === item2.taxRate\n );\n }\n}\n\n/**\n * Helper functions for order entity\n */\nexport class OrderEntityHelper {\n /**\n * Create a new empty order entity\n */\n static createEmpty(\n documentType: 'order' | 'invoice' | 'quote' = 'order',\n ): OrderEntity {\n return {\n documentType,\n orderDate: new Date(),\n orderLines: [],\n grossTotal: 0,\n discountTotal: 0,\n taxTotal: 0,\n finalTotal: 0,\n status: 'draft',\n };\n }\n\n /**\n * Calculate all totals for an order\n */\n static calculateTotals(order: OrderEntity): OrderEntity {\n const grossTotal = order.orderLines.reduce(\n (total, item) =>\n total + (item.productUnitPrice || 0) * (item.quantity || 0),\n 0,\n );\n\n const discountTotal = order.orderLines.reduce((total, item) => {\n const itemTotal = (item.productUnitPrice || 0) * (item.quantity || 0);\n const discount = item.discount || 0;\n return total + (itemTotal * discount) / 100;\n }, 0);\n\n const taxTotal = order.orderLines.reduce((total, item) => {\n return total + (item.taxAmount || 0);\n }, 0);\n\n const finalTotal = grossTotal - discountTotal + taxTotal;\n\n return {\n ...order,\n grossTotal,\n discountTotal,\n taxTotal,\n finalTotal,\n };\n }\n\n /**\n * Validate order entity\n */\n static validate(order: OrderEntity): ValidationResult {\n const errors: { [key: string]: string[] } = {};\n const warnings: { [key: string]: string[] } = {};\n\n // Validate required fields\n if (!order.customerId) {\n errors['customerId'] = ['Le client est requis'];\n }\n\n if (!order.orderDate) {\n errors['orderDate'] = ['La date est requise'];\n }\n\n if (!order.orderLines || order.orderLines.length === 0) {\n errors['orderLines'] = ['Au moins un article est requis'];\n }\n\n // Validate line items\n order.orderLines.forEach((item, index) => {\n const itemValidation = OrderLineItemHelper.validate(item);\n if (!itemValidation.isValid) {\n Object.keys(itemValidation.errors).forEach((key) => {\n errors[`orderLines[${index}].${key}`] = itemValidation.errors[key];\n });\n }\n });\n\n // Check for warnings\n if (order.finalTotal <= 0) {\n warnings['finalTotal'] = ['Le montant total est invalide'];\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors,\n warnings,\n };\n }\n\n /**\n * Clone order entity for immutability\n */\n static clone(order: OrderEntity): OrderEntity {\n return {\n ...order,\n orderDate: new Date(order.orderDate),\n deliveryDate: order.deliveryDate ? new Date(order.deliveryDate) : null,\n dueDate: order.dueDate ? new Date(order.dueDate) : null,\n orderLines: order.orderLines.map((item) => ({ ...item })),\n };\n }\n\n /**\n * Compare two orders for changes\n */\n static detectChanges(\n original: OrderEntity,\n current: OrderEntity,\n ): OrderChangeInfo {\n const modifiedFields = new Set<string>();\n\n // Compare basic fields\n const fieldsToCompare: (keyof OrderEntity)[] = [\n 'customerId',\n 'orderDate',\n 'deliveryDate',\n 'dueDate',\n 'notes',\n 'internalNotes',\n 'status',\n ];\n\n fieldsToCompare.forEach((field) => {\n if (original[field] !== current[field]) {\n modifiedFields.add(field as string);\n }\n });\n\n // Compare order items\n if (original.orderLines.length !== current.orderLines.length) {\n modifiedFields.add('orderLines');\n } else {\n for (let i = 0; i < original.orderLines.length; i++) {\n if (\n !OrderLineItemHelper.areEqual(\n original.orderLines[i],\n current.orderLines[i],\n )\n ) {\n modifiedFields.add('orderLines');\n break;\n }\n }\n }\n\n return {\n hasChanges: modifiedFields.size > 0,\n lastModified: new Date(),\n modifiedFields,\n };\n }\n}\n","import { Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { OrderLineItem } from '../ef-order-builder/ef-order-builder.component.types';\n\n/**\n * Product count group entry for displaying grouped counts\n */\nexport interface ProductCountGroup {\n code: string;\n label: string;\n count: number;\n column: number;\n}\n\n/**\n * Reference data item for product count group labels\n */\nexport interface ProductCountGroupLabel {\n code: string;\n label: string;\n description?: string;\n isActive?: boolean;\n sortOrder?: number;\n column?: number;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Product with countGroup field\n */\nexport interface ProductWithCountGroup {\n countGroup?: string;\n [key: string]: unknown;\n}\n\n/**\n * Displays a summary of product quantities grouped by their countGroup field.\n * Maps countGroup codes to labels from product_count_group_labels reference data.\n *\n * @example\n * <ef-order-summary\n * [orderLines]=\"orderLines()\"\n * [countGroupLabels]=\"countGroupLabels\"\n * />\n */\n@Component({\n selector: 'ef-order-summary',\n standalone: true,\n imports: [CommonModule, FieldsetModule],\n templateUrl: './ef-order-summary.component.html',\n styleUrl: './ef-order-summary.component.scss',\n})\nexport class EfOrderSummaryComponent {\n /**\n * Order line items to summarize\n */\n orderLines = input.required<OrderLineItem[]>();\n\n /**\n * Product count group labels from reference data\n */\n countGroupLabels = input<ProductCountGroupLabel[]>([]);\n\n /**\n * Legend text for the fieldset\n */\n legend = input<string>('Récapitulatif');\n\n /**\n * Computed grouped counts by countGroup\n */\n groupedCounts = computed<ProductCountGroup[]>(() => {\n const lines = this.orderLines();\n const labels = this.countGroupLabels();\n\n const countMap = new Map<string, number>();\n\n lines.forEach((line) => {\n const product = line.product as ProductWithCountGroup;\n const countGroup = (line as { countGroup?: string }).countGroup || product?.countGroup;\n\n if (countGroup) {\n const currentCount = countMap.get(countGroup) || 0;\n countMap.set(countGroup, currentCount + (line.quantity || 0));\n }\n });\n\n const groups: ProductCountGroup[] = [];\n\n countMap.forEach((count, code) => {\n const labelItem = labels.find(\n (l) => l.code.toUpperCase() === code.toUpperCase(),\n );\n groups.push({\n code,\n label: labelItem?.label || code,\n count,\n column: labelItem?.column ?? 1,\n });\n });\n\n // Sort by the sortOrder from labels, then by label alphabetically\n groups.sort((a, b) => {\n const labelA = labels.find(\n (l) => l.code.toUpperCase() === a.code.toUpperCase(),\n );\n const labelB = labels.find(\n (l) => l.code.toUpperCase() === b.code.toUpperCase(),\n );\n const orderA = labelA?.sortOrder ?? 999;\n const orderB = labelB?.sortOrder ?? 999;\n\n if (orderA !== orderB) {\n return orderA - orderB;\n }\n return a.label.localeCompare(b.label);\n });\n\n return groups;\n });\n\n /**\n * Total quantity across all groups\n */\n totalCount = computed(() => {\n return this.groupedCounts().reduce((sum, group) => sum + group.count, 0);\n });\n\n /**\n * Split groups into columns based on column field from reference data\n */\n columnGroups = computed(() => {\n const groups = this.groupedCounts();\n const columnMap = new Map<number, ProductCountGroup[]>();\n\n groups.forEach((group) => {\n const colIndex = group.column;\n if (!columnMap.has(colIndex)) {\n columnMap.set(colIndex, []);\n }\n const col = columnMap.get(colIndex);\n if (col) {\n col.push(group);\n }\n });\n\n // Sort columns by key and return as array\n const sortedKeys = Array.from(columnMap.keys()).sort((a, b) => a - b);\n return sortedKeys.map((key) => columnMap.get(key) as ProductCountGroup[]);\n });\n\n /**\n * Check if there are any groups to display\n */\n hasGroups = computed(() => this.groupedCounts().length > 0);\n}\n","@if (hasGroups()) {\n <p-fieldset [legend]=\"legend()\">\n <div class=\"ef-order-summary\">\n <div class=\"ef-order-summary__content\">\n @for (column of columnGroups(); track $index) {\n <div class=\"ef-order-summary__column\">\n @for (group of column; track group.code) {\n <div class=\"ef-order-summary__item\">\n <span class=\"ef-order-summary__label\">{{ group.label }}:</span>\n <span class=\"ef-order-summary__count\">{{ group.count }}</span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ef-order-summary__footer\">\n <span class=\"ef-order-summary__total-label\">Total:</span>\n <span class=\"ef-order-summary__total-count\">{{ totalCount() }}</span>\n </div>\n </div>\n </p-fieldset>\n}\n","import {\n booleanAttribute,\n Component,\n Input,\n} from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-label',\n standalone: true,\n template: `<label [attr.for]=\"for\" [class]=\"styleClass\" [class.required]=\"required\">{{ labelKey ? (labelKey | translate) : label }}</label>`,\n styles: [`:host { display: contents; }`],\n imports: [TranslateModule],\n})\nexport class EfLabelComponent {\n /** Direct label text (not translated) */\n @Input() label?: string;\n /** Translation key — takes priority over label */\n @Input() labelKey?: string;\n /** The for attribute linking to an input id */\n @Input() for?: string;\n /** CSS classes for the label element */\n @Input() styleClass = 'form-label';\n /** Show required indicator */\n @Input({ transform: booleanAttribute }) required = false;\n}\n","import {\n booleanAttribute,\n Component,\n ContentChild,\n forwardRef,\n HostBinding,\n inject,\n Injector,\n Input,\n OnInit,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { SelectModule } from 'primeng/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-select',\n standalone: true,\n templateUrl: './ef-select.component.html',\n styleUrls: ['./ef-select.component.scss'],\n imports: [SelectModule, FormsModule, TranslateModule, EfLabelComponent, CommonModule],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EfSelectComponent),\n multi: true,\n }],\n})\nexport class EfSelectComponent implements ControlValueAccessor, OnInit, OnChanges {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() options: any[] = [];\n @Input() optionLabel = 'name';\n @Input() optionValue?: string;\n @Input() placeholder = '';\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input({ transform: booleanAttribute }) filter = false;\n @Input({ transform: booleanAttribute }) showClear = false;\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input() appendTo?: string;\n\n /** Filter options by matching key-value pairs */\n @Input() filterByKeys?: { [key: string]: any };\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @ContentChild('item') itemTemplate: TemplateRef<any> | null = null;\n @ContentChild('selectedItem') selectedItemTemplate: TemplateRef<any> | null = null;\n\n @Output() selectionChangeEvent = new EventEmitter<any>();\n\n value: any = null;\n filteredOptions: any[] = [];\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n /** Resolved lazily in ngOnInit to avoid circular DI with NG_VALUE_ACCESSOR */\n ngControl: NgControl | null = null;\n private readonly injector = inject(Injector);\n private readonly translateService = inject(TranslateService);\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options'] || changes['filterByKeys']) {\n this.applyFilters();\n }\n }\n\n writeValue(value: any): void {\n this.value = value ?? null;\n }\n\n registerOnChange(fn: (value: any) => 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 handleSelectionChange(event: { originalEvent?: Event; value: any }): void {\n const val = event?.value ?? null;\n this.value = val;\n this.onChange(val);\n this.onTouched();\n this.selectionChangeEvent.emit(val);\n }\n\n handleClear(): void {\n this.value = null;\n this.onChange(null);\n this.onTouched();\n this.selectionChangeEvent.emit(null);\n }\n\n private applyFilters(): void {\n if (this.options && this.filterByKeys && typeof this.filterByKeys === 'object') {\n this.filteredOptions = this.options.filter(option =>\n Object.keys(this.filterByKeys!).every(key => option[key] === this.filterByKeys![key])\n );\n } else {\n this.filteredOptions = this.options ?? [];\n }\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-select\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (onChange)=\"handleSelectionChange($event)\"\n (onClear)=\"handleClear()\"\n [options]=\"filteredOptions\"\n [optionLabel]=\"optionLabel\"\n [optionValue]=\"optionValue\"\n [placeholder]=\"effectivePlaceholder\"\n [size]=\"size\"\n [filter]=\"filter\"\n [showClear]=\"showClear\"\n [disabled]=\"disabled\"\n [appendTo]=\"appendTo\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n fluid\n >\n @if (itemTemplate) {\n <ng-template #item let-item>\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (selectedItemTemplate) {\n <ng-template #selectedItem let-item>\n <ng-container *ngTemplateOutlet=\"selectedItemTemplate; context: { $implicit: item }\"></ng-container>\n </ng-template>\n }\n </p-select>\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-datepicker',\n standalone: true,\n templateUrl: './ef-datepicker.component.html',\n styleUrls: ['./ef-datepicker.component.scss'],\n imports: [DatePickerModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfDatepickerComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) showIcon = true;\n @Input() iconDisplay: 'input' | 'button' = 'input';\n @Input() selectionMode: 'single' | 'multiple' | 'range' = 'single';\n @Input() dateFormat?: string;\n @Input() appendTo?: string;\n @Input({ transform: booleanAttribute }) showTime = false;\n @Input({ transform: booleanAttribute }) showButtonBar = false;\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @Output() dateSelectEvent = new EventEmitter<any>();\n\n value: any = null;\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: any) => 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 handleChange(value: any): void {\n this.value = value;\n this.onChange(value);\n this.dateSelectEvent.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-datepicker\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"handleChange($event)\"\n (onBlur)=\"handleBlur()\"\n [placeholder]=\"effectivePlaceholder\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [showIcon]=\"showIcon\"\n [iconDisplay]=\"iconDisplay\"\n [selectionMode]=\"selectionMode\"\n [dateFormat]=\"dateFormat\"\n [appendTo]=\"appendTo\"\n [showTime]=\"showTime\"\n [showButtonBar]=\"showButtonBar\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [fluid]=\"fluid\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport {\n InputNumber,\n InputNumberInputEvent,\n InputNumberModule,\n} from 'primeng/inputnumber';\nimport { Nullable } from 'primeng/ts-helpers';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-inputnumber',\n standalone: true,\n templateUrl: './ef-inputnumber.component.html',\n styleUrls: ['./ef-inputnumber.component.scss'],\n imports: [InputNumberModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfInputNumberComponent implements ControlValueAccessor {\n @ViewChild('inputNumber', { static: false }) inputNumber?: InputNumber;\n\n // ============================================================================\n // LABEL & VALIDATION\n // ============================================================================\n\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input({ transform: booleanAttribute }) required = false;\n\n // ============================================================================\n // VALUE & MODEL\n // ============================================================================\n\n @Input() value?: Nullable<number>;\n @Input() invalid = false;\n @Input() disabled?: boolean;\n @Input() readonly = false;\n\n // ============================================================================\n // FORMAT & DISPLAY\n // ============================================================================\n\n @Input() format = true;\n @Input() showButtons = false;\n @Input() buttonLayout: 'stacked' | 'horizontal' | 'vertical' = 'stacked';\n @Input() incrementButtonClass?: string;\n @Input() decrementButtonClass?: string;\n @Input() incrementButtonIcon?: string;\n @Input() decrementButtonIcon?: string;\n @Input() prefix?: string;\n @Input() suffix?: string;\n @Input() currency?: string;\n @Input() currencyDisplay?: string;\n @Input() locale?: string;\n @Input() localeMatcher?: 'lookup' | 'best fit';\n @Input() mode: 'decimal' | 'currency' = 'decimal';\n @Input() useGrouping = true;\n @Input() minFractionDigits?: number;\n @Input() maxFractionDigits?: number;\n\n // ============================================================================\n // CONSTRAINTS\n // ============================================================================\n\n @Input() min?: number;\n @Input() max?: number;\n @Input() step = 1;\n @Input() allowEmpty = true;\n\n // ============================================================================\n // INPUT ATTRIBUTES\n // ============================================================================\n\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() inputSize?: number;\n @Input() size?: 'small' | 'large' = 'small';\n @Input() maxlength?: number;\n @Input() minlength?: number;\n @Input() pattern?: string;\n @Input() tabindex?: number;\n @Input() title?: string;\n @Input() ariaLabel?: string;\n @Input() ariaLabelledBy?: string;\n @Input() ariaDescribedBy?: string;\n @Input() ariaRequired?: boolean;\n @Input() inputStyle?: any;\n @Input() inputStyleClass?: string;\n @Input() style?: any;\n @Input() styleClass?: string;\n @Input() showClear = false;\n @Input() variant?: 'filled' | 'outlined';\n @Input() autofocus?: boolean;\n @Input() autocomplete?: string;\n @Input() fluid?: boolean = true;\n @Input({ transform: booleanAttribute }) inline = false;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n // ============================================================================\n // STYLING & CUSTOMIZATION\n // ============================================================================\n\n @Input() pt?: any;\n @Input() ptOptions?: any;\n @Input() dt?: any;\n @Input() unstyled?: boolean;\n\n // ============================================================================\n // EVENTS\n // ============================================================================\n\n @Output() inputEvent = new EventEmitter<InputNumberInputEvent>();\n @Output() focusEvent = new EventEmitter<Event>();\n @Output() blurEvent = new EventEmitter<Event>();\n @Output() keyDownEvent = new EventEmitter<KeyboardEvent>();\n @Output() clearEvent = new EventEmitter<void>();\n\n // ============================================================================\n // CONTROL VALUE ACCESSOR\n // ============================================================================\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return this.invalid || (ctrl?.invalid && (ctrl?.touched || ctrl?.dirty));\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // ============================================================================\n // EVENT HANDLERS\n // ============================================================================\n\n handleInput(event: InputNumberInputEvent): void {\n this.value = event.value;\n this.onChange(event.value);\n this.inputEvent.emit(event);\n }\n\n handleFocus(event: Event): void {\n this.focusEvent.emit(event);\n }\n\n handleBlur(event: Event): void {\n this.onTouched();\n this.blurEvent.emit(event);\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n this.keyDownEvent.emit(event);\n }\n\n handleClear(): void {\n this.value = null;\n this.onChange(null);\n this.clearEvent.emit();\n }\n\n // ============================================================================\n // PUBLIC METHODS\n // ============================================================================\n\n focus(): void {\n this.inputNumber?.input?.nativeElement?.focus();\n }\n\n clear(): void {\n if (this.inputNumber) {\n this.inputNumber.clear();\n this.handleClear();\n }\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-inputnumber\n #inputNumber\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n [invalid]=\"isInvalid\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [format]=\"format\"\n [showButtons]=\"showButtons\"\n [buttonLayout]=\"buttonLayout\"\n [incrementButtonClass]=\"incrementButtonClass\"\n [decrementButtonClass]=\"decrementButtonClass\"\n [incrementButtonIcon]=\"incrementButtonIcon\"\n [decrementButtonIcon]=\"decrementButtonIcon\"\n [prefix]=\"prefix\"\n [suffix]=\"suffix\"\n [currency]=\"currency\"\n [currencyDisplay]=\"currencyDisplay\"\n [locale]=\"locale\"\n [localeMatcher]=\"localeMatcher\"\n [mode]=\"mode\"\n [useGrouping]=\"useGrouping\"\n [minFractionDigits]=\"minFractionDigits\"\n [maxFractionDigits]=\"maxFractionDigits\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [allowEmpty]=\"allowEmpty\"\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [placeholder]=\"effectivePlaceholder\"\n [inputSize]=\"inputSize\"\n [size]=\"size\"\n [maxlength]=\"maxlength\"\n [minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [tabindex]=\"tabindex\"\n [title]=\"title\"\n [ariaLabel]=\"ariaLabel\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ariaRequired]=\"ariaRequired\"\n [inputStyle]=\"inputStyle\"\n [inputStyleClass]=\"inputStyleClass\"\n [style]=\"style\"\n [styleClass]=\"styleClass\"\n [showClear]=\"showClear\"\n [variant]=\"variant\"\n [autofocus]=\"autofocus\"\n [autocomplete]=\"autocomplete\"\n [fluid]=\"fluid\"\n [pt]=\"pt\"\n [ptOptions]=\"ptOptions\"\n [dt]=\"dt\"\n [unstyled]=\"unstyled\"\n (onInput)=\"handleInput($event)\"\n (onFocus)=\"handleFocus($event)\"\n (onBlur)=\"handleBlur($event)\"\n (onKeyDown)=\"handleKeyDown($event)\"\n (onClear)=\"handleClear()\"\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n Input,\n} from '@angular/core';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-fieldset',\n standalone: true,\n templateUrl: './ef-fieldset.component.html',\n imports: [FieldsetModule, TranslateModule],\n})\nexport class EfFieldsetComponent {\n /** Direct legend text (not translated) */\n @Input() legend?: string;\n /** Translation key — takes priority over legend */\n @Input() legendKey?: string;\n\n @Input({ transform: booleanAttribute }) toggleable = false;\n @Input({ transform: booleanAttribute }) collapsed = false;\n @Input() styleClass?: string;\n}\n","<p-fieldset\n [legend]=\"legendKey ? (legendKey | translate) : legend\"\n [toggleable]=\"toggleable\"\n [collapsed]=\"collapsed\"\n [styleClass]=\"styleClass\"\n>\n <ng-content />\n</p-fieldset>\n","import {\n booleanAttribute,\n Component,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-button',\n standalone: true,\n templateUrl: './ef-button.component.html',\n imports: [ButtonModule, TooltipModule, TranslateModule],\n})\nexport class EfButtonComponent {\n /** Direct label text (not translated) */\n @Input() label?: string;\n /** Translation key — takes priority over label */\n @Input() labelKey?: string;\n\n @Input() icon?: string;\n @Input() severity: 'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'help' | 'contrast' = 'primary';\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) rounded = false;\n @Input({ transform: booleanAttribute }) outlined = false;\n @Input({ transform: booleanAttribute }) raised = false;\n @Input({ transform: booleanAttribute }) text = false;\n @Input({ transform: booleanAttribute }) loading = false;\n @Input() styleClass?: string;\n @Input() type: 'button' | 'submit' = 'button';\n @Input() badge?: string;\n @Input() badgeSeverity?: 'success' | 'info' | 'warn' | 'danger' | 'help' | 'primary' | 'secondary' | 'contrast';\n\n /** Direct tooltip text (not translated) */\n @Input() tooltip?: string;\n /** Translation key for tooltip — takes priority over tooltip */\n @Input() tooltipKey?: string;\n @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\n\n @Output() clickEvent = new EventEmitter<Event>();\n\n handleClick(event: Event): void {\n this.clickEvent.emit(event);\n }\n}\n","<p-button\n [label]=\"labelKey ? (labelKey | translate) : label\"\n [icon]=\"icon\"\n [severity]=\"severity\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [rounded]=\"rounded\"\n [outlined]=\"outlined\"\n [raised]=\"raised\"\n [text]=\"text\"\n [loading]=\"loading\"\n [styleClass]=\"styleClass\"\n [type]=\"type\"\n [badge]=\"badge\"\n [badgeSeverity]=\"badgeSeverity\"\n [pTooltip]=\"tooltipKey ? (tooltipKey | translate) : tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (onClick)=\"handleClick($event)\"\n/>\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n OnDestroy,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport {\n DocumentConfig,\n OrderEntity,\n OrderLineItem,\n OrderLineItemHelper,\n OrderEntityHelper,\n OrderChangeInfo,\n ValidationResult,\n OrderProductsSummary,\n OrderSummaryItem,\n} from './ef-order-builder.component.types';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ButtonModule } from 'primeng/button';\nimport { TableModule } from 'primeng/table';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { DividerModule } from 'primeng/divider';\nimport { TooltipModule } from 'primeng/tooltip';\nimport {\n EfOrderSummaryComponent,\n ProductCountGroupLabel,\n} from '../ef-order-summary/ef-order-summary.component';\nimport { EfSelectComponent } from '../../forms/ef-select/ef-select.component';\nimport { EfDatepickerComponent } from '../../forms/ef-datepicker/ef-datepicker.component';\nimport { EfInputNumberComponent } from '../../forms/ef-inputnumber/ef-inputnumber.component';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\nimport { EfFieldsetComponent } from '../../layout/ef-fieldset/ef-fieldset.component';\nimport { EfButtonComponent } from '../../layout/ef-button/ef-button.component';\nimport { UuidUtils, AppUtils } from '@elasticias/utils';\n\n/**\n * Reusable order builder component for orders, invoices, and quotes\n * Manages complete order entity with automatic change tracking\n *\n * @example\n * <ef-order-builder\n * [(order)]=\"orderEntity\"\n * [config]=\"documentConfig\"\n * [products]=\"products\"\n * [customers]=\"customers\"\n * (openCatalogue)=\"handleCatalogueOpen()\"\n * (orderChanged)=\"handleOrderChange($event)\"\n * />\n */\n@Component({\n selector: 'ef-order-builder',\n standalone: true,\n templateUrl: 'ef-order-builder.component.html',\n styleUrl: 'ef-order-builder.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n TextareaModule,\n ButtonModule,\n TableModule,\n FieldsetModule,\n DividerModule,\n TooltipModule,\n EfOrderSummaryComponent,\n EfSelectComponent,\n EfDatepickerComponent,\n EfInputNumberComponent,\n EfLabelComponent,\n EfFieldsetComponent,\n EfButtonComponent,\n ],\n})\nexport class EfOrderBuilderComponent implements OnInit, OnDestroy {\n rowTrackBy = (_: number, item: OrderLineItem) => item.id;\n\n // Expose AppUtils to template\n protected readonly AppUtils = AppUtils;\n\n config = input<DocumentConfig>({\n documentType: 'order',\n headerLabel: 'Commamnde',\n dateLabel: 'Date de commande',\n customerLabel: 'Client',\n enableTax: true,\n enableDiscount: true,\n showCatalogue: true,\n allowInlineEdit: true,\n currencyCode: 'MAD',\n locale: 'fr-FR',\n });\n\n order = model.required<OrderEntity>();\n products = input.required<Record<string, unknown>[]>();\n customers = input.required<Record<string, unknown>[]>();\n readonly = input<boolean>(false);\n countGroupLabels = input<ProductCountGroupLabel[]>([]);\n /** Field name used to identify products (must match catalogue's trackByField) */\n productKeyField = input<string>('id');\n backendErrors = input<{ [key: string]: string[] }>({});\n\n openCatalogue = output<void>();\n orderChanged = output<OrderChangeInfo>();\n orderValidated = output<ValidationResult>();\n productsAdded = output<OrderLineItem[]>();\n\n private originalOrder = signal<OrderEntity | null>(null);\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n private initialized = signal(false);\n\n quickAddProduct = signal<Record<string, unknown> | null>(null);\n quickAddPrice = signal<number>(0);\n quickAddQuantity = signal<number>(1);\n\n quickAddDisabled = computed(\n () =>\n this.quickAddProduct() === null || (this.quickAddQuantity() ?? 0) <= 0,\n );\n\n orderLines = computed(() => this.order().orderLines || []);\n\n /**\n * Flatten products → one option per active variant for the inline ef-select.\n * Simple products (no variants) get a single row with the product label.\n * Each option exposes `_displayLabel` for `optionLabel` and carries the\n * underlying product/variant references for `onProductSelect`.\n */\n flattenedProductOptions = computed<Array<Record<string, unknown>>>(() => {\n const keyField = this.productKeyField();\n const list: Array<Record<string, unknown>> = [];\n\n for (const product of this.products()) {\n const variants = product['variants'] as\n | Array<Record<string, unknown>>\n | undefined;\n const activeVariants = (variants ?? []).filter(\n (v) => v['isActive'] !== false,\n );\n const productLabel = (product['displayName'] ||\n product['name'] ||\n '') as string;\n\n if (activeVariants.length === 0) {\n list.push({\n _product: product,\n _variant: null,\n _displayLabel: productLabel,\n _key: `${product[keyField]}::`,\n });\n continue;\n }\n\n for (const variant of activeVariants) {\n const variantTitle = (variant['title'] || '') as string;\n const label = variantTitle\n ? `${productLabel} - ${variantTitle}`\n : productLabel;\n list.push({\n _product: product,\n _variant: variant,\n _displayLabel: label,\n _key: `${product[keyField]}::${variant['variantId']}`,\n });\n }\n }\n\n return list;\n });\n\n grossTotal = computed(() => {\n return this.orderLines().reduce((total, item) => {\n return total + (item.productUnitPrice || 0) * (item.quantity || 0);\n }, 0);\n });\n\n discountTotal = computed(() => {\n return this.orderLines().reduce((total, item) => {\n const itemTotal = (item.productUnitPrice || 0) * (item.quantity || 0);\n const discount = item.discount || 0;\n return total + (itemTotal * discount) / 100;\n }, 0);\n });\n\n tvaTotal = computed(() => {\n return this.orderLines().reduce((total, item) => {\n return total + (item.taxAmount || 0);\n }, 0);\n });\n\n finalTotal = computed(() => {\n return this.grossTotal() - this.discountTotal() + this.tvaTotal();\n });\n\n currency = computed(() => this.config().currencyCode || 'MAD');\n locale = computed(() => this.config().locale || 'fr-FR');\n hasItems = computed(() => this.orderLines().length > 0);\n\n productsSummary = computed<OrderProductsSummary>(() => {\n const lines = this.orderLines();\n const labels = this.countGroupLabels();\n const countMap = new Map<string, number>();\n\n lines.forEach((line) => {\n const product = line.product as { countGroup?: string };\n const countGroup = line.countGroup || product?.countGroup;\n\n if (countGroup) {\n const currentCount = countMap.get(countGroup) || 0;\n countMap.set(countGroup, currentCount + (line.quantity || 0));\n }\n });\n\n const items: OrderSummaryItem[] = [];\n\n countMap.forEach((count, code) => {\n const labelItem = labels.find(\n (l) => l.code.toUpperCase() === code.toUpperCase(),\n );\n items.push({\n code,\n label: labelItem?.label || code,\n count,\n column: labelItem?.column ?? 1,\n });\n });\n\n items.sort((a, b) => {\n const labelA = labels.find((l) => l.code === a.code);\n const labelB = labels.find((l) => l.code === b.code);\n const orderA = labelA?.sortOrder ?? 999;\n const orderB = labelB?.sortOrder ?? 999;\n return orderA - orderB;\n });\n\n const totalCount = items.reduce((sum, item) => sum + item.count, 0);\n\n return { items, totalCount };\n });\n\n hasEditingRow = computed(() =>\n this.orderLines().some((item) => item.isEditing),\n );\n\n validationResult = computed(() => {\n return OrderEntityHelper.validate(this.order());\n });\n\n combinedErrors = computed(() => {\n const clientErrors = this.validationResult().errors;\n const serverErrors = this.backendErrors();\n return { ...clientErrors, ...serverErrors };\n });\n\n hasErrors = computed(() => Object.keys(this.combinedErrors()).length > 0);\n\n isValid = computed(\n () =>\n this.validationResult().isValid &&\n Object.keys(this.backendErrors()).length === 0,\n );\n\n changeInfo = computed<OrderChangeInfo | null>(() => {\n const original = this.originalOrder();\n if (!original || !this.initialized()) return null;\n\n return OrderEntityHelper.detectChanges(original, this.order());\n });\n\n hasChanges = computed(() => this.changeInfo()?.hasChanges ?? false);\n\n constructor() {\n effect(\n () => {\n if (!this.initialized()) return;\n\n const updatedOrder = OrderEntityHelper.calculateTotals(this.order());\n const summary = this.productsSummary();\n\n if (\n updatedOrder.grossTotal !== this.order().grossTotal ||\n updatedOrder.discountTotal !== this.order().discountTotal ||\n updatedOrder.taxTotal !== this.order().taxTotal ||\n updatedOrder.finalTotal !== this.order().finalTotal ||\n JSON.stringify(updatedOrder.productsSummary) !==\n JSON.stringify(summary)\n ) {\n this.order.set({ ...updatedOrder, productsSummary: summary });\n }\n },\n { allowSignalWrites: true },\n );\n\n effect(() => {\n const info = this.changeInfo();\n if (info && info.hasChanges) {\n this.orderChanged.emit(info);\n }\n });\n\n effect(() => {\n if (!this.initialized()) return;\n\n const validation = this.validationResult();\n this.orderValidated.emit(validation);\n });\n }\n\n ngOnInit(): void {\n this.originalOrder.set(OrderEntityHelper.clone(this.order()));\n this.initialized.set(true);\n }\n\n ngOnDestroy(): void {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n }\n\n addNewProductRow(): void {\n if (this.readonly() || this.hasEditingRow()) {\n return;\n }\n\n const newItem = OrderLineItemHelper.createEmptyItem();\n this.updateOrderLines([...this.orderLines(), newItem]);\n }\n\n removeOrderLine(id: number | undefined): void {\n if (this.readonly() || id === undefined) return;\n\n const updatedItems = this.orderLines().filter((item) => item.id !== id);\n this.updateOrderLines(updatedItems);\n }\n\n onProductSelect(item: OrderLineItem): void {\n if (this.readonly() || !item.product) return;\n\n const items = this.orderLines();\n const index = items.findIndex((i) => i.id === item.id);\n if (index === -1) return;\n\n // The dropdown emits a flattened option `{ _product, _variant, _displayLabel, _key }`.\n const option = item.product as Record<string, unknown>;\n const product = (option['_product'] as Record<string, unknown>) ?? option;\n const variant =\n (option['_variant'] as Record<string, unknown> | null | undefined) ??\n undefined;\n\n const unitPrice = (variant?.['price'] ??\n product['unitPrice'] ??\n product['salePrice'] ??\n 0) as number;\n const countGroup = (variant?.['countGroup'] ??\n product['countGroup'] ??\n '') as string;\n\n const updatedItem = OrderLineItemHelper.updateCalculations({\n ...item,\n product,\n productId: this.productKey(product),\n variantId: (variant?.['variantId'] as string) ?? null,\n countGroup,\n productDescription: OrderLineItemHelper.composeDescription(\n product,\n variant,\n ),\n productUnitPrice: unitPrice,\n taxRate: (product['taxRate'] || 0) as number,\n isEditing: false,\n });\n\n const updatedItems = [...items];\n updatedItems[index] = updatedItem;\n this.updateOrderLines(updatedItems);\n }\n\n startEditField(item: OrderLineItem, fieldName: string): void {\n if (this.readonly() || !this.config().allowInlineEdit) return;\n\n const items = this.orderLines();\n const index = items.findIndex((i) => i.id === item.id);\n\n if (index !== -1) {\n const updatedItems = [...items];\n updatedItems[index] = { ...item, editingField: fieldName };\n this.updateOrderLines(updatedItems);\n }\n }\n\n stopEditField(item: OrderLineItem): void {\n item.editingField = null;\n\n const updatedItem = OrderLineItemHelper.updateCalculations(item);\n Object.assign(item, updatedItem);\n\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n\n this.updateTimeout = setTimeout(() => {\n this.updateOrderLines([...this.orderLines()]);\n this.updateTimeout = null;\n }, 50);\n }\n\n onFieldChange(item: OrderLineItem): void {\n const updatedItem = OrderLineItemHelper.updateCalculations(item);\n Object.assign(item, updatedItem);\n }\n\n saveEditingRow(item: OrderLineItem): void {\n if (this.readonly()) return;\n\n const validation = OrderLineItemHelper.validate(item);\n\n if (validation.isValid) {\n const items = this.orderLines();\n const index = items.findIndex((i) => i.id === item.id);\n\n if (index !== -1) {\n const updatedItem = OrderLineItemHelper.updateCalculations({\n ...item,\n isEditing: false,\n });\n\n const updatedItems = [...items];\n updatedItems[index] = updatedItem;\n this.updateOrderLines(updatedItems);\n }\n }\n }\n\n calculateSubtotal(item: OrderLineItem): number {\n return OrderLineItemHelper.calculateSubtotal(item);\n }\n\n handleOpenCatalogue(): void {\n if (this.readonly()) return;\n this.openCatalogue.emit();\n }\n\n onQuickAddProductSelect(option: Record<string, unknown> | null): void {\n this.quickAddProduct.set(option);\n\n if (!option) {\n this.quickAddPrice.set(0);\n return;\n }\n\n const product = (option['_product'] as Record<string, unknown>) ?? option;\n const variant =\n (option['_variant'] as Record<string, unknown> | null | undefined) ??\n undefined;\n\n const unitPrice = (variant?.['price'] ??\n product['unitPrice'] ??\n product['salePrice'] ??\n 0) as number;\n\n this.quickAddPrice.set(unitPrice);\n }\n\n addQuickProduct(): void {\n if (this.readonly() || this.quickAddDisabled()) return;\n\n const option = this.quickAddProduct() as Record<string, unknown>;\n const product = (option['_product'] as Record<string, unknown>) ?? option;\n const variant =\n (option['_variant'] as Record<string, unknown> | null | undefined) ??\n undefined;\n const variantId =\n (variant?.['variantId'] as string | undefined) ?? undefined;\n\n const newItem = OrderLineItemHelper.createFromProduct(\n product,\n this.quickAddQuantity(),\n this.productKeyField(),\n variantId,\n );\n\n const overriddenItem = OrderLineItemHelper.updateCalculations({\n ...newItem,\n productUnitPrice: this.quickAddPrice(),\n });\n\n this.updateOrderLines([...this.orderLines(), overriddenItem]);\n this.productsAdded.emit([overriddenItem]);\n\n this.quickAddProduct.set(null);\n this.quickAddPrice.set(0);\n this.quickAddQuantity.set(1);\n }\n\n addProductsFromCatalogue(\n selectedProducts: Array<{\n product: Record<string, unknown>;\n quantity: number;\n variantId?: string;\n }>,\n ): void {\n if (this.readonly() || !selectedProducts || selectedProducts.length === 0) {\n return;\n }\n\n const currentItems = [...this.orderLines()];\n const addedItems: OrderLineItem[] = [];\n\n const keyField = this.productKeyField();\n\n selectedProducts.forEach(({ product, quantity, variantId }) => {\n const productKeyValue = product[keyField];\n // Match by both productId AND variantId to avoid merging different variants\n const existingIndex = currentItems.findIndex(\n (item) =>\n item.productId === productKeyValue &&\n item.variantId === (variantId ?? null),\n );\n\n if (existingIndex !== -1) {\n // The catalogue is seeded with current order lines via\n // `initialSelectedItems` and shows live steppers, so the emitted\n // selection represents the desired final quantity for each product\n // — replace rather than add, otherwise reopening the catalogue and\n // re-validating doubles every previously-selected line.\n const existing = currentItems[existingIndex];\n const updated = OrderLineItemHelper.updateCalculations({\n ...existing,\n quantity,\n });\n currentItems[existingIndex] = updated;\n } else {\n const newItem = OrderLineItemHelper.createFromProduct(\n product,\n quantity,\n keyField,\n variantId,\n );\n currentItems.push(newItem);\n addedItems.push(newItem);\n }\n });\n\n this.updateOrderLines(currentItems);\n\n if (addedItems.length > 0) {\n this.productsAdded.emit(addedItems);\n }\n }\n\n updateCustomer(customerId: string | null): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n customerId,\n customerName: this.getCustomerName(customerId),\n }));\n }\n\n updateOrderDate(date: Date): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n orderDate: date,\n }));\n }\n\n updateDeliveryDate(date: Date | null): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n deliveryDate: date,\n }));\n }\n\n updateNotes(notes: string): void {\n if (this.readonly()) return;\n\n this.order.update((order) => ({\n ...order,\n notes,\n }));\n }\n\n resetChanges(): void {\n const original = this.originalOrder();\n if (original) {\n this.order.set(OrderEntityHelper.clone(original));\n }\n }\n\n markAsSaved(): void {\n this.originalOrder.set(OrderEntityHelper.clone(this.order()));\n }\n\n validate(): ValidationResult {\n return this.validationResult();\n }\n\n private updateOrderLines(items: OrderLineItem[]): void {\n this.order.update((order) => ({\n ...order,\n orderLines: items,\n }));\n }\n\n private getCustomerName(customerId: string | null): string | undefined {\n if (!customerId) return undefined;\n\n const customer = this.customers().find(\n (c) => c['customerId'] === customerId,\n );\n return (customer?.['companyName'] || customer?.['name']) as\n | string\n | undefined;\n }\n\n private productKey(product: Record<string, unknown>): unknown {\n return product[this.productKeyField()];\n }\n\n getProduct(productId: unknown): Record<string, unknown> | undefined {\n const field = this.productKeyField();\n return this.products().find((p) => p[field] === productId);\n }\n\n getCustomer(customerId: string): Record<string, unknown> | undefined {\n return this.customers().find((c) => c['customerId'] === customerId);\n }\n\n initializeOrderLines(): void {\n const items = this.order().orderLines || [];\n\n const initializedItems = items.map((item: OrderLineItem) => {\n let product = item.product;\n\n if (item.productId && !item.product) {\n product = this.getProduct(item.productId);\n }\n\n if (product && !item.productDescription) {\n const variants = product['variants'] as\n | Array<Record<string, unknown>>\n | undefined;\n const variant =\n item.variantId && variants?.length\n ? variants.find((v) => v['variantId'] === item.variantId)\n : undefined;\n item.productDescription = OrderLineItemHelper.composeDescription(\n product,\n variant,\n );\n }\n\n return OrderLineItemHelper.updateCalculations({\n ...item,\n product,\n id: item.id || UuidUtils.randomUUID(),\n isEditing: item.isEditing ?? false,\n editingField: item.editingField ?? null,\n });\n });\n\n this.updateOrderLines(initializedItems);\n }\n\n getTotals() {\n return {\n grossTotal: this.grossTotal(),\n discountTotal: this.discountTotal(),\n tvaTotal: this.tvaTotal(),\n finalTotal: this.finalTotal(),\n };\n }\n\n exportOrder(): OrderEntity {\n return OrderEntityHelper.calculateTotals(this.order());\n }\n}\n","<!-- Order Header -->\n<p-fieldset [legend]=\"config().headerLabel\">\n <div class=\"grid grid-cols-12 items-baseline gap-2 mb-2\">\n <ef-label [label]=\"config().customerLabel\" for=\"order.customerId\" styleClass=\"col-span-12 md:col-span-6 form-label-left\" required />\n <ef-label [label]=\"config().dateLabel\" for=\"order.orderDate\" styleClass=\"col-span-3 form-label-left\" required />\n </div>\n <div class=\"grid grid-cols-12 items-baseline gap-2 mb-2 mt-4\">\n <div class=\"col-span-12 md:col-span-6\">\n <ef-select\n [ngModel]=\"order().customerId\"\n (ngModelChange)=\"updateCustomer($event)\"\n name=\"order.customerId\"\n inputId=\"order.customerId\"\n [options]=\"customers()\"\n optionValue=\"customerId\"\n optionLabel=\"companyName\"\n [placeholder]=\"config().customerLabel\"\n filter\n showClear\n [disabled]=\"readonly()\"\n required\n />\n </div>\n <div class=\"col-span-3\">\n <ef-datepicker\n [ngModel]=\"order().orderDate\"\n (ngModelChange)=\"updateOrderDate($event)\"\n name=\"order.orderDate\"\n inputId=\"order.orderDate\"\n [disabled]=\"readonly()\"\n required\n />\n </div>\n </div>\n\n @if (config().enableQuickAdd && !readonly()) {\n <div class=\"grid grid-cols-12 items-baseline gap-2 mt-4 mb-2\">\n <ef-label labelKey=\"label.article\" for=\"quickAdd.product\" styleClass=\"col-span-12 md:col-span-6 form-label-left\" />\n <ef-label labelKey=\"label.sale_price\" for=\"quickAdd.price\" styleClass=\"col-span-2 form-label-left\" />\n <ef-label labelKey=\"label.quantity\" for=\"quickAdd.quantity\" styleClass=\"col-span-2 form-label-left\" />\n </div>\n <div class=\"grid grid-cols-12 items-center gap-2\">\n <div class=\"col-span-12 md:col-span-6\">\n <ef-select\n [ngModel]=\"quickAddProduct()\"\n (ngModelChange)=\"onQuickAddProductSelect($event)\"\n name=\"quickAdd.product\"\n inputId=\"quickAdd.product\"\n [options]=\"flattenedProductOptions()\"\n optionLabel=\"_displayLabel\"\n placeholderKey=\"placeholder.select_article\"\n filter\n showClear\n [disabled]=\"readonly()\"\n />\n </div>\n <div class=\"col-span-2\">\n <ef-inputnumber\n id=\"quickAdd.price\"\n name=\"quickAdd.price\"\n [ngModel]=\"quickAddPrice()\"\n (ngModelChange)=\"quickAddPrice.set($event)\"\n mode=\"currency\"\n [currency]=\"currency()\"\n [locale]=\"locale()\"\n [min]=\"0\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </div>\n <div class=\"col-span-2\">\n <ef-inputnumber\n id=\"quickAdd.quantity\"\n name=\"quickAdd.quantity\"\n [ngModel]=\"quickAddQuantity()\"\n (ngModelChange)=\"quickAddQuantity.set($event)\"\n [min]=\"0\"\n [maxFractionDigits]=\"4\"\n [locale]=\"locale()\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </div>\n <div class=\"col-span-2 flex justify-start gap-2\">\n <ef-button\n icon=\"pi pi-plus\"\n [rounded]=\"true\"\n severity=\"primary\"\n tooltipKey=\"tooltip.add_article\"\n [disabled]=\"quickAddDisabled()\"\n (clickEvent)=\"addQuickProduct()\"\n />\n @if (config().showCatalogue) {\n <ef-button\n icon=\"pi pi-search\"\n [rounded]=\"true\"\n severity=\"primary\"\n tooltipKey=\"tooltip.open_catalogue\"\n [disabled]=\"readonly()\"\n (clickEvent)=\"handleOpenCatalogue()\"\n />\n }\n </div>\n </div>\n }\n</p-fieldset>\n\n<div class=\"my-4\"></div>\n\n<!-- Order Line Items -->\n<p-fieldset legend=\"Détails\">\n <p-table\n #pTable\n class=\"text-sm\"\n size=\"small\"\n [value]=\"orderLines()\"\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n [resizableColumns]=\"true\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n columnResizeMode=\"expand\"\n [showCurrentPageReport]=\"true\"\n stateStorage=\"local\"\n dataKey=\"id\"\n [rowTrackBy]=\"rowTrackBy\"\n >\n <ng-template #header>\n <tr>\n <th>{{ 'label.article' | translate }}</th>\n <th class=\"w-[120px] !text-end\">{{ 'label.sale_price' | translate }}</th>\n <th class=\"w-[120px] !text-end\">{{ 'label.quantity' | translate }}</th>\n @if (config().enableTax) {\n <th class=\"w-[120px] !text-end\">TVA (%)</th>\n }\n @if (config().enableDiscount) {\n <th class=\"w-[120px] !text-end\">\n Remise (%)\n </th>\n }\n <th class=\"w-[120px] !text-end\">Sous-Total</th>\n @if (!readonly()) {\n <th class=\"w-10 !text-end\"></th>\n }\n </tr>\n </ng-template>\n\n <ng-template #body let-item let-rowIndex=\"rowIndex\">\n <!-- Editing mode for new row -->\n @if (item.isEditing) {\n <tr>\n <td>\n <div class=\"align-items-center flex gap-2\">\n <ef-select\n [(ngModel)]=\"item.product\"\n (ngModelChange)=\"onProductSelect(item)\"\n [name]=\"'item.product.' + rowIndex\"\n [inputId]=\"'item.product.' + rowIndex\"\n [options]=\"flattenedProductOptions()\"\n optionLabel=\"_displayLabel\"\n placeholderKey=\"placeholder.select_article\"\n filter\n showClear\n [disabled]=\"readonly()\"\n appendTo=\"body\"\n />\n </div>\n </td>\n <td class=\"w-[120px]\">\n <ef-inputnumber\n [id]=\"'item.productUnitPrice.' + rowIndex\"\n [name]=\"'item.productUnitPrice.' + rowIndex\"\n [(ngModel)]=\"item.productUnitPrice\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n mode=\"currency\"\n [currency]=\"currency()\"\n [locale]=\"locale()\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </td>\n <td class=\"w-[120px]\">\n <ef-inputnumber\n [id]=\"'item.quantity.' + rowIndex\"\n [name]=\"'item.quantity.' + rowIndex\"\n [(ngModel)]=\"item.quantity\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"saveEditingRow(item)\"\n [min]=\"0\"\n [maxFractionDigits]=\"4\"\n [locale]=\"locale()\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </td>\n @if (config().enableTax) {\n <td class=\"w-[120px] !text-end\">\n {{ item.taxRate || 0 }} %\n </td>\n }\n @if (config().enableDiscount) {\n <td class=\"w-[120px]\">\n <ef-inputnumber\n [id]=\"'item.discount.' + rowIndex\"\n [name]=\"'item.discount.' + rowIndex\"\n [(ngModel)]=\"item.discount\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"saveEditingRow(item)\"\n [min]=\"0\"\n [max]=\"100\"\n suffix=\"%\"\n [disabled]=\"readonly()\"\n size=\"small\"\n />\n </td>\n }\n <td class=\"w-[120px] !text-end\">\n {{ calculateSubtotal(item) | currency: currency() }}\n </td>\n @if (!readonly()) {\n <td class=\"w-10 !text-end\">\n <p-button\n icon=\"pi pi-trash\"\n size=\"small\"\n [outlined]=\"true\"\n pTooltip=\"Supprimer\"\n tooltipPosition=\"top\"\n (click)=\"removeOrderLine(item.id)\"\n />\n </td>\n }\n </tr>\n }\n\n <!-- Display mode for saved row -->\n @if (!item.isEditing) {\n <tr>\n <td>\n <div\n [innerHTML]=\"AppUtils.truncate(item.productDescription)\"\n [pTooltip]=\"item.productDescription\"\n tooltipPosition=\"top\"\n ></div>\n </td>\n <td\n class=\"w-[120px]\"\n [class.cursor-pointer]=\"config().allowInlineEdit && !readonly()\"\n (click)=\"startEditField(item, 'productUnitPrice')\"\n >\n @if (\n item.editingField === 'productUnitPrice' &&\n config().allowInlineEdit &&\n !readonly()\n ) {\n <ef-inputnumber\n [id]=\"'item.productUnitPrice.edit.' + rowIndex\"\n [name]=\"'item.productUnitPrice.edit.' + rowIndex\"\n [(ngModel)]=\"item.productUnitPrice\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n mode=\"currency\"\n [currency]=\"currency()\"\n [locale]=\"locale()\"\n size=\"small\"\n class=\"!text-end\"\n />\n } @else {\n <span\n [class]=\"\n config().allowInlineEdit && !readonly()\n ? 'block cursor-pointer rounded px-2 py-1 text-end hover:bg-surface-100 dark:hover:bg-surface-700'\n : 'block px-2 py-1 text-end'\n \"\n >\n {{ item.productUnitPrice | currency: currency() }}\n </span>\n }\n </td>\n <td\n class=\"w-[120px]\"\n [class.cursor-pointer]=\"config().allowInlineEdit && !readonly()\"\n (click)=\"startEditField(item, 'quantity')\"\n >\n @if (\n item.editingField === 'quantity' &&\n config().allowInlineEdit &&\n !readonly()\n ) {\n <ef-inputnumber\n [id]=\"'item.quantity.edit.' + rowIndex\"\n [name]=\"'item.quantity.edit.' + rowIndex\"\n [(ngModel)]=\"item.quantity\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n [min]=\"0\"\n [maxFractionDigits]=\"4\"\n [locale]=\"locale()\"\n size=\"small\"\n class=\"!text-end\"\n />\n } @else {\n <span\n [class]=\"\n config().allowInlineEdit && !readonly()\n ? 'block cursor-pointer rounded px-2 py-1 text-end hover:bg-surface-100 dark:hover:bg-surface-700'\n : 'block px-2 py-1 text-end'\n \"\n >\n {{ item.quantity | number: '1.4-4' : locale() }}\n </span>\n }\n </td>\n @if (config().enableTax) {\n <td class=\"w-[120px] !text-end\">\n {{ item.taxRate || 0 }} %\n </td>\n }\n @if (config().enableDiscount) {\n <td\n class=\"w-[120px]\"\n [class.cursor-pointer]=\"config().allowInlineEdit && !readonly()\"\n (click)=\"startEditField(item, 'discount')\"\n >\n @if (\n item.editingField === 'discount' &&\n config().allowInlineEdit &&\n !readonly()\n ) {\n <ef-inputnumber\n [id]=\"'item.discount.edit.' + rowIndex\"\n [name]=\"'item.discount.edit.' + rowIndex\"\n [(ngModel)]=\"item.discount\"\n (ngModelChange)=\"onFieldChange(item)\"\n (onBlur)=\"stopEditField(item)\"\n [min]=\"0\"\n [max]=\"100\"\n suffix=\"%\"\n size=\"small\"\n class=\"!text-end\"\n />\n } @else {\n <span\n [class]=\"\n config().allowInlineEdit && !readonly()\n ? 'block cursor-pointer rounded px-2 py-1 text-end hover:bg-surface-100 dark:hover:bg-surface-700'\n : 'block px-2 py-1 text-end'\n \"\n >\n {{ item.discount || 0 }}%\n </span>\n }\n </td>\n }\n <td class=\"w-[120px] !text-end\">\n {{ item.grossAmount | currency: currency() }}\n </td>\n @if (!readonly()) {\n <td class=\"w-10 !text-end\">\n <p-button\n icon=\"pi pi-trash\"\n size=\"small\"\n [outlined]=\"true\"\n tooltipPosition=\"top\"\n pTooltip=\"Supprimer\"\n (click)=\"removeOrderLine(item.id)\"\n />\n </td>\n }\n </tr>\n }\n </ng-template>\n\n <ng-template #footer>\n @if (!readonly()) {\n <tr>\n <td\n [attr.colspan]=\"\n config().enableTax && config().enableDiscount\n ? 7\n : config().enableTax || config().enableDiscount\n ? 6\n : 5\n \"\n >\n <a\n href=\"javascript:void(0)\"\n class=\"inline-flex items-center gap-2 text-sm font-medium text-primary-500 hover:text-primary-700\"\n [class.opacity-50]=\"hasEditingRow()\"\n [class.pointer-events-none]=\"hasEditingRow()\"\n (click)=\"addNewProductRow()\"\n >\n <i class=\"pi pi-plus text-xs\"></i>\n Ajouter un article\n </a>\n @if (config().showCatalogue) {\n <ng-container>\n &nbsp; | &nbsp;\n <a\n href=\"javascript:void(0)\"\n class=\"inline-flex items-center gap-2 text-sm font-medium text-primary-500 hover:text-primary-700\"\n (click)=\"handleOpenCatalogue()\"\n >\n <i class=\"pi pi-search text-xs\"></i>\n Ouvrir le catalogue des articles\n </a>\n </ng-container>\n }\n </td>\n </tr>\n }\n\n <!-- Totals Section -->\n <tr class=\"border-t\">\n <td\n [attr.colspan]=\"\n config().enableTax && config().enableDiscount\n ? 5\n : config().enableTax || config().enableDiscount\n ? 4\n : 3\n \"\n >\n @if (config().showProductsSummary) {\n <div class=\"w-[500px]\">\n <div class=\"my-4\"></div>\n <ef-order-summary\n [orderLines]=\"orderLines()\"\n [countGroupLabels]=\"countGroupLabels()\"\n legend=\"Récapitulatif\"\n />\n </div>\n }\n </td>\n <td [attr.colspan]=\"readonly() ? 2 : 3\" class=\"!text-end\">\n <p-fieldset [legend]=\"'Totaux'\">\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-end justify-between gap-4\">\n <span\n class=\"font-semibold text-surface-700 dark:text-surface-300\"\n >\n Montant brut :\n </span>\n <span class=\"font-semibold\">\n {{ grossTotal() | currency: currency() }}\n </span>\n </div>\n @if (config().enableDiscount) {\n <div class=\"flex justify-between gap-4\">\n <span\n class=\"font-semibold text-surface-700 dark:text-surface-300\"\n >\n Remise :\n </span>\n <span class=\"font-semibold\">\n {{ discountTotal() | currency: currency() }}\n </span>\n </div>\n }\n @if (config().enableTax) {\n <div class=\"flex justify-between gap-4\">\n <span\n class=\"font-semibold text-surface-700 dark:text-surface-300\"\n >\n TVA :\n </span>\n <span class=\"font-semibold\">\n {{ tvaTotal() | currency: currency() }}\n </span>\n </div>\n }\n <p-divider class=\"!my-1\" />\n <div class=\"flex justify-between gap-4\">\n <span class=\"text-lg font-bold text-primary\">\n Montant Total :\n </span>\n <span class=\"text-lg font-bold text-primary\">\n {{ finalTotal() | currency: currency() }}\n </span>\n </div>\n </div>\n </p-fieldset>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</p-fieldset>\n\n<!-- Optional Notes Section -->\n@if (config().showNotes) {\n <p-fieldset legend=\"Notes\">\n <textarea\n pTextarea\n id=\"order.notes\"\n name=\"order.notes\"\n [ngModel]=\"order().notes\"\n (ngModelChange)=\"updateNotes($event)\"\n [disabled]=\"readonly()\"\n [placeholder]=\"'common.notes_placeholder' | translate\"\n rows=\"5\"\n class=\"w-full\"\n ></textarea>\n </p-fieldset>\n}\n\n<!-- Validation Messages -->\n@if (hasErrors()) {\n <div\n class=\"my-4 rounded border border-red-200 bg-red-50 p-4 dark:bg-red-900/20\"\n >\n <div class=\"flex items-start gap-2\">\n <i\n class=\"pi pi-exclamation-triangle mt-1 text-red-600 dark:text-red-400\"\n ></i>\n <div class=\"flex-1\">\n <h4 class=\"mb-2 font-semibold text-red-800 dark:text-red-200\">\n Erreurs de validation\n </h4>\n <ul class=\"list-inside list-disc text-sm text-red-700 dark:text-red-300\">\n @for (error of combinedErrors() | keyvalue; track error.key) {\n <li>\n {{ error.value[0] }}\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n}\n\n<!-- Change Indicator -->\n@if (hasChanges()) {\n <div\n class=\"my-4 flex items-center gap-2 rounded border border-orange-200 bg-orange-50 p-3 dark:bg-orange-900/20\"\n >\n <i class=\"pi pi-info-circle text-orange-600 dark:text-orange-400\"></i>\n <span class=\"text-sm text-orange-800 dark:text-orange-200\">\n Modifications non sauvegardées détectées\n </span>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccordionModule } from 'primeng/accordion';\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ChipModule } from 'primeng/chip';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\nexport interface CategoryItem {\n code: string;\n label: string;\n description?: string | null;\n isActive: boolean;\n sortOrder: number;\n metadata?: Record<string, unknown> | null;\n children?: CategoryItem[];\n}\n\nexport interface CategoryGroup {\n code: string;\n label: string;\n description?: string | null;\n isActive: boolean;\n sortOrder: number;\n metadata?: Record<string, unknown> | null;\n children?: CategoryItem[];\n}\n\nexport interface CategoryAssignment {\n type: string;\n code: string;\n}\n\nexport interface SelectedFilter {\n type: string;\n code: string;\n label: string;\n}\n\n@Component({\n selector: 'ef-product-catalogue-filter',\n templateUrl: './ef-product-catalogue-filter.component.html',\n imports: [\n FormsModule,\n AccordionModule,\n BadgeModule,\n ButtonModule,\n CheckboxModule,\n ChipModule,\n IconFieldModule,\n InputIconModule,\n InputTextModule,\n EfLabelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EfProductCatalogueFilterComponent {\n /** Category groups from reference_data (product_categories items with children) */\n categoryGroups = input.required<CategoryGroup[]>();\n\n /** Products to calculate counts */\n products = input.required<Array<{ categoryAssignments?: CategoryAssignment[] }>>();\n\n /** Selected filters (two-way binding) */\n selectedFilters = model<SelectedFilter[]>([]);\n\n /** Emitted when filters change */\n filtersChanged = output<SelectedFilter[]>();\n\n /** Search terms for each category group */\n searchTerms = signal<Record<string, string>>({});\n\n /** Accordion panel values (expanded panels) */\n expandedPanels = computed(() =>\n this.categoryGroups()\n .filter((g) => g.children && g.children.length > 0)\n .map((g) => g.code)\n );\n\n /** Get filtered children for a category group based on search */\n getFilteredChildren(group: CategoryGroup): CategoryItem[] {\n const children = group.children || [];\n const searchTerm = this.searchTerms()[group.code]?.toLowerCase() || '';\n\n if (!searchTerm) {\n return children.filter((c) => c.isActive);\n }\n\n return children.filter(\n (c) => c.isActive && c.label.toLowerCase().includes(searchTerm)\n );\n }\n\n /** Get product count for a specific category item */\n getItemCount(groupCode: string, itemCode: string): number {\n return this.products().filter((product) =>\n product.categoryAssignments?.some(\n (ca) => ca.type === groupCode && ca.code === itemCode\n )\n ).length;\n }\n\n /** Check if a filter is selected */\n isFilterSelected(groupCode: string, itemCode: string): boolean {\n return this.selectedFilters().some(\n (f) => f.type === groupCode && f.code === itemCode\n );\n }\n\n /** Toggle a filter selection */\n toggleFilter(group: CategoryGroup, item: CategoryItem): void {\n const currentFilters = this.selectedFilters();\n const existingIndex = currentFilters.findIndex(\n (f) => f.type === group.code && f.code === item.code\n );\n\n let newFilters: SelectedFilter[];\n if (existingIndex >= 0) {\n newFilters = currentFilters.filter((_, i) => i !== existingIndex);\n } else {\n newFilters = [\n ...currentFilters,\n { type: group.code, code: item.code, label: item.label },\n ];\n }\n\n this.selectedFilters.set(newFilters);\n this.filtersChanged.emit(newFilters);\n }\n\n /** Remove a specific filter */\n removeFilter(filter: SelectedFilter): void {\n const newFilters = this.selectedFilters().filter(\n (f) => !(f.type === filter.type && f.code === filter.code)\n );\n this.selectedFilters.set(newFilters);\n this.filtersChanged.emit(newFilters);\n }\n\n /** Clear all filters */\n clearAllFilters(): void {\n this.selectedFilters.set([]);\n this.filtersChanged.emit([]);\n }\n\n /** Update search term for a category group */\n updateSearchTerm(groupCode: string, term: string): void {\n this.searchTerms.update((current) => ({\n ...current,\n [groupCode]: term,\n }));\n }\n\n /** Get color class from metadata if available */\n getColorClass(item: CategoryItem): string | null {\n const color = item.metadata?.['color'];\n return typeof color === 'string' ? color : null;\n }\n\n /** Check if group should show search input (more than 5 items) */\n shouldShowSearch(group: CategoryGroup): boolean {\n return (group.children?.length || 0) > 5;\n }\n}\n","<div class=\"flex w-80 shrink-0 flex-col items-start justify-start sticky top-4 max-h-[calc(100vh-2rem)] overflow-y-auto\">\n <div\n class=\"mb-4 flex flex-col items-start justify-center gap-2 self-stretch border-b border-surface-200 px-2 pb-4 dark:border-surface-700\"\n >\n <div class=\"flex items-center justify-between gap-2 self-stretch\">\n <div\n class=\"text-base font-semibold leading-tight text-surface-900 dark:text-surface-0\"\n >\n Filters\n </div>\n <p-button\n size=\"small\"\n severity=\"secondary\"\n [text]=\"true\"\n class=\"py-1! px-2! text-base! font-normal!\"\n (clickEvent)=\"clearAllFilters()\"\n >\n <span pButtonLabel>\n <i class=\"pi pi-eraser\"></i>\n Clear\n </span>\n </p-button>\n </div>\n @if (selectedFilters().length > 0) {\n <div\n class=\"flex flex-wrap items-start justify-start gap-2 self-stretch\"\n >\n @for (filter of selectedFilters(); track filter.type + filter.code) {\n <p-chip\n [label]=\"filter.label\"\n [removable]=\"true\"\n size=\"small\"\n class=\"h-auto rounded-full px-6\"\n removeIcon=\"pi pi-times\"\n (onRemove)=\"removeFilter(filter)\"\n ></p-chip>\n }\n </div>\n }\n </div>\n\n <p-accordion\n [multiple]=\"true\"\n [value]=\"expandedPanels()\"\n class=\"w-full\"\n >\n @for (group of categoryGroups(); track group.code) {\n @if (group.children && group.children.length > 0) {\n <p-accordion-panel [value]=\"group.code\">\n <p-accordion-header>\n <span\n class=\"text-base font-semibold leading-tight text-surface-900 dark:text-surface-0\"\n >{{ group.label }}</span>\n </p-accordion-header>\n <p-accordion-content>\n <div class=\"flex flex-col gap-4\">\n @if (shouldShowSearch(group)) {\n <p-iconfield iconPosition=\"left\" class=\"w-full\">\n <p-inputicon class=\"pi pi-search\"></p-inputicon>\n <input\n pInputText\n size=\"small\"\n [ngModel]=\"searchTerms()[group.code] || ''\"\n (ngModelChange)=\"updateSearchTerm(group.code, $event)\"\n [placeholder]=\"'Rechercher ' + group.label.toLowerCase()\"\n class=\"w-full\"\n />\n </p-iconfield>\n }\n\n @for (item of getFilteredChildren(group); track item.code) {\n <div class=\"flex items-center justify-between gap-2\">\n <div class=\"flex flex-1 items-center gap-2\">\n <p-checkbox\n size=\"small\"\n [inputId]=\"group.code + '_' + item.code\"\n [binary]=\"true\"\n [ngModel]=\"isFilterSelected(group.code, item.code)\"\n (ngModelChange)=\"toggleFilter(group, item)\"\n ></p-checkbox>\n @if (getColorClass(item)) {\n <div\n class=\"h-5 w-5 rounded-full\"\n [class]=\"getColorClass(item)\"\n ></div>\n }\n <ef-label\n [label]=\"item.label\"\n [for]=\"group.code + '_' + item.code\"\n styleClass=\"cursor-pointer text-base font-normal leading-tight text-surface-700 dark:text-surface-300\"\n />\n </div>\n @if (getItemCount(group.code, item.code) > 0) {\n <p-badge\n [value]=\"getItemCount(group.code, item.code)\"\n size=\"small\"\n class=\"rounded-xl! h-6! min-w-6!\"\n severity=\"secondary\"\n ></p-badge>\n }\n </div>\n }\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n }\n }\n </p-accordion>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n FormsModule,\n} from '@angular/forms';\nimport { Nullable } from 'primeng/ts-helpers';\nimport { EfInputNumberComponent } from '../ef-inputnumber/ef-inputnumber.component';\n\n/**\n * EfQuantityStepper is a specialized component for quantity selection with increment/decrement buttons.\n * Perfect for shopping carts, POS systems, and order forms where users need to adjust quantities.\n *\n * Features:\n * - Increment/decrement buttons with customizable styling\n * - Min/max value constraints\n * - Configurable step value\n * - Fully integrated with Angular Forms (ngModel, FormControl)\n * - Rounded button design optimized for touch interfaces\n *\n * @group Components\n */\n@Component({\n selector: 'ef-quantity-stepper',\n templateUrl: './ef-quantity-stepper.component.html',\n styleUrls: ['./ef-quantity-stepper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [EfInputNumberComponent, FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EfQuantityStepperComponent),\n multi: true,\n },\n ],\n})\nexport class EfQuantityStepperComponent implements ControlValueAccessor {\n /**\n * Current quantity value\n */\n @Input() value: Nullable<number> = 0;\n\n /**\n * Minimum allowed value\n */\n @Input() min = 0;\n\n /**\n * Maximum allowed value\n */\n @Input() max = 999;\n\n /**\n * Step increment/decrement value\n */\n @Input() step = 1;\n\n /**\n * Minimum fraction digits to display (forwarded to ef-inputnumber).\n */\n @Input() minFractionDigits?: number;\n\n /**\n * Maximum fraction digits to display (forwarded to ef-inputnumber).\n */\n @Input() maxFractionDigits?: number;\n\n /**\n * Locale used for number formatting (forwarded to ef-inputnumber).\n */\n @Input() locale?: string;\n\n /**\n * When present, it specifies that the component should be disabled\n */\n @Input() disabled = false;\n\n /**\n * Callback to invoke when the value changes\n */\n @Output() valueChange = new EventEmitter<number>();\n\n /**\n * Pass Through configuration for custom styling\n */\n ptConfig = {\n root: {\n class: 'flex items-center justify-center gap-2',\n },\n pcInputText: {\n root: {\n class:\n '!w-12 !border-none !rounded-full bg-transparent font-bold text-primary dark:text-primary-contrast !text-center',\n },\n },\n decrementButton: {\n class:\n '!w-9 !border-none cursor-pointer !rounded-full !bg-white px-3 py-2 font-bold !text-primary dark:!text-primary-contrast !text-center',\n },\n incrementButton: {\n class:\n '!w-9 !border-none cursor-pointer !rounded-full !bg-white px-3 py-2 font-bold !text-primary dark:!text-primary-contrast !text-center',\n },\n decrementButtonIcon: {\n innerHTML: '-',\n },\n incrementButtonIcon: {\n innerHTML: '+',\n },\n };\n\n // ============================================================================\n // CONTROL VALUE ACCESSOR\n // ============================================================================\n\n private onChange: (value: any) => void = () => {\n /* noop */\n };\n private onTouched: () => void = () => {\n /* noop */\n };\n\n // ============================================================================\n // CONTROL VALUE ACCESSOR IMPLEMENTATION\n // ============================================================================\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // ============================================================================\n // EVENT HANDLERS\n // ============================================================================\n\n handleValueChange(value: number | null): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","<div\n class=\"flex h-12 items-center text-center justify-center gap-2 rounded-full !border !border-gray-200 bg-gray-100 dark:bg-slate-500 p-2\"\n>\n <ef-inputnumber\n [(ngModel)]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [minFractionDigits]=\"minFractionDigits\"\n [maxFractionDigits]=\"maxFractionDigits\"\n [locale]=\"locale\"\n [disabled]=\"disabled\"\n [showButtons]=\"true\"\n buttonLayout=\"horizontal\"\n decrementButtonIcon=\"-\"\n incrementButtonIcon=\"+\"\n [pt]=\"ptConfig\"\n (ngModelChange)=\"handleValueChange($event)\"\n (blurEvent)=\"handleBlur()\"\n >\n </ef-inputnumber>\n</div>\n","import { CommonModule, CurrencyPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n LOCALE_ID,\n OnChanges,\n output,\n signal,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BadgeModule } from 'primeng/badge';\nimport { CardModule } from 'primeng/card';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { Menu, MenuModule } from 'primeng/menu';\nimport { SelectModule } from 'primeng/select';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfQuantityStepperComponent } from '../../forms/ef-quantity-stepper/ef-quantity-stepper.component';\nimport { EfProductCatalogueFilterComponent } from '../ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nimport {\n CategoryAssignment,\n CategoryGroup,\n SelectedFilter,\n} from '../ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nimport { EfButtonComponent } from '../../layout/ef-button/ef-button.component';\n\nexport interface CatalogueProductVariant {\n variantId: string;\n title: string;\n sku?: string | null;\n price: number;\n compareAtPrice?: number | null;\n optionValues?: Record<string, string>;\n isActive?: boolean;\n countGroup?: string | null;\n [key: string]: unknown;\n}\n\nexport interface CatalogueProduct {\n id: number;\n productCode: string;\n name: string;\n displayName: string;\n unitPrice?: number | null;\n packagingVolume?: number | null;\n categoryAssignments?: CategoryAssignment[];\n productType?: string | null; // 'SIMPLE' | 'VARIABLE'\n variants?: CatalogueProductVariant[];\n defaultVariantId?: string | null;\n [key: string]: unknown;\n}\n\n@Component({\n selector: 'ef-product-catalogue',\n styleUrl: './ef-product-catalogue.component.scss',\n templateUrl: './ef-product-catalogue.component.html',\n imports: [\n CommonModule,\n FormsModule,\n BadgeModule,\n EfButtonComponent,\n CardModule,\n IconFieldModule,\n InputIconModule,\n InputTextModule,\n MenuModule,\n SelectModule,\n EfQuantityStepperComponent,\n EfProductCatalogueFilterComponent,\n TranslateModule,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EfProductCatalogueComponent implements OnChanges {\n private readonly locale = inject(LOCALE_ID);\n private readonly currencyPipe = new CurrencyPipe(this.locale);\n\n /** Products to display */\n products = input<CatalogueProduct[]>([]);\n\n /** Category groups for filtering */\n categoryGroups = input<CategoryGroup[]>([]);\n\n /** Initial selected items (for editing existing orders) */\n initialSelectedItems = input<Array<{ productId?: unknown; quantity: number; variantId?: string | null }>>(\n [],\n );\n\n /** Default filters to apply on init */\n defaultFilters = input<SelectedFilter[]>([]);\n\n /** Property name used as unique key for tracking products in the list */\n trackByField = input<string>('id');\n\n /** Currency code for price formatting */\n currencyCode = input<string>('MAD');\n\n /** Locale used for number/currency formatting and the quantity stepper */\n localeCode = input<string>('fr-FR');\n\n /**\n * Custom product thumbnail template.\n * Context: { $implicit: CatalogueProduct }\n *\n * @example\n * <ef-product-catalogue [products]=\"products()\">\n * <ng-template #productThumbnail let-product>\n * <my-custom-thumbnail [product]=\"product\" />\n * </ng-template>\n * </ef-product-catalogue>\n */\n productThumbnailTpl = contentChild<TemplateRef<unknown>>('productThumbnail');\n\n @ViewChild('sortMenu') sortMenu!: Menu;\n\n /** Emitted when products are validated */\n productsValidated =\n output<Array<{ product: CatalogueProduct; quantity: number; variantId?: string }>>();\n\n productSearch = signal('');\n selectedFilters = signal<SelectedFilter[]>([]);\n selectedSort = signal('Sort By');\n selectedProducts = signal<\n Array<{ product: CatalogueProduct; quantity: number; variantId?: string }>\n >([]);\n\n /** Tracks the currently selected variantId per product key */\n selectedVariants = signal<Record<string, string>>({});\n\n filteredProducts = computed(() => {\n let filtered = this.products();\n const filters = this.selectedFilters();\n const searchTerm = this.productSearch().toLowerCase().trim();\n\n if (searchTerm) {\n filtered = filtered.filter((p) => {\n const displayName = (p.displayName || '').toLowerCase();\n const name = (p.name || '').toLowerCase();\n return displayName.includes(searchTerm) || name.includes(searchTerm);\n });\n }\n\n if (filters.length === 0) {\n return filtered;\n }\n\n const filtersByType = filters.reduce(\n (acc, filter) => {\n if (!acc[filter.type]) {\n acc[filter.type] = [];\n }\n acc[filter.type].push(filter.code);\n return acc;\n },\n {} as Record<string, string[]>,\n );\n\n filtered = filtered.filter((product) => {\n const assignments = product.categoryAssignments || [];\n return Object.entries(filtersByType).every(([type, codes]) => {\n return assignments.some(\n (a) => a.type === type && codes.includes(a.code),\n );\n });\n });\n\n return filtered;\n });\n\n sortOptions = [\n {\n label: 'Newest First',\n icon: 'pi pi-calendar-plus',\n command: () => {\n this.selectedSort.set('Newest First');\n this.sortMenu.hide();\n },\n },\n {\n label: 'Price: Low to High',\n icon: 'pi pi-sort-amount-up',\n command: () => {\n this.selectedSort.set('Price: Low to High');\n this.sortMenu.hide();\n },\n },\n {\n label: 'Price: High to Low',\n icon: 'pi pi-sort-amount-down',\n command: () => {\n this.selectedSort.set('Price: High to Low');\n this.sortMenu.hide();\n },\n },\n ];\n\n onFiltersChanged(filters: SelectedFilter[]): void {\n this.selectedFilters.set(filters);\n }\n\n ngOnChanges(): void {\n this.initializeSelectedProducts();\n this.initializeDefaultFilters();\n }\n\n productKey(product: CatalogueProduct): unknown {\n return product[this.trackByField()];\n }\n\n private initializeSelectedProducts(): void {\n const initialItems = this.initialSelectedItems();\n const allProducts = this.products();\n\n if (\n !initialItems ||\n initialItems.length === 0 ||\n !allProducts ||\n allProducts.length === 0\n ) {\n return;\n }\n\n const selectedProductsArray: Array<{\n product: CatalogueProduct;\n quantity: number;\n variantId?: string;\n }> = [];\n\n initialItems.forEach((orderItem) => {\n const matchingProduct = allProducts.find(\n (p) => this.productKey(p) === orderItem.productId,\n );\n if (matchingProduct) {\n selectedProductsArray.push({\n product: matchingProduct,\n quantity: orderItem.quantity || 1,\n variantId: orderItem.variantId ?? undefined,\n });\n }\n });\n\n this.selectedProducts.set(selectedProductsArray);\n }\n\n private initializeDefaultFilters(): void {\n const defaults = this.defaultFilters();\n if (defaults.length > 0 && this.selectedFilters().length === 0) {\n this.selectedFilters.set(defaults);\n }\n }\n\n toggleSortMenu(event: Event): void {\n this.sortMenu.toggle(event);\n }\n\n /** Composite key for tracking product+variant selections */\n private selectionKey(productKey: unknown, variantId?: string): string {\n return variantId ? `${productKey}::${variantId}` : `${productKey}`;\n }\n\n /** Get the selected variantId for a product, or its defaultVariantId */\n getSelectedVariantId(product: CatalogueProduct): string | undefined {\n const key = String(this.productKey(product));\n const selected = this.selectedVariants()[key];\n if (selected) return selected;\n if (this.isVariableProduct(product)) {\n const activeVariants = this.getActiveVariants(product);\n return product.defaultVariantId ?? activeVariants[0]?.variantId;\n }\n return undefined;\n }\n\n /** Set the selected variant for a product */\n setSelectedVariant(product: CatalogueProduct, variantId: string): void {\n const key = String(this.productKey(product));\n this.selectedVariants.update((v) => ({ ...v, [key]: variantId }));\n }\n\n /** Check if product is a VARIABLE product with variants */\n isVariableProduct(product: CatalogueProduct): boolean {\n return product.productType === 'VARIABLE' && !!product.variants?.length;\n }\n\n /** Get active variants for a product */\n getActiveVariants(product: CatalogueProduct): CatalogueProductVariant[] {\n return (product.variants || []).filter((v) => v.isActive !== false);\n }\n\n /** Get total quantity for a product across all its variants */\n getProductQuantity(product: CatalogueProduct): number {\n const key = this.productKey(product);\n if (this.isVariableProduct(product)) {\n return this.selectedProducts()\n .filter((sp) => this.productKey(sp.product) === key)\n .reduce((sum, sp) => sum + sp.quantity, 0);\n }\n const selected = this.selectedProducts().find(\n (sp) => this.productKey(sp.product) === key,\n );\n return selected?.quantity || 0;\n }\n\n /** Get quantity for a specific product+variant combination */\n getVariantQuantity(product: CatalogueProduct, variantId: string): number {\n const key = this.productKey(product);\n const selected = this.selectedProducts().find(\n (sp) => this.productKey(sp.product) === key && sp.variantId === variantId,\n );\n return selected?.quantity || 0;\n }\n\n addProduct(product: CatalogueProduct): void {\n const key = this.productKey(product);\n const variantId = this.isVariableProduct(product)\n ? this.getSelectedVariantId(product)\n : undefined;\n const selKey = this.selectionKey(key, variantId);\n const currentProducts = this.selectedProducts();\n\n const existingIndex = currentProducts.findIndex(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) === selKey,\n );\n\n if (existingIndex !== -1) {\n this.selectedProducts.set(\n currentProducts.map((sp, i) =>\n i === existingIndex ? { ...sp, quantity: sp.quantity + 1 } : sp,\n ),\n );\n } else {\n this.selectedProducts.set([\n ...currentProducts,\n { product, quantity: 1, variantId },\n ]);\n }\n }\n\n removeProduct(product: CatalogueProduct): void {\n const key = this.productKey(product);\n if (this.isVariableProduct(product)) {\n // Remove all variant selections for this product\n this.selectedProducts.set(\n this.selectedProducts().filter(\n (sp) => this.productKey(sp.product) !== key,\n ),\n );\n } else {\n this.selectedProducts.set(\n this.selectedProducts().filter(\n (sp) => this.productKey(sp.product) !== key,\n ),\n );\n }\n }\n\n removeVariantSelection(product: CatalogueProduct, variantId: string): void {\n const key = this.productKey(product);\n const selKey = this.selectionKey(key, variantId);\n this.selectedProducts.set(\n this.selectedProducts().filter(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) !== selKey,\n ),\n );\n }\n\n updateProductQuantity(product: CatalogueProduct, quantity: number): void {\n const key = this.productKey(product);\n const variantId = this.isVariableProduct(product)\n ? this.getSelectedVariantId(product)\n : undefined;\n const selKey = this.selectionKey(key, variantId);\n const currentProducts = this.selectedProducts();\n\n if (quantity === 0) {\n this.selectedProducts.set(\n currentProducts.filter(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) !== selKey,\n ),\n );\n } else {\n this.selectedProducts.set(\n currentProducts.map((sp) =>\n this.selectionKey(this.productKey(sp.product), sp.variantId) === selKey\n ? { ...sp, quantity }\n : sp,\n ),\n );\n }\n }\n\n updateVariantQuantity(product: CatalogueProduct, variantId: string, quantity: number): void {\n const key = this.productKey(product);\n const selKey = this.selectionKey(key, variantId);\n const currentProducts = this.selectedProducts();\n\n if (quantity === 0) {\n this.removeVariantSelection(product, variantId);\n } else {\n const existingIndex = currentProducts.findIndex(\n (sp) => this.selectionKey(this.productKey(sp.product), sp.variantId) === selKey,\n );\n if (existingIndex !== -1) {\n this.selectedProducts.set(\n currentProducts.map((sp, i) =>\n i === existingIndex ? { ...sp, quantity } : sp,\n ),\n );\n } else {\n this.selectedProducts.set([\n ...currentProducts,\n { product, quantity, variantId },\n ]);\n }\n }\n }\n\n validateSelection(): void {\n const selectedItems = this.selectedProducts();\n if (selectedItems.length > 0) {\n this.productsValidated.emit([...selectedItems]);\n this.selectedProducts.set([]);\n this.selectedVariants.set({});\n }\n }\n\n getPackagingLabel(product: CatalogueProduct): string {\n const packagingAssignment = product.categoryAssignments?.find(\n (ca) => ca.type === 'PACKAGING',\n );\n return packagingAssignment?.code || '';\n }\n\n getVariantTitle(product: CatalogueProduct, variantId: string): string {\n const variant = product.variants?.find((v) => v.variantId === variantId);\n return variant?.title || variantId;\n }\n\n trackKey(product: CatalogueProduct): unknown {\n return this.productKey(product);\n }\n\n formatPrice(product: CatalogueProduct): string {\n if (this.isVariableProduct(product)) {\n const variantId = this.getSelectedVariantId(product);\n const variant = product.variants?.find((v) => v.variantId === variantId);\n if (variant) {\n return this.formatCurrency(variant.price);\n }\n // Fallback: show price range\n const activeVariants = this.getActiveVariants(product);\n if (activeVariants.length > 0) {\n const min = Math.min(...activeVariants.map((v) => v.price));\n const max = Math.max(...activeVariants.map((v) => v.price));\n if (min === max) return this.formatCurrency(min);\n return `${this.formatCurrency(min)} - ${this.formatCurrency(max)}`;\n }\n }\n const price = product.unitPrice;\n if (price == null) return '';\n return this.formatCurrency(price);\n }\n\n formatVariantPrice(variant: CatalogueProductVariant): string {\n return this.formatCurrency(variant.price);\n }\n\n private formatCurrency(value: number | null | undefined): string {\n if (value == null) return '';\n return (\n this.currencyPipe.transform(\n value,\n this.currencyCode(),\n 'symbol-narrow',\n '1.2-2',\n ) || ''\n );\n }\n}\n","<div class=\"bg-surface-0 dark:bg-surface-950\">\n <div class=\"flex flex-row gap-4\">\n <!-- Filter Sidebar -->\n <ef-product-catalogue-filter\n [categoryGroups]=\"categoryGroups()\"\n [products]=\"products()\"\n [(selectedFilters)]=\"selectedFilters\"\n (filtersChanged)=\"onFiltersChanged($event)\"\n />\n\n <!-- Product Grid -->\n <div\n class=\"min-h-96 flex-1 rounded-md border-2 border-dotted border-surface-200 bg-surface-50 p-4 dark:border-surface-700 dark:bg-surface-800\"\n >\n <div class=\"sticky top-0 z-10 w-full mb-4 bg-surface-50 dark:bg-surface-800 pb-2 -mt-4 pt-4 -mx-4 px-4\">\n <p-iconfield iconPosition=\"left\" class=\"w-full\">\n <p-inputicon class=\"pi pi-search\"></p-inputicon>\n <input\n pInputText\n size=\"small\"\n [(ngModel)]=\"productSearch\"\n [placeholder]=\"'placeholder.search_products' | translate\"\n class=\"w-full\"\n />\n </p-iconfield>\n </div>\n <div class=\"grid grid-cols-2 gap-4 lg:grid-cols-3 xl:grid-cols-4\">\n @for (product of filteredProducts(); track trackKey(product)) {\n <p-card\n [header]=\"''\"\n [class.border-2]=\"true\"\n [class.border-blue-100]=\"getProductQuantity(product) > 0\"\n [class.!bg-blue-100]=\"getProductQuantity(product) > 0\"\n [class.dark:!border-blue-900]=\"getProductQuantity(product) > 0\"\n [class.dark:!bg-blue-900]=\"getProductQuantity(product) > 0\"\n [class.border-transparent]=\"getProductQuantity(product) === 0\"\n class=\"cursor-pointer hover:shadow-md dark:hover:shadow-md dark:hover:shadow-gray-300/50\"\n >\n <ng-template pTemplate=\"header\">\n <div class=\"w-full\">\n @if (productThumbnailTpl()) {\n <ng-container *ngTemplateOutlet=\"productThumbnailTpl(); context: { $implicit: product }\"></ng-container>\n } @else {\n <!-- Default fallback thumbnail -->\n <div class=\"flex h-[13rem] items-center justify-center bg-surface-100 text-3xl text-surface-400 dark:bg-surface-800\">\n <i class=\"pi pi-box\"></i>\n </div>\n }\n </div>\n </ng-template>\n <ng-template pTemplate=\"content\">\n <div [innerHTML]=\"product.displayName\" class=\"h-14 font-semibold\"></div>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (isVariableProduct(product)) {\n <!-- Variable product: variant selector + per-variant quantities -->\n <div class=\"flex items-center justify-between mb-2\">\n <p-badge\n severity=\"secondary\"\n [value]=\"getActiveVariants(product).length + ' ' + ('catalogue.variants' | translate)\"\n badgeSize=\"small\"\n />\n <div class=\"text-lg font-bold\">\n {{ formatPrice(product) }}\n </div>\n </div>\n\n <!-- Variant selector -->\n <p-select\n [options]=\"getActiveVariants(product)\"\n optionLabel=\"title\"\n optionValue=\"variantId\"\n [ngModel]=\"getSelectedVariantId(product)\"\n (ngModelChange)=\"setSelectedVariant(product, $event)\"\n size=\"small\"\n styleClass=\"w-full mb-3\"\n [placeholder]=\"'placeholder.select_variant' | translate\"\n />\n\n <!-- Add button or quantity stepper for selected variant -->\n <div class=\"mt-2\">\n @if (getProductQuantity(product) > 0) {\n <!-- Show per-variant breakdown -->\n @for (entry of selectedProducts(); track $index) {\n @if (productKey(entry.product) === productKey(product) && entry.variantId) {\n <div class=\"flex items-center justify-center gap-2 mb-2\">\n <span class=\"text-xs font-medium text-surface-600 dark:text-surface-400 min-w-12 text-center\">\n {{ getVariantTitle(product, entry.variantId) }}\n </span>\n <ef-quantity-stepper\n [ngModel]=\"entry.quantity\"\n (ngModelChange)=\"updateVariantQuantity(product, entry.variantId!, $event)\"\n [min]=\"0\"\n [max]=\"1000\"\n [maxFractionDigits]=\"4\"\n [locale]=\"localeCode()\"\n />\n <ef-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n styleClass=\"!rounded-full !w-7 !h-7 !p-0\"\n size=\"small\"\n (clickEvent)=\"removeVariantSelection(product, entry.variantId!)\"\n />\n </div>\n }\n }\n <!-- Add another variant button -->\n <ef-button\n icon=\"pi pi-plus\"\n [label]=\"'button.add_variant' | translate\"\n severity=\"primary\"\n styleClass=\"w-full !rounded-full !h-10 mt-1\"\n size=\"small\"\n (clickEvent)=\"addProduct(product)\"\n />\n } @else {\n <ef-button\n [label]=\"'button.add' | translate\"\n icon=\"pi pi-shopping-cart\"\n severity=\"primary\"\n styleClass=\"w-full !rounded-full !h-12\"\n (clickEvent)=\"addProduct(product)\"\n />\n }\n </div>\n } @else {\n <!-- Simple product: original behavior -->\n <div class=\"flex items-center justify-between\">\n <p-badge\n severity=\"secondary\"\n [value]=\"getPackagingLabel(product)\"\n badgeSize=\"small\"\n />\n <div class=\"text-lg font-bold\">\n {{ formatPrice(product) }}\n </div>\n </div>\n <div class=\"mt-4\">\n @if (getProductQuantity(product) > 0) {\n <div class=\"flex items-center justify-between\">\n <ef-button\n icon=\"pi pi-trash\"\n severity=\"primary\"\n styleClass=\"!rounded-full\"\n (clickEvent)=\"removeProduct(product)\"\n />\n <ef-quantity-stepper\n [ngModel]=\"getProductQuantity(product)\"\n (ngModelChange)=\"updateProductQuantity(product, $event)\"\n [min]=\"0\"\n [max]=\"1000\"\n [maxFractionDigits]=\"4\"\n [locale]=\"localeCode()\"\n />\n </div>\n } @else {\n <ef-button\n [label]=\"'button.add' | translate\"\n icon=\"pi pi-shopping-cart\"\n severity=\"primary\"\n styleClass=\"w-full !rounded-full !h-12\"\n (clickEvent)=\"addProduct(product)\"\n />\n }\n </div>\n }\n </ng-template>\n </p-card>\n } @empty {\n <div class=\"p-2\">{{ 'message.no_products_found' | translate }}</div>\n }\n </div>\n </div>\n </div>\n</div>\n","import {\n booleanAttribute,\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfButtonComponent } from '../ef-button/ef-button.component';\n\n@Component({\n selector: 'ef-dialog',\n standalone: true,\n templateUrl: './ef-dialog.component.html',\n imports: [DialogModule, TranslateModule, EfButtonComponent],\n})\nexport class EfDialogComponent {\n /** Direct header text (not translated) */\n @Input() header?: string;\n /** Translation key — takes priority over header */\n @Input() headerKey?: string;\n\n @Input({ transform: booleanAttribute }) visible = false;\n @Input({ transform: booleanAttribute }) modal = true;\n @Input({ transform: booleanAttribute }) closable = true;\n @Input({ transform: booleanAttribute }) draggable = false;\n @Input({ transform: booleanAttribute }) resizable = false;\n @Input() style?: { [key: string]: string };\n @Input() styleClass?: string;\n @Input() position:\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'topleft'\n | 'topright'\n | 'bottomleft'\n | 'bottomright' = 'center';\n @Input() appendTo?: string;\n\n // ── Default action footer (opt-in) ────────────────────────────────────────\n /**\n * Render a standard cancel + save action footer. Caller wires (saveAction)\n * and (cancelAction). When false (default), the footer falls back to the\n * `[dialogFooter]` projection slot for fully custom footers.\n */\n @Input({ transform: booleanAttribute }) defaultActions = true;\n @Input() saveLabelKey = 'button.save';\n @Input() cancelLabelKey = 'button.cancel';\n @Input() saveLabel?: string;\n @Input() cancelLabel?: string;\n @Input() saveIcon = 'pi pi-check';\n @Input({ transform: booleanAttribute }) saveDisabled = false;\n @Input() saveStyleClass = 'p-button-sm';\n @Input() cancelStyleClass = 'p-button-sm p-button-text';\n\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() showEvent = new EventEmitter<void>();\n @Output() hideEvent = new EventEmitter<void>();\n @Output() saveAction = new EventEmitter<void>();\n @Output() cancelAction = new EventEmitter<void>();\n\n // Captured here so we can pipe it directly into <p-dialog>'s [footerTemplate]\n // input. Templates declared inside this component's view are NOT content\n // children of <p-dialog>, so its @ContentChild('footer') lookup never finds\n // them — the input is the only reliable wiring.\n @ViewChild('defaultFooter', { static: true }) defaultFooterTpl?: TemplateRef<void>;\n\n handleVisibleChange(value: boolean): void {\n this.visible = value;\n this.visibleChange.emit(value);\n }\n\n handleShow(): void {\n this.showEvent.emit();\n }\n\n handleHide(): void {\n this.hideEvent.emit();\n }\n\n /**\n * Default cancel handler — emits and also closes the dialog. Callers can\n * override behavior via (cancelAction) (close still happens).\n */\n onDefaultCancel(): void {\n this.cancelAction.emit();\n this.handleVisibleChange(false);\n }\n\n onDefaultSave(): void {\n if (this.saveDisabled) return;\n this.saveAction.emit();\n }\n}\n","<p-dialog\n [header]=\"headerKey ? (headerKey | translate) : header\"\n [visible]=\"visible\"\n (visibleChange)=\"handleVisibleChange($event)\"\n [modal]=\"modal\"\n [closable]=\"closable\"\n [draggable]=\"draggable\"\n [resizable]=\"resizable\"\n [style]=\"style\"\n [styleClass]=\"styleClass\"\n [position]=\"position\"\n [appendTo]=\"appendTo\"\n [footerTemplate]=\"defaultActions ? defaultFooterTpl : null\"\n (onShow)=\"handleShow()\"\n (onHide)=\"handleHide()\"\n>\n <ng-content />\n</p-dialog>\n\n<!-- Default action footer. Declared outside <p-dialog> because its <ng-template>\n is a view child of ef-dialog, not a content child of <p-dialog>; we hand it\n to <p-dialog> via the [footerTemplate] input above. -->\n<ng-template #defaultFooter>\n <div class=\"flex justify-end gap-2\">\n <ef-button\n [labelKey]=\"cancelLabelKey\"\n [label]=\"cancelLabel\"\n [styleClass]=\"cancelStyleClass\"\n (clickEvent)=\"onDefaultCancel()\"\n />\n <ef-button\n [labelKey]=\"saveLabelKey\"\n [label]=\"saveLabel\"\n [icon]=\"saveIcon\"\n [styleClass]=\"saveStyleClass\"\n [disabled]=\"saveDisabled\"\n (clickEvent)=\"onDefaultSave()\"\n />\n </div>\n</ng-template>\n","/**\n * Available Tailwind color names for badges\n */\nexport type EfBadgeColor =\n | 'emerald'\n | 'green'\n | 'lime'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose'\n | 'slate'\n | 'gray'\n | 'zinc'\n | 'neutral'\n | 'stone'\n | 'red';\n\n/**\n * Badge size variants\n */\nexport type EfBadgeSize = 'sm' | 'md' | 'lg';\n\n/**\n * Badge style variants\n */\nexport type EfBadgeVariant = 'filled' | 'outline' | 'dot' | 'pill';\n\n/**\n * Badge configuration interface\n */\nexport interface EfBadgeConfig {\n /**\n * Text label to display (optional for 'dot' variant)\n */\n label?: string;\n\n /**\n * Badge color (Tailwind color name)\n * @default 'blue'\n */\n color?: EfBadgeColor;\n\n /**\n * Badge size\n * @default 'md'\n */\n size?: EfBadgeSize;\n\n /**\n * Badge style variant\n * @default 'filled'\n */\n variant?: EfBadgeVariant;\n\n /**\n * Custom CSS classes to apply\n */\n styleClass?: string;\n\n /**\n * Icon class (e.g., PrimeIcons) to display before label\n */\n icon?: string;\n\n /**\n * Whether to show the dot indicator\n * @default true for 'dot' variant, false otherwise\n */\n showDot?: boolean;\n}\n\n/**\n * Default badge configuration\n */\nexport const EF_BADGE_DEFAULTS: Required<Omit<EfBadgeConfig, 'label' | 'icon'>> = {\n color: 'blue',\n size: 'md',\n variant: 'filled',\n styleClass: '',\n showDot: false,\n};\n\n/**\n * Maps Tailwind colors to their background classes\n */\nexport const EF_BADGE_BG_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'bg-emerald-500',\n green: 'bg-green-500',\n lime: 'bg-lime-500',\n orange: 'bg-orange-500',\n amber: 'bg-amber-500',\n yellow: 'bg-yellow-500',\n teal: 'bg-teal-500',\n cyan: 'bg-cyan-500',\n sky: 'bg-sky-500',\n blue: 'bg-blue-500',\n indigo: 'bg-indigo-500',\n violet: 'bg-violet-500',\n purple: 'bg-purple-500',\n fuchsia: 'bg-fuchsia-500',\n pink: 'bg-pink-500',\n rose: 'bg-rose-500',\n slate: 'bg-slate-500',\n gray: 'bg-gray-500',\n zinc: 'bg-zinc-500',\n neutral: 'bg-neutral-500',\n stone: 'bg-stone-500',\n red: 'bg-red-500',\n};\n\n/**\n * Maps Tailwind colors to their text classes\n */\nexport const EF_BADGE_TEXT_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'text-emerald-700',\n green: 'text-green-700',\n lime: 'text-lime-700',\n orange: 'text-orange-700',\n amber: 'text-amber-700',\n yellow: 'text-yellow-700',\n teal: 'text-teal-700',\n cyan: 'text-cyan-700',\n sky: 'text-sky-700',\n blue: 'text-blue-700',\n indigo: 'text-indigo-700',\n violet: 'text-violet-700',\n purple: 'text-purple-700',\n fuchsia: 'text-fuchsia-700',\n pink: 'text-pink-700',\n rose: 'text-rose-700',\n slate: 'text-slate-700',\n gray: 'text-gray-700',\n zinc: 'text-zinc-700',\n neutral: 'text-neutral-700',\n stone: 'text-stone-700',\n red: 'text-red-700',\n};\n\n/**\n * Maps Tailwind colors to their border classes\n */\nexport const EF_BADGE_BORDER_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'border-emerald-500',\n green: 'border-green-500',\n lime: 'border-lime-500',\n orange: 'border-orange-500',\n amber: 'border-amber-500',\n yellow: 'border-yellow-500',\n teal: 'border-teal-500',\n cyan: 'border-cyan-500',\n sky: 'border-sky-500',\n blue: 'border-blue-500',\n indigo: 'border-indigo-500',\n violet: 'border-violet-500',\n purple: 'border-purple-500',\n fuchsia: 'border-fuchsia-500',\n pink: 'border-pink-500',\n rose: 'border-rose-500',\n slate: 'border-slate-500',\n gray: 'border-gray-500',\n zinc: 'border-zinc-500',\n neutral: 'border-neutral-500',\n stone: 'border-stone-500',\n red: 'border-red-500',\n};\n\n/**\n * Maps Tailwind colors to their light background classes (for filled variant)\n */\nexport const EF_BADGE_BG_LIGHT_COLORS: Record<EfBadgeColor, string> = {\n emerald: 'bg-emerald-100',\n green: 'bg-green-100',\n lime: 'bg-lime-100',\n orange: 'bg-orange-100',\n amber: 'bg-amber-100',\n yellow: 'bg-yellow-100',\n teal: 'bg-teal-100',\n cyan: 'bg-cyan-100',\n sky: 'bg-sky-100',\n blue: 'bg-blue-100',\n indigo: 'bg-indigo-100',\n violet: 'bg-violet-100',\n purple: 'bg-purple-100',\n fuchsia: 'bg-fuchsia-100',\n pink: 'bg-pink-100',\n rose: 'bg-rose-100',\n slate: 'bg-slate-100',\n gray: 'bg-gray-100',\n zinc: 'bg-zinc-100',\n neutral: 'bg-neutral-100',\n stone: 'bg-stone-100',\n red: 'bg-red-100',\n};\n","import { Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n EfBadgeConfig,\n EfBadgeColor,\n EfBadgeSize,\n EfBadgeVariant,\n EF_BADGE_DEFAULTS,\n EF_BADGE_BG_COLORS,\n EF_BADGE_TEXT_COLORS,\n EF_BADGE_BORDER_COLORS,\n EF_BADGE_BG_LIGHT_COLORS,\n} from './ef-badge.component.types';\n\n/**\n * ef-badge - Reusable status badge component\n *\n * Features:\n * - Multiple color variants (Tailwind colors)\n * - Multiple size options (sm, md, lg)\n * - Multiple style variants (filled, outline, dot, pill)\n * - Icon support\n * - Fully customizable with styleClass\n *\n * @example\n * ```html\n * <!-- Simple filled badge -->\n * <ef-badge label=\"Active\" color=\"green\" />\n *\n * <!-- Dot variant -->\n * <ef-badge label=\"En attente\" color=\"yellow\" variant=\"dot\" />\n *\n * <!-- With icon -->\n * <ef-badge label=\"Error\" color=\"red\" icon=\"pi pi-exclamation-circle\" />\n *\n * <!-- Outline variant -->\n * <ef-badge label=\"Info\" color=\"blue\" variant=\"outline\" />\n *\n * <!-- Pill variant -->\n * <ef-badge label=\"New\" color=\"purple\" variant=\"pill\" />\n * ```\n */\n@Component({\n selector: 'ef-badge',\n standalone: true,\n templateUrl: './ef-badge.component.html',\n styleUrl: './ef-badge.component.scss',\n imports: [CommonModule],\n})\nexport class EfBadgeComponent {\n /**\n * Badge label text\n */\n label = input<string>();\n\n /**\n * Badge color (Tailwind color name)\n */\n color = input<EfBadgeColor>(EF_BADGE_DEFAULTS.color);\n\n /**\n * Badge size\n */\n size = input<EfBadgeSize>(EF_BADGE_DEFAULTS.size);\n\n /**\n * Badge style variant\n */\n variant = input<EfBadgeVariant>(EF_BADGE_DEFAULTS.variant);\n\n /**\n * Custom CSS classes\n */\n styleClass = input<string>(EF_BADGE_DEFAULTS.styleClass);\n\n /**\n * Icon class (e.g., PrimeIcons)\n */\n icon = input<string>();\n\n /**\n * Whether to show the dot indicator\n */\n showDot = input<boolean>(EF_BADGE_DEFAULTS.showDot);\n\n /**\n * Computed badge configuration with defaults\n */\n config = computed<Required<EfBadgeConfig>>(() => ({\n label: this.label() || '',\n color: this.color(),\n size: this.size(),\n variant: this.variant(),\n styleClass: this.styleClass(),\n icon: this.icon() || '',\n showDot: this.showDot() || this.variant() === 'dot',\n }));\n\n /**\n * Computed CSS classes for the badge\n */\n badgeClasses = computed(() => {\n const cfg = this.config();\n const classes: string[] = ['ef-badge'];\n\n // Base classes\n classes.push('inline-flex', 'items-center', 'gap-1.5', 'font-medium');\n\n // Size classes\n switch (cfg.size) {\n case 'sm':\n classes.push('text-xs', 'px-2', 'py-0.5');\n break;\n case 'md':\n classes.push('text-sm', 'px-2.5', 'py-1');\n break;\n case 'lg':\n classes.push('text-base', 'px-3', 'py-1.5');\n break;\n }\n\n // Variant-specific classes\n switch (cfg.variant) {\n case 'filled':\n classes.push('rounded');\n classes.push(EF_BADGE_BG_LIGHT_COLORS[cfg.color]);\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n break;\n\n case 'outline':\n classes.push('rounded', 'border-2');\n classes.push(EF_BADGE_BORDER_COLORS[cfg.color]);\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n classes.push('bg-white');\n break;\n\n case 'dot':\n classes.push('rounded');\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n break;\n\n case 'pill':\n classes.push('rounded-full');\n classes.push(EF_BADGE_BG_LIGHT_COLORS[cfg.color]);\n classes.push(EF_BADGE_TEXT_COLORS[cfg.color]);\n break;\n }\n\n // Custom classes\n if (cfg.styleClass) {\n classes.push(cfg.styleClass);\n }\n\n return classes.join(' ');\n });\n\n /**\n * Computed CSS classes for the dot indicator\n */\n dotClasses = computed(() => {\n const cfg = this.config();\n const classes: string[] = ['inline-block', 'shrink-0', 'rounded-full'];\n\n // Dot size based on badge size\n switch (cfg.size) {\n case 'sm':\n classes.push('w-2', 'h-2');\n break;\n case 'md':\n classes.push('w-2.5', 'h-2.5');\n break;\n case 'lg':\n classes.push('w-3', 'h-3');\n break;\n }\n\n // Dot color\n classes.push(EF_BADGE_BG_COLORS[cfg.color]);\n\n return classes.join(' ');\n });\n\n /**\n * Computed CSS classes for the icon\n */\n iconClasses = computed(() => {\n const cfg = this.config();\n const classes: string[] = [];\n\n if (cfg.icon) {\n classes.push(cfg.icon);\n }\n\n // Icon size based on badge size\n switch (cfg.size) {\n case 'sm':\n classes.push('text-xs');\n break;\n case 'md':\n classes.push('text-sm');\n break;\n case 'lg':\n classes.push('text-base');\n break;\n }\n\n return classes.join(' ');\n });\n}\n","<span [class]=\"badgeClasses()\">\n <!-- Dot indicator -->\n @if (config().showDot) {\n <span [class]=\"dotClasses()\"></span>\n }\n\n <!-- Icon -->\n @if (config().icon) {\n <i [class]=\"iconClasses()\"></i>\n }\n\n <!-- Label -->\n @if (config().label) {\n <span>{{ config().label }}</span>\n }\n</span>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n Output,\n} from '@angular/core';\nimport { EfButtonComponent } from '../ef-button/ef-button.component';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ScreenStateEnum, ScreenContext } from '@elasticias/screens';\nimport { Router } from '@angular/router';\nimport { PermissionsEnum } from '@elasticias/types';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ef-toolbar',\n standalone: true,\n templateUrl: 'ef-toolbar.component.html',\n styleUrl: 'ef-toolbar.component.scss',\n imports: [\n CommonModule,\n ToolbarModule,\n EfButtonComponent,\n IconFieldModule,\n InputIconModule,\n InputTextModule,\n FormsModule,\n TranslateModule,\n ],\n})\nexport class EfToolbarComponent {\n @Input() context: ScreenContext;\n\n @Input() state: string;\n @Input() disabled: boolean;\n\n // Detail Action\n @Output() back = new EventEmitter();\n @Output() save = new EventEmitter();\n @Output() delete = new EventEmitter();\n @Output() duplicate = new EventEmitter();\n @Output() print = new EventEmitter();\n @Output() triggerCustoAction = new EventEmitter<any>();\n\n // Search Actions\n @Output() add = new EventEmitter();\n // `search` collides with the native HTMLInputElement `search` event under\n // @angular-eslint/no-output-native, but renaming would churn every consumer\n // template — keep the name, suppress the rule for this line only.\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() search = new EventEmitter();\n @Output() clear = new EventEmitter();\n\n searchText = '';\n\n // Flags\n @Input() backButton = false;\n @Input() deleteButton = false;\n @Input() duplicateButton = true;\n @Input() saveButton = true;\n @Input() exportButton = false;\n @Input() printButton = false;\n @Input() addButton = true;\n @Input() clearButton = true;\n @Input() searchButton = true;\n @Input() showFreeSearchInput = false;\n\n private router = inject(Router);\n\n get isSearchState(): boolean {\n return this.state === ScreenStateEnum.SEARCH;\n }\n\n get isDetailState(): boolean {\n return this.state === ScreenStateEnum.DETAIL;\n }\n\n get hasReadPermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Read);\n }\n\n get hasWritePermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Write);\n }\n\n get hasEditPermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Edit);\n }\n\n get hasDeletePermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Delete);\n }\n\n get hasDuplicatePermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Duplicate);\n }\n\n get hasExportPermission(): boolean {\n return this.context.isGranted(PermissionsEnum.Export);\n }\n\n get isDuplicateMode(): boolean {\n return this.context?.duplicateMode ?? false;\n }\n\n backAction() {\n this.back.emit();\n this.navigateBack();\n }\n\n deleteAction() {\n this.delete.emit();\n }\n\n saveAction() {\n this.save.emit();\n }\n\n duplicateAction() {\n this.duplicate.emit();\n }\n\n printAction() {\n this.print.emit();\n }\n\n exportAction() {\n this.add.emit();\n }\n\n addAction() {\n this.add.emit();\n }\n\n searchAction() {\n this.search.emit();\n }\n\n clearAction() {\n this.clear.emit();\n }\n\n navigateBack() {\n const currentUrl = this.router.url;\n const baseUrl = currentUrl.substring(0, currentUrl.indexOf('/details'));\n this.router.navigate([baseUrl]);\n }\n}\n","<p-toolbar>\n <ng-template #start>\n <div class=\"flex items-center gap-3\">\n @if (isDetailState || backButton) {\n <ef-button\n icon=\"pi pi-angle-left\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipKey=\"common.back\"\n labelKey=\"common.back\"\n size=\"small\"\n (clickEvent)=\"backAction()\"\n />\n }\n <!-- Custom content slot for start section (e.g., status badge) -->\n <ng-content select=\"[toolbarStart]\" />\n </div>\n </ng-template>\n <ng-template #center>\n @if (showFreeSearchInput) {\n <p-iconfield iconPosition=\"left\">\n <p-inputicon styleClass=\"pi pi-search\" />\n <input\n id=\"freeTextSearch\"\n type=\"text\"\n pInputText\n [placeholder]=\"'common.search' | translate\"\n />\n </p-iconfield>\n }\n </ng-template>\n <ng-template #end>\n <!-- DETAIL state -->\n <!-- Custom content slot for start section (e.g., status badge) -->\n <ng-content select=\"[toolbarEnd]\" />\n @if (isDetailState && isDuplicateMode) {\n <span\n class=\"duplicate-badge flex items-center gap-1 rounded bg-blue-100 px-2 py-1 text-sm text-blue-700\"\n >\n <i class=\"pi pi-copy\"></i> {{ 'common.duplicate' | translate }}\n </span>\n }\n @if (isDetailState && deleteButton && hasDeletePermission) {\n <ef-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.delete\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"deleteAction()\"\n />\n }\n @if (isDetailState && printButton) {\n <ef-button\n icon=\"pi pi-print\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.print\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"printAction()\"\n />\n }\n @if (\n isDetailState &&\n duplicateButton &&\n hasDuplicatePermission &&\n !isDuplicateMode\n ) {\n <ef-button\n icon=\"pi pi-copy\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"left\"\n tooltipKey=\"common.duplicate\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"duplicateAction()\"\n />\n }\n @if (isDetailState && saveButton && hasWritePermission) {\n <ef-button\n icon=\"pi pi-save\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.save\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"saveAction()\"\n />\n }\n <!-- SEARCH state -->\n @if (isSearchState && exportButton && hasExportPermission) {\n <ef-button\n icon=\"pi pi-upload\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.export\"\n size=\"small\"\n (clickEvent)=\"exportAction()\"\n />\n }\n @if (isSearchState && addButton && hasWritePermission) {\n <ef-button\n icon=\"pi pi-plus\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.add\"\n labelKey=\"common.add\"\n size=\"small\"\n (clickEvent)=\"addAction()\"\n />\n }\n @if (isSearchState && clearButton) {\n <ef-button\n icon=\"pi pi-filter-slash\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.clear_search_criteria\"\n labelKey=\"common.clear\"\n size=\"small\"\n (clickEvent)=\"clearAction()\"\n />\n }\n @if (isSearchState && searchButton && hasReadPermission) {\n <ef-button\n icon=\"pi pi-search\"\n severity=\"primary\"\n styleClass=\"action-btn-text\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.search\"\n labelKey=\"common.search\"\n size=\"small\"\n [disabled]=\"disabled\"\n (clickEvent)=\"searchAction()\"\n />\n }\n </ng-template>\n</p-toolbar>\n","import { Component, Input } from '@angular/core';\nimport { BlockUIModule } from 'primeng/blockui';\n\n@Component({\n selector: 'ef-block-ui',\n standalone: true,\n templateUrl: './ef-block-ui.component.html',\n styleUrls: ['./ef-block-ui.component.scss'],\n imports: [BlockUIModule],\n})\nexport class EfBlockUiComponent {\n @Input() isLoading = false;\n @Input() contentPanel!: any;\n}\n","@if (isLoading) {\n <p-blockUI\n [target]=\"contentPanel\"\n [blocked]=\"isLoading\"\n styleClass=\"appBlockUI w-full h-full fixed top-0 left-0 right-0 flex items-start justify-center bg-black/30 z-20\">\n\n <ng-template pTemplate=\"loader\">\n <!-- Loader Container -->\n <div class=\"mt-2 flex flex-row items-center space-x-4 rounded-lg bg-white px-4 py-2 shadow\">\n <!-- Spinning Loader -->\n <div class=\"h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent dark:border-primary-contrast dark:border-t-transparent\"></div>\n\n <!-- Loading Text -->\n <div id=\"loading-text\" class=\"font-normal text-primary dark:text-primary-contrast\">\n Chargement en cours... !\n </div>\n </div>\n </ng-template>\n </p-blockUI>\n}\n","import { Component, ElementRef, inject, Input, HostBinding } from '@angular/core';\nimport { BlockableUI } from 'primeng/api';\n\n@Component({\n selector: 'ef-blockable-div',\n standalone: true,\n template: `<ng-content></ng-content>`,\n})\nexport class EfBlockableDivComponent implements BlockableUI {\n @Input() style: { [key: string]: string } = {};\n @Input() cssClass = '';\n\n private readonly el = inject(ElementRef);\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement;\n }\n\n @HostBinding('style') get componentStyle() {\n return this.style;\n }\n\n @HostBinding('class') get componentClass() {\n return this.cssClass;\n }\n}\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-input-text',\n standalone: true,\n templateUrl: './ef-input-text.component.html',\n styleUrls: ['./ef-input-text.component.scss'],\n imports: [InputTextModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfInputTextComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input() type = 'text';\n @Input() maxlength?: number;\n @Input({ transform: booleanAttribute }) readonly = false;\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input() autocomplete?: string;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @Output() valueChangeEvent = new EventEmitter<string>();\n\n value = '';\n disabled = false;\n\n private onChange: (value: string) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => 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 handleInput(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChangeEvent.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <input\n [id]=\"effectiveId\"\n [type]=\"type\"\n pInputText\n [pSize]=\"size\"\n [value]=\"value\"\n (input)=\"handleInput($any($event.target).value)\"\n (blur)=\"handleBlur()\"\n [placeholder]=\"effectivePlaceholder\"\n [attr.maxlength]=\"maxlength\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [attr.autocomplete]=\"autocomplete\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n fluid\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n inject,\n Input,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-checkbox',\n standalone: true,\n templateUrl: './ef-checkbox.component.html',\n styleUrls: ['./ef-checkbox.component.scss'],\n imports: [CheckboxModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfCheckboxComponent implements ControlValueAccessor {\n /** Direct label text (not translated) */\n @Input() label?: string;\n /** Translation key — takes priority over label */\n @Input() labelKey?: string;\n\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() value?: any;\n @Input({ transform: booleanAttribute }) binary = false;\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) disabled = false;\n\n checked: any = false;\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get effectiveLabel(): string | undefined {\n return this.labelKey ? undefined : this.label;\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n writeValue(value: any): void {\n this.checked = value;\n }\n\n registerOnChange(fn: (value: any) => 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 handleChange(event: any): void {\n this.checked = event.checked;\n this.onChange(this.binary ? event.checked : event.checked);\n this.onTouched();\n }\n}\n","<p-checkbox\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"checked\"\n [ngModelOptions]=\"{standalone: true}\"\n (onChange)=\"handleChange($event)\"\n [value]=\"value\"\n [binary]=\"binary\"\n [disabled]=\"disabled\"\n/>\n@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" styleClass=\"form-label-left\" />\n}\n@if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n}\n@if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n}\n","import {\n booleanAttribute,\n Component,\n HostBinding,\n inject,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { PasswordModule } from 'primeng/password';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-password',\n standalone: true,\n templateUrl: './ef-password.component.html',\n styleUrls: ['./ef-password.component.scss'],\n imports: [PasswordModule, FormsModule, TranslateModule, EfLabelComponent],\n})\nexport class EfPasswordComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() inputId?: string;\n @Input() name?: string;\n @Input() placeholder?: string;\n @Input() placeholderKey?: string;\n @Input() size: 'small' | 'large' = 'small';\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) fluid = true;\n @Input({ transform: booleanAttribute }) inline = false;\n @Input({ transform: booleanAttribute }) toggleMask = true;\n @Input({ transform: booleanAttribute }) feedback = false;\n @Input() autocomplete?: string;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n\n @Output() valueChangeEvent = new EventEmitter<string>();\n\n value = '';\n disabled = false;\n\n private onChange: (value: string) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get effectiveId(): string {\n return this.inputId ?? this.name ?? '';\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n get isInvalid(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.invalid && (ctrl?.touched || ctrl?.dirty);\n }\n\n writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => 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 handleChange(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChangeEvent.emit(value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"effectiveId\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-password\n [inputId]=\"effectiveId\"\n [name]=\"name\"\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"handleChange($event)\"\n (onBlur)=\"handleBlur()\"\n [toggleMask]=\"toggleMask\"\n [feedback]=\"feedback\"\n [placeholder]=\"effectivePlaceholder\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [attr.autocomplete]=\"autocomplete\"\n [class.ng-invalid]=\"isInvalid\"\n [class.ng-touched]=\"ngControl?.touched\"\n fluid\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import { booleanAttribute, Component, HostBinding, inject, Input, Output, EventEmitter, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\n\n@Component({\n selector: 'ef-multi-select',\n templateUrl: 'ef-multi-select.component.html',\n styleUrls: ['./ef-multi-select.component.scss'],\n standalone: true,\n imports: [FormsModule, MultiSelectModule, TranslateModule, EfLabelComponent],\n})\nexport class EfMultiSelectComponent implements ControlValueAccessor, OnChanges {\n @Output() changeEvent = new EventEmitter<string[]>();\n\n @Input() label?: string;\n @Input() labelKey?: string;\n @Input() id = '';\n @Input() name = '';\n @Input() optionLabel = 'name';\n @Input() optionValue = 'id';\n @Input() options: any;\n @Input() filteredOptions: any;\n @Input() maxSelectedLabels = 3;\n @Input() disabled = false;\n @Input() display: 'comma' | 'chip' = 'comma';\n @Input() size: 'large' | 'small';\n @Input() selectionLimit: any;\n @Input() filters: any;\n @Input() placeholder = '';\n @Input() placeholderKey?: string;\n @Input({ transform: booleanAttribute }) showClear = false;\n @Input() required = false;\n @Input({ transform: booleanAttribute }) inline = false;\n\n @HostBinding('class.ef-inline') get isInline() { return this.inline; }\n @HostBinding('class.ef-required') get isRequired() { return this.required; }\n\n selectedValues: any[] = [];\n\n private propagateChange: (value: any[]) => void = () => { /* noop */ };\n private propagateTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly translateService = inject(TranslateService);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get effectivePlaceholder(): string {\n return this.placeholderKey ? this.translateService.instant(this.placeholderKey) : (this.placeholder ?? '');\n }\n\n get showRequired(): boolean {\n const ctrl = this.ngControl?.control;\n return ctrl?.hasError('required') && ctrl?.touched;\n }\n\n get serverErrors(): string[] | null {\n return this.ngControl?.control?.errors?.serverError ?? null;\n }\n\n writeValue(value: string[]): void {\n if (Array.isArray(value) && value.length > 0 && this.options) {\n this.selectedValues = value\n .map(v => this.options.find((opt: any) => opt[this.optionValue] === v)?.[this.optionValue])\n .filter((opt: any) => !!opt);\n } else {\n this.selectedValues = [];\n }\n }\n\n registerOnChange(fn: (value: any[]) => void): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onInternalModelChange(val: any[]): void {\n const value = val ?? [];\n this.selectedValues = value;\n this.propagateChange(value);\n this.changeEvent.emit(value);\n this.propagateTouched();\n }\n\n handleClear(): void {\n this.selectedValues = [];\n this.propagateChange([]);\n this.changeEvent.emit([]);\n this.propagateTouched();\n }\n\n ngOnChanges(): void {\n if (this.options && this.filters && typeof this.filters === 'object') {\n this.applyFilters(this.filters);\n } else {\n this.filteredOptions = this.options;\n }\n }\n\n private applyFilters(filters: { [key: string]: any }): void {\n this.filteredOptions = this.options.filter((option: any) =>\n Object.keys(filters).every(key => option[key] === filters[key])\n );\n this.selectedValues = [];\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" [for]=\"id\" [required]=\"required\" />\n}\n<div class=\"ef-field-control\">\n <p-multiSelect\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"effectivePlaceholder\"\n [options]=\"filteredOptions\"\n [optionLabel]=\"optionLabel\"\n [optionValue]=\"optionValue\"\n [maxSelectedLabels]=\"maxSelectedLabels\"\n [ngModel]=\"selectedValues\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onInternalModelChange($event)\"\n (onClear)=\"handleClear()\"\n [disabled]=\"disabled\"\n [display]=\"display\"\n [size]=\"size\"\n [selectionLimit]=\"selectionLimit\"\n [showClear]=\"showClear\"\n fluid\n />\n @if (showRequired) {\n <small class=\"text-danger\">{{ 'validation.required' | translate }}</small>\n }\n @if (serverErrors; as errors) {\n @for (error of errors; track error) {\n <small class=\"text-danger block\">{{ error }}</small>\n }\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n inject,\n Input,\n TemplateRef,\n ContentChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfLabelComponent } from '../../layout/ef-label/ef-label.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ef-selectbutton',\n standalone: true,\n templateUrl: './ef-selectbutton.component.html',\n imports: [SelectButtonModule, FormsModule, TranslateModule, CommonModule, EfLabelComponent],\n})\nexport class EfSelectButtonComponent implements ControlValueAccessor {\n /** Direct label text above the selectbutton (not translated) */\n @Input() label?: string;\n /** Translation key for label — takes priority over label */\n @Input() labelKey?: string;\n\n @Input() options: any[] = [];\n @Input() optionLabel = 'label';\n @Input() optionValue = 'value';\n @Input({ transform: booleanAttribute }) multiple = false;\n @Input({ transform: booleanAttribute }) allowEmpty = true;\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input() size: 'small' | 'large' = 'small';\n @Input() styleClass?: string;\n\n @ContentChild('item') itemTemplate?: TemplateRef<any>;\n\n value: any = null;\n\n private onChange: (value: any) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: any) => 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 handleChange(event: any): void {\n this.value = event.value;\n this.onChange(event.value);\n this.onTouched();\n }\n}\n","@if (labelKey || label) {\n <ef-label [labelKey]=\"labelKey\" [label]=\"label\" />\n}\n<p-selectbutton\n [ngModel]=\"value\"\n [ngModelOptions]=\"{standalone: true}\"\n (onChange)=\"handleChange($event)\"\n [options]=\"options\"\n [optionLabel]=\"optionLabel\"\n [optionValue]=\"optionValue\"\n [multiple]=\"multiple\"\n [allowEmpty]=\"allowEmpty\"\n [disabled]=\"disabled\"\n [size]=\"size\"\n [styleClass]=\"styleClass\"\n>\n @if (itemTemplate) {\n <ng-template let-item pTemplate=\"item\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\" />\n </ng-template>\n }\n</p-selectbutton>\n","// Form components\nexport { EfInputTextComponent } from './ef-input-text/ef-input-text.component';\nexport { EfSelectComponent } from './ef-select/ef-select.component';\nexport { EfCheckboxComponent } from './ef-checkbox/ef-checkbox.component';\nexport { EfDatepickerComponent } from './ef-datepicker/ef-datepicker.component';\nexport { EfInputNumberComponent } from './ef-inputnumber/ef-inputnumber.component';\nexport { EfPasswordComponent } from './ef-password/ef-password.component';\nexport { EfMultiSelectComponent } from './ef-multi-select/ef-multi-select.component';\nexport { EfSelectButtonComponent } from './ef-selectbutton/ef-selectbutton.component';\nexport { EfQuantityStepperComponent } from './ef-quantity-stepper/ef-quantity-stepper.component';\n","import { TemplateRef } from '@angular/core';\n\n/**\n * Column alignment options for ef-datatable\n */\nexport type EfDatatableColumnAlign = 'start' | 'center' | 'end';\n\n/**\n * Column data types for automatic formatting\n */\nexport type EfDatatableColumnType = 'text' | 'number' | 'money' | 'date' | 'datetime' | 'boolean' | 'reference';\n\n/**\n * Column definition interface for ef-datatable\n */\nexport interface EfDatatableColumn {\n /** Property name in data object */\n field: string;\n\n /** Column header text */\n header: string;\n\n /** Data type for automatic formatting (default: 'text') */\n type?: EfDatatableColumnType;\n\n /** Text alignment (default: 'start' except money/number = 'end') */\n align?: EfDatatableColumnAlign;\n\n /** Enable sorting for this column (default: true) */\n sortable?: boolean;\n\n /** Enable resizing for this column (default: true) */\n resizable?: boolean;\n\n /** CSS width (e.g., '100px', 'w-[200px]') */\n width?: string;\n\n /** Custom Tailwind or CSS classes */\n styleClass?: string;\n\n // Type-specific formatting options\n\n /** Date format string for DatePipe (default: 'shortDate') */\n dateFormat?: string;\n\n /** Currency code for money type (default: 'EUR') */\n currencyCode?: string;\n\n /** Currency display format (default: 'symbol') */\n currencyDisplay?: 'symbol' | 'code' | 'name';\n\n /** Locale for number/date/currency formatting (default: 'fr-FR') */\n locale?: string;\n\n /** Minimum fraction digits for numbers (default: 2) */\n minFractionDigits?: number;\n\n /** Maximum fraction digits for numbers (default: 2) */\n maxFractionDigits?: number;\n\n // Reference data integration\n\n /** Key for context.ref.get() to lookup reference data */\n referenceKey?: string;\n\n /** Field to match in reference data (default: 'code') */\n referenceValueField?: string;\n\n /** Field to display from reference data (default: 'name') */\n referenceLabelField?: string;\n\n // Template support\n\n /** Custom cell template (receives rowData and column) */\n template?: TemplateRef<unknown>;\n\n /** Custom header template (receives column) */\n headerTemplate?: TemplateRef<unknown>;\n}\n\n/**\n * Action column configuration for edit/delete/duplicate buttons\n */\nexport interface EfDatatableActions {\n /** Show action column (default: true if config provided) */\n show?: boolean;\n\n /** Action column width (default: 'w-20') */\n width?: string;\n\n /** Show edit button (default: true) */\n showEdit?: boolean;\n\n /** Show delete button (default: true) */\n showDelete?: boolean;\n\n /** Show duplicate button (default: false) */\n showDuplicate?: boolean;\n\n /** Position of action column (default: 'end') */\n position?: 'start' | 'end';\n}\n\n/**\n * Main table configuration options\n */\nexport interface EfDatatableConfig {\n // Data binding\n\n /** Enable lazy loading (default: true) */\n lazy?: boolean;\n\n /** Unique identifier field name (default: 'id') */\n dataKey?: string;\n\n // Pagination\n\n /** Enable pagination (default: true) */\n paginator?: boolean;\n\n /** Rows per page (default: 10) */\n rows?: number;\n\n /** Page size options (default: [5, 10, 25, 50]) */\n rowsPerPageOptions?: number[];\n\n // Scrolling\n\n /** Enable scrolling (default: true) */\n scrollable?: boolean;\n\n /** Scroll viewport height (default: '300px') */\n scrollHeight?: string;\n\n // Column features\n\n /** Enable column resizing (default: true) */\n resizableColumns?: boolean;\n\n /** Column resize behavior (default: 'expand') */\n columnResizeMode?: 'fit' | 'expand';\n\n // State persistence\n\n /** State storage location (default: 'local') */\n stateStorage?: 'local' | 'session';\n\n /** State storage key (auto-generated if not provided) */\n stateKey?: string;\n\n // Styling\n\n /** Table size (default: 'small') */\n size?: 'small' | 'large';\n\n /** Custom CSS classes (default: 'text-sm') */\n styleClass?: string;\n\n /** Inline table styles */\n tableStyle?: Record<string, string>;\n\n // i18n\n\n /** Message when no data (default: 'Aucune entree trouvee') */\n emptyMessage?: string;\n\n /** Pagination report template */\n currentPageReportTemplate?: string;\n}\n\n/**\n * Default table configuration values\n */\nexport const EF_DATATABLE_DEFAULTS: Required<EfDatatableConfig> = {\n lazy: true,\n dataKey: 'id',\n paginator: true,\n rows: 10,\n rowsPerPageOptions: [5, 10, 25, 50],\n scrollable: true,\n scrollHeight: '300px',\n resizableColumns: true,\n columnResizeMode: 'expand',\n stateStorage: 'local',\n stateKey: '',\n size: 'small',\n styleClass: 'text-sm',\n tableStyle: { 'min-width': '50rem' },\n emptyMessage: 'Aucune entree trouvee',\n currentPageReportTemplate: '{currentPage} de {totalPages}'\n};\n\n/**\n * Default column configuration values\n */\nexport const EF_DATATABLE_COLUMN_DEFAULTS: Partial<EfDatatableColumn> = {\n type: 'text',\n sortable: true,\n resizable: true,\n dateFormat: 'shortDate',\n currencyCode: 'MAD',\n currencyDisplay: 'symbol',\n locale: 'fr-FR',\n minFractionDigits: 2,\n maxFractionDigits: 2,\n referenceValueField: 'code',\n referenceLabelField: 'name'\n};\n\n/**\n * Default action column configuration\n */\nexport const EF_DATATABLE_ACTIONS_DEFAULTS: Required<EfDatatableActions> = {\n show: true,\n width: 'w-20',\n showEdit: true,\n showDelete: true,\n showDuplicate: false,\n position: 'end'\n};\n\n/**\n * Helper function to determine column alignment based on type\n * @param column - The column configuration\n * @returns The computed alignment\n */\nexport function getColumnAlignment(column: EfDatatableColumn): EfDatatableColumnAlign {\n if (column.align) return column.align;\n if (column.type === 'money' || column.type === 'number') return 'end';\n return 'start';\n}\n\n/**\n * Helper function to merge column configuration with defaults\n * @param column - The column configuration\n * @returns Column with defaults applied\n */\nexport function mergeColumnDefaults(column: EfDatatableColumn): EfDatatableColumn {\n return { ...EF_DATATABLE_COLUMN_DEFAULTS, ...column };\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ScreenContext } from '@elasticias/screens';\nimport { PermissionsEnum } from '@elasticias/types';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EfButtonComponent } from '../../layout/ef-button/ef-button.component';\n\n@Component({\n selector: 'ef-datatable-actionbar',\n standalone: true,\n templateUrl: 'ef-datatable-actionbar.component.html',\n imports: [\n EfButtonComponent,\n TranslateModule,\n ],\n})\nexport class EfDatatableActionBarComponent {\n @Input() context?: ScreenContext;\n\n @Input() state?: string;\n\n @Output() duplicate = new EventEmitter();\n @Output() edit = new EventEmitter();\n @Output() delete = new EventEmitter();\n\n // Flags\n @Input() duplicateButton = true;\n @Input() editButton = true;\n @Input() deleteButton = true;\n\n get hasReadPermission(): boolean {\n return this.context?.isGranted(PermissionsEnum.Read) ?? false;\n }\n\n get hasEditPermission(): boolean {\n return this.context?.isGranted(PermissionsEnum.Edit) ?? false;\n }\n\n get hasDeletePermission(): boolean {\n return this.context?.isGranted(PermissionsEnum.Delete) ?? false;\n }\n\n duplicateAction() {\n this.duplicate.emit();\n }\n\n editAction() {\n this.edit.emit();\n }\n\n deleteAction() {\n this.delete.emit();\n }\n}\n","<div class=\"flex justify-end\" role=\"toolbar\" tabindex=\"0\" (click)=\"$event.stopPropagation()\" (keyup.enter)=\"$event.stopPropagation()\">\n @if (duplicateButton) {\n <ef-button\n icon=\"pi pi-copy\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n tooltipKey=\"common.duplicate\"\n (clickEvent)=\"duplicateAction()\" />\n }\n @if (editButton && hasEditPermission) {\n <ef-button\n icon=\"pi pi-pencil\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n size=\"small\"\n tooltipKey=\"common.edit\"\n (clickEvent)=\"editAction()\" />\n }\n @if (deleteButton && hasDeletePermission) {\n <ef-button\n icon=\"pi pi-trash\"\n severity=\"primary\"\n styleClass=\"action-btn\"\n size=\"small\"\n tooltipPosition=\"top\"\n tooltipKey=\"common.delete\"\n (clickEvent)=\"deleteAction()\" />\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n LOCALE_ID,\n OnInit,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Table, TableLazyLoadEvent, TableModule } from 'primeng/table';\nimport {\n EfDatatableActions,\n EfDatatableColumn,\n EfDatatableColumnAlign,\n EfDatatableConfig,\n EF_DATATABLE_ACTIONS_DEFAULTS,\n EF_DATATABLE_DEFAULTS,\n getColumnAlignment,\n mergeColumnDefaults,\n} from './ef-datatable.component.types';\nimport { ScreenContext } from '@elasticias/screens';\nimport { EfDatatableActionBarComponent } from '../ef-datatable-actionbar/ef-datatable-actionbar.component';\n\n/**\n * SearchEntity interface for datatable consumption.\n * Matches the shape expected from the consuming application's SearchEntity.\n */\nexport interface DatatableSearchEntity {\n items?: Record<string, unknown>[];\n totalCount?: number;\n pagination?: {\n pageNumber: number;\n pageSize: number;\n };\n sort?: Array<{\n field: string;\n sortDirection: string;\n }>;\n}\n\n/**\n * ef-datatable - Reusable table component wrapping PrimeNG Table\n *\n * Features:\n * - Typed columns with automatic formatting (text, number, money, date, datetime, boolean, reference)\n * - Built-in action column with edit/delete/duplicate buttons\n * - Support for custom templates\n * - PassThrough (PT) support for deep customization\n * - Lazy loading, pagination, sorting, column resizing\n * - State persistence (localStorage/sessionStorage)\n * - Reference data integration via ScreenContext\n *\n * @example\n * ```html\n * <ef-datatable\n * [columns]=\"tableColumns\"\n * [searchEntity]=\"searchEntity\"\n * [context]=\"context\"\n * [screenStateKey]=\"screenStateKey\"\n * [actions]=\"{ showDuplicate: true }\"\n * (editRow)=\"edit($event)\"\n * (deleteRow)=\"delete($event)\"\n * (lazyLoad)=\"search($event)\">\n * </ef-datatable>\n * ```\n */\n@Component({\n selector: 'ef-datatable',\n standalone: true,\n templateUrl: './ef-datatable.component.html',\n styleUrl: './ef-datatable.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TableModule,\n TranslateModule,\n EfDatatableActionBarComponent,\n ],\n})\nexport class EfDatatableComponent implements OnInit {\n /**\n * Reference to the underlying PrimeNG Table component\n */\n @ViewChild('pTable') pTable?: Table;\n\n selectedItem: Record<string, unknown> | undefined;\n\n // ============================================================================\n // INPUTS\n // ============================================================================\n\n /**\n * Column definitions with type, alignment, and formatting options\n */\n columns = input<EfDatatableColumn[]>([]);\n\n /**\n * Table configuration (pagination, scrolling, sizing, etc.)\n */\n config = input<EfDatatableConfig>({});\n\n /**\n * Action column configuration (edit/delete/duplicate buttons)\n */\n actions = input<EfDatatableActions | undefined>();\n\n /**\n * SearchEntity containing items, pagination, etc.\n */\n searchEntity = input<DatatableSearchEntity | undefined>();\n\n /**\n * ScreenContext for reference data access\n */\n context = input<ScreenContext | undefined>();\n\n /**\n * PassThrough options for deep DOM customization\n */\n pt = input<Record<string, unknown>>();\n\n /**\n * Screen state key for state persistence (auto-generates stateKey if not provided in config)\n */\n screenStateKey = input<string | undefined>();\n\n // ============================================================================\n // OUTPUTS\n // ============================================================================\n\n /**\n * Emitted when edit button is clicked (emits row ID)\n */\n editRow = output<unknown>();\n\n /**\n * Emitted when delete button is clicked (emits row ID)\n */\n deleteRow = output<unknown>();\n\n /**\n * Emitted when duplicate button is clicked (emits row ID)\n */\n duplicateRow = output<unknown>();\n\n /**\n * Emitted on lazy load events (pagination, sorting, filtering)\n */\n lazyLoad = output<TableLazyLoadEvent>();\n\n /**\n * Emitted when a row is selected\n */\n rowSelect = output<unknown>();\n\n // ============================================================================\n // INTERNAL STATE\n // ============================================================================\n\n /**\n * Loading indicator\n */\n loading = signal(false);\n\n /**\n * Merged configuration with defaults\n */\n mergedConfig!: Required<EfDatatableConfig>;\n\n /**\n * Merged action configuration with defaults\n */\n mergedActions!: Required<EfDatatableActions>;\n\n /**\n * Processed columns with defaults and computed alignment\n * Reactive to changes in columns input\n */\n processedColumns = computed(() => {\n return this.columns().map(col => {\n const merged = mergeColumnDefaults(col);\n return {\n ...merged,\n align: getColumnAlignment(merged)\n };\n });\n });\n\n /**\n * Computed sort field from searchEntity for restoring table state\n */\n sortField = computed(() => {\n const sort = this.searchEntity()?.sort;\n return sort && sort.length > 0 ? sort[0].field : undefined;\n });\n\n /**\n * Computed sort order from searchEntity for restoring table state\n * 1 = ascending, -1 = descending\n */\n sortOrder = computed(() => {\n const sort = this.searchEntity()?.sort;\n if (sort && sort.length > 0) {\n return sort[0].sortDirection === 'Ascending' ? 1 : -1;\n }\n return 1;\n });\n\n // Angular pipes for formatting (use app's configured locale)\n private readonly locale = inject(LOCALE_ID);\n private readonly datePipe = new DatePipe(this.locale);\n private readonly decimalPipe = new DecimalPipe(this.locale);\n private readonly currencyPipe = new CurrencyPipe(this.locale);\n\n // ============================================================================\n // LIFECYCLE HOOKS\n // ============================================================================\n\n ngOnInit(): void {\n // Merge config with defaults\n this.mergedConfig = { ...EF_DATATABLE_DEFAULTS, ...this.config() };\n\n // Merge action config with defaults (only if actions are provided)\n if (this.actions()) {\n this.mergedActions = { ...EF_DATATABLE_ACTIONS_DEFAULTS, ...this.actions() };\n } else {\n this.mergedActions = { ...EF_DATATABLE_ACTIONS_DEFAULTS, show: false };\n }\n\n // Auto-generate state key if not provided\n if (!this.mergedConfig.stateKey && this.screenStateKey()) {\n this.mergedConfig.stateKey = `APP_TABLE_${this.screenStateKey()}`;\n }\n }\n\n // ============================================================================\n // EVENT HANDLERS\n // ============================================================================\n\n /**\n * Handle lazy loading events from PrimeNG Table\n * Prevents duplicate events caused by reactive sortField/sortOrder binding updates\n * @param event - Table lazy load event containing pagination, sorting, filtering info\n */\n handleLazyLoad(event: TableLazyLoadEvent): void {\n // Skip if this event matches the current searchEntity state exactly.\n // This indicates a reactive binding echo: after parent updates searchEntity,\n // our sortField()/sortOrder() computed signals update, PrimeNG detects the\n // binding change and fires onLazyLoad again with the same values.\n if (this.isBindingEcho(event)) {\n return;\n }\n\n this.lazyLoad.emit(event);\n }\n\n /**\n * Detects if the event is a reactive binding echo (matches current searchEntity state)\n */\n private isBindingEcho(event: TableLazyLoadEvent): boolean {\n const entity = this.searchEntity();\n if (!entity?.sort || entity.sort.length === 0) {\n return false;\n }\n\n const currentSort = entity.sort[0];\n const eventSortField = Array.isArray(event.sortField)\n ? event.sortField[0]\n : event.sortField;\n const eventSortOrder = event.sortOrder ?? 1;\n const currentSortOrder = currentSort.sortDirection === 'Ascending' ? 1 : -1;\n\n // Calculate current and event page numbers\n const currentPage = entity.pagination?.pageNumber || 1;\n const currentPageSize = entity.pagination?.pageSize || 10;\n const eventFirst = event.first ?? 0;\n const eventRows = event.rows ?? 10;\n const eventPage = Math.floor(eventFirst / eventRows) + 1;\n\n // If event matches current state exactly, it's a binding echo\n return (\n currentSort.field === eventSortField &&\n currentSortOrder === eventSortOrder &&\n currentPage === eventPage &&\n currentPageSize === eventRows\n );\n }\n\n /**\n * Handle edit button click\n * @param rowData - The row data object\n */\n handleEdit(rowData: Record<string, unknown>): void {\n const id = rowData[this.mergedConfig.dataKey];\n this.editRow.emit(id);\n }\n\n handleDelete(rowData: Record<string, unknown>): void {\n const id = rowData[this.mergedConfig.dataKey];\n this.deleteRow.emit(id);\n }\n\n handleDuplicate(rowData: Record<string, unknown>): void {\n const id = rowData[this.mergedConfig.dataKey];\n this.duplicateRow.emit(id);\n }\n\n // ============================================================================\n // FORMATTING METHODS\n // ============================================================================\n\n /**\n * Format cell value based on column type\n * @param rowData - The row data object\n * @param column - The column configuration\n * @returns Formatted string value\n */\n formatCellValue(rowData: Record<string, unknown>, column: EfDatatableColumn): string | null {\n const value = rowData[column.field];\n if (value == null) return '';\n\n switch (column.type) {\n case 'date':\n return this.datePipe.transform(value as string | number | Date, column.dateFormat);\n\n case 'datetime':\n return this.datePipe.transform(value as string | number | Date, 'short');\n\n case 'number':\n return this.decimalPipe.transform(\n value as string | number,\n `1.${column.minFractionDigits}-${column.maxFractionDigits}`\n );\n\n case 'money':\n return this.currencyPipe.transform(\n value as string | number,\n column.currencyCode,\n column.currencyDisplay,\n `1.${column.minFractionDigits}-${column.maxFractionDigits}`\n );\n\n case 'boolean':\n return value ? 'Oui' : 'Non';\n\n case 'reference':\n return this.resolveReferenceValue(rowData, column);\n\n default:\n return String(value);\n }\n }\n\n /**\n * Resolve reference data value to display label\n * @param rowData - The row data object\n * @param column - The column configuration\n * @returns Display label from reference data\n */\n private resolveReferenceValue(rowData: Record<string, unknown>, column: EfDatatableColumn): string {\n const ctx = this.context();\n if (!ctx || !column.referenceKey) {\n return String(rowData[column.field]);\n }\n\n const refData = ctx.ref.get(column.referenceKey)();\n const value = rowData[column.field];\n\n if (!refData || !Array.isArray(refData)) {\n return String(value);\n }\n\n const valueField = column.referenceValueField ?? 'code';\n const labelField = column.referenceLabelField ?? 'name';\n const match = refData.find(\n (item: Record<string, unknown>) => item[valueField] === value\n );\n\n return match ? String(match[labelField]) : String(value);\n }\n\n /**\n * Get CSS class for text alignment\n * @param align - Alignment option\n * @returns CSS class name\n */\n getAlignmentClass(align?: EfDatatableColumnAlign): string {\n switch (align) {\n case 'start':\n return 'text-start';\n case 'center':\n return 'text-center';\n case 'end':\n return 'text-end';\n default:\n return 'text-start';\n }\n }\n\n // ============================================================================\n // PUBLIC API\n // ============================================================================\n\n /**\n * Reset table to first page and clear filters\n */\n reset(): void {\n this.pTable?.reset();\n }\n\n /**\n * Export table data as CSV\n */\n exportCSV(): void {\n this.pTable?.exportCSV();\n }\n\n /**\n * Get the current filter state\n */\n getFilters(): Record<string, unknown> | undefined {\n return this.pTable?.filters as Record<string, unknown> | undefined;\n }\n}\n","<p-table #pTable\n [value]=\"searchEntity()?.items || []\"\n [columns]=\"processedColumns()\"\n [dataKey]=\"mergedConfig.dataKey\"\n\n [lazy]=\"mergedConfig.lazy\"\n (onLazyLoad)=\"handleLazyLoad($event)\"\n\n [paginator]=\"mergedConfig.paginator\"\n [rows]=\"searchEntity()?.pagination?.pageSize || mergedConfig.rows\"\n [rowsPerPageOptions]=\"mergedConfig.rowsPerPageOptions\"\n [totalRecords]=\"searchEntity()?.totalCount || 0\"\n [first]=\"searchEntity()?.pagination ? (searchEntity()!.pagination!.pageNumber - 1) * searchEntity()!.pagination!.pageSize : 0\"\n\n [scrollable]=\"mergedConfig.scrollable\"\n [scrollHeight]=\"mergedConfig.scrollHeight\"\n\n [resizableColumns]=\"mergedConfig.resizableColumns\"\n [columnResizeMode]=\"mergedConfig.columnResizeMode\"\n\n [stateStorage]=\"mergedConfig.stateStorage\"\n [stateKey]=\"mergedConfig.stateKey\"\n\n [size]=\"mergedConfig.size\"\n [class]=\"mergedConfig.styleClass\"\n [tableStyle]=\"mergedConfig.tableStyle\"\n\n [currentPageReportTemplate]=\"searchEntity()?.totalCount ? 'Affichage de {first} a {last} sur {totalRecords} entrees' : mergedConfig.emptyMessage\"\n [showCurrentPageReport]=\"true\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n [loading]=\"loading()\"\n\n [pt]=\"pt()\"\n\n selectionMode=\"single\" [(selection)]=\"selectedItem\">\n\n <!-- Header Template -->\n <ng-template #header>\n <tr>\n <!-- Action column at start if configured -->\n @if (mergedActions.show && mergedActions.position === 'start') {\n <th [class]=\"mergedActions.width\"></th>\n }\n\n <!-- Data columns -->\n @for (column of processedColumns(); track column.field) {\n @if (column.sortable && column.resizable) {\n <th\n [pSortableColumn]=\"column.field\"\n pResizableColumn\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n <p-sortIcon [field]=\"column.field\" />\n }\n </th>\n } @else if (column.sortable) {\n <th\n [pSortableColumn]=\"column.field\"\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n <p-sortIcon [field]=\"column.field\" />\n }\n </th>\n } @else if (column.resizable) {\n <th\n pResizableColumn\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n }\n </th>\n } @else {\n <th\n [class]=\"column.width || ''\"\n [ngClass]=\"column.styleClass\">\n\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n } @else {\n {{ column.header | translate }}\n }\n </th>\n }\n }\n\n <!-- Action column at end if configured -->\n @if (mergedActions.show && mergedActions.position === 'end') {\n <th [class]=\"mergedActions.width\"></th>\n }\n </tr>\n </ng-template>\n\n <!-- Body Template -->\n <ng-template #body let-rowData let-rowIndex=\"rowIndex\">\n <tr (dblclick)=\"handleEdit(rowData)\" style=\"cursor: pointer\"\n [pSelectableRow]=\"rowData\" [pSelectableRowIndex]=\"rowIndex\">\n <!-- Action column at start if configured -->\n @if (mergedActions.show && mergedActions.position === 'start') {\n <td>\n <ef-datatable-actionbar\n [context]=\"context()\"\n (edit)=\"handleEdit(rowData)\"\n (delete)=\"handleDelete(rowData)\"\n (duplicate)=\"handleDuplicate(rowData)\">\n </ef-datatable-actionbar>\n </td>\n }\n\n <!-- Data columns -->\n @for (column of processedColumns(); track column.field) {\n <td [ngClass]=\"getAlignmentClass(column.align)\">\n @if (column.template) {\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: rowData, column: column }\"></ng-container>\n } @else {\n {{ formatCellValue(rowData, column) }}\n }\n </td>\n }\n\n <!-- Action column at end if configured -->\n @if (mergedActions.show && mergedActions.position === 'end') {\n <td>\n <ef-datatable-actionbar\n [context]=\"context()\"\n (edit)=\"handleEdit(rowData)\"\n (delete)=\"handleDelete(rowData)\"\n (duplicate)=\"handleDuplicate(rowData)\">\n </ef-datatable-actionbar>\n </td>\n }\n </tr>\n </ng-template>\n</p-table>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Input, OnInit, PLATFORM_ID } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport Lara from '@primeng/themes/lara';\nimport Material from '@primeng/themes/material';\nimport Nora from '@primeng/themes/nora';\nimport { PrimeNG } from 'primeng/config';\nimport { SelectButton } from 'primeng/selectbutton';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { EfThemeConfigService } from '@elasticias/core';\n\nconst PRESETS: Record<string, Record<string, unknown>> = {\n Aura,\n Lara,\n Material,\n Nora,\n};\n\n/**\n * Theme configurator panel for switching PrimeNG presets, primary colors,\n * surface palettes, ripple effect, and RTL direction.\n *\n * All labels use translation keys (ngx-translate). Pass keys via inputs.\n *\n * Usage:\n * ```html\n * <ef-theme-configurator\n * primaryLabelKey=\"configurator.primary_color\"\n * surfaceLabelKey=\"configurator.surface\"\n * presetLabelKey=\"configurator.preset\"\n * rippleLabelKey=\"configurator.ripple\"\n * rtlLabelKey=\"configurator.rtl\"\n * [presetsDisplayNameKeys]=\"{ Aura: 'configurator.preset_compact', Lara: 'configurator.preset_modern', Material: 'configurator.preset_google', Nora: 'configurator.preset_classic' }\"\n * />\n * ```\n */\n@Component({\n selector: 'ef-theme-configurator',\n standalone: true,\n template: `\n <div class=\"config-panel-content\">\n <div class=\"config-panel-colors\">\n <span class=\"config-panel-label\">{{ primaryLabelKey | translate }}</span>\n <div>\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n type=\"button\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"\n [ngClass]=\"{ 'active-color': primaryColor.name === selectedPrimaryColor() }\"\n [style]=\"{\n 'background-color': primaryColor.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette['500']\n }\"\n ></button>\n }\n </div>\n </div>\n\n <div class=\"config-panel-colors\">\n <span class=\"config-panel-label\">{{ surfaceLabelKey | translate }}</span>\n <div>\n @for (surface of surfaces; track surface.name) {\n <button\n type=\"button\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"\n [ngClass]=\"{ 'active-color': selectedSurfaceColor() ? selectedSurfaceColor() === surface.name : configService.appState().darkTheme ? surface.name === 'zinc' : surface.name === 'slate' }\"\n [style]=\"{\n 'background-color': surface.name === 'noir' ? 'var(--text-color)' : surface?.palette['500']\n }\"\n ></button>\n }\n </div>\n </div>\n\n <div class=\"config-panel-settings\">\n <span class=\"config-panel-label\">{{ presetLabelKey | translate }}</span>\n <p-selectbutton\n [options]=\"presetsOptions\"\n [ngModel]=\"selectedPreset()\"\n (ngModelChange)=\"onPresetChange($event)\"\n [allowEmpty]=\"false\"\n size=\"small\"\n >\n <ng-template #item let-item>\n {{ (presetsDisplayNameKeys[item] || item) | translate }}\n </ng-template>\n </p-selectbutton>\n </div>\n\n <div class=\"flex\">\n <div class=\"flex-1\">\n <div class=\"config-panel-settings\">\n <span class=\"config-panel-label\">{{ rippleLabelKey | translate }}</span>\n <p-toggleswitch [(ngModel)]=\"ripple\" />\n </div>\n </div>\n <div class=\"flex-1\">\n <div class=\"config-panel-settings items-end\">\n <span class=\"config-panel-label\">{{ rtlLabelKey | translate }}</span>\n <p-toggleswitch [ngModel]=\"isRTL\" (ngModelChange)=\"onRTLChange($event)\" />\n </div>\n </div>\n </div>\n </div>\n `,\n host: {},\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n SelectButton,\n ToggleSwitchModule,\n ],\n})\nexport class EfThemeConfiguratorComponent implements OnInit {\n @Input() primaryLabelKey = 'configurator.primary_color';\n @Input() surfaceLabelKey = 'configurator.surface';\n @Input() presetLabelKey = 'configurator.preset';\n @Input() rippleLabelKey = 'configurator.ripple';\n @Input() rtlLabelKey = 'configurator.rtl';\n @Input() presetsDisplayNameKeys: Record<string, string> = {\n Aura: 'configurator.preset_compact',\n Lara: 'configurator.preset_modern',\n Material: 'configurator.preset_google',\n Nora: 'configurator.preset_classic',\n };\n\n get ripple() {\n return this.config.ripple();\n }\n\n set ripple(value: boolean) {\n this.config.ripple.set(value);\n }\n\n get isRTL() {\n return this.configService.appState().RTL;\n }\n\n config: PrimeNG = inject(PrimeNG);\n configService: EfThemeConfigService = inject(EfThemeConfigService);\n platformId = inject(PLATFORM_ID);\n\n presetsOptions = Object.keys(PRESETS);\n\n onRTLChange(value: boolean) {\n this.configService.appState.update((state) => ({ ...state, RTL: value }));\n }\n\n ngOnInit() {\n this.onPresetChange(this.configService.appState().preset);\n }\n\n surfaces = [\n { name: 'slate', palette: { 0: '#ffffff', 50: '#f8fafc', 100: '#f1f5f9', 200: '#e2e8f0', 300: '#cbd5e1', 400: '#94a3b8', 500: '#64748b', 600: '#475569', 700: '#334155', 800: '#1e293b', 900: '#0f172a', 950: '#020617' } },\n { name: 'gray', palette: { 0: '#ffffff', 50: '#f9fafb', 100: '#f3f4f6', 200: '#e5e7eb', 300: '#d1d5db', 400: '#9ca3af', 500: '#6b7280', 600: '#4b5563', 700: '#374151', 800: '#1f2937', 900: '#111827', 950: '#030712' } },\n { name: 'zinc', palette: { 0: '#ffffff', 50: '#fafafa', 100: '#f4f4f5', 200: '#e4e4e7', 300: '#d4d4d8', 400: '#a1a1aa', 500: '#71717a', 600: '#52525b', 700: '#3f3f46', 800: '#27272a', 900: '#18181b', 950: '#09090b' } },\n { name: 'neutral', palette: { 0: '#ffffff', 50: '#fafafa', 100: '#f5f5f5', 200: '#e5e5e5', 300: '#d4d4d4', 400: '#a3a3a3', 500: '#737373', 600: '#525252', 700: '#404040', 800: '#262626', 900: '#171717', 950: '#0a0a0a' } },\n { name: 'stone', palette: { 0: '#ffffff', 50: '#fafaf9', 100: '#f5f5f4', 200: '#e7e5e4', 300: '#d6d3d1', 400: '#a8a29e', 500: '#78716c', 600: '#57534e', 700: '#44403c', 800: '#292524', 900: '#1c1917', 950: '#0c0a09' } },\n { name: 'soho', palette: { 0: '#ffffff', 50: '#ececec', 100: '#dedfdf', 200: '#c4c4c6', 300: '#adaeb0', 400: '#97979b', 500: '#7f8084', 600: '#6a6b70', 700: '#55565b', 800: '#3f4046', 900: '#2c2c34', 950: '#16161d' } },\n { name: 'viva', palette: { 0: '#ffffff', 50: '#f3f3f3', 100: '#e7e7e8', 200: '#cfd0d0', 300: '#b7b8b9', 400: '#9fa1a1', 500: '#87898a', 600: '#6e7173', 700: '#565a5b', 800: '#3e4244', 900: '#262b2c', 950: '#0e1315' } },\n { name: 'ocean', palette: { 0: '#ffffff', 50: '#fbfcfc', 100: '#F7F9F8', 200: '#EFF3F2', 300: '#DADEDD', 400: '#B1B7B6', 500: '#828787', 600: '#5F7274', 700: '#415B61', 800: '#29444E', 900: '#183240', 950: '#0c1920' } },\n ];\n\n selectedPrimaryColor = computed(() => this.configService.appState().primary);\n selectedSurfaceColor = computed(() => this.configService.appState().surface);\n selectedPreset = computed(() => this.configService.appState().preset);\n\n primaryColors = computed(() => {\n const presetPalette = (PRESETS[this.configService.appState().preset ?? ''] as Record<string, Record<string, unknown>> | undefined)?.primitive;\n const colors = ['emerald', 'green', 'lime', 'orange', 'amber', 'yellow', 'teal', 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose'];\n const palettes: { name: string; palette: Record<string, string> }[] = [{ name: 'noir', palette: {} }];\n\n colors.forEach((color) => {\n if (presetPalette?.[color]) {\n palettes.push({ name: color, palette: presetPalette[color] as Record<string, string> });\n }\n });\n\n return palettes;\n });\n\n getPresetExt(): Record<string, unknown> {\n const color = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor());\n\n if (color?.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}', 100: '{surface.100}', 200: '{surface.200}', 300: '{surface.300}',\n 400: '{surface.400}', 500: '{surface.500}', 600: '{surface.600}', 700: '{surface.700}',\n 800: '{surface.800}', 900: '{surface.900}', 950: '{surface.950}',\n },\n colorScheme: {\n light: {\n primary: { color: '{primary.950}', contrastColor: '#ffffff', hoverColor: '{primary.800}', activeColor: '{primary.700}' },\n highlight: { background: '{primary.950}', focusBackground: '{primary.700}', color: '#ffffff', focusColor: '#ffffff' },\n },\n dark: {\n primary: { color: '{primary.50}', contrastColor: '{primary.950}', hoverColor: '{primary.200}', activeColor: '{primary.300}' },\n highlight: { background: '{primary.50}', focusBackground: '{primary.300}', color: '{primary.950}', focusColor: '{primary.950}' },\n },\n },\n },\n };\n }\n\n const preset = this.configService.appState().preset;\n if (preset === 'Nora') {\n return {\n semantic: {\n primary: color?.palette,\n colorScheme: {\n light: {\n primary: { color: '{primary.600}', contrastColor: '#ffffff', hoverColor: '{primary.700}', activeColor: '{primary.800}' },\n highlight: { background: '{primary.600}', focusBackground: '{primary.700}', color: '#ffffff', focusColor: '#ffffff' },\n },\n dark: {\n primary: { color: '{primary.500}', contrastColor: '{surface.900}', hoverColor: '{primary.400}', activeColor: '{primary.300}' },\n highlight: { background: '{primary.500}', focusBackground: '{primary.400}', color: '{surface.900}', focusColor: '{surface.900}' },\n },\n },\n },\n };\n } else if (preset === 'Material') {\n return {\n semantic: {\n primary: color?.palette,\n colorScheme: {\n light: {\n primary: { color: '{primary.500}', contrastColor: '#ffffff', hoverColor: '{primary.400}', activeColor: '{primary.300}' },\n highlight: { background: 'color-mix(in srgb, {primary.color}, transparent 88%)', focusBackground: 'color-mix(in srgb, {primary.color}, transparent 76%)', color: '{primary.700}', focusColor: '{primary.800}' },\n },\n dark: {\n primary: { color: '{primary.400}', contrastColor: '{surface.900}', hoverColor: '{primary.300}', activeColor: '{primary.200}' },\n highlight: { background: 'color-mix(in srgb, {primary.400}, transparent 84%)', focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)', color: 'rgba(255,255,255,.87)', focusColor: 'rgba(255,255,255,.87)' },\n },\n },\n },\n };\n }\n\n return {\n semantic: {\n primary: color?.palette,\n colorScheme: {\n light: {\n primary: { color: '{primary.500}', contrastColor: '#ffffff', hoverColor: '{primary.600}', activeColor: '{primary.700}' },\n highlight: { background: '{primary.50}', focusBackground: '{primary.100}', color: '{primary.700}', focusColor: '{primary.800}' },\n },\n dark: {\n primary: { color: '{primary.400}', contrastColor: '{surface.900}', hoverColor: '{primary.300}', activeColor: '{primary.200}' },\n highlight: { background: 'color-mix(in srgb, {primary.400}, transparent 84%)', focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)', color: 'rgba(255,255,255,.87)', focusColor: 'rgba(255,255,255,.87)' },\n },\n },\n },\n };\n }\n\n updateColors(event: Event, type: string, color: { name: string; palette: Record<string, string> }) {\n if (type === 'primary') {\n this.configService.appState.update((state) => ({ ...state, primary: color.name }));\n } else if (type === 'surface') {\n this.configService.appState.update((state) => ({ ...state, surface: color.name }));\n }\n this.applyTheme(type, color);\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: { name: string; palette: Record<string, string> }) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n onPresetChange(event: string) {\n this.configService.appState.update((state) => ({ ...state, preset: event }));\n const preset = PRESETS[event];\n const surfacePalette = this.surfaces.find((s) => s.name === this.selectedSurfaceColor())?.palette;\n\n if (this.configService.appState().preset === 'Material') {\n document.body.classList.add('material');\n this.config.ripple.set(true);\n } else {\n document.body.classList.remove('material');\n this.config.ripple.set(false);\n }\n\n $t()\n .preset(preset)\n .preset(this.getPresetExt())\n .surfacePalette(surfacePalette)\n .use({ useDefaultOptions: true });\n\n // Lara gets fully rounded (pill-shaped) components; others use default preset radius\n updatePreset({\n primitive: {\n borderRadius: event === 'Lara'\n ? { none: '0', xs: '6px', sm: '12px', md: '16px', lg: '20px', xl: '28px' }\n : { none: '0', xs: '2px', sm: '4px', md: '6px', lg: '8px', xl: '12px' },\n },\n });\n }\n}\n","import { Component, computed, input, output } from '@angular/core';\nimport { CommonModule, DecimalPipe, DatePipe } from '@angular/common';\nimport { CardModule } from 'primeng/card';\nimport { TableModule } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { FormsModule } from '@angular/forms';\nimport type { EmailMetrics, EmailEventRecord, EmailEventKind } from '@elasticias/types';\n\ntype RangeKey = '7d' | '30d' | '90d';\n\n/**\n * Manager dashboard widget: email engagement KPIs, category breakdown, recent events.\n * Keep this presentational — host app fetches metrics + supplies `rangeChange` callback.\n *\n * @example\n * <ef-email-metrics-card\n * [metrics]=\"metrics()\"\n * [recentEvents]=\"events()\"\n * [loading]=\"loading()\"\n * (rangeChange)=\"reload($event)\"\n * />\n */\n@Component({\n selector: 'ef-email-metrics-card',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CardModule,\n TableModule,\n TagModule,\n ButtonModule,\n SelectButtonModule,\n DecimalPipe,\n DatePipe,\n ],\n templateUrl: './ef-email-metrics-card.component.html',\n styleUrl: './ef-email-metrics-card.component.scss',\n})\nexport class EfEmailMetricsCardComponent {\n metrics = input<EmailMetrics | null>(null);\n recentEvents = input<EmailEventRecord[]>([]);\n loading = input<boolean>(false);\n title = input<string>('Email engagement');\n\n selectedRange: RangeKey = '7d';\n rangeOptions = [\n { label: '7 j', value: '7d' },\n { label: '30 j', value: '30d' },\n { label: '90 j', value: '90d' },\n ];\n\n hasData = computed(() => (this.metrics()?.sent ?? 0) > 0);\n\n kpis = computed(() => {\n const m = this.metrics();\n if (!m) return [];\n return [\n { label: 'Envoyés', value: m.sent, tone: 'neutral' as const },\n { label: 'Taux d’ouverture', value: m.openRate, rate: true, tone: this.rateTone(m.openRate, 0.2, 0.35) },\n { label: 'Taux de clic', value: m.clickRate, rate: true, tone: this.rateTone(m.clickRate, 0.02, 0.05) },\n { label: 'Taux de rebond', value: m.bounceRate, rate: true, tone: this.rateTone(m.bounceRate, 0.05, 0.02, true) },\n ];\n });\n\n onRangeChange(value: RangeKey) {\n this.selectedRange = value;\n this.rangeChange.emit(value);\n }\n\n readonly rangeChange = output<RangeKey>();\n\n kindSeverity(kind: EmailEventKind): 'success' | 'info' | 'warn' | 'danger' | 'secondary' {\n switch (kind) {\n case 'Open': return 'success';\n case 'Click': return 'info';\n case 'SoftBounce': return 'warn';\n case 'HardBounce':\n case 'Spam': return 'danger';\n default: return 'secondary';\n }\n }\n\n private rateTone(rate: number, warnThreshold: number, goodThreshold: number, lowerIsBetter = false): 'good' | 'warn' | 'neutral' {\n if (lowerIsBetter) {\n if (rate > warnThreshold) return 'warn';\n if (rate < goodThreshold) return 'good';\n return 'neutral';\n }\n if (rate >= goodThreshold) return 'good';\n if (rate >= warnThreshold) return 'neutral';\n return 'warn';\n }\n}\n","<p-card styleClass=\"ef-email-metrics-card\">\n <ng-template pTemplate=\"header\">\n <div class=\"ef-email-metrics-card__header\">\n <div>\n <h3 class=\"ef-email-metrics-card__title\">{{ title() }}</h3>\n @if (metrics(); as m) {\n <p class=\"ef-email-metrics-card__subtitle\">\n {{ m.from | date: 'dd MMM' }} – {{ m.to | date: 'dd MMM yyyy' }}\n </p>\n }\n </div>\n <p-selectButton\n [options]=\"rangeOptions\"\n [(ngModel)]=\"selectedRange\"\n optionLabel=\"label\"\n optionValue=\"value\"\n styleClass=\"ef-email-metrics-card__range\"\n (onChange)=\"onRangeChange($event.value)\"\n />\n </div>\n </ng-template>\n\n @if (metrics(); as m) {\n <div class=\"ef-email-metrics-card__kpis\">\n @for (kpi of kpis(); track kpi.label) {\n <div class=\"ef-email-metrics-card__kpi\" [attr.data-tone]=\"kpi.tone\">\n <span class=\"ef-email-metrics-card__kpi-label\">{{ kpi.label }}</span>\n <span class=\"ef-email-metrics-card__kpi-value\">\n @if (kpi.rate) {\n {{ kpi.value | number: '1.1-1' : 'fr' }}\n <span class=\"ef-email-metrics-card__kpi-unit\">%</span>\n } @else {\n {{ kpi.value | number: '1.0-0' : 'fr' }}\n }\n </span>\n </div>\n }\n </div>\n\n @if (m.categories.length > 0) {\n <div class=\"ef-email-metrics-card__section\">\n <h4 class=\"ef-email-metrics-card__section-title\">Par catégorie</h4>\n <p-table [value]=\"m.categories\" styleClass=\"ef-email-metrics-card__table\" [scrollable]=\"true\" scrollHeight=\"180px\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>Catégorie</th>\n <th class=\"ef-email-metrics-card__num\">Envoyés</th>\n <th class=\"ef-email-metrics-card__num\">Ouverts</th>\n <th class=\"ef-email-metrics-card__num\">Cliqués</th>\n <th class=\"ef-email-metrics-card__num\">Rebonds</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-row>\n <tr>\n <td class=\"ef-email-metrics-card__category\">{{ row.category }}</td>\n <td class=\"ef-email-metrics-card__num\">{{ row.sent }}</td>\n <td class=\"ef-email-metrics-card__num\">{{ row.opened }}</td>\n <td class=\"ef-email-metrics-card__num\">{{ row.clicked }}</td>\n <td class=\"ef-email-metrics-card__num\" [class.ef-email-metrics-card__num--danger]=\"row.bounced > 0\">{{ row.bounced }}</td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\n\n @if (recentEvents().length > 0) {\n <div class=\"ef-email-metrics-card__section\">\n <h4 class=\"ef-email-metrics-card__section-title\">Événements récents</h4>\n <p-table [value]=\"recentEvents()\" styleClass=\"ef-email-metrics-card__table\" [scrollable]=\"true\" scrollHeight=\"240px\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>Quand</th>\n <th>Destinataire</th>\n <th>Catégorie</th>\n <th>Type</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-row>\n <tr>\n <td class=\"ef-email-metrics-card__when\">{{ row.occurredAt | date: 'dd/MM HH:mm' }}</td>\n <td class=\"ef-email-metrics-card__recipient\">{{ row.recipient }}</td>\n <td>{{ row.category || '—' }}</td>\n <td>\n <p-tag [severity]=\"kindSeverity(row.kind)\" [value]=\"row.kind\" styleClass=\"ef-email-metrics-card__kind\" />\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\n } @else {\n <div class=\"ef-email-metrics-card__empty\">\n <p-button label=\"Aucune donnée encore\" [text]=\"true\" icon=\"pi pi-envelope\" [disabled]=\"true\" />\n </div>\n }\n</p-card>\n","// Pipes\nexport { EfCurrencyPipe } from './lib/pipes/ef-currency.pipe';\nexport { TruncatePipe } from './lib/pipes/truncate.pipe';\n\n// Commerce\nexport { EfPriceDisplayComponent } from './lib/commerce/ef-price-display.component';\nexport { EfQuantitySelectorComponent } from './lib/commerce/ef-quantity-selector.component';\nexport { EfOrderBuilderComponent } from './lib/commerce/ef-order-builder/ef-order-builder.component';\nexport * from './lib/commerce/ef-order-builder/ef-order-builder.component.types';\nexport { EfOrderSummaryComponent } from './lib/commerce/ef-order-summary/ef-order-summary.component';\nexport type { ProductCountGroup, ProductCountGroupLabel, ProductWithCountGroup } from './lib/commerce/ef-order-summary/ef-order-summary.component';\nexport { EfProductCatalogueFilterComponent } from './lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nexport type { CategoryItem, CategoryGroup, CategoryAssignment, SelectedFilter } from './lib/commerce/ef-product-catalogue-filter/ef-product-catalogue-filter.component';\nexport { EfProductCatalogueComponent } from './lib/commerce/ef-product-catalogue/ef-product-catalogue.component';\nexport type { CatalogueProduct, CatalogueProductVariant } from './lib/commerce/ef-product-catalogue/ef-product-catalogue.component';\n\n// Layout components\nexport { EfDialogComponent } from './lib/layout/ef-dialog/ef-dialog.component';\nexport { EfFieldsetComponent } from './lib/layout/ef-fieldset/ef-fieldset.component';\nexport { EfButtonComponent } from './lib/layout/ef-button/ef-button.component';\nexport { EfLabelComponent } from './lib/layout/ef-label/ef-label.component';\nexport { EfBadgeComponent } from './lib/layout/ef-badge/ef-badge.component';\nexport * from './lib/layout/ef-badge/ef-badge.component.types';\nexport { EfToolbarComponent } from './lib/layout/ef-toolbar/ef-toolbar.component';\n\n// Feedback components\nexport { EfBlockUiComponent } from './lib/feedback/ef-block-ui/ef-block-ui.component';\nexport { EfBlockableDivComponent } from './lib/feedback/ef-blockable-div/ef-blockable-div.component';\n\n// Forms\nexport * from './lib/forms';\n\n// Data components\nexport { EfDatatableComponent } from './lib/data/ef-datatable/ef-datatable.component';\nexport type { DatatableSearchEntity } from './lib/data/ef-datatable/ef-datatable.component';\nexport * from './lib/data/ef-datatable/ef-datatable.component.types';\nexport { EfDatatableActionBarComponent } from './lib/data/ef-datatable-actionbar/ef-datatable-actionbar.component';\n\n// Theme\nexport { EfThemeConfiguratorComponent } from './lib/ef-theme-configurator/ef-theme-configurator.component';\n\n// Analytics\nexport { EfEmailMetricsCardComponent } from './lib/analytics/ef-email-metrics-card/ef-email-metrics-card.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4","i2","i5","i7","i9","i6","i8","i10"],"mappings":"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"}