@arsedizioni/ars-utils 21.0.1 → 21.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-core.mjs","sources":["../../../projects/ars-utils/core/directives/autoFocusDirective.ts","../../../projects/ars-utils/core/definitions.ts","../../../projects/ars-utils/core/system.ts","../../../projects/ars-utils/core/directives/changeDateIntervalDirective.ts","../../../projects/ars-utils/core/directives/copyClipboardDirective.ts","../../../projects/ars-utils/core/directives/validators.ts","../../../projects/ars-utils/core/pipes/format.pipe.ts","../../../projects/ars-utils/core/pipes/replace.pipe.ts","../../../projects/ars-utils/core/pipes/safe-html.pipe.ts","../../../projects/ars-utils/core/pipes/safe-url.pipe.ts","../../../projects/ars-utils/core/pipes/search-callback.pipe.ts","../../../projects/ars-utils/core/pipes/search-filter.pipe.ts","../../../projects/ars-utils/core/pipes/format-html.pipe.ts","../../../projects/ars-utils/core/breakpoints.ts","../../../projects/ars-utils/core/messages.ts","../../../projects/ars-utils/core/selectable.ts","../../../projects/ars-utils/core/services/broadcastChannelManager.ts","../../../projects/ars-utils/core/services/broadcast.service.ts","../../../projects/ars-utils/core/services/environment.service.ts","../../../projects/ars-utils/core/services/screen.service.ts","../../../projects/ars-utils/core/services/theme.service.ts","../../../projects/ars-utils/core/core.module.ts","../../../projects/ars-utils/core/dateFnsAdapter.module.ts","../../../projects/ars-utils/core/directives/removeFocusDirective.ts","../../../projects/ars-utils/core/pipes/format-markdown.pipe.ts","../../../projects/ars-utils/core/public_api.ts","../../../projects/ars-utils/core/arsedizioni-ars-utils-core.ts"],"sourcesContent":["import { AfterContentInit, Directive, ElementRef, inject } from '@angular/core';\r\n\r\n@Directive({\r\n selector: \"[autoFocus]\",\r\n standalone: true\r\n })\r\nexport class AutoFocusDirective implements AfterContentInit {\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n public ngAfterContentInit() {\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.focus();\r\n }, 500);\r\n }\r\n }","import { INode } from './system';\r\n\r\nexport interface DoneResult<T> {\r\n isNew?: boolean;\r\n data?: T;\r\n}\r\n\r\nexport interface ApiResponse {\r\n success: boolean;\r\n message: string;\r\n}\r\n\r\nexport interface ApiResult<T> extends ApiResponse {\r\n value: T;\r\n}\r\n\r\nexport interface Folder extends INode {\r\n teamId?: string;\r\n parentId?: string;\r\n position?: number;\r\n isPrivate?: boolean;\r\n itemsCount?: number;\r\n subItemsCount?: number;\r\n\r\n}\r\n\r\nexport interface FolderTree extends Folder {\r\n children?: Folder[];\r\n path?: string;\r\n}\r\n\r\nexport interface File<T> {\r\n ownerId?: T;\r\n id?: number;\r\n fileName: string;\r\n fileData: any;\r\n}\r\n\r\nexport interface Validated {\r\n isValid(): boolean;\r\n}\r\n\r\nexport class FileInfo implements Validated {\r\n file: any;\r\n valid: boolean;\r\n\r\n isValid(): boolean {\r\n return this.valid;\r\n }\r\n}\r\n\r\nexport interface ErrorInfo {\r\n invalidateSession?: boolean;\r\n title?: string;\r\n message?: string;\r\n errorStatus?: number;\r\n service?: string;\r\n}\r\n\r\nexport interface NameValueItem<T> {\r\n name: string;\r\n value: T;\r\n shortName?: string;\r\n parentName?: string;\r\n parentValue?: T;\r\n header?: string;\r\n bag?: any;\r\n bagInfo?: string;\r\n disabled?: boolean;\r\n selected?: boolean;\r\n}\r\n\r\nexport interface Checkable {\r\n checked?: boolean;\r\n bag: any;\r\n getId(): any;\r\n}\r\n\r\n\r\nexport class ValueModel<T> {\r\n value: T;\r\n}\r\nexport class IDModel<T = number> {\r\n id: T;\r\n}\r\nexport class GroupModel<T = number> {\r\n ids: T[];\r\n}\r\n\r\nexport class DeleteModel<T = number> extends GroupModel<T> {\r\n mode?: number;\r\n parentId?: T;\r\n}\r\n\r\nexport interface DeleteResultModel<T> {\r\n items?: T[],\r\n deleted: number;\r\n total: number;\r\n log?: string;\r\n}\r\n\r\nexport class RelationModel<T = number> {\r\n id: T;\r\n parentId: T;\r\n}\r\n\r\nexport class UpdateRelationsModel<T = number> {\r\n id: T;\r\n relatedIds: T[];\r\n}\r\n\r\nexport class QueryModel {\r\n any?: string;\r\n sortBy?: string;\r\n sortDescending?: boolean;\r\n first?: number;\r\n count?: number;\r\n}\r\n\r\nexport interface QueryResultModel<T> {\r\n interval?: string;\r\n items: T[];\r\n total: number;\r\n}\r\n\r\nexport interface UpdateModel<T = number> {\r\n parentId?: T;\r\n ids: T[];\r\n}\r\n\r\nexport interface UpdateResultModel<T> {\r\n items?: T[];\r\n updated: number;\r\n total: number;\r\n log?: string;\r\n}\r\n\r\nexport interface AddModel<T> extends UpdateModel<T> {\r\n\r\n}\r\n\r\nexport interface AddResultModel<T> {\r\n items?: T[];\r\n added: number;\r\n total: number;\r\n log?: string;\r\n}\r\n\r\nexport class ImportModel {\r\n origin: string;\r\n dataFile: FileInfo;\r\n jumpFirstLine?: boolean;\r\n map?: any;\r\n}\r\n\r\nexport interface EnableDisableModel {\r\n value: boolean;\r\n}\r\n\r\nexport interface SendToModel {\r\n sendToRecipients?: string;\r\n sendToSubject?: string;\r\n sendToText?: string;\r\n}\r\n\r\nexport interface SearchBag {\r\n name: string;\r\n}\r\n\r\nexport interface Searchable {\r\n searchBag: SearchBag;\r\n}\r\n\r\nexport interface SearchFilterMetadata {\r\n total: number; // totale elementi\r\n count: number; // conteggio filtrati\r\n}\r\n\r\nexport class DateInterval {\r\n from?: Date;\r\n to?: Date;\r\n get fromAsDate(): Date | undefined {\r\n if (this.from) {\r\n if (!(this.from instanceof Date)) {\r\n this.from = new Date(this.from);\r\n }\r\n if (this.from) {\r\n return new Date(\r\n this.from.getFullYear(),\r\n this.from.getMonth(),\r\n this.from.getDate(),\r\n 2,\r\n 0,\r\n 0\r\n )\r\n }\r\n }\r\n return undefined;\r\n }\r\n get toAsDate(): Date {\r\n if (this.to) {\r\n if (!(this.to instanceof Date)) {\r\n this.to = new Date(this.to);\r\n }\r\n if (this.to) {\r\n return new Date(\r\n this.to.getFullYear(),\r\n this.to.getMonth(),\r\n this.to.getDate(),\r\n 2,\r\n 0,\r\n 0\r\n )\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n constructor(from?: Date, to?: Date) {\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n /**\r\n * Clear interval\r\n */\r\n clear() {\r\n this.from = undefined;\r\n this.to = undefined;\r\n }\r\n}\r\n\r\nexport interface LoginResult<T> extends ApiResult<boolean> {\r\n context: T;\r\n oauth?: number;\r\n requiresMfa?: boolean;\r\n}\r\n","import { HttpParams } from \"@angular/common/http\";\r\nimport { DateInterval } from './definitions';\r\nimport { format, parse, parseISO } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { TZDate } from '@date-fns/tz';\r\n\r\nexport interface INode {\r\n id: string;\r\n name?: string;\r\n count?: number;\r\n children?: INode[];\r\n subFolders?: INode[];\r\n parent?: INode;\r\n bag?: any\r\n}\r\n\r\n\r\nexport enum DateFormat {\r\n Short = 1, // dd/mm/yyyy\r\n Long = 2, // d mmmm yyyy\r\n LongWithShortMonth = 3, // d mmm yyyy\r\n LongWithWeekDay = 4, // wwww, d mmmm yyyy\r\n LongWithShortWeekDay = 5, // www, d mmmm yyyy\r\n MonthAndYear = 6, // mmm yyyy\r\n LongMonthAndYear = 7, // mmmm yyyy\r\n WeekDay = 8, // www d\r\n LongWeekDay = 9, // wwww d\r\n DayAndMonth = 10, // d mmmm\r\n ShortUS = 11, // mm/dd/yyyy\r\n ShortISO8601 = 12 // yyyy-mm-dd\r\n}\r\n\r\nexport interface PasswordStrength {\r\n score: number;\r\n label?: string;\r\n color?: string;\r\n suggestions?: string[];\r\n isValid: boolean;\r\n}\r\n\r\ninterface MarkdownListState {\r\n type: 'ul' | 'ol' | null;\r\n items: string[];\r\n}\r\n\r\nexport class SystemUtils {\r\n /**\r\n * Array find by key\r\n * @param array : the array to scan\r\n * @param key : key name\r\n * @param value : the value to search for\r\n * @returns : the property value or null\r\n */\r\n static arrayFindByKey<T>(array: T[] | undefined, key: string, value: any): T | undefined {\r\n if (!array) return undefined;\r\n for (const item of array) {\r\n if ((item as any)[key] === value) {\r\n return item;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Array find index by key\r\n * @param array : the array to scan\r\n * @param key : the key name\r\n * @param value : the value to search for\r\n * @returns : the array index or -1 if not found\r\n */\r\n static arrayFindIndexByKey<T>(array: T[] | undefined, key: string, value: any): number {\r\n if (!array) return -1;\r\n for (let i = 0; i < array.length; i++) {\r\n if ((array[i] as any)[key] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Get a value from and array made of name|value items\r\n * @param array : the array to scan\r\n * @param value : the value to search for\r\n * @returns : the property value or null if not found\r\n */\r\n static arrayGetValue<T>(array: T[] | undefined, value: any): any {\r\n if (!array) return undefined;\r\n for (var i = 0; i < array.length; i++) {\r\n const item = (array[i] as any);\r\n if (item.value === value) {\r\n return item.name || item.id;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Convert items to nodes into a tree structure\r\n * @param items : list of nodes\r\n * @param parent : parent node\r\n * @returns : an array of INode objects\r\n */\r\n static arrayToNodes(items: INode[], parent?: INode): INode[] {\r\n const nodes: INode[] = [];\r\n items.forEach(n => {\r\n const node: INode = {\r\n id: n.id.toString(),\r\n name: n.name,\r\n count: n.count ? n.count : 0,\r\n children: undefined,\r\n parent,\r\n bag: n,\r\n };\r\n nodes.push(node);\r\n node.children =\r\n n.children && n.children.length > 0\r\n ? this.arrayToNodes(n.children, node)\r\n : [];\r\n });\r\n return nodes;\r\n }\r\n\r\n /**\r\n * Used to copare items during an array of objects sorting\r\n * @param key : the property name to sort for\r\n * @param order : the order 'asc' or 'desc'\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static arraySortCompare(key: string, order: string = \"asc\") {\r\n const result = function innerSort(a: any, b: any) {\r\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\r\n // property doesn't exist on either object\r\n return 0;\r\n }\r\n const varA = typeof a[key] === \"string\" ? a[key].toUpperCase() : a[key];\r\n const varB = typeof b[key] === \"string\" ? b[key].toUpperCase() : b[key];\r\n let comparison = 0;\r\n if (varA > varB) comparison = 1;\r\n else if (varA < varB) comparison = -1;\r\n return order === \"desc\" ? comparison * -1 : comparison;\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * Format weight\r\n * @param gr : grams\r\n * @returns : the formatted string\r\n */\r\n static formatWeight(gr: number): string {\r\n if (gr > 1000000) return (gr / 1000000).toFixed(2) + \" t\";\r\n else if (gr > 100000) return (gr / 100000).toFixed(2) + \" q\";\r\n else if (gr > 1000) return (gr / 1000).toFixed(2) + \" kg\";\r\n else return gr + \" gr\";\r\n }\r\n\r\n /**\r\n * Format file size\r\n * @param bytes : number of bytes\r\n * @returns : the formatted string\r\n */\r\n static formatFileSize(bytes: number): string {\r\n if (bytes > 1024000) return (bytes / 1024000).toFixed(1) + \" MB\";\r\n if (bytes > 1024) return (bytes / 1024).toFixed(1) + \" Kb\";\r\n return bytes + \" byte\";\r\n }\r\n\r\n /**\r\n * Compare two string\r\n * @param a : string a\r\n * @param b : string b\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static compareString(a?: string, b?: string): number {\r\n if ((a ?? \"\").toLowerCase() > (b ?? \"\").toLowerCase()) return 1;\r\n if ((a ?? \"\").toLowerCase() < (b ?? \"\").toLowerCase()) return -1;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Capitalize a string\r\n * @param s : the string to capitalize\r\n * @returns : the capitalized string \r\n */\r\n static capitalize(s?: string): string | undefined {\r\n if (!s) return undefined;\r\n let b = \"\";\r\n let cap = true;\r\n for (const char of s) {\r\n if (char === \" \") {\r\n b += char;\r\n cap = true;\r\n } else if (cap) {\r\n b += char.toUpperCase();\r\n cap = false;\r\n } else {\r\n b += char.toLowerCase();\r\n }\r\n }\r\n return b;\r\n }\r\n\r\n /**\r\n * Truncate a string\r\n * @param s : the string to truncate\r\n * @param max : the max number of chars\r\n * @returns : the truncated string\r\n */\r\n static truncate(s?: string, max: number = 500): string | undefined {\r\n if (!s) return undefined;\r\n if (s.length < max) return s;\r\n let i = max - 1;\r\n while (i > 0) {\r\n if (s[i] === ' ') return s.slice(0, i);\r\n i--;\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Join a list of strings\r\n * @param items : the list of strings\r\n * @param sep : the separator string\r\n * @param max : the maximum resulting string\r\n * @returns : the joined string\r\n */\r\n static join(items?: string[], sep: string = \" \", max: number = 350): string | undefined {\r\n if (!items || items.length === 0) return undefined;\r\n if (items.length > 1) {\r\n let l = 0;\r\n let s = \"\"\r\n while (s.length < max && items.length > l) {\r\n if (l > 0) {\r\n s += sep;\r\n }\r\n s += items[l++];\r\n }\r\n if (items.length > l) {\r\n s += \"...\";\r\n }\r\n return s;\r\n }\r\n return items[0];\r\n }\r\n\r\n /**\r\n * Replace stuff in text html\r\n * @param s : the string to process\r\n * @returns : the replaced string \r\n */\r\n static replaceAsHtml(s?: string): string {\r\n if (!s) return undefined;\r\n const regex = /https?:\\/\\/.*[^\\s]/ig\r\n const m = regex.exec(s);\r\n if (m && m.length > 0) {\r\n let v = undefined;\r\n for (let i = 0; i < m.length; i++) {\r\n v = m[i];\r\n s = s.replace(v, '<a href=\"' + v + '\" target=\"_blank\">' + v + '</a>');\r\n }\r\n }\r\n return s;\r\n }\r\n\r\n\r\n\r\n\r\n /**\r\n * Convert markdown to html\r\n * @param markdown : the markdown data\r\n * @param escapeEntities : true to escape entities. Default is false\r\n * @returns the html\r\n */\r\n static markdownToHtml(markdown: string, escapeEntities: boolean = false): string {\r\n let html = markdown;\r\n\r\n //1. Escape HTML entities \r\n if (escapeEntities == true) {\r\n html = html.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n }\r\n\r\n // 2. Code blocks \r\n html = html.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (_match, lang, code) => {\r\n const langClass = lang ? ` class=\"language-${lang}\"` : '';\r\n return `<pre><code${langClass}>${code.trim()}</code></pre>`;\r\n });\r\n\r\n // 3. Inline code\r\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\r\n\r\n // 4. Headers \r\n html = html.replace(/^##### (.*$)/gim, '<h5>$1</h5>');\r\n html = html.replace(/^#### (.*$)/gim, '<h4>$1</h4>');\r\n html = html.replace(/^### (.*$)/gim, '<h3>$1</h3>');\r\n html = html.replace(/^## (.*$)/gim, '<h2>$1</h2>');\r\n html = html.replace(/^# (.*$)/gim, '<h1>$1</h1>');\r\n\r\n // 5. Horizontal rules\r\n html = html.replace(/^---+$/gim, '<hr>');\r\n html = html.replace(/^\\*\\*\\*+$/gim, '<hr>');\r\n\r\n // 6. Links \r\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\">$1</a>');\r\n\r\n // 7. Images\r\n html = html.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, '<img src=\"$2\" alt=\"$1\">');\r\n\r\n // 8. Bold e Italic \r\n html = html.replace(/\\*\\*\\*([^*]+)\\*\\*\\*/gim, '<strong><em>$1</em></strong>');\r\n html = html.replace(/___([^_]+)___/gim, '<strong><em>$1</em></strong>');\r\n html = html.replace(/\\*\\*([^*]+)\\*\\*/gim, '<strong>$1</strong>');\r\n html = html.replace(/__([^_]+)__/gim, '<strong>$1</strong>');\r\n html = html.replace(/\\*([^*]+)\\*/gim, '<em>$1</em>');\r\n html = html.replace(/_([^_]+)_/gim, '<em>$1</em>');\r\n\r\n // 9. Strikethrough\r\n html = html.replace(/~~([^~]+)~~/gim, '<del>$1</del>');\r\n\r\n // 10. Blockquotes\r\n html = html.replace(/^> (.*$)/gim, '<blockquote>$1</blockquote>');\r\n\r\n // 11. Tables\r\n html = this.markdownConvertTables(html);\r\n\r\n // 12. Lists \r\n html = this.markdownConvertLists(html);\r\n\r\n // 13. Line breaks\r\n html = html.replace(/ $/gm, '<br>');\r\n\r\n // 14. Paragrafi (ultimo step per non interferire con altri elementi)\r\n html = this.markdownConvertParagraphs(html);\r\n\r\n // 15. Clean up extra newlines\r\n html = html.replace(/\\`\\`\\`markdown/g, '');\r\n html = html.replace(/\\*\\*/g, '');\r\n html = html.replace(/\\n{3,}/g, '\\n\\n');\r\n \r\n\r\n return html.trim();\r\n }\r\n\r\n /**\r\n * Convert markdown table to html\r\n * @param markdown: the markdown string\r\n * @returns : the html\r\n */\r\n private static markdownConvertTables(markdown: string): string {\r\n const lines = markdown.split('\\n');\r\n const result: string[] = [];\r\n let inTable = false;\r\n let tableRows: string[] = [];\r\n let headerProcessed = false;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i].trim();\r\n if (line.includes('|') && line.length > 1) {\r\n const nextLine = i + 1 < lines.length ? lines[i + 1].trim() : '';\r\n const isHeaderSeparator = /^\\|?[\\s\\-:|]+\\|?$/.test(nextLine);\r\n if (!inTable) {\r\n inTable = true;\r\n headerProcessed = false;\r\n tableRows = [];\r\n }\r\n if (isHeaderSeparator && !headerProcessed) {\r\n tableRows.push(this.markdownConvertTableRow(line, true));\r\n headerProcessed = true;\r\n i++;\r\n } else if (!isHeaderSeparator) {\r\n tableRows.push(this.markdownConvertTableRow(line, false));\r\n }\r\n } else {\r\n if (inTable && tableRows.length > 0) {\r\n result.push('<table>');\r\n result.push(...tableRows);\r\n result.push('</table>');\r\n tableRows = [];\r\n inTable = false;\r\n }\r\n result.push(line);\r\n }\r\n }\r\n if (inTable && tableRows.length > 0) {\r\n result.push('<table>');\r\n result.push(...tableRows);\r\n result.push('</table>');\r\n }\r\n return result.join('\\n');\r\n }\r\n\r\n /**\r\n * Convert a markdown table row to html\r\n * @param row : the markdown row\r\n * @param isHeader : true if is header\r\n * @returns the html\r\n */\r\n private static markdownConvertTableRow(row: string, isHeader: boolean): string {\r\n const cells = row.split('|').map(cell => cell.trim()).filter(cell => cell !== '');\r\n const tag = isHeader ? 'th' : 'td';\r\n const cellsHtml = cells.map(cell => ` <${tag}>${cell}</${tag}>`).join('\\n');\r\n return ` <tr>\\n${cellsHtml}\\n </tr>`;\r\n }\r\n\r\n\r\n /**\r\n * Convert a markdown list to html\r\n * @param markdown : the markdown list\r\n * @returns the html\r\n */\r\n private static markdownConvertLists(markdown: string): string {\r\n markdown = markdown.replace(/^\\* (.*$)/gim, '<li data-type=\"ul\">$1</li>');\r\n markdown = markdown.replace(/^- (.*$)/gim, '<li data-type=\"ul\">$1</li>');\r\n markdown = markdown.replace(/^\\+ (.*$)/gim, '<li data-type=\"ul\">$1</li>');\r\n markdown = markdown.replace(/^\\d+\\. (.*$)/gim, '<li data-type=\"ol\">$1</li>');\r\n const lines = markdown.split('\\n');\r\n const result: string[] = [];\r\n let currentList: MarkdownListState = { type: null, items: [] };\r\n for (const line of lines) {\r\n const ulMatch = line.match(/^<li data-type=\"ul\">(.*)<\\/li>$/);\r\n const olMatch = line.match(/^<li data-type=\"ol\">(.*)<\\/li>$/);\r\n if (ulMatch) {\r\n if (currentList.type !== 'ul') {\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n }\r\n currentList = { type: 'ul', items: [ulMatch[1]] };\r\n } else {\r\n currentList.items.push(ulMatch[1]);\r\n }\r\n } else if (olMatch) {\r\n if (currentList.type !== 'ol') {\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n }\r\n currentList = { type: 'ol', items: [olMatch[1]] };\r\n } else {\r\n currentList.items.push(olMatch[1]);\r\n }\r\n } else {\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n currentList = { type: null, items: [] };\r\n }\r\n result.push(line);\r\n }\r\n }\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n }\r\n return result.join('\\n');\r\n }\r\n\r\n /**\r\n * Wrap a list\r\n * @param type: the list type \r\n * @param items : the item list\r\n * @returns the html\r\n */\r\n private static markdownWrapList(type: 'ul' | 'ol', items: string[]): string {\r\n const listItems = items.map(item => ` <li>${item}</li>`).join('\\n');\r\n return `<${type}>\\n${listItems}\\n</${type}>`;\r\n }\r\n\r\n /**\r\n * Convert markdown paragraphs to html\r\n * @param markdown : the markdown paragraphs\r\n * @returns the html\r\n */\r\n private static markdownConvertParagraphs(markdown: string): string {\r\n const lines = markdown.split('\\n');\r\n const result: string[] = [];\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n if (!trimmed) {\r\n result.push('');\r\n continue;\r\n }\r\n if (trimmed.startsWith('<') && trimmed.endsWith('>')) {\r\n result.push(line);\r\n continue;\r\n }\r\n if (trimmed.startsWith('<') || trimmed.endsWith('>')) {\r\n result.push(line);\r\n continue;\r\n }\r\n result.push(`<p>${trimmed}</p>`);\r\n }\r\n return result.join('\\n');\r\n }\r\n\r\n\r\n\r\n /**\r\n * Compare two names\r\n * @param a : name a\r\n * @param b : name b\r\n * @returns : true if a equals b\r\n */\r\n static compareNames(a?: string, b?: string): boolean {\r\n if (a) a = a.trim();\r\n if (b) b = b.trim();\r\n if (a && b && a.length !== b.length) return false;\r\n if (this.compareString(a, b) === 0) return true;\r\n const p1 = a.split(\" \");\r\n const p2 = b.split(\" \");\r\n if (p1.length !== p2.length) return false;\r\n let matches = p1.length;\r\n for (const s1 of p1) {\r\n for (const s2 of p2) {\r\n if (this.compareString(s1, s2) === 0) {\r\n matches--;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return matches === 0;\r\n }\r\n\r\n /**\r\n * Cipher a text\r\n * @param text : the text\r\n * @param key : the key\r\n * @param reverse : true to decode, false to encode\r\n * @returns :the ciphered text\r\n */\r\n static cipher(text: string, key: string, reverse: boolean = false): string | undefined {\r\n // Surrogate pair limit\r\n var bound = 0x10000;\r\n\r\n // Create string from character codes\r\n return String.fromCharCode.apply(\r\n null,\r\n // Turn string to character codes\r\n text.split(\"\").map(function (v: any, i: number) {\r\n // Get rotation from key\r\n var rotation = key.charCodeAt(i % key.length);\r\n\r\n // Are we decrypting?\r\n if (reverse) rotation = -rotation;\r\n\r\n // Return current character code + rotation\r\n return (v.charCodeAt() + rotation + bound) % bound;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Clone an object using JSON\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static clone(obj: any): any | undefined {\r\n if (!obj) return undefined;\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n /**\r\n * Clone an object using deep cloning\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static deepClone<T>(obj: any, dest?: T): T {\r\n const cloneObj = dest ? dest : (obj.constructor() as any);\r\n const attributes = Object.keys(obj);\r\n for (const attribute of attributes) {\r\n const property = obj[attribute];\r\n if (typeof property === \"object\" && property != null) {\r\n cloneObj[attribute] = this.deepClone(property);\r\n } else {\r\n cloneObj[attribute] = property;\r\n }\r\n }\r\n return cloneObj;\r\n }\r\n\r\n\r\n /**\r\n * Check if a string is a valid UUID\r\n * @param value : the value to parse\r\n * @returns : true if is a valid UUID\r\n */\r\n static parseUUID(value?: string): boolean {\r\n const regex = /^({|()?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(}|))?$/;\r\n return value?.length > 0 && regex.test(value);\r\n }\r\n\r\n /**\r\n * Parse and ensure that UUID is not empty\r\n * @param value : the value to parse\r\n * @returns : true if valid and not empty\r\n */\r\n static parseUUIDNotEmpty(value?: string): boolean {\r\n const regex = /^({|()?0{8}-(0{4}-){3}0{12}(}|))?$/;\r\n return this.parseUUID(value) && !regex.test(value);\r\n }\r\n\r\n /**\r\n * Return an empty UUID\r\n * @returns : the empty UUID\r\n */\r\n static emptyUUID(): string { return \"00000000-0000-0000-0000-000000000000\" };\r\n\r\n /**\r\n * Create a new UUID\r\n * @returns : the string UUID\r\n */\r\n static generateUUID(): string {\r\n const regex = /[xy]/g;\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(regex, function (c) {\r\n var r = (Math.random() * 16) | 0,\r\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid email or null\r\n * @param value : email\r\n * @returns : true if the email is valid or empty\r\n */\r\n static parseEmail(value?: string): boolean {\r\n if (!value) return true;\r\n const regex = /(?:[a-z0-9+!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/gi\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid url or null\r\n * @param value : the url to parse\r\n * @returns : true if the url is valid or empty\r\n */\r\n static parseUrl(value?: string): boolean {\r\n if (!value) return true;\r\n const regex = new RegExp(\r\n \"(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?\"\r\n );\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Get date parts from a string value\r\n * @param value : the string to parse\r\n * @returns : an array of numbers with year, month, day\r\n */\r\n static getDateParts(value?: string): number[] | undefined {\r\n if (!value) return undefined;\r\n let parts: number[] = [];\r\n if (value.indexOf(\"-\") !== -1) {\r\n const p = value.split(\"-\");\r\n if (p.length !== 3) return undefined;\r\n parts = [parseInt(p[0]), parseInt(p[1]) - 1, parseInt(p[2])];\r\n } else if (value.indexOf(\"/\") !== -1) {\r\n const p = value.split(\"/\");\r\n if (p.length !== 3) return undefined;\r\n parts = [parseInt(p[2]), parseInt(p[1]) - 1, parseInt(p[0])];\r\n }\r\n return parts;\r\n }\r\n\r\n /**\r\n * Parse a date\r\n * @param value : the value to check\r\n * @param locale : the locale to use\r\n * @returns : a valid Date object or null\r\n */\r\n static parseDate(value?: string | Date, locale: any = it): Date | undefined {\r\n // No value at all\r\n if (!value) return undefined;\r\n // A Date value\r\n if (value instanceof Date && value.getTime()) return value;\r\n // Parse known formats using date-fns\r\n let d = parseISO(value as string);\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'dd/MM/yyyy', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'yyyy-MM-dd', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n // Parse values manually\r\n let parts = this.getDateParts(value as string);\r\n if (!parts) return undefined;\r\n if (parts[0] < 100) parts[0] += 2000;\r\n if (isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return undefined;\r\n if (isNaN(parts[1]) || parts[1] < 0) return undefined;\r\n if (isNaN(parts[2]) || parts[2] < 0) return undefined;\r\n if (parts[1] > 11) return undefined;\r\n if (parts[1] === 1 && parts[2] > 29) return undefined;\r\n else if (parts[1] !== 1 && parts[2] > 31) return undefined;\r\n return new TZDate(parts[0], parts[1], parts[2], 12);\r\n }\r\n\r\n /**\r\n * Format a date\r\n * @param value : the date or string to format\r\n * @param fmt : the DateFormat to use or the string pattern\r\n * @param locale : the locale to use (default is IT)\r\n * @returns : the formatted string\r\n */\r\n static formatDate(\r\n value?: Date | string,\r\n fmt: DateFormat | string = DateFormat.Short,\r\n locale: any = it): string {\r\n // No value at all\r\n if (!value) return undefined;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date \r\n if (!(value instanceof Date && value.getTime()))\r\n return undefined;\r\n // Format\r\n switch (fmt) {\r\n case DateFormat.Short: return format(value, \"dd/MM/yyyy\", { locale: locale });\r\n case DateFormat.Long: return format(value, \"d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortMonth: return format(value, \"d MMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithWeekDay: return format(value, \"EEEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortWeekDay: return format(value, \"EEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.MonthAndYear: return format(value, \"MMM yyyy\", { locale: locale });\r\n case DateFormat.LongMonthAndYear: return format(value, \"MMMM yyyy\", { locale: locale });\r\n case DateFormat.WeekDay: return format(value, \"EEE, d\", { locale: locale });\r\n case DateFormat.LongWeekDay: return format(value, \"EEEE, d\", { locale: locale });\r\n case DateFormat.DayAndMonth: return format(value, \"d MMMM\", { locale: locale });\r\n case DateFormat.ShortUS: return format(value, \"MM/dd/yyyy\", { locale: locale });\r\n case DateFormat.ShortISO8601: return format(value, \"yyyy-MM-dd\", { locale: locale });\r\n default:\r\n return format(value, fmt, { locale: locale });\r\n }\r\n }\r\n\r\n /**\r\n * Return an italian local date\r\n * @param value : the date\r\n * @returns : the new date\r\n */\r\n static toLocalDate(value?: Date | string): Date {\r\n // No value at all\r\n if (!value) return undefined;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date\r\n if (!(value instanceof Date && value.getTime())) return undefined;\r\n // Update date\r\n return new TZDate(value, \"Europe/Rome\");\r\n }\r\n\r\n /**\r\n * Update a DateInterval object according to a string\r\n * @param value : string value\r\n * @param interval : DateInterval value to update\r\n * @param end : true if must be updated the first or the end value \r\n * @param copy : copy the same value (works only if not end element)\r\n */\r\n static changeDateInterval(value: string, interval: DateInterval, end: boolean = false, copy: boolean = false) {\r\n if (value) {\r\n let year = -1;\r\n if (value.length === 4 && (year = parseInt(value)) > 1750) {\r\n if (!end) {\r\n interval.from = new TZDate(new Date(year, 0, 1), 'Europe/Rome');\r\n interval.to = new TZDate(new Date(year, 11, 31), 'Europe/Rome');\r\n } else\r\n interval.to = new Date(year, 11, 31);\r\n } else {\r\n let parts = this.getDateParts(value);\r\n if (!parts || isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return;\r\n const d = new TZDate(new Date(parts[0], parts[1], parts[2]), 'Europe/Rome');\r\n if (end)\r\n interval.to = d;\r\n else if (copy) {\r\n interval.from = d;\r\n interval.to = d;\r\n } else\r\n interval.from = d;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Encode url\r\n * @param value : the value to encode\r\n * @returns : the url encoded string\r\n */\r\n static urlEncode(value: string): string | undefined {\r\n return value?.length > 0\r\n ? encodeURIComponent(value)\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Decode url\r\n * @param value : the url to decode\r\n * @returns : the decode url string\r\n */\r\n static urlDecode(value?: string): string | undefined {\r\n const regex = /\\+/g;\r\n return value?.length > 0\r\n ? decodeURIComponent((value + \"\").replace(regex, \"%20\"))\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Get a querystring parameter value\r\n * @param name : the parameter name\r\n * @returns : the string value\r\n */\r\n static getQueryStringValueByName(name: string): string {\r\n if (!this.isBrowser()) return undefined;\r\n const url = window.location.href;\r\n if (url.includes(\"?\")) {\r\n const httpParams = new HttpParams({ fromString: url.split(\"?\")[1] });\r\n const v = decodeURIComponent(httpParams.get(name));\r\n if (v && v !== \"null\") return v;\r\n else return undefined;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Generate a password\r\n * @returns : the password string\r\n */\r\n static generatePassword(): string {\r\n const random = \"$\" + Math.random().toString(36).slice(-11);\r\n let password = \"\";\r\n let hasUpperCase = false;\r\n for (const rnd of random) {\r\n if (!hasUpperCase && \"abcdefghjilmnopqrstuvywxz\".includes(rnd)) {\r\n password += rnd.toUpperCase();\r\n hasUpperCase = true;\r\n } else {\r\n password += rnd;\r\n }\r\n }\r\n if (!hasUpperCase)\r\n password = password.substring(0, 11) + \"M\";\r\n return password;\r\n }\r\n\r\n /**\r\n * Calculate password strength\r\n * @param password: the password to evaluate\r\n * @returns the password strength info\r\n */\r\n static calculatePasswordStrength(password?: string): PasswordStrength {\r\n if (password?.length > 0) {\r\n let score = 0;\r\n const suggestions: string[] = [];\r\n\r\n // Length\r\n if (password.length >= 10) score++;\r\n else suggestions.push('Usa almeno 10 caratteri.');\r\n if (password.length >= 12) score++;\r\n else if (password.length >= 10) suggestions.push('Considera di usare più di 12 caratteri.');\r\n\r\n // Lowercase letters\r\n if (/[a-z]/.test(password)) score++;\r\n else suggestions.push('Aggiungi lettere minuscole.');\r\n\r\n // Uppercase letters\r\n if (/[A-Z]/.test(password)) score++;\r\n else suggestions.push('Aggiungi lettere maiuscole.');\r\n\r\n // Numbers\r\n if (/\\d/.test(password)) score++;\r\n else suggestions.push('Aggiungi numeri.');\r\n\r\n // Special characters\r\n if (/[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/.test(password)) score++;\r\n else suggestions.push('Aggiungi caratteri speciali (!@#$%^&*).');\r\n\r\n // Common patterns\r\n if (/(.)\\1{2,}/.test(password)) {\r\n score = Math.max(0, score - 1);\r\n suggestions.push('Evita di ripetere lo stesso carattere.');\r\n }\r\n if (/123|abc|qwe/i.test(password)) {\r\n score = Math.max(0, score - 1);\r\n suggestions.push('Evita sequenze comuni (123, abc, qwe).');\r\n }\r\n\r\n // Label and color\r\n let label: string;\r\n let color: string;\r\n let isValid: boolean;\r\n if (score <= 2) {\r\n label = 'Molto debole';\r\n color = '#f44336';\r\n isValid = false;\r\n } else if (score <= 3) {\r\n label = 'Debole';\r\n color = '#ff9800';\r\n isValid = false;\r\n } else if (score <= 4) {\r\n label = 'Media';\r\n color = '#ffc107';\r\n isValid = true;\r\n } else if (score <= 5) {\r\n label = 'Forte';\r\n color = '#8bc34a';\r\n isValid = true;\r\n } else {\r\n label = 'Molto forte';\r\n color = '#4caf50';\r\n isValid = true;\r\n }\r\n\r\n return {\r\n score: score,\r\n label: label,\r\n color: color,\r\n suggestions: suggestions,\r\n isValid: isValid\r\n };\r\n } else\r\n return {\r\n score: 0,\r\n isValid: false,\r\n suggestions: []\r\n };\r\n\r\n }\r\n\r\n\r\n /**\r\n * Check if current browser supports touch\r\n * @returns : true if the display is touchable\r\n */\r\n static isTouchable(): boolean {\r\n return (\r\n this.isBrowser() && (\r\n \"ontouchstart\" in window ||\r\n navigator.maxTouchPoints > 0)\r\n );\r\n }\r\n\r\n /**\r\n * This check will prevent 'window' logic to be executed\r\n * while executing the server rendering\r\n * @returns : true if using the browser\r\n */\r\n static isBrowser(): boolean {\r\n return typeof (window) !== 'undefined';\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the subfolders group or null to root\r\n * @returns : a node list\r\n */\r\n static toNodes(folders: INode[]): INode[] {\r\n return this._toNodes(folders, undefined);\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the children group or null to root\r\n * @param parent : the parent node\r\n * @returns : a node list \r\n */\r\n private static _toNodes(folders: INode[], parent?: INode): INode[] {\r\n const nodes: INode[] = [];\r\n folders.forEach((n: INode) => {\r\n const node: INode = {\r\n id: n.id,\r\n name: n.name,\r\n count: n.count,\r\n parent: parent,\r\n children: undefined,\r\n bag: n,\r\n };\r\n const children = n.children ?? n.subFolders ?? [];\r\n if (children.length > 0) {\r\n node.children = this._toNodes(n.children ?? n.subFolders, node);\r\n }\r\n nodes.push(node);\r\n });\r\n return nodes;\r\n }\r\n\r\n /**\r\n * Return the flags array to be used in selections\r\n * @param value : the new value\r\n * @param max: the max number of flags\r\n */\r\n static getFlags(value: number, max: number = 30): number[] {\r\n if (value) {\r\n let items: number[] = [];\r\n let v = 1;\r\n let m = 1 << max;\r\n while (v < m) {\r\n if ((value & v) === v) items.push(v);\r\n v = v << 1;\r\n }\r\n return items;\r\n } else return [];\r\n }\r\n\r\n /**\r\n * Check if a color is light or dark\r\n * @param color : the color\r\n * @param minimumLuminance : the lumimance to consider\r\n * @returns true if the color is light\r\n */\r\n static isColorLight(color: string, minimumLuminance: number = 186): boolean {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.style.color = color;\r\n document.body.appendChild(tempDiv);\r\n const rgb = getComputedStyle(tempDiv).color;\r\n document.body.removeChild(tempDiv);\r\n const result = rgb.match(/\\d+/g);\r\n if (!result || result.length < 3) return true; // fallback\r\n const r = parseInt(result[0], 10);\r\n const g = parseInt(result[1], 10);\r\n const b = parseInt(result[2], 10);\r\n const luminance = 0.299 * r + 0.587 * g + 0.114 * b;\r\n return luminance > minimumLuminance;\r\n }\r\n\r\n}\r\n","import { Directive, HostListener, OnDestroy, OnInit, input } from '@angular/core';\r\nimport { DateInterval } from '../definitions';\r\nimport { SystemUtils } from '../system';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject, Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[dateIntervalChange]',\r\n standalone: true,\r\n})\r\nexport class DateIntervalChangeDirective implements OnInit, OnDestroy {\r\n readonly dateIntervalChange = input<DateInterval>(new DateInterval(null, null));\r\n readonly end = input<boolean>(false);\r\n private subject = new Subject();\r\n private subscription: Subscription;\r\n\r\n ngOnInit() {\r\n this.subscription = this.subject\r\n .pipe(debounceTime(100))\r\n .subscribe((e: any) => { \r\n const value = (e.target as HTMLInputElement).value;\r\n SystemUtils.changeDateInterval(value, this.dateIntervalChange(), this.end(), e.key === ' ');\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n @HostListener('keyup', ['$event']) public onKeyup(e: KeyboardEvent): void {\r\n if (e.key === ' ') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n this.subject.next(event);\r\n\r\n }\r\n}","import {\r\n Directive,\r\n HostListener,\r\n Injectable,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Directive({\r\n selector: '[copyClipboard]',\r\n standalone: true\r\n})\r\nexport class CopyClipboardDirective {\r\n readonly payload = input<string>(undefined, { alias: \"copyClipboard\" });\r\n\r\n readonly copied = output<string>({ alias: 'copied' });\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(e: MouseEvent): void {\r\n e.preventDefault();\r\n if (!this.payload()) return;\r\n\r\n if (SystemUtils.isBrowser()) {\r\n let listener = (e: ClipboardEvent) => {\r\n let clipboard = e.clipboardData;\r\n const payload = this.payload();\r\n clipboard.setData('text/html', payload.toString());\r\n e.preventDefault();\r\n\r\n this.copied.emit(payload);\r\n };\r\n\r\n document.addEventListener('copy', listener, false);\r\n document.execCommand('copy');\r\n document.removeEventListener('copy', listener, false);\r\n }\r\n }\r\n}\r\n","import { Directive, forwardRef, input } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n} from \"@angular/forms\";\r\nimport { endOfDay } from 'date-fns';\r\nimport { Validated } from '../definitions';\r\nimport { SystemUtils } from \"../system\";\r\n\r\n\r\n@Directive({\r\n selector: '[validator]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true }],\r\n standalone: true,\r\n})\r\nexport class ValidatorDirective implements Validator {\r\n readonly validator = input<(control: AbstractControl) => ValidationErrors | null>(null);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.validator()(control);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[validIf]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => ValidIfDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class ValidIfDirective implements Validator {\r\n readonly validIf = input<boolean>(false);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = false;\r\n let c = control.value ? (control.value as Validated) : null;\r\n if (!c) isValid = this.validIf() === true;\r\n else {\r\n try {\r\n isValid = c.isValid();\r\n } catch { }\r\n }\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { validIf: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[equals]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EqualsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EqualsValidatorDirective implements Validator {\r\n readonly equals = input<AbstractControl>(null);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const isValid = this.equals().value === control.value;\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { equals: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[notEqual]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotEqualValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotEqualValidatorDirective implements Validator {\r\n\r\n readonly notEqual = input<AbstractControl>(null);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n\r\n const notEqual = this.notEqual();\r\n const isValid = (!notEqual.value && !control.value) || (notEqual.value !== control.value);\r\n const errors: ValidationErrors | null = isValid ? null : { 'notequal': true };\r\n\r\n // immediate show up\r\n const notEqualValue = this.notEqual();\r\n if (errors) {\r\n control.markAsTouched();\r\n } else if (notEqualValue.hasError('notequal')) {\r\n notEqualValue.setErrors({ 'notequal': null });\r\n notEqualValue.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n notEqualValue.markAsTouched();\r\n notEqualValue.markAsDirty();\r\n }\r\n return errors;\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[emails]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EmailsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EmailsValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = true;\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n var parts = input.replaceAll(/\\r\\n/g, \"\").split(\";\");\r\n for (var i = 0; i < parts.length; i++) {\r\n if (parts[i].length > 0) {\r\n if (!SystemUtils.parseEmail(parts[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (!isValid) {\r\n return { emails: \"Elenco non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[guid]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => GuidValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class GuidValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const isValid = SystemUtils.parseUUID(input);\r\n if (!isValid) {\r\n return { guid: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[sqlDate]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SqlDateValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class SqlDateValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d.getFullYear() > 1750;\r\n if (!isValid) {\r\n return { sqlDate: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[notFuture]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotFutureValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotFutureValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const today = endOfDay(new Date());\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d <= today;\r\n if (!isValid) {\r\n return { notFuture: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[url]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => UrlValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class UrlValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n const isValid = SystemUtils.parseUrl(input);\r\n if (!isValid) {\r\n return { url: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[fileSize]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => FileSizeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class FileSizeValidatorDirective implements Validator {\r\n readonly maxSizeMb = input<number>(5);\r\n readonly minSizeMb = input<number>(0);\r\n readonly size = input<number>(null);\r\n\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n const size = this.size();\r\n let s = size ? size : 0;\r\n if (!input) return null;\r\n const isValid = s <= this.maxSizeMb() && s >= this.minSizeMb();\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { fileSize: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[maxTerms]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => MaxTermsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\n\r\nexport class MaxTermsValidatorDirective implements Validator {\r\n readonly maxTerms = input<number>(0);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input) return null;\r\n const terms = input?.match(/\\S+/g)?.length ?? 0;\r\n const isValid = terms <= this.maxTerms();\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { maxTerms: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[password]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => PasswordValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class PasswordValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value ?? '';\r\n const strength = SystemUtils.calculatePasswordStrength(input);\r\n if (!strength.isValid) {\r\n return { password: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[time]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => TimeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\n\r\nexport class TimeValidatorDirective implements Validator {\r\n readonly slots = input<string>(null);\r\n\r\n\r\n /**\r\n * Retrieve hours as a number from a time string (e: 12:00)\r\n * @param value : the time string\r\n * @returns the hours as a number or -1\r\n */\r\n private getTime(value: string): number | null {\r\n const p = value.split(':');\r\n if (p.length !== 2) return -1;\r\n const hh = parseInt(p[0]);\r\n if (hh < 0 || hh > 23) return -1;\r\n const mm = parseInt(p[1]);\r\n if (mm < 0 || hh > 59) return -1;\r\n return parseInt(p[0] + p[1]);\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n let isValid: boolean = false;\r\n const t = this.getTime(input);\r\n if (t !== -1) {\r\n const slotsValue = this.slots();\r\n if (slotsValue) {\r\n const slots = slotsValue.split('|');\r\n slots.forEach(s => {\r\n const t1 = this.getTime(s.substring(0, 5));\r\n const t2 = this.getTime(s.substring(6));\r\n if (t1 !== -1 && t2 !== -1 && t1 <= t && t2 >= t) {\r\n // Good\r\n isValid = true;\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n if (!isValid) {\r\n return { time: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[notEmpty]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotEmptyValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotEmptyValidatorDirective implements Validator {\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control?.value;\r\n if (!input || typeof input !== 'string' || input.length === 0) return null;\r\n const isValid = input.trim().length > 0;\r\n if (!isValid) {\r\n return { notEmpty: true };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { format } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'format',\r\n standalone: true\r\n})\r\nexport class FormatPipe implements PipeTransform {\r\n\r\n\r\n transform(\r\n value?: any | undefined,\r\n type: string = 'date',\r\n pattern: string = \"dd/MM/yyyy\"): string | undefined {\r\n if (value === undefined || value === null) return undefined;\r\n switch (type) {\r\n case 'D':\r\n case 'date':\r\n const d = SystemUtils.parseDate(value, it);\r\n if (d) return format(d, pattern, { locale: it });\r\n break;\r\n case 'C':\r\n case 'currency':\r\n return new Intl.NumberFormat('it-IT', { style: 'currency', currency: 'EUR' }).format(value ?? 0);\r\n case 'N':\r\n case 'number':\r\n return new Intl.NumberFormat('it-IT', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(value ?? 0);\r\n case 'N0':\r\n case 'number0':\r\n return new Intl.NumberFormat('it-IT', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value ?? 0);\r\n case 'P':\r\n case 'percentage':\r\n return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value ?? 0); \r\n }\r\n return undefined;\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'replace',\r\n standalone: true\r\n})\r\nexport class ReplacePipe implements PipeTransform {\r\n\r\n private sanitizer = inject(DomSanitizer);\r\n \r\n transform(value: string | undefined, regexValue: string, replaceValue: string): SafeHtml {\r\n if (!value) return undefined;\r\n if (regexValue === '\\n' && !replaceValue) {\r\n replaceValue = '<br>';\r\n }\r\n return this.sanitizer.bypassSecurityTrustHtml(value.replace(new RegExp(regexValue, 'g'), replaceValue));\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string ): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(value ?? '');\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeUrl',\r\n standalone: true\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value ?? '');\r\n }\r\n}\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'callback',\r\n pure: false,\r\n standalone: true\r\n})\r\nexport class SearchCallbackPipe implements PipeTransform {\r\n transform(items: any[] | undefined, callback: (item: any) => boolean): any {\r\n if (!items || !callback) {\r\n return items;\r\n }\r\n return items.filter(item => callback(item));\r\n }\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\nimport { SearchFilterMetadata } from '../definitions';\r\n\r\n// ---------------------------------------------------------------------------------\r\n// 2023.0921 aggiunto un campo opzionale di tipo SearchFilterMetadata per i conteggi\r\n//\r\n// - nel chiamante:\r\n// let items: Searchable[] = [...];\r\n// let myFilterText: string = 'testo del filtro';\r\n// const myFilterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\r\n// \r\n// <div *ngFor=\"let item of items | search:myFilterText:myFilterMetadata\">\r\n// <div>Totale: {{ myFilterMetadata.total }}, Filtrati: {{ myFilterMetadata.count }}</div>\r\n// ---------------------------------------------------------------------------------\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'search',\r\n standalone: true\r\n})\r\nexport class SearchFilterPipe implements PipeTransform {\r\n transform(items?: any[], value?: string, metadata?: SearchFilterMetadata): any {\r\n\r\n // se non vengono passati i metadati ne crea una copia locale per evitare gli if\r\n metadata = metadata || { total: 0, count: 0 };\r\n\r\n if (!items || !value) {\r\n return items;\r\n }\r\n let result = items.filter(item => {\r\n if (item) {\r\n if (item.searchBag)\r\n return item.searchBag.name\r\n .toLowerCase()\r\n .indexOf(value.toLowerCase()) !== -1;\r\n else return item.toLowerCase().indexOf(value.toLowerCase()) !== -1;\r\n }\r\n return null;\r\n });\r\n\r\n // aggiorna i conteggi\r\n metadata.total = items.length;\r\n metadata.count = result.length;\r\n\r\n return result;\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'formatHtml',\r\n standalone: true\r\n})\r\nexport class FormatHtmlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string ): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(value.replaceAll(/(?:\\r\\n|\\r|\\n)/g, '<br>') ?? '');\r\n }\r\n}\r\n","export const Breakpoints = {\r\n XXSmall: '(max-width: 349.98px)',\r\n XSmall: '(max-width: 599.98px)',\r\n Small: '(min-width: 600px) and (max-width: 959.98px)',\r\n SmallMedium: '(min-width: 600px) and (max-width: 1059.98px)', \r\n Medium: '(min-width: 960px) and (max-width: 1279.98px)',\r\n MediumLarge: '(min-width: 960px) and (max-width: 1459.98px)',\r\n Large: '(min-width: 1460px) and (max-width: 1919.98px)'\r\n};","export const UtilsMessages = {\r\n /**\r\n * Messages\r\n */\r\n\r\n\r\n // Select dialog\r\n UTILS_DIALOGS_SELECT_OPTIONS_CHANGED: '§utils-dialogs-select-options-changed'\r\n};\r\n","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { SystemUtils } from \"./system\";\r\nimport { EventEmitter } from '@angular/core';\r\n\r\nexport class SelectableModel<T, V> {\r\n\r\n changed: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n private _all: T[] = [];\r\n get all(): T[] {\r\n return this._all;\r\n }\r\n private _current: SelectionModel<T>;\r\n get current(): SelectionModel<T> {\r\n return this._current;\r\n }\r\n private _lookupFieldName: string;\r\n\r\n constructor(\r\n allowMultiSelect: boolean = true,\r\n lookupFieldName: string = \"id\"\r\n ) {\r\n this._current = new SelectionModel<T>(allowMultiSelect, []);\r\n this._all = [];\r\n this._lookupFieldName = lookupFieldName;\r\n }\r\n\r\n /**\r\n * Update the view of an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n updateCurrent(item: T, lookupValue: V) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n toggle(item: T, lookupValue?: V) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } else {\r\n this._all.splice(p, 1);\r\n }\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n select(item: T, lookupValue?: V) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } \r\n this._current.select(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Deselect an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n deselect(item: T, lookupValue?: V) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deselect all specified item lookup values\r\n * @param lookupValues : the values\r\n */\r\n deselectByValues(lookupValues: V[]) {\r\n if (!lookupValues || lookupValues.length === 0) return;\r\n lookupValues.forEach(n => {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n n\r\n );\r\n if (p != -1) {\r\n let item = this._all[p];\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear current view\r\n * @param clearFunc : the function used to clear\r\n */\r\n clearCurrent(clearFunc: any) {\r\n this._current.selected.forEach(n => {\r\n clearFunc(n);\r\n });\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Deselect all items\r\n */\r\n clear() {\r\n this._all = [];\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Checks if an item is selected using its lookup value\r\n * @param lookupValue : the value\r\n * @returns : true if the value is selected\r\n */\r\n isSelected(lookupValue?: V): boolean {\r\n return (lookupValue &&\r\n SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n ) != -1\r\n );\r\n }\r\n\r\n /**\r\n * Checks if a selection exists\r\n * @returns : true if at least one selection exists\r\n */\r\n hasValue(): boolean {\r\n return this._all.length > 0;\r\n }\r\n}\r\n","/**\r\n * Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\n\r\nimport { Subject } from 'rxjs';\r\n\r\n/**\r\n * The message bag sent as a message\r\n */\r\nexport interface BroadcastChannelMessageBag<T> {\r\n messageId: string;\r\n sender: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * Message subscription params\r\n */\r\nexport interface BroadcastChannelSubscriberInfo<T> {\r\n messageId: string;\r\n action: (bag: BroadcastChannelMessageBag<T>) => void;\r\n}\r\n\r\n/**\r\n * Web Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\nexport class BroadcastChannelManager {\r\n private channel?: BroadcastChannel;\r\n private subject = new Subject<BroadcastChannelMessageBag<any>>();\r\n private subscriptions: BroadcastChannelSubscriberInfo<any>[] = [];\r\n\r\n /**\r\n * Get the current channel registration\r\n */\r\n public get currentBus(): string | undefined {\r\n return this.channel?.name;\r\n }\r\n\r\n constructor(bus: string = \"ARS-CHANNEL\") {\r\n if ('BroadcastChannel' in window) {\r\n this.channel = new BroadcastChannel(bus);\r\n\r\n this.channel.onmessageerror = (e: any) => {\r\n console.error('[BroadcastChannelManager] Errore di ricezione del messaggio', e);\r\n };\r\n\r\n this.channel.onmessage = (e: MessageEvent) => {\r\n this.subject.next(e.data);\r\n const bag: BroadcastChannelMessageBag<any> | undefined = e.data as BroadcastChannelMessageBag<any>;\r\n if (bag) {\r\n const bagInfo: BroadcastChannelSubscriberInfo<any> | undefined = this.subscriptions.find(m => m.messageId === bag.messageId);\r\n bagInfo?.action(bag);\r\n }\r\n }\r\n } else {\r\n console.error('[BroadcastChannelManager] Non supportato');\r\n }\r\n }\r\n\r\n dispose(): void {\r\n setTimeout(() => {\r\n this.subscriptions = [];\r\n this.channel?.close();\r\n this.channel = undefined;\r\n this.subject.complete();\r\n }, 1000);\r\n }\r\n\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n *\r\n * @example\r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value });\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>): void;\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n * @param delay The number of milliseconds to wait before sending the message, see also {@link setTimeout}\r\n *\r\n * @example\r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value }, 250);\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>, delay?: number): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n *\r\n * @example\r\n * channel.sendMessage('my-broadcast-message', value);\r\n */\r\n sendMessage<T>(messageId: string, data?: T): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n * @param delay The number of milliseconds to wait before sending the message\r\n *\r\n * @example\r\n * channel.sendMessage('my-broadcast-message', value, 250);\r\n */\r\n sendMessage<T>(messageId: string, data?: T, delay?: number): void;\r\n\r\n /**\r\n * overloads\r\n */\r\n sendMessage<T>(messageIdorBag: string | BroadcastChannelMessageBag<T>, dataOrDelay?: T | number, delay?: number) {\r\n setTimeout(() => {\r\n if (typeof messageIdorBag === 'string') {\r\n this.channel?.postMessage({ messageId: messageIdorBag, data: dataOrDelay } as BroadcastChannelMessageBag<T>);\r\n } else {\r\n this.channel?.postMessage(messageIdorBag as BroadcastChannelMessageBag<T>);\r\n }\r\n }, (typeof dataOrDelay === 'number' ? dataOrDelay : delay) ?? 0);\r\n }\r\n\r\n /**\r\n * Subscribe to a message\r\n * @param args The subscription info, see also {@link BroadcastChannelSubscriberInfo}\r\n */\r\n subscribe<T>(args: BroadcastChannelSubscriberInfo<T>) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === args.messageId);\r\n if (i === -1) {\r\n this.subscriptions.push(args);\r\n } else {\r\n this.subscriptions[i].action = args.action;\r\n }\r\n }\r\n\r\n /**\r\n * Remove a message subscription\r\n * @param messageId The message id\r\n */\r\n unsubscribe(messageId: string) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === messageId);\r\n if (i !== -1) {\r\n this.subscriptions.splice(i, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Remove all the current subscriptions\r\n */\r\n unsubscribeAll() {\r\n this.subscriptions = [];\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { BroadcastChannelManager, BroadcastChannelMessageBag } from './broadcastChannelManager';\r\n\r\nexport interface BroadcastMessageInfo {\r\n id: string;\r\n data?: any;\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BroadcastService implements OnDestroy {\r\n private subject = new Subject<BroadcastMessageInfo>();\r\n private channel = new BroadcastChannelManager(\"ARS-CHANNEL\");\r\n\r\n /**\r\n * Get a new instance of broadcast channel\r\n */\r\n static GetChannel(): BroadcastChannelManager {\r\n return new BroadcastChannelManager(\"ARS-CHANNEL\");\r\n }\r\n\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.channel?.dispose();\r\n }\r\n\r\n /**\r\n * Send a message\r\n * @param id : the message id\r\n * @param data : the data to send\r\n * @param delay : the number of milliseconds to wait before sending the message\r\n */\r\n sendMessage(id: string, data: any = undefined, delay: number = 0) {\r\n setTimeout(() => {\r\n this.subject.next({ id: id, data: data } as BroadcastMessageInfo);\r\n }, delay);\r\n }\r\n\r\n /**\r\n * Send a channel message\r\n * @param id : the message bag\r\n * @param data : the data bag\r\n * @param delay : the number of milliseconds to wait before sending the message\r\n */\r\n sendChannelMessage<T>(id: string, data?: T, delay?: number) {\r\n setTimeout(() => {\r\n this.channel.sendMessage(id, data, delay);\r\n }, delay);\r\n }\r\n\r\n /**\r\n * Subscribe channel message\r\n * @param id : the message id\r\n * @param action : the actionto perform\r\n */\r\n subscribeChannelMessage<T>(id: string, action: (bag: BroadcastChannelMessageBag<T>) => void) {\r\n this.channel.subscribe({ messageId: id, action: action });\r\n }\r\n\r\n /**\r\n * Get the next message as observable\r\n * @returns : the observable object\r\n */\r\n getMessage(): Observable<BroadcastMessageInfo> {\r\n return this.subject.asObservable();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnvironmentService {\r\n \r\n private _appUri: string = '';\r\n get appUri() {\r\n return this._appUri;\r\n }\r\n set appUri(value: string) {\r\n this._appUri = value;\r\n }\r\n\r\n private _appServiceUri: string = '';\r\n get appServiceUri() {\r\n return this._appServiceUri;\r\n }\r\n set appServiceUri(value: string) {\r\n this._appServiceUri = value;\r\n }\r\n\r\n private _appLoginRedirectUri: string = '';\r\n get appLoginRedirectUri() {\r\n return this._appLoginRedirectUri ?? this._appUri;\r\n }\r\n set appLoginRedirectUri(value: string) {\r\n this._appLoginRedirectUri = value;\r\n }\r\n\r\n private _appServiceLoginUri: string = '';\r\n get appServiceLoginUri() {\r\n return this._appServiceLoginUri ?? this._appServiceUri;\r\n }\r\n set appServiceLoginUri(value: string) {\r\n this._appServiceLoginUri = value;\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScreenService {\r\n public mq = signal<string>(\"\");\r\n \r\n get isTouchable(): boolean {\r\n return SystemUtils.isTouchable();\r\n }\r\n get isIEOrEdge(): boolean {\r\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\r\n }\r\n\r\n}\r\n","import { computed, inject, Injectable, OnDestroy, RendererFactory2, Signal, signal } from \"@angular/core\";\r\nimport { BroadcastChannelManager, BroadcastChannelMessageBag } from './broadcastChannelManager';\r\nimport { BehaviorSubject, Observable } from \"rxjs\";\r\n\r\n\r\n/**\r\n * Kind of themes: system default, light or dark\r\n */\r\nexport type ThemeType = 'auto' | 'light' | 'dark';\r\n\r\n/**\r\n * Available themes' schema\r\n */\r\ninterface ThemeInfoRecord {\r\n icon: string;\r\n name: string;\r\n next: ThemeType;\r\n tooltip: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n\r\n // messaggi broadcast\r\n private readonly broadcastChannel = new BroadcastChannelManager('THEME-SERVICE');\r\n private readonly broadcastMessage: string = '$theme-changed';\r\n\r\n // per intercettare il cambio di tema a livello di sistema\r\n private readonly prefersColorSchemeMediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\r\n\r\n /**\r\n * Theme changed e.\r\n * Notify the consuming component about the incoming theme change.\r\n * @example \r\n * // React to theme changes\r\n * this.themeService.themeChanged\r\n * .pipe(takeUntil(this.unsubscribe))\r\n * .subscribe((value: ThemeType) => {\r\n * // do the job done....\r\n * });\r\n */\r\n private themeChanged = new BehaviorSubject<ThemeType>('auto');\r\n // espone al consumatore un'observable\r\n public changed: Observable<ThemeType> = this.themeChanged.asObservable();\r\n\r\n private renderFactory2 = inject(RendererFactory2);\r\n private renderer = this.renderFactory2.createRenderer(null, null);\r\n\r\n /**\r\n * Current theme\r\n */\r\n private readonly theme = signal<ThemeType>(\"light\");\r\n /**\r\n * The current theme is \"System default\"\r\n */\r\n private readonly auto: Signal<boolean> = computed(() => this.theme() === 'auto');\r\n\r\n /**\r\n * Configuration schema about the icon, the text and the toggle() sequence\r\n */\r\n private readonly themeInfo: Record<ThemeType, ThemeInfoRecord> = {\r\n ['auto']: { icon: 'routine', name: 'Tema di sistema', next: 'light', tooltip: 'Passa a tema chiaro', },\r\n ['light']: { icon: 'light_mode', name: 'Tema chiaro', next: 'dark', tooltip: 'Passa a tema scuro', },\r\n ['dark']: { icon: 'dark_mode', name: 'Tema scuro', next: 'auto', tooltip: 'Passa a tema di sistema', },\r\n };\r\n\r\n /**\r\n * Icon of the current theme (mat-icon code)\r\n */\r\n public readonly themeIcon: Signal<string> = computed(() => this.themeInfo[this.theme()].icon);\r\n /**\r\n * Current theme name\r\n */\r\n public readonly themeName: Signal<string> = computed(() => this.themeInfo[this.theme()].name);\r\n /**\r\n * Tooltip text on toggle \r\n */\r\n public readonly toggleTooltip: Signal<string> = computed(() => this.themeInfo[this.theme()].tooltip);\r\n\r\n /**\r\n * Initialize\r\n */\r\n initialize(theme: ThemeType = this.getPreferredTheme()) {\r\n // React to current theme\r\n this.prefersColorSchemeMediaQueryList.onchange = (_: MediaQueryListEvent) => this.auto() ? this.setTheme(theme) : null;\r\n\r\n // Support boradcast channel messaging\r\n this.broadcastChannel.subscribe<ThemeType>({\r\n messageId: this.broadcastMessage,\r\n action: (bag: BroadcastChannelMessageBag<ThemeType>) => {\r\n if (this.theme() !== bag.data) {\r\n this.setTheme(bag.data);\r\n }\r\n }\r\n });\r\n\r\n // Load theme\r\n this.setTheme(theme);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.broadcastChannel.dispose();\r\n }\r\n\r\n /**\r\n * Get the current preferred theme\r\n */\r\n private getPreferredTheme(): ThemeType {\r\n let theme: ThemeType = localStorage.getItem(\"preferred-theme\") as ThemeType;\r\n if (!this.isTheme(theme)) {\r\n theme = 'auto';\r\n }\r\n return theme;\r\n }\r\n\r\n /**\r\n * Check if a value string is a theme type\r\n * @param value : th string value\r\n * @returns true if the the value is a valid theme type\r\n */\r\n private isTheme(value: string): value is ThemeType {\r\n return ['auto', 'light', 'dark'].includes(value);\r\n }\r\n\r\n\r\n /**\r\n * Set the new theme\r\n * @param theme the new theme\r\n */\r\n private setTheme(theme: ThemeType = 'auto') {\r\n this.renderer.removeClass(document.body, 'light');\r\n this.renderer.removeClass(document.body, 'dark');\r\n this.theme.set(theme);\r\n localStorage.setItem(\"preferred-theme\", this.theme());\r\n this.renderer.addClass(document.body, this.auto() ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\") : theme);\r\n // Notify that current theme has changed\r\n this.themeChanged.next(this.getTheme());\r\n this.broadcastChannel.sendMessage(this.broadcastMessage, this.theme());\r\n }\r\n\r\n /**\r\n * Toggle theme\r\n */\r\n public toggleTheme(): void {\r\n this.setTheme(this.themeInfo[this.theme()].next);\r\n }\r\n\r\n /**\r\n * Get current real theme: light or dark\r\n */\r\n public getTheme(): ThemeType {\r\n return (\r\n this.auto()\r\n ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\")\r\n : this.getPreferredTheme());\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { AutoFocusDirective } from './directives/autoFocusDirective';\r\nimport { DateIntervalChangeDirective } from './directives/changeDateIntervalDirective';\r\nimport { CopyClipboardDirective } from './directives/copyClipboardDirective';\r\nimport { EmailsValidatorDirective, EqualsValidatorDirective, FileSizeValidatorDirective, GuidValidatorDirective, MaxTermsValidatorDirective, NotEmptyValidatorDirective, NotFutureValidatorDirective, PasswordValidatorDirective, SqlDateValidatorDirective, UrlValidatorDirective, ValidIfDirective, ValidatorDirective } from './directives/validators';\r\nimport { FormatPipe } from './pipes/format.pipe';\r\nimport { ReplacePipe } from './pipes/replace.pipe';\r\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { SearchCallbackPipe } from './pipes/search-callback.pipe';\r\nimport { SearchFilterPipe } from './pipes/search-filter.pipe';\r\nimport { FormatHtmlPipe } from './pipes/format-html.pipe';\r\n\r\n@NgModule({\r\n imports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n NotEmptyValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n FormatHtmlPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective,\r\n MaxTermsValidatorDirective\r\n ],\r\n exports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n NotEmptyValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n FormatHtmlPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective,\r\n MaxTermsValidatorDirective\r\n ],\r\n providers: [\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n FormatHtmlPipe\r\n ]\r\n})\r\nexport class ArsCoreModule { }\r\n\r\nexport * from './definitions';\r\nexport * from './breakpoints';\r\nexport * from './messages';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\nexport * from './services/theme.service';\r\nexport * from './system';\r\n\r\n","import { inject, Injectable, NgModule } from '@angular/core';\r\nimport { DateAdapter, MatDateFormats, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { TZDate } from '@date-fns/tz';\r\nimport {\r\n Locale,\r\n getMonth,\r\n getYear,\r\n getDate,\r\n getDay,\r\n getDaysInMonth,\r\n formatISO,\r\n addYears,\r\n addMonths,\r\n addDays,\r\n isValid,\r\n isDate,\r\n format,\r\n parseISO,\r\n parse,\r\n} from 'date-fns';\r\n\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n const valuesArray = Array(length);\r\n for (let i = 0; i < length; i++) {\r\n valuesArray[i] = valueFunction(i);\r\n }\r\n return valuesArray;\r\n}\r\n\r\n// date-fns doesn't have a way to read/print month names or days of the week directly,\r\n// so we get them by formatting a date with a format that produces the desired month/day.\r\nconst MONTH_FORMATS = {\r\n long: 'LLLL',\r\n short: 'LLL',\r\n narrow: 'LLLLL',\r\n};\r\n\r\nconst DAY_OF_WEEK_FORMATS = {\r\n long: 'EEEE',\r\n short: 'EEE',\r\n narrow: 'EEEEE',\r\n};\r\n\r\nexport const MAT_DATE_FNS_FORMATS: MatDateFormats = {\r\n parse: {\r\n dateInput: 'P',\r\n },\r\n display: {\r\n dateInput: 'P',\r\n monthYearLabel: 'LLL uuuu',\r\n dateA11yLabel: 'PP',\r\n monthYearA11yLabel: 'LLLL uuuu',\r\n },\r\n};\r\n\r\n\r\n\r\n/** Adds date-fns support to Angular Material. */\r\n@Injectable()\r\nexport class DateFnsAdapter extends DateAdapter<Date, Locale> {\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n const matDateLocale = inject(MAT_DATE_LOCALE, { optional: true });\r\n this.setLocale(matDateLocale as Locale);\r\n }\r\n\r\n getYear(date: Date): number {\r\n return getYear(date);\r\n }\r\n\r\n getMonth(date: Date): number {\r\n return getMonth(date);\r\n }\r\n\r\n getDate(date: Date): number {\r\n return getDate(date);\r\n }\r\n\r\n getDayOfWeek(date: Date): number {\r\n return getDay(date);\r\n }\r\n\r\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = MONTH_FORMATS[style];\r\n return range(12, i => this.format(new Date(2017, i, 1), pattern));\r\n }\r\n\r\n getDateNames(): string[] {\r\n const dtf =\r\n typeof Intl !== 'undefined'\r\n ? new Intl.DateTimeFormat(this.locale.code, {\r\n day: 'numeric',\r\n timeZone: 'utc',\r\n })\r\n : null;\r\n\r\n return range(31, i => {\r\n if (dtf) {\r\n // date-fns doesn't appear to support this functionality.\r\n // Fall back to `Intl` on supported browsers.\r\n const date = new Date();\r\n date.setUTCFullYear(2017, 0, i + 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n return dtf.format(date).replace(/[\\u200e\\u200f]/g, '');\r\n }\r\n\r\n return i + '';\r\n });\r\n }\r\n\r\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = DAY_OF_WEEK_FORMATS[style];\r\n return range(7, i => this.format(new Date(2017, 0, i + 1), pattern));\r\n }\r\n\r\n getYearName(date: Date): string {\r\n return this.format(date, 'y');\r\n }\r\n\r\n getFirstDayOfWeek(): number {\r\n return this.locale.options?.weekStartsOn ?? 0;\r\n }\r\n\r\n getNumDaysInMonth(date: Date): number {\r\n return getDaysInMonth(date);\r\n }\r\n\r\n clone(date: Date): Date {\r\n return new Date(date.getTime());\r\n }\r\n\r\n createDate(year: number, month: number, date: number): Date {\r\n\r\n // Check for invalid month and date (except upper bound on date which we have to check after\r\n // creating the Date).\r\n if (month < 0 || month > 11) {\r\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n }\r\n\r\n if (date < 1) {\r\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n }\r\n\r\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\r\n // To work around this we use `setFullYear` and `setHours` instead.\r\n const result = new Date();\r\n result.setFullYear(year, month, date);\r\n result.setHours(0, 0, 0, 0);\r\n const result2 = new TZDate(result, \"Europe/Rome\");\r\n \r\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n if (result2.getMonth() != month) {\r\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n }\r\n\r\n return result2;\r\n }\r\n\r\n today(): Date {\r\n return new Date();\r\n }\r\n\r\n parse(value: any, parseFormat: string | string[]): Date | null {\r\n if (typeof value == 'string' && value.length > 0) {\r\n let iso8601Date = parseISO(value);\r\n if (this.isValid(iso8601Date)) {\r\n iso8601Date = new TZDate(iso8601Date, \"Europe/Rome\");\r\n return iso8601Date;\r\n }\r\n\r\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n if (!parseFormat.length) {\r\n throw Error('Formats array must not be empty.');\r\n }\r\n\r\n for (const currentFormat of formats) {\r\n let fromFormat = parse(value, currentFormat, new Date(), { locale: this.locale });\r\n if (this.isValid(fromFormat)) {\r\n fromFormat = new TZDate(fromFormat, \"Europe/Rome\");\r\n return fromFormat;\r\n }\r\n }\r\n\r\n return this.invalid();\r\n } else if (typeof value === 'number') {\r\n return new Date(value);\r\n } else if (value instanceof Date) {\r\n return this.clone(value);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n format(date: Date, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n throw Error('DateFnsAdapter: Cannot format invalid date.');\r\n }\r\n\r\n return format(date, displayFormat, { locale: this.locale });\r\n }\r\n\r\n addCalendarYears(date: Date, years: number): Date {\r\n return addYears(date, years);\r\n }\r\n\r\n addCalendarMonths(date: Date, months: number): Date {\r\n return addMonths(date, months);\r\n }\r\n\r\n addCalendarDays(date: Date, days: number): Date {\r\n return addDays(date, days);\r\n }\r\n\r\n toIso8601(date: Date): string {\r\n return formatISO(date, { representation: 'date' });\r\n }\r\n\r\n /**\r\n * Returns the given value if given a valid Date or undefined. Deserializes valid ISO 8601 strings\r\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into undefined. Returns an\r\n * invalid date for all other values.\r\n */\r\n override deserialize(value: any): Date | null {\r\n if (typeof value === 'string') {\r\n if (!value) {\r\n return null;\r\n }\r\n const date = parseISO(value);\r\n if (this.isValid(date)) {\r\n return date;\r\n }\r\n }\r\n return super.deserialize(value);\r\n }\r\n\r\n isDateInstance(obj: any): boolean {\r\n return isDate(obj);\r\n }\r\n\r\n isValid(date: Date): boolean {\r\n return isValid(date);\r\n }\r\n\r\n invalid(): Date {\r\n return new Date(NaN);\r\n }\r\n}\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: DateAdapter,\r\n useClass: DateFnsAdapter,\r\n deps: [MAT_DATE_LOCALE],\r\n },\r\n { provide: MAT_DATE_FORMATS, useValue: MAT_DATE_FNS_FORMATS }\r\n ],\r\n})\r\nexport class ArsDateFnsModule { }","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[removeFocus]'\r\n})\r\nexport class RemoveFocusDirective {\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(_event: Event): void {\r\n // Controllo null safety\r\n if (this.elementRef?.nativeElement && typeof this.elementRef.nativeElement.blur === 'function') {\r\n // Piccolo delay per permettere al click di completarsi\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.blur();\r\n }, 0);\r\n }\r\n }\r\n}","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { SystemUtils } from '../system';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'formatMarkdown',\r\n standalone: true\r\n})\r\nexport class FormatMarkdownPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string ): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n SystemUtils.markdownToHtml(value ?? ''));\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './core.module';\r\nexport * from './dateFnsAdapter.module';\r\nexport * from './directives/changeDateIntervalDirective';\r\nexport * from './directives/copyClipboardDirective';\r\nexport * from './directives/autoFocusDirective';\r\nexport * from './directives/removeFocusDirective';\r\nexport * from './directives/validators';\r\nexport * from './pipes/search-filter.pipe';\r\nexport * from './pipes/search-callback.pipe';\r\nexport * from './pipes/safe-url.pipe';\r\nexport * from './pipes/safe-html.pipe';\r\nexport * from './pipes/replace.pipe';\r\nexport * from './pipes/format.pipe';\r\nexport * from './pipes/format-html.pipe';\r\nexport * from './pipes/format-markdown.pipe';\r\nexport * from './system';\r\nexport * from './definitions';\r\nexport * from './breakpoints';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/broadcastChannelManager';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-core.mjs","sources":["../../../projects/ars-utils/core/directives/autoFocusDirective.ts","../../../projects/ars-utils/core/definitions.ts","../../../projects/ars-utils/core/system.ts","../../../projects/ars-utils/core/directives/changeDateIntervalDirective.ts","../../../projects/ars-utils/core/directives/copyClipboardDirective.ts","../../../projects/ars-utils/core/directives/validators.ts","../../../projects/ars-utils/core/pipes/format.pipe.ts","../../../projects/ars-utils/core/pipes/replace.pipe.ts","../../../projects/ars-utils/core/pipes/safe-html.pipe.ts","../../../projects/ars-utils/core/pipes/safe-url.pipe.ts","../../../projects/ars-utils/core/pipes/search-callback.pipe.ts","../../../projects/ars-utils/core/pipes/search-filter.pipe.ts","../../../projects/ars-utils/core/pipes/format-html.pipe.ts","../../../projects/ars-utils/core/breakpoints.ts","../../../projects/ars-utils/core/messages.ts","../../../projects/ars-utils/core/selectable.ts","../../../projects/ars-utils/core/services/broadcastChannelManager.ts","../../../projects/ars-utils/core/services/broadcast.service.ts","../../../projects/ars-utils/core/services/environment.service.ts","../../../projects/ars-utils/core/services/screen.service.ts","../../../projects/ars-utils/core/services/theme.service.ts","../../../projects/ars-utils/core/core.module.ts","../../../projects/ars-utils/core/dateFnsAdapter.module.ts","../../../projects/ars-utils/core/directives/removeFocusDirective.ts","../../../projects/ars-utils/core/pipes/format-markdown.pipe.ts","../../../projects/ars-utils/core/public_api.ts","../../../projects/ars-utils/core/arsedizioni-ars-utils-core.ts"],"sourcesContent":["import { AfterContentInit, Directive, ElementRef, inject } from '@angular/core';\r\n\r\n@Directive({\r\n selector: \"[autoFocus]\",\r\n standalone: true\r\n })\r\nexport class AutoFocusDirective implements AfterContentInit {\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n public ngAfterContentInit() {\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.focus();\r\n }, 500);\r\n }\r\n }","import { INode } from './system';\r\n\r\nexport interface DoneResult<T> {\r\n isNew?: boolean;\r\n data?: T;\r\n}\r\n\r\nexport interface ApiResponse {\r\n success: boolean;\r\n message: string;\r\n}\r\n\r\nexport interface ApiResult<T> extends ApiResponse {\r\n value: T;\r\n}\r\n\r\nexport interface Folder extends INode {\r\n teamId?: string;\r\n parentId?: string;\r\n position?: number;\r\n isPrivate?: boolean;\r\n itemsCount?: number;\r\n subItemsCount?: number;\r\n\r\n}\r\n\r\nexport interface FolderTree extends Folder {\r\n children?: Folder[];\r\n path?: string;\r\n}\r\n\r\nexport interface File<T> {\r\n ownerId?: T;\r\n id?: number;\r\n fileName: string;\r\n fileData: any;\r\n}\r\n\r\nexport interface Validated {\r\n isValid(): boolean;\r\n}\r\n\r\nexport class FileInfo implements Validated {\r\n file: any;\r\n valid: boolean;\r\n\r\n isValid(): boolean {\r\n return this.valid;\r\n }\r\n}\r\n\r\nexport interface ErrorInfo {\r\n invalidateSession?: boolean;\r\n title?: string;\r\n message?: string;\r\n errorStatus?: number;\r\n service?: string;\r\n}\r\n\r\nexport interface NameValueItem<T> {\r\n name: string;\r\n value: T;\r\n shortName?: string;\r\n parentName?: string;\r\n parentValue?: T;\r\n header?: string;\r\n bag?: any;\r\n bagInfo?: string;\r\n disabled?: boolean;\r\n selected?: boolean;\r\n}\r\n\r\nexport interface Checkable {\r\n checked?: boolean;\r\n bag: any;\r\n getId(): any;\r\n}\r\n\r\n\r\nexport class ValueModel<T> {\r\n value: T;\r\n}\r\nexport class IDModel<T = number> {\r\n id: T;\r\n}\r\nexport class GroupModel<T = number> {\r\n ids: T[];\r\n}\r\n\r\nexport class DeleteModel<T = number> extends GroupModel<T> {\r\n mode?: number;\r\n parentId?: T;\r\n}\r\n\r\nexport interface DeleteResultModel<T> {\r\n items?: T[],\r\n deleted: number;\r\n total: number;\r\n log?: string;\r\n}\r\n\r\nexport class RelationModel<T = number> {\r\n id: T;\r\n parentId: T;\r\n}\r\n\r\nexport class UpdateRelationsModel<T = number> {\r\n id: T;\r\n relatedIds: T[];\r\n}\r\n\r\nexport class QueryModel {\r\n any?: string;\r\n sortBy?: string;\r\n sortDescending?: boolean;\r\n first?: number;\r\n count?: number;\r\n}\r\n\r\nexport interface QueryResultModel<T> {\r\n interval?: string;\r\n items: T[];\r\n total: number;\r\n}\r\n\r\nexport interface UpdateModel<T = number> {\r\n parentId?: T;\r\n ids: T[];\r\n}\r\n\r\nexport interface UpdateResultModel<T> {\r\n items?: T[];\r\n updated: number;\r\n total: number;\r\n log?: string;\r\n}\r\n\r\nexport interface AddModel<T> extends UpdateModel<T> {\r\n\r\n}\r\n\r\nexport interface AddResultModel<T> {\r\n items?: T[];\r\n added: number;\r\n total: number;\r\n log?: string;\r\n}\r\n\r\nexport class ImportModel {\r\n origin: string;\r\n dataFile: FileInfo;\r\n jumpFirstLine?: boolean;\r\n map?: any;\r\n}\r\n\r\nexport interface EnableDisableModel {\r\n value: boolean;\r\n}\r\n\r\nexport interface SendToModel {\r\n sendToRecipients?: string;\r\n sendToSubject?: string;\r\n sendToText?: string;\r\n}\r\n\r\nexport interface SearchBag {\r\n name: string;\r\n}\r\n\r\nexport interface Searchable {\r\n searchBag: SearchBag;\r\n}\r\n\r\nexport interface SearchFilterMetadata {\r\n total: number; // totale elementi\r\n count: number; // conteggio filtrati\r\n}\r\n\r\nexport class DateInterval {\r\n from?: Date;\r\n to?: Date;\r\n get fromAsDate(): Date | undefined {\r\n if (this.from) {\r\n if (!(this.from instanceof Date)) {\r\n this.from = new Date(this.from);\r\n }\r\n if (this.from) {\r\n return new Date(\r\n this.from.getFullYear(),\r\n this.from.getMonth(),\r\n this.from.getDate(),\r\n 2,\r\n 0,\r\n 0\r\n )\r\n }\r\n }\r\n return undefined;\r\n }\r\n get toAsDate(): Date {\r\n if (this.to) {\r\n if (!(this.to instanceof Date)) {\r\n this.to = new Date(this.to);\r\n }\r\n if (this.to) {\r\n return new Date(\r\n this.to.getFullYear(),\r\n this.to.getMonth(),\r\n this.to.getDate(),\r\n 2,\r\n 0,\r\n 0\r\n )\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n constructor(from?: Date, to?: Date) {\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n /**\r\n * Clear interval\r\n */\r\n clear() {\r\n this.from = undefined;\r\n this.to = undefined;\r\n }\r\n}\r\n\r\nexport interface LoginResult<T> extends ApiResult<boolean> {\r\n context: T;\r\n oauth?: number;\r\n requiresMfa?: boolean;\r\n}\r\n","import { HttpParams } from \"@angular/common/http\";\r\nimport { DateInterval } from './definitions';\r\nimport { format, parse, parseISO } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { TZDate } from '@date-fns/tz';\r\n\r\nexport interface INode {\r\n id: string;\r\n name?: string;\r\n count?: number;\r\n children?: INode[];\r\n subFolders?: INode[];\r\n parent?: INode;\r\n bag?: any\r\n}\r\n\r\n\r\nexport enum DateFormat {\r\n Short = 1, // dd/mm/yyyy\r\n Long = 2, // d mmmm yyyy\r\n LongWithShortMonth = 3, // d mmm yyyy\r\n LongWithWeekDay = 4, // wwww, d mmmm yyyy\r\n LongWithShortWeekDay = 5, // www, d mmmm yyyy\r\n MonthAndYear = 6, // mmm yyyy\r\n LongMonthAndYear = 7, // mmmm yyyy\r\n WeekDay = 8, // www d\r\n LongWeekDay = 9, // wwww d\r\n DayAndMonth = 10, // d mmmm\r\n ShortUS = 11, // mm/dd/yyyy\r\n ShortISO8601 = 12 // yyyy-mm-dd\r\n}\r\n\r\nexport interface PasswordStrength {\r\n score: number;\r\n label?: string;\r\n color?: string;\r\n suggestions?: string[];\r\n isValid: boolean;\r\n}\r\n\r\ninterface MarkdownListState {\r\n type: 'ul' | 'ol' | null;\r\n items: string[];\r\n}\r\n\r\nexport class SystemUtils {\r\n /**\r\n * Array find by key\r\n * @param array : the array to scan\r\n * @param key : key name\r\n * @param value : the value to search for\r\n * @returns : the property value or null\r\n */\r\n static arrayFindByKey<T>(array: T[] | undefined, key: string, value: any): T | undefined {\r\n if (!array) return undefined;\r\n for (const item of array) {\r\n if ((item as any)[key] === value) {\r\n return item;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Array find index by key\r\n * @param array : the array to scan\r\n * @param key : the key name\r\n * @param value : the value to search for\r\n * @returns : the array index or -1 if not found\r\n */\r\n static arrayFindIndexByKey<T>(array: T[] | undefined, key: string, value: any): number {\r\n if (!array) return -1;\r\n for (let i = 0; i < array.length; i++) {\r\n if ((array[i] as any)[key] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Get a value from and array made of name|value items\r\n * @param array : the array to scan\r\n * @param value : the value to search for\r\n * @returns : the property value or null if not found\r\n */\r\n static arrayGetValue<T>(array: T[] | undefined, value: any): any {\r\n if (!array) return undefined;\r\n for (var i = 0; i < array.length; i++) {\r\n const item = (array[i] as any);\r\n if (item.value === value) {\r\n return item.name || item.id;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Convert items to nodes into a tree structure\r\n * @param items : list of nodes\r\n * @param parent : parent node\r\n * @returns : an array of INode objects\r\n */\r\n static arrayToNodes(items: INode[], parent?: INode): INode[] {\r\n const nodes: INode[] = [];\r\n items.forEach(n => {\r\n const node: INode = {\r\n id: n.id.toString(),\r\n name: n.name,\r\n count: n.count ? n.count : 0,\r\n children: undefined,\r\n parent,\r\n bag: n,\r\n };\r\n nodes.push(node);\r\n node.children =\r\n n.children && n.children.length > 0\r\n ? this.arrayToNodes(n.children, node)\r\n : [];\r\n });\r\n return nodes;\r\n }\r\n\r\n /**\r\n * Used to copare items during an array of objects sorting\r\n * @param key : the property name to sort for\r\n * @param order : the order 'asc' or 'desc'\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static arraySortCompare(key: string, order: string = \"asc\") {\r\n const result = function innerSort(a: any, b: any) {\r\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\r\n // property doesn't exist on either object\r\n return 0;\r\n }\r\n const varA = typeof a[key] === \"string\" ? a[key].toUpperCase() : a[key];\r\n const varB = typeof b[key] === \"string\" ? b[key].toUpperCase() : b[key];\r\n let comparison = 0;\r\n if (varA > varB) comparison = 1;\r\n else if (varA < varB) comparison = -1;\r\n return order === \"desc\" ? comparison * -1 : comparison;\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * Format weight\r\n * @param gr : grams\r\n * @returns : the formatted string\r\n */\r\n static formatWeight(gr: number): string {\r\n if (gr > 1000000) return (gr / 1000000).toFixed(2) + \" t\";\r\n else if (gr > 100000) return (gr / 100000).toFixed(2) + \" q\";\r\n else if (gr > 1000) return (gr / 1000).toFixed(2) + \" kg\";\r\n else return gr + \" gr\";\r\n }\r\n\r\n /**\r\n * Format file size\r\n * @param bytes : number of bytes\r\n * @returns : the formatted string\r\n */\r\n static formatFileSize(bytes: number): string {\r\n if (bytes > 1024000) return (bytes / 1024000).toFixed(1) + \" MB\";\r\n if (bytes > 1024) return (bytes / 1024).toFixed(1) + \" Kb\";\r\n return bytes + \" byte\";\r\n }\r\n\r\n /**\r\n * Compare two string\r\n * @param a : string a\r\n * @param b : string b\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static compareString(a?: string, b?: string): number {\r\n if ((a ?? \"\").toLowerCase() > (b ?? \"\").toLowerCase()) return 1;\r\n if ((a ?? \"\").toLowerCase() < (b ?? \"\").toLowerCase()) return -1;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Capitalize a string\r\n * @param s : the string to capitalize\r\n * @returns : the capitalized string \r\n */\r\n static capitalize(s?: string): string | undefined {\r\n if (!s) return undefined;\r\n let b = \"\";\r\n let cap = true;\r\n for (const char of s) {\r\n if (char === \" \") {\r\n b += char;\r\n cap = true;\r\n } else if (cap) {\r\n b += char.toUpperCase();\r\n cap = false;\r\n } else {\r\n b += char.toLowerCase();\r\n }\r\n }\r\n return b;\r\n }\r\n\r\n /**\r\n * Truncate a string\r\n * @param s : the string to truncate\r\n * @param max : the max number of chars\r\n * @returns : the truncated string\r\n */\r\n static truncate(s?: string, max: number = 500): string | undefined {\r\n if (!s) return undefined;\r\n if (s.length < max) return s;\r\n let i = max - 1;\r\n while (i > 0) {\r\n if (s[i] === ' ') return s.slice(0, i);\r\n i--;\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Join a list of strings\r\n * @param items : the list of strings\r\n * @param sep : the separator string\r\n * @param max : the maximum resulting string\r\n * @returns : the joined string\r\n */\r\n static join(items?: string[], sep: string = \" \", max: number = 350): string | undefined {\r\n if (!items || items.length === 0) return undefined;\r\n if (items.length > 1) {\r\n let l = 0;\r\n let s = \"\"\r\n while (s.length < max && items.length > l) {\r\n if (l > 0) {\r\n s += sep;\r\n }\r\n s += items[l++];\r\n }\r\n if (items.length > l) {\r\n s += \"...\";\r\n }\r\n return s;\r\n }\r\n return items[0];\r\n }\r\n\r\n /**\r\n * Replace stuff in text html\r\n * @param s : the string to process\r\n * @returns : the replaced string \r\n */\r\n static replaceAsHtml(s?: string): string {\r\n if (!s) return undefined;\r\n const regex = /https?:\\/\\/.*[^\\s]/ig\r\n const m = regex.exec(s);\r\n if (m && m.length > 0) {\r\n let v = undefined;\r\n for (let i = 0; i < m.length; i++) {\r\n v = m[i];\r\n s = s.replace(v, '<a href=\"' + v + '\" target=\"_blank\">' + v + '</a>');\r\n }\r\n }\r\n return s;\r\n }\r\n\r\n\r\n\r\n\r\n /**\r\n * Convert markdown to html\r\n * @param markdown : the markdown data\r\n * @param escapeEntities : true to escape entities. Default is false\r\n * @returns the html\r\n */\r\n static markdownToHtml(markdown: string, escapeEntities: boolean = false): string {\r\n let html = markdown;\r\n\r\n //1. Escape HTML entities \r\n if (escapeEntities == true) {\r\n html = html.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n }\r\n\r\n // 2. Code blocks \r\n html = html.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (_match, lang, code) => {\r\n const langClass = lang ? ` class=\"language-${lang}\"` : '';\r\n return `<pre><code${langClass}>${code.trim()}</code></pre>`;\r\n });\r\n\r\n // 3. Inline code\r\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\r\n\r\n // 4. Headers \r\n html = html.replace(/^##### (.*$)/gim, '<h5>$1</h5>');\r\n html = html.replace(/^#### (.*$)/gim, '<h4>$1</h4>');\r\n html = html.replace(/^### (.*$)/gim, '<h3>$1</h3>');\r\n html = html.replace(/^## (.*$)/gim, '<h2>$1</h2>');\r\n html = html.replace(/^# (.*$)/gim, '<h1>$1</h1>');\r\n\r\n // 5. Horizontal rules\r\n html = html.replace(/^---+$/gim, '<hr>');\r\n html = html.replace(/^\\*\\*\\*+$/gim, '<hr>');\r\n\r\n // 6. Links \r\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\">$1</a>');\r\n\r\n // 7. Images\r\n html = html.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, '<img src=\"$2\" alt=\"$1\">');\r\n\r\n // 8. Bold e Italic \r\n html = html.replace(/\\*\\*\\*([^*]+)\\*\\*\\*/gim, '<strong><em>$1</em></strong>');\r\n html = html.replace(/___([^_]+)___/gim, '<strong><em>$1</em></strong>');\r\n html = html.replace(/\\*\\*([^*]+)\\*\\*/gim, '<strong>$1</strong>');\r\n html = html.replace(/__([^_]+)__/gim, '<strong>$1</strong>');\r\n html = html.replace(/\\*([^*]+)\\*/gim, '<em>$1</em>');\r\n html = html.replace(/_([^_]+)_/gim, '<em>$1</em>');\r\n\r\n // 9. Strikethrough\r\n html = html.replace(/~~([^~]+)~~/gim, '<del>$1</del>');\r\n\r\n // 10. Blockquotes\r\n html = html.replace(/^> (.*$)/gim, '<blockquote>$1</blockquote>');\r\n\r\n // 11. Tables\r\n html = this.markdownConvertTables(html);\r\n\r\n // 12. Lists \r\n html = this.markdownConvertLists(html);\r\n\r\n // 13. Line breaks\r\n html = html.replace(/ $/gm, '<br>');\r\n\r\n // 14. Paragrafi (ultimo step per non interferire con altri elementi)\r\n html = this.markdownConvertParagraphs(html);\r\n\r\n // 15. Clean up extra newlines\r\n html = html.replace(/\\`\\`\\`markdown/g, '');\r\n html = html.replace(/\\*\\*/g, '');\r\n html = html.replace(/\\n{3,}/g, '\\n\\n');\r\n \r\n\r\n return html.trim();\r\n }\r\n\r\n /**\r\n * Convert markdown table to html\r\n * @param markdown: the markdown string\r\n * @returns : the html\r\n */\r\n private static markdownConvertTables(markdown: string): string {\r\n const lines = markdown.split('\\n');\r\n const result: string[] = [];\r\n let inTable = false;\r\n let tableRows: string[] = [];\r\n let headerProcessed = false;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i].trim();\r\n if (line.includes('|') && line.length > 1) {\r\n const nextLine = i + 1 < lines.length ? lines[i + 1].trim() : '';\r\n const isHeaderSeparator = /^\\|?[\\s\\-:|]+\\|?$/.test(nextLine);\r\n if (!inTable) {\r\n inTable = true;\r\n headerProcessed = false;\r\n tableRows = [];\r\n }\r\n if (isHeaderSeparator && !headerProcessed) {\r\n tableRows.push(this.markdownConvertTableRow(line, true));\r\n headerProcessed = true;\r\n i++;\r\n } else if (!isHeaderSeparator) {\r\n tableRows.push(this.markdownConvertTableRow(line, false));\r\n }\r\n } else {\r\n if (inTable && tableRows.length > 0) {\r\n result.push('<table>');\r\n result.push(...tableRows);\r\n result.push('</table>');\r\n tableRows = [];\r\n inTable = false;\r\n }\r\n result.push(line);\r\n }\r\n }\r\n if (inTable && tableRows.length > 0) {\r\n result.push('<table>');\r\n result.push(...tableRows);\r\n result.push('</table>');\r\n }\r\n return result.join('\\n');\r\n }\r\n\r\n /**\r\n * Convert a markdown table row to html\r\n * @param row : the markdown row\r\n * @param isHeader : true if is header\r\n * @returns the html\r\n */\r\n private static markdownConvertTableRow(row: string, isHeader: boolean): string {\r\n const cells = row.split('|').map(cell => cell.trim()).filter(cell => cell !== '');\r\n const tag = isHeader ? 'th' : 'td';\r\n const cellsHtml = cells.map(cell => ` <${tag}>${cell}</${tag}>`).join('\\n');\r\n return ` <tr>\\n${cellsHtml}\\n </tr>`;\r\n }\r\n\r\n\r\n /**\r\n * Convert a markdown list to html\r\n * @param markdown : the markdown list\r\n * @returns the html\r\n */\r\n private static markdownConvertLists(markdown: string): string {\r\n markdown = markdown.replace(/^\\* (.*$)/gim, '<li data-type=\"ul\">$1</li>');\r\n markdown = markdown.replace(/^- (.*$)/gim, '<li data-type=\"ul\">$1</li>');\r\n markdown = markdown.replace(/^\\+ (.*$)/gim, '<li data-type=\"ul\">$1</li>');\r\n markdown = markdown.replace(/^\\d+\\. (.*$)/gim, '<li data-type=\"ol\">$1</li>');\r\n const lines = markdown.split('\\n');\r\n const result: string[] = [];\r\n let currentList: MarkdownListState = { type: null, items: [] };\r\n for (const line of lines) {\r\n const ulMatch = line.match(/^<li data-type=\"ul\">(.*)<\\/li>$/);\r\n const olMatch = line.match(/^<li data-type=\"ol\">(.*)<\\/li>$/);\r\n if (ulMatch) {\r\n if (currentList.type !== 'ul') {\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n }\r\n currentList = { type: 'ul', items: [ulMatch[1]] };\r\n } else {\r\n currentList.items.push(ulMatch[1]);\r\n }\r\n } else if (olMatch) {\r\n if (currentList.type !== 'ol') {\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n }\r\n currentList = { type: 'ol', items: [olMatch[1]] };\r\n } else {\r\n currentList.items.push(olMatch[1]);\r\n }\r\n } else {\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n currentList = { type: null, items: [] };\r\n }\r\n result.push(line);\r\n }\r\n }\r\n if (currentList.type && currentList.items.length > 0) {\r\n result.push(this.markdownWrapList(currentList.type, currentList.items));\r\n }\r\n return result.join('\\n');\r\n }\r\n\r\n /**\r\n * Wrap a list\r\n * @param type: the list type \r\n * @param items : the item list\r\n * @returns the html\r\n */\r\n private static markdownWrapList(type: 'ul' | 'ol', items: string[]): string {\r\n const listItems = items.map(item => ` <li>${item}</li>`).join('\\n');\r\n return `<${type}>\\n${listItems}\\n</${type}>`;\r\n }\r\n\r\n /**\r\n * Convert markdown paragraphs to html\r\n * @param markdown : the markdown paragraphs\r\n * @returns the html\r\n */\r\n private static markdownConvertParagraphs(markdown: string): string {\r\n const lines = markdown.split('\\n');\r\n const result: string[] = [];\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n if (!trimmed) {\r\n result.push('');\r\n continue;\r\n }\r\n if (trimmed.startsWith('<') && trimmed.endsWith('>')) {\r\n result.push(line);\r\n continue;\r\n }\r\n if (trimmed.startsWith('<') || trimmed.endsWith('>')) {\r\n result.push(line);\r\n continue;\r\n }\r\n result.push(`<p>${trimmed}</p>`);\r\n }\r\n return result.join('\\n');\r\n }\r\n\r\n\r\n\r\n /**\r\n * Compare two names\r\n * @param a : name a\r\n * @param b : name b\r\n * @returns : true if a equals b\r\n */\r\n static compareNames(a?: string, b?: string): boolean {\r\n if (a) a = a.trim();\r\n if (b) b = b.trim();\r\n if (a && b && a.length !== b.length) return false;\r\n if (this.compareString(a, b) === 0) return true;\r\n const p1 = a.split(\" \");\r\n const p2 = b.split(\" \");\r\n if (p1.length !== p2.length) return false;\r\n let matches = p1.length;\r\n for (const s1 of p1) {\r\n for (const s2 of p2) {\r\n if (this.compareString(s1, s2) === 0) {\r\n matches--;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return matches === 0;\r\n }\r\n\r\n /**\r\n * Cipher a text\r\n * @param text : the text\r\n * @param key : the key\r\n * @param reverse : true to decode, false to encode\r\n * @returns :the ciphered text\r\n */\r\n static cipher(text: string, key: string, reverse: boolean = false): string | undefined {\r\n // Surrogate pair limit\r\n var bound = 0x10000;\r\n\r\n // Create string from character codes\r\n return String.fromCharCode.apply(\r\n null,\r\n // Turn string to character codes\r\n text.split(\"\").map(function (v: any, i: number) {\r\n // Get rotation from key\r\n var rotation = key.charCodeAt(i % key.length);\r\n\r\n // Are we decrypting?\r\n if (reverse) rotation = -rotation;\r\n\r\n // Return current character code + rotation\r\n return (v.charCodeAt() + rotation + bound) % bound;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Clone an object using JSON\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static clone(obj: any): any | undefined {\r\n if (!obj) return undefined;\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n /**\r\n * Clone an object using deep cloning\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static deepClone<T>(obj: any, dest?: T): T {\r\n const cloneObj = dest ? dest : (obj.constructor() as any);\r\n const attributes = Object.keys(obj);\r\n for (const attribute of attributes) {\r\n const property = obj[attribute];\r\n if (typeof property === \"object\" && property != null) {\r\n cloneObj[attribute] = this.deepClone(property);\r\n } else {\r\n cloneObj[attribute] = property;\r\n }\r\n }\r\n return cloneObj;\r\n }\r\n\r\n\r\n /**\r\n * Check if a string is a valid UUID\r\n * @param value : the value to parse\r\n * @returns : true if is a valid UUID\r\n */\r\n static parseUUID(value?: string): boolean {\r\n const regex = /^({|()?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(}|))?$/;\r\n return value?.length > 0 && regex.test(value);\r\n }\r\n\r\n /**\r\n * Parse and ensure that UUID is not empty\r\n * @param value : the value to parse\r\n * @returns : true if valid and not empty\r\n */\r\n static parseUUIDNotEmpty(value?: string): boolean {\r\n const regex = /^({|()?0{8}-(0{4}-){3}0{12}(}|))?$/;\r\n return this.parseUUID(value) && !regex.test(value);\r\n }\r\n\r\n /**\r\n * Return an empty UUID\r\n * @returns : the empty UUID\r\n */\r\n static emptyUUID(): string { return \"00000000-0000-0000-0000-000000000000\" };\r\n\r\n /**\r\n * Create a new UUID\r\n * @returns : the string UUID\r\n */\r\n static generateUUID(): string {\r\n const regex = /[xy]/g;\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(regex, function (c) {\r\n var r = (Math.random() * 16) | 0,\r\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid email or null\r\n * @param value : email\r\n * @returns : true if the email is valid or empty\r\n */\r\n static parseEmail(value?: string): boolean {\r\n if (!value) return true;\r\n const regex = /(?:[a-z0-9+!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/gi\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid url or null\r\n * @param value : the url to parse\r\n * @returns : true if the url is valid or empty\r\n */\r\n static parseUrl(value?: string): boolean {\r\n if (!value) return true;\r\n const regex = new RegExp(\r\n \"(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?\"\r\n );\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Get date parts from a string value\r\n * @param value : the string to parse\r\n * @returns : an array of numbers with year, month, day\r\n */\r\n static getDateParts(value?: string): number[] | undefined {\r\n if (!value) return undefined;\r\n let parts: number[] = [];\r\n if (value.indexOf(\"-\") !== -1) {\r\n const p = value.split(\"-\");\r\n if (p.length !== 3) return undefined;\r\n parts = [parseInt(p[0]), parseInt(p[1]) - 1, parseInt(p[2])];\r\n } else if (value.indexOf(\"/\") !== -1) {\r\n const p = value.split(\"/\");\r\n if (p.length !== 3) return undefined;\r\n parts = [parseInt(p[2]), parseInt(p[1]) - 1, parseInt(p[0])];\r\n }\r\n return parts;\r\n }\r\n\r\n /**\r\n * Parse a date\r\n * @param value : the value to check\r\n * @param locale : the locale to use\r\n * @returns : a valid Date object or null\r\n */\r\n static parseDate(value?: string | Date, locale: any = it): Date | undefined {\r\n // No value at all\r\n if (!value) return undefined;\r\n // A Date value\r\n if (value instanceof Date && value.getTime()) return value;\r\n // Parse known formats using date-fns\r\n let d = parseISO(value as string);\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'dd/MM/yyyy', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'yyyy-MM-dd', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n // Parse values manually\r\n let parts = this.getDateParts(value as string);\r\n if (!parts) return undefined;\r\n if (parts[0] < 100) parts[0] += 2000;\r\n if (isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return undefined;\r\n if (isNaN(parts[1]) || parts[1] < 0) return undefined;\r\n if (isNaN(parts[2]) || parts[2] < 0) return undefined;\r\n if (parts[1] > 11) return undefined;\r\n if (parts[1] === 1 && parts[2] > 29) return undefined;\r\n else if (parts[1] !== 1 && parts[2] > 31) return undefined;\r\n return new TZDate(parts[0], parts[1], parts[2], 12);\r\n }\r\n\r\n /**\r\n * Format a date\r\n * @param value : the date or string to format\r\n * @param fmt : the DateFormat to use or the string pattern\r\n * @param locale : the locale to use (default is IT)\r\n * @returns : the formatted string\r\n */\r\n static formatDate(\r\n value?: Date | string,\r\n fmt: DateFormat | string = DateFormat.Short,\r\n locale: any = it): string {\r\n // No value at all\r\n if (!value) return undefined;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date \r\n if (!(value instanceof Date && value.getTime()))\r\n return undefined;\r\n // Format\r\n switch (fmt) {\r\n case DateFormat.Short: return format(value, \"dd/MM/yyyy\", { locale: locale });\r\n case DateFormat.Long: return format(value, \"d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortMonth: return format(value, \"d MMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithWeekDay: return format(value, \"EEEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortWeekDay: return format(value, \"EEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.MonthAndYear: return format(value, \"MMM yyyy\", { locale: locale });\r\n case DateFormat.LongMonthAndYear: return format(value, \"MMMM yyyy\", { locale: locale });\r\n case DateFormat.WeekDay: return format(value, \"EEE, d\", { locale: locale });\r\n case DateFormat.LongWeekDay: return format(value, \"EEEE, d\", { locale: locale });\r\n case DateFormat.DayAndMonth: return format(value, \"d MMMM\", { locale: locale });\r\n case DateFormat.ShortUS: return format(value, \"MM/dd/yyyy\", { locale: locale });\r\n case DateFormat.ShortISO8601: return format(value, \"yyyy-MM-dd\", { locale: locale });\r\n default:\r\n return format(value, fmt, { locale: locale });\r\n }\r\n }\r\n\r\n /**\r\n * Return an italian local date\r\n * @param value : the date\r\n * @returns : the new date\r\n */\r\n static toLocalDate(value?: Date | string): Date {\r\n // No value at all\r\n if (!value) return undefined;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date\r\n if (!(value instanceof Date && value.getTime())) return undefined;\r\n // Update date\r\n return new TZDate(value, \"Europe/Rome\");\r\n }\r\n\r\n /**\r\n * Update a DateInterval object according to a string\r\n * @param value : string value\r\n * @param interval : DateInterval value to update\r\n * @param end : true if must be updated the first or the end value \r\n * @param copy : copy the same value (works only if not end element)\r\n */\r\n static changeDateInterval(value: string, interval: DateInterval, end: boolean = false, copy: boolean = false) {\r\n if (value) {\r\n let year = -1;\r\n if (value.length === 4 && (year = parseInt(value)) > 1750) {\r\n if (!end) {\r\n interval.from = new TZDate(new Date(year, 0, 1), 'Europe/Rome');\r\n interval.to = new TZDate(new Date(year, 11, 31), 'Europe/Rome');\r\n } else\r\n interval.to = new Date(year, 11, 31);\r\n } else {\r\n let parts = this.getDateParts(value);\r\n if (!parts || isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return;\r\n const d = new TZDate(new Date(parts[0], parts[1], parts[2]), 'Europe/Rome');\r\n if (end)\r\n interval.to = d;\r\n else if (copy) {\r\n interval.from = d;\r\n interval.to = d;\r\n } else\r\n interval.from = d;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Encode url\r\n * @param value : the value to encode\r\n * @returns : the url encoded string\r\n */\r\n static urlEncode(value: string): string | undefined {\r\n return value?.length > 0\r\n ? encodeURIComponent(value)\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Decode url\r\n * @param value : the url to decode\r\n * @returns : the decode url string\r\n */\r\n static urlDecode(value?: string): string | undefined {\r\n const regex = /\\+/g;\r\n return value?.length > 0\r\n ? decodeURIComponent((value + \"\").replace(regex, \"%20\"))\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Get a querystring parameter value\r\n * @param name : the parameter name\r\n * @returns : the string value\r\n */\r\n static getQueryStringValueByName(name: string): string {\r\n if (!this.isBrowser()) return undefined;\r\n const url = window.location.href;\r\n if (url.includes(\"?\")) {\r\n const httpParams = new HttpParams({ fromString: url.split(\"?\")[1] });\r\n const v = decodeURIComponent(httpParams.get(name));\r\n if (v && v !== \"null\") return v;\r\n else return undefined;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Generate a password\r\n * @returns : the password string\r\n */\r\n static generatePassword(): string {\r\n const random = \"$\" + Math.random().toString(36).slice(-11);\r\n let password = \"\";\r\n let hasUpperCase = false;\r\n for (const rnd of random) {\r\n if (!hasUpperCase && \"abcdefghjilmnopqrstuvywxz\".includes(rnd)) {\r\n password += rnd.toUpperCase();\r\n hasUpperCase = true;\r\n } else {\r\n password += rnd;\r\n }\r\n }\r\n if (!hasUpperCase)\r\n password = password.substring(0, 11) + \"M\";\r\n return password;\r\n }\r\n\r\n /**\r\n * Calculate password strength\r\n * @param password: the password to evaluate\r\n * @returns the password strength info\r\n */\r\n static calculatePasswordStrength(password?: string): PasswordStrength {\r\n if (password?.length > 0) {\r\n let score = 0;\r\n const suggestions: string[] = [];\r\n\r\n // Length\r\n if (password.length >= 10) score++;\r\n else suggestions.push('Usa almeno 10 caratteri.');\r\n if (password.length >= 12) score++;\r\n else if (password.length >= 10) suggestions.push('Considera di usare più di 12 caratteri.');\r\n\r\n // Lowercase letters\r\n if (/[a-z]/.test(password)) score++;\r\n else suggestions.push('Aggiungi lettere minuscole.');\r\n\r\n // Uppercase letters\r\n if (/[A-Z]/.test(password)) score++;\r\n else suggestions.push('Aggiungi lettere maiuscole.');\r\n\r\n // Numbers\r\n if (/\\d/.test(password)) score++;\r\n else suggestions.push('Aggiungi numeri.');\r\n\r\n // Special characters\r\n if (/[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/.test(password)) score++;\r\n else suggestions.push('Aggiungi caratteri speciali (!@#$%^&*).');\r\n\r\n // Common patterns\r\n if (/(.)\\1{2,}/.test(password)) {\r\n score = Math.max(0, score - 1);\r\n suggestions.push('Evita di ripetere lo stesso carattere.');\r\n }\r\n if (/123|abc|qwe/i.test(password)) {\r\n score = Math.max(0, score - 1);\r\n suggestions.push('Evita sequenze comuni (123, abc, qwe).');\r\n }\r\n\r\n // Label and color\r\n let label: string;\r\n let color: string;\r\n let isValid: boolean;\r\n if (score <= 2) {\r\n label = 'Molto debole';\r\n color = '#f44336';\r\n isValid = false;\r\n } else if (score <= 3) {\r\n label = 'Debole';\r\n color = '#ff9800';\r\n isValid = false;\r\n } else if (score <= 4) {\r\n label = 'Media';\r\n color = '#ffc107';\r\n isValid = true;\r\n } else if (score <= 5) {\r\n label = 'Forte';\r\n color = '#8bc34a';\r\n isValid = true;\r\n } else {\r\n label = 'Molto forte';\r\n color = '#4caf50';\r\n isValid = true;\r\n }\r\n\r\n return {\r\n score: score,\r\n label: label,\r\n color: color,\r\n suggestions: suggestions,\r\n isValid: isValid\r\n };\r\n } else\r\n return {\r\n score: 0,\r\n isValid: false,\r\n suggestions: []\r\n };\r\n\r\n }\r\n\r\n\r\n /**\r\n * Check if current browser supports touch\r\n * @returns : true if the display is touchable\r\n */\r\n static isTouchable(): boolean {\r\n return (\r\n this.isBrowser() && (\r\n \"ontouchstart\" in window ||\r\n navigator.maxTouchPoints > 0)\r\n );\r\n }\r\n\r\n /**\r\n * This check will prevent 'window' logic to be executed\r\n * while executing the server rendering\r\n * @returns : true if using the browser\r\n */\r\n static isBrowser(): boolean {\r\n return typeof (window) !== 'undefined';\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the subfolders group or null to root\r\n * @returns : a node list\r\n */\r\n static toNodes(folders: INode[]): INode[] {\r\n return this._toNodes(folders, undefined);\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the children group or null to root\r\n * @param parent : the parent node\r\n * @returns : a node list \r\n */\r\n private static _toNodes(folders: INode[], parent?: INode): INode[] {\r\n const nodes: INode[] = [];\r\n folders.forEach((n: INode) => {\r\n const node: INode = {\r\n id: n.id,\r\n name: n.name,\r\n count: n.count,\r\n parent: parent,\r\n children: undefined,\r\n bag: n,\r\n };\r\n const children = n.children ?? n.subFolders ?? [];\r\n if (children.length > 0) {\r\n node.children = this._toNodes(n.children ?? n.subFolders, node);\r\n }\r\n nodes.push(node);\r\n });\r\n return nodes;\r\n }\r\n\r\n /**\r\n * Return the flags array to be used in selections\r\n * @param value : the new value\r\n * @param max: the max number of flags\r\n */\r\n static getFlags(value: number, max: number = 30): number[] {\r\n if (value) {\r\n let items: number[] = [];\r\n let v = 1;\r\n let m = 1 << max;\r\n while (v < m) {\r\n if ((value & v) === v) items.push(v);\r\n v = v << 1;\r\n }\r\n return items;\r\n } else return [];\r\n }\r\n\r\n /**\r\n * Check if a color is light or dark\r\n * @param color : the color\r\n * @param minimumLuminance : the lumimance to consider\r\n * @returns true if the color is light\r\n */\r\n static isColorLight(color: string, minimumLuminance: number = 186): boolean {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.style.color = color;\r\n document.body.appendChild(tempDiv);\r\n const rgb = getComputedStyle(tempDiv).color;\r\n document.body.removeChild(tempDiv);\r\n const result = rgb.match(/\\d+/g);\r\n if (!result || result.length < 3) return true; // fallback\r\n const r = parseInt(result[0], 10);\r\n const g = parseInt(result[1], 10);\r\n const b = parseInt(result[2], 10);\r\n const luminance = 0.299 * r + 0.587 * g + 0.114 * b;\r\n return luminance > minimumLuminance;\r\n }\r\n\r\n}\r\n","import { Directive, HostListener, OnDestroy, OnInit, input } from '@angular/core';\r\nimport { DateInterval } from '../definitions';\r\nimport { SystemUtils } from '../system';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject, Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[dateIntervalChange]',\r\n standalone: true,\r\n})\r\nexport class DateIntervalChangeDirective implements OnInit, OnDestroy {\r\n readonly dateIntervalChange = input<DateInterval>(new DateInterval(null, null));\r\n readonly end = input<boolean>(false);\r\n private subject = new Subject();\r\n private subscription: Subscription;\r\n\r\n ngOnInit() {\r\n this.subscription = this.subject\r\n .pipe(debounceTime(100))\r\n .subscribe((e: any) => { \r\n const value = (e.target as HTMLInputElement).value;\r\n SystemUtils.changeDateInterval(value, this.dateIntervalChange(), this.end(), e.key === ' ');\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n @HostListener('keyup', ['$event']) public onKeyup(e: KeyboardEvent): void {\r\n if (e.key === ' ') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n this.subject.next(event);\r\n\r\n }\r\n}","import {\r\n Directive,\r\n HostListener,\r\n Injectable,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Directive({\r\n selector: '[copyClipboard]',\r\n standalone: true\r\n})\r\nexport class CopyClipboardDirective {\r\n readonly payload = input<string>(undefined, { alias: \"copyClipboard\" });\r\n\r\n readonly copied = output<string>({ alias: 'copied' });\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(e: MouseEvent): void {\r\n e.preventDefault();\r\n if (!this.payload()) return;\r\n\r\n if (SystemUtils.isBrowser()) {\r\n let listener = (e: ClipboardEvent) => {\r\n let clipboard = e.clipboardData;\r\n const payload = this.payload();\r\n clipboard.setData('text/html', payload.toString());\r\n e.preventDefault();\r\n\r\n this.copied.emit(payload);\r\n };\r\n\r\n document.addEventListener('copy', listener, false);\r\n document.execCommand('copy');\r\n document.removeEventListener('copy', listener, false);\r\n }\r\n }\r\n}\r\n","import { Directive, forwardRef, input } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n} from \"@angular/forms\";\r\nimport { endOfDay } from 'date-fns';\r\nimport { Validated } from '../definitions';\r\nimport { SystemUtils } from \"../system\";\r\n\r\n\r\n@Directive({\r\n selector: '[validator]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true }],\r\n standalone: true,\r\n})\r\nexport class ValidatorDirective implements Validator {\r\n readonly validator = input<(control: AbstractControl) => ValidationErrors | null>(null);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.validator()(control);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[validIf]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => ValidIfDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class ValidIfDirective implements Validator {\r\n readonly validIf = input<boolean>(false);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = false;\r\n let c = control.value ? (control.value as Validated) : null;\r\n if (!c) isValid = this.validIf() === true;\r\n else {\r\n try {\r\n isValid = c.isValid();\r\n } catch { }\r\n }\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { validIf: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[equals]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EqualsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EqualsValidatorDirective implements Validator {\r\n readonly equals = input<AbstractControl>(null);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const isValid = this.equals().value === control.value;\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { equals: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[notEqual]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotEqualValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotEqualValidatorDirective implements Validator {\r\n\r\n readonly notEqual = input<AbstractControl>(null);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n\r\n const notEqual = this.notEqual();\r\n const isValid = (!notEqual.value && !control.value) || (notEqual.value !== control.value);\r\n const errors: ValidationErrors | null = isValid ? null : { 'notequal': true };\r\n\r\n // immediate show up\r\n const notEqualValue = this.notEqual();\r\n if (errors) {\r\n control.markAsTouched();\r\n } else if (notEqualValue.hasError('notequal')) {\r\n notEqualValue.setErrors({ 'notequal': null });\r\n notEqualValue.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n notEqualValue.markAsTouched();\r\n notEqualValue.markAsDirty();\r\n }\r\n return errors;\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[emails]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EmailsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EmailsValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = true;\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n var parts = input.replaceAll(/\\r\\n/g, \"\").split(\";\");\r\n for (var i = 0; i < parts.length; i++) {\r\n if (parts[i].length > 0) {\r\n if (!SystemUtils.parseEmail(parts[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (!isValid) {\r\n return { emails: \"Elenco non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[guid]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => GuidValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class GuidValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const isValid = SystemUtils.parseUUID(input);\r\n if (!isValid) {\r\n return { guid: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[sqlDate]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SqlDateValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class SqlDateValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d.getFullYear() > 1750;\r\n if (!isValid) {\r\n return { sqlDate: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[notFuture]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotFutureValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotFutureValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const today = endOfDay(new Date());\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d <= today;\r\n if (!isValid) {\r\n return { notFuture: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[url]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => UrlValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class UrlValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n const isValid = SystemUtils.parseUrl(input);\r\n if (!isValid) {\r\n return { url: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[fileSize]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => FileSizeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class FileSizeValidatorDirective implements Validator {\r\n readonly maxSizeMb = input<number>(5);\r\n readonly minSizeMb = input<number>(0);\r\n readonly size = input<number>(null);\r\n\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n const size = this.size();\r\n let s = size ? size : 0;\r\n if (!input) return null;\r\n const isValid = s <= this.maxSizeMb() && s >= this.minSizeMb();\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { fileSize: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[maxTerms]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => MaxTermsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\n\r\nexport class MaxTermsValidatorDirective implements Validator {\r\n readonly maxTerms = input<number>(0);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input) return null;\r\n const terms = input?.match(/\\S+/g)?.length ?? 0;\r\n const isValid = terms <= this.maxTerms();\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { maxTerms: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[password]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => PasswordValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class PasswordValidatorDirective implements Validator {\r\n\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value ?? '';\r\n const strength = SystemUtils.calculatePasswordStrength(input);\r\n if (!strength.isValid) {\r\n return { password: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[time]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => TimeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\n\r\nexport class TimeValidatorDirective implements Validator {\r\n readonly slots = input<string>(null);\r\n\r\n\r\n /**\r\n * Retrieve hours as a number from a time string (e: 12:00)\r\n * @param value : the time string\r\n * @returns the hours as a number or -1\r\n */\r\n private getTime(value: string): number | null {\r\n const p = value.split(':');\r\n if (p.length !== 2) return -1;\r\n const hh = parseInt(p[0]);\r\n if (hh < 0 || hh > 23) return -1;\r\n const mm = parseInt(p[1]);\r\n if (mm < 0 || hh > 59) return -1;\r\n return parseInt(p[0] + p[1]);\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n let isValid: boolean = false;\r\n const t = this.getTime(input);\r\n if (t !== -1) {\r\n const slotsValue = this.slots();\r\n if (slotsValue) {\r\n const slots = slotsValue.split('|');\r\n slots.forEach(s => {\r\n const t1 = this.getTime(s.substring(0, 5));\r\n const t2 = this.getTime(s.substring(6));\r\n if (t1 !== -1 && t2 !== -1 && t1 <= t && t2 >= t) {\r\n // Good\r\n isValid = true;\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n if (!isValid) {\r\n return { time: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[notEmpty]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotEmptyValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotEmptyValidatorDirective implements Validator {\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control?.value;\r\n if (!input || typeof input !== 'string' || input.length === 0) return null;\r\n const isValid = input.trim().length > 0;\r\n if (!isValid) {\r\n return { notEmpty: true };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { format } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'format',\r\n standalone: true\r\n})\r\nexport class FormatPipe implements PipeTransform {\r\n\r\n\r\n transform(\r\n value?: any | undefined,\r\n type: string = 'date',\r\n pattern: string = \"dd/MM/yyyy\"): string | undefined {\r\n if (value === undefined || value === null) return undefined;\r\n switch (type) {\r\n case 'D':\r\n case 'date':\r\n const d = SystemUtils.parseDate(value, it);\r\n if (d) return format(d, pattern, { locale: it });\r\n break;\r\n case 'C':\r\n case 'currency':\r\n return new Intl.NumberFormat('it-IT', { style: 'currency', currency: 'EUR' }).format(value ?? 0);\r\n case 'N':\r\n case 'number':\r\n return new Intl.NumberFormat('it-IT', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(value ?? 0);\r\n case 'N0':\r\n case 'number0':\r\n return new Intl.NumberFormat('it-IT', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value ?? 0);\r\n case 'P':\r\n case 'percentage':\r\n return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value ?? 0); \r\n }\r\n return undefined;\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'replace',\r\n standalone: true\r\n})\r\nexport class ReplacePipe implements PipeTransform {\r\n\r\n private sanitizer = inject(DomSanitizer);\r\n \r\n transform(value: string | undefined, regexValue: string, replaceValue: string): SafeHtml {\r\n if (!value) return undefined;\r\n if (regexValue === '\\n' && !replaceValue) {\r\n replaceValue = '<br>';\r\n }\r\n return this.sanitizer.bypassSecurityTrustHtml(value.replace(new RegExp(regexValue, 'g'), replaceValue));\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string ): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(value ?? '');\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeUrl',\r\n standalone: true\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value ?? '');\r\n }\r\n}\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'callback',\r\n pure: false,\r\n standalone: true\r\n})\r\nexport class SearchCallbackPipe implements PipeTransform {\r\n transform(items: any[] | undefined, callback: (item: any) => boolean): any {\r\n if (!items || !callback) {\r\n return items;\r\n }\r\n return items.filter(item => callback(item));\r\n }\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\nimport { SearchFilterMetadata } from '../definitions';\r\n\r\n// ---------------------------------------------------------------------------------\r\n// 2023.0921 aggiunto un campo opzionale di tipo SearchFilterMetadata per i conteggi\r\n//\r\n// - nel chiamante:\r\n// let items: Searchable[] = [...];\r\n// let myFilterText: string = 'testo del filtro';\r\n// const myFilterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\r\n// \r\n// <div *ngFor=\"let item of items | search:myFilterText:myFilterMetadata\">\r\n// <div>Totale: {{ myFilterMetadata.total }}, Filtrati: {{ myFilterMetadata.count }}</div>\r\n// ---------------------------------------------------------------------------------\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'search',\r\n standalone: true\r\n})\r\nexport class SearchFilterPipe implements PipeTransform {\r\n transform(items?: any[], value?: string, metadata?: SearchFilterMetadata): any {\r\n\r\n // se non vengono passati i metadati ne crea una copia locale per evitare gli if\r\n metadata = metadata || { total: 0, count: 0 };\r\n\r\n if (!items || !value) {\r\n return items;\r\n }\r\n let result = items.filter(item => {\r\n if (item) {\r\n if (item.searchBag)\r\n return item.searchBag.name\r\n .toLowerCase()\r\n .indexOf(value.toLowerCase()) !== -1;\r\n else return item.toLowerCase().indexOf(value.toLowerCase()) !== -1;\r\n }\r\n return null;\r\n });\r\n\r\n // aggiorna i conteggi\r\n metadata.total = items.length;\r\n metadata.count = result.length;\r\n\r\n return result;\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'formatHtml',\r\n standalone: true\r\n})\r\nexport class FormatHtmlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string ): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(value.replaceAll(/(?:\\r\\n|\\r|\\n)/g, '<br>') ?? '');\r\n }\r\n}\r\n","export const Breakpoints = {\r\n XXSmall: '(max-width: 349.98px)',\r\n XSmall: '(max-width: 599.98px)',\r\n Small: '(min-width: 600px) and (max-width: 959.98px)',\r\n SmallMedium: '(min-width: 600px) and (max-width: 1059.98px)', \r\n Medium: '(min-width: 960px) and (max-width: 1279.98px)',\r\n MediumLarge: '(min-width: 960px) and (max-width: 1459.98px)',\r\n Large: '(min-width: 1460px) and (max-width: 1919.98px)'\r\n};","export const UtilsMessages = {\r\n /**\r\n * Messages\r\n */\r\n\r\n\r\n // Select dialog\r\n UTILS_DIALOGS_SELECT_OPTIONS_CHANGED: '§utils-dialogs-select-options-changed'\r\n};\r\n","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { SystemUtils } from \"./system\";\r\nimport { EventEmitter } from '@angular/core';\r\n\r\nexport class SelectableModel<T, V> {\r\n\r\n changed: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n private _all: T[] = [];\r\n get all(): T[] {\r\n return this._all;\r\n }\r\n private _current: SelectionModel<T>;\r\n get current(): SelectionModel<T> {\r\n return this._current;\r\n }\r\n private _lookupFieldName: string;\r\n\r\n constructor(\r\n allowMultiSelect: boolean = true,\r\n lookupFieldName: string = \"id\"\r\n ) {\r\n this._current = new SelectionModel<T>(allowMultiSelect, []);\r\n this._all = [];\r\n this._lookupFieldName = lookupFieldName;\r\n }\r\n\r\n /**\r\n * Update the view of an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n updateCurrent(item: T, lookupValue: V) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n toggle(item: T, lookupValue?: V) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } else {\r\n this._all.splice(p, 1);\r\n }\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n select(item: T, lookupValue?: V) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } \r\n this._current.select(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Deselect an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n deselect(item: T, lookupValue?: V) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deselect all specified item lookup values\r\n * @param lookupValues : the values\r\n */\r\n deselectByValues(lookupValues: V[]) {\r\n if (!lookupValues || lookupValues.length === 0) return;\r\n lookupValues.forEach(n => {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n n\r\n );\r\n if (p != -1) {\r\n let item = this._all[p];\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear current view\r\n * @param clearFunc : the function used to clear\r\n */\r\n clearCurrent(clearFunc: any) {\r\n this._current.selected.forEach(n => {\r\n clearFunc(n);\r\n });\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Deselect all items\r\n */\r\n clear() {\r\n this._all = [];\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Checks if an item is selected using its lookup value\r\n * @param lookupValue : the value\r\n * @returns : true if the value is selected\r\n */\r\n isSelected(lookupValue?: V): boolean {\r\n return (lookupValue &&\r\n SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n ) != -1\r\n );\r\n }\r\n\r\n /**\r\n * Checks if a selection exists\r\n * @returns : true if at least one selection exists\r\n */\r\n hasValue(): boolean {\r\n return this._all.length > 0;\r\n }\r\n}\r\n","/**\r\n * Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\n\r\nimport { Subject } from 'rxjs';\r\n\r\n/**\r\n * The message bag sent as a message\r\n */\r\nexport interface BroadcastChannelMessageBag<T> {\r\n messageId: string;\r\n sender: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * Message subscription params\r\n */\r\nexport interface BroadcastChannelSubscriberInfo<T> {\r\n messageId: string;\r\n action: (bag: BroadcastChannelMessageBag<T>) => void;\r\n}\r\n\r\n/**\r\n * Web Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\nexport class BroadcastChannelManager {\r\n private channel?: BroadcastChannel;\r\n private subject = new Subject<BroadcastChannelMessageBag<any>>();\r\n private subscriptions: BroadcastChannelSubscriberInfo<any>[] = [];\r\n\r\n /**\r\n * Get the current channel registration\r\n */\r\n public get currentBus(): string | undefined {\r\n return this.channel?.name;\r\n }\r\n\r\n constructor(bus: string = \"ARS-CHANNEL\") {\r\n if ('BroadcastChannel' in window) {\r\n this.channel = new BroadcastChannel(bus);\r\n\r\n this.channel.onmessageerror = (e: any) => {\r\n console.error('[BroadcastChannelManager] Errore di ricezione del messaggio', e);\r\n };\r\n\r\n this.channel.onmessage = (e: MessageEvent) => {\r\n this.subject.next(e.data);\r\n const bag: BroadcastChannelMessageBag<any> | undefined = e.data as BroadcastChannelMessageBag<any>;\r\n if (bag) {\r\n const bagInfo: BroadcastChannelSubscriberInfo<any> | undefined = this.subscriptions.find(m => m.messageId === bag.messageId);\r\n bagInfo?.action(bag);\r\n }\r\n }\r\n } else {\r\n console.error('[BroadcastChannelManager] Non supportato');\r\n }\r\n }\r\n\r\n dispose(): void {\r\n setTimeout(() => {\r\n this.subscriptions = [];\r\n this.channel?.close();\r\n this.channel = undefined;\r\n this.subject.complete();\r\n }, 1000);\r\n }\r\n\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n *\r\n * @example\r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value });\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>): void;\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n * @param delay The number of milliseconds to wait before sending the message, see also {@link setTimeout}\r\n *\r\n * @example\r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value }, 250);\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>, delay?: number): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n *\r\n * @example\r\n * channel.sendMessage('my-broadcast-message', value);\r\n */\r\n sendMessage<T>(messageId: string, data?: T): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n * @param delay The number of milliseconds to wait before sending the message\r\n *\r\n * @example\r\n * channel.sendMessage('my-broadcast-message', value, 250);\r\n */\r\n sendMessage<T>(messageId: string, data?: T, delay?: number): void;\r\n\r\n /**\r\n * overloads\r\n */\r\n sendMessage<T>(messageIdorBag: string | BroadcastChannelMessageBag<T>, dataOrDelay?: T | number, delay?: number) {\r\n setTimeout(() => {\r\n if (typeof messageIdorBag === 'string') {\r\n this.channel?.postMessage({ messageId: messageIdorBag, data: dataOrDelay } as BroadcastChannelMessageBag<T>);\r\n } else {\r\n this.channel?.postMessage(messageIdorBag as BroadcastChannelMessageBag<T>);\r\n }\r\n }, (typeof dataOrDelay === 'number' ? dataOrDelay : delay) ?? 0);\r\n }\r\n\r\n /**\r\n * Subscribe to a message\r\n * @param args The subscription info, see also {@link BroadcastChannelSubscriberInfo}\r\n */\r\n subscribe<T>(args: BroadcastChannelSubscriberInfo<T>) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === args.messageId);\r\n if (i === -1) {\r\n this.subscriptions.push(args);\r\n } else {\r\n this.subscriptions[i].action = args.action;\r\n }\r\n }\r\n\r\n /**\r\n * Remove a message subscription\r\n * @param messageId The message id\r\n */\r\n unsubscribe(messageId: string) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === messageId);\r\n if (i !== -1) {\r\n this.subscriptions.splice(i, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Remove all the current subscriptions\r\n */\r\n unsubscribeAll() {\r\n this.subscriptions = [];\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { BroadcastChannelManager, BroadcastChannelMessageBag } from './broadcastChannelManager';\r\n\r\nexport interface BroadcastMessageInfo {\r\n id: string;\r\n data?: any;\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BroadcastService implements OnDestroy {\r\n private subject = new Subject<BroadcastMessageInfo>();\r\n private channel = new BroadcastChannelManager(\"ARS-CHANNEL\");\r\n\r\n /**\r\n * Get a new instance of broadcast channel\r\n */\r\n static GetChannel(): BroadcastChannelManager {\r\n return new BroadcastChannelManager(\"ARS-CHANNEL\");\r\n }\r\n\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.channel?.dispose();\r\n }\r\n\r\n /**\r\n * Send a message\r\n * @param id : the message id\r\n * @param data : the data to send\r\n * @param delay : the number of milliseconds to wait before sending the message\r\n */\r\n sendMessage(id: string, data: any = undefined, delay: number = 0) {\r\n setTimeout(() => {\r\n this.subject.next({ id: id, data: data } as BroadcastMessageInfo);\r\n }, delay);\r\n }\r\n\r\n /**\r\n * Send a channel message\r\n * @param id : the message bag\r\n * @param data : the data bag\r\n * @param delay : the number of milliseconds to wait before sending the message\r\n */\r\n sendChannelMessage<T>(id: string, data?: T, delay?: number) {\r\n setTimeout(() => {\r\n this.channel.sendMessage(id, data, delay);\r\n }, delay);\r\n }\r\n\r\n /**\r\n * Subscribe channel message\r\n * @param id : the message id\r\n * @param action : the actionto perform\r\n */\r\n subscribeChannelMessage<T>(id: string, action: (bag: BroadcastChannelMessageBag<T>) => void) {\r\n this.channel.subscribe({ messageId: id, action: action });\r\n }\r\n\r\n /**\r\n * Get the next message as observable\r\n * @returns : the observable object\r\n */\r\n getMessage(): Observable<BroadcastMessageInfo> {\r\n return this.subject.asObservable();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnvironmentService {\r\n \r\n private _appUri: string = '';\r\n get appUri() {\r\n return this._appUri;\r\n }\r\n set appUri(value: string) {\r\n this._appUri = value;\r\n }\r\n\r\n private _appServiceUri: string = '';\r\n get appServiceUri() {\r\n return this._appServiceUri;\r\n }\r\n set appServiceUri(value: string) {\r\n this._appServiceUri = value;\r\n }\r\n\r\n private _appLoginRedirectUri: string = '';\r\n get appLoginRedirectUri() {\r\n return this._appLoginRedirectUri ?? this._appUri;\r\n }\r\n set appLoginRedirectUri(value: string) {\r\n this._appLoginRedirectUri = value;\r\n }\r\n\r\n private _appServiceLoginUri: string = '';\r\n get appServiceLoginUri() {\r\n return this._appServiceLoginUri ?? this._appServiceUri;\r\n }\r\n set appServiceLoginUri(value: string) {\r\n this._appServiceLoginUri = value;\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScreenService {\r\n public mq = signal<string>(\"\");\r\n \r\n get isTouchable(): boolean {\r\n return SystemUtils.isTouchable();\r\n }\r\n get isIEOrEdge(): boolean {\r\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\r\n }\r\n\r\n}\r\n","import { computed, inject, Injectable, OnDestroy, RendererFactory2, Signal, signal } from \"@angular/core\";\r\nimport { BroadcastChannelManager, BroadcastChannelMessageBag } from './broadcastChannelManager';\r\nimport { BehaviorSubject, Observable } from \"rxjs\";\r\n\r\n\r\n/**\r\n * Kind of themes: system default, light or dark\r\n */\r\nexport type ThemeType = 'auto' | 'light' | 'dark';\r\n\r\n/**\r\n * Available themes' schema\r\n */\r\ninterface ThemeInfoRecord {\r\n icon: string;\r\n name: string;\r\n next: ThemeType;\r\n tooltip: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n\r\n // messaggi broadcast\r\n private readonly broadcastChannel = new BroadcastChannelManager('THEME-SERVICE');\r\n private readonly broadcastMessage: string = '$theme-changed';\r\n\r\n // per intercettare il cambio di tema a livello di sistema\r\n private readonly prefersColorSchemeMediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\r\n\r\n /**\r\n * Theme changed e.\r\n * Notify the consuming component about the incoming theme change.\r\n * @example \r\n * // React to theme changes\r\n * this.themeService.themeChanged\r\n * .pipe(takeUntil(this.unsubscribe))\r\n * .subscribe((value: ThemeType) => {\r\n * // do the job done....\r\n * });\r\n */\r\n private themeChanged = new BehaviorSubject<ThemeType>('auto');\r\n // espone al consumatore un'observable\r\n public changed: Observable<ThemeType> = this.themeChanged.asObservable();\r\n\r\n private renderFactory2 = inject(RendererFactory2);\r\n private renderer = this.renderFactory2.createRenderer(null, null);\r\n\r\n /**\r\n * Current theme\r\n */\r\n private readonly theme = signal<ThemeType>(\"light\");\r\n /**\r\n * The current theme is \"System default\"\r\n */\r\n private readonly auto: Signal<boolean> = computed(() => this.theme() === 'auto');\r\n\r\n /**\r\n * Configuration schema about the icon, the text and the toggle() sequence\r\n */\r\n private readonly themeInfo: Record<ThemeType, ThemeInfoRecord> = {\r\n ['auto']: { icon: 'routine', name: 'Tema di sistema', next: 'light', tooltip: 'Passa a tema chiaro', },\r\n ['light']: { icon: 'light_mode', name: 'Tema chiaro', next: 'dark', tooltip: 'Passa a tema scuro', },\r\n ['dark']: { icon: 'dark_mode', name: 'Tema scuro', next: 'auto', tooltip: 'Passa a tema di sistema', },\r\n };\r\n\r\n /**\r\n * Icon of the current theme (mat-icon code)\r\n */\r\n public readonly themeIcon: Signal<string> = computed(() => this.themeInfo[this.theme()].icon);\r\n /**\r\n * Current theme name\r\n */\r\n public readonly themeName: Signal<string> = computed(() => this.themeInfo[this.theme()].name);\r\n /**\r\n * Tooltip text on toggle \r\n */\r\n public readonly toggleTooltip: Signal<string> = computed(() => this.themeInfo[this.theme()].tooltip);\r\n\r\n /**\r\n * Initialize\r\n */\r\n initialize(theme: ThemeType = this.getPreferredTheme()) {\r\n // React to current theme\r\n this.prefersColorSchemeMediaQueryList.onchange = (_: MediaQueryListEvent) => this.auto() ? this.setTheme(theme) : null;\r\n\r\n // Support boradcast channel messaging\r\n this.broadcastChannel.subscribe<ThemeType>({\r\n messageId: this.broadcastMessage,\r\n action: (bag: BroadcastChannelMessageBag<ThemeType>) => {\r\n if (this.theme() !== bag.data) {\r\n this.setTheme(bag.data);\r\n }\r\n }\r\n });\r\n\r\n // Load theme\r\n this.setTheme(theme);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.broadcastChannel.dispose();\r\n }\r\n\r\n /**\r\n * Get the current preferred theme\r\n */\r\n private getPreferredTheme(): ThemeType {\r\n let theme: ThemeType = localStorage.getItem(\"preferred-theme\") as ThemeType;\r\n if (!this.isTheme(theme)) {\r\n theme = 'auto';\r\n }\r\n return theme;\r\n }\r\n\r\n /**\r\n * Check if a value string is a theme type\r\n * @param value : th string value\r\n * @returns true if the the value is a valid theme type\r\n */\r\n private isTheme(value: string): value is ThemeType {\r\n return ['auto', 'light', 'dark'].includes(value);\r\n }\r\n\r\n\r\n /**\r\n * Set the new theme\r\n * @param theme the new theme\r\n */\r\n private setTheme(theme: ThemeType = 'auto') {\r\n this.renderer.removeClass(document.body, 'light');\r\n this.renderer.removeClass(document.body, 'dark');\r\n this.theme.set(theme);\r\n localStorage.setItem(\"preferred-theme\", this.theme());\r\n this.renderer.addClass(document.body, this.auto() ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\") : theme);\r\n // Notify that current theme has changed\r\n this.themeChanged.next(this.getTheme());\r\n this.broadcastChannel.sendMessage(this.broadcastMessage, this.theme());\r\n }\r\n\r\n /**\r\n * Toggle theme\r\n */\r\n public toggleTheme(): void {\r\n this.setTheme(this.themeInfo[this.theme()].next);\r\n }\r\n\r\n /**\r\n * Get current real theme: light or dark\r\n */\r\n public getTheme(): ThemeType {\r\n return (\r\n this.auto()\r\n ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\")\r\n : this.getPreferredTheme());\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { AutoFocusDirective } from './directives/autoFocusDirective';\r\nimport { DateIntervalChangeDirective } from './directives/changeDateIntervalDirective';\r\nimport { CopyClipboardDirective } from './directives/copyClipboardDirective';\r\nimport { EmailsValidatorDirective, EqualsValidatorDirective, FileSizeValidatorDirective, GuidValidatorDirective, MaxTermsValidatorDirective, NotEmptyValidatorDirective, NotFutureValidatorDirective, PasswordValidatorDirective, SqlDateValidatorDirective, UrlValidatorDirective, ValidIfDirective, ValidatorDirective } from './directives/validators';\r\nimport { FormatPipe } from './pipes/format.pipe';\r\nimport { ReplacePipe } from './pipes/replace.pipe';\r\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { SearchCallbackPipe } from './pipes/search-callback.pipe';\r\nimport { SearchFilterPipe } from './pipes/search-filter.pipe';\r\nimport { FormatHtmlPipe } from './pipes/format-html.pipe';\r\n\r\n@NgModule({\r\n imports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n NotEmptyValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n FormatHtmlPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective,\r\n MaxTermsValidatorDirective\r\n ],\r\n exports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n NotEmptyValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n FormatHtmlPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective,\r\n MaxTermsValidatorDirective\r\n ],\r\n providers: [\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n FormatHtmlPipe\r\n ]\r\n})\r\nexport class ArsCoreModule { }\r\n\r\nexport * from './definitions';\r\nexport * from './breakpoints';\r\nexport * from './messages';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\nexport * from './services/theme.service';\r\nexport * from './system';\r\n\r\n","import { inject, Injectable, NgModule } from '@angular/core';\r\nimport { DateAdapter, MatDateFormats, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { TZDate } from '@date-fns/tz';\r\nimport {\r\n Locale,\r\n getMonth,\r\n getYear,\r\n getDate,\r\n getDay,\r\n getDaysInMonth,\r\n formatISO,\r\n addYears,\r\n addMonths,\r\n addDays,\r\n isValid,\r\n isDate,\r\n format,\r\n parseISO,\r\n parse,\r\n} from 'date-fns';\r\n\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n const valuesArray = Array(length);\r\n for (let i = 0; i < length; i++) {\r\n valuesArray[i] = valueFunction(i);\r\n }\r\n return valuesArray;\r\n}\r\n\r\n// date-fns doesn't have a way to read/print month names or days of the week directly,\r\n// so we get them by formatting a date with a format that produces the desired month/day.\r\nconst MONTH_FORMATS = {\r\n long: 'LLLL',\r\n short: 'LLL',\r\n narrow: 'LLLLL',\r\n};\r\n\r\nconst DAY_OF_WEEK_FORMATS = {\r\n long: 'EEEE',\r\n short: 'EEE',\r\n narrow: 'EEEEE',\r\n};\r\n\r\nexport const MAT_DATE_FNS_FORMATS: MatDateFormats = {\r\n parse: {\r\n dateInput: 'P',\r\n },\r\n display: {\r\n dateInput: 'P',\r\n monthYearLabel: 'LLL uuuu',\r\n dateA11yLabel: 'PP',\r\n monthYearA11yLabel: 'LLLL uuuu',\r\n },\r\n};\r\n\r\n\r\n\r\n/** Adds date-fns support to Angular Material. */\r\n@Injectable()\r\nexport class DateFnsAdapter extends DateAdapter<Date, Locale> {\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n const matDateLocale = inject(MAT_DATE_LOCALE, { optional: true });\r\n this.setLocale(matDateLocale as Locale);\r\n }\r\n\r\n getYear(date: Date): number {\r\n return getYear(date);\r\n }\r\n\r\n getMonth(date: Date): number {\r\n return getMonth(date);\r\n }\r\n\r\n getDate(date: Date): number {\r\n return getDate(date);\r\n }\r\n\r\n getDayOfWeek(date: Date): number {\r\n return getDay(date);\r\n }\r\n\r\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = MONTH_FORMATS[style];\r\n return range(12, i => this.format(new Date(2017, i, 1), pattern));\r\n }\r\n\r\n getDateNames(): string[] {\r\n const dtf =\r\n typeof Intl !== 'undefined'\r\n ? new Intl.DateTimeFormat(this.locale.code, {\r\n day: 'numeric',\r\n timeZone: 'utc',\r\n })\r\n : null;\r\n\r\n return range(31, i => {\r\n if (dtf) {\r\n // date-fns doesn't appear to support this functionality.\r\n // Fall back to `Intl` on supported browsers.\r\n const date = new Date();\r\n date.setUTCFullYear(2017, 0, i + 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n return dtf.format(date).replace(/[\\u200e\\u200f]/g, '');\r\n }\r\n\r\n return i + '';\r\n });\r\n }\r\n\r\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = DAY_OF_WEEK_FORMATS[style];\r\n return range(7, i => this.format(new Date(2017, 0, i + 1), pattern));\r\n }\r\n\r\n getYearName(date: Date): string {\r\n return this.format(date, 'y');\r\n }\r\n\r\n getFirstDayOfWeek(): number {\r\n return this.locale.options?.weekStartsOn ?? 0;\r\n }\r\n\r\n getNumDaysInMonth(date: Date): number {\r\n return getDaysInMonth(date);\r\n }\r\n\r\n clone(date: Date): Date {\r\n return new Date(date.getTime());\r\n }\r\n\r\n createDate(year: number, month: number, date: number): Date {\r\n\r\n // Check for invalid month and date (except upper bound on date which we have to check after\r\n // creating the Date).\r\n if (month < 0 || month > 11) {\r\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n }\r\n\r\n if (date < 1) {\r\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n }\r\n\r\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\r\n // To work around this we use `setFullYear` and `setHours` instead.\r\n const result = new Date();\r\n result.setFullYear(year, month, date);\r\n result.setHours(0, 0, 0, 0);\r\n const result2 = new TZDate(result, \"Europe/Rome\");\r\n \r\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n if (result2.getMonth() != month) {\r\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n }\r\n\r\n return result2;\r\n }\r\n\r\n today(): Date {\r\n return new Date();\r\n }\r\n\r\n parse(value: any, parseFormat: string | string[]): Date | null {\r\n if (typeof value == 'string' && value.length > 0) {\r\n let iso8601Date = parseISO(value);\r\n if (this.isValid(iso8601Date)) {\r\n iso8601Date = new TZDate(iso8601Date, \"Europe/Rome\");\r\n return iso8601Date;\r\n }\r\n\r\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n if (!parseFormat.length) {\r\n throw Error('Formats array must not be empty.');\r\n }\r\n\r\n for (const currentFormat of formats) {\r\n let fromFormat = parse(value, currentFormat, new Date(), { locale: this.locale });\r\n if (this.isValid(fromFormat)) {\r\n fromFormat = new TZDate(fromFormat, \"Europe/Rome\");\r\n return fromFormat;\r\n }\r\n }\r\n\r\n return this.invalid();\r\n } else if (typeof value === 'number') {\r\n return new Date(value);\r\n } else if (value instanceof Date) {\r\n return this.clone(value);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n format(date: Date, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n throw Error('DateFnsAdapter: Cannot format invalid date.');\r\n }\r\n\r\n return format(date, displayFormat, { locale: this.locale });\r\n }\r\n\r\n addCalendarYears(date: Date, years: number): Date {\r\n return addYears(date, years);\r\n }\r\n\r\n addCalendarMonths(date: Date, months: number): Date {\r\n return addMonths(date, months);\r\n }\r\n\r\n addCalendarDays(date: Date, days: number): Date {\r\n return addDays(date, days);\r\n }\r\n\r\n toIso8601(date: Date): string {\r\n return formatISO(date, { representation: 'date' });\r\n }\r\n\r\n /**\r\n * Returns the given value if given a valid Date or undefined. Deserializes valid ISO 8601 strings\r\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into undefined. Returns an\r\n * invalid date for all other values.\r\n */\r\n override deserialize(value: any): Date | null {\r\n if (typeof value === 'string') {\r\n if (!value) {\r\n return null;\r\n }\r\n const date = parseISO(value);\r\n if (this.isValid(date)) {\r\n return date;\r\n }\r\n }\r\n return super.deserialize(value);\r\n }\r\n\r\n isDateInstance(obj: any): boolean {\r\n return isDate(obj);\r\n }\r\n\r\n isValid(date: Date): boolean {\r\n return isValid(date);\r\n }\r\n\r\n invalid(): Date {\r\n return new Date(NaN);\r\n }\r\n}\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: DateAdapter,\r\n useClass: DateFnsAdapter,\r\n deps: [MAT_DATE_LOCALE],\r\n },\r\n { provide: MAT_DATE_FORMATS, useValue: MAT_DATE_FNS_FORMATS }\r\n ],\r\n})\r\nexport class ArsDateFnsModule { }","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[removeFocus]'\r\n})\r\nexport class RemoveFocusDirective {\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(_event: Event): void {\r\n // Controllo null safety\r\n if (this.elementRef?.nativeElement && typeof this.elementRef.nativeElement.blur === 'function') {\r\n // Piccolo delay per permettere al click di completarsi\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.blur();\r\n }, 0);\r\n }\r\n }\r\n}","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { SystemUtils } from '../system';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'formatMarkdown',\r\n standalone: true\r\n})\r\nexport class FormatMarkdownPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value?: string ): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n SystemUtils.markdownToHtml(value ?? ''));\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './core.module';\r\nexport * from './dateFnsAdapter.module';\r\nexport * from './directives/changeDateIntervalDirective';\r\nexport * from './directives/copyClipboardDirective';\r\nexport * from './directives/autoFocusDirective';\r\nexport * from './directives/removeFocusDirective';\r\nexport * from './directives/validators';\r\nexport * from './pipes/search-filter.pipe';\r\nexport * from './pipes/search-callback.pipe';\r\nexport * from './pipes/safe-url.pipe';\r\nexport * from './pipes/safe-html.pipe';\r\nexport * from './pipes/replace.pipe';\r\nexport * from './pipes/format.pipe';\r\nexport * from './pipes/format-html.pipe';\r\nexport * from './pipes/format-markdown.pipe';\r\nexport * from './system';\r\nexport * from './definitions';\r\nexport * from './breakpoints';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/broadcastChannelManager';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}