{"version":3,"file":"progress.mjs","sources":["../src/progress/utils.ts","../src/progress/ProgressRoot.ts","../src/progress/ProgressIndicator.ts","../src/progress/ProgressIndicator.vue","../src/progress/ProgressRoot.vue"],"sourcesContent":["import { isNumber } from '../shared/index.ts'\n\nexport const DEFAULT_MAX = 100\n\nexport function defaultGetValueLabel(value: number, max: number) {\n  return `${Math.round((value / max) * 100)}%`\n}\n\ntype ProgressState = 'indeterminate' | 'complete' | 'loading'\n\nexport function getProgressState(value: number | undefined | null, maxValue: number): ProgressState {\n  return value == null ? 'indeterminate' : value === maxValue ? 'complete' : 'loading'\n}\n\nexport function isValidMaxNumber(max: unknown): max is number {\n  return (\n    isNumber(max)\n    && !Number.isNaN(max)\n    && max > 0\n  )\n}\n\nexport function isValidValueNumber(value: unknown, max: number): value is number {\n  return (\n    isNumber(value)\n    && !Number.isNaN(value)\n    && value <= max\n    && value >= 0\n  )\n}\n","import { computed, toValue } from 'vue'\nimport { createContext } from '../hooks/index.ts'\nimport { isNumber, mergePrimitiveAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { DEFAULT_MAX, defaultGetValueLabel, getProgressState } from './utils.ts'\n\nexport interface ProgressRootProps {\n  value?: number | undefined\n  max?: number\n  getValueLabel?: (value: number, max: number) => string\n}\n\nexport interface ProgressContext {\n  value?: () => number | undefined\n  max: (() => number) | number\n}\n\nexport const [provideProgressContext, useProgressContext] = createContext<ProgressContext>('Progress')\n\nexport interface UseProgressRootProps {\n  value?: () => number | undefined\n  max?: (() => number) | number\n  getValueLabel?: (value: number, max: number) => string\n}\n\nexport function useProgressRoot(props: UseProgressRootProps): RadixPrimitiveReturns {\n  const { max = DEFAULT_MAX, getValueLabel = defaultGetValueLabel } = props\n\n  const valueLabel = computed(() => {\n    const _value = props.value?.()\n    return isNumber(_value) ? getValueLabel(_value, toValue(max)) : undefined\n  })\n\n  provideProgressContext({\n    value: props.value,\n    max,\n  })\n\n  return {\n    attrs(extraAttrs) {\n      const _value = props.value?.()\n      const _max = toValue(max)\n\n      const attrs = {\n        'aria-valuemax': _max,\n        'aria-valuemin': 0,\n        'aria-valuenow': isNumber(_value) ? _value : undefined,\n        'aria-valuetext': valueLabel.value,\n        'role': 'progressbar',\n        'data-state': getProgressState(_value, _max),\n        'data-value': _value ?? undefined,\n        'data-max': _max,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","import { toValue } from 'vue'\nimport { mergePrimitiveAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useProgressContext } from './ProgressRoot.ts'\nimport { getProgressState } from './utils.ts'\n\nexport function useProgressIndicator(): RadixPrimitiveReturns {\n  const context = useProgressContext('ProgressIndicator')\n\n  return {\n    attrs(extraAttrs) {\n      const _value = context.value?.()\n      const _max = toValue(context.max)\n\n      const attrs = {\n        'data-state': getProgressState(_value, _max),\n        'data-value': _value ?? undefined,\n        'data-max': _max,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { useProgressIndicator } from './ProgressIndicator.ts'\n\ndefineOptions({\n  name: 'ProgressIndicator',\n  inheritAttrs: false,\n})\n\nconst progressIndicator = useProgressIndicator()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(progressIndicator.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, isNumber, normalizeAttrs } from '../shared/index.ts'\nimport { type ProgressRootProps, useProgressRoot } from './ProgressRoot.ts'\nimport { DEFAULT_MAX, defaultGetValueLabel, isValidMaxNumber, isValidValueNumber } from './utils.ts'\n\ndefineOptions({\n  name: 'ProgressRoot',\n  inheritAttrs: false,\n})\n\nconst props = defineProps({\n  value: {\n    type: [Number, undefined] as PropType<Required<ProgressRootProps>['value']>,\n    required: false,\n    validator(value, props) {\n      return isNumber(props.max) && isValidValueNumber(value, props.max)\n    },\n    default: undefined,\n  },\n  max: {\n    type: Number as PropType<Required<ProgressRootProps>['max']>,\n    required: false,\n    validator(value) {\n      return isValidMaxNumber(value)\n    },\n    default: DEFAULT_MAX,\n  },\n  getValueLabel: {\n    type: Function as PropType<Required<ProgressRootProps>['getValueLabel']>,\n    required: false,\n    default: defaultGetValueLabel,\n  },\n})\n\nconst progressRoot = useProgressRoot(convertPropsToHookProps(props, ['value', 'max']))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(progressRoot.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":[],"mappings":"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"}