{"version":3,"file":"Overflow.cjs","sources":["../../../../../../packages/vue-components/vc-overflow/src/Overflow.tsx"],"sourcesContent":["import type { Key, MouseEventHandler, VueNode } from '@antdv/types';\nimport type { CSSProperties, ExtractPropTypes, HTMLAttributes, PropType } from 'vue';\nimport { classNames, PropTypes } from '@antdv/utils';\nimport { computed, defineComponent, shallowRef, watch } from 'vue';\nimport ResizeObserver from '../../vc-resize-observer/src/index';\nimport { OverflowContextProvider } from './context';\nimport Item from './Item';\nimport RawItem from './RawItem';\n\nconst RESPONSIVE = 'responsive' as const;\nconst INVALIDATE = 'invalidate' as const;\n\nfunction defaultRenderRest<ItemType>(omittedItems: ItemType[]) {\n  return `+ ${omittedItems.length} ...`;\n}\n\nfunction overflowProps() {\n  return {\n    id: String,\n    prefixCls: String,\n    data: Array,\n    itemKey: [String, Number, Function] as PropType<Key | ((item: any) => Key)>,\n    /** Used for `responsive`. It will limit render node to avoid perf issue */\n    itemWidth: { type: Number, default: 10 },\n    renderItem: Function as PropType<(item: any) => VueNode>,\n    /** @private Do not use in your production. Render raw node that need wrap Item by developer self */\n    renderRawItem: Function as PropType<(item: any, index: number) => VueNode>,\n    maxCount: [Number, String] as PropType<number | typeof RESPONSIVE | typeof INVALIDATE>,\n    renderRest: Function as PropType<(items: any[]) => VueNode>,\n    /** @private Do not use in your production. Render raw node that need wrap Item by developer self */\n    renderRawRest: Function as PropType<(items: any[]) => VueNode>,\n    suffix: PropTypes.any,\n    component: String,\n    itemComponent: PropTypes.any,\n    /** @private This API may be refactor since not well design */\n    onVisibleChange: Function as PropType<(visibleCount: number) => void>,\n    /** When set to `full`, ssr will render full items by default and remove at client side */\n    ssr: String as PropType<'full'>,\n    onMousedown: Function as PropType<MouseEventHandler>,\n    role: String,\n  };\n}\ntype InterOverflowProps = Partial<ExtractPropTypes<ReturnType<typeof overflowProps>>>;\nexport type OverflowProps = HTMLAttributes & InterOverflowProps;\nconst Overflow = defineComponent({\n  name: 'Overflow',\n  inheritAttrs: false,\n  props: overflowProps(),\n  emits: ['visibleChange'],\n  setup(props, { attrs, emit, slots }) {\n    const fullySSR = computed(() => props.ssr === 'full');\n\n    const containerWidth = shallowRef<number>(null);\n    const mergedContainerWidth = computed(() => containerWidth.value || 0);\n    const itemWidths = shallowRef<Map<Key, number>>(new Map<Key, number>());\n    const prevRestWidth = shallowRef(0);\n    const restWidth = shallowRef(0);\n    const suffixWidth = shallowRef(0);\n    const suffixFixedStart = shallowRef<number>(null);\n    const displayCount = shallowRef<number>(null);\n\n    const mergedDisplayCount = computed(() => {\n      if (displayCount.value === null && fullySSR.value)\n        return Number.MAX_SAFE_INTEGER;\n\n      return displayCount.value || 0;\n    });\n\n    const restReady = shallowRef(false);\n\n    const itemPrefixCls = computed(() => `${props.prefixCls}-item`);\n\n    // Always use the max width to avoid blink\n    const mergedRestWidth = computed(() => Math.max(prevRestWidth.value, restWidth.value));\n\n    // ================================= Data =================================\n    const isResponsive = computed(() => !!(props.data.length && props.maxCount === RESPONSIVE));\n    const invalidate = computed(() => props.maxCount === INVALIDATE);\n\n    /**\n     * When is `responsive`, we will always render rest node to get the real width of it for calculation\n     */\n    const showRest = computed(\n      () =>\n        isResponsive.value\n        || (typeof props.maxCount === 'number' && props.data.length > props.maxCount),\n    );\n\n    const mergedData = computed(() => {\n      let items = props.data;\n\n      if (isResponsive.value) {\n        if (containerWidth.value === null && fullySSR.value) {\n          items = props.data;\n        } else {\n          items = props.data.slice(\n            0,\n            Math.min(props.data.length, mergedContainerWidth.value / props.itemWidth),\n          );\n        }\n      } else if (typeof props.maxCount === 'number') {\n        items = props.data.slice(0, props.maxCount);\n      }\n\n      return items;\n    });\n\n    const omittedItems = computed(() => {\n      if (isResponsive.value)\n        return props.data.slice(mergedDisplayCount.value + 1);\n\n      return props.data.slice(mergedData.value.length);\n    });\n\n    // ================================= Item =================================\n    const getKey = (item: any, index: number) => {\n      if (typeof props.itemKey === 'function')\n        return props.itemKey(item);\n\n      return (props.itemKey && (item as any)?.[props.itemKey]) ?? index;\n    };\n\n    const mergedRenderItem = computed(() => props.renderItem || ((item: any) => item));\n\n    const updateDisplayCount = (count: number, notReady?: boolean) => {\n      displayCount.value = count;\n      if (!notReady) {\n        restReady.value = count < props.data.length - 1;\n\n        emit('visibleChange', count);\n      }\n    };\n\n    // ================================= Size =================================\n    const onOverflowResize = (_: object, element: HTMLElement) => {\n      containerWidth.value = element.clientWidth;\n    };\n\n    const registerSize = (key: Key, width: number | null) => {\n      const clone = new Map(itemWidths.value);\n\n      if (width === null)\n        clone.delete(key);\n      else\n        clone.set(key, width);\n\n      itemWidths.value = clone;\n    };\n\n    const registerOverflowSize = (_: Key, width: number | null) => {\n      prevRestWidth.value = restWidth.value;\n      restWidth.value = width!;\n    };\n\n    const registerSuffixSize = (_: Key, width: number | null) => {\n      suffixWidth.value = width!;\n    };\n\n    // ================================ Effect ================================\n    const getItemWidth = (index: number) => {\n      return itemWidths.value.get(getKey(mergedData.value[index], index));\n    };\n\n    watch(\n      [mergedContainerWidth, itemWidths, restWidth, suffixWidth, () => props.itemKey, mergedData],\n      () => {\n        if (mergedContainerWidth.value && mergedRestWidth.value && mergedData.value) {\n          let totalWidth = suffixWidth.value;\n\n          const len = mergedData.value.length;\n          const lastIndex = len - 1;\n\n          // When data count change to 0, reset this since not loop will reach\n          if (!len) {\n            updateDisplayCount(0);\n            suffixFixedStart.value = null;\n            return;\n          }\n\n          for (let i = 0; i < len; i += 1) {\n            const currentItemWidth = getItemWidth(i);\n\n            // Break since data not ready\n            if (currentItemWidth === undefined) {\n              updateDisplayCount(i - 1, true);\n              break;\n            }\n\n            // Find best match\n            totalWidth += currentItemWidth;\n\n            if (\n              // Only one means `totalWidth` is the final width\n              (lastIndex === 0 && totalWidth <= mergedContainerWidth.value)\n              // Last two width will be the final width\n              || (i === lastIndex - 1\n                && totalWidth + getItemWidth(lastIndex)! <= mergedContainerWidth.value)\n            ) {\n              // Additional check if match the end\n              updateDisplayCount(lastIndex);\n              suffixFixedStart.value = null;\n              break;\n            } else if (totalWidth + mergedRestWidth.value > mergedContainerWidth.value) {\n              // Can not hold all the content to show rest\n              updateDisplayCount(i - 1);\n              suffixFixedStart.value\n                = totalWidth - currentItemWidth - suffixWidth.value + restWidth.value;\n              break;\n            }\n          }\n\n          if (props.suffix && getItemWidth(0) + suffixWidth.value > mergedContainerWidth.value)\n            suffixFixedStart.value = null;\n        }\n      },\n    );\n\n    return () => {\n      // ================================ Render ================================\n      const displayRest = restReady.value && !!omittedItems.value.length;\n      const {\n        itemComponent,\n        renderRawItem,\n        renderRawRest,\n        renderRest,\n        prefixCls = 'rc-overflow',\n        suffix,\n        component: Component = 'div' as any,\n        id,\n        onMousedown,\n      } = props;\n      const { class: className, style, ...restAttrs } = attrs;\n      let suffixStyle: CSSProperties = {};\n      if (suffixFixedStart.value !== null && isResponsive.value) {\n        suffixStyle = {\n          position: 'absolute',\n          left: `${suffixFixedStart.value}px`,\n          top: 0,\n        };\n      }\n\n      const itemSharedProps = {\n        prefixCls: itemPrefixCls.value,\n        responsive: isResponsive.value,\n        component: itemComponent,\n        invalidate: invalidate.value,\n      };\n\n      // >>>>> Choice render fun by `renderRawItem`\n      const internalRenderItemNode = renderRawItem\n        ? (item: any, index: number) => {\n            const key = getKey(item, index);\n\n            return (\n              <OverflowContextProvider\n                key={key}\n                value={{\n                  ...itemSharedProps,\n                  order: index,\n                  item,\n                  itemKey: key,\n                  registerSize,\n                  display: index <= mergedDisplayCount.value,\n                }}\n              >\n                {renderRawItem(item, index)}\n              </OverflowContextProvider>\n            );\n          }\n        : (item: any, index: number) => {\n            const key = getKey(item, index);\n\n            return (\n              <Item\n                {...itemSharedProps}\n                order={index}\n                key={key}\n                item={item}\n                renderItem={mergedRenderItem.value}\n                itemKey={key}\n                registerSize={registerSize}\n                display={index <= mergedDisplayCount.value}\n              />\n            );\n          };\n\n      // >>>>> Rest node\n      let restNode = () => null;\n      const restContextProps = {\n        order: displayRest ? mergedDisplayCount.value : Number.MAX_SAFE_INTEGER,\n        className: `${itemPrefixCls.value} ${itemPrefixCls.value}-rest`,\n        registerSize: registerOverflowSize,\n        display: displayRest,\n      };\n\n      if (!renderRawRest) {\n        const mergedRenderRest = renderRest || defaultRenderRest;\n\n        restNode = () => (\n          <Item\n            {...itemSharedProps}\n            // When not show, order should be the last\n            {...restContextProps}\n            v-slots={{\n              default: () =>\n                typeof mergedRenderRest === 'function'\n                  ? mergedRenderRest(omittedItems.value)\n                  : mergedRenderRest,\n            }}\n          >\n          </Item>\n        );\n      } else if (renderRawRest) {\n        restNode = () => (\n          <OverflowContextProvider\n            value={{\n              ...itemSharedProps,\n              ...restContextProps,\n            }}\n          >\n            {renderRawRest(omittedItems.value)}\n          </OverflowContextProvider>\n        );\n      }\n\n      const overflowNode = () => (\n        <Component\n          id={id}\n          class={classNames(!invalidate.value && prefixCls, className)}\n          style={style}\n          onMousedown={onMousedown}\n          role={props.role}\n          {...restAttrs}\n        >\n          {mergedData.value.map(internalRenderItemNode)}\n\n          {/* Rest Count Item */}\n          {showRest.value ? restNode() : null}\n\n          {/* Suffix Node */}\n          {suffix && (\n            <Item\n              {...itemSharedProps}\n              order={mergedDisplayCount.value}\n              class={`${itemPrefixCls.value}-suffix`}\n              registerSize={registerSuffixSize}\n              display\n              style={suffixStyle}\n              v-slots={{ default: () => suffix }}\n            >\n            </Item>\n          )}\n          {slots.default?.()}\n        </Component>\n      );\n      // 使用 disabled  避免结构不一致 导致子组件 rerender\n      return (\n        <ResizeObserver\n          disabled={!isResponsive.value}\n          onResize={onOverflowResize}\n          v-slots={{ default: overflowNode }}\n        >\n        </ResizeObserver>\n      );\n    };\n  },\n});\n\nOverflow.Item = RawItem;\nOverflow.RESPONSIVE = RESPONSIVE;\nOverflow.INVALIDATE = INVALIDATE;\n\nexport default Overflow as typeof Overflow & {\n  readonly Item: typeof RawItem;\n  readonly RESPONSIVE: typeof RESPONSIVE;\n  readonly INVALIDATE: typeof INVALIDATE;\n};\n"],"names":["RESPONSIVE","INVALIDATE","defaultRenderRest","omittedItems","length","overflowProps","id","String","prefixCls","data","Array","itemKey","Number","Function","itemWidth","type","default","renderItem","renderRawItem","maxCount","renderRest","renderRawRest","suffix","PropTypes","any","component","itemComponent","onVisibleChange","ssr","onMousedown","role","Overflow","defineComponent","name","inheritAttrs","props","emits","setup","attrs","emit","slots","fullySSR","computed","containerWidth","shallowRef","mergedContainerWidth","value","itemWidths","Map","prevRestWidth","restWidth","suffixWidth","suffixFixedStart","displayCount","mergedDisplayCount","MAX_SAFE_INTEGER","restReady","itemPrefixCls","mergedRestWidth","Math","max","isResponsive","invalidate","showRest","mergedData","items","slice","min","getKey","item","index","mergedRenderItem","updateDisplayCount","count","notReady","onOverflowResize","_","element","clientWidth","registerSize","key","width","clone","delete","set","registerOverflowSize","registerSuffixSize","getItemWidth","get","watch","totalWidth","len","lastIndex","i","currentItemWidth","undefined","displayRest","Component","class","className","style","restAttrs","suffixStyle","position","left","top","itemSharedProps","responsive","internalRenderItemNode","_createVNode","OverflowContextProvider","order","display","Item","restNode","restContextProps","mergedRenderRest","overflowNode","classNames","map","ResizeObserver","RawItem"],"mappings":"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"}