{"version":3,"file":"sticky-tool.mjs","sources":["../../src/sticky-tool/sticky-tool.tsx"],"sourcesContent":["import { computed, defineComponent, VNode } from 'vue';\nimport props from './props';\nimport isObject from 'lodash/isObject';\nimport StickyItem from './sticky-item';\n\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useChildComponentSlots } from '../hooks';\n\nimport stickyItemProps from './sticky-item-props';\n\nimport type { TdStickyItemProps } from './type';\nimport type { Styles } from '../common';\n\nexport default defineComponent({\n  name: 'XStickyTool',\n  props: { ...props },\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('sticky-tool');\n    const classes = computed(() => {\n      return [COMPONENT_NAME.value, `${COMPONENT_NAME.value}--${props.shape}`];\n    });\n    const styles = computed(() => {\n      const styles = getOffset();\n      if (props.width) styles.width = typeof props.width === 'number' ? `${props.width}px` : props.width;\n      return styles;\n    });\n\n    const getChildComponentByName = useChildComponentSlots();\n\n    const getList = () => {\n      let list: Array<TdStickyItemProps>;\n      if (props.list?.length) {\n        list = props.list;\n      } else {\n        const nodes: VNode[] = getChildComponentByName('StickyItem') as VNode[];\n        list = getListBySlots(nodes);\n      }\n      return list;\n    };\n    const getListBySlots = (nodes: VNode[]) => {\n      const arr: Array<TdStickyItemProps> = [];\n      nodes?.forEach((node) => {\n        const list = node?.props || {};\n        const children = node?.children;\n        if (!list && !children) return;\n        if (children && isObject(children)) {\n          for (const key in children) {\n            if (key in stickyItemProps && !list[key]) {\n              list[key] = children[key];\n            }\n          }\n        }\n        arr.push(list as TdStickyItemProps);\n      });\n      return arr;\n    };\n    const getOffset = (): Styles => {\n      // 默认偏移位置\n      const position: Array<string | number> = props.offset ? [80, 24] : ['80px', '24px'];\n      props.offset?.forEach((item, index) => {\n        position[index] = isNaN(Number(item))\n          ? `calc( ${position[index]}px + ${item})`\n          : `${(position[index] as number) + (item as number)}px`;\n      });\n      const offsetStyle: Styles = {};\n      props.placement.split('-').forEach((item, index) => {\n        if (item !== 'center') {\n          offsetStyle[item] = position[index];\n        } else {\n          offsetStyle.top = '50%';\n          offsetStyle.transform = 'translate(0, -50%)';\n        }\n      });\n      return offsetStyle;\n    };\n    const handleClick = (context: { e: MouseEvent; item: TdStickyItemProps }) => {\n      props.onClick?.(context);\n    };\n    const handleHover = (context: { e: MouseEvent; item: TdStickyItemProps }) => {\n      props.onHover?.(context);\n    };\n    const renderContent = () => {\n      const list = getList();\n      const content = list.map((item, index) => {\n        const { type, shape, placement, popupProps } = props;\n        const itemProps = {\n          ...item,\n          type,\n          shape,\n          placement,\n          basePopupProps: popupProps,\n          baseWidth: styles.value.width,\n          onClick: handleClick,\n          onHover: handleHover,\n        };\n        return <StickyItem {...itemProps} key={index} />;\n      });\n      return content;\n    };\n    return () => (\n      <div class={classes.value} style={styles.value}>\n        {renderContent()}\n      </div>\n    );\n  },\n});\n"],"names":["name","props","styles","list","isObject","arr","position","offsetStyle","type","shape","placement","basePopupProps","baseWidth","onClick","onHover","_createVNode","StickyItem","_mergeProps"],"mappings":"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"}