UNPKG

test-isc

Version:

An Ionic component similar to Ionic Select, that allows to search items, including async search, group, add, edit, delete items, and much more.

416 lines (415 loc) 16.9 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; import { g as getIonMode } from './ionic-global-5d790111.js'; import { c as createAnimation } from './animation-3124e2ad.js'; import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-b3b61715.js'; /** * baseAnimation * Base class which is extended by the various types. Each * type will provide their own animations for open and close * and registers itself with Menu. */ var baseAnimation = function (isIos) { // https://material.io/guidelines/motion/movement.html#movement-movement-in-out-of-screen-bounds // https://material.io/guidelines/motion/duration-easing.html#duration-easing-natural-easing-curves /** * "Apply the sharp curve to items temporarily leaving the screen that may return * from the same exit point. When they return, use the deceleration curve. On mobile, * this transition typically occurs over 300ms" -- MD Motion Guide */ return createAnimation().duration(isIos ? 400 : 300); }; /** * Menu Overlay Type * The menu slides over the content. The content * itself, which is under the menu, does not move. */ var menuOverlayAnimation = function (menu) { var closedX; var openedX; var width = menu.width + 8; var menuAnimation = createAnimation(); var backdropAnimation = createAnimation(); if (menu.isEndSide) { // right side closedX = width + 'px'; openedX = '0px'; } else { // left side closedX = -width + 'px'; openedX = '0px'; } menuAnimation .addElement(menu.menuInnerEl) .fromTo('transform', "translateX(" + closedX + ")", "translateX(" + openedX + ")"); var mode = getIonMode(menu); var isIos = mode === 'ios'; var opacity = isIos ? 0.2 : 0.25; backdropAnimation .addElement(menu.backdropEl) .fromTo('opacity', 0.01, opacity); return baseAnimation(isIos).addAnimation([menuAnimation, backdropAnimation]); }; /** * Menu Push Type * The content slides over to reveal the menu underneath. * The menu itself also slides over to reveal its bad self. */ var menuPushAnimation = function (menu) { var contentOpenedX; var menuClosedX; var mode = getIonMode(menu); var width = menu.width; if (menu.isEndSide) { contentOpenedX = -width + 'px'; menuClosedX = width + 'px'; } else { contentOpenedX = width + 'px'; menuClosedX = -width + 'px'; } var menuAnimation = createAnimation() .addElement(menu.menuInnerEl) .fromTo('transform', "translateX(" + menuClosedX + ")", 'translateX(0px)'); var contentAnimation = createAnimation() .addElement(menu.contentEl) .fromTo('transform', 'translateX(0px)', "translateX(" + contentOpenedX + ")"); var backdropAnimation = createAnimation() .addElement(menu.backdropEl) .fromTo('opacity', 0.01, 0.32); return baseAnimation(mode === 'ios').addAnimation([menuAnimation, contentAnimation, backdropAnimation]); }; /** * Menu Reveal Type * The content slides over to reveal the menu underneath. * The menu itself, which is under the content, does not move. */ var menuRevealAnimation = function (menu) { var mode = getIonMode(menu); var openedX = (menu.width * (menu.isEndSide ? -1 : 1)) + 'px'; var contentOpen = createAnimation() .addElement(menu.contentEl) // REVIEW .fromTo('transform', 'translateX(0px)', "translateX(" + openedX + ")"); return baseAnimation(mode === 'ios').addAnimation(contentOpen); }; var createMenuController = function () { var menuAnimations = new Map(); var menus = []; var open = function (menu) { return __awaiter(void 0, void 0, void 0, function () { var menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, get(menu)]; case 1: menuEl = _a.sent(); if (menuEl) { return [2 /*return*/, menuEl.open()]; } return [2 /*return*/, false]; } }); }); }; var close = function (menu) { return __awaiter(void 0, void 0, void 0, function () { var menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (menu !== undefined ? get(menu) : getOpen())]; case 1: menuEl = _a.sent(); if (menuEl !== undefined) { return [2 /*return*/, menuEl.close()]; } return [2 /*return*/, false]; } }); }); }; var toggle = function (menu) { return __awaiter(void 0, void 0, void 0, function () { var menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, get(menu)]; case 1: menuEl = _a.sent(); if (menuEl) { return [2 /*return*/, menuEl.toggle()]; } return [2 /*return*/, false]; } }); }); }; var enable = function (shouldEnable, menu) { return __awaiter(void 0, void 0, void 0, function () { var menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, get(menu)]; case 1: menuEl = _a.sent(); if (menuEl) { menuEl.disabled = !shouldEnable; } return [2 /*return*/, menuEl]; } }); }); }; var swipeGesture = function (shouldEnable, menu) { return __awaiter(void 0, void 0, void 0, function () { var menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, get(menu)]; case 1: menuEl = _a.sent(); if (menuEl) { menuEl.swipeGesture = shouldEnable; } return [2 /*return*/, menuEl]; } }); }); }; var isOpen = function (menu) { return __awaiter(void 0, void 0, void 0, function () { var menuEl, menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!(menu != null)) return [3 /*break*/, 2]; return [4 /*yield*/, get(menu)]; case 1: menuEl = _a.sent(); return [2 /*return*/, (menuEl !== undefined && menuEl.isOpen())]; case 2: return [4 /*yield*/, getOpen()]; case 3: menuEl = _a.sent(); return [2 /*return*/, menuEl !== undefined]; } }); }); }; var isEnabled = function (menu) { return __awaiter(void 0, void 0, void 0, function () { var menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, get(menu)]; case 1: menuEl = _a.sent(); if (menuEl) { return [2 /*return*/, !menuEl.disabled]; } return [2 /*return*/, false]; } }); }); }; var get = function (menu) { return __awaiter(void 0, void 0, void 0, function () { var menuRef, menuEl; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, waitUntilReady()]; case 1: _a.sent(); if (menu === 'start' || menu === 'end') { menuRef = find(function (m) { return m.side === menu && !m.disabled; }); if (menuRef) { return [2 /*return*/, menuRef]; } // didn't find a menu side that is enabled // so try to get the first menu side found return [2 /*return*/, find(function (m) { return m.side === menu; })]; } else if (menu != null) { // the menuId was not left or right // so try to get the menu by its "id" return [2 /*return*/, find(function (m) { return m.menuId === menu; })]; } menuEl = find(function (m) { return !m.disabled; }); if (menuEl) { return [2 /*return*/, menuEl]; } // get the first menu in the array, if one exists return [2 /*return*/, menus.length > 0 ? menus[0].el : undefined]; } }); }); }; /** * Get the instance of the opened menu. Returns `null` if a menu is not found. */ var getOpen = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, waitUntilReady()]; case 1: _a.sent(); return [2 /*return*/, _getOpenSync()]; } }); }); }; /** * Get all menu instances. */ var getMenus = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, waitUntilReady()]; case 1: _a.sent(); return [2 /*return*/, getMenusSync()]; } }); }); }; /** * Get whether or not a menu is animating. Returns `true` if any * menu is currently animating. */ var isAnimating = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, waitUntilReady()]; case 1: _a.sent(); return [2 /*return*/, isAnimatingSync()]; } }); }); }; var registerAnimation = function (name, animation) { menuAnimations.set(name, animation); }; var _register = function (menu) { if (menus.indexOf(menu) < 0) { if (!menu.disabled) { _setActiveMenu(menu); } menus.push(menu); } }; var _unregister = function (menu) { var index = menus.indexOf(menu); if (index > -1) { menus.splice(index, 1); } }; var _setActiveMenu = function (menu) { // if this menu should be enabled // then find all the other menus on this same side // and automatically disable other same side menus var side = menu.side; menus .filter(function (m) { return m.side === side && m !== menu; }) .forEach(function (m) { return m.disabled = true; }); }; var _setOpen = function (menu, shouldOpen, animated) { return __awaiter(void 0, void 0, void 0, function () { var openedMenu; return __generator(this, function (_a) { switch (_a.label) { case 0: if (isAnimatingSync()) { return [2 /*return*/, false]; } if (!shouldOpen) return [3 /*break*/, 3]; return [4 /*yield*/, getOpen()]; case 1: openedMenu = _a.sent(); if (!(openedMenu && menu.el !== openedMenu)) return [3 /*break*/, 3]; return [4 /*yield*/, openedMenu.setOpen(false, false)]; case 2: _a.sent(); _a.label = 3; case 3: return [2 /*return*/, menu._setOpen(shouldOpen, animated)]; } }); }); }; var _createAnimation = function (type, menuCmp) { var animationBuilder = menuAnimations.get(type); if (!animationBuilder) { throw new Error('animation not registered'); } var animation = animationBuilder(menuCmp); return animation; }; var _getOpenSync = function () { return find(function (m) { return m._isOpen; }); }; var getMenusSync = function () { return menus.map(function (menu) { return menu.el; }); }; var isAnimatingSync = function () { return menus.some(function (menu) { return menu.isAnimating; }); }; var find = function (predicate) { var instance = menus.find(predicate); if (instance !== undefined) { return instance.el; } return undefined; }; var waitUntilReady = function () { return Promise.all(Array.from(document.querySelectorAll('ion-menu')) .map(function (menu) { return menu.componentOnReady(); })); }; registerAnimation('reveal', menuRevealAnimation); registerAnimation('push', menuPushAnimation); registerAnimation('overlay', menuOverlayAnimation); /* tslint:disable-next-line */ if (typeof document !== 'undefined') { document.addEventListener('ionBackButton', function (ev) { var openMenu = _getOpenSync(); if (openMenu) { ev.detail.register(MENU_BACK_BUTTON_PRIORITY, function () { return openMenu.close(); }); } }); } return { registerAnimation: registerAnimation, get: get, getMenus: getMenus, getOpen: getOpen, isEnabled: isEnabled, swipeGesture: swipeGesture, isAnimating: isAnimating, isOpen: isOpen, enable: enable, toggle: toggle, close: close, open: open, _getOpenSync: _getOpenSync, _createAnimation: _createAnimation, _register: _register, _unregister: _unregister, _setOpen: _setOpen, _setActiveMenu: _setActiveMenu, }; }; var menuController = /*@__PURE__*/ createMenuController(); export { menuController as m };