{"version":3,"file":"option.mjs","sources":["../../../components/select/option.tsx"],"sourcesContent":["import {\n  defineComponent,\n  ref,\n  computed,\n  inject,\n  onMounted,\n  onBeforeUnmount,\n  getCurrentInstance,\n  ComputedRef,\n} from 'vue';\n\nimport props from './option-props';\nimport Checkbox from '../checkbox/index';\n\n// hooks\nimport { useRipple, useContent, useDisabled, usePrefixClass, useCommonClassName } from '@tdesign/shared-hooks';\n\nimport { getNewMultipleValue } from './utils';\nimport { selectInjectKey } from './constants';\nimport { SelectValue } from './type';\n\nexport default defineComponent({\n  name: 'TOption',\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    onRowMounted: Function,\n  },\n  emits: ['row-mounted'],\n\n  setup(props, context) {\n    const selectProvider = inject(selectInjectKey);\n    const formDisabled = useDisabled() as ComputedRef<boolean>;\n    const { vnode } = getCurrentInstance();\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,\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\n      if (props.createAble) {\n        selectProvider.value.handleCreate?.(props.value);\n        if (selectProvider.value.multiple) {\n          selectProvider.value.handleValueChange(\n            [...(selectProvider.value.selectValue as SelectValue[]), props.value],\n            {\n              selectedOptions: selectProvider.value.getSelectedOptions(),\n              trigger: 'check',\n              e,\n            },\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      selectProvider.value.emitBlur(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      const currentOption = selectProvider.value.getSelectedOptions(props.value)?.[0];\n      selectProvider.value.handleValueChange(newValue.value, {\n        option: currentOption,\n        selectedOptions,\n        trigger: val ? 'check' : 'uncheck',\n        e: context.e,\n      });\n    };\n\n    const renderTitle = () => {\n      const vProps = vnode.props || {};\n      // 如果设置了title 说明希望自己控制title的展示\n      if (Reflect.has(vProps, 'title')) {\n        return props.title;\n      }\n      if (typeof labelText.value === 'string') return labelText.value;\n\n      return null;\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={renderTitle()}\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":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","props","_objectSpread","createAble","Boolean","multiple","index","Number","rowIndex","trs","Map","scrollType","String","isVirtual","bufferSize","checkAll","onRowMounted","Function","emits","setup","context","selectProvider","inject","selectInjectKey","formDisabled","useDisabled","_getCurrentInstance","getCurrentInstance","vnode","isReachMax","computed","value","max","selectValue","length","disabled","isSelected","isCheckAll","renderContent","useContent","selectName","usePrefixClass","_useCommonClassName","useCommonClassName","STATUS","SIZE","liRef","ref","isHover","includes","isIndeterminate","indeterminate","classes","concat","size","_defineProperty","selected","hoverIndex","labelText","label","handleClick","e","handleCheckboxClick","preventDefault","_selectProvider$value","_selectProvider$value2","handleCreate","handleValueChange","_toConsumableArray","selectedOptions","getSelectedOptions","trigger","option","handlePopupVisibleChange","emitBlur","val","_selectProvider$value3","onCheckAllChange","newValue","getNewMultipleValue","currentOption","renderTitle","vProps","Reflect","has","title","onMounted","set","emit","onBeforeUnmount","useRipple","optionChild","_createVNode","onMouseenter","onMouseleave","Checkbox"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBgC,SAAAA,QAAAC,CAAA,EAAA;AAAA,EAAA,OAAA,OAAAA,CAAA,KAAA,UAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAC,IAAA,CAAAJ,CAAA,CAAAK,KAAAA,iBAAAA,IAAAA,CAAAA,OAAA,CAAAL,CAAA,CAAA,CAAA;AAAA,CAAA;AAGhC,cAAeM,eAAgB,CAAA;AAC7BC,EAAAA,IAAM,EAAA,SAAA;AACNC,EAAAA,KAAO,EAAAC,aAAA,CAAAA,aAAA,KACFD,KAAA,CAAA,EAAA,EAAA,EAAA;AACHE,IAAAA,UAAY,EAAAC,OAAA;AACZC,IAAAA,QAAU,EAAAD,OAAA;AACVE,IAAAA,KAAO,EAAAC,MAAA;AACPC,IAAAA,QAAU,EAAAD,MAAA;AACVE,IAAAA,GAAK,EAAAC,GAAA;AACLC,IAAAA,UAAY,EAAAC,MAAA;AACZC,IAAAA,SAAW,EAAAT,OAAA;AACXU,IAAAA,UAAY,EAAAP,MAAA;AACZQ,IAAAA,QAAU,EAAAX,OAAA;AACVY,IAAAA,YAAc,EAAAC,QAAAA;GAChB,CAAA;EACAC,KAAA,EAAO,CAAC,aAAa,CAAA;AAErBC,EAAAA,KAAA,WAAAA,KAAAA,CAAMlB,QAAOmB,OAAS,EAAA;AACd,IAAA,IAAAC,cAAA,GAAiBC,OAAOC,eAAe,CAAA,CAAA;AAC7C,IAAA,IAAMC,eAAeC,WAAY,EAAA,CAAA;AAC3B,IAAA,IAAAC,mBAAA,GAAYC,kBAAmB,EAAA;MAA7BC,KAAM,GAAAF,mBAAA,CAANE,KAAM,CAAA;IAEd,IAAMC,UAAa,GAAAC,QAAA,CACjB,YAAA;MAAA,OACET,cAAe,CAAAU,KAAA,CAAMC,GAAQ,KAAA,CAAA,IAC7BX,eAAeU,KAAM,CAAAC,GAAA,IAAQX,cAAe,CAAAU,KAAA,CAAME,WAA8B,CAAAC,MAAA,CAAA;AAAA,KACpF,CAAA,CAAA;IACA,IAAMC,QAAW,GAAAL,QAAA,CACf,YAAA;MAAA,OACEN,YAAA,CAAaO,KACZ9B,IAAAA,MAAAA,CAAMI,QAAY,IAAAwB,UAAA,CAAWE,KAAS,IAAA,CAACK,UAAW,CAAAL,KAAA,IAAS,CAACV,cAAA,CAAeU,KAAM,CAAAM,UAAA,CAAA;AAAA,KACtF,CAAA,CAAA;AAEA,IAAA,IAAMC,gBAAgBC,UAAW,EAAA,CAAA;AAE3B,IAAA,IAAAC,UAAA,GAAaC,eAAe,QAAQ,CAAA,CAAA;AAC1C,IAAA,IAAAC,mBAAA,GAAyBC,kBAAmB,EAAA;MAApCC,MAAA,GAAAF,mBAAA,CAAAE,MAAA;MAAQC,IAAK,GAAAH,mBAAA,CAALG,IAAK,CAAA;AACrB,IAAA,IAAMC,QAAQC,GAAiB,EAAA,CAAA;AAEzB,IAAA,IAAAC,OAAA,GAAUD,IAAI,KAAK,CAAA,CAAA;AAEnB,IAAA,IAAAX,UAAA,GAAaN,SAAS,YAAM;AAChC,MAAA,IAAIT,cAAe,CAAAU,KAAA,CAAMM,UAAc,IAAA,CAACpC,MAAM,CAAAkC,QAAA,EAAiB,OAAA,IAAA,CAAA;MAC/D,OAAO,CAAClC,MAAAA,CAAMI,QACV,GAAAgB,cAAA,CAAeU,KAAM,CAAAE,WAAA,KAAgBhC,MAAM,CAAA8B,KAAA,GAC1CV,cAAe,CAAAU,KAAA,CAAME,WAA8B,CAAAgB,QAAA,CAAShD,OAAM8B,KAAK,CAAA,CAAA;AAC9E,KAAC,CAAA,CAAA;AAEK,IAAA,IAAAmB,eAAA,GAAkBpB,SAAS,YAAM;AACrC,MAAA,IAAI,CAAC7B,MAAM,CAAAc,QAAA,EAAiB,OAAA,KAAA,CAAA;AAC5B,MAAA,OAAOM,eAAeU,KAAM,CAAAoB,aAAA,CAAA;AAC9B,KAAC,CAAA,CAAA;IAEK,IAAAC,OAAA,GAAUtB,SAAS,YAAA;AAAA,MAAA,OAAM,CAAAuB,EAAAA,CAAAA,MAAA,CAC1Bb,UAAW,CAAAT,KAAA,EAAA,SAAA,CAAA,EACd,CAACc,IAAA,CAAKd,KAAM,CAAAV,cAAA,CAAeU,MAAMuB,IAAK,CAAA,CAAA,EAAAC,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAEnCX,EAAAA,EAAAA,MAAA,CAAOb,KAAM,CAAAI,QAAA,EAAWA,QAAS,CAAAJ,KAAA,CACjCa,EAAAA,MAAA,CAAOb,KAAM,CAAAyB,QAAA,EAAWpB,UAAW,CAAAL,KAAA,CAAA,EAAA,EAAA,CAAAsB,MAAA,CAChCb,UAAW,CAAAT,KAAA,qBAAA,CACZiB,OAAQ,CAAAjB,KAAA,IAASV,cAAe,CAAAU,KAAA,CAAM0B,UAAexD,KAAAA,MAAAA,CAAMK,KAAU,KAAA,CAAC6B,QAAS,CAAAJ,KAAA,CAErF,CAAA,CAAA;KAAA,CAAA,CAAA;IAED,IAAM2B,YAAY5B,QAAS,CAAA,YAAA;AAAA,MAAA,OAAM7B,MAAM,CAAA0D,KAAA,IAAS1D,OAAM8B,KAAK,CAAA;KAAA,CAAA,CAAA;AAErD,IAAA,IAAA6B,WAAA,GAAc,SAAdA,WAAAA,CAAeC,CAAkC,EAAA;AACjD5D,MAAAA,IAAAA,MAAAA,CAAMkC,YAAYA,QAAS,CAAAJ,KAAA,EAAO,OAAA;MACtC,IAAI9B,OAAMI,QAAU,EAAA;AAClByD,QAAAA,mBAAA,CAAoB,CAAC1B,UAAA,CAAWL,KAAO,EAAA;AAAE8B,UAAAA,GAAAA,CAAAA;AAAE,SAAC,CAAA,CAAA;QAC5CA,CAAA,CAAEE,cAAe,EAAA,CAAA;AACjB,QAAA,OAAA;AACF,OAAA;MAEA,IAAI9D,OAAME,UAAY,EAAA;QAAA,IAAA6D,qBAAA,EAAAC,sBAAA,CAAA;QACL,CAAAD,qBAAA,IAAAC,sBAAA,GAAA5C,cAAA,CAAAU,KAAA,EAAMmC,YAAejE,MAAAA,IAAAA,IAAAA,qBAAAA,KAArB+D,KAAAA,CAAAA,IAAAA,qBAAA,CAAAnE,IAAA,CAAAoE,sBAAA,EAAqBhE,MAAAA,CAAM8B,KAAK,CAAA,CAAA;AAC3C,QAAA,IAAAV,cAAA,CAAeU,MAAM1B,QAAU,EAAA;AACjCgB,UAAAA,cAAA,CAAeU,KAAM,CAAAoC,iBAAA,CAAAd,EAAAA,CAAAA,MAAA,CAAAe,kBAAA,CACd/C,cAAA,CAAeU,KAAM,CAAAE,WAAA,IAA+BhC,OAAM8B,KAAK,CACpE,CAAA,EAAA;AACEsC,YAAAA,eAAA,EAAiBhD,cAAe,CAAAU,KAAA,CAAMuC,kBAAmB,EAAA;AACzDC,YAAAA,OAAS,EAAA,OAAA;AACTV,YAAAA,CAAA,EAAAA,CAAAA;AACF,WACF,CAAA,CAAA;AACA,UAAA,OAAA;AACF,SAAA;AACF,OAAA;MACA,IAAMQ,eAAkB,GAAAhD,cAAA,CAAeU,KAAM,CAAAuC,kBAAA,CAAmBrE,OAAM8B,KAAK,CAAA,CAAA;MAC5DV,cAAA,CAAAU,KAAA,CAAMoC,iBAAkBlE,CAAAA,MAAAA,CAAM8B,KAAO,EAAA;QAClDyC,QAAQH,eAAkB,KAAlBA,IAAAA,IAAAA,eAAkB,uBAAlBA,eAAkB,CAAA,CAAA,CAAA;AAC1BA,QAAAA,eAAA,EAAAA,eAAA;AACAE,QAAAA,OAAS,EAAA,OAAA;AACTV,QAAAA,CAAA,EAAAA,CAAAA;AACF,OAAC,CAAA,CAAA;AACDxC,MAAAA,cAAA,CAAeU,KAAM,CAAA0C,wBAAA,CAAyB,KAAO,EAAA;AAAEZ,QAAAA,GAAAA,CAAAA;AAAE,OAAC,CAAA,CAAA;AAC3CxC,MAAAA,cAAA,CAAAU,KAAA,CAAM2C,SAASb,CAAC,CAAA,CAAA;KACjC,CAAA;IAEM,IAAAC,mBAAA,GAAsB,SAAtBA,mBAAAA,CAAuBa,GAAA,EAAcvD,QAA+C,EAAA;AAAA,MAAA,IAAAwD,sBAAA,CAAA;MACxF,IAAI3E,OAAMc,QAAU,EAAA;AACHM,QAAAA,cAAA,CAAAU,KAAA,CAAM8C,iBAAiBF,GAAG,CAAA,CAAA;AACzC,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAMG,WAAWC,mBAAoB,CAAA1D,cAAA,CAAeU,KAAM,CAAAE,WAAA,EAA8BhC,OAAM8B,KAAK,CAAA,CAAA;MACnG,IAAMsC,eAAkB,GAAAhD,cAAA,CAAeU,KAAM,CAAAuC,kBAAA,CAAmBQ,SAAS/C,KAAK,CAAA,CAAA;MAE9E,IAAMiD,0CAAgB3D,cAAe,CAAAU,KAAA,CAAMuC,kBAAmBrE,CAAAA,MAAAA,CAAM8B,KAAK,CAAI,MAAA6C,IAAAA,IAAAA,sBAAA,uBAAvDA,sBAAA,CAAuD,CAAA,CAAA,CAAA;MAC9DvD,cAAA,CAAAU,KAAA,CAAMoC,iBAAkB,CAAAW,QAAA,CAAS/C,KAAO,EAAA;AACrDyC,QAAAA,MAAQ,EAAAQ,aAAA;AACRX,QAAAA,eAAA,EAAAA,eAAA;AACAE,QAAAA,OAAA,EAASI,MAAM,OAAU,GAAA,SAAA;QACzBd,GAAGzC,QAAQ,CAAAyC,CAAAA;AACb,OAAC,CAAA,CAAA;KACH,CAAA;AAEA,IAAA,IAAMoB,cAAc,SAAdA,cAAoB;AAClB,MAAA,IAAAC,MAAA,GAAStD,KAAM,CAAA3B,KAAA,IAAS,EAAC,CAAA;MAE/B,IAAIkF,OAAQ,CAAAC,GAAA,CAAIF,MAAQ,EAAA,OAAO,CAAG,EAAA;QAChC,OAAOjF,MAAM,CAAAoF,KAAA,CAAA;AACf,OAAA;MACI,IAAA,OAAO3B,UAAU3B,KAAU,KAAA,QAAA,EAAU,OAAO2B,SAAU,CAAA3B,KAAA,CAAA;AAEnD,MAAA,OAAA,IAAA,CAAA;KACT,CAAA;AAGAuD,IAAAA,SAAA,CAAU,YAAM;AACd,MAAA,IAAQ7E,GAAA,GAA6BR,MAAAA,CAA7BQ,GAAA;QAAKD,QAAU,GAAcP,MAAAA,CAAxBO,QAAU;QAAAK,SAAA,GAAcZ,MAAAA,CAAdY,SAAA,CAAA;AACvB,MAAA,IAAIA,SAAW,EAAA;QACTJ,GAAA,CAAA8E,GAAA,CAAI/E,QAAU,EAAAsC,KAAA,CAAMf,KAAK,CAAA,CAAA;AAC7BX,QAAAA,OAAA,CAAQoE,KAAK,aAAa,CAAA,CAAA;AAC5B,OAAA;AACF,KAAC,CAAA,CAAA;AAGDC,IAAAA,eAAA,CAAgB,YAAM;MACpB,IAAIxF,OAAMY,SAAW,EAAA;AACb,QAAA,IAAEJ,GAAK,GAAaR,MAAAA,CAAlBQ,GAAK;UAAAD,QAAA,GAAaP,MAAAA,CAAbO,QAAA,CAAA;QACbC,GAAA,CAAA,QAAA,EAAWD,QAAQ,CAAA,CAAA;AACrB,OAAA;AACF,KAAC,CAAA,CAAA;IAEDkF,SAAA,CAAU5C,KAAK,CAAA,CAAA;AAEf,IAAA,OAAO,YAAM;MACX,IAAM6C,WAAc,GAAArD,aAAA,CAAc,SAAW,EAAA,SAAS,KAAKoB,SAAU,CAAA3B,KAAA,CAAA;AAGnE,MAAA,OAAA6D,WAAA,CAAA,IAAA,EAAA;AAAA,QAAA,KAAA,EACO9C,KAAA;QAAA,OACEM,EAAAA,OAAQ,CAAArB,KAAA;QAAA,OACRkD,EAAAA,WAAY,EAAA;AAAA,QAAA,cAAA,EACL,SAAAY,YAAA,GAAA;AAAA,UAAA,OAAO7C,OAAA,CAAQjB,QAAQ,IACrC,CAAA;AAAA,SAAA;AAAA,QAAA,cAAA,EAAc,SAAA+D,YAAA,GAAA;AAAA,UAAA,OAAO9C,OAAQ,CAAAjB,KAAA,GAAQ,KACrC,CAAA;AAAA,SAAA;QAAA,SAAS6B,EAAAA,WAAAA;OAERvC,EAAAA,CAAAA,cAAA,IAAkBpB,OAAMI,QACvB,GAAAuF,WAAA,CAAAG,QAAA,EAAA;QAAA,SACW3D,EAAAA,UAAA,CAAWL;kBACVI,EAAAA,QAAA,CAASJ;oBACT+B,mBAAA;AAAA,QAAA,eAAA,EACKZ,eAAgB,CAAAnB,KAAAA;AAAA,OAAA,EAAAvC,OAAA,CAE9BmG,eAAAA;;kBAAAA;;uBAGIA,MAAAA,EAAAA,IAAAA,EAAAA,CAAAA,WAAA,CAAN,CAAA,CAAA,CAAA,CAAA;KAIT,CAAA;AACF,GAAA;AACF,CAAC,CAAA;;;;"}