xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 7.33 kB
Source Map (JSON)
{"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,kBAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,aAAAA;AACAC,EAAAA,KAAAA,EAAAA,aAAAA,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA;;AAEQ,IAAA,IAAA,cAAA,GAAA,cAAA,CAAA,aAAA,CAAA,CAAA;AACA,IAAA,IAAA,OAAA,GAAA,QAAA,CAAA,YAAA;AACJ,MAAA,OAAA,CAAA,cAAA,CAAA,KAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACF,KAAA,CAAA,CAAA;AACM,IAAA,IAAA,MAAA,GAAA,QAAA,CAAA,YAAA;AACJ,MAAA,IAAA,OAAA,GAAA,SAAA,EAAA,CAAA;;AAEOC,MAAAA,OAAAA,OAAAA,CAAAA;AACT,KAAA,CAAA,CAAA;AAEA,IAAA,IAAA,uBAAA,GAAA,sBAAA,EAAA,CAAA;AAEA,IAAA,IAAA,OAAA,GAAA,SAAA,OAAA,GAAA;AAAsB,MAAA,IAAA,YAAA,CAAA;AAChB,MAAA,IAAA,IAAA,CAAA;;;AAGJ,OAAA,MAAA;AACQ,QAAA,IAAA,KAAA,GAAA,uBAAA,CAAA,YAAA,CAAA,CAAA;AACNC,QAAAA,IAAAA,GAAAA,cAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACF,OAAA;AACO,MAAA,OAAA,IAAA,CAAA;;AAEH,IAAA,IAAA,cAAA,GAAA,SAAA,cAAA,CAAA,KAAA,EAAA;;;AAGI,QAAA,IAAA,IAAA,GAAA,CAAA,IAAA,KAAA,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,KAAA,KAAA,EAAA,CAAA;;AAEF,QAAA,IAAA,CAAA,IAAA,IAAA,CAAA,QAAA,EAAA,OAAA;AACA,QAAA,IAAA,QAAA,IAAAC,UAAA,CAAA,QAAA,CAAA,EAAA;AACF,UAAA,KAAA,IAAA,GAAA,IAAA,QAAA,EAAA;;AAEID,cAAAA,IAAAA,CAAAA,GAAAA,CAAAA,GAAAA,QAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AACF,aAAA;AACF,WAAA;AACF,SAAA;AACAE,QAAAA,GAAAA,CAAAA,IAAAA,CAAAA,IAAAA,CAAAA,CAAAA;AACF,OAAA,CAAA,CAAA;AACO,MAAA,OAAA,GAAA,CAAA;;AAET,IAAA,IAAA,SAAA,GAAA,SAAA,SAAA,GAAA;AAAgC,MAAA,IAAA,cAAA,CAAA;AAExB,MAAA,IAAA,QAAA,GAAA,MAAA,CAAA,MAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA,GAAA,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA;AACNJ,MAAAA,CAAAA,cAAAA,GAAAA,MAAAA,CAAAA,MAAAA,MAAAA,IAAAA,IAAAA,cAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,cAAAA,CAAAA,OAAAA,CAAAA,UAAAA,IAAAA,EAAAA,KAAAA,EAAAA;AACEK,QAAAA,QAAAA,CAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,MAAAA,CAAAA,IAAAA,CAAAA,CAAAA,GAAAA,QAAAA,CAAAA,MAAAA,CAAAA,QAAAA,CAAAA,KAAAA,CAAAA,EAAAA,OAAAA,CAAAA,CAAAA,MAAAA,CAAAA,IAAAA,EAAAA,GAAAA,CAAAA,GAAAA,EAAAA,CAAAA,MAAAA,CAAAA,QAAAA,CAAAA,KAAAA,CAAAA,GAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AAGF,OAAA,CAAA,CAAA;;AAEAL,MAAAA,MAAAA,CAAAA,SAAAA,CAAAA,KAAAA,CAAAA,GAAAA,CAAAA,CAAAA,OAAAA,CAAAA,UAAAA,IAAAA,EAAAA,KAAAA,EAAAA;;AAEIM,UAAAA,WAAAA,CAAAA,IAAAA,CAAAA,GAAAA,QAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACF,SAAA,MAAA;;;AAGA,SAAA;AACF,OAAA,CAAA,CAAA;AACO,MAAA,OAAA,WAAA,CAAA;;AAEH,IAAA,IAAA,WAAA,GAAA,SAAA,WAAA,CAAA,OAAA,EAAA;AAAuE,MAAA,IAAA,eAAA,CAAA;AAC3EN,MAAAA,CAAAA,eAAAA,GAAAA,MAAAA,CAAAA,OAAAA,MAAAA,IAAAA,IAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA,CAAAA;;AAEI,IAAA,IAAA,WAAA,GAAA,SAAA,WAAA,CAAA,OAAA,EAAA;AAAuE,MAAA,IAAA,eAAA,CAAA;AAC3EA,MAAAA,CAAAA,eAAAA,GAAAA,MAAAA,CAAAA,OAAAA,MAAAA,IAAAA,IAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA,CAAAA;;AAEF,IAAA,IAAA,aAAA,GAAA,SAAA,aAAA,GAAA;AACE,MAAA,IAAA,IAAA,GAAA,OAAA,EAAA,CAAA;;AAEE,QAAA,IAAA,IAAA,GAAA,MAAA,CAAA,IAAA;;;;AACA,QAAA,IAAA,SAAA,GAAA,aAAA,CAAA,aAAA,CAAA,EAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA;AAEEO,UAAAA,IAAAA,EAAAA,IAAAA;AACAC,UAAAA,KAAAA,EAAAA,KAAAA;AACAC,UAAAA,SAAAA,EAAAA,SAAAA;AACAC,UAAAA,cAAAA,EAAAA,UAAAA;AACAC,UAAAA,SAAAA,EAAAA,MAAAA,CAAAA,KAAAA,CAAAA,KAAAA;AACAC,UAAAA,OAAAA,EAAAA,WAAAA;AACAC,UAAAA,OAAAA,EAAAA,WAAAA;;AAEF,QAAA,OAAAC,WAAA,CAAAC,WAAA,EAAAC,UAAA,CAAA,SAAA,EAAA;;AAA8C,SAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AAChD,OAAA,CAAA,CAAA;AACO,MAAA,OAAA,OAAA,CAAA;;;AAEF,MAAA,OAAAF,WAAA,CAAA,KAAA,EAAA;;AACsB,QAAA,OAAA,EAAA,MAAA,CAAA,KAAA;;;AAI/B,GAAA;AACF,CAAA,CAAA;;;;"}