{"version":3,"file":"fundamental-ngx-core-status-indicator.mjs","sources":["../../../../libs/core/status-indicator/status-indicator.component.ts","../../../../libs/core/status-indicator/status-indicator.component.html","../../../../libs/core/status-indicator/status-indicator.module.ts","../../../../libs/core/status-indicator/fundamental-ngx-core-status-indicator.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    ElementRef,\n    inject,\n    input,\n    signal,\n    ViewEncapsulation\n} from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/cdk/utils';\n\nexport type StatusIndicatorSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type StatusIndicatorColor = 'negative' | 'critical' | 'positive';\nexport type LablePosition = 'left' | 'right' | 'top' | 'bottom';\nexport type FillingType = 'radial' | 'angled' | 'linearup' | 'lineardown' | 'linearleft';\nexport type FillingDirection = 'clockwise' | 'counterclockwise';\n\nlet statusIndicatorId = 0;\n\nexport class Point {\n    /** @hidden */\n    constructor(\n        public x: number,\n        public y: number\n    ) {}\n}\n\n@Component({\n    selector: 'fd-status-indicator',\n    templateUrl: './status-indicator.component.html',\n    styleUrl: './status-indicator.component.scss',\n    host: {\n        '[class]': '_cssClass()',\n        '[attr.aria-label]': 'ariaLabel()',\n        '[attr.aria-roledescription]': 'ariaRoleDescription()',\n        '[attr.focusable]': 'focusable()',\n        '[attr.title]': 'title()',\n        '[attr.role]': 'role()',\n        '[attr.aria-valuetext]': 'ariaValueText()',\n        '[attr.aria-valuenow]': 'fillPercentage() || 0',\n        '[attr.aria-valuemin]': '0',\n        '[attr.aria-valuemax]': '100',\n        '[attr.tabindex]': 'focusable() ? 0 : -1'\n    },\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [NgTemplateOutlet]\n})\nexport class StatusIndicatorComponent implements AfterViewInit, HasElementRef {\n    /**\n     * value id defines the id of the object.\n     */\n    readonly id = input('fd-status-indicator-' + ++statusIndicatorId);\n\n    /**\n     * defines the size of the status indicator.\n     * Can be one of the following: 'sm' | 'md' | 'lg' | 'xl'\n     * Default size is Medium(md).\n     */\n    readonly size = input<StatusIndicatorSize>('md');\n\n    /**\n     * The status represented by the Status Indicator.\n     * Can be one of the following: 'negative' | 'critical' | 'informative'\n     * For default Object Status omit this property\n     */\n    readonly status = input<StatusIndicatorColor>();\n\n    /** Define the text content of the Status indicator*/\n    readonly statusLabel = input<string>();\n\n    /**\n     * positioning of the status indicator image within the defined height and width .\n     */\n    readonly viewBox = input<string>();\n\n    /**\n     * boolean value to be marked as clickable\n     */\n    readonly clickable = input(false);\n\n    /**\n     * defines the size of the status indicator.\n     * Can be one of the following: 'sm' | 'md' | 'lg' | 'xl'\n     */\n    readonly labelSize = input<StatusIndicatorSize>('sm');\n\n    /** Aria label for the Status Indicator. */\n    readonly ariaLabel = input<string | null | undefined>();\n\n    /** Aria defines role description for the Status Indicator. */\n    readonly ariaRoleDescription = input<string | null | undefined>();\n\n    /** Aria Focusable for the Status Indicator. */\n    readonly focusable = input(false, { transform: booleanAttribute });\n\n    /** Aria Role for the Status Indicator. */\n    readonly role = input<string | null | undefined>();\n\n    /** Aria Value Text for the Status Indicator. */\n    readonly ariaValueText = input<string | null | undefined>();\n\n    /** Aria title for the status indicator. */\n    readonly title = input<string | null | undefined>();\n\n    /** defines the label position the value can be 'left' | 'right' | 'top' | 'bottom' */\n    readonly labelPosition = input<LablePosition>();\n\n    /** Path for the status indicator */\n    readonly path = input<string[]>();\n\n    /**\n     * Offset value to be filled under the give percentatge value.\n     */\n    readonly fillPercentage = input<number>();\n\n    /**\n     * value to define fill direction\n     */\n    readonly fillDirection = input<FillingDirection>('clockwise');\n\n    /**\n     * FillingType to represent the fill pattern of the component\n     */\n    readonly fillingType = input<FillingType>('lineardown');\n\n    /** represent the degree of angle to project the filling of the component */\n    readonly angle = input<number>();\n\n    /** @hidden */\n    readonly elementRef = inject(ElementRef<HTMLElement>);\n\n    /** @hidden */\n    protected readonly binaryString = signal<string>('');\n    /** @hidden */\n    protected readonly x1 = signal<string>('');\n    /** @hidden */\n    protected readonly y1 = signal<string>('');\n    /** @hidden */\n    protected readonly x2 = signal<string>('');\n    /** @hidden */\n    protected readonly y2 = signal<string>('');\n    /** @hidden */\n    protected readonly pointsArray = signal<string[]>([]);\n\n    /** @hidden Computed fill calculator based on percentage and path length */\n    protected readonly fillCalculator = computed(() => {\n        const percentage = this.fillPercentage();\n        const pathLength = this.path()?.length || 0;\n\n        if (percentage === undefined || percentage < 0) {\n            return 0;\n        }\n        return (percentage * pathLength) / 100;\n    });\n\n    /** @hidden Computed CSS class */\n    protected readonly _cssClass = computed(() =>\n        [\n            'fd-status-indicator',\n            this.size() ? `fd-status-indicator--${this.size()}` : '',\n            this.status() ? `fd-status-indicator--${this.status()}` : '',\n            this.clickable() ? 'fd-status-indicator--link' : '',\n            this.labelPosition() === 'right' || this.labelPosition() === 'left'\n                ? 'fd-status-indicator--horizontal-label'\n                : ''\n        ]\n            .filter(Boolean)\n            .join(' ')\n    );\n\n    protected readonly labelCssClass = computed(() =>\n        [\n            'fd-status-indicator__label',\n            this.labelSize() ? `fd-status-indicator__label--${this.labelSize()}` : '',\n            this.labelPosition() ? `fd-status-indicator__label--${this.labelPosition()}` : ''\n        ]\n            .filter(Boolean)\n            .join(' ')\n    );\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._angleCalculation();\n    }\n\n    /** @hidden */\n    private _angleCalculation(): void {\n        let sPointsAttributeValue: Array<Point>;\n        let polygonPoints: string;\n        const fillType = this.fillingType();\n\n        switch (fillType) {\n            case 'angled': {\n                const angleValue = this.angle();\n                if (angleValue !== undefined) {\n                    const binaryStr = this._convertAngleToBinary(angleValue);\n                    this.binaryString.set(binaryStr);\n                    this._assignBinaryValue(binaryStr);\n                }\n                break;\n            }\n            case 'radial': {\n                const tempPercent = this.fillCalculator() % 1;\n                const fillNumber = Number(tempPercent.toFixed(2));\n                const element = this.elementRef.nativeElement.querySelectorAll('svg');\n                const points: string[] = [];\n\n                for (let i = 1; i < element.length; i++) {\n                    sPointsAttributeValue = this._getPolygonPointsForCircularFilling(\n                        fillNumber * 100,\n                        element[i].getBBox()\n                    );\n                    polygonPoints = sPointsAttributeValue.reduce((acc, item) => acc + item.x + ',' + item.y + ' ', '');\n                    points.push(polygonPoints);\n                }\n                this.pointsArray.set(points);\n                break;\n            }\n            case 'linearup': {\n                const binaryStr = this._convertAngleToBinary(90);\n                this.binaryString.set(binaryStr);\n                this._assignBinaryValue(binaryStr);\n                break;\n            }\n            case 'lineardown': {\n                const binaryStr = this._convertAngleToBinary(270);\n                this.binaryString.set(binaryStr);\n                this._assignBinaryValue(binaryStr);\n                break;\n            }\n            case 'linearleft': {\n                const binaryStr = this._convertAngleToBinary(180);\n                this.binaryString.set(binaryStr);\n                this._assignBinaryValue(binaryStr);\n                break;\n            }\n            default:\n                throw new Error(`fdStatusIndicator: No fillType found for ${fillType}.`);\n        }\n    }\n\n    /** @hidden */\n    private _convertAngleToBinary(angle: number): string {\n        if (angle > 0 && angle <= 45) {\n            return '1,0,0,1';\n        } else if (angle >= 45 && angle < 90) {\n            return '0,0,0,1';\n        } else if (angle >= 90 && angle < 135) {\n            return '0,0,0,1';\n        } else if (angle >= 135 && angle < 180) {\n            return '0,0,1,1';\n        } else if (angle >= 180 && angle < 225) {\n            return '0,0,1,0';\n        } else if (angle >= 225 && angle < 270) {\n            return '0,1,1,0';\n        } else if (angle >= 270 && angle < 315) {\n            return '0,1,0,0';\n        } else if (angle >= 315 && angle < 360) {\n            return '1,1,0,0';\n        } else if (angle === 0 || angle === 360) {\n            return '1,0,0,0';\n        } else {\n            return 'invalid';\n        }\n    }\n\n    /** @hidden */\n    private _assignBinaryValue(binaryString: string): void {\n        const binaryValue = binaryString.split(',');\n        this.x1.set(binaryValue[0]);\n        this.y1.set(binaryValue[1]);\n        this.x2.set(binaryValue[2]);\n        this.y2.set(binaryValue[3]);\n    }\n\n    /** @hidden */\n    private _getPolygonPointsForCircularFilling(value: number, boundingBoxSvg: DOMRect): Array<Point> {\n        const angle = 3.6 * value;\n        const points: Point[] = [];\n        let xDifferenceFromBoundaryCentre: number;\n        let yDifferenceFromBoundaryCentre: number;\n        let polygonPoint: Point;\n\n        // starts at 12, the algorithm computes the coordination for clockwise direction only\n        // counter clockwise direction is managed by symmetry\n        const oStartPoint = new Point(boundingBoxSvg.x + boundingBoxSvg.width / 2, boundingBoxSvg.y);\n        const oCentrePoint = new Point(\n            boundingBoxSvg.x + boundingBoxSvg.width / 2,\n            boundingBoxSvg.y + boundingBoxSvg.height / 2\n        );\n\n        // Reflects x coordinate by centre point for Counter Clockwise type\n        const _adjustIfCounterClockwise = (oPoint: Point): Point => {\n            const res = Object.assign({}, oPoint);\n\n            if (this.fillDirection() === 'counterclockwise') {\n                const iXDistanceFromCentre = oPoint.x - oCentrePoint.x;\n                res.x = oCentrePoint.x - iXDistanceFromCentre;\n            }\n\n            return res;\n        };\n\n        // Boundary centre is given by angle distance from the beginning (0°). The returned difference is related\n        // to x or y coordinate depending on boundary centre angle (e.g. 0° -> x, 90° -> y, 180° -> x  270° -> y).\n        // Boundary length is length of the corresponding side of bounding box (width for x, height for y).\n        const computeDifferenceFromBoundaryCentre = (\n            inAngle: number,\n            iBoundaryCentreAngle: number,\n            iBoundaryLength: number\n        ): number => {\n            const tan = Math.tan(((iBoundaryCentreAngle - inAngle) * Math.PI) / 180);\n\n            return (tan * iBoundaryLength) / 2;\n        };\n\n        points.push(oStartPoint);\n\n        if (0 < angle && angle < 45) {\n            xDifferenceFromBoundaryCentre = computeDifferenceFromBoundaryCentre(angle, 0, boundingBoxSvg.height);\n            polygonPoint = new Point(oStartPoint.x - xDifferenceFromBoundaryCentre, oStartPoint.y);\n            points.push(_adjustIfCounterClockwise(polygonPoint));\n        }\n\n        if (45 <= angle) {\n            points.push(\n                _adjustIfCounterClockwise(new Point(boundingBoxSvg.x + boundingBoxSvg.width, boundingBoxSvg.y))\n            );\n        }\n\n        if (45 < angle && angle < 135) {\n            yDifferenceFromBoundaryCentre = computeDifferenceFromBoundaryCentre(angle, 90, boundingBoxSvg.width);\n            polygonPoint = new Point(\n                boundingBoxSvg.x + boundingBoxSvg.width,\n                boundingBoxSvg.y + boundingBoxSvg.height / 2 - yDifferenceFromBoundaryCentre\n            );\n            points.push(_adjustIfCounterClockwise(polygonPoint));\n        }\n\n        if (135 <= angle) {\n            points.push(\n                _adjustIfCounterClockwise(\n                    new Point(boundingBoxSvg.x + boundingBoxSvg.width, boundingBoxSvg.y + boundingBoxSvg.height)\n                )\n            );\n        }\n\n        if (135 < angle && angle < 225) {\n            xDifferenceFromBoundaryCentre = computeDifferenceFromBoundaryCentre(angle, 180, boundingBoxSvg.height);\n            polygonPoint = new Point(\n                boundingBoxSvg.x + boundingBoxSvg.width / 2 + xDifferenceFromBoundaryCentre,\n                boundingBoxSvg.y + boundingBoxSvg.height\n            );\n            points.push(_adjustIfCounterClockwise(polygonPoint));\n        }\n\n        if (225 <= angle) {\n            points.push(\n                _adjustIfCounterClockwise(new Point(boundingBoxSvg.x, boundingBoxSvg.y + boundingBoxSvg.height))\n            );\n        }\n\n        if (225 < angle && angle < 315) {\n            yDifferenceFromBoundaryCentre = computeDifferenceFromBoundaryCentre(angle, 270, boundingBoxSvg.width);\n            polygonPoint = new Point(\n                boundingBoxSvg.x,\n                boundingBoxSvg.y + boundingBoxSvg.height / 2 + yDifferenceFromBoundaryCentre\n            );\n            points.push(_adjustIfCounterClockwise(polygonPoint));\n        }\n\n        if (315 <= angle) {\n            points.push(_adjustIfCounterClockwise(new Point(boundingBoxSvg.x, boundingBoxSvg.y)));\n        }\n\n        if (315 < angle && angle <= 360) {\n            xDifferenceFromBoundaryCentre = computeDifferenceFromBoundaryCentre(angle, 360, boundingBoxSvg.height);\n            polygonPoint = new Point(\n                boundingBoxSvg.x + boundingBoxSvg.width / 2 - xDifferenceFromBoundaryCentre,\n                boundingBoxSvg.y\n            );\n            points.push(_adjustIfCounterClockwise(polygonPoint));\n        }\n\n        points.push(oCentrePoint);\n\n        return points;\n    }\n}\n","@if (labelPosition() === 'left' || labelPosition() === 'top') {\n    <span [class]=\"labelCssClass()\">{{ statusLabel() }} </span>\n}\n<svg\n    [attr.id]=\"id()\"\n    data-sap-ui=\"__shape0-__box21-24\"\n    version=\"1.1\"\n    [attr.viewBox]=\"viewBox()\"\n    xlmns=\"http://www.w3.org/2000/svg\"\n    preserveAspectRatio=\"xMidYMid meet\"\n    class=\"fd-status-indicator__svg\"\n>\n    <ng-container [ngTemplateOutlet]=\"svgTemplate\"></ng-container>\n</svg>\n@if (labelPosition() === 'right' || labelPosition() === 'bottom') {\n    <span [class]=\"labelCssClass()\">{{ statusLabel() }} </span>\n}\n<ng-template #svgTemplate>\n    @for (path of path(); track path; let i = $index) {\n        <svg\n            xlmns=\"http://www.w3.org/2000/svg\"\n            preserveAspectRatio=\"xMidYMid meet\"\n            overflow=\"visible\"\n            [attr.id]=\"id() + i\"\n            data-sap-ui=\"id\"\n        >\n            <defs>\n                @if (!(fillCalculator() - i > 0 && fillCalculator() - i < 1) || fillingType() !== 'radial') {\n                    <linearGradient\n                        id=\"{{ id() + i }}-gradient\"\n                        [attr.x1]=\"x1()\"\n                        [attr.y1]=\"y1()\"\n                        [attr.x2]=\"x2()\"\n                        [attr.y2]=\"y2()\"\n                    >\n                        <stop [attr.offset]=\"fillCalculator() - i\" stop-color=\"white\">\n                            <animate\n                                attributeName=\"offset\"\n                                attr.values=\"0, {{ fillCalculator() - i }}\"\n                                repeatCount=\"1\"\n                                dur=\"1s\"\n                                begin=\"0s\"\n                            />\n                        </stop>\n                        <stop [attr.offset]=\"fillCalculator() - i\" stop-color=\"transparent\">\n                            <animate\n                                attributeName=\"offset\"\n                                attr.values=\"0, {{ fillCalculator() - i }}\"\n                                repeatCount=\"1\"\n                                dur=\"1s\"\n                                begin=\"0s\"\n                            />\n                        </stop>\n                    </linearGradient>\n                }\n                <mask #maskTemplate id=\"{{ id() + i }}-mask\">\n                    @if (!(fillCalculator() - i > 0 && fillCalculator() - i < 1) || fillingType() !== 'radial') {\n                        <path\n                            id=\"{{ id() + i }}-mask-shape\"\n                            [attr.d]=\"path\"\n                            stroke-width=\"0\"\n                            stroke=\"white\"\n                            attr.fill=\"url(#{{ id() + i }}-gradient)\"\n                        ></path>\n                    }\n                    @if (fillingType() === 'radial' && fillCalculator() - i > 0 && fillCalculator() - i < 1) {\n                        <polygon id=\"{{ id() + i }}-mask-shape\" fill=\"white\" [attr.points]=\"pointsArray()[i]\"></polygon>\n                    }\n                </mask>\n            </defs>\n            <path\n                id=\"{{ id() + i }}-shape\"\n                [attr.d]=\"path\"\n                stroke-width=\"0\"\n                stroke=\"#89919A\"\n                attr.mask=\"url(#{{ id() + i }}-mask)\"\n            ></path>\n            <path\n                id=\"{{ id() + i }}-shape-border\"\n                [attr.d]=\"path\"\n                stroke-width=\"0.25\"\n                stroke=\"#89919A\"\n                fill=\"transparent\"\n            ></path>\n        </svg>\n    }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { StatusIndicatorComponent } from './status-indicator.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [StatusIndicatorComponent],\n    exports: [StatusIndicatorComponent]\n})\nexport class StatusIndicatorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}