{"version":3,"file":"switch2.mjs","sources":["../../../../../../packages/components/switch/src/switch.vue"],"sourcesContent":["<template>\n  <div :class=\"switchKls\" :style=\"styles\" @click.prevent=\"switchValue\">\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=\"!inlinePrompt && (inactiveIcon || inactiveText)\"\n      :class=\"[\n        ns.e('label'),\n        ns.em('label', 'left'),\n        ns.is('active', !checked),\n      ]\"\n    >\n      <el-icon v-if=\"inactiveIcon\"><component :is=\"inactiveIcon\" /></el-icon>\n      <span v-if=\"!inactiveIcon && inactiveText\" :aria-hidden=\"checked\">{{\n        inactiveText\n      }}</span>\n    </span>\n    <span ref=\"core\" :class=\"ns.e('core')\" :style=\"coreStyle\">\n      <div v-if=\"inlinePrompt\" :class=\"ns.e('inner')\">\n        <template v-if=\"activeIcon || inactiveIcon\">\n          <el-icon\n            v-if=\"activeIcon\"\n            :class=\"[ns.is('icon'), checked ? ns.is('show') : ns.is('hide')]\"\n          >\n            <component :is=\"activeIcon\" />\n          </el-icon>\n          <el-icon\n            v-if=\"inactiveIcon\"\n            :class=\"[ns.is('icon'), !checked ? ns.is('show') : ns.is('hide')]\"\n          >\n            <component :is=\"inactiveIcon\" />\n          </el-icon>\n        </template>\n        <template v-else-if=\"activeText || 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        <el-icon v-if=\"loading\" :class=\"ns.is('loading')\"><loading /></el-icon>\n      </div>\n    </span>\n    <span\n      v-if=\"!inlinePrompt && (activeIcon || activeText)\"\n      :class=\"[\n        ns.e('label'),\n        ns.em('label', 'right'),\n        ns.is('active', checked),\n      ]\"\n    >\n      <el-icon v-if=\"activeIcon\"><component :is=\"activeIcon\" /></el-icon>\n      <span v-if=\"!activeIcon && activeText\" :aria-hidden=\"!checked\">{{\n        activeText\n      }}</span>\n    </span>\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 '@element-plus/utils'\nimport ElIcon from '@element-plus/components/icon'\nimport { Loading } from '@element-plus/icons-vue'\nimport {\n  CHANGE_EVENT,\n  INPUT_EVENT,\n  UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport {\n  useDeprecated,\n  useDisabled,\n  useFormItem,\n  useFormItemInputId,\n  useNamespace,\n  useSize,\n} from '@element-plus/hooks'\nimport { switchEmits, switchProps } from './switch'\nimport type { CSSProperties } from 'vue'\n\nconst COMPONENT_NAME = 'ElSwitch'\n\ndefineOptions({\n  name: 'ElSwitch',\n})\n\nconst props = defineProps(switchProps)\nconst emit = defineEmits(switchEmits)\n\nconst vm = getCurrentInstance()!\nconst { formItem } = useFormItem()\nconst switchSize = useSize()\nconst ns = useNamespace('switch')\n\nuseDeprecated(\n  {\n    from: '\"value\"',\n    replacement: '\"model-value\" or \"v-model\"',\n    scope: COMPONENT_NAME,\n    version: '2.3.0',\n    ref: 'https://element-plus.org/en-US/component/switch.html#attributes',\n    type: 'Attribute',\n  },\n  computed(() => !!vm.vnode.props?.value)\n)\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  if (props.validateEvent) {\n    formItem?.validate?.('change').catch((err) => debugWarn(err))\n  }\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</script>\n"],"names":[],"mappings":"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"}