mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
Mobile first
This commit is contained in:
@@ -10,91 +10,91 @@
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_ripple_effect", function() { return RippleEffect; });
|
||||
/* harmony import */ var _index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index-44bf8136.js */ "./node_modules/@ionic/core/dist/esm/index-44bf8136.js");
|
||||
/* harmony import */ var _ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ionic-global-837be8f3.js */ "./node_modules/@ionic/core/dist/esm/ionic-global-837be8f3.js");
|
||||
/* harmony import */ var _index_e806d1f6_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index-e806d1f6.js */ "./node_modules/@ionic/core/dist/esm/index-e806d1f6.js");
|
||||
/* harmony import */ var _ionic_global_9d5c8ee3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ionic-global-9d5c8ee3.js */ "./node_modules/@ionic/core/dist/esm/ionic-global-9d5c8ee3.js");
|
||||
|
||||
|
||||
|
||||
const rippleEffectCss = ":host{left:0;right:0;top:0;bottom:0;position:absolute;contain:strict;pointer-events:none}:host(.unbounded){contain:layout size style}.ripple-effect{border-radius:50%;position:absolute;background-color:currentColor;color:inherit;contain:strict;opacity:0;-webkit-animation:225ms rippleAnimation forwards, 75ms fadeInAnimation forwards;animation:225ms rippleAnimation forwards, 75ms fadeInAnimation forwards;will-change:transform, opacity;pointer-events:none}.fade-out{-webkit-transform:translate(var(--translate-end)) scale(var(--final-scale, 1));transform:translate(var(--translate-end)) scale(var(--final-scale, 1));-webkit-animation:150ms fadeOutAnimation forwards;animation:150ms fadeOutAnimation forwards}@-webkit-keyframes rippleAnimation{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:translate(var(--translate-end)) scale(var(--final-scale, 1));transform:translate(var(--translate-end)) scale(var(--final-scale, 1))}}@keyframes rippleAnimation{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:translate(var(--translate-end)) scale(var(--final-scale, 1));transform:translate(var(--translate-end)) scale(var(--final-scale, 1))}}@-webkit-keyframes fadeInAnimation{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:0.16}}@keyframes fadeInAnimation{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:0.16}}@-webkit-keyframes fadeOutAnimation{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0.16}to{opacity:0}}@keyframes fadeOutAnimation{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0.16}to{opacity:0}}";
|
||||
|
||||
const RippleEffect = class {
|
||||
constructor(hostRef) {
|
||||
Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef);
|
||||
/**
|
||||
* Sets the type of ripple-effect:
|
||||
*
|
||||
* - `bounded`: the ripple effect expands from the user's click position
|
||||
* - `unbounded`: the ripple effect expands from the center of the button and overflows the container.
|
||||
*
|
||||
* NOTE: Surfaces for bounded ripples should have the overflow property set to hidden,
|
||||
* while surfaces for unbounded ripples should have it set to visible.
|
||||
*/
|
||||
this.type = 'bounded';
|
||||
}
|
||||
constructor(hostRef) {
|
||||
Object(_index_e806d1f6_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef);
|
||||
/**
|
||||
* Adds the ripple effect to the parent element.
|
||||
* Sets the type of ripple-effect:
|
||||
*
|
||||
* @param x The horizontal coordinate of where the ripple should start.
|
||||
* @param y The vertical coordinate of where the ripple should start.
|
||||
* - `bounded`: the ripple effect expands from the user's click position
|
||||
* - `unbounded`: the ripple effect expands from the center of the button and overflows the container.
|
||||
*
|
||||
* NOTE: Surfaces for bounded ripples should have the overflow property set to hidden,
|
||||
* while surfaces for unbounded ripples should have it set to visible.
|
||||
*/
|
||||
async addRipple(x, y) {
|
||||
return new Promise(resolve => {
|
||||
Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["f"])(() => {
|
||||
const rect = this.el.getBoundingClientRect();
|
||||
const width = rect.width;
|
||||
const height = rect.height;
|
||||
const hypotenuse = Math.sqrt(width * width + height * height);
|
||||
const maxDim = Math.max(height, width);
|
||||
const maxRadius = this.unbounded ? maxDim : hypotenuse + PADDING;
|
||||
const initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);
|
||||
const finalScale = maxRadius / initialSize;
|
||||
let posX = x - rect.left;
|
||||
let posY = y - rect.top;
|
||||
if (this.unbounded) {
|
||||
posX = width * 0.5;
|
||||
posY = height * 0.5;
|
||||
}
|
||||
const styleX = posX - initialSize * 0.5;
|
||||
const styleY = posY - initialSize * 0.5;
|
||||
const moveX = width * 0.5 - posX;
|
||||
const moveY = height * 0.5 - posY;
|
||||
Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => {
|
||||
const div = document.createElement('div');
|
||||
div.classList.add('ripple-effect');
|
||||
const style = div.style;
|
||||
style.top = styleY + 'px';
|
||||
style.left = styleX + 'px';
|
||||
style.width = style.height = initialSize + 'px';
|
||||
style.setProperty('--final-scale', `${finalScale}`);
|
||||
style.setProperty('--translate-end', `${moveX}px, ${moveY}px`);
|
||||
const container = this.el.shadowRoot || this.el;
|
||||
container.appendChild(div);
|
||||
setTimeout(() => {
|
||||
resolve(() => {
|
||||
removeRipple(div);
|
||||
});
|
||||
}, 225 + 100);
|
||||
});
|
||||
this.type = 'bounded';
|
||||
}
|
||||
/**
|
||||
* Adds the ripple effect to the parent element.
|
||||
*
|
||||
* @param x The horizontal coordinate of where the ripple should start.
|
||||
* @param y The vertical coordinate of where the ripple should start.
|
||||
*/
|
||||
async addRipple(x, y) {
|
||||
return new Promise(resolve => {
|
||||
Object(_index_e806d1f6_js__WEBPACK_IMPORTED_MODULE_0__["f"])(() => {
|
||||
const rect = this.el.getBoundingClientRect();
|
||||
const width = rect.width;
|
||||
const height = rect.height;
|
||||
const hypotenuse = Math.sqrt(width * width + height * height);
|
||||
const maxDim = Math.max(height, width);
|
||||
const maxRadius = this.unbounded ? maxDim : hypotenuse + PADDING;
|
||||
const initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);
|
||||
const finalScale = maxRadius / initialSize;
|
||||
let posX = x - rect.left;
|
||||
let posY = y - rect.top;
|
||||
if (this.unbounded) {
|
||||
posX = width * 0.5;
|
||||
posY = height * 0.5;
|
||||
}
|
||||
const styleX = posX - initialSize * 0.5;
|
||||
const styleY = posY - initialSize * 0.5;
|
||||
const moveX = width * 0.5 - posX;
|
||||
const moveY = height * 0.5 - posY;
|
||||
Object(_index_e806d1f6_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => {
|
||||
const div = document.createElement('div');
|
||||
div.classList.add('ripple-effect');
|
||||
const style = div.style;
|
||||
style.top = styleY + 'px';
|
||||
style.left = styleX + 'px';
|
||||
style.width = style.height = initialSize + 'px';
|
||||
style.setProperty('--final-scale', `${finalScale}`);
|
||||
style.setProperty('--translate-end', `${moveX}px, ${moveY}px`);
|
||||
const container = this.el.shadowRoot || this.el;
|
||||
container.appendChild(div);
|
||||
setTimeout(() => {
|
||||
resolve(() => {
|
||||
removeRipple(div);
|
||||
});
|
||||
}, 225 + 100);
|
||||
});
|
||||
}
|
||||
get unbounded() {
|
||||
return this.type === 'unbounded';
|
||||
}
|
||||
render() {
|
||||
const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this);
|
||||
return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { role: "presentation", class: {
|
||||
[mode]: true,
|
||||
'unbounded': this.unbounded
|
||||
} }));
|
||||
}
|
||||
get el() { return Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); }
|
||||
});
|
||||
});
|
||||
}
|
||||
get unbounded() {
|
||||
return this.type === 'unbounded';
|
||||
}
|
||||
render() {
|
||||
const mode = Object(_ionic_global_9d5c8ee3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this);
|
||||
return (Object(_index_e806d1f6_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_e806d1f6_js__WEBPACK_IMPORTED_MODULE_0__["H"], { role: "presentation", class: {
|
||||
[mode]: true,
|
||||
'unbounded': this.unbounded
|
||||
} }));
|
||||
}
|
||||
get el() { return Object(_index_e806d1f6_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); }
|
||||
};
|
||||
const removeRipple = (ripple) => {
|
||||
ripple.classList.add('fade-out');
|
||||
setTimeout(() => {
|
||||
ripple.remove();
|
||||
}, 200);
|
||||
ripple.classList.add('fade-out');
|
||||
setTimeout(() => {
|
||||
ripple.remove();
|
||||
}, 200);
|
||||
};
|
||||
const PADDING = 10;
|
||||
const INITIAL_ORIGIN_SCALE = 0.5;
|
||||
|
||||
Reference in New Issue
Block a user