{"version":3,"file":"metromobilite-m-ui.mjs","sources":["../../../../projects/m-ui/src/lib/m-icons/m-icons.service.ts","../../../../projects/m-ui/src/lib/m-icons/m-icons.component.ts","../../../../projects/m-ui/src/lib/m-icons/m-icons.component.html","../../../../projects/m-ui/src/lib/m-affluence/m-affluence.component.ts","../../../../projects/m-ui/src/lib/m-affluence/m-affluence.component.html","../../../../projects/m-ui/src/lib/m-logo-lines/m-logo-lines.component.ts","../../../../projects/m-ui/src/lib/m-logo-lines/m-logo-lines.component.html","../../../../projects/m-ui/src/lib/m-table/relative-date.pipe.ts","../../../../projects/m-ui/src/lib/m-table/m-table.interface.ts","../../../../projects/m-ui/src/lib/m-table/m-table.component.ts","../../../../projects/m-ui/src/lib/m-table/m-table.component.html","../../../../projects/m-ui/src/lib/m-app-download/m-app-download.component.ts","../../../../projects/m-ui/src/lib/m-app-download/m-app-download.component.html","../../../../projects/m-ui/src/lib/m-list-wrapper/m-list-wrapper.component.ts","../../../../projects/m-ui/src/lib/m-list-wrapper/m-list-wrapper.component.html","../../../../projects/m-ui/src/lib/m-disturbance-display/m-disturbance-display.component.ts","../../../../projects/m-ui/src/lib/m-disturbance-display/m-disturbance-display.component.html","../../../../projects/m-ui/src/lib/index.ts","../../../../projects/m-ui/src/metromobilite-m-ui.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\nimport {MatIconRegistry} from '@angular/material/icon';\r\nimport {DomSanitizer} from '@angular/platform-browser';\r\nimport {IconMapping} from '../m-icons';\r\n\r\n/**\r\n * Service to register custom icons for use throughout the application.\r\n * This service leverages Angular Material's MatIconRegistry and DomSanitizer\r\n * to securely register and manage SVG icons, providing a centralized approach\r\n * to icon registration.\r\n */\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class MIconsService {\r\n\t/*\r\n\t* Base path to the directory where the SVG icons are stored.\r\n\t* This path is used as a prefix for all icon URLs in the application.\r\n\t*/\r\n    private iconPath = 'assets/icons/';\r\n\r\n\t/**\r\n\t * @constructor\r\n\t * @description\r\n\t * Initializes the MIconsService, injecting dependencies for managing SVG icons.\r\n\t * The constructor receives the Angular Material MatIconRegistry and Angular’s\r\n\t * DomSanitizer to securely handle SVG icon URLs.\r\n\t *\r\n\t * @param {MatIconRegistry} iconRegistry - Injected Angular Material's icon registry\r\n\t * used to register and manage SVG icons.\r\n\t * @param {DomSanitizer} sanitizer - Injected Angular DOM sanitizer to bypass\r\n\t * security restrictions on resource URLs for SVG icons.\r\n\t */\r\n    constructor(\r\n        private iconRegistry: MatIconRegistry,\r\n        private sanitizer: DomSanitizer\r\n    ) {}\r\n\r\n\t/**\r\n\t * @method registerIcons\r\n\t * @description\r\n\t * Registers a list of icons with Angular Material's MatIconRegistry.\r\n\t * This method iterates over the provided icon mappings and registers each icon with\r\n\t * MatIconRegistry using DomSanitizer to securely handle icon paths.\r\n\t *\r\n\t * @param {IconMapping[]} icon - An array of IconMapping objects, each representing an icon\r\n\t * with a unique `type` and `name` that maps to an SVG file.\r\n\t *\r\n\t * @returns {void}\r\n\t * This method does not return a value but registers the icons for use throughout the application.\r\n\t *\r\n\t * @example\r\n\t * ```typescript\r\n\t * const icons: IconMapping[] = [\r\n\t *   { type: 'home', name: 'home.svg' },\r\n\t *   { type: 'settings', name: 'settings.svg' }\r\n\t * ];\r\n\t * mIconsService.registerIcons(icons);\r\n\t * ```\r\n\t */\r\n    registerIcons(icon: IconMapping[]): void {\r\n        icon.forEach((i: IconMapping) => {\r\n            this.iconRegistry.addSvgIcon(\r\n                i.type,\r\n                this.sanitizer.bypassSecurityTrustResourceUrl(`${this.iconPath}${i.name}`)\r\n            );\r\n        });\r\n    }\r\n}\r\n","import {CommonModule} from '@angular/common';\r\nimport {Component, Input} from '@angular/core';\r\nimport {ThemePalette} from '@angular/material/core';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MIconsService} from './m-icons.service';\r\n \r\n/**\r\n * Represents the mapping of an icon used in the application.\r\n *\r\n * This interface defines the properties required to register an icon,\r\n * including the icon type and its file name or path.\r\n */\r\nexport interface IconMapping {\r\n\t/**\r\n\t * The unique type identifier for the icon.\r\n\t * This is the name used to register the icon in the `MatIconRegistry`\r\n\t * and to reference it throughout the application.\r\n\t *\r\n\t * @example\r\n\t * 'home', 'settings', 'user-profile'\r\n\t */\r\n\ttype: string;\r\n\t/**\r\n\t * The name or path of the SVG file for the icon.\r\n\t * This is appended to the base icon path defined in `MIconsService`.\r\n\t *\r\n\t * @example\r\n\t * 'home.svg', 'settings.svg', 'user-profile.svg'\r\n\t */\r\n\tname?: string;\r\n}\r\n\r\n/**\r\n * Array of icon mappings used throughout the application.\r\n *\r\n * Each object in this array follows the `IconMapping` interface and represents a unique icon\r\n * that can be used by the application. Icons are registered in the application through the `MIconsService`\r\n * using this mapping. Each mapping defines a `type`, which serves as an identifier for the icon,\r\n * and optionally a `name`, which specifies the SVG file name in the icons directory.\r\n *\r\n * If `name` is not specified, the `type` may correspond to a default icon.\r\n *\r\n * Example usage:\r\n * ```\r\n * { type: 'accident', name: 'accident.svg' }\r\n * ```\r\n */\r\nexport const ICONS_MAPPING: IconMapping[] = [\r\n\t{ type: 'abnormalTraffic' },\r\n\t{ type: 'accident', name: 'accident.svg' },\r\n\t{ type: 'accidentInvolvingHeavyLorries' },\r\n\t{ type: 'agenceM', name: 'agenceM.svg' },\r\n\t{ type: 'animalPresenceObstruction' },\r\n\t{ type: 'arret' },\r\n\t{ type: 'ARE', name: 'ARE.svg' },\r\n\t{ type: 'authorityOperation' },\r\n\t{ type: 'autostop', name: 'autostop.svg' },\r\n\t{ type: 'blastingWork' },\r\n\t{ type: 'bouchon', name: 'bouchon.svg' },\r\n\t{ type: 'brokenDownVehicle' },\r\n\t{ type: 'BUS' },\r\n\t{ type: 'C38', name: 'C38.svg' },\r\n\t{ type: 'CAM' },\r\n\t{ type: 'CABLE_CAR', name: 'funicular.svg' },\r\n\t{ type: 'CAR' },\r\n\t{ type: 'chantier', name: 'chantier.svg' },\r\n\t{ type: 'citiz', name: 'citiz.svg' },\r\n\t{ type: 'citizyea', name: 'citiz.svg' },\r\n\t{ type: 'clearanceWork' },\r\n\t{ type: 'clusters', name: 'clusters.svg' },\r\n\t{ type: 'collision' },\r\n\t{ type: 'constructionWork' },\r\n\t{ type: 'constructionWorks' },\r\n\t{ type: 'COV', name: 'covoiturage_2.svg' },\r\n\t{ type: 'dat' },\r\n\t{ type: 'depositaire', name: 'relaisvente.svg' },\r\n\t{ type: 'disturbanceActivity' },\r\n\t{ type: 'DIR', name: 'DIR.svg' },\r\n\t{ type: 'voi_bike', name: 'voi_bike.svg' },\r\n\t{ type: 'voi_scooter', name: 'voi_scooter.svg' },\r\n\t{ type: 'environmentalObstruction' },\r\n\t{ type: 'equipmentOrSystemFault' },\r\n\t{ type: 'flooding' },\r\n\t{ type: 'generalInstructionOrMessageToRoadUsers' },\r\n\t{ type: 'generalNetworkManagement' },\r\n\t{ type: 'generalObstruction' },\r\n\t{ type: 'gnv', name: 'gnv.svg' },\r\n\t{ type: 'greve', name: 'greve.svg' },\r\n\t{ type: 'group', name: 'group.svg'},\r\n\t{ type: 'group_medium', name: 'group_medium.svg'},\r\n\t{ type: 'group_small', name: 'group_small.svg'},\r\n\t{ type: 'gpl', name: 'gpl.svg' },\r\n\t{ type: 'hazardsOnTheRoad' },\r\n\t{ type: 'hydrogene', name: 'hydrogene.svg' },\r\n\t{ type: 'ic_bus', name: 'ic_bus.svg' },\r\n\t{ type: 'ic_star', name: 'ic_star.svg' },\r\n\t{ type: 'ic_velo', name: 'ic_velo.svg' },\r\n\t{ type: 'ic_voiture', name: 'ic_voiture.svg' },\r\n\t{ type: 'ic_trottinette', name: 'ic_trottinette.svg' },\r\n\t{ type: 'ic_evt_exceptionnel', name: 'ic_evt_exceptionnel.svg' },\r\n\t{ type: 'ic_mes_alertes', name: 'ic_mes_alertes.svg' },\r\n\t{ type: 'IRVE_Chademo', name: 'IRVE_Chademo.svg' },\r\n\t{ type: 'IRVE_Combo', name: 'IRVE_Combo.svg' },\r\n\t{ type: 'IRVE_EF', name: 'IRVE_EF.svg' },\r\n\t{ type: 'IRVE_Type_2', name: 'IRVE_Type_2.svg' },\r\n\t{ type: 'IRVE_Type_3', name: 'IRVE_Type_3.svg' },\r\n\t{ type: 'ic_smiley_service_legerement_perturbe', name: 'ic_smiley_service_legerement_perturbe.svg' },\r\n\t{ type: 'ic_smiley_service_normal', name: 'ic_smiley_service_normal.svg' },\r\n\t{ type: 'ic_smiley_service_tres_perturbe', name: 'ic_smiley_service_tres_perturbe.svg' },\r\n\t{ type: 'ic_perturb_dark', name: 'ic_perturb_dark.svg' },\r\n\t{ type: 'ic_perturb_light', name: 'ic_perturb_light.svg' },\r\n\t{ type: 'ic_hors_service_dark', name: 'ic_hors_service_dark.svg' },\r\n\t{ type: 'ic_hors_service_light', name: 'ic_hors_service_light.svg' },\r\n\t{ type: 'incident' },\r\n\t{ type: 'info' },\r\n\t{ type: 'information', name: 'information.svg' },\r\n\t{ type: 'infrastructureDamageObstruction' },\r\n\t{ type: 'irve', name: 'irve.svg' },\r\n\t{ type: 'iti' },\r\n\t{ type: 'laneClosures' },\r\n\t{ type: 'letaxi', name: 'letaxi.svg' },\r\n\t{ type: 'lieux' },\r\n\t{ type: 'maintenanceWork' },\r\n\t{ type: 'maintenanceWorks' },\r\n\t{ type: 'manifestation', name: 'manifestation.svg' },\r\n\t{ type: 'meteo', name: 'meteo.svg' },\r\n\t{ type: 'MVA', name: 'MV_agence.svg' },\r\n\t{ type: 'MVC', name: 'MV_Consigne.svg' },\r\n\t{ type: 'nonWeatherRelatedRoadConditions' },\r\n\t{ type: 'objectOnTheRoad' },\r\n\t{ type: 'obstacle', name: 'obstacle.svg' },\r\n\t{ type: 'obstructionOnTheRoad' },\r\n\t{ type: 'other' },\r\n\t{ type: 'panne', name: 'panne.svg' },\r\n\t{ type: 'parkingCov', name: 'parkingCov.svg' },\r\n\t{ type: 'peopleOnRoadway' },\r\n\t{ type: 'PKG', name: 'PKG_0.svg' },\r\n\t{ type: 'pointCov', name: 'pointCov.svg' },\r\n\t{ type: 'pointService', name: 'pointService.svg' },\r\n\t{ type: 'pony', name: 'pony.svg' },\r\n\t{ type: 'poorEnvironmentConditions' },\r\n\t{ type: 'PAR', name: 'PR_0.svg' },\r\n\t{ type: 'publicEvent' },\r\n\t{ type: 'perturbation_low', name: 'ic_smiley_service_legerement_perturbe.svg' },\r\n\t{ type: 'perturbation_normal', name: 'ic_smiley_service_normal.svg' },\r\n\t{ type: 'perturbation_hight', name: 'ic_smiley_service_tres_perturbe.svg' },\r\n\t{ type: 'perturbation_over', name: 'ic_smiley_hors_service.svg' },\r\n\t{ type: 'RAIL', name: 'rail.svg' },\r\n\t{ type: 'recharge', name: 'recharge.svg' },\r\n\t{ type: 'reroutingManagement' },\r\n\t{ type: 'resurfacingWork' },\r\n\t{ type: 'restriction', name: 'restriction.svg' },\r\n\t{ type: 'roadClosed' },\r\n\t{ type: 'roadOperatorServiceDisruption' },\r\n\t{ type: 'roadOrCarriagewayOrLaneManagement' },\r\n\t{ type: 'roadsideAssistance' },\r\n\t{ type: 'roadworks' },\r\n\t{ type: 'rue' },\r\n\t{ type: 'serviceDisruption' },\r\n\t{ type: 'shedLoad' },\r\n\t{ type: 'spillageOnTheRoad' },\r\n\t{ type: 'speedManagement' },\r\n\t{ type: 'stationstaxi', name: 'ic-taxi.svg' },\r\n\t{ type: 'stops' },\r\n\t{ type: 'strongWinds' },\r\n\t{ type: 'SEM', name: 'SEM.svg' },\r\n\t{ type: 'SMA', name: 'SMA.svg' },\r\n\t{ type: 'SUBWAY' },\r\n\t{ type: 'tad', name: 'tad.svg' },\r\n\t{ type: 'tad_gsv', name: 'tad_gsv.svg' },\r\n\t{ type: 'tier', name: 'tier.svg' },\r\n\t{ type: 'transitInformation' },\r\n\t{ type: 'TRAM' },\r\n\t{ type: 'unprotectedAccidentArea' },\r\n\t{ type: 'vehicleObstruction' },\r\n\t{ type: 'vehicleOnWrongCarriageway' },\r\n\t{ type: 'veloservice', name: 'veloservice.svg' },\r\n\t{ type: 'visibilityReduced' },\r\n\t{ type: 'WALK' },\r\n\t{ type: 'weatherRelatedRoadConditions' },\r\n\t{ type: 'winterDrivingManagement' }\r\n];\r\n\r\n/**\r\n * @component\r\n * @name MIcons\r\n * @description\r\n * Icon component that wraps Angular Material's icon component to provide a customized icon display.\r\n * The component utilizes the `ICONS_MAPPING` constant for registering a set of icons and relies on\r\n * `MIconsService` to manage icon registration.\r\n *\r\n * ### Usage example\r\n * ```html\r\n * <m-icons type=\"home\"></m-icons>\r\n * ```\r\n */\r\n@Component({\r\n\tselector: 'm-icons',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MatIconModule],\r\n\ttemplateUrl: './m-icons.component.html',\r\n\tstyleUrls: ['./m-icons.component.scss'],\r\n})\r\nexport class MIcons {\r\n\t/**\r\n\t * Input property that defines the type of icon to display. This should match one of the `type` values\r\n\t * in `ICONS_MAPPING` to ensure the correct icon is displayed.\r\n\t */\r\n\t@Input() type?: string = '';\r\n\r\n\t/**\r\n\t * Input property that defines the color palette for the icon. This should match one of the `colors` values\r\n\t * in `ThemePalette` to ensure the correct color is applied to the icon.\r\n\t */\r\n\t@Input() color?: ThemePalette;\r\n\r\n\t/**\r\n\t * Initializes the component and registers a set of icons defined in the `ICONS_MAPPING` constant.\r\n\t * Calls `registerIcons` method of `MIconsService` to ensure that all necessary icons are available\r\n\t * for use within the application.\r\n\t *\r\n\t * @param mIconService The MIconsService instance to use for registering icons\r\n\t */\r\n\tconstructor(private mIconService: MIconsService) {\r\n\t\tthis.mIconService.registerIcons(ICONS_MAPPING);\r\n\t}\r\n}\r\n","<ng-container>\r\n\t<ng-container *ngIf=\"!type; else iconType\">\r\n\t\t<mat-icon [color]=\"color\"><ng-content></ng-content></mat-icon>\r\n\t</ng-container>\r\n\r\n\t<ng-template #iconType>\r\n\t\t<ng-container [ngSwitch]=\"type\">\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'arret'\">directions_bus</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'clusters'\" svgIcon=\"clusters\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'stops'\">nature_people</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'rue'\">place</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'lieux'\">location_city</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'PAR'\" svgIcon=\"PAR\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'PKG'\" svgIcon=\"PKG\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'dat'\">local_grocery_store</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'agenceM'\" svgIcon=\"agenceM\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'CAM'\">videocam</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'iti'\">directions</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'WALK'\">directions_walk</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'BICYCLE'\">directions_bike</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'CAR'\">directions_car</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'TRAM'\">tram</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'BUS'\">directions_bus</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'RAIL'\" svgIcon=\"RAIL\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'SUBWAY'\">subway</mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'recharge'\" svgIcon=\"recharge\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'autostop'\" svgIcon=\"autostop\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'citiz'\" svgIcon=\"citiz\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'citizyea'\" svgIcon=\"citizyea\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'parkingCov'\" svgIcon=\"parkingCov\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'pointCov'\" svgIcon=\"pointCov\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'pointService'\" svgIcon=\"pointService\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'depositaire'\" svgIcon=\"depositaire\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'MVA'\" svgIcon=\"MVA\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'MVC'\" svgIcon=\"MVC\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'gpl'\" svgIcon=\"gpl\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'gnv'\" svgIcon=\"gnv\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'hydrogene'\" svgIcon=\"hydrogene\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'COV'\" svgIcon=\"COV\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'accident'\" svgIcon=\"accident\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'bouchon'\" svgIcon=\"bouchon\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'chantier'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'greve'\" svgIcon=\"greve\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'info'\" svgIcon=\"information\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'information'\" svgIcon=\"information\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'manifestation'\" svgIcon=\"manifestation\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'meteo'\" svgIcon=\"meteo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'obstacle'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'restriction'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'panne'\" svgIcon=\"panne\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'irve'\" svgIcon=\"recharge\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'pony'\" svgIcon=\"pony\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'tad'\" svgIcon=\"tad\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'tad_gsv'\" svgIcon=\"tad_gsv\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ponyVehicle'\" svgIcon=\"pony\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'tier'\" svgIcon=\"tier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'tierVehicle'\" svgIcon=\"tier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'veloservice'\" svgIcon=\"veloservice\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'dott'\" svgIcon=\"dott\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'dott_scooter'\" svgIcon=\"dott_scooter\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'dott_bicycle'\" svgIcon=\"dott_bicycle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'voi'\" svgIcon=\"voi\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'voi_scooter'\" svgIcon=\"voi_scooter\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'voi_bike'\" svgIcon=\"voi_bike\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'letaxi'\" svgIcon=\"letaxi\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'CABLE_CAR'\" svgIcon=\"CABLE_CAR\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'perturbation_low'\" svgIcon=\"perturbation_low\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'perturbation_normal'\" svgIcon=\"perturbation_normal\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'perturbation_hight'\" svgIcon=\"perturbation_hight\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'perturbation_over'\" svgIcon=\"perturbation_over\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'group'\" svgIcon=\"group\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'group_small'\" svgIcon=\"group_small\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'group_medium'\" svgIcon=\"group_medium\"></mat-icon>\r\n\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_bus'\" svgIcon=\"ic_bus\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_star'\" svgIcon=\"ic_star\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_velo'\" svgIcon=\"ic_velo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_voiture'\" svgIcon=\"ic_voiture\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_trottinette'\" svgIcon=\"ic_trottinette\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_evt_exceptionnel'\" svgIcon=\"ic_evt_exceptionnel\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_mes_alertes'\" svgIcon=\"ic_mes_alertes\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'IRVE_Chademo'\" svgIcon=\"IRVE_Chademo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'IRVE_Combo'\" svgIcon=\"IRVE_Combo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'IRVE_EF'\" svgIcon=\"IRVE_EF\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'IRVE_Type_2'\" svgIcon=\"IRVE_Type_2\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'IRVE_Type_3'\" svgIcon=\"IRVE_Type_3\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'stationstaxi'\" svgIcon=\"stationstaxi\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_smiley_service_legerement_perturbe'\" svgIcon=\"ic_smiley_service_legerement_perturbe\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_smiley_service_normal'\" svgIcon=\"ic_smiley_service_normal\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_smiley_service_tres_perturbe'\" svgIcon=\"ic_smiley_service_tres_perturbe\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_hors_service_dark'\" svgIcon=\"ic_hors_service_dark\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_hors_service_light'\" svgIcon=\"ic_hors_service_light\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_perturb_dark'\" svgIcon=\"ic_perturb_dark\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ic_perturb_light'\" svgIcon=\"ic_perturb_light\"></mat-icon>\r\n\t\t\t<!-- New disturbance Type-->\r\n\t\t\t<!-- TODO give good icon for disturbances -->\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'abnormalTraffic'\" svgIcon=\"bouchon\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'accidentInvolvingHeavyLorries'\" svgIcon=\"accident\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'animalPresenceObstruction'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'authorityOperation'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'blastingWork'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'brokenDownVehicle'\" svgIcon=\"panne\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'clearanceWork'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'collision'\" svgIcon=\"accident\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'constructionWork'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'constructionWorks'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'disturbanceActivity'\" svgIcon=\"greve\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'environmentalObstruction'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'equipmentOrSystemFault'\" svgIcon=\"information\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'flooding'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'generalInstructionOrMessageToRoadUsers'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'generalNetworkManagement'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'generalObstruction'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'hazardsOnTheRoad'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'incident'\" svgIcon=\"accident\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'infrastructureDamageObstruction'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'laneClosures'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'maintenanceWork'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'maintenanceWorks'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'nonWeatherRelatedRoadConditions'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'objectOnTheRoad'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'obstructionOnTheRoad'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'other'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'peopleOnRoadway'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'poorEnvironmentConditions'\" svgIcon=\"meteo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'publicEvent'\" svgIcon=\"manifestation\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'reroutingManagement'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'resurfacingWork'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'roadClosed'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'roadOperatorServiceDisruption'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'roadOrCarriagewayOrLaneManagement'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'roadsideAssistance'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'roadworks'\" svgIcon=\"chantier\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'serviceDisruption'\" svgIcon=\"information\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'shedLoad'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'spillageOnTheRoad'\" svgIcon=\"obstacle\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'speedManagement'\" svgIcon=\"restriction\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'strongWinds'\" svgIcon=\"meteo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'transitInformation'\" svgIcon=\"information\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'transitInformation'\" svgIcon=\"information\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'unprotectedAccidentArea'\" svgIcon=\"accident\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'vehicleObstruction'\" svgIcon=\"panne\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'vehicleOnWrongCarriageway'\" svgIcon=\"panne\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'visibilityReduced'\" svgIcon=\"meteo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'weatherRelatedRoadConditions'\" svgIcon=\"meteo\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'winterDrivingManagement'\" svgIcon=\"meteo\"></mat-icon>\r\n\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'SMA'\" svgIcon=\"SMA\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'SEM'\" svgIcon=\"SEM\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'C38'\" svgIcon=\"C38\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'ARE'\" svgIcon=\"ARE\"></mat-icon>\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchCase=\"'DIR'\" svgIcon=\"DIR\"></mat-icon>\r\n\r\n\t\t\t<mat-icon [color]=\"color\" *ngSwitchDefault>not_listed_location</mat-icon>\r\n\t\t</ng-container>\r\n\t</ng-template>\r\n</ng-container>\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatListModule} from '@angular/material/list';\r\nimport {MIcons} from '../m-icons';\r\n\r\nexport interface Affluence {\r\n\t/** Occupancy level that determines the description displayed. */\r\n\tlvl: number;\r\n\t/** Occupancy traduction lvl to text */\r\n\tname: string;\r\n\t/** Occupancy description */\r\n\tdescription: string;\r\n\t/** LightMode */\r\n\tlightMode: boolean;\r\n}\r\n\r\n/**\r\n * @component\r\n * @name MAffluence\r\n * @description\r\n * The `MAffluence` component displays the level of occupancy with a description.\r\n * This component uses Angular Material List and Icon to present the occupancy level.\r\n *\r\n * ### Usage example\r\n * ```html\r\n * <m-affluence [lvl]=\"1\"></m-affluence>\r\n * ```\r\n *\r\n * @selector m-affluence\r\n * @standalone true\r\n * @module CommonModule, MatListModule, MatIconModule, MIcons\r\n */\r\n@Component({\r\n\tselector: 'm-affluence',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MatListModule, MatIconModule, MIcons],\r\n\ttemplateUrl: './m-affluence.component.html',\r\n\tstyleUrls: ['./m-affluence.component.scss']\r\n})\r\nexport class MAffluence implements OnInit {\r\n\t/**\r\n\t * Occupancy level that determines the description displayed.\r\n\t * Possible values:\r\n\t * - 1 : Low\r\n\t * - 2 : Moderate\r\n\t * - 3 : High\r\n\t *\r\n\t * @default undefined (displays all descriptions)\r\n\t */\r\n\t@Input() lvl: number;\r\n\r\n\t/**\r\n\t * Enable/disable light mode.\r\n\t */\r\n\t@Input() lightMode: boolean;\r\n\r\n\t/**\r\n\t * @private\r\n\t * List of available occupancy levels with their descriptions.\r\n\t */\r\n\tprivate affluenceDescription: Affluence[] = [\r\n\t\t{lvl: 1, name: 'Faible', description: 'C\\'est calme, une place assise vous attend.', lightMode: false},\r\n\t\t{lvl: 2, name: 'Modérée', description: 'Il reste sans doute quelques places assises.', lightMode: false},\r\n\t\t{lvl: 3, name: 'Forte', description: 'Il n\\'y aura probablement plus de places assises.', lightMode: false}\r\n\t];\r\n\r\n\t/**\r\n\t * Array used to display occupancy information based on the selected level (`lvl`).\r\n\t */\r\n\tpublic affluence: any[] = [];\r\n\r\n\t/**\r\n\t * Initializes the `affluence` array based on the provided occupancy level (`lvl`).\r\n\t * If no level is defined, displays all descriptions.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tif (this.lvl === undefined || this.lvl === null) this.affluence = this.affluenceDescription;\r\n\t\telse {\r\n\t\t\tthis.affluence.push(this.affluenceDescription.find(a => a.lvl === this.lvl));\r\n\t\t\tif (this.lightMode) this.affluence[0].lightMode = this.lightMode;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","<ng-container *ngIf=\"affluence && affluence.length !== 0\" class=\"m-theme important\">\r\n\r\n\t<ng-container *ngFor=\"let aff of affluence\">\r\n\t\t<mat-list *ngIf=\"!aff.lightMode; else lightMode\" class=\"m-ui-affluence\">\r\n\t\t\t<mat-list-item class=\"dark-overlay-8 light-overlay\">\r\n\t\t\t\t<div class=\"icon-content half-light\" [ngSwitch]=\"aff.lvl\">\r\n\t\t\t\t\t<m-icons matListItemAvatar *ngSwitchCase=\"2\" type=\"group\" data-type=\"moderee\">group</m-icons>\r\n\t\t\t\t\t<m-icons matListItemAvatar *ngSwitchCase=\"3\" type=\"group\" data-type=\"forte\">group</m-icons>\r\n\t\t\t\t\t<m-icons matListItemAvatar *ngSwitchDefault type=\"group\">group</m-icons>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div class=\"desc-content\">\r\n\t\t\t\t\t<div matListItemTitle>{{aff.name}}</div>\r\n\t\t\t\t\t<div matListItemLine>{{aff.description}}</div>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-list-item>\r\n\t\t</mat-list>\r\n\r\n\t\t<ng-template #lightMode>\r\n\t\t\t<ng-container *ngFor=\"let aff of affluence\">\r\n\t\t\t\t<span [ngSwitch]=\"aff.lvl\" class=\"affluenceLight\">\r\n\t\t\t\t\t<ng-container *ngSwitchCase=\"2\">\r\n\t\t\t\t\t\t<m-icons matListItemAvatar type=\"group\" data-type=\"moderee\">group</m-icons>\r\n\t\t\t\t\t\t<span class=\"text-secondary aff-legend\">{{aff.name}}</span>\r\n\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t<ng-container *ngSwitchCase=\"3\">\r\n\t\t\t\t\t\t<m-icons matListItemAvatar type=\"group\" data-type=\"forte\">group</m-icons>\r\n\t\t\t\t\t\t<span class=\"text-secondary aff-legend\">{{aff.name}}</span>\r\n\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t<ng-container *ngSwitchDefault>\r\n\t\t\t\t\t\t<m-icons matListItemAvatar type=\"group\">group</m-icons>\r\n\t\t\t\t\t\t<span class=\"text-secondary aff-legend\">{{aff.name}}</span>\r\n\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t</span>\r\n\t\t\t</ng-container>\r\n\t\t</ng-template>\r\n\r\n\t</ng-container>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n/**\r\n * @interface\r\n * @name Line\r\n * @description\r\n * Represents the properties of a transport line, including its colors, identifiers, and type.\r\n */\r\nexport interface Line {\r\n\t/** The color of the line. */\r\n\tcolor: string;\r\n\r\n\t/** The line ID. */\r\n\tid: string;\r\n\r\n\t/** The full name of the line. */\r\n\tlongName: string;\r\n\r\n\t/** The color for the text displayed on the line. */\r\n\ttextColor: string;\r\n\r\n\t/**the shape of the logo, est surchagre par l'input si existant */\r\n\tshape?: Shape;\r\n\r\n\t/** The line type, such as `PROXIMO`, `BUS`, `TEAM`, `CHRONO_PERI`. */\r\n\ttype: string;\r\n}\r\n\r\n/**\r\n * @interface\r\n * @name disturbanceInfo\r\n * @description\r\n * Represents the properties of a disturbance, including the disturbance level and whether it is outer.\r\n */\r\nexport interface disturbanceInfo {\r\n\t/** If `true`, the line has a disturbance */\r\n\thasDisturbance: boolean;\r\n\t/** The disturbance level. */\r\n\tnsv: number;\r\n\t/** If `true`, the disturbance is outer. */\r\n\touter: boolean;\r\n}\r\n\r\nexport enum Shape {\r\n\tROUNDED = \"rounded\",\r\n\tCIRCLE = \"circle\",\r\n\tSQUARE = \"square\",\r\n\tRECTANGLE = \"rectangle\",\r\n}\r\n\r\n\r\n/**\r\n * @component\r\n * @name MLogoLines\r\n * @description\r\n * A component that displays a logo for a given transport line. It customizes the size, padding,\r\n * and shape of the logo based on the input properties, and calculates optimal font size\r\n * for the line's name display.\r\n *\r\n * ### Usage example\r\n * ```html\r\n * <m-logo-lines [ligne]=\"lineData\" [height]=\"50\" [width]=\"50\"></m-logo-lines>\r\n * ```\r\n */\r\n@Component({\r\n\tselector: 'm-logo-lines',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MatCheckboxModule],\r\n\ttemplateUrl: './m-logo-lines.component.html',\r\n\tstyleUrls: ['./m-logo-lines.component.scss'],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MLogoLines implements OnChanges {\r\n\t/** The transport line object that defines the logo's content and colors. */\r\n\t@Input() ligne: Line;\r\n\t/** Padding coefficient for the top of the logo. */\r\n\t@Input() paddingCoefTop = 0.23;\r\n\t/** Padding coefficient for the left side of the logo. */\r\n\t@Input() paddingCoefLeft = 0.23;\r\n\t/** The height of the logo. */\r\n\t@Input() @HostBinding('style.height.px') height: number;\r\n\t/** The width of the logo. */\r\n\t@Input() @HostBinding('style.width.px') width: number;\r\n\t// /** If `true`, displays the logo in a circular shape */\r\n\t// @Input() isCircle = false;\r\n\t// /** If `true`, applies rounded corners to the logo. */\r\n\t// @Input() isRounded = false;\r\n\t// /** If `true`, displays the logo in a square shape. */\r\n\t// @Input() isSquare = false;\r\n\t/** If `true` display mat-checkbox behind logo-lines */\r\n\t@Input() isCheckbox = false;\r\n\t/** If `true`, displays the line's description. */\r\n\t@Input() description: boolean = false;\r\n\t/** If `true`, selects the line. */\r\n\t@Input() checked: boolean = false;\r\n\t/** The opacity of the logo. */\r\n\t@Input() opacity: number = 1;\r\n\t/** Add Logo Disturbance */\r\n\t@Input() disturbance: disturbanceInfo;\r\n\r\n\t/**The shape of the logo */\r\n\t@Input() shape?: Shape;\r\n\r\n\t/** Emits when the line is clicked. */\r\n\t@Output() lineChange: EventEmitter<{ line: Line, checked: boolean }> = new EventEmitter<{ line: Line, checked: boolean }>();\r\n\r\n\t/** The viewBox attribute for SVG scaling, updated based on width and height. */\r\n\tviewBox: string;\r\n\r\n\t/** The calculated font size for the line's text display. */\r\n\tfontSize: string;\r\n\r\n\tshortName: string;\r\n\r\n\tlongName: string;\r\n\r\n\tlineType: string;\r\n\r\n\r\n\r\n\t/**les classes à associer au svg du logo */\r\n\tclasses: string;\r\n\r\n\t/**\r\n\t * @method onClick\r\n\t * @description\r\n\t * Emits the `lineClicked` event when the line is clicked.\r\n\t *\r\n\t * @returns {void}\r\n\t */\r\n\tclickLine(ligne: Line, evt: MatCheckboxChange): void {\r\n\t\tthis.lineChange.emit({ line: ligne, checked: evt.checked });\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @method ngOnChanges\r\n\t * @description\r\n\t * Updates the component when input properties change. Calculates viewBox, font size, and other\r\n\t * properties based on the input line data and dimensions.\r\n\t *\r\n\t * @param {SimpleChanges} changes - The changes in input properties.\r\n\t * @returns {void}\r\n\t */\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tlet height = this.height || 40;\r\n\t\tlet width = this.width || 40;\r\n\r\n\t\tthis.classes = this.getClass();\r\n\r\n\t\tthis.classes = this.getClass();\r\n\r\n\t\t\r\n\t\t// ID parsing only reruns when 'ligne' changes\r\n\t\tif (changes.ligne?.currentValue) {\r\n\t\t\tconst splited = this.ligne.id.split(':');\r\n\t\t\tthis.shortName = splited[1] || '';\r\n\t\t\tthis.lineType = this.ligne.type;\r\n\t\t\tthis.longName = this.ligne.longName;\r\n\r\n\t\t\tif (this.lineType === 'SNC') this.shortName = 'TER';\r\n\t\t\tif (this.lineType === 'NAVETTE') {\r\n\t\t\t\tthis.shortName = this.shortName.substring(this.shortName.length - 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst effectiveHeight: number = changes.height?.currentValue ?? this.height ?? 40;\r\n\t\tconst effectiveWidth: number = changes.width?.currentValue ?? this.width ?? 40;\r\n\r\n\t\tif (changes.height || changes.width) {\r\n\t\t\tthis.viewBox = `0 0 ${effectiveWidth} ${effectiveHeight}`;\r\n\t\t}\r\n\r\n\t\t// Calculate font size on every change (protected against empty shortName)\r\n\t\tconst safeShortName = this.shortName && this.shortName.length > 0 ? this.shortName : 'X';\r\n\t\tconst fontHeight = effectiveHeight - (effectiveHeight * this.paddingCoefTop);\r\n\t\tconst maxTextWidth = effectiveWidth - (effectiveWidth * this.paddingCoefLeft);\r\n\t\tconst fzh = (0.8 / 16) * fontHeight;\r\n\t\tconst fzw = (0.8 / 8) * (maxTextWidth / safeShortName.length);\r\n\t\tthis.fontSize = `${Math.min(fzw, fzh)}em`;\r\n\t}\r\n\r\n\t/**\r\n\t * Attribute class for any disturbances and shape\r\n\t * @returns {string}\r\n\t */\r\n\tgetClass(): string {\r\n\t\tlet classes: string[] = [];\r\n\r\n\t\t// --- logique disturbance ---\r\n\t\tif (this.disturbance) {\r\n\t\t\tif (this.disturbance.outer) {\r\n\t\t\t\tclasses.push(\"outer\");\r\n\t\t\t}\r\n\t\t\tif (this.disturbance.hasDisturbance) {\r\n\t\t\t\tclasses.push(\"has-disturbance\");\r\n\t\t\t}\r\n\t\t\tif (this.disturbance.nsv) {\r\n\t\t\t\tclasses.push(`disturbance-${this.disturbance.nsv}`);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// --- logique shape ---\r\n\t\tclasses.push(this.getShape());\r\n\r\n\t\treturn classes.join(\" \");\r\n\t}\r\n\r\n\r\n\tgetShape() {\r\n\t\tif (this.shape) return this.shape\r\n\r\n\t\tif (this.ligne.shape) return this.ligne.shape\r\n\r\n\t\treturn Shape.ROUNDED;\r\n\t}\r\n\r\n}\r\n","<ng-container>\r\n\t<ng-container *ngIf=\"!isCheckbox else logoCheckbox\">\r\n\t\t<ng-container *ngTemplateOutlet=\"logolines\"></ng-container>\r\n\t</ng-container>\r\n\r\n\t<ng-template #logoCheckbox>\r\n\t\t<mat-checkbox labelPosition=\"before\" type=\"checkbox\" [attr.id]=\"ligne.id\" [class.description]=\"description\"\r\n\t\t\t[class.hideInput]=\"!description\" [checked]=\"checked\" (change)=\"clickLine(ligne, $event)\"\r\n\t\t\tclass=\"m-logo-line-checkbox\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"logolines\"></ng-container>\r\n\t\t</mat-checkbox>\r\n\t</ng-template>\r\n\r\n</ng-container>\r\n\r\n<ng-template #logolines>\r\n\t<div class=\"m-logo-line-icons\" [ngClass]=\"classes\" [ngStyle]=\"{\r\n\t\t\t\t'width.px': width,\r\n\t\t\t\t'height.px': height\r\n\t\t\t}\">\r\n\t\t<svg class=\" m-logo-line\" [ngStyle]=\"{\r\n\t\t\t\t'width': '100%',\r\n\t\t\t\t'height': '100%',\r\n\t\t\t\t'background': '#'+(ligne?.color ||'999999'),\r\n\t\t\t\t'font-size': fontSize,\r\n\t\t\t\t'opacity': opacity,\r\n\t\t\t\t'checkbox': disturbance?.hasDisturbance\r\n\t\t\t}\" [attr.viewBox]=\"viewBox\">\r\n\t\t\t<title>{{longName}}</title>\r\n\t\t\t<text x=\"51%\" y=\"50%\" text-anchor=\"middle\" dy=\"0.34em\"\r\n\t\t\t\t[attr.fill]=\"'#'+(ligne?.textColor||'ffffff')\">{{shortName}}</text>\r\n\t\t</svg>\r\n\t\t<svg [ngStyle]=\"{\r\n\t\t\t\t'width.px': width ?? 40,\r\n\t\t\t\t'height.px': height ?? 40,\r\n\t\t\t\t'opacity': opacity\r\n\t\t\t}\" viewBox=\"0 0 59.3 40.1\" *ngIf=\"['NAVETTE'].includes(lineType)\" class='relais'>\r\n\t\t\t<defs>\r\n\t\t\t\t<style>\r\n\t\t\t\t\t.relais-cls-1 {\r\n\t\t\t\t\t\tfill: #fff;\r\n\t\t\t\t\t\tstroke: #ea541e;\r\n\t\t\t\t\t\tstroke-miterlimit: 10;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.relais-cls-2 {\r\n\t\t\t\t\t\tfill: #ea541e;\r\n\t\t\t\t\t\tstroke-width: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t</style>\r\n\t\t\t</defs>\r\n\t\t\t<g transform=\"translate(0 16)\">\r\n\t\t\t\t<rect class=\"relais-cls-1\" x=\"3\" y=\"7.9\" width=\"53.8\" height=\"31.5\" rx=\"1.7\" ry=\"1.7\"\r\n\t\t\t\t\ttransform=\"translate(-1.8 0) rotate(-5.5)\" />\r\n\t\t\t\t<path class=\"relais-cls-2\"\r\n\t\t\t\t\td=\"M17.5,19.6c.9,0,1.7,0,2.5.2.8.2,1.3.6,1.8,1.2s.9,1.1,1.2,1.9.4,1.5.7,2.2c0,.8.1,1.5,0,2.1,0,.8-.3,1.4-.7,1.9s-1.1,1.3-1.8,1.8-1.4.7-2.4.8-1.7,0-2.5-.2-1.4-.8-2.1-1.5h-.2s0,.2,0,.3v.8c.1.3,0,.5,0,.8l-.4.5c-.3.2-.6,0-.9,0-.6,0-1.1-.4-1.4-.8-.3-.4-.5-.9-.7-1.3-.2-.4-.4-.9-.4-1.5s-.2-.9-.3-1l-.2-2.6c0-.8,0-1.7,0-2.4,0-.8,0-1.5.2-2.5s.3-1.7.4-2.6c0-.8.3-1.4.4-2,.2-.6.3-1.2.7-1.7.2-.6.7-1.1,1.1-1.6s.8-1,1.5-1.5c.6-.5,1.3-.7,2.1-.8s1.5,0,2.2.4c.6.2,1.3.8,1.7,1.4s.6,1.3.5,2.1c0,.6-.2,1.2-.4,1.7-.1.5-.4,1.1-.6,1.6s-.5,1-.8,1.4c-.3.2-.6.5-.8.8M20.8,26.7c.2-.8.3-1.4,0-2.1,0-.8-.3-1.3-.6-1.9s-.7-1-1.2-1.3c-.5-.3-1-.5-1.3-.5-.5-.1-1.1,0-1.4.1-.5,0-.7.2-1.2.4l-.9.5c-.1.2-.4.3-.4.6-.1.3-.2.8-.3,1.2s0,.9,0,1.5l.9-.5c.3-.2.6-.2.9-.4.3,0,.6-.2.9,0,.3,0,.5.1.5.1q.2.1,0,.3c-.1.2-.3.2-.6.4s-.6.4-.8.7c-.3.3-.5.7-.6,1.3-.1.5,0,.8.1,1.1s.4.6.8.8c.5.1.9.2,1.4.2s1-.3,1.5-.4c.4-.2.9-.5,1.3-.9.6-.4.8-.7,1-1.2M17.3,12.9c-.3-.1-.6,0-.9.2-.3.3-.7.7-1,1.2-.3.5-.5,1.1-.7,1.7-.2.6-.5,1.3-.6,1.7s-.2.9-.2,1.4,0,.5.2.4c.6,0,1.2-.4,1.6-.8.4-.3.8-.8,1.2-1.3.3-.5.5-1,.8-1.6.1-.5.2-1.1.3-1.5v-1.2c-.3,0-.4-.3-.7-.2\" />\r\n\t\t\t\t<path class=\"relais-cls-2\"\r\n\t\t\t\t\td=\"M28.2,18.7v1.1c.1.5.2,1.1.3,1.7l.2,2c0,.6.3,1.2.3,1.8.2.6.4,1,.6,1.3.2.3.5.4.8.4.5,0,.9-.2,1.2-.6.3-.3.5-.8.8-1.4.2-.6.3-1.2.4-1.9,0-.6.2-1.4.1-2,0-.6,0-1.2,0-1.8s-.1-1.1,0-1.4c0-.3,0-.6.2-.8.1-.2.4-.3.7-.4s.6,0,.9,0l.9.4c.3.1.5.4.8.5.2.3.3.4.4.7v1.4c.2.6,0,1.2.2,2l.2,2.3c0,.8.1,1.5.4,2.1s.4,1.2.6,1.6c.3.4.7.7,1.1.8s.6.2.8.4.2.3,0,.5-.3.3-.6.4c-.3.2-.8,0-1.4.1-.9,0-1.7-.3-2.4-.8s-1-1-1.3-1.4c-.4-.6-.6-1.3-.7-2.1-.2.8-.5,1.6-.9,2.2-.2.6-.8,1.1-1.2,1.5-.6.5-1.3.6-2.1.7-.9,0-1.5-.3-2.2-.6-.6-.4-1.1-.8-1.5-1.4-.4-.6-.7-1.1-.9-1.9s-.4-1.3-.5-2.1-.3-1.2-.3-1.6l-.2-1.7c0-.5,0-.9,0-1.2.1-.3,0-.6.2-.8.1-.2.4-.2.7-.4.4-.2.7-.2,1.2-.3s.8,0,1.1,0c.6,0,.8.2.8.7\" />\r\n\t\t\t\t<path class=\"relais-cls-2\"\r\n\t\t\t\t\td=\"M47.5,13.8c.2.1,0,.3,0,.5-.1.2-.3.2-.4.3s-.4.2-.6.4c-.3.2-.4.3-.7.7-.3.3-.4.6-.5,1-.1.3,0,.8,0,1.4s.3,1.2.6,1.6c.4.6.7,1,1.2,1.6.5.4,1,1,1.5,1.4.5.4,1,1,1.5,1.4.5.4.9,1,1.1,1.6.4.6.4,1,.5,1.6,0,.6-.4,1.1-.8,1.6-.6.5-1.1.9-1.9,1.1s-1.6.5-2.5.5-1.8.2-2.6,0c-.8,0-1.5-.3-2.2-.6s-1-.8-1.2-1.3c-.4-.9-.4-1.5-.4-2.1,0-.6.2-1.1.3-1.5.3-.5.4-.8.8-1,.3-.2.6-.5.7-.5.4-.3.7-.4.9,0s0,.8-.2,1.2c-.1.3,0,.6,0,.9.2.3.4.7.7,1s.8.5,1.3.6,1.1.2,1.7.1.8,0,1-.3c.4-.2.7-.4.9-.5.3-.2.4-.5.4-.8s0-.6-.4-.9-.8-.7-1.5-1.2-1.5-.9-2.1-1.6c-.8-.5-1.5-1.2-2-1.9s-.9-1.4-1-2.2c-.1-1.5,0-2.6.4-3.2.4-.8,1.3-1.2,2.4-1.6.6-.2,1-.3,1.3-.3s.6,0,.9,0c.2.1.3.1.5.3,0,.6.2.7.2.9\" />\r\n\t\t\t</g>\r\n\t\t</svg>\r\n\t</div>\r\n</ng-template>","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\n\r\n// Epochs\r\nconst epochs: any = [\r\n\t['an(s)', 31536000],\r\n\t['mois', 2592000],\r\n\t['j', 86400],\r\n\t['h', 3600],\r\n\t['mn', 60],\r\n\t['s', 1]\r\n];\r\n\r\n\r\n@Pipe({\r\n\tstandalone: true,\r\n\tname: 'relativeDate'\r\n})\r\nexport class RelativeDatePipe implements PipeTransform {\r\n\r\n\ttransform(dateStamp: number): string {\r\n\t\tconst tempDate = new Date(dateStamp);\r\n\t\tif (tempDate.getFullYear() === 1970) return 'Jamais';\r\n\t\telse {\r\n\t\t\tlet timeAgoInSeconds = Math.floor((new Date().getTime() - tempDate.getTime()) / 1000);\r\n\t\t\tlet {interval, epoch} = this.getDuration(timeAgoInSeconds);\r\n\t\t\tlet suffix = interval === 1 ? '' : '';//pluriels supprimés car abbreviations\r\n\t\t\treturn `il y a ${interval} ${epoch} ${suffix}`;\r\n\t\t}\r\n\t}\r\n\r\n\tgetDuration(timeAgoInSeconds: number) {\r\n\t\tfor (let [name, seconds] of epochs) {\r\n\t\t\tlet interval = Math.floor(timeAgoInSeconds / seconds);\r\n\t\t\tif (interval >= 1) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tinterval: interval,\r\n\t\t\t\t\tepoch: name\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tinterval: 0,\r\n\t\t\tepoch: 's'\r\n\t\t};\r\n\t};\r\n\r\n}\r\n","import {ThemePalette} from '@angular/material/core';\r\nimport {MatSelectChange} from '@angular/material/select';\r\n\r\n/**\r\n * Enumeration of the different types of headers supported in the table.\r\n */\r\nexport enum HeaderTypes {\r\n\t/** Text-based column. */\r\n\tTEXT = 'text',\r\n\t/** Relative Date-based */\r\n\tRELATIVE_DATE = 'relative_date',\r\n\t/** Date-based column. */\r\n\tDATE = 'date',\r\n\t/** Numeric column. */\r\n\tNUMBER = 'number',\r\n\t/** Boolean column. */\r\n\tBOOLEAN = 'boolean',\r\n\t/** Column for action buttons. */\r\n\tACTIONS = 'actions',\r\n\t/** Dropdown selection in a row. */\r\n\tSELECT = 'select',\r\n\t/** Checkbox for selecting rows. */\r\n\tSELECTION = 'selection',\r\n\t/** Column for matching criteria. */\r\n\tMATCHING = 'matching',\r\n\t/** Array data column. */\r\n\tARRAY = 'array',\r\n\t/** List data column. */\r\n\tLIST = 'list',\r\n\t/** Column with anchor (`<a>`) links. */\r\n\tLINK = 'link',\r\n\t/** Icon column.*/\r\n\tICON = 'icon',\r\n\t/** Transport line column. */\r\n\tLINE = 'line',\r\n}\r\n\r\n/**\r\n * Defines the structure of each table header.\r\n */\r\nexport interface HeaderTable {\r\n\t/** The display title of the column */\r\n\ttitle: string;\r\n\t/** Unique key identifier for the column */\r\n\tkey: string;\r\n\t/** Optional additional keys for complex data handling */\r\n\totherKey?: string[];\r\n\t/** The type of the column header */\r\n\ttype: HeaderTypes;\r\n\t/** Options for columns of type 'select' */\r\n\tselectOptions?: HeaderTableSelectOptions;\r\n\t/** Custom data associated with the header */\r\n\tdata?: any;\r\n\t/** Additional options to configure the header */\r\n\toptions?: HeaderTableOptions;\r\n}\r\n\r\n/**\r\n * Options for columns of type 'select'\r\n */\r\nexport interface HeaderTableSelectOptions {\r\n\t/** Method to handle selection changes */\r\n\tmethod: (evt: MatSelectChange, data: any) => void;\r\n\t/** Array of selectable options */\r\n\toptions: any[];\r\n}\r\n\r\n/**\r\n * Additional options to configure the header\r\n */\r\nexport interface HeaderTableOptions {\r\n\t/** Optional format for displaying data */\r\n\tformat?: string;\r\n\t/** Maximum allowed length of the column data */\r\n\tmaxLength?: number;\r\n\t/** Method returning CSS classes for custom styling */\r\n\tclass?: (row: any) => string[];\r\n\t/** If true, removes spaces from data */\r\n\tremoveSpace?: boolean;\r\n\t/** Key used for matching data entries */\r\n\tmatchingKey?: string;\r\n}\r\n\r\n/**\r\n * Custom configuration for table behavior and display.\r\n */\r\nexport interface ConfigTableCustom {\r\n\t/** Default sorting order for a column */\r\n\tdefaultOrderColumn?: {\r\n\t\t/** Column name to sort by default */\r\n\t\tcolumn: string;\r\n\t\t/** Sort order, ascending or descending */\r\n\t\torder: 'asc' | 'desc';\r\n\t};\r\n\t/** Array of possible page sizes for pagination */\r\n\tpageSize: number[];\r\n\t/** Enables or disables the filter option */\r\n\tshowFilter: boolean;\r\n\t/** Allows multi-selection if set to true */\r\n\tmultiSelect?: boolean;\r\n}\r\n\r\n/**\r\n * Defines configuration for row and column actions in the table.\r\n */\r\nexport interface ConfigActionTable {\r\n\t/** Array of actions available for columns */\r\n\tcolumn?: ActionTable[];\r\n\t/** Function executed on row action */\r\n\tline?: (data: any, evt: Event) => void;\r\n}\r\n\r\n/**\r\n * Represents an action associated with a table.\r\n */\r\nexport interface ActionTable {\r\n\t/** Display title of the action */\r\n\ttitle: string;\r\n\t/** CSS class for styling the action */\r\n\tclass: string;\r\n\t/** Icon name associated with the action */\r\n\ticon: string;\r\n\t/** The action to be performed */\r\n\taction: any;\r\n\t/** Determines if the action is part of a menu */\r\n\tisMenu: boolean;\r\n\t/** Optional color theme for the action */\r\n\tcolor?: ThemePalette;\r\n\t/** Disables the action based on specific criteria */\r\n\tdisabled: (p: any) => boolean;\r\n}\r\n\r\n/**\r\n * Main configuration interface for the table component.\r\n */\r\nexport interface ConfigTable {\r\n\t/** Label for the table */\r\n\tlabel: string;\r\n\t/** Array of headers defining each column in the table */\r\n\theaders: HeaderTable[];\r\n\t/** Array of data entries for the table */\r\n\tdata: any[];\r\n\t/** Type identifier for the table */\r\n\ttype: string;\r\n\t/** Custom configuration options for the table */\r\n\tconfig: ConfigTableCustom;\r\n\t/** Array of custom button configurations */\r\n\tbuttons?: ConfigButtonTable[];\r\n\t/** Configuration for table actions */\r\n\tactions: ConfigActionTable;\r\n}\r\n\r\n/**\r\n * Defines the structure for custom buttons in the table.\r\n */\r\nexport interface ConfigButtonTable {\r\n\t/** Unique identifier for the button */\r\n\tid: number | string;\r\n\t/** Display title of the button */\r\n\ttitle: string;\r\n\t/** Value associated with the button */\r\n\tvalue: any;\r\n\t/** Function executed when the button is clicked */\r\n\taction: (d: ConfigButtonTable, event: Event) => void;\r\n}\r\n\r\n/**\r\n * Defines data return by filter\r\n */\r\nexport interface FilterText {\r\n\t/** Search text */\r\n\tfilter: string;\r\n\t/** Data found */\r\n\tdata: any[];\r\n}\r\n","import {SelectionModel} from '@angular/cdk/collections';\r\nimport {CommonModule} from '@angular/common';\r\nimport {AfterViewInit, Component, EventEmitter, Input, OnChanges, Output, SimpleChange, SimpleChanges, ViewChild} from '@angular/core';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatRippleModule} from '@angular/material/core';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {MatPaginator, MatPaginatorModule} from '@angular/material/paginator';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {MatSort, MatSortModule} from '@angular/material/sort';\r\nimport {MatTable, MatTableDataSource, MatTableModule} from '@angular/material/table';\r\nimport {RelativeDatePipe} from './relative-date.pipe';\r\nimport {MIcons} from '../m-icons';\r\nimport {MLogoLines} from '../m-logo-lines';\r\nimport {ConfigActionTable, ConfigTableCustom, FilterText, HeaderTable, HeaderTypes} from './m-table.interface';\r\n\r\n/**\r\n * @component\r\n * @name MTable\r\n * @description\r\n * A configurable table component that extends Angular Material's mat-table.\r\n * It includes features like filtering, sorting, pagination, dynamic content, and row selection.\r\n *\r\n * ### Usage example\r\n * ```html\r\n * <m-table [data]=\"tableData\" [headers]=\"tableHeaders\" [config]=\"tableConfig\"></m-table>\r\n * ```\r\n */\r\n@Component({\r\n\tselector: 'm-table',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule, MatPaginatorModule, MatTableModule, MatButtonModule, MatMenuModule,\r\n\t\tMatIconModule, MatCheckboxModule, MatSelectModule, FormsModule, MatInputModule, MatSortModule, MIcons, MLogoLines, MatRippleModule, RelativeDatePipe\r\n\t],\r\n\ttemplateUrl: './m-table.component.html',\r\n\tstyleUrls: ['./m-table.component.scss']\r\n})\r\nexport class MTable implements AfterViewInit, OnChanges {\r\n\t/** Data to display in table */\r\n\t@Input() data: any[];\r\n\t/** Configuration for each table column header. */\r\n\t@Input() headers: HeaderTable[];\r\n\t/** Configuration settings for table behavior (e.g., pagination, filtering). */\r\n\t@Input() config: ConfigTableCustom;\r\n\t/** Actions configuration for rows or buttons. */\r\n\t@Input() actions: ConfigActionTable = {};\r\n\t/** Emits changes in row selection. */\r\n\t@Output() selectionChange = new EventEmitter();\r\n\t/** Emits changes filter */\r\n\t@Output() filter: EventEmitter<FilterText> = new EventEmitter();\r\n\t/** Reference to the MatTable instance. */\r\n\t@ViewChild('table', {static: false}) table: MatTable<any>;\r\n\t/** Reference to the MatPaginator instance. */\r\n\t@ViewChild(MatPaginator) paginator: MatPaginator;\r\n\t/** Reference to the MatSort instance for sorting. */\r\n\t@ViewChild(MatSort) sort: MatSort;\r\n\r\n\tpublic dataSource: MatTableDataSource<any>;\r\n\tpublic header: string[] = [];\r\n\tpublic selection = new SelectionModel<any>(true, []);\r\n\r\n\tprotected readonly Object = Object;\r\n\tprotected readonly HeaderTypes = HeaderTypes;\r\n\r\n\t/** init dataSource */\r\n\tconstructor() {\r\n\t\tthis.dataSource = new MatTableDataSource<any>([]);\r\n\t}\r\n\r\n\t/**\r\n\t * @method ngAfterViewInit\r\n\t * @description\r\n\t * Initializes paginator and sorting after view is fully initialized.\r\n\t */\r\n\tngAfterViewInit(): void {\r\n\t\tif (this.config.pageSize.length > 0) this.dataSource.paginator = this.paginator;\r\n\t\tthis.dataSource.sort = this.sort;\r\n\t}\r\n\r\n\t/**\r\n\t * @method ngOnChanges\r\n\t * @description\r\n\t * Detects changes in input data and updates the table if necessary.\r\n\t * @param {SimpleChanges} changes - Object containing changes in input properties.\r\n\t */\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\t// Detect changes on data and headers\r\n\t\tconst data: SimpleChange = changes.data;\r\n\t\tconst headers: SimpleChange = changes.headers;\r\n\r\n\t\tif (data && data.previousValue === undefined || headers) {\r\n\t\t\tthis.initData();\r\n\t\t} else if (JSON.stringify(data.currentValue) !== JSON.stringify(data.previousValue)) {\r\n\t\t\t// Check if data send is different from previous data\r\n\t\t\t// Add new element to dataSource\r\n\t\t\tif (data.currentValue.length !== this.dataSource.data.length) this.initData();\r\n\t\t\telse {\r\n\t\t\t\tconst newData: any[] = [...this.dataSource.data];\r\n\t\t\t\tif (typeof data === 'undefined') return;\r\n\t\t\t\tif (data.currentValue.length !== this.dataSource.data.length) this.initData();\r\n\t\t\t\tdata.currentValue.forEach((oneCurr: any, index: string | number) => {\r\n\t\t\t\t\tif (JSON.stringify(oneCurr) !== JSON.stringify(this.dataSource.data[index])) newData[index] = oneCurr;\r\n\t\t\t\t});\r\n\t\t\t\tthis.orderBy(newData);\r\n\t\t\t\tthis.dataSource.data = newData;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initializes table data and headers.\r\n\t */\r\n\tprivate initData() {\r\n\t\tthis.initHeader();\r\n\t\tthis.initDataSource();\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes the data source based on headers configuration.\r\n\t */\r\n\tprivate initDataSource(): void {\r\n\t\tif (this.data && this.headers) {\r\n\t\t\t// Map again the data to transform it if other keys found\r\n\t\t\tconst newData = this.data.map(row => {\r\n\t\t\t\t// Add old Key to new key\r\n\t\t\t\tconst transformedRow: any = {...row};\r\n\t\t\t\tthis.headers.forEach((header: HeaderTable) => {\r\n\t\t\t\t\tif (header.type !== HeaderTypes.SELECTION) transformedRow[header.key] = this.getCellData(row, header);\r\n\t\t\t\t});\r\n\t\t\t\treturn transformedRow;\r\n\t\t\t});\r\n\r\n\t\t\tthis.orderBy(newData);\r\n\t\t\tthis.dataSource.data = newData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sorts data according to the default order in the configuration.\r\n\t * @param data Data array to sort.\r\n\t */\r\n\tprivate orderBy(data: any[]): void {\r\n\t\tif (this.config && this.config.defaultOrderColumn && this.config.defaultOrderColumn.column) {\r\n\t\t\tconst column = this.config.defaultOrderColumn.column;\r\n\t\t\tconst order: 'asc' | 'desc' = this.config.defaultOrderColumn.order;\r\n\t\t\tif (column && order) {\r\n\t\t\t\tconst value = order === 'asc' ? -1 : 1;\r\n\t\t\t\tdata.sort((a, b) => a[column] > b[column] ? value : -value);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves cell data, applying any header configuration options.\r\n\t * @param row The data row.\r\n\t * @param data Header configuration.\r\n\t * @return Processed cell data.\r\n\t */\r\n\tprivate getCellData(row: any, data: HeaderTable): any {\r\n\t\tlet result = null;\r\n\t\tif (row) {\r\n\t\t\tresult = data.otherKey && data.otherKey.length > 0 ? this.getNestedValue(row, data.otherKey) : row[data.key];\r\n\t\t\tif (data.options && data.options.maxLength && result) return result.length > data.options.maxLength ? result.substring(0, data.options.maxLength) + '...' : result;\r\n\t\t\tif (data.options && Object.keys(data.options).length > 0) {\r\n\t\t\t\tif (data.options.removeSpace) result = result.replace(/\\s/g, '');\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves a nested value from an object based on a list of keys.\r\n\t * @param obj The object to retrieve data from.\r\n\t * @param keyData Array of keys for nested object access.\r\n\t * @return The nested value.\r\n\t */\r\n\tprivate getNestedValue(obj: any, keyData: string[]): any {\r\n\t\treturn keyData.reduce((nestedObj, currentKey) => {\r\n\t\t\treturn nestedObj && nestedObj[currentKey];\r\n\t\t}, obj);\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes header keys based on the headers input.\r\n\t * @return void\r\n\t */\r\n\tprivate initHeader(): void {\r\n\t\tif (this.headers) this.header = this.headers.map((item: HeaderTable) => item.key);\r\n\t}\r\n\r\n\t/**\r\n\t * Applies a filter to the table data based on input text.\r\n\t * @param event Filter input event.\r\n\t */\r\n\tapplyFilter(event: Event): void {\r\n\t\tconst filterValue: string = (event.target as HTMLInputElement).value;\r\n\t\tthis.dataSource.filter = filterValue.trim().toLowerCase();\r\n\t\tthis.filter.emit({filter: filterValue, data: this.dataSource.filteredData});\r\n\r\n\t\tif (this.config.pageSize.length > 0 && this.dataSource.paginator) {\r\n\t\t\tthis.dataSource.paginator.firstPage();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles selection for all rows.\r\n\t * @param evt Event indicating the toggle state.\r\n\t */\r\n\ttoggleAllRows(evt: any) {\r\n\t\tconst select = !!evt;\r\n\r\n\t\tif (select && this.isAllSelected()) {\r\n\t\t\tthis.selection.clear();\r\n\t\t\tthis.selectionChange.emit(this.selection.selected);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.selection.select(...this.dataSource.data);\r\n\t\tthis.selectionChange.emit(this.selection.selected);\r\n\t\treturn;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if all rows are selected.\r\n\t * @return True if all rows are selected.\r\n\t */\r\n\tisAllSelected(): boolean {\r\n\t\tconst numSelected: number = this.selection.selected.length;\r\n\t\tconst numRows: number = this.dataSource.data.length;\r\n\t\treturn numSelected === numRows;\r\n\t}\r\n\r\n\t/**\r\n\t * Provides a label for the checkbox.\r\n\t * @param row Optional row data.\r\n\t * @return Checkbox label.\r\n\t */\r\n\tcheckboxLabel(row?: any): string {\r\n\t\tif (!row) return `${this.isAllSelected() ? 'désélectionner' : 'sélectionner'} tous les éléments`;\r\n\t\treturn `${this.selection.isSelected(row) ? 'désélectionner' : 'sélectionner'} la ligne ${row.position + 1}`;\r\n\t}\r\n\r\n\t/**\r\n\t * Builds CSS classes for a row based on header configuration.\r\n\t * @param data Header configuration.\r\n\t * @param row Row data.\r\n\t * @return Array of CSS classes.\r\n\t */\r\n\tbuildClass(data: HeaderTable, row: any): string[] {\r\n\t\tif (data.options && typeof data.options.class !== 'undefined') {\r\n\t\t\treturn data.options.class(row);\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles selection for a specific row and emits the selection change.\r\n\t * @param evt The event triggering selection change.\r\n\t * @param row Row to toggle.\r\n\t */\r\n\tchangeSelection(evt: any, row: any): void {\r\n\t\tconst select = evt ? this.selection.toggle(row) : null;\r\n\t\tthis.selectionChange.emit(this.selection.selected);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if a specific row is selected.\r\n\t * @param row Row to check.\r\n\t * @return True if the row is selected.\r\n\t */\r\n\tisSelected(row: any): boolean {\r\n\t\treturn this.selection.isSelected(row);\r\n\t}\r\n\r\n\t/**\r\n\t * Open link and stop propagation\r\n\t * @param link : string\r\n\t * @param target : string\r\n\t * @param evt : Event\r\n\t * @return void\r\n\t */\r\n\topenLink(link: string, target: string, evt: Event): void {\r\n\t\twindow.open(link, target);\r\n\t\tevt.stopImmediatePropagation();\r\n\t}\r\n\r\n}\r\n","<div class=\"m-table\">\r\n\t<div class=\"m-table-header dark-overlay-2 light-overlay-inner\" *ngIf=\"config.showFilter\">\r\n\t\t<div class=\"m-table-filter-content\">\r\n\t\t\t<ng-content select=\"[left]\"></ng-content>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"m-table-filter\">\r\n\t\t\t<mat-form-field appearance=\"outline\">\r\n\t\t\t\t<mat-label>Filter</mat-label>\r\n\t\t\t\t<span matPrefix>&nbsp;<mat-icon>search</mat-icon>&nbsp;</span>\r\n\t\t\t\t<input (keyup)=\"applyFilter($event)\" matInput placeholder=\"Recherche\">\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t\t<div class=\"m-table-filter-content\">\r\n\t\t\t<ng-content select=\"[right]\"></ng-content>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"m-table-content\">\r\n\t\t<table [dataSource]=\"dataSource\" class=\"m-theme\" mat-table matSort #table>\r\n\t\t\t<ng-container *ngFor=\"let data of headers; let i = index\">\r\n\t\t\t\t<ng-container [matColumnDef]=\"data.key\">\r\n\t\t\t\t\t<!-- Colonne name -->\r\n\t\t\t\t\t<ng-container *ngIf=\"data.type !== HeaderTypes.SELECTION; else select\">\r\n\t\t\t\t\t\t<th *matHeaderCellDef class=\"title\" mat-header-cell mat-sort-header>{{ data.title }}</th>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t<ng-template #select>\r\n\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef>\r\n\t\t\t\t\t\t\t<mat-checkbox (change)=\"toggleAllRows($event)\"\r\n\t\t\t\t\t\t\t\t\t\t  [checked]=\"selection.hasValue() && isAllSelected()\"\r\n\t\t\t\t\t\t\t\t\t\t  [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n\t\t\t\t\t\t\t\t\t\t  [aria-label]=\"checkboxLabel()\">\r\n\t\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t\t<td *matCellDef=\"let row\" mat-cell [ngClass]=\"buildClass(data, row)\">\r\n\r\n\t\t\t\t\t\t<ng-container [ngSwitch]=\"data.type\">\r\n\r\n\t\t\t\t\t\t\t<!-- RELATIVE DATE -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.RELATIVE_DATE\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"row[data.key]\">\r\n\t\t\t\t\t\t\t\t\t{{ row[data.key] | relativeDate }}\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- DATE -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.DATE\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"row[data.key]\">\r\n\t\t\t\t\t\t\t\t\t{{ row[data.key] | date: data.options && data.options.format ? data.options.format : 'dd/MM/yyyy H:mm' }}\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- SELECT -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.SELECT\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"data.selectOptions && data.selectOptions.method\">\r\n\t\t\t\t\t\t\t\t\t<mat-select [ngClass]=\"buildClass(data, row)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(selectionChange)=\"data.selectOptions.method($event, row)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"row[data.key]\">\r\n\t\t\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let i of data.selectOptions.options\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[value]=\"i\">{{ i }}\r\n\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- SELECTION -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.SELECTION\">\r\n\t\t\t\t\t\t\t\t<mat-checkbox (click)=\"$event.stopPropagation()\"\r\n\t\t\t\t\t\t\t\t\t\t\t  (change)=\"changeSelection($event, row)\"\r\n\t\t\t\t\t\t\t\t\t\t\t  [checked]=\"isSelected(row)\"\r\n\t\t\t\t\t\t\t\t\t\t\t  [aria-label]=\"checkboxLabel(row)\">\r\n\t\t\t\t\t\t\t\t</mat-checkbox>\r\n\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- BOOLEAN -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.BOOLEAN\">\r\n\t\t\t\t\t\t\t\t<mat-icon>{{ row[data.key] ? 'check' : 'close' }}</mat-icon>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- MATCHING -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.MATCHING\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"data.data && data.data[row[data.key]]\">\r\n\t\t\t\t\t\t\t\t\t{{ data.data[row[data.key]]}}\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- ICON -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.ICON\">\r\n\t\t\t\t\t\t\t\t<m-icons [type]=\"row[data.key]\"></m-icons>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- LINE -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.LINE\">\r\n\t\t\t\t\t\t\t\t<div class=\"lines\">\r\n\t\t\t\t\t\t\t\t\t<ul *ngIf=\"row[data.key] && Object.keys(row[data.key]).length !== 0\">\r\n\t\t\t\t\t\t\t\t\t\t<li *ngFor=\"let line of Object.keys(row[data.key])\">\r\n\t\t\t\t\t\t\t\t\t\t\t<m-logo-lines\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ligne]=\"row[data.key][line]\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[height]=\"30\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[width]=\"row[data.key][line].id.includes('SEM') ? 30 : 50\"\r\n\t\t\t\t\t\t\t\t\t\t\t></m-logo-lines>\r\n\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- LIST -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.LIST\">\r\n\t\t\t\t\t\t\t\t<ul>\r\n\t\t\t\t\t\t\t\t\t<li *ngFor=\"let item of row[data.key]; let isFirst = first; let isLast = last\"\r\n\t\t\t\t\t\t\t\t\t\t[class.first]=\"isFirst\"\r\n\t\t\t\t\t\t\t\t\t\t[class.last]=\"isLast\"\r\n\t\t\t\t\t\t\t\t\t\t[class.valid]=\"item == 'Valide'\"\r\n\t\t\t\t\t\t\t\t\t\t[class.invalid]=\"item == 'Invalide'\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{{ item }}\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- LINK -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.LINK\">\r\n\t\t\t\t\t\t\t\t<div class=\"links\">\r\n\t\t\t\t\t\t\t\t\t<button mat-icon-button *ngIf=\"row[data.key]; else noLink\" (click)=\"openLink(row[data.key], '_blank', $event)\" color=\"primary\">\r\n\t\t\t\t\t\t\t\t\t\t<mat-icon>link</mat-icon>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<ng-template #noLink></ng-template>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- ARRAY -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.ARRAY\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"row[data.key] && row[data.key].length > 0\">\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let item of row[data.key]; let last = last\">\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ item }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"!last\">, </span>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- TEXT, NUMBER -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchDefault>\r\n\t\t\t\t\t\t\t\t<span>{{ row[data.key] }}</span>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t<!-- ACTIONS -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"HeaderTypes.ACTIONS\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"actions && actions.column && actions.column.length > 0\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"actions\">\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let a of actions.column\">\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!a.isMenu; else btnMenu\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"a.disabled(row)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"a.action(row, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[color]=\"a.color\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"{{a.title}}\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ a.icon }}</mat-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-template #btnMenu>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<button mat-icon-button [matMenuTriggerFor]=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Actions\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon>more_vert</mat-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-menu class=\"actions-menu\" #menu=\"matMenu\" [xPosition]=\"'before'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"a.disabled(row)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"a.action(row, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmat-menu-item\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"{{a.title}}\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [color]=\"a.color\">{{ a.icon }}</mat-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{a.title}}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-menu>\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t</td>\r\n\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<tr *matHeaderRowDef=\"header; sticky: true\" mat-header-row></tr>\r\n\t\t\t<tr mat-row (click)=\"actions && actions.line && actions.line(row, $event)\"\r\n\t\t\t\t*matRowDef=\"let row; columns: header;\"\r\n\t\t\t\t[class.pointer]=\"!!actions.line\"\r\n\t\t\t>\r\n\t\t\t</tr>\r\n\r\n\t\t\t<!-- Row shown when there is no matching data. -->\r\n\t\t\t<tr *matNoDataRow class=\"mat-row empty\">\r\n\t\t\t\t<td class=\"mat-cell\" colspan=\"4\">No data matching the filter</td>\r\n\t\t\t</tr>\r\n\r\n\t\t</table>\r\n\t</div>\r\n\r\n\t<ng-container *ngIf=\"config.pageSize.length > 0\">\r\n\t\t<mat-paginator [pageSizeOptions]=\"config.pageSize\" aria-label=\"Select page\"></mat-paginator>\r\n\t</ng-container>\r\n\r\n</div>\r\n","import {AfterViewInit, Component, ElementRef, Input, OnInit, Renderer2, ViewChild} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MatIconModule, MatIconRegistry} from '@angular/material/icon';\r\nimport {MatListModule} from '@angular/material/list';\r\nimport {MIcons} from '../m-icons';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nexport interface AppDownload {\r\n\t/** Logo de la plateforme de téléchargement (ex : logo Apple Store, Play Store...) */\r\n\tLogo: any;\r\n\t/** Lien de la page de téléchargement */\r\n\tLien: string;\r\n\t/** Texte principal (nom de la plateforme de téléchargement) */\r\n\tTexteGras: string;\r\n\r\n\t/** Texte secondaire : pour contextualiser l'action */\r\n\tTexte: string;\r\n}\r\n\r\n/**\r\n * @component\r\n * @name MAppDownload\r\n * @description\r\n * Composant graphique pour afficher les liens de téléchargement d'une Appli\r\n * Exemple : liens pour télécharger l'Appli M sur Apple Store\r\n *\r\n * ### Usage example\r\n * ```html\r\n * <m-app-download [data]=\"App\"></m-app-download>\r\n * ```\r\n *\r\n * @selector m-app-download\r\n * @standalone true\r\n * @module CommonModule, MatIconModule, MatButtonModule\r\n */\r\n@Component({\r\n\tselector: 'm-app-download',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MatIconModule, MatButtonModule],\r\n\ttemplateUrl: './m-app-download.component.html',\r\n\tstyleUrls: ['./m-app-download.component.scss']\r\n})\r\nexport class MAppDownload implements AfterViewInit {\r\n\t/**\r\n\t * Logo + lien téléchargement + texte\r\n\t *\r\n\t */\r\n\t@Input() data: AppDownload;\r\n\r\n\t/**\r\n\t * Element HTML pour l'icon représentant la plateforme de téléchargement\r\n\t */\r\n\t@ViewChild('iconPrincipal', { read: ElementRef }) iconPrincipal!: ElementRef;\r\n\t@ViewChild('text', { read: ElementRef }) text!: ElementRef;\r\n\r\n\tconstructor(public iconRegistry: MatIconRegistry, public sanitizer: DomSanitizer, private renderer : Renderer2){\r\n\r\n\t}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.iconRegistry.getSvgIconFromUrl(this.sanitizer.bypassSecurityTrustResourceUrl(this.data.Logo.url)).subscribe((icon : SVGElement) => { \r\n\t\ticon.setAttribute('fill', '');  \r\n\t\t\r\n\t\t//   let colortext = document.defaultView?.getComputedStyle(document.getElementById('textBase')!)['color']; \r\n\t\tlet colortext = this.text.nativeElement.style.color;  \r\n\t\t\t\t\r\n\t\tlet childrens = Array.from(icon.children);\r\n\t\t\tchildrens.forEach(element => {\r\n\t\t\tthis.renderer.setAttribute(element, 'fill', colortext!);\r\n\t\t\tArray.from(element.children).forEach(element2 => {\r\n\t\t\t\tthis.renderer.setAttribute(element2, 'fill', `${colortext!} !important`);\r\n\t\t\t});\r\n\t\t});\r\n\t\t\r\n\t\tthis.renderer.appendChild(this.iconPrincipal.nativeElement, icon);\r\n             \r\n    });\r\n  }\r\n\r\n}\r\n","<a [href]=\"data.Lien\" class=\"buttonDownload\" id=\"button\" mat-stroked-button color=\"primary\" target=\"_blank\">\r\n    <div id=\"icon2\"></div>\r\n    <mat-icon #iconPrincipal iconPositionStart class=\"icon iconPrincipal\" id=\"icon\"></mat-icon>\r\n    <span class=\"text\">\r\n        <span aria-hidden=\"true\" #text id=\"textBase\" class=\"text-transparent\">{{data.Texte}}</span>\r\n        <span class=\"textInApp\">\r\n            <span aria-hidden=\"true\" class=\"textGras\">{{data.TexteGras}}</span>\r\n            <mat-icon aria-hidden=\"true\" iconPositionEnd class=\"external arrow-outward\">arrow_outward</mat-icon>\r\n        </span>\r\n    </span>\r\n    <span class=\"cdk-visually-hidden\">{{data.Texte}} {{data.TexteGras}}</span>\r\n</a>","import {Component, Input} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MatButtonModule} from '@angular/material/button';\r\n\r\n@Component({\r\n\tselector: 'm-list-wrapper',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MatButtonModule],\r\n\ttemplateUrl: './m-list-wrapper.component.html',\r\n\tstyleUrls: ['./m-list-wrapper.component.scss'],\r\n\texportAs: 'MListWrapper'\r\n})\r\nexport class MListWrapper {\r\n\r\n\t/**\r\n\t * Enable see more button\r\n\t */\r\n\t@Input() seeMoreEnable: boolean = false;\r\n\r\n\t/**\r\n\t * See more button state\r\n\t */\r\n\tpublic seeMore: boolean = false;\r\n}\r\n","<ng-content></ng-content>\r\n\r\n<button *ngIf=\"seeMoreEnable && !seeMore\" mat-button class=\"m-theme\" color=\"primary\" (click)=\"seeMore = true\">\r\n\t<span>Voir plus...</span>\r\n</button>\r\n","import {CommonModule} from '@angular/common';\r\nimport {Component, Input} from '@angular/core';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {RouterLink} from '@angular/router';\r\nimport {MIcons} from '../m-icons/m-icons.component';\r\n\r\n@Component({\r\n\tselector: 'm-disturbance-display',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MIcons, RouterLink, MatButtonModule],\r\n\ttemplateUrl: './m-disturbance-display.component.html',\r\n\tstyleUrls: ['./m-disturbance-display.component.scss']\r\n})\r\nexport class MDisturbanceDisplay {\r\n\r\n\t/** The disturbance to display: TYPE show -> [M-features] */\r\n\t@Input() disturbance: any;\r\n\r\n\t/** The disturbance collection: TYPE show -> [M-features] */\r\n\t@Input() disturbanceCollection: any[];\r\n\r\n\t/** The link for redirection */\r\n\t@Input() link: string;\r\n\r\n\t/**\r\n\t * Get the dynamic classes for the disturbance\r\n\t * @param disturbance any\r\n\t * @return string[]\r\n\t */\r\n\tpublic getDynamicClasses(disturbance: any): string[] {\r\n\t\tlet classes = ['line-nsv', 'm-disturbance-display'];\r\n\t\tif (disturbance && disturbance.nsv && disturbance.nsv != 0 && disturbance.nsv != 1 && disturbance.nsv != 5) {\r\n\t\t\tclasses.push(`has-disturbance disturbance-${disturbance.nsv}`);\r\n\t\t}\r\n\t\treturn classes;\r\n\t}\r\n}\r\n","<ng-container *ngIf=\"disturbance\">\r\n\t<p *ngIf=\"!disturbance.hasDisturbance && disturbanceCollection.length === 0; else hasDisturbances\" [ngClass]=\"getDynamicClasses(disturbance)\">\r\n\t\t<ng-container *ngTemplateOutlet=\"disturbanceContentTpl; context:{$implicit: disturbance, isLink: false}\"></ng-container>\r\n\t</p>\r\n\r\n\t<ng-template #hasDisturbances>\r\n\t\t<a mat-button [routerLink]=\"link\" [ngClass]=\"getDynamicClasses(disturbance)\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"disturbanceContentTpl; context:{$implicit: disturbance, isLink: true}\"></ng-container>\r\n\t\t</a>\r\n\t</ng-template>\r\n</ng-container>\r\n\r\n<ng-template #disturbanceContentTpl let-disturbance let-isLink=\"isLink\">\r\n\t<ng-container [ngSwitch]=\"disturbance.nsv\">\r\n\t\t<div *ngSwitchCase=\"2\">\r\n\t\t\t<m-icons class=\"icon-left-large\" [ngClass]=\"[disturbance.calculatedClasses]\" type=\"perturbation_low\"></m-icons>\r\n\t\t\t<span class=\"layout column\">\r\n\t\t\t\t<span>Service légèrement perturbé</span>\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"disturbancesCountTpl; context:{$implicit: disturbanceCollection.length}\"></ng-container>\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t\t<div *ngSwitchCase=\"3\">\r\n\t\t\t<m-icons class=\"icon-left-large\" [ngClass]=\"[disturbance.calculatedClasses]\" type=\"perturbation_hight\"></m-icons>\r\n\t\t\t<span class=\"layout column\">\r\n\t\t\t\t<span>Service très perturbé</span>\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"disturbancesCountTpl; context:{$implicit: disturbanceCollection.length}\"></ng-container>\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t\t<div *ngSwitchCase=\"4\">\r\n\t\t\t<m-icons class=\"icon-left-large\" [ngClass]=\"[disturbance.calculatedClasses]\" type=\"perturbation_over\"></m-icons>\r\n\t\t\t<span class=\"layout column\">\r\n\t\t\t\t<span>Hors service</span>\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"disturbancesCountTpl; context:{$implicit: disturbanceCollection.length}\"></ng-container>\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t\t<div *ngSwitchDefault class=\"default-display\">\r\n\t\t\t<m-icons class=\"icon-left-large\" type=\"perturbation_low\"></m-icons>\r\n\t\t\t<span class=\"layout column\">\r\n\t\t\t\t<span>Service normal</span>\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"disturbancesCountTpl; context:{$implicit: disturbanceCollection.length}\"></ng-container>\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t\t<m-icons *ngIf=\"isLink\" class=\"icon-right\">chevron_right</m-icons>\r\n\t</ng-container>\r\n</ng-template>\r\n\r\n<ng-template #disturbancesCountTpl>\r\n\t<span [ngPlural]=\"disturbanceCollection.length\" class=\"m-disturbance-display-text-secondary\">\r\n\t\t<ng-template ngPluralCase=\"=0\">Aucun événement</ng-template>\r\n\t\t<ng-template ngPluralCase=\"=1\">1 événement</ng-template>\r\n\t\t<ng-template ngPluralCase=\"other\">{{ disturbanceCollection.length }} événements</ng-template>\r\n\t</span>\r\n</ng-template>\r\n","/*\r\n * Public API Surface of m-ui\r\n */\r\nexport * from './m-icons';\r\nexport * from './m-icons/m-icons.service';\r\nexport * from './m-affluence';\r\nexport * from './m-logo-lines';\r\nexport * from './m-table';\r\nexport * from \"./m-app-download\";\r\nexport * from \"./m-list-wrapper\";\r\nexport * from \"./m-disturbance-display\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MIconsService","i3","i2","i1","i6","i7"],"mappings":"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"}