{"version":3,"file":"switch2.mjs","sources":["../../../../../../packages/components/switch/src/switch.vue"],"sourcesContent":["<template>\r\n  <div\r\n    :class=\"switchKls\"\r\n    role=\"switch\"\r\n    :aria-checked=\"checked\"\r\n    :aria-disabled=\"(switchDisabled as boolean)\"\r\n    @click.prevent=\"switchValue\"\r\n  >\r\n    <input\r\n      :id=\"id\"\r\n      ref=\"input\"\r\n      v-bind=\"attrs\"\r\n      :class=\"ns.e('input')\"\r\n      type=\"checkbox\"\r\n      :true-value=\"trueValue\"\r\n      :false-value=\"falseValue\"\r\n      :disabled=\"(switchDisabled as boolean)\"\r\n      @change=\"handleChange\"\r\n      @keydown.enter=\"switchValue\"\r\n    />\r\n    <span\r\n      v-if=\"!inlinePrompt && ( inactiveText || activeText )\"\r\n      :class=\"[\r\n        ns.e('label'),\r\n        ns.em('label', 'left'),\r\n        ns.is('active', !checked),\r\n      ]\"\r\n    >\r\n      <span :aria-hidden=\"!checked\">{{\r\n        inactiveText\r\n      }}</span>\r\n    </span>\r\n    <span\r\n      ref=\"core\"\r\n      :class=\"ns.e('core')\"\r\n      :style=\"corWidth\"\r\n    >\r\n\r\n      <div :class=\"ns.e('action')\">\r\n        <sg-icon v-if=\"loading\" :class=\"ns.is('loading')\"><Loading /></sg-icon>\r\n      </div>\r\n      <slot name=\"open\" v-if=\"checked\"></slot>\r\n      <slot name=\"close\" v-if=\"!checked\"></slot>\r\n    </span>\r\n    <span\r\n      v-if=\"!inlinePrompt &&  activeText\"\r\n      :class=\"[\r\n        ns.e('label'),\r\n        ns.em('label', 'right'),\r\n        ns.is('active', checked),\r\n      ]\"\r\n    >\r\n      <span v-if=\"activeText\" :aria-hidden=\"!checked\">{{\r\n        activeText\r\n      }}</span>\r\n    </span>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, onMounted, ref, nextTick, watch } from 'vue'\r\nimport { isPromise } from '@vue/shared'\r\nimport { isBool } from '@sgui-plus/utils/util'\r\nimport { throwError, debugWarn } from '@sgui-plus/utils/error'\r\nimport SgIcon from '@sgui-plus/components/icon'\r\nimport { Loading } from '@sgui-plus/icons-vue'\r\nimport {\r\n  UPDATE_MODEL_EVENT,\r\n  INPUT_EVENT,\r\n} from '@sgui-plus/utils/constants'\r\nimport {\r\n  useDisabled,\r\n  useNamespace,\r\n  useSize,\r\n  useFormItem\r\n} from '@sgui-plus/hooks'\r\nimport { switchProps, switchEmits } from './switch'\r\n\r\nconst COMPONENT_NAME = 'SgSwitch'\r\n\r\nexport default defineComponent({\r\n  name: COMPONENT_NAME,\r\n  components: { SgIcon, Loading },\r\n\r\n  props: switchProps,\r\n  emits: switchEmits,\r\n\r\n  setup(props, { attrs, emit }) {\r\n    const { formItem } = useFormItem()\r\n    const switchDisabled = useDisabled(computed(() => props.loading).value)\r\n    const corWidth = computed(() => props.width ? { width: props.width + 'px' } : undefined)\r\n    const ns = useNamespace('switch')\r\n\r\n    const switchSize = useSize()\r\n    const isModelValue = ref(props.modelValue !== false)\r\n    const input = ref<HTMLInputElement>()\r\n    const core = ref<HTMLSpanElement>()\r\n\r\n    const switchKls = computed(() => [\r\n      ns.b(),\r\n      ns.m(switchSize.value),\r\n      ns.is('disabled', switchDisabled.value as boolean),\r\n      ns.is('checked', checked.value),\r\n    ])\r\n\r\n    watch(\r\n      () => props.modelValue,\r\n      () => {\r\n        isModelValue.value = true\r\n      }\r\n    )\r\n\r\n    watch(\r\n      () => props.value,\r\n      () => {\r\n        isModelValue.value = false\r\n      }\r\n    )\r\n\r\n    const actualValue = computed(() => {\r\n      return isModelValue.value ? props.modelValue : props.value\r\n    })\r\n\r\n    const checked = computed(() => actualValue.value === props.trueValue)\r\n\r\n    if (![props.trueValue, props.falseValue].includes(actualValue.value)) {\r\n      emit(UPDATE_MODEL_EVENT, props.falseValue)\r\n      emit(INPUT_EVENT, props.falseValue)\r\n    }\r\n\r\n    watch(checked, () => {\r\n      input.value!.checked = checked.value\r\n      if (props.validateEvent) {\r\n        formItem?.validate?.('change').catch((err) => debugWarn(err))\r\n      }\r\n    })\r\n\r\n    const handleChange = (): void => {\r\n      const val = checked.value ? props.falseValue : props.trueValue\r\n      emit(\"onChange\", val)\r\n      emit(UPDATE_MODEL_EVENT, val)\r\n      emit(INPUT_EVENT, val)\r\n      nextTick(() => {\r\n        input.value!.checked = checked.value\r\n      })\r\n    }\r\n\r\n    const switchValue = (): void => {\r\n      if (switchDisabled.value) return\r\n\r\n      const { beforeChange } = props\r\n      if (!beforeChange) {\r\n        handleChange()\r\n        return\r\n      }\r\n\r\n      const shouldChange = beforeChange()\r\n\r\n      const isExpectType = [isPromise(shouldChange), isBool(shouldChange)].some(\r\n        (i) => i\r\n      )\r\n      if (!isExpectType) {\r\n        throwError(\r\n          COMPONENT_NAME,\r\n          'beforeChange must return type `Promise<boolean>` or `boolean`'\r\n        )\r\n      }\r\n\r\n      if (isPromise(shouldChange)) {\r\n        shouldChange\r\n          .then((result) => {\r\n            if (result) {\r\n              handleChange()\r\n            }\r\n          })\r\n          .catch((e) => {\r\n            debugWarn(COMPONENT_NAME, `some error occurred: ${e}`)\r\n          })\r\n      } else if (shouldChange) {\r\n        handleChange()\r\n      }\r\n    }\r\n\r\n    onMounted(() => {\r\n      input.value!.checked = checked.value\r\n    })\r\n\r\n    return {\r\n      corWidth,\r\n      attrs,\r\n      ns,\r\n      input,\r\n      core,\r\n      switchDisabled,\r\n      checked,\r\n      switchKls,\r\n      handleChange,\r\n      switchValue,\r\n    }\r\n  },\r\n})\r\n</script>\r\n"],"names":["_resolveComponent","_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_mergeProps","_normalizeClass","_createCommentVNode","_normalizeStyle","_createBlock","_renderSlot"],"mappings":"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"}