{"version":3,"file":"switch.mjs","sources":["../../src/switch/switch.tsx"],"sourcesContent":["import { defineComponent, h, VNodeChild, computed, watch, toRefs } from 'vue';\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport TLoading from '../loading';\nimport props from './props';\nimport { TNodeReturnValue } from '../common';\n\n// hooks\nimport { useDisabled } from '../hooks/useDisabled';\nimport useVModel from '../hooks/useVModel';\nimport isFunction from 'lodash/isFunction';\nimport isString from 'lodash/isString';\nimport isArray from 'lodash/isArray';\n\nexport default defineComponent({\n  name: 'XSwitch',\n  props: { ...props },\n\n  setup(props, { slots }) {\n    const disabled = useDisabled();\n    const COMPONENT_NAME = usePrefixClass('switch');\n    const { STATUS, SIZE } = useCommonClassName();\n    // values\n    const { value, modelValue } = toRefs(props);\n    const [innerValue, setSwitchVal] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n    const activeValue = computed(() => {\n      if (props.customValue && props.customValue.length > 0) {\n        return props.customValue[0];\n      }\n      return true;\n    });\n    const inactiveValue = computed(() => {\n      if (props.customValue && props.customValue.length > 1) {\n        return props.customValue[1];\n      }\n      return false;\n    });\n\n    // methods\n    function handleToggle(e: MouseEvent) {\n      const checked = innerValue.value === activeValue.value ? inactiveValue.value : activeValue.value;\n      // emits\n      setSwitchVal(checked, { e });\n    }\n\n    function toggle(e: MouseEvent) {\n      if (disabled.value || props.loading) {\n        return;\n      }\n      handleToggle(e);\n    }\n\n    // classes\n    const classes = computed(() => [\n      `${COMPONENT_NAME.value}`,\n      SIZE.value[props.size],\n      {\n        [STATUS.value.disabled]: disabled.value,\n        [STATUS.value.loading]: props.loading,\n        [STATUS.value.checked]: innerValue.value === activeValue.value || props.modelValue === activeValue.value,\n      },\n    ]);\n    const nodeClasses = computed(() => {\n      return [\n        `${COMPONENT_NAME.value}__handle`,\n        {\n          [STATUS.value.disabled]: disabled.value,\n          [STATUS.value.loading]: props.loading,\n        },\n      ];\n    });\n    const contentClasses = computed(() => {\n      return [\n        `${COMPONENT_NAME.value}__content`,\n        SIZE.value[props.size],\n        {\n          [STATUS.value.disabled]: disabled.value,\n        },\n      ];\n    });\n\n    watch(\n      innerValue,\n      (val) => {\n        if (props.customValue && props.customValue.length && !props.customValue.includes(val)) {\n          throw new Error(`value is not in ${JSON.stringify(props.customValue)}`);\n        }\n      },\n      {\n        immediate: true,\n      },\n    );\n\n    const content = computed<VNodeChild>(() => {\n      if (isFunction(props.label)) {\n        return props.label(h, { value: innerValue.value });\n      }\n      if (isString(props.label)) {\n        return props.label;\n      }\n      if (isArray(props.label) && props.label.length) {\n        const label = innerValue.value === activeValue.value ? props.label[0] : props.label[1];\n        if (!label) return;\n        if (isString(label)) {\n          return label;\n        }\n        if (isFunction(label)) {\n          return label(h);\n        }\n      }\n      if (slots.label) {\n        return slots.label({ value: innerValue.value });\n      }\n      return null;\n    });\n    return () => {\n      let switchContent: VNodeChild;\n      let loadingContent: TNodeReturnValue;\n      if (props.loading) {\n        loadingContent = <TLoading size=\"small\" />;\n      } else if (content.value) {\n        switchContent = content.value;\n      }\n\n      return (\n        <div class={classes.value} disabled={disabled.value} onClick={toggle}>\n          <span class={nodeClasses.value}>{loadingContent}</span>\n          <div class={contentClasses.value}>{switchContent}</div>\n        </div>\n      );\n    };\n  },\n});\n"],"names":["name","props","setup","innerValue","setSwitchVal","e","watch","immediate","isFunction","isString","isArray","_createVNode"],"mappings":"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"}