@dialpad/dialtone
Version:
Dialpad's Dialtone design system monorepo
114 lines (113 loc) • 3.49 kB
JavaScript
import { DtIconClose } from "@dialpad/dialtone-icons/vue3";
import { hasSlotContent, returnFirstEl } from "../../common/utils.js";
import { resolveComponent, openBlock, createElementBlock, normalizeClass, renderSlot, createCommentVNode, createBlock, mergeProps, withCtx, createVNode } from "vue";
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
import DtButton from "../button/button.vue.js";
const _sfc_main = {
compatConfig: { MODE: 3 },
name: "PopoverHeaderFooter",
components: {
DtButton,
DtIconClose
},
props: {
// eslint-disable-next-line vue/require-default-prop
type: {
type: String,
validator: function(value) {
return ["header", "footer"].includes(value);
}
},
/**
* Additional class name for the content wrapper element.
*/
contentClass: {
type: [String, Array, Object],
default: ""
},
/**
* Determines visibility for close button
* @values true, false
*/
showCloseButton: {
type: Boolean,
default: false
},
/**
* A set of props to be passed into the popover's header close button.
* Requires an 'ariaLabel' property.
*/
closeButtonProps: {
type: Object,
default: () => {
}
}
},
emits: [
/**
* Emitted when popover is closed
*
* @event close
* @type { Boolean }
*/
"close"
],
data() {
return {
hasSlotContent
};
},
methods: {
focusCloseButton() {
var _a;
const closeButton = returnFirstEl((_a = this.$refs["popover__close-button"]) == null ? void 0 : _a.$el);
closeButton == null ? void 0 : closeButton.focus();
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_dt_icon_close = resolveComponent("dt-icon-close");
const _component_dt_button = resolveComponent("dt-button");
return openBlock(), createElementBlock("div", {
"data-qa": "dt-popover-header-footer",
class: normalizeClass({
"d-popover__header": $props.type === "header",
"d-popover__footer": $props.type === "footer"
})
}, [
$data.hasSlotContent(_ctx.$slots.content) ? (openBlock(), createElementBlock("div", {
key: 0,
"data-qa": "dt-popover-header-footer-content",
class: normalizeClass([{
"d-popover__header__content": $props.type === "header",
"d-popover__footer__content": $props.type === "footer"
}, $props.contentClass])
}, [
renderSlot(_ctx.$slots, "content")
], 2)) : createCommentVNode("", true),
$props.showCloseButton ? (openBlock(), createBlock(_component_dt_button, mergeProps({
key: 1,
ref: "popover__close-button",
"data-qa": "dt-popover-close",
class: {
"d-popover__header__close-button": $props.type === "header",
"d-popover__footer__close-button": $props.type === "footer"
},
importance: "outlined",
kind: "muted",
circle: ""
}, $props.closeButtonProps, {
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("close"))
}), {
icon: withCtx(() => [
createVNode(_component_dt_icon_close, { size: "300" })
]),
_: 1
}, 16, ["class"])) : createCommentVNode("", true)
], 2);
}
const PopoverHeaderFooter = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
PopoverHeaderFooter as default
};
//# sourceMappingURL=popover_header_footer.vue.js.map