{"version":3,"file":"select-dropdown.mjs","sources":["../../../../../../packages/components/select-v2/src/select-dropdown.tsx"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  inject,\n  ref,\n  toRaw,\n  unref,\n  watch,\n} from 'vue'\nimport { get } from 'lodash-unified'\nimport { isObject, isUndefined } from '@lit-element/utils'\nimport {\n  DynamicSizeList,\n  FixedSizeList,\n} from '@lit-element/components/virtual-list'\nimport { useNamespace } from '@lit-element/hooks'\nimport { EVENT_CODE } from '@lit-element/constants'\nimport GroupItem from './group-item.vue'\nimport OptionItem from './option-item.vue'\nimport { useProps } from './useProps'\n\nimport { selectV2InjectionKey } from './token'\n\nimport type { ItemProps } from '@lit-element/components/virtual-list'\nimport type { Option, OptionItemProps } from './select.types'\n\nexport default defineComponent({\n  name: 'LtSelectDropdown',\n\n  props: {\n    loading: Boolean,\n    data: {\n      type: Array,\n      required: true,\n    },\n    hoveringIndex: Number,\n    width: Number,\n  },\n  setup(props, { slots, expose }) {\n    const select = inject(selectV2InjectionKey)!\n    const ns = useNamespace('select')\n    const { getLabel, getValue, getDisabled } = useProps(select.props)\n\n    const cachedHeights = ref<Array<number>>([])\n\n    const listRef = ref()\n\n    const size = computed(() => props.data.length)\n    watch(\n      () => size.value,\n      () => {\n        select.tooltipRef.value.updatePopper?.()\n      }\n    )\n\n    const isSized = computed(() =>\n      isUndefined(select.props.estimatedOptionHeight)\n    )\n    const listProps = computed(() => {\n      if (isSized.value) {\n        return {\n          itemSize: select.props.itemHeight,\n        }\n      }\n\n      return {\n        estimatedSize: select.props.estimatedOptionHeight,\n        itemSize: (idx: number) => cachedHeights.value[idx],\n      }\n    })\n\n    const contains = (arr: Array<any> = [], target: any) => {\n      const {\n        props: { valueKey },\n      } = select\n\n      if (!isObject(target)) {\n        return arr.includes(target)\n      }\n\n      return (\n        arr &&\n        arr.some((item) => {\n          return toRaw(get(item, valueKey)) === get(target, valueKey)\n        })\n      )\n    }\n    const isEqual = (selected: unknown, target: unknown) => {\n      if (!isObject(target)) {\n        return selected === target\n      } else {\n        const { valueKey } = select.props\n        return get(selected, valueKey) === get(target, valueKey)\n      }\n    }\n\n    const isItemSelected = (modelValue: any[] | any, target: Option) => {\n      if (select.props.multiple) {\n        return contains(modelValue, getValue(target))\n      }\n      return isEqual(modelValue, getValue(target))\n    }\n\n    const isItemDisabled = (modelValue: any[] | any, selected: boolean) => {\n      const { disabled, multiple, multipleLimit } = select.props\n      return (\n        disabled ||\n        (!selected &&\n          (multiple\n            ? multipleLimit > 0 && modelValue.length >= multipleLimit\n            : false))\n      )\n    }\n\n    const isItemHovering = (target: number) => props.hoveringIndex === target\n\n    const scrollToItem = (index: number) => {\n      const list = listRef.value as any\n      if (list) {\n        list.scrollToItem(index)\n      }\n    }\n\n    const resetScrollTop = () => {\n      const list = listRef.value as any\n      if (list) {\n        list.resetScrollTop()\n      }\n    }\n\n    expose({\n      listRef,\n      isSized,\n\n      isItemDisabled,\n      isItemHovering,\n      isItemSelected,\n      scrollToItem,\n      resetScrollTop,\n    })\n\n    const Item = (itemProps: ItemProps<any>) => {\n      const { index, data, style } = itemProps\n      const sized = unref(isSized)\n      const { itemSize, estimatedSize } = unref(listProps)\n      const { modelValue } = select.props\n      const { onSelect, onHover } = select\n      const item = data[index]\n      if (item.type === 'Group') {\n        return (\n          <GroupItem\n            item={item}\n            style={style}\n            height={(sized ? itemSize : estimatedSize) as number}\n          />\n        )\n      }\n\n      const isSelected = isItemSelected(modelValue, item)\n      const isDisabled = isItemDisabled(modelValue, isSelected)\n      const isHovering = isItemHovering(index)\n      return (\n        <OptionItem\n          {...itemProps}\n          selected={isSelected}\n          disabled={getDisabled(item) || isDisabled}\n          created={!!item.created}\n          hovering={isHovering}\n          item={item}\n          onSelect={onSelect}\n          onHover={onHover}\n        >\n          {{\n            default: (props: OptionItemProps) =>\n              slots.default?.(props) || <span>{getLabel(item)}</span>,\n          }}\n        </OptionItem>\n      )\n    }\n\n    // computed\n    const { onKeyboardNavigate, onKeyboardSelect } = select\n\n    const onForward = () => {\n      onKeyboardNavigate('forward')\n    }\n\n    const onBackward = () => {\n      onKeyboardNavigate('backward')\n    }\n\n    const onEscOrTab = () => {\n      select.expanded = false\n    }\n\n    const onKeydown = (e: KeyboardEvent) => {\n      const { code } = e\n      const { tab, esc, down, up, enter } = EVENT_CODE\n      if (code !== tab) {\n        e.preventDefault()\n        e.stopPropagation()\n      }\n\n      switch (code) {\n        case tab:\n        case esc: {\n          onEscOrTab()\n          break\n        }\n        case down: {\n          onForward()\n          break\n        }\n        case up: {\n          onBackward()\n          break\n        }\n        case enter: {\n          onKeyboardSelect()\n          break\n        }\n      }\n    }\n\n    return () => {\n      const { data, width } = props\n      const { height, multiple, scrollbarAlwaysOn } = select.props\n\n      const List = unref(isSized) ? FixedSizeList : DynamicSizeList\n\n      return (\n        <div\n          class={[ns.b('dropdown'), ns.is('multiple', multiple)]}\n          style={{\n            width: `${width}px`,\n          }}\n        >\n          {slots.header?.()}\n          {slots.loading?.() || slots.empty?.() || (\n            <List\n              ref={listRef}\n              {...unref(listProps)}\n              className={ns.be('dropdown', 'list')}\n              scrollbarAlwaysOn={scrollbarAlwaysOn}\n              data={data}\n              height={height}\n              width={width}\n              total={data.length}\n              // @ts-ignore - dts problem\n              onKeydown={onKeydown}\n            >\n              {{\n                default: (props: ItemProps<any>) => <Item {...props} />,\n              }}\n            </List>\n          )}\n          {slots.footer?.()}\n        </div>\n      )\n    }\n  },\n})\n"],"names":["defineComponent","name","props","loading","Boolean","data","type","Array","required","hoveringIndex","Number","width","setup","slots","expose","select","inject","selectV2InjectionKey","ns","useNamespace","getLabel","getValue","getDisabled","useProps","cachedHeights","ref","listRef","size","computed","length","watch","value","listProps","isSized","itemSize","estimatedSize","contains","valueKey","isObject","includes","target","selected","isEqual","multiple","multipleLimit","isItemHovering","scrollToItem","index","list","resetScrollTop","isItemDisabled","isItemSelected","Item","style","unref","modelValue","onHover","_createVNode","sized","isDisabled","isSelected","isHovering","_mergeProps","onSelect","default","onKeyboardNavigate","onKeyboardSelect","onForward","onBackward","onEscOrTab","onKeydown","e","code","down","up","enter","EVENT_CODE","preventDefault","stopPropagation","height","scrollbarAlwaysOn","List"],"mappings":"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"}