UNPKG

bootstrap-vue

Version:

With more than 85 components, over 45 available plugins, several directives, and 1000+ icons, BootstrapVue provides one of the most comprehensive implementations of the Bootstrap v4 component and grid system available for Vue.js v2.6, complete with extens

84 lines (74 loc) 2.48 kB
// Generic collapse transion helper component // // Note: // Applies the classes `collapse`, `show` and `collapsing` // during the enter/leave transition phases only // Although it appears that Vue may be leaving the classes // in-place after the transition completes import { extend, mergeData } from '../../../vue'; import { NAME_COLLAPSE_HELPER } from '../../../constants/components'; import { PROP_TYPE_BOOLEAN } from '../../../constants/props'; import { getBCR, reflow, removeStyle, requestAF, setStyle } from '../../../utils/dom'; import { makeProp } from '../../../utils/props'; // --- Helper methods --- // Transition event handler helpers var onEnter = function onEnter(el) { setStyle(el, 'height', 0); // In a `requestAF()` for `appear` to work requestAF(function () { reflow(el); setStyle(el, 'height', "".concat(el.scrollHeight, "px")); }); }; var onAfterEnter = function onAfterEnter(el) { removeStyle(el, 'height'); }; var onLeave = function onLeave(el) { setStyle(el, 'height', 'auto'); setStyle(el, 'display', 'block'); setStyle(el, 'height', "".concat(getBCR(el).height, "px")); reflow(el); setStyle(el, 'height', 0); }; var onAfterLeave = function onAfterLeave(el) { removeStyle(el, 'height'); }; // --- Constants --- // Default transition props // `appear` will use the enter classes var TRANSITION_PROPS = { css: true, enterClass: '', enterActiveClass: 'collapsing', enterToClass: 'collapse show', leaveClass: 'collapse show', leaveActiveClass: 'collapsing', leaveToClass: 'collapse' }; // Default transition handlers // `appear` will use the enter handlers var TRANSITION_HANDLERS = { enter: onEnter, afterEnter: onAfterEnter, leave: onLeave, afterLeave: onAfterLeave }; // --- Main component --- export var props = { // // If `true` (and `visible` is `true` on mount), animate initially visible appear: makeProp(PROP_TYPE_BOOLEAN, false) }; // --- Main component --- // @vue/component export var BVCollapse = /*#__PURE__*/extend({ name: NAME_COLLAPSE_HELPER, functional: true, props: props, render: function render(h, _ref) { var props = _ref.props, data = _ref.data, children = _ref.children; return h('transition', // We merge in the `appear` prop last mergeData(data, { props: TRANSITION_PROPS, on: TRANSITION_HANDLERS }, { props: props }), // Note: `<transition>` supports a single root element only children); } });