ca-components 1.0.77 → 1.0.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/esm2022/lib/ca-components.module.mjs +16 -4
  2. package/esm2022/lib/components/ca-activity-log-list/ca-activity-log-list.component.mjs +1 -1
  3. package/esm2022/lib/components/ca-app-tooltip-v2/ca-app-tooltip-v2.component.mjs +1 -1
  4. package/esm2022/lib/components/ca-filters/components/ca-dispatcher-filter/ca-dispatcher-filter.component.mjs +2 -2
  5. package/esm2022/lib/components/ca-filters/components/ca-money-filter/ca-money-filter.component.mjs +2 -2
  6. package/esm2022/lib/components/ca-filters/components/ca-state-filter/ca-state-filter.component.mjs +2 -2
  7. package/esm2022/lib/components/ca-filters/components/ca-trailer-type-filter/ca-trailer-type-filter.component.mjs +1 -1
  8. package/esm2022/lib/components/ca-filters/components/ca-truck-type-filter/ca-truck-type-filter.component.mjs +1 -1
  9. package/esm2022/lib/components/ca-filters/components/ca-user-filter/ca-user-filter.component.mjs +2 -2
  10. package/esm2022/lib/components/ca-input/base-classes/ca-input-base-helpres.mjs +237 -0
  11. package/esm2022/lib/components/ca-input/base-classes/ca-input-base.mjs +1020 -0
  12. package/esm2022/lib/components/ca-input/base-classes/ca-input-event-manager.mjs +24 -0
  13. package/esm2022/lib/components/ca-input/ca-input.component.mjs +53 -163
  14. package/esm2022/lib/components/ca-input/components/ca-input-clear/ca-input-clear.component.mjs +4 -4
  15. package/esm2022/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.mjs +11 -17
  16. package/esm2022/lib/components/ca-input/config/ca-input.config.mjs +1 -1
  17. package/esm2022/lib/components/ca-input/directives/caps-lock.directive.mjs +50 -0
  18. package/esm2022/lib/components/ca-input/directives/index.mjs +5 -1
  19. package/esm2022/lib/components/ca-input/directives/input-max-value.directive.mjs +53 -0
  20. package/esm2022/lib/components/ca-input/directives/min-max-value.directive.mjs +1 -1
  21. package/esm2022/lib/components/ca-input/directives/price_format.directive.mjs +41 -0
  22. package/esm2022/lib/components/ca-input/directives/restrict-input.directive.mjs +98 -0
  23. package/esm2022/lib/components/ca-input/enums/input-text-transform.enum.mjs +9 -0
  24. package/esm2022/lib/components/ca-input/input-test/input-test.component.mjs +175 -0
  25. package/esm2022/lib/components/ca-input/pipes/input-container-class.pipe.mjs +16 -16
  26. package/esm2022/lib/components/ca-input/pipes/input-datetime-picker-class.pipe.mjs +1 -1
  27. package/esm2022/lib/components/ca-input/pipes/input-error.pipe.mjs +18 -15
  28. package/esm2022/lib/components/ca-input/pipes/input-pattern.pipe.mjs +322 -0
  29. package/esm2022/lib/components/ca-input/services/index.mjs +1 -2
  30. package/esm2022/lib/components/ca-input/utils/constants/input-constants.mjs +102 -1
  31. package/esm2022/lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component.mjs +2 -2
  32. package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +809 -0
  33. package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +18 -18
  34. package/esm2022/lib/components/ca-map/ca-map.component.mjs +137 -210
  35. package/esm2022/lib/components/ca-map/enums/google-map.enum.mjs +2 -1
  36. package/esm2022/lib/components/ca-map/enums/map-marker-string.enum.mjs +2 -1
  37. package/esm2022/lib/components/ca-map/models/map.model.mjs +1 -1
  38. package/esm2022/lib/components/ca-map/utils/constants/index.mjs +2 -1
  39. package/esm2022/lib/components/ca-map/utils/constants/map-marker-icons.constants.mjs +119 -0
  40. package/esm2022/lib/components/ca-map/utils/constants/map-options.constants.mjs +1 -2
  41. package/esm2022/lib/components/ca-map/utils/helpers/map-marker-icon.helper.mjs +50 -12
  42. package/esm2022/lib/components/ca-map/utils/services/index.mjs +2 -0
  43. package/esm2022/lib/components/ca-map/utils/services/map-marker-icon.service.mjs +137 -0
  44. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +25 -11
  45. package/esm2022/lib/components/ca-progress-bar/ca-progress-bar.component.mjs +15 -15
  46. package/esm2022/lib/components/ca-rating-review/ca-rating-review.component.mjs +2 -2
  47. package/esm2022/lib/components/ca-rating-review/components/ca-ratings-reviews-popup/ca-ratings-reviews-popup.component.mjs +1 -1
  48. package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/ca-upload-file.component.mjs +1 -1
  49. package/esm2022/lib/constants/map.constant.mjs +131 -131
  50. package/esm2022/public-api.mjs +4 -1
  51. package/fesm2022/ca-components.mjs +10387 -9642
  52. package/fesm2022/ca-components.mjs.map +1 -1
  53. package/lib/ca-components.module.d.ts +32 -30
  54. package/lib/components/ca-input/base-classes/ca-input-base-helpres.d.ts +29 -0
  55. package/lib/components/ca-input/base-classes/ca-input-base.d.ts +82 -0
  56. package/lib/components/ca-input/base-classes/ca-input-event-manager.d.ts +16 -0
  57. package/lib/components/ca-input/ca-input.component.d.ts +30 -48
  58. package/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.d.ts +3 -7
  59. package/lib/components/ca-input/config/ca-input.config.d.ts +10 -1
  60. package/lib/components/ca-input/directives/caps-lock.directive.d.ts +14 -0
  61. package/lib/components/ca-input/directives/index.d.ts +4 -0
  62. package/lib/components/ca-input/directives/input-max-value.directive.d.ts +12 -0
  63. package/lib/components/ca-input/directives/price_format.directive.d.ts +11 -0
  64. package/lib/components/ca-input/directives/restrict-input.directive.d.ts +15 -0
  65. package/lib/components/ca-input/enums/input-text-transform.enum.d.ts +6 -0
  66. package/lib/components/ca-input/input-test/input-test.component.d.ts +47 -0
  67. package/lib/components/ca-input/pipes/input-container-class.pipe.d.ts +3 -3
  68. package/lib/components/ca-input/pipes/input-datetime-picker-class.pipe.d.ts +1 -1
  69. package/lib/components/ca-input/pipes/input-pattern.pipe.d.ts +25 -0
  70. package/lib/components/ca-input/services/index.d.ts +0 -1
  71. package/lib/components/ca-input/utils/constants/input-constants.d.ts +11 -0
  72. package/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.d.ts +99 -0
  73. package/lib/components/ca-map/ca-map.component.d.ts +22 -25
  74. package/lib/components/ca-map/enums/google-map.enum.d.ts +2 -1
  75. package/lib/components/ca-map/enums/map-marker-string.enum.d.ts +2 -1
  76. package/lib/components/ca-map/models/map.model.d.ts +8 -3
  77. package/lib/components/ca-map/utils/constants/index.d.ts +1 -0
  78. package/lib/components/ca-map/utils/constants/map-marker-icons.constants.d.ts +6 -0
  79. package/lib/components/ca-map/utils/helpers/map-marker-icon.helper.d.ts +2 -0
  80. package/lib/components/ca-map/utils/services/index.d.ts +1 -0
  81. package/lib/components/ca-map/utils/services/map-marker-icon.service.d.ts +23 -0
  82. package/lib/components/ca-map-dropdown/ca-map-dropdown.component.d.ts +5 -3
  83. package/lib/components/ca-progress-bar/ca-progress-bar.component.d.ts +3 -1
  84. package/package.json +1 -1
  85. package/public-api.d.ts +3 -0
  86. package/esm2022/lib/components/ca-input/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +0 -100
  87. package/esm2022/lib/components/ca-input/services/ca-input-state.service.mjs +0 -2173
  88. package/lib/components/ca-input/components/ca-input-datetime-picker/ca-input-datetime-picker.component.d.ts +0 -48
  89. package/lib/components/ca-input/services/ca-input-state.service.d.ts +0 -196
@@ -0,0 +1,99 @@
1
+ import { AfterViewInit, ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { ControlValueAccessor, NgControl } from '@angular/forms';
3
+ import { NgbPopover } from '@ng-bootstrap/ng-bootstrap';
4
+ import { ICaInput } from '../ca-input/config';
5
+ import { InputChangeValue, InputSvgRoutes } from '../ca-input/utils';
6
+ import { CaInputComponent } from '../ca-input/ca-input.component';
7
+ import { CaInputPlaceholderIconComponent } from '../ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component';
8
+ import { CalendarDateTimePickerService } from '../ca-custom-datetime-pickers/services/calendar-datetime-picker.service';
9
+ import * as i0 from "@angular/core";
10
+ export declare class CaInputDatetimePickerComponent implements AfterViewInit, ControlValueAccessor, OnDestroy {
11
+ superControl: NgControl;
12
+ private calendarService;
13
+ inputConfig: ICaInput;
14
+ clearInputEvent: EventEmitter<boolean>;
15
+ blurInputEvent: EventEmitter<boolean>;
16
+ caInputPlaceholderIconComponent: CaInputPlaceholderIconComponent;
17
+ dateTimePopover: NgbPopover;
18
+ caInputComponent: CaInputComponent;
19
+ showDateInput: boolean;
20
+ dateTimeInputDate: Date;
21
+ selectionInput: number;
22
+ private dateTimeMainTimer;
23
+ private focusBlur;
24
+ private timeoutCleaner;
25
+ inputSvgRoutes: typeof InputSvgRoutes;
26
+ isTouchedInput: boolean;
27
+ preventBlur: boolean;
28
+ newInputChanged: boolean;
29
+ selectLastOneForSelectionEmitter: EventEmitter<boolean>;
30
+ selectLastOneAfterMouseUpEmitter: EventEmitter<boolean>;
31
+ onDatePasteEmitter: EventEmitter<ClipboardEvent>;
32
+ onFocusEmitter: EventEmitter<FocusEvent>;
33
+ changeSelectionEmmiter: EventEmitter<{
34
+ e: KeyboardEvent;
35
+ noPreventDefault: boolean;
36
+ }>;
37
+ setSelectionEmmiter: EventEmitter<{
38
+ preventDefault: () => void;
39
+ stopPropagation: () => void;
40
+ target: any;
41
+ }>;
42
+ span1: ElementRef;
43
+ span2: ElementRef;
44
+ span3: ElementRef;
45
+ holder1: ElementRef;
46
+ private destroy$;
47
+ constructor(superControl: NgControl, calendarService: CalendarDateTimePickerService);
48
+ ngAfterViewInit(): void;
49
+ get getSuperControl(): import("@angular/forms").AbstractControl<any, any> | null;
50
+ selectLastOneForSelection(): void;
51
+ selectLastOneAfterMouseUp(): void;
52
+ onDatePaste(event: ClipboardEvent): void;
53
+ changeSelection(event: KeyboardEvent, noPreventDefault?: boolean): void;
54
+ private isNumber;
55
+ private isNavigationKey;
56
+ onFocus(event?: FocusEvent): void;
57
+ closePopover(): void;
58
+ toggleDropdownOptions(): void;
59
+ handleFocusInput(e: Event): void;
60
+ setSpanSelection(element: Node): void;
61
+ setSelection(event: {
62
+ preventDefault: () => void;
63
+ stopPropagation: () => void;
64
+ target: any;
65
+ }): void;
66
+ registerOnChange(fn: any): void;
67
+ onChange(_: InputChangeValue): void;
68
+ writeValue(obj: InputChangeValue): void;
69
+ registerOnTouched(): void;
70
+ blurOnDateTime(): void;
71
+ onPopoverShown(): void;
72
+ onPopoverHidden(): void;
73
+ setTimeDateInput(date: InputChangeValue, hasValue?: boolean): void;
74
+ handleKeyboardInputs(e: KeyboardEvent, isRestart?: boolean): void;
75
+ selectSpanByTabIndex(indx: number, changeTab?: boolean): void;
76
+ private handleNavigationKey;
77
+ private handleDatePickerInput;
78
+ private setDateTimeModel;
79
+ private moveSelectionRightOrTab;
80
+ private focusPreviousInput;
81
+ private focusNextInput;
82
+ setIsFocusInput(value: boolean): void;
83
+ private moveSelectionLeft;
84
+ private updateMonth;
85
+ private updateDate;
86
+ private updateYear;
87
+ private padValue;
88
+ private handleTimePickerInput;
89
+ private updateHours;
90
+ private updateMinutes;
91
+ private toggleAMPM;
92
+ clearInput(event: boolean): void;
93
+ onBlurInput(event: boolean): void;
94
+ resetDateTimeInputs(): void;
95
+ setTimePickerTime(): void;
96
+ ngOnDestroy(): void;
97
+ static ɵfac: i0.ɵɵFactoryDeclaration<CaInputDatetimePickerComponent, [{ self: true; }, null]>;
98
+ static ɵcmp: i0.ɵɵComponentDeclaration<CaInputDatetimePickerComponent, "app-ca-input-datetime-picker", never, { "inputConfig": { "alias": "inputConfig"; "required": false; }; }, { "clearInputEvent": "clear"; "blurInputEvent": "blurInput"; "selectLastOneForSelectionEmitter": "selectLastOneForSelectionEmitter"; "selectLastOneAfterMouseUpEmitter": "selectLastOneAfterMouseUpEmitter"; "onDatePasteEmitter": "onDatePasteEmitter"; "onFocusEmitter": "onFocusEmitter"; "changeSelectionEmmiter": "changeSelectionEmmiter"; "setSelectionEmmiter": "setSelectionEmmiter"; }, never, never, true, never>;
99
+ }
@@ -1,10 +1,14 @@
1
- import { ChangeDetectorRef, EventEmitter } from '@angular/core';
2
- import { GoogleMap, MapInfoWindow } from '@angular/google-maps';
1
+ import { ChangeDetectorRef, ElementRef, EventEmitter, Renderer2 } from '@angular/core';
2
+ import { GoogleMap } from '@angular/google-maps';
3
3
  import { IMapMarkers, ICaMapProps, IMapOptions, IRoutePath, IMapBoundsZoom, IMapSelectedMarkerData } from '../ca-map/models/map.model';
4
+ import { MapMarkerIconService } from './utils/services';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class CaMapComponent {
6
7
  cd: ChangeDetectorRef;
7
- constructor(cd: ChangeDetectorRef);
8
+ private el;
9
+ private renderer;
10
+ private markerIconService;
11
+ constructor(cd: ChangeDetectorRef, el: ElementRef, renderer: Renderer2, markerIconService: MapMarkerIconService);
8
12
  set data(values: ICaMapProps);
9
13
  resetSelectedMarkerItem: EventEmitter<boolean>;
10
14
  clusterMarkerClick: EventEmitter<IMapMarkers>;
@@ -13,23 +17,15 @@ export declare class CaMapComponent {
13
17
  boundsChanged: EventEmitter<IMapBoundsZoom>;
14
18
  openInMapEvent: EventEmitter<any>;
15
19
  maps: GoogleMap;
16
- infoWindowsView: MapInfoWindow;
17
- currentlyOpenWindow: MapInfoWindow | null;
18
- currentlyOpenWindowRouting: MapInfoWindow | null;
20
+ markerDropdown: ElementRef;
21
+ clusterDropdown: ElementRef;
22
+ private destroy$;
23
+ currentlyOpenWindow: boolean;
19
24
  previousIconUrl: string;
20
25
  previousIconUrlRouting: string;
21
26
  focusedIconRouting: number;
22
27
  private directionService;
23
28
  directionsRenderers: google.maps.DirectionsRenderer[];
24
- initialIcons: {
25
- url: string;
26
- labelOrigin?: google.maps.Point;
27
- }[];
28
- initialMarkerIcons: {
29
- url: string;
30
- labelOrigin?: google.maps.Point;
31
- zIndex?: number;
32
- }[];
33
29
  infoWindowOptions: google.maps.InfoWindowOptions;
34
30
  mapOptions: IMapOptions;
35
31
  mapZoom: number;
@@ -56,19 +52,21 @@ export declare class CaMapComponent {
56
52
  radius: number;
57
53
  };
58
54
  isAreaFilterActive: boolean;
59
- hoveredMarkerId: number | null;
55
+ mapStyles: google.maps.MapTypeStyle[];
56
+ clusterMarkerIds: IMapMarkers[];
57
+ routingMarkerIds: IMapMarkers[];
58
+ isMarkerDropdownOpen: boolean;
59
+ isClusterDropdownOpen: boolean;
60
+ openDropdownTimeout: NodeJS.Timeout | number;
61
+ mapStyleId: string;
60
62
  ngOnInit(): void;
61
- storeInitialIconForMarker(): void;
62
- storeInitialIconForRoutingMarker(): void;
63
+ ngAfterViewInit(): void;
63
64
  onClusterMarkerClick(markerItem: IMapMarkers): void;
64
65
  getMarkerInfoWindow(markerId: number): void;
65
66
  onMarkerClick(markerItem: IMapMarkers): void;
66
67
  setDirectionsOnMap(): void;
67
68
  calculateAndDisplayRoute(): void;
68
- onRoutingMarkerClick(i: number, event: google.maps.MapMouseEvent, markeritem: IMapMarkers): void;
69
- ngAfterViewInit(): void;
70
69
  resetMarkersIcons(): void;
71
- resetRoutingMarkers(): void;
72
70
  onMapReady(mapInstance: google.maps.Map): {
73
71
  fillColor?: string;
74
72
  strokeColor?: string;
@@ -79,17 +77,16 @@ export declare class CaMapComponent {
79
77
  getMapIdleEvent(map: google.maps.Map): void;
80
78
  sendBoundsChangedEvent(): void;
81
79
  onClusterBackButtonClick(): void;
82
- private getNewData;
83
80
  openMarkerInfoWindow(markerItem: IMapSelectedMarkerData): void;
84
81
  checkInfoWindowPosition(markerItem: IMapMarkers, markerItem2?: IMapMarkers | null): boolean;
85
82
  closeInfoWindow(): void;
86
83
  handleMapData(newData: ICaMapProps): void;
84
+ getClusterId(clusterData: IMapMarkers): number | null;
85
+ getRoutingId(markerData: IMapMarkers): number | null;
87
86
  onClusterListScrollToEnd(): void;
88
- checkClusterDataChanges(newData: IMapMarkers, previousData?: IMapMarkers | null): boolean;
89
- onMarkerMouseover(markerItem: IMapMarkers): void;
90
- onMarkerMouseout(markerItem: IMapMarkers): void;
91
87
  onZoomChange(isMinusClick?: boolean): void;
92
88
  onOpenInMap(): void;
89
+ getServiceData(): void;
93
90
  trackById(index: number, marker: IMapMarkers): number;
94
91
  trackByPosition(index: number, marker: IMapMarkers): number;
95
92
  identity(index: number): number;
@@ -1,5 +1,6 @@
1
1
  export declare enum GoogleMapEnum {
2
2
  STROKE_OPACITY = 0.4,
3
3
  STROKE_COLOR = "blue",
4
- STROKE_WEIGHT = 4
4
+ STROKE_WEIGHT = 4,
5
+ DARK_MAP = "dark_map"
5
6
  }
@@ -5,5 +5,6 @@ export declare enum MapMarkerStringEnum {
5
5
  CURRENT_LOCATION = "Current Location",
6
6
  DARK = "dark",
7
7
  LIGHT = "light",
8
- WHITE = "white"
8
+ WHITE = "white",
9
+ SELECTED = "selected"
9
10
  }
@@ -35,7 +35,7 @@ export interface IMapOptions {
35
35
  strictBounds: boolean;
36
36
  };
37
37
  streetViewControl: boolean;
38
- styles: IMapStyles[];
38
+ styles?: IMapStyles[];
39
39
  keyboardShortcuts: boolean;
40
40
  panControl: boolean;
41
41
  gestureHandling: string;
@@ -55,9 +55,9 @@ export interface IMapColor {
55
55
  }
56
56
  export interface IMapMarkers {
57
57
  position: IRoutePath;
58
- icon: IMapMarkersIcon;
58
+ icon?: IMapMarkersIcon;
59
59
  infoWindowContent?: MapDropdownContent;
60
- label?: IMarkerLabel | null;
60
+ label?: string;
61
61
  labelOrigin?: {
62
62
  x: number;
63
63
  y: number;
@@ -67,6 +67,11 @@ export interface IMapMarkers {
67
67
  zIndex?: number;
68
68
  };
69
69
  isLargeMarker?: boolean;
70
+ isFavorite?: boolean;
71
+ isClosed?: boolean;
72
+ isShowLabelOnHover?: boolean;
73
+ id?: number;
74
+ content?: any;
70
75
  }
71
76
  export interface IMapMarkersIcon {
72
77
  url: string;
@@ -1,2 +1,3 @@
1
1
  export * from './map-info-window-options.constants';
2
2
  export * from './map-options.constants';
3
+ export * from './map-marker-icons.constants';
@@ -0,0 +1,6 @@
1
+ export declare class MapMarkerIconsConstants {
2
+ static defaultMarker: string;
3
+ static favoriteMarker: string;
4
+ static closedMarker: string;
5
+ static clusterIcon: string;
6
+ }
@@ -1,6 +1,8 @@
1
1
  export declare class MapMarkerIconHelper {
2
+ static getRoutingMarkerElement: (stopNumber: number, stopType: string, isStopChecked?: boolean, isLightMode?: boolean, labelName?: string) => HTMLElement;
2
3
  static getRoutingMarkerIcon: (stopNumber: number, stopType: string, isStopChecked?: boolean, isLightMode?: boolean) => string;
3
4
  static getRoutingMarkerSvg: (stopNumber: number, stopType: string, isLightMode?: boolean) => string;
5
+ static getRoutingCheckedMarkerSvg: (stopType: string, isLightMode?: boolean) => string;
4
6
  static getMapMarker(isFavorite?: boolean, isClosed?: boolean): string;
5
7
  static getClusterMarker(count: number, isSelected?: boolean): string;
6
8
  }
@@ -0,0 +1 @@
1
+ export * from './map-marker-icon.service';
@@ -0,0 +1,23 @@
1
+ import { RendererFactory2 } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { IMapMarkers } from '../../models/map.model';
4
+ import * as i0 from "@angular/core";
5
+ export declare class MapMarkerIconService {
6
+ private renderer;
7
+ private clusterMarkerIds;
8
+ clusterMarkerIds$: Observable<IMapMarkers[]>;
9
+ private routingMarkerIds;
10
+ routingMarkerIds$: Observable<IMapMarkers[]>;
11
+ private markerElements;
12
+ private clusterElements;
13
+ private routingElements;
14
+ constructor(rendererFactory: RendererFactory2);
15
+ getMarkerIcon(markerId: number, labelName?: string, isClosed?: boolean, isFavorite?: boolean, isAlwaysSelected?: boolean): HTMLElement;
16
+ getClusterMarkerIcon(markerData: IMapMarkers): HTMLElement;
17
+ getRoutingMarkerIcon(markerData: IMapMarkers, stopNumber: number, stopType: string, isStopChecked?: boolean, isLightMode?: boolean, labelName?: string): HTMLElement;
18
+ createClusterId(clusterData: IMapMarkers): number;
19
+ createRoutingId(markerData: IMapMarkers): number;
20
+ resetMarkersData(): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapMarkerIconService, never>;
22
+ static ɵprov: i0.ɵɵInjectableDeclaration<MapMarkerIconService>;
23
+ }
@@ -4,7 +4,7 @@ import { DropDownData, IDropDownActions } from '../ca-details-dropdown/models/de
4
4
  import { MapDropdownClusterItem, MapDropdownContent } from './models';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class CaMapDropdownComponent {
7
- infoWindowContent?: MapDropdownContent;
7
+ infoWindowContent?: MapDropdownContent | null;
8
8
  markerData?: any;
9
9
  onClusterItemClick: EventEmitter<number>;
10
10
  onClusterListScrollToEnd: EventEmitter<any>;
@@ -13,13 +13,15 @@ export declare class CaMapDropdownComponent {
13
13
  isHidden: boolean;
14
14
  isShowAllDaysActive: boolean;
15
15
  data: DropDownData[];
16
- showHiddenData(): void;
16
+ showHiddenData(event: Event): void;
17
17
  callBodyAction(action: IDropDownActions): void;
18
18
  getSvgPath(propertyName: keyof typeof MapDropdownSvgRoutes): string;
19
19
  clusterItemClick(item: MapDropdownClusterItem): void;
20
- backButtonClick(): void;
20
+ backButtonClick(event: Event): void;
21
21
  showAllDaysClick(): void;
22
22
  onClusterListScroll(event: Event): void;
23
+ stopMapZoom(event: Event): void;
24
+ dropdownClick(event: Event): void;
23
25
  identity(index: number): number;
24
26
  static ɵfac: i0.ɵɵFactoryDeclaration<CaMapDropdownComponent, never>;
25
27
  static ɵcmp: i0.ɵɵComponentDeclaration<CaMapDropdownComponent, "app-ca-map-dropdown", never, { "infoWindowContent": { "alias": "infoWindowContent"; "required": false; }; "markerData": { "alias": "markerData"; "required": false; }; }, { "onClusterItemClick": "onClusterItemClick"; "onClusterListScrollToEnd": "onClusterListScrollToEnd"; "onBackButtonClick": "onBackButtonClick"; "bodyActions": "bodyActions"; }, never, never, true, never>;
@@ -2,8 +2,10 @@ import { NgbPopover } from '@ng-bootstrap/ng-bootstrap';
2
2
  import { IGpsProgress } from './models';
3
3
  import { ICaMapProps } from '../ca-map/models/map.model';
4
4
  import { ProgressBarSvgRoutes } from './utils/svg-routes';
5
+ import { MapMarkerIconService } from '../ca-map/utils/services';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare class ProgressBarComponent {
8
+ private markerIconService;
7
9
  isDropdown: boolean;
8
10
  currentPosition: number;
9
11
  mileageInfo: string;
@@ -40,7 +42,7 @@ export declare class ProgressBarComponent {
40
42
  _gpsProgress: IGpsProgress[];
41
43
  gpsIconTopPosition: number;
42
44
  Mapdata: ICaMapProps;
43
- constructor();
45
+ constructor(markerIconService: MapMarkerIconService);
44
46
  hoverStop(stop: IGpsProgress, i: number, isIcon?: boolean): void;
45
47
  leaveStop(): void;
46
48
  getLeftStyle(): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ca-components",
3
- "version": "1.0.77",
3
+ "version": "1.0.80",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.13",
6
6
  "@angular/core": "^18.2.13",
package/public-api.d.ts CHANGED
@@ -49,5 +49,8 @@ export * from './lib/components/ca-sort-dropdown/models';
49
49
  export * from './lib/components/ca-sort-dropdown/enums';
50
50
  export * from './lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component';
51
51
  export * from './lib/components/ca-modal-button/ca-modal-button.component';
52
+ export * from './lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component';
52
53
  export * from './lib/components/ca-chart-manager/ca-chart-manager.component';
53
54
  export * from './lib/components/ca-custom-scrollbar/ca-custom-scrollbar.component';
55
+ export * from './lib/components/ca-map/utils/services';
56
+ export * from './lib/components/ca-input/input-test/input-test.component';
@@ -1,100 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- // pipe
4
- import { InputDatetimePickerClassPipe } from '../../pipes';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../services";
7
- import * as i2 from "@angular/common";
8
- export class CaInputDatetimePickerComponent {
9
- constructor(inputStateService) {
10
- this.inputStateService = inputStateService;
11
- this.selectLastOneForSelectionEmitter = new EventEmitter();
12
- this.selectLastOneAfterMouseUpEmitter = new EventEmitter();
13
- this.onDatePasteEmitter = new EventEmitter();
14
- this.onBlurEmitter = new EventEmitter();
15
- this.onFocusEmitter = new EventEmitter();
16
- this.changeSelectionEmmiter = new EventEmitter();
17
- this.setSelectionEmmiter = new EventEmitter();
18
- }
19
- ngAfterViewInit() {
20
- this.inputStateService.setViewChilds(this.span1, this.span2, this.span3, this.holder1);
21
- }
22
- selectLastOneForSelection() {
23
- this.selectLastOneForSelectionEmitter.emit(true);
24
- }
25
- selectLastOneAfterMouseUp() {
26
- this.selectLastOneAfterMouseUpEmitter.emit(true);
27
- }
28
- onDatePaste(event) {
29
- this.onDatePasteEmitter.emit(event);
30
- }
31
- onBlur() {
32
- this.onBlurEmitter.emit(true);
33
- }
34
- changeSelection(e, noPreventDefault = false) {
35
- this.changeSelectionEmmiter.emit({ e, noPreventDefault });
36
- }
37
- onFocus(event) {
38
- this.onFocusEmitter.emit(event);
39
- }
40
- toggleDropdownOptions() {
41
- this.inputStateService.toggleDropdownOptions();
42
- }
43
- setSelection(event) {
44
- this.setSelectionEmmiter.emit(event);
45
- }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaInputDatetimePickerComponent, deps: [{ token: i1.InputStateService }], target: i0.ɵɵFactoryTarget.Component }); }
47
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaInputDatetimePickerComponent, isStandalone: true, selector: "app-ca-input-datetime-picker", inputs: { showDateInput: "showDateInput", inputConfig: "inputConfig", getSuperControl: "getSuperControl", isFocusInput: "isFocusInput", isVisibleCommands: "isVisibleCommands", isTouchedInput: "isTouchedInput" }, outputs: { selectLastOneForSelectionEmitter: "selectLastOneForSelectionEmitter", selectLastOneAfterMouseUpEmitter: "selectLastOneAfterMouseUpEmitter", onDatePasteEmitter: "onDatePasteEmitter", onBlurEmitter: "onBlurEmitter", onFocusEmitter: "onFocusEmitter", changeSelectionEmmiter: "changeSelectionEmmiter", setSelectionEmmiter: "setSelectionEmmiter" }, viewQueries: [{ propertyName: "span1", first: true, predicate: ["span1"], descendants: true }, { propertyName: "span2", first: true, predicate: ["span2"], descendants: true }, { propertyName: "span3", first: true, predicate: ["span3"], descendants: true }, { propertyName: "holder1", first: true, predicate: ["holder1"], descendants: true }], ngImport: i0, template: "<div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"-1\"\n (mousedown)=\"selectLastOneForSelection()\"\n (mouseup)=\"selectLastOneAfterMouseUp()\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event, true)\"\n (click)=\"toggleDropdownOptions()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px'\n }\"\n [ngClass]=\"\n isFocusInput | inputDatetimePickerClass : isVisibleCommands \n : getSuperControl : inputConfig : isTouchedInput \n : getSuperControl?.value\n \"\n>\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput\n }\"\n tabindex=\"0\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput\n }\"\n tabindex=\"1\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput\n }\"\n tabindex=\"2\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type:
48
- // modules
49
- CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type:
50
- // pipes
51
- InputDatetimePickerClassPipe, name: "inputDatetimePickerClass" }] }); }
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaInputDatetimePickerComponent, decorators: [{
54
- type: Component,
55
- args: [{ selector: 'app-ca-input-datetime-picker', standalone: true, imports: [
56
- // modules
57
- CommonModule,
58
- // pipes
59
- InputDatetimePickerClassPipe,
60
- ], template: "<div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"-1\"\n (mousedown)=\"selectLastOneForSelection()\"\n (mouseup)=\"selectLastOneAfterMouseUp()\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event, true)\"\n (click)=\"toggleDropdownOptions()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px'\n }\"\n [ngClass]=\"\n isFocusInput | inputDatetimePickerClass : isVisibleCommands \n : getSuperControl : inputConfig : isTouchedInput \n : getSuperControl?.value\n \"\n>\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput\n }\"\n tabindex=\"0\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput\n }\"\n tabindex=\"1\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput\n }\"\n tabindex=\"2\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n</div>\n" }]
61
- }], ctorParameters: () => [{ type: i1.InputStateService }], propDecorators: { showDateInput: [{
62
- type: Input
63
- }], inputConfig: [{
64
- type: Input
65
- }], getSuperControl: [{
66
- type: Input
67
- }], isFocusInput: [{
68
- type: Input
69
- }], isVisibleCommands: [{
70
- type: Input
71
- }], isTouchedInput: [{
72
- type: Input
73
- }], selectLastOneForSelectionEmitter: [{
74
- type: Output
75
- }], selectLastOneAfterMouseUpEmitter: [{
76
- type: Output
77
- }], onDatePasteEmitter: [{
78
- type: Output
79
- }], onBlurEmitter: [{
80
- type: Output
81
- }], onFocusEmitter: [{
82
- type: Output
83
- }], changeSelectionEmmiter: [{
84
- type: Output
85
- }], setSelectionEmmiter: [{
86
- type: Output
87
- }], span1: [{
88
- type: ViewChild,
89
- args: ['span1', { static: false }]
90
- }], span2: [{
91
- type: ViewChild,
92
- args: ['span2', { static: false }]
93
- }], span3: [{
94
- type: ViewChild,
95
- args: ['span3', { static: false }]
96
- }], holder1: [{
97
- type: ViewChild,
98
- args: ['holder1', { static: false }]
99
- }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0L2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1pbnB1dC9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUS9DLE9BQU87QUFDUCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFlM0QsTUFBTSxPQUFPLDhCQUE4QjtJQTRCekMsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFwQjlDLHFDQUFnQyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDL0QscUNBQWdDLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUMvRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUN4RCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDNUMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBQ2hELDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUcvQyxDQUFDO1FBQ0ssd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBSTVDLENBQUM7SUFPc0QsQ0FBQztJQUU1RCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FDbEMsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSx5QkFBeUI7UUFDOUIsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXFCO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sZUFBZSxDQUFDLENBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSztRQUMvRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQWtCO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUluQjtRQUNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQzsrR0F6RVUsOEJBQThCO21HQUE5Qiw4QkFBOEIscytCQ2xDM0MsNHZEQWlFQTtnQkR0Q0ksVUFBVTtnQkFDVixZQUFZO2dCQUVaLFFBQVE7Z0JBQ1IsNEJBQTRCOzs0RkFHbkIsOEJBQThCO2tCQWIxQyxTQUFTOytCQUNFLDhCQUE4QixjQUc1QixJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixZQUFZO3dCQUVaLFFBQVE7d0JBQ1IsNEJBQTRCO3FCQUM3QjtzRkFHUSxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGdDQUFnQztzQkFBekMsTUFBTTtnQkFDRyxnQ0FBZ0M7c0JBQXpDLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQU1nQyxLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0UsS0FBSztzQkFBM0MsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNFLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDSSxPQUFPO3NCQUEvQyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG4vLyBzZXJ2aWNlc1xuaW1wb3J0IHsgSW5wdXRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8vIHBpcGVcbmltcG9ydCB7IElucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1BpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jYS1pbnB1dC1kYXRldGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICAvLyBtb2R1bGVzXG4gICAgQ29tbW9uTW9kdWxlLFxuXG4gICAgLy8gcGlwZXNcbiAgICBJbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUlucHV0RGF0ZXRpbWVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgc2hvd0RhdGVJbnB1dCE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlucHV0Q29uZmlnITogSUNhSW5wdXQ7XG4gIEBJbnB1dCgpIGdldFN1cGVyQ29udHJvbCE6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfCBudWxsO1xuICBASW5wdXQoKSBpc0ZvY3VzSW5wdXQhOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1Zpc2libGVDb21tYW5kcyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzVG91Y2hlZElucHV0ITogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgc2VsZWN0TGFzdE9uZUZvclNlbGVjdGlvbkVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRGF0ZVBhc3RlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcGJvYXJkRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJsdXJFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgb25Gb2N1c0VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjaGFuZ2VTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZTogS2V5Ym9hcmRFdmVudDtcbiAgICBub1ByZXZlbnREZWZhdWx0OiBib29sZWFuO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2V0U2VsZWN0aW9uRW1taXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICB0YXJnZXQ6IGFueTtcbiAgfT4oKTtcblxuICBAVmlld0NoaWxkKCdzcGFuMScsIHsgc3RhdGljOiBmYWxzZSB9KSBzcGFuMSE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NwYW4yJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNwYW4yITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3BhbjMnLCB7IHN0YXRpYzogZmFsc2UgfSkgc3BhbjMhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdob2xkZXIxJywgeyBzdGF0aWM6IGZhbHNlIH0pIGhvbGRlcjEhOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5wdXRTdGF0ZVNlcnZpY2U6IElucHV0U3RhdGVTZXJ2aWNlKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0U3RhdGVTZXJ2aWNlLnNldFZpZXdDaGlsZHMoXG4gICAgICB0aGlzLnNwYW4xLFxuICAgICAgdGhpcy5zcGFuMixcbiAgICAgIHRoaXMuc3BhbjMsXG4gICAgICB0aGlzLmhvbGRlcjFcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uRW1pdHRlci5lbWl0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdExhc3RPbmVBZnRlck1vdXNlVXAoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwRW1pdHRlci5lbWl0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9uRGF0ZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25EYXRlUGFzdGVFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLm9uQmx1ckVtaXR0ZXIuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VTZWxlY3Rpb24oZTogS2V5Ym9hcmRFdmVudCwgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb25FbW1pdGVyLmVtaXQoeyBlLCBub1ByZXZlbnREZWZhdWx0IH0pO1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXMoZXZlbnQ/OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkZvY3VzRW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVEcm9wZG93bk9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFN0YXRlU2VydmljZS50b2dnbGVEcm9wZG93bk9wdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZXZlbnQ6IHtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgdGFyZ2V0OiBhbnk7XG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNldFNlbGVjdGlvbkVtbWl0ZXIuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2hvbGRlcjFcbiAgY2xhc3M9XCJkYXRlX3RpbWVfaG9sZGVyIGlucHV0LWNvbnRyb2xcIlxuICBbY2xhc3MuYWN0aXZlXT1cInNob3dEYXRlSW5wdXRcIlxuICB0YWJpbmRleD1cIi0xXCJcbiAgKG1vdXNlZG93bik9XCJzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKClcIlxuICAobW91c2V1cCk9XCJzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwKClcIlxuICAocGFzdGUpPVwib25EYXRlUGFzdGUoJGV2ZW50KVwiXG4gIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQsIHRydWUpXCJcbiAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duT3B0aW9ucygpXCJcbiAgW25nU3R5bGVdPVwie1xuICAgICdwYWRkaW5nLWxlZnQnOiBpbnB1dENvbmZpZy5pc0ljb25IaWRkZW4gPyAnMnB4JyA6ICcyN3B4J1xuICB9XCJcbiAgW25nQ2xhc3NdPVwiXG4gICAgaXNGb2N1c0lucHV0IHwgaW5wdXREYXRldGltZVBpY2tlckNsYXNzIDogaXNWaXNpYmxlQ29tbWFuZHMgXG4gICAgOiBnZXRTdXBlckNvbnRyb2wgOiBpbnB1dENvbmZpZyA6IGlzVG91Y2hlZElucHV0IFxuICAgIDogZ2V0U3VwZXJDb250cm9sPy52YWx1ZVxuICBcIlxuPlxuICA8c3BhblxuICAgICNzcGFuMVxuICAgIGNsYXNzPVwibWFpblwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFpc0ZvY3VzSW5wdXRcbiAgICB9XCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIChtb3VzZXVwKT1cInNldFNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnbW0nIDogJ0hIJ1wiXG4gID48L3NwYW4+XG4gIDxzcGFuPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYm9yZGVyLXBpY2tlclwiXG4gICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICcvJyA6ICc6J1wiXG4gICAgPjwvZGl2PlxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgI3NwYW4yXG4gICAgY2xhc3M9XCJtYWluXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWlzRm9jdXNJbnB1dFxuICAgIH1cIlxuICAgIHRhYmluZGV4PVwiMVwiXG4gICAgKG1vdXNldXApPVwic2V0U2VsZWN0aW9uKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICdkZCcgOiAnTU0nXCJcbiAgPjwvc3Bhbj5cbiAgPHNwYW4+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJib3JkZXItcGlja2VyXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJy8nIDogJyAnXCJcbiAgICA+PC9kaXY+XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAjc3BhbjNcbiAgICBjbGFzcz1cIm1haW5cIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhaXNGb2N1c0lucHV0XG4gICAgfVwiXG4gICAgdGFiaW5kZXg9XCIyXCJcbiAgICAobW91c2V1cCk9XCJzZXRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ3l5JyA6ICdBTSdcIlxuICA+PC9zcGFuPlxuPC9kaXY+XG4iXX0=