{"version":3,"file":"switch.mjs","sources":["../../../../../../packages/components/switch/src/switch.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"switchKls\"\n    :style=\"styles\"\n    data-test-name=\"switch\"\n    data-test-variant=\"\"\n    data-test-state=\"\"\n    @click.prevent=\"switchValue\"\n  >\n    <input\n      :id=\"inputId\"\n      ref=\"input\"\n      :class=\"ns.e('input')\"\n      type=\"checkbox\"\n      role=\"switch\"\n      :aria-checked=\"checked\"\n      :aria-disabled=\"switchDisabled\"\n      :name=\"name\"\n      :true-value=\"activeValue\"\n      :false-value=\"inactiveValue\"\n      :disabled=\"switchDisabled\"\n      :tabindex=\"tabindex\"\n      @change=\"handleChange\"\n      @keydown.enter=\"switchValue\"\n    />\n    <span\n      v-if=\"\n        !inlinePrompt && (inactiveIcon || $slots.inactiveIcon || inactiveText)\n      \"\n      :class=\"[\n        ns.e('label'),\n        ns.em('label', 'left'),\n        ns.is('active', !checked),\n      ]\"\n    >\n      <slot name=\"inactiveIcon\">\n        <b-icon v-if=\"inactiveIcon\"><component :is=\"inactiveIcon\" /></b-icon>\n      </slot>\n      <span\n        v-if=\"!inactiveIcon && !$slots.inactiveIcon && inactiveText\"\n        :aria-hidden=\"checked\"\n        >{{ inactiveText }}</span\n      >\n    </span>\n    <slot />\n    <slot name=\"left\" />\n    <span ref=\"core\" :class=\"ns.e('core')\" :style=\"coreStyle\">\n      <div v-if=\"inlinePrompt\" :class=\"ns.e('inner')\">\n        <template\n          v-if=\"\n            activeIcon ||\n            inactiveIcon ||\n            $slots.inactiveIcon ||\n            $slots.activeIcon\n          \"\n        >\n          <slot v-if=\"checked\" name=\"activeIcon\">\n            <b-icon\n              v-if=\"activeIcon\"\n              :class=\"[ns.is('icon'), checked ? ns.is('show') : ns.is('hide')]\"\n            >\n              <component :is=\"activeIcon\" />\n            </b-icon>\n          </slot>\n          <slot v-else name=\"inactiveIcon\">\n            <b-icon\n              v-if=\"inactiveIcon\"\n              :class=\"[ns.is('icon'), !checked ? ns.is('show') : ns.is('hide')]\"\n            >\n              <component :is=\"inactiveIcon\" />\n            </b-icon>\n          </slot>\n        </template>\n        <template v-else-if=\"activeText || inactiveIcon || $slots.inactiveIcon\">\n          <span\n            v-if=\"activeText\"\n            :class=\"[ns.is('text'), checked ? ns.is('show') : ns.is('hide')]\"\n            :aria-hidden=\"!checked\"\n          >\n            {{ activeText.substring(0, 3) }}\n          </span>\n          <span\n            v-if=\"inactiveText\"\n            :class=\"[ns.is('text'), !checked ? ns.is('show') : ns.is('hide')]\"\n            :aria-hidden=\"checked\"\n          >\n            {{ inactiveText.substring(0, 3) }}\n          </span>\n        </template>\n      </div>\n      <div :class=\"ns.e('action')\">\n        <b-icon v-if=\"loading\" :class=\"ns.is('loading')\"><Loading /></b-icon>\n      </div>\n    </span>\n    <span\n      v-if=\"!inlinePrompt && (activeIcon || $slots.activeIcon || activeText)\"\n      :class=\"[\n        ns.e('label'),\n        ns.em('label', 'right'),\n        ns.is('active', checked),\n      ]\"\n    >\n      <slot name=\"activeIcon\">\n        <b-icon v-if=\"activeIcon\"><component :is=\"activeIcon\" /></b-icon>\n      </slot>\n      <span\n        v-if=\"!activeIcon && !$slots.activeIcon && activeText\"\n        :aria-hidden=\"!checked\"\n        >{{ activeText }}</span\n      >\n    </span>\n    <slot name=\"right\" />\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  // getCurrentInstance,\n  nextTick,\n  onMounted,\n  ref,\n  watch,\n} from 'vue'\nimport { isPromise } from '@vue/shared'\nimport { addUnit, debugWarn, isBoolean, throwError } from '@bigin/utils'\nimport BIcon from '@bigin/components/icon'\nimport { Loading } from '@bigin/icons-vue'\nimport {\n  useDisabled,\n  useFormItem,\n  useFormItemInputId,\n  useNamespace,\n  useSize,\n} from '@bigin/hooks'\nimport { CHANGE_EVENT, INPUT_EVENT, UPDATE_MODEL_EVENT } from '@bigin/constants'\nimport { switchEmits, switchProps } from './switch'\nimport type { CSSProperties } from 'vue'\n\nconst COMPONENT_NAME = 'BSwitch'\ndefineOptions({\n  name: COMPONENT_NAME,\n})\n\nconst props = defineProps(switchProps)\nconst emit = defineEmits(switchEmits)\n\n// const vm = getCurrentInstance()!\nconst { formItem } = useFormItem()\nconst switchSize = useSize()\nconst ns = useNamespace('switch')\n\nconst { inputId } = useFormItemInputId(props, {\n  formItemContext: formItem,\n})\n\nconst switchDisabled = useDisabled(computed(() => props.loading))\nconst isControlled = ref(props.modelValue !== false)\nconst input = ref<HTMLInputElement>()\nconst core = ref<HTMLSpanElement>()\n\nconst switchKls = computed(() => [\n  ns.b(),\n  ns.m(switchSize.value),\n  ns.is('disabled', switchDisabled.value),\n  ns.is('checked', checked.value),\n])\n\nconst coreStyle = computed<CSSProperties>(() => ({\n  width: addUnit(props.width),\n}))\n\nwatch(\n  () => props.modelValue,\n  () => {\n    isControlled.value = true\n  }\n)\n\nwatch(\n  () => props.value,\n  () => {\n    isControlled.value = false\n  }\n)\n\nconst actualValue = computed(() => {\n  return isControlled.value ? props.modelValue : props.value\n})\n\nconst checked = computed(() => actualValue.value === props.activeValue)\n\nif (![props.activeValue, props.inactiveValue].includes(actualValue.value)) {\n  emit(UPDATE_MODEL_EVENT, props.inactiveValue)\n  emit(CHANGE_EVENT, props.inactiveValue)\n  emit(INPUT_EVENT, props.inactiveValue)\n}\n\nwatch(checked, (val) => {\n  input.value!.checked = val\n})\n\nconst handleChange = () => {\n  const val = checked.value ? props.inactiveValue : props.activeValue\n  emit(UPDATE_MODEL_EVENT, val)\n  emit(CHANGE_EVENT, val)\n  emit(INPUT_EVENT, val)\n  nextTick(() => {\n    input.value!.checked = checked.value\n  })\n}\n\nconst switchValue = () => {\n  if (switchDisabled.value) return\n\n  const { beforeChange } = props\n  if (!beforeChange) {\n    handleChange()\n    return\n  }\n\n  const shouldChange = beforeChange()\n\n  const isPromiseOrBool = [\n    isPromise(shouldChange),\n    isBoolean(shouldChange),\n  ].includes(true)\n  if (!isPromiseOrBool) {\n    throwError(\n      COMPONENT_NAME,\n      'beforeChange must return type `Promise<boolean>` or `boolean`'\n    )\n  }\n\n  if (isPromise(shouldChange)) {\n    shouldChange\n      .then((result) => {\n        if (result) {\n          handleChange()\n        }\n      })\n      .catch((e) => {\n        debugWarn(COMPONENT_NAME, `some error occurred: ${e}`)\n      })\n  } else if (shouldChange) {\n    handleChange()\n  }\n}\n\nconst styles = computed(() => {\n  return ns.cssVarBlock({\n    ...(props.activeColor ? { 'on-color': props.activeColor } : null),\n    ...(props.inactiveColor ? { 'off-color': props.inactiveColor } : null),\n    ...(props.borderColor ? { 'border-color': props.borderColor } : null),\n  })\n})\n\nconst focus = (): void => {\n  input.value?.focus?.()\n}\n\nonMounted(() => {\n  input.value!.checked = checked.value\n})\n\ndefineExpose({\n  /**\n   *  @description manual focus to the switch component\n   **/\n  focus,\n  /**\n   * @description whether Switch is checked\n   */\n  checked,\n})\n</script>\n"],"names":[],"mappings":"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"}