import 'core-js/modules/es.array.filter';
import 'core-js/modules/es.array.find';
import 'core-js/modules/es.array.includes';
import 'core-js/modules/es.array.join';
import 'core-js/modules/es.array.map';
import 'core-js/modules/es.array.slice';
import 'core-js/modules/es.function.name';
import 'core-js/modules/es.string.includes';
import 'core-js/modules/es.string.trim';
import 'core-js/modules/es.string.replace';

function _typeof(obj) {
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function (obj) {
      return typeof obj;
    };
  } else {
    _typeof = function (obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}

function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
}

function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;
    Object.defineProperty(target, descriptor.key, descriptor);
  }
}

function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  return Constructor;
}

function _taggedTemplateLiteral(strings, raw) {
  if (!raw) {
    raw = strings.slice(0);
  }

  return Object.freeze(Object.defineProperties(strings, {
    raw: {
      value: Object.freeze(raw)
    }
  }));
}

var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

function createCommonjsModule(fn, module) {
	return module = { exports: {} }, fn(module, module.exports), module.exports;
}

var css_escape = createCommonjsModule(function (module, exports) {
(function(root, factory) {
	// https://github.com/umdjs/umd/blob/master/returnExports.js
	{
		// For Node.js.
		module.exports = factory(root);
	}
}(typeof commonjsGlobal != 'undefined' ? commonjsGlobal : commonjsGlobal, function(root) {

	if (root.CSS && root.CSS.escape) {
		return root.CSS.escape;
	}

	// https://drafts.csswg.org/cssom/#serialize-an-identifier
	var cssEscape = function(value) {
		if (arguments.length == 0) {
			throw new TypeError('`CSS.escape` requires an argument.');
		}
		var string = String(value);
		var length = string.length;
		var index = -1;
		var codeUnit;
		var result = '';
		var firstCodeUnit = string.charCodeAt(0);
		while (++index < length) {
			codeUnit = string.charCodeAt(index);
			// Note: there’s no need to special-case astral symbols, surrogate
			// pairs, or lone surrogates.

			// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER
			// (U+FFFD).
			if (codeUnit == 0x0000) {
				result += '\uFFFD';
				continue;
			}

			if (
				// If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
				// U+007F, […]
				(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||
				// If the character is the first character and is in the range [0-9]
				// (U+0030 to U+0039), […]
				(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
				// If the character is the second character and is in the range [0-9]
				// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
				(
					index == 1 &&
					codeUnit >= 0x0030 && codeUnit <= 0x0039 &&
					firstCodeUnit == 0x002D
				)
			) {
				// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point
				result += '\\' + codeUnit.toString(16) + ' ';
				continue;
			}

			if (
				// If the character is the first character and is a `-` (U+002D), and
				// there is no second character, […]
				index == 0 &&
				length == 1 &&
				codeUnit == 0x002D
			) {
				result += '\\' + string.charAt(index);
				continue;
			}

			// If the character is not handled by one of the above rules and is
			// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
			// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
			// U+005A), or [a-z] (U+0061 to U+007A), […]
			if (
				codeUnit >= 0x0080 ||
				codeUnit == 0x002D ||
				codeUnit == 0x005F ||
				codeUnit >= 0x0030 && codeUnit <= 0x0039 ||
				codeUnit >= 0x0041 && codeUnit <= 0x005A ||
				codeUnit >= 0x0061 && codeUnit <= 0x007A
			) {
				// the character itself
				result += string.charAt(index);
				continue;
			}

			// Otherwise, the escaped character.
			// https://drafts.csswg.org/cssom/#escape-a-character
			result += '\\' + string.charAt(index);

		}
		return result;
	};

	if (!root.CSS) {
		root.CSS = {};
	}

	root.CSS.escape = cssEscape;
	return cssEscape;

}));
});

/**
 * Strips diacritics.
 * @param {string} str
 * @returns {string}
 */
function removeDiacritics(str) {
  // A polyfill for `normalize` will be even larger than our code below, so
  //   not practical to embed
  if (str.normalize) {
    return str.normalize('NFD').replace(/[\u0300-\u036F]/g, '');
  }

  var defaultDiacriticsRemovalMap = [{
    'base': 'A',
    'letters': /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g
  }, {
    'base': 'AA',
    'letters': /[\uA732]/g
  }, {
    'base': 'AE',
    'letters': /[\u00C6\u01FC\u01E2]/g
  }, {
    'base': 'AO',
    'letters': /[\uA734]/g
  }, {
    'base': 'AU',
    'letters': /[\uA736]/g
  }, {
    'base': 'AV',
    'letters': /[\uA738\uA73A]/g
  }, {
    'base': 'AY',
    'letters': /[\uA73C]/g
  }, {
    'base': 'B',
    'letters': /[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g
  }, {
    'base': 'C',
    'letters': /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g
  }, {
    'base': 'D',
    'letters': /[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g
  }, {
    'base': 'DZ',
    'letters': /[\u01F1\u01C4]/g
  }, {
    'base': 'Dz',
    'letters': /[\u01F2\u01C5]/g
  }, {
    'base': 'E',
    'letters': /[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g
  }, {
    'base': 'F',
    'letters': /[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g
  }, {
    'base': 'G',
    'letters': /[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g
  }, {
    'base': 'H',
    'letters': /[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g
  }, {
    'base': 'I',
    'letters': /[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g
  }, {
    'base': 'J',
    'letters': /[\u004A\u24BF\uFF2A\u0134\u0248]/g
  }, {
    'base': 'K',
    'letters': /[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g
  }, {
    'base': 'L',
    'letters': /[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g
  }, {
    'base': 'LJ',
    'letters': /[\u01C7]/g
  }, {
    'base': 'Lj',
    'letters': /[\u01C8]/g
  }, {
    'base': 'M',
    'letters': /[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g
  }, {
    'base': 'N',
    'letters': /[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g
  }, {
    'base': 'NJ',
    'letters': /[\u01CA]/g
  }, {
    'base': 'Nj',
    'letters': /[\u01CB]/g
  }, {
    'base': 'O',
    'letters': /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g
  }, {
    'base': 'OI',
    'letters': /[\u01A2]/g
  }, {
    'base': 'OO',
    'letters': /[\uA74E]/g
  }, {
    'base': 'OU',
    'letters': /[\u0222]/g
  }, {
    'base': 'P',
    'letters': /[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g
  }, {
    'base': 'Q',
    'letters': /[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g
  }, {
    'base': 'R',
    'letters': /[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g
  }, {
    'base': 'S',
    'letters': /[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g
  }, {
    'base': 'T',
    'letters': /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g
  }, {
    'base': 'TZ',
    'letters': /[\uA728]/g
  }, {
    'base': 'U',
    'letters': /[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g
  }, {
    'base': 'V',
    'letters': /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g
  }, {
    'base': 'VY',
    'letters': /[\uA760]/g
  }, {
    'base': 'W',
    'letters': /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g
  }, {
    'base': 'X',
    'letters': /[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g
  }, {
    'base': 'Y',
    'letters': /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g
  }, {
    'base': 'Z',
    'letters': /[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g
  }, {
    'base': 'a',
    'letters': /[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g
  }, {
    'base': 'aa',
    'letters': /[\uA733]/g
  }, {
    'base': 'ae',
    'letters': /[\u00E6\u01FD\u01E3]/g
  }, {
    'base': 'ao',
    'letters': /[\uA735]/g
  }, {
    'base': 'au',
    'letters': /[\uA737]/g
  }, {
    'base': 'av',
    'letters': /[\uA739\uA73B]/g
  }, {
    'base': 'ay',
    'letters': /[\uA73D]/g
  }, {
    'base': 'b',
    'letters': /[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g
  }, {
    'base': 'c',
    'letters': /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g
  }, {
    'base': 'd',
    'letters': /[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g
  }, {
    'base': 'dz',
    'letters': /[\u01F3\u01C6]/g
  }, {
    'base': 'e',
    'letters': /[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g
  }, {
    'base': 'f',
    'letters': /[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g
  }, {
    'base': 'g',
    'letters': /[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g
  }, {
    'base': 'h',
    'letters': /[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g
  }, {
    'base': 'hv',
    'letters': /[\u0195]/g
  }, {
    'base': 'i',
    'letters': /[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g
  }, {
    'base': 'j',
    'letters': /[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g
  }, {
    'base': 'k',
    'letters': /[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g
  }, {
    'base': 'l',
    'letters': /[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g
  }, {
    'base': 'lj',
    'letters': /[\u01C9]/g
  }, {
    'base': 'm',
    'letters': /[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g
  }, {
    'base': 'n',
    'letters': /[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g
  }, {
    'base': 'nj',
    'letters': /[\u01CC]/g
  }, {
    'base': 'o',
    'letters': /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g
  }, {
    'base': 'oi',
    'letters': /[\u01A3]/g
  }, {
    'base': 'ou',
    'letters': /[\u0223]/g
  }, {
    'base': 'oo',
    'letters': /[\uA74F]/g
  }, {
    'base': 'p',
    'letters': /[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g
  }, {
    'base': 'q',
    'letters': /[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g
  }, {
    'base': 'r',
    'letters': /[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g
  }, {
    'base': 's',
    'letters': /[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g
  }, {
    'base': 't',
    'letters': /[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g
  }, {
    'base': 'tz',
    'letters': /[\uA729]/g
  }, {
    'base': 'u',
    'letters': /[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g
  }, {
    'base': 'v',
    'letters': /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g
  }, {
    'base': 'vy',
    'letters': /[\uA761]/g
  }, {
    'base': 'w',
    'letters': /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g
  }, {
    'base': 'x',
    'letters': /[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g
  }, {
    'base': 'y',
    'letters': /[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g
  }, {
    'base': 'z',
    'letters': /[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g
  }];
  return defaultDiacriticsRemovalMap.reduce(function (s, _ref) {
    var letters = _ref.letters,
        base = _ref.base;
    return s.replace(letters, base);
  }, str);
}

// sprintf format specifiers
var s = 's'; // it only does '%s', and return '' when arguments are undefined

var sprintf = function sprintf(strings) {
  for (var _len = arguments.length, formats = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
    formats[_key - 1] = arguments[_key];
  }

  return function () {
    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      args[_key2] = arguments[_key2];
    }

    var retStr = '';
    return strings.slice(0, -1).some(function (str, i) {
      switch (formats[i]) {
        default:
          throw new TypeError('Unrecognized sprintf format');

        case 's':
          {
            var arg = args[i];

            if (arg === null || arg === undefined) {
              return true;
            }

            retStr += str + arg;
            return false;
          }
      }
    }) ? '' : retStr + strings.slice(-1);
  };
};

function _templateObject24() {
  var data = _taggedTemplateLiteral(["[data-group=\"", "\"]"]);

  _templateObject24 = function _templateObject24() {
    return data;
  };

  return data;
}

function _templateObject23() {
  var data = _taggedTemplateLiteral(["[value=\"", "\"]"]);

  _templateObject23 = function _templateObject23() {
    return data;
  };

  return data;
}

function _templateObject22() {
  var data = _taggedTemplateLiteral(["[value=\"", "\"]"]);

  _templateObject22 = function _templateObject22() {
    return data;
  };

  return data;
}

function _templateObject21() {
  var data = _taggedTemplateLiteral(["[", "][data-group=\"", "\"]"]);

  _templateObject21 = function _templateObject21() {
    return data;
  };

  return data;
}

function _templateObject20() {
  var data = _taggedTemplateLiteral(["input[", "]:checked"]);

  _templateObject20 = function _templateObject20() {
    return data;
  };

  return data;
}

function _templateObject19() {
  var data = _taggedTemplateLiteral(["[data-group=\"", "\"]"]);

  _templateObject19 = function _templateObject19() {
    return data;
  };

  return data;
}

function _templateObject18() {
  var data = _taggedTemplateLiteral(["[data-group=\"", "\"]"]);

  _templateObject18 = function _templateObject18() {
    return data;
  };

  return data;
}

function _templateObject17() {
  var data = _taggedTemplateLiteral(["<input type=\"checkbox\" ", " ", ">"]);

  _templateObject17 = function _templateObject17() {
    return data;
  };

  return data;
}

function _templateObject16() {
  var data = _taggedTemplateLiteral(["<label class=\"optgroup ", "\" data-group=\"", "\">"]);

  _templateObject16 = function _templateObject16() {
    return data;
  };

  return data;
}

function _templateObject15() {
  var data = _taggedTemplateLiteral(["<span>", "</span>"]);

  _templateObject15 = function _templateObject15() {
    return data;
  };

  return data;
}

function _templateObject14() {
  var data = _taggedTemplateLiteral([" data-group=\"", "\""]);

  _templateObject14 = function _templateObject14() {
    return data;
  };

  return data;
}

function _templateObject13() {
  var data = _taggedTemplateLiteral(["<input type=\"", "\" ", "", "", "", ">"]);

  _templateObject13 = function _templateObject13() {
    return data;
  };

  return data;
}

function _templateObject12() {
  var data = _taggedTemplateLiteral(["<label class=\"", "\">"]);

  _templateObject12 = function _templateObject12() {
    return data;
  };

  return data;
}

function _templateObject11() {
  var data = _taggedTemplateLiteral(["<li class=\"", " ", "\" ", " ", ">"]);

  _templateObject11 = function _templateObject11() {
    return data;
  };

  return data;
}

function _templateObject10() {
  var data = _taggedTemplateLiteral(["style=\"", "\""]);

  _templateObject10 = function _templateObject10() {
    return data;
  };

  return data;
}

function _templateObject9() {
  var data = _taggedTemplateLiteral(["title=\"", "\""]);

  _templateObject9 = function _templateObject9() {
    return data;
  };

  return data;
}

function _templateObject8() {
  var data = _taggedTemplateLiteral(["<li class=\"ms-no-results\">", "</li>"]);

  _templateObject8 = function _templateObject8() {
    return data;
  };

  return data;
}

function _templateObject7() {
  var data = _taggedTemplateLiteral(["<input type=\"checkbox\" ", " />"]);

  _templateObject7 = function _templateObject7() {
    return data;
  };

  return data;
}

function _templateObject6() {
  var data = _taggedTemplateLiteral(["placeholder=\"", "\""]);

  _templateObject6 = function _templateObject6() {
    return data;
  };

  return data;
}

function _templateObject5() {
  var data = _taggedTemplateLiteral(["<div class=\"ms-drop ", "\"></div>"]);

  _templateObject5 = function _templateObject5() {
    return data;
  };

  return data;
}

function _templateObject4() {
  var data = _taggedTemplateLiteral(["\n      <button type=\"button\" class=\"ms-choice\">\n      <span class=\"placeholder\">", "</span>\n      <div></div>\n      </button>\n    "]);

  _templateObject4 = function _templateObject4() {
    return data;
  };

  return data;
}

function _templateObject3() {
  var data = _taggedTemplateLiteral(["title=\"", "\""]);

  _templateObject3 = function _templateObject3() {
    return data;
  };

  return data;
}

function _templateObject2() {
  var data = _taggedTemplateLiteral(["<div class=\"ms-parent ", "\" ", "/>"]);

  _templateObject2 = function _templateObject2() {
    return data;
  };

  return data;
}

function _templateObject() {
  var data = _taggedTemplateLiteral(["label[for=\"", "\"]"]);

  _templateObject = function _templateObject() {
    return data;
  };

  return data;
}

var MultipleSelect =
/*#__PURE__*/
function () {
  function MultipleSelect($el, options) {
    var _this = this;

    _classCallCheck(this, MultipleSelect);

    var el = $el[0];
    var name = el.getAttribute('name') || options.name || '';
    this.options = $.extend({}, defaults, options); // hide select element

    this.$el = $el.hide(); // label element

    this.$label = this.$el.closest('label');

    if (this.$label.length === 0 && el.getAttribute('id')) {
      this.$label = $(sprintf(_templateObject(), s)(css_escape(el.getAttribute('id'))));
    } // restore class and title from select element


    this.$parent = $(sprintf(_templateObject2(), s, s)(el.getAttribute('class') || '', sprintf(_templateObject3(), s)(el.getAttribute('title')))); // add placeholder to choice button

    this.options.placeholder = this.options.placeholder || el.getAttribute('placeholder') || '';
    this.$choice = $(sprintf(_templateObject4(), s)(this.options.placeholder)); // default position is bottom

    this.$drop = $(sprintf(_templateObject5(), s)(this.options.position));

    if (this.options.dropWidth) {
      this.$drop.css('width', this.options.dropWidth);
    }

    this.$el.after(this.$parent);
    this.$parent.append(this.$choice);
    this.$parent.append(this.$drop);

    if (el.disabled) {
      this.$choice.addClass('disabled');
    }

    this.$parent.css('width', this.options.width || this.$el.css('width') || this.$el.outerWidth() + 20);
    this.selectAllName = "data-name=\"selectAll".concat(name, "\"");
    this.selectGroupName = "data-name=\"selectGroup".concat(name, "\"");
    this.selectItemName = "data-name=\"selectItem".concat(name, "\"");

    if (!this.options.keepOpen) {
      $(document).click(function (e) {
        if ($(e.target)[0] === _this.$choice[0] || $(e.target).parents('.ms-choice')[0] === _this.$choice[0]) {
          return;
        }

        if (($(e.target)[0] === _this.$drop[0] || $(e.target).parents('.ms-drop')[0] !== _this.$drop[0] && e.target !== el) && _this.options.isOpen) {
          _this.close();
        }
      });
    }

    this.options.onAfterCreate();
  }

  _createClass(MultipleSelect, [{
    key: "init",
    value: function init() {
      var _this2 = this;

      var $ul = $('<ul></ul>');
      this.$drop.html('');

      if (this.options.filter) {
        this.$drop.append("\n        <div class=\"ms-search\">\n          <input type=\"text\" autocomplete=\"off\" autocorrect=\"off\"\n            autocapitalize=\"off\" spellcheck=\"false\"\n            ".concat(sprintf(_templateObject6(), s)(this.options.filterPlaceholder), ">\n        </div>\n      "));
      }

      if (this.options.selectAll && !this.options.single) {
        $ul.append(['<li class="ms-select-all">', '<label>', sprintf(_templateObject7(), s)(this.selectAllName), "<span>".concat(this.options.formatSelectAll(), "</span>"), '</label>', '</li>'].join(''));
      }

      $.each(this.$el.children(), function (i, elm) {
        $ul.append(_this2.optionToHtml(i, elm));
      });
      $ul.append(sprintf(_templateObject8(), s)(this.options.formatNoMatchesFound()));
      this.$drop.append($ul);
      this.$drop.find('ul').css('max-height', "".concat(this.options.maxHeight, "px"));
      this.$drop.find('.multiple').css('width', "".concat(this.options.multipleWidth, "px"));
      this.$searchInput = this.$drop.find('.ms-search input');
      this.$selectAll = this.$drop.find("input[".concat(this.selectAllName, "]"));
      this.$selectGroups = this.$drop.find("input[".concat(this.selectGroupName, "]"));
      this.$selectItems = this.$drop.find("input[".concat(this.selectItemName, "]:enabled"));
      this.$disableItems = this.$drop.find("input[".concat(this.selectItemName, "]:disabled"));
      this.$noResults = this.$drop.find('.ms-no-results');
      this.events();
      this.updateSelectAll(true);
      this.update(true);
      this.updateOptGroupSelect(true);

      if (this.options.isOpen) {
        this.open();
      }

      if (this.options.openOnHover) {
        this.$parent.hover(function () {
          _this2.open();
        }, function () {
          _this2.close();
        });
      }
    }
  }, {
    key: "optionToHtml",
    value: function optionToHtml(i, elm, group, groupDisabled) {
      var _this3 = this;

      var $elm = $(elm);
      var el = $elm[0];
      var classes = el.getAttribute('class') || '';
      var title = sprintf(_templateObject9(), s)(el.getAttribute('title'));
      var multiple = this.options.multiple ? 'multiple' : '';
      var disabled;
      var type = this.options.single ? 'radio' : 'checkbox';

      if ($elm.is('option')) {
        var text = this.options.textTemplate($elm);
        var value = el.value,
            selected = el.selected;
        var customStyle = this.options.styler(value);
        var style = customStyle ? sprintf(_templateObject10(), s)(customStyle) : '';
        disabled = groupDisabled || el.disabled;
        var $el = $([sprintf(_templateObject11(), s, s, s, s)(multiple, classes, title, style), sprintf(_templateObject12(), s)(disabled ? 'disabled' : ''), sprintf(_templateObject13(), s, s, s, s, s)(type, this.selectItemName, selected ? ' checked="checked"' : '', disabled ? ' disabled="disabled"' : '', sprintf(_templateObject14(), s)(group)), sprintf(_templateObject15(), s)(text), '</label>', '</li>'].join(''));
        $el.find('input').val(value);
        return $el;
      }

      if ($elm.is('optgroup')) {
        var label = this.options.labelTemplate($elm);
        var $group = $('<div/>');
        group = "group_".concat(i);
        disabled = el.disabled;
        $group.append(['<li class="group">', sprintf(_templateObject16(), s, s)(disabled ? 'disabled' : '', group), this.options.hideOptgroupCheckboxes || this.options.single ? '' : sprintf(_templateObject17(), s, s)(this.selectGroupName, disabled ? 'disabled="disabled"' : ''), label, '</label>', '</li>'].join(''));
        $.each($elm.children(), function (j, elem) {
          $group.append(_this3.optionToHtml(j, elem, group, disabled));
        });
        return $group.html();
      } // Append nothing


      return undefined;
    }
  }, {
    key: "events",
    value: function events() {
      var _this4 = this;

      var toggleOpen = function toggleOpen(e) {
        e.preventDefault();

        _this4[_this4.options.isOpen ? 'close' : 'open']();
      };

      if (this.$label) {
        this.$label.off('click').on('click', function (e) {
          if (e.target.nodeName.toLowerCase() !== 'label' || e.target !== _this4) {
            return;
          }

          toggleOpen(e);

          if (!_this4.options.filter || !_this4.options.isOpen) {
            _this4.focus();
          }

          e.stopPropagation(); // Causes lost focus otherwise
        });
      }

      this.$choice.off('click').on('click', toggleOpen).off('focus').on('focus', this.options.onFocus).off('blur').on('blur', this.options.onBlur);
      this.$parent.off('keydown').on('keydown', function (e) {
        // esc key
        if (e.which === 27) {
          _this4.close();

          _this4.$choice.focus();
        }
      });
      this.$searchInput.off('keydown').on('keydown', function (e) {
        // Ensure shift-tab causes lost focus from filter as with clicking away
        if (e.keyCode === 9 && e.shiftKey) {
          _this4.close();
        }
      }).off('keyup').on('keyup', function (e) {
        // enter or space
        // Avoid selecting/deselecting if no choices made
        if (_this4.options.filterAcceptOnEnter && [13, 32].includes(e.which) && _this4.$searchInput.val()) {
          _this4.$selectAll.click();

          _this4.close();

          _this4.focus();

          return;
        }

        _this4.filter();
      });
      this.$selectAll.off('click').on('click', function (e) {
        var checked = $(e.currentTarget).prop('checked');

        var $items = _this4.$selectItems.filter(':visible');

        if ($items.length === _this4.$selectItems.length) {
          _this4[checked ? 'checkAll' : 'uncheckAll']();
        } else {
          // when the filter option is true
          _this4.$selectGroups.prop('checked', checked);

          $items.prop('checked', checked);

          _this4.options[checked ? 'onCheckAll' : 'onUncheckAll']();

          _this4.update();
        }
      });
      this.$selectGroups.off('click').on('click', function (e) {
        var $this = $(e.currentTarget);
        var group = $this.parent()[0].getAttribute('data-group');

        var $items = _this4.$selectItems.filter(':visible');

        var $children = $items.filter(sprintf(_templateObject18(), s)(group));
        var checked = $children.length !== $children.filter(':checked').length;
        $children.prop('checked', checked);

        _this4.updateSelectAll();

        _this4.update();

        _this4.options.onOptgroupClick({
          label: $this.parent().text(),
          checked: checked,
          children: $children.get().map(function (el) {
            return {
              label: $(el).parent().text(),
              value: $(el).val(),
              check: $(el).prop('checked')
            };
          })
        });
      });
      this.$selectItems.off('click').on('click', function (e) {
        var $this = $(e.currentTarget);

        if (_this4.options.single) {
          var clickedVal = $(e.currentTarget).val();

          _this4.$selectItems.filter(function (i, el) {
            return $(el).val() !== clickedVal;
          }).each(function (i, el) {
            $(el).prop('checked', false);
          });
        }

        _this4.updateSelectAll();

        _this4.update();

        _this4.updateOptGroupSelect();

        _this4.options.onClick({
          label: $this.parent().text(),
          value: $this.val(),
          checked: $this.prop('checked')
        });

        if (_this4.options.single && _this4.options.isOpen && !_this4.options.keepOpen) {
          _this4.close();
        }
      });
    }
  }, {
    key: "open",
    value: function open() {
      if (this.$choice.hasClass('disabled')) {
        return;
      }

      this.options.isOpen = true;
      this.$choice.find('>div').addClass('open');
      this.$drop[this.animateMethod('show')](); // fix filter bug: no results show

      this.$selectAll.parent().show();
      this.$noResults.hide(); // Fix #77: 'All selected' when no options

      if (!this.$el.children().length) {
        this.$selectAll.parent().hide();
        this.$noResults.show();
      }

      if (this.options.container) {
        var offset = this.$drop.offset();
        this.$drop.appendTo($(this.options.container));
        this.$drop.offset({
          top: offset.top,
          left: offset.left
        });
        this.$drop.outerWidth(this.$parent.outerWidth());
      }

      if (this.$el.children().length && this.options.filter) {
        this.$searchInput.val('');
        this.$searchInput.focus();
        this.filter();
      }

      this.options.onOpen();
    }
  }, {
    key: "close",
    value: function close() {
      this.options.isOpen = false;
      this.$choice.find('>div').removeClass('open');
      this.$drop[this.animateMethod('hide')]();

      if (this.options.container) {
        this.$parent.append(this.$drop);
        this.$drop.css({
          'top': 'auto',
          'left': 'auto'
        });
      }

      this.options.onClose();
    }
  }, {
    key: "animateMethod",
    value: function animateMethod(method) {
      var methods = {
        show: {
          fade: 'fadeIn',
          slide: 'slideDown'
        },
        hide: {
          fade: 'fadeOut',
          slide: 'slideUp'
        }
      };
      return methods[method][this.options.animate] || method;
    }
  }, {
    key: "update",
    value: function update(ignoreTrigger) {
      var valueSelects = this.getSelects();
      var textSelects = this.options.displayValues ? valueSelects : this.getSelects('text');
      var $span = this.$choice.find('>span');
      var sl = valueSelects.length;

      if (sl === 0) {
        $span.addClass('placeholder').html(this.options.placeholder);
      } else if (this.options.formatAllSelected() && sl === this.$selectItems.length + this.$disableItems.length) {
        $span.removeClass('placeholder').html(this.options.formatAllSelected());
      } else if (this.options.ellipsis && sl > this.options.minimumCountSelected) {
        $span.removeClass('placeholder').text("".concat(textSelects.slice(0, this.options.minimumCountSelected).join(this.options.displayDelimiter), "..."));
      } else if (this.options.formatCountSelected() && sl > this.options.minimumCountSelected) {
        $span.removeClass('placeholder').html(this.options.formatCountSelected(sl, this.$selectItems.length + this.$disableItems.length));
      } else {
        $span.removeClass('placeholder').text(textSelects.join(this.options.displayDelimiter));
      }

      if (this.options.displayTitle) {
        $span.prop('title', this.getSelects('text'));
      } // set selects to select


      this.$el.val(this.getSelects()); // add selected class to selected li

      this.$drop.find('li').removeClass('selected');
      this.$drop.find('input:checked').each(function (i, el) {
        $(el).parents('li').first().addClass('selected');
      }); // trigger <select> change event

      if (!ignoreTrigger) {
        this.$el.trigger('change');
      }
    }
  }, {
    key: "updateSelectAll",
    value: function updateSelectAll(isInit) {
      var $items = this.$selectItems;

      if (!isInit) {
        $items = $items.filter(':visible');
      }

      this.$selectAll.prop('checked', $items.length && $items.length === $items.filter(':checked').length);

      if (!isInit && this.$selectAll.prop('checked')) {
        this.options.onCheckAll();
      }
    }
  }, {
    key: "updateOptGroupSelect",
    value: function updateOptGroupSelect(isInit) {
      var $items = this.$selectItems;

      if (!isInit) {
        $items = $items.filter(':visible');
      }

      $.each(this.$selectGroups, function (i, val) {
        var group = $(val).parent()[0].getAttribute('data-group');
        var $children = $items.filter(sprintf(_templateObject19(), s)(group));
        $(val).prop('checked', $children.length && $children.length === $children.filter(':checked').length);
      });
    } // value or text, default: 'value'

  }, {
    key: "getSelects",
    value: function getSelects(type) {
      var _this5 = this;

      var texts = [];
      var values = [];
      this.$drop.find(sprintf(_templateObject20(), s)(this.selectItemName)).each(function (i, el) {
        texts.push($(el).parents('li').first().text());
        values.push($(el).val());
      });

      if (type === 'text' && this.$selectGroups.length) {
        texts = [];
        this.$selectGroups.each(function (i, el) {
          var html = [];
          var text = $.trim($(el).parent().text());
          var group = $(el).parent().data('group');

          var $children = _this5.$drop.find(sprintf(_templateObject21(), s, s)(_this5.selectItemName, group));

          var $selected = $children.filter(':checked');

          if (!$selected.length) {
            return;
          }

          html.push('[');
          html.push(text);

          if ($children.length > $selected.length) {
            var list = [];
            $selected.each(function (j, elem) {
              list.push($(elem).parent().text());
            });
            html.push(": ".concat(list.join(', ')));
          }

          html.push(']');
          texts.push(html.join(''));
        });
      }

      return type === 'text' ? texts : values;
    }
  }, {
    key: "setSelects",
    value: function setSelects(values) {
      var _this6 = this;

      this.$selectItems.prop('checked', false);
      this.$disableItems.prop('checked', false);
      $.each(values, function (i, value) {
        _this6.$selectItems.filter(sprintf(_templateObject22(), s)(value)).prop('checked', true);

        _this6.$disableItems.filter(sprintf(_templateObject23(), s)(value)).prop('checked', true);
      });
      this.$selectAll.prop('checked', this.$selectItems.length === this.$selectItems.filter(':checked').length + this.$disableItems.filter(':checked').length);
      $.each(this.$selectGroups, function (i, val) {
        var group = $(val).parent()[0].getAttribute('data-group');

        var $children = _this6.$selectItems.filter("[data-group=\"".concat(group, "\"]"));

        $(val).prop('checked', $children.length && $children.length === $children.filter(':checked').length);
      });
      this.update(false);
    }
  }, {
    key: "enable",
    value: function enable() {
      this.$choice.removeClass('disabled');
    }
  }, {
    key: "disable",
    value: function disable() {
      this.$choice.addClass('disabled');
    }
  }, {
    key: "checkAll",
    value: function checkAll() {
      this.$selectItems.prop('checked', true);
      this.$selectGroups.prop('checked', true);
      this.$selectAll.prop('checked', true);
      this.update();
      this.options.onCheckAll();
    }
  }, {
    key: "uncheckAll",
    value: function uncheckAll() {
      this.$selectItems.prop('checked', false);
      this.$selectGroups.prop('checked', false);
      this.$selectAll.prop('checked', false);
      this.update();
      this.options.onUncheckAll();
    }
  }, {
    key: "focus",
    value: function focus() {
      this.$choice.focus();
      this.options.onFocus();
    }
  }, {
    key: "blur",
    value: function blur() {
      this.$choice.blur();
      this.options.onBlur();
    }
  }, {
    key: "refresh",
    value: function refresh() {
      this.init();
    }
  }, {
    key: "filter",
    value: function filter() {
      var _this7 = this;

      var text = $.trim(this.$searchInput.val()).toLowerCase();

      if (text.length === 0) {
        this.$selectAll.closest('li').show();
        this.$selectItems.closest('li').show();
        this.$disableItems.closest('li').show();
        this.$selectGroups.closest('li').show();
        this.$noResults.hide();
      } else {
        if (!this.options.filterGroup) {
          this.$selectItems.each(function (i, el) {
            var $parent = $(el).parent();
            var hasText = removeDiacritics($parent.text().toLowerCase()).includes(removeDiacritics(text));
            $parent.closest('li')[hasText ? 'show' : 'hide']();
          });
        }

        this.$disableItems.parent().hide();
        this.$selectGroups.each(function (i, el) {
          var $parent = $(el).parent();
          var group = $parent[0].getAttribute('data-group');

          if (_this7.options.filterGroup) {
            var hasText = removeDiacritics($parent.text().toLowerCase()).includes(removeDiacritics(text));
            var func = hasText ? 'show' : 'hide';
            $parent.closest('li')[func]();

            _this7.$selectItems.filter("[data-group=\"".concat(group, "\"]")).closest('li')[func]();
          } else {
            var $items = _this7.$selectItems.filter(':visible');

            var _hasText = $items.filter(sprintf(_templateObject24(), s)(group)).length;
            $parent.closest('li')[_hasText ? 'show' : 'hide']();
          }
        }); // Check if no matches found

        if (this.$selectItems.parent().filter(':visible').length) {
          this.$selectAll.closest('li').show();
          this.$noResults.hide();
        } else {
          this.$selectAll.closest('li').hide();
          this.$noResults.show();
        }
      }

      this.updateOptGroupSelect();
      this.updateSelectAll();
      this.options.onFilter(text);
    }
  }, {
    key: "destroy",
    value: function destroy() {
      this.$el.before(this.$parent).show();
      this.$parent.remove();
    }
  }]);

  return MultipleSelect;
}();

var defaults = {
  name: '',
  placeholder: '',
  selectAll: true,
  single: false,
  multiple: false,
  hideOptgroupCheckboxes: false,
  multipleWidth: 80,
  width: undefined,
  dropWidth: undefined,
  maxHeight: 250,
  position: 'bottom',
  displayValues: false,
  displayTitle: false,
  displayDelimiter: ', ',
  minimumCountSelected: 3,
  ellipsis: false,
  isOpen: false,
  keepOpen: false,
  openOnHover: false,
  container: null,
  filter: false,
  filterGroup: false,
  filterPlaceholder: '',
  filterAcceptOnEnter: false,
  animate: undefined,
  styler: function styler() {
    return false;
  },
  textTemplate: function textTemplate($elm) {
    return $elm[0].innerHTML;
  },
  labelTemplate: function labelTemplate($elm) {
    return $elm[0].getAttribute('label');
  },
  formatSelectAll: function formatSelectAll() {
    return '[Select all]';
  },
  formatAllSelected: function formatAllSelected() {
    return 'All selected';
  },
  formatCountSelected: function formatCountSelected(count, total) {
    return count + ' of ' + total + ' selected';
  },
  formatNoMatchesFound: function formatNoMatchesFound() {
    return 'No matches found';
  },
  onOpen: function onOpen() {
    return false;
  },
  onClose: function onClose() {
    return false;
  },
  onCheckAll: function onCheckAll() {
    return false;
  },
  onUncheckAll: function onUncheckAll() {
    return false;
  },
  onFocus: function onFocus() {
    return false;
  },
  onBlur: function onBlur() {
    return false;
  },
  onOptgroupClick: function onOptgroupClick() {
    return false;
  },
  onClick: function onClick() {
    return false;
  },
  onFilter: function onFilter() {
    return false;
  },
  onAfterCreate: function onAfterCreate() {
    return false;
  }
};

$.fn.multipleSelect = function (option) {
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
    args[_key - 1] = arguments[_key];
  }

  var value;
  var allowedMethods = ['getSelects', 'setSelects', 'enable', 'disable', 'open', 'close', 'checkAll', 'uncheckAll', 'focus', 'blur', 'refresh', 'destroy'];
  this.each(function (i, el) {
    var $this = $(el);
    var data = $this.data('multipleSelect');
    var options = $.extend({}, $this.data(), _typeof(option) === 'object' && option);

    if (!data) {
      data = new MultipleSelect($this, options);
      $this.data('multipleSelect', data);
    }

    if (typeof option === 'string') {
      var _data;

      if ($.inArray(option, allowedMethods) < 0) {
        throw new Error("Unknown method: ".concat(option));
      }

      value = (_data = data)[option].apply(_data, args);

      if (option === 'destroy') {
        $this.removeData('multipleSelect');
      }
    } else {
      data.init();
    }
  });
  return typeof value !== 'undefined' ? value : this;
};
