{"version":3,"file":"BqProgress--_TP-X7E.cjs","names":[],"sources":["../src/components/progress/BqProgress.ts"],"sourcesContent":["/**\r\n * Progress bar component.\r\n * @element bq-progress\r\n * @prop {number}  value         - Current value (0-max)\r\n * @prop {number}  max           - Maximum value\r\n * @prop {string}  size          - sm | md | lg\r\n * @prop {string}  variant       - primary | success | danger | warning\r\n * @prop {boolean} indeterminate - Indeterminate/loading state\r\n * @prop {string}  label         - Accessible label\r\n */\r\nimport type { ComponentDefinition } from '@bquery/bquery/component';\r\nimport { component, html } from '@bquery/bquery/component';\r\nimport { escapeHtml } from '@bquery/bquery/security';\r\nimport { t } from '../../i18n/index.js';\r\nimport { getBaseStyles } from '../../utils/styles.js';\r\n\r\ntype BqProgressProps = {\r\n  value: number;\r\n  max: number;\r\n  size: string;\r\n  variant: string;\r\n  indeterminate: boolean;\r\n  label: string;\r\n};\r\n\r\nconst definition: ComponentDefinition<BqProgressProps> = {\r\n  props: {\r\n    value: { type: Number, default: 0 },\r\n    max: { type: Number, default: 100 },\r\n    size: { type: String, default: 'md' },\r\n    variant: { type: String, default: 'primary' },\r\n    indeterminate: { type: Boolean, default: false },\r\n    label: { type: String, default: '' },\r\n  },\r\n  sanitize: {\r\n    allowAttributes: ['style'],\r\n  },\r\n  styles: `\r\n    ${getBaseStyles()}\r\n    :host { display: block; }\r\n    .track {\r\n      background: var(--bq-bg-emphasis,#e2e8f0); border-radius: var(--bq-radius-full,9999px);\r\n      overflow: hidden; width: 100%;\r\n    }\r\n    .track[data-size=\"sm\"] { height: 0.375rem; }\r\n    .track[data-size=\"md\"] { height: 0.625rem; }\r\n    .track[data-size=\"lg\"] { height: 1rem; }\r\n    .bar {\r\n      height: 100%; border-radius: inherit;\r\n      transition: width var(--bq-duration-normal) var(--bq-easing-standard);\r\n    }\r\n    .bar[data-variant=\"primary\"] { background: var(--bq-color-primary-600,#2563eb); }\r\n    .bar[data-variant=\"success\"] { background: var(--bq-color-success-600,#16a34a); }\r\n    .bar[data-variant=\"danger\"]  { background: var(--bq-color-danger-600,#dc2626); }\r\n    .bar[data-variant=\"warning\"] { background: var(--bq-color-warning-600,#d97706); }\r\n    :host([indeterminate]) .bar {\r\n      width: 40% !important;\r\n      animation: indeterminate 1.4s linear infinite;\r\n      will-change: transform;\r\n    }\r\n    @keyframes indeterminate { 0% { transform: translateX(-150%); } 100% { transform: translateX(350%); } }\r\n    .label { font-size: var(--bq-font-size-sm,0.875rem); color: var(--bq-text-muted,#475569); margin-bottom: 0.375rem; font-family: var(--bq-font-family-sans); }\r\n    .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }\r\n    @media (prefers-reduced-motion: reduce) {\r\n      .bar { transition: none; }\r\n      :host([indeterminate]) .bar { animation: none; width: 40% !important; opacity: 0.7; }\r\n    }\r\n  `,\r\n  render({ props }) {\r\n    const max = props.max > 0 ? props.max : 100;\r\n    const value = Math.min(max, Math.max(0, props.value));\r\n    const pct = props.indeterminate\r\n      ? 0\r\n      : Math.min(100, Math.max(0, (value / max) * 100));\r\n    const accessibleLabel =\r\n      props.label ||\r\n      (props.indeterminate ? t('common.loading') : t('progress.ariaLabel'));\r\n    const valueText = props.indeterminate\r\n      ? t('common.loading')\r\n      : `${Math.round(pct)}%`;\r\n    return html`\r\n      ${props.label\r\n        ? `<div class=\"label\" part=\"label\">${escapeHtml(props.label)}</div>`\r\n        : ''}\r\n      <div\r\n        part=\"track\"\r\n        class=\"track\"\r\n        data-size=\"${escapeHtml(props.size)}\"\r\n        role=\"progressbar\"\r\n        ${props.indeterminate\r\n          ? `aria-busy=\"true\" aria-valuetext=\"${escapeHtml(valueText)}\"`\r\n          : `aria-valuenow=\"${String(value)}\" aria-valuemin=\"0\" aria-valuemax=\"${String(max)}\" aria-valuetext=\"${escapeHtml(valueText)}\"`}\r\n        aria-label=\"${escapeHtml(accessibleLabel)}\"\r\n      >\r\n        <div\r\n          part=\"bar\"\r\n          class=\"bar\"\r\n          data-variant=\"${escapeHtml(props.variant)}\"\r\n          data-value=\"${String(Math.round(pct))}\"\r\n          style=\"width:${String(Math.round(pct))}%\"\r\n        ></div>\r\n      </div>\r\n      <span class=\"sr-only\"\r\n        >${escapeHtml(\r\n          props.indeterminate\r\n            ? accessibleLabel\r\n            : props.label\r\n              ? `${props.label}: ${Math.round(pct)}%`\r\n              : `${Math.round(pct)}%`\r\n        )}</span\r\n      >\r\n    `;\r\n  },\r\n};\r\n\r\ncomponent<BqProgressProps>('bq-progress', definition);\r\n"],"mappings":";;;;;;AAmHA,2BAAA,EAA2B,eAAe;CAzFxC,OAAO;EACL,OAAO;GAAE,MAAM;GAAQ,SAAS;GAAG;EACnC,KAAK;GAAE,MAAM;GAAQ,SAAS;GAAK;EACnC,MAAM;GAAE,MAAM;GAAQ,SAAS;GAAM;EACrC,SAAS;GAAE,MAAM;GAAQ,SAAS;GAAW;EAC7C,eAAe;GAAE,MAAM;GAAS,SAAS;GAAO;EAChD,OAAO;GAAE,MAAM;GAAQ,SAAS;GAAI;EACrC;CACD,UAAU,EACR,iBAAiB,CAAC,QAAQ,EAC3B;CACD,QAAQ;MACJ,eAAA,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BpB,OAAO,EAAE,SAAS;EAChB,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,MAAM;EACxC,MAAM,QAAQ,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,MAAM,MAAM,CAAC;EACrD,MAAM,MAAM,MAAM,gBACd,IACA,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,QAAQ,MAAO,IAAI,CAAC;EACnD,MAAM,kBACJ,MAAM,UACL,MAAM,gBAAgB,aAAA,EAAE,iBAAiB,GAAG,aAAA,EAAE,qBAAqB;EACtE,MAAM,YAAY,MAAM,gBACpB,aAAA,EAAE,iBAAiB,GACnB,GAAG,KAAK,MAAM,IAAI,CAAC;AACvB,SAAO,2BAAA,CAAI;QACP,MAAM,QACJ,mCAAmC,2BAAA,GAAW,MAAM,MAAM,CAAC,UAC3D,GAAG;;;;qBAIQ,2BAAA,GAAW,MAAM,KAAK,CAAC;;UAElC,MAAM,gBACJ,oCAAoC,2BAAA,GAAW,UAAU,CAAC,KAC1D,kBAAkB,OAAO,MAAM,CAAC,qCAAqC,OAAO,IAAI,CAAC,oBAAoB,2BAAA,GAAW,UAAU,CAAC,GAAG;sBACpH,2BAAA,GAAW,gBAAgB,CAAC;;;;;0BAKxB,2BAAA,GAAW,MAAM,QAAQ,CAAC;wBAC5B,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC;yBACvB,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC;;;;WAItC,2BAAA,GACD,MAAM,gBACF,kBACA,MAAM,QACJ,GAAG,MAAM,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC,KACnC,GAAG,KAAK,MAAM,IAAI,CAAC,GAC1B,CAAC;;;;CAMgC,CAAW"}