{"version":3,"file":"michelin-around-tire.mjs","sources":["../../../packages/around-tire/src/lib/vehicle/vehicle.model.ts","../../../packages/around-tire/src/lib/vehicle/half.pipe.ts","../../../packages/around-tire/src/lib/vehicle/vehicle.component.ts","../../../packages/around-tire/src/lib/vehicle/vehicle.component.html","../../../packages/around-tire/src/lib/vehicle/vehicle.module.ts","../../../packages/around-tire/src/public-api.ts","../../../packages/around-tire/src/michelin-around-tire.ts"],"sourcesContent":["import { Icon } from '@michelin/theme';\n\nexport enum AxleType {\n  STEER = 'STEER',\n  DRIVE = 'DRIVE',\n  LIFT = 'LIFT'\n}\n\n/**\n * Define a vehicle\n */\nexport class Vehicle {\n  /**\n   * Axle list that contain tires\n   */\n  axles?: Axle[];\n  /**\n   * Distance between axles\n   */\n  axleDist?: number[];\n  /**\n   * Axle width\n   */\n  axleTrack?: number[];\n\n  constructor(vehicle: Partial<Vehicle>) {\n    this.axles = vehicle.axles;\n    this.axleDist = vehicle.axleDist;\n    this.axleTrack = vehicle.axleTrack;\n  }\n}\n\n/**\n * Define an axle with type and tires\n */\nexport class Axle {\n  /**\n   * Axle key\n   */\n  key: number;\n  /**\n   * Tire list\n   */\n  tires: Tire[];\n  /**\n   * Axle type (STEER, DRIVE, LIFT)\n   */\n  type?: AxleType;\n  /**\n   * Override primary color for the axle\n   */\n  color?: string;\n  /**\n   * Axle informations\n   */\n  informations?: {\n    /**\n     * Main information text\n     */\n    text?: string;\n    /**\n     * Additional information text\n     */\n    subtext?: string;\n  };\n}\n\n/**\n * Define a tire\n */\nexport class Tire {\n  /**\n   * Position on the axle\n   */\n  position?: number;\n  /**\n   * Width allow to grow tire (optional)\n   */\n  width?: number;\n  /**\n   * Override primary color for the tire\n   */\n  color?: string;\n  /**\n   * Icon\n   */\n  icon?: string | Icon;\n  /**\n   * Tire informations\n   */\n  informations?: {\n    /**\n     * Add tooltip on tire\n     */\n    tooltip?: string;\n    /**\n     * Main information text\n     */\n    text?: string;\n    /**\n     * Additional information text\n     */\n    subtext?: string;\n    /**\n     * Icon\n     */\n    icon?: string | Icon;\n  };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'half' })\nexport class HalfPipe implements PipeTransform {\n  transform(input: Array<any>, first: number): Array<any> {\n    const list = input.slice();\n    const length = list.length / 2;\n    if (first === 0) {\n      list.splice(length, length);\n    } else {\n      list.splice(0, length);\n    }\n    return list;\n  }\n}\n","import { ActivatedRoute, Params, Router } from '@angular/router';\nimport { Component, EventEmitter, Input, OnInit, Output, KeyValueDiffer, DoCheck, KeyValueDiffers } from '@angular/core';\nimport { Axle, AxleType, Tire, Vehicle } from './vehicle.model';\n\n/**\n * Component to display a vehicle shape\n * Axle could be display with it tires\n * The component allow click and select on an axle\n */\n@Component({\n  selector: 'mic-vehicle',\n  templateUrl: './vehicle.component.html',\n  styleUrls: ['./vehicle.component.scss']\n})\nexport class VehicleComponent implements OnInit, DoCheck {\n  /**\n   * Vehicle definition\n   */\n  @Input() vehicle: Vehicle;\n  /**\n   * Grow the vehicle (default = 1)\n   */\n  @Input() grow = 1;\n  /**\n   * Allow tire selection\n   */\n  @Input() tireSelection: boolean;\n  /**\n   * Allow axle selection\n   */\n  @Input() axleSelection: boolean;\n  /**\n   * Position query parameter\n   */\n  @Input() positionQueryParameter = 'vehicleSelectedPosition';\n  /**\n   * Output when a tire is clicked\n   */\n  @Output() onPositionSelected = new EventEmitter<number[]>();\n  axles: Axle[];\n  minAxleSize = 300;\n  selected: number[] = [];\n  axleRatio: number[];\n  differ: KeyValueDiffer<string, any>;\n  AxleType = AxleType;\n  query: string;\n\n  constructor(private readonly route: ActivatedRoute, private readonly router: Router, differs: KeyValueDiffers) {\n    this.differ = differs.find({}).create();\n  }\n\n  ngOnInit() {\n    if (this.tireSelection) {\n      this.selected = [0, 0];\n      this.route.queryParams.subscribe((queryParams: Params) => {\n        if (queryParams[this.positionQueryParameter] && this.query !== queryParams[this.positionQueryParameter]) {\n          this.query = queryParams[this.positionQueryParameter];\n          const selection = queryParams[this.positionQueryParameter].split(',').map((s: string) => parseInt(s));\n          this.selected[0] = selection[0] && selection[0] < this.vehicle.axles.length ? selection[0] : 0;\n          this.selected[1] = selection[1] || 0;\n          this.onPositionSelected.emit(this.selected);\n        }\n      });\n    }\n\n    this.init();\n  }\n\n  ngDoCheck() {\n    const changes = this.differ.diff(this.vehicle);\n    let hasChanges = false;\n    if (changes) {\n      changes.forEachChangedItem((v) => {\n        hasChanges = true;\n        if (v.key === 'id' && this.tireSelection) {\n          this.selected = [0, 0];\n        }\n      });\n      if (hasChanges) {\n        this.init();\n      }\n    }\n  }\n\n  init() {\n    // Get ratio between tires sizes\n    if (this.vehicle && this.vehicle.axles?.length >= 1) {\n      this.vehicle.axles = this.vehicle.axles.map((axle: Axle) => {\n        const maxPosition = axle.tires.length ? Math.max(...axle.tires.map((tire: Tire) => tire.position), 2) : 2;\n        axle.tires = this.fillEmptyTires(axle, maxPosition);\n        return axle;\n      });\n\n      const first = this.vehicle.axles.reduce((i: number, axle: Axle) => {\n        if (axle && axle.tires && axle.tires.length && i === 0) {\n          i = this.getFirstWidth(axle.tires);\n        }\n        return i;\n      }, 0);\n      this.axleRatio = this.vehicle.axles.reduce((ratio: number[], axle: Axle, index: number) => {\n        if (axle.tires.length) {\n          ratio[index] = this.getFirstWidth(axle.tires) / first;\n        }\n        return ratio;\n      }, []);\n    }\n  }\n\n  /**\n   * Fill empty tires depending of max defined position\n   *\n   * @param axle\n   * @param maxPosition\n   * @returns\n   */\n  fillEmptyTires(axle: Axle, maxPosition: number): Tire[] {\n    const tires: Tire[] = [];\n\n    for (let i = 1; i <= maxPosition; i++) {\n      const match = axle.tires.find((tire: Tire) => tire.position === i);\n      if (!match) {\n        tires.push({});\n      } else {\n        tires.push(match);\n      }\n    }\n\n    return tires;\n  }\n\n  /**\n   * Determine first tire width from tire array\n   */\n  getFirstWidth(tires: Tire[]): number {\n    return tires.reduce((j: number, tire: Tire) => {\n      if (tire && tire.width) {\n        j = tire.width;\n        this.minAxleSize = j;\n      } else {\n        j = this.minAxleSize;\n      }\n      return j;\n    }, null);\n  }\n\n  /**\n   * Axle selection method\n   * Notify other with axle rank and tire position 0\n   */\n  selectAxle($event: Event, axleIdx: number) {\n    $event.stopPropagation();\n\n    if (this.axleSelection) {\n      this.selectTire(axleIdx, 0);\n    }\n  }\n\n  /**\n   * Tire selection method\n   * Notify other with axle rank and tire rank\n   */\n  selectTire(axleIdx: number, tireIdx: number) {\n    if (!this.tireSelection) {\n      return;\n    }\n    if (!this.axleSelection || tireIdx === 0) {\n      this.selected = [axleIdx, tireIdx];\n      const queryParams: Params = Object.assign({}, this.route.snapshot.queryParams);\n      queryParams[this.positionQueryParameter] = this.selected.join(',');\n      this.router.navigate(['.'], { queryParams, relativeTo: this.route });\n    }\n  }\n\n  /**\n   * Get axle style as CSS properties\n   * Define margin with axle separated distance\n   *\n   * @param axleIndex\n   * @returns\n   */\n  getAxleStyle(axleIndex: number) {\n    let top = '0px';\n    if (axleIndex > 0 && this.vehicle.axleDist && this.vehicle.axleDist[axleIndex - 1]) {\n      top = `${this.vehicle.axleDist[axleIndex - 1] * 25}px`;\n    }\n    return {\n      'margin-top': top\n    };\n  }\n\n  /**\n   * Get style for axle regarding the vehicle configuration and growth\n   *\n   * @param ratios\n   * @param axleIndex\n   * @returns\n   */\n  getAxleLineStyle(ratios: number[], axleIndex: number) {\n    if (!ratios) {\n      return {};\n    }\n    const ratio = ratios[axleIndex];\n    const grow = this.grow * (ratio || 1);\n    const axle = this.vehicle.axles[axleIndex];\n    return {\n      'margin-top': `${grow * 30}px`,\n      'background-color': axle?.color\n    };\n  }\n\n  /**\n   * Get style for axle regarding the vehicle configuration and growth\n   *\n   * @param ratios\n   * @param axleIndex\n   * @returns\n   */\n  getAxleDistStyle(ratios: number[], axleIndex: number) {\n    if (!ratios) {\n      return {};\n    }\n    const ratio = ratios[axleIndex];\n    const grow = this.grow * (ratio || 1);\n\n    let width = '50px';\n    if (this.vehicle.axleTrack && this.vehicle.axleTrack[axleIndex]) {\n      width = `${this.vehicle.axleTrack[axleIndex] * 100}px`;\n    }\n    return {\n      'background-size': `100% ${grow * 66}px`,\n      'height': `${90 * grow}px`,\n      width\n    };\n  }\n  /**\n   * Get axle scale from ratio\n   * And apply margin\n   */\n  getTireStyle(ratios: number[], axleIndex: number, tireIndex: number, position: number) {\n    if (!ratios) {\n      return {};\n    }\n    let margin = '5px';\n    if (tireIndex === this.vehicle.axles[axleIndex].tires.length / 2 - 1 || this.vehicle.axles[axleIndex].tires.length <= 1) {\n      margin = '0px';\n    }\n    const ratio = ratios[axleIndex];\n    const grow = this.grow * (ratio || 1);\n    const tire = this.vehicle.axles[axleIndex].tires.find((t: Tire) => t.position === position);\n    return {\n      'width': `${Math.round(26 * grow)}px`,\n      'height': `${Math.round(66 * grow)}px`,\n      'margin-right': margin,\n      'background-color': tire?.color\n    };\n  }\n}\n","<div class=\"shape-container\">\n  <div class=\"shape\">\n    <div\n      (click)=\"selectAxle($event, axleIndex)\"\n      [ngClass]=\"{ axle: axle, selected: axleSelection && selected[0] === axleIndex, selectable: axleSelection }\"\n      [ngStyle]=\"getAxleStyle(axleIndex)\"\n      *ngFor=\"let axle of vehicle.axles; let axleIndex = index\"\n    >\n      <div class=\"content\">\n        <div *ngIf=\"axle?.informations?.text || axle?.informations?.subtext\" class=\"axle-informations\">\n          <span class=\"bold-text\">{{ axle?.informations?.text }}</span>\n          <span>{{ axle?.informations?.subtext }}</span>\n        </div>\n        <div class=\"axle-shape\">\n          <div class=\"informations\">\n            <ng-container\n              *ngFor=\"let tire of axle.tires | half : 0; let tireIndex = index\"\n              [ngTemplateOutlet]=\"tireInformations\"\n              [ngTemplateOutletContext]=\"{ tire: tire }\"\n            ></ng-container>\n          </div>\n          <div *ngIf=\"axle?.tires.length > 0\" class=\"tire-container\">\n            <div *ngFor=\"let tire of axle.tires | half : 0; let tireIndex = index\" [ngStyle]=\"{ color: tire.color }\">\n              <div\n                class=\"tire\"\n                [matTooltip]=\"tire.informations?.tooltip\"\n                matTooltipPosition=\"above\"\n                [ngClass]=\"{\n                  unknown: !tire || !tire.position,\n                  selectable: tireSelection,\n                  selected: selected[0] === axleIndex && (selected[1] === tireIndex || axleSelection),\n                  rotate: axle.type === AxleType.STEER\n                }\"\n                [ngStyle]=\"getTireStyle(axleRatio, axleIndex, tireIndex, tire.position)\"\n                (click)=\"selectTire(axleIndex, tireIndex)\"\n              ></div>\n              <mic-icon *ngIf=\"tire.icon\" [icon]=\"tire.icon\"></mic-icon>\n            </div>\n          </div>\n          <div\n            *ngIf=\"axle?.tires.length === 0\"\n            class=\"tire unknown\"\n            [ngStyle]=\"getTireStyle(axleRatio, axleIndex, 0, 0)\"\n            [ngClass]=\"{\n              selectable: tireSelection,\n              selected: selected[0] === axleIndex && (selected[1] === 0 || axleSelection)\n            }\"\n            (click)=\"selectTire(axleIndex, 0)\"\n          ></div>\n\n          <div class=\"axle-dist\" [ngStyle]=\"getAxleDistStyle(axleRatio, axleIndex)\">\n            <div\n              class=\"axle-line\"\n              [ngClass]=\"{\n                selected: selected[0] === axleIndex && axleSelection\n              }\"\n              [ngStyle]=\"getAxleLineStyle(axleRatio, axleIndex)\"\n            ></div>\n            <div\n              *ngIf=\"axle?.type === AxleType.DRIVE\"\n              class=\"drive\"\n              [ngClass]=\"{\n                selected: selected[0] === axleIndex && axleSelection\n              }\"\n            ></div>\n            <div\n              *ngIf=\"axle?.type === AxleType.LIFT\"\n              class=\"lift-top\"\n              [ngClass]=\"{\n                selected: selected[0] === axleIndex && axleSelection\n              }\"\n            ></div>\n            <div\n              *ngIf=\"axle?.type === AxleType.LIFT\"\n              class=\"lift-bottom\"\n              [ngClass]=\"{\n                selected: selected[0] === axleIndex && axleSelection\n              }\"\n            ></div>\n          </div>\n\n          <div *ngIf=\"axle?.tires.length > 1\" class=\"tire-container\">\n            <div *ngFor=\"let tire of axle.tires | half : 1; let tireIndex = index\" [ngStyle]=\"{ color: tire.color }\">\n              <div\n                class=\"tire\"\n                [matTooltip]=\"tire.informations?.tooltip\"\n                matTooltipPosition=\"above\"\n                [ngClass]=\"{\n                  unknown: !tire || !tire.position,\n                  selectable: tireSelection,\n                  selected: selected[0] === axleIndex && (selected[1] === tireIndex + axle.tires.length / 2 || axleSelection),\n                  rotate: axle.type === AxleType.STEER\n                }\"\n                [ngStyle]=\"getTireStyle(axleRatio, axleIndex, tireIndex, tire.position)\"\n                (click)=\"selectTire(axleIndex, tireIndex + axle.tires.length / 2)\"\n              ></div>\n              <mic-icon *ngIf=\"tire.icon\" [icon]=\"tire.icon\"></mic-icon>\n            </div>\n          </div>\n          <div\n            *ngIf=\"axle?.tires.length <= 1\"\n            class=\"tire unknown\"\n            [ngStyle]=\"getTireStyle(axleRatio, axleIndex, 0, 0)\"\n            [ngClass]=\"{\n              selectable: tireSelection,\n              selected: selected[0] === axleIndex && (selected[1] === 1 || axleSelection)\n            }\"\n            (click)=\"selectTire(axleIndex, 1)\"\n          ></div>\n          <div class=\"informations\">\n            <ng-container\n              *ngFor=\"let tire of axle.tires | half : 1; let tireIndex = index\"\n              [ngTemplateOutlet]=\"tireInformations\"\n              [ngTemplateOutletContext]=\"{ tire: tire }\"\n            ></ng-container>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n<ng-template #tireInformations let-tire=\"tire\">\n  <div *ngIf=\"tire.informations?.text\" class=\"tire-informations\" [ngStyle]=\"{ 'background-color': tire?.color }\">\n    <mic-icon *ngIf=\"tire.informations?.icon\" [icon]=\"tire.informations.icon\"></mic-icon>\n    <div *ngIf=\"tire.informations?.text\">\n      <span>{{ tire.informations?.text }}</span>\n      <small>{{ tire.informations?.subtext }}</small>\n    </div>\n  </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { IconModule } from '@michelin/theme';\n\nimport { HalfPipe } from './half.pipe';\nimport { VehicleComponent } from './vehicle.component';\n\n/**\n *\n * <b>Requirements: </b>\n *\n * Import the following module :\n *\n * <code>import { VehicleModule } from '@michelin/around-tire';</code>\n */\n@NgModule({\n  declarations: [VehicleComponent, HalfPipe],\n  imports: [CommonModule, MatTooltipModule, IconModule],\n  exports: [VehicleComponent]\n})\nexport class VehicleModule {}\n","/*\n * Public API Surface of around-tire\n */\n\nexport * from './lib/vehicle/vehicle.component';\nexport * from './lib/vehicle/vehicle.model';\nexport * from './lib/vehicle/vehicle.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5.HalfPipe"],"mappings":"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"}