{"version":3,"file":"BFormRating-Bb_ACp-9.mjs","names":[],"sources":["../src/components/BFormRating/BFormRating.vue","../src/components/BFormRating/BFormRating.vue"],"sourcesContent":["<template>\n  <output\n    :id=\"computedId\"\n    :class=\"computedClasses\"\n    :dir=\"computedRtl ? 'rtl' : 'ltr'\"\n    :form=\"props.form ? props.form : undefined\"\n    role=\"slider\"\n    :aria-valuemin=\"0\"\n    :aria-valuemax=\"clampedStars\"\n    :aria-valuenow=\"displayValue\"\n    :aria-valuetext=\"`${displayValue} of ${clampedStars}`\"\n    :aria-disabled=\"props.disabled ? true : undefined\"\n    :aria-readonly=\"props.readonly ? true : undefined\"\n    :tabindex=\"props.disabled ? undefined : '0'\"\n    @keydown=\"onKeydown\"\n  >\n    <input\n      v-if=\"props.name && !props.disabled\"\n      key=\"hidden\"\n      type=\"hidden\"\n      :name=\"props.name\"\n      :form=\"props.form\"\n      :value=\"modelValue\"\n    />\n    <span\n      v-if=\"props.showClear && !props.readonly && !props.disabled\"\n      class=\"clear-button-spacing\"\n      @click=\"clearRating\"\n    >\n      <slot name=\"icon-clear\">\n        <svg\n          viewBox=\"0 0 16 16\"\n          role=\"img\"\n          aria-label=\"x\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          class=\"clear-icon\"\n        >\n          <g>\n            <path\n              d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708\"\n            />\n          </g>\n        </svg>\n      </slot>\n    </span>\n    <span\n      v-for=\"(starIndex, index) in clampedStars\"\n      :key=\"starIndex\"\n      class=\"star\"\n      @click=\"selectRating(starIndex)\"\n    >\n      <slot :star-index=\"starIndex\" :is-filled=\"isIconFull(index)\" :is-half=\"isIconHalf(index)\">\n        <span class=\"b-form-rating-star\">\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            :width=\"computedSize\"\n            :height=\"computedSize\"\n            fill=\"currentColor\"\n            :class=\"[iconColors[index]?.class]\"\n            :style=\"iconColors[index]?.style\"\n            class=\"star-spacing\"\n            viewBox=\"0 0 16 16\"\n          >\n            <path\n              v-if=\"isIconFull(index)\"\n              d=\"M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z\"\n            />\n            <path\n              v-else-if=\"isIconHalf(index)\"\n              d=\"M5.354 5.119 7.538.792A.52.52 0 0 1 8 .5c.183 0 .366.097.465.292l2.184 4.327 4.898.696A.54.54 0 0 1 16 6.32a.55.55 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.5.5 0 0 1-.146.05c-.342.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.172-.403.6.6 0 0 1 .085-.302.51.51 0 0 1 .37-.245zM8 12.027a.5.5 0 0 1 .232.056l3.686 1.894-.694-3.957a.56.56 0 0 1 .162-.505l2.907-2.77-4.052-.576a.53.53 0 0 1-.393-.288L8.001 2.223 8 2.226z\"\n            />\n            <path\n              v-else\n              d=\"M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.522 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z\"\n            />\n          </svg>\n        </span>\n      </slot>\n    </span>\n\n    <span\n      v-if=\"props.showValue || props.showValueMax\"\n      :style=\"{fontSize: computedSize}\"\n      class=\"rating-value-text\"\n    >\n      {{ displayValueText }}\n    </span>\n  </output>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {BFormRatingProps, BFormRatingSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormRatingProps, 'modelValue'>>(), {\n  color: '',\n  id: undefined,\n  inline: false,\n  locale: undefined,\n  noBorder: false,\n  precision: 0,\n  readonly: false,\n  disabled: false,\n  form: undefined,\n  name: undefined,\n  showClear: false,\n  showValue: false,\n  showValueMax: false,\n  size: '1rem',\n  stars: 5,\n  variant: undefined,\n})\nconst props = useDefaults(_props, 'BFormRating')\ndefineSlots<BFormRatingSlots>()\n\nconst modelValue = defineModel<Exclude<BFormRatingProps['modelValue'], undefined>>({default: 0})\n\nconst computedId = useId(() => props.id, 'form-rating')\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n  const loc = (props.locale ?? globalLocale?.value) || undefined\n  const nf = new Intl.NumberFormat(loc)\n  return nf.resolvedOptions().locale\n})\n\nconst computedRtl = computed(() => {\n  const locale = computedLocale.value\n  try {\n    const localeObj = new Intl.Locale(locale)\n    const {textInfo} = localeObj as Intl.Locale & {textInfo?: {direction: string}}\n    if (textInfo) {\n      return textInfo.direction === 'rtl'\n    }\n  } catch {\n    // Fallback\n  }\n  return isRtl?.value ?? false\n})\n\nconst computedClasses = computed(() => ({\n  'form-control': true,\n  'is-readonly': props.readonly,\n  'is-disabled': props.disabled,\n  'no-border': props.noBorder,\n  'b-form-rating': true,\n  'd-inline-flex': props.inline,\n}))\n\nfunction isIconFull(index: number): boolean {\n  return displayValue.value - index >= 1\n}\n\nfunction isIconHalf(index: number): boolean {\n  const diff = displayValue.value - index\n  return diff >= 0.5 && diff < 1\n}\n\nconst hoverValue = ref<number | null>(null)\n\nconst displayValue = computed(() =>\n  hoverValue.value !== null ? hoverValue.value : modelValue.value\n)\n\n// Set the minimum amount of star can be render to 3\nconst clampedStars = computed(() => Math.max(3, props.stars))\n\nconst computedSize = computed(() => {\n  if (props.size === 'sm') return '.875rem'\n  if (props.size === 'lg') return '1.25rem'\n  return props.size\n})\n\nconst computedFormatter = computed(\n  () =>\n    new Intl.NumberFormat(computedLocale.value, {\n      style: 'decimal',\n      useGrouping: false,\n      minimumFractionDigits: props.precision > 0 ? props.precision : 0,\n      maximumFractionDigits: props.precision > 0 ? props.precision : 0,\n      notation: 'standard',\n    })\n)\n\nconst displayValueText = computed(() => {\n  const val = props.precision > 0 ? roundedValue.value : displayValue.value\n  const formattedValue = computedFormatter.value.format(val)\n  if (props.showValueMax) {\n    const formattedMax = computedFormatter.value.format(clampedStars.value)\n    return `${formattedValue}/${formattedMax}`\n  }\n  if (props.showValue) {\n    return formattedValue\n  }\n  return ''\n})\n\nconst roundedValue = computed(() => {\n  const val = displayValue.value\n  const factor = 10 ** props.precision\n  return Math.round((val + Number.EPSILON) * factor) / factor\n})\n\nconst iconColors = computed(() =>\n  Array.from({length: clampedStars.value}, () => {\n    if (props.disabled) {\n      return {class: 'is-disabled', style: {}}\n    }\n    if (props.variant) {\n      return {class: `text-${props.variant}`, style: {}}\n    }\n    if (props.color) {\n      return {class: '', style: {color: props.color}}\n    }\n    return {class: '', style: {}}\n  })\n)\n\n//add keyboard support\nfunction onKeydown(e: KeyboardEvent) {\n  if (props.readonly || props.disabled) return\n\n  let newValue = modelValue.value\n\n  const isRtlMode = computedRtl.value\n\n  switch (e.key) {\n    case 'ArrowRight':\n      newValue = isRtlMode ? Math.max(newValue - 1, 0) : Math.min(newValue + 1, clampedStars.value)\n      break\n    case 'ArrowUp':\n      newValue = Math.min(newValue + 1, clampedStars.value)\n      break\n    case 'ArrowLeft':\n      newValue = isRtlMode ? Math.min(newValue + 1, clampedStars.value) : Math.max(newValue - 1, 0)\n      break\n    case 'ArrowDown':\n      newValue = Math.max(newValue - 1, 0)\n      break\n    default:\n      return\n  }\n\n  e.preventDefault()\n  modelValue.value = newValue\n}\n\nfunction selectRating(starIndex: number) {\n  if (props.readonly || props.disabled) return\n  modelValue.value = hoverValue.value !== null ? hoverValue.value : starIndex\n}\n\n// clear\nfunction clearRating() {\n  hoverValue.value = null\n  modelValue.value = 0\n}\n\ndefineExpose({\n  hoverValue,\n})\n</script>\n","<template>\n  <output\n    :id=\"computedId\"\n    :class=\"computedClasses\"\n    :dir=\"computedRtl ? 'rtl' : 'ltr'\"\n    :form=\"props.form ? props.form : undefined\"\n    role=\"slider\"\n    :aria-valuemin=\"0\"\n    :aria-valuemax=\"clampedStars\"\n    :aria-valuenow=\"displayValue\"\n    :aria-valuetext=\"`${displayValue} of ${clampedStars}`\"\n    :aria-disabled=\"props.disabled ? true : undefined\"\n    :aria-readonly=\"props.readonly ? true : undefined\"\n    :tabindex=\"props.disabled ? undefined : '0'\"\n    @keydown=\"onKeydown\"\n  >\n    <input\n      v-if=\"props.name && !props.disabled\"\n      key=\"hidden\"\n      type=\"hidden\"\n      :name=\"props.name\"\n      :form=\"props.form\"\n      :value=\"modelValue\"\n    />\n    <span\n      v-if=\"props.showClear && !props.readonly && !props.disabled\"\n      class=\"clear-button-spacing\"\n      @click=\"clearRating\"\n    >\n      <slot name=\"icon-clear\">\n        <svg\n          viewBox=\"0 0 16 16\"\n          role=\"img\"\n          aria-label=\"x\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          class=\"clear-icon\"\n        >\n          <g>\n            <path\n              d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708\"\n            />\n          </g>\n        </svg>\n      </slot>\n    </span>\n    <span\n      v-for=\"(starIndex, index) in clampedStars\"\n      :key=\"starIndex\"\n      class=\"star\"\n      @click=\"selectRating(starIndex)\"\n    >\n      <slot :star-index=\"starIndex\" :is-filled=\"isIconFull(index)\" :is-half=\"isIconHalf(index)\">\n        <span class=\"b-form-rating-star\">\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            :width=\"computedSize\"\n            :height=\"computedSize\"\n            fill=\"currentColor\"\n            :class=\"[iconColors[index]?.class]\"\n            :style=\"iconColors[index]?.style\"\n            class=\"star-spacing\"\n            viewBox=\"0 0 16 16\"\n          >\n            <path\n              v-if=\"isIconFull(index)\"\n              d=\"M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z\"\n            />\n            <path\n              v-else-if=\"isIconHalf(index)\"\n              d=\"M5.354 5.119 7.538.792A.52.52 0 0 1 8 .5c.183 0 .366.097.465.292l2.184 4.327 4.898.696A.54.54 0 0 1 16 6.32a.55.55 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.5.5 0 0 1-.146.05c-.342.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.172-.403.6.6 0 0 1 .085-.302.51.51 0 0 1 .37-.245zM8 12.027a.5.5 0 0 1 .232.056l3.686 1.894-.694-3.957a.56.56 0 0 1 .162-.505l2.907-2.77-4.052-.576a.53.53 0 0 1-.393-.288L8.001 2.223 8 2.226z\"\n            />\n            <path\n              v-else\n              d=\"M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.522 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z\"\n            />\n          </svg>\n        </span>\n      </slot>\n    </span>\n\n    <span\n      v-if=\"props.showValue || props.showValueMax\"\n      :style=\"{fontSize: computedSize}\"\n      class=\"rating-value-text\"\n    >\n      {{ displayValueText }}\n    </span>\n  </output>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {BFormRatingProps, BFormRatingSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormRatingProps, 'modelValue'>>(), {\n  color: '',\n  id: undefined,\n  inline: false,\n  locale: undefined,\n  noBorder: false,\n  precision: 0,\n  readonly: false,\n  disabled: false,\n  form: undefined,\n  name: undefined,\n  showClear: false,\n  showValue: false,\n  showValueMax: false,\n  size: '1rem',\n  stars: 5,\n  variant: undefined,\n})\nconst props = useDefaults(_props, 'BFormRating')\ndefineSlots<BFormRatingSlots>()\n\nconst modelValue = defineModel<Exclude<BFormRatingProps['modelValue'], undefined>>({default: 0})\n\nconst computedId = useId(() => props.id, 'form-rating')\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n  const loc = (props.locale ?? globalLocale?.value) || undefined\n  const nf = new Intl.NumberFormat(loc)\n  return nf.resolvedOptions().locale\n})\n\nconst computedRtl = computed(() => {\n  const locale = computedLocale.value\n  try {\n    const localeObj = new Intl.Locale(locale)\n    const {textInfo} = localeObj as Intl.Locale & {textInfo?: {direction: string}}\n    if (textInfo) {\n      return textInfo.direction === 'rtl'\n    }\n  } catch {\n    // Fallback\n  }\n  return isRtl?.value ?? false\n})\n\nconst computedClasses = computed(() => ({\n  'form-control': true,\n  'is-readonly': props.readonly,\n  'is-disabled': props.disabled,\n  'no-border': props.noBorder,\n  'b-form-rating': true,\n  'd-inline-flex': props.inline,\n}))\n\nfunction isIconFull(index: number): boolean {\n  return displayValue.value - index >= 1\n}\n\nfunction isIconHalf(index: number): boolean {\n  const diff = displayValue.value - index\n  return diff >= 0.5 && diff < 1\n}\n\nconst hoverValue = ref<number | null>(null)\n\nconst displayValue = computed(() =>\n  hoverValue.value !== null ? hoverValue.value : modelValue.value\n)\n\n// Set the minimum amount of star can be render to 3\nconst clampedStars = computed(() => Math.max(3, props.stars))\n\nconst computedSize = computed(() => {\n  if (props.size === 'sm') return '.875rem'\n  if (props.size === 'lg') return '1.25rem'\n  return props.size\n})\n\nconst computedFormatter = computed(\n  () =>\n    new Intl.NumberFormat(computedLocale.value, {\n      style: 'decimal',\n      useGrouping: false,\n      minimumFractionDigits: props.precision > 0 ? props.precision : 0,\n      maximumFractionDigits: props.precision > 0 ? props.precision : 0,\n      notation: 'standard',\n    })\n)\n\nconst displayValueText = computed(() => {\n  const val = props.precision > 0 ? roundedValue.value : displayValue.value\n  const formattedValue = computedFormatter.value.format(val)\n  if (props.showValueMax) {\n    const formattedMax = computedFormatter.value.format(clampedStars.value)\n    return `${formattedValue}/${formattedMax}`\n  }\n  if (props.showValue) {\n    return formattedValue\n  }\n  return ''\n})\n\nconst roundedValue = computed(() => {\n  const val = displayValue.value\n  const factor = 10 ** props.precision\n  return Math.round((val + Number.EPSILON) * factor) / factor\n})\n\nconst iconColors = computed(() =>\n  Array.from({length: clampedStars.value}, () => {\n    if (props.disabled) {\n      return {class: 'is-disabled', style: {}}\n    }\n    if (props.variant) {\n      return {class: `text-${props.variant}`, style: {}}\n    }\n    if (props.color) {\n      return {class: '', style: {color: props.color}}\n    }\n    return {class: '', style: {}}\n  })\n)\n\n//add keyboard support\nfunction onKeydown(e: KeyboardEvent) {\n  if (props.readonly || props.disabled) return\n\n  let newValue = modelValue.value\n\n  const isRtlMode = computedRtl.value\n\n  switch (e.key) {\n    case 'ArrowRight':\n      newValue = isRtlMode ? Math.max(newValue - 1, 0) : Math.min(newValue + 1, clampedStars.value)\n      break\n    case 'ArrowUp':\n      newValue = Math.min(newValue + 1, clampedStars.value)\n      break\n    case 'ArrowLeft':\n      newValue = isRtlMode ? Math.min(newValue + 1, clampedStars.value) : Math.max(newValue - 1, 0)\n      break\n    case 'ArrowDown':\n      newValue = Math.max(newValue - 1, 0)\n      break\n    default:\n      return\n  }\n\n  e.preventDefault()\n  modelValue.value = newValue\n}\n\nfunction selectRating(starIndex: number) {\n  if (props.readonly || props.disabled) return\n  modelValue.value = hoverValue.value !== null ? hoverValue.value : starIndex\n}\n\n// clear\nfunction clearRating() {\n  hoverValue.value = null\n  modelValue.value = 0\n}\n\ndefineExpose({\n  hoverValue,\n})\n</script>\n"],"mappings":"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"}