/*! elementor - v3.0.16 - 06-01-2021 */ /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 716); /******/ }) /************************************************************************/ /******/ ({ /***/ 100: /***/ (function(module, exports, __webpack_require__) { "use strict"; var classof = __webpack_require__(119); var builtinExec = RegExp.prototype.exec; // `RegExpExec` abstract operation // https://tc39.github.io/ecma262/#sec-regexpexec module.exports = function (R, S) { var exec = R.exec; if (typeof exec === 'function') { var result = exec.call(R, S); if (typeof result !== 'object') { throw new TypeError('RegExp exec method returned something other than an Object or null'); } return result; } if (classof(R) !== 'RegExp') { throw new TypeError('RegExp#exec called on incompatible receiver'); } return builtinExec.call(R, S); }; /***/ }), /***/ 101: /***/ (function(module, exports, __webpack_require__) { "use strict"; __webpack_require__(197); var redefine = __webpack_require__(39); var hide = __webpack_require__(30); var fails = __webpack_require__(36); var defined = __webpack_require__(43); var wks = __webpack_require__(13); var regexpExec = __webpack_require__(94); var SPECIES = wks('species'); var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { // #replace needs built-in support for named groups. // #match works fine because it just return the exec results, even if it has // a "grops" property. var re = /./; re.exec = function () { var result = []; result.groups = { a: '7' }; return result; }; return ''.replace(re, '$') !== '7'; }); var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () { // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec var re = /(?:)/; var originalExec = re.exec; re.exec = function () { return originalExec.apply(this, arguments); }; var result = 'ab'.split(re); return result.length === 2 && result[0] === 'a' && result[1] === 'b'; })(); module.exports = function (KEY, length, exec) { var SYMBOL = wks(KEY); var DELEGATES_TO_SYMBOL = !fails(function () { // String methods call symbol-named RegEp methods var O = {}; O[SYMBOL] = function () { return 7; }; return ''[KEY](O) != 7; }); var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () { // Symbol-named RegExp methods call .exec var execCalled = false; var re = /a/; re.exec = function () { execCalled = true; return null; }; if (KEY === 'split') { // RegExp[@@split] doesn't call the regex's exec method, but first creates // a new one. We need to return the patched regex when creating the new one. re.constructor = {}; re.constructor[SPECIES] = function () { return re; }; } re[SYMBOL](''); return !execCalled; }) : undefined; if ( !DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) || (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) ) { var nativeRegExpMethod = /./[SYMBOL]; var fns = exec( defined, SYMBOL, ''[KEY], function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) { if (regexp.exec === regexpExec) { if (DELEGATES_TO_SYMBOL && !forceStringMethod) { // The native String method already delegates to @@method (this // polyfilled function), leasing to infinite recursion. // We avoid it by directly calling the native @@method method. return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; } return { done: true, value: nativeMethod.call(str, regexp, arg2) }; } return { done: false }; } ); var strfn = fns[0]; var rxfn = fns[1]; redefine(String.prototype, KEY, strfn); hide(RegExp.prototype, SYMBOL, length == 2 // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) // 21.2.5.11 RegExp.prototype[@@split](string, limit) ? function (string, arg) { return rxfn.call(string, this, arg); } // 21.2.5.6 RegExp.prototype[@@match](string) // 21.2.5.9 RegExp.prototype[@@search](string) : function (string) { return rxfn.call(string, this); } ); } }; /***/ }), /***/ 102: /***/ (function(module, exports, __webpack_require__) { // 7.1.13 ToObject(argument) var defined = __webpack_require__(43); module.exports = function (it) { return Object(defined(it)); }; /***/ }), /***/ 106: /***/ (function(module, exports) { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /***/ 108: /***/ (function(module, exports, __webpack_require__) { "use strict"; var at = __webpack_require__(146)(true); // `AdvanceStringIndex` abstract operation // https://tc39.github.io/ecma262/#sec-advancestringindex module.exports = function (S, index, unicode) { return index + (unicode ? at(S, index).length : 1); }; /***/ }), /***/ 109: /***/ (function(module, exports, __webpack_require__) { "use strict"; // 21.2.5.3 get RegExp.prototype.flags var anObject = __webpack_require__(20); module.exports = function () { var that = anObject(this); var result = ''; if (that.global) result += 'g'; if (that.ignoreCase) result += 'i'; if (that.multiline) result += 'm'; if (that.unicode) result += 'u'; if (that.sticky) result += 'y'; return result; }; /***/ }), /***/ 114: /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(31); var document = __webpack_require__(18).document; // typeof document.createElement is 'object' in old IE var is = isObject(document) && isObject(document.createElement); module.exports = function (it) { return is ? document.createElement(it) : {}; }; /***/ }), /***/ 115: /***/ (function(module, exports) { module.exports = false; /***/ }), /***/ 119: /***/ (function(module, exports, __webpack_require__) { // getting tag from 19.1.3.6 Object.prototype.toString() var cof = __webpack_require__(52); var TAG = __webpack_require__(13)('toStringTag'); // ES3 wrong here var ARG = cof(function () { return arguments; }()) == 'Arguments'; // fallback for IE11 Script Access Denied error var tryGet = function (it, key) { try { return it[key]; } catch (e) { /* empty */ } }; module.exports = function (it) { var O, T, B; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T // builtinTag case : ARG ? cof(O) // ES3 arguments fallback : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; /***/ }), /***/ 126: /***/ (function(module, exports, __webpack_require__) { // fallback for non-array-like ES3 and non-enumerable old V8 strings var cof = __webpack_require__(52); // eslint-disable-next-line no-prototype-builtins module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { return cof(it) == 'String' ? it.split('') : Object(it); }; /***/ }), /***/ 127: /***/ (function(module, exports, __webpack_require__) { // 7.2.8 IsRegExp(argument) var isObject = __webpack_require__(31); var cof = __webpack_require__(52); var MATCH = __webpack_require__(13)('match'); module.exports = function (it) { var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); }; /***/ }), /***/ 128: /***/ (function(module, exports, __webpack_require__) { // 7.1.1 ToPrimitive(input [, PreferredType]) var isObject = __webpack_require__(31); // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function (it, S) { if (!isObject(it)) return it; var fn, val; if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; throw TypeError("Can't convert object to primitive value"); }; /***/ }), /***/ 13: /***/ (function(module, exports, __webpack_require__) { var store = __webpack_require__(76)('wks'); var uid = __webpack_require__(77); var Symbol = __webpack_require__(18).Symbol; var USE_SYMBOL = typeof Symbol == 'function'; var $exports = module.exports = function (name) { return store[name] || (store[name] = USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); }; $exports.store = store; /***/ }), /***/ 135: /***/ (function(module, exports, __webpack_require__) { module.exports = !__webpack_require__(28) && !__webpack_require__(36)(function () { return Object.defineProperty(__webpack_require__(114)('div'), 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), /***/ 146: /***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(60); var defined = __webpack_require__(43); // true -> String#at // false -> String#codePointAt module.exports = function (TO_STRING) { return function (that, pos) { var s = String(defined(that)); var i = toInteger(pos); var l = s.length; var a, b; if (i < 0 || i >= l) return TO_STRING ? '' : undefined; a = s.charCodeAt(i); return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; }; }; /***/ }), /***/ 147: /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(76)('native-function-to-string', Function.toString); /***/ }), /***/ 18: /***/ (function(module, exports) { // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self // eslint-disable-next-line no-new-func : Function('return this')(); if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef /***/ }), /***/ 180: /***/ (function(module, exports, __webpack_require__) { // 7.3.20 SpeciesConstructor(O, defaultConstructor) var anObject = __webpack_require__(20); var aFunction = __webpack_require__(98); var SPECIES = __webpack_require__(13)('species'); module.exports = function (O, D) { var C = anObject(O).constructor; var S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; /***/ }), /***/ 190: /***/ (function(module, exports, __webpack_require__) { // 0 -> Array#forEach // 1 -> Array#map // 2 -> Array#filter // 3 -> Array#some // 4 -> Array#every // 5 -> Array#find // 6 -> Array#findIndex var ctx = __webpack_require__(81); var IObject = __webpack_require__(126); var toObject = __webpack_require__(102); var toLength = __webpack_require__(46); var asc = __webpack_require__(216); module.exports = function (TYPE, $create) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; var IS_EVERY = TYPE == 4; var IS_FIND_INDEX = TYPE == 6; var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; var create = $create || asc; return function ($this, callbackfn, that) { var O = toObject($this); var self = IObject(O); var f = ctx(callbackfn, that, 3); var length = toLength(self.length); var index = 0; var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; var val, res; for (;length > index; index++) if (NO_HOLES || index in self) { val = self[index]; res = f(val, index, O); if (TYPE) { if (IS_MAP) result[index] = res; // map else if (res) switch (TYPE) { case 3: return true; // some case 5: return val; // find case 6: return index; // findIndex case 2: result.push(val); // filter } else if (IS_EVERY) return false; // every } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; }; }; /***/ }), /***/ 197: /***/ (function(module, exports, __webpack_require__) { "use strict"; var regexpExec = __webpack_require__(94); __webpack_require__(38)({ target: 'RegExp', proto: true, forced: regexpExec !== /./.exec }, { exec: regexpExec }); /***/ }), /***/ 20: /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(31); module.exports = function (it) { if (!isObject(it)) throw TypeError(it + ' is not an object!'); return it; }; /***/ }), /***/ 216: /***/ (function(module, exports, __webpack_require__) { // 9.4.2.3 ArraySpeciesCreate(originalArray, length) var speciesConstructor = __webpack_require__(217); module.exports = function (original, length) { return new (speciesConstructor(original))(length); }; /***/ }), /***/ 217: /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(31); var isArray = __webpack_require__(218); var SPECIES = __webpack_require__(13)('species'); module.exports = function (original) { var C; if (isArray(original)) { C = original.constructor; // cross-realm fallback if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; if (isObject(C)) { C = C[SPECIES]; if (C === null) C = undefined; } } return C === undefined ? Array : C; }; /***/ }), /***/ 218: /***/ (function(module, exports, __webpack_require__) { // 7.2.2 IsArray(argument) var cof = __webpack_require__(52); module.exports = Array.isArray || function isArray(arg) { return cof(arg) == 'Array'; }; /***/ }), /***/ 24: /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) var $export = __webpack_require__(38); var $find = __webpack_require__(190)(5); var KEY = 'find'; var forced = true; // Shouldn't skip holes if (KEY in []) Array(1)[KEY](function () { forced = false; }); $export($export.P + $export.F * forced, 'Array', { find: function find(callbackfn /* , that = undefined */) { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); __webpack_require__(90)(KEY); /***/ }), /***/ 28: /***/ (function(module, exports, __webpack_require__) { // Thank's IE8 for his funny defineProperty module.exports = !__webpack_require__(36)(function () { return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), /***/ 30: /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(51); var createDesc = __webpack_require__(106); module.exports = __webpack_require__(28) ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { object[key] = value; return object; }; /***/ }), /***/ 31: /***/ (function(module, exports) { module.exports = function (it) { return typeof it === 'object' ? it !== null : typeof it === 'function'; }; /***/ }), /***/ 347: /***/ (function(module, exports, __webpack_require__) { "use strict"; var anObject = __webpack_require__(20); var sameValue = __webpack_require__(399); var regExpExec = __webpack_require__(100); // @@search logic __webpack_require__(101)('search', 1, function (defined, SEARCH, $search, maybeCallNative) { return [ // `String.prototype.search` method // https://tc39.github.io/ecma262/#sec-string.prototype.search function search(regexp) { var O = defined(this); var fn = regexp == undefined ? undefined : regexp[SEARCH]; return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); }, // `RegExp.prototype[@@search]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search function (regexp) { var res = maybeCallNative($search, regexp, this); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); var previousLastIndex = rx.lastIndex; if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; var result = regExpExec(rx, S); if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; return result === null ? -1 : result.index; } ]; }); /***/ }), /***/ 36: /***/ (function(module, exports) { module.exports = function (exec) { try { return !!exec(); } catch (e) { return true; } }; /***/ }), /***/ 38: /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(18); var core = __webpack_require__(58); var hide = __webpack_require__(30); var redefine = __webpack_require__(39); var ctx = __webpack_require__(81); var PROTOTYPE = 'prototype'; var $export = function (type, name, source) { var IS_FORCED = type & $export.F; var IS_GLOBAL = type & $export.G; var IS_STATIC = type & $export.S; var IS_PROTO = type & $export.P; var IS_BIND = type & $export.B; var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); var key, own, out, exp; if (IS_GLOBAL) source = name; for (key in source) { // contains in native own = !IS_FORCED && target && target[key] !== undefined; // export native or passed out = (own ? target : source)[key]; // bind timers to global for call from export context exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; // extend global if (target) redefine(target, key, out, type & $export.U); // export if (exports[key] != out) hide(exports, key, exp); if (IS_PROTO && expProto[key] != out) expProto[key] = out; } }; global.core = core; // type bitmap $export.F = 1; // forced $export.G = 2; // global $export.S = 4; // static $export.P = 8; // proto $export.B = 16; // bind $export.W = 32; // wrap $export.U = 64; // safe $export.R = 128; // real proto method for `library` module.exports = $export; /***/ }), /***/ 39: /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(18); var hide = __webpack_require__(30); var has = __webpack_require__(64); var SRC = __webpack_require__(77)('src'); var $toString = __webpack_require__(147); var TO_STRING = 'toString'; var TPL = ('' + $toString).split(TO_STRING); __webpack_require__(58).inspectSource = function (it) { return $toString.call(it); }; (module.exports = function (O, key, val, safe) { var isFunction = typeof val == 'function'; if (isFunction) has(val, 'name') || hide(val, 'name', key); if (O[key] === val) return; if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); if (O === global) { O[key] = val; } else if (!safe) { delete O[key]; hide(O, key, val); } else if (O[key]) { O[key] = val; } else { hide(O, key, val); } // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative })(Function.prototype, TO_STRING, function toString() { return typeof this == 'function' && this[SRC] || $toString.call(this); }); /***/ }), /***/ 399: /***/ (function(module, exports) { // 7.2.9 SameValue(x, y) module.exports = Object.is || function is(x, y) { // eslint-disable-next-line no-self-compare return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; }; /***/ }), /***/ 43: /***/ (function(module, exports) { // 7.2.1 RequireObjectCoercible(argument) module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; }; /***/ }), /***/ 46: /***/ (function(module, exports, __webpack_require__) { // 7.1.15 ToLength var toInteger = __webpack_require__(60); var min = Math.min; module.exports = function (it) { return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; /***/ }), /***/ 51: /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(20); var IE8_DOM_DEFINE = __webpack_require__(135); var toPrimitive = __webpack_require__(128); var dP = Object.defineProperty; exports.f = __webpack_require__(28) ? Object.defineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); anObject(Attributes); if (IE8_DOM_DEFINE) try { return dP(O, P, Attributes); } catch (e) { /* empty */ } if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); if ('value' in Attributes) O[P] = Attributes.value; return O; }; /***/ }), /***/ 52: /***/ (function(module, exports) { var toString = {}.toString; module.exports = function (it) { return toString.call(it).slice(8, -1); }; /***/ }), /***/ 58: /***/ (function(module, exports) { var core = module.exports = { version: '2.6.11' }; if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef /***/ }), /***/ 60: /***/ (function(module, exports) { // 7.1.4 ToInteger var ceil = Math.ceil; var floor = Math.floor; module.exports = function (it) { return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; /***/ }), /***/ 61: /***/ (function(module, exports, __webpack_require__) { "use strict"; var anObject = __webpack_require__(20); var toObject = __webpack_require__(102); var toLength = __webpack_require__(46); var toInteger = __webpack_require__(60); var advanceStringIndex = __webpack_require__(108); var regExpExec = __webpack_require__(100); var max = Math.max; var min = Math.min; var floor = Math.floor; var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g; var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g; var maybeToString = function (it) { return it === undefined ? it : String(it); }; // @@replace logic __webpack_require__(101)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) { return [ // `String.prototype.replace` method // https://tc39.github.io/ecma262/#sec-string.prototype.replace function replace(searchValue, replaceValue) { var O = defined(this); var fn = searchValue == undefined ? undefined : searchValue[REPLACE]; return fn !== undefined ? fn.call(searchValue, O, replaceValue) : $replace.call(String(O), searchValue, replaceValue); }, // `RegExp.prototype[@@replace]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace function (regexp, replaceValue) { var res = maybeCallNative($replace, regexp, this, replaceValue); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); var functionalReplace = typeof replaceValue === 'function'; if (!functionalReplace) replaceValue = String(replaceValue); var global = rx.global; if (global) { var fullUnicode = rx.unicode; rx.lastIndex = 0; } var results = []; while (true) { var result = regExpExec(rx, S); if (result === null) break; results.push(result); if (!global) break; var matchStr = String(result[0]); if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); } var accumulatedResult = ''; var nextSourcePosition = 0; for (var i = 0; i < results.length; i++) { result = results[i]; var matched = String(result[0]); var position = max(min(toInteger(result.index), S.length), 0); var captures = []; // NOTE: This is equivalent to // captures = result.slice(1).map(maybeToString) // but for some reason `nativeSlice.call(result, 1, result.length)` (called in // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); var namedCaptures = result.groups; if (functionalReplace) { var replacerArgs = [matched].concat(captures, position, S); if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); var replacement = String(replaceValue.apply(undefined, replacerArgs)); } else { replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); } if (position >= nextSourcePosition) { accumulatedResult += S.slice(nextSourcePosition, position) + replacement; nextSourcePosition = position + matched.length; } } return accumulatedResult + S.slice(nextSourcePosition); } ]; // https://tc39.github.io/ecma262/#sec-getsubstitution function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { var tailPos = position + matched.length; var m = captures.length; var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; if (namedCaptures !== undefined) { namedCaptures = toObject(namedCaptures); symbols = SUBSTITUTION_SYMBOLS; } return $replace.call(replacement, symbols, function (match, ch) { var capture; switch (ch.charAt(0)) { case '$': return '$'; case '&': return matched; case '`': return str.slice(0, position); case "'": return str.slice(tailPos); case '<': capture = namedCaptures[ch.slice(1, -1)]; break; default: // \d\d? var n = +ch; if (n === 0) return match; if (n > m) { var f = floor(n / 10); if (f === 0) return match; if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); return match; } capture = captures[n - 1]; } return capture === undefined ? '' : capture; }); } }); /***/ }), /***/ 64: /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; module.exports = function (it, key) { return hasOwnProperty.call(it, key); }; /***/ }), /***/ 716: /***/ (function(module, exports, __webpack_require__) { "use strict"; __webpack_require__(61); __webpack_require__(347); __webpack_require__(82); __webpack_require__(24); (function ($) { var ElementorAdmin = elementorModules.ViewModule.extend({ maintenanceMode: null, config: elementorAdminConfig, getDefaultElements: function getDefaultElements() { var elements = { $switchMode: $('#elementor-switch-mode'), $goToEditLink: $('#elementor-go-to-edit-page-link'), $switchModeInput: $('#elementor-switch-mode-input'), $switchModeButton: $('#elementor-switch-mode-button'), $elementorLoader: $('.elementor-loader'), $builderEditor: $('#elementor-editor'), $importButton: $('#elementor-import-template-trigger'), $importArea: $('#elementor-import-template-area'), $settingsForm: $('#elementor-settings-form'), $settingsTabsWrapper: $('#elementor-settings-tabs-wrapper'), $menuGetHelpLink: $('a[href="admin.php?page=go_knowledge_base_site"]'), $reMigrateGlobalsButton: $('.elementor-re-migrate-globals-button') }; elements.$settingsFormPages = elements.$settingsForm.find('.elementor-settings-form-page'); elements.$activeSettingsPage = elements.$settingsFormPages.filter('.elementor-active'); elements.$settingsTabs = elements.$settingsTabsWrapper.children(); elements.$activeSettingsTab = elements.$settingsTabs.filter('.nav-tab-active'); return elements; }, toggleStatus: function toggleStatus() { var isElementorMode = this.isElementorMode(); elementorCommon.elements.$body.toggleClass('elementor-editor-active', isElementorMode).toggleClass('elementor-editor-inactive', !isElementorMode); }, bindEvents: function bindEvents() { var self = this; self.elements.$switchModeButton.on('click', function (event) { event.preventDefault(); if (self.isElementorMode()) { elementorCommon.dialogsManager.createWidget('confirm', { message: self.translate('back_to_wordpress_editor_message'), headerMessage: self.translate('back_to_wordpress_editor_header'), strings: { confirm: self.translate('yes'), cancel: self.translate('cancel') }, defaultOption: 'confirm', onConfirm: function onConfirm() { self.elements.$switchModeInput.val(''); self.toggleStatus(); } }).show(); } else { self.elements.$switchModeInput.val(true); var $wpTitle = $('#title'); if (!$wpTitle.val()) { $wpTitle.val('Elementor #' + $('#post_ID').val()); } if (wp.autosave) { wp.autosave.server.triggerSave(); } self.animateLoader(); $(document).on('heartbeat-tick.autosave', function () { elementorCommon.elements.$window.off('beforeunload.edit-post'); location.href = self.elements.$goToEditLink.attr('href'); }); self.toggleStatus(); } }); self.elements.$goToEditLink.on('click', function () { self.animateLoader(); }); $('div.notice.elementor-message-dismissed').on('click', 'button.notice-dismiss, .elementor-button-notice-dismiss', function (event) { event.preventDefault(); $.post(ajaxurl, { action: 'elementor_set_admin_notice_viewed', notice_id: $(this).closest('.elementor-message-dismissed').data('notice_id') }); var $wrapperElm = $(this).closest('.elementor-message-dismissed'); $wrapperElm.fadeTo(100, 0, function () { $wrapperElm.slideUp(100, function () { $wrapperElm.remove(); }); }); }); $('#elementor-clear-cache-button').on('click', function (event) { event.preventDefault(); var $thisButton = $(this); $thisButton.removeClass('success').addClass('loading'); $.post(ajaxurl, { action: 'elementor_clear_cache', _nonce: $thisButton.data('nonce') }).done(function () { $thisButton.removeClass('loading').addClass('success'); }); }); $('#elementor-library-sync-button').on('click', function (event) { event.preventDefault(); var $thisButton = $(this); $thisButton.removeClass('success').addClass('loading'); $.post(ajaxurl, { action: 'elementor_reset_library', _nonce: $thisButton.data('nonce') }).done(function () { $thisButton.removeClass('loading').addClass('success'); }); }); $('#elementor-replace-url-button').on('click', function (event) { event.preventDefault(); var $this = $(this), $tr = $this.parents('tr'), $from = $tr.find('[name="from"]'), $to = $tr.find('[name="to"]'); $this.removeClass('success').addClass('loading'); $.post(ajaxurl, { action: 'elementor_replace_url', from: $from.val(), to: $to.val(), _nonce: $this.data('nonce') }).done(function (response) { $this.removeClass('loading'); if (response.success) { $this.addClass('success'); } elementorCommon.dialogsManager.createWidget('alert', { message: response.data }).show(); }); }); $('#elementor_upgrade_fa_button').on('click', function (event) { event.preventDefault(); var $updateButton = $(this); $updateButton.addClass('loading'); elementorCommon.dialogsManager.createWidget('confirm', { id: 'confirm_fa_migration_admin_modal', message: self.translate('confirm_fa_migration_admin_modal_body'), headerMessage: self.translate('confirm_fa_migration_admin_modal_head'), strings: { confirm: self.translate('yes'), cancel: self.translate('cancel') }, defaultOption: 'confirm', onConfirm: function onConfirm() { $updateButton.removeClass('error').addClass('loading'); $.post(ajaxurl, $updateButton.data()).done(function (response) { $updateButton.removeClass('loading').addClass('success'); $('#elementor_upgrade_fa_button').parent().append(response.data.message); var redirectTo = (location.search.split('redirect_to=')[1] || '').split('&')[0]; if (redirectTo) { location.href = decodeURIComponent(redirectTo); return; } history.go(-1); }).fail(function () { $updateButton.removeClass('loading').addClass('error'); }); }, onCancel: function onCancel() { $updateButton.removeClass('loading').addClass('error'); } }).show(); }); self.elements.$settingsTabs.on({ click: function click(event) { event.preventDefault(); event.currentTarget.focus(); // Safari does not focus the tab automatically }, focus: function focus() { // Using focus event to enable navigation by tab key var hrefWithoutHash = location.href.replace(/#.*/, ''); history.pushState({}, '', hrefWithoutHash + this.hash); self.goToSettingsTabFromHash(); } }); $('select.elementor-rollback-select').on('change', function () { var $this = $(this), $rollbackButton = $this.next('.elementor-rollback-button'), placeholderText = $rollbackButton.data('placeholder-text'), placeholderUrl = $rollbackButton.data('placeholder-url'); $rollbackButton.html(placeholderText.replace('{VERSION}', $this.val())); $rollbackButton.attr('href', placeholderUrl.replace('VERSION', $this.val())); }).trigger('change'); $('.elementor-rollback-button').on('click', function (event) { event.preventDefault(); var $this = $(this); elementorCommon.dialogsManager.createWidget('confirm', { headerMessage: self.translate('rollback_to_previous_version'), message: self.translate('rollback_confirm'), strings: { confirm: self.translate('yes'), cancel: self.translate('cancel') }, onConfirm: function onConfirm() { $this.addClass('loading'); location.href = $this.attr('href'); } }).show(); }); self.elements.$reMigrateGlobalsButton.on('click', function (event) { event.preventDefault(); var $this = $(event.currentTarget); elementorCommon.dialogsManager.createWidget('confirm', { headerMessage: self.translate('re_migrate_globals'), message: self.translate('re_migrate_globals_confirm'), strings: { confirm: self.translate('yes'), cancel: self.translate('cancel') }, onConfirm: function onConfirm() { $this.removeClass('success').addClass('loading'); elementorCommon.ajax.addRequest('re_migrate_globals', { success: function success() { return $this.removeClass('loading').addClass('success'); } }); } }).show(); }); $('.elementor_css_print_method select').on('change', function () { var $descriptions = $('.elementor-css-print-method-description'); $descriptions.hide(); $descriptions.filter('[data-value="' + $(this).val() + '"]').show(); }).trigger('change'); }, onInit: function onInit() { elementorModules.ViewModule.prototype.onInit.apply(this, arguments); this.initTemplatesImport(); this.initMaintenanceMode(); this.goToSettingsTabFromHash(); this.openGetHelpInNewTab(); this.roleManager.init(); }, openGetHelpInNewTab: function openGetHelpInNewTab() { this.elements.$menuGetHelpLink.attr('target', '_blank'); }, initTemplatesImport: function initTemplatesImport() { if (!elementorCommon.elements.$body.hasClass('post-type-elementor_library')) { return; } var self = this, $importButton = self.elements.$importButton, $importArea = self.elements.$importArea; self.elements.$formAnchor = $('h1'); $('#wpbody-content').find('.page-title-action:last').after($importButton); self.elements.$formAnchor.after($importArea); $importButton.on('click', function () { $('#elementor-import-template-area').toggle(); }); }, initMaintenanceMode: function initMaintenanceMode() { var MaintenanceMode = __webpack_require__(717); this.maintenanceMode = new MaintenanceMode(); }, isElementorMode: function isElementorMode() { return !!this.elements.$switchModeInput.val(); }, animateLoader: function animateLoader() { this.elements.$goToEditLink.addClass('elementor-animate'); }, goToSettingsTabFromHash: function goToSettingsTabFromHash() { var hash = location.hash.slice(1); if (hash) { this.goToSettingsTab(hash); } }, goToSettingsTab: function goToSettingsTab(tabName) { var $pages = this.elements.$settingsFormPages; if (!$pages.length) { return; } var $activePage = $pages.filter('#' + tabName); this.elements.$activeSettingsPage.removeClass('elementor-active'); this.elements.$activeSettingsTab.removeClass('nav-tab-active'); var $activeTab = this.elements.$settingsTabs.filter('#elementor-settings-' + tabName); $activePage.addClass('elementor-active'); $activeTab.addClass('nav-tab-active'); this.elements.$settingsForm.attr('action', 'options.php#' + tabName); this.elements.$activeSettingsPage = $activePage; this.elements.$activeSettingsTab = $activeTab; }, translate: function translate(stringKey, templateArgs) { return elementorCommon.translate(stringKey, null, templateArgs, this.config.i18n); }, roleManager: { selectors: { body: 'elementor-role-manager', row: '.elementor-role-row', label: '.elementor-role-label', excludedIndicator: '.elementor-role-excluded-indicator', excludedField: 'input[name="elementor_exclude_user_roles[]"]', controlsContainer: '.elementor-role-controls', toggleHandle: '.elementor-role-toggle', arrowUp: 'dashicons-arrow-up', arrowDown: 'dashicons-arrow-down' }, toggle: function toggle($trigger) { var self = this, $row = $trigger.closest(self.selectors.row), $toggleHandleIcon = $row.find(self.selectors.toggleHandle).find('.dashicons'), $controls = $row.find(self.selectors.controlsContainer); $controls.toggleClass('hidden'); if ($controls.hasClass('hidden')) { $toggleHandleIcon.removeClass(self.selectors.arrowUp).addClass(self.selectors.arrowDown); } else { $toggleHandleIcon.removeClass(self.selectors.arrowDown).addClass(self.selectors.arrowUp); } self.updateLabel($row); }, updateLabel: function updateLabel($row) { var self = this, $indicator = $row.find(self.selectors.excludedIndicator), excluded = $row.find(self.selectors.excludedField).is(':checked'); if (excluded) { $indicator.html($indicator.data('excluded-label')); } else { $indicator.html(''); } self.setAdvancedState($row, excluded); }, setAdvancedState: function setAdvancedState($row, state) { var self = this, $controls = $row.find('input[type="checkbox"]').not(self.selectors.excludedField); $controls.each(function (index, input) { $(input).prop('disabled', state); }); }, bind: function bind() { var self = this; $(document).on('click', self.selectors.label + ',' + self.selectors.toggleHandle, function (event) { event.stopPropagation(); event.preventDefault(); self.toggle($(this)); }).on('change', self.selectors.excludedField, function () { self.updateLabel($(this).closest(self.selectors.row)); }); }, init: function init() { var self = this; if (!$('body[class*="' + self.selectors.body + '"]').length) { return; } self.bind(); $(self.selectors.row).each(function (index, row) { self.updateLabel($(row)); }); } } }); $(function () { window.elementorAdmin = new ElementorAdmin(); elementorCommon.elements.$window.trigger('elementor/admin/init'); }); })(jQuery); /***/ }), /***/ 717: /***/ (function(module, exports, __webpack_require__) { "use strict"; __webpack_require__(24); module.exports = elementorModules.ViewModule.extend({ getDefaultSettings: function getDefaultSettings() { return { selectors: { modeSelect: '.elementor_maintenance_mode_mode select', maintenanceModeTable: '#tab-maintenance_mode table', maintenanceModeDescriptions: '.elementor-maintenance-mode-description', excludeModeSelect: '.elementor_maintenance_mode_exclude_mode select', excludeRolesArea: '.elementor_maintenance_mode_exclude_roles', templateSelect: '.elementor_maintenance_mode_template_id select', editTemplateButton: '.elementor-edit-template', maintenanceModeError: '.elementor-maintenance-mode-error' }, classes: { isEnabled: 'elementor-maintenance-mode-is-enabled' } }; }, getDefaultElements: function getDefaultElements() { var elements = {}, selectors = this.getSettings('selectors'); elements.$modeSelect = jQuery(selectors.modeSelect); elements.$maintenanceModeTable = elements.$modeSelect.parents(selectors.maintenanceModeTable); elements.$excludeModeSelect = elements.$maintenanceModeTable.find(selectors.excludeModeSelect); elements.$excludeRolesArea = elements.$maintenanceModeTable.find(selectors.excludeRolesArea); elements.$templateSelect = elements.$maintenanceModeTable.find(selectors.templateSelect); elements.$editTemplateButton = elements.$maintenanceModeTable.find(selectors.editTemplateButton); elements.$maintenanceModeDescriptions = elements.$maintenanceModeTable.find(selectors.maintenanceModeDescriptions); elements.$maintenanceModeError = elements.$maintenanceModeTable.find(selectors.maintenanceModeError); return elements; }, handleModeSelectChange: function handleModeSelectChange() { var settings = this.getSettings(), elements = this.elements; elements.$maintenanceModeTable.toggleClass(settings.classes.isEnabled, !!elements.$modeSelect.val()); elements.$maintenanceModeDescriptions.hide(); elements.$maintenanceModeDescriptions.filter('[data-value="' + elements.$modeSelect.val() + '"]').show(); }, handleExcludeModeSelectChange: function handleExcludeModeSelectChange() { var elements = this.elements; elements.$excludeRolesArea.toggle('custom' === elements.$excludeModeSelect.val()); }, handleTemplateSelectChange: function handleTemplateSelectChange() { var elements = this.elements; var templateID = elements.$templateSelect.val(); if (!templateID) { elements.$editTemplateButton.hide(); elements.$maintenanceModeError.show(); return; } var editUrl = elementorAdmin.config.home_url + '?p=' + templateID + '&elementor'; elements.$editTemplateButton.prop('href', editUrl).show(); elements.$maintenanceModeError.hide(); }, bindEvents: function bindEvents() { var elements = this.elements; elements.$modeSelect.on('change', this.handleModeSelectChange.bind(this)); elements.$excludeModeSelect.on('change', this.handleExcludeModeSelectChange.bind(this)); elements.$templateSelect.on('change', this.handleTemplateSelectChange.bind(this)); }, onAdminInit: function onAdminInit() { this.handleModeSelectChange(); this.handleExcludeModeSelectChange(); this.handleTemplateSelectChange(); }, onInit: function onInit() { elementorModules.ViewModule.prototype.onInit.apply(this, arguments); elementorCommon.elements.$window.on('elementor/admin/init', this.onAdminInit); } }); /***/ }), /***/ 76: /***/ (function(module, exports, __webpack_require__) { var core = __webpack_require__(58); var global = __webpack_require__(18); var SHARED = '__core-js_shared__'; var store = global[SHARED] || (global[SHARED] = {}); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: core.version, mode: __webpack_require__(115) ? 'pure' : 'global', copyright: '© 2019 Denis Pushkarev (zloirock.ru)' }); /***/ }), /***/ 77: /***/ (function(module, exports) { var id = 0; var px = Math.random(); module.exports = function (key) { return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; /***/ }), /***/ 81: /***/ (function(module, exports, __webpack_require__) { // optional / simple context binding var aFunction = __webpack_require__(98); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; switch (length) { case 1: return function (a) { return fn.call(that, a); }; case 2: return function (a, b) { return fn.call(that, a, b); }; case 3: return function (a, b, c) { return fn.call(that, a, b, c); }; } return function (/* ...args */) { return fn.apply(that, arguments); }; }; /***/ }), /***/ 82: /***/ (function(module, exports, __webpack_require__) { "use strict"; var isRegExp = __webpack_require__(127); var anObject = __webpack_require__(20); var speciesConstructor = __webpack_require__(180); var advanceStringIndex = __webpack_require__(108); var toLength = __webpack_require__(46); var callRegExpExec = __webpack_require__(100); var regexpExec = __webpack_require__(94); var fails = __webpack_require__(36); var $min = Math.min; var $push = [].push; var $SPLIT = 'split'; var LENGTH = 'length'; var LAST_INDEX = 'lastIndex'; var MAX_UINT32 = 0xffffffff; // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError var SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); }); // @@split logic __webpack_require__(101)('split', 2, function (defined, SPLIT, $split, maybeCallNative) { var internalSplit; if ( 'abbc'[$SPLIT](/(b)*/)[1] == 'c' || 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || '.'[$SPLIT](/()()/)[LENGTH] > 1 || ''[$SPLIT](/.?/)[LENGTH] ) { // based on es5-shim implementation, need to rework it internalSplit = function (separator, limit) { var string = String(this); if (separator === undefined && limit === 0) return []; // If `separator` is not a regex, use native split if (!isRegExp(separator)) return $split.call(string, separator, limit); var output = []; var flags = (separator.ignoreCase ? 'i' : '') + (separator.multiline ? 'm' : '') + (separator.unicode ? 'u' : '') + (separator.sticky ? 'y' : ''); var lastLastIndex = 0; var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0; // Make `global` and avoid `lastIndex` issues by working with a copy var separatorCopy = new RegExp(separator.source, flags + 'g'); var match, lastIndex, lastLength; while (match = regexpExec.call(separatorCopy, string)) { lastIndex = separatorCopy[LAST_INDEX]; if (lastIndex > lastLastIndex) { output.push(string.slice(lastLastIndex, match.index)); if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1)); lastLength = match[0][LENGTH]; lastLastIndex = lastIndex; if (output[LENGTH] >= splitLimit) break; } if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop } if (lastLastIndex === string[LENGTH]) { if (lastLength || !separatorCopy.test('')) output.push(''); } else output.push(string.slice(lastLastIndex)); return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output; }; // Chakra, V8 } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) { internalSplit = function (separator, limit) { return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit); }; } else { internalSplit = $split; } return [ // `String.prototype.split` method // https://tc39.github.io/ecma262/#sec-string.prototype.split function split(separator, limit) { var O = defined(this); var splitter = separator == undefined ? undefined : separator[SPLIT]; return splitter !== undefined ? splitter.call(separator, O, limit) : internalSplit.call(String(O), separator, limit); }, // `RegExp.prototype[@@split]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split // // NOTE: This cannot be properly polyfilled in engines that don't support // the 'y' flag. function (regexp, limit) { var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); var C = speciesConstructor(rx, RegExp); var unicodeMatching = rx.unicode; var flags = (rx.ignoreCase ? 'i' : '') + (rx.multiline ? 'm' : '') + (rx.unicode ? 'u' : '') + (SUPPORTS_Y ? 'y' : 'g'); // ^(? + rx + ) is needed, in combination with some S slicing, to // simulate the 'y' flag. var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; if (lim === 0) return []; if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; var p = 0; var q = 0; var A = []; while (q < S.length) { splitter.lastIndex = SUPPORTS_Y ? q : 0; var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q)); var e; if ( z === null || (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p ) { q = advanceStringIndex(S, q, unicodeMatching); } else { A.push(S.slice(p, q)); if (A.length === lim) return A; for (var i = 1; i <= z.length - 1; i++) { A.push(z[i]); if (A.length === lim) return A; } q = p = e; } } A.push(S.slice(p)); return A; } ]; }); /***/ }), /***/ 90: /***/ (function(module, exports, __webpack_require__) { // 22.1.3.31 Array.prototype[@@unscopables] var UNSCOPABLES = __webpack_require__(13)('unscopables'); var ArrayProto = Array.prototype; if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(30)(ArrayProto, UNSCOPABLES, {}); module.exports = function (key) { ArrayProto[UNSCOPABLES][key] = true; }; /***/ }), /***/ 94: /***/ (function(module, exports, __webpack_require__) { "use strict"; var regexpFlags = __webpack_require__(109); var nativeExec = RegExp.prototype.exec; // This always refers to the native implementation, because the // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, // which loads this file before patching the method. var nativeReplace = String.prototype.replace; var patchedExec = nativeExec; var LAST_INDEX = 'lastIndex'; var UPDATES_LAST_INDEX_WRONG = (function () { var re1 = /a/, re2 = /b*/g; nativeExec.call(re1, 'a'); nativeExec.call(re2, 'a'); return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0; })(); // nonparticipating capturing group, copied from es5-shim's String#split patch. var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; if (PATCH) { patchedExec = function exec(str) { var re = this; var lastIndex, reCopy, match, i; if (NPCG_INCLUDED) { reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re)); } if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX]; match = nativeExec.call(re, str); if (UPDATES_LAST_INDEX_WRONG && match) { re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex; } if (NPCG_INCLUDED && match && match.length > 1) { // Fix browsers whose `exec` methods don't consistently return `undefined` // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ // eslint-disable-next-line no-loop-func nativeReplace.call(match[0], reCopy, function () { for (i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) match[i] = undefined; } }); } return match; }; } module.exports = patchedExec; /***/ }), /***/ 98: /***/ (function(module, exports) { module.exports = function (it) { if (typeof it != 'function') throw TypeError(it + ' is not a function!'); return it; }; /***/ }) /******/ }); //# sourceMappingURL=admin.js.map{"id":4701,"date":"2023-03-11T13:47:00","date_gmt":"2023-03-11T13:47:00","guid":{"rendered":"https:\/\/www.riderslog.org\/?p=4701"},"modified":"2024-12-14T14:05:16","modified_gmt":"2024-12-14T08:35:16","slug":"best-scooty-under-30000-in-india-2024","status":"publish","type":"post","link":"https:\/\/www.riderslog.org\/best-scooty-under-30000-in-india-2024\/","title":{"rendered":"Best Scooty Under 30000 In India 2024"},"content":{"rendered":"\n

Best scooty under 30000 rupees in India 2023. If you’re looking for an affordable and eco-friendly mode of transportation within the city, we’ve got you covered. In this article, we will explore the top scooters available in this price range and provide you with all the necessary information to make an informed decision.<\/p>\n\n\n\n

Some popular models to consider include Ujaas eZY, Komaki Super, Avon E-Lite, Avon E Plus, Ampere V48, Platino Angel, Essel Energy, and Ujaas E-Go. These scooters offer automatic transmission, reverse gear functionality, LED DRLs, and a decent range on a full charge.<\/p>\n\n\n\n

However, it’s important to note that availability may vary depending on your location. Nevertheless, second-hand options are also available if you prefer that route.<\/p>\n\n\n\n

So let’s dive into the world of affordable and efficient scooty options that are sure to meet your needs without breaking the bank. Get ready for a smooth and enjoyable ride while contributing towards a greener future!<\/p>\n\n\n\n

Options Under 30k<\/h2>\n\n\n\n

If you’re looking for budget-friendly scooters that won’t break the bank, there are some great options under 30k in India 2023. In this price range, you can find Ujaas eZY, Komaki Super, Avon E-Lite, Avon E Plus, Ampere V48, Platino Angel, Essel Energy, and Ujaas E-Go.<\/p>\n\n\n\n

The Ujaas eZY is priced at Rs 30,800 INR and is a battery-powered scooter with a 48V battery. It features an automatic transmission with reverse gear and three-speed selection modes. On a full charge, it has a range of about 60 kilometres. It takes around 6-7 hours to fully charge the scooter. The Ujaas eZY also comes with telescopic front forks, hydraulic rear shock absorbers, alloy wheels with tubeless tires, a fully digital instrument console, LED DRLs (Daytime Running Lights), and a loading rack.<\/p>\n\n\n\n

Another option is the Komaki Super priced at Rs 29,500. It is a compact scooter powered by a 350-500W electric hub motor. With its range of 58-60 kilometres on a full charge and maximum speed of 30-37 KMPH (kilometres per hour), it offers convenience for short-distance commutes.<\/p>\n\n\n\n

The Avon E-Lite is available at Rs 28,000 INR and is designed like a moped scooty. It features a BLDC electric motor with a power output of 232W and has a range of about 51 kilometres on one full charge. Charging time ranges from 4 to 7 hours depending on the battery level.<\/p>\n\n\n\n

Lastly, the Avon E Plus priced at Rs 25,000 is smaller and more compact compared to the other options mentioned above. It is powered by a BLDC electric motor with a maximum power output of 220W. It offers three ride modes and comes with tri-blade alloy wheels.<\/p>\n\n\n\n

These scooters are perfect for eco-friendly commuting within the city or short-distance rides. Keep in mind that availability may vary depending on your city, so it’s always best to check with authorized dealers for more information.<\/p>\n\n\n\n

Top Scooters<\/h2>\n\n\n\n

When looking for a scooter in the affordable price range of 30,000, you’ll find a variety of options to choose from in India 2023. Here are four top scooters that offer great features and value for money:<\/p>\n\n\n\n

    \n
  1. Ujaas eZY: Priced at Rs 30,800, this battery-powered scooter comes with a 48V battery and automatic transmission. It offers three-speed selection modes and has a range of 60 km on a full charge. With telescopic front forks, hydraulic rear shock absorbers, and alloy wheels, it provides a comfortable ride.<\/li>\n\n\n\n
  2. Komaki Super: Available at Rs 29,500, this compact scooter is powered by a 350-500W electric hub motor. It offers a range of 58-60 kilometres on a single charge and takes about 5-6 hours to fully charge. With its maximum speed of 30-37 kmph, it’s perfect for short commutes.<\/li>\n\n\n\n
  3. Avon E-Lite: Priced at Rs 28,000, this moped-style scooty features a BLDC electric motor with a power output of 232W. It offers a range of approximately 51 kilometres on one charge and takes around 4-7 hours to recharge. The storage box compartment and tri-blade alloy wheels add to its convenience.<\/li>\n\n\n\n
  4. Avon E Plus: At just Rs 25,000, this smaller and more compact moped scooty packs quite the punch with its BLDC electric motor producing up to 220W power output. It offers three ride modes and tri-blade alloy wheels for added stability.<\/li>\n<\/ol>\n\n\n\n

    These scooters provide eco-friendly commuting options within the city or for short-distance rides while offering good value for money under the budget-friendly range of Rs.30,000 in India in the year 2023.<\/p>\n\n\n\n

    Also Read: TVS Ntorq 150 Scooter Features, Spec<\/a><\/p>\n\n\n\n

    Popular Models<\/h2>\n\n\n\n

    Among the top choices in the affordable price range of 30,000, the Ujaas eZY scooter stands out with its powerful battery and automatic transmission. This electric scooter is packed with features that make it an excellent option for those looking for a budget-friendly and eco-friendly mode of transportation.<\/p>\n\n\n\n

    The Ujaas eZY comes equipped with a 48V battery, providing a range of up to 60 kilometres on a full charge. With its automatic transmission and reverse gear, it offers convenience and ease of use for riders. The scooter also offers three-speed selection modes, allowing riders to choose their preferred speed.<\/p>\n\n\n\n

    In terms of charging time, the Ujaas eZY takes approximately 6-7 hours to fully charge its battery. This means that riders can quickly recharge their scooter and get back on the road in no time.<\/p>\n\n\n\n

    Other notable features of the Ujaas eZY include telescopic front forks and hydraulic rear shock absorbers, ensuring a smooth ride even on bumpy roads. It also has alloy wheels with tubeless tires for added safety.<\/p>\n\n\n\n

    With its attractive design and impressive performance, the Ujaas eZY is an ideal choice for those seeking an affordable scooty under 30,000 in India. Whether you’re commuting within the city or going on short-distance rides, this electric scooter offers a reliable and cost-effective solution for your transportation needs.<\/p>\n\n\n\n

    Also Read: Yamaha\u2019s New Retro Classic: The 2023 Rx 155 Launch Date<\/a><\/p>\n\n\n\n

    Avon E Plus<\/h2>\n\n\n\n

    Experience the thrill of riding the Avon E Plus, an electric scooter that offers incredible performance and value for money. The Avon E Plus is priced at Rs. 29,371 and is available in Delhi. It is the only scooter available under 30,000 from Avon and is also the most popular in this price range.<\/p>\n\n\n

    \n
    \"Avon<\/figure><\/div>\n\n\n

    Here are some key features of the Avon E Plus:<\/p>\n\n\n\n

    Specification<\/th>Details<\/th><\/tr><\/thead>
    Price<\/td>Rs. 29,371<\/td><\/tr>
    Mileage<\/td>50 km\/charge<\/td><\/tr>
    Charging Time<\/td>2-8 hours<\/td><\/tr>
    Variant<\/td>1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

    The Avon E Plus has a mileage of 50 km per charge and takes approximately 2-8 hours to fully charge. It comes with one variant option and provides a smooth and comfortable ride experience.<\/p>\n\n\n\n

    As an eco-friendly mode of transportation, the Avon E Plus helps reduce carbon emissions while offering convenience and efficiency. With its compact design and lightweight structure, it is easy to manoeuvre through traffic and navigate narrow streets.<\/p>\n\n\n\n

    Please note that availability may vary depending on your location, so it’s recommended to check with authorized dealers for more information.<\/p>\n\n\n\n

    Overall, the Avon E Plus combines affordability with excellent performance, making it a top choice for those looking for a reliable electric scooter under 30,000 in India.<\/p>\n\n\n\n

    Ujaas eZY<\/h2>\n\n\n\n

    Get ready to cruise around town with the Ujaas eZY, a budget-friendly and feature-packed electric scooter that will surely make your daily commute more enjoyable. The Ujaas eZY is priced at Rs 30,800 INR, making it an affordable option for those on a tight budget. This battery-powered scooter comes with a 48V battery and automatic transmission, providing a smooth and hassle-free riding experience.<\/p>\n\n\n

    \n
    \"Ujaas<\/figure><\/div>\n\n\n

    One of the standout features of the Ujaas eZY is its three-speed selection modes, allowing you to choose the speed that suits your needs. Additionally, it offers a range of 60 kilometres on a full charge, making it ideal for short-distance rides within the city. Charging the Ujaas eZY takes approximately 6-7 hours.<\/p>\n\n\n\n

    In terms of design and comfort, this electric scooter features telescopic front forks and hydraulic rear shock absorbers, ensuring a smooth ride even on bumpy roads. It also comes equipped with alloy wheels and tubeless tyres for added stability and safety.<\/p>\n\n\n\n

    The Ujaas eZY boasts a fully digital instrument console and LED DRLs (daytime running lights) for enhanced visibility. It also includes a loading rack for carrying small items conveniently.<\/p>\n\n\n\n

    Overall, the Ujaas eZY offers great value for money with its impressive features and affordable price tag. Whether you’re looking for an eco-friendly commuting option or simply want to enjoy the freedom of riding an electric scooter, the Ujaas eZY should definitely be on your list.<\/p>\n\n\n\n

    Komaki Super<\/h2>\n\n\n\n

    Cruise around town with the budget-friendly and feature-packed Ujaas eZY electric scooter, and now let’s take a look at the fun-looking Komaki <\/a>Super. The Komaki Super is an entry-level scooty that offers a powerful motor and comes in flash white and slate silver colour options. With its compact design, this scooty is perfect for navigating through city traffic.<\/p>\n\n\n\n

    \"Komaki<\/figure>\n\n\n\n

    One of the standout features of the Komaki Super is its powerful motor, which provides a thrilling ride experience. It has a range of 58-60 kilometres on a full charge, allowing you to travel longer distances without worrying about running out of power. The scooter takes approximately 5-6 hours to charge fully, ensuring that you can quickly get back on the road.<\/p>\n\n\n\n

    In terms of speed, the Komaki Super can reach a maximum speed of 30-37 KMPH, making it suitable for both short commutes and leisure rides. Its stylish appearance adds to its appeal, making it an attractive choice for riders looking for both functionality and aesthetics.<\/p>\n\n\n\n

    If you’re in search of an affordable scooty that doesn’t compromise on performance or style, then the Komaki Super is definitely worth considering. Its powerful motor, decent range per charge, and an eye-catching design make it a great option for those seeking liberation on their daily commutes or short-distance rides within the city.<\/p>\n\n\n\n

    Avon E-Lite<\/h2>\n\n\n\n

    With its sleek and compact design, the Avon E-Lite electric scooter offers a stylish and eco-friendly way to navigate through city traffic. This moped scooty from Avon is priced at Rs. 28,000 INR and is a popular choice for those looking for an affordable yet efficient mode of transportation.<\/p>\n\n\n

    \n
    \"Avon<\/figure><\/div>\n\n\n

    The Avon E-Lite is powered by a BLDC electric motor with a power output of 232W. It has a range of 51 kilometres on a full charge, making it suitable for short-distance rides within the city. The scooter takes around 4-7 hours to fully charge, allowing you to conveniently plug it in overnight and have it ready for your daily commute.<\/p>\n\n\n\n

    One notable feature of the Avon E-Lite is its storage box compartment, which provides ample space to store your essentials while on the go. Additionally, it comes equipped with tri-blade alloy wheels that not only enhance its overall appeal but also contribute to better stability and control.<\/p>\n\n\n\n

    Overall, the Avon E-Lite is a reliable and budget-friendly option for individuals seeking an electric scooter under 30,000 rupees. Its lightweight construction makes it easy to manoeuvre through congested streets, while its eco-friendly nature aligns with the growing demand for sustainable transportation solutions.<\/p>\n\n\n\n

    Specifications<\/th>Features<\/th><\/tr><\/thead>
    Power Output<\/td>232W<\/td><\/tr>
    Range<\/td>51 km<\/td><\/tr>
    Charging Time<\/td>4-7 hrs<\/td><\/tr>
    Storage Box<\/td>Yes<\/td><\/tr>
    Alloy Wheels<\/td>Yes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

    Table: Specifications and features of Avon E-Lite electric scooter<\/p>\n\n\n\n

    Ampere V48<\/h2>\n\n\n\n

    Experience the elegance and efficiency of the Ampere V48, an electric scooter that combines style with practicality. The Ampere V48 is a budget-friendly option under 30,000 in India that offers great value for money. With its sleek design and contemporary features, it is sure to turn heads on the road.<\/p>\n\n\n\n

    \"Ampere<\/figure>\n\n\n\n

    One of the key highlights of the Ampere V48 is its powerful 250W electric motor that provides smooth acceleration and a top speed of up to 25 km\/h. This makes it ideal for city commuting or short-distance rides. The scooter also comes equipped with a 48V lithium-ion battery pack that offers a range of around 45-50 km on a single charge.<\/p>\n\n\n\n

    In terms of convenience, the Ampere V48 boasts features like USB charging port, LED headlights, a digital instrument cluster, and a spacious storage compartment. It also comes with telescopic front suspension and dual rear shock absorbers for enhanced comfort during rides.<\/p>\n\n\n\n

    With its affordable price tag and impressive performance, the Ampere V48 stands out as an excellent choice for those looking for a reliable and eco-friendly mode of transportation. So why wait? Experience freedom on two wheels with the Ampere V48 electric scooter.<\/p>\n\n\n\n

    Platino Angel<\/h2>\n\n\n\n

    Get ready to be amazed by the elegance and efficiency of the Platino Angel electric scooter, as it offers a combination of style and practicality that will leave you in awe. The Platino Angel is one of the best scooty options under 30,000 in India in 2023.<\/p>\n\n\n\n

    Priced in the range of 34-36K, this scooter provides a sleek design and comes packed with more features compared to other scooters in its price range. It is perfect for those who want a scooty that not only looks good but also offers great performance.<\/p>\n\n\n

    \n
    \"Platino<\/figure><\/div>\n\n\n

    The Platino Angel is powered by an electric motor that delivers smooth acceleration and ensures a comfortable ride. With a maximum speed of around 25-30 kmph, it is suitable for city commuting or short-distance rides. The battery takes around 5-6 hours to charge fully, providing a range of approximately 50 kilometres on a single charge.<\/p>\n\n\n\n

    In terms of features, the Platino Angel offers alloy wheels, tubeless tires, and a fully digital instrument console. It also comes with LED DRLs (Daytime Running Lights) that enhance visibility on the road. Additionally, it has storage space where you can keep your essentials while riding.<\/p>\n\n\n\n

    Overall, the Platino Angel is a great option for those looking for an affordable yet stylish electric scooter under 30,000. It’s elegant design and efficient performance make it an excellent choice for riders who value liberation and want to make their daily commute more environmentally friendly.<\/p>\n\n\n\n

    Essel Energy<\/h2>\n\n\n\n

    The Essel Energy electric scooter is a game-changer in terms of style and performance, offering riders a thrilling and eco-friendly mode of transportation. With its sleek design and powerful performance, this scooter is perfect for those who want to make a statement while reducing their carbon footprint.<\/p>\n\n\n

    \n
    \"\"\/<\/figure><\/div>\n\n\n

    Here are some key features that make Essel Energy stand out:<\/p>\n\n\n\n

      \n
    • Stylish Design: The Essel Energy scooter boasts a modern and eye-catching design that is sure to turn heads wherever you go. Its aerodynamic body, vibrant colour options, and sporty accents give it a unique and edgy look.<\/li>\n\n\n\n
    • Powerful Performance: Equipped with a high-performance electric motor, the Essel Energy delivers impressive acceleration and top speed. Whether you’re navigating through city traffic or cruising on open roads, this scooter offers smooth and effortless rides.<\/li>\n\n\n\n
    • Long Battery Life: The Essel Energy comes with a long-lasting battery that provides an impressive range per charge. This means you can travel longer distances without worrying about running out of power.<\/li>\n\n\n\n
    • Convenient Charging: Charging Essel Energy is quick and easy. Simply plug it into any standard electrical outlet, and within a few hours, your scooter will be fully charged and ready to hit the road again.<\/li>\n\n\n\n
    • Eco-Friendly: As an electric scooter, Essel Energy produces zero emissions, making it an environmentally friendly choice. By choosing this scooter, you can contribute to reducing air pollution while enjoying your ride.<\/li>\n<\/ul>\n\n\n\n

      The Essel Energy electric scooter offers both style and performance in one package. With its sleek design, powerful performance, long battery life, convenient charging options, and eco-friendly nature, it’s no wonder why this scooter is gaining popularity among riders looking for an affordable yet stylish mode of transportation. So why wait? Experience liberation on two wheels with Essel Energy!<\/p>\n\n\n\n

      Ujaas E-Go<\/h2>\n\n\n\n

      Imagine cruising through the city streets on the Ujaas E-Go, a budget-friendly and feature-rich electric scooter that offers both style and convenience. The Ujaas E-Go is priced at Rs 30,800 INR, making it an affordable option for those looking for a scooty under 30000 in India.<\/p>\n\n\n\n

      This battery-powered scooter is equipped with a 48V battery and features an automatic transmission with reverse gear. It also offers three-speed selection modes, allowing you to choose the speed that suits your preference. With a range of 60 kilometres on a full charge, you can confidently explore the city without worrying about running out of power.<\/p>\n\n\n

      \n
      \"Ujaas<\/figure><\/div>\n\n\n

      Charging the Ujaas E-Go takes approximately 6-7 hours, ensuring that you can quickly get back on the road after recharging. The scooter comes with telescopic front forks and hydraulic rear shock absorbers for a smooth and comfortable ride. Additionally, it features alloy wheels and tubeless tires, providing stability and durability.<\/p>\n\n\n\n

      The Ujaas E-Go boasts a fully digital instrument console and LED DRLs for added convenience and safety. It also includes a loading rack for carrying small items during your rides. With its stylish design and various speed modes, this scooty is perfect for individuals seeking liberation while commuting within the city or taking short-distance rides.<\/p>\n\n\n\n

      Please note that availability of Ujaas scooters may vary in different cities. For specific information regarding availability in your area, I recommend contacting authorized dealerships or visiting their official website.<\/p>\n\n\n\n

      Overall, if you’re in search of an affordable yet feature-packed electric scooty under 30000 in India, the Ujaas E-Go should definitely be considered as one of your top choices.<\/p>\n\n\n\n

      Limited Availability<\/h2>\n\n\n\n

      Moving on from the Ujaas E-Go, let’s now discuss the limited availability of scooters under 30,000 in India in 2023. While there are several options to choose from within this budget range, it is important to note that certain brands and models may not be widely available in all cities.<\/p>\n\n\n\n

      One of the drawbacks of scooters priced under 30,000 is their limited reach in terms of availability. Some brands may have a strong presence in certain cities while being relatively unknown or less accessible in others. This can make it challenging for potential buyers to find their desired scooter model without having to compromise on features or specifications.<\/p>\n\n\n\n

      It is advisable for prospective buyers to thoroughly research and check with authorized dealerships or online platforms to ensure that their preferred scooter is available in their city or region before making a purchase decision.<\/p>\n\n\n\n

      However, despite these limitations, there are still plenty of options available within this price range that offer good performance and value for money. By exploring different brands and comparing features, one can find a suitable scooter that meets their needs and fits within their budget.<\/p>\n\n\n\n

      While the limited availability of scooters under 30,000 can pose a challenge, conducting thorough research and exploring various options will help individuals find a suitable scooter that fulfils their requirements.<\/p>\n\n\n\n

      Second-hand Options<\/h2>\n\n\n\n

      Considering the limited availability of affordable scooters, individuals can explore second-hand options to find a suitable and budget-friendly ride. Buying a used scooter has its advantages, including lower prices and a wider range of choices. Here are some reasons why considering second-hand scooters is a good idea:<\/p>\n\n\n\n

        \n
      • Cost-effective: Second-hand scooters are generally priced lower than brand-new ones, allowing buyers to save money while still enjoying the benefits of owning a scooter.<\/li>\n\n\n\n
      • More options: When looking for scooters under 30,000 in India, the selection may be limited for new models. However, by exploring the second-hand market, individuals can find a wider variety of models from different brands.<\/li>\n\n\n\n
      • Established performance: Used scooters have already been on the road and proven their performance capabilities. With proper maintenance and care, these scooters can continue to provide reliable transportation.<\/li>\n\n\n\n
      • Negotiation potential: Unlike buying new vehicles where prices are fixed, negotiating the price of a used scooter is possible. This gives buyers an opportunity to get an even better deal.<\/li>\n<\/ul>\n\n\n\n

        By considering second-hand options, individuals can overcome the limitations posed by limited availability in the affordable scooter market and find a cost-effective ride that meets their needs. It is important to thoroughly inspect any used scooter before making a purchase and ensure all necessary documents are in order for a smooth ownership experience.<\/p>\n\n\n\n

        No Petrol Engine<\/h2>\n\n\n\n

        Moving on to the next subtopic, it’s worth noting that in the price range of under 30,000 rupees for scooty options in India 2023, there are no petrol engine scooters available. This means that all the scooters mentioned earlier in this price range are electric and not powered by traditional petrol engines.<\/p>\n\n\n\n

        While some may prefer the convenience and familiarity of petrol engines, it’s important to understand that electric scooters have their own advantages. They offer a more eco-friendly commuting option within the city or for short-distance rides. Additionally, they tend to have lower maintenance costs compared to their petrol counterparts.<\/p>\n\n\n\n

        Although not having petrol engine options might be seen as a limitation for those who prefer them, it opens up opportunities for exploring alternative modes of transportation that are more environmentally friendly. Electric scooters provide an efficient and sustainable way to travel while reducing air pollution and carbon emissions.<\/p>\n\n\n\n

        So if you’re considering purchasing a scooter under 30,000 rupees in India 2023, keep in mind that you won’t find any petrol engine options available. However, with advancements in technology and the increasing popularity of electric vehicles, these electric scooters can provide a reliable and cost-effective mode of transportation for your daily commute or short-distance travel.<\/p>\n\n\n\n

        More Features<\/h2>\n\n\n\n

        Furthermore, electric scooters under 30,000 rupees in India in 2023 offer a range of features that make them an attractive option for eco-friendly commuting. These scooters not only help reduce carbon emissions but also provide convenience and cost savings. One of the key features that set these scooters apart is their battery-powered engines, which eliminate the need for petrol or diesel fuel. This means lower operating costs and reduced dependence on fossil fuels.<\/p>\n\n\n\n

        In addition to being environmentally friendly, electric scooters under 30,000 rupees also come with various features that enhance their usability. Many models offer automatic transmission, making it easier for riders to navigate through traffic without the hassle of shifting gears manually. Some scooters even have reverse gear functionality, allowing riders to easily manoeuvre in tight spaces or parking lots.<\/p>\n\n\n\n

        Another notable feature is the availability of different speed modes. Riders can choose between multiple speed settings based on their preference and riding conditions. This flexibility allows users to adapt their scooter’s performance to suit different terrains or traffic situations.<\/p>\n\n\n\n

        Additionally, electric scooters under 30,000 rupees often come equipped with advanced suspension systems and alloy wheels for improved stability and comfort while riding. Many models also feature digital instrument consoles that provide real-time information such as battery level and speed.<\/p>\n\n\n\n

        Overall, these electric scooters combine affordability with practicality by offering a range of features that enhance the riding experience while minimizing environmental impact. With advancements in technology and increased demand for sustainable transportation options, these scooters are becoming increasingly popular among commuters looking for an economical and eco-friendly way to travel within cities or cover short distances.<\/p>\n\n\n\n

        Frequently Asked Questions<\/h2>\n\n\n\n

        Can I find a scooty with a petrol engine in the price range of under 30,000 in India?<\/h3>\n\n\n\n

        No, a scooty with a petrol engine is not available in the price range of under 30,000 in India. The options in this price range are limited to electric scooters, which offer eco-friendly commuting and short-distance rides.<\/p>\n\n\n\n

        Are there any scooters with more features available in the price range of under 30,000?<\/h3>\n\n\n\n

        Yes, there are scooters with more features available in the price range of under 30,000. Some options include Ujaas eZY, Komaki Super, Avon E-Lite, and Avon E Plus. These scooters offer an automatic transmission, reverse gear, a digital instrument console, alloy wheels, and more.<\/p>\n\n\n\n

        What are the options for second-hand scooters under 30,000?<\/h3>\n\n\n\n

        There are several options for second-hand scooters under 30,000. These include models like Ujaas eZY, Komaki Super, Avon E-Lite, Avon E Plus, Ampere V48, Platino Angel, Essel Energy, and Ujaas E-Go.<\/p>\n\n\n\n

        Are there any limitations or drawbacks in terms of the availability of these scooters in certain cities?<\/h3>\n\n\n\n

        Yes, there are limitations and drawbacks in terms of the availability of these scooters in certain cities. Some brands may have limited presence or dealerships in specific areas, which can make it challenging to find these scooters in those cities.<\/p>\n\n\n\n

        Where can I find comprehensive coverage of cars, bikes, and scooters, including scooty options under 30,000 in India?<\/h3>\n\n\n\n

        You can find comprehensive coverage of cars, bikes, and scooters, including scooty options under 30,000 in India, on Scooty Blog. They provide detailed information and updates on various models and brands in the market.<\/p>\n\n\n\n

        Conclusion<\/h2>\n\n\n\n

        In conclusion, when looking for a scooty under 30,000 rupees in India 2023, there are several great options available. The Ujaas eZY and Komaki Super offer a good range and compact designs. The Avon E-Lite and Avon E Plus are moped scooters that are smaller and more affordable. However, it is important to note that the availability of these brands may vary depending on the city. Interested buyers can also consider second-hand options within this price range. These eco-friendly scooters provide automatic transmission, reverse gear, and LED DRLs for a convenient riding experience.<\/p>\n","protected":false},"excerpt":{"rendered":"

        Best scooty under 30000 rupees in India 2023. If you’re looking for an affordable and eco-friendly mode of transportation within the city, we’ve got you covered. In this article, we will explore the top scooters available in this price range and provide you with all the necessary information to make an informed decision. Some popular […]<\/p>\n","protected":false},"author":1,"featured_media":5324,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[117,118,119,120,121,122,123,124],"class_list":{"0":"post-4701","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-scooters","8":"tag-ampere-v48","9":"tag-avon-e-plus","10":"tag-avon-e-lite","11":"tag-budget-scooters","12":"tag-komaki-super","13":"tag-scooter-under-30000","14":"tag-ujaas-e-go","15":"tag-ujaas-ezy"},"_links":{"self":[{"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/posts\/4701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/comments?post=4701"}],"version-history":[{"count":1,"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/posts\/4701\/revisions"}],"predecessor-version":[{"id":5326,"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/posts\/4701\/revisions\/5326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/media\/5324"}],"wp:attachment":[{"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/media?parent=4701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/categories?post=4701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.riderslog.org\/wp-json\/wp\/v2\/tags?post=4701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}