UNPKG

@indice/ng-components

Version:

Indice common components for Angular v18

1 lines 510 kB
{"version":3,"file":"indice-ng-components.mjs","sources":["../../../projects/ng-components/src/lib/directives/click-outside.directive.ts","../../../projects/ng-components/src/lib/controls/drop-down-menu/drop-down-menu.component.ts","../../../projects/ng-components/src/lib/controls/drop-down-menu/drop-down-menu.component.html","../../../projects/ng-components/src/lib/icons.ts","../../../projects/ng-components/src/lib/types.ts","../../../projects/ng-components/src/lib/controls/pager/pager.component.ts","../../../projects/ng-components/src/lib/controls/pager/pager.component.html","../../../projects/ng-components/src/lib/controls/breadcrumb/breadcrumb-item.ts","../../../projects/ng-components/src/lib/tokens.ts","../../../projects/ng-components/src/lib/services/utilities.service.ts","../../../projects/ng-components/src/lib/services/breadcrumb.service.ts","../../../projects/ng-components/src/lib/controls/breadcrumb/breadcrumb.component.ts","../../../projects/ng-components/src/lib/controls/breadcrumb/breadcrumb.component.html","../../../projects/ng-components/src/lib/controls/list-view/list-column.component.ts","../../../projects/ng-components/src/lib/controls/list-view/list-tile.component.ts","../../../projects/ng-components/src/lib/controls/list-view/list-details-section.component.ts","../../../projects/ng-components/src/lib/controls/advanced-search/models.ts","../../../projects/ng-components/src/lib/controls/date-picker/date-picker.component.ts","../../../projects/ng-components/src/lib/controls/date-picker/date-picker.component.html","../../../projects/ng-components/src/lib/controls/advanced-search/advanced-search.component.ts","../../../projects/ng-components/src/lib/controls/advanced-search/advanced-search.component.html","../../../projects/ng-components/src/lib/controls/list-view/list-view-empty-state.component.ts","../../../projects/ng-components/src/lib/controls/list-view/list-view-empty-state.component.html","../../../projects/ng-components/src/lib/controls/skeleton-loader/skeleton-loader.component.ts","../../../projects/ng-components/src/lib/controls/skeleton-loader/skeleton-loader.component.html","../../../projects/ng-components/src/lib/controls/list-view/list-view.component.ts","../../../projects/ng-components/src/lib/controls/list-view/list-view.component.html","../../../projects/ng-components/src/lib/controls/collapsible-panel/collapsible-panel.component.ts","../../../projects/ng-components/src/lib/controls/collapsible-panel/collapsible-panel.component.html","../../../projects/ng-components/src/lib/controls/kpi-tile/kpi-tile.component.ts","../../../projects/ng-components/src/lib/controls/kpi-tile/kpi-tile.component.html","../../../projects/ng-components/src/lib/services/toaster.service.ts","../../../projects/ng-components/src/lib/controls/toaster/toaster.component.ts","../../../projects/ng-components/src/lib/controls/toaster/toaster.component.html","../../../projects/ng-components/src/lib/controls/toaster/toaster-container.component.ts","../../../projects/ng-components/src/lib/controls/toaster/toaster-container.component.html","../../../projects/ng-components/src/lib/controls/avatar-initials/avatar-initials.component.ts","../../../projects/ng-components/src/lib/controls/avatar-initials/avatar-initials.component.html","../../../projects/ng-components/src/lib/controls/toggle/toggle.component.ts","../../../projects/ng-components/src/lib/controls/toggle/toggle.component.html","../../../projects/ng-components/src/lib/controls/side-pane/side-pane.component.ts","../../../projects/ng-components/src/lib/controls/side-pane/side-pane.component.html","../../../projects/ng-components/src/lib/controls/nav-links-list/nav-links-list.component.ts","../../../projects/ng-components/src/lib/controls/nav-links-list/nav-links-list.component.html","../../../projects/ng-components/src/lib/controls/combobox/combobox.component.ts","../../../projects/ng-components/src/lib/controls/combobox/combobox.component.html","../../../projects/ng-components/src/lib/controls/enhanced-combobox/enhanced-combobox.component.ts","../../../projects/ng-components/src/lib/controls/enhanced-combobox/enhanced-combobox.component.html","../../../projects/ng-components/src/lib/controls/tabs/lib-tab-label.directive.ts","../../../projects/ng-components/src/lib/controls/tabs/lib-tab.component.ts","../../../projects/ng-components/src/lib/controls/tabs/lib-tab-group.component.ts","../../../projects/ng-components/src/lib/controls/tabs/lib-tab-group.component.html","../../../projects/ng-components/src/lib/controls/stepper/lib-step-info.directive.ts","../../../projects/ng-components/src/lib/controls/stepper/lib-step-label.directive.ts","../../../projects/ng-components/src/lib/controls/stepper/lib-step.component.ts","../../../projects/ng-components/src/lib/controls/stepper/types/stepper-type.ts","../../../projects/ng-components/src/lib/controls/stepper/lib-stepper.component.ts","../../../projects/ng-components/src/lib/controls/stepper/lib-stepper.component.html","../../../projects/ng-components/src/lib/controls/stepper/types/step-selected-event.ts","../../../projects/ng-components/src/lib/controls/toggle-button/toggle-button.component.ts","../../../projects/ng-components/src/lib/controls/toggle-button/toggle-button.component.html","../../../projects/ng-components/src/lib/controls/toggle-buttons-list/toggle-buttons-list.component.ts","../../../projects/ng-components/src/lib/controls/toggle-buttons-list/toggle-buttons-list.component.html","../../../projects/ng-components/src/lib/controls/content-tile/content-tile.component.ts","../../../projects/ng-components/src/lib/controls/content-tile/content-tile.component.html","../../../projects/ng-components/src/lib/controls/stats-grid/stats-grid.component.ts","../../../projects/ng-components/src/lib/controls/stats-grid/stats-grid.component.html","../../../projects/ng-components/src/lib/controls/progress-bar/progress-bar.component.ts","../../../projects/ng-components/src/lib/controls/progress-bar/progress-bar.component.html","../../../projects/ng-components/src/lib/directives/dynamic-component-host.directive.ts","../../../projects/ng-components/src/lib/services/component-loader/content-ref.class.ts","../../../projects/ng-components/src/lib/services/component-loader/component-loader.class.ts","../../../projects/ng-components/src/lib/services/component-loader/component-loader.factory.ts","../../../projects/ng-components/src/lib/services/user-settings.service.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-sidebar/shell-sidebar.component.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-sidebar/shell-sidebar.component.html","../../../projects/ng-components/src/lib/controls/language-selection/language-selection.component.ts","../../../projects/ng-components/src/lib/controls/language-selection/language-selection.component.html","../../../projects/ng-components/src/lib/controls/notifications-indicator/notifications-indicator.component.ts","../../../projects/ng-components/src/lib/controls/notifications-indicator/notifications-indicator.component.html","../../../projects/ng-components/src/lib/controls/user-profile-menu/user-profile-menu.component.ts","../../../projects/ng-components/src/lib/controls/user-profile-menu/user-profile-menu.component.html","../../../projects/ng-components/src/lib/layouts/shell/shell-header/shell-header.component.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-header/shell-header.component.html","../../../projects/ng-components/src/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.html","../../../projects/ng-components/src/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.html","../../../projects/ng-components/src/lib/layouts/shell/shell-footer/shell-footer.component.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-footer/shell-footer.component.html","../../../projects/ng-components/src/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.html","../../../projects/ng-components/src/lib/layouts/shell/shell-layout/shell-layout.component.ts","../../../projects/ng-components/src/lib/layouts/shell/shell-layout/shell-layout.component.html","../../../projects/ng-components/src/lib/layouts/views/view-layout/view-layout.component.ts","../../../projects/ng-components/src/lib/layouts/views/view-layout/view-layout.component.html","../../../projects/ng-components/src/lib/layouts/views/model-view-layout/model-view-layout.component.ts","../../../projects/ng-components/src/lib/layouts/views/model-view-layout/model-view-layout.component.html","../../../projects/ng-components/src/lib/layouts/views/side-view-layout/side-view-layout.component.ts","../../../projects/ng-components/src/lib/layouts/views/side-view-layout/side-view-layout.component.html","../../../projects/ng-components/src/lib/layouts/views/form-layout/form-layout.component.ts","../../../projects/ng-components/src/lib/layouts/views/form-layout/form-layout.component.html","../../../projects/ng-components/src/lib/pages/auth/auth-callback/auth-callback.component.ts","../../../projects/ng-components/src/lib/pages/auth/auth-callback/auth-callback.component.html","../../../projects/ng-components/src/lib/pages/auth/auth-renew/auth-renew.component.ts","../../../projects/ng-components/src/lib/pages/auth/logged-out/logged-out.component.ts","../../../projects/ng-components/src/lib/pages/auth/logged-out/logged-out.component.html","../../../projects/ng-components/src/lib/pages/http-status/error/error.component.ts","../../../projects/ng-components/src/lib/pages/http-status/error/error.component.html","../../../projects/ng-components/src/lib/pages/http-status/page-not-found/page-not-found.component.ts","../../../projects/ng-components/src/lib/pages/http-status/page-not-found/page-not-found.component.html","../../../projects/ng-components/src/lib/pages/http-status/unauthorized/unauthorized.component.ts","../../../projects/ng-components/src/lib/pages/http-status/unauthorized/unauthorized.component.html","../../../projects/ng-components/src/lib/pipes/address.pipe.ts","../../../projects/ng-components/src/lib/pipes/duration-format.pipe.ts","../../../projects/ng-components/src/lib/pipes/short-number.pipe.ts","../../../projects/ng-components/src/lib/helpers/base-list.component.ts","../../../projects/ng-components/src/lib/services/modal-service/modal-styles.class.ts","../../../projects/ng-components/src/lib/services/modal-service/modal-backdrop-component.ts","../../../projects/ng-components/src/lib/services/modal-service/modal-options.class.ts","../../../projects/ng-components/src/lib/services/modal-service/modal-container-component.ts","../../../projects/ng-components/src/lib/services/modal-service/modal.class.ts","../../../projects/ng-components/src/lib/services/modal-service/modal-service.ts","../../../projects/ng-components/src/lib/ng-components.module.ts","../../../projects/ng-components/src/public-api.ts","../../../projects/ng-components/src/indice-ng-components.ts"],"sourcesContent":["//\n// https://github.com/arkon/ng-click-outside\n// the project is inactive - so imoved the directive code in our project\n//\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n SimpleChanges,\n NgZone,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n// tslint:disable-next-line:directive-selector\n@Directive({\n selector: '[clickOutside]',\n standalone: false\n})\nexport class ClickOutsideDirective implements OnInit, OnChanges, OnDestroy {\n\n @Input() clickOutsideEnabled = true;\n\n @Input() attachOutsideOnClick = false;\n @Input() delayClickOutsideInit = false;\n @Input() emitOnBlur = false;\n\n @Input() exclude = '';\n @Input() excludeBeforeClick = false;\n\n @Input() clickOutsideEvents = '';\n\n @Output() clickOutside: EventEmitter<Event> = new EventEmitter<Event>();\n\n // tslint:disable-next-line:variable-name\n private _nodesExcluded: Array<HTMLElement> = [];\n // tslint:disable-next-line:variable-name\n private _events: Array<string> = ['click'];\n\n constructor(\n // tslint:disable-next-line:variable-name\n private _el: ElementRef,\n // tslint:disable-next-line:variable-name\n private _ngZone: NgZone,\n @Inject(PLATFORM_ID) private platformId: any) {\n this._initOnClickBody = this._initOnClickBody.bind(this);\n this._onClickBody = this._onClickBody.bind(this);\n this._onWindowBlur = this._onWindowBlur.bind(this);\n }\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformId)) { return; }\n\n this._init();\n }\n\n ngOnDestroy(): void {\n if (!isPlatformBrowser(this.platformId)) { return; }\n\n this._removeClickOutsideListener();\n this._removeAttachOutsideOnClickListener();\n this._removeWindowBlurListener();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!isPlatformBrowser(this.platformId)) { return; }\n\n // tslint:disable-next-line:no-string-literal\n if (changes['attachOutsideOnClick'] || changes['exclude'] || changes['emitOnBlur']) {\n this._init();\n }\n }\n\n private _init(): void {\n if (this.clickOutsideEvents !== '') {\n this._events = this.clickOutsideEvents.split(',').map(e => e.trim());\n }\n\n this._excludeCheck();\n\n if (this.attachOutsideOnClick) {\n this._initAttachOutsideOnClickListener();\n } else {\n this._initOnClickBody();\n }\n\n if (this.emitOnBlur) {\n this._initWindowBlurListener();\n }\n }\n\n private _initOnClickBody(): void {\n if (this.delayClickOutsideInit) {\n setTimeout(this._initClickOutsideListener.bind(this));\n } else {\n this._initClickOutsideListener();\n }\n }\n\n private _excludeCheck(): void {\n if (this.exclude) {\n try {\n const nodes = Array.from(document.querySelectorAll(this.exclude)) as Array<HTMLElement>;\n if (nodes) {\n this._nodesExcluded = nodes;\n }\n } catch (err) {\n console.error('[ng-click-outside] Check your exclude selector syntax.', err);\n }\n }\n }\n\n private _onClickBody(ev: Event): void {\n if (!this.clickOutsideEnabled) { return; }\n\n if (this.excludeBeforeClick) {\n this._excludeCheck();\n }\n\n if (!this._el.nativeElement.contains(ev.target) && !this._shouldExclude(ev.target)) {\n this._emit(ev);\n\n if (this.attachOutsideOnClick) {\n this._removeClickOutsideListener();\n }\n }\n }\n\n /**\n * Resolves problem with outside click on iframe\n * @see https://github.com/arkon/ng-click-outside/issues/32\n */\n private _onWindowBlur(ev: Event): void {\n setTimeout(() => {\n if (!document.hidden) {\n this._emit(ev);\n }\n });\n }\n\n private _emit(ev: Event): void {\n if (!this.clickOutsideEnabled) { return; }\n\n this._ngZone.run(() => this.clickOutside.emit(ev));\n }\n\n private _shouldExclude(target: any): boolean {\n // tslint:disable-next-line:prefer-const\n for (let excludedNode of this._nodesExcluded) {\n if (excludedNode.contains(target)) {\n return true;\n }\n }\n\n return false;\n }\n\n private _initClickOutsideListener(): void {\n this._ngZone.runOutsideAngular(() => {\n this._events.forEach(e => document.addEventListener(e, this._onClickBody));\n });\n }\n\n private _removeClickOutsideListener(): void {\n this._ngZone.runOutsideAngular(() => {\n this._events.forEach(e => document.removeEventListener(e, this._onClickBody));\n });\n }\n\n private _initAttachOutsideOnClickListener(): void {\n this._ngZone.runOutsideAngular(() => {\n this._events.forEach(e => this._el.nativeElement.addEventListener(e, this._initOnClickBody));\n });\n }\n\n private _removeAttachOutsideOnClickListener(): void {\n this._ngZone.runOutsideAngular(() => {\n this._events.forEach(e => this._el.nativeElement.removeEventListener(e, this._initOnClickBody));\n });\n }\n\n private _initWindowBlurListener(): void {\n this._ngZone.runOutsideAngular(() => {\n window.addEventListener('blur', this._onWindowBlur);\n });\n }\n\n private _removeWindowBlurListener(): void {\n this._ngZone.runOutsideAngular(() => {\n window.removeEventListener('blur', this._onWindowBlur);\n });\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { MenuOption } from '../../types';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'lib-drop-down-menu',\n templateUrl: './drop-down-menu.component.html',\n standalone: false\n})\nexport class DropDownMenuComponent implements OnInit, OnChanges {\n @Input() options: MenuOption[] | undefined = [];\n // tslint:disable-next-line:no-input-rename\n @Input('selected') selectedValue: any | null | undefined = undefined;\n @Input() multiple = false;\n @Input() placeholder: string = 'Παρακαλώ επιλέξτε...';\n @Input('show-icons') showIcons = true;\n\n private selectedOption$: MenuOption | null = null;\n public get selectedOption(): MenuOption | null {\n return this.selectedOption$;\n }\n public set selectedOption(option: MenuOption | null) {\n this.selectedOption$ = option;\n this.selectedValue = option ? option.value : null;\n this.expanded = false;\n }\n\n @Output() selectedChange: EventEmitter<any> = new EventEmitter<any>();\n @Output() selectedChanged: EventEmitter<any> = new EventEmitter<any>();\n\n private expanded$ = false;\n public get expanded(): boolean {\n return this.expanded$;\n }\n public set expanded(value: boolean) {\n this.expanded$ = value;\n }\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.options && this.options.length > 0 && this.selectedValue !== null && this.selectedValue !== undefined) {\n this.selectedOption$ = this.options.filter((o) => o.value === this.selectedValue)[0];\n }\n }\n\n ngOnInit(): void {}\n\n public isSelected(option: MenuOption): boolean {\n return option != null && this.selectedValue != null && option.value === this.selectedValue;\n }\n\n public onClickOutside($event: any): void {\n this.expanded = false;\n }\n\n public selectOption(option: MenuOption): void {\n this.selectedOption = option;\n this.selectedChange.emit(option.value);\n this.selectedChanged.emit(option.value);\n }\n}\n","<div class=\"dropdown-container\" (clickOutside)=\"onClickOutside($event)\">\n <button type=\"button\" (click)=\"expanded = !expanded\" class=\"dropdown-button\" aria-haspopup=\"listbox\" aria-expanded=\"true\" aria-labelledby=\"listbox-label\">\n <span class=\"dropdown-selected-text\">\n <i *ngIf=\"selectedOption?.icon && showIcons\" [class]=\"selectedOption?.icon\" \n [class.mr-2]=\"selectedOption?.icon\"></i>{{ selectedOption?.text || placeholder }}\n </span>\n <span class=\"dropdown-button-icon\">\n <!-- Heroicon name: solid/selector -->\n <svg class=\"dropdown-arrow\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M10 3a1 1 0 01.707.293l3 3a1 1 0 01-1.414 1.414L10 5.414 7.707 7.707a1 1 0 01-1.414-1.414l3-3A1 1 0 0110 3zm-3.707 9.293a1 1 0 011.414 0L10 14.586l2.293-2.293a1 1 0 011.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"/>\n </svg>\n </span>\n </button>\n <ul title=\"menu\" *ngIf=\"expanded && options && options.length > 0\" class=\"dropdown-ul\" tabindex=\"-1\" role=\"listbox\" aria-labelledby=\"listbox-label\">\n <ng-container *ngFor=\"let option of options\">\n <li [class]=\"isSelected(option) ? 'dropdown-li-selected' : 'dropdown-li'\" (click)=\"selectOption(option)\" id=\"listbox-option-0\" role=\"option\">\n <span [class]=\"isSelected(option) ? 'dropdown-li-selected-text' : 'dropdown-li-text'\">\n <i *ngIf=\"option.icon && showIcons\" [class]=\"option.icon\" [class.mr-2]=\"option.icon\"></i>{{ option.text }}\n </span>\n <span *ngIf=\"isSelected(option)\" class=\"dropdown-li-selected-indicator-container\">\n <!-- Heroicon name: solid/check -->\n <svg class=\"dropdown-li-selected-indicator\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\"/>\n </svg>\n </span>\n </li>\n </ng-container>\n </ul>\n</div>\n","export class Icons {\n // https://uifabricicons.azurewebsites.net/\n public static Dashboard = `ms-Icon ms-Icon--HomeGroup `;\n public static Locations = `ms-Icon ms-Icon--MapPin `;\n public static ChargePoints = `ms-Icon ms-Icon--ChatBot `;\n public static Transations = `ms-Icon ms-Icon--LightningBolt `;\n public static Badges = `ms-Icon ms-Icon--IDBadge `;\n\n public static Information = `ms-Icon ms-Icon--Info`;\n public static Refresh = `ms-Icon ms-Icon--Refresh`;\n public static Search = `ms-Icon ms-Icon--Search`;\n public static Add = `ms-Icon ms-Icon--Add`;\n public static Delete = `ms-Icon ms-Icon--Delete`;\n public static SendEmail = `ms-Icon ms-Icon--NewMail`;\n public static Filter = `ms-Icon ms-Icon--Filter`;\n public static Export = `ms-Icon ms-Icon--ExcelDocument`;\n public static Import = `ms-Icon ms-Icon--PeopleAdd`;\n\n public static TilesView = `ms-Icon ms-Icon--AppIconDefault`;\n public static TableView = `ms-Icon ms-Icon--Table`;\n public static MapView = `ms-Icon ms-Icon--MapPin`;\n public static EntryView = `ms-Icon ms-Icon--EntryView`;\n\n public static Separator = `ms-Icon ms-Icon--Separator text-white`;\n\n public static ItemsCount = 'ms-Icon ms-Icon--Boards';\n\n public static Heart = 'ms-Icon ms-Icon--Heart';\n public static HeartBroken = 'ms-Icon ms-Icon--HeartBroken';\n public static DateTime = 'ms-Icon ms-Icon--ReminderTime';\n\n public static Expand = 'ms-Icon ms-Icon--ChevronDown';\n public static Collapse = 'ms-Icon ms-Icon--ChevronUp';\n\n public static SortAsc = 'ms-Icon ms-Icon--Ascending';\n public static SortDesc = 'ms-Icon ms-Icon--Descending';\n\n public static Details = ' ms-Icon ms-Icon--AccountActivity';\n\n public static Messages = ' ms-Icon ms-Icon--Message';\n public static MessagesUnread = ' ms-Icon ms-Icon--MessageFill';\n\n public static External = ' ms-Icon ms-Icon--FileSymlink';\n public static Statistics = ' ms-Icon ms-Icon--BIDashboard';\n}\n","import { Observable } from 'rxjs';\nimport { Icons } from './icons';\nimport { Params } from '@angular/router';\n\n\nexport interface IAppNotifications {\n messages: Observable<IResultSet<NavLink>>;\n getMessage?: (predicate: (value: any, index: number, obj: any[]) => any) => any | undefined;\n markMessageRead?: (predicate: (value: any, index: number, obj: any[]) => any) => any | undefined;\n refresh?: () => void | undefined;\n inboxAction?: () => void | undefined;\n}\n\nexport interface IAppLanguagesService {\n options: Observable<MenuOption[]> | undefined;\n selected?: string;\n default?: string;\n setSelected?: (lang: string) => void | undefined;\n}\n\nexport interface IAppLinks {\n public: Observable<NavLink[]>;\n main: Observable<NavLink[]>;\n profile: Observable<NavLink[]>;\n profileActions: Observable<NavLink[]>;\n legal: Observable<NavLink[]>;\n brand: Observable<NavLink[]>;\n notifications?: Observable<NavLink>;\n}\n\n\nexport class NavLink {\n constructor(text: string, path: string, exact: boolean = false, external: boolean = false, icon?: string, data?: any, queryParams?: Params) {\n this.text = text;\n this.path = path;\n this.exact = exact;\n this.external = external;\n this.icon = icon;\n this.data = data;\n this.queryParams = queryParams;\n }\n public text: string;\n public path: string;\n public exact: boolean;\n public external: boolean;\n public icon: string | undefined;\n public type = 'router';\n public data: any | undefined;\n public queryParams: Params | undefined;\n}\n\nexport class ExternalNavLink extends NavLink {\n constructor(text: string, path: string, openInNewTab?: boolean, icon?: string) {\n super(text, path, true, openInNewTab, icon ?? Icons.External);\n }\n public type = 'external';\n}\n\nexport class FragmentNavLink extends NavLink {\n constructor(text: string, path: string, icon?: string) {\n super(text, path, true, true, icon);\n }\n public type = 'fragment';\n}\n\nexport class NotificationNavLink extends NavLink {\n constructor(text: string, path: string, public isRead: boolean, public creationDate?: Date) {\n super(text, path, true, false, undefined);\n }\n}\n\nexport class NavLinkSeparator extends NavLink {\n constructor(text: string, path: string, public isRead: boolean, public creationDate?: Date) {\n super('', '');\n }\n public type = 'separator';\n }\n\nexport class ViewAction {\n public type: string;\n public key: string | null;\n public param: any;\n public icon: string;\n public tooltip: string | null;\n public text?: string;\n\n constructor(type: string, key: string | null, param: any, icon: string, tooltip: string | null, text?: string) {\n this.type = type;\n this.key = key;\n this.param = param;\n this.icon = icon;\n this.tooltip = tooltip;\n this.text = text;\n }\n}\n\nexport class ListViewType {\n public static Tiles = 'tiles';\n public static Table = 'table';\n public static Map = 'map';\n public static Gallery = 'gallery';\n}\n\nexport class RouterViewAction extends ViewAction {\n public outlet: string | null = null;\n public link: string | null = null;\n constructor(icon: string, link: string, outlet: string | null, tooltip: string | null, text?: string) {\n super('router-link', null, null, icon, tooltip, text);\n this.outlet = outlet;\n this.link = link;\n }\n}\n\n\nexport class SwitchViewAction extends ViewAction {\n constructor(view: string, icon: string, tooltip: string | null) {\n super('switch-view', null, view, icon, tooltip);\n }\n}\n\nexport interface IResultSet<T> {\n count: number;\n items: T[];\n}\n\nexport class HeaderMetaItem {\n public key: string | null = null;\n public icon: string | null = null;\n public text: string | null = null;\n}\n\nexport class MenuOption {\n constructor(text: string, value: any, description?: string, data?: any, icon?: string) {\n this.text = text;\n this.value = value;\n this.description = description;\n this.data = data;\n this.icon = icon;\n }\n public text: string;\n public value: any;\n public description: string | undefined;\n public data: any | undefined;\n public icon: string | undefined;\n}\n\nexport enum PagerPosition {\n Top = 'top',\n Bottom = 'bottom',\n Both = 'both'\n}\n\nexport interface IAddress {\n id?: string;\n street?: string | null;\n streetNumber?: string | null;\n city?: string | null;\n region?: string | null;\n postalCode?: string | null;\n country?: string | null;\n}\n\nexport interface IShellConfig {\n appLogo: string;\n appLogoAlt: string;\n breadcrumb: boolean;\n customFooterComponent?: any;\n customHeaderComponent?: any;\n fluid: boolean;\n layout?: ShellLayoutType;\n showAlertsOnHeader?: boolean;\n showFooter: boolean;\n showHeader: boolean;\n showLangsOnHeader?: boolean;\n showUserNameOnHeader?: boolean;\n showPictureOnHeader?: boolean;\n}\n\nexport enum ShellLayoutType {\n Stacked = 'Stacked',\n Sidebar = 'Sidebar'\n}\n\nexport class DefaultShellConfig implements IShellConfig {\n appLogo = 'https://tailwindui.com/img/logos/workflow-mark.svg?color=white';\n appLogoAlt = 'your app name here';\n breadcrumb = false;\n fluid = false;\n layout = ShellLayoutType.Stacked;\n showAlertsOnHeader = false;\n showFooter = true;\n showHeader = true;\n showUserNameOnHeader = false;\n showPictureOnHeader = true;\n}\n\nexport enum SCREEN_SIZE {\n XS,\n SM,\n MD,\n LG,\n XL\n}\n\nexport interface IScreenSize {\n id: SCREEN_SIZE;\n name: string;\n css: string;\n}\n\nexport enum ToastType {\n Info = 'info',\n Success = 'success',\n Error = 'error',\n Warning = 'warning'\n}\n\nexport const NULL_TOAST = { title: '_____NULL_____' } as Toast;\n\nexport interface Toast {\n type: ToastType;\n title: string;\n body: string;\n delay: number;\n}\n\nexport enum SidePaneSize {\n Default = '',\n Small25 = '25%',\n Medium50 = '50%',\n Large75 = '75%',\n Fullscreen = '100%',\n}\n\nexport enum SidePaneOverlayType {\n Default = '',\n None = '-opacity-0',\n Light = '',\n Dark = '-opacity-50'\n}\n\n\nexport interface IValidationProblemDetails {\n type?: string | undefined;\n title?: string | undefined;\n status?: number | undefined;\n detail?: string | undefined;\n instance?: string | undefined;\n errors?: { [key: string]: string[]; } | undefined;\n}\n\nexport type UserSettingKey = 'MobileSideBar';\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Icons } from '../../icons';\nimport { MenuOption } from '../../types';\n\n@Component({\n selector: 'lib-pager',\n templateUrl: './pager.component.html',\n standalone: false\n})\nexport class PagerComponent implements OnInit, OnChanges {\n // BUSY STATE\n @Input() busy = false;\n // PAGING\n @Input() count: number | null = null;\n @Input() page = 1;\n // tslint:disable-next-line:no-input-rename\n @Input('page-size') pageSize = 20;\n // tslint:disable-next-line:no-input-rename\n @Input('page-size-options') pageSizeOptions: MenuOption[] = [\n new MenuOption('10', 10),\n new MenuOption('20', 20),\n new MenuOption('30', 30),\n new MenuOption('50', 50),\n new MenuOption('100', 100)\n ];\n public pages: MenuOption[] = [];\n @Output() pageChanged: EventEmitter<number> = new EventEmitter<number>();\n @Output() pageSizeChanged: EventEmitter<number> = new EventEmitter<number>();\n public canPreviousPage = false;\n public canNextPage = false;\n\n // SORTING\n // tslint:disable-next-line:no-input-rename\n @Input('sort-options') sortOptions: MenuOption[] = [];\n // tslint:disable-next-line:no-input-rename\n @Input('sort') sort: string | null = null;\n // tslint:disable-next-line:no-input-rename\n @Input('sort-dir') sortdir: string | null = 'desc';\n @Output() sortChanged: EventEmitter<string> = new EventEmitter<string>();\n @Output() sortdirChanged: EventEmitter<string> = new EventEmitter<string>();\n public sortdirIcon = Icons.SortDesc;\n\n constructor(private router: Router) { }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.calcPages();\n }\n\n ngOnInit(): void {\n }\n\n private calcPages(): void {\n this.pages = [];\n if (this.count && this.count > 0) {\n const pageCount = this.count / this.pageSize;\n for (let i = 0; i < pageCount; i++) {\n this.pages.push(new MenuOption(i + 1 + '', i + 1));\n }\n }\n this.canPreviousPage = this.page > 1;\n this.canNextPage = this.page < this.pages.length;\n }\n\n public nextPage(): void {\n const next = this.page + 1;\n this.gotoPage(next);\n }\n\n public previousPage(): void {\n const previous = this.page - 1;\n this.gotoPage(previous);\n }\n\n public gotoPage(page: number): void {\n this.page = page;\n this.pageChanged.emit(page);\n this.calcPages();\n }\n\n public pageSizeOptionChanged(pageSize: number): void {\n this.pageSizeChanged.emit(pageSize);\n this.calcPages();\n }\n\n public pageOptionChanged(page: number): void {\n this.pageChanged.emit(page);\n this.calcPages();\n }\n\n public sortOptionChanged(sort: string): void {\n this.sortChanged.emit(sort);\n }\n\n public toggleSortdir(): void {\n let sortdir = 'desc';\n if (this.sortdir === 'desc') {\n sortdir = 'asc';\n this.sortdirIcon = Icons.SortAsc;\n } else {\n sortdir = 'desc';\n this.sortdirIcon = Icons.SortDesc;\n }\n this.sortdirChanged.emit(sortdir);\n }\n\n}\n","<div class=\"pager-container\">\n <div class=\"pager-container-near\">\n <ng-content select=\"[pager-near-content]\"></ng-content>\n </div>\n <div class=\"pager-container-far\">\n <div class=\"inline-flex\" *ngIf=\"sortOptions && sortOptions.length > 0\">\n <lib-drop-down-menu [options]=\"sortOptions\" [selected]=\"sort\" (selectedChanged)=\"sortOptionChanged($event)\"></lib-drop-down-menu>\n <button (click)=\"toggleSortdir()\" [disabled]=\"!sort || busy\" class=\"pager-icon-button\">\n <span class=\"sr-only\">sort direction</span>\n <span class=\"inline-block relative\">\n <i [class]=\"sortdirIcon\"></i>\n </span>\n </button>\n </div>\n <div class=\"pager-pages-container\">\n <lib-drop-down-menu [options]=\"pageSizeOptions\" [selected]=\"pageSize\" (selectedChanged)=\"pageSizeOptionChanged($event)\"></lib-drop-down-menu>\n <div class=\"mx-1\">\n <button [disabled]=\"!canPreviousPage || busy\" (click)=\"previousPage()\"\n class=\"pager-arrow-button-left\">\n <span class=\"sr-only\">Previous</span>\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <button type=\"button\"\n [disabled]=\"!canNextPage || busy\" (click)=\"nextPage()\"\n class=\"pager-arrow-button-right\">\n <span class=\"sr-only\">Next</span>\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <lib-drop-down-menu *ngIf=\"false && (pages && pages.length > 0)\" [options]=\"pages\" [selected]=\"page\" (selectedChanged)=\"pageOptionChanged($event)\"></lib-drop-down-menu>\n </div>\n </div>\n</div>\n","export class BreadcrumbItem {\n constructor(public title?: string, public url?: string) {\n this.level = 0;\n }\n\n public level: number;\n\n public get urlSegments(): string[] | undefined {\n if (this.url) {\n return this.url?.split('/').filter(x => x !== '');\n }\n return undefined;\n }\n}","import { InjectionToken } from '@angular/core';\n\nimport { IAppLinks, IAppLanguagesService, IAppNotifications, IShellConfig } from './types';\nimport { LibStepperComponent } from './controls/stepper/lib-stepper.component';\nimport { LibTabGroupComponent } from './controls/tabs/lib-tab-group.component';\n\nexport const APP_LANGUAGES = new InjectionToken<IAppLanguagesService>('APP_LANGUAGES');\nexport const APP_LINKS = new InjectionToken<IAppLinks>('APP_LINKS');\nexport const APP_NOTIFICATIONS = new InjectionToken<IAppNotifications>('APP_NOTIFICATIONS');\nexport const LIBSTEPPER_ACCESSOR = new InjectionToken<LibStepperComponent>('LibStepperAccessor');\nexport const LIBTABGROUP_ACCESSOR = new InjectionToken<LibTabGroupComponent>('LibTabGroupAccessor');\nexport const SHELL_CONFIG = new InjectionToken<IShellConfig>('SHELL_CONFIG');\n","import { Injectable } from '@angular/core';\nimport { IValidationProblemDetails } from '../types';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilitiesService {\n constructor() { }\n\n public problemDetails?: IValidationProblemDetails;\n\n public get validationErrors(): string[] {\n const messages: string[] = [];\n const errors = this.problemDetails && this.problemDetails.errors;\n for (const property in errors) {\n if (property) {\n const propertyMessages = errors[property];\n propertyMessages.forEach((message: string) => {\n messages.push(message);\n });\n } else {\n Object.values(errors || {}).forEach(message => {\n message.forEach(x => {\n messages.push(x);\n });\n });\n }\n }\n return messages;\n }\n\n public getValidationProblemDetails(problemDetails: IValidationProblemDetails): string[] {\n this.problemDetails = problemDetails;\n if (this.validationErrors.length === 0 && this.problemDetails.title) {\n return new Array<string>(1).fill(this.problemDetails.title);\n }\n return this.validationErrors;\n }\n\n public getPathFromUrl(url: string): string | undefined {\n if (!url) {\n return undefined;\n }\n return url.split(/[?#]/)[0];\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { Data, NavigationEnd, Route, Router } from '@angular/router';\n\nimport { Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\nimport { BreadcrumbItem } from '../controls/breadcrumb/breadcrumb-item';\nimport { SHELL_CONFIG } from '../tokens';\nimport { UtilitiesService } from './utilities.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreadcrumbService {\n private _defaultHome: BreadcrumbItem | undefined;\n private _breadcrumb$: Subject<BreadcrumbItem[]> = new Subject<BreadcrumbItem[]>();\n\n constructor(\n private _router: Router,\n private _utilities: UtilitiesService,\n @Optional() @Inject(SHELL_CONFIG) public _shellConfig?: any\n ) {\n if (_shellConfig?.breadcrumb) {\n this._defaultHome = this._getDefaultHomeItem();\n this._router\n .events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n distinctUntilChanged()\n )\n .subscribe(_ => {\n const breadcrumb = this._buildBreadcrumb();\n this._breadcrumb$.next(breadcrumb);\n });\n }\n }\n\n public breadcrumb: Observable<BreadcrumbItem[]> = this._breadcrumb$.asObservable();\n\n private _getDefaultHomeItem(): BreadcrumbItem | undefined {\n const routerConfig = this._router.config;\n const declaredHomeRoutes = routerConfig.filter((route: Route) => route.data?.breadcrumb?.isHome === true);\n if (declaredHomeRoutes.length > 1) {\n throw new Error('You can declare only one route as home.');\n }\n let homeRoute: Route | undefined;\n if (declaredHomeRoutes.length === 1) {\n homeRoute = declaredHomeRoutes[0];\n } else {\n homeRoute = routerConfig.find((route: Route) => route.path === '');\n if (!homeRoute) {\n return undefined;\n }\n const redirectionUrl = homeRoute.redirectTo;\n if (!homeRoute?.data?.breadcrumb?.title && redirectionUrl) {\n homeRoute = routerConfig.find((route: Route) => route.path === redirectionUrl);\n if (!homeRoute) {\n return undefined;\n }\n }\n }\n return new BreadcrumbItem(this._getRouteTitle(homeRoute), homeRoute.path || '');\n }\n\n private _getRouteTitle(route: Route) {\n return route?.data?.breadcrumb?.title || route.component?.name.replace('Component', '');\n }\n\n private _buildBreadcrumb(): BreadcrumbItem[] {\n const breadcrumb: BreadcrumbItem[] = [];\n if (this._defaultHome) {\n breadcrumb.push(this._defaultHome);\n }\n const url = this._router.url;\n const path = this._utilities.getPathFromUrl(url) || '';\n const activeRoute = this._findRouteFromUrl(path);\n const parentRoutes = this._findParentRoutes(activeRoute);\n breadcrumb.push(...parentRoutes);\n if (activeRoute && activeRoute?.path !== this._defaultHome?.url) {\n const routeData = this._getBreadcrumbRouteData(activeRoute);\n breadcrumb.push(new BreadcrumbItem(this._getRouteTitle(activeRoute), (routeData._fullPath || activeRoute.path || '')));\n }\n return breadcrumb.map((route: BreadcrumbItem) => {\n const routeSegments = route.url?.split('/') || [];\n routeSegments.forEach((segment: string, index: number) => {\n if (segment.startsWith(':')) {\n route.url = route.url?.replace(segment, url.split('/')[index + 1]);\n }\n });\n return route;\n });\n }\n\n private _findRouteFromUrl(url: string): Route | undefined {\n let urlSegments = url.replace(/\\(.+\\)/, '') // remove any secondary outlet segments and focus on primary outlet that is the main route\n .split('/') // split the URL into segments\n .filter((segment: string) => segment !== '');\n\n const outletRegex = new RegExp(\"\\\\(([^()]+)\\\\)\");\n var outletPart = url.match(outletRegex)?.[1];\n //if (outletPart) {\n //urlSegments = outletPart.replace(/.+:/, '').split('/') // split the URL into segments\n // .filter((segment: string) => segment !== '');\n //}\n const routerConfig = this._router.config;\n const flattenedRouterConfig = this._flattenRoutes(routerConfig);\n const filteredRouterConfig = flattenedRouterConfig.filter((route: Route) => {\n const routeData = this._getBreadcrumbRouteData(route);\n return (routeData._fullPath || route.path)?.split('/').length === urlSegments.length;\n });\n const route = filteredRouterConfig.find((route: Route) => {\n const routeData = this._getBreadcrumbRouteData(route);\n const routeSegments = (routeData._fullPath || route.path)?.split('/') || [];\n let segmentsMatched = false;\n for (let i = 0; i < routeSegments.length; i++) {\n const currentSegment = routeSegments[i];\n const isDynamicSegment = currentSegment.startsWith(':');\n if (!isDynamicSegment) {\n segmentsMatched = currentSegment === urlSegments[i];\n }\n }\n return segmentsMatched ? route : undefined;\n });\n return route;\n }\n\n private _findParentRoutes(activeRoute: Route | undefined, items: BreadcrumbItem[] = []): BreadcrumbItem[] {\n if (!activeRoute) {\n return [];\n }\n const routeData = this._getBreadcrumbRouteData(activeRoute);\n let urlSegments = (routeData._fullPath || activeRoute.path)?.split('/').filter((segment: string) => segment !== '') || [];\n if (urlSegments?.length <= 1) {\n return [...items];\n }\n const previousUrl = urlSegments.slice(0, -1).join('/');\n const route = this._findRouteFromUrl(previousUrl);\n if (route) {\n const routeData = this._getBreadcrumbRouteData(route);\n if (routeData._level > 0 || (!route.children || route.children.length === 0)) {\n items = this._findParentRoutes(route, [new BreadcrumbItem(this._getRouteTitle(route), routeData._fullPath || route.path), ...items]);\n }\n }\n return [...items];\n }\n\n private _flattenRoutes(routes: Route[], level?: number): Route[] {\n let children: Route[] = [];\n level = level || 0;\n return routes.map((route: Route) => {\n const routeData = this._getBreadcrumbRouteData(route);\n routeData._level = level!;\n if (route.children && route.children.length) {\n route.children.forEach((child: Route) => {\n const childRouteData = this._getBreadcrumbRouteData(child);\n const routePath = routeData._fullPath || route.path || '';\n const childPath = child.path?.endsWith('/') ? child.path.slice(0, -1) : child.path;\n childRouteData._fullPath = childPath?.indexOf(routePath) === -1 ? `${routePath}/${childPath}` : childPath;\n });\n children = [...children, ...route.children];\n }\n return route;\n }).concat(children.length ? this._flattenRoutes(children, level + 1) : children);\n }\n\n private _getBreadcrumbRouteData(route: Route | undefined): BreadcrumbRouteData {\n if (!route) {\n throw new Error('No route was found');\n }\n if (!route.data?.breadcrumb) {\n if (!route.data) {\n route.data = {};\n }\n route.data.breadcrumb = new BreadcrumbRouteData(0, false, undefined);\n }\n return route.data.breadcrumb;\n }\n}\n\nexport class BreadcrumbRouteData {\n constructor(public _level: number, public isHome: boolean, public _fullPath?: string | undefined) { }\n}\n","import { Component, OnInit } from '@angular/core';\n\nimport { BreadcrumbService } from '../../services/breadcrumb.service';\nimport { BreadcrumbItem } from './breadcrumb-item';\n\n@Component({\n selector: 'lib-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n standalone: false\n})\nexport class BreadcrumbComponent implements OnInit {\n constructor(\n private _breadcrumbService: BreadcrumbService\n ) { }\n\n public ngOnInit(): void {\n this._breadcrumbService\n .breadcrumb\n .subscribe((breadcrumb: BreadcrumbItem[]) => {\n this.breadcrumb = [...breadcrumb, new BreadcrumbItem('', '')];\n });\n }\n\n public breadcrumb: BreadcrumbItem[] = [];\n}\n","<nav class=\"bg-white border-b border-gray-200 flex\"\n aria-label=\"Breadcrumb\">\n <ol role=\"list\"\n class=\"w-full mx-auto px-4 flex space-x-4 sm:px-6 lg:px-8\">\n <li class=\"flex\"\n *ngFor=\"let item of breadcrumb; let i = index\">\n <div class=\"flex items-center\">\n <ng-container *ngTemplateOutlet=\"i === 0 ? homeTemplate : linkTemplate; context: { value: item }\"></ng-container>\n </div>\n </li>\n </ol>\n</nav>\n<ng-template let-value=\"value\"\n #homeTemplate>\n <a [routerLink]=\"value.urlSegments\"\n [title]=\"value.title\"\n class=\"text-gray-400 hover:text-gray-500\">\n <svg class=\"flex-shrink-0 h-5 w-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path d=\"M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z\" />\n </svg>\n <span class=\"sr-only\">{{ value.title }}</span>\n </a>\n</ng-template>\n<ng-template let-value=\"value\"\n #linkTemplate>\n <svg class=\"flex-shrink-0 w-6 h-full text-gray-200\"\n viewBox=\"0 0 24 44\"\n preserveAspectRatio=\"none\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\">\n <path d=\"M.293 0l22 22-22 22h1.414l22-22-22-22H.293z\" />\n </svg>\n <a [routerLink]=\"value.urlSegments\"\n class=\"ml-4 text-sm font-medium text-gray-500 hover:text-gray-700\">\n {{ value.title }}\n </a>\n</ng-template>","import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'lib-list-column', template: '<ng-content></ng-content>',\n standalone: false\n})\nexport class ListColumnComponent {\n @Input() title: string | null = null;\n // tslint:disable-next-line:no-input-rename\n @Input('full-width') fullWidth = false;\n @ContentChild(TemplateRef) template: any | null = null;\n constructor() { }\n}\n","import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'lib-list-tile', template: '<ng-content></ng-content>',\n standalone: false\n})\nexport class ListTileComponent{\n @ContentChild(TemplateRef) template: any | null = null;\n constructor() {\n }\n}\n","import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'lib-list-details-section', template: '<ng-content></ng-content>',\n standalone: false\n})\nexport class ListDetailsSectionComponent{\n @ContentChild(TemplateRef) template: any | null = null;\n constructor() {\n }\n}\n","import { formatDate } from \"@angular/common\";\n\nexport namespace Operators {\n export const EQUALS = { label: '=', value: 'eq', description: 'Ίσο με' };\n export const NOT_EQUALS = { label: '≠', value: 'neq', description: 'Διάφορο του' };\n export const GREATER_THAN = { label: '>', value: 'gt', description: 'Μεγαλύτερο από' };\n export const LESS_THAN = { label: '<', value: 'lt', description: 'Μικρότερο από' };\n export const GREATER_THAN_EQUAL = { label: '≥', value: 'gte', description: 'Μεγαλύτερο ή ίσο με' };\n export const LESS_THAN_EQUAL = { label: '≤', value: 'lte', description: 'Μικρότερο ή ίσο με' };\n export const CONTAINS = { label: '∋', value: 'contains', description: 'Περιέχει' };\n export const IN = { label: '1