tailjng 0.0.16 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/index.js +1 -1
- package/cli/settings/header-generator.js +1 -1
- package/fesm2022/tailjng.mjs.map +1 -1
- package/lib/interfaces/theme/theme-generator.interface.d.ts +44 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/lib/components/alert/alert-dialog/dialog-alert.component.html +14 -17
- package/src/lib/components/alert/alert-dialog/dialog-alert.component.ts +44 -7
- package/src/lib/components/alert/alert-toast/toast-alert.component.html +10 -16
- package/src/lib/components/alert/alert-toast/toast-alert.component.ts +54 -5
- package/src/lib/components/checkbox/checkbox-input/input-checkbox.component.html +6 -6
- package/src/lib/components/checkbox/checkbox-input/input-checkbox.component.ts +59 -7
- package/src/lib/components/checkbox/checkbox-switch/switch-checkbox.component.ts +0 -1
- package/src/lib/components/dialog/dialog.component.html +17 -6
- package/src/lib/components/dialog/dialog.component.ts +51 -2
- package/src/lib/components/image/image-viewer/viewer-image.component.html +23 -7
- package/src/lib/components/image/image-viewer/viewer-image.component.ts +63 -3
- package/src/lib/components/input/input/input.component.html +7 -2
- package/src/lib/components/input/input/input.component.ts +17 -8
- package/src/lib/components/input/input-file/file-input.component.html +49 -45
- package/src/lib/components/input/input-file/file-input.component.ts +107 -100
- package/src/lib/components/input/input-range/range-input.component.ts +23 -4
- package/src/lib/components/input/input-textarea/textarea-input.component.ts +5 -0
- package/src/lib/components/label/label.component.html +3 -3
- package/src/lib/components/mode-toggle/mode-toggle.component.html +2 -2
- package/src/lib/components/progress-bar/progress-bar.component.html +1 -1
- package/src/lib/components/select/select-dropdown/dropdown-select.component.html +72 -74
- package/src/lib/components/select/select-dropdown/dropdown-select.component.ts +93 -19
- package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.html +72 -65
- package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.ts +237 -45
- package/src/lib/components/select/select-multi-table/multi-table-select.component.html +50 -62
- package/src/lib/components/select/select-multi-table/multi-table-select.component.ts +253 -67
- package/src/lib/components/theme-generator/theme-generator.component.ts +95 -60
- package/src/lib/components/toggle-radio/toggle-radio.component.ts +10 -0
- package/src/lib/components/tooltip/tooltip.directive.ts +9 -6
- package/src/lib/components/tooltip/tooltip.service.ts +0 -2
package/cli/index.js
CHANGED
package/fesm2022/tailjng.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailjng.mjs","sources":["../../../projects/tailjng/src/lib/config/tailjng-config.token.ts","../../../projects/tailjng/src/lib/services/transformer/calendar.service.ts","../../../projects/tailjng/src/lib/services/crud/converter-crud.service.ts","../../../projects/tailjng/src/lib/services/http/params-http.service.ts","../../../projects/tailjng/src/lib/services/crud/generic-crud.service.ts","../../../projects/tailjng/src/lib/services/http/error-handler-http.service.ts","../../../projects/tailjng/src/lib/services/static/icons.service.ts","../../../projects/tailjng/src/lib/services/static/theme.service.ts","../../../projects/tailjng/src/lib/services/alert/dialog-alert.service.ts","../../../projects/tailjng/src/lib/services/alert/toast-alert.service.ts","../../../projects/tailjng/src/lib/interfaces/crud/crud.interface.ts","../../../projects/tailjng/src/public-api.ts","../../../projects/tailjng/src/tailjng.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { TailjngConfig } from '../interfaces/config.interface';\r\n\r\n\r\nexport const TAILJNG_CONFIG = new InjectionToken<TailjngConfig>('TAILJNG_CONFIG');\r\n\r\n\r\n// providers: [\r\n// provideRouter(routes),\r\n// {\r\n// provide: TAILJNG_CONFIG,\r\n// useValue: {\r\n// urlBase: environment.urlBase,\r\n// socketUrl: environment.socketUrl,\r\n// }\r\n// }\r\n// ]","import { Injectable } from '@angular/core';\r\nimport { formatDistanceToNowStrict } from 'date-fns';\r\nimport { es } from 'date-fns/locale';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JCalendarService {\r\n\r\n nameDaysAb: string[] = ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'];\r\n nameDays: string[] = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];\r\n\r\n nameMontsAb: string[] = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'];\r\n nameMonts: string[] = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];\r\n\r\n\r\n /**\r\n * Get month from date\r\n * @param date The date to extract the month from, can be a Date object or a string in 'YYYY-MM-DD' format.\r\n * @returns The name of the month in Spanish.\r\n */\r\n getMonthFromDate(date: Date | string): string {\r\n const parsedDate = typeof date === 'string' ? new Date(date) : date;\r\n const monthIndex = parsedDate.getMonth();\r\n return this.nameMonts[monthIndex];\r\n }\r\n\r\n\r\n /**\r\n * Calculate the age of a person based on their birth date.\r\n * @param birth The birth date as a Date object or a string in 'YYYY-MM-DD' format.\r\n * @returns The age in years, or null if the birth date is invalid.\r\n */\r\n calculateAge(birth: Date | string): number | null {\r\n if (!birth) {\r\n return null;\r\n }\r\n const birthDate = typeof birth === 'string' ? new Date(birth) : birth;\r\n const today = new Date();\r\n let age = today.getFullYear() - birthDate.getFullYear();\r\n const m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n age--;\r\n }\r\n return age;\r\n }\r\n\r\n\r\n /**\r\n * Calculate the complete age of a person based on their birth date.\r\n * @param birth The birth date as a Date object or a string in 'YYYY-MM-DD' format.\r\n * @returns An object containing years, months, and days of age.\r\n */\r\n calculateAgeComplete(birth: Date | string): { years: number, months: number, days: number } {\r\n const birthDate = typeof birth === 'string' ? new Date(birth) : birth;\r\n const today = new Date();\r\n\r\n let years = today.getFullYear() - birthDate.getFullYear();\r\n let months = today.getMonth() - birthDate.getMonth();\r\n let days = today.getDate() - birthDate.getDate();\r\n\r\n if (days < 0) {\r\n months--;\r\n const previousMonth = new Date(today.getFullYear(), today.getMonth(), 0);\r\n days += previousMonth.getDate();\r\n }\r\n\r\n if (months < 0) {\r\n years--;\r\n months += 12;\r\n }\r\n\r\n return { years, months, days };\r\n }\r\n\r\n\r\n /**\r\n * Format a date string to a more readable format.\r\n * @param date The date string in 'YYYY-MM-DD' format.\r\n * @param month Optional parameter to add to the month name.\r\n * @returns A formatted date string in the format 'DD de MMMM del YYYY'.\r\n */\r\n formatearFechaString(date: string, month?: number) {\r\n const partesFecha = date.split('-');\r\n\r\n const año = partesFecha[0];\r\n const mes = this.nameMonts[parseInt(partesFecha[1], 10) - 1];\r\n const día = parseInt(partesFecha[2], 10);\r\n\r\n let mes_fin;\r\n if (month) {\r\n mes_fin = mes + month;\r\n } else {\r\n mes_fin = mes;\r\n }\r\n\r\n return `${día} de ${mes_fin} del ${año}`;\r\n }\r\n\r\n\r\n /**\r\n * Format a Date object to a string in the format 'DD de MMMM del YYYY'.\r\n * @param date The Date object to format.\r\n * @param month Optional parameter to add to the month name.\r\n * @returns A formatted date string.\r\n */\r\n formatearFechaDate(date: Date, month?: number) {\r\n \r\n const utc_date = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\r\n let new_date = utc_date;\r\n\r\n if (month !== undefined) {\r\n new_date = new Date(new_date.setUTCMonth(new_date.getUTCMonth() + month));\r\n }\r\n\r\n // Get the values of the new date in UTC to avoid local time zones\r\n const año = new_date.getUTCFullYear();\r\n const mes = this.nameMonts[new_date.getUTCMonth()];\r\n const día = new_date.getUTCDate();\r\n\r\n return `${día} de ${mes} del ${año}`;\r\n }\r\n\r\n\r\n /**\r\n * Parse a date string in the format \"dd de MMMM del yyyy\" to \"yyyy-MM-dd\".\r\n * @param fechaStr The date string to parse.\r\n * @returns The parsed date string in \"yyyy-MM-dd\" format or null if invalid.\r\n */\r\n parseFechaString(fechaStr: string): string | null {\r\n if (!fechaStr) return null;\r\n\r\n // Map Spanish month names to their numeric equivalents\r\n const meses: any = {\r\n 'ENERO': '01',\r\n 'FEBRERO': '02',\r\n 'MARZO': '03',\r\n 'ABRIL': '04',\r\n 'MAYO': '05',\r\n 'JUNIO': '06',\r\n 'JULIO': '07',\r\n 'AGOSTO': '08',\r\n 'SEPTIEMBRE': '09',\r\n 'OCTUBRE': '10',\r\n 'NOVIEMBRE': '11',\r\n 'DICIEMBRE': '12'\r\n };\r\n\r\n const regex = /^(\\d{1,2}) de (\\w+) del (\\d{4})$/i;\r\n const match = fechaStr.trim().match(regex);\r\n\r\n if (match) {\r\n const day = match[1].padStart(2, '0');\r\n const mesStr = match[2].toUpperCase();\r\n const month = meses[mesStr] || '01';\r\n const year = match[3];\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n /**\r\n * Format a date to \"MMM YY\" format.\r\n * @param date The date to format, can be a Date object.\r\n * @returns The formatted date string.\r\n */\r\n formatMonthYear(date: Date): string {\r\n const months = this.nameMontsAb.map(month => month.toUpperCase());\r\n const month = months[date.getMonth()];\r\n const year = date.getFullYear().toString().slice(-2);\r\n return `${month} ${year}`;\r\n }\r\n\r\n\r\n /**\r\n * Format a date to the Bogotá timezone (UTC-5).\r\n * @param date The date to format, can be a Date object.\r\n * @returns The formatted date string in 'yyyy-MM-ddTHH:mm:ss' format.\r\n */\r\n formatDateToBogota(date: Date): string {\r\n const bogotaOffset = -5 * 60;\r\n const localTime = date.getTime();\r\n const localOffset = date.getTimezoneOffset() * 60000;\r\n const utc = localTime + localOffset;\r\n const bogotaTime = utc + (bogotaOffset * 60000);\r\n const bogotaDate = new Date(bogotaTime);\r\n\r\n // Format the date to 'yyyy-MM-ddTHH:mm:ss'\r\n const year = bogotaDate.getFullYear();\r\n const month = String(bogotaDate.getMonth() + 1).padStart(2, '0');\r\n const day = String(bogotaDate.getDate()).padStart(2, '0');\r\n const hours = String(bogotaDate.getHours()).padStart(2, '0');\r\n const minutes = String(bogotaDate.getMinutes()).padStart(2, '0');\r\n const seconds = String(bogotaDate.getSeconds()).padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\r\n }\r\n\r\n\r\n /**\r\n * Format a date to a relative time string.\r\n * This method uses date-fns to format the date relative to now.\r\n * @param date The date to format, can be a string in 'YYYY-MM-DD' format.\r\n * @returns A formatted relative time string.\r\n * @example \"hace 2 días\", \"hace 1 hora\", etc\r\n */\r\n formatRelativeDate(date: string): string {\r\n return formatDistanceToNowStrict(new Date(date), {\r\n locale: {\r\n ...es,\r\n formatDistance: (token, count, options) => {\r\n const formatDistanceLocale = {\r\n lessThanXSeconds: 'hace menos de {{count}} segundos',\r\n xSeconds: 'hace {{count}} segundos',\r\n halfAMinute: 'hace medio minuto',\r\n lessThanXMinutes: 'hace menos de {{count}} minutos',\r\n xMinutes: 'hace {{count}} minutos',\r\n aboutXHours: 'hace aproximadamente {{count}} horas',\r\n xHours: 'hace {{count}} horas',\r\n xDays: 'hace {{count}} días',\r\n aboutXWeeks: 'hace aproximadamente {{count}} semanas',\r\n xWeeks: 'hace {{count}} semanas',\r\n aboutXMonths: 'hace aproximadamente {{count}} meses',\r\n xMonths: 'hace {{count}} meses',\r\n aboutXYears: 'hace aproximadamente {{count}} años',\r\n xYears: 'hace {{count}} años',\r\n overXYears: 'hace más de {{count}} años',\r\n almostXYears: 'hace casi {{count}} años'\r\n };\r\n\r\n let result = formatDistanceLocale[token];\r\n\r\n if (typeof count === 'number') {\r\n result = result.replace('{{count}}', count.toString());\r\n\r\n // Singulars and plurals\r\n if (token === 'xHours' && count === 1) {\r\n result = result.replace('horas', 'hora');\r\n }\r\n if (token === 'xDays' && count === 1) {\r\n result = result.replace('días', 'día');\r\n }\r\n if (token === 'xWeeks' && count === 1) {\r\n result = result.replace('semanas', 'semana');\r\n }\r\n if (token === 'xMonths' && count === 1) {\r\n result = result.replace('meses', 'mes');\r\n }\r\n if (token === 'xYears' && count === 1) {\r\n result = result.replace('años', 'año');\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { CurrencyPipe } from '@angular/common';\r\nimport { JCalendarService } from '../transformer/calendar.service';\r\nimport { TableColumn } from '../../interfaces/crud/crud.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JConverterCrudService {\r\n\r\n constructor(\r\n private readonly currencyPipe: CurrencyPipe,\r\n private readonly calendarService: JCalendarService,\r\n ) { }\r\n\r\n /**\r\n * Get the correct sort key from the sortColumn object or string.\r\n * @param sortColumn The column to sort by, can be a string or an object with a 'col' property.\r\n * @returns The sort key as a string.\r\n */\r\n getSortKey(sortColumn: any): string {\r\n if (typeof sortColumn === 'object' && sortColumn !== null) {\r\n return sortColumn.col;\r\n }\r\n\r\n return sortColumn;\r\n }\r\n\r\n\r\n /**\r\n * Converter object to an array of objects with key and value for form initialization.\r\n * @param formGroup The FormGroup to convert.\r\n * @returns An array of objects with key and value for form initialization.\r\n */\r\n initializeFormControls(formGroup: FormGroup): { [key: string]: AbstractControl | null } {\r\n const formControls: { [key: string]: AbstractControl | null } = {};\r\n\r\n Object.keys(formGroup.controls).forEach(key => {\r\n formControls[`${key}_control`] = formGroup.get(key);\r\n });\r\n\r\n return formControls;\r\n }\r\n\r\n\r\n /**\r\n * Formats data based on the column type.\r\n * @param value The value to format.\r\n * @param column The column definition.\r\n * @return Formatted value based on the column type\r\n */\r\n formatData(value: any, column: TableColumn<any>): any {\r\n\r\n if (column.isdollar && value !== null) {\r\n const transformedValue = this.currencyPipe.transform(value, 'USD', 'symbol', '1.2-2');\r\n return transformedValue ? transformedValue.replace('US', '') : null;\r\n }\r\n\r\n if (column.isCurrency && value !== null) {\r\n return this.currencyPipe.transform(value, 'USD', 'symbol', '1.2-2');\r\n }\r\n\r\n if (column.isDate && value !== null) {\r\n return new Date(value).toLocaleDateString();\r\n }\r\n\r\n if (column.isDateText && value !== null) {\r\n return this.calendarService.formatearFechaString(`${value}`);\r\n }\r\n\r\n if (column.isDateTime && value !== null) {\r\n return new Date(value).toLocaleString();\r\n }\r\n\r\n if (column.isDateTimeText && value !== null) {\r\n return new Date(value).toString();\r\n }\r\n\r\n if (column.isRelativeTime && value !== null) {\r\n return this.calendarService.formatRelativeDate(value);\r\n }\r\n\r\n if (column.isFirstWord && value !== null) {\r\n return value.split(' ')[0];\r\n }\r\n\r\n return value;\r\n }\r\n\r\n\r\n /**\r\n * This method converts values to appropriate types based on the column definition.\r\n * It handles various formats such as currency, date, and text.\r\n * @param value The value to parse.\r\n * @param column The column definition.\r\n * @returns The parsed value or null if invalid.\r\n */\r\n parseData(value: any, column: TableColumn<any>): any {\r\n if (value === null || value === undefined || value === 'S/N') {\r\n return null;\r\n }\r\n\r\n let cleaned = value;\r\n\r\n // If it's text, trim whitespace\r\n if (typeof cleaned === 'string') {\r\n cleaned = cleaned.trim();\r\n }\r\n\r\n // isdollar → remove symbol and parse to number\r\n if (column.isdollar && typeof cleaned === 'string') {\r\n cleaned = cleaned.replace(/[^\\d,.-]/g, '').replace(',', '.');\r\n return cleaned ? parseFloat(cleaned) : null;\r\n }\r\n\r\n // isCurrency → remove symbol and parse to number\r\n if (column.isCurrency && typeof cleaned === 'string') {\r\n cleaned = cleaned.replace(/[^\\d,.-]/g, '').replace(',', '.');\r\n return cleaned ? parseFloat(cleaned) : null;\r\n }\r\n\r\n // isDateText → parse text from date to ISO format (yyyy-MM-dd)\r\n if (column.isDateText && typeof cleaned === 'string') {\r\n // Use your reverse calendarService if you have one\r\n const fecha = this.calendarService.parseFechaString(cleaned);\r\n return fecha ?? cleaned;\r\n }\r\n\r\n // isDate → parse text to Date or ISO string\r\n if (column.isDate && typeof cleaned === 'string') {\r\n const fecha = new Date(cleaned);\r\n return isNaN(fecha.getTime()) ? cleaned : fecha.toISOString().substring(0, 10);\r\n }\r\n\r\n // isDateTime → parse text to DateTime\r\n if (column.isDateTime && typeof cleaned === 'string') {\r\n const fecha = new Date(cleaned);\r\n return isNaN(fecha.getTime()) ? cleaned : fecha.toISOString();\r\n }\r\n\r\n // isDateTimeText → parse text to DateTime\r\n if (column.isDateTimeText && typeof cleaned === 'string') {\r\n const fecha = new Date(cleaned);\r\n return isNaN(fecha.getTime()) ? cleaned : fecha.toISOString();\r\n }\r\n\r\n // isRelativeTime → impossible to reverse automatically, return text\r\n if (column.isRelativeTime) {\r\n return cleaned;\r\n }\r\n\r\n // isFirstWord → return full text, as it's unclear which part to remove\r\n if (column.isFirstWord) {\r\n return cleaned;\r\n }\r\n\r\n return cleaned;\r\n }\r\n}","import { HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Params } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JParamsHttpService {\r\n\r\n /**\r\n * Transform Params to HttpParams\r\n * @param params \r\n * @returns \r\n */\r\n resParams(params: Params): HttpParams {\r\n\r\n // Construct HttpParams\r\n let httpParams = new HttpParams();\r\n\r\n if (params) {\r\n Object.keys(params).forEach(key => {\r\n const value = params[key];\r\n\r\n // If the value is an object (e.g., filter: { id_status: [1, 2] })\r\n if (typeof value === 'object' && value !== null) {\r\n Object.keys(value).forEach(subKey => {\r\n const subValue = value[subKey];\r\n\r\n // If the subValue is an array (e.g., id_status: [1, 2])\r\n if (Array.isArray(subValue)) {\r\n subValue.forEach(v => {\r\n httpParams = httpParams.append(`${key}[${subKey}]`, v);\r\n });\r\n } else {\r\n // If it's a unique value\r\n httpParams = httpParams.append(`${key}[${subKey}]`, subValue);\r\n }\r\n });\r\n } else {\r\n // If it's a flat value (e.g., id_status: 1)\r\n httpParams = httpParams.append(key, value);\r\n }\r\n });\r\n }\r\n return httpParams;\r\n }\r\n\r\n}","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Params } from '@angular/router';\r\nimport { map, Observable } from 'rxjs';\r\nimport { JConverterCrudService } from './converter-crud.service';\r\nimport { JParamsHttpService } from '../http/params-http.service';\r\nimport { TAILJNG_CONFIG } from '../../config/tailjng-config.token';\r\nimport { TailjngConfig } from '../../interfaces/config.interface';\r\nimport { ApiResponse } from '../../interfaces/crud/api-response';\r\nimport { EnableBoolean, QueryParams } from '../../interfaces/crud/crud.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JGenericCrudService {\r\n\r\n constructor(\r\n @Inject(TAILJNG_CONFIG) private readonly config: TailjngConfig,\r\n private readonly http: HttpClient,\r\n private readonly paramsHttpService: JParamsHttpService,\r\n private readonly converterCrudService: JConverterCrudService,\r\n ) { }\r\n\r\n /**\r\n * Method to get all records from an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param params Parameters of the request.\r\n * @returns Observable with the API response.\r\n */\r\n getAll<T>(endpoint: string, params?: Params): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n let httpParams;\r\n if (params) httpParams = this.paramsHttpService.resParams(params);\r\n return this.http.get<ApiResponse<T>>(url, { params: httpParams });\r\n }\r\n\r\n\r\n /**\r\n * Method to get a record from an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @returns Observable with the API response.\r\n */\r\n getId<T>(endpoint: string, id: number): Observable<T> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.get<ApiResponse<{ [key: string]: T }>>(`${url}/${id}`).pipe(\r\n map(response => response.data[endpoint])\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Method to create a record in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param data Data of the record to add.\r\n * @returns Observable with the API response.\r\n */\r\n create<T>(endpoint: string, data: T): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.post<ApiResponse<T>>(url, data);\r\n }\r\n\r\n\r\n /**\r\n * MMethod to update a record in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @param data Data of the record to update.\r\n * @returns Observable with the API response.\r\n */\r\n update<T>(endpoint: string, id: number, data: T): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.put<ApiResponse<T>>(`${url}/${id}`, data);\r\n }\r\n\r\n\r\n /**\r\n * MMethod to delete a record from an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @returns Observable with the API response.\r\n */\r\n delete<T>(endpoint: string, id: number): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.delete<ApiResponse<T>>(`${url}/${id}`);\r\n }\r\n\r\n\r\n /**\r\n * Method to update the status of a record in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @param data Data of a boolean record to update.\r\n * @returns Observable with the API response.\r\n */\r\n enable<T>(endpoint: string, id: number, data: EnableBoolean<T>): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.put<ApiResponse<T>>(`${url}/enable/${id}`, data);\r\n }\r\n\r\n\r\n /**\r\n * MMethod to create multiple records in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param data Data of multiple records to add.\r\n * @returns Observable with the API response.\r\n */\r\n createMultiple<T>(endpoint: string, data: T[]): Observable<ApiResponse<T[]>> {\r\n const url = `${this.config.urlBase}/${endpoint}/bulk`;\r\n return this.http.post<ApiResponse<T[]>>(url, data);\r\n }\r\n\r\n\r\n /**\r\n * Method to get the query parameters for a table.\r\n * @param page Current page number.\r\n * @param limit NNumber of records per page.\r\n * @param sort Object containing the column and the sorting direction.\r\n * @param filters Filters applied to the query.\r\n * @param defaultFilters Default filters applied to the query.\r\n * @param searchQuery Search string.\r\n * @param columns Columns to search.\r\n * @returns\r\n */\r\n params({ page, limit, sort, filters, defaultFilters, searchQuery, columns }: QueryParams): Params {\r\n\r\n const params: Params = {}\r\n\r\n if (page) params['page'] = page.toString();\r\n if (limit) params['limit'] = limit.toString();\r\n\r\n // Apply default filters if provided\r\n Object.keys(defaultFilters ?? {}).forEach((key) => {\r\n if (!filters.hasOwnProperty(key)) {\r\n params[`filter[${key}]`] = defaultFilters![key];\r\n }\r\n });\r\n\r\n // If sort is provided, get the sort key and direction\r\n if (sort?.column && sort?.direction !== 'none') {\r\n const sortKey = this.converterCrudService.getSortKey(sort?.column);\r\n params['sortBy'] = sortKey;\r\n params['sortOrder'] = sort?.direction?.toUpperCase();\r\n }\r\n\r\n // Apply search if provided\r\n if (searchQuery && searchQuery.trim() !== '') {\r\n params['search'] = searchQuery;\r\n params['searchFields'] = columns?.map(col => col);\r\n }\r\n\r\n // Apply filters if provided\r\n if (Object.keys(filters).length > 0) {\r\n params['filter'] = filters;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerHttpService {\r\n\r\n /**\r\n * Map HTTP status codes to user-friendly messages and alert types.\r\n * This mapping helps in providing consistent error messages across the application.\r\n */\r\n private readonly errorMappings: { [key: number]: { title: string, message: string, type: 'error' | 'info', persistent: boolean } } = {\r\n 400: { type: 'info', title: 'Solicitud incorrecta', message: 'Los datos enviados no son válidos. Verifique e intente de nuevo.', persistent: false },\r\n 401: { type: 'info', title: 'No autorizado', message: 'Debe iniciar sesión para acceder a esta función.', persistent: true },\r\n 403: { type: 'error', title: 'Acceso denegado', message: 'No tiene permisos para realizar esta acción.', persistent: true },\r\n 404: { type: 'info', title: 'No encontrado', message: 'El recurso solicitado no existe o fue eliminado.', persistent: false },\r\n 409: { type: 'info', title: 'Conflicto', message: 'Conflicto en la solicitud. Verifique los datos ingresados.', persistent: false },\r\n 422: { type: 'info', title: 'Datos no procesables', message: 'Los datos son válidos, pero no pueden ser procesados en este momento.', persistent: false },\r\n 429: { type: 'info', title: 'Demasiadas solicitudes', message: 'Ha realizado demasiadas solicitudes. Intente más tarde.', persistent: true },\r\n 500: { type: 'error', title: 'Error del servidor', message: 'Ocurrió un error inesperado. Intente más tarde.', persistent: true },\r\n 503: { type: 'error', title: 'Servicio no disponible', message: 'El servidor está en mantenimiento o sobrecargado.', persistent: true }\r\n };\r\n\r\n\r\n /**\r\n * Handle HTTP errors and return a structured message with alert type.\r\n * @param error The error object returned from the HTTP request.\r\n * @returns A structured error message.\r\n */\r\n handleHttpError(error: any) {\r\n console.error('HTTP Error:', error);\r\n\r\n // If no error is defined, return a generic message\r\n if (!error) {\r\n return {\r\n type: 'error',\r\n title: 'Error desconocido',\r\n message: 'Ocurrió un error inesperado. Intente de nuevo más tarde.',\r\n persistent: true\r\n };\r\n }\r\n\r\n const status = error?.status || 0;\r\n const backendMessage = error?.error?.msg || error?.message;\r\n\r\n const errorInfo = this.errorMappings[status] || {\r\n title: 'Error desconocido',\r\n message: 'Ocurrió un error inesperado. Intente de nuevo más tarde.',\r\n type: 'error',\r\n persistent: true\r\n };\r\n\r\n return {\r\n type: errorInfo.type,\r\n title: errorInfo.title,\r\n message: backendMessage || errorInfo.message,\r\n persistent: errorInfo.persistent\r\n };\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { Check, ChevronDown, CircleCheck, CircleHelp, CircleX, Copy, Eye, ImageOff, Info, Loader2, Minimize2, Moon, RefreshCcw, RotateCcw, RotateCw, Scan, Search, SquareDashedMousePointer, Sun, TriangleAlert, Upload, X, ZoomIn, ZoomOut } from 'lucide-angular';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JIconsService {\r\n\r\n public icons = {\r\n info: Info,\r\n success: CircleCheck,\r\n error: CircleX,\r\n warning: TriangleAlert,\r\n question: CircleHelp,\r\n close: X,\r\n check: Check,\r\n zoomIn: ZoomIn,\r\n zoomOut: ZoomOut,\r\n rotateRight: RotateCw,\r\n rotateLeft: RotateCcw,\r\n reset: RefreshCcw,\r\n fullscreen: Scan,\r\n exitFullscreen: Minimize2,\r\n imageOff: ImageOff,\r\n upload: Upload,\r\n view: Eye,\r\n chevronDown: ChevronDown,\r\n squareDashedMousePointer: SquareDashedMousePointer,\r\n search: Search,\r\n copy: Copy,\r\n sun: Sun,\r\n moon: Moon,\r\n loading: Loader2,\r\n }\r\n\r\n constructor() { }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\nexport type ThemeMode = 'light' | 'dark';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class JThemeService {\r\n\r\n private readonly _theme = signal<ThemeMode>('light');\r\n readonly themeSignal = this._theme.asReadonly();\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n this.listenToExternalChanges();\r\n }\r\n\r\n private initializeTheme(): void {\r\n const savedTheme = localStorage.getItem('theme') as ThemeMode;\r\n\r\n if (savedTheme) {\r\n this._theme.set(savedTheme);\r\n } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\r\n this._theme.set('dark');\r\n }\r\n\r\n this.applyTheme();\r\n }\r\n\r\n private listenToExternalChanges(): void {\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'theme' && event.newValue) {\r\n const newTheme = event.newValue as ThemeMode;\r\n this._theme.set(newTheme);\r\n this.applyTheme();\r\n }\r\n });\r\n }\r\n\r\n private applyTheme(): void {\r\n const current = this._theme();\r\n document.documentElement.classList.toggle('dark', current === 'dark');\r\n }\r\n\r\n toggleTheme(): void {\r\n const newTheme = this._theme() === 'light' ? 'dark' : 'light';\r\n localStorage.setItem('theme', newTheme);\r\n this._theme.set(newTheme);\r\n this.applyTheme();\r\n }\r\n\r\n setTheme(theme: ThemeMode): void {\r\n localStorage.setItem('theme', theme);\r\n this._theme.set(theme);\r\n this.applyTheme();\r\n }\r\n\r\n getThemeMode(): ThemeMode {\r\n return this._theme();\r\n }\r\n}\r\n","import { Injectable, signal, computed, WritableSignal } from \"@angular/core\";\r\nimport { firstValueFrom, isObservable, Observable } from \"rxjs\";\r\nimport { AlertDialogProps, Dialog } from \"../../interfaces/alert/dialog-alert.interface\";\r\n\r\ntype ActionCallback = () => void | Promise<void> | Observable<any>;\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JAlertDialogService {\r\n private readonly isOpenSignal: WritableSignal<boolean> = signal(false);\r\n private readonly configSignal: WritableSignal<AlertDialogProps | null> = signal(null);\r\n\r\n // Estados de carga para los botones\r\n private readonly isLoadingConfirm: WritableSignal<boolean> = signal(false);\r\n private readonly isLoadingCancel: WritableSignal<boolean> = signal(false);\r\n private readonly isLoadingRetry: WritableSignal<boolean> = signal(false);\r\n\r\n\r\n // Callbacks\r\n private onConfirmCallback?: ActionCallback;\r\n private onCancelCallback?: ActionCallback;\r\n private onRetryCallback?: ActionCallback;\r\n\r\n isOpen = computed(() => this.isOpenSignal());\r\n config = computed(() => this.configSignal());\r\n\r\n isConfirmLoading = computed(() => this.isLoadingConfirm());\r\n isCancelLoading = computed(() => this.isLoadingCancel());\r\n isRetryLoading = computed(() => this.isLoadingRetry());\r\n\r\n // Add a dialogs computed property that returns an array with a single dialog when open\r\n dialogs = computed<Dialog[]>(() => {\r\n if (!this.isOpenSignal()) return [];\r\n\r\n return [{\r\n config: this.configSignal()!,\r\n isConfirmLoading: this.isLoadingConfirm(),\r\n isCancelLoading: this.isLoadingCancel(),\r\n isRetryLoading: this.isLoadingRetry()\r\n }];\r\n });\r\n\r\n getConfig() {\r\n return this.configSignal();\r\n }\r\n\r\n AlertDialog(config: AlertDialogProps) {\r\n this.onConfirmCallback = \"onConfirm\" in config ? config.onConfirm : undefined;\r\n this.onCancelCallback = \"onCancel\" in config ? config.onCancel : undefined;\r\n this.onRetryCallback = \"onRetry\" in config ? config.onRetry : undefined;\r\n\r\n // Reset loading states\r\n this.isLoadingConfirm.set(false);\r\n this.isLoadingCancel.set(false);\r\n this.isLoadingRetry.set(false);\r\n\r\n this.configSignal.set(config);\r\n this.isOpenSignal.set(true);\r\n }\r\n\r\n closeDialog() {\r\n this.isOpenSignal.set(false);\r\n this.configSignal.set(null);\r\n }\r\n\r\n async executeAction(action: \"confirm\" | \"cancel\" | \"retry\") {\r\n let callback: ActionCallback | undefined;\r\n let loadingSignal: WritableSignal<boolean>;\r\n \r\n switch (action) {\r\n case \"confirm\":\r\n callback = this.onConfirmCallback;\r\n loadingSignal = this.isLoadingConfirm;\r\n break;\r\n case \"cancel\":\r\n callback = this.onCancelCallback;\r\n loadingSignal = this.isLoadingCancel;\r\n break;\r\n case \"retry\":\r\n callback = this.onRetryCallback;\r\n loadingSignal = this.isLoadingRetry;\r\n break;\r\n }\r\n \r\n if (!callback) {\r\n this.closeDialog();\r\n return;\r\n }\r\n \r\n loadingSignal.set(true);\r\n \r\n try {\r\n const result = callback();\r\n \r\n // Soporte para Observable\r\n if (isObservable(result)) {\r\n await firstValueFrom(result);\r\n }\r\n \r\n // Soporte para Promise\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n \r\n // Si es void, no hacemos nada extra\r\n } catch (error) {\r\n console.error(`Error en la acción ${action}:`, error);\r\n } finally {\r\n loadingSignal.set(false);\r\n this.closeDialog();\r\n }\r\n }\r\n \r\n}","import { Injectable, signal, computed, WritableSignal } from \"@angular/core\";\r\nimport { AlertToastProps, Toast } from \"../../interfaces/alert/toast-alert.interface\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JAlertToastService {\r\n private readonly toastsSignal: WritableSignal<Toast[]> = signal([]);\r\n private readonly autoCloseTimers: Map<string, any> = new Map();\r\n\r\n // Default auto-close delay in milliseconds\r\n private readonly DEFAULT_AUTO_CLOSE_DELAY = 5000;\r\n\r\n // Default action button text\r\n private readonly DEFAULT_ACTION_BUTTON_TEXT = \"Action\";\r\n\r\n // For compatibility with existing code\r\n private readonly isOpenSignal: WritableSignal<boolean> = signal(false);\r\n private readonly configSignal: WritableSignal<AlertToastProps | null> = signal(null);\r\n private readonly isLoadingAction: WritableSignal<boolean> = signal(false);\r\n private readonly isLoadingCancel: WritableSignal<boolean> = signal(false);\r\n\r\n // Computed values for all toasts\r\n toasts = computed(() => this.toastsSignal());\r\n\r\n // For backward compatibility with existing code\r\n isOpen = computed(() => this.isOpenSignal());\r\n config = computed(() => this.configSignal());\r\n isActionLoading = computed(() => this.isLoadingAction());\r\n isCancelLoading = computed(() => this.isLoadingCancel());\r\n\r\n getConfig() {\r\n return this.configSignal();\r\n }\r\n\r\n AlertToast(config: AlertToastProps) {\r\n const toastId = crypto.randomUUID();\r\n\r\n // Store callbacks for this toast\r\n const onActionCallback = \"onAction\" in config ? config.onAction : undefined;\r\n const onCancelCallback = \"onCancel\" in config ? config.onCancel : undefined;\r\n\r\n // Get action button text or use default\r\n const actionNameButton = config.actionButtonText ?? this.DEFAULT_ACTION_BUTTON_TEXT;\r\n\r\n const toast: Toast = {\r\n id: toastId,\r\n config,\r\n isActionLoading: false,\r\n isCancelLoading: false,\r\n onActionCallback,\r\n onCancelCallback,\r\n actionNameButton, // Add the button text\r\n createdAt: Date.now()\r\n };\r\n\r\n // Add the toast to our list\r\n this.toastsSignal.update(toasts => [...toasts, toast]);\r\n\r\n // Check if this toast should auto-close\r\n // If autoClose is explicitly set to true OR \r\n // if it's a success toast and autoClose is not explicitly set to false\r\n const shouldAutoClose = config.autoClose === true ||\r\n (config.type === 'success' && config.autoClose !== false);\r\n\r\n if (shouldAutoClose) {\r\n // Use the provided delay or the default\r\n const delay = config.autoCloseDelay ?? this.DEFAULT_AUTO_CLOSE_DELAY;\r\n\r\n const timerId = setTimeout(() => {\r\n this.closeToastById(toastId);\r\n this.autoCloseTimers.delete(toastId);\r\n }, delay);\r\n\r\n this.autoCloseTimers.set(toastId, timerId);\r\n }\r\n\r\n return toastId;\r\n }\r\n\r\n closeToastById(toastId: string) {\r\n // Clear any auto-close timer\r\n if (this.autoCloseTimers.has(toastId)) {\r\n clearTimeout(this.autoCloseTimers.get(toastId));\r\n this.autoCloseTimers.delete(toastId);\r\n }\r\n\r\n this.toastsSignal.update(toasts =>\r\n toasts.filter(toast => toast.id !== toastId)\r\n );\r\n }\r\n\r\n closeAllToasts() {\r\n // Clear all timers\r\n this.autoCloseTimers.forEach(timerId => clearTimeout(timerId));\r\n this.autoCloseTimers.clear();\r\n\r\n this.toastsSignal.set([]);\r\n }\r\n\r\n async executeToastAction(toastId: string, action: \"action\" | \"cancel\") {\r\n const toast = this.toastsSignal().find(t => t.id === toastId);\r\n if (!toast) return;\r\n\r\n let callback: (() => Promise<void> | void) | undefined;\r\n let loadingProperty: 'isActionLoading' | 'isCancelLoading';\r\n\r\n switch (action) {\r\n case \"action\":\r\n callback = toast.onActionCallback;\r\n loadingProperty = 'isActionLoading';\r\n break;\r\n case \"cancel\":\r\n callback = toast.onCancelCallback;\r\n loadingProperty = 'isCancelLoading';\r\n break;\r\n }\r\n\r\n if (callback) {\r\n // Update loading state\r\n this.toastsSignal.update(toasts =>\r\n toasts.map(t => t.id === toastId ? { ...t, [loadingProperty]: true } : t)\r\n );\r\n\r\n try {\r\n await callback();\r\n } catch (error) {\r\n console.error(`Error en la acción ${action}:`, error);\r\n } finally {\r\n // Update loading state back to false (in case the toast hasn't been closed)\r\n this.toastsSignal.update(toasts => {\r\n const updatedToasts = toasts.map(t =>\r\n t.id === toastId ? { ...t, [loadingProperty]: false } : t\r\n );\r\n return updatedToasts;\r\n });\r\n\r\n this.closeToastById(toastId);\r\n }\r\n } else {\r\n this.closeToastById(toastId);\r\n }\r\n }\r\n\r\n // For backward compatibility with existing code\r\n closeToast() {\r\n this.closeAllToasts();\r\n this.isOpenSignal.set(false);\r\n this.configSignal.set(null);\r\n }\r\n\r\n // For backward compatibility with existing code\r\n async executeAction(action: \"action\" | \"cancel\") {\r\n let callback: (() => Promise<void> | void) | undefined;\r\n let loadingSignal: WritableSignal<boolean>;\r\n\r\n switch (action) {\r\n case \"action\":\r\n callback = \"onAction\" in (this.configSignal() || {})\r\n ? (this.configSignal() as any).onAction\r\n : undefined;\r\n loadingSignal = this.isLoadingAction;\r\n break;\r\n case \"cancel\":\r\n callback = \"onCancel\" in (this.configSignal() || {})\r\n ? (this.configSignal() as any).onCancel\r\n : undefined;\r\n loadingSignal = this.isLoadingCancel;\r\n break;\r\n }\r\n\r\n if (callback) {\r\n loadingSignal.set(true);\r\n try {\r\n await callback();\r\n } catch (error) {\r\n console.error(`Error en la acción ${action}:`, error);\r\n } finally {\r\n loadingSignal.set(false);\r\n this.closeToast();\r\n }\r\n } else {\r\n this.closeToast();\r\n }\r\n }\r\n}","\r\n// ======================================================\r\n// Table Column Interface\r\n// This interface defines the structure of a table column in a CRUD application.\r\n// ======================================================\r\n\r\ntype KeyPath<T> = T extends object\r\n ? {\r\n [K in keyof T]: K extends string | number\r\n ? `${K}` | `${K}.${KeyPath<T[K]>}`\r\n : never;\r\n }[keyof T]\r\n : never;\r\n\r\ntype ExtraColumnKeys = 'total' | 'expand' | 'extra';\r\ntype ExtendedKeyPath<T> = KeyPath<T> | ExtraColumnKeys;\r\n\r\nexport interface TableColumn<T> {\r\n key: ExtendedKeyPath<T>;\r\n label: string; \r\n visible?: boolean;\r\n sortable?: boolean;\r\n isSearchable?: boolean;\r\n isDisabled?: boolean;\r\n isDecorator?: boolean;\r\n colorDecorator?: (row: T) => 'primary' | 'success' | 'error' | 'warning' | 'info' | undefined;\r\n isDecoratorArray?: boolean;\r\n isCurrency?: boolean;\r\n isdollar?: boolean;\r\n isDate?: boolean;\r\n isDateText?: boolean;\r\n isDateTime?: boolean;\r\n isRelativeTime?: boolean;\r\n isDecoratorDateTime?: boolean;\r\n isDateTimeText?: boolean;\r\n isFirstWord?: boolean;\r\n isLink?: boolean;\r\n styles?: { [key: string]: string };\r\n valueGetter?: (row: T) => any;\r\n template?: (row: T) => string;\r\n expandTemplate?: (row: T) => string;\r\n extraSearchFields?: (keyof T | string)[];\r\n hidden?: boolean;\r\n}\r\n\r\nexport type SortDirection = 'none' | 'asc' | 'desc';\r\n\r\n\r\nexport type LoadingState = 'idle' | 'loading' | 'success' | 'error';\r\n\r\nexport interface LoadingStates {\r\n initialLoad: LoadingState;\r\n search: LoadingState;\r\n itemsPerPage: LoadingState;\r\n pagination: LoadingState;\r\n sort: LoadingState;\r\n checked: LoadingState;\r\n action: LoadingState;\r\n aditionalButtons: { [buttonType: string]: LoadingState };\r\n}\r\n\r\ntype DefaultTypeOptionTable = 'edit' | 'delete' | 'disabled' | 'custom' | 'editRow';\r\n\r\ntype CommonOptionTableProps = {\r\n type?: `${DefaultTypeOptionTable}` | (string & {});\r\n icon?: ((data?: any) => any) | any;\r\n clicked?: (data: any) => void;\r\n text?: ((data?: any) => string) | string;\r\n tooltip?: ((data?: any) => string) | string;\r\n disabled?: ((data?: any) => boolean) | boolean;\r\n isVisible?: ((data?: any) => boolean) | boolean;\r\n tooltipPosition?: 'top' | 'right' | 'bottom' | 'left';\r\n ngClass?: ((data?: any) => any) | any;\r\n classes?: string;\r\n searchListUpload?: {\r\n [endpoint: string]: {\r\n keyReturn: string,\r\n keyColumnSearch: string,\r\n keyAlternate?: string,\r\n optional?: boolean;\r\n defaultFilters?: { [key: string]: string | number | (string | number)[] | undefined };\r\n };\r\n };\r\n};\r\n\r\n\r\n// ===================================================\r\n\r\ntype OptionTableWithChangeIcon = CommonOptionTableProps & {\r\n isChangeIcon: boolean | (() => boolean);\r\n iconChange: any;\r\n};\r\n\r\ntype OptionTableWithoutChangeIcon = CommonOptionTableProps & {\r\n isChangeIcon?: undefined;\r\n iconChange?: any;\r\n};\r\n\r\nexport type OptionsTable = OptionTableWithChangeIcon | OptionTableWithoutChangeIcon;\r\n\r\n\r\n// ===================================================\r\n\r\nexport interface QueryParams {\r\n page?: number;\r\n limit?: number;\r\n\r\n sort?: { column?: string | null; direction?: string };\r\n\r\n filters?: any;\r\n defaultFilters?: { [key: string]: any };\r\n\r\n searchQuery?: string;\r\n columns?: string[]\r\n}\r\n\r\nexport interface EnableBoolean<T> {\r\n key: keyof T;\r\n value: any;\r\n values: any[];\r\n keyDate?: keyof T;\r\n isDateNullable?: boolean;\r\n}","/*\r\n * Public API Surface of tailjng\r\n */\r\n\r\n// ========================================\r\n// Config\r\n// ========================================\r\nexport * from './lib/config/tailjng-config.token';\r\n\r\n\r\n// ========================================\r\n// Services\r\n// ========================================\r\n\r\n// Crud\r\nexport * from './lib/services/crud/converter-crud.service';\r\nexport * from './lib/services/crud/generic-crud.service';\r\n\r\n// Http\r\nexport * from './lib/services/http/params-http.service';\r\nexport * from './lib/services/http/error-handler-http.service';\r\n\r\n// Transformer\r\nexport * from './lib/services/transformer/calendar.service';\r\n\r\n// Static\r\nexport * from './lib/services/static/icons.service';\r\nexport * from './lib/services/static/theme.service';\r\n\r\n// Alert\r\nexport * from './lib/services/alert/dialog-alert.service';\r\nexport * from './lib/services/alert/toast-alert.service';\r\n\r\n\r\n// Interface\r\nexport * from './lib/interfaces/crud/crud.interface';\r\n\r\n// npm version patch\r\n// npm run build\r\n\r\n\r\n// cd dist/tailjng\r\n// npm publish --access public\r\n\r\n// npx tailjng add [component]","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.JCalendarService","i1","i2.JParamsHttpService","i3.JConverterCrudService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tailjng.mjs","sources":["../../../projects/tailjng/src/lib/config/tailjng-config.token.ts","../../../projects/tailjng/src/lib/services/transformer/calendar.service.ts","../../../projects/tailjng/src/lib/services/crud/converter-crud.service.ts","../../../projects/tailjng/src/lib/services/http/params-http.service.ts","../../../projects/tailjng/src/lib/services/crud/generic-crud.service.ts","../../../projects/tailjng/src/lib/services/http/error-handler-http.service.ts","../../../projects/tailjng/src/lib/services/static/icons.service.ts","../../../projects/tailjng/src/lib/services/static/theme.service.ts","../../../projects/tailjng/src/lib/services/alert/dialog-alert.service.ts","../../../projects/tailjng/src/lib/services/alert/toast-alert.service.ts","../../../projects/tailjng/src/lib/interfaces/crud/crud.interface.ts","../../../projects/tailjng/src/public-api.ts","../../../projects/tailjng/src/tailjng.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { TailjngConfig } from '../interfaces/config.interface';\r\n\r\n\r\nexport const TAILJNG_CONFIG = new InjectionToken<TailjngConfig>('TAILJNG_CONFIG');\r\n\r\n\r\n// providers: [\r\n// provideRouter(routes),\r\n// {\r\n// provide: TAILJNG_CONFIG,\r\n// useValue: {\r\n// urlBase: environment.urlBase,\r\n// socketUrl: environment.socketUrl,\r\n// }\r\n// }\r\n// ]","import { Injectable } from '@angular/core';\r\nimport { formatDistanceToNowStrict } from 'date-fns';\r\nimport { es } from 'date-fns/locale';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JCalendarService {\r\n\r\n nameDaysAb: string[] = ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'];\r\n nameDays: string[] = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];\r\n\r\n nameMontsAb: string[] = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'];\r\n nameMonts: string[] = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];\r\n\r\n\r\n /**\r\n * Get month from date\r\n * @param date The date to extract the month from, can be a Date object or a string in 'YYYY-MM-DD' format.\r\n * @returns The name of the month in Spanish.\r\n */\r\n getMonthFromDate(date: Date | string): string {\r\n const parsedDate = typeof date === 'string' ? new Date(date) : date;\r\n const monthIndex = parsedDate.getMonth();\r\n return this.nameMonts[monthIndex];\r\n }\r\n\r\n\r\n /**\r\n * Calculate the age of a person based on their birth date.\r\n * @param birth The birth date as a Date object or a string in 'YYYY-MM-DD' format.\r\n * @returns The age in years, or null if the birth date is invalid.\r\n */\r\n calculateAge(birth: Date | string): number | null {\r\n if (!birth) {\r\n return null;\r\n }\r\n const birthDate = typeof birth === 'string' ? new Date(birth) : birth;\r\n const today = new Date();\r\n let age = today.getFullYear() - birthDate.getFullYear();\r\n const m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n age--;\r\n }\r\n return age;\r\n }\r\n\r\n\r\n /**\r\n * Calculate the complete age of a person based on their birth date.\r\n * @param birth The birth date as a Date object or a string in 'YYYY-MM-DD' format.\r\n * @returns An object containing years, months, and days of age.\r\n */\r\n calculateAgeComplete(birth: Date | string): { years: number, months: number, days: number } {\r\n const birthDate = typeof birth === 'string' ? new Date(birth) : birth;\r\n const today = new Date();\r\n\r\n let years = today.getFullYear() - birthDate.getFullYear();\r\n let months = today.getMonth() - birthDate.getMonth();\r\n let days = today.getDate() - birthDate.getDate();\r\n\r\n if (days < 0) {\r\n months--;\r\n const previousMonth = new Date(today.getFullYear(), today.getMonth(), 0);\r\n days += previousMonth.getDate();\r\n }\r\n\r\n if (months < 0) {\r\n years--;\r\n months += 12;\r\n }\r\n\r\n return { years, months, days };\r\n }\r\n\r\n\r\n /**\r\n * Format a date string to a more readable format.\r\n * @param date The date string in 'YYYY-MM-DD' format.\r\n * @param month Optional parameter to add to the month name.\r\n * @returns A formatted date string in the format 'DD de MMMM del YYYY'.\r\n */\r\n formatearFechaString(date: string, month?: number) {\r\n const partesFecha = date.split('-');\r\n\r\n const año = partesFecha[0];\r\n const mes = this.nameMonts[parseInt(partesFecha[1], 10) - 1];\r\n const día = parseInt(partesFecha[2], 10);\r\n\r\n let mes_fin;\r\n if (month) {\r\n mes_fin = mes + month;\r\n } else {\r\n mes_fin = mes;\r\n }\r\n\r\n return `${día} de ${mes_fin} del ${año}`;\r\n }\r\n\r\n\r\n /**\r\n * Format a Date object to a string in the format 'DD de MMMM del YYYY'.\r\n * @param date The Date object to format.\r\n * @param month Optional parameter to add to the month name.\r\n * @returns A formatted date string.\r\n */\r\n formatearFechaDate(date: Date, month?: number) {\r\n \r\n const utc_date = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\r\n let new_date = utc_date;\r\n\r\n if (month !== undefined) {\r\n new_date = new Date(new_date.setUTCMonth(new_date.getUTCMonth() + month));\r\n }\r\n\r\n // Get the values of the new date in UTC to avoid local time zones\r\n const año = new_date.getUTCFullYear();\r\n const mes = this.nameMonts[new_date.getUTCMonth()];\r\n const día = new_date.getUTCDate();\r\n\r\n return `${día} de ${mes} del ${año}`;\r\n }\r\n\r\n\r\n /**\r\n * Parse a date string in the format \"dd de MMMM del yyyy\" to \"yyyy-MM-dd\".\r\n * @param fechaStr The date string to parse.\r\n * @returns The parsed date string in \"yyyy-MM-dd\" format or null if invalid.\r\n */\r\n parseFechaString(fechaStr: string): string | null {\r\n if (!fechaStr) return null;\r\n\r\n // Map Spanish month names to their numeric equivalents\r\n const meses: any = {\r\n 'ENERO': '01',\r\n 'FEBRERO': '02',\r\n 'MARZO': '03',\r\n 'ABRIL': '04',\r\n 'MAYO': '05',\r\n 'JUNIO': '06',\r\n 'JULIO': '07',\r\n 'AGOSTO': '08',\r\n 'SEPTIEMBRE': '09',\r\n 'OCTUBRE': '10',\r\n 'NOVIEMBRE': '11',\r\n 'DICIEMBRE': '12'\r\n };\r\n\r\n const regex = /^(\\d{1,2}) de (\\w+) del (\\d{4})$/i;\r\n const match = fechaStr.trim().match(regex);\r\n\r\n if (match) {\r\n const day = match[1].padStart(2, '0');\r\n const mesStr = match[2].toUpperCase();\r\n const month = meses[mesStr] || '01';\r\n const year = match[3];\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n /**\r\n * Format a date to \"MMM YY\" format.\r\n * @param date The date to format, can be a Date object.\r\n * @returns The formatted date string.\r\n */\r\n formatMonthYear(date: Date): string {\r\n const months = this.nameMontsAb.map(month => month.toUpperCase());\r\n const month = months[date.getMonth()];\r\n const year = date.getFullYear().toString().slice(-2);\r\n return `${month} ${year}`;\r\n }\r\n\r\n\r\n /**\r\n * Format a date to the Bogotá timezone (UTC-5).\r\n * @param date The date to format, can be a Date object.\r\n * @returns The formatted date string in 'yyyy-MM-ddTHH:mm:ss' format.\r\n */\r\n formatDateToBogota(date: Date): string {\r\n const bogotaOffset = -5 * 60;\r\n const localTime = date.getTime();\r\n const localOffset = date.getTimezoneOffset() * 60000;\r\n const utc = localTime + localOffset;\r\n const bogotaTime = utc + (bogotaOffset * 60000);\r\n const bogotaDate = new Date(bogotaTime);\r\n\r\n // Format the date to 'yyyy-MM-ddTHH:mm:ss'\r\n const year = bogotaDate.getFullYear();\r\n const month = String(bogotaDate.getMonth() + 1).padStart(2, '0');\r\n const day = String(bogotaDate.getDate()).padStart(2, '0');\r\n const hours = String(bogotaDate.getHours()).padStart(2, '0');\r\n const minutes = String(bogotaDate.getMinutes()).padStart(2, '0');\r\n const seconds = String(bogotaDate.getSeconds()).padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\r\n }\r\n\r\n\r\n /**\r\n * Format a date to a relative time string.\r\n * This method uses date-fns to format the date relative to now.\r\n * @param date The date to format, can be a string in 'YYYY-MM-DD' format.\r\n * @returns A formatted relative time string.\r\n * @example \"hace 2 días\", \"hace 1 hora\", etc\r\n */\r\n formatRelativeDate(date: string): string {\r\n return formatDistanceToNowStrict(new Date(date), {\r\n locale: {\r\n ...es,\r\n formatDistance: (token, count, options) => {\r\n const formatDistanceLocale = {\r\n lessThanXSeconds: 'hace menos de {{count}} segundos',\r\n xSeconds: 'hace {{count}} segundos',\r\n halfAMinute: 'hace medio minuto',\r\n lessThanXMinutes: 'hace menos de {{count}} minutos',\r\n xMinutes: 'hace {{count}} minutos',\r\n aboutXHours: 'hace aproximadamente {{count}} horas',\r\n xHours: 'hace {{count}} horas',\r\n xDays: 'hace {{count}} días',\r\n aboutXWeeks: 'hace aproximadamente {{count}} semanas',\r\n xWeeks: 'hace {{count}} semanas',\r\n aboutXMonths: 'hace aproximadamente {{count}} meses',\r\n xMonths: 'hace {{count}} meses',\r\n aboutXYears: 'hace aproximadamente {{count}} años',\r\n xYears: 'hace {{count}} años',\r\n overXYears: 'hace más de {{count}} años',\r\n almostXYears: 'hace casi {{count}} años'\r\n };\r\n\r\n let result = formatDistanceLocale[token];\r\n\r\n if (typeof count === 'number') {\r\n result = result.replace('{{count}}', count.toString());\r\n\r\n // Singulars and plurals\r\n if (token === 'xHours' && count === 1) {\r\n result = result.replace('horas', 'hora');\r\n }\r\n if (token === 'xDays' && count === 1) {\r\n result = result.replace('días', 'día');\r\n }\r\n if (token === 'xWeeks' && count === 1) {\r\n result = result.replace('semanas', 'semana');\r\n }\r\n if (token === 'xMonths' && count === 1) {\r\n result = result.replace('meses', 'mes');\r\n }\r\n if (token === 'xYears' && count === 1) {\r\n result = result.replace('años', 'año');\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { CurrencyPipe } from '@angular/common';\r\nimport { JCalendarService } from '../transformer/calendar.service';\r\nimport { TableColumn } from '../../interfaces/crud/crud.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JConverterCrudService {\r\n\r\n constructor(\r\n private readonly currencyPipe: CurrencyPipe,\r\n private readonly calendarService: JCalendarService,\r\n ) { }\r\n\r\n /**\r\n * Get the correct sort key from the sortColumn object or string.\r\n * @param sortColumn The column to sort by, can be a string or an object with a 'col' property.\r\n * @returns The sort key as a string.\r\n */\r\n getSortKey(sortColumn: any): string {\r\n if (typeof sortColumn === 'object' && sortColumn !== null) {\r\n return sortColumn.col;\r\n }\r\n\r\n return sortColumn;\r\n }\r\n\r\n\r\n /**\r\n * Converter object to an array of objects with key and value for form initialization.\r\n * @param formGroup The FormGroup to convert.\r\n * @returns An array of objects with key and value for form initialization.\r\n */\r\n initializeFormControls(formGroup: FormGroup): { [key: string]: AbstractControl | null } {\r\n const formControls: { [key: string]: AbstractControl | null } = {};\r\n\r\n Object.keys(formGroup.controls).forEach(key => {\r\n formControls[`${key}_control`] = formGroup.get(key);\r\n });\r\n\r\n return formControls;\r\n }\r\n\r\n\r\n /**\r\n * Formats data based on the column type.\r\n * @param value The value to format.\r\n * @param column The column definition.\r\n * @return Formatted value based on the column type\r\n */\r\n formatData(value: any, column: TableColumn<any>): any {\r\n\r\n if (column.isdollar && value !== null) {\r\n const transformedValue = this.currencyPipe.transform(value, 'USD', 'symbol', '1.2-2');\r\n return transformedValue ? transformedValue.replace('US', '') : null;\r\n }\r\n\r\n if (column.isCurrency && value !== null) {\r\n return this.currencyPipe.transform(value, 'USD', 'symbol', '1.2-2');\r\n }\r\n\r\n if (column.isDate && value !== null) {\r\n return new Date(value).toLocaleDateString();\r\n }\r\n\r\n if (column.isDateText && value !== null) {\r\n return this.calendarService.formatearFechaString(`${value}`);\r\n }\r\n\r\n if (column.isDateTime && value !== null) {\r\n return new Date(value).toLocaleString();\r\n }\r\n\r\n if (column.isDateTimeText && value !== null) {\r\n return new Date(value).toString();\r\n }\r\n\r\n if (column.isRelativeTime && value !== null) {\r\n return this.calendarService.formatRelativeDate(value);\r\n }\r\n\r\n if (column.isFirstWord && value !== null) {\r\n return value.split(' ')[0];\r\n }\r\n\r\n return value;\r\n }\r\n\r\n\r\n /**\r\n * This method converts values to appropriate types based on the column definition.\r\n * It handles various formats such as currency, date, and text.\r\n * @param value The value to parse.\r\n * @param column The column definition.\r\n * @returns The parsed value or null if invalid.\r\n */\r\n parseData(value: any, column: TableColumn<any>): any {\r\n if (value === null || value === undefined || value === 'S/N') {\r\n return null;\r\n }\r\n\r\n let cleaned = value;\r\n\r\n // If it's text, trim whitespace\r\n if (typeof cleaned === 'string') {\r\n cleaned = cleaned.trim();\r\n }\r\n\r\n // isdollar → remove symbol and parse to number\r\n if (column.isdollar && typeof cleaned === 'string') {\r\n cleaned = cleaned.replace(/[^\\d,.-]/g, '').replace(',', '.');\r\n return cleaned ? parseFloat(cleaned) : null;\r\n }\r\n\r\n // isCurrency → remove symbol and parse to number\r\n if (column.isCurrency && typeof cleaned === 'string') {\r\n cleaned = cleaned.replace(/[^\\d,.-]/g, '').replace(',', '.');\r\n return cleaned ? parseFloat(cleaned) : null;\r\n }\r\n\r\n // isDateText → parse text from date to ISO format (yyyy-MM-dd)\r\n if (column.isDateText && typeof cleaned === 'string') {\r\n // Use your reverse calendarService if you have one\r\n const fecha = this.calendarService.parseFechaString(cleaned);\r\n return fecha ?? cleaned;\r\n }\r\n\r\n // isDate → parse text to Date or ISO string\r\n if (column.isDate && typeof cleaned === 'string') {\r\n const fecha = new Date(cleaned);\r\n return isNaN(fecha.getTime()) ? cleaned : fecha.toISOString().substring(0, 10);\r\n }\r\n\r\n // isDateTime → parse text to DateTime\r\n if (column.isDateTime && typeof cleaned === 'string') {\r\n const fecha = new Date(cleaned);\r\n return isNaN(fecha.getTime()) ? cleaned : fecha.toISOString();\r\n }\r\n\r\n // isDateTimeText → parse text to DateTime\r\n if (column.isDateTimeText && typeof cleaned === 'string') {\r\n const fecha = new Date(cleaned);\r\n return isNaN(fecha.getTime()) ? cleaned : fecha.toISOString();\r\n }\r\n\r\n // isRelativeTime → impossible to reverse automatically, return text\r\n if (column.isRelativeTime) {\r\n return cleaned;\r\n }\r\n\r\n // isFirstWord → return full text, as it's unclear which part to remove\r\n if (column.isFirstWord) {\r\n return cleaned;\r\n }\r\n\r\n return cleaned;\r\n }\r\n}","import { HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Params } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JParamsHttpService {\r\n\r\n /**\r\n * Transform Params to HttpParams\r\n * @param params \r\n * @returns \r\n */\r\n resParams(params: Params): HttpParams {\r\n\r\n // Construct HttpParams\r\n let httpParams = new HttpParams();\r\n\r\n if (params) {\r\n Object.keys(params).forEach(key => {\r\n const value = params[key];\r\n\r\n // If the value is an object (e.g., filter: { id_status: [1, 2] })\r\n if (typeof value === 'object' && value !== null) {\r\n Object.keys(value).forEach(subKey => {\r\n const subValue = value[subKey];\r\n\r\n // If the subValue is an array (e.g., id_status: [1, 2])\r\n if (Array.isArray(subValue)) {\r\n subValue.forEach(v => {\r\n httpParams = httpParams.append(`${key}[${subKey}]`, v);\r\n });\r\n } else {\r\n // If it's a unique value\r\n httpParams = httpParams.append(`${key}[${subKey}]`, subValue);\r\n }\r\n });\r\n } else {\r\n // If it's a flat value (e.g., id_status: 1)\r\n httpParams = httpParams.append(key, value);\r\n }\r\n });\r\n }\r\n return httpParams;\r\n }\r\n\r\n}","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Params } from '@angular/router';\r\nimport { map, Observable } from 'rxjs';\r\nimport { JConverterCrudService } from './converter-crud.service';\r\nimport { JParamsHttpService } from '../http/params-http.service';\r\nimport { TAILJNG_CONFIG } from '../../config/tailjng-config.token';\r\nimport { TailjngConfig } from '../../interfaces/config.interface';\r\nimport { ApiResponse } from '../../interfaces/crud/api-response';\r\nimport { EnableBoolean, QueryParams } from '../../interfaces/crud/crud.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JGenericCrudService {\r\n\r\n constructor(\r\n @Inject(TAILJNG_CONFIG) private readonly config: TailjngConfig,\r\n private readonly http: HttpClient,\r\n private readonly paramsHttpService: JParamsHttpService,\r\n private readonly converterCrudService: JConverterCrudService,\r\n ) { }\r\n\r\n /**\r\n * Method to get all records from an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param params Parameters of the request.\r\n * @returns Observable with the API response.\r\n */\r\n getAll<T>(endpoint: string, params?: Params): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n let httpParams;\r\n if (params) httpParams = this.paramsHttpService.resParams(params);\r\n return this.http.get<ApiResponse<T>>(url, { params: httpParams });\r\n }\r\n\r\n\r\n /**\r\n * Method to get a record from an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @returns Observable with the API response.\r\n */\r\n getId<T>(endpoint: string, id: number): Observable<T> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.get<ApiResponse<{ [key: string]: T }>>(`${url}/${id}`).pipe(\r\n map(response => response.data[endpoint])\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Method to create a record in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param data Data of the record to add.\r\n * @returns Observable with the API response.\r\n */\r\n create<T>(endpoint: string, data: T): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.post<ApiResponse<T>>(url, data);\r\n }\r\n\r\n\r\n /**\r\n * MMethod to update a record in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @param data Data of the record to update.\r\n * @returns Observable with the API response.\r\n */\r\n update<T>(endpoint: string, id: number, data: T): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.put<ApiResponse<T>>(`${url}/${id}`, data);\r\n }\r\n\r\n\r\n /**\r\n * MMethod to delete a record from an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @returns Observable with the API response.\r\n */\r\n delete<T>(endpoint: string, id: number): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.delete<ApiResponse<T>>(`${url}/${id}`);\r\n }\r\n\r\n\r\n /**\r\n * Method to update the status of a record in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param id Identifier of the record.\r\n * @param data Data of a boolean record to update.\r\n * @returns Observable with the API response.\r\n */\r\n enable<T>(endpoint: string, id: number, data: EnableBoolean<T>): Observable<ApiResponse<T>> {\r\n const url = `${this.config.urlBase}/${endpoint}`;\r\n return this.http.put<ApiResponse<T>>(`${url}/enable/${id}`, data);\r\n }\r\n\r\n\r\n /**\r\n * MMethod to create multiple records in an endpoint.\r\n * @param endpoint Distinctive of the endpoint ('role', 'status', etc.)\r\n * @param data Data of multiple records to add.\r\n * @returns Observable with the API response.\r\n */\r\n createMultiple<T>(endpoint: string, data: T[]): Observable<ApiResponse<T[]>> {\r\n const url = `${this.config.urlBase}/${endpoint}/bulk`;\r\n return this.http.post<ApiResponse<T[]>>(url, data);\r\n }\r\n\r\n\r\n /**\r\n * Method to get the query parameters for a table.\r\n * @param page Current page number.\r\n * @param limit NNumber of records per page.\r\n * @param sort Object containing the column and the sorting direction.\r\n * @param filters Filters applied to the query.\r\n * @param defaultFilters Default filters applied to the query.\r\n * @param searchQuery Search string.\r\n * @param columns Columns to search.\r\n * @returns\r\n */\r\n params({ page, limit, sort, filters, defaultFilters, searchQuery, columns }: QueryParams): Params {\r\n\r\n const params: Params = {}\r\n\r\n if (page) params['page'] = page.toString();\r\n if (limit) params['limit'] = limit.toString();\r\n\r\n // Apply default filters if provided\r\n Object.keys(defaultFilters ?? {}).forEach((key) => {\r\n if (!filters.hasOwnProperty(key)) {\r\n params[`filter[${key}]`] = defaultFilters![key];\r\n }\r\n });\r\n\r\n // If sort is provided, get the sort key and direction\r\n if (sort?.column && sort?.direction !== 'none') {\r\n const sortKey = this.converterCrudService.getSortKey(sort?.column);\r\n params['sortBy'] = sortKey;\r\n params['sortOrder'] = sort?.direction?.toUpperCase();\r\n }\r\n\r\n // Apply search if provided\r\n if (searchQuery && searchQuery.trim() !== '') {\r\n params['search'] = searchQuery;\r\n params['searchFields'] = columns?.map(col => col);\r\n }\r\n\r\n // Apply filters if provided\r\n if (Object.keys(filters).length > 0) {\r\n params['filter'] = filters;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerHttpService {\r\n\r\n /**\r\n * Map HTTP status codes to user-friendly messages and alert types.\r\n * This mapping helps in providing consistent error messages across the application.\r\n */\r\n private readonly errorMappings: { [key: number]: { title: string, message: string, type: 'error' | 'info', persistent: boolean } } = {\r\n 400: { type: 'info', title: 'Solicitud incorrecta', message: 'Los datos enviados no son válidos. Verifique e intente de nuevo.', persistent: false },\r\n 401: { type: 'info', title: 'No autorizado', message: 'Debe iniciar sesión para acceder a esta función.', persistent: true },\r\n 403: { type: 'error', title: 'Acceso denegado', message: 'No tiene permisos para realizar esta acción.', persistent: true },\r\n 404: { type: 'info', title: 'No encontrado', message: 'El recurso solicitado no existe o fue eliminado.', persistent: false },\r\n 409: { type: 'info', title: 'Conflicto', message: 'Conflicto en la solicitud. Verifique los datos ingresados.', persistent: false },\r\n 422: { type: 'info', title: 'Datos no procesables', message: 'Los datos son válidos, pero no pueden ser procesados en este momento.', persistent: false },\r\n 429: { type: 'info', title: 'Demasiadas solicitudes', message: 'Ha realizado demasiadas solicitudes. Intente más tarde.', persistent: true },\r\n 500: { type: 'error', title: 'Error del servidor', message: 'Ocurrió un error inesperado. Intente más tarde.', persistent: true },\r\n 503: { type: 'error', title: 'Servicio no disponible', message: 'El servidor está en mantenimiento o sobrecargado.', persistent: true }\r\n };\r\n\r\n\r\n /**\r\n * Handle HTTP errors and return a structured message with alert type.\r\n * @param error The error object returned from the HTTP request.\r\n * @returns A structured error message.\r\n */\r\n handleHttpError(error: any) {\r\n console.error('HTTP Error:', error);\r\n\r\n // If no error is defined, return a generic message\r\n if (!error) {\r\n return {\r\n type: 'error',\r\n title: 'Error desconocido',\r\n message: 'Ocurrió un error inesperado. Intente de nuevo más tarde.',\r\n persistent: true\r\n };\r\n }\r\n\r\n const status = error?.status || 0;\r\n const backendMessage = error?.error?.msg || error?.message;\r\n\r\n const errorInfo = this.errorMappings[status] || {\r\n title: 'Error desconocido',\r\n message: 'Ocurrió un error inesperado. Intente de nuevo más tarde.',\r\n type: 'error',\r\n persistent: true\r\n };\r\n\r\n return {\r\n type: errorInfo.type,\r\n title: errorInfo.title,\r\n message: backendMessage || errorInfo.message,\r\n persistent: errorInfo.persistent\r\n };\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { Check, ChevronDown, CircleCheck, CircleHelp, CircleX, Copy, Eye, ImageOff, Info, Loader2, Minimize2, Moon, RefreshCcw, RotateCcw, RotateCw, Scan, Search, SquareDashedMousePointer, Sun, TriangleAlert, Upload, X, ZoomIn, ZoomOut } from 'lucide-angular';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JIconsService {\r\n\r\n public icons = {\r\n info: Info,\r\n success: CircleCheck,\r\n error: CircleX,\r\n warning: TriangleAlert,\r\n question: CircleHelp,\r\n close: X,\r\n check: Check,\r\n zoomIn: ZoomIn,\r\n zoomOut: ZoomOut,\r\n rotateRight: RotateCw,\r\n rotateLeft: RotateCcw,\r\n reset: RefreshCcw,\r\n fullscreen: Scan,\r\n exitFullscreen: Minimize2,\r\n imageOff: ImageOff,\r\n upload: Upload,\r\n view: Eye,\r\n chevronDown: ChevronDown,\r\n squareDashedMousePointer: SquareDashedMousePointer,\r\n search: Search,\r\n copy: Copy,\r\n sun: Sun,\r\n moon: Moon,\r\n loading: Loader2,\r\n }\r\n\r\n constructor() { }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\nexport type ThemeMode = 'light' | 'dark';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class JThemeService {\r\n\r\n private readonly _theme = signal<ThemeMode>('light');\r\n readonly themeSignal = this._theme.asReadonly();\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n this.listenToExternalChanges();\r\n }\r\n\r\n private initializeTheme(): void {\r\n const savedTheme = localStorage.getItem('theme') as ThemeMode;\r\n\r\n if (savedTheme) {\r\n this._theme.set(savedTheme);\r\n } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\r\n this._theme.set('dark');\r\n }\r\n\r\n this.applyTheme();\r\n }\r\n\r\n private listenToExternalChanges(): void {\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'theme' && event.newValue) {\r\n const newTheme = event.newValue as ThemeMode;\r\n this._theme.set(newTheme);\r\n this.applyTheme();\r\n }\r\n });\r\n }\r\n\r\n private applyTheme(): void {\r\n const current = this._theme();\r\n document.documentElement.classList.toggle('dark', current === 'dark');\r\n }\r\n\r\n toggleTheme(): void {\r\n const newTheme = this._theme() === 'light' ? 'dark' : 'light';\r\n localStorage.setItem('theme', newTheme);\r\n this._theme.set(newTheme);\r\n this.applyTheme();\r\n }\r\n\r\n setTheme(theme: ThemeMode): void {\r\n localStorage.setItem('theme', theme);\r\n this._theme.set(theme);\r\n this.applyTheme();\r\n }\r\n\r\n getThemeMode(): ThemeMode {\r\n return this._theme();\r\n }\r\n}\r\n","import { Injectable, signal, computed, WritableSignal } from \"@angular/core\";\r\nimport { firstValueFrom, isObservable, Observable } from \"rxjs\";\r\nimport { AlertDialogProps, Dialog } from \"../../interfaces/alert/dialog-alert.interface\";\r\n\r\ntype ActionCallback = () => void | Promise<void> | Observable<any>;\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JAlertDialogService {\r\n private readonly isOpenSignal: WritableSignal<boolean> = signal(false);\r\n private readonly configSignal: WritableSignal<AlertDialogProps | null> = signal(null);\r\n\r\n // Estados de carga para los botones\r\n private readonly isLoadingConfirm: WritableSignal<boolean> = signal(false);\r\n private readonly isLoadingCancel: WritableSignal<boolean> = signal(false);\r\n private readonly isLoadingRetry: WritableSignal<boolean> = signal(false);\r\n\r\n\r\n // Callbacks\r\n private onConfirmCallback?: ActionCallback;\r\n private onCancelCallback?: ActionCallback;\r\n private onRetryCallback?: ActionCallback;\r\n\r\n isOpen = computed(() => this.isOpenSignal());\r\n config = computed(() => this.configSignal());\r\n\r\n isConfirmLoading = computed(() => this.isLoadingConfirm());\r\n isCancelLoading = computed(() => this.isLoadingCancel());\r\n isRetryLoading = computed(() => this.isLoadingRetry());\r\n\r\n // Add a dialogs computed property that returns an array with a single dialog when open\r\n dialogs = computed<Dialog[]>(() => {\r\n if (!this.isOpenSignal()) return [];\r\n\r\n return [{\r\n config: this.configSignal()!,\r\n isConfirmLoading: this.isLoadingConfirm(),\r\n isCancelLoading: this.isLoadingCancel(),\r\n isRetryLoading: this.isLoadingRetry()\r\n }];\r\n });\r\n\r\n getConfig() {\r\n return this.configSignal();\r\n }\r\n\r\n AlertDialog(config: AlertDialogProps) {\r\n this.onConfirmCallback = \"onConfirm\" in config ? config.onConfirm : undefined;\r\n this.onCancelCallback = \"onCancel\" in config ? config.onCancel : undefined;\r\n this.onRetryCallback = \"onRetry\" in config ? config.onRetry : undefined;\r\n\r\n // Reset loading states\r\n this.isLoadingConfirm.set(false);\r\n this.isLoadingCancel.set(false);\r\n this.isLoadingRetry.set(false);\r\n\r\n this.configSignal.set(config);\r\n this.isOpenSignal.set(true);\r\n }\r\n\r\n closeDialog() {\r\n this.isOpenSignal.set(false);\r\n this.configSignal.set(null);\r\n }\r\n\r\n async executeAction(action: \"confirm\" | \"cancel\" | \"retry\") {\r\n let callback: ActionCallback | undefined;\r\n let loadingSignal: WritableSignal<boolean>;\r\n \r\n switch (action) {\r\n case \"confirm\":\r\n callback = this.onConfirmCallback;\r\n loadingSignal = this.isLoadingConfirm;\r\n break;\r\n case \"cancel\":\r\n callback = this.onCancelCallback;\r\n loadingSignal = this.isLoadingCancel;\r\n break;\r\n case \"retry\":\r\n callback = this.onRetryCallback;\r\n loadingSignal = this.isLoadingRetry;\r\n break;\r\n }\r\n \r\n if (!callback) {\r\n this.closeDialog();\r\n return;\r\n }\r\n \r\n loadingSignal.set(true);\r\n \r\n try {\r\n const result = callback();\r\n \r\n // Soporte para Observable\r\n if (isObservable(result)) {\r\n await firstValueFrom(result);\r\n }\r\n \r\n // Soporte para Promise\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n \r\n // Si es void, no hacemos nada extra\r\n } catch (error) {\r\n console.error(`Error en la acción ${action}:`, error);\r\n } finally {\r\n loadingSignal.set(false);\r\n this.closeDialog();\r\n }\r\n }\r\n \r\n}","import { Injectable, signal, computed, WritableSignal } from \"@angular/core\";\r\nimport { AlertToastProps, Toast } from \"../../interfaces/alert/toast-alert.interface\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JAlertToastService {\r\n private readonly toastsSignal: WritableSignal<Toast[]> = signal([]);\r\n private readonly autoCloseTimers: Map<string, any> = new Map();\r\n\r\n // Default auto-close delay in milliseconds\r\n private readonly DEFAULT_AUTO_CLOSE_DELAY = 5000;\r\n\r\n // Default action button text\r\n private readonly DEFAULT_ACTION_BUTTON_TEXT = \"Action\";\r\n\r\n // For compatibility with existing code\r\n private readonly isOpenSignal: WritableSignal<boolean> = signal(false);\r\n private readonly configSignal: WritableSignal<AlertToastProps | null> = signal(null);\r\n private readonly isLoadingAction: WritableSignal<boolean> = signal(false);\r\n private readonly isLoadingCancel: WritableSignal<boolean> = signal(false);\r\n\r\n // Computed values for all toasts\r\n toasts = computed(() => this.toastsSignal());\r\n\r\n // For backward compatibility with existing code\r\n isOpen = computed(() => this.isOpenSignal());\r\n config = computed(() => this.configSignal());\r\n isActionLoading = computed(() => this.isLoadingAction());\r\n isCancelLoading = computed(() => this.isLoadingCancel());\r\n\r\n getConfig() {\r\n return this.configSignal();\r\n }\r\n\r\n AlertToast(config: AlertToastProps) {\r\n const toastId = crypto.randomUUID();\r\n\r\n // Store callbacks for this toast\r\n const onActionCallback = \"onAction\" in config ? config.onAction : undefined;\r\n const onCancelCallback = \"onCancel\" in config ? config.onCancel : undefined;\r\n\r\n // Get action button text or use default\r\n const actionNameButton = config.actionButtonText ?? this.DEFAULT_ACTION_BUTTON_TEXT;\r\n\r\n const toast: Toast = {\r\n id: toastId,\r\n config,\r\n isActionLoading: false,\r\n isCancelLoading: false,\r\n onActionCallback,\r\n onCancelCallback,\r\n actionNameButton, // Add the button text\r\n createdAt: Date.now()\r\n };\r\n\r\n // Add the toast to our list\r\n this.toastsSignal.update(toasts => [...toasts, toast]);\r\n\r\n // Check if this toast should auto-close\r\n // If autoClose is explicitly set to true OR \r\n // if it's a success toast and autoClose is not explicitly set to false\r\n const shouldAutoClose = config.autoClose === true ||\r\n (config.type === 'success' && config.autoClose !== false);\r\n\r\n if (shouldAutoClose) {\r\n // Use the provided delay or the default\r\n const delay = config.autoCloseDelay ?? this.DEFAULT_AUTO_CLOSE_DELAY;\r\n\r\n const timerId = setTimeout(() => {\r\n this.closeToastById(toastId);\r\n this.autoCloseTimers.delete(toastId);\r\n }, delay);\r\n\r\n this.autoCloseTimers.set(toastId, timerId);\r\n }\r\n\r\n return toastId;\r\n }\r\n\r\n closeToastById(toastId: string) {\r\n // Clear any auto-close timer\r\n if (this.autoCloseTimers.has(toastId)) {\r\n clearTimeout(this.autoCloseTimers.get(toastId));\r\n this.autoCloseTimers.delete(toastId);\r\n }\r\n\r\n this.toastsSignal.update(toasts =>\r\n toasts.filter(toast => toast.id !== toastId)\r\n );\r\n }\r\n\r\n closeAllToasts() {\r\n // Clear all timers\r\n this.autoCloseTimers.forEach(timerId => clearTimeout(timerId));\r\n this.autoCloseTimers.clear();\r\n\r\n this.toastsSignal.set([]);\r\n }\r\n\r\n async executeToastAction(toastId: string, action: \"action\" | \"cancel\") {\r\n const toast = this.toastsSignal().find(t => t.id === toastId);\r\n if (!toast) return;\r\n\r\n let callback: (() => Promise<void> | void) | undefined;\r\n let loadingProperty: 'isActionLoading' | 'isCancelLoading';\r\n\r\n switch (action) {\r\n case \"action\":\r\n callback = toast.onActionCallback;\r\n loadingProperty = 'isActionLoading';\r\n break;\r\n case \"cancel\":\r\n callback = toast.onCancelCallback;\r\n loadingProperty = 'isCancelLoading';\r\n break;\r\n }\r\n\r\n if (callback) {\r\n // Update loading state\r\n this.toastsSignal.update(toasts =>\r\n toasts.map(t => t.id === toastId ? { ...t, [loadingProperty]: true } : t)\r\n );\r\n\r\n try {\r\n await callback();\r\n } catch (error) {\r\n console.error(`Error en la acción ${action}:`, error);\r\n } finally {\r\n // Update loading state back to false (in case the toast hasn't been closed)\r\n this.toastsSignal.update(toasts => {\r\n const updatedToasts = toasts.map(t =>\r\n t.id === toastId ? { ...t, [loadingProperty]: false } : t\r\n );\r\n return updatedToasts;\r\n });\r\n\r\n this.closeToastById(toastId);\r\n }\r\n } else {\r\n this.closeToastById(toastId);\r\n }\r\n }\r\n\r\n // For backward compatibility with existing code\r\n closeToast() {\r\n this.closeAllToasts();\r\n this.isOpenSignal.set(false);\r\n this.configSignal.set(null);\r\n }\r\n\r\n // For backward compatibility with existing code\r\n async executeAction(action: \"action\" | \"cancel\") {\r\n let callback: (() => Promise<void> | void) | undefined;\r\n let loadingSignal: WritableSignal<boolean>;\r\n\r\n switch (action) {\r\n case \"action\":\r\n callback = \"onAction\" in (this.configSignal() || {})\r\n ? (this.configSignal() as any).onAction\r\n : undefined;\r\n loadingSignal = this.isLoadingAction;\r\n break;\r\n case \"cancel\":\r\n callback = \"onCancel\" in (this.configSignal() || {})\r\n ? (this.configSignal() as any).onCancel\r\n : undefined;\r\n loadingSignal = this.isLoadingCancel;\r\n break;\r\n }\r\n\r\n if (callback) {\r\n loadingSignal.set(true);\r\n try {\r\n await callback();\r\n } catch (error) {\r\n console.error(`Error en la acción ${action}:`, error);\r\n } finally {\r\n loadingSignal.set(false);\r\n this.closeToast();\r\n }\r\n } else {\r\n this.closeToast();\r\n }\r\n }\r\n}","\r\n// ======================================================\r\n// Table Column Interface\r\n// This interface defines the structure of a table column in a CRUD application.\r\n// ======================================================\r\n\r\ntype KeyPath<T> = T extends object\r\n ? {\r\n [K in keyof T]: K extends string | number\r\n ? `${K}` | `${K}.${KeyPath<T[K]>}`\r\n : never;\r\n }[keyof T]\r\n : never;\r\n\r\ntype ExtraColumnKeys = 'total' | 'expand' | 'extra';\r\ntype ExtendedKeyPath<T> = KeyPath<T> | ExtraColumnKeys;\r\n\r\nexport interface TableColumn<T> {\r\n key: ExtendedKeyPath<T>;\r\n label: string; \r\n visible?: boolean;\r\n sortable?: boolean;\r\n isSearchable?: boolean;\r\n isDisabled?: boolean;\r\n isDecorator?: boolean;\r\n colorDecorator?: (row: T) => 'primary' | 'success' | 'error' | 'warning' | 'info' | undefined;\r\n isDecoratorArray?: boolean;\r\n isCurrency?: boolean;\r\n isdollar?: boolean;\r\n isDate?: boolean;\r\n isDateText?: boolean;\r\n isDateTime?: boolean;\r\n isRelativeTime?: boolean;\r\n isDecoratorDateTime?: boolean;\r\n isDateTimeText?: boolean;\r\n isFirstWord?: boolean;\r\n isLink?: boolean;\r\n styles?: { [key: string]: string };\r\n valueGetter?: (row: T) => any;\r\n template?: (row: T) => string;\r\n expandTemplate?: (row: T) => string;\r\n extraSearchFields?: (keyof T | string)[];\r\n hidden?: boolean;\r\n}\r\n\r\nexport type SortDirection = 'none' | 'asc' | 'desc';\r\n\r\n\r\nexport type LoadingState = 'idle' | 'loading' | 'success' | 'error';\r\n\r\nexport interface LoadingStates {\r\n initialLoad: LoadingState;\r\n search: LoadingState;\r\n itemsPerPage: LoadingState;\r\n pagination: LoadingState;\r\n sort: LoadingState;\r\n checked: LoadingState;\r\n action: LoadingState;\r\n aditionalButtons: { [buttonType: string]: LoadingState };\r\n}\r\n\r\ntype DefaultTypeOptionTable = 'edit' | 'delete' | 'disabled' | 'custom' | 'editRow';\r\n\r\ntype CommonOptionTableProps = {\r\n type?: `${DefaultTypeOptionTable}` | (string & {});\r\n icon?: ((data?: any) => any) | any;\r\n clicked?: (data: any) => void;\r\n text?: ((data?: any) => string) | string;\r\n tooltip?: ((data?: any) => string) | string;\r\n disabled?: ((data?: any) => boolean) | boolean;\r\n isVisible?: ((data?: any) => boolean) | boolean;\r\n tooltipPosition?: 'top' | 'right' | 'bottom' | 'left';\r\n ngClass?: ((data?: any) => any) | any;\r\n classes?: string;\r\n searchListUpload?: {\r\n [endpoint: string]: {\r\n keyReturn: string,\r\n keyColumnSearch: string,\r\n keyAlternate?: string,\r\n optional?: boolean;\r\n defaultFilters?: { [key: string]: string | number | (string | number)[] | undefined };\r\n };\r\n };\r\n};\r\n\r\n\r\n// ===================================================\r\n\r\ntype OptionTableWithChangeIcon = CommonOptionTableProps & {\r\n isChangeIcon: boolean | (() => boolean);\r\n iconChange: any;\r\n};\r\n\r\ntype OptionTableWithoutChangeIcon = CommonOptionTableProps & {\r\n isChangeIcon?: undefined;\r\n iconChange?: any;\r\n};\r\n\r\nexport type OptionsTable = OptionTableWithChangeIcon | OptionTableWithoutChangeIcon;\r\n\r\n\r\n// ===================================================\r\n\r\nexport interface QueryParams {\r\n page?: number;\r\n limit?: number;\r\n\r\n sort?: { column?: string | null; direction?: string };\r\n\r\n filters?: any;\r\n defaultFilters?: { [key: string]: any };\r\n\r\n searchQuery?: string;\r\n columns?: string[]\r\n}\r\n\r\nexport interface EnableBoolean<T> {\r\n key: keyof T;\r\n value: any;\r\n values: any[];\r\n keyDate?: keyof T;\r\n isDateNullable?: boolean;\r\n}","/*\r\n * Public API Surface of tailjng\r\n */\r\n\r\n// ========================================\r\n// Config\r\n// ========================================\r\nexport * from './lib/config/tailjng-config.token';\r\n\r\n\r\n// ========================================\r\n// Services\r\n// ========================================\r\n\r\n// Crud\r\nexport * from './lib/services/crud/converter-crud.service';\r\nexport * from './lib/services/crud/generic-crud.service';\r\n\r\n// Http\r\nexport * from './lib/services/http/params-http.service';\r\nexport * from './lib/services/http/error-handler-http.service';\r\n\r\n// Transformer\r\nexport * from './lib/services/transformer/calendar.service';\r\n\r\n// Static\r\nexport * from './lib/services/static/icons.service';\r\nexport * from './lib/services/static/theme.service';\r\n\r\n// Alert\r\nexport * from './lib/services/alert/dialog-alert.service';\r\nexport * from './lib/services/alert/toast-alert.service';\r\n\r\n\r\n// Interface\r\nexport * from './lib/interfaces/crud/crud.interface';\r\nexport * from './lib/interfaces/theme/theme-generator.interface';\r\n\r\n// npm version patch\r\n// npm run build\r\n\r\n\r\n// cd dist/tailjng\r\n// npm publish --access public\r\n\r\n// npx tailjng add [component]","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.JCalendarService","i1","i2.JParamsHttpService","i3.JConverterCrudService"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface ColorPosition {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
export interface GeneratedColors {
|
|
6
|
+
background: string;
|
|
7
|
+
foreground: string;
|
|
8
|
+
card: string;
|
|
9
|
+
cardForeground: string;
|
|
10
|
+
popover: string;
|
|
11
|
+
popoverForeground: string;
|
|
12
|
+
primary: string;
|
|
13
|
+
primaryForeground: string;
|
|
14
|
+
secondary: string;
|
|
15
|
+
secondaryForeground: string;
|
|
16
|
+
muted: string;
|
|
17
|
+
mutedForeground: string;
|
|
18
|
+
accent: string;
|
|
19
|
+
accentForeground: string;
|
|
20
|
+
destructive: string;
|
|
21
|
+
destructiveForeground: string;
|
|
22
|
+
border: string;
|
|
23
|
+
input: string;
|
|
24
|
+
ring: string;
|
|
25
|
+
darkBackground: string;
|
|
26
|
+
darkForeground: string;
|
|
27
|
+
darkCard: string;
|
|
28
|
+
darkCardForeground: string;
|
|
29
|
+
darkPopover: string;
|
|
30
|
+
darkPopoverForeground: string;
|
|
31
|
+
darkPrimary: string;
|
|
32
|
+
darkPrimaryForeground: string;
|
|
33
|
+
darkSecondary: string;
|
|
34
|
+
darkSecondaryForeground: string;
|
|
35
|
+
darkMuted: string;
|
|
36
|
+
darkMutedForeground: string;
|
|
37
|
+
darkAccent: string;
|
|
38
|
+
darkAccentForeground: string;
|
|
39
|
+
darkDestructive: string;
|
|
40
|
+
darkDestructiveForeground: string;
|
|
41
|
+
darkBorder: string;
|
|
42
|
+
darkInput: string;
|
|
43
|
+
darkRing: string;
|
|
44
|
+
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -9,3 +9,4 @@ export * from './lib/services/static/theme.service';
|
|
|
9
9
|
export * from './lib/services/alert/dialog-alert.service';
|
|
10
10
|
export * from './lib/services/alert/toast-alert.service';
|
|
11
11
|
export * from './lib/interfaces/crud/crud.interface';
|
|
12
|
+
export * from './lib/interfaces/theme/theme-generator.interface';
|
|
@@ -1,29 +1,25 @@
|
|
|
1
1
|
@for (dialog of dialogs(); track dialog.config.title) {
|
|
2
2
|
<div class="fixed inset-0 z-1001 flex items-center justify-center bg-black/50">
|
|
3
|
+
|
|
3
4
|
<div @modalTransition
|
|
4
5
|
class="relative w-100 border border-border p-4 rounded-lg shadow-5xl overflow-hidden"
|
|
5
|
-
[ngClass]="getDialogClass(dialog.config.type)"
|
|
6
|
+
[ngClass]="getDialogClass(dialog.config.type)"
|
|
7
|
+
>
|
|
6
8
|
|
|
7
9
|
<!-- Icon big in the bottom left corner -->
|
|
8
|
-
<div
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
[size]="130"
|
|
13
|
-
[ngClass]="getIconClass(dialog.config.type)"
|
|
14
|
-
>
|
|
15
|
-
</lucide-icon>
|
|
10
|
+
<div
|
|
11
|
+
[ngClass]="{ 'animate-spin': dialog.config.type === 'loading'}"
|
|
12
|
+
class="absolute -bottom-5 opacity-25 dark:opacity-25 -left-5 text-black dark:text-white pointer-events-none"
|
|
13
|
+
>
|
|
14
|
+
<lucide-icon [name]="getIcon(dialog.config.type)" [size]="130" [ngClass]="getIconClass(dialog.config.type)"></lucide-icon>
|
|
16
15
|
</div>
|
|
17
16
|
|
|
18
17
|
<!-- Icon small in the top right corner -->
|
|
19
|
-
<div
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
[ngClass]="getIconClass(dialog.config.type)"
|
|
25
|
-
>
|
|
26
|
-
</lucide-icon>
|
|
18
|
+
<div
|
|
19
|
+
[ngClass]="{ 'animate-spin': dialog.config.type === 'loading'}"
|
|
20
|
+
class="absolute top-5 opacity-25 dark:opacity-25 right-5 text-black dark:text-white pointer-events-none"
|
|
21
|
+
>
|
|
22
|
+
<lucide-icon [name]="getIcon(dialog.config.type)" [size]="30" [ngClass]="getIconClass(dialog.config.type)"></lucide-icon>
|
|
27
23
|
</div>
|
|
28
24
|
|
|
29
25
|
<h3 class="text-lg font-semibold text-black dark:text-white pb-2">{{ dialog.config.title }}</h3>
|
|
@@ -68,5 +64,6 @@
|
|
|
68
64
|
}
|
|
69
65
|
</div>
|
|
70
66
|
</div>
|
|
67
|
+
|
|
71
68
|
</div>
|
|
72
69
|
}
|
|
@@ -24,43 +24,80 @@ import { JColorsService } from "../../color/colors.service";
|
|
|
24
24
|
],
|
|
25
25
|
})
|
|
26
26
|
export class JAlertDialogComponent {
|
|
27
|
+
|
|
27
28
|
@Input() monocromatic: boolean = false;
|
|
28
29
|
private readonly alertDialogService = inject(JAlertDialogService);
|
|
29
30
|
|
|
31
|
+
// Single computed property for dialogs
|
|
32
|
+
dialogs = computed(() => this.alertDialogService.dialogs());
|
|
33
|
+
|
|
30
34
|
constructor(
|
|
31
35
|
private readonly colorsService: JColorsService,
|
|
32
36
|
private readonly iconsService: JIconsService
|
|
33
37
|
) { }
|
|
34
38
|
|
|
35
|
-
// Single computed property for dialogs
|
|
36
|
-
dialogs = computed(() => this.alertDialogService.dialogs());
|
|
37
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Get the icon for the specified type.
|
|
42
|
+
* @param type The type of the icon.
|
|
43
|
+
* @returns The icon for the specified type.
|
|
44
|
+
*/
|
|
38
45
|
getIcon(type: string) {
|
|
39
46
|
return this.iconsService.icons[type as keyof typeof this.iconsService.icons] || this.iconsService.icons.info;
|
|
40
47
|
}
|
|
41
48
|
|
|
42
|
-
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Handle the action based on the button clicked.
|
|
53
|
+
* @param action The action to execute.
|
|
54
|
+
*/
|
|
43
55
|
handleAction(action: "confirm" | "cancel" | "retry") {
|
|
44
56
|
this.alertDialogService.executeAction(action);
|
|
45
57
|
}
|
|
46
58
|
|
|
47
|
-
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Get the class for the toast
|
|
63
|
+
* @param type The type of the toast.
|
|
64
|
+
* @returns The class for the toast.
|
|
65
|
+
*/
|
|
48
66
|
getDialogClass(type: string) {
|
|
49
67
|
return this.colorsService.getAlertClass(type, this.monocromatic);
|
|
50
68
|
}
|
|
51
69
|
|
|
52
|
-
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Get the class for the icon
|
|
74
|
+
* @param type The type of the icon.
|
|
75
|
+
* @returns The class for the icon.
|
|
76
|
+
*/
|
|
53
77
|
getIconClass(type: string) {
|
|
54
78
|
return this.colorsService.getIconClass(type, this.monocromatic);
|
|
55
79
|
}
|
|
56
80
|
|
|
57
|
-
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Get the class for the button
|
|
85
|
+
* @param type The type of the button.
|
|
86
|
+
* @returns The class for the button.
|
|
87
|
+
*/
|
|
58
88
|
getButtonClass(type: string): { [key: string]: boolean } {
|
|
59
89
|
return this.colorsService.getButtonClass(type, this.monocromatic);
|
|
60
90
|
}
|
|
61
91
|
|
|
62
|
-
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Get the class for the secondary button
|
|
96
|
+
* @param type The type of the button.
|
|
97
|
+
* @returns The class for the secondary button.
|
|
98
|
+
*/
|
|
63
99
|
getButtonSecondaryClass(type: string): { [key: string]: boolean } {
|
|
64
100
|
return this.colorsService.getButtonSecondaryClass(type, this.monocromatic);
|
|
65
101
|
}
|
|
102
|
+
|
|
66
103
|
}
|