UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 5.72 kB
{"version":3,"file":"drawer2.mjs","names":[],"sources":["../../../../../../packages/components/drawer/src/drawer.vue"],"sourcesContent":["<template>\n <el-teleport\n :to=\"appendTo\"\n :disabled=\"appendTo !== 'body' ? false : !appendToBody\"\n >\n <transition\n :name=\"ns.b('fade')\"\n @after-enter=\"afterEnter\"\n @after-leave=\"afterLeave\"\n @before-leave=\"beforeLeave\"\n >\n <el-overlay\n v-show=\"visible\"\n :mask=\"modal\"\n :overlay-class=\"[\n ns.is('drawer'),\n modalClass ?? '',\n `${ns.namespace.value}-modal-drawer`,\n ns.is('penetrable', penetrable),\n ]\"\n :z-index=\"zIndex\"\n @click=\"onModalClick\"\n >\n <el-focus-trap\n loop\n :trapped=\"visible\"\n :focus-trap-el=\"drawerRef\"\n :focus-start-el=\"focusStartRef\"\n @focus-after-trapped=\"onOpenAutoFocus\"\n @focus-after-released=\"onCloseAutoFocus\"\n @focusout-prevented=\"onFocusoutPrevented\"\n @release-requested=\"onCloseRequested\"\n >\n <div\n ref=\"drawerRef\"\n aria-modal=\"true\"\n :aria-label=\"title || undefined\"\n :aria-labelledby=\"!title ? titleId : undefined\"\n :aria-describedby=\"bodyId\"\n v-bind=\"$attrs\"\n :class=\"[\n ns.b(),\n direction,\n visible && 'open',\n ns.is('dragging', isResizing),\n ]\"\n :style=\"{ [isHorizontal ? 'width' : 'height']: size }\"\n role=\"dialog\"\n @click.stop\n >\n <span ref=\"focusStartRef\" :class=\"ns.e('sr-focus')\" tabindex=\"-1\" />\n <header v-if=\"withHeader\" :class=\"[ns.e('header'), headerClass]\">\n <template v-if=\"!$slots.title\">\n <slot\n name=\"header\"\n :close=\"handleClose\"\n :title-id=\"titleId\"\n :title-class=\"ns.e('title')\"\n >\n <span\n :id=\"titleId\"\n role=\"heading\"\n :aria-level=\"headerAriaLevel\"\n :class=\"ns.e('title')\"\n >\n {{ title }}\n </span>\n </slot>\n </template>\n <template v-else>\n <slot name=\"title\">\n <!-- DEPRECATED SLOT -->\n </slot>\n </template>\n <button\n v-if=\"showClose\"\n :aria-label=\"t('el.drawer.close')\"\n :class=\"ns.e('close-btn')\"\n type=\"button\"\n @click=\"handleClose\"\n >\n <el-icon :class=\"ns.e('close')\">\n <close />\n </el-icon>\n </button>\n </header>\n <template v-if=\"rendered\">\n <div :id=\"bodyId\" :class=\"[ns.e('body'), bodyClass]\">\n <slot />\n </div>\n </template>\n <div v-if=\"$slots.footer\" :class=\"[ns.e('footer'), footerClass]\">\n <slot name=\"footer\" />\n </div>\n <div\n v-if=\"resizable\"\n ref=\"draggerRef\"\n :style=\"{ zIndex }\"\n :class=\"ns.e('dragger')\"\n />\n </div>\n </el-focus-trap>\n </el-overlay>\n </transition>\n </el-teleport>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref, useSlots } from 'vue'\nimport { Close } from '@element-plus/icons-vue'\nimport { ElOverlay } from '@element-plus/components/overlay'\nimport ElFocusTrap from '@element-plus/components/focus-trap'\nimport ElTeleport from '@element-plus/components/teleport'\nimport { dialogPropsDefaults, useDialog } from '@element-plus/components/dialog'\nimport ElIcon from '@element-plus/components/icon'\nimport { useDeprecated, useLocale, useNamespace } from '@element-plus/hooks'\nimport { drawerEmits } from './drawer'\nimport { useResizable } from './composables/useResizable'\n\nimport type { DrawerProps } from './drawer'\n\ndefineOptions({\n name: 'ElDrawer',\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<DrawerProps>(), {\n ...dialogPropsDefaults,\n direction: 'rtl',\n size: '30%',\n withHeader: true,\n modalFade: true,\n headerAriaLevel: '2',\n})\nconst emit = defineEmits(drawerEmits)\nconst slots = useSlots()\n\nuseDeprecated(\n {\n scope: 'el-drawer',\n from: 'the title slot',\n replacement: 'the header slot',\n version: '3.0.0',\n ref: 'https://element-plus.org/en-US/component/drawer.html#slots',\n },\n computed(() => !!slots.title)\n)\n\nconst drawerRef = ref<HTMLElement>()\nconst focusStartRef = ref<HTMLElement>()\nconst draggerRef = ref<HTMLElement>()\nconst ns = useNamespace('drawer')\nconst { t } = useLocale()\n\nconst {\n afterEnter,\n afterLeave,\n beforeLeave,\n visible,\n rendered,\n titleId,\n bodyId,\n zIndex,\n onModalClick,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onFocusoutPrevented,\n onCloseRequested,\n handleClose,\n} = useDialog(props, drawerRef)\n\nconst { isHorizontal, size, isResizing } = useResizable(props, draggerRef, emit)\n\nconst penetrable = computed(() => props.modalPenetrable && !props.modal)\n\ndefineExpose({\n handleClose,\n /** @deprecated Will be removed after 2.14.0. */\n afterEnter,\n /** @deprecated Will be removed after 2.14.0. */\n afterLeave,\n})\n</script>\n"],"mappings":""}