{"version":3,"file":"seniorsistemas-angular-components-table.mjs","sources":["../../projects/angular-components/table/src/lib/table/navigation/navigation.directive.ts","../../projects/angular-components/table/src/lib/table/row-toggler/row-toggler.directive.ts","../../projects/angular-components/table/src/lib/table/table-column/models/enum-column-field-type.ts","../../projects/angular-components/table/src/lib/table/table-column/models/enum-badge-colors.ts","../../projects/angular-components/table/src/lib/locale-utils.ts","../../projects/angular-components/table/src/lib/table/table-column/table-columns.component.ts","../../projects/angular-components/table/src/lib/table/table-column/table-columns.component.html","../../projects/angular-components/table/src/lib/table/export-utils.ts","../../projects/angular-components/table/src/lib/table/table-paging/table-paging.component.ts","../../projects/angular-components/table/src/lib/table/table-paging/table-paging.component.html","../../projects/angular-components/table/src/lib/table/table.module.ts","../../projects/angular-components/table/src/seniorsistemas-angular-components-table.ts"],"sourcesContent":["import { Directive, HostListener } from '@angular/core';\n\n@Directive({ selector: '[sNavigation]' })\nexport class NavigationDirective {\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event: KeyboardEvent): void {\n        switch (event.key) {\n            case 'Right': // IE 11\n            case 'ArrowRight':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._focusFirstColFromCurrentRow(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._focusNextSelectableCol(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n            case 'Left': // IE 11\n            case 'ArrowLeft':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._focusLastColFromPrevRow(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._focusPrevSelectableCol(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n            case 'Up': // IE 11\n            case 'ArrowUp':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._setPrevRowFocus(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._setAboveColFocus(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n            case 'Down': // IE 11\n            case 'ArrowDown':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._setNextRowFocus(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._setUnderColFocus(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n        }\n    }\n\n    private _focusLastColFromPrevRow(event: HTMLTableRowElement): void {\n        const prevRow = this._findPrevSelectableRow(event);\n\n        if (prevRow) {\n            (prevRow.lastElementChild as HTMLTableColElement).focus();\n        }\n    }\n\n    private _focusFirstColFromCurrentRow(row: HTMLTableRowElement): void {\n        const firstCol = row.firstElementChild as HTMLTableColElement;\n\n        if (firstCol) {\n            firstCol.focus();\n        }\n    }\n\n    private _focusNextSelectableCol(col: HTMLTableColElement): void {\n        const nextCol = col.nextElementSibling as HTMLTableColElement;\n\n        if (nextCol) {\n            nextCol.focus();\n        } else {\n            const currentRow = col.parentElement as HTMLTableRowElement;\n            return this._setNextRowFocus(currentRow);\n        }\n    }\n\n    private _focusPrevSelectableCol(col: HTMLTableColElement): void {\n        const prevCol = col.previousElementSibling as HTMLTableColElement;\n\n        if (prevCol) {\n            prevCol.focus();\n        } else {\n            const currentRow = col.parentElement as HTMLTableRowElement;\n            return currentRow.focus();\n        }\n    }\n\n    private _setAboveColFocus(currentCol: HTMLTableColElement): void {\n        const cellIndex = (currentCol as any)['cellIndex'];\n        const currentRow = currentCol.parentElement;\n        const prevRow = this._findPrevSelectableRow(currentRow as HTMLTableRowElement);\n\n        if (prevRow) (prevRow.cells[cellIndex] as HTMLTableDataCellElement).focus();\n    }\n\n    private _setUnderColFocus(currentCol: HTMLTableColElement): void {\n        const cellIndex = (currentCol as any)['cellIndex'];\n        const currentRow = currentCol.parentElement;\n        const nextRow = this._findNextSelectableRow(currentRow as HTMLTableRowElement);\n        if (nextRow) (nextRow.cells[cellIndex] as HTMLTableDataCellElement).focus();\n    }\n\n    private _setNextRowFocus(row: HTMLTableRowElement): void {\n        const nextRow = this._findNextSelectableRow(row);\n        if (nextRow) {\n            nextRow.focus();\n        }\n    }\n\n    private _setPrevRowFocus(row: HTMLTableRowElement): void {\n        const prevRow = this._findPrevSelectableRow(row);\n        if (prevRow) {\n            prevRow.focus();\n        }\n    }\n\n    private _isRow(event: HTMLTableElement): boolean {\n        return event.tagName.toLocaleLowerCase() === 'tr';\n    }\n\n    private _isCol(event: HTMLTableElement): boolean {\n        return event.tagName.toLocaleLowerCase() === 'td';\n    }\n\n    private _findPrevSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n        const prevRow = <HTMLTableRowElement>row.previousElementSibling;\n        return prevRow ?? null;\n    }\n\n    private _findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement | null {\n        const nextRow = <HTMLTableRowElement>row.nextElementSibling;\n        return nextRow ?? null;\n    }\n}\n","import { Directive, HostListener, Input, inject } from '@angular/core';\n\nimport { RowToggler, Table } from 'primeng/table';\n\n@Directive({ selector: '[sRowToggler]' })\nexport class RowTogllerDirective extends RowToggler {\n    override readonly dt: Table;\n\n    @Input({ alias: 'sRowToggler', required: true })\n    public override data: any = null;\n\n    constructor() {\n        const dt = inject(Table);\n\n        super(dt);\n        this.dt = dt;\n\n    }\n\n    @HostListener('keydown', ['$event'])\n    public onKeydown(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            switch (event.key) {\n                case 'Enter':\n                    this.dt.toggleRow(this.data, event);\n                    event.preventDefault();\n                    break;\n                default:\n                    event.preventDefault();\n                    break;\n            }\n        }\n    }\n}\n","export enum EnumColumnFieldType {\n    STRING = 'STRING',\n    NUMBER = 'NUMBER',\n    BOOLEAN = 'BOOLEAN',\n    DATE = 'DATE',\n    CURRENCY = 'CURRENCY',\n    ENUM = 'ENUM',\n    LOOKUP = 'LOOKUP',\n    LINK = 'LINK',\n    TOKENS = 'TOKENS'\n}\n","export enum EnumBadgeColors {\n    RED = 'red',\n    ORANGE = 'orange',\n    YELLOW = 'yellow',\n    GREEN = 'green',\n    BLUE = 'blue',\n    GRAY = 'gray',\n}\n","export const convertToMomentDateFormat = (format: string): string => {\n    // A ordem dos replaces é importante.\n    return format\n        .replace(/\\bd\\b/, \"D\") // day of month (no leading zero)\n        .replace(/\\bdd\\b/, \"DD\") // day of month\n        .replace(/\\bo\\b/, \"DDD\") // day of the year (no leading zero)\n        .replace(/\\boo\\b/, \"DDDD\") // day of the year\n        .replace(/\\bM\\b/, \"MMM\") // month name short\n        .replace(/\\bMM\\b/, \"MMMM\") // month name long\n        .replace(/\\bm\\b/, \"M\") // month of year (no leading)\n        .replace(/\\bmm\\b/, \"MM\") // month of year\n        .replace(/\\by\\b/, \"YY\") // year (two digits)\n        .replace(/\\byy\\b/, \"YYYY\"); // year (four digits)\n}","import { Component, Input, OnChanges, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef, inject } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { HostProjectConfigs, HostProjectConfigsInjectionToken } from '@seniorsistemas/angular-components/common';\nimport {\n    applyLocalizedMask,\n    LocaleService,\n    LocalizedBignumberOptions,\n} from '@seniorsistemas/angular-components/locale';\nimport { NumericService } from '@seniorsistemas/angular-components/numeric';\nimport { IToken } from '@seniorsistemas/angular-components/token-list';\nimport { deepClone, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\nimport BigNumber from 'bignumber.js';\nimport moment from 'moment';\n\nimport { convertToMomentDateFormat } from '../../locale-utils';\nimport { Column, ColumnValues, EnumColumnFieldType, TableColumnLocaleOptions } from './models';\n\n/**\n * @description Componente interno que renderiza uma linha de colunas da tabela,\n * aplicando formatação localizada (data, número, moeda, token, etc.) para cada coluna.\n * Normalmente usado dentro do contexto de uma tabela PrimeNG.\n *\n * @example\n * ```html\n * <s-table-columns [columns]=\"colunas\" [rowValue]=\"linha\" />\n * ```\n *\n * @category Data\n */\n@Component({\n    templateUrl: './table-columns.component.html',\n    styleUrls: ['./table-columns.component.scss'],\n    selector: 's-table-columns',\n})\nexport class TableColumnsComponent implements OnChanges {\n    private readonly localeService = inject(LocaleService);\n    private readonly viewContainerRef = inject(ViewContainerRef);\n    private readonly translate = inject(TranslateService);\n    private readonly numericService = inject(NumericService);\n    private readonly hostProjectConfigs = inject<HostProjectConfigs>(HostProjectConfigsInjectionToken);\n\n    @ViewChild('columnsTemplate', { static: true })\n    public columnsTemplate: TemplateRef<any> | null = null;\n\n    /** @description Lista de configurações das colunas a serem renderizadas. @default [] */\n    @Input()\n    public columns: Column[] = [];\n\n    /** @description Objeto da linha com os valores a serem exibidos nas colunas. Campo obrigatório. */\n    @Input()\n    public rowValue!: any;\n\n    /** @description Opções de localização (calendário e número) usadas para formatação. @default null */\n    @Input()\n    public locale: TableColumnLocaleOptions | null = null;\n\n    cellsData: (CellData | null)[] = [];\n\n    formattedColumns: ColumnValues[] = [];\n\n    constructor() {\n        this.locale = {\n            calendar: {\n                ...this.localeService.getLocaleOptions()?.calendar,\n                dateFormat: convertToMomentDateFormat(this.localeService.getLocaleOptions()?.calendar.dateFormat ?? ''),\n            },\n            number: {\n                ...this.localeService.getLocaleOptions()?.number,\n                scale: 0,\n            },\n        };\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.validateComponentAttributes(changes);\n\n        if (changes['columns'] && changes['columns'].currentValue !== changes['columns'].previousValue) {\n            this.columns = this.sortColumnsBySequence(changes['columns'].currentValue);\n        }\n        this.createColumnsTemplate(changes);\n    }\n\n    public isArray(value: any): boolean {\n        return Array.isArray(value);\n    }\n\n    public getTokensByColumn(column: ColumnValues) {\n        return column.columnValue as IToken[];\n    }\n\n    private getCellData(column: ColumnValues): CellData | null {\n        const { columnValue, separator, uninformed } = column;\n\n        if (typeof columnValue === 'string') {\n            const splittedString = columnValue.split(separator);\n\n            return splittedString.map((string, index) => {\n                const isLastIndex = splittedString.length - 1 === index;\n\n                return {\n                    value: string,\n                    isUninformed: string === uninformed,\n                    separator: !isLastIndex ? separator : null,\n                };\n            });\n        }\n\n        return null;\n    }\n\n    private validateComponentAttributes(changes: SimpleChanges): void {\n        if (!this.columns && !changes['columns']?.currentValue) {\n            throw new Error(\"The 'columns' attribute must be informed!\");\n        }\n        if (!this.rowValue && !changes['rowValue']?.currentValue) {\n            throw new Error(\"The 'rowValue' attribute must be informed!\");\n        }\n    }\n\n    private createColumnsTemplate(changes: SimpleChanges): void {\n        this.viewContainerRef.clear();\n\n        const columns: Column[] = changes['columns']?.currentValue || this.columns;\n\n        const rowValue: object = deepClone(changes['rowValue']?.currentValue ?? this.rowValue);\n\n        const locale: TableColumnLocaleOptions = changes['locale']?.currentValue || this.locale;\n\n        this.formattedColumns = columns.map((column) => this.getColumnValue(column, rowValue, locale));\n\n        this.cellsData = this.formattedColumns.map((column) => this.getCellData(column));\n\n        if (!isNullOrUndefined(this.columnsTemplate)) {\n            this.viewContainerRef.createEmbeddedView(this.columnsTemplate);\n        }\n    }\n\n    private getColumnSeparator(column: Column) {\n        return column.separator ? column.separator : ' - ';\n    }\n\n    private getTranslationPrefix(column: Column) {\n        return column.prefix ? column.prefix : `${this.hostProjectConfigs.domain}.${this.hostProjectConfigs.service}.`;\n    }\n\n    private isAttributeValueInvalid(attributeValue: any) {\n        return (\n            attributeValue === null ||\n            attributeValue === undefined ||\n            (attributeValue?.options?.numberFormatOptions && isNullOrUndefined(attributeValue?.value)) ||\n            (this.isArray(attributeValue) && !attributeValue.length) ||\n            (typeof attributeValue === 'string' && attributeValue.trim() === '')\n        );\n    }\n\n    private getFormattedColumnValue(\n        column: Column,\n        columnValue: any[],\n        unifiedColumnValues: string,\n        uninformedText: string,\n        uninformedNumber: number,\n    ) {\n        if (uninformedNumber === column.attributes.length) {\n            return uninformedText;\n        }\n\n        if (column.type === EnumColumnFieldType.TOKENS) {\n            return [].concat.apply(\n                [],\n                columnValue.filter((values) => values !== uninformedText),\n            );\n        }\n\n        return unifiedColumnValues;\n    }\n\n    private getAttributeValue(attribute: string, rowValue: any) {\n        let attributeValue!: any;\n\n        attribute.split('/').forEach((value: string) => {\n            if (!attributeValue) {\n                value.split('.').forEach((val: string, i) => {\n                    if (!rowValue) {\n                        return;\n                    }\n\n                    if (i === 0) {\n                        attributeValue = rowValue[val];\n                    } else {\n                        if (attributeValue) {\n                            attributeValue = attributeValue[val];\n                        }\n                    }\n                });\n            }\n        });\n\n        return attributeValue;\n    }\n\n    private getNumberConfigs(column: Column): LocalizedBignumberOptions {\n        return {\n            ...this.locale?.number,\n            scale:\n                column.scale !== null && column.scale !== undefined\n                    ? this.getColumnScale(column.scale)\n                    : this.locale?.number.scale,\n            prefix: `${this.locale?.number.currencySymbol} `,\n        };\n    }\n\n    private getDateFormat(column: Column, locale: TableColumnLocaleOptions) {\n        return column.dateFormat ? column.dateFormat : locale.calendar.dateFormat;\n    }\n\n    private getColumnValue(column: Column, rowValue: any, locale: TableColumnLocaleOptions): ColumnValues {\n        const prefix = this.getTranslationPrefix(column);\n        const separator = this.getColumnSeparator(column);\n        const uninformed = this.translate.instant(prefix + 'empty_label');\n        const style = column.style;\n\n        const columnValue = column.attributes.map((attribute: string | number | symbol) => {\n            const attributeValue = this.getAttributeValue(attribute as string, rowValue);\n\n            if (this.isAttributeValueInvalid(attributeValue)) {\n                return uninformed;\n            }\n\n            const numberConfigs = this.getNumberConfigs(column);\n\n            switch (column.type) {\n                case EnumColumnFieldType.ENUM:\n                    return this.translate.instant(column.enumPrefix + attributeValue.toString().toLowerCase());\n\n                case EnumColumnFieldType.CURRENCY: {\n                    const numberFormatOptions = attributeValue?.options?.numberFormatOptions\n                        ? attributeValue.options.numberFormatOptions\n                        : typeof column.numberFormatOptions === 'function'\n                          ? column.numberFormatOptions({\n                                rowData: rowValue,\n                            })\n                          : column.numberFormatOptions;\n\n                    return numberFormatOptions\n                        ? this.numericService.instant(attributeValue, {\n                              numberFormatOptions,\n                          })\n                        : applyLocalizedMask(\n                              attributeValue,\n                              {\n                                  decimalSeparator: '.',\n                                  thousandsSeparator: ',',\n                                  scale: 2,\n                                  prefix: '',\n                                  suffix: '',\n                                  allowNegative: true,\n                                  ...numberConfigs,\n                              },\n                              this.isNumber(attributeValue),\n                          );\n                }\n\n                case EnumColumnFieldType.DATE:\n                    const dateFormat = this.getDateFormat(column, locale);\n                    return moment(attributeValue).format(dateFormat);\n\n                case EnumColumnFieldType.BOOLEAN:\n                    const value = attributeValue ? 'yes' : 'no';\n                    return this.translate.instant(prefix + value);\n\n                case EnumColumnFieldType.NUMBER: {\n                    numberConfigs.prefix = '';\n\n                    const numberFormatOptions = attributeValue?.options?.numberFormatOptions\n                        ? attributeValue.options.numberFormatOptions\n                        : typeof column.numberFormatOptions === 'function'\n                          ? column.numberFormatOptions({\n                                rowData: rowValue,\n                            })\n                          : column.numberFormatOptions;\n\n                    return numberFormatOptions\n                        ? this.numericService.instant(attributeValue, {\n                              numberFormatOptions,\n                          })\n                        : applyLocalizedMask(\n                              attributeValue,\n                              {\n                                  decimalSeparator: '.',\n                                  thousandsSeparator: ',',\n                                  scale: 2,\n                                  prefix: '',\n                                  suffix: '',\n                                  allowNegative: true,\n                                  ...numberConfigs,\n                              },\n                              this.isNumber(attributeValue),\n                          );\n                }\n                case EnumColumnFieldType.TOKENS:\n                    return this.getTokens(attributeValue);\n\n                default:\n                    return attributeValue;\n            }\n        });\n\n        const unifiedColumnValues = columnValue.join(separator);\n        const uninformedNumber = unifiedColumnValues.split(separator).filter((value) => value === uninformed).length;\n        const formattedColumnValue = this.getFormattedColumnValue(\n            column,\n            columnValue,\n            unifiedColumnValues,\n            uninformed,\n            uninformedNumber,\n        );\n\n        return {\n            style,\n            columnValue: formattedColumnValue,\n            separator,\n            uninformed,\n            badgeConfigs: column?.badgeConfigs?.find(\n                (badgeConfig) => badgeConfig.enumValue === rowValue[column.attributes[0] ?? column.field],\n            ),\n            color: column.color?.(rowValue),\n            type: column.type,\n            tooltip: this.getColumnTooltip(column.tooltip),\n            infoSign: this.getColumnInfoSign(column.infoSign),\n            onLinkClick: column.onLinkClick,\n            onColumnClick: column.onColumnClick,\n            compact: column.compact,\n        };\n    }\n\n    private getColumnScale(scale: number | ((rowValue: any) => number)): number {\n        if (typeof scale === 'function') {\n            return scale(deepClone(this.rowValue));\n        }\n        return scale;\n    }\n\n    private getColumnInfoSign(infoSign?: string | ((rowValue: any) => string | null)): string | null {\n        if (!isNullOrUndefined(infoSign)) {\n            if (typeof infoSign === 'function') {\n                return infoSign(deepClone(this.rowValue));\n            }\n            return infoSign;\n        }\n        return null;\n    }\n\n    private getColumnTooltip(tooltip?: string | ((rowValue: any) => string)): string {\n        if (!isNullOrUndefined(tooltip)) {\n            if (typeof tooltip === 'function') {\n                return tooltip(deepClone(this.rowValue));\n            }\n            return tooltip;\n        }\n        return '';\n    }\n\n    private isNumber(value: any): boolean {\n        return !new BigNumber(value).isNaN();\n    }\n\n    private getTokens(values: any): IToken[] {\n        if (!this.isArray(values)) {\n            throw new Error('To use tokens an array must be informed');\n        }\n\n        if (!this.isValidTokenArray(values)) {\n            throw new Error(\n                'Not a valid token array. Must be a primitive values array or an objects with label attribute array',\n            );\n        }\n\n        if (this.isLabelObjectArray(values)) {\n            return values;\n        }\n\n        return values\n            .filter((value: any) => value !== undefined && value !== null)\n            .map((value: any) => {\n                const label = typeof value === 'symbol' ? value.toString() : `${value}`;\n                return {\n                    label,\n                };\n            });\n    }\n\n    private isValidTokenArray(values: any[]): boolean {\n        return this.isPrimitiveValuesArray(values) || this.isLabelObjectArray(values);\n    }\n\n    private isPrimitiveValuesArray(values: any[]): boolean {\n        return values.filter((value) => value !== Object(value)).length === values.length;\n    }\n\n    private isLabelObjectArray(values: any[]): boolean {\n        return values.filter((value) => value?.label !== null && value?.label !== undefined).length === values.length;\n    }\n\n    private sortColumnsBySequence(columns: Column[]): Column[] {\n        return columns.sort((a, b) => (a.sequence ?? 0) - (b.sequence ?? 0));\n    }\n}\n\ntype CellData = { value: string; isUninformed: boolean; separator: string | null }[];\n\n","<ng-template #columnsTemplate>\n    @for (column of formattedColumns; track $index; let i = $index) {\n        <td\n            [ngStyle]=\"column.style\"\n            (click)=\"column.onColumnClick ? column.onColumnClick(rowValue) : null\"\n        >\n            @if (column.type !== 'TOKENS' || !isArray(column.columnValue)) {\n                <div [ngClass]=\"{ 'compact-column': column.compact }\">\n                    @if (column.type !== 'LINK') {\n                        <span\n                            [sTooltip]=\"column.tooltip\"\n                            [escape]=\"false\"\n                        >\n                            <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n                        </span>\n                    }\n\n                    @if (column.type === 'LINK') {\n                        @if (cellsData[i]?.[0]?.isUninformed) {\n                            <span class=\"sds-empty-value\">{{ cellsData[i]?.[0]?.value }}</span>\n                        } @else {\n                            <a\n                                [sTooltip]=\"column.tooltip\"\n                                [escape]=\"false\"\n                                (click)=\"column.onLinkClick ? column.onLinkClick(rowValue) : null\"\n                            >\n                                <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n                            </a>\n                        }\n                    }\n\n                    <ng-template #columnValueTemplate>\n                        @for (cellData of cellsData[i]; track $index) {\n                            @if (cellData.isUninformed) {\n                                <span class=\"sds-empty-value\">{{ cellData.value }}</span>\n                            } @else {\n                                @if (column.badgeConfigs) {\n                                    <s-badge\n                                        [sTooltip]=\"column.tooltip\"\n                                        [color]=\"column.badgeConfigs.color\"\n                                        [text]=\"cellData.value\"\n                                    ></s-badge>\n                                } @else {\n                                    <span\n                                        [ngClass]=\"{\n                                            'column-cell-red': column.color === 'Red',\n                                            'column-cell-orange': column.color === 'Orange',\n                                            'column-cell-yellow': column.color === 'Yellow',\n                                            'column-cell-green': column.color === 'Green',\n                                            'column-cell-blue': column.color === 'Blue',\n                                        }\"\n                                        >{{ cellData.value }}</span\n                                    >\n                                }\n                            }\n\n                            @if (cellData.separator) {\n                                <span>{{ cellData.separator }}</span>\n                            }\n                        }\n\n                        @if (!!column.infoSign) {\n                            <span *sInfoSign=\"column.infoSign\"></span>\n                        }\n                    </ng-template>\n                </div>\n            } @else {\n                <s-token-list\n                    [tokens]=\"getTokensByColumn(column)\"\n                    [hidePointerEvents]=\"true\"\n                ></s-token-list>\n\n                @if (!!column.infoSign) {\n                    <span *sInfoSign=\"column.infoSign\"></span>\n                }\n            }\n        </td>\n    }\n</ng-template>\n\n","import { ElementRef } from '@angular/core';\nimport { Column } from '../table/table-column/models/column.interface';\nimport { EnumColumnFieldType } from '../table/table-column/models/enum-column-field-type';\n\ndeclare global {\n    interface Navigator {\n        msSaveOrOpenBlob(blob: Blob, name: string): void;\n    }\n}\n\nexport abstract class ExportUtils {\n    public static addClass(element: ElementRef, className: string) {\n        element.nativeElement.className = `${element.nativeElement.className} ${className}`;\n    }\n\n    public static removeClass(element: ElementRef, className: string) {\n        if (element.nativeElement.className.includes(className)) {\n            element.nativeElement.className = element.nativeElement.className.replace(className, '');\n        }\n    }\n\n    public static exportCSV(\n        columns: Partial<Column>[] = [],\n        data: any[] = [],\n        csvSeparator: string = ';',\n        documentName: string = 'download',\n    ) {\n        let csv = '\\ufeff';\n\n        columns\n            .filter((column: any) => column.exportable && column.field)\n            .forEach((column: any, i: number) => {\n                csv += `\"${column.header || column.field}\"`;\n\n                if (i < columns.length - 1) csv += csvSeparator;\n            });\n\n        data.forEach((record: any) => {\n            csv += '\\n';\n\n            columns\n                .filter((column: any) => column.exportable && column.field)\n                .forEach((column: any, i: number) => {\n                    let cellData;\n                    if (Array.isArray(column.field)) {\n                        const fieldValues = column.field.map((col: string) =>\n                            this._resolveFieldData(record, col, column),\n                        );\n\n                        cellData = fieldValues\n                            .flat()\n                            .filter((value: string) => value !== null && value !== undefined)\n                            .join(column.separator);\n                    } else {\n                        cellData = this._resolveFieldData(record, column.field, column);\n                    }\n\n                    if (cellData !== null) cellData = String(cellData).replace(/\"/g, '\"\"');\n                    else cellData = '';\n\n                    csv += `\"${cellData}\"`;\n\n                    if (i < columns.length - 1) csv += csvSeparator;\n                });\n        });\n\n        const blob = new Blob([csv], {\n            type: 'text/csv;charset=utf-8;',\n        });\n\n        if (typeof window.navigator.msSaveOrOpenBlob === 'function') {\n            navigator.msSaveOrOpenBlob(blob, documentName + '.csv');\n        } else {\n            const link = document.createElement('a');\n            link.style.display = 'none';\n            document.body.appendChild(link);\n            if (link.download !== undefined) {\n                link.setAttribute('href', URL.createObjectURL(blob));\n                link.setAttribute('download', documentName + '.csv');\n                link.click();\n            } else {\n                csv = 'data:text/csv;charset=utf-8,' + csv;\n                window.open(encodeURI(csv));\n            }\n            document.body.removeChild(link);\n        }\n    }\n\n    private static _resolveFieldData(data: any, field: any, column: Column): string | null {\n        if (!data && !field) {\n            return null;\n        }\n        const needSplitValues = field.includes('.');\n        if (this._isFunction(field)) {\n            return field(data);\n        } else if (!needSplitValues) {\n            return data[field];\n        } else {\n            const fields: string[] = field.split('.');\n            let value = data;\n            for (let i = 0, len = fields.length; i < len; ++i) {\n                if (value === null || value === undefined) {\n                    return null;\n                }\n                value = value[fields[i]];\n            }\n            return ExportUtils._extractData(value, column);\n        }\n    }\n\n    private static _isFunction(obj: any) {\n        return !!(obj && obj.constructor && obj.call && obj.apply);\n    }\n\n    private static _extractData(data: any, column: Column) {\n        const _data = Array.isArray(data) ? data : [data];\n        switch (column.type) {\n            case EnumColumnFieldType.TOKENS:\n                return _data.map((d: any) => ExportUtils._parseToken(d));\n            default:\n                return data;\n        }\n    }\n\n    private static _parseToken(data: any) {\n        if (isObject(data)) {\n            return data['label'];\n        } else {\n            return data;\n        }\n    }\n}\n\nconst isObject = (obj: any) => obj !== null && typeof obj === 'object';\n","import { Component, Inject, Input, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Table } from 'primeng/table';\nimport { CustomAction } from './models';\nimport { Column } from '../table-column/models';\nimport { ExportUtils } from '../export-utils';\nimport { deepClone, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\nimport { TieredMenuItemData } from '@seniorsistemas/angular-components/tiered-menu';\nimport { HostProjectConfigs, HostProjectConfigsInjectionToken } from '@seniorsistemas/angular-components/common';\n\ntype RowValueFormatOption = {\n    value?: number;\n    options?: {\n        numberFormatOptions?: Intl.NumberFormatOptions;\n    };\n};\n\n@Component({\n    templateUrl: './table-paging.component.html',\n    styleUrls: ['./table-paging.component.scss'],\n    selector: 's-table-paging',\n})\nexport class TablePagingComponent implements OnChanges {\n    private readonly translate = inject(TranslateService);\n    private readonly hostProjectConfigs = inject<HostProjectConfigs>(HostProjectConfigsInjectionToken);\n\n    @Input()\n    public totalRecords!: number;\n\n    @Input()\n    public exportFileName?: string;\n\n    @Input()\n    public table!: Table;\n\n    @Input()\n    public exportable = true;\n\n    @Input()\n    public enableExportSelectedRecords = true;\n\n    @Input()\n    public customActions?: CustomAction[];\n\n    @Input()\n    public loadAllRecords?: () => Promise<any[]>;\n\n    @Input()\n    public loadCurrentPageRecords?: () => any[];\n\n    @Input()\n    public loadSelectedRecords?: () => any[];\n\n    public totalRecordsText = '';\n\n    private readonly localeService: LocaleService = Inject(LocaleService);\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['totalRecords']?.currentValue) {\n            this.totalRecordsText = this.translate.instant(`${this.getTranslatePrefix()}total_records`, {\n                value: changes['totalRecords'].currentValue,\n            });\n        }\n    }\n\n    private getTranslatePrefix() {\n        return `${this.hostProjectConfigs.domain}.${this.hostProjectConfigs.service}.`;\n    }\n\n    public getTooltipText() {\n        return this.translate.instant(`${this.getTranslatePrefix()}export_to_csv`);\n    }\n\n    public getActions(): TieredMenuItemData[] {\n        const actions: TieredMenuItemData[] = [\n            {\n                dataKey: 'exportCurrentPage',\n                label: this.translate.instant(`${this.getTranslatePrefix()}export_current_page`),\n                command: () => this.exportCurrentPage(),\n            },\n        ];\n\n        if (this.enableExportSelectedRecords) {\n            actions.push({\n                dataKey: 'exportSelected',\n                label: this.translate.instant(`${this.getTranslatePrefix()}export_selected_records`),\n                command: () => this.exportSelectedRecords(),\n            });\n        }\n\n        if (this.loadAllRecords) {\n            actions.push({\n                dataKey: 'exportAll',\n                label: this.translate.instant(`${this.getTranslatePrefix()}export_all_records`),\n                command: () => this.exportAllRecords(),\n            });\n        }\n\n        if (this.customActions?.length) {\n            const customMenus = this.customActions.map((p, $index) => ({\n                dataKey: `customAction_${$index}`,\n                label: p.label,\n                command: p.command,\n            }));\n            actions.push(...customMenus);\n        }\n\n        return actions;\n    }\n\n    private validateComponent() {\n        if (!this.table) {\n            throw new Error('Table component not defined');\n        }\n    }\n\n    public getColumnsToExport() {\n        return [...(this.table.columns ?? [])].map((column) => {\n            const exportColumn = {\n                ...column,\n                header: column.header,\n                exportable: true,\n                field: column.field,\n                separator: column.separator ?? ' - ',\n                enumPrefix: column.enumPrefix,\n                customExport: column.customExport,\n            };\n\n            if (column.exportable === false) {\n                exportColumn.exportable = false;\n            }\n\n            if (column.attributes && column.attributes.length) {\n                if (column.attributes.length === 1) {\n                    exportColumn.field = column.attributes[0];\n                } else {\n                    exportColumn.field = column.attributes;\n                }\n            }\n\n            return exportColumn;\n        });\n    }\n\n    private getCurrentPageRowsToExport(columns: any[]) {\n        let tableData = deepClone(this.table.value);\n\n        if (this.loadCurrentPageRecords) {\n            tableData = this.loadCurrentPageRecords();\n        }\n\n        tableData = this.mapNumberFormatOptionsExport(columns, tableData);\n        return this.mapColumnsTranslations(columns, tableData);\n    }\n\n    private getSelectedRowsToExport(columns: any[]) {\n        let tableData = deepClone(this.table.selection);\n        if (this.loadSelectedRecords) {\n            tableData = this.loadSelectedRecords();\n        }\n\n        tableData = this.mapNumberFormatOptionsExport(columns, tableData);\n        return this.mapColumnsTranslations(columns, tableData);\n    }\n\n    private getPropertyValue(obj: any, path: string) {\n        return path\n            .split('.')\n            .reduce((result: any, prop: any) => (result[prop] === undefined ? undefined : result[prop]), obj);\n    }\n\n    private setPropertyValue(obj: any, path: string, value: any) {\n        this.recursionSetValue(obj, path.split('.'), value);\n    }\n\n    private recursionSetValue(obj: any, keysList: string[], value: any): any {\n        const key = keysList[0];\n        if (keysList.length === 1) {\n            obj[key] = value;\n            return obj;\n        }\n        obj[key] = this.recursionSetValue(obj?.[key] || {}, keysList.slice(1), value);\n        return obj;\n    }\n\n    public mapColumnsTranslations(columns: any[], rows: any[]) {\n        const enumColumns = columns.filter((p) => p.enumPrefix);\n        if (!enumColumns.length) {\n            return rows;\n        }\n\n        return [...rows].map((row) => {\n            const newRow = { ...row };\n            enumColumns.forEach((column) => {\n                const fields = !Array.isArray(column.field) ? [column.field] : column.field;\n                fields.forEach((fieldName: string) => {\n                    const columnData = this.getPropertyValue(row, fieldName);\n                    if (columnData === null || columnData === undefined) {\n                        return;\n                    }\n\n                    const newValue = this.translateValue(column, columnData);\n                    this.setPropertyValue(newRow, fieldName, newValue);\n                });\n            });\n\n            return newRow;\n        });\n    }\n\n    public mapCustomExport(columns: any[], rows: any[]) {\n        const customColumns = columns.filter((p) => p.customExport);\n        if (!customColumns.length) {\n            return rows;\n        }\n\n        return [...rows].map((row) => {\n            const newRow = { ...row };\n            customColumns.forEach((column) => {\n                const fields = !Array.isArray(column.field) ? [column.field] : column.field;\n                fields.forEach((fieldName: string) => {\n                    const columnData = this.getPropertyValue(row, fieldName);\n                    if (columnData === null || columnData === undefined) {\n                        return;\n                    }\n                    const newValue = column.customExport(columnData);\n                    this.setPropertyValue(newRow, fieldName, newValue);\n                });\n            });\n\n            return newRow;\n        });\n    }\n\n    private translateValue(column: any, columnData: any) {\n        // Default usage: ENUM_VALUE -> domain.service.enum_value\n        const enumValue = columnData.toString().toLowerCase();\n        let translationKey = column.enumPrefix + enumValue;\n        let translatedValue = this.translate.instant(translationKey);\n\n        // Custom usage 1: V9 -> domain.service.v_9\n        if (translationKey === translatedValue && enumValue.length > 1) {\n            translationKey = `${column.enumPrefix}${enumValue.substring(0, 1)}_${enumValue.substr(1)}`;\n            translatedValue = this.translate.instant(translationKey);\n        }\n\n        // Custom usage 2: EnumValue -> domain.service.enum_value\n        if (translationKey === translatedValue) {\n            const enumKey = this.convertToSnakeCase(columnData.toString());\n            translationKey = `${column.enumPrefix}${enumKey}`;\n            translatedValue = this.translate.instant(translationKey);\n        }\n\n        return translatedValue;\n    }\n\n    private convertToSnakeCase(str: string) {\n        return str.replace(/([A-Z])/g, (_match, group) => `_${group.toLowerCase()}`).replace(/^_/, '');\n    }\n\n    private getExportFileName() {\n        const lang = this.translate.currentLang ?? 'pt-BR';\n        const date = new Date();\n\n        const fileName = this.exportFileName ?? 'download';\n        const formattedDate = date.toLocaleDateString(lang).replace('_', '-');\n        const formattedTime = date.toLocaleTimeString(lang).replace(' ', '-');\n\n        return `${fileName}_${formattedDate}_${formattedTime}`;\n    }\n\n    public exportCurrentPage() {\n        this.validateComponent();\n        const columns = this.getColumnsToExport();\n        const dataToExport = this.getCurrentPageRowsToExport(columns);\n        ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());\n    }\n\n    public exportSelectedRecords() {\n        this.validateComponent();\n        const columns = this.getColumnsToExport();\n        const dataToExport = this.getSelectedRowsToExport(columns);\n        ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());\n    }\n\n    public async exportAllRecords() {\n        this.validateComponent();\n\n        if (!this.loadAllRecords) {\n            return;\n        }\n        let serverData = await this.loadAllRecords();\n\n        const columns = this.getColumnsToExport();\n\n        serverData = this.mapCustomExport(columns, serverData);\n\n        serverData = this.mapNumberFormatOptionsExport(columns, serverData);\n\n        const dataToExport = this.mapColumnsTranslations(columns, serverData);\n\n        ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());\n    }\n\n    /**\n     * The purpose of this method is to map values\n     * from the TableColumnsComponent, which uses the numberFormatOptions\n     * field, along with rows that have a custom numberFormatOptions,\n     * to ensure the correct values are exported by the TablePagingComponent.\n     *\n     * @returns Returns the correctly mapped tableData.\n     */\n    public mapNumberFormatOptionsExport(\n        columns: Partial<Column>[],\n        tableData: {\n            [key: string]: RowValueFormatOption | number | string | null | undefined;\n        }[],\n    ) {\n        const hasNumberFormatOptionsColumns = columns.some((column) => column.numberFormatOptions);\n        const hasNumberFormatOptionsRows = tableData.some((rowData) =>\n            Object.keys(rowData).some((key) => (rowData[key] as RowValueFormatOption)?.options?.numberFormatOptions),\n        );\n\n        if (!hasNumberFormatOptionsColumns && !hasNumberFormatOptionsRows) return tableData;\n\n        if (hasNumberFormatOptionsColumns) {\n            tableData = tableData.map((rowData) => {\n                const columnsWithNumberFormatOptions = columns.filter((column) => column.numberFormatOptions);\n\n                for (const column of columnsWithNumberFormatOptions) {\n                    const attributes = column.attributes;\n\n                    const numberFormatOptions =\n                        typeof column.numberFormatOptions === 'function'\n                            ? column.numberFormatOptions({\n                                  rowData,\n                              })\n                            : column.numberFormatOptions;\n\n                    for (const attribute of attributes!) {\n                        if (isNullOrUndefined(rowData[attribute as string])) continue;\n\n                        if ((rowData[attribute as string] as RowValueFormatOption).options?.numberFormatOptions) {\n                            continue;\n                        }\n\n                        const value = rowData[attribute as string] as string | number;\n\n                        const mappedValue =\n                            numberFormatOptions?.style === 'percent'\n                                ? new BigNumber(value).times(100)\n                                : new BigNumber(value);\n\n                        const numberFormat = new Intl.NumberFormat(this.localeService.getLocaleOptions()!.locale, {\n                            ...numberFormatOptions,\n                            style: 'decimal',\n                            useGrouping: false,\n                            roundingMode: 'trunc',\n                        } as any);\n\n                        rowData[attribute as string] = numberFormat.format(mappedValue.toNumber());\n                    }\n                }\n\n                return rowData;\n            });\n        }\n\n        if (hasNumberFormatOptionsRows) {\n            tableData = tableData.map((rowData) => {\n                const keysWithNumberFormatOptions = Object.keys(rowData).filter(\n                    (key) => (rowData[key] as RowValueFormatOption)?.options?.numberFormatOptions,\n                );\n\n                for (const key of keysWithNumberFormatOptions) {\n                    const value = (rowData[key] as RowValueFormatOption).value;\n\n                    const numberFormatOptions = (rowData[key] as RowValueFormatOption).options?.numberFormatOptions;\n\n                    const mappedValue =\n                        numberFormatOptions?.style === 'percent'\n                            ? new BigNumber(value!).times(100)\n                            : new BigNumber(value!);\n\n                    const numberFormat = new Intl.NumberFormat(this.localeService.getLocaleOptions()!.locale, {\n                        ...numberFormatOptions,\n                        style: 'decimal',\n                        useGrouping: false,\n                        roundingMode: 'trunc',\n                    } as any);\n\n                    (rowData[key] as string | number) = numberFormat.format(mappedValue.toNumber());\n                }\n\n                return rowData;\n            });\n        }\n\n        return tableData;\n    }\n}\n","<div class=\"paging-container\">\n    <span class=\"total-records\">\n        {{ totalRecordsText }}\n    </span>\n    @if (exportable) {\n        <s-button\n            class=\"export-button\"\n            priority=\"default\"\n            iconClass=\"fa fa-fw fa-file-export\"\n            [disabled]=\"false\"\n            [auxiliary]=\"true\"\n            [tooltip]=\"getTooltipText()\"\n            [menuOptions]=\"getActions()\"\n        >\n        </s-button>\n    }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NavigationDirective } from './navigation/navigation.directive';\nimport { RowTogllerDirective } from './row-toggler/row-toggler.directive';\nimport { TableColumnsComponent } from './table-column/table-columns.component';\nimport { TablePagingComponent } from './table-paging/table-paging.component';\nimport { BadgeModule } from '@seniorsistemas/angular-components/badge';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { InfoSignModule } from '@seniorsistemas/angular-components/info-sign';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\nimport { TokenListModule } from '@seniorsistemas/angular-components/token-list';\n\n@NgModule({\n    imports: [CommonModule, TooltipModule, TokenListModule, TranslateModule, ButtonModule, InfoSignModule, BadgeModule],\n    exports: [RowTogllerDirective, NavigationDirective, TableColumnsComponent, TablePagingComponent],\n    declarations: [RowTogllerDirective, NavigationDirective, TableColumnsComponent, TablePagingComponent],\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BigNumber","i1"],"mappings":"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"}