{"version":3,"file":"notification-list.mjs","sources":["../../../components/notification/notification-list.tsx"],"sourcesContent":["import { defineComponent, ref, computed, Ref, CSSProperties } from 'vue';\nimport Notification from './notification';\nimport { TdNotificationProps, NotificationOptions } from './type';\nimport { DEFAULT_Z_INDEX, PLACEMENT_OFFSET, DISTANCE } from './constants';\nimport { usePrefixClass } from '@tdesign/shared-hooks';\n\nexport default defineComponent({\n  props: {\n    /**\n     * 相对于 placement 的偏移量，示例：[-10, 20] 或 ['10em', '8rem']\n     */\n    offset: Array<string | number>,\n\n    placement: {\n      type: String,\n      default: 'top-right',\n      validator(v: string): boolean {\n        return ['top-left', 'top-right', 'bottom-left', 'bottom-right'].indexOf(v) > -1;\n      },\n    },\n  },\n  setup(props, { expose }) {\n    const COMPONENT_NAME = usePrefixClass('notification-list');\n\n    const { placement, offset } = props as NotificationOptions;\n\n    const list: Ref<NotificationOptions[]> = ref([]);\n    const notificationList = ref([]);\n\n    const styles = computed(() => {\n      const style: CSSProperties = {\n        zIndex: DEFAULT_Z_INDEX,\n        ...PLACEMENT_OFFSET[placement],\n      };\n\n      if (Array.isArray(offset) && offset.length === 2) {\n        const horizontalProp = placement.includes('left') ? 'left' : 'right';\n        const verticalProp = placement.includes('top') ? 'top' : 'bottom';\n\n        style[horizontalProp as 'left' | 'right'] = getOffset(offset[0]) ?? style[horizontalProp as 'left' | 'right'];\n        style[verticalProp as 'top' | 'bottom'] = getOffset(offset[1]) ?? style[verticalProp as 'top' | 'bottom'];\n      }\n\n      return style;\n    });\n\n    const add = (options: TdNotificationProps): number => {\n      list.value.push(options);\n      return list.value.length - 1;\n    };\n\n    const remove = (index: number) => {\n      list.value.splice(index, 1);\n    };\n\n    const removeAll = () => {\n      list.value = [];\n    };\n\n    const getOffset = (val: string | number) => {\n      if (!val) return;\n      return isNaN(Number(val)) ? val : `${val}px`;\n    };\n\n    const notificationStyles = (item: { zIndex: number }) => {\n      const styles: CSSProperties = {\n        marginBottom: DISTANCE,\n      };\n\n      if (item.zIndex) styles['z-index'] = item.zIndex;\n      return styles;\n    };\n\n    const getProps = (index: number, item: NotificationOptions) => {\n      return {\n        ...item,\n        onCloseBtnClick: (e: any) => {\n          if (item.onCloseBtnClick) {\n            item.onCloseBtnClick(e);\n          }\n          return remove(index);\n        },\n        onDurationEnd: () => {\n          if (item.onDurationEnd) {\n            item.onDurationEnd();\n          }\n          return remove(index);\n        },\n        onClose: () => {\n          if (item.onClose) {\n            item.onClose();\n          }\n          return remove(index);\n        },\n      };\n    };\n\n    const addChild = (el: Element) => {\n      if (el) {\n        notificationList.value.push(el);\n      }\n    };\n    expose({ add, remove, removeAll, list, notificationList });\n\n    return () => {\n      if (!list.value.length) return;\n      return (\n        <div class={`${COMPONENT_NAME.value}__show`} style={styles.value}>\n          {list.value.map((item: { zIndex: number; id: number }, index) => (\n            <Notification ref={addChild} key={item.id} style={notificationStyles(item)} {...getProps(index, item)} />\n          ))}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["defineComponent","props","offset","Array","placement","type","String","validator","v","indexOf","setup","_ref","expose","COMPONENT_NAME","usePrefixClass","list","ref","notificationList","styles","computed","style","_objectSpread","zIndex","DEFAULT_Z_INDEX","PLACEMENT_OFFSET","isArray","length","_getOffset","_getOffset2","horizontalProp","includes","verticalProp","getOffset","add","options","value","push","remove","index","splice","removeAll","val","isNaN","Number","notificationStyles","item","marginBottom","DISTANCE","getProps","onCloseBtnClick","e","onDurationEnd","onClose","addChild","el","_createVNode","concat","map","Notification","_mergeProps","id"],"mappings":"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"}