{"version":3,"file":"moxa-formoxa-mx-usage-bar.mjs","sources":["../../../../libs/formoxa/mx-usage-bar/src/lib/components/mx-usage-bar.component.ts","../../../../libs/formoxa/mx-usage-bar/src/moxa-formoxa-mx-usage-bar.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MxUsageBarData } from '../models/mx-usage-bar.model';\n\n@Component({\n  selector: 'mx-usage-bar',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrls: ['./mx-usage-bar.component.scss'],\n  template: `\n    <div class=\"mx-usage-bar\">\n      @if (hasHeader()) {\n        <div class=\"mx-usage-bar__header\">\n          @if (title()) {\n            <div class=\"mx-usage-bar__title\">{{ title() }}</div>\n          }\n          @if (subtitle()) {\n            <span class=\"mx-usage-bar__subtitle\">{{ subtitle() }}</span>\n          }\n        </div>\n      }\n\n      @if (validatedUsageData().length > 0) {\n        <div class=\"mx-usage-bar__progress\" role=\"img\" [attr.aria-label]=\"progressAriaLabel()\">\n          @for (item of percentageData(); track $index; let isFirst = $first) {\n            @if (item.percentage > 0) {\n              <div\n                class=\"mx-usage-bar__segment\"\n                role=\"progressbar\"\n                [style.width.%]=\"item.percentage\"\n                [style.background-color]=\"getColor($index, item.color)\"\n                [attr.aria-valuenow]=\"item.usage\"\n                [attr.aria-valuemax]=\"totalUsage()\"\n                [attr.aria-label]=\"getSegmentAriaLabel(item)\"\n                [attr.aria-valuemin]=\"0\"\n              ></div>\n            }\n          }\n        </div>\n\n        <div class=\"mx-usage-bar__labels\">\n          @for (item of validatedUsageData(); track $index) {\n            <div class=\"mx-usage-bar__label-item\">\n              <span\n                class=\"mx-usage-bar__color-indicator\"\n                [style.background-color]=\"getColor($index, item.color)\"\n                [attr.aria-hidden]=\"true\"\n              >\n              </span>\n              <div>\n                <span class=\"mx-usage-bar__used-label\">\n                  {{ item.label }}\n                </span>\n                <span class=\"mx-usage-bar__usage-text\"> {{ item.usage }} {{ item.unit }} </span>\n              </div>\n            </div>\n          }\n        </div>\n      }\n    </div>\n  `\n})\nexport class MxUsageBarComponent {\n  title = input<string>('');\n  subtitle = input<string>('');\n  usageData = input<MxUsageBarData[]>([]);\n\n  readonly #defaultColors = ['var(--mx-usage-bar-primary)', 'var(--mx-usage-bar-secondary-container)'];\n\n  hasHeader = computed(() => Boolean(this.title() || this.subtitle()));\n\n  validatedUsageData = computed(() => {\n    const data = this.usageData();\n    if (!data) return [];\n    return data.filter((item) => item && typeof item.usage === 'number' && item.usage >= 0 && item.label && item.unit);\n  });\n\n  percentageData = computed(() => {\n    const data = this.validatedUsageData();\n    const total = data.reduce((sum, item) => sum + item.usage, 0);\n\n    return data.map((item) => ({\n      ...item,\n      percentage: total > 0 ? (item.usage / total) * 100 : 0\n    }));\n  });\n\n  progressAriaLabel = computed(() => {\n    const data = this.validatedUsageData();\n    const summary = data.map((item) => `${item.label}: ${item.usage} ${item.unit}`).join(', ');\n    return `Usage distribution: ${summary}`;\n  });\n\n  totalUsage = computed(() => {\n    return this.validatedUsageData().reduce((sum, item) => sum + item.usage, 0);\n  });\n\n  getColor(index: number, customColor?: string): string {\n    if (index < 0) {\n      return this.#defaultColors[0];\n    }\n    return customColor || this.#defaultColors[index % this.#defaultColors.length];\n  }\n\n  getSegmentAriaLabel(item: MxUsageBarData): string {\n    return `${item.label}: ${item.usage} ${item.unit}`;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}