{"version":3,"file":"select-panel.mjs","sources":["../../../../components/select/components/select-panel.tsx"],"sourcesContent":["import { computed, defineComponent, inject, Slots, ref } from 'vue';\nimport { omit } from 'lodash-es';\nimport { Styles } from '../../common';\n\nimport { SelectOption, SelectOptionGroup, TdOptionProps } from '../type';\nimport Option from '../option';\nimport OptionGroup from '../option-group';\nimport TdSelectProps from '../props';\n\nimport { useConfig, useTNodeJSX, usePrefixClass, useTNodeDefault } from '@tdesign/shared-hooks';\n\nimport { usePanelVirtualScroll } from '../hooks';\nimport { selectInjectKey } from '../constants';\nimport type { TdSelectProps as SelectProps } from '../type';\n\nexport default defineComponent({\n  name: 'TSelectPanel',\n  props: {\n    inputValue: TdSelectProps.inputValue,\n    panelTopContent: TdSelectProps.panelTopContent,\n    panelBottomContent: TdSelectProps.panelBottomContent,\n    empty: TdSelectProps.empty,\n    creatable: TdSelectProps.creatable,\n    loading: TdSelectProps.loading,\n    loadingText: TdSelectProps.loadingText,\n    multiple: TdSelectProps.multiple,\n    filterable: TdSelectProps.filterable,\n    filter: TdSelectProps.filter,\n    scroll: TdSelectProps.scroll,\n    keys: TdSelectProps.keys,\n  },\n  setup(props, { expose }) {\n    const COMPONENT_NAME = usePrefixClass('select');\n    const renderTNodeJSX = useTNodeJSX();\n    const renderDefaultTNode = useTNodeDefault();\n    const { t, globalConfig } = useConfig('select');\n    const tSelect = inject(selectInjectKey);\n    const innerRef = ref<HTMLElement>(null);\n    const keys = computed(() => props.keys as SelectProps['keys']);\n\n    const popupContentRef = computed(() => tSelect.value.popupContentRef.value);\n    const showCreateOption = computed(() => props.creatable && props.filterable && props.inputValue);\n    const displayOptions = computed(() => tSelect.value.displayOptions);\n\n    const { trs, visibleData, handleRowMounted, isVirtual, panelStyle, cursorStyle } = usePanelVirtualScroll({\n      scroll: props.scroll,\n      popupContentRef,\n      options: displayOptions,\n    });\n\n    const isEmpty = computed(() => !displayOptions.value.length);\n\n    const renderCreateOption = () => (\n      <ul class={[`${COMPONENT_NAME.value}__create-option`, `${COMPONENT_NAME.value}__list`]}>\n        <Option\n          value={props.inputValue}\n          label={`${props.inputValue}`}\n          createAble={true}\n          class={`${COMPONENT_NAME.value}__create-option--special`}\n        />\n      </ul>\n    );\n\n    // 递归render options\n    const renderOptionsContent = (options: SelectOption[]) => {\n      return (\n        <ul class={`${COMPONENT_NAME.value}__list`}>\n          {options.map((item: SelectOptionGroup & TdOptionProps & { slots: Slots } & { $index: number }, index) => {\n            if (item.children) {\n              return (\n                <OptionGroup label={item.group} divider={item.divider}>\n                  {renderOptionsContent(item.children)}\n                </OptionGroup>\n              );\n            }\n\n            const defaultOmit = ['index', '$index', 'className', 'tagName'];\n\n            const { value, label, disabled } = keys.value || {};\n            // 如果 keys 中刚好有 content，则移除 content 渲染 https://github.com/Tencent/tdesign-vue-next/issues/5088\n            const shouldOmitContent = [value, label, disabled].includes('content');\n            const option = omit(item, defaultOmit.concat(shouldOmitContent ? 'content' : []));\n\n            return (\n              <Option\n                {...option}\n                {...(isVirtual.value\n                  ? {\n                      rowIndex: item.$index,\n                      trs,\n                      scrollType: props.scroll?.type,\n                      isVirtual: isVirtual.value,\n                      bufferSize: props.scroll?.bufferSize,\n                      key: `${item.$index || ''}_${index}_${item.value}`,\n                    }\n                  : {\n                      key: `${index}_${item.value}`,\n                    })}\n                index={index}\n                multiple={props.multiple}\n                v-slots={item.slots}\n                onRowMounted={handleRowMounted}\n              />\n            );\n          })}\n        </ul>\n      );\n    };\n    const dropdownInnerSize = computed(() => {\n      return {\n        small: 's',\n        medium: 'm',\n        large: 'l',\n      }[tSelect.value.size];\n    });\n\n    expose({\n      innerRef,\n      visibleData, // 虚拟滚动的展示数据\n      isVirtual,\n      displayOptions, // 非虚拟滚动的展示数据\n    });\n\n    const renderPanel = (options: SelectOption[], extraStyle?: Styles) => (\n      <div\n        ref={innerRef}\n        class={[\n          `${COMPONENT_NAME.value}__dropdown-inner`,\n          `${COMPONENT_NAME.value}__dropdown-inner--size-${dropdownInnerSize.value}`,\n        ]}\n        style={extraStyle}\n      >\n        {/* create option */}\n        {showCreateOption.value && renderCreateOption()}\n        {/* loading状态 */}\n        {props.loading &&\n          renderDefaultTNode('loadingText', {\n            defaultNode: <div class={`${COMPONENT_NAME.value}__loading-tips`}>{t(globalConfig.value.loadingText)}</div>,\n          })}\n        {/* 空状态 */}\n        {!props.loading && isEmpty.value && !showCreateOption.value && (\n          <div class={`${COMPONENT_NAME.value}__empty`}>{renderTNodeJSX('empty') || t(globalConfig.value.empty)}</div>\n        )}\n        {!isEmpty.value && renderOptionsContent(options)}\n      </div>\n    );\n\n    return () => {\n      return isVirtual.value ? (\n        <>\n          {renderTNodeJSX('panelTopContent')}\n          <div>\n            <div style={cursorStyle.value}></div>\n            {renderPanel(visibleData.value, panelStyle.value)}\n          </div>\n          {renderTNodeJSX('panelBottomContent')}\n        </>\n      ) : (\n        <>\n          {renderTNodeJSX('panelTopContent')}\n          {renderPanel(displayOptions.value)}\n          {renderTNodeJSX('panelBottomContent')}\n        </>\n      );\n    };\n  },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","props","inputValue","TdSelectProps","panelTopContent","panelBottomContent","empty","creatable","loading","loadingText","multiple","filterable","filter","scroll","keys","setup","_ref","expose","COMPONENT_NAME","usePrefixClass","renderTNodeJSX","useTNodeJSX","renderDefaultTNode","useTNodeDefault","_useConfig","useConfig","t","globalConfig","tSelect","inject","selectInjectKey","innerRef","ref","computed","popupContentRef","value","showCreateOption","displayOptions","_usePanelVirtualScrol","usePanelVirtualScroll","options","trs","visibleData","handleRowMounted","isVirtual","panelStyle","cursorStyle","isEmpty","length","renderCreateOption","_createVNode","concat","Option","renderOptionsContent","map","item","index","_props$scroll","_props$scroll2","children","_slot","OptionGroup","group","divider","_default","defaultOmit","_ref2","label","disabled","shouldOmitContent","includes","option","omit","_mergeProps","rowIndex","$index","scrollType","type","bufferSize","key","slots","dropdownInnerSize","small","medium","large","size","renderPanel","extraStyle","defaultNode","_Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYgC,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,kBAAeM,eAAgB,CAAA;AAC7BC,EAAAA,IAAM,EAAA,cAAA;AACNC,EAAAA,KAAO,EAAA;IACLC,YAAYC,KAAc,CAAAD,UAAA;IAC1BE,iBAAiBD,KAAc,CAAAC,eAAA;IAC/BC,oBAAoBF,KAAc,CAAAE,kBAAA;IAClCC,OAAOH,KAAc,CAAAG,KAAA;IACrBC,WAAWJ,KAAc,CAAAI,SAAA;IACzBC,SAASL,KAAc,CAAAK,OAAA;IACvBC,aAAaN,KAAc,CAAAM,WAAA;IAC3BC,UAAUP,KAAc,CAAAO,QAAA;IACxBC,YAAYR,KAAc,CAAAQ,UAAA;IAC1BC,QAAQT,KAAc,CAAAS,MAAA;IACtBC,QAAQV,KAAc,CAAAU,MAAA;IACtBC,MAAMX,KAAc,CAAAW,IAAAA;GACtB;AACAC,EAAAA,KAAM,WAANA,KAAMA,CAAAd,KAAA,EAAAe,IAAA,EAAmB;AAAA,IAAA,IAAVC,MAAA,GAAAD,IAAA,CAAAC,MAAA,CAAA;AACP,IAAA,IAAAC,cAAA,GAAiBC,eAAe,QAAQ,CAAA,CAAA;AAC9C,IAAA,IAAMC,iBAAiBC,WAAY,EAAA,CAAA;AACnC,IAAA,IAAMC,qBAAqBC,eAAgB,EAAA,CAAA;AAC3C,IAAA,IAAAC,UAAA,GAA4BC,UAAU,QAAQ,CAAA;MAAtCC,CAAA,GAAAF,UAAA,CAAAE,CAAA;MAAGC,YAAa,GAAAH,UAAA,CAAbG,YAAa,CAAA;AAClB,IAAA,IAAAC,OAAA,GAAUC,OAAOC,eAAe,CAAA,CAAA;AAChC,IAAA,IAAAC,QAAA,GAAWC,IAAiB,IAAI,CAAA,CAAA;IACtC,IAAMlB,IAAO,GAAAmB,QAAA,CAAS,YAAA;MAAA,OAAMhC,KAAA,CAAMa,IAA2B,CAAA;KAAA,CAAA,CAAA;IAE7D,IAAMoB,kBAAkBD,QAAS,CAAA,YAAA;AAAA,MAAA,OAAML,OAAQ,CAAAO,KAAA,CAAMD,gBAAgBC,KAAK,CAAA;KAAA,CAAA,CAAA;IACpE,IAAAC,gBAAA,GAAmBH,SAAS,YAAA;MAAA,OAAMhC,KAAA,CAAMM,aAAaN,KAAM,CAAAU,UAAA,IAAcV,MAAMC,UAAU,CAAA;KAAA,CAAA,CAAA;IAC/F,IAAMmC,cAAiB,GAAAJ,QAAA,CAAS,YAAA;AAAA,MAAA,OAAML,OAAA,CAAQO,MAAME,cAAc,CAAA;KAAA,CAAA,CAAA;IAE5D,IAAAC,qBAAA,GAA6EC,qBAAsB,CAAA;QACvG1B,QAAQZ,KAAM,CAAAY,MAAA;AACdqB,QAAAA,eAAA,EAAAA,eAAA;AACAM,QAAAA,OAAS,EAAAH,cAAAA;AACX,OAAC,CAAA;MAJOI,4BAAAA;MAAKC,WAAa,GAAAJ,qBAAA,CAAbI,WAAa;MAAAC,gBAAA,GAAAL,qBAAA,CAAAK,gBAAA;MAAkBC,kCAAAA;MAAWC,UAAY,GAAAP,qBAAA,CAAZO,UAAY;MAAAC,WAAA,GAAAR,qBAAA,CAAAQ,WAAA,CAAA;IAMnE,IAAMC,UAAUd,QAAS,CAAA,YAAA;AAAA,MAAA,OAAM,CAACI,cAAA,CAAeF,MAAMa,MAAM,CAAA;KAAA,CAAA,CAAA;AAE3D,IAAA,IAAMC,kBAAqB,GAAA,SAArBA,kBAAqBA,GAAA;AAAA,MAAA,OAAAC,WAAA,CAAA,IAAA,EAAA;QAAA,OACd,EAAA,CAAA,EAAA,CAAAC,MAAA,CAAIjC,cAAA,CAAeiB,KAAwB,EAAA,iBAAA,CAAA,EAAA,EAAA,CAAAgB,MAAA,CAAGjC,cAAe,CAAAiB,KAAA,EAAA,QAAA,CAAA,CAAA;OACtEe,EAAAA,CAAAA,WAAA,CAAAE,OAAA,EAAA;QAAA,OACSnD,EAAAA,KAAM,CAAAC,UAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAiD,MAAA,CACHlD,KAAM,CAAAC,UAAA,CAAA;AAAA,QAAA,YAAA,EACJ,IAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAiD,MAAA,CACFjC,cAAe,CAAAiB,KAAA,EAAA,0BAAA,CAAA;AAAA,OAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;KAL5B,CAAA;AAWG,IAAA,IAAAkB,qBAAA,GAAuB,SAAvBA,oBAAAA,CAAwBb,OAA4B,EAAA;AAEtD,MAAA,OAAAU,WAAA,CAAA,IAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAC,MAAA,CAAcjC,cAAA,CAAeiB;OAC1BK,EAAAA,CAAAA,OAAQ,CAAAc,GAAA,CAAI,UAACC,IAAA,EAAiFC,KAAU,EAAA;QAAA,IAAAC,aAAA,EAAAC,cAAA,CAAA;QACvG,IAAIH,KAAKI,QAAU,EAAA;AAAA,UAAA,IAAAC,KAAA,CAAA;UACjB,OAAAV,WAAA,CAAAW,YAAA,EAAA;YAAA,OACsBN,EAAAA,IAAA,CAAKO,KAAO;AAAA,YAAA,SAAA,EAASP,IAAK,CAAAQ,OAAAA;WAAAvE,EAAAA,OAAA,CAAAoE,KAAA,GAC3CP,qBAAqB,CAAAE,IAAA,CAAKI,QAAQ,CAAA,CAAA,GAAAC,KAAA,GAAA;AAAA,YAAA,SAAA,EAAA,SAAAI,QAAA,GAAA;AAAA,cAAA,OAAA,CAAAJ,KAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAGzC,SAAA;QAEA,IAAMK,WAAc,GAAA,CAAC,OAAS,EAAA,QAAA,EAAU,aAAa,SAAS,CAAA,CAAA;AAE9D,QAAA,IAAAC,KAAA,GAAmCpD,IAAA,CAAKqB,SAAS,EAAC;UAA1CA,KAAO,GAAA+B,KAAA,CAAP/B,KAAO;UAAAgC,KAAA,GAAAD,KAAA,CAAAC,KAAA;UAAOC,iBAAAA;AAEtB,QAAA,IAAMC,oBAAoB,CAAClC,KAAA,EAAOgC,OAAOC,QAAQ,CAAA,CAAEE,SAAS,SAAS,CAAA,CAAA;AAC/D,QAAA,IAAAC,MAAA,GAASC,KAAKjB,IAAM,EAAAU,WAAA,CAAYd,OAAOkB,iBAAoB,GAAA,SAAA,GAAY,EAAE,CAAC,CAAA,CAAA;QAEhF,OAAAnB,WAAA,CAAAE,OAAA,EAAAqB,UAAA,CAEQF,MACC,EAAA3B,SAAA,CAAUT,KACX,GAAA;UACEuC,UAAUnB,IAAK,CAAAoB,MAAA;AACflC,UAAAA,GAAA,EAAAA,GAAA;UACAmC,UAAA,EAAA,CAAAnB,aAAA,GAAYxD,MAAMY,MAAQ,MAAA,IAAA,IAAA4C,aAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,aAAA,CAAcoB,IAAA;UAC1BjC,WAAWA,SAAU,CAAAT,KAAA;UACrB2C,UAAA,EAAA,CAAApB,cAAA,GAAYzD,MAAMY,MAAQ,MAAA,IAAA,IAAA6C,cAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,cAAA,CAAcoB,UAAA;AAC1BC,UAAAA,eAAQxB,IAAA,CAAKoB,MAAU,IAAA,EAAA,EAAAxB,GAAAA,CAAAA,CAAAA,MAAA,CAAMK,mBAASD,IAAK,CAAApB,KAAA,CAAA;AAC7C,SACA,GAAA;UACE4C,GAAA,EAAA,EAAA,CAAA5B,MAAA,CAAQK,KAAA,OAAAL,MAAA,CAASI,IAAK,CAAApB,KAAA,CAAA;SACxB,EAAA;AAAA,UAAA,OAAA,EACGqB,KAAA;UAAA,UACGvD,EAAAA,KAAA,CAAMS;wBAEFiC,EAAAA,gBAAAA;SADLY,CAAAA,EAAAA,IAAA,CAAKyB,KACd,CAAA,CAAA;AAGN,OAAC;KAGP,CAAA;AACM,IAAA,IAAAC,iBAAA,GAAoBhD,SAAS,YAAM;MAChC,OAAA;AACLiD,QAAAA,KAAO,EAAA,GAAA;AACPC,QAAAA,MAAQ,EAAA,GAAA;AACRC,QAAAA,KAAO,EAAA,GAAA;AACT,OAAA,CAAExD,QAAQO,KAAM,CAAAkD,IAAA,CAAA,CAAA;AAClB,KAAC,CAAA,CAAA;AAEMpE,IAAAA,MAAA,CAAA;AACLc,MAAAA,QAAA,EAAAA,QAAA;AACAW,MAAAA,WAAA,EAAAA,WAAA;AACAE,MAAAA,SAAA,EAAAA,SAAA;AACAP,MAAAA,cAAA,EAAAA,cAAAA;AACF,KAAC,CAAA,CAAA;AAEK,IAAA,IAAAiD,WAAA,GAAc,SAAdA,WAAAA,CAAe9C,OAAyB,EAAA+C,UAAA,EAAA;AAAA,MAAA,OAAArC,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,KAAA,EAErCnB;iBACE,IAAAoB,MAAA,CACFjC,cAAe,CAAAiB,KAAA,0BAAAgB,MAAA,CACfjC,cAAe,CAAAiB,KAAA,EAAAgB,yBAAAA,CAAAA,CAAAA,MAAA,CAA+B8B,iBAAkB,CAAA9C,KAAA;eAE9DoD,EAAAA,UAAAA;AAAA,OAAA,EAAA,CAGNnD,gBAAA,CAAiBD,SAASc,kBAAmB,EAAA,EAE7ChD,KAAA,CAAMO,OACL,IAAAc,kBAAA,CAAmB,aAAe,EAAA;AAChCkE,QAAAA,WAAa,EAAAtC,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAAC,MAAA,CAAejC,cAAA,CAAeiB,KAAwB,EAAA,gBAAA,CAAA;AAAA,SAAA,EAAA,CAAAT,CAAA,CAAEC,YAAa,CAAAQ,KAAA,CAAM1B,WAAW,CAAA,CAAA,CAAA;AACrG,OAAC,CAAA,EAEF,CAACR,MAAMO,OAAW,IAAAuC,OAAA,CAAQZ,SAAS,CAACC,gBAAA,CAAiBD,KACpD,IAAAe,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAC,MAAA,CAAejC,cAAe,CAAAiB,KAAA,EAAA,SAAA,CAAA;OAAiBf,EAAAA,CAAAA,eAAe,OAAO,CAAA,IAAKM,EAAEC,YAAa,CAAAQ,KAAA,CAAM7B,KAAK,CAAA,CAAA,CAAnG,EAEF,CAACyC,OAAA,CAAQZ,KAAS,IAAAkB,qBAAA,CAAqBb,OAAO,CAAA,CAAA,CAAA,CAAA;KAnBhD,CAAA;AAuBH,IAAA,OAAO,YAAM;AACX,MAAA,OAAOI,UAAUT,KACf,GAAAe,WAAA,CAAAuC,QAAA,EACGrE,IAAAA,EAAAA,CAAAA,eAAe,iBAAiB,CAAA,EAAA8B,WAAA,eAAAA,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEnBJ,WAAA,CAAYX,KAAAA;AAAO,OAAA,EAAA,IAAA,CAAA,EAC9BmD,WAAY,CAAA5C,WAAA,CAAYP,KAAO,EAAAU,UAAA,CAAWV,KAAK,CAAA,IAEjDf,eAAe,oBAAoB,CAAA,KAAA8B,WAAA,CAAAuC,QAAA,EAAA,IAAA,EAAA,CAInCrE,eAAe,iBAAiB,CAAA,EAChCkE,WAAA,CAAYjD,eAAeF,KAAK,CAAA,EAChCf,eAAe,oBAAoB,CAAA,CACtC,CAAA,CAAA;KAEJ,CAAA;AACF,GAAA;AACF,CAAC,CAAA;;;;"}