UNPKG

@fe6/water-pro

Version:

An enterprise-class UI design language and Vue-based implementation

80 lines (68 loc) 2.54 kB
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * Makes the first character of a string uppercase * * @format */ export function upperFirst(str) { return str.charAt(0).toUpperCase() + str.slice(1); } export default function () { var expandedParentClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var sizeProperty = x ? 'width' : 'height'; var offsetProperty = "offset".concat(upperFirst(sizeProperty)); return { beforeEnter: function beforeEnter(el) { el._parent = el.parentNode; el._initialStyle = _defineProperty({ transition: el.style.transition, overflow: el.style.overflow }, sizeProperty, el.style[sizeProperty]); }, enter: function enter(el) { var initialStyle = el._initialStyle; el.style.setProperty('transition', 'none', 'important'); el.style.overflow = 'hidden'; // const offset = `${el[offsetProperty]}px`; // el.style[sizeProperty] = '0'; void el.offsetHeight; // force reflow el.style.transition = initialStyle.transition; if (expandedParentClass && el._parent) { el._parent.classList.add(expandedParentClass); } requestAnimationFrame(function () {// el.style[sizeProperty] = offset; }); }, afterEnter: resetStyles, enterCancelled: resetStyles, leave: function leave(el) { el._initialStyle = _defineProperty({ transition: '', overflow: el.style.overflow }, sizeProperty, el.style[sizeProperty]); el.style.overflow = 'hidden'; el.style[sizeProperty] = "".concat(el[offsetProperty], "px"); /* eslint-disable-next-line */ void el.offsetHeight; // force reflow requestAnimationFrame(function () { return el.style[sizeProperty] = '0'; }); }, afterLeave: afterLeave, leaveCancelled: afterLeave }; function afterLeave(el) { if (expandedParentClass && el._parent) { el._parent.classList.remove(expandedParentClass); } resetStyles(el); } function resetStyles(el) { var size = el._initialStyle[sizeProperty]; el.style.overflow = el._initialStyle.overflow; if (size != null) { el.style[sizeProperty] = size; } Reflect.deleteProperty(el, '_initialStyle'); } }