@acorex/components 18.10.4 → 18.10.5
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.
- package/esm2022/map/acorex-components-map.mjs +5 -0
 - package/esm2022/map/index.mjs +3 -0
 - package/esm2022/map/lib/map.component.mjs +74 -0
 - package/esm2022/map/lib/map.module.mjs +18 -0
 - package/esm2022/menu/index.mjs +2 -1
 - package/esm2022/menu/lib/menu-item/menu-item.component.mjs +5 -18
 - package/esm2022/menu/lib/menu-item-text/menu-item-text.component.mjs +11 -0
 - package/esm2022/menu/lib/menu.component.mjs +9 -117
 - package/esm2022/menu/lib/menu.module.mjs +4 -3
 - package/esm2022/menu/lib/menu.service.mjs +2 -7
 - package/esm2022/rate-picker/acorex-components-rate-picker.mjs +5 -0
 - package/esm2022/rate-picker/index.mjs +3 -0
 - package/esm2022/rate-picker/lib/calculatePercentage.mjs +45 -0
 - package/esm2022/rate-picker/lib/rate-picker.component.mjs +184 -0
 - package/esm2022/rate-picker/lib/rate-picker.module.mjs +18 -0
 - package/esm2022/time-line/acorex-components-time-line.mjs +5 -0
 - package/esm2022/time-line/index.mjs +4 -0
 - package/esm2022/time-line/lib/time-line-item.component.mjs +34 -0
 - package/esm2022/time-line/lib/time-line.component.mjs +11 -0
 - package/esm2022/time-line/lib/time-line.module.mjs +19 -0
 - package/fesm2022/acorex-components-map.mjs +96 -0
 - package/fesm2022/acorex-components-map.mjs.map +1 -0
 - package/fesm2022/acorex-components-menu.mjs +24 -141
 - package/fesm2022/acorex-components-menu.mjs.map +1 -1
 - package/fesm2022/acorex-components-rate-picker.mjs +250 -0
 - package/fesm2022/acorex-components-rate-picker.mjs.map +1 -0
 - package/fesm2022/acorex-components-time-line.mjs +65 -0
 - package/fesm2022/acorex-components-time-line.mjs.map +1 -0
 - package/map/README.md +3 -0
 - package/map/index.d.ts +3 -0
 - package/map/lib/map.component.d.ts +24 -0
 - package/map/lib/map.module.d.ts +8 -0
 - package/menu/index.d.ts +1 -0
 - package/menu/lib/menu-item/menu-item.component.d.ts +1 -3
 - package/menu/lib/menu-item-text/menu-item-text.component.d.ts +5 -0
 - package/menu/lib/menu.component.d.ts +1 -6
 - package/menu/lib/menu.module.d.ts +9 -8
 - package/menu/lib/menu.service.d.ts +0 -5
 - package/package.json +55 -37
 - package/rate-picker/README.md +3 -0
 - package/rate-picker/index.d.ts +2 -0
 - package/rate-picker/lib/calculatePercentage.d.ts +27 -0
 - package/rate-picker/lib/rate-picker.component.d.ts +69 -0
 - package/rate-picker/lib/rate-picker.module.d.ts +8 -0
 - package/time-line/README.md +3 -0
 - package/time-line/index.d.ts +3 -0
 - package/time-line/lib/time-line-item.component.d.ts +7 -0
 - package/time-line/lib/time-line.component.d.ts +5 -0
 - package/time-line/lib/time-line.module.d.ts +9 -0
 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2 
     | 
    
         
            +
             * Calculates the horizontal position of a pointer event (mouse or touch) as a percentage
         
     | 
| 
      
 3 
     | 
    
         
            +
             * of the target element's width.
         
     | 
| 
      
 4 
     | 
    
         
            +
             *
         
     | 
| 
      
 5 
     | 
    
         
            +
             * @param event - The mouse or touch event to get the pointer position from.
         
     | 
| 
      
 6 
     | 
    
         
            +
             * @returns The percentage of the event's position relative to the target element's width,
         
     | 
| 
      
 7 
     | 
    
         
            +
             *          or -1 if the event is invalid.
         
     | 
| 
      
 8 
     | 
    
         
            +
             *
         
     | 
| 
      
 9 
     | 
    
         
            +
             * @remarks
         
     | 
| 
      
 10 
     | 
    
         
            +
             * - For `MouseEvent`, it uses the `clientX` property.
         
     | 
| 
      
 11 
     | 
    
         
            +
             * - For `TouchEvent`, it uses the `clientX` of the first touch point.
         
     | 
| 
      
 12 
     | 
    
         
            +
             * - Returns `-1` if the event is neither a valid `MouseEvent` nor a `TouchEvent`.
         
     | 
| 
      
 13 
     | 
    
         
            +
             *
         
     | 
| 
      
 14 
     | 
    
         
            +
             * @example
         
     | 
| 
      
 15 
     | 
    
         
            +
             * ```typescript
         
     | 
| 
      
 16 
     | 
    
         
            +
             * document.addEventListener('click', function(event) {
         
     | 
| 
      
 17 
     | 
    
         
            +
             *   const percentage = getPointerPercentage(event);
         
     | 
| 
      
 18 
     | 
    
         
            +
             *   console.log(`Click position: ${percentage.toFixed(2)}% of the element's width`);
         
     | 
| 
      
 19 
     | 
    
         
            +
             * });
         
     | 
| 
      
 20 
     | 
    
         
            +
             *
         
     | 
| 
      
 21 
     | 
    
         
            +
             * document.addEventListener('touchstart', function(event) {
         
     | 
| 
      
 22 
     | 
    
         
            +
             *   const percentage = getPointerPercentage(event);
         
     | 
| 
      
 23 
     | 
    
         
            +
             *   console.log(`Touch position: ${percentage.toFixed(2)}% of the element's width`);
         
     | 
| 
      
 24 
     | 
    
         
            +
             * });
         
     | 
| 
      
 25 
     | 
    
         
            +
             * ```
         
     | 
| 
      
 26 
     | 
    
         
            +
             */
         
     | 
| 
      
 27 
     | 
    
         
            +
            export function getPointerPercentage(event) {
         
     | 
| 
      
 28 
     | 
    
         
            +
                let clientX;
         
     | 
| 
      
 29 
     | 
    
         
            +
                if (event instanceof MouseEvent) {
         
     | 
| 
      
 30 
     | 
    
         
            +
                    clientX = event.clientX; // Mouse event uses clientX
         
     | 
| 
      
 31 
     | 
    
         
            +
                }
         
     | 
| 
      
 32 
     | 
    
         
            +
                else if (event instanceof TouchEvent && event.touches.length > 0) {
         
     | 
| 
      
 33 
     | 
    
         
            +
                    clientX = event.touches[0].clientX; // Touch event uses the first touch's clientX
         
     | 
| 
      
 34 
     | 
    
         
            +
                }
         
     | 
| 
      
 35 
     | 
    
         
            +
                else {
         
     | 
| 
      
 36 
     | 
    
         
            +
                    return -1; // Return -1 for invalid events
         
     | 
| 
      
 37 
     | 
    
         
            +
                }
         
     | 
| 
      
 38 
     | 
    
         
            +
                // Use currentTarget to get the bounding box of the element the event listener is attached to
         
     | 
| 
      
 39 
     | 
    
         
            +
                const rect = event.currentTarget.getBoundingClientRect();
         
     | 
| 
      
 40 
     | 
    
         
            +
                const clickX = clientX - rect.left; // Calculate X position relative to the element
         
     | 
| 
      
 41 
     | 
    
         
            +
                const divWidth = rect.width; // Get the width from the bounding box
         
     | 
| 
      
 42 
     | 
    
         
            +
                const percentage = (clickX / divWidth) * 100; // Calculate percentage
         
     | 
| 
      
 43 
     | 
    
         
            +
                return percentage;
         
     | 
| 
      
 44 
     | 
    
         
            +
            }
         
     | 
| 
      
 45 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlUGVyY2VudGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9yYXRlLXBpY2tlci9zcmMvbGliL2NhbGN1bGF0ZVBlcmNlbnRhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBOEI7SUFDakUsSUFBSSxPQUFlLENBQUM7SUFFcEIsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDaEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQywyQkFBMkI7SUFDdEQsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuRSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyw2Q0FBNkM7SUFDbkYsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQStCO0lBQzVDLENBQUM7SUFFRCw2RkFBNkY7SUFDN0YsTUFBTSxJQUFJLEdBQUksS0FBSyxDQUFDLGFBQTZCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMxRSxNQUFNLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLCtDQUErQztJQUNuRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsc0NBQXNDO0lBQ25FLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLHVCQUF1QjtJQUVyRSxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIGEgcG9pbnRlciBldmVudCAobW91c2Ugb3IgdG91Y2gpIGFzIGEgcGVyY2VudGFnZVxuICogb2YgdGhlIHRhcmdldCBlbGVtZW50J3Mgd2lkdGguXG4gKlxuICogQHBhcmFtIGV2ZW50IC0gVGhlIG1vdXNlIG9yIHRvdWNoIGV2ZW50IHRvIGdldCB0aGUgcG9pbnRlciBwb3NpdGlvbiBmcm9tLlxuICogQHJldHVybnMgVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGV2ZW50J3MgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBlbGVtZW50J3Mgd2lkdGgsXG4gKiAgICAgICAgICBvciAtMSBpZiB0aGUgZXZlbnQgaXMgaW52YWxpZC5cbiAqXG4gKiBAcmVtYXJrc1xuICogLSBGb3IgYE1vdXNlRXZlbnRgLCBpdCB1c2VzIHRoZSBgY2xpZW50WGAgcHJvcGVydHkuXG4gKiAtIEZvciBgVG91Y2hFdmVudGAsIGl0IHVzZXMgdGhlIGBjbGllbnRYYCBvZiB0aGUgZmlyc3QgdG91Y2ggcG9pbnQuXG4gKiAtIFJldHVybnMgYC0xYCBpZiB0aGUgZXZlbnQgaXMgbmVpdGhlciBhIHZhbGlkIGBNb3VzZUV2ZW50YCBub3IgYSBgVG91Y2hFdmVudGAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgY29uc3QgcGVyY2VudGFnZSA9IGdldFBvaW50ZXJQZXJjZW50YWdlKGV2ZW50KTtcbiAqICAgY29uc29sZS5sb2coYENsaWNrIHBvc2l0aW9uOiAke3BlcmNlbnRhZ2UudG9GaXhlZCgyKX0lIG9mIHRoZSBlbGVtZW50J3Mgd2lkdGhgKTtcbiAqIH0pO1xuICpcbiAqIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICogICBjb25zdCBwZXJjZW50YWdlID0gZ2V0UG9pbnRlclBlcmNlbnRhZ2UoZXZlbnQpO1xuICogICBjb25zb2xlLmxvZyhgVG91Y2ggcG9zaXRpb246ICR7cGVyY2VudGFnZS50b0ZpeGVkKDIpfSUgb2YgdGhlIGVsZW1lbnQncyB3aWR0aGApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvaW50ZXJQZXJjZW50YWdlKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IG51bWJlciB7XG4gIGxldCBjbGllbnRYOiBudW1iZXI7XG5cbiAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgIGNsaWVudFggPSBldmVudC5jbGllbnRYOyAvLyBNb3VzZSBldmVudCB1c2VzIGNsaWVudFhcbiAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgY2xpZW50WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDsgLy8gVG91Y2ggZXZlbnQgdXNlcyB0aGUgZmlyc3QgdG91Y2gncyBjbGllbnRYXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIC0xOyAvLyBSZXR1cm4gLTEgZm9yIGludmFsaWQgZXZlbnRzXG4gIH1cblxuICAvLyBVc2UgY3VycmVudFRhcmdldCB0byBnZXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZWxlbWVudCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgYXR0YWNoZWQgdG9cbiAgY29uc3QgcmVjdCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY2xpY2tYID0gY2xpZW50WCAtIHJlY3QubGVmdDsgLy8gQ2FsY3VsYXRlIFggcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnRcbiAgY29uc3QgZGl2V2lkdGggPSByZWN0LndpZHRoOyAvLyBHZXQgdGhlIHdpZHRoIGZyb20gdGhlIGJvdW5kaW5nIGJveFxuICBjb25zdCBwZXJjZW50YWdlID0gKGNsaWNrWCAvIGRpdldpZHRoKSAqIDEwMDsgLy8gQ2FsY3VsYXRlIHBlcmNlbnRhZ2VcblxuICByZXR1cm4gcGVyY2VudGFnZTtcbn1cbiJdfQ==
         
     | 
| 
         @@ -0,0 +1,184 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { AXValuableComponent, MXValueComponent } from '@acorex/components/common';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { ChangeDetectionStrategy, Component, computed, effect, forwardRef, HostBinding, inject, input, Renderer2, signal, viewChild, ViewEncapsulation, } from '@angular/core';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { NG_VALUE_ACCESSOR } from '@angular/forms';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { getPointerPercentage } from './calculatePercentage';
         
     | 
| 
      
 5 
     | 
    
         
            +
            import * as i0 from "@angular/core";
         
     | 
| 
      
 6 
     | 
    
         
            +
            /**
         
     | 
| 
      
 7 
     | 
    
         
            +
             * A component for selecting a rating using star icons.
         
     | 
| 
      
 8 
     | 
    
         
            +
             *
         
     | 
| 
      
 9 
     | 
    
         
            +
             * This component allows users to pick a rating by clicking or dragging over star icons.
         
     | 
| 
      
 10 
     | 
    
         
            +
             * It supports rounding options and manages the rating state internally.
         
     | 
| 
      
 11 
     | 
    
         
            +
             */
         
     | 
| 
      
 12 
     | 
    
         
            +
            export class AXRatePickerComponent extends MXValueComponent {
         
     | 
| 
      
 13 
     | 
    
         
            +
                /**
         
     | 
| 
      
 14 
     | 
    
         
            +
                 * Initializes the component and sets up value change subscription.
         
     | 
| 
      
 15 
     | 
    
         
            +
                 */
         
     | 
| 
      
 16 
     | 
    
         
            +
                constructor() {
         
     | 
| 
      
 17 
     | 
    
         
            +
                    super();
         
     | 
| 
      
 18 
     | 
    
         
            +
                    /** The icon name to use for stars (e.g., 'fa-star'). */
         
     | 
| 
      
 19 
     | 
    
         
            +
                    this.iconName = input('fa-star');
         
     | 
| 
      
 20 
     | 
    
         
            +
                    /** The maximum rating value (e.g., 5 stars). */
         
     | 
| 
      
 21 
     | 
    
         
            +
                    this.max = input(5);
         
     | 
| 
      
 22 
     | 
    
         
            +
                    /** Determines if the rating should be rounded to the nearest integer. */
         
     | 
| 
      
 23 
     | 
    
         
            +
                    this.isRound = input(true);
         
     | 
| 
      
 24 
     | 
    
         
            +
                    /** choosing to have css transition for unchanging value after hover. */
         
     | 
| 
      
 25 
     | 
    
         
            +
                    this.hasTransition = input(true);
         
     | 
| 
      
 26 
     | 
    
         
            +
                    /** The percentage of the current rating value relative to the maximum rating. */
         
     | 
| 
      
 27 
     | 
    
         
            +
                    this.ratePercentage = computed(() => Math.round((this.currentValue() / this.max()) * 10000) / 100);
         
     | 
| 
      
 28 
     | 
    
         
            +
                    /** The current rating value as a signal. */
         
     | 
| 
      
 29 
     | 
    
         
            +
                    this.currentValue = signal(this.max());
         
     | 
| 
      
 30 
     | 
    
         
            +
                    /** State for tracking hover status and previous value. */
         
     | 
| 
      
 31 
     | 
    
         
            +
                    this.prevState = {
         
     | 
| 
      
 32 
     | 
    
         
            +
                        ishover: false,
         
     | 
| 
      
 33 
     | 
    
         
            +
                        previousValue: undefined,
         
     | 
| 
      
 34 
     | 
    
         
            +
                    };
         
     | 
| 
      
 35 
     | 
    
         
            +
                    /** Reference to the container element. */
         
     | 
| 
      
 36 
     | 
    
         
            +
                    this.containerEl = viewChild.required('c');
         
     | 
| 
      
 37 
     | 
    
         
            +
                    /** Reference to the rating element. */
         
     | 
| 
      
 38 
     | 
    
         
            +
                    this.ratingEl = viewChild.required('r');
         
     | 
| 
      
 39 
     | 
    
         
            +
                    /** Renderer for manipulating styles. */
         
     | 
| 
      
 40 
     | 
    
         
            +
                    this.renderer = inject(Renderer2);
         
     | 
| 
      
 41 
     | 
    
         
            +
                    /** Array of rating values from 1 to `max`. */
         
     | 
| 
      
 42 
     | 
    
         
            +
                    this.rates = computed(() => Array(this.max())
         
     | 
| 
      
 43 
     | 
    
         
            +
                        .fill(0)
         
     | 
| 
      
 44 
     | 
    
         
            +
                        .map((_, index) => index + 1));
         
     | 
| 
      
 45 
     | 
    
         
            +
                    effect(() => {
         
     | 
| 
      
 46 
     | 
    
         
            +
                        if (!this.hasTransition()) {
         
     | 
| 
      
 47 
     | 
    
         
            +
                            this.renderer.removeStyle(this.ratingEl().nativeElement, 'transition');
         
     | 
| 
      
 48 
     | 
    
         
            +
                        }
         
     | 
| 
      
 49 
     | 
    
         
            +
                        return this.hasTransition();
         
     | 
| 
      
 50 
     | 
    
         
            +
                    });
         
     | 
| 
      
 51 
     | 
    
         
            +
                    this.onValueChanged.subscribe((val) => {
         
     | 
| 
      
 52 
     | 
    
         
            +
                        if (val.value < 0) {
         
     | 
| 
      
 53 
     | 
    
         
            +
                            this.currentValue.set(0);
         
     | 
| 
      
 54 
     | 
    
         
            +
                            console.warn('ax-rate-picker: value cant be negative!');
         
     | 
| 
      
 55 
     | 
    
         
            +
                        }
         
     | 
| 
      
 56 
     | 
    
         
            +
                        else if (val.value > this.max()) {
         
     | 
| 
      
 57 
     | 
    
         
            +
                            this.currentValue.set(this.max());
         
     | 
| 
      
 58 
     | 
    
         
            +
                            console.warn('ax-rate-picker: value cant be more than max!');
         
     | 
| 
      
 59 
     | 
    
         
            +
                        }
         
     | 
| 
      
 60 
     | 
    
         
            +
                        else {
         
     | 
| 
      
 61 
     | 
    
         
            +
                            this.currentValue.set(val.value);
         
     | 
| 
      
 62 
     | 
    
         
            +
                        }
         
     | 
| 
      
 63 
     | 
    
         
            +
                    });
         
     | 
| 
      
 64 
     | 
    
         
            +
                }
         
     | 
| 
      
 65 
     | 
    
         
            +
                /**
         
     | 
| 
      
 66 
     | 
    
         
            +
                 * Calculates and updates the rating based on the mouse or touch event.
         
     | 
| 
      
 67 
     | 
    
         
            +
                 *
         
     | 
| 
      
 68 
     | 
    
         
            +
                 * @param event - The mouse or touch event triggering the rating calculation.
         
     | 
| 
      
 69 
     | 
    
         
            +
                 */
         
     | 
| 
      
 70 
     | 
    
         
            +
                calculateRate(event) {
         
     | 
| 
      
 71 
     | 
    
         
            +
                    if (this.hasTransition()) {
         
     | 
| 
      
 72 
     | 
    
         
            +
                        this.renderer.removeStyle(this.ratingEl().nativeElement, 'transition');
         
     | 
| 
      
 73 
     | 
    
         
            +
                    }
         
     | 
| 
      
 74 
     | 
    
         
            +
                    event.preventDefault();
         
     | 
| 
      
 75 
     | 
    
         
            +
                    if (!this.readonly && !this.disabled) {
         
     | 
| 
      
 76 
     | 
    
         
            +
                        const pointerPercentage = getPointerPercentage(event);
         
     | 
| 
      
 77 
     | 
    
         
            +
                        if (pointerPercentage === -1) {
         
     | 
| 
      
 78 
     | 
    
         
            +
                            return console.log('Only support touch and click events.');
         
     | 
| 
      
 79 
     | 
    
         
            +
                        }
         
     | 
| 
      
 80 
     | 
    
         
            +
                        const value = (pointerPercentage / 100) * this.max();
         
     | 
| 
      
 81 
     | 
    
         
            +
                        const finalValue = this.isRound() ? Math.ceil(value) : Number.parseFloat(value.toFixed(2));
         
     | 
| 
      
 82 
     | 
    
         
            +
                        if (finalValue !== this.value) {
         
     | 
| 
      
 83 
     | 
    
         
            +
                            if (this.prevState.ishover === true) {
         
     | 
| 
      
 84 
     | 
    
         
            +
                                this.currentValue.set(finalValue);
         
     | 
| 
      
 85 
     | 
    
         
            +
                            }
         
     | 
| 
      
 86 
     | 
    
         
            +
                            else {
         
     | 
| 
      
 87 
     | 
    
         
            +
                                this.commitValue(finalValue);
         
     | 
| 
      
 88 
     | 
    
         
            +
                            }
         
     | 
| 
      
 89 
     | 
    
         
            +
                        }
         
     | 
| 
      
 90 
     | 
    
         
            +
                    }
         
     | 
| 
      
 91 
     | 
    
         
            +
                }
         
     | 
| 
      
 92 
     | 
    
         
            +
                /**
         
     | 
| 
      
 93 
     | 
    
         
            +
                 * Handles mouse enter events to start tracking mouse movements for rating.
         
     | 
| 
      
 94 
     | 
    
         
            +
                 */
         
     | 
| 
      
 95 
     | 
    
         
            +
                mouseEnter() {
         
     | 
| 
      
 96 
     | 
    
         
            +
                    this.prevState = {
         
     | 
| 
      
 97 
     | 
    
         
            +
                        ishover: true,
         
     | 
| 
      
 98 
     | 
    
         
            +
                        previousValue: this.value,
         
     | 
| 
      
 99 
     | 
    
         
            +
                    };
         
     | 
| 
      
 100 
     | 
    
         
            +
                    if (this.hasTransition()) {
         
     | 
| 
      
 101 
     | 
    
         
            +
                        this.renderer.setStyle(this.ratingEl().nativeElement, 'opacity', '80%');
         
     | 
| 
      
 102 
     | 
    
         
            +
                    }
         
     | 
| 
      
 103 
     | 
    
         
            +
                    const moveListener = (moveEvent) => this.calculateRate(moveEvent);
         
     | 
| 
      
 104 
     | 
    
         
            +
                    const endListener = () => this.onEnd(moveListener, endListener);
         
     | 
| 
      
 105 
     | 
    
         
            +
                    const container = this.containerEl().nativeElement;
         
     | 
| 
      
 106 
     | 
    
         
            +
                    container.addEventListener('mousemove', moveListener);
         
     | 
| 
      
 107 
     | 
    
         
            +
                    container.addEventListener('mouseup', endListener);
         
     | 
| 
      
 108 
     | 
    
         
            +
                    container.addEventListener('mouseleave', endListener);
         
     | 
| 
      
 109 
     | 
    
         
            +
                }
         
     | 
| 
      
 110 
     | 
    
         
            +
                mouseLeave() {
         
     | 
| 
      
 111 
     | 
    
         
            +
                    if (this.hasTransition()) {
         
     | 
| 
      
 112 
     | 
    
         
            +
                        this.renderer.removeStyle(this.ratingEl().nativeElement, 'opacity');
         
     | 
| 
      
 113 
     | 
    
         
            +
                    }
         
     | 
| 
      
 114 
     | 
    
         
            +
                }
         
     | 
| 
      
 115 
     | 
    
         
            +
                /**
         
     | 
| 
      
 116 
     | 
    
         
            +
                 * Cleans up event listeners and restores the previous rating value.
         
     | 
| 
      
 117 
     | 
    
         
            +
                 *
         
     | 
| 
      
 118 
     | 
    
         
            +
                 * @param moveListener - The function to remove for mouse move events.
         
     | 
| 
      
 119 
     | 
    
         
            +
                 * @param endListener - The function to remove for mouse end events.
         
     | 
| 
      
 120 
     | 
    
         
            +
                 */
         
     | 
| 
      
 121 
     | 
    
         
            +
                onEnd(moveListener, endListener) {
         
     | 
| 
      
 122 
     | 
    
         
            +
                    if (this.hasTransition()) {
         
     | 
| 
      
 123 
     | 
    
         
            +
                        this.renderer.setStyle(this.ratingEl().nativeElement, 'transition', `width ${this.max() * 50 + 250}ms cubic-bezier(0.29, 0.72, 0.68, 0.85)`);
         
     | 
| 
      
 124 
     | 
    
         
            +
                        this.renderer.removeStyle(this.ratingEl().nativeElement, 'opacity');
         
     | 
| 
      
 125 
     | 
    
         
            +
                    }
         
     | 
| 
      
 126 
     | 
    
         
            +
                    this.currentValue.set(this.prevState.previousValue);
         
     | 
| 
      
 127 
     | 
    
         
            +
                    this.prevState = {
         
     | 
| 
      
 128 
     | 
    
         
            +
                        ishover: false,
         
     | 
| 
      
 129 
     | 
    
         
            +
                        previousValue: undefined,
         
     | 
| 
      
 130 
     | 
    
         
            +
                    };
         
     | 
| 
      
 131 
     | 
    
         
            +
                    const container = this.containerEl().nativeElement;
         
     | 
| 
      
 132 
     | 
    
         
            +
                    container.removeEventListener('mousemove', moveListener);
         
     | 
| 
      
 133 
     | 
    
         
            +
                    container.removeEventListener('mouseup', endListener);
         
     | 
| 
      
 134 
     | 
    
         
            +
                    container.removeEventListener('mouseleave', endListener);
         
     | 
| 
      
 135 
     | 
    
         
            +
                }
         
     | 
| 
      
 136 
     | 
    
         
            +
                /**
         
     | 
| 
      
 137 
     | 
    
         
            +
                 * Determines if the component is active (i.e., not readonly or disabled).
         
     | 
| 
      
 138 
     | 
    
         
            +
                 */
         
     | 
| 
      
 139 
     | 
    
         
            +
                get isActive() {
         
     | 
| 
      
 140 
     | 
    
         
            +
                    return !this.readonly && !this.disabled;
         
     | 
| 
      
 141 
     | 
    
         
            +
                }
         
     | 
| 
      
 142 
     | 
    
         
            +
                /**
         
     | 
| 
      
 143 
     | 
    
         
            +
                 * Determines if the component is in readonly mode.
         
     | 
| 
      
 144 
     | 
    
         
            +
                 */
         
     | 
| 
      
 145 
     | 
    
         
            +
                get isReadonly() {
         
     | 
| 
      
 146 
     | 
    
         
            +
                    return this.readonly;
         
     | 
| 
      
 147 
     | 
    
         
            +
                }
         
     | 
| 
      
 148 
     | 
    
         
            +
                /**
         
     | 
| 
      
 149 
     | 
    
         
            +
                 * Determines if the component is disabled.
         
     | 
| 
      
 150 
     | 
    
         
            +
                 */
         
     | 
| 
      
 151 
     | 
    
         
            +
                get isDisabled() {
         
     | 
| 
      
 152 
     | 
    
         
            +
                    return this.disabled;
         
     | 
| 
      
 153 
     | 
    
         
            +
                }
         
     | 
| 
      
 154 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXRatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
         
     | 
| 
      
 155 
     | 
    
         
            +
                static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXRatePickerComponent, selector: "ax-rate-picker", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, isRound: { classPropertyName: "isRound", publicName: "isRound", isSignal: true, isRequired: false, transformFunction: null }, hasTransition: { classPropertyName: "hasTransition", publicName: "hasTransition", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.active": "this.isActive", "class.readonly": "this.isReadonly", "class.disable": "this.isDisabled" } }, providers: [
         
     | 
| 
      
 156 
     | 
    
         
            +
                        { provide: AXValuableComponent, useExisting: AXRatePickerComponent },
         
     | 
| 
      
 157 
     | 
    
         
            +
                        {
         
     | 
| 
      
 158 
     | 
    
         
            +
                            provide: NG_VALUE_ACCESSOR,
         
     | 
| 
      
 159 
     | 
    
         
            +
                            useExisting: forwardRef(() => AXRatePickerComponent),
         
     | 
| 
      
 160 
     | 
    
         
            +
                            multi: true,
         
     | 
| 
      
 161 
     | 
    
         
            +
                        },
         
     | 
| 
      
 162 
     | 
    
         
            +
                    ], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["c"], descendants: true, isSignal: true }, { propertyName: "ratingEl", first: true, predicate: ["r"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n  #c\n  class=\"ax-rate-picker-container\"\n  (click)=\"calculateRate($event)\"\n  (touchstart)=\"calculateRate($event)\"\n  (mouseenter)=\"mouseEnter()\"\n  (mouseleave)=\"mouseLeave()\"\n>\n  <div #r class=\"ax-rate-picker-rating\" [style.width.%]=\"ratePercentage()\">\n    <div class=\"ax-rate-picker-icons ax-rp-active\">\n      @for (rate of rates(); track rate) {\n        <i class=\"ax-rate-picker-icon fa-solid\" [class]=\"iconName()\" [class.pointer]=\"!this.readonly\"></i>\n      }\n    </div>\n  </div>\n  <div class=\"ax-rate-picker-icons ax-rp-inactive\">\n    @for (rate of rates(); track rate) {\n      <i class=\"ax-rate-picker-icon fa-solid\" [class]=\"iconName()\"></i>\n    }\n  </div>\n</div>\n", styles: [":root{--ax-rate-picker-color: rgba(var(--ax-color-primary-500));--ax-rate-picker-background: rgba(var(--ax-color-neutral-300))}ax-rate-picker.active{cursor:pointer}ax-rate-picker.readonly{opacity:.75}ax-rate-picker.disable{cursor:not-allowed;opacity:.5}ax-rate-picker.ax-sm{font-size:1rem}ax-rate-picker.ax-md{font-size:1.5rem}ax-rate-picker.ax-lg{font-size:2rem}ax-rate-picker.ax-xl{font-size:2.5rem}ax-rate-picker.ax-2xl{font-size:3rem}ax-rate-picker.ax-3xl{font-size:4rem}ax-rate-picker .ax-rate-picker-container{position:relative;width:min-content}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-rating{position:relative;z-index:10;overflow:hidden}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-rating .ax-rate-picker-icons{display:flex}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-rating .ax-rate-picker-icons.ax-rp-active{color:var(--ax-rate-picker-color)}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-icons{display:flex}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-icons.ax-rp-inactive{color:var(--ax-rate-picker-background);position:absolute;left:50%;top:50%;translate:-50% -50%;z-index:5}.ax-dark :root{--ax-rate-picker-color: rgba(var(--ax-color-primary-300));--ax-rate-picker-background: rgba(var(--ax-color-neutral-600))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
         
     | 
| 
      
 163 
     | 
    
         
            +
            }
         
     | 
| 
      
 164 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXRatePickerComponent, decorators: [{
         
     | 
| 
      
 165 
     | 
    
         
            +
                        type: Component,
         
     | 
| 
      
 166 
     | 
    
         
            +
                        args: [{ selector: 'ax-rate-picker', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['readonly', 'disabled'], providers: [
         
     | 
| 
      
 167 
     | 
    
         
            +
                                    { provide: AXValuableComponent, useExisting: AXRatePickerComponent },
         
     | 
| 
      
 168 
     | 
    
         
            +
                                    {
         
     | 
| 
      
 169 
     | 
    
         
            +
                                        provide: NG_VALUE_ACCESSOR,
         
     | 
| 
      
 170 
     | 
    
         
            +
                                        useExisting: forwardRef(() => AXRatePickerComponent),
         
     | 
| 
      
 171 
     | 
    
         
            +
                                        multi: true,
         
     | 
| 
      
 172 
     | 
    
         
            +
                                    },
         
     | 
| 
      
 173 
     | 
    
         
            +
                                ], template: "<div\n  #c\n  class=\"ax-rate-picker-container\"\n  (click)=\"calculateRate($event)\"\n  (touchstart)=\"calculateRate($event)\"\n  (mouseenter)=\"mouseEnter()\"\n  (mouseleave)=\"mouseLeave()\"\n>\n  <div #r class=\"ax-rate-picker-rating\" [style.width.%]=\"ratePercentage()\">\n    <div class=\"ax-rate-picker-icons ax-rp-active\">\n      @for (rate of rates(); track rate) {\n        <i class=\"ax-rate-picker-icon fa-solid\" [class]=\"iconName()\" [class.pointer]=\"!this.readonly\"></i>\n      }\n    </div>\n  </div>\n  <div class=\"ax-rate-picker-icons ax-rp-inactive\">\n    @for (rate of rates(); track rate) {\n      <i class=\"ax-rate-picker-icon fa-solid\" [class]=\"iconName()\"></i>\n    }\n  </div>\n</div>\n", styles: [":root{--ax-rate-picker-color: rgba(var(--ax-color-primary-500));--ax-rate-picker-background: rgba(var(--ax-color-neutral-300))}ax-rate-picker.active{cursor:pointer}ax-rate-picker.readonly{opacity:.75}ax-rate-picker.disable{cursor:not-allowed;opacity:.5}ax-rate-picker.ax-sm{font-size:1rem}ax-rate-picker.ax-md{font-size:1.5rem}ax-rate-picker.ax-lg{font-size:2rem}ax-rate-picker.ax-xl{font-size:2.5rem}ax-rate-picker.ax-2xl{font-size:3rem}ax-rate-picker.ax-3xl{font-size:4rem}ax-rate-picker .ax-rate-picker-container{position:relative;width:min-content}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-rating{position:relative;z-index:10;overflow:hidden}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-rating .ax-rate-picker-icons{display:flex}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-rating .ax-rate-picker-icons.ax-rp-active{color:var(--ax-rate-picker-color)}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-icons{display:flex}ax-rate-picker .ax-rate-picker-container .ax-rate-picker-icons.ax-rp-inactive{color:var(--ax-rate-picker-background);position:absolute;left:50%;top:50%;translate:-50% -50%;z-index:5}.ax-dark :root{--ax-rate-picker-color: rgba(var(--ax-color-primary-300));--ax-rate-picker-background: rgba(var(--ax-color-neutral-600))}\n"] }]
         
     | 
| 
      
 174 
     | 
    
         
            +
                    }], ctorParameters: () => [], propDecorators: { isActive: [{
         
     | 
| 
      
 175 
     | 
    
         
            +
                            type: HostBinding,
         
     | 
| 
      
 176 
     | 
    
         
            +
                            args: ['class.active']
         
     | 
| 
      
 177 
     | 
    
         
            +
                        }], isReadonly: [{
         
     | 
| 
      
 178 
     | 
    
         
            +
                            type: HostBinding,
         
     | 
| 
      
 179 
     | 
    
         
            +
                            args: ['class.readonly']
         
     | 
| 
      
 180 
     | 
    
         
            +
                        }], isDisabled: [{
         
     | 
| 
      
 181 
     | 
    
         
            +
                            type: HostBinding,
         
     | 
| 
      
 182 
     | 
    
         
            +
                            args: ['class.disable']
         
     | 
| 
      
 183 
     | 
    
         
            +
                        }] } });
         
     | 
| 
      
 184 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3JhdGUtcGlja2VyL3NyYy9saWIvcmF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3JhdGUtcGlja2VyL3NyYy9saWIvcmF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUU3RDs7Ozs7R0FLRztBQWlCSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZ0JBQXdCO0lBeUNqRTs7T0FFRztJQUNIO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE1Q1Ysd0RBQXdEO1FBQ3hELGFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUIsZ0RBQWdEO1FBQ2hELFFBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFZix5RUFBeUU7UUFDekUsWUFBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0Qix3RUFBd0U7UUFDeEUsa0JBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsaUZBQWlGO1FBQ3ZFLG1CQUFjLEdBQUcs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QUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDOzRCQUNwRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjt3REFvSmdDLFFBQVE7c0JBQXhDLFdBQVc7dUJBQUMsY0FBYztnQkFPUSxVQUFVO3NCQUE1QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFPSyxVQUFVO3NCQUEzQyxXQUFXO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFZhbHVhYmxlQ29tcG9uZW50LCBNWFZhbHVlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBnZXRQb2ludGVyUGVyY2VudGFnZSB9IGZyb20gJy4vY2FsY3VsYXRlUGVyY2VudGFnZSc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgZm9yIHNlbGVjdGluZyBhIHJhdGluZyB1c2luZyBzdGFyIGljb25zLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGFsbG93cyB1c2VycyB0byBwaWNrIGEgcmF0aW5nIGJ5IGNsaWNraW5nIG9yIGRyYWdnaW5nIG92ZXIgc3RhciBpY29ucy5cbiAqIEl0IHN1cHBvcnRzIHJvdW5kaW5nIG9wdGlvbnMgYW5kIG1hbmFnZXMgdGhlIHJhdGluZyBzdGF0ZSBpbnRlcm5hbGx5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1yYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbnB1dHM6IFsncmVhZG9ubHknLCAnZGlzYWJsZWQnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWFZhbHVhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhSYXRlUGlja2VyQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWFJhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhSYXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgTVhWYWx1ZUNvbXBvbmVudDxudW1iZXI+IHtcbiAgLyoqIFRoZSBpY29uIG5hbWUgdG8gdXNlIGZvciBzdGFycyAoZS5nLiwgJ2ZhLXN0YXInKS4gKi9cbiAgaWNvbk5hbWUgPSBpbnB1dCgnZmEtc3RhcicpO1xuXG4gIC8qKiBUaGUgbWF4aW11bSByYXRpbmcgdmFsdWUgKGUuZy4sIDUgc3RhcnMpLiAqL1xuICBtYXggPSBpbnB1dCg1KTtcblxuICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgcmF0aW5nIHNob3VsZCBiZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuICovXG4gIGlzUm91bmQgPSBpbnB1dCh0cnVlKTtcblxuICAvKiogY2hvb3NpbmcgdG8gaGF2ZSBjc3MgdHJhbnNpdGlvbiBmb3IgdW5jaGFuZ2luZyB2YWx1ZSBhZnRlciBob3Zlci4gKi9cbiAgaGFzVHJhbnNpdGlvbiA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgY3VycmVudCByYXRpbmcgdmFsdWUgcmVsYXRpdmUgdG8gdGhlIG1heGltdW0gcmF0aW5nLiAqL1xuICBwcm90ZWN0ZWQgcmF0ZVBlcmNlbnRhZ2UgPSBjb21wdXRlZCgoKSA9PiBNYXRoLnJvdW5kKCh0aGlzLmN1cnJlbnRWYWx1ZSgpIC8gdGhpcy5tYXgoKSkgKiAxMDAwMCkgLyAxMDApO1xuXG4gIC8qKiBUaGUgY3VycmVudCByYXRpbmcgdmFsdWUgYXMgYSBzaWduYWwuICovXG4gIHByaXZhdGUgY3VycmVudFZhbHVlID0gc2lnbmFsKHRoaXMubWF4KCkpO1xuXG4gIC8qKiBTdGF0ZSBmb3IgdHJhY2tpbmcgaG92ZXIgc3RhdHVzIGFuZCBwcmV2aW91cyB2YWx1ZS4gKi9cbiAgcHJpdmF0ZSBwcmV2U3RhdGU6IHsgaXNob3ZlcjogYm9vbGVhbjsgcHJldmlvdXNWYWx1ZT86IG51bWJlciB9ID0ge1xuICAgIGlzaG92ZXI6IGZhbHNlLFxuICAgIHByZXZpb3VzVmFsdWU6IHVuZGVmaW5lZCxcbiAgfTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBjb250YWluZXIgZWxlbWVudC4gKi9cbiAgY29udGFpbmVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2MnKTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSByYXRpbmcgZWxlbWVudC4gKi9cbiAgcmF0aW5nRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ3InKTtcblxuICAvKiogUmVuZGVyZXIgZm9yIG1hbmlwdWxhdGluZyBzdHlsZXMuICovXG4gIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgLyoqIEFycmF5IG9mIHJhdGluZyB2YWx1ZXMgZnJvbSAxIHRvIGBtYXhgLiAqL1xuICBwcm90ZWN0ZWQgcmF0ZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIEFycmF5KHRoaXMubWF4KCkpXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IGluZGV4ICsgMSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIHNldHMgdXAgdmFsdWUgY2hhbmdlIHN1YnNjcmlwdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLnJhdGluZ0VsKCkubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmhhc1RyYW5zaXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLnN1YnNjcmliZSgodmFsOiB7IHZhbHVlIH0pID0+IHtcbiAgICAgIGlmICh2YWwudmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlLnNldCgwKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdheC1yYXRlLXBpY2tlcjogdmFsdWUgY2FudCBiZSBuZWdhdGl2ZSEnKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsLnZhbHVlID4gdGhpcy5tYXgoKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5zZXQodGhpcy5tYXgoKSk7XG4gICAgICAgIGNvbnNvbGUud2FybignYXgtcmF0ZS1waWNrZXI6IHZhbHVlIGNhbnQgYmUgbW9yZSB0aGFuIG1heCEnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlLnNldCh2YWwudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYW5kIHVwZGF0ZXMgdGhlIHJhdGluZyBiYXNlZCBvbiB0aGUgbW91c2Ugb3IgdG91Y2ggZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBtb3VzZSBvciB0b3VjaCBldmVudCB0cmlnZ2VyaW5nIHRoZSByYXRpbmcgY2FsY3VsYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FsY3VsYXRlUmF0ZShldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5yYXRpbmdFbCgpLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uJyk7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBjb25zdCBwb2ludGVyUGVyY2VudGFnZSA9IGdldFBvaW50ZXJQZXJjZW50YWdlKGV2ZW50KTtcbiAgICAgIGlmIChwb2ludGVyUGVyY2VudGFnZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdPbmx5IHN1cHBvcnQgdG91Y2ggYW5kIGNsaWNrIGV2ZW50cy4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gKHBvaW50ZXJQZXJjZW50YWdlIC8gMTAwKSAqIHRoaXMubWF4KCk7XG4gICAgICBjb25zdCBmaW5hbFZhbHVlID0gdGhpcy5pc1JvdW5kKCkgPyBNYXRoLmNlaWwodmFsdWUpIDogTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUudG9GaXhlZCgyKSk7XG4gICAgICBpZiAoZmluYWxWYWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmV2U3RhdGUuaXNob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLnNldChmaW5hbFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdFZhbHVlKGZpbmFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbW91c2UgZW50ZXIgZXZlbnRzIHRvIHN0YXJ0IHRyYWNraW5nIG1vdXNlIG1vdmVtZW50cyBmb3IgcmF0aW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIG1vdXNlRW50ZXIoKSB7XG4gICAgdGhpcy5wcmV2U3RhdGUgPSB7XG4gICAgICBpc2hvdmVyOiB0cnVlLFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmhhc1RyYW5zaXRpb24oKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJhdGluZ0VsKCkubmF0aXZlRWxlbWVudCwgJ29wYWNpdHknLCAnODAlJyk7XG4gICAgfVxuICAgIGNvbnN0IG1vdmVMaXN0ZW5lciA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB0aGlzLmNhbGN1bGF0ZVJhdGUobW92ZUV2ZW50KTtcbiAgICBjb25zdCBlbmRMaXN0ZW5lciA9ICgpID0+IHRoaXMub25FbmQobW92ZUxpc3RlbmVyLCBlbmRMaXN0ZW5lcik7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJFbCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmVMaXN0ZW5lcik7XG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBlbmRMaXN0ZW5lcik7XG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBlbmRMaXN0ZW5lcik7XG4gIH1cbiAgbW91c2VMZWF2ZSgpIHtcbiAgICBpZiAodGhpcy5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5yYXRpbmdFbCgpLm5hdGl2ZUVsZW1lbnQsICdvcGFjaXR5Jyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDbGVhbnMgdXAgZXZlbnQgbGlzdGVuZXJzIGFuZCByZXN0b3JlcyB0aGUgcHJldmlvdXMgcmF0aW5nIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gbW92ZUxpc3RlbmVyIC0gVGhlIGZ1bmN0aW9uIHRvIHJlbW92ZSBmb3IgbW91c2UgbW92ZSBldmVudHMuXG4gICAqIEBwYXJhbSBlbmRMaXN0ZW5lciAtIFRoZSBmdW5jdGlvbiB0byByZW1vdmUgZm9yIG1vdXNlIGVuZCBldmVudHMuXG4gICAqL1xuICBwcml2YXRlIG9uRW5kKG1vdmVMaXN0ZW5lcjogKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZCwgZW5kTGlzdGVuZXI6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMucmF0aW5nRWwoKS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgIGB3aWR0aCAke3RoaXMubWF4KCkgKiA1MCArIDI1MH1tcyBjdWJpYy1iZXppZXIoMC4yOSwgMC43MiwgMC42OCwgMC44NSlgLFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5yYXRpbmdFbCgpLm5hdGl2ZUVsZW1lbnQsICdvcGFjaXR5Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VmFsdWUuc2V0KHRoaXMucHJldlN0YXRlLnByZXZpb3VzVmFsdWUpO1xuICAgIHRoaXMucHJldlN0YXRlID0ge1xuICAgICAgaXNob3ZlcjogZmFsc2UsXG4gICAgICBwcmV2aW91c1ZhbHVlOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyRWwoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlTGlzdGVuZXIpO1xuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kTGlzdGVuZXIpO1xuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgZW5kTGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmUgKGkuZS4sIG5vdCByZWFkb25seSBvciBkaXNhYmxlZCkuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZScpIGdldCBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY29tcG9uZW50IGlzIGluIHJlYWRvbmx5IG1vZGUuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kaXNhYmxlJykgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2NcbiAgY2xhc3M9XCJheC1yYXRlLXBpY2tlci1jb250YWluZXJcIlxuICAoY2xpY2spPVwiY2FsY3VsYXRlUmF0ZSgkZXZlbnQpXCJcbiAgKHRvdWNoc3RhcnQpPVwiY2FsY3VsYXRlUmF0ZSgkZXZlbnQpXCJcbiAgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlcigpXCJcbiAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZSgpXCJcbj5cbiAgPGRpdiAjciBjbGFzcz1cImF4LXJhdGUtcGlja2VyLXJhdGluZ1wiIFtzdHlsZS53aWR0aC4lXT1cInJhdGVQZXJjZW50YWdlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtcmF0ZS1waWNrZXItaWNvbnMgYXgtcnAtYWN0aXZlXCI+XG4gICAgICBAZm9yIChyYXRlIG9mIHJhdGVzKCk7IHRyYWNrIHJhdGUpIHtcbiAgICAgICAgPGkgY2xhc3M9XCJheC1yYXRlLXBpY2tlci1pY29uIGZhLXNvbGlkXCIgW2NsYXNzXT1cImljb25OYW1lKClcIiBbY2xhc3MucG9pbnRlcl09XCIhdGhpcy5yZWFkb25seVwiPjwvaT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJheC1yYXRlLXBpY2tlci1pY29ucyBheC1ycC1pbmFjdGl2ZVwiPlxuICAgIEBmb3IgKHJhdGUgb2YgcmF0ZXMoKTsgdHJhY2sgcmF0ZSkge1xuICAgICAgPGkgY2xhc3M9XCJheC1yYXRlLXBpY2tlci1pY29uIGZhLXNvbGlkXCIgW2NsYXNzXT1cImljb25OYW1lKClcIj48L2k+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { CommonModule } from '@angular/common';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { NgModule } from '@angular/core';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { AXRatePickerComponent } from './rate-picker.component';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import * as i0 from "@angular/core";
         
     | 
| 
      
 5 
     | 
    
         
            +
            export class AXRatePickerModule {
         
     | 
| 
      
 6 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXRatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
         
     | 
| 
      
 7 
     | 
    
         
            +
                static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXRatePickerModule, declarations: [AXRatePickerComponent], imports: [CommonModule], exports: [AXRatePickerComponent] }); }
         
     | 
| 
      
 8 
     | 
    
         
            +
                static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXRatePickerModule, imports: [CommonModule] }); }
         
     | 
| 
      
 9 
     | 
    
         
            +
            }
         
     | 
| 
      
 10 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXRatePickerModule, decorators: [{
         
     | 
| 
      
 11 
     | 
    
         
            +
                        type: NgModule,
         
     | 
| 
      
 12 
     | 
    
         
            +
                        args: [{
         
     | 
| 
      
 13 
     | 
    
         
            +
                                declarations: [AXRatePickerComponent],
         
     | 
| 
      
 14 
     | 
    
         
            +
                                imports: [CommonModule],
         
     | 
| 
      
 15 
     | 
    
         
            +
                                exports: [AXRatePickerComponent],
         
     | 
| 
      
 16 
     | 
    
         
            +
                            }]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    }] });
         
     | 
| 
      
 18 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS1waWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3JhdGUtcGlja2VyL3NyYy9saWIvcmF0ZS1waWNrZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU9oRSxNQUFNLE9BQU8sa0JBQWtCOzhHQUFsQixrQkFBa0I7K0dBQWxCLGtCQUFrQixpQkFKZCxxQkFBcUIsYUFDMUIsWUFBWSxhQUNaLHFCQUFxQjsrR0FFcEIsa0JBQWtCLFlBSG5CLFlBQVk7OzJGQUdYLGtCQUFrQjtrQkFMOUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDckMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUmF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vcmF0ZS1waWNrZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbQVhSYXRlUGlja2VyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtBWFJhdGVQaWNrZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFJhdGVQaWNrZXJNb2R1bGUge31cbiJdfQ==
         
     | 
| 
         @@ -0,0 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2 
     | 
    
         
            +
             * Generated bundle index. Do not edit.
         
     | 
| 
      
 3 
     | 
    
         
            +
             */
         
     | 
| 
      
 4 
     | 
    
         
            +
            export * from './index';
         
     | 
| 
      
 5 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtdGltZS1saW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RpbWUtbGluZS9zcmMvYWNvcmV4LWNvbXBvbmVudHMtdGltZS1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
         
     | 
| 
         @@ -0,0 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            export * from './lib/time-line-item.component';
         
     | 
| 
      
 2 
     | 
    
         
            +
            export * from './lib/time-line.component';
         
     | 
| 
      
 3 
     | 
    
         
            +
            export * from './lib/time-line.module';
         
     | 
| 
      
 4 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGltZS1saW5lL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL3RpbWUtbGluZS1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90aW1lLWxpbmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RpbWUtbGluZS5tb2R1bGUnO1xuIl19
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { ChangeDetectionStrategy, Component, input, signal, ViewEncapsulation } from '@angular/core';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import * as i0 from "@angular/core";
         
     | 
| 
      
 3 
     | 
    
         
            +
            import * as i1 from "@angular/common";
         
     | 
| 
      
 4 
     | 
    
         
            +
            export class AXTimeLineItemComponent {
         
     | 
| 
      
 5 
     | 
    
         
            +
                constructor() {
         
     | 
| 
      
 6 
     | 
    
         
            +
                    this.text = input('');
         
     | 
| 
      
 7 
     | 
    
         
            +
                    this.isCollapsed = signal(false);
         
     | 
| 
      
 8 
     | 
    
         
            +
                }
         
     | 
| 
      
 9 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
         
     | 
| 
      
 10 
     | 
    
         
            +
                static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: AXTimeLineItemComponent, selector: "ax-time-line-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
         
     | 
| 
      
 11 
     | 
    
         
            +
                <div class="ax-time-line-header">
         
     | 
| 
      
 12 
     | 
    
         
            +
                  <span class="ax-time-line-text">{{ text() }}</span>
         
     | 
| 
      
 13 
     | 
    
         
            +
                  <span
         
     | 
| 
      
 14 
     | 
    
         
            +
                    class="ax-icon ax-icon-chevron-down ax-collapse-arrow"
         
     | 
| 
      
 15 
     | 
    
         
            +
                    [ngClass]="{ '-rotation-90': isCollapsed(), 'rotation-90': !isCollapsed() }"
         
     | 
| 
      
 16 
     | 
    
         
            +
                  ></span>
         
     | 
| 
      
 17 
     | 
    
         
            +
                </div>
         
     | 
| 
      
 18 
     | 
    
         
            +
                <div class="ax-time-line-content"><ng-content></ng-content></div>
         
     | 
| 
      
 19 
     | 
    
         
            +
              `, isInline: true, styles: ["ax-time-line-item{padding-bottom:.75rem;display:block}ax-time-line-item .ax-time-line-header{display:flex;justify-content:space-between;align-items:center;padding:0 .75rem}ax-time-line-item .ax-time-line-header .ax-time-line-text{flex:1}ax-time-line-item .ax-time-line-content{padding:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
      
 21 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineItemComponent, decorators: [{
         
     | 
| 
      
 22 
     | 
    
         
            +
                        type: Component,
         
     | 
| 
      
 23 
     | 
    
         
            +
                        args: [{ selector: 'ax-time-line-item', template: `
         
     | 
| 
      
 24 
     | 
    
         
            +
                <div class="ax-time-line-header">
         
     | 
| 
      
 25 
     | 
    
         
            +
                  <span class="ax-time-line-text">{{ text() }}</span>
         
     | 
| 
      
 26 
     | 
    
         
            +
                  <span
         
     | 
| 
      
 27 
     | 
    
         
            +
                    class="ax-icon ax-icon-chevron-down ax-collapse-arrow"
         
     | 
| 
      
 28 
     | 
    
         
            +
                    [ngClass]="{ '-rotation-90': isCollapsed(), 'rotation-90': !isCollapsed() }"
         
     | 
| 
      
 29 
     | 
    
         
            +
                  ></span>
         
     | 
| 
      
 30 
     | 
    
         
            +
                </div>
         
     | 
| 
      
 31 
     | 
    
         
            +
                <div class="ax-time-line-content"><ng-content></ng-content></div>
         
     | 
| 
      
 32 
     | 
    
         
            +
              `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["ax-time-line-item{padding-bottom:.75rem;display:block}ax-time-line-item .ax-time-line-header{display:flex;justify-content:space-between;align-items:center;padding:0 .75rem}ax-time-line-item .ax-time-line-header .ax-time-line-text{flex:1}ax-time-line-item .ax-time-line-content{padding:.75rem}\n"] }]
         
     | 
| 
      
 33 
     | 
    
         
            +
                    }] });
         
     | 
| 
      
 34 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1saW5lLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RpbWUtbGluZS9zcmMvbGliL3RpbWUtbGluZS1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQWtCckcsTUFBTSxPQUFPLHVCQUF1QjtJQWhCcEM7UUFpQkUsU0FBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3Qjs4R0FKWSx1QkFBdUI7a0dBQXZCLHVCQUF1QiwwTEFkeEI7Ozs7Ozs7OztHQVNUOzsyRkFLVSx1QkFBdUI7a0JBaEJuQyxTQUFTOytCQUNFLG1CQUFtQixZQUNuQjs7Ozs7Ozs7O0dBU1QsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0LCBzaWduYWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXRpbWUtbGluZS1pdGVtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYXgtdGltZS1saW5lLWhlYWRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJheC10aW1lLWxpbmUtdGV4dFwiPnt7IHRleHQoKSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWNoZXZyb24tZG93biBheC1jb2xsYXBzZS1hcnJvd1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJy1yb3RhdGlvbi05MCc6IGlzQ29sbGFwc2VkKCksICdyb3RhdGlvbi05MCc6ICFpc0NvbGxhcHNlZCgpIH1cIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtdGltZS1saW5lLWNvbnRlbnRcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsOiAnLi90aW1lLWxpbmUtaXRlbS5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWFRpbWVMaW5lSXRlbUNvbXBvbmVudCB7XG4gIHRleHQgPSBpbnB1dCgnJyk7XG5cbiAgaXNDb2xsYXBzZWQgPSBzaWduYWwoZmFsc2UpO1xufVxuIl19
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { Component } from '@angular/core';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import * as i0 from "@angular/core";
         
     | 
| 
      
 3 
     | 
    
         
            +
            export class AXTimeLineComponent {
         
     | 
| 
      
 4 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
         
     | 
| 
      
 5 
     | 
    
         
            +
                static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXTimeLineComponent, selector: "ax-time-line", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""] }); }
         
     | 
| 
      
 6 
     | 
    
         
            +
            }
         
     | 
| 
      
 7 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineComponent, decorators: [{
         
     | 
| 
      
 8 
     | 
    
         
            +
                        type: Component,
         
     | 
| 
      
 9 
     | 
    
         
            +
                        args: [{ selector: 'ax-time-line', template: "<ng-content></ng-content>\n" }]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    }] });
         
     | 
| 
      
 11 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1saW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90aW1lLWxpbmUvc3JjL2xpYi90aW1lLWxpbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RpbWUtbGluZS9zcmMvbGliL3RpbWUtbGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU8xQyxNQUFNLE9BQU8sbUJBQW1COzhHQUFuQixtQkFBbUI7a0dBQW5CLG1CQUFtQixvRENQaEMsNkJBQ0E7OzJGRE1hLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXRpbWUtbGluZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lLWxpbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lLWxpbmUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhUaW1lTGluZUNvbXBvbmVudCB7fVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { CommonModule } from '@angular/common';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { NgModule } from '@angular/core';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { AXTimeLineItemComponent } from './time-line-item.component';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { AXTimeLineComponent } from './time-line.component';
         
     | 
| 
      
 5 
     | 
    
         
            +
            import * as i0 from "@angular/core";
         
     | 
| 
      
 6 
     | 
    
         
            +
            export class AXTimeLineModule {
         
     | 
| 
      
 7 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
         
     | 
| 
      
 8 
     | 
    
         
            +
                static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineModule, declarations: [AXTimeLineComponent, AXTimeLineItemComponent], imports: [CommonModule], exports: [AXTimeLineComponent, AXTimeLineItemComponent] }); }
         
     | 
| 
      
 9 
     | 
    
         
            +
                static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineModule, imports: [CommonModule] }); }
         
     | 
| 
      
 10 
     | 
    
         
            +
            }
         
     | 
| 
      
 11 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXTimeLineModule, decorators: [{
         
     | 
| 
      
 12 
     | 
    
         
            +
                        type: NgModule,
         
     | 
| 
      
 13 
     | 
    
         
            +
                        args: [{
         
     | 
| 
      
 14 
     | 
    
         
            +
                                declarations: [AXTimeLineComponent, AXTimeLineItemComponent],
         
     | 
| 
      
 15 
     | 
    
         
            +
                                imports: [CommonModule],
         
     | 
| 
      
 16 
     | 
    
         
            +
                                exports: [AXTimeLineComponent, AXTimeLineItemComponent],
         
     | 
| 
      
 17 
     | 
    
         
            +
                            }]
         
     | 
| 
      
 18 
     | 
    
         
            +
                    }] });
         
     | 
| 
      
 19 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1saW5lLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90aW1lLWxpbmUvc3JjL2xpYi90aW1lLWxpbmUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU81RCxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixpQkFKWixtQkFBbUIsRUFBRSx1QkFBdUIsYUFDakQsWUFBWSxhQUNaLG1CQUFtQixFQUFFLHVCQUF1QjsrR0FFM0MsZ0JBQWdCLFlBSGpCLFlBQVk7OzJGQUdYLGdCQUFnQjtrQkFMNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx1QkFBdUIsQ0FBQztvQkFDNUQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx1QkFBdUIsQ0FBQztpQkFDeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYVGltZUxpbmVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lLWxpbmUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhUaW1lTGluZUNvbXBvbmVudCB9IGZyb20gJy4vdGltZS1saW5lLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0FYVGltZUxpbmVDb21wb25lbnQsIEFYVGltZUxpbmVJdGVtQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtBWFRpbWVMaW5lQ29tcG9uZW50LCBBWFRpbWVMaW5lSXRlbUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYVGltZUxpbmVNb2R1bGUge31cbiJdfQ==
         
     | 
| 
         @@ -0,0 +1,96 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { AXLeafletService } from '@acorex/cdk/map';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import * as i0 from '@angular/core';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { input, output, viewChild, effect, Component, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { distinctUntilChanged } from 'rxjs/operators';
         
     | 
| 
      
 5 
     | 
    
         
            +
            import { CommonModule } from '@angular/common';
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            class AXMapComponent {
         
     | 
| 
      
 8 
     | 
    
         
            +
                ngAfterViewInit() {
         
     | 
| 
      
 9 
     | 
    
         
            +
                    this.leaflet = new AXLeafletService(this.mapContainer().nativeElement, { latitude: this.latitude(), longitude: this.longitude() }, this.zoomLevel());
         
     | 
| 
      
 10 
     | 
    
         
            +
                    if (this.markers()) {
         
     | 
| 
      
 11 
     | 
    
         
            +
                        this.leaflet.addMarker(this.markers());
         
     | 
| 
      
 12 
     | 
    
         
            +
                    }
         
     | 
| 
      
 13 
     | 
    
         
            +
                }
         
     | 
| 
      
 14 
     | 
    
         
            +
                addMarker(location) {
         
     | 
| 
      
 15 
     | 
    
         
            +
                    this.leaflet.addMarker(location);
         
     | 
| 
      
 16 
     | 
    
         
            +
                }
         
     | 
| 
      
 17 
     | 
    
         
            +
                flyTo(location, zoom, setMarker, duration) {
         
     | 
| 
      
 18 
     | 
    
         
            +
                    this.leaflet.flyTo(location, zoom, setMarker, duration);
         
     | 
| 
      
 19 
     | 
    
         
            +
                }
         
     | 
| 
      
 20 
     | 
    
         
            +
                constructor() {
         
     | 
| 
      
 21 
     | 
    
         
            +
                    this.zoomLevel = input(13);
         
     | 
| 
      
 22 
     | 
    
         
            +
                    this.latitude = input(51.505);
         
     | 
| 
      
 23 
     | 
    
         
            +
                    this.longitude = input(-0.09);
         
     | 
| 
      
 24 
     | 
    
         
            +
                    this.hasMarker = input(false);
         
     | 
| 
      
 25 
     | 
    
         
            +
                    this.markerPlace = input('topleft');
         
     | 
| 
      
 26 
     | 
    
         
            +
                    this.hasLocator = input(false);
         
     | 
| 
      
 27 
     | 
    
         
            +
                    this.locatePlace = input('bottomright');
         
     | 
| 
      
 28 
     | 
    
         
            +
                    this.markers = input(undefined);
         
     | 
| 
      
 29 
     | 
    
         
            +
                    this.onMarkerAdded = output();
         
     | 
| 
      
 30 
     | 
    
         
            +
                    this.onLocationFound = output();
         
     | 
| 
      
 31 
     | 
    
         
            +
                    this.mapContainer = viewChild('mapContainer');
         
     | 
| 
      
 32 
     | 
    
         
            +
                    effect(() => {
         
     | 
| 
      
 33 
     | 
    
         
            +
                        if (!this.hasLocator()) {
         
     | 
| 
      
 34 
     | 
    
         
            +
                            this.leaflet.removeLocateControl();
         
     | 
| 
      
 35 
     | 
    
         
            +
                        }
         
     | 
| 
      
 36 
     | 
    
         
            +
                        else {
         
     | 
| 
      
 37 
     | 
    
         
            +
                            this.leaflet.addLocateControl(this.locatePlace());
         
     | 
| 
      
 38 
     | 
    
         
            +
                            this.leaflet.onLocationFound
         
     | 
| 
      
 39 
     | 
    
         
            +
                                .pipe(distinctUntilChanged((prev, curr) => prev.latitude === curr.latitude && prev.longitude === curr.longitude))
         
     | 
| 
      
 40 
     | 
    
         
            +
                                .subscribe((location) => {
         
     | 
| 
      
 41 
     | 
    
         
            +
                                this.onLocationFound.emit(location);
         
     | 
| 
      
 42 
     | 
    
         
            +
                            });
         
     | 
| 
      
 43 
     | 
    
         
            +
                        }
         
     | 
| 
      
 44 
     | 
    
         
            +
                    });
         
     | 
| 
      
 45 
     | 
    
         
            +
                    effect(() => {
         
     | 
| 
      
 46 
     | 
    
         
            +
                        if (!this.hasMarker()) {
         
     | 
| 
      
 47 
     | 
    
         
            +
                            this.leaflet.removeDrawControl(this.markerPlace());
         
     | 
| 
      
 48 
     | 
    
         
            +
                        }
         
     | 
| 
      
 49 
     | 
    
         
            +
                        else {
         
     | 
| 
      
 50 
     | 
    
         
            +
                            this.leaflet.addDrawControl();
         
     | 
| 
      
 51 
     | 
    
         
            +
                            this.leaflet.onMarkerAdded.subscribe((location) => {
         
     | 
| 
      
 52 
     | 
    
         
            +
                                this.onMarkerAdded.emit(location);
         
     | 
| 
      
 53 
     | 
    
         
            +
                            });
         
     | 
| 
      
 54 
     | 
    
         
            +
                        }
         
     | 
| 
      
 55 
     | 
    
         
            +
                    });
         
     | 
| 
      
 56 
     | 
    
         
            +
                    effect(() => {
         
     | 
| 
      
 57 
     | 
    
         
            +
                        this.leaflet.setZoomLevel(this.zoomLevel());
         
     | 
| 
      
 58 
     | 
    
         
            +
                    }, {});
         
     | 
| 
      
 59 
     | 
    
         
            +
                    effect(() => {
         
     | 
| 
      
 60 
     | 
    
         
            +
                        this.leaflet.setCenter({
         
     | 
| 
      
 61 
     | 
    
         
            +
                            latitude: this.latitude(),
         
     | 
| 
      
 62 
     | 
    
         
            +
                            longitude: this.longitude(),
         
     | 
| 
      
 63 
     | 
    
         
            +
                        });
         
     | 
| 
      
 64 
     | 
    
         
            +
                    });
         
     | 
| 
      
 65 
     | 
    
         
            +
                }
         
     | 
| 
      
 66 
     | 
    
         
            +
                ngOnDestroy() {
         
     | 
| 
      
 67 
     | 
    
         
            +
                    this.leaflet.destroyMap();
         
     | 
| 
      
 68 
     | 
    
         
            +
                }
         
     | 
| 
      
 69 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
         
     | 
| 
      
 70 
     | 
    
         
            +
                static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: AXMapComponent, selector: "ax-map", inputs: { zoomLevel: { classPropertyName: "zoomLevel", publicName: "zoomLevel", isSignal: true, isRequired: false, transformFunction: null }, latitude: { classPropertyName: "latitude", publicName: "latitude", isSignal: true, isRequired: false, transformFunction: null }, longitude: { classPropertyName: "longitude", publicName: "longitude", isSignal: true, isRequired: false, transformFunction: null }, hasMarker: { classPropertyName: "hasMarker", publicName: "hasMarker", isSignal: true, isRequired: false, transformFunction: null }, markerPlace: { classPropertyName: "markerPlace", publicName: "markerPlace", isSignal: true, isRequired: false, transformFunction: null }, hasLocator: { classPropertyName: "hasLocator", publicName: "hasLocator", isSignal: true, isRequired: false, transformFunction: null }, locatePlace: { classPropertyName: "locatePlace", publicName: "locatePlace", isSignal: true, isRequired: false, transformFunction: null }, markers: { classPropertyName: "markers", publicName: "markers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMarkerAdded: "onMarkerAdded", onLocationFound: "onLocationFound" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #mapContainer class=\"ax-map-container\"></div>\n", styles: [".ax-map-container{height:100%;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
         
     | 
| 
      
 71 
     | 
    
         
            +
            }
         
     | 
| 
      
 72 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMapComponent, decorators: [{
         
     | 
| 
      
 73 
     | 
    
         
            +
                        type: Component,
         
     | 
| 
      
 74 
     | 
    
         
            +
                        args: [{ selector: 'ax-map', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div #mapContainer class=\"ax-map-container\"></div>\n", styles: [".ax-map-container{height:100%;width:100%}\n"] }]
         
     | 
| 
      
 75 
     | 
    
         
            +
                    }], ctorParameters: () => [] });
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            class AXMapModule {
         
     | 
| 
      
 78 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
         
     | 
| 
      
 79 
     | 
    
         
            +
                static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXMapModule, declarations: [AXMapComponent], imports: [CommonModule], exports: [AXMapComponent] }); }
         
     | 
| 
      
 80 
     | 
    
         
            +
                static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMapModule, imports: [CommonModule] }); }
         
     | 
| 
      
 81 
     | 
    
         
            +
            }
         
     | 
| 
      
 82 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMapModule, decorators: [{
         
     | 
| 
      
 83 
     | 
    
         
            +
                        type: NgModule,
         
     | 
| 
      
 84 
     | 
    
         
            +
                        args: [{
         
     | 
| 
      
 85 
     | 
    
         
            +
                                declarations: [AXMapComponent],
         
     | 
| 
      
 86 
     | 
    
         
            +
                                imports: [CommonModule],
         
     | 
| 
      
 87 
     | 
    
         
            +
                                exports: [AXMapComponent],
         
     | 
| 
      
 88 
     | 
    
         
            +
                            }]
         
     | 
| 
      
 89 
     | 
    
         
            +
                    }] });
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            /**
         
     | 
| 
      
 92 
     | 
    
         
            +
             * Generated bundle index. Do not edit.
         
     | 
| 
      
 93 
     | 
    
         
            +
             */
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            export { AXMapComponent, AXMapModule };
         
     | 
| 
      
 96 
     | 
    
         
            +
            //# sourceMappingURL=acorex-components-map.mjs.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"acorex-components-map.mjs","sources":["../../../../libs/components/map/src/lib/map.component.ts","../../../../libs/components/map/src/lib/map.component.html","../../../../libs/components/map/src/lib/map.module.ts","../../../../libs/components/map/src/acorex-components-map.ts"],"sourcesContent":["import { AXLeafletService, AXMapControlPlace, AXMapLocation } from '@acorex/cdk/map';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  effect,\n  ElementRef,\n  input,\n  OnDestroy,\n  output,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n@Component({\n  selector: 'ax-map',\n  templateUrl: './map.component.html',\n  styleUrls: ['./map.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AXMapComponent implements AfterViewInit, OnDestroy {\n  zoomLevel = input(13);\n  latitude = input(51.505);\n  longitude = input(-0.09);\n  hasMarker = input(false);\n  markerPlace = input<AXMapControlPlace>('topleft');\n  hasLocator = input(false);\n  locatePlace = input<AXMapControlPlace>('bottomright');\n  markers = input<AXMapLocation | AXMapLocation[] | undefined>(undefined);\n  onMarkerAdded = output<AXMapLocation>();\n  onLocationFound = output<AXMapLocation>();\n\n  private mapContainer = viewChild<ElementRef>('mapContainer');\n  private leaflet;\n\n  ngAfterViewInit() {\n    this.leaflet = new AXLeafletService(\n      this.mapContainer().nativeElement,\n      { latitude: this.latitude(), longitude: this.longitude() },\n      this.zoomLevel(),\n    );\n    if (this.markers()) {\n      this.leaflet.addMarker(this.markers());\n    }\n  }\n\n  addMarker(location: AXMapLocation) {\n    this.leaflet.addMarker(location);\n  }\n\n  flyTo(location: AXMapLocation, zoom?: number, setMarker?: boolean, duration?: number) {\n    this.leaflet.flyTo(location, zoom, setMarker, duration);\n  }\n\n  constructor() {\n    effect(() => {\n      if (!this.hasLocator()) {\n        this.leaflet.removeLocateControl();\n      } else {\n        this.leaflet.addLocateControl(this.locatePlace());\n        this.leaflet.onLocationFound\n          .pipe(\n            distinctUntilChanged(\n              (prev: AXMapLocation, curr: AXMapLocation) =>\n                prev.latitude === curr.latitude && prev.longitude === curr.longitude,\n            ),\n          )\n          .subscribe((location: AXMapLocation) => {\n            this.onLocationFound.emit(location);\n          });\n      }\n    });\n    effect(() => {\n      if (!this.hasMarker()) {\n        this.leaflet.removeDrawControl(this.markerPlace());\n      } else {\n        this.leaflet.addDrawControl();\n        this.leaflet.onMarkerAdded.subscribe((location: AXMapLocation) => {\n          this.onMarkerAdded.emit(location);\n        });\n      }\n    });\n    effect(() => {\n      this.leaflet.setZoomLevel(this.zoomLevel());\n    }, {});\n    effect(() => {\n      this.leaflet.setCenter({\n        latitude: this.latitude(),\n        longitude: this.longitude(),\n      } as AXMapLocation);\n    });\n  }\n  ngOnDestroy(): void {\n    this.leaflet.destroyMap();\n  }\n}\n","<div #mapContainer class=\"ax-map-container\"></div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXMapComponent } from './map.component';\n\n@NgModule({\n  declarations: [AXMapComponent],\n  imports: [CommonModule],\n  exports: [AXMapComponent],\n})\nexport class AXMapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
         
     |