UNPKG

primevue

Version:

PrimeVue is an open source UI library for Vue featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBloc

304 lines (298 loc) 11.6 kB
import FocusTrap from 'primevue/focustrap'; import TimesIcon from 'primevue/icons/times'; import Portal from 'primevue/portal'; import Ripple from 'primevue/ripple'; import { ZIndexUtils, DomHandler } from 'primevue/utils'; import BaseComponent from 'primevue/basecomponent'; import SidebarStyle from 'primevue/sidebar/style'; import { resolveComponent, resolveDirective, openBlock, createBlock, withCtx, createElementBlock, mergeProps, createVNode, Transition, withDirectives, renderSlot, Fragment, createElementVNode, normalizeClass, toDisplayString, createCommentVNode, resolveDynamicComponent } from 'vue'; var script$1 = { name: 'BaseSidebar', "extends": BaseComponent, props: { visible: { type: Boolean, "default": false }, position: { type: String, "default": 'left' }, header: { type: null, "default": null }, baseZIndex: { type: Number, "default": 0 }, autoZIndex: { type: Boolean, "default": true }, dismissable: { type: Boolean, "default": true }, showCloseIcon: { type: Boolean, "default": true }, closeIcon: { type: String, "default": undefined }, modal: { type: Boolean, "default": true }, blockScroll: { type: Boolean, "default": false } }, style: SidebarStyle, provide: function provide() { return { $parentInstance: this }; } }; var script = { name: 'Sidebar', "extends": script$1, inheritAttrs: false, emits: ['update:visible', 'show', 'hide', 'after-hide'], data: function data() { return { containerVisible: this.visible }; }, container: null, mask: null, content: null, headerContainer: null, closeButton: null, outsideClickListener: null, updated: function updated() { if (this.visible) { this.containerVisible = this.visible; } }, beforeUnmount: function beforeUnmount() { this.disableDocumentSettings(); if (this.mask && this.autoZIndex) { ZIndexUtils.clear(this.mask); } this.container = null; this.mask = null; }, methods: { hide: function hide() { this.$emit('update:visible', false); }, onEnter: function onEnter() { this.$emit('show'); this.focus(); if (this.autoZIndex) { ZIndexUtils.set('modal', this.mask, this.baseZIndex || this.$primevue.config.zIndex.modal); } }, onAfterEnter: function onAfterEnter() { this.enableDocumentSettings(); }, onBeforeLeave: function onBeforeLeave() { if (this.modal) { !this.isUnstyled && DomHandler.addClass(this.mask, 'p-component-overlay-leave'); } }, onLeave: function onLeave() { this.$emit('hide'); }, onAfterLeave: function onAfterLeave() { if (this.autoZIndex) { ZIndexUtils.clear(this.mask); } this.containerVisible = false; this.disableDocumentSettings(); this.$emit('after-hide'); }, onMaskClick: function onMaskClick(event) { if (this.dismissable && this.modal && this.mask === event.target) { this.hide(); } }, focus: function focus() { var findFocusableElement = function findFocusableElement(container) { return container && container.querySelector('[autofocus]'); }; var focusTarget = this.$slots.header && findFocusableElement(this.headerContainer); if (!focusTarget) { focusTarget = this.$slots["default"] && findFocusableElement(this.container); if (!focusTarget) { focusTarget = this.closeButton; } } focusTarget && DomHandler.focus(focusTarget); }, enableDocumentSettings: function enableDocumentSettings() { if (this.dismissable && !this.modal) { this.bindOutsideClickListener(); } if (this.blockScroll) { DomHandler.blockBodyScroll(); } }, disableDocumentSettings: function disableDocumentSettings() { this.unbindOutsideClickListener(); if (this.blockScroll) { DomHandler.unblockBodyScroll(); } }, onKeydown: function onKeydown(event) { if (event.code === 'Escape') { this.hide(); } }, containerRef: function containerRef(el) { this.container = el; }, maskRef: function maskRef(el) { this.mask = el; }, contentRef: function contentRef(el) { this.content = el; }, headerContainerRef: function headerContainerRef(el) { this.headerContainer = el; }, closeButtonRef: function closeButtonRef(el) { this.closeButton = el; }, bindOutsideClickListener: function bindOutsideClickListener() { var _this = this; if (!this.outsideClickListener) { this.outsideClickListener = function (event) { if (_this.isOutsideClicked(event)) { _this.hide(); } }; document.addEventListener('click', this.outsideClickListener); } }, unbindOutsideClickListener: function unbindOutsideClickListener() { if (this.outsideClickListener) { document.removeEventListener('click', this.outsideClickListener); this.outsideClickListener = null; } }, isOutsideClicked: function isOutsideClicked(event) { return this.container && !this.container.contains(event.target); } }, computed: { fullScreen: function fullScreen() { return this.position === 'full'; }, closeAriaLabel: function closeAriaLabel() { return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : undefined; } }, directives: { focustrap: FocusTrap, ripple: Ripple }, components: { Portal: Portal, TimesIcon: TimesIcon } }; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var _hoisted_1 = ["aria-modal"]; var _hoisted_2 = ["aria-label"]; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Portal = resolveComponent("Portal"); var _directive_ripple = resolveDirective("ripple"); var _directive_focustrap = resolveDirective("focustrap"); return openBlock(), createBlock(_component_Portal, null, { "default": withCtx(function () { return [$data.containerVisible ? (openBlock(), createElementBlock("div", mergeProps({ key: 0, ref: $options.maskRef, onMousedown: _cache[2] || (_cache[2] = function () { return $options.onMaskClick && $options.onMaskClick.apply($options, arguments); }), "class": _ctx.cx('mask'), style: _ctx.sx('mask', true, { position: _ctx.position }) }, _ctx.ptm('mask')), [createVNode(Transition, mergeProps({ name: "p-sidebar", onEnter: $options.onEnter, onAfterEnter: $options.onAfterEnter, onBeforeLeave: $options.onBeforeLeave, onLeave: $options.onLeave, onAfterLeave: $options.onAfterLeave, appear: "" }, _ctx.ptm('transition')), { "default": withCtx(function () { return [_ctx.visible ? withDirectives((openBlock(), createElementBlock("div", mergeProps({ key: 0, ref: $options.containerRef, "class": _ctx.cx('root'), role: "complementary", "aria-modal": _ctx.modal, onKeydown: _cache[1] || (_cache[1] = function () { return $options.onKeydown && $options.onKeydown.apply($options, arguments); }) }, _objectSpread(_objectSpread({}, _ctx.$attrs), _ctx.ptm('root'))), [_ctx.$slots.container ? renderSlot(_ctx.$slots, "container", { key: 0, onClose: $options.hide, closeCallback: $options.hide }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("div", mergeProps({ ref: $options.headerContainerRef, "class": _ctx.cx('header') }, _ctx.ptm('header')), [renderSlot(_ctx.$slots, "header", { "class": normalizeClass(_ctx.cx('title')) }, function () { return [_ctx.header ? (openBlock(), createElementBlock("div", mergeProps({ key: 0, "class": _ctx.cx('title') }, _ctx.ptm('title')), toDisplayString(_ctx.header), 17)) : createCommentVNode("", true)]; }), _ctx.showCloseIcon ? withDirectives((openBlock(), createElementBlock("button", mergeProps({ key: 0, ref: $options.closeButtonRef, type: "button", "class": _ctx.cx('closeButton'), "aria-label": $options.closeAriaLabel, onClick: _cache[0] || (_cache[0] = function () { return $options.hide && $options.hide.apply($options, arguments); }) }, _ctx.ptm('closeButton'), { "data-pc-group-section": "iconcontainer" }), [renderSlot(_ctx.$slots, "closeicon", { "class": normalizeClass(_ctx.cx('closeIcon')) }, function () { return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.closeIcon ? 'span' : 'TimesIcon'), mergeProps({ "class": [_ctx.cx('closeIcon'), _ctx.closeIcon] }, _ctx.ptm('closeIcon')), null, 16, ["class"]))]; })], 16, _hoisted_2)), [[_directive_ripple]]) : createCommentVNode("", true)], 16), createElementVNode("div", mergeProps({ ref: $options.contentRef, "class": _ctx.cx('content') }, _ctx.ptm('content')), [renderSlot(_ctx.$slots, "default")], 16)], 64))], 16, _hoisted_1)), [[_directive_focustrap]]) : createCommentVNode("", true)]; }), _: 3 }, 16, ["onEnter", "onAfterEnter", "onBeforeLeave", "onLeave", "onAfterLeave"])], 16)) : createCommentVNode("", true)]; }), _: 3 }); } script.render = render; export { script as default };