{"version":3,"file":"switch.vue.mjs","sources":["../../../../../packages/components/switch/src/switch.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"switchKls\"\n    role=\"switch\"\n    :aria-checked=\"checked\"\n    :aria-disabled=\"switchDisabled\"\n    @click.prevent=\"switchValue\"\n  >\n    <input\n      :id=\"id\"\n      ref=\"input\"\n      :class=\"ns.e('input')\"\n      type=\"checkbox\"\n      :name=\"name\"\n      :true-value=\"activeValue\"\n      :false-value=\"inactiveValue\"\n      :disabled=\"switchDisabled\"\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\n      ref=\"core\"\n      :class=\"ns.e('core')\"\n      :style=\"{ width: (width || 40) + 'px' }\"\n    >\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\">\nimport { defineComponent, computed, onMounted, ref, nextTick, watch } from 'vue'\nimport { isPromise } from '@vue/shared'\nimport { isBoolean, throwError, debugWarn } from '@element-ultra/utils'\nimport ElIcon from '@element-ultra/components/icon'\nimport { Loading } from 'icon-ultra'\nimport {\n  UPDATE_MODEL_EVENT,\n  CHANGE_EVENT,\n  INPUT_EVENT,\n} from '@element-ultra/shared'\nimport {\n  useDisabled,\n  useFormItem,\n  useNamespace,\n  useSize,\n} from '@element-ultra/hooks'\nimport { switchProps, switchEmits } from './switch'\n\nconst COMPONENT_NAME = 'ElSwitch'\n\nexport default defineComponent({\n  name: COMPONENT_NAME,\n  components: { ElIcon, Loading },\n\n  props: switchProps,\n  emits: switchEmits,\n\n  setup(props, { emit }) {\n    const { formItem } = useFormItem()\n    const switchDisabled = useDisabled({\n      props,\n      fallback: computed(() => props.loading)\n    })\n    const ns = useNamespace('switch')\n\n    const switchSize = useSize({ props })\n    const isModelValue = ref(props.modelValue !== false)\n    const input = ref<HTMLInputElement>()\n    const core = ref<HTMLSpanElement>()\n\n    const switchKls = computed(() => [\n      ns.b(),\n      ns.m(switchSize.value),\n      ns.is('disabled', switchDisabled.value),\n      ns.is('checked', checked.value),\n    ])\n\n    watch(\n      () => props.modelValue,\n      () => {\n        isModelValue.value = true\n      }\n    )\n\n    watch(\n      () => props.value,\n      () => {\n        isModelValue.value = false\n      }\n    )\n\n    const actualValue = computed(() => {\n      return isModelValue.value ? props.modelValue : props.value\n    })\n\n    const checked = computed(() => actualValue.value === props.activeValue)\n\n    if (![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\n    watch(checked, () => {\n      input.value!.checked = checked.value\n\n      if (props.activeColor || props.inactiveColor) {\n        setBackgroundColor()\n      }\n\n      if (props.validateEvent) {\n        formItem?.validate()\n      }\n    })\n\n    const handleChange = (): void => {\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\n    const switchValue = (): void => {\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 isExpectType = [\n        isPromise(shouldChange),\n        isBoolean(shouldChange),\n      ].some((i) => i)\n      if (!isExpectType) {\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\n    const setBackgroundColor = (): void => {\n      const newColor = checked.value ? props.activeColor : props.inactiveColor\n      const coreEl = core.value\n      if (props.borderColor) coreEl!.style.borderColor = props.borderColor\n      else if (!props.borderColor) coreEl!.style.borderColor = newColor\n      coreEl!.style.backgroundColor = newColor\n      ;(coreEl!.children[0] as HTMLDivElement).style.color = newColor\n    }\n\n    const focus = (): void => {\n      input.value?.focus?.()\n    }\n\n    onMounted(() => {\n      if (props.activeColor || props.inactiveColor || props.borderColor) {\n        setBackgroundColor()\n      }\n\n      input.value!.checked = checked.value\n    })\n\n    return {\n      ns,\n      input,\n      core,\n      switchDisabled,\n      checked,\n      switchKls,\n      handleChange,\n      switchValue,\n      focus,\n    }\n  },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_normalizeClass","_createBlock","_withCtx","_createCommentVNode","_normalizeStyle","_Fragment","_toDisplayString"],"mappings":"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"}