{"version":3,"file":"option.mjs","sources":["../../src/select/option.tsx"],"sourcesContent":["import { defineComponent, ref, computed, inject, onMounted, onBeforeUnmount } from 'vue';\n\nimport props from './option-props';\nimport Checkbox from '../checkbox/index';\n\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport useRipple from '../hooks/useRipple';\nimport { useContent } from '../hooks/tnode';\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport { selectInjectKey, getNewMultipleValue } from './helper';\nimport { SelectValue } from './type';\n\nexport default defineComponent({\n  name: 'XOption',\n\n  props: {\n    ...props,\n    createAble: Boolean,\n    multiple: Boolean,\n    index: Number,\n    rowIndex: Number,\n    trs: Map,\n    scrollType: String,\n    isVirtual: Boolean,\n    bufferSize: Number,\n    checkAll: Boolean,\n  },\n  emits: ['row-mounted'],\n\n  setup(props, context) {\n    const selectProvider = inject(selectInjectKey);\n    const formDisabled = useFormDisabled();\n\n    const isReachMax = computed(\n      () =>\n        selectProvider.value.max !== 0 &&\n        selectProvider.value.max <= (selectProvider.value.selectValue as SelectValue[]).length,\n    );\n    const disabled = computed(\n      () =>\n        formDisabled.value ||\n        (props.multiple && isReachMax.value && !isSelected.value && !selectProvider.value.isCheckAll),\n    );\n\n    const renderContent = useContent();\n\n    const selectName = usePrefixClass('select');\n    const { STATUS, SIZE } = useCommonClassName();\n    const liRef = ref<HTMLElement>();\n\n    const isHover = ref(false);\n\n    const isSelected = computed(() => {\n      if (selectProvider.value.isCheckAll && !props.disabled) return true;\n      return !props.multiple\n        ? selectProvider.value.selectValue === props.value\n        : (selectProvider.value.selectValue as SelectValue[]).includes(props.value);\n    });\n\n    const isIndeterminate = computed(() => {\n      if (!props.checkAll) return false;\n      return selectProvider.value.indeterminate;\n    });\n\n    const classes = computed(() => [\n      `${selectName.value}-option`,\n      [SIZE.value[selectProvider.value.size]],\n      {\n        [STATUS.value.disabled]: disabled.value,\n        [STATUS.value.selected]: isSelected.value,\n        [`${selectName.value}-option__hover`]:\n          (isHover.value || selectProvider.value.hoverIndex === props.index) && !disabled.value && !isSelected.value,\n      },\n    ]);\n\n    const labelText = computed(() => props.label || props.value);\n\n    const handleClick = (e: MouseEvent | KeyboardEvent) => {\n      if (props.disabled || disabled.value) return;\n      if (props.multiple) {\n        handleCheckboxClick(!isSelected.value, { e });\n        e.preventDefault();\n        return;\n      }\n      e.stopPropagation();\n\n      if (props.createAble) {\n        selectProvider.value.handleCreate?.(props.value);\n        if (selectProvider.value.multiple) {\n          (selectProvider.value.selectValue as SelectValue[]).push(props.value);\n          selectProvider.value.handleValueChange(selectProvider.value.selectValue, {\n            selectedOptions: selectProvider.value.getSelectedOptions(),\n            trigger: 'check',\n            e,\n          });\n          return;\n        }\n      }\n      const selectedOptions = selectProvider.value.getSelectedOptions(props.value);\n      selectProvider.value.handleValueChange(props.value, {\n        option: selectedOptions?.[0],\n        selectedOptions: selectedOptions,\n        trigger: 'check',\n        e,\n      });\n      selectProvider.value.handlePopupVisibleChange(false, { e });\n    };\n\n    const handleCheckboxClick = (val: boolean, context: { e: MouseEvent | KeyboardEvent }) => {\n      if (props.checkAll) {\n        selectProvider.value.onCheckAllChange(val);\n        return;\n      }\n      const newValue = getNewMultipleValue(selectProvider.value.selectValue as SelectValue[], props.value);\n      const selectedOptions = selectProvider.value.getSelectedOptions(newValue.value);\n\n      selectProvider.value.handleValueChange(newValue.value, {\n        option: selectedOptions.find((v) => v.value === props.value),\n        selectedOptions,\n        trigger: val ? 'check' : 'uncheck',\n        e: context.e,\n      });\n      if (!selectProvider.value.reserveKeyword) {\n        selectProvider.value.handlerInputChange('');\n      }\n    };\n\n    // 处理虚拟滚动节点挂载\n    onMounted(() => {\n      const { trs, rowIndex, isVirtual } = props;\n      if (isVirtual) {\n        trs.set(rowIndex, liRef.value);\n        context.emit('row-mounted');\n      }\n    });\n\n    // 处理虚拟滚动节点移除\n    onBeforeUnmount(() => {\n      if (props.isVirtual) {\n        const { trs, rowIndex } = props;\n        trs.delete(rowIndex);\n      }\n    });\n\n    useRipple(liRef);\n\n    return () => {\n      const optionChild = renderContent('default', 'content') || labelText.value;\n\n      return (\n        <li\n          ref={liRef}\n          class={classes.value}\n          title={props.title || `${labelText.value}`}\n          onMouseenter={() => (isHover.value = true)}\n          onMouseleave={() => (isHover.value = false)}\n          onClick={handleClick}\n        >\n          {selectProvider && props.multiple ? (\n            <Checkbox\n              checked={isSelected.value}\n              disabled={disabled.value}\n              onChange={handleCheckboxClick}\n              indeterminate={isIndeterminate.value}\n            >\n              {optionChild}\n            </Checkbox>\n          ) : (\n            <span>{optionChild}</span>\n          )}\n        </li>\n      );\n    };\n  },\n});\n"],"names":["_isVNode","name","props","createAble","multiple","index","rowIndex","trs","scrollType","isVirtual","bufferSize","checkAll","setup","handleCheckboxClick","e","selectedOptions","trigger","selectProvider","option","onMounted","context","onBeforeUnmount","_createVNode"],"mappings":"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"}