{"version":3,"file":"switch.mjs","sources":["../../../../../../../packages/components/switch/src/switch.tsx"],"sourcesContent":["import { type ExtractPropTypes, defineComponent } from 'vue'\nimport {\n  addUnit,\n  createNamespace,\n  numericProp,\n  unknownProp,\n} from '@xzx-design/utils'\nimport { useCustomFieldValue } from '@xzx-design/hooks'\nimport { Loading } from '@xzx-design/components/loading'\n\nconst [name, bem] = createNamespace('switch')\n\nexport const switchProps = {\n  size: numericProp,\n  loading: Boolean,\n  disabled: Boolean,\n  modelValue: unknownProp,\n  activeColor: String,\n  inactiveColor: String,\n  activeValue: {\n    type: unknownProp,\n    default: true as unknown,\n  },\n  inactiveValue: {\n    type: unknownProp,\n    default: false as unknown,\n  },\n}\n\nexport type SwitchProps = ExtractPropTypes<typeof switchProps>\n\nexport default defineComponent({\n  name,\n\n  props: switchProps,\n\n  emits: ['change', 'update:modelValue'],\n\n  setup(props, { emit, slots }) {\n    const isChecked = () => props.modelValue === props.activeValue\n\n    const onClick = () => {\n      if (!props.disabled && !props.loading) {\n        const newValue = isChecked() ? props.inactiveValue : props.activeValue\n        emit('update:modelValue', newValue)\n        emit('change', newValue)\n      }\n    }\n\n    const renderLoading = () => {\n      if (props.loading) {\n        const color = isChecked() ? props.activeColor : props.inactiveColor\n        return <Loading class={bem('loading')} color={color} />\n      }\n      if (slots.node) {\n        return slots.node()\n      }\n    }\n\n    useCustomFieldValue(() => props.modelValue)\n\n    return () => {\n      const { size, loading, disabled, activeColor, inactiveColor } = props\n      const checked = isChecked()\n      const style = {\n        fontSize: addUnit(size),\n        backgroundColor: checked ? activeColor : inactiveColor,\n      }\n\n      return (\n        <div\n          role=\"switch\"\n          class={bem({\n            on: checked,\n            loading,\n            disabled,\n          })}\n          style={style}\n          tabindex={disabled ? undefined : 0}\n          aria-checked={checked}\n          onClick={onClick}\n        >\n          <div class={bem('node')}>{renderLoading()}</div>\n          {slots.background?.()}\n        </div>\n      )\n    }\n  },\n})\n"],"names":["name","bem","createNamespace","switchProps","size","numericProp","loading","Boolean","disabled","modelValue","unknownProp","activeColor","String","inactiveColor","activeValue","type","default","inactiveValue","defineComponent","props","emits","setup","emit","slots","isChecked","onClick","newValue","renderLoading","color","_createVNode","Loading","node","useCustomFieldValue","checked","style","fontSize","addUnit","backgroundColor","on","undefined","background"],"mappings":"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"}