1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2/*! UIkit 3.13.7 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */ 3 4(function (global, factory) { 5 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 6 typeof define === 'function' && define.amd ? define('uikiticons', factory) : 7 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkitIcons = factory()); 8})(this, (function () { 'use strict'; 9 10 function plugin(UIkit) { 11 if (plugin.installed) { 12 return; 13 } 14 15 UIkit.icon.add({ 16 "500px": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg
vendor: 3,152 bytes, lines 16-17
16\"><path d=\"M9.624,11.866c-0.141,0.132,0.479,0.658,0.662,0.418c0.051-0.046,0.607-0.61,0.662-0.664c0,0,0.738,0.719,0.814,0.719 c0.1,0,0.207-0.055,0.322-0.17c0.27-0.269,0.135-0.416,0.066-0.495l-0.631-0.616l0.658-0.668c0.146-0.156,0.021-0.314-0.1-0.449 c-0.182-0.18-0.359-0.226-0.471-0.125l-0.656,0.654l-0.654-0.654c-0.033-0.034-0.08-0.045-0.124-0.045 c-0.079,0-0.191,0.068-0.307,0.181c-0.202,0.202-0.247,0.351-0.133,0.462l0.665,0.665L9.624,11.866z\"/><path d=\"M11.066,2.884c-1.061,0-2.185,0.248-3.011,0.604c-0.087,0.034-0.141,0.106-0.15,0.205C7.893,3.784,7.919,3.909,7.982,4.066 c0.05,0.136,0.187,0.474,0.452,0.372c0.844-0.326,1.779-0.507,2.633-0.507c0.963,0,1.9,0.191,2.781,0.564 c0.695,0.292,1.357,0.719,2.078,1.34c0.051,0.044,0.105,0.068,0.164,0.068c0.143,0,0.273-0.137,0.389-0.271 c0.191-0.214,0.324-0.395,0.135-0.575c-0.686-0.654-1.436-1.138-2.363-1.533C13.24,3.097,12.168,2.884,11.066,2.884z\"/><path d=\"M16.43,15.747c-0.092-0.028-0.242,0.05-0.309,0.119l0,0c-0.652,0.652-1.42,1.169-2.268,1.521 c-0.877,0.371-1.814,0.551-2.779,0.551c-0.961,0-1.896-0.189-2.775-0.564c-0.848-0.36-1.612-0.879-2.268-1.53 c-0.682-0.688-1.196-1.455-1.529-2.268c-0.325-0.799-0.471-1.643-0.471-1.643c-0.045-0.24-0.258-0.249-0.567-0.203 c-0.128,0.021-0.519,0.079-0.483,0.36v0.01c0.105,0.644,0.289,1.284,0.545,1.895c0.417,0.969,1.002,1.849,1.756,2.604 c0.757,0.754,1.636,1.34,2.604,1.757C8.901,18.785,9.97,19,11.088,19c1.104,0,2.186-0.215,3.188-0.645 c1.838-0.896,2.604-1.757,2.604-1.757c0.182-0.204,0.227-0.317-0.1-0.643C16.779,15.956,16.525,15.774,16.43,15.747z\"/><path d=\"M5.633,13.287c0.293,0.71,0.723,1.341,1.262,1.882c0.54,0.54,1.172,0.971,1.882,1.264c0.731,0.303,1.509,0.461,2.298,0.461 c0.801,0,1.578-0.158,2.297-0.461c0.711-0.293,1.344-0.724,1.883-1.264c0.543-0.541,0.971-1.172,1.264-1.882 c0.314-0.721,0.463-1.5,0.463-2.298c0-0.79-0.148-1.569-0.463-2.289c-0.293-0.699-0.721-1.329-1.264-1.881 c-0.539-0.541-1.172-0.959-1.867-1.263c-0.721-0.303-1.5-0.461-2.299-0.461c-0.802,0-1.613,0.159-2.322,0.461 c-0.577,0.25-1.544,0.867-2.119,1.454v0.012V2.108h8.16C15.1,2.104,15.1,1.69,15.1,1.552C15.1,1.417,15.1,1,14.809,1H5.915 C5.676,1,5.527,1.192,5.527,1.384v6.84c0,0.214,0.273,0.372,0.529,0.428c0.5,0.105,0.614-0.056,0.737-0.224l0,0 c0.18-0.273,0.776-0.884,0.787-0.894c0.901-0.905,2.117-1.408,3.416-1.408c1.285,0,2.5,0.501,3.412,1.408 c0.914,0.914,1.408,2.122,1.408,3.405c0,1.288-0.508,2.496-1.408,3.405c-0.9,0.896-2.152,1.406-3.438,1.406 c-0.877,0-1.711-0.229-2.433-0.671v-4.158c0-0.553,0.237-1.151,0.643-1.614c0.462-0.519,1.094-0.799,1.782-0.799 c0.664,0,1.293,0.253,1.758,0.715c0.459,0.459,0.709,1.071,0.709,1.723c0,1.385-1.094,2.468-2.488,2.468 c-0.273,0-0.769-0.121-0.781-0.125c-0.281-0.087-0.405,0.306-0.438,0.436c-0.159,0.496,0.079,0.585,0.123,0.607 c0.452,0.137,0.743,0.157,1.129,0.157c1.973,0,3.572-1.6,3.572-3.57c0-1.964-1.6-3.552-3.572-3.552c-0.97,0-1.872,0.36-2.546,1.038 c-0.656,0.631-1.027,1.487-1.027,2.322v3.438v-0.011c-0.372-0.42-0.732-1.041-0.981-1.682c-0.102-0.248-0.315-0.202-0.607-0.113 c-0.135,0.035-0.519,0.157-0.44,0.439C5.372,12.799,5.577,13.164,5.633,13.287z\"/></svg>", 17 "album": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"
17 xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"5\" y=\"2\" width=\"10\" height=\"1\"/><rect x=\"3\" y=\"4\" width=\"14\" height=\"1\"/><rect fill=\"none\" stroke=\"#000\" x=\"1.5\" y=\"6.5\" width=\"17\" height=\"11\"/></svg>", 18 "arrow-down": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"10.5,16.08 5.63,10.66 6.37,10 10.5,14.58 14.63,10 15.37,10.66\"/><line fill=\"none\" stroke=\"#000\" x1=\"10.5\" y1=\"4\" x2=\"10.5\" y2=\"15\"/></svg>", 19 "arrow-left": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"10 14 5 9.5 10 5\"/><line fill=\"none\" stroke=\"#000\" x1=\"16\" y1=\"9.5\" x2=\"5\" y2=\"9.52\"/></svg>", 20 "arrow-right": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"10 5 15 9.5 10 14\"/><line fill=\"none\" stroke=\"#000\" x1=\"4\" y1=\"9.5\" x2=\"15\" y2=\"9.5\"/></svg>", 21 "arrow-up": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"10.5,4 15.37,9.4 14.63,10.08 10.5,5.49 6.37,10.08 5.63,9.4\"/><line fill=\"none\" stroke=\"#000\" x1=\"10.5\" y1=\"16\" x2=\"10.5\" y2=\"5\"/></svg>", 22 "bag": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M7.5,7.5V4A2.48,2.48,0,0,1,10,1.5,2.54,2.54,0,0,1,12.5,4V7.5\"/><polygon fill=\"none\" stroke=\"#000\" points=\"16.5 7.5 3.5 7.5 2.5 18.5 17.5 18.5 16.5 7.5\"/></svg>", 23 "ban": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10\" cy=\"10\" r=\"9\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"4\" y1=\"3.5\" x2=\"16\" y2=\"16.5\"/></svg>", 24 "behance": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5,10.6c-0.4-0.5-0.9-0.9-1.6-1.1c1.7-1,2.2-3.2,0.7-4.7C7.8,4,6.3,4,5.2,4C3.5,4,1.7,4,0,4v12c1.7,0,3.4,0,5.2,0 c1,0,2.1,0,3.1-0.5C10.2,14.6,10.5,12.3,9.5,10.6L9.5,10.6z M5.6,6.1c1.8,0,1.8,2.7-0.1,2.7c-1,0-2,0-2.9,0V6.1H5.6z M2.6,13.8v-3.1 c1.1,0,2.1,0,3.2,0c2.1,0,2.1,3.2,0.1,3.2L2.6,13.8z\"/><path d=\"M19.9,10.9C19.7,9.2,18.7,7.6,17,7c-4.2-1.3-7.3,3.4-5.3,7.1c0.9,1.7,2.8,2.3,4.7,2.1c1.7-0.2,2.9-1.3,3.4-2.9h-2.2 c-0.4,1.3-2.4,1.5-3.5,0.6c-0.4-0.4-0.6-1.1-0.6-1.7H20C20,11.7,19.9,10.9,19.9,10.9z M13.5,10.6c0-1.6,2.3-2.7,3.5-1.4 c0.4,0.4,0.5,0.9,0.6,1.4H13.5L13.5,10.6z\"/><rect x=\"13\" y=\"4\" width=\"5\" height=\"1.4\"/></svg>", 25 "bell": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M17,15.5 L3,15.5 C2.99,14.61 3.79,13.34 4.1,12.51 C4.58,11.3 4.72,10.35 5.19,7.01 C5.54,4.53 5.89,3.2 7.28,2.16 C8.13,1.56 9.37,1.5 9.81,1.5 L9.96,1.5 C9.96,1.5 11.62,1.41 12.67,2.17 C14.08,3.2 14.42,4.54 14.77,7.02 C15.26,10.35 15.4,11.31 15.87,12.52 C16.2,13.34 17.01,14.61 17,15.5 L17,15.5 Z\"/><path fill=\"none\" stroke=\"#000\" d=\"M12.39,16 C12.39,17.37 11.35,18.43 9.91,18.43 C8.48,18.43 7.42,17.37 7.42,16\"/></svg>", 26 "bold": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5,15.3 C5.66,15.3 5.9,15 5.9,14.53 L5.9,5.5 C5.9,4.92 5.56,4.7 5,4.7 L5,4 L8.95,4 C12.6,4 13.7,5.37 13.7,6.9 C13.7,7.87 13.14,9.17 10.86,9.59 L10.86,9.7 C13.25,9.86 14.29,11.28 14.3,12.54 C14.3,14.47 12.94,16 9,16 L5,16 L5,15.3 Z M9,9.3 C11.19,9.3 11.8,8.5 11.85,7 C11.85,5.65 11.3,4.8 9,4.8 L7.67,4.8 L7.67,9.3 L9,9.3 Z M9.185,15.22 C11.97,15 12.39,14 12.4,12.58 C12.4,11.
2615 11.39,10 9,10 L7.67,10 L7.67,15 L9.18,15 Z\"/></svg>", 27 "bolt": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.74,20 L7.73,12 L3,12 L15.43,1 L12.32,9 L17.02,9 L4.74,20 L4.74,20 L4.74,20 Z M9.18,11 L7.1,16.39 L14.47,10 L10.86,10 L12.99,4.67 L5.61,11 L9.18,11 L9.18,11 L9.18,11 Z\"/></svg>", 28 "bookmark": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" points=\"5.5 1.5 15.5 1.5 15.5 17.5 10.5 12.5 5.5 17.5\"/></svg>", 29 "calendar": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 2,3 2,17 18,17 18,3 2,3 Z M 17,16 3,16 3,8 17,8 17,16 Z M 17,7 3,7 3,4 17,4 17,7 Z\"/><rect width=\"1\" height=\"3\" x=\"6\" y=\"2\"/><rect width=\"1\" height=\"3\" x=\"13\" y=\"2\"/></svg>", 30 "camera": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10\" cy=\"10.8\" r=\"3.8\"/><path fill=\"none\" stroke=\"#000\" d=\"M1,4.5 C0.7,4.5 0.5,4.7 0.5,5 L0.5,17 C0.5,17.3 0.7,17.5 1,17.5 L19,17.5 C19.3,17.5 19.5,17.3 19.5,17 L19.5,5 C19.5,4.7 19.3,4.5 19,4.5 L13.5,4.5 L13.5,2.9 C13.5,2.6 13.3,2.5 13,2.5 L7,2.5 C6.7,2.5 6.5,2.6 6.5,2.9 L6.5,4.5 L1,4.5 L1,4.5 Z\"/></svg>", 31 "cart": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"7.3\" cy=\"17.3\" r=\"1.4\"/><circle cx=\"13.3\" cy=\"17.3\" r=\"1.4\"/><polyline fill=\"none\" stroke=\"#000\" points=\"0 2 3.2 4 5.3 12.5 16 12.5 18 6.5 8 6.5\"/></svg>", 32 "check": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"4,10 8,15 17,4\"/></svg>", 33 "chevron-double-left": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"10 14 6 10 10 6\"/><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"14 14 10 10 14 6\"/></svg>", 34 "chevron-double-right": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"10 6 14 10 10 14\"/><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"6 6 10 10 6 14\"/></svg>", 35 "chevron-down": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"16 7 10 13 4 7\"/></svg>", 36 "chevron-left": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"13 16 7 10 13 4\"/></svg>", 37 "chevron-right": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"7 4 13 10 7 16\"/></svg>", 38 "chevron-up": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" points=\"4 13 10 7 16 13\"/></svg>", 39 "clock": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10\" cy=\"10\" r=\"9\"/><rect x=\"9\" y=\"4\" width=\"1\" height=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M13.018,14.197 L9.445,10.625\"/></svg>", 40 "close": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.06\" d=\"M16,16 L4,4\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.06\" d=\"M16,4 L4,16\"/></svg>", 41 "cloud-download": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M6.5,14.61 L3.75,14.61 C1.96,14.61 0.5,13.17 0.5,11.39 C0.5,9.76 1.72,8.41 3.3,8.2 C3.38,5.31 5.75,3 8.68,3 C11.19,3 13.3
411,4.71 13.89,7.02 C14.39,6.8 14.93,6.68 15.5,6.68 C17.71,6.68 19.5,8.45 19.5,10.64 C19.5,12.83 17.71,14.6 15.5,14.6 L12.5,14.6\"/><polyline fill=\"none\" stroke=\"#000\" points=\"11.75 16 9.5 18.25 7.25 16\"/><path fill=\"none\" stroke=\"#000\" d=\"M9.5,18 L9.5,9.5\"/></svg>", 42 "cloud-upload": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M6.5,14.61 L3.75,14.61 C1.96,14.61 0.5,13.17 0.5,11.39 C0.5,9.76 1.72,8.41 3.31,8.2 C3.38,5.31 5.75,3 8.68,3 C11.19,3 13.31,4.71 13.89,7.02 C14.39,6.8 14.93,6.68 15.5,6.68 C17.71,6.68 19.5,8.45 19.5,10.64 C19.5,12.83 17.71,14.6 15.5,14.6 L12.5,14.6\"/><polyline fill=\"none\" stroke=\"#000\" points=\"7.25 11.75 9.5 9.5 11.75 11.75\"/><path fill=\"none\" stroke=\"#000\" d=\"M9.5,18 L9.5,9.5\"/></svg>", 43 "code": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.01\" points=\"13,4 19,10 13,16\"/><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.01\" points=\"7,4 1,10 7,16\"/></svg>", 44 "cog": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" cx=\"9.997\" cy=\"10\" r=\"3.31\"/><path fill=\"none\" stroke=\"#000\" d=\"M18.488,12.285 L16.205,16.237 C15.322,15.496 14.185,15.281 13.303,15.791 C12.428,16.289 12.047,17.373 12.246,18.5 L7.735,18.5 C7.938,17.374 7.553,16.299 6.684,15.791 C5.801,15.27 4.655,15.492 3.773,16.237 L1.5,12.285 C2.573,11.871 3.317,10.999 3.317,9.991 C3.305,8.98 2.573,8.121 1.5,7.716 L3.765,3.784 C4.645,4.516 5.794,4.738 6.687,4.232 C7.555,3.722 7.939,2.637 7.735,1.5 L12.263,1.5 C12.072,2.637 12.441,3.71 13.314,4.22 C14.206,4.73 15.343,4.516 16.225,3.794 L18.487,7.714 C17.404,8.117 16.661,8.988 16.67,10.009 C16.672,11.018 17.415,11.88 18.488,12.285 L18.488,12.285 Z\"/></svg>", 45 "comment": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6,18.71 L6,14 L1,14 L1,1 L19,1 L19,14 L10.71,14 L6,18.71 L6,18.71 Z M2,13 L7,13 L7,16.29 L10.29,13 L18,13 L18,2 L2,2 L2,13 L2,13 Z\"/></svg>", 46 "commenting": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" points=\"1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5\"/><circle cx=\"10\" cy=\"8\" r=\"1\"/><circle cx=\"6\" cy=\"8\" r=\"1\"/><circle cx=\"14\" cy=\"8\" r=\"1\"/></svg>", 47 "comments": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"2 0.5 19.5 0.5 19.5 13\"/><path d=\"M5,19.71 L5,15 L0,15 L0,2 L18,2 L18,15 L9.71,15 L5,19.71 L5,19.71 L5,19.71 Z M1,14 L6,14 L6,17.29 L9.29,14 L17,14 L17,3 L1,3 L1,14 L1,14 L1,14 Z\"/></svg>", 48 "copy": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" x=\"3.5\" y=\"2.5\" width=\"12\" height=\"16\"/><polyline fill=\"none\" stroke=\"#000\" points=\"5 0.5 17.5 0.5 17.5 17\"/></svg>", 49 "credit-card": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" x=\"1.5\" y=\"4.5\" width=\"17\" height=\"12\"/><rect x=\"1\" y=\"7\" width=\"18\" height=\"3\"/></svg>", 50 "database": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><ellipse fill=\"none\" stroke=\"#000\" cx=\"10\" cy=\"4.64\" rx=\"7.5\" ry=\"3.14\"/><path fill=\"none\" stroke=\"#000\" d=\"M17.5,8.11 C17.5,9.85 14.14,11.25 10,11.25 C5.86,11.25 2.5,9.84 2.5,8.11\"/><path fill=\"none\" stroke=\"#000\" d=\"M17.5,11.25 C17.5,12.99 14.14,14.39 10,14.39 C5.86,14.39 2.5,12.98 2.5,11.25\"/><path fill=\"none\" stroke=\"#000\" d=\"M17.49,4.64 L17.5,14.36 C17.5,16.1 14.14,17.5 10,17.5 C5.86,17.5 2.5,16.09 2.5,14.36 L2.5,4.64\"/></svg>", 51 "desktop": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"8\" y=\"15\" width=\"1\" height=\"2\"/><rect x=\"11\" y=\"15\" width=\"1\" height=\"2\"/><rect x=\"5\" y=\"16\" width=\"10\" height=\"1\"/><rect fill=\"none\" stroke=\"#000\" x=\"1.5\" y=\"3.5\" width=\"17\" height=\"11\"/></svg>", 52 "discord": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M16.074,4.361a14.243,14.243,0,0,0-3.61-1.134,10.61,10.61,0,0,0-.463.96,13.219,13.219,0,0,0-4,0,10.138,10.138,0,0,0-.468-.96A14.206,14.206,0,0,0,3.919,4.364,15.146,15.146,0,0,0,1.324,14.5a14.435,14.435,0,0,0,4.428,2.269A10.982,10.982,0,0,0,6.7,15.21a9.294,9.294,0,0,1-1.494-.727c.125-.093.248-.19.366-.289a10.212,10.212,0,0,0,8.854,0c.119.1.242.2.366.289a9.274,9.274,0,0,1-1.5.728,10.8,10.8,0,0,0,.948,1.562,14.419,14.419,0,0,0,4.431-2.27A15.128,15.128,0,0,0,16.074,4.361Zm-8.981,8.1a1.7,1.7,0,0,1-1.573-1.79A1.689,1.689,0,0,1,7.093,8.881a1.679,1.679,0,0,1,1.573,1.791A1.687,1.687,0,0,1,7.093,12.462Zm5.814,0a1.7,1.7,0,0,1-1.573-1.79,1.689,1.689,0,0,1,1.573-1.791,1.679,1.679,0,0,1,1.573,1.791A1.688,1.688,0,0,1,12.907,12.462Z\"/></svg>", 53 "download": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"14,10 9.5,14.5 5,10\"/><rect x=\"3\" y=\"17\" width=\"13\" height=\"1\"/><line fill=\"none\" stroke=\"#000\" x1=\"9.5\" y1=\"13.91\" x2=\"9.5\" y2=\"3\"/></svg>", 54 "dribbble": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" d=\"M1.3,8.9c0,0,5,0.1,8.6-1c1.4-0.4,2.6-0.9,4-1.9 c1.4-1.1,2.5-2.5,2.5-2.5\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" d=\"M3.9,16.6c0,0,1.7-2.8,3.5-4.2 c1.8-1.3,4-2,5.7-2.2C16,10,19,10.6,19,10.6\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" d=\"M6.9,1.6c0,0,3.3,4.6,4.2,6.8 c0.4,0.9,1.3,3.1,1.9,5.2c0.6,2,0.9,4.4,0.9,4.4\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" cx=\"10\" cy=\"10\" r=\"9\"/></svg>", 55 "etsy": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M8,4.26C8,4.07,8,4,8.31,4h4.46c.79,0,1.22.67,1.53,1.91l.25,1h.76c.14-2.82.26-4,.26-4S13.65,3,12.52,3H6.81L3.75,2.92v.84l1,.2c.73.11.9.27,1,1,0,0,.06,2,.06,5.17s-.06,5.14-.06,5.14c0,.59-.23.81-1,.94l-1,.2v.84l3.06-.1h5.11c1.15,0,3.82.1,3.82.1,0-.7.45-3.88.51-4.22h-.73l-.76,1.69a2.25,2.25,0,0,1-2.45,1.47H9.4c-1,0-1.44-.4-1.44-1.24V10.44s2.16,0,2.86.06c.55,0,.85.19,1.06,1l.23,1H13L12.9,9.94,13,7.41h-.85l-.28,1.13c-.16.74-.28.84-1,1-1,.1-2.89.09-2.89.09Z\"/></svg>", 56 "expand": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"13 2 18 2 18 7 17 7 17 3 13 3\"/><polygon points=\"2 13 3 13 3 17 7 17 7 18 2 18\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M11,9 L17,3\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M3,17 L9,11\"/></svg>", 57 "facebook": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11,10h2.6l0.4-3H11V5.3c0-0.9,0.2-1.5,1.5-1.5H14V1.1c-0.3,0-1-0.1-2.1-0.1C9.6,1,8,2.4,8,5v2H5.5v3H8v8h3V10z\"/></svg>", 58 "file-edit": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M18.65,1.68 C18.41,1.45 18.109,1.33 17.81,1.33 C17.499,1.33 17.209,1.45 16.98,1.68 L8.92,9.76 L8,12.33 L10.55,11.41 L18.651,3.34 C19.12,2.87 19.12,2.15 18.65,1.68 L18.65,1.68 L18.65,1.68 Z\"/><polyline fill=\"none\" stroke=\"#000\" points=\"16.5 8.482 16.5 18.5 3.5 18.5 3.5 1.5 14.211 1.5\"/></svg>", 59 "file-pdf": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" width=\"13\" height=\"17\" x=\"3.5\" y=\"1.5\"/><path d=\"M14.65 11.67c-.48.3-1.37-.19-1.79-.37a4.65 4.65 0 0 1 1.49.06c.35.1.36.28.3.31zm-6.3.06l.43-.79a14.7 14.7 0 0 0 .75-1.64 5.48 5.48 0 0 0 1.25 1.55l.2.15a16.36 16.36 0 0 0-2.63.73zM9.5 5.32c.2 0 .32.5.32.97a1.99 1.99 0 0 1-.23 1.04 5.05 5.05 0 0 1-.17-1.3s0-.71.08-.71zm-3.9 9a4.35 4.35 0 0 1 1.21-1.46l.24-.22a4.35 4.35 0 0 1-1.46 1.68zm9.23-3.3a2.05 2.05 0 0 0-1.32-.3 11.07 11.07 0 0 0-1.58.11 4.09 4.09 0 0 1-.74-.5 5.39 5.39 0 0 1-1.32-2.06 10.37 10.37 0 0 0 .28-2.62 1.83 1.83 0 0 0-.07-.25.57.57 0 0 0-.52-.4H9.4a.59.59 0 0 0-.6.38 6.95 6.95 0 0 0 .37 3.14c-.26.63-1 2.12-1 2.12-.3.58-.57 1.08-.82 1.5l-.8.44A3.11 3.11 0 0 0 5 14.16a.39.39 0 0 0 .15.42l.24.13c1.15.56 2.28-1.74 2.66-2.42a23.1 23.1 0 0 1 3.59-.85 4.56 4.56 0 0 0 2.91.8.5.5 0 0 0 .3-.21 1.1 1.1 0 0 0 .12-.75.84.84 0 0 0-.14-.25z\"/></svg>", 60 "file-text": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" width=\"13\" height=\"17\" x=\"3.5\" y=\"1.5\"/><line fill=\"none\" stroke=\"#000\" x1=\"6\" x2=\"12\" y1=\"12.5\" y2=\"12.5\"/><line fill=\"none\" stroke=\"#000\" x1=\"6\" x2=\"14\" y1=\"8.5\" y2=\"8.5\"/><line fill=\"none\" stroke=\"#000\" x1=\"6\" x2=\"14\" y1=\"6.5\" y2=\"6.5\"/><line fill=\"none\" stroke=\"#000\" x1=\"6\" x2=\"14\" y1=\"10.5\" y2=\"10.5\"/></svg>", 61 "file": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" x=\"3.5\" y=\"1.5\" width=\"13\" height=\"17\"/></svg>", 62 "flickr": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"5.5\" cy=\"9.5\" r=\"3.5\"/><circle cx=\"14.5\" cy=\"9.5\" r=\"3.5\"/></svg>", 63 "folder": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" points=\"9.5 5.5 8.5 3.5 1.5 3.5 1.5 16.5 18.5 16.5 18.5 5.5\"/></svg>", 64 "forward": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.47,13.11 C4.02,10.02 6.27,7.85 9.04,6.61 C9.48,6.41 10.27,6.13 11,5.91 L11,2 L18.89,9 L11,16 L11,12.13 C9.25,12.47 7.58,13.19 6.02,14.25 C3.03,16.28 1.63,18.54 1.63,18.54 C1.63,18.54 1.38,15.28 2.47,13.11 L2.47,13.11 Z M5.3,13.53 C6.92,12.4 9.04,11.4 12,10.92 L12,13.63 L17.36,9 L12,4.25 L12,6.8 C11.71,6.86 10.86,7.02 9.67,7.49 C6.79,8.65 4.58,10.96 3.49,13.08 C3.18,13.7 2.68,14.87 2.49,16 C3.28,15.05 4.4,14.15 5.3,13.53 L5.3,13.53 Z\"/></svg>", 65 "foursquare": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.23,2 C15.96,2 16.4,2.41 16.5,2.86 C16.57,3.15 16.56,3.44 16.51,3.73 C16.46,4.04 14.86,11.72 14.75,12.03 C14.56,12.56 14.16,12.82 13.61,12.83 C13.03,12.84 11.09,12.51 10.69,13 C10.38,13.38 7.79,16.39 6.81,17.53 C6.61,17.76 6.4,17.96 6.08,17.99 C5.68,18.04 5.29,17.87 5.17,17.45 C5.12,17.28 5.1,17.09 5.1,16.91 C5.1,12.4 4.86,7.81 5.11,3.31 C5.17,2.5 5.81,2.12 6.53,2 L15.23,2 L15.23,2 Z M9.76,11.42 C9.94,11.19 10.17,11.1 10.45,11.1 L12.86,11.1 C13.12,11.1 13.31,10.94 13.36,10.69 C13.37,10.64 13.62,9.41 13.74,8.83 C13.81,8.52 13.53,8.28 13.27,8.28 C12.35,8.29 11.42,8.28 10.5,8.28 C9.84,8.28 9.83,7.69 9.82,7.21 C9.8,6.85 10.13,6.55 10.5,6.55 C11.59,6.56 12.67,6.55 13.76,6.55 C14.03,6.55 14.23,6.4 14.28,6.14 C14.34,5.87 14.67,4.29 14.67,4.29 C14.67,4.29 14.82,3.74 14.19,3.74 L7.34,3.74 C7,3.75 6.84,4.02 6.84,4.33 C6.84,7.58 6.85,14.95 6.85,14.99 C6.87,15 8.89,12.51 9.76,11.42 L9.76,11.42 Z\"/></svg>", 66 "future": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline points=\"19 2 18 2 18 6 14 6 14 7 19 7 19 2\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M18,6.548 C16.709,3.29 13.354,1 9.6,1 C4.6,1 0.6,5 0.6,10 C0.6,15 4.6,19 9.6,19 C14.6,19 18.6,15 18.6,10\"/><rect x=\"9\" y=\"4\" width=\"1\" height=\"7\"/><path d=\"M13.018,14.197 L9.445,10.625\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\"/></svg>", 67 "git-branch": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" cx=\"7\" cy=\"3\" r=\"2\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" cx=\"14\" cy=\"6\" r=\"2\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" cx=\"7\" cy=\"17\" r=\"2\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"2\" d=\"M14,8 C14,10.41 12.43,10.87 10.56,11.25 C9.09,11.54 7,12.06 7,15 L7,5\"/></svg>", 68 "git-fork": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" cx=\"5.79\" cy=\"2.79\" r=\"1.79\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" cx=\"14.19\" cy=\"2.79\" r=\"1.79\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" cx=\"10.03\" cy=\"16.79\" r=\"1.79\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"2\" d=\"M5.79,4.57 L5.79,6.56 C5.79,9.19 10.03,10.22 10.03,13.31 C10.03,14.86 10.04,14.55 10.04,14.55 C10.04,14.37 10.04,14.86 10.04,13.31 C10.04,10.22 14.2,9.19 14.2,6.56 L14.2,4.57\"/></svg>", 69 "github-alt": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10,0.5 C4.75,0.5 0.5,4.76 0.5,10.01 C0.5,15.26 4.75,19.51 10,19.51 C15.24,19.51 19.5,15.26 19.5,10.01 C19.5,4.76 15.25,0.5 10,0.5 L10,0.5 Z M12.81,17.69 C12.81,17.69 12.81,17.7 12.79,17.69 C12.47,17.75 12.35,17.59 12.35,17.36 L12.35,16.17 C12.35,15.45 12.09,14.92 11.58,14.56 C12.2,14.51 12.77,14.39 13.26,14.21 C13.87,13.98 14.36,13.69 14.74,13.29 C15.42,12.59 15.76,11.55 15.76,10.17 C15.76,9.25 15.45,8.46 14.83,7.8 C15.1,7.08 15.07,6.29 14.75,5.44 L14.51,5.42 C14.34,5.4 14.06,5.46 13.67,5.61 C13.25,5.78 12.79,6.03 12.31,6.35 C11.55,6.16 10.81,6.05 10.09,6.05 C9.36,6.05 8.61,6.15 7.88,6.35 C7.28,5.96 6.75,5.68 6.26,5.54 C6.07,5.47 5.9,5.44 5.78,5.44 L5.42,5.44 C5.06,6.29 5.04,7.08 5.32,7.8 C4.7,8.46 4.4,9.25 4.4,10.17 C4.4,11.94 4.96,13.16 6.08,13.84 C6.53,14.13 7.05,14.32 7.69,14.43 C8.03,14.5 8.32,14.54 8.55,14.55 C8.07,14.89 7.82,15.42 7.82,16.16 L7.82,17.51 C7.8,17.69 7.7,17.8 7.51,17.8 C4.21,16.74 1.82,13.65 1.82,10.01 C1.82,5.5 5.49,1.83 10,1.83 C14.5,1.83 18.17,5.5 18.17,10.01 C18.18,13.53 15.94,16.54 12.81,17.69 L12.81,17.69 Z\"/></svg>", 70 "github": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10,1 C5.03,1 1,5.03 1,10 C1,13.98 3.58,17.35 7.16,18.54 C7.61,18.62 7.77,18.34 7.77,18.11 C7.77,17.9 7.76,17.33 7.76,16.58 C5.26,17.12 4.73,15.37 4.73,15.37 C4.32,14.33 3.73,14.05 3.73,14.05 C2.91,13.5 3.79,13.5 3.79,13.5 C4.69,13.56 5.17,14.43 5.17,14.43 C5.97,15.8 7.28,15.41 7.79,15.18 C7.87,14.6 8.1,14.2 8.36,13.98 C6.36,13.75 4.26,12.98 4.26,9.53 C4.26,8.55 4.61,7.74 5.19,7.11 C5.1,6.88 4.79,5.97 5.28,4.73 C5.28,4.73 6.04,4.49 7.75,5.65 C8.47,5.45 9.24,5.35 10,5.35 C10.76,5.35 11.53,5.45 12.25,5.65 C13.97,4.48 14.72,4.73 14.72,4.73 C15.21,5.97 14.9,6.88 14.81,7.11 C15.39,7.74 15.73,8.54 15.73,9.53 C15.73,12.99 13.63,13.75 11.62,13.97 C11.94,14.25 12.23,14.8 12.23,15.64 C12.23,16.84 12.22,17.81 12.22,18.11 C12.22,18.35 12.38,18.63 12.84,18.54 C16.42,17.35 19,13.98 19,10 C19,5.03 14.97,1 10,1 L10,1 Z\"/></svg>", 71 "gitter": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"3.5\" y=\"1\" width=\"1.531\" height=\"11.471\"/><rect x=\"7.324\" y=\"4.059\" width=\"1.529\" height=\"15.294\"/><rect x=\"11.148\" y=\"4.059\" width=\"1.527\" height=\"15.294\"/><rect x=\"14.971\" y=\"4.059\" width=\"1.529\" height=\"8.412\"/></svg>", 72 "google": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.86,9.09 C18.46,12.12 17.14,16.05 13.81,17.56 C9.45,19.53 4.13,17.68 2.47,12.87 C0.68,7.68 4.22,2.42 9.5,2.03 C11.57,1.88 13.42,2.37 15.05,3.65 C15.22,3.78 15.37,3.93 15.61,4.14 C14.9,4.81 14.23,5.45 13.5,6.14 C12.27,5.08 10.84,4.72 9.28,4.98 C8.12,5.17 7.16,5.76 6.37,6.63 C4.88,8.27 4.62,10.86 5.76,12.82 C6.95,14.87 9.17,15.8 11.57,15.25 C13.27,14.87 14.76,13.33 14.89,11.75 L10.51,11.75 L10.51,9.09 L17.86,9.09 L17.86,9.09 Z\"/></svg>", 73 "grid": "<svg width=\"20\"
73height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"2\" y=\"2\" width=\"3\" height=\"3\"/><rect x=\"8\" y=\"2\" width=\"3\" height=\"3\"/><rect x=\"14\" y=\"2\" width=\"3\" height=\"3\"/><rect x=\"2\" y=\"8\" width=\"3\" height=\"3\"/><rect x=\"8\" y=\"8\" width=\"3\" height=\"3\"/><rect x=\"14\" y=\"8\" width=\"3\" height=\"3\"/><rect x=\"2\" y=\"14\" width=\"3\" height=\"3\"/><rect x=\"8\" y=\"14\" width=\"3\" height=\"3\"/><rect x=\"14\" y=\"14\" width=\"3\" height=\"3\"/></svg>", 74 "happy": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"13\" cy=\"7\" r=\"1\"/><circle cx=\"7\" cy=\"7\" r=\"1\"/><circle fill=\"none\" stroke=\"#000\" cx=\"10\" cy=\"10\" r=\"8.5\"/><path fill=\"none\" stroke=\"#000\" d=\"M14.6,11.4 C13.9,13.3 12.1,14.5 10,14.5 C7.9,14.5 6.1,13.3 5.4,11.4\"/></svg>", 75 "hashtag": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.431,8 L15.661,7 L12.911,7 L13.831,3 L12.901,3 L11.98,7 L9.29,7 L10.21,3 L9.281,3 L8.361,7 L5.23,7 L5,8 L8.13,8 L7.21,12 L4.23,12 L4,13 L6.98,13 L6.061,17 L6.991,17 L7.911,13 L10.601,13 L9.681,17 L10.611,17 L11.531,13 L14.431,13 L14.661,12 L11.76,12 L12.681,8 L15.431,8 Z M10.831,12 L8.141,12 L9.061,8 L11.75,8 L10.831,12 Z\"/></svg>", 76 "heart": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.03\" d=\"M10,4 C10,4 8.1,2 5.74,2 C3.38,2 1,3.5
765 1,6.73 C1,8.84 2.67,10.44 2.67,10.44 L10,18 L17.33,10.44 C17.33,10.44 19,8.84 19,6.73 C19,3.55 16.62,2 14.26,2 C11.9,2 10,4 10,4 L10,4 Z\"/></svg>", 77 "history": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"#000\" points=\"1 2 2 2 2 6 6 6 6 7 1 7 1 2\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M2.1,6.548 C3.391,3.29 6.746,1 10.5,1 C15.5,1 19.5,5 19.5,10 C19.5,15 15.5,19 10.5,19 C5.5,19 1.5,15 1.5,10\"/><rect x=\"9\" y=\"4\" width=\"1\" height=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M13.018,14.197 L9.445,10.625\"/></svg>", 78 "home": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"18.65 11.35 10 2.71 1.35 11.35 0.65 10.65 10 1.29 19.35 10.65\"/><polygon points=\"15 4 18 4 18 7 17 7 17 5 15 5\"/><polygon points=\"3 11 4 11 4 18 7 18 7 12 12 12 12 18 16 18 16 11 17 11 17 19 11 19 11 13 8 13 8 19 3 19\"/></svg>", 79 "image": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"16.1\" cy=\"6.1\" r=\"1.1\"/><rect fill=\"none\" stroke=\"#000\" x=\".5\" y=\"2.5\" width=\"19\" height=\"15\"/><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.01\" points=\"4,13 8,9 13,14\"/><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.01\" points=\"11,12 12.5,10.5 16,14\"/></svg>", 80 "info": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.13,11.59 C11.97,12.84 10.35,14.12 9.1,14.16 C6.17,14.2 9.89,9.46 8.74,8.37 C9.3,8.16 10.62,7.83 10.62,8.81 C10.62,9.63 10.12,10.55 9.88,11.32 C8.66,15.16 12.13,11.15 12.14,11.18 C12.16,11.21 12.16,11.35 12.13,11.59 C12.08,11.95 12.16,11.35 12.13,11.59 L12.13,11.59 Z M11.56,5.67 C11.56,6.67 9.36,7.15 9.36,6.03 C9.36,5 11.56,4.54 11.56,5.67 L11.56,5.67 Z\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10\" cy=\"10\" r=\"9\"/></svg>", 81 "instagram": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.55,1H6.46C3.45,1,1,3.44,1,6.44v7.12c0,3,2.45,5.44,5.46,5.44h7.08c3.02,0,5.46-2.44,5.46-5.44V6.44 C19.01,3.44,16.56,1,13.55,1z M17.5,14c0,1.93-1.57,3.5-3.5,3.5H6c-1.93,0-3.5-1.57-3.5-3.5V6c0-1.93,1.57-3.5,3.5-3.5h8 c1.93,0,3.5,1.57,3.5,3.5V14z\"/><circle cx=\"14.87\" cy=\"5.26\" r=\"1.09\"/><path d=\"M10.03,5.45c-2.55,0-4.63,2.06-4.63,4.6c0,2.55,2.07,4.61,4.63,4.61c2.56,0,4.63-2.061,4.63-4.61 C14.65,7.51,12.58,5.45,10.03,5.45L10.03,5.45L10.03,5.45z M10.08,13c-1.66,0-3-1.34-3-2.99c0-1.65,1.34-2.99,3-2.99s3,1.34,3,2.99 C13.08,11.66,11.74,13,10.08,13L10.08,13L10.08,13z\"/></svg>", 82 "italic": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.63,5.48 L10.15,14.52 C10,15.08 10.37,15.25 11.92,15.3 L11.72,16 L6,16 L6.2,15.31 C7.78,15.26 8.19,15.09 8.34,14.53 L10.82,5.49 C10.97,4.92 10.63,4.76 9.09,4.71 L9.28,4 L15,4 L14.81,4.69 C13.23,4.75 12.78,4.91 12.63,5.48 L12.63,5.48 Z\"/></svg>", 83 "joomla": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.8,13.4l1.7-1.7L5.9,8c-0.6-0.5-0.6-1.5,0-2c0.6-0.6,1.4-0.6,2,0l1.7-1.7c-1-1-2.3-1.3-3.6-1C5.8,2.2,4.8,1.4,3.7,1.4 c-1.3,0-2.3,1-2.3,2.3c0,1.1,0.8,2,1.8,2.3c-0.4,1.3-0.1,2.8,1,3.8L7.8,13.4L7.8,13.4z\"/><path d=\"M10.2,4.3c1-1,2.5-1.4,3.8-1c0.2-1.1,1.1-2,2.3-2c1.3,0,2.3,1,2.3,2.3c0,1.2-0.9,2.2-2,2.3c0.4,1.3,0,2.8-1,3.8L13.9,8 c0.6-0.5,0.6-1.5,0-2c-0.5-0.6-1.5-0.6-2,0L8.2,9.7L6.5,8\"/><path d=\"M14.1,16.8c-1.3,0.4-2.8,0.1-3.8-1l1.7-1.7c0.6,0.6,1.5,0.6,2,0c0.5-0.6,0.6-1.5,0-2l-3.7-3.7L12,6.7l3.7,3.7 c1,1,1.3,2.4,1,3.6c1.1,0.2,2,1.1,2,2.3c0,1.3-1,2.3-2.3,2.3C15.2,18.6,14.3,17.8,14.1,16.8\"/><path d=\"M13.2,12.2l-3.7,3.7c-1,1-2.4,1.3-3.6,1c-0.2,1-1.2,1.8-2.2,1.8c-1.3,0-2.3-1-2.3-2.3c0-1.1,0.8-2,1.8-2.3 c-0.3-1.3,0-2.7,1-3.7l1.7,1.7c-0.6,0.6-0.6,1.5,0,2c0.6,0.6,1.4,0.6,2,0l3.7-3.7\"/></svg>", 84 "laptop": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect y=\"16\" width=\"20\" height=\"1\"/><rect fill=\"none\" stroke=\"#000\" x=\"2.5\" y=\"4.5\" width=\"15\" height=\"10\"/></svg>", 85 "lifesaver": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10,0.5 C4.76,0.5 0.5,4.76 0.5,10 C0.5,15.24 4.76,19.5 10,19.5 C15.24,19.5 19.5,15.24 19.5,10 C19.5,4.76 15.24,0.5 10,0.5 L10,0.5 Z M10,1.5 C11.49,1.5 12.89,1.88 14.11,2.56 L11.85,4.82 C11.27,4.61 10.65,4.5 10,4.5 C9.21,4.5 8.47,4.67 7.79,4.96 L5.58,2.75 C6.87,1.95 8.38,1.5 10,1.5 L10,1.5 Z M4.96,7.8 C4.67,8.48 4.5,9.21 4.5,10 C4.5,10.65 4.61,11.27 4.83,11.85 L2.56,14.11 C1.88,12.89 1.5,11.49 1.5,10 C1.5,8.38 1.95,6.87 2.75,5.58 L4.96,7.79 L4.96,7.8 L4.96,7.8 Z M10,18.5 C8.25,18.5 6.62,17.97 5.27,17.06 L7.46,14.87 C8.22,15.27 9.08,15.5 10,15.5 C10.79,15.5 11.53,15.33 12.21,15.04 L14.42,17.25 C13.13,18.05 11.62,18.5 10,18.5 L10,18.5 Z M10,14.5 C7.52,14.5 5.5,12.48 5.5,10 C5.5,7.52 7.52,5.5 10,5.5 C12.48,5.5 14.5,7.52 14.5,10 C14.5,12.48 12.48,14.5 10,14.5 L10,14.5 Z M15.04,12.21 C15.33,11.53 15.5,10.79 15.5,10 C15.5,9.08 15.27,8.22 14.87,7.46 L17.06,5.27 C17.97,6.62 18.5,8.25 18.5,10 C18.5,11.62 18.05,13.13 17.25,14.42 L15.04,12.21 L15.04,12.21 Z\"/></svg>", 86 "link": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M10.625,12.375 L7.525,15.475 C6.825,16.175 5.925,16.175 5.225,15.475 L4.525,14.775 C3.825,14.074 3.825,13.175 4.525,12.475 L7.625,9.375\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M9.325,7.375 L12.425,4.275 C13.125,3.575 14.025,3.575 14.724,4.275 L15.425,4.975 C16.125,5.675 16.125,6.575 15.425,7.275 L12.325,10.375\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M7.925,11.875 L11.925,7.975\"/></svg>", 87 "linkedin": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.77,17.89 L5.77,7.17 L2.21,7.17 L2.21,17.89 L5.77,17.89 L5.77,17.89 Z M3.99,5.71 C5.23,5.71 6.01,4.89 6.01,3.86 C5.99,2.8 5.24,2 4.02,2 C2.8,2 2,2.8 2,3.85 C2,4.88 2.77,5.7 3.97,5.7 L3.99,5.7 L3.99,5.71 L3.99,5.71 Z\"/><path d=\"M7.75,17.89 L11.31,17.89 L11.31,11.9 C11.31,11.58 11.33,11.26 11.43,11.03 C11.69,10.39 12.27,9.73 13.26,9.73 C14.55,9.73 15.06,10.71 15.06,12.15 L15.06,17.89 L18.62,17.89 L18.62,11.74 C18.62,8.45 16.86,6.92 14.52,6.92 C12.6,6.92 11.75,7.99 11.28,8.73 L11.3,8.73 L11.3,7.17 L7.75,7.17 C7.79,8.17 7.75,17.89 7.75,17.89 L7.75,17.89 L7.75,17.89 Z\"/></svg>", 88 "list": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"4\" width=\"12\" height=\"1\"/><rect x=\"6\" y=\"9\" width=\"12\" height=\"1\"/><rect x=\"6\" y=\"14\" width=\"12\" height=\"1\"/><rect x=\"2\" y=\"4\" width=\"2\" height=\"1\"/><rect x=\"2\" y=\"9\" width=\"2\" height=\"1\"/><rect x=\"2\" y=\"14\" width=\"2\" height=\"1\"/></svg>", 89 "location": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.01\" d=\"M10,0.5 C6.41,0.5 3.5,3.39 3.5,6.98 C3.5,11.83 10,19 10,19 C10,
8919 16.5,11.83 16.5,6.98 C16.5,3.39 13.59,0.5 10,0.5 L10,0.5 Z\"/><circle fill=\"none\" stroke=\"#000\" cx=\"10\" cy=\"6.8\" r=\"2.3\"/></svg>", 90 "lock": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" height=\"10\" width=\"13\" y=\"8.5\" x=\"3.5\"/><path fill=\"none\" stroke=\"#000\" d=\"M6.5,8 L6.5,4.88 C6.5,3.01 8.07,1.5 10,1.5 C11.93,1.5 13.5,3.01 13.5,4.88 L13.5,8\"/></svg>", 91 "mail": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"1.4,6.5 10,11 18.6,6.5\"/><path d=\"M 1,4 1,16 19,16 19,4 1,4 Z M 18,15 2,15 2,5 18,5 18,15 Z\"/></svg>", 92 "menu": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"2\" y=\"4\" width=\"16\" height=\"1\"/><rect x=\"2\" y=\"9\" width=\"16\" height=\"1\"/><rect x=\"2\" y=\"14\" width=\"16\" height=\"1\"/></svg>", 93 "microphone": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" x1=\"10\" x2=\"10\" y1=\"16.44\" y2=\"18.5\"/><line fill=\"none\" stroke=\"#000\" x1=\"7\" x2=\"13\" y1=\"18.5\" y2=\"18.5\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M13.5 4.89v5.87a3.5 3.5 0 0 1-7 0V4.89a3.5 3.5 0 0 1 7 0z\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M15.5 10.36V11a5.5 5.5 0 0 1-11 0v-.6\"/></svg>", 94 "minus-circle": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9.5\" cy=\"9.5\" r=\"9\"/><line fill=\"none\" stroke=\"#000\" x1=\"5\" y1=\"9.5\" x2=\"14\" y2=\"9.5\"/></svg>", 95 "minus": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect height=\"1\" width=\"18\" y=\"9\" x=\"1\"/></svg>", 96 "more-vertical": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"3\" r=\"2\"/><circle cx=\"10\" cy=\"10\" r=\"2\"/><circle cx=\"10\" cy=\"17\" r=\"2\"/></svg>", 97 "more": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"3\" cy=\"10\" r=\"2\"/><circle cx=\"10\" cy=\"10\" r=\"2\"/><circle cx=\"17\" cy=\"10\" r=\"2\"/></svg>", 98 "move": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"4,5 1,5 1,9 2,9 2,6 4,6\"/><polygon points=\"1,16 2,16 2,18 4,18 4,19 1,19\"/><polygon points=\"14,16 14,19 11,19 11,18 13,18 13,16\"/><rect fill=\"none\" stroke=\"#000\" x=\"5.5\" y=\"1.5\" width=\"13\" height=\"13\"/><rect x=\"1\" y=\"11\" width=\"1\" height=\"3\"/><rect x=\"6\" y=\"18\" width=\"3\" height=\"1\"/></svg>", 99 "nut": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" points=\"2.5,5.7 10,1.3 17.5,5.7 17.5,14.3 10,18.7 2.5,14.3\"/><circle fill=\"none\" stroke=\"#000\" cx=\"10\" cy=\"10\" r=\"3.5\"/></svg>", 100 "pagekit": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"3,1 17,1 17,16 10,16 10,13 14,13 14,4 6,4 6,16 10,16 10,19 3,19\"/></svg>", 101 "paint-bucket": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.21,1 L0,11.21 L8.1,19.31 L18.31,9.1 L10.21,1 L10.21,1 Z M16.89,9.1 L15,11 L1.7,11 L10.21,2.42 L16.89,9.1 Z\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M6.42,2.33 L11.7,7.61\"/><path d=\"M18.49,12 C18.49,12 20,14.06 20,15.36 C20,16.28 19.24,17 18.49,17 L18.49,17 C17.74,17 17,16.28 17,15.36 C17,14.06 18.49,12 18.49,12 L18.49,12 Z\"/></svg>", 102 "pencil": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M17.25,6.01 L7.12,16.1 L3.82,17.2 L5.02,13.9 L15.12,3.88 C15.71,3.29 16.66,3.29 17.25,3.88 C17.83,4.47 17.83,5.42 17.25,6.01 L17.25,6.01 Z\"/><path fill=\"none\" stroke=\"#000\" d=\"M15.98,7.268 L13.851,5.148\"/></svg>", 103 "phone-landscape": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M17,5.5 C17.8,5.5 18.5,6.2 18.5,7 L18.5,14 C18.5,14.8 17.8,15.5 17,15.5 L3,15.5 C2.2,15.5 1.5,14.8 1.5,14 L1.5,7 C1.5,6.2 2.2,5.5 3,5.5 L17,5.5 L17,5.5 L17,5.5 Z\"/><circle cx=\"3.8\" cy=\"10.5\" r=\".8\"/></svg>", 104 "phone": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M15.5,17 C15.5,17.8 14.8,18.5 14,18.5 L7,18.5 C6.2,18.5 5.5,17.8 5.5,17 L5.5,3 C5.5,2.2 6.2,1.5 7,1.5 L14,1.5 C14.8,1.5 15.5,2.2 15.5,3 L15.5,17 L15.5,17 L15.5,17 Z\"/><circle cx=\"10.5\" cy=\"16.5\" r=\".8\"/></svg>", 105 "pinterest": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.21,1 C5.5,1 3,4.16 3,7.61 C3,9.21 3.85,11.2 5.22,11.84 C5.43,11.94 5.54,11.89 5.58,11.69 C5.62,11.54 5.8,10.8 5.88,10.45 C5.91,10.34 5.89,10.24 5.8,10.14 C5.36,9.59 5,8.58 5,7.65 C5,5.24 6.82,2.91 9.93,2.91 C12.61,2.91 14.49,4.74 14.49,7.35 C14.49,10.3 13,12.35 11.06,12.35 C9.99,12.35 9.19,11.47 9.44,10.38 C9.75,9.08 10.35,7.68 10.35,6.75 C10.35,5.91 9.9,5.21 8.97,5.21 C7.87,5.21 6.99,6.34 6.99,7.86 C6.99,8.83 7.32,9.48 7.32,9.48 C7.32,9.48 6.24,14.06 6.04,14.91 C5.7,16.35 6.08,18.7 6.12,18.9 C6.14,19.01 6.26,19.05 6.33,18.95 C6.44,18.81 7.74,16.85 8.11,15.44 C8.24,14.93 8.79,12.84 8.79,12.84 C9.15,13.52 10.19,14.09 11.29,14.09 C14.58,14.09 16.96,11.
10506 16.96,7.3 C16.94,3.7 14,1 10.21,1\"/></svg>", 106 "play-circle": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"8.5 7 13.5 10 8.5 13\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10\" cy=\"10\" r=\"9\"/></svg>", 107 "play": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" points=\"6.5,5 14.5,10 6.5,15\"/></svg>", 108 "plus-circle": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9.5\" cy=\"9.5\" r=\"9\"/><line fill=\"none\" stroke=\"#000\" x1=\"9.5\" y1=\"5\" x2=\"9.5\" y2=\"14\"/><line fill=\"none\" stroke=\"#000\" x1=\"5\" y1=\"9.5\" x2=\"14\" y2=\"9.5\"/></svg>", 109 "plus": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"9\" y=\"1\" width=\"1\" height=\"17\"/><rect x=\"1\" y=\"9\" width=\"17\" height=\"1\"/></svg>", 110 "print": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"4.5 13.5 1.5 13.5 1.5 6.5 18.5 6.5 18.5 13.5 15.5 13.5\"/><polyline fill=\"none\" stroke=\"#000\" points=\"15.5 6.5 15.5 2.5 4.5 2.5 4.5 6.5\"/><rect fill=\"none\" stroke=\"#000\" width=\"11\" height=\"6\" x=\"4.5\" y=\"11.5\"/><rect width=\"8\" height=\"1\" x=\"6\" y=\"13\"/><rect width=\"8\" height=\"1\" x=\"6\" y=\"15\"/></svg>", 111 "pull": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"6.85,8 9.5,10.6 12.15,8 12.85,8.7 9.5,12 6.15,8.7\"/><line fill=\"none\" stroke=\"#000\" x1=\"9.5\" y1=\"11\" x2=\"9.5\" y2=\"2\"/><polyline fill=\"none\" stroke=\"#000\" points=\"6,5.5 3.5,5.5 3.5,18.5 15.5,18.5 15.5,5.5 13,5.5\"/></svg>", 112 "push": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"12.15,4 9.5,1.4 6.85,4 6.15,3.3 9.5,0 12.85,3.3\"/><line fill=\"none\" stroke=\"#000\" x1=\"9.5\" y1=\"10\" x2=\"9.5\" y2=\"1\"/><polyline fill=\"none\" stroke=\"#000\" points=\"6 5.5 3.5 5.5 3.5 18.5 15.5 18.5 15.5 5.5 13 5.5\"/></svg>", 113 "question": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10\" cy=\"10\" r=\"9\"/><circle cx=\"10.44\" cy=\"14.42\" r=\"1.05\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" d=\"M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75\"/></svg>", 114 "quote-right": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.27,7.79 C17.27,9.45 16.97,10.43 15.99,12.02 C14.98,13.64 13,15.23 11.56,15.97 L11.1,15.08 C12.34,14.2 13.14,13.51 14.02,11.82 C14.27,11.34 14.41,10.92 14.49,10.54 C14.3,10.58 14.09,10.6 13.88,10.6 C12.06,10.6 10.59,9.12 10.59,7.3 C10.59,5.48 12.06,4 13.88,4 C15.39,4 16.67,5.02 17.05,6.42 C17.19,6.82 17.27,7.27 17.27,7.79 L17.27,7.79 Z\"/><path d=\"M8.68,7.79 C8.68,9.45 8.38,10.43 7.4,12.02 C6.39,13.64 4.41,15.23 2.97,15.97 L2.51,15.08 C3.75,14.2 4.55,13.51 5.43,11.82 C5.68,11.34 5.82,10.92 5.9,10.54 C5.71,10.58 5.5,10.6 5.29,10.6 C3.47,10.6 2,9.12 2,7.3 C2,5.48 3.47,4 5.29,4 C6.8,4 8.08,5.02 8.46,6.42 C8.6,6.82 8.68,7.27 8.68,7.79 L8.68,7.79 Z\"/></svg>", 115 "receiver": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.01\" d=\"M6.189,13.611C8.134,15.525 11.097,18.239 13.867,18.257C16.47,18.275 18.2,16.241 18.2,16.241L14.509,12.551L11.539,13.639L6.189,8.29L7.313,5.355L3.76,1.8C3.76,1.8 1.732,3.537 1.7,6.092C1.667,8.809 4.347,11.738 6.189,13.611\"/></svg>", 116 "reddit": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 9.05a2.56 2.56 0 0 0-2.56-2.56 2.59 2.59 0 0 0-1.88.82 10.63 10.63 0 0 0-4.14-1v-.08c.58-1.62 1.58-3.89 2.7-4.1.38-.08.77.12 1.19.57a1.15 1.15 0 0 0-.06.37 1.48 1.48 0 1 0 1.51-1.45 1.43 1.43 0 0 0-.76.19A2.29 2.29 0 0 0 12.91 1c-2.11.43-3.39 4.38-3.63 5.19 0 0 0 .11-.06.11a10.65 10.65 0 0 0-3.75 1A2.56 2.56 0 0 0 1 9.05a2.42 2.42 0 0 0 .72 1.76A5.18 5.18 0 0 0 1.24 13c0 3.66 3.92 6.64 8.73 6.64s8.74-3 8.74-6.64a5.23 5.23 0 0 0-.46-2.13A2.58 2.58 0 0 0 19 9.05zm-16.88 0a1.44 1.44 0 0 1 2.27-1.19 7.68 7.68 0 0 0-2.07 1.91 1.33 1.33 0 0 1-.2-.72zM10 18.4c-4.17 0-7.55-2.4-7.55-5.4S5.83 7.53 10 7.53 17.5 10 17.5 13s-3.38 5.4-7.5 5.4zm7.69-8.61a7.62 7.62 0 0 0-2.09-1.91 1.41 1.41 0 0 1 .84-.28 1.47 1.47 0 0 1 1.44 1.45 1.34 1.34 0 0 1-.21.72z\"/><path d=\"M6.69 12.58a1.39 1.39 0 1 1 1.39-1.39 1.38 1.38 0 0 1-1.38 1.39z\"/><path d=\"M14.26 11.2a1.39 1.39 0 1 1-1.39-1.39 1.39 1.39 0 0 1 1.39 1.39z\"/><path d=\"M13.09 14.88a.54.54 0 0 1-.09.77 5.3 5.3 0 0 1-3.26 1.19 5.61 5.61 0 0 1-3.4-1.22.55.55 0 1 1 .73-.83 4.09 4.09 0 0 0 5.25 0 .56.56 0 0 1 .77.09z\"/></svg>", 117 "refresh": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M17.08,11.15 C17.09,11.31 17.1,11.47 17.1,11.64 C17.1,15.53 13.94,18.69 10.05,18.69 C6.16,18.68 3,15.53 3,11.63 C3,7.74 6.16,4.58 10.05,4.58 C10.9,4.58 11.71,4.73 12.46,5\"/><polyline fill=\"none\" stroke=\"#000\" points=\"9.9 2 12.79 4.89 9.79 7.9\"/>
117</svg>", 118 "reply": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.7,13.11 C16.12,10.02 13.84,7.85 11.02,6.61 C10.57,6.41 9.75,6.13 9,5.91 L9,2 L1,9 L9,16 L9,12.13 C10.78,12.47 12.5,13.19 14.09,14.25 C17.13,16.28 18.56,18.54 18.56,18.54 C18.56,18.54 18.81,15.28 17.7,13.11 L17.7,13.11 Z M14.82,13.53 C13.17,12.4 11.01,11.4 8,10.92 L8,13.63 L2.55,9 L8,4.25 L8,6.8 C8.3,6.86 9.16,7.02 10.37,7.49 C13.3,8.65 15.54,10.96 16.65,13.08 C16.97,13.7 17.48,14.86 17.68,16 C16.87,15.05 15.73,14.15 14.82,13.53 L14.82,13.53 Z\"/></svg>", 119 "rss": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"3.12\" cy=\"16.8\" r=\"1.85\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M1.5,8.2 C1.78,8.18 2.06,8.16 2.35,8.16 C7.57,8.16 11.81,12.37 11.81,17.57 C11.81,17.89 11.79,18.19 11.76,18.5\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M1.5,2.52 C1.78,2.51 2.06,2.5 2.35,2.5 C10.72,2.5 17.5,9.24 17.5,17.57 C17.5,17.89 17.49,18.19 17.47,18.5\"/></svg>", 120 "search": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9\" cy=\"9\" r=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M14,14 L18,18 L14,14 Z\"/></svg>", 121 "server": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"3\" y=\"3\" width=\"1\" height=\"2\"/><rect x=\"5\" y=\"3\" width=\"1\" height=\"2\"/><rect x=\"7\" y=\"3\" width=\"1\" height=\"2\"/><rect x=\"16\" y=\"3\" width=\"1\" height=\"1\"/><rect x=\"16\" y=\"10\" width=\"1\" height=\"1\"/><circle fill=\"none\" stroke=\"#000\" cx=\"9.9\" cy=\"17.4\" r=\"1.4\"/><rect x=\"3\" y=\"10\" width=\"1\" height=\"2\"/><rect x=\"5\" y=\"10\" width=\"1\" height=\"2\"/><rect x=\"9.5\" y=\"14\" width=\"1\" height=\"2\"/><rect x=\"3\" y=\"17\" width=\"6\" height=\"1\"/><rect x=\"11\" y=\"17\" width=\"6\" height=\"1\"/><rect fill=\"none\" stroke=\"#000\" x=\"1.5\" y=\"1.5\" width=\"17\" height=\"5\"/><rect fill=\"none\" stroke=\"#000\" x=\"1.5\" y=\"8.5\" width=\"17\" height=\"5\"/></svg>", 122 "settings": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><ellipse fill=\"none\" stroke=\"#000\" cx=\"6.11\" cy=\"3.55\" rx=\"2.11\" ry=\"2.15\"/><ellipse fill=\"none\" stroke=\"#000\" cx=\"6.11\" cy=\"15.55\" rx=\"2.11\" ry=\"2.15\"/><circle fill=\"none\" stroke=\"#000\" cx=\"13.15\" cy=\"9.55\" r=\"2.15\"/><rect x=\"1\" y=\"3\" width=\"3\" height=\"1\"/><rect x=\"10\" y=\"3\" width=\"8\" height=\"1\"/><rect x=\"1\" y=\"9\" width=\"8\" height=\"1\"/><rect x=\"15\" y=\"9\" width=\"3\" height=\"1\"/><rect x=\"1\" y=\"15\" width=\"3\" height=\"1\"/><rect x=\"10\" y=\"15\" width=\"8\" height=\"1\"/></svg>", 123 "shrink": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"11 4 12 4 12 8 16 8 16 9 11 9\"/><polygon points=\"4 11 9 11 9 16 8 16 8 12 4 12\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M12,8 L18,2\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M2,18 L8,12\"/></svg>", 124 "sign-in": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"7 2 17 2 17 17 7 17 7 16 16 16 16 3 7 3\"/><polygon points=\"9.1 13.4 8.5 12.8 11.28 10 4 10 4 9 11.28 9 8.5 6.2 9.1 5.62 13 9.5\"/></svg>", 125 "sign-out": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"13.1 13.4 12.5 12.8 15.28 10 8 10 8 9 15.28 9 12.5 6.2 13.1 5.62 17 9.5\"/><polygon points=\"13 2 3 2 3 17 13 17 13 16 4 16 4 3 13 3\"/></svg>", 126 "social": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13.4\" y1=\"14\" x2=\"6.3\" y2=\"10.7\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13.5\" y1=\"5.5\" x2=\"6.5\" y2=\"8.8\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"15.5\" cy=\"4.6\" r=\"2.3\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"15.5\" cy=\"14.8\" r=\"2.3\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"4.5\" cy=\"9.8\" r=\"2.3\"/></svg>", 127 "soundcloud": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.2,9.4c-0.4,0-0.8,0.1-1.101,0.2c-0.199-2.5-2.399-4.5-5-4.5c-0.6,0-1.2,0.1-1.7,0.3C9.2,5.5,9.1,5.6,9.1,5.6V15h8
127c1.601,0,2.801-1.2,2.801-2.8C20,10.7,18.7,9.4,17.2,9.4L17.2,9.4z\"/><rect x=\"6\" y=\"6.5\" width=\"1.5\" height=\"8.5\"/><rect x=\"3\" y=\"8\" width=\"1.5\" height=\"7\"/><rect y=\"10\" width=\"1.5\" height=\"5\"/></svg>", 128 "star": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" stroke-width=\"1.01\" points=\"10 2 12.63 7.27 18.5 8.12 14.25 12.22 15.25 18 10 15.27 4.75 18 5.75 12.22 1.5 8.12 7.37 7.27\"/></svg>", 129 "strikethrough": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6,13.02 L6.65,13.02 C7.64,15.16 8.86,16.12 10.41,16.12 C12.22,16.12 12.92,14.93 12.92,13.89 C12.92,12.55 11.99,12.03 9.74,11.23 C8.05,10.64 6.23,10.11 6.23,7.83 C6.23,5.5 8.09,4.09 10.4,4.09 C11.44,4.09 12.13,4.31 12.72,4.54 L13.33,4 L13.81,4 L13.81,7.59 L13.16,7.59 C12.55,5.88 11.52,4.89 10.07,4.89 C8.84,4.89 7.89,5.69 7.89,7.03 C7.89,8.29 8.89,8.78 10.88,9.45 C12.57,10.03 14.38,10.6 14.38,12.91 C14.38,14.75 13.27,16.93 10.18,16.93 C9.18,16.93 8.17,16.69 7.46,16.39 L6.52,17 L6,17 L6,13.02 L6,13.02 Z\"/><rect x=\"3\" y=\"10\" width=\"15\" height=\"1\"/></svg>", 130 "table": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"3\" width=\"18\" height=\"1\"/><rect x=\"1\" y=\"7\" width=\"18\" height=\"1\"/><rect x=\"1\" y=\"11\" width=\"18\" height=\"1\"/><rect x=\"1\" y=\"15\" width=\"18\" height=\"1\"/></svg>", 131 "tablet-landscape": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M1.5,5 C1.5,4.2 2.2,3.5 3,3.5 L17,3.5 C17.8,3.5 18.5,4.2 18.5,5 L18.5,16 C18.5,16.8 17.8,17.5 17,17.5 L3,17.5 C2.2,17.5 1.5,16.8 1.5,16 L1.5,5 L1.5,5 L1.5,5 Z\"/><circle cx=\"3.7\" cy=\"10.5\" r=\".8\"/></svg>", 132 "tablet": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M5,18.5 C4.2,18.5 3.5,17.8 3.5,17 L3.5,3 C3.5,2.2 4.2,1.5 5,1.5 L16,1.5 C16.8,1.5 17.5,2.2 17.5,3 L17.5,17 C17.5,17.8 16.8,18.5 16,18.5 L5,18.5 L5,18.5 L5,18.5 Z\"/><circle cx=\"10.5\" cy=\"16.3\" r=\".8\"/></svg>", 133 "tag": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M17.5,3.71 L17.5,7.72 C17.5,7.96 17.4,8.2 17.21,8.39 L8.39,17.2 C7.99,17.6 7.33,17.6 6.93,17.2 L2.8,13.07 C2.4,12.67 2.4,12.01 2.8,11.61 L11.61,2.8 C11.81,2.6 12.08,2.5 12.34,2.5 L16.19,2.5 C16.52,2.5 16.86,2.63 17.11,2.88 C17.35,3.11 17.48,3.4 17.5,3.71 L17.5,3.71 Z\"/><circle cx=\"14\" cy=\"6\" r=\"1\"/></svg>", 134 "thumbnails": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" x=\"3.5\" y=\"3.5\" width=\"5\" height=\"5\"/><rect fill=\"none\" stroke=\"#000\" x=\"11.5\" y=\"3.5\" width=\"5\" height=\"5\"/><rect fill=\"none\" stroke=\"#000\" x=\"11.5\" y=\"11.5\" width=\"5\" height=\"5\"/><rect fill=\"none\" stroke=\"#000\" x=\"3.5\" y=\"11.5\" width=\"5\" height=\"5\"/></svg>", 135 "tiktok": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.24,6V8.82a6.79,6.79,0,0,1-4-1.28v5.81A5.26,5.26,0,1,1,8,8.1a4.36,4.36,0,0,1,.72.05v2.9A2.57,2.57,0,0,0,7.64,11a2.4,2.4,0,1,0,2.77,2.38V2h2.86a4,4,0,0,0,1.84,3.38A4,4,0,0,0,17.24,6Z\"/></svg>", 136 "trash": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"6.5 3 6.5 1.5 13.5 1.5 13.5 3\"/><polyline fill=\"none\" stroke=\"#000\" points=\"4.5 4 4.5 18.5 15.5 18.5 15.5 4\"/><rect x=\"8\" y=\"7\" width=\"1\" height=\"9\"/><rect x=\"11\" y=\"7\" width=\"1\" height=\"9\"/><rect x=\"2\" y=\"3\" width=\"16\" height=\"1\"/></svg>", 137 "triangle-down": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"5 7 15 7 10 12\"/></svg>", 138 "triangle-left": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"12 5 7 10 12 15\"/></svg>", 139 "triangle-right": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"8 5 13 10 8 15\"/></svg>", 140 "triangle-up": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"5 13 10 8 15 13\"/></svg>", 141 "tripadvisor": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19.021,7.866C19.256,6.862,20,5.854,20,5.854h-3.346C14.781,4.641,12.504,4,9.98,4C7.363,4,4.999,4.651,3.135,5.876H0\tc0,0,0.738,0.987,0.976,1.988c-0.611,0.837-0.973,1.852-0.973,2.964c0,2.763,2.249,5.009,5.011,5.
141009\tc1.576,0,2.976-0.737,3.901-1.879l1.063,1.599l1.075-1.615c0.475,0.611,1.1,1.111,1.838,1.451c1.213,0.547,2.574,0.612,3.825,0.15\tc2.589-0.963,3.913-3.852,2.964-6.439c-0.175-0.463-0.4-0.876-0.675-1.238H19.021z M16.38,14.594\tc-1.002,0.371-2.088,0.328-3.06-0.119c-0.688-0.317-1.252-0.817-1.657-1.438c-0.164-0.25-0.313-0.52-0.417-0.811\tc-0.124-0.328-0.186-0.668-0.217-1.014c-0.063-0.689,0.037-1.396,0.339-2.043c0.448-0.971,1.251-1.71,2.25-2.079\tc2.075-0.765,4.375,0.3,5.14,2.366c0.762,2.066-0.301,4.37-2.363,5.134L16.38,14.594L16.38,14.594z M8.322,13.066\tc-0.72,1.059-1.935,1.76-3.309,1.76c-2.207,0-4.001-1.797-4.001-3.996c0-2.203,1.795-4.002,4.001-4.002\tc2.204,0,3.999,1.8,3.999,4.002c0,0.137-0.024,0.261-0.04,0.396c-0.067,0.678-0.284,1.313-0.648,1.853v-0.013H8.322z M2.472,10.775\tc0,1.367,1.112,2.479,2.476,2.479c1.363,0,2.472-1.11,2.472-2.479c0-1.359-1.11-2.468-2.472-2.468\tC3.584,8.306,2.473,9.416,2.472,10.775L2.472,10.775z M12.514,10.775c0,1.367,1.104,2.479,2.471,2.479\tc1.363,0,2.474-1.108,2.474-2.479c0-1.359-1.11-2.468-2.474-2.468c-1.364,0-2.477,1.109-2.477,2.468H12.514z M3.324,10.775\tc0-0.893,0.726-1.618,1.614-1.618c0.889,0,1.625,0.727,1.625,1.618c0,0.898-0.725,1.627-1.625,1.627\tc-0.901,0-1.625-0.729-1.625-1.627H3.324z M13.354,10.775c0-0.893,0.726-1.618,1.627-1.618c0.886,0,1.61,0.727,1.61,1.618\tc0,0.898-0.726,1.627-1.626,1.627s-1.625-0.729-1.625-1.627H13.354z M9.977,4.875c1.798,0,3.425,0.324,4.849,0.968\tc-0.535,0.015-1.061,0.108-1.586,0.3c-1.264,0.463-2.264,1.388-2.815,2.604c-0.262,0.551-0.398,1.133-0.448,1.72\tC9.79,7.905,7.677,5.873,5.076,5.82C6.501,5.208,8.153,4.875,9.94,4.875H9.977z\"/></svg>", 142 "tumblr": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.885,8.598c0,0,0,3.393,0,4.996c0,0.282,0,0.66,0.094,0.942c0.377,1.509,1.131,2.545,2.545,3.11 c1.319,0.472,2.356,0.472,3.676,0c0.565-0.188,1.132-0.659,1.132-0.659l-0.849-2.263c0,0-1.036,0.378-1.603,0.283 c-0.565-0.094-1.226-0.66-1.226-1.508c0-1.603,0-4.902,0-4.902h2.828V5.771h-2.828V2H8.205c0,0-0.094,0.66-0.188,0.942 C7.828,3.791,7.262,4.733,6.603,5.394C5.848,6.147,5,6.43,5,6.43v2.168H6.885z\"/></svg>", 143 "tv": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"7\" y=\"16\" width=\"6\" height=\"1\"/><rect fill=\"none\" stroke=\"#000\" x=\".5\" y=\"3.5\" width=\"19\" height=\"11\"/></svg>", 144 "twitch": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.23,1,2,4.23V15.85H5.88v3.23L9.1,15.85h2.59L17.5,10V1Zm11,8.4L13.62,12H11L8.78,14.24V12H5.88V2.29H16.21Z\"/><rect x=\"12.98\" y=\"4.55\" width=\"1.29\" height=\"3.88\"/><rect x=\"9.43\" y=\"4.55\" width=\"1.29\" height=\"3.88\"/></svg>", 145 "twitter": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19,4.74 C18.339,5.029 17.626,5.229 16.881,5.32 C17.644,4.86 18.227,4.139 18.503,3.28 C17.79,3.7 17.001,4.009 16.159,4.17 C15.485,3.45 14.526,3 13.464,3 C11.423,3 9.771,4.66 9.771,6.7 C9.771,6.99 9.804,7.269 9.868,7.539 C6.795,7.38 4.076,5.919 2.254,3.679 C1.936,4.219 1.754,4.86 1.754,5.539 C1.754,6.82 2.405,7.95 3.397,8.61 C2.79,8.589 2.22,8.429 1.723,8.149 L1.723,8.189 C1.723,9.978 2.997,11.478 4.686,11.82 C4.376,11.899 4.049,11.939 3.713,11.939 C3.475,11.939 3.245,11.919 3.018,11.88 C3.49,13.349 4.852,14.419 6.469,14.449 C5.205,15.429 3.612,16.019 1.882,16.019 C1.583,16.019 1.29,16.009 1,15.969 C2.635,17.019 4.576,17.629 6.662,17.629 C13.454,17.629 17.17,12 17.17,7.129 C17.17,6.969 17.166,6.809 17.157,6.649 C17.879,6.129 18.504,5.478 19,4.74\"/></svg>", 146 "uikit": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon points=\"14.4,3.1 11.3,5.1 15,7.3 15,12.9 10,15.7 5,12.9 5,8.5 2,6.8 2,14.8 9.9,19.5 18,14.8 18,5.3\"/><polygon points=\"9.8,4.2 6.7,2.4 9.8,0.4 12.9,2.3\"/></svg>", 147 "unlock": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect fill=\"none\" stroke=\"#000\" x=\"3.5\" y=\"8.5\" width=\"13\" height=\"10\"/><path fill=\"none\" stroke=\"#000\" d=\"M6.5,8.5 L6.5,4.9 C6.5,3 8.1,1.5 10,1.5 C11.9,1.5 13.5,3 13.5,4.9\"/></svg>", 148 "upload": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" points=\"5 8 9.5 3.5 14 8\"/><rect x=\"3\" y=\"17\" width=\"13\" height=\"1\"/><line fill=\"none\" stroke=\"#000\" x1=\"9.5\" y1=\"15\" x2=\"9.5\" y2=\"4\"/></svg>", 149 "user": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9.9\" cy=\"6.4\" r=\"4.4\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M1.5,19 C2.3,14.5 5.8,11.2 10,11.2 C14.2,11.2 17.7,14.6 18.5,19.2\"/></svg>", 150 "users": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"7.7\" cy=\"8.6\" r=\"3.5\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M1,18.1 C1.7,14.6 4.4,12.1 7.6,12.1 C10.9,12.1 13.7,14.8 14.3,18.3\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M11.4,4 C12.8,2.4 15.4,2.8 16.3,4.7 C17.2,6.6 15.7,8.9 13.6,8.9 C16.5,8.9 18.8,11.3 19.2,14.1\"/></svg>", 151 "video-camera": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><polygon fill=\"none\" stroke=\"#000\" points=\"17.5 6.9 17.5 13.1 13.5 10.4 13.5 14.5 2.5 14.5 2.5 5.5 13.5 5.5 13.5 9.6 17.5 6.9\"/></svg>", 152 "vimeo": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.065,7.59C1.84,7.367,1.654,7.082,1.468,6.838c-0.332-0.42-0.137-0.411,0.274-0.772c1.026-0.9
1521,2.004-1.896,3.127-2.688 c1.017-0.713,2.365-1.173,3.286-0.039c0.849,1.045,0.869,2.629,1.084,3.891c0.215,1.309,0.421,2.648,0.88,3.901 c0.127,0.352,0.37,1.018,0.81,1.074c0.567,0.078,1.145-0.917,1.408-1.289c0.684-0.987,1.611-2.317,1.494-3.587 c-0.115-1.349-1.572-1.095-2.482-0.773c0.146-1.514,1.555-3.216,2.912-3.792c1.439-0.597,3.579-0.587,4.302,1.036 c0.772,1.759,0.078,3.802-0.763,5.396c-0.918,1.731-2.1,3.333-3.363,4.829c-1.114,1.329-2.432,2.787-4.093,3.422 c-1.897,0.723-3.021-0.686-3.667-2.318c-0.705-1.777-1.056-3.771-1.565-5.621C4.898,8.726,4.644,7.836,4.136,7.191 C3.473,6.358,2.72,7.141,2.065,7.59C1.977,7.502,2.115,7.551,2.065,7.59L2.065,7.59z\"/></svg>", 153 "warning": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"14\" r=\"1\"/><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10\" cy=\"10\" r=\"9\"/><path d=\"M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z\"/></svg>", 154 "whatsapp": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M16.7,3.3c-1.8-1.8-4.1-2.8-6.7-2.8c-5.2,0-9.4,4.2-9.4,9.4c0,1.7,0.4,3.3,1.3,4.7l-1.3,4.9l5-1.3c1.4,0.8,2.9,1.2,4.5,1.2 l0,0l0,0c5.2,0,9.4-4.2,9.4-9.4C19.5,7.4,18.5,5,16.7,3.3 M10.1,17.7L10.1,17.7c-1.4,0-2.8-0.4-4-1.1l-0.3-0.2l-3,0.8l0.8-2.9 l-0.2-0.3c-0.8-1.2-1.2-2.7-1.2-4.2c0-4.3,3.5-7.8,7.8-7.8c2.1,0,4.1,0.8,5.5,2.3c1.5,1.5,2.3,3.4,2.3,5.5 C17.9,14.2,14.4,17.7,10.1,17.7 M14.4,11.9c-0.2-0.1-1.4-0.7-1.6-0.8c-0.2-0.1-0.4-0.1-0.5,0.1c-0.2,0.2-0.6,0.8-0.8,0.9 c-0.1,0.2-0.3,0.2-0.5,0.1c-0.2-0.1-1-0.4-1.9-1.2c-0.7-0.6-1.2-1.4-1.3-1.6c-0.1-0.2,0-0.4,0.1-0.5C8,8.8,8.1,8.7,8.2,8.5 c0.1-0.1,0.2-0.2,0.2-0.4c0.1-0.2,0-0.3,0-0.4C8.4,7.6,7.9,6.5,7.7,6C7.5,5.5,7.3,5.6,7.2,5.6c-0.1,0-0.3,0-0.4,0 c-0.2,0-0.4,0.1-0.6,0.3c-0.2,0.2-0.8,0.8-0.8,2c0,1.2,0.8,2.3,1,2.4c0.1,0.2,1.7,2.5,4,3.5c0.6,0.2,1,0.4,1.3,0.5 c0.6,0.2,1.1,0.2,1.5,0.1c0.5-0.1,1.4-0.6,1.6-1.1c0.2-0.5,0.2-1,0.1-1.1C14.8,12.1,14.6,12,14.4,11.9\"/>
154</svg>", 155 "wordpress": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10,0.5c-5.2,0-9.5,4.3-9.5,9.5s4.3,9.5,9.5,9.5c5.2,0,9.5-4.3,9.5-9.5S15.2,0.5,10,0.5L10,0.5L10,0.5z M15.6,3.9h-0.1 c-0.8,0-1.4,0.7-1.4,1.5c0,0.7,0.4,1.3,0.8,1.9c0.3,0.6,0.7,1.3,0.7,2.3c0,0.7-0.3,1.5-0.6,2.7L14.1,15l-3-8.9 c0.5,0,0.9-0.1,0.9-0.1C12.5,6,12.5,5.3,12,5.4c0,0-1.3,0.1-2.2,0.1C9,5.5,7.7,5.4,7.7,5.4C7.2,5.3,7.2,6,7.6,6c0,0,0.4,0.1,0.9,0.1 l1.3,3.5L8,15L5,6.1C5.5,6.1,5.9,6,5.9,6C6.4,6,6.3,5.3,5.9,5.4c0,0-1.3,0.1-2.2,0.1c-0.2,0-0.3,0-0.5,0c1.5-2.2,4-3.7,6.9-3.7 C12.2,1.7,14.1,2.6,15.6,3.9L15.6,3.9L15.6,3.9z M2.5,6.6l3.9,10.8c-2.7-1.3-4.6-4.2-4.6-7.4C1.8,8.8,2,7.6,2.5,6.6L2.5,6.6L2.5,6.6 z M10.2,10.7l2.5,6.9c0,0,0,0.1,0.1,0.1C11.9,18,11,18.2,10,18.2c-0.8,0-1.6-0.1-2.3-0.3L10.2,10.7L10.2,10.7L10.2,10.7z M14.2,17.1 l2.5-7.3c0.5-1.2,0.6-2.1,0.6-2.9c0-0.3,0-0.6-0.1-0.8c0.6,1.2,1,2.5,1,4C18.3,13,16.6,15.7,14.2,17.1L14.2,17.1L14.2,17.1z\"/></svg>", 156 "world": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" stroke=\"#000\" d=\"M1,10.5 L19,10.5\"/><path fill=\"none\" stroke=\"#000\" d=\"M2.35,15.5 L17.65,15.5\"/><path fill=\"none\" stroke=\"#000\" d=\"M2.35,5.5 L17.523,5.5\"/><path fill=\"none\" stroke=\"#000\" d=\"M10,19.46 L9.98,19.46 C7.31,17.33 5.61,14.141 5.61,10.58 C5.61,7.02 7.33,3.83 10,1.7 C10.01,1.7 9.99,1.7 10,1.7 L10,1.7 C12.67,3.83 14.4,7.02 14.4,10.58 C14.4,14.141 12.67,17.33 10,19.46 L10,19.46 L10,19.46 L10,19.46 Z\"/><circle fill=\"none\" stroke=\"#000\" cx=\"10\" cy=\"10.5\" r=\"9\"/></svg>", 157 "xing": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.4,4.56 C4.24,4.56 4.11,4.61 4.05,4.72 C3.98,4.83 3.99,4.97 4.07,5.12 L5.82,8.16 L5.82,8.17 L3.06,13.04 C2.99,13.18 2.99,13.33 3.06,13.44 C3.12,13.55 3.24,13.62 3.4,13.62 L6,13.62 C6.39,13.62 6.57,13.36 6.71,13.12 C6.71,13.12 9.41,8.35 9.51,8.16 C9.49,8.14 7.72,5.04 7.72,5.04 C7.58,4.81 7.39,4.56 6.99,4.56 L4.4,4.56 L4.4,4.56 Z\"/><path d=\"M15.3,1 C14.91,1 14.74,1.25 14.6,1.5 C14.6,1.5 9.01,11.42 8.82,11.74 C8.83,11.76 12.51,18.51 12.51,18.51 C12.64,18.74 12.84,19 13.23,19 L15.82,19 C15.98,19 16.1,18.94 16.16,18.83 C16.23,18.72 16.23,18.57 16.16,18.43 L12.5,11.74 L12.5,11.72 L18.25,1.56 C18.32,1.42 18.32,1.27 18.25,1.16 C18.21,1.06 18.08,1 17.93,1 L15.3,1 L15.3,1 Z\"/></svg>", 158 "yelp": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.175,14.971c-0.112,0.77-1.686,2.767-2.406,3.054c-0.246,0.1-0.487,0.076-0.675-0.069\tc-0.122-0.096-2.446-3.859-2.446-3.859c-0.194-0.293-0.157-0.682,0.083-0.978c0.234-0.284,0.581-0.393,0.881-0.276\tc0.016,0.01,4.21,1.394,4.332,1.482c0.178,0.148,0.263,0.379,0.225,0.646L17.175,14.971L17.175,14.971z M11.464,10.789\tc-0.203-0.307-0.199-0.666,0.009-0.916c0,0,2.625-3.574,2.745-3.657c0.203-0.135,0.452-0.141,0.69-0.025\tc0.691,0.335,2.085,2.405,2.167,3.199v0.027c0.024,0.271-0.082,0.491-0.273,0.623c-0.132,0.083-4.43,1.155-4.43,1.155\tc-0.322,0.096-0.68-0.06-0.882-0.381L11.464,10.789z M9.475,9.563C9.32,9.609,8.848,9.757,8.269,8.817c0,0-3.916-6.16-4.007-6.351\tc-0.057-0.212,0.011-0.455,0.202-0.65C5.047,1.211,8.21,0.327,9.037,0.529c0.27,0.069,0.457,0.238,0.522,0.479\tc0.047,0.266,0.433,5.982,0.488,7.264C10.098,9.368,9.629,9.517,9.475,9.563z M9.927,19.066c-0.083,0.225-0.273,0.373-0.54,0.421\tc-0.762,0.13-3.15-0.751-3.647-1.342c-0.096-0.131-0.155-0.262-0.167-0.394c-0.011-0.095,0-0.189,0.036-0.272\tc0.061-0.155,2.917-3.538,2.917-3.538c0.214-0.272,0.595-0.355,0.952-0.213c0.345,0.13,0.56,0.428,0.536,0.749\tC10.014,14.479,9.977,18.923,9.927,19.066z M3.495,13.912c-0.235-0.009-0.444-0.148-0.568-0.382c-0.089-0.17-0.151-0.453-0.19-0.794\tC2.63,11.701,2.761,10.144,3.07,9.648c0.145-0.226,0.357-0.345,0.592-0.336c0.154,0,4.255,1.667,4.255,1.667\tc0.321,0.118,0.521,0.453,0.5,0.833c-0.023,0.37-0.236,0.655-0.551,0.738L3.495,13.912z\"/></svg>", 159 "youtube": "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15,4.1c1,0.1,2.3,0,3,0.8c0.8,0.8,0.9,2.1,0.9,3.1C19,9.2,19,10.9,19,12c-0.1,1.1,0,2.4-0.5,3.4c-0.5,1.1-1.4,1.5-2.5,1.6 c-1.2,0.1-8.6,0.1-11,0c-1.1-0.1-2.4-0.1-3.2-1c-0.7-0.8-0.7-2-0.8-3C1,11.8,1,10.1,1,8.9c0-1.1,0-2.4,0.5-3.4C2,4.5,3,4.3,4.1,4.2 C5.3,4.1,12.6,4,15,4.1z M8,7.5v6l5.5-3L8,7.5z\"/></svg>" }); 160 161 } 162 163 if (typeof window !== 'undefined' && window.UIkit) { 164 window.UIkit.use(plugin); 165 } 166 167 return plugin; 168 169})); 170 171},{}],2:[function(require,module,exports){ 172/*! UIkit 3.13.7 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */ 173 174(function (global, factory) { 175 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 176 typeof define === 'function' && define.amd ? define('uikit', factory) : 177 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkit = factory()); 178})(this, (function () { 'use strict'; 179 180 const { hasOwnProperty, toString } = Object.prototype; 181 182 function hasOwn(obj, key) { 183 return hasOwnProperty.call(obj, key); 184 } 185 186 const hyphenateRe = /\B([A-Z])/g; 187 188 const hyphenate = memoize((str) => str.replace(hyphenateRe, '-$1').toLowerCase()); 189 190 const camelizeRe = /-(\w)/g; 191 192 const camelize = memoize((str) => str.replace(camelizeRe, toUpper)); 193 194 const ucfirst = memoize((str) => 195 str.length ? toUpper(null, str.charAt(0)) + str.slice(1) : ''); 196 197 198 function toUpper(_, c) { 199 return c ? c.toUpperCase() : ''; 200 } 201 202 function startsWith(str, search) { 203 return str == null ? void 0 : str.startsWith == null ? void 0 : str.startsWith(search); 204 } 205 206 function endsWith(str, search) { 207 return str == null ? void 0 : str.endsWith == null ? void 0 : str.endsWith(search); 208 } 209 210 function includes(obj, search) { 211 return obj == null ? void 0 : obj.includes == null ? void 0 : obj.includes(search); 212 } 213 214 function findIndex(array, predicate) { 215 return array == null ? void 0 : array.findIndex == null ? void 0 : array.findIndex(predicate); 216 } 217 218 const { isArray, from: toArray } = Array; 219 const { assign } = Object; 220 221 function isFunction(obj) { 222 return typeof obj === 'function'; 223 } 224 225 function isObject(obj) { 226 return obj !== null && typeof obj === 'object'; 227 } 228 229 function isPlainObject(obj) { 230 return toString.call(obj) === '[object Object]'; 231 } 232 233 function isWindow(obj) { 234 return isObject(obj) && obj === obj.window; 235 } 236 237 function isDocument(obj) { 238 return nodeType(obj) === 9; 239 } 240 241 function isNode(obj) { 242 return nodeType(obj) >= 1; 243 } 244 245 function isElement(obj) { 246 return nodeType(obj) === 1; 247 } 248 249 function nodeType(obj) { 250 return !isWindow(obj) && isObject(obj) && obj.nodeType; 251 } 252 253 function isBoolean(value) { 254 return typeof value === 'boolean'; 255 } 256 257 function isString(value) { 258 return typeof value === 'string'; 259 } 260 261 function isNumber(value) { 262 return typeof value === 'number'; 263 } 264 265 function isNumeric(value) { 266 return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value)); 267 } 268 269 function isEmpty(obj) { 270 return !(isArray(obj) ? obj.length : isObject(obj) ? Object.keys(obj).length : false); 271 } 272 273 function isUndefined(value) { 274 return value === void 0; 275 } 276 277 function toBoolean(value) { 278 return isBoolean(value) ? 279 value : 280 value === 'true' || value === '1' || value === '' ? 281 true : 282 value === 'false' || value === '0' ? 283 false : 284 value; 285 } 286 287 function toNumber(value) { 288 const number = Number(value); 289 return isNaN(number) ? false : number; 290 } 291 292 function toFloat(value) { 293 return parseFloat(value) || 0; 294 } 295 296 function toNode(element) { 297 return toNodes(element)[0]; 298 } 299 300 function toNodes(element) { 301 return element && (isNode(element) ? [element] : Array.from(element).filter(isNode)) || []; 302 } 303 304 function toWindow(element) {var _element; 305 if (isWindow(element)) { 306 return element; 307 } 308 309 element = toNode(element); 310 const document = isDocument(element) ? element : (_element = element) == null ? void 0 : _element.ownerDocument; 311 312 return (document == null ? void 0 : document.defaultView) || window; 313 } 314 315 function toMs(time) {
316 return time ? endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000 : 0; 317 } 318 319 function isEqual(value, other) { 320 return ( 321 value === other || 322 isObject(value) && 323 isObject(other) && 324 Object.keys(value).length === Object.keys(other).length && 325 each(value, (val, key) => val === other[key])); 326 327 } 328 329 function swap(value, a, b) { 330 return value.replace(new RegExp(a + "|" + b, 'g'), (match) => match === a ? b : a); 331 } 332 333 function last(array) { 334 return array[array.length - 1]; 335 } 336 337 function each(obj, cb) { 338 for (const key in obj) { 339 if (false === cb(obj[key], key)) { 340 return false; 341 } 342 } 343 return true; 344 } 345 346 function sortBy$1(array, prop) { 347 return array. 348 slice(). 349 sort((_ref, _ref2) => {let { [prop]: propA = 0 } = _ref;let { [prop]: propB = 0 } = _ref2;return ( 350 propA > propB ? 1 : propB > propA ? -1 : 0);}); 351 352 } 353 354 function uniqueBy(array, prop) { 355 const seen = new Set(); 356 return array.filter((_ref3) => {let { [prop]: check } = _ref3;return seen.has(check) ? false : seen.add(check);}); 357 } 358 359 function clamp(number, min, max) {if (min === void 0) {min = 0;}if (max === void 0) {max = 1;} 360 return Math.min(Math.max(toNumber(number) || 0, min), max); 361 } 362 363 function noop() {} 364 365 function intersectRect() {for (var _len = arguments.length, rects = new Array(_len), _key = 0; _key < _len; _key++) {rects[_key] = arguments[_key];} 366 return [ 367 ['bottom', 'top'], 368 ['right', 'left']]. 369 every( 370 (_ref4) => {let [minProp, maxProp] = _ref4;return ( 371 Math.min(...rects.map((_ref5) => {let { [minProp]: min } = _ref5;return min;})) - 372 Math.max(...rects.map((_ref6) => {let { [maxProp]: max } = _ref6;return max;})) > 373 0);}); 374 375 } 376 377 function pointInRect(point, rect) { 378 return ( 379 point.x <= rect.right && 380 point.x >= rect.left && 381 point.y <= rect.bottom && 382 point.y >= rect.top); 383 384 } 385 386 const Dimensions = { 387 ratio(dimensions, prop, value) { 388 const aProp = prop === 'width' ? 'height' : 'width'; 389 390 return { 391 [aProp]: dimensions[prop] ? 392 Math.round(value * dimensions[aProp] / dimensions[prop]) : 393 dimensions[aProp], 394 [prop]: value }; 395 396 }, 397 398 contain(dimensions, maxDimensions) { 399 dimensions = { ...dimensions }; 400 401 each( 402 dimensions, 403 (_, prop) => 404 dimensions = 405 dimensions[prop] > maxDimensions[prop] ? 406 this.ratio(dimensions, prop, maxDimensions[prop]) : 407 dimensions); 408 409 410 return dimensions; 411 }, 412 413 cover(dimensions, maxDimensions) { 414 dimensions = this.contain(dimensions, maxDimensions); 415 416 each( 417 dimensions, 418 (_, prop) => 419 dimensions = 420 dimensions[prop] < maxDimensions[prop] ? 421 this.ratio(dimensions, prop, maxDimensions[prop]) : 422 dimensions); 423 424 425 return dimensions; 426 } }; 427 428 429 function getIndex(i, elements, current, finite) {if (current === void 0) {current = 0;}if (finite === void 0) {finite = false;} 430 elements = toNodes(elements); 431 432 const { length } = elements; 433 434 if (!length) { 435 return -1; 436 } 437 438 i = isNumeric(i) ? 439 toNumber(i) : 440 i === 'next' ? 441 current + 1 : 442 i === 'previous' ? 443 current - 1 : 444 elements.indexOf(toNode(i)); 445 446 if (finite) { 447 return clamp(i, 0, length - 1); 448 } 449 450 i %= length; 451 452 return i < 0 ? i + length : i; 453 } 454 455 function memoize(fn) { 456 const cache = Object.create(null); 457 return (key) => cache[key] || (cache[key] = fn(key)); 458 } 459 460 class Deferred { 461 constructor() { 462 this.promise = new Promise((resolve, reject) => { 463 this.reject = reject; 464 this.resolve = resolve; 465 }); 466 }} 467 468 function attr(element, name, value) { 469 if (isObject(name)) { 470 for (const key in name) { 471 attr(element, key, name[key]); 472 } 473 return; 474 } 475 476 if (isUndefined(value)) {var _toNode; 477 return (_toNode = toNode(element)) == null ? void 0 : _toNode.getAttribute(name); 478 } else { 479 for (const el of toNodes(element)) { 480 if (isFunction(value)) { 481 value = value.call(el, attr(el, name)); 482 } 483 484 if (value === null) { 485 removeAttr(el, name); 486 } else { 487 el.setAttribute(name, value); 488 } 489 } 490 } 491 } 492 493 function hasAttr(element, name) { 494 return toNodes(element).some((element) => element.hasAttribute(name)); 495 } 496 497 function removeAttr(element, name) { 498 const elements = toNodes(element); 499 for (const attribute of name.split(' ')) { 500 for (const element of elements) { 501 element.removeAttribute(attribute); 502 } 503 } 504 } 505 506 function data(element, attribute) { 507 for (const name of [attribute, "data-" + attribute]) { 508 if (hasAttr(element, name)) { 509 return attr(element, name); 510 } 511 } 512 } 513 514 const voidElements = { 515 area: true, 516 base: true, 517 br: true, 518 col: true, 519 embed: true, 520 hr: true, 521 img: true, 522 input: true, 523 keygen: true, 524 link: true, 525 menuitem: true, 526 meta: true, 527 param: true, 528 source: true, 529 track: true, 530 wbr: true }; 531 532 function isVoidElement(element) { 533 return toNodes(element).some((element) => voidElements[element.tagName.toLowerCase()]); 534 } 535 536 function isVisible(element) { 537 return toNodes(element).some( 538 (element) => element.offsetWidth || element.offsetHeight || element.getClientRects().length); 539 540 } 541 542 const selInput = 'input,select,textarea,button'; 543 function isInput(element) { 544 return toNodes(element).some((element) => matches(element, selInput)); 545 } 546 547 const selFocusable = selInput + ",a[href],[tabindex]"; 548 function isFocusable(element) { 549 return matches(element, selFocusable); 550 } 551 552 function parent(element) {var _toNode; 553 return (_toNode = toNode(element)) == null ? void 0 : _toNode.parentElement; 554 } 555 556 function filter$1(element, selector) { 557 return toNodes(element).filter((element) => matches(element, selector)); 558 } 559 560 function matches(element, selector) { 561 return toNodes(element).some((element) => element.matches(selector)); 562 } 563 564 function closest(element, selector) { 565 if (startsWith(selector, '>')) { 566 selector = selector.slice(1); 567 } 568 569 return isElement(element) ? 570 element.closest(selector) : 571 toNodes(element). 572 map((element) => closest(element, selector)).
573 filter(Boolean); 574 } 575 576 function within(element, selector) { 577 return isString(selector) ? 578 matches(element, selector) || !!closest(element, selector) : 579 element === selector || toNode(selector).contains(toNode(element)); 580 } 581 582 function parents(element, selector) { 583 const elements = []; 584 585 while (element = parent(element)) { 586 if (!selector || matches(element, selector)) { 587 elements.push(element); 588 } 589 } 590 591 return elements; 592 } 593 594 function children(element, selector) { 595 element = toNode(element); 596 const children = element ? toNodes(element.children) : []; 597 return selector ? filter$1(children, selector) : children; 598 } 599 600 function index(element, ref) { 601 return ref ? toNodes(element).indexOf(toNode(ref)) : children(parent(element)).indexOf(element); 602 } 603 604 function query(selector, context) { 605 return find(selector, getContext(selector, context)); 606 } 607 608 function queryAll(selector, context) { 609 return findAll(selector, getContext(selector, context)); 610 } 611 612 function find(selector, context) { 613 return toNode(_query(selector, context, 'querySelector')); 614 } 615 616 function findAll(selector, context) { 617 return toNodes(_query(selector, context, 'querySelectorAll')); 618 } 619 620 const contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/; 621 const isContextSelector = memoize((selector) => selector.match(contextSelectorRe)); 622 623 function getContext(selector, context) {if (context === void 0) {context = document;} 624 return isString(selector) && isContextSelector(selector) || isDocument(context) ? 625 context : 626 context.ownerDocument; 627 } 628 629 const contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g; 630 const sanatize = memoize((selector) => selector.replace(contextSanitizeRe, '$1 *')); 631 632 function _query(selector, context, queryFn) {if (context === void 0) {context = document;} 633 if (!selector || !isString(selector)) { 634 return selector; 635 } 636 637 selector = sanatize(selector); 638 639 if (isContextSelector(selector)) { 640 const split = splitSelector(selector); 641 selector = ''; 642 for (let sel of split) { 643 let ctx = context; 644 645 if (sel[0] === '!') { 646 const selectors = sel.substr(1).trim().split(' '); 647 ctx = closest(parent(context), selectors[0]); 648 sel = selectors.slice(1).join(' ').trim(); 649 if (!sel.length && split.length === 1) { 650 return ctx; 651 } 652 } 653 654 if (sel[0] === '-') { 655 const selectors = sel.substr(1).trim().split(' '); 656 const prev = (ctx || context).previousElementSibling; 657 ctx = matches(prev, sel.substr(1)) ? prev : null; 658 sel = selectors.slice(1).join(' '); 659 } 660 661 if (ctx) { 662 selector += "" + (selector ? ',' : '') + domPath(ctx) + " " + sel; 663 } 664 } 665 666 context = document; 667 } 668 669 try { 670 return context[queryFn](selector); 671 } catch (e) { 672 return null; 673 } 674 } 675 676 const selectorRe = /.*?[^\\](?:,|$)/g; 677 678 const splitSelector = memoize((selector) => 679 selector.match(selectorRe).map((selector) => selector.replace(/,$/, '').trim())); 680 681 682 function domPath(element) { 683 const names = []; 684 while (element.parentNode) { 685 const id = attr(element, 'id'); 686 if (id) { 687 names.unshift("#" + escape(id)); 688 break; 689 } else { 690 let { tagName } = element; 691 if (tagName !== 'HTML') { 692 tagName += ":nth-child(" + (index(element) + 1) + ")"; 693 } 694 names.unshift(tagName); 695 element = element.parentNode; 696 } 697 } 698 return names.join(' > '); 699 } 700 701 function escape(css) { 702 return isString(css) ? CSS.escape(css) : ''; 703 } 704 705 function on() {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];} 706 let [targets, types, selector, listener, useCapture = false] = getArgs(args); 707 708 if (listener.length > 1) { 709 listener = detail(listener); 710 } 711 712 if (useCapture != null && useCapture.self) { 713 listener = selfFilter(listener); 714 } 715 716 if (selector) { 717 listener = delegate(selector, listener); 718 } 719 720 for (const type of types) { 721 for (const target of targets) { 722 target.addEventListener(type, listener, useCapture); 723 } 724 } 725 726 return () => off(targets, types, listener, useCapture); 727 } 728 729 function off() {for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {args[_key2] = arguments[_key2];} 730 let [targets, types,, listener, useCapture = false] = getArgs(args); 731 for (const type of types) { 732 for (const target of targets) { 733 target.removeEventListener(type, listener, useCapture); 734 } 735 } 736 } 737 738 function once() {for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {args[_key3] = arguments[_key3];} 739 const [element, types, selector, listener, useCapture = false, condition] = getArgs(args); 740 const off = on( 741 element, 742 types, 743 selector, 744 (e) => { 745 const result = !condition || condition(e); 746 if (result) { 747 off(); 748 listener(e, result); 749 } 750 }, 751 useCapture); 752 753 754 return off; 755 } 756 757 function trigger(targets, event, detail) { 758 return toEventTargets(targets).every((target) => 759 target.dispatchEvent(createEvent(event, true, true, detail))); 760 761 } 762
763 function createEvent(e, bubbles, cancelable, detail) {if (bubbles === void 0) {bubbles = true;}if (cancelable === void 0) {cancelable = false;} 764 if (isString(e)) { 765 e = new CustomEvent(e, { bubbles, cancelable, detail }); 766 } 767 768 return e; 769 } 770 771 function getArgs(args) { 772 // Event targets 773 args[0] = toEventTargets(args[0]); 774 775 // Event types 776 if (isString(args[1])) { 777 args[1] = args[1].split(' '); 778 } 779 780 // Delegate? 781 if (isFunction(args[2])) { 782 args.splice(2, 0, false); 783 } 784 785 return args; 786 } 787 788 function delegate(selector, listener) { 789 return (e) => { 790 const current = 791 selector[0] === '>' ? 792 findAll(selector, e.currentTarget). 793 reverse(). 794 filter((element) => within(e.target, element))[0] : 795 closest(e.target, selector); 796 797 if (current) { 798 e.current = current; 799 listener.call(this, e); 800 } 801 }; 802 } 803 804 function detail(listener) { 805 return (e) => isArray(e.detail) ? listener(e, ...e.detail) : listener(e); 806 } 807 808 function selfFilter(listener) { 809 return function (e) { 810 if (e.target === e.currentTarget || e.target === e.current) { 811 return listener.call(null, e); 812 } 813 }; 814 } 815 816 function isEventTarget(target) { 817 return target && 'addEventListener' in target; 818 } 819 820 function toEventTarget(target) { 821 return isEventTarget(target) ? target : toNode(target); 822 } 823 824 function toEventTargets(target) { 825 return isArray(target) ? 826 target.map(toEventTarget).filter(Boolean) : 827 isString(target) ? 828 findAll(target) : 829 isEventTarget(target) ? 830 [target] : 831 toNodes(target); 832 } 833 834 function isTouch(e) { 835 return e.pointerType === 'touch' || !!e.touches; 836 } 837 838 function getEventPos(e) {var _e$touches, _e$changedTouches; 839 const { clientX: x, clientY: y } = ((_e$touches = e.touches) == null ? void 0 : _e$touches[0]) || ((_e$changedTouches = e.changedTouches) == null ? void 0 : _e$changedTouches[0]) || e; 840 841 return { x, y }; 842 } 843 844 function ajax(url, options) { 845 const env = { 846 data: null, 847 method: 'GET', 848 headers: {}, 849 xhr: new XMLHttpRequest(), 850 beforeSend: noop, 851 responseType: '', 852 ...options }; 853 854 return Promise.resolve(). 855 then(() => env.beforeSend(env)). 856 then(() => send(url, env)); 857 } 858 859 function send(url, env) { 860 return new Promise((resolve, reject) => { 861 const { xhr } = env; 862 863 for (const prop in env) { 864 if (prop in xhr) { 865 try { 866 xhr[prop] = env[prop]; 867 } catch (e) { 868 // noop 869 } 870 } 871 } 872 873 xhr.open(env.method.toUpperCase(), url); 874 875 for (const header in env.headers) { 876 xhr.setRequestHeader(header, env.headers[header]); 877 } 878 879 on(xhr, 'load', () => { 880 if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { 881 resolve(xhr); 882 } else { 883 reject( 884 assign(Error(xhr.statusText), { 885 xhr, 886 status: xhr.status })); 887 888 889 } 890 }); 891 892 on(xhr, 'error', () => reject(assign(Error('Network Error'), { xhr }))); 893 on(xhr, 'timeout', () => reject(assign(Error('Network Timeout'), { xhr }))); 894 895 xhr.send(env.data); 896 }); 897 } 898 899 function getImage(src, srcset, sizes) { 900 return new Promise((resolve, reject) => { 901 const img = new Image(); 902 903 img.onerror = (e) => { 904 reject(e); 905 }; 906 img.onload = () => { 907 resolve(img); 908 }; 909 910 sizes && (img.sizes = sizes); 911 srcset && (img.srcset = srcset); 912 img.src = src; 913 }); 914 } 915 916 const cssNumber = { 917 'animation-iteration-count': true, 918 'column-count': true, 919 'fill-opacity': true, 920 'flex-grow': true, 921 'flex-shrink': true, 922 'font-weight': true, 923 'line-height': true, 924 opacity: true, 925 order: true, 926 orphans: true, 927 'stroke-dasharray': true, 928 'stroke-dashoffset': true, 929 widows: true, 930 'z-index': true, 931 zoom: true }; 932 933 934 function css(element, property, value, priority) {if (priority === void 0) {priority = '';} 935 const elements = toNodes(element); 936 for (const element of elements) { 937 if (isString(property)) { 938 property = propName(property); 939 940 if (isUndefined(value)) { 941 return getComputedStyle(element).getPropertyValue(property); 942 } else { 943 element.style.setProperty( 944 property, 945 isNumeric(value) && !cssNumber[property] ? 946 value + "px" : 947 value || isNumber(value) ? 948 value : 949 '', 950 priority); 951 952 } 953 } else if (isArray(property)) { 954 const props = {}; 955 for (const prop of property) { 956 props[prop] = css(element, prop); 957 } 958 return props; 959 } else if (isObject(property)) { 960 priority = value; 961 each(property, (value, property) => css(element, property, value, priority)); 962 } 963 } 964 return elements[0]; 965 } 966 967 const propertyRe = /^\s*(["'])?(.*?)\1\s*$/; 968 function getCssVar(name, element) {if (element === void 0) {element = document.documentElement;} 969 return css(element, "--uk-" + name).replace(propertyRe, '$2'); 970 } 971 972 // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty 973 const propName = memoize((name) => vendorPropName(name)); 974 975 const cssPrefixes = ['webkit', 'moz']; 976 977 function vendorPropName(name) { 978 if (name[0] === '-') { 979 return name; 980 } 981 982 name = hyphenate(name); 983 984 const { style } = document.documentElement; 985 986 if (name in style) { 987 return name; 988 } 989 990 let i = cssPrefixes.length, 991 prefixedName; 992 993 while (i--) { 994 prefixedName = "-" + cssPrefixes[i] + "-" + name; 995 if (prefixedName in style) { 996 return prefixedName; 997 } 998 } 999 } 1000 1001 function addClass(element) {for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {args[_key - 1] = arguments[_key];} 1002 apply$1(element, args, 'add'); 1003 } 1004 1005 function removeClass(element) {for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {args[_key2 - 1] = arguments[_key2];} 1006 apply$1(element, args, 'remove'); 1007 } 1008 1009 function removeClasses(element, cls) { 1010 attr(element, 'class', (value) => (value || '').replace(new RegExp("\\b" + cls + "\\b", 'g'), '')); 1011 } 1012 1013 function replaceClass(element) { 1014 (arguments.length <= 1 ? undefined : arguments[1]) && removeClass(element, arguments.length <= 1 ? undefined : arguments[1]); 1015 (arguments.length <= 2 ? undefined : arguments[2]) && addClass(element, arguments.length <= 2 ? undefined : arguments[2]); 1016 } 1017 1018 function hasClass(element, cls) { 1019 [cls] = getClasses(cls); 1020 return !!cls && toNodes(element).some((node) => node.classList.contains(cls)); 1021 } 1022 1023 function toggleClass(element, cls, force) { 1024 const classes = getClasses(cls); 1025 1026 if (!isUndefined(force)) { 1027 force = !!force;
1028 } 1029 1030 for (const node of toNodes(element)) { 1031 for (const cls of classes) { 1032 node.classList.toggle(cls, force); 1033 } 1034 } 1035 } 1036 1037 function apply$1(element, args, fn) { 1038 args = args.reduce((args, arg) => args.concat(getClasses(arg)), []); 1039 1040 for (const node of toNodes(element)) { 1041 node.classList[fn](...args); 1042 } 1043 } 1044 1045 function getClasses(str) { 1046 return String(str).split(/\s|,/).filter(Boolean); 1047 } 1048 1049 function transition(element, props, duration, timing) {if (duration === void 0) {duration = 400;}if (timing === void 0) {timing = 'linear';} 1050 return Promise.all( 1051 toNodes(element).map( 1052 (element) => 1053 new Promise((resolve, reject) => { 1054 for (const name in props) { 1055 const value = css(element, name); 1056 if (value === '') { 1057 css(element, name, value); 1058 } 1059 } 1060 1061 const timer = setTimeout(() => trigger(element, 'transitionend'), duration); 1062 1063 once( 1064 element, 1065 'transitionend transitioncanceled', 1066 (_ref) => {let { type } = _ref; 1067 clearTimeout(timer); 1068 removeClass(element, 'uk-transition'); 1069 css(element, { 1070 transitionProperty: '', 1071 transitionDuration: '', 1072 transitionTimingFunction: '' }); 1073 1074 type === 'transitioncanceled' ? reject() : resolve(element); 1075 }, 1076 { self: true }); 1077 1078 1079 addClass(element, 'uk-transition'); 1080 css(element, { 1081 transitionProperty: Object.keys(props).map(propName).join(','), 1082 transitionDuration: duration + "ms", 1083 transitionTimingFunction: timing, 1084 ...props }); 1085 1086 }))); 1087 1088 1089 } 1090 1091 const Transition = { 1092 start: transition, 1093 1094 stop(element) { 1095 trigger(element, 'transitionend'); 1096 return Promise.resolve(); 1097 }, 1098 1099 cancel(element) { 1100 trigger(element, 'transitioncanceled'); 1101 }, 1102 1103 inProgress(element) { 1104 return hasClass(element, 'uk-transition'); 1105 } }; 1106 1107 1108 const animationPrefix = 'uk-animation-'; 1109 1110 function animate$1(element, animation, duration, origin, out) {if (duration === void 0) {duration = 200;} 1111 return Promise.all( 1112 toNodes(element).map( 1113 (element) => 1114 new Promise((resolve, reject) => { 1115 trigger(element, 'animationcanceled'); 1116 const timer = setTimeout(() => trigger(element, 'animationend'), duration); 1117 1118 once( 1119 element, 1120 'animationend animationcanceled', 1121 (_ref2) => {let { type } = _ref2; 1122 clearTimeout(timer); 1123 1124 type === 'animationcanceled' ? reject() : resolve(element); 1125 1126 css(element, 'animationDuration', ''); 1127 removeClasses(element, animationPrefix + "\\S*"); 1128 }, 1129 { self: true }); 1130 1131 1132 css(element, 'animationDuration', duration + "ms"); 1133 addClass(element, animation, animationPrefix + (out ? 'leave' : 'enter')); 1134 1135 if (startsWith(animation, animationPrefix)) { 1136 origin && addClass(element, "uk-transform-origin-" + origin); 1137 out && addClass(element, animationPrefix + "reverse"); 1138 } 1139 }))); 1140 1141 1142 } 1143 1144 const inProgress = new RegExp(animationPrefix + "(enter|leave)"); 1145 const Animation = { 1146 in: animate$1, 1147 1148 out(element, animation, duration, origin) { 1149 return animate$1(element, animation, duration, origin, true); 1150 }, 1151 1152 inProgress(element) { 1153 return inProgress.test(attr(element, 'class')); 1154 }, 1155 1156 cancel(element) { 1157 trigger(element, 'animationcanceled'); 1158 } }; 1159 1160 const dirs$1 = { 1161 width: ['left', 'right'], 1162 height: ['top', 'bottom'] }; 1163 1164 1165 function dimensions$1(element) { 1166 const rect = isElement(element) ? 1167 toNode(element).getBoundingClientRect() : 1168 { height: height(element), width: width(element), top: 0, left: 0 }; 1169 1170 return { 1171 height: rect.height, 1172 width: rect.width, 1173 top: rect.top, 1174 left: rect.left, 1175 bottom: rect.top + rect.height, 1176 right: rect.left + rect.width }; 1177 1178 } 1179 1180 function offset(element, coordinates) { 1181 const currentOffset = dimensions$1(element); 1182 1183 if (element) { 1184 const { scrollY, scrollX } = toWindow(element); 1185 const offsetBy = { height: scrollY, width: scrollX }; 1186 1187 for (const dir in dirs$1) { 1188 for (const prop of dirs$1[dir]) { 1189 currentOffset[prop] += offsetBy[dir]; 1190 } 1191 } 1192 } 1193 1194 if (!coordinates) { 1195 return currentOffset; 1196 } 1197 1198 const pos = css(element, 'position'); 1199 1200 each(css(element, ['left', 'top']), (value, prop) => 1201 css( 1202 element, 1203 prop, 1204 coordinates[prop] - 1205 currentOffset[prop] +
1206 toFloat(pos === 'absolute' && value === 'auto' ? position(element)[prop] : value))); 1207 1208 1209 } 1210 1211 function position(element) { 1212 let { top, left } = offset(element); 1213 1214 const { 1215 ownerDocument: { body, documentElement }, 1216 offsetParent } = 1217 toNode(element); 1218 let parent = offsetParent || documentElement; 1219 1220 while ( 1221 parent && ( 1222 parent === body || parent === documentElement) && 1223 css(parent, 'position') === 'static') 1224 { 1225 parent = parent.parentNode; 1226 } 1227 1228 if (isElement(parent)) { 1229 const parentOffset = offset(parent); 1230 top -= parentOffset.top + toFloat(css(parent, 'borderTopWidth')); 1231 left -= parentOffset.left + toFloat(css(parent, 'borderLeftWidth')); 1232 } 1233 1234 return { 1235 top: top - toFloat(css(element, 'marginTop')), 1236 left: left - toFloat(css(element, 'marginLeft')) }; 1237 1238 } 1239 1240 function offsetPosition(element) { 1241 const offset = [0, 0]; 1242 1243 element = toNode(element); 1244 1245 do { 1246 offset[0] += element.offsetTop; 1247 offset[1] += element.offsetLeft; 1248 1249 if (css(element, 'position') === 'fixed') { 1250 const win = toWindow(element); 1251 offset[0] += win.scrollY; 1252 offset[1] += win.scrollX; 1253 return offset; 1254 } 1255 } while (element = element.offsetParent); 1256 1257 return offset; 1258 } 1259 1260 const height = dimension('height'); 1261 const width = dimension('width'); 1262 1263 function dimension(prop) { 1264 const propName = ucfirst(prop); 1265 return (element, value) => { 1266 if (isUndefined(value)) { 1267 if (isWindow(element)) { 1268 return element["inner" + propName]; 1269 } 1270 1271 if (isDocument(element)) { 1272 const doc = element.documentElement; 1273 return Math.max(doc["offset" + propName], doc["scroll" + propName]); 1274 } 1275 1276 element = toNode(element); 1277 1278 value = css(element, prop); 1279 value = value === 'auto' ? element["offset" + propName] : toFloat(value) || 0; 1280 1281 return value - boxModelAdjust(element, prop); 1282 } else { 1283 return css( 1284 element, 1285 prop, 1286 !value && value !== 0 ? '' : +value + boxModelAdjust(element, prop) + 'px'); 1287 1288 } 1289 }; 1290 } 1291 1292 function boxModelAdjust(element, prop, sizing) {if (sizing === void 0) {sizing = 'border-box';} 1293 return css(element, 'boxSizing') === sizing ? 1294 dirs$1[prop]. 1295 map(ucfirst). 1296 reduce( 1297 (value, prop) => 1298 value + 1299 toFloat(css(element, "padding" + prop)) + 1300 toFloat(css(element, "border" + prop + "Width")), 1301 0) : 1302 1303 0; 1304 } 1305 1306 function flipPosition(pos) { 1307 for (const dir in dirs$1) { 1308 for (const i in dirs$1[dir]) { 1309 if (dirs$1[dir][i] === pos) { 1310 return dirs$1[dir][1 - i]; 1311 } 1312 } 1313 } 1314 return pos; 1315 } 1316 1317 function toPx(value, property, element, offsetDim) {if (property === void 0) {property = 'width';}if (element === void 0) {element = window;}if (offsetDim === void 0) {offsetDim = false;} 1318 if (!isString(value)) { 1319 return toFloat(value); 1320 } 1321 1322 return parseCalc(value).reduce((result, value) => { 1323 const unit = parseUnit(value); 1324 if (unit) { 1325 value = percent( 1326 unit === 'vh' ? 1327 height(toWindow(element)) : 1328 unit === 'vw' ? 1329 width(toWindow(element)) : 1330 offsetDim ? 1331 element["offset" + ucfirst(property)] : 1332 dimensions$1(element)[property], 1333 value); 1334 1335 } 1336 1337 return result + toFloat(value); 1338 }, 0); 1339 } 1340 1341 const calcRe = /-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g; 1342 const parseCalc = memoize((calc) => calc.toString().replace(/\s/g, '').match(calcRe) || []); 1343 const unitRe$1 = /(?:v[hw]|%)$/; 1344 const parseUnit = memoize((str) => (str.match(unitRe$1) || [])[0]); 1345 1346 function percent(base, value) { 1347 return base * toFloat(value) / 100; 1348 } 1349 1350 function ready(fn) { 1351 if (document.readyState !== 'loading') { 1352 fn(); 1353 return; 1354 } 1355 1356 once(document, 'DOMContentLoaded', fn); 1357 } 1358 1359 function isTag(element, tagName) {var _element$tagName; 1360 return (element == null ? void 0 : (_element$tagName = element.tagName) == null ? void 0 : _element$tagName.toLowerCase()) === tagName.toLowerCase(); 1361 } 1362 1363 function empty(element) { 1364 return replaceChildren(element, ''); 1365 } 1366 1367 function html(parent, html) { 1368 return isUndefined(html) ? $(parent).innerHTML : replaceChildren(parent, html); 1369 } 1370 1371 const replaceChildren = applyFn('replaceChildren'); 1372 const prepend = applyFn('prepend'); 1373 const append = applyFn('append'); 1374 const before = applyFn('before'); 1375 const after = applyFn('after'); 1376 1377 function applyFn(fn) { 1378 return function (ref, element) {var _$; 1379 const nodes = toNodes(isString(element) ? fragment(element) : element);
1380 (_$ = $(ref)) == null ? void 0 : _$[fn](...nodes); 1381 return unwrapSingle(nodes); 1382 }; 1383 } 1384 1385 function remove$1(element) { 1386 toNodes(element).forEach((element) => element.remove()); 1387 } 1388 1389 function wrapAll(element, structure) { 1390 structure = toNode(before(element, structure)); 1391 1392 while (structure.firstChild) { 1393 structure = structure.firstChild; 1394 } 1395 1396 append(structure, element); 1397 1398 return structure; 1399 } 1400 1401 function wrapInner(element, structure) { 1402 return toNodes( 1403 toNodes(element).map((element) => 1404 element.hasChildNodes() ? 1405 wrapAll(toNodes(element.childNodes), structure) : 1406 append(element, structure))); 1407 1408 1409 } 1410 1411 function unwrap(element) { 1412 toNodes(element). 1413 map(parent). 1414 filter((value, index, self) => self.indexOf(value) === index). 1415 forEach((parent) => parent.replaceWith(...parent.childNodes)); 1416 } 1417 1418 const fragmentRe = /^\s*<(\w+|!)[^>]*>/; 1419 const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/; 1420 1421 function fragment(html) { 1422 const matches = singleTagRe.exec(html); 1423 if (matches) { 1424 return document.createElement(matches[1]); 1425 } 1426 1427 const container = document.createElement('div'); 1428 if (fragmentRe.test(html)) { 1429 container.insertAdjacentHTML('beforeend', html.trim()); 1430 } else { 1431 container.textContent = html; 1432 } 1433 1434 return unwrapSingle(container.childNodes); 1435 } 1436 1437 function unwrapSingle(nodes) { 1438 return nodes.length > 1 ? nodes : nodes[0]; 1439 } 1440 1441 function apply(node, fn) { 1442 if (!isElement(node)) { 1443 return; 1444 } 1445 1446 fn(node); 1447 node = node.firstElementChild; 1448 while (node) { 1449 const next = node.nextElementSibling; 1450 apply(node, fn); 1451 node = next; 1452 } 1453 } 1454 1455 function $(selector, context) { 1456 return isHtml(selector) ? toNode(fragment(selector)) : find(selector, context); 1457 } 1458 1459 function $$(selector, context) { 1460 return isHtml(selector) ? toNodes(fragment(selector)) : findAll(selector, context); 1461 } 1462 1463 function isHtml(str) { 1464 return isString(str) && startsWith(str.trim(), '<'); 1465 } 1466 1467 const inBrowser = typeof window !== 'undefined'; 1468 const isRtl = inBrowser && attr(document.documentElement, 'dir') === 'rtl'; 1469 1470 const hasTouch = inBrowser && 'ontouchstart' in window; 1471 const hasPointerEvents = inBrowser && window.PointerEvent; 1472 1473 const pointerDown = hasPointerEvents ? 'pointerdown' : hasTouch ? 'touchstart' : 'mousedown'; 1474 const pointerMove = hasPointerEvents ? 'pointermove' : hasTouch ? 'touchmove' : 'mousemove'; 1475 const pointerUp = hasPointerEvents ? 'pointerup' : hasTouch ? 'touchend' : 'mouseup'; 1476 const pointerEnter = hasPointerEvents ? 'pointerenter' : hasTouch ? '' : 'mouseenter'; 1477 const pointerLeave = hasPointerEvents ? 'pointerleave' : hasTouch ? '' : 'mouseleave'; 1478 const pointerCancel = hasPointerEvents ? 'pointercancel' : 'touchcancel'; 1479 1480 /* 1481 Based on: 1482 Copyright (c) 2016 Wilson Page [email protected] 1483 https://github.com/wilsonpage/fastdom 1484 */ 1485 1486 const fastdom = { 1487 reads: [], 1488 writes: [], 1489 1490 read(task) { 1491 this.reads.push(task); 1492 scheduleFlush(); 1493 return task; 1494 }, 1495 1496 write(task) { 1497 this.writes.push(task); 1498 scheduleFlush(); 1499 return task; 1500 }, 1501 1502 clear(task) { 1503 remove(this.reads, task); 1504 remove(this.writes, task); 1505 }, 1506 1507 flush }; 1508 1509 1510 function flush(recursion) { 1511 runTasks(fastdom.reads); 1512 runTasks(fastdom.writes.splice(0)); 1513 1514 fastdom.scheduled = false; 1515 1516 if (fastdom.reads.length || fastdom.writes.length) { 1517 scheduleFlush(recursion + 1); 1518 } 1519 } 1520 1521 const RECURSION_LIMIT = 4; 1522 function scheduleFlush(recursion) { 1523 if (fastdom.scheduled) { 1524 return; 1525 } 1526 1527 fastdom.scheduled = true; 1528 if (recursion && recursion < RECURSION_LIMIT) { 1529 Promise.resolve().then(() => flush(recursion)); 1530 } else { 1531 requestAnimationFrame(() => flush(1)); 1532 } 1533 } 1534 1535 function runTasks(tasks) { 1536 let task; 1537 while (task = tasks.shift()) { 1538 try { 1539 task(); 1540 } catch (e) { 1541 console.error(e); 1542 } 1543 } 1544 } 1545 1546 function remove(array, item) { 1547 const index = array.indexOf(item); 1548 return ~index && array.splice(index, 1); 1549 } 1550 1551 function MouseTracker() {} 1552 1553 MouseTracker.prototype = { 1554 positions: [], 1555 1556 init() { 1557 this.positions = []; 1558 1559 let position; 1560 this.unbind = on(document, 'mousemove', (e) => position = getEventPos(e)); 1561 this.interval = setInterval(() => { 1562 if (!position) { 1563 return; 1564 } 1565 1566 this.positions.push(position); 1567 1568 if (this.positions.length > 5) { 1569 this.positions.shift(); 1570 } 1571 }, 50); 1572 }, 1573 1574 cancel() {var _this$unbind; 1575 (_this$unbind = this.unbind) == null ? void 0 : _this$unbind.call(this); 1576 this.interval && clearInterval(this.interval); 1577 }, 1578 1579 movesTo(target) { 1580 if (this.positions.length < 2) { 1581 return false;
1582 } 1583 1584 const p = target.getBoundingClientRect(); 1585 const { left, right, top, bottom } = p; 1586 1587 const [prevPosition] = this.positions; 1588 const position = last(this.positions); 1589 const path = [prevPosition, position]; 1590 1591 if (pointInRect(position, p)) { 1592 return false; 1593 } 1594 1595 const diagonals = [ 1596 [ 1597 { x: left, y: top }, 1598 { x: right, y: bottom }], 1599 1600 [ 1601 { x: left, y: bottom }, 1602 { x: right, y: top }]]; 1603 1604 1605 1606 return diagonals.some((diagonal) => { 1607 const intersection = intersect(path, diagonal); 1608 return intersection && pointInRect(intersection, p); 1609 }); 1610 } }; 1611 1612 1613 // Inspired by http://paulbourke.net/geometry/pointlineplane/ 1614 function intersect(_ref, _ref2) {let [{ x: x1, y: y1 }, { x: x2, y: y2 }] = _ref;let [{ x: x3, y: y3 }, { x: x4, y: y4 }] = _ref2; 1615 const denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); 1616 1617 // Lines are parallel 1618 if (denominator === 0) { 1619 return false; 1620 } 1621 1622 const ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator; 1623 1624 if (ua < 0) { 1625 return false; 1626 } 1627 1628 // Return an object with the x and y coordinates of the intersection 1629 return { x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1) }; 1630 } 1631 1632 function observeIntersection(targets, cb, options, intersecting) {if (intersecting === void 0) {intersecting = true;} 1633 const observer = new IntersectionObserver( 1634 intersecting ? 1635 (entries, observer) => { 1636 if (entries.some((entry) => entry.isIntersecting)) { 1637 cb(entries, observer); 1638 } 1639 } : 1640 cb, 1641 options); 1642 1643 for (const el of toNodes(targets)) { 1644 observer.observe(el); 1645 } 1646 1647 return observer; 1648 } 1649 1650 const hasResizeObserver = inBrowser && window.ResizeObserver; 1651 function observeResize(targets, cb, options) {if (options === void 0) {options = { box: 'border-box' };} 1652 if (hasResizeObserver) { 1653 return observe(ResizeObserver, targets, cb, options); 1654 } 1655 1656 // Fallback Safari < 13.1 1657 initResizeListener(); 1658 listeners.add(cb); 1659 1660 return { 1661 disconnect() { 1662 listeners.delete(cb); 1663 } }; 1664 1665 } 1666 1667 let listeners; 1668 function initResizeListener() { 1669 if (listeners) { 1670 return; 1671 } 1672 1673 listeners = new Set(); 1674 1675 // throttle 'resize' 1676 let pendingResize; 1677 const handleResize = () => { 1678 if (pendingResize) { 1679 return; 1680 } 1681 pendingResize = true; 1682 fastdom.read(() => pendingResize = false); 1683 for (const listener of listeners) { 1684 listener(); 1685 } 1686 }; 1687 1688 on(window, 'load resize', handleResize); 1689 on(document, 'loadedmetadata load', handleResize, true); 1690 } 1691 1692 function observeMutation(targets, cb, options) { 1693 return observe(MutationObserver, targets, cb, options); 1694 } 1695 1696 function observe(Observer, targets, cb, options) { 1697 const observer = new Observer(cb); 1698 for (const el of toNodes(targets)) { 1699 observer.observe(el, options); 1700 } 1701 1702 return observer; 1703 } 1704 1705 const strats = {}; 1706 1707 strats.events = 1708 strats.created = 1709 strats.beforeConnect = 1710 strats.connected = 1711 strats.beforeDisconnect = 1712 strats.disconnected = 1713 strats.destroy = 1714 concatStrat; 1715 1716 // args strategy 1717 strats.args = function (parentVal, childVal) { 1718 return childVal !== false && concatStrat(childVal || parentVal); 1719 }; 1720 1721 // update strategy 1722 strats.update = function (parentVal, childVal) { 1723 return sortBy$1( 1724 concatStrat(parentVal, isFunction(childVal) ? { read: childVal } : childVal), 1725 'order'); 1726 1727 }; 1728 1729 // property strategy 1730 strats.props = function (parentVal, childVal) { 1731 if (isArray(childVal)) { 1732 const value = {}; 1733 for (const key of childVal) { 1734 value[key] = String; 1735 } 1736 childVal = value; 1737 } 1738 1739 return strats.methods(parentVal, childVal); 1740 }; 1741 1742 // extend strategy 1743 strats.computed = strats.methods = function (parentVal, childVal) { 1744 return childVal ? parentVal ? { ...parentVal, ...childVal } : childVal : parentVal;
1745 }; 1746 1747 // data strategy 1748 strats.data = function (parentVal, childVal, vm) { 1749 if (!vm) { 1750 if (!childVal) { 1751 return parentVal; 1752 } 1753 1754 if (!parentVal) { 1755 return childVal; 1756 } 1757 1758 return function (vm) { 1759 return mergeFnData(parentVal, childVal, vm); 1760 }; 1761 } 1762 1763 return mergeFnData(parentVal, childVal, vm); 1764 }; 1765 1766 function mergeFnData(parentVal, childVal, vm) { 1767 return strats.computed( 1768 isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal, 1769 isFunction(childVal) ? childVal.call(vm, vm) : childVal); 1770 1771 } 1772 1773 // concat strategy 1774 function concatStrat(parentVal, childVal) { 1775 parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal; 1776 1777 return childVal ? 1778 parentVal ? 1779 parentVal.concat(childVal) : 1780 isArray(childVal) ? 1781 childVal : 1782 [childVal] : 1783 parentVal; 1784 } 1785 1786 // default strategy 1787 function defaultStrat(parentVal, childVal) { 1788 return isUndefined(childVal) ? parentVal : childVal; 1789 } 1790 1791 function mergeOptions(parent, child, vm) { 1792 const options = {}; 1793 1794 if (isFunction(child)) { 1795 child = child.options; 1796 } 1797 1798 if (child.extends) { 1799 parent = mergeOptions(parent, child.extends, vm); 1800 } 1801 1802 if (child.mixins) { 1803 for (const mixin of child.mixins) { 1804 parent = mergeOptions(parent, mixin, vm); 1805 } 1806 } 1807 1808 for (const key in parent) { 1809 mergeKey(key); 1810 } 1811 1812 for (const key in child) { 1813 if (!hasOwn(parent, key)) { 1814 mergeKey(key); 1815 } 1816 } 1817 1818 function mergeKey(key) { 1819 options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm); 1820 } 1821 1822 return options; 1823 } 1824 1825 function parseOptions(options, args) {if (args === void 0) {args = [];} 1826 try { 1827 return options ? 1828 startsWith(options, '{') ? 1829 JSON.parse(options) : 1830 args.length && !includes(options, ':') ? 1831 { [args[0]]: options } : 1832 options.split(';').reduce((options, option) => { 1833 const [key, value] = option.split(/:(.*)/); 1834 if (key && !isUndefined(value)) { 1835 options[key.trim()] = value.trim(); 1836 } 1837 return options; 1838 }, {}) : 1839 {}; 1840 } catch (e) { 1841 return {}; 1842 } 1843 } 1844 1845 function play(el) { 1846 if (isIFrame(el)) { 1847 call(el, { func: 'playVideo', method: 'play' }); 1848 } 1849 1850 if (isHTML5(el)) { 1851 try { 1852 el.play().catch(noop); 1853 } catch (e) { 1854 // noop 1855 } 1856 } 1857 } 1858 1859 function pause(el) { 1860 if (isIFrame(el)) { 1861 call(el, { func: 'pauseVideo', method: 'pause' }); 1862 } 1863 1864 if (isHTML5(el)) { 1865 el.pause(); 1866 } 1867 } 1868 1869 function mute(el) { 1870 if (isIFrame(el)) { 1871 call(el, { func: 'mute', method: 'setVolume', value: 0 }); 1872 } 1873 1874 if (isHTML5(el)) { 1875 el.muted = true; 1876 } 1877 } 1878 1879 function isVideo(el) { 1880 return isHTML5(el) || isIFrame(el); 1881 } 1882 1883 function isHTML5(el) { 1884 return isTag(el, 'video'); 1885 } 1886 1887 function isIFrame(el) { 1888 return isTag(el, 'iframe') && (isYoutube(el) || isVimeo(el)); 1889 } 1890 1891 function isYoutube(el) { 1892 return !!el.src.match( 1893 /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/); 1894 1895 } 1896 1897 function isVimeo(el) { 1898 return !!el.src.match(/vimeo\.com\/video\/.*/); 1899 } 1900 1901 async function call(el, cmd) { 1902 await enableApi(el); 1903 post(el, cmd); 1904 } 1905 1906 function post(el, cmd) { 1907 try { 1908 el.contentWindow.postMessage(JSON.stringify({ event: 'command', ...cmd }), '*'); 1909 } catch (e) { 1910 // noop 1911 } 1912 } 1913 1914 const stateKey$1 = '_ukPlayer'; 1915 let counter = 0; 1916 function enableApi(el) { 1917 if (el[stateKey$1]) { 1918 return el[stateKey$1]; 1919 } 1920 1921 const youtube = isYoutube(el); 1922 const vimeo = isVimeo(el); 1923 1924 const id = ++counter; 1925 let poller; 1926 1927 return el[stateKey$1] = new Promise((resolve) => { 1928 youtube && 1929 once(el, 'load', () => { 1930 const listener = () => post(el, { event: 'listening', id }); 1931 poller = setInterval(listener, 100); 1932 listener(); 1933 }); 1934 1935 once(window, 'message', resolve, false, (_ref) => {let { data } = _ref; 1936 try { 1937 data = JSON.parse(data); 1938 return ( 1939 data && ( 1940 youtube && data.id === id && data.event === 'onReady' || 1941 vimeo && Number(data.player_id) === id)); 1942 1943 } catch (e) { 1944 // noop 1945 } 1946 }); 1947 1948 el.src = "" + el.src + (includes(el.src, '?') ? '&' : '?') + ( 1949 youtube ? 'enablejsapi=1' : "api=1&player_id=" + id); 1950 1951 }).then(() => clearInterval(poller)); 1952 } 1953 1954 function isInView(element, offsetTop, offsetLeft) {if (offsetTop === void 0) {offsetTop = 0;}if (offsetLeft === void 0) {offsetLeft = 0;} 1955 if (!isVisible(element)) { 1956 return false;
1957 } 1958 1959 return intersectRect( 1960 ...scrollParents(element). 1961 map((parent) => { 1962 const { top, left, bottom, right } = offset(getViewport$1(parent)); 1963 1964 return { 1965 top: top - offsetTop, 1966 left: left - offsetLeft, 1967 bottom: bottom + offsetTop, 1968 right: right + offsetLeft }; 1969 1970 }). 1971 concat(offset(element))); 1972 1973 } 1974 1975 function scrollTop(element, top) { 1976 if (isWindow(element) || isDocument(element)) { 1977 element = getScrollingElement(element); 1978 } else { 1979 element = toNode(element); 1980 } 1981 1982 if (isUndefined(top)) { 1983 return element.scrollTop; 1984 } else { 1985 element.scrollTop = top; 1986 } 1987 } 1988 1989 function scrollIntoView(element, _temp) {let { offset: offsetBy = 0 } = _temp === void 0 ? {} : _temp; 1990 const parents = isVisible(element) ? scrollParents(element) : []; 1991 return parents.reduce( 1992 (fn, scrollElement, i) => { 1993 const { scrollTop, scrollHeight, offsetHeight } = scrollElement; 1994 const maxScroll = scrollHeight - getViewportClientHeight(scrollElement); 1995 const { height: elHeight, top: elTop } = offset(parents[i - 1] || element); 1996 1997 let top = Math.ceil( 1998 elTop - offset(getViewport$1(scrollElement)).top - offsetBy + scrollTop); 1999 2000 2001 if (offsetBy > 0 && offsetHeight < elHeight + offsetBy) { 2002 top += offsetBy; 2003 } else { 2004 offsetBy = 0; 2005 } 2006 2007 if (top > maxScroll) { 2008 offsetBy -= top - maxScroll; 2009 top = maxScroll; 2010 } else if (top < 0) { 2011 offsetBy -= top; 2012 top = 0; 2013 } 2014 2015 return () => scrollTo(scrollElement, top - scrollTop).then(fn); 2016 }, 2017 () => Promise.resolve())(); 2018 2019 2020 function scrollTo(element, top) { 2021 return new Promise((resolve) => { 2022 const scroll = element.scrollTop; 2023 const duration = getDuration(Math.abs(top)); 2024 const start = Date.now(); 2025 2026 (function step() { 2027 const percent = ease(clamp((Date.now() - start) / duration)); 2028 2029 scrollTop(element, scroll + top * percent); 2030 2031 // scroll more if we have not reached our destination 2032 if (percent === 1) { 2033 resolve(); 2034 } else { 2035 requestAnimationFrame(step); 2036 } 2037 })(); 2038 }); 2039 } 2040 2041 function getDuration(dist) { 2042 return 40 * Math.pow(dist, 0.375); 2043 } 2044 2045 function ease(k) { 2046 return 0.5 * (1 - Math.cos(Math.PI * k)); 2047 } 2048 } 2049 2050 function scrolledOver(element, startOffset, endOffset) {if (startOffset === void 0) {startOffset = 0;}if (endOffset === void 0) {endOffset = 0;} 2051 if (!isVisible(element)) { 2052 return 0; 2053 } 2054 2055 const [scrollElement] = scrollParents(element, /auto|scroll/, true); 2056 const { scrollHeight, scrollTop } = scrollElement; 2057 const viewportHeight = getViewportClientHeight(scrollElement); 2058 const maxScroll = scrollHeight - viewportHeight; 2059 const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0]; 2060 2061 const start = Math.max(0, elementOffsetTop - viewportHeight + startOffset); 2062 const end = Math.min(maxScroll, elementOffsetTop + element.offsetHeight - endOffset); 2063 2064 return clamp((scrollTop - start) / (end - start)); 2065 } 2066 2067 function scrollParents(element, overflowRe, scrollable) {if (overflowRe === void 0) {overflowRe = /auto|scroll|hidden/;}if (scrollable === void 0) {scrollable = false;} 2068 const scrollEl = getScrollingElement(element); 2069 2070 let ancestors = parents(element).reverse(); 2071 ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1); 2072 2073 const fixedIndex = findIndex(ancestors, (el) => css(el, 'position') === 'fixed'); 2074 if (~fixedIndex) { 2075 ancestors = ancestors.slice(fixedIndex); 2076 } 2077 2078 return [scrollEl]. 2079 concat( 2080 ancestors.filter( 2081 (parent) => 2082 overflowRe.test(css(parent, 'overflow')) && ( 2083 !scrollable || parent.scrollHeight > getViewportClientHeight(parent)))). 2084 2085 2086 reverse(); 2087 } 2088 2089 function getViewport$1(scrollElement) { 2090 return scrollElement === getScrollingElement(scrollElement) ? window : scrollElement; 2091 } 2092 2093 // iOS 12 returns <body> as scrollingElement 2094 function getViewportClientHeight(scrollElement) { 2095 return ( 2096 scrollElement === getScrollingElement(scrollElement) ? 2097 document.documentElement : 2098 scrollElement). 2099 clientHeight; 2100 } 2101 2102 function getScrollingElement(element) { 2103 const { document } = toWindow(element); 2104 return document.scrollingElement || document.documentElement; 2105 } 2106 2107 const dirs = { 2108 width: ['x', 'left', 'right'], 2109 height: ['y', 'top', 'bottom'] }; 2110 2111 2112 function positionAt( 2113 element, 2114 target, 2115 elAttach, 2116 targetAttach, 2117 elOffset, 2118 targetOffset, 2119 flip, 2120 boundary) 2121 { 2122 elAttach = getPos(elAttach); 2123 targetAttach = getPos(targetAttach); 2124 2125 const flipped = { element: elAttach, target: targetAttach }; 2126 2127 if (!element || !target) { 2128 return flipped; 2129 } 2130 2131 const dim = offset(element); 2132 const targetDim = offset(target); 2133 const position = targetDim; 2134 2135 moveTo(position, elAttach, dim, -1); 2136 moveTo(position, targetAttach, targetDim, 1); 2137 2138 elOffset = getOffsets(elOffset, dim.width, dim.height); 2139 targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height); 2140 2141 elOffset['x'] += targetOffset['x']; 2142 elOffset['y'] += targetOffset['y']; 2143 2144 position.left += elOffset['x']; 2145 position.top += elOffset['y']; 2146 2147 if (flip) { 2148 let boundaries = scrollParents(element).map(getViewport$1); 2149 2150 if (boundary && !includes(boundaries, boundary)) { 2151 boundaries.unshift(boundary); 2152 } 2153 2154 boundaries = boundaries.map((el) => offset(el)); 2155 2156 each(dirs, (_ref, prop) => {let [dir, align, alignFlip] = _ref; 2157 if (!(flip === true || includes(flip, dir))) { 2158 return; 2159 } 2160 2161 boundaries.some((boundary) => { 2162 const elemOffset = 2163 elAttach[dir] === align ? 2164 -dim[prop] : 2165 elAttach[dir] === alignFlip ? 2166 dim[prop] : 2167 0; 2168 2169 const targetOffset = 2170 targetAttach[dir] === align ? 2171 targetDim[prop] : 2172 targetAttach[dir] === alignFlip ? 2173 -targetDim[prop] : 2174 0; 2175 2176 if ( 2177 position[align] < boundary[align] || 2178 position[align] + dim[prop] > boundary[alignFlip]) 2179 { 2180 const centerOffset = dim[prop] / 2; 2181 const centerTargetOffset = 2182 targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0; 2183 2184 return ( 2185 elAttach[dir] === 'center' && ( 2186 apply(centerOffset, centerTargetOffset) || 2187 apply(-centerOffset, -centerTargetOffset)) || 2188 apply(elemOffset, targetOffset)); 2189 2190 } 2191 2192 function apply(elemOffset, targetOffset) { 2193 const newVal = toFloat( 2194 (position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4)); 2195 2196 2197 if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) { 2198 position[align] = newVal; 2199 2200 for (const el of ['element', 'target']) { 2201 if (elemOffset) { 2202 flipped[el][dir] = 2203 flipped[el][dir] === dirs[prop][1] ? 2204 dirs[prop][2] : 2205 dirs[prop][1]; 2206 } 2207 } 2208 2209 return true; 2210 } 2211 } 2212 }); 2213 }); 2214 } 2215 2216 offset(element, position); 2217 2218 return flipped; 2219 } 2220 2221 function moveTo(position, attach, dim, factor) { 2222 each(dirs, (_ref2, prop) => {let [dir, align, alignFlip] = _ref2; 2223 if (attach[dir] === alignFlip) { 2224 position[align] += dim[prop] * factor; 2225 } else if (attach[dir] === 'center') { 2226 position[align] += dim[prop] * factor / 2; 2227 } 2228 }); 2229 } 2230 2231 function getPos(pos) { 2232 const x = /left|center|right/; 2233 const y = /top|center|bottom/; 2234 2235 pos = (pos || '').split(' '); 2236 2237 if (pos.length === 1) { 2238 pos = x.test(pos[0]) ? 2239 pos.concat('center') : 2240 y.test(pos[0]) ? 2241 ['center'].concat(pos) : 2242 ['center', 'center']; 2243 } 2244 2245 return { 2246 x: x.test(pos[0]) ? pos[0] : 'center', 2247 y: y.test(pos[1]) ? pos[1] : 'center' }; 2248 2249 } 2250 2251 function getOffsets(offsets, width, height) { 2252 const [x, y] = (offsets || '').split(' '); 2253 2254 return {
2255 x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0, 2256 y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0 }; 2257 2258 } 2259 2260 var util = /*#__PURE__*/Object.freeze({ 2261 __proto__: null, 2262 ajax: ajax, 2263 getImage: getImage, 2264 transition: transition, 2265 Transition: Transition, 2266 animate: animate$1, 2267 Animation: Animation, 2268 attr: attr, 2269 hasAttr: hasAttr, 2270 removeAttr: removeAttr, 2271 data: data, 2272 addClass: addClass, 2273 removeClass: removeClass, 2274 removeClasses: removeClasses, 2275 replaceClass: replaceClass, 2276 hasClass: hasClass, 2277 toggleClass: toggleClass, 2278 dimensions: dimensions$1, 2279 offset: offset, 2280 position: position, 2281 offsetPosition: offsetPosition, 2282 height: height, 2283 width: width, 2284 boxModelAdjust: boxModelAdjust, 2285 flipPosition: flipPosition, 2286 toPx: toPx, 2287 ready: ready, 2288 isTag: isTag, 2289 empty: empty, 2290 html: html, 2291 replaceChildren: replaceChildren, 2292 prepend: prepend, 2293 append: append, 2294 before: before, 2295 after: after, 2296 remove: remove$1, 2297 wrapAll: wrapAll, 2298 wrapInner: wrapInner, 2299 unwrap: unwrap, 2300 fragment: fragment, 2301 apply: apply, 2302 $: $, 2303 $$: $$, 2304 inBrowser: inBrowser, 2305 isRtl: isRtl, 2306 hasTouch: hasTouch, 2307 pointerDown: pointerDown, 2308 pointerMove: pointerMove, 2309 pointerUp: pointerUp, 2310 pointerEnter: pointerEnter, 2311 pointerLeave: pointerLeave, 2312 pointerCancel: pointerCancel, 2313 on: on, 2314 off: off, 2315 once: once, 2316 trigger: trigger, 2317 createEvent: createEvent, 2318 toEventTargets: toEventTargets, 2319 isTouch: isTouch, 2320 getEventPos: getEventPos, 2321 fastdom: fastdom, 2322 isVoidElement: isVoidElement, 2323 isVisible: isVisible, 2324 selInput: selInput, 2325 isInput: isInput, 2326 selFocusable: selFocusable, 2327 isFocusable: isFocusable, 2328 parent: parent, 2329 filter: filter$1, 2330 matches: matches, 2331 closest: closest, 2332 within: within, 2333 parents: parents, 2334 children: children, 2335 index: index, 2336 hasOwn: hasOwn, 2337 hyphenate: hyphenate, 2338 camelize: camelize, 2339 ucfirst: ucfirst, 2340 startsWith: startsWith, 2341 endsWith: endsWith, 2342 includes: includes, 2343 findIndex: findIndex, 2344 isArray: isArray, 2345 toArray: toArray, 2346 assign: assign, 2347 isFunction: isFunction, 2348 isObject: isObject, 2349 isPlainObject: isPlainObject, 2350 isWindow: isWindow, 2351 isDocument: isDocument, 2352 isNode: isNode, 2353 isElement: isElement, 2354 isBoolean: isBoolean, 2355 isString: isString, 2356 isNumber: isNumber, 2357 isNumeric: isNumeric, 2358 isEmpty: isEmpty, 2359 isUndefined: isUndefined, 2360 toBoolean: toBoolean, 2361 toNumber: toNumber, 2362 toFloat: toFloat, 2363 toNode: toNode, 2364 toNodes: toNodes, 2365 toWindow: toWindow, 2366 toMs: toMs, 2367 isEqual: isEqual, 2368 swap: swap, 2369 last: last, 2370 each: each, 2371 sortBy: sortBy$1, 2372 uniqueBy: uniqueBy, 2373 clamp: clamp, 2374 noop: noop, 2375 intersectRect: intersectRect, 2376 pointInRect: pointInRect, 2377 Dimensions: Dimensions, 2378 getIndex: getIndex, 2379 memoize: memoize, 2380 Deferred: Deferred, 2381 MouseTracker: MouseTracker, 2382 observeIntersection: observeIntersection, 2383 observeResize: observeResize, 2384 observeMutation: observeMutation, 2385 mergeOptions: mergeOptions, 2386 parseOptions: parseOptions, 2387 play: play, 2388 pause: pause, 2389 mute: mute, 2390 isVideo: isVideo, 2391 positionAt: positionAt, 2392 query: query, 2393 queryAll: queryAll, 2394 find: find, 2395 findAll: findAll, 2396 escape: escape, 2397 css: css, 2398 getCssVar: getCssVar, 2399 propName: propName, 2400 isInView: isInView, 2401 scrollTop: scrollTop, 2402 scrollIntoView: scrollIntoView, 2403 scrolledOver: scrolledOver, 2404 scrollParents: scrollParents, 2405 getViewport: getViewport$1, 2406 getViewportClientHeight: getViewportClientHeight, 2407 getScrollingElement: getScrollingElement 2408 }); 2409 2410 function globalAPI (UIkit) { 2411 const DATA = UIkit.data; 2412 2413 UIkit.use = function (plugin) { 2414 if (plugin.installed) { 2415 return; 2416 } 2417 2418 plugin.call(null, this); 2419 plugin.installed = true; 2420 2421 return this; 2422 }; 2423 2424 UIkit.mixin = function (mixin, component) { 2425 component = (isString(component) ? UIkit.component(component) : component) || this; 2426 component.options = mergeOptions(component.options, mixin); 2427 }; 2428 2429 UIkit.extend = function (options) { 2430 options = options || {}; 2431 2432 const Super = this; 2433 const Sub = function UIkitComponent(options) { 2434 this._init(options); 2435 }; 2436 2437 Sub.prototype = Object.create(Super.prototype); 2438 Sub.prototype.constructor = Sub; 2439 Sub.options = mergeOptions(Super.options, options); 2440 2441 Sub.super = Super; 2442 Sub.extend = Super.extend; 2443 2444 return Sub; 2445 }; 2446 2447 UIkit.update = function (element, e) { 2448 element = element ? toNode(element) : document.body; 2449 2450 for (const parentEl of parents(element).reverse()) { 2451 update(parentEl[DATA], e); 2452 } 2453 2454 apply(element, (element) => update(element[DATA], e)); 2455 }; 2456 2457 let container; 2458 Object.defineProperty(UIkit, 'container', { 2459 get() { 2460 return container || document.body; 2461 }, 2462 2463 set(element) { 2464 container = $(element); 2465 } }); 2466 2467 2468 function update(data, e) { 2469 if (!data) { 2470 return; 2471 } 2472 2473 for (const name in data) { 2474 if (data[name]._connected) { 2475 data[name]._callUpdate(e); 2476 } 2477 } 2478 } 2479 } 2480 2481 function hooksAPI (UIkit) { 2482 UIkit.prototype._callHook = function (hook) {var _this$$options$hook; 2483 (_this$$options$hook = this.$options[hook]) == null ? void 0 : _this$$options$hook.forEach((handler) => handler.call(this)); 2484 }; 2485 2486 UIkit.prototype._callConnected = function () { 2487 if (this._connected) { 2488 return; 2489 } 2490 2491 this._data = {}; 2492 this._computed = {}; 2493 2494 this._initProps(); 2495 2496 this._callHook('beforeConnect'); 2497 this._connected = true; 2498 2499 this._initEvents();
2500 this._initObservers(); 2501 2502 this._callHook('connected'); 2503 this._callUpdate(); 2504 }; 2505 2506 UIkit.prototype._callDisconnected = function () { 2507 if (!this._connected) { 2508 return; 2509 } 2510 2511 this._callHook('beforeDisconnect'); 2512 this._disconnectObservers(); 2513 this._unbindEvents(); 2514 this._callHook('disconnected'); 2515 2516 this._connected = false; 2517 delete this._watch; 2518 }; 2519 2520 UIkit.prototype._callUpdate = function (e) {if (e === void 0) {e = 'update';} 2521 if (!this._connected) { 2522 return; 2523 } 2524 2525 if (e === 'update' || e === 'resize') { 2526 this._callWatches(); 2527 } 2528 2529 if (!this.$options.update) { 2530 return; 2531 } 2532 2533 if (!this._updates) { 2534 this._updates = new Set(); 2535 fastdom.read(() => { 2536 if (this._connected) { 2537 runUpdates.call(this, this._updates); 2538 } 2539 delete this._updates; 2540 }); 2541 } 2542 2543 this._updates.add(e.type || e); 2544 }; 2545 2546 UIkit.prototype._callWatches = function () { 2547 if (this._watch) { 2548 return; 2549 } 2550 2551 const initial = !hasOwn(this, '_watch'); 2552 2553 this._watch = fastdom.read(() => { 2554 if (this._connected) { 2555 runWatches.call(this, initial); 2556 } 2557 this._watch = null; 2558 }); 2559 }; 2560 2561 function runUpdates(types) { 2562 for (const { read, write, events = [] } of this.$options.update) { 2563 if (!types.has('update') && !events.some((type) => types.has(type))) { 2564 continue; 2565 } 2566 2567 let result; 2568 if (read) { 2569 result = read.call(this, this._data, types); 2570 2571 if (result && isPlainObject(result)) { 2572 assign(this._data, result); 2573 } 2574 } 2575 2576 if (write && result !== false) { 2577 fastdom.write(() => write.call(this, this._data, types)); 2578 } 2579 } 2580 } 2581 2582 function runWatches(initial) { 2583 const { 2584 $options: { computed } } = 2585 this; 2586 const values = { ...this._computed }; 2587 this._computed = {}; 2588 2589 for (const key in computed) { 2590 const { watch, immediate } = computed[key]; 2591 if ( 2592 watch && ( 2593 initial && immediate || 2594 hasOwn(values, key) && !isEqual(values[key], this[key]))) 2595 { 2596 watch.call(this, this[key], values[key]); 2597 } 2598 } 2599 } 2600 } 2601 2602 function stateAPI (UIkit) { 2603 let uid = 0; 2604 2605 UIkit.prototype._init = function (options) { 2606 options = options || {}; 2607 options.data = normalizeData(options, this.constructor.options); 2608 2609 this.$options = mergeOptions(this.constructor.options, options, this); 2610 this.$el = null; 2611 this.$props = {}; 2612 2613 this._uid = uid++; 2614 this._initData(); 2615 this._initMethods(); 2616 this._initComputeds(); 2617 this._callHook('created'); 2618 2619 if (options.el) { 2620 this.$mount(options.el); 2621 } 2622 }; 2623 2624 UIkit.prototype._initData = function () { 2625 const { data = {} } = this.$options; 2626 2627 for (const key in data) { 2628 this.$props[key] = this[key] = data[key]; 2629 } 2630 }; 2631 2632 UIkit.prototype._initMethods = function () { 2633 const { methods } = this.$options; 2634 2635 if (methods) { 2636 for (const key in methods) { 2637 this[key] = methods[key].bind(this); 2638 } 2639 } 2640 }; 2641 2642 UIkit.prototype._initComputeds = function () { 2643 const { computed } = this.$options; 2644 2645 this._computed = {}; 2646 2647 if (computed) { 2648 for (const key in computed) { 2649 registerComputed(this, key, computed[key]); 2650 } 2651 } 2652 }; 2653 2654 UIkit.prototype._initProps = function (props) { 2655 let key; 2656 2657 props = props || getProps$1(this.$options, this.$name); 2658 2659 for (key in props) { 2660 if (!isUndefined(props[key])) { 2661 this.$props[key] = props[key]; 2662 } 2663 } 2664 2665 const exclude = [this.$options.computed, this.$options.methods]; 2666 for (key in this.$props) { 2667 if (key in props && notIn(exclude, key)) { 2668 this[key] = this.$props[key]; 2669 } 2670 } 2671 }; 2672 2673 UIkit.prototype._initEvents = function () { 2674 this._events = []; 2675 for (const event of this.$options.events || []) { 2676 if (hasOwn(event, 'handler')) { 2677 registerEvent(this, event); 2678 } else { 2679 for (const key in event) { 2680 registerEvent(this, event[key], key); 2681 } 2682 } 2683 } 2684 }; 2685 2686 UIkit.prototype._unbindEvents = function () {
2687 this._events.forEach((unbind) => unbind()); 2688 delete this._events; 2689 }; 2690 2691 UIkit.prototype._initObservers = function () { 2692 this._observers = [initPropsObserver(this)]; 2693 2694 if (this.$options.computed) { 2695 this.registerObserver(initChildListObserver(this)); 2696 } 2697 }; 2698 2699 UIkit.prototype.registerObserver = function (observer) { 2700 this._observers.push(observer); 2701 }; 2702 2703 UIkit.prototype._disconnectObservers = function () { 2704 this._observers.forEach((observer) => observer == null ? void 0 : observer.disconnect()); 2705 }; 2706 } 2707 2708 function getProps$1(opts, name) { 2709 const data$1 = {}; 2710 const { args = [], props = {}, el } = opts; 2711 2712 if (!props) { 2713 return data$1; 2714 } 2715 2716 for (const key in props) { 2717 const prop = hyphenate(key); 2718 let value = data(el, prop); 2719 2720 if (isUndefined(value)) { 2721 continue; 2722 } 2723 2724 value = props[key] === Boolean && value === '' ? true : coerce(props[key], value); 2725 2726 if (prop === 'target' && (!value || startsWith(value, '_'))) { 2727 continue; 2728 } 2729 2730 data$1[key] = value; 2731 } 2732 2733 const options = parseOptions(data(el, name), args); 2734 2735 for (const key in options) { 2736 const prop = camelize(key); 2737 if (props[prop] !== undefined) { 2738 data$1[prop] = coerce(props[prop], options[key]); 2739 } 2740 } 2741 2742 return data$1; 2743 } 2744 2745 function registerComputed(component, key, cb) { 2746 Object.defineProperty(component, key, { 2747 enumerable: true, 2748 2749 get() { 2750 const { _computed, $props, $el } = component; 2751 2752 if (!hasOwn(_computed, key)) { 2753 _computed[key] = (cb.get || cb).call(component, $props, $el); 2754 } 2755 2756 return _computed[key]; 2757 }, 2758 2759 set(value) { 2760 const { _computed } = component; 2761 2762 _computed[key] = cb.set ? cb.set.call(component, value) : value; 2763 2764 if (isUndefined(_computed[key])) { 2765 delete _computed[key]; 2766 } 2767 } }); 2768 2769 } 2770 2771 function registerEvent(component, event, key) { 2772 if (!isPlainObject(event)) { 2773 event = { name: key, handler: event }; 2774 } 2775 2776 let { name, el, handler, capture, passive, delegate, filter, self } = event; 2777 el = isFunction(el) ? el.call(component) : el || component.$el; 2778 2779 if (isArray(el)) { 2780 el.forEach((el) => registerEvent(component, { ...event, el }, key)); 2781 return; 2782 } 2783 2784 if (!el || filter && !filter.call(component)) { 2785 return; 2786 } 2787 2788 component._events.push( 2789 on( 2790 el, 2791 name, 2792 delegate ? isString(delegate) ? delegate : delegate.call(component) : null, 2793 isString(handler) ? component[handler] : handler.bind(component), 2794 { passive, capture, self })); 2795 2796 2797 } 2798 2799 function notIn(options, key) { 2800 return options.every((arr) => !arr || !hasOwn(arr, key)); 2801 } 2802 2803 function coerce(type, value) { 2804 if (type === Boolean) { 2805 return toBoolean(value); 2806 } else if (type === Number) { 2807 return toNumber(value); 2808 } else if (type === 'list') { 2809 return toList(value); 2810 } 2811 2812 return type ? type(value) : value; 2813 } 2814 2815 function toList(value) { 2816 return isArray(value) ? 2817 value : 2818 isString(value) ? 2819 value. 2820 split(/,(?![^(]*\))/). 2821 map((value) => isNumeric(value) ? toNumber(value) : toBoolean(value.trim())) : 2822 [value]; 2823 } 2824 2825 function normalizeData(_ref, _ref2) {let { data = {} } = _ref;let { args = [], props = {} } = _ref2; 2826 if (isArray(data)) { 2827 data = data.slice(0, args.length).reduce((data, value, index) => { 2828 if (isPlainObject(value)) { 2829 assign(data, value); 2830 } else { 2831 data[args[index]] = value; 2832 } 2833 return data; 2834 }, {}); 2835 } 2836 2837 for (const key in data) { 2838 if (isUndefined(data[key])) { 2839 delete data[key]; 2840 } else if (props[key]) { 2841 data[key] = coerce(props[key], data[key]); 2842 } 2843 } 2844 2845 return data; 2846 } 2847 2848 function initChildListObserver(component) { 2849 const { el } = component.$options; 2850 2851 const observer = new MutationObserver(() => component.$emit()); 2852 observer.observe(el, { 2853 childList: true, 2854 subtree: true }); 2855 2856 2857 return observer; 2858 } 2859 2860 function initPropsObserver(component) { 2861 const { $name, $options, $props } = component; 2862 const { attrs, props, el } = $options; 2863 2864 if (!props || attrs === false) { 2865 return; 2866 } 2867 2868 const attributes = isArray(attrs) ? attrs : Object.keys(props); 2869 const filter = attributes.map((key) => hyphenate(key)).concat($name); 2870
2871 const observer = new MutationObserver((records) => { 2872 const data = getProps$1($options, $name); 2873 if ( 2874 records.some((_ref3) => {let { attributeName } = _ref3; 2875 const prop = attributeName.replace('data-', ''); 2876 return ( 2877 prop === $name ? attributes : [camelize(prop), camelize(attributeName)]). 2878 some((prop) => !isUndefined(data[prop]) && data[prop] !== $props[prop]); 2879 })) 2880 { 2881 component.$reset(); 2882 } 2883 }); 2884 2885 observer.observe(el, { 2886 attributes: true, 2887 attributeFilter: filter.concat(filter.map((key) => "data-" + key)) }); 2888 2889 2890 return observer; 2891 } 2892 2893 function instanceAPI (UIkit) { 2894 const DATA = UIkit.data; 2895 2896 UIkit.prototype.$create = function (component, element, data) { 2897 return UIkit[component](element, data); 2898 }; 2899 2900 UIkit.prototype.$mount = function (el) { 2901 const { name } = this.$options; 2902 2903 if (!el[DATA]) { 2904 el[DATA] = {}; 2905 } 2906 2907 if (el[DATA][name]) { 2908 return; 2909 } 2910 2911 el[DATA][name] = this; 2912 2913 this.$el = this.$options.el = this.$options.el || el; 2914 2915 if (within(el, document)) { 2916 this._callConnected(); 2917 } 2918 }; 2919 2920 UIkit.prototype.$reset = function () { 2921 this._callDisconnected(); 2922 this._callConnected(); 2923 }; 2924 2925 UIkit.prototype.$destroy = function (removeEl) {if (removeEl === void 0) {removeEl = false;} 2926 const { el, name } = this.$options; 2927 2928 if (el) { 2929 this._callDisconnected(); 2930 } 2931 2932 this._callHook('destroy'); 2933 2934 if (!(el != null && el[DATA])) { 2935 return; 2936 } 2937 2938 delete el[DATA][name]; 2939 2940 if (!isEmpty(el[DATA])) { 2941 delete el[DATA]; 2942 } 2943 2944 if (removeEl) { 2945 remove$1(this.$el); 2946 } 2947 }; 2948 2949 UIkit.prototype.$emit = function (e) { 2950 this._callUpdate(e); 2951 }; 2952 2953 UIkit.prototype.$update = function (element, e) {if (element === void 0) {element = this.$el;} 2954 UIkit.update(element, e); 2955 }; 2956 2957 UIkit.prototype.$getComponent = UIkit.getComponent; 2958 2959 const componentName = memoize((name) => UIkit.prefix + hyphenate(name)); 2960 Object.defineProperties(UIkit.prototype, { 2961 $container: Object.getOwnPropertyDescriptor(UIkit, 'container'), 2962 2963 $name: { 2964 get() { 2965 return componentName(this.$options.name); 2966 } } }); 2967 2968 2969 } 2970 2971 function componentAPI (UIkit) { 2972 const DATA = UIkit.data; 2973 2974 const components = {}; 2975 2976 UIkit.component = function (name, options) { 2977 const id = hyphenate(name); 2978 2979 name = camelize(id); 2980 2981 if (!options) { 2982 if (isPlainObject(components[name])) { 2983 components[name] = UIkit.extend(components[name]); 2984 } 2985 2986 return components[name]; 2987 } 2988 2989 UIkit[name] = function (element, data) { 2990 const component = UIkit.component(name); 2991 2992 return component.options.functional ? 2993 new component({ data: isPlainObject(element) ? element : [...arguments] }) : 2994 element ? 2995 $$(element).map(init)[0] : 2996 init(); 2997 2998 function init(element) { 2999 const instance = UIkit.getComponent(element, name); 3000 3001 if (instance) { 3002 if (data) { 3003 instance.$destroy(); 3004 } else { 3005 return instance; 3006 } 3007 } 3008 3009 return new component({ el: element, data }); 3010 } 3011 }; 3012 3013 const opt = isPlainObject(options) ? { ...options } : options.options; 3014 3015 opt.name = name; 3016 3017 opt.install == null ? void 0 : opt.install(UIkit, opt, name); 3018 3019 if (UIkit._initialized && !opt.functional) { 3020 fastdom.read(() => UIkit[name]("[uk-" + id + "],[data-uk-" + id + "]")); 3021 } 3022 3023 return components[name] = isPlainObject(options) ? opt : options; 3024 }; 3025 3026 UIkit.getComponents = (element) => (element == null ? void 0 : element[DATA]) || {}; 3027 UIkit.getComponent = (element, name) => UIkit.getComponents(element)[name]; 3028 3029 UIkit.connect = (node) => { 3030 if (node[DATA]) { 3031 for (const name in node[DATA]) { 3032 node[DATA][name]._callConnected(); 3033 } 3034 } 3035 3036 for (const attribute of node.attributes) { 3037 const name = getComponentName(attribute.name); 3038 3039 if (name && name in components) { 3040 UIkit[name](node); 3041 } 3042 } 3043 }; 3044 3045 UIkit.disconnect = (node) => { 3046 for (const name in node[DATA]) { 3047 node[DATA][name]._callDisconnected(); 3048 } 3049 }; 3050 } 3051 3052 const getComponentName = memoize((attribute) => { 3053 return startsWith(attribute, 'uk-') || startsWith(attribute, 'data-uk-') ? 3054 camelize(attribute.replace('data-uk-', '').replace('uk-', '')) : 3055 false; 3056 }); 3057 3058 const UIkit = function (options) { 3059 this._init(options); 3060 }; 3061 3062 UIkit.util = util; 3063 UIkit.data = '__uikit__'; 3064 UIkit.prefix = 'uk-'; 3065 UIkit.options = {}; 3066 UIkit.version = '3.13.7'; 3067 3068 globalAPI(UIkit); 3069 hooksAPI(UIkit); 3070 stateAPI(UIkit); 3071 componentAPI(UIkit); 3072 instanceAPI(UIkit); 3073 3074 function Core () { 3075 if (!inBrowser) { 3076 return; 3077 } 3078 3079 let started = 0; 3080 on( 3081 document, 3082 'animationstart', 3083 (_ref) => {let { target } = _ref; 3084 if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) { 3085 started++; 3086 css(document.documentElement, 'overflowX', 'hidden'); 3087 setTimeout(() => { 3088 if (! --started) { 3089 css(document.documentElement, 'overflowX', ''); 3090 } 3091 }, toMs(css(target, 'animationDuration')) + 100); 3092 } 3093 }, 3094 true); 3095 3096 } 3097 3098 function boot (UIkit) { 3099 const { connect, disconnect } = UIkit; 3100 3101 if (!inBrowser || !window.MutationObserver) { 3102 return; 3103 } 3104 3105 fastdom.read(function () { 3106 if (document.body) { 3107 apply(document.body, connect); 3108 } 3109
3110 new MutationObserver((records) => records.forEach(applyChildListMutation)).observe( 3111 document, 3112 { 3113 childList: true, 3114 subtree: true }); 3115 3116 3117 3118 new MutationObserver((records) => records.forEach(applyAttributeMutation)).observe( 3119 document, 3120 { 3121 attributes: true, 3122 subtree: true }); 3123 3124 3125 3126 UIkit._initialized = true; 3127 }); 3128 3129 function applyChildListMutation(_ref) {let { addedNodes, removedNodes } = _ref; 3130 for (const node of addedNodes) { 3131 apply(node, connect); 3132 } 3133 3134 for (const node of removedNodes) { 3135 apply(node, disconnect); 3136 } 3137 } 3138 3139 function applyAttributeMutation(_ref2) {var _UIkit$getComponent;let { target, attributeName } = _ref2; 3140 const name = getComponentName(attributeName); 3141 3142 if (!name || !(name in UIkit)) { 3143 return; 3144 } 3145 3146 if (hasAttr(target, attributeName)) { 3147 UIkit[name](target); 3148 return; 3149 } 3150 3151 (_UIkit$getComponent = UIkit.getComponent(target, name)) == null ? void 0 : _UIkit$getComponent.$destroy(); 3152 } 3153 } 3154 3155 var Class = { 3156 connected() { 3157 !hasClass(this.$el, this.$name) && addClass(this.$el, this.$name); 3158 } }; 3159 3160 var Lazyload = { 3161 methods: { 3162 lazyload(observeTargets, targets) {if (observeTargets === void 0) {observeTargets = this.$el;}if (targets === void 0) {targets = this.$el;} 3163 this.registerObserver( 3164 observeIntersection(observeTargets, (entries, observer) => { 3165 for (const el of toNodes(isFunction(targets) ? targets() : targets)) { 3166 $$('[loading="lazy"]', el).forEach((el) => removeAttr(el, 'loading')); 3167 } 3168 for (const el of entries. 3169 filter((_ref) => {let { isIntersecting } = _ref;return isIntersecting;}). 3170 map((_ref2) => {let { target } = _ref2;return target;})) { 3171 observer.unobserve(el); 3172 } 3173 })); 3174 3175 } } }; 3176 3177 var Togglable = { 3178 props: { 3179 cls: Boolean, 3180 animation: 'list', 3181 duration: Number, 3182 origin: String, 3183 transition: String }, 3184 3185 3186 data: { 3187 cls: false, 3188 animation: [false], 3189 duration: 200, 3190 origin: false, 3191 transition: 'linear', 3192 clsEnter: 'uk-togglabe-enter', 3193 clsLeave: 'uk-togglabe-leave', 3194 3195 initProps: { 3196 overflow: '', 3197 height: '', 3198 paddingTop: '', 3199 paddingBottom: '', 3200 marginTop: '', 3201 marginBottom: '' }, 3202 3203 3204 hideProps: { 3205 overflow: 'hidden', 3206 height: 0, 3207 paddingTop: 0, 3208 paddingBottom: 0, 3209 marginTop: 0, 3210 marginBottom: 0 } }, 3211 3212 3213 3214 computed: { 3215 hasAnimation(_ref) {let { animation } = _ref; 3216 return !!animation[0]; 3217 }, 3218 3219 hasTransition(_ref2) {let { animation } = _ref2; 3220 return this.hasAnimation && animation[0] === true; 3221 } }, 3222 3223 3224 methods: { 3225 toggleElement(targets, toggle, animate) { 3226 return new Promise((resolve) => 3227 Promise.all( 3228 toNodes(targets).map((el) => { 3229 const show = isBoolean(toggle) ? toggle : !this.isToggled(el); 3230 3231 if (!trigger(el, "before" + (show ? 'show' : 'hide'), [this])) { 3232 return Promise.reject(); 3233 } 3234 3235 const promise = ( 3236 isFunction(animate) ? 3237 animate : 3238 animate === false || !this.hasAnimation ? 3239 this._toggle : 3240 this.hasTransition ? 3241 toggleHeight(this) : 3242 toggleAnimation(this))( 3243 el, show); 3244 3245 const cls = show ? this.clsEnter : this.clsLeave; 3246 3247 addClass(el, cls); 3248 3249 trigger(el, show ? 'show' : 'hide', [this]); 3250 3251 const done = () => { 3252 removeClass(el, cls); 3253 trigger(el, show ? 'shown' : 'hidden', [this]); 3254 this.$update(el); 3255 }; 3256 3257 return promise ? 3258 promise.then(done, () => { 3259 removeClass(el, cls); 3260 return Promise.reject(); 3261 }) : 3262 done(); 3263 })). 3264 then(resolve, noop)); 3265 3266 }, 3267 3268 isToggled(el) {if (el === void 0) {el = this.$el;} 3269 [el] = toNodes(el); 3270 return hasClass(el, this.clsEnter) ? 3271 true : 3272 hasClass(el, this.clsLeave) ? 3273 false : 3274 this.cls ? 3275 hasClass(el, this.cls.split(' ')[0]) : 3276 isVisible(el); 3277 }, 3278 3279 _toggle(el, toggled) { 3280 if (!el) { 3281 return; 3282 } 3283 3284 toggled = Boolean(toggled); 3285 3286 let changed; 3287 if (this.cls) { 3288 changed = includes(this.cls, ' ') || toggled !== hasClass(el, this.cls); 3289 changed && toggleClass(el, this.cls, includes(this.cls, ' ') ? undefined : toggled); 3290 } else { 3291 changed = toggled === el.hidden; 3292 changed && (el.hidden = !toggled); 3293 } 3294 3295 $$('[autofocus]', el).some((el) => isVisible(el) ? el.focus() || true : el.blur()); 3296 3297 if (changed) { 3298 trigger(el, 'toggled', [toggled, this]); 3299 this.$update(el); 3300 } 3301 } } }; 3302 3303 3304 3305 function toggleHeight(_ref3) {let { isToggled, duration, initProps, hideProps, transition, _toggle } = _ref3; 3306 return (el, show) => { 3307 const inProgress = Transition.inProgress(el); 3308 const inner = el.hasChildNodes() ?
3309 toFloat(css(el.firstElementChild, 'marginTop')) + 3310 toFloat(css(el.lastElementChild, 'marginBottom')) : 3311 0; 3312 const currentHeight = isVisible(el) ? height(el) + (inProgress ? 0 : inner) : 0; 3313 3314 Transition.cancel(el); 3315 3316 if (!isToggled(el)) { 3317 _toggle(el, true); 3318 } 3319 3320 height(el, ''); 3321 3322 // Update child components first 3323 fastdom.flush(); 3324 3325 const endHeight = height(el) + (inProgress ? 0 : inner); 3326 height(el, currentHeight); 3327 3328 return ( 3329 show ? 3330 Transition.start( 3331 el, 3332 { ...initProps, overflow: 'hidden', height: endHeight }, 3333 Math.round(duration * (1 - currentHeight / endHeight)), 3334 transition) : 3335 3336 Transition.start( 3337 el, 3338 hideProps, 3339 Math.round(duration * (currentHeight / endHeight)), 3340 transition). 3341 then(() => _toggle(el, false))). 3342 then(() => css(el, initProps)); 3343 }; 3344 } 3345 3346 function toggleAnimation(cmp) { 3347 return (el, show) => { 3348 Animation.cancel(el); 3349 3350 const { animation, duration, _toggle } = cmp; 3351 3352 if (show) { 3353 _toggle(el, true); 3354 return Animation.in(el, animation[0], duration, cmp.origin); 3355 } 3356 3357 return Animation.out(el, animation[1] || animation[0], duration, cmp.origin).then(() => 3358 _toggle(el, false)); 3359 3360 }; 3361 } 3362 3363 var Accordion = { 3364 mixins: [Class, Lazyload, Togglable], 3365 3366 props: { 3367 targets: String, 3368 active: null, 3369 collapsible: Boolean, 3370 multiple: Boolean, 3371 toggle: String, 3372 content: String, 3373 transition: String, 3374 offset: Number }, 3375 3376 3377 data: { 3378 targets: '> *', 3379 active: false, 3380 animation: [true], 3381 collapsible: true, 3382 multiple: false, 3383 clsOpen: 'uk-open', 3384 toggle: '> .uk-accordion-title', 3385 content: '> .uk-accordion-content', 3386 transition: 'ease', 3387 offset: 0 }, 3388 3389 3390 computed: { 3391 items: { 3392 get(_ref, $el) {let { targets } = _ref; 3393 return $$(targets, $el); 3394 }, 3395 3396 watch(items, prev) { 3397 items.forEach((el) => hide($(this.content, el), !hasClass(el, this.clsOpen))); 3398 3399 if (prev || hasClass(items, this.clsOpen)) { 3400 return; 3401 } 3402 3403 const active = 3404 this.active !== false && items[Number(this.active)] || 3405 !this.collapsible && items[0]; 3406 3407 if (active) { 3408 this.toggle(active, false); 3409 } 3410 }, 3411 3412 immediate: true }, 3413 3414 3415 toggles(_ref2) {let { toggle } = _ref2; 3416 return this.items.map((item) => $(toggle, item)); 3417 } }, 3418 3419 3420 connected() { 3421 this.lazyload(); 3422 }, 3423 3424 events: [ 3425 { 3426 name: 'click', 3427 3428 delegate() { 3429 return this.targets + " " + this.$props.toggle; 3430 }, 3431 3432 handler(e) { 3433 e.preventDefault(); 3434 this.toggle(index(this.toggles, e.current)); 3435 } }], 3436 3437 3438 3439 methods: { 3440 toggle(item, animate) { 3441 let items = [this.items[getIndex(item, this.items)]]; 3442 const activeItems = filter$1(this.items, "." + this.clsOpen); 3443 3444 if (!this.multiple && !includes(activeItems, items[0])) { 3445 items = items.concat(activeItems); 3446 } 3447 3448 if ( 3449 !this.collapsible && 3450 activeItems.length < 2 && 3451 !filter$1(items, ":not(." + this.clsOpen + ")").length) 3452 { 3453 return; 3454 } 3455 3456 for (const el of items) { 3457 this.toggleElement(el, !hasClass(el, this.clsOpen), async (el, show) => { 3458 toggleClass(el, this.clsOpen, show); 3459 attr($(this.$props.toggle, el), 'aria-expanded', show); 3460 3461 const content = $("" + (el._wrapper ? '> * ' : '') + this.content, el); 3462 3463 if (animate === false || !this.hasTransition) { 3464 hide(content, !show); 3465 return; 3466 } 3467 3468 if (!el._wrapper) { 3469 el._wrapper = wrapAll(content, "<div" + (show ? ' hidden' : '') + ">"); 3470 } 3471 3472 hide(content, false); 3473 await toggleHeight(this)(el._wrapper, show); 3474 hide(content, !show); 3475 3476 delete el._wrapper; 3477 unwrap(content); 3478 3479 if (show) { 3480 const toggle = $(this.$props.toggle, el); 3481 fastdom.read(() => { 3482 if (!isInView(toggle)) { 3483 scrollIntoView(toggle, { offset: this.offset }); 3484 } 3485 }); 3486 } 3487 }); 3488 } 3489 } } }; 3490 3491 3492 3493 function hide(el, hide) { 3494 el && (el.hidden = hide); 3495 } 3496 3497 var alert = { 3498 mixins: [Class, Togglable], 3499 3500 args: 'animation', 3501 3502 props: { 3503 close: String }, 3504 3505 3506 data: { 3507 animation: [true], 3508 selClose: '.uk-alert-close', 3509 duration: 150, 3510 hideProps: { opacity: 0, ...Togglable.data.hideProps } }, 3511 3512 3513 events: [ 3514 { 3515 name: 'click', 3516 3517 delegate() { 3518 return this.selClose; 3519 }, 3520 3521 handler(e) { 3522 e.preventDefault(); 3523 this.close(); 3524 } }], 3525 3526 3527 3528 methods: { 3529 async close() { 3530 await this.toggleElement(this.$el); 3531 this.$destroy(true); 3532 } } }; 3533 3534 var Video = { 3535 args: 'autoplay', 3536 3537 props: { 3538 automute: Boolean, 3539 autoplay: Boolean }, 3540 3541 3542 data: { 3543 automute: false, 3544 autoplay: true }, 3545 3546 3547 connected() { 3548 this.inView = this.autoplay === 'inview'; 3549 3550 if (this.inView && !hasAttr(this.$el, 'preload')) { 3551 this.$el.preload = 'none'; 3552 } 3553 3554 if (this.automute) { 3555 mute(this.$el); 3556 } 3557 3558 this.registerObserver(observeIntersection(this.$el, () => this.$emit(), {}, false)); 3559 }, 3560 3561 update: { 3562 read() { 3563 if (!isVideo(this.$el)) { 3564 return false;
3565 } 3566 3567 return { 3568 visible: isVisible(this.$el) && css(this.$el, 'visibility') !== 'hidden', 3569 inView: this.inView && isInView(this.$el) }; 3570 3571 }, 3572 3573 write(_ref) {let { visible, inView } = _ref; 3574 if (!visible || this.inView && !inView) { 3575 pause(this.$el); 3576 } else if (this.autoplay === true || this.inView && inView) { 3577 play(this.$el); 3578 } 3579 } } }; 3580 3581 var Resize = { 3582 connected() {var _this$$options$resize; 3583 this.registerObserver( 3584 observeResize(((_this$$options$resize = this.$options.resizeTargets) == null ? void 0 : _this$$options$resize.call(this)) || this.$el, () => 3585 this.$emit('resize'))); 3586 3587 3588 } }; 3589 3590 var cover = { 3591 mixins: [Resize, Video], 3592 3593 props: { 3594 width: Number, 3595 height: Number }, 3596 3597 3598 data: { 3599 automute: true }, 3600 3601 3602 events: { 3603 'load loadedmetadata'() { 3604 this.$emit('resize'); 3605 } }, 3606 3607 3608 resizeTargets() { 3609 return [this.$el, parent(this.$el)]; 3610 }, 3611 3612 update: { 3613 read() { 3614 const el = this.$el; 3615 const { offsetHeight: height, offsetWidth: width } = 3616 getPositionedParent(el) || parent(el); 3617 const dim = Dimensions.cover( 3618 { 3619 width: this.width || el.naturalWidth || el.videoWidth || el.clientWidth, 3620 height: this.height || el.naturalHeight || el.videoHeight || el.clientHeight }, 3621 3622 { 3623 width: width + (width % 2 ? 1 : 0), 3624 height: height + (height % 2 ? 1 : 0) }); 3625 3626 3627 3628 if (!dim.width || !dim.height) { 3629 return false; 3630 } 3631 3632 return dim; 3633 }, 3634 3635 write(_ref) {let { height, width } = _ref; 3636 css(this.$el, { height, width }); 3637 }, 3638 3639 events: ['resize'] } }; 3640 3641 3642 3643 function getPositionedParent(el) { 3644 while (el = parent(el)) { 3645 if (css(el, 'position') !== 'static') { 3646 return el; 3647 } 3648 } 3649 } 3650 3651 var Container = { 3652 props: { 3653 container: Boolean }, 3654 3655 3656 data: { 3657 container: true }, 3658 3659 3660 computed: { 3661 container(_ref) {let { container } = _ref; 3662 return container === true && this.$container || container && $(container); 3663 } } }; 3664 3665 var Position = { 3666 props: { 3667 pos: String, 3668 offset: null, 3669 flip: Boolean }, 3670 3671 3672 data: { 3673 pos: "bottom-" + (isRtl ? 'right' : 'left'), 3674 flip: true, 3675 offset: false }, 3676 3677 3678 connected() { 3679 this.pos = this.$props.pos.split('-').concat('center').slice(0, 2); 3680 this.dir = this.pos[0]; 3681 this.align = this.pos[1]; 3682 }, 3683 3684 methods: { 3685 positionAt(element, target, boundary) { 3686 const axis = this.getAxis(); 3687 const dir = this.pos[0]; 3688 const align = this.pos[1]; 3689 3690 let { offset: offset$1 } = this; 3691 if (!isNumeric(offset$1)) { 3692 const node = $(offset$1); 3693 offset$1 = node ? 3694 offset(node)[axis === 'x' ? 'left' : 'top'] - 3695 offset(target)[axis === 'x' ? 'right' : 'bottom'] : 3696 0; 3697 } 3698 offset$1 = toPx(offset$1) + toPx(getCssVar('position-offset', element)); 3699 3700 const { x, y } = positionAt( 3701 element, 3702 target, 3703 axis === 'x' ? flipPosition(dir) + " " + align : align + " " + flipPosition(dir), 3704 axis === 'x' ? dir + " " + align : align + " " + dir, 3705 axis === 'x' ? "" + ( 3706 dir === 'left' ? -offset$1 : offset$1) : " " + ( 3707 dir === 'top' ? -offset$1 : offset$1), 3708 null, 3709 this.flip, 3710 boundary). 3711 target; 3712 3713 this.dir = axis === 'x' ? x : y; 3714 this.align = axis === 'x' ? y : x; 3715 }, 3716 3717 getAxis() { 3718 return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x'; 3719 } } }; 3720 3721 let active$1; 3722 3723 var drop = { 3724 mixins: [Container, Lazyload, Position, Togglable], 3725 3726 args: 'pos', 3727 3728 props: { 3729 mode: 'list', 3730 toggle: Boolean, 3731 boundary: Boolean, 3732 boundaryAlign: Boolean, 3733 delayShow: Number, 3734 delayHide: Number, 3735 clsDrop: String }, 3736 3737 3738 data: { 3739 mode: ['click', 'hover'], 3740 toggle: '- *', 3741 boundary: true, 3742 boundaryAlign: false, 3743 delayShow: 0, 3744 delayHide: 800, 3745 clsDrop: false, 3746 animation: ['uk-animation-fade'], 3747 cls: 'uk-open', 3748 container: false }, 3749 3750 3751 created() { 3752 this.tracker = new MouseTracker(); 3753 }, 3754 3755 connected() { 3756 this.clsDrop = this.$props.clsDrop || "uk-" + this.$options.name; 3757 addClass(this.$el, this.clsDrop); 3758 3759 if (this.toggle && !this.target) { 3760 this.target = this.$create('toggle', query(this.toggle, this.$el), { 3761 target: this.$el, 3762 mode: this.mode }). 3763 $el; 3764 attr(this.target, 'aria-haspopup', true); 3765 this.lazyload(this.target); 3766 } 3767 }, 3768 3769 disconnected() { 3770 if (this.isActive()) { 3771 active$1 = null; 3772 } 3773 }, 3774 3775 events: [ 3776 { 3777 name: 'click', 3778 3779 delegate() { 3780 return "." + this.clsDrop + "-close"; 3781 }, 3782 3783 handler(e) { 3784 e.preventDefault(); 3785 this.hide(false); 3786 } },
3787 3788 3789 { 3790 name: 'click', 3791 3792 delegate() { 3793 return 'a[href^="#"]'; 3794 }, 3795 3796 handler(_ref) {let { defaultPrevented, current: { hash } } = _ref; 3797 if (!defaultPrevented && hash && !within(hash, this.$el)) { 3798 this.hide(false); 3799 } 3800 } }, 3801 3802 3803 { 3804 name: 'beforescroll', 3805 3806 handler() { 3807 this.hide(false); 3808 } }, 3809 3810 3811 { 3812 name: 'toggle', 3813 3814 self: true, 3815 3816 handler(e, toggle) { 3817 e.preventDefault(); 3818 3819 if (this.isToggled()) { 3820 this.hide(false); 3821 } else { 3822 this.show(toggle == null ? void 0 : toggle.$el, false); 3823 } 3824 } }, 3825 3826 3827 { 3828 name: 'toggleshow', 3829 3830 self: true, 3831 3832 handler(e, toggle) { 3833 e.preventDefault(); 3834 this.show(toggle == null ? void 0 : toggle.$el); 3835 } }, 3836 3837 3838 { 3839 name: 'togglehide', 3840 3841 self: true, 3842 3843 handler(e) { 3844 e.preventDefault(); 3845 if (!matches(this.$el, ':focus,:hover')) { 3846 this.hide(); 3847 } 3848 } }, 3849 3850 3851 { 3852 name: pointerEnter + " focusin", 3853 3854 filter() { 3855 return includes(this.mode, 'hover'); 3856 }, 3857 3858 handler(e) { 3859 if (!isTouch(e)) { 3860 this.clearTimers(); 3861 } 3862 } }, 3863 3864 3865 { 3866 name: pointerLeave + " focusout", 3867 3868 filter() { 3869 return includes(this.mode, 'hover'); 3870 }, 3871 3872 handler(e) { 3873 if (!isTouch(e) && e.relatedTarget) { 3874 this.hide(); 3875 } 3876 } }, 3877 3878 3879 { 3880 name: 'toggled', 3881 3882 self: true, 3883 3884 handler(e, toggled) { 3885 if (!toggled) { 3886 return; 3887 } 3888 3889 this.clearTimers(); 3890 this.position(); 3891 } }, 3892 3893 3894 { 3895 name: 'show', 3896 3897 self: true, 3898 3899 handler() { 3900 active$1 = this; 3901 3902 this.tracker.init(); 3903 3904 for (const handler of [ 3905 on( 3906 document, 3907 pointerDown, 3908 (_ref2) => {let { target } = _ref2;return ( 3909 !within(target, this.$el) && 3910 once( 3911 document, 3912 pointerUp + " " + pointerCancel + " scroll", 3913 (_ref3) => {let { defaultPrevented, type, target: newTarget } = _ref3; 3914 if ( 3915 !defaultPrevented && 3916 type === pointerUp && 3917 target === newTarget && 3918 !(this.target && within(target, this.target))) 3919 { 3920 this.hide(false); 3921 } 3922 }, 3923 true));}), 3924 3925 3926 3927 on(document, 'keydown', (e) => { 3928 if (e.keyCode === 27) { 3929 this.hide(false); 3930 } 3931 }), 3932 on(window, 'resize', () => this.$emit('resize'))]) 3933 { 3934 once(this.$el, 'hide', handler, { self: true }); 3935 } 3936 } }, 3937 3938 3939 { 3940 name: 'beforehide', 3941 3942 self: true, 3943 3944 handler() { 3945 this.clearTimers(); 3946 } }, 3947 3948 3949 { 3950 name: 'hide', 3951 3952 handler(_ref4) {let { target } = _ref4; 3953 if (this.$el !== target) { 3954 active$1 = 3955 active$1 === null && within(target, this.$el) && this.isToggled() ? 3956 this : 3957 active$1; 3958 return; 3959 } 3960 3961 active$1 = this.isActive() ? null : active$1; 3962 this.tracker.cancel(); 3963 } }], 3964 3965 3966 3967 update: { 3968 write() { 3969 if (this.isToggled() && !hasClass(this.$el, this.clsEnter)) { 3970 this.position(); 3971 } 3972 }, 3973 3974 events: ['resize'] }, 3975 3976 3977 methods: { 3978 show(target, delay) {if (target === void 0) {target = this.target;}if (delay === void 0) {delay = true;} 3979 if (this.isToggled() && target && this.target && target !== this.target) { 3980 this.hide(false); 3981 } 3982 3983 this.target = target; 3984 3985 this.clearTimers(); 3986 3987 if (this.isActive()) { 3988 return; 3989 } 3990 3991 if (active$1) { 3992 if (delay && active$1.isDelaying) { 3993 this.showTimer = setTimeout(() => matches(target, ':hover') && this.show(), 10); 3994 return; 3995 } 3996 3997 let prev; 3998 while (active$1 && prev !== active$1 && !within(this.$el, active$1.$el)) { 3999 prev = active$1; 4000 active$1.hide(false); 4001 } 4002 } 4003 4004 if (this.container && parent(this.$el) !== this.container) { 4005 append(this.container, this.$el); 4006 } 4007 4008 this.showTimer = setTimeout( 4009 () => this.toggleElement(this.$el, true), 4010 delay && this.delayShow || 0); 4011 4012 }, 4013
4014 hide(delay) {if (delay === void 0) {delay = true;} 4015 const hide = () => this.toggleElement(this.$el, false, false); 4016 4017 this.clearTimers(); 4018 4019 this.isDelaying = getPositionedElements(this.$el).some((el) => 4020 this.tracker.movesTo(el)); 4021 4022 4023 if (delay && this.isDelaying) { 4024 this.hideTimer = setTimeout(this.hide, 50); 4025 } else if (delay && this.delayHide) { 4026 this.hideTimer = setTimeout(hide, this.delayHide); 4027 } else { 4028 hide(); 4029 } 4030 }, 4031 4032 clearTimers() { 4033 clearTimeout(this.showTimer); 4034 clearTimeout(this.hideTimer); 4035 this.showTimer = null; 4036 this.hideTimer = null; 4037 this.isDelaying = false; 4038 }, 4039 4040 isActive() { 4041 return active$1 === this; 4042 }, 4043 4044 position() { 4045 const boundary = query(this.boundary, this.$el) || window; 4046 removeClass(this.$el, this.clsDrop + "-stack"); 4047 toggleClass(this.$el, this.clsDrop + "-boundary", this.boundaryAlign); 4048 4049 const boundaryOffset = offset(boundary); 4050 const targetOffset = offset(this.target); 4051 const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset; 4052 4053 if (this.pos[1] === 'justify') { 4054 const prop = this.getAxis() === 'y' ? 'width' : 'height'; 4055 css(this.$el, prop, alignTo[prop]); 4056 } else if ( 4057 this.$el.offsetWidth > 4058 Math.max(boundaryOffset.right - alignTo.left, alignTo.right - boundaryOffset.left)) 4059 { 4060 addClass(this.$el, this.clsDrop + "-stack"); 4061 } 4062 4063 this.positionAt(this.$el, this.boundaryAlign ? boundary : this.target, boundary); 4064 } } }; 4065 4066 4067 4068 function getPositionedElements(el) { 4069 const result = []; 4070 apply(el, (el) => css(el, 'position') !== 'static' && result.push(el)); 4071 return result; 4072 } 4073 4074 var formCustom = { 4075 mixins: [Class], 4076 4077 args: 'target', 4078 4079 props: { 4080 target: Boolean }, 4081 4082 4083 data: { 4084 target: false }, 4085 4086 4087 computed: { 4088 input(_, $el) { 4089 return $(selInput, $el); 4090 }, 4091 4092 state() { 4093 return this.input.nextElementSibling; 4094 }, 4095 4096 target(_ref, $el) {let { target } = _ref; 4097 return ( 4098 target && ( 4099 target === true && parent(this.input) === $el && this.input.nextElementSibling || 4100 $(target, $el))); 4101 4102 } }, 4103 4104 4105 update() {var _input$files; 4106 const { target, input } = this; 4107 4108 if (!target) { 4109 return; 4110 } 4111 4112 let option; 4113 const prop = isInput(target) ? 'value' : 'textContent'; 4114 const prev = target[prop]; 4115 const value = (_input$files = input.files) != null && _input$files[0] ? 4116 input.files[0].name : 4117 matches(input, 'select') && ( 4118 option = $$('option', input).filter((el) => el.selected)[0]) // eslint-disable-line prefer-destructuring 4119 ? option.textContent : 4120 input.value; 4121 4122 if (prev !== value) { 4123 target[prop] = value; 4124 } 4125 }, 4126 4127 events: [ 4128 { 4129 name: 'change', 4130 4131 handler() { 4132 this.$emit(); 4133 } }, 4134 4135 4136 { 4137 name: 'reset', 4138 4139 el() { 4140 return closest(this.$el, 'form'); 4141 }, 4142 4143 handler() { 4144 this.$emit(); 4145 } }] }; 4146 4147 var Margin = { 4148 mixins: [Resize], 4149 4150 props: { 4151 margin: String, 4152 firstColumn: Boolean }, 4153 4154 4155 data: { 4156 margin: 'uk-margin-small-top', 4157 firstColumn: 'uk-first-column' }, 4158 4159 4160 resizeTargets() { 4161 return this.$el.children; 4162 }, 4163 4164 connected() { 4165 this.registerObserver( 4166 observeMutation(this.$el, () => this.$reset(), { 4167 childList: true })); 4168 4169 4170 }, 4171 4172 update: { 4173 read() { 4174 const rows = getRows(this.$el.children); 4175 4176 return { 4177 rows, 4178 columns: getColumns(rows) }; 4179 4180 }, 4181 4182 write(_ref) {let { columns, rows } = _ref; 4183 for (const row of rows) { 4184 for (const column of row) { 4185 toggleClass(column, this.margin, rows[0] !== row); 4186 toggleClass(column, this.firstColumn, !!~columns[0].indexOf(column)); 4187 } 4188 } 4189 }, 4190 4191 events: ['resize'] } }; 4192 4193 4194 4195 function getRows(items) { 4196 return sortBy(items, 'top', 'bottom'); 4197 } 4198 4199 function getColumns(rows) { 4200 const columns = []; 4201 4202 for (const row of rows) { 4203 const sorted = sortBy(row, 'left', 'right'); 4204 for (let j = 0; j < sorted.length; j++) { 4205 columns[j] = columns[j] ? columns[j].concat(sorted[j]) : sorted[j]; 4206 } 4207 } 4208 4209 return isRtl ? columns.reverse() : columns; 4210 } 4211 4212 function sortBy(items, startProp, endProp) { 4213 const sorted = [[]]; 4214 4215 for (const el of items) { 4216 if (!isVisible(el)) { 4217 continue; 4218 } 4219 4220 let dim = getOffset(el); 4221 4222 for (let i = sorted.length - 1; i >= 0; i--) { 4223 const current = sorted[i]; 4224 4225 if (!current[0]) { 4226 current.push(el); 4227 break; 4228 } 4229 4230 let startDim; 4231 if (current[0].offsetParent === el.offsetParent) { 4232 startDim = getOffset(current[0]); 4233 } else { 4234 dim = getOffset(el, true); 4235 startDim = getOffset(current[0], true); 4236 } 4237 4238 if (dim[startProp] >= startDim[endProp] - 1 && dim[startProp] !== startDim[startProp]) { 4239 sorted.push([el]); 4240 break; 4241 } 4242 4243 if (dim[endProp] - 1 > startDim[startProp] || dim[startProp] === startDim[startProp]) { 4244 current.push(el); 4245 break; 4246 } 4247 4248 if (i === 0) { 4249 sorted.unshift([el]); 4250 break; 4251 } 4252 } 4253 } 4254 4255 return sorted; 4256 } 4257 4258 function getOffset(element, offset) {if (offset === void 0) {offset = false;} 4259 let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element; 4260 4261 if (offset) { 4262 [offsetTop, offsetLeft] = offsetPosition(element); 4263 } 4264 4265 return { 4266 top: offsetTop, 4267 left: offsetLeft, 4268 bottom: offsetTop + offsetHeight, 4269 right: offsetLeft + offsetWidth }; 4270 4271 } 4272 4273 var Scroll = { 4274 connected() { 4275 registerScrollListener(this._uid, () => this.$emit('scroll')); 4276 }, 4277 4278 disconnected() { 4279 unregisterScrollListener(this._uid); 4280 } }; 4281 4282 4283 const scrollListeners = new Map(); 4284 let unbindScrollListener; 4285 function registerScrollListener(id, listener) { 4286 unbindScrollListener = 4287 unbindScrollListener || 4288 on(window, 'scroll', () =>
4288 scrollListeners.forEach((listener) => listener()), { 4289 passive: true, 4290 capture: true }); 4291 4292 4293 scrollListeners.set(id, listener); 4294 } 4295 4296 function unregisterScrollListener(id) { 4297 scrollListeners.delete(id); 4298 if (unbindScrollListener && !scrollListeners.size) { 4299 unbindScrollListener(); 4300 unbindScrollListener = null; 4301 } 4302 } 4303 4304 var grid = { 4305 extends: Margin, 4306 4307 mixins: [Class, Scroll], 4308 4309 name: 'grid', 4310 4311 props: { 4312 masonry: Boolean, 4313 parallax: Number }, 4314 4315 4316 data: { 4317 margin: 'uk-grid-margin', 4318 clsStack: 'uk-grid-stack', 4319 masonry: false, 4320 parallax: 0 }, 4321 4322 4323 connected() { 4324 this.masonry && addClass(this.$el, 'uk-flex-top uk-flex-wrap-top'); 4325 }, 4326 4327 update: [ 4328 { 4329 write(_ref) {let { columns } = _ref; 4330 toggleClass(this.$el, this.clsStack, columns.length < 2); 4331 }, 4332 4333 events: ['resize'] }, 4334 4335 4336 { 4337 read(data) { 4338 let { columns, rows } = data; 4339 4340 // Filter component makes elements positioned absolute 4341 if ( 4342 !columns.length || 4343 !this.masonry && !this.parallax || 4344 positionedAbsolute(this.$el)) 4345 { 4346 data.translates = false; 4347 return false; 4348 } 4349 4350 let translates = false; 4351 4352 const nodes = children(this.$el); 4353 const columnHeights = getColumnHeights(columns); 4354 const margin = getMarginTop(nodes, this.margin) * (rows.length - 1); 4355 const elHeight = Math.max(...columnHeights) + margin; 4356 4357 if (this.masonry) { 4358 columns = columns.map((column) => sortBy$1(column, 'offsetTop')); 4359 translates = getTranslates(rows, columns); 4360 } 4361 4362 let padding = Math.abs(this.parallax); 4363 if (padding) { 4364 padding = columnHeights.reduce( 4365 (newPadding, hgt, i) => 4366 Math.max( 4367 newPadding, 4368 hgt + margin + (i % 2 ? padding : padding / 8) - elHeight), 4369 4370 0); 4371 4372 } 4373 4374 return { padding, columns, translates, height: translates ? elHeight : '' }; 4375 }, 4376 4377 write(_ref2) {let { height, padding } = _ref2; 4378 css(this.$el, 'paddingBottom', padding || ''); 4379 height !== false && css(this.$el, 'height', height); 4380 }, 4381 4382 events: ['resize'] }, 4383 4384 4385 { 4386 read() { 4387 if (this.parallax && positionedAbsolute(this.$el)) { 4388 return false; 4389 } 4390 4391 return { 4392 scrolled: this.parallax ? 4393 scrolledOver(this.$el) * Math.abs(this.parallax) : 4394 false }; 4395 4396 }, 4397 4398 write(_ref3) {let { columns, scrolled, translates } = _ref3; 4399 if (scrolled === false && !translates) { 4400 return; 4401 } 4402 4403 columns.forEach((column, i) => 4404 column.forEach((el, j) => 4405 css( 4406 el, 4407 'transform', 4408 !scrolled && !translates ? 4409 '' : "translateY(" + ( 4410 4411 (translates && -translates[i][j]) + ( 4412 scrolled ? i % 2 ? scrolled : scrolled / 8 : 0)) + "px)"))); 4413 4414 4415 4416 4417 }, 4418 4419 events: ['scroll', 'resize'] }] }; 4420 4421 4422 4423 4424 function positionedAbsolute(el) { 4425 return children(el).some((el) => css(el, 'position') === 'absolute'); 4426 } 4427 4428 function getTranslates(rows, columns) { 4429 const rowHeights = rows.map((row) => Math.max(...row.map((el) => el.offsetHeight))); 4430 4431 return columns.map((elements) => { 4432 let prev = 0; 4433 return elements.map( 4434 (element, row) => 4435 prev += row ? rowHeights[row - 1] - elements[row - 1].offsetHeight : 0); 4436 4437 }); 4438 } 4439 4440 function getMarginTop(nodes, cls) { 4441 const [node] = nodes.filter((el) => hasClass(el, cls)); 4442 4443 return toFloat(node ? css(node, 'marginTop') : css(nodes[0], 'paddingLeft')); 4444 } 4445 4446 function getColumnHeights(columns) { 4447 return columns.map((column) => column.reduce((sum, el) => sum + el.offsetHeight, 0)); 4448 } 4449 4450 var heightMatch = { 4451 mixins: [Resize], 4452 4453 args: 'target', 4454 4455 props: { 4456 target: String, 4457 row: Boolean }, 4458 4459 4460 data: { 4461 target: '> *', 4462 row: true, 4463 forceHeight: true }, 4464 4465 4466 computed: { 4467 elements: { 4468 get(_ref, $el) {let { target } = _ref; 4469 return $$(target, $el); 4470 }, 4471 4472 watch() { 4473 this.$reset(); 4474 } } }, 4475 4476 4477 4478 resizeTargets() { 4479 return this.elements; 4480 }, 4481 4482 update: { 4483 read() { 4484 return { 4485 rows: (this.row ? getRows(this.elements) : [this.elements]).map(match$1) }; 4486 4487 }, 4488 4489 write(_ref2) {let { rows } = _ref2; 4490 for (const { heights, elements } of rows) {
4491 elements.forEach((el, i) => css(el, 'minHeight', heights[i])); 4492 } 4493 }, 4494 4495 events: ['resize'] } }; 4496 4497 4498 4499 function match$1(elements) { 4500 if (elements.length < 2) { 4501 return { heights: [''], elements }; 4502 } 4503 4504 let heights = elements.map(getHeight); 4505 let max = Math.max(...heights); 4506 const hasMinHeight = elements.some((el) => el.style.minHeight); 4507 const hasShrunk = elements.some((el, i) => !el.style.minHeight && heights[i] < max); 4508 4509 if (hasMinHeight && hasShrunk) { 4510 css(elements, 'minHeight', ''); 4511 heights = elements.map(getHeight); 4512 max = Math.max(...heights); 4513 } 4514 4515 heights = elements.map((el, i) => 4516 heights[i] === max && toFloat(el.style.minHeight).toFixed(2) !== max.toFixed(2) ? '' : max); 4517 4518 4519 return { heights, elements }; 4520 } 4521 4522 function getHeight(element) { 4523 let style = false; 4524 if (!isVisible(element)) { 4525 style = element.style.display; 4526 css(element, 'display', 'block', 'important'); 4527 } 4528 4529 const height = dimensions$1(element).height - boxModelAdjust(element, 'height', 'content-box'); 4530 4531 if (style !== false) { 4532 css(element, 'display', style); 4533 } 4534 4535 return height; 4536 } 4537 4538 var heightViewport = { 4539 mixins: [Class, Resize], 4540 4541 props: { 4542 expand: Boolean, 4543 offsetTop: Boolean, 4544 offsetBottom: Boolean, 4545 minHeight: Number }, 4546 4547 4548 data: { 4549 expand: false, 4550 offsetTop: false, 4551 offsetBottom: false, 4552 minHeight: 0 }, 4553 4554 4555 resizeTargets() { 4556 // check for offsetTop change 4557 return [this.$el, document.documentElement]; 4558 }, 4559 4560 update: { 4561 read(_ref) {let { minHeight: prev } = _ref; 4562 if (!isVisible(this.$el)) { 4563 return false; 4564 } 4565 4566 let minHeight = ''; 4567 const box = boxModelAdjust(this.$el, 'height', 'content-box'); 4568 4569 if (this.expand) { 4570 minHeight = Math.max( 4571 height(window) - ( 4572 dimensions$1(document.documentElement).height - 4573 dimensions$1(this.$el).height) - 4574 box, 4575 0); 4576 4577 } else { 4578 // on mobile devices (iOS and Android) window.innerHeight !== 100vh 4579 minHeight = 'calc(100vh'; 4580 4581 if (this.offsetTop) { 4582 const { top } = offset(this.$el); 4583 minHeight += top > 0 && top < height(window) / 2 ? " - " + top + "px" : ''; 4584 } 4585 4586 if (this.offsetBottom === true) { 4587 minHeight += " - " + dimensions$1(this.$el.nextElementSibling).height + "px"; 4588 } else if (isNumeric(this.offsetBottom)) { 4589 minHeight += " - " + this.offsetBottom + "vh"; 4590 } else if (this.offsetBottom && endsWith(this.offsetBottom, 'px')) { 4591 minHeight += " - " + toFloat(this.offsetBottom) + "px"; 4592 } else if (isString(this.offsetBottom)) { 4593 minHeight += " - " + dimensions$1(query(this.offsetBottom, this.$el)).height + "px"; 4594 } 4595 4596 minHeight += (box ? " - " + box + "px" : '') + ")"; 4597 } 4598 4599 return { minHeight, prev }; 4600 }, 4601 4602 write(_ref2) {let { minHeight } = _ref2; 4603 css(this.$el, { minHeight }); 4604 4605 if (this.minHeight && toFloat(css(this.$el, 'minHeight')) < this.minHeight) { 4606 css(this.$el, 'minHeight', this.minHeight); 4607 } 4608 }, 4609 4610 events: ['resize'] } }; 4611 4612 var SVG = { 4613 args: 'src', 4614 4615 props: { 4616 id: Boolean, 4617 icon: String, 4618 src: String, 4619 style: String, 4620 width: Number, 4621 height: Number, 4622 ratio: Number, 4623 class: String, 4624 strokeAnimation: Boolean, 4625 focusable: Boolean, // IE 11 4626 attributes: 'list' }, 4627 4628 4629 data: { 4630 ratio: 1, 4631 include: ['style', 'class', 'focusable'], 4632 class: '', 4633 strokeAnimation: false }, 4634 4635 4636 beforeConnect() { 4637 this.class += ' uk-svg'; 4638 }, 4639 4640 connected() { 4641 if (!this.icon && includes(this.src, '#')) { 4642 [this.src, this.icon] = this.src.split('#'); 4643 } 4644
4645 this.svg = this.getSvg().then((el) => { 4646 if (this._connected) { 4647 const svg = insertSVG(el, this.$el); 4648 4649 if (this.svgEl && svg !== this.svgEl) { 4650 remove$1(this.svgEl); 4651 } 4652 4653 this.applyAttributes(svg, el); 4654 4655 return this.svgEl = svg; 4656 } 4657 }, noop); 4658 4659 if (this.strokeAnimation) { 4660 this.svg.then((el) => { 4661 if (this._connected) { 4662 applyAnimation(el); 4663 this.registerObserver( 4664 observeIntersection(el, (records, observer) => { 4665 applyAnimation(el); 4666 observer.disconnect(); 4667 })); 4668 4669 } 4670 }); 4671 } 4672 }, 4673 4674 disconnected() { 4675 this.svg.then((svg) => { 4676 if (this._connected) { 4677 return; 4678 } 4679 4680 if (isVoidElement(this.$el)) { 4681 this.$el.hidden = false; 4682 } 4683 4684 remove$1(svg); 4685 this.svgEl = null; 4686 }); 4687 4688 this.svg = null; 4689 }, 4690 4691 methods: { 4692 async getSvg() { 4693 if (isTag(this.$el, 'img') && !this.$el.complete && this.$el.loading === 'lazy') { 4694 return new Promise((resolve) => 4695 once(this.$el, 'load', () => resolve(this.getSvg()))); 4696 4697 } 4698 4699 return parseSVG(await loadSVG(this.src), this.icon) || Promise.reject('SVG not found.'); 4700 }, 4701 4702 applyAttributes(el, ref) { 4703 for (const prop in this.$options.props) { 4704 if (includes(this.include, prop) && prop in this) { 4705 attr(el, prop, this[prop]); 4706 } 4707 } 4708 4709 for (const attribute in this.attributes) { 4710 const [prop, value] = this.attributes[attribute].split(':', 2); 4711 attr(el, prop, value); 4712 } 4713 4714 if (!this.id) { 4715 removeAttr(el, 'id'); 4716 } 4717 4718 const props = ['width', 'height']; 4719 let dimensions = props.map((prop) => this[prop]); 4720 4721 if (!dimensions.some((val) => val)) { 4722 dimensions = props.map((prop) => attr(ref, prop)); 4723 } 4724 4725 const viewBox = attr(ref, 'viewBox'); 4726 if (viewBox && !dimensions.some((val) => val)) { 4727 dimensions = viewBox.split(' ').slice(2); 4728 } 4729 4730 dimensions.forEach((val, i) => attr(el, props[i], toFloat(val) * this.ratio || null)); 4731 } } }; 4732 4733 4734 4735 const loadSVG = memoize(async (src) => { 4736 if (src) { 4737 if (startsWith(src, 'data:')) { 4738 return decodeURIComponent(src.split(',')[1]); 4739 } else { 4740 return (await fetch(src)).text(); 4741 } 4742 } else { 4743 return Promise.reject(); 4744 } 4745 }); 4746 4747 function parseSVG(svg, icon) {var _svg; 4748 if (icon && includes(svg, '<symbol')) { 4749 svg = parseSymbols(svg, icon) || svg; 4750 } 4751 4752 svg = $(svg.substr(svg.indexOf('<svg'))); 4753 return ((_svg = svg) == null ? void 0 : _svg.hasChildNodes()) && svg; 4754 } 4755 4756 const symbolRe = /<symbol([^]*?id=(['"])(.+?)\2[^]*?<\/)symbol>/g; 4757 const symbols = {}; 4758 4759 function parseSymbols(svg, icon) { 4760 if (!symbols[svg]) { 4761 symbols[svg] = {}; 4762 4763 symbolRe.lastIndex = 0; 4764 4765 let match; 4766 while (match = symbolRe.exec(svg)) { 4767 symbols[svg][match[3]] = "<svg xmlns=\"http://www.w3.org/2000/svg\"" + match[1] + "svg>"; 4768 } 4769 } 4770 4771 return symbols[svg][icon]; 4772 } 4773 4774 function applyAnimation(el) { 4775 const length = getMaxPathLength(el); 4776 4777 if (length) { 4778 el.style.setProperty('--uk-animation-stroke', length); 4779 } 4780 } 4781 4782 function getMaxPathLength(el) { 4783 return Math.ceil( 4784 Math.max( 4785 0, 4786 ...$$('[stroke]', el).map((stroke) => { 4787 try { 4788 return stroke.getTotalLength(); 4789 } catch (e) { 4790 return 0; 4791 } 4792 }))); 4793 4794 4795 } 4796 4797 function insertSVG(el, root) { 4798 if (isVoidElement(root) || isTag(root, 'canvas')) { 4799 root.hidden = true; 4800 4801 const next = root.nextElementSibling; 4802 return equals(el, next) ? next : after(root, el); 4803 } 4804 4805 const last = root.lastElementChild; 4806 return equals(el, last) ? last : append(root, el); 4807 } 4808 4809 function equals(el, other) { 4810 return isTag(el, 'svg') && isTag(other, 'svg') && innerHTML(el) === innerHTML(other); 4811 } 4812 4813 function innerHTML(el) { 4814 return ( 4815 el.innerHTML || 4816 new XMLSerializer().serializeToString(el).replace(/<svg.*?>(.*?)<\/svg>/g, '$1')). 4817 replace(/\s/g, ''); 4818 } 4819 4820 var closeIcon = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\"/></svg>"; 4821 4822 var closeLarge = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"1\" y1=\"1\" x2=\"19\" y2=\"19\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"19\" y1=\"1\" x2=\"1\" y2=\"19\"/></svg>"; 4823 4824 var marker = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"9\" y=\"4\" width=\"1\" height=\"11\"/><rect x=\"4\" y=\"9\" width=\"11\" height=\"1\"/></svg>"; 4825 4826 var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect y=\"9\" width=\"20\" height=\"2\"/><rect y=\"3\" width=\"20\" height=\"2\"/><rect y=\"15\" width=\"20\" height=\"2\"/></svg>"; 4827 4828 var overlayIcon = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"19\" y=\"0\" width=\"1\" height=\"40\"/><rect x=\"0\" y=\"19\" width=\"40\" height=\"1\"/></svg>"; 4829 4830 var paginationNext = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 1 6 6 1 11\"/></svg>"; 4831 4832 var paginationPrevious = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"6 1 1 6 6 11\"/></svg>"; 4833 4834 var searchIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9\" cy=\"9\" r=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M14,14 L18,18 L14,14 Z\"/></svg>"; 4835 4836 var searchLarge = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" cx=\"17.5\" cy=\"17.5\" r=\"16.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" x1=\"38\" y1=\"39\" x2=\"29\" y2=\"30\"/></svg>"; 4837 4838 var searchNavbar = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10.5\" cy=\"10.5\" r=\"9.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"23\" y1=\"23\" x2=\"17\" y2=\"17\"/></svg>"; 4839 4840 var slidenavNext = "<svg width=\"14\" height=\"24\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"1.225,23 12.775,12 1.225,1 \"/></svg>"; 4841 4842 var slidenavNextLarge = "<svg width=\"25\" height=\"40\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"4.002,38.547 22.527,20.024 4,1.5 \"/></svg>"; 4843 4844 var slidenavPrevious = "<svg width=\"14\" height=\"24\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"12.775,1 1.225,12 12.775,23 \"/></svg>"; 4845 4846 var slidenavPreviousLarge = "<svg width=\"25\" height=\"40\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"20.527,1.5 2,20.024 20.525,38.547 \"/></svg>"; 4847 4848 var spinner = "<svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" cx=\"15\" cy=\"15\" r=\"14\"/></svg>"; 4849 4850 var totop = "<svg width=\"18\" height=\"10\" viewBox=\"0 0 18 10\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 9 9 1 17 9 \"/></svg>"; 4851 4852 const icons = { 4853 spinner, 4854 totop, 4855 marker, 4856 'close-icon': closeIcon, 4857 'close-large': closeLarge, 4858 'navbar-toggle-icon': navbarToggleIcon, 4859 'overlay-icon': overlayIcon, 4860 'pagination-next': paginationNext, 4861 'pagination-previous': paginationPrevious, 4862 'search-icon': searchIcon, 4863 'search-large': searchLarge, 4864 'search-navbar': searchNavbar, 4865 'slidenav-next': slidenavNext, 4866 'slidenav-next-large': slidenavNextLarge, 4867 'slidenav-previous': slidenavPrevious, 4868 'slidenav-previous-large': slidenavPreviousLarge }; 4869 4870 4871 const Icon = { 4872 install: install$3, 4873 4874 extends: SVG, 4875 4876 args: 'icon', 4877 4878 props: ['icon'], 4879 4880 data: { 4881 include: ['focusable'] }, 4882 4883 4884 isIcon: true, 4885 4886 beforeConnect() { 4887 addClass(this.$el, 'uk-icon'); 4888 }, 4889 4890 methods: { 4891 async getSvg() { 4892 const icon = getIcon(this.icon); 4893 4894 if (!icon) { 4895 throw 'Icon not found.'; 4896 } 4897 4898 return icon; 4899 } } }; 4900 4901 const IconComponent = { 4902 args: false, 4903 4904 extends: Icon, 4905 4906 data: (vm) => ({ 4907 icon: hyphenate(vm.constructor.options.name) }), 4908 4909 4910 beforeConnect() { 4911 addClass(this.$el, this.$name); 4912 } }; 4913 4914 4915 const Slidenav = { 4916 extends: IconComponent, 4917 4918 beforeConnect() { 4919 addClass(this.$el, 'uk-slidenav'); 4920 const icon = this.$props.icon; 4921 this.icon = hasClass(this.$el, 'uk-slidenav-large') ? icon + "-large" : icon; 4922 } }; 4923 4924 4925 const Search = { 4926 extends: IconComponent, 4927 4928 beforeConnect() { 4929 this.icon = 4930 hasClass(this.$el, 'uk-search-icon') && parents(this.$el, '.uk-search-large').length ? 4931 'search-large' : 4932 parents(this.$el, '.uk-search-navbar').length ? 4933 'search-navbar' : 4934 this.$props.icon; 4935 } }; 4936 4937 4938 const Close = { 4939 extends: IconComponent, 4940 4941 beforeConnect() { 4942 this.icon = "close-" + (hasClass(this.$el, 'uk-close-large') ? 'large' : 'icon'); 4943 } }; 4944 4945 4946 const Spinner = { 4947 extends: IconComponent, 4948 4949 methods: { 4950 async getSvg() { 4951 const icon = await Icon.methods.getSvg.call(this); 4952 4953 if (this.ratio !== 1) { 4954 css($('circle', icon), 'strokeWidth', 1 / this.ratio); 4955 } 4956 4957 return icon; 4958 } } }; 4959 4960 4961 4962 const parsed = {}; 4963 function install$3(UIkit) { 4964 UIkit.icon.add = (name, svg) => { 4965 const added = isString(name) ? { [name]: svg } : name; 4966 each(added, (svg, name) => { 4967 icons[name] = svg; 4968 delete parsed[name]; 4969 }); 4970 4971 if (UIkit._initialized) { 4972 apply(document.body, (el) => 4973 each(UIkit.getComponents(el), (cmp) => { 4974 cmp.$options.isIcon && cmp.icon in added && cmp.$reset(); 4975 })); 4976 4977 } 4978 }; 4979 } 4980 4981 function getIcon(icon) { 4982 if (!icons[icon]) { 4983 return null; 4984 } 4985 4986 if (!parsed[icon]) { 4987 parsed[icon] = $((icons[applyRtl(icon)] || icons[icon]).trim()); 4988 } 4989 4990 return parsed[icon].cloneNode(true); 4991 } 4992 4993 function applyRtl(icon) { 4994 return isRtl ? swap(swap(icon, 'left', 'right'), 'previous', 'next') : icon; 4995 } 4996 4997 const nativeLazyLoad = inBrowser && 'loading' in HTMLImageElement.prototype; 4998 4999 var img = { 5000 args: 'dataSrc', 5001 5002 props: { 5003 dataSrc: String, 5004 sources: String, 5005 offsetTop: String, 5006 offsetLeft: String, 5007 target: String,
5008 loading: String }, 5009 5010 5011 data: { 5012 dataSrc: '', 5013 sources: false, 5014 offsetTop: '50vh', 5015 offsetLeft: '50vw', 5016 target: false, 5017 loading: 'lazy' }, 5018 5019 5020 connected() { 5021 if (this.loading !== 'lazy') { 5022 this.load(); 5023 return; 5024 } 5025 5026 const target = [this.$el, ...queryAll(this.$props.target, this.$el)]; 5027 5028 if (nativeLazyLoad && isImg(this.$el)) { 5029 this.$el.loading = 'lazy'; 5030 setSrcAttrs(this.$el); 5031 5032 if (target.length === 1) { 5033 return; 5034 } 5035 } 5036 5037 ensureSrcAttribute(this.$el); 5038 5039 this.registerObserver( 5040 observeIntersection( 5041 target, 5042 (entries, observer) => { 5043 this.load(); 5044 observer.disconnect(); 5045 }, 5046 { 5047 rootMargin: toPx(this.offsetTop, 'height') + "px " + toPx( 5048 this.offsetLeft, 5049 'width') + "px" })); 5050 5051 5052 5053 5054 }, 5055 5056 disconnected() { 5057 if (this._data.image) { 5058 this._data.image.onload = ''; 5059 } 5060 }, 5061 5062 methods: { 5063 load() { 5064 if (this._data.image) { 5065 return this._data.image; 5066 } 5067 5068 const image = isImg(this.$el) ? 5069 this.$el : 5070 getImageFromElement(this.$el, this.dataSrc, this.sources); 5071 5072 removeAttr(image, 'loading'); 5073 setSrcAttrs(this.$el, image.currentSrc); 5074 return this._data.image = image; 5075 } } }; 5076 5077 5078 5079 function setSrcAttrs(el, src) { 5080 if (isImg(el)) { 5081 const parentNode = parent(el); 5082 const elements = isPicture(parentNode) ? children(parentNode) : [el]; 5083 elements.forEach((el) => setSourceProps(el, el)); 5084 } else if (src) { 5085 const change = !includes(el.style.backgroundImage, src); 5086 if (change) { 5087 css(el, 'backgroundImage', "url(" + escape(src) + ")"); 5088 trigger(el, createEvent('load', false)); 5089 } 5090 } 5091 } 5092 5093 const srcProps = ['data-src', 'data-srcset', 'sizes']; 5094 function setSourceProps(sourceEl, targetEl) { 5095 srcProps.forEach((prop) => { 5096 const value = data(sourceEl, prop); 5097 if (value) { 5098 attr(targetEl, prop.replace(/^(data-)+/, ''), value); 5099 } 5100 }); 5101 } 5102 5103 function getImageFromElement(el, src, sources) { 5104 const img = new Image(); 5105 5106 wrapInPicture(img, sources); 5107 setSourceProps(el, img); 5108 img.onload = () => { 5109 setSrcAttrs(el, img.currentSrc); 5110 }; 5111 attr(img, 'src', src); 5112 return img; 5113 } 5114 5115 function wrapInPicture(img, sources) { 5116 sources = parseSources(sources); 5117 5118 if (sources.length) { 5119 const picture = fragment('<picture>'); 5120 for (const attrs of sources) { 5121 const source = fragment('<source>'); 5122 attr(source, attrs); 5123 append(picture, source); 5124 } 5125 append(picture, img); 5126 } 5127 } 5128 5129 function parseSources(sources) { 5130 if (!sources) { 5131 return []; 5132 } 5133 5134 if (startsWith(sources, '[')) { 5135 try { 5136 sources = JSON.parse(sources); 5137 } catch (e) { 5138 sources = []; 5139 } 5140 } else { 5141 sources = parseOptions(sources); 5142 } 5143 5144 if (!isArray(sources)) { 5145 sources = [sources]; 5146 } 5147 5148 return sources.filter((source) => !isEmpty(source)); 5149 } 5150 5151 function ensureSrcAttribute(el) { 5152 if (isImg(el) && !hasAttr(el, 'src')) { 5153 attr(el, 'src', 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"></svg>'); 5154 } 5155 } 5156 5157 function isPicture(el) { 5158 return isTag(el, 'picture'); 5159 } 5160 5161 function isImg(el) { 5162 return isTag(el, 'img'); 5163 } 5164 5165 var Media = { 5166 props: { 5167 media: Boolean }, 5168 5169 5170 data: { 5171 media: false }, 5172 5173 5174 connected() { 5175 const media = toMedia(this.media); 5176 this.mediaObj = window.matchMedia(media); 5177 const handler = () => { 5178 this.matchMedia = this.mediaObj.matches; 5179 trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj])); 5180 }; 5181 this.offMediaObj = on(this.mediaObj, 'change', () => { 5182 handler(); 5183 this.$emit('resize'); 5184 }); 5185 handler(); 5186 }, 5187 5188 disconnected() {var _this$offMediaObj; 5189 (_this$offMediaObj = this.offMediaObj) == null ? void 0 : _this$offMediaObj.call(this); 5190 } }; 5191 5192 5193 function toMedia(value) { 5194 if (isString(value)) { 5195 if (startsWith(value, '@')) { 5196 const name = "breakpoint-" + value.substr(1); 5197 value = toFloat(getCssVar(name)); 5198 } else if (isNaN(value)) { 5199 return value; 5200 } 5201 } 5202 5203 return value && isNumeric(value) ? "(min-width: " + value + "px)" : ''; 5204 } 5205 5206 var leader = { 5207 mixins: [Class, Media, Resize], 5208 5209 props: { 5210 fill: String }, 5211 5212 5213 data: { 5214 fill: '', 5215 clsWrapper: 'uk-leader-fill', 5216 clsHide: 'uk-leader-hide', 5217 attrFill: 'data-fill' }, 5218 5219 5220 computed: { 5221 fill(_ref) {let { fill } = _ref; 5222 return fill || getCssVar('leader-fill-content'); 5223 } },
5224 5225 5226 connected() { 5227 [this.wrapper] = wrapInner(this.$el, "<span class=\"" + this.clsWrapper + "\">"); 5228 }, 5229 5230 disconnected() { 5231 unwrap(this.wrapper.childNodes); 5232 }, 5233 5234 update: { 5235 read() { 5236 const width = Math.trunc(this.$el.offsetWidth / 2); 5237 5238 return { 5239 width, 5240 fill: this.fill, 5241 hide: !this.matchMedia }; 5242 5243 }, 5244 5245 write(_ref2) {let { width, fill, hide } = _ref2; 5246 toggleClass(this.wrapper, this.clsHide, hide); 5247 attr(this.wrapper, this.attrFill, new Array(width).join(fill)); 5248 }, 5249 5250 events: ['resize'] } }; 5251 5252 const active = []; 5253 5254 var Modal = { 5255 mixins: [Class, Container, Togglable], 5256 5257 props: { 5258 selPanel: String, 5259 selClose: String, 5260 escClose: Boolean, 5261 bgClose: Boolean, 5262 stack: Boolean }, 5263 5264 5265 data: { 5266 cls: 'uk-open', 5267 escClose: true, 5268 bgClose: true, 5269 overlay: true, 5270 stack: false }, 5271 5272 5273 computed: { 5274 panel(_ref, $el) {let { selPanel } = _ref; 5275 return $(selPanel, $el); 5276 }, 5277 5278 transitionElement() { 5279 return this.panel; 5280 }, 5281 5282 bgClose(_ref2) {let { bgClose } = _ref2; 5283 return bgClose && this.panel; 5284 } }, 5285 5286 5287 beforeDisconnect() { 5288 if (includes(active, this)) { 5289 this.toggleElement(this.$el, false, false); 5290 } 5291 }, 5292 5293 events: [ 5294 { 5295 name: 'click', 5296 5297 delegate() { 5298 return this.selClose; 5299 }, 5300 5301 handler(e) { 5302 e.preventDefault(); 5303 this.hide(); 5304 } }, 5305 5306 5307 { 5308 name: 'toggle', 5309 5310 self: true, 5311 5312 handler(e) { 5313 if (e.defaultPrevented) { 5314 return; 5315 } 5316 5317 e.preventDefault(); 5318 5319 if (this.isToggled() === includes(active, this)) { 5320 this.toggle(); 5321 } 5322 } }, 5323 5324 5325 { 5326 name: 'beforeshow', 5327 5328 self: true, 5329 5330 handler(e) { 5331 if (includes(active, this)) { 5332 return false; 5333 } 5334 5335 if (!this.stack && active.length) { 5336 Promise.all(active.map((modal) => modal.hide())).then(this.show); 5337 e.preventDefault(); 5338 } else { 5339 active.push(this); 5340 } 5341 } }, 5342 5343 5344 { 5345 name: 'show', 5346 5347 self: true, 5348 5349 handler() { 5350 const docEl = document.documentElement; 5351 5352 if (width(window) > docEl.clientWidth && this.overlay) { 5353 css(document.body, 'overflowY', 'scroll'); 5354 } 5355 5356 if (this.stack) { 5357 css(this.$el, 'zIndex', toFloat(css(this.$el, 'zIndex')) + active.length); 5358 } 5359 5360 addClass(docEl, this.clsPage); 5361 5362 if (this.bgClose) { 5363 once( 5364 this.$el, 5365 'hide', 5366 on(document, pointerDown, (_ref3) => {let { target } = _ref3; 5367 if ( 5368 last(active) !== this || 5369 this.overlay && !within(target, this.$el) || 5370 within(target, this.panel)) 5371 { 5372 return; 5373 } 5374 5375 once( 5376 document, 5377 pointerUp + " " + pointerCancel + " scroll", 5378 (_ref4) => {let { defaultPrevented, type, target: newTarget } = _ref4; 5379 if ( 5380 !defaultPrevented && 5381 type === pointerUp && 5382 target === newTarget) 5383 { 5384 this.hide(); 5385 } 5386 }, 5387 true); 5388 5389 }), 5390 { self: true }); 5391 5392 } 5393 5394 if (this.escClose) { 5395 once( 5396 this.$el, 5397 'hide', 5398 on(document, 'keydown', (e) => { 5399 if (e.keyCode === 27 && last(active) === this) { 5400 this.hide(); 5401 } 5402 }), 5403 { self: true }); 5404 5405 } 5406 } }, 5407 5408 5409 { 5410 name: 'shown', 5411 5412 self: true, 5413 5414 handler() { 5415 if (!isFocusable(this.$el)) { 5416 attr(this.$el, 'tabindex', '-1'); 5417 } 5418 5419 if (!$(':focus', this.$el)) { 5420 this.$el.focus(); 5421 } 5422 } },
5423 5424 5425 { 5426 name: 'hidden', 5427 5428 self: true, 5429 5430 handler() { 5431 if (includes(active, this)) { 5432 active.splice(active.indexOf(this), 1); 5433 } 5434 5435 if (!active.length) { 5436 css(document.body, 'overflowY', ''); 5437 } 5438 5439 css(this.$el, 'zIndex', ''); 5440 5441 if (!active.some((modal) => modal.clsPage === this.clsPage)) { 5442 removeClass(document.documentElement, this.clsPage); 5443 } 5444 } }], 5445 5446 5447 5448 methods: { 5449 toggle() { 5450 return this.isToggled() ? this.hide() : this.show(); 5451 }, 5452 5453 show() { 5454 if (this.container && parent(this.$el) !== this.container) { 5455 append(this.container, this.$el); 5456 return new Promise((resolve) => 5457 requestAnimationFrame(() => this.show().then(resolve))); 5458 5459 } 5460 5461 return this.toggleElement(this.$el, true, animate(this)); 5462 }, 5463 5464 hide() { 5465 return this.toggleElement(this.$el, false, animate(this)); 5466 } } }; 5467 5468 5469 5470 function animate(_ref5) {let { transitionElement, _toggle } = _ref5; 5471 return (el, show) => 5472 new Promise((resolve, reject) => 5473 once(el, 'show hide', () => { 5474 el._reject && el._reject(); 5475 el._reject = reject; 5476 5477 _toggle(el, show); 5478 5479 const off = once( 5480 transitionElement, 5481 'transitionstart', 5482 () => { 5483 once(transitionElement, 'transitionend transitioncancel', resolve, { 5484 self: true }); 5485 5486 clearTimeout(timer); 5487 }, 5488 { self: true }); 5489 5490 5491 const timer = setTimeout(() => { 5492 off(); 5493 resolve(); 5494 }, toMs(css(transitionElement, 'transitionDuration'))); 5495 })). 5496 then(() => delete el._reject); 5497 } 5498 5499 var modal = { 5500 install: install$2, 5501 5502 mixins: [Modal], 5503 5504 data: { 5505 clsPage: 'uk-modal-page', 5506 selPanel: '.uk-modal-dialog', 5507 selClose: 5508 '.uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full' }, 5509 5510 5511 events: [ 5512 { 5513 name: 'show', 5514 5515 self: true, 5516 5517 handler() { 5518 if (hasClass(this.panel, 'uk-margin-auto-vertical')) { 5519 addClass(this.$el, 'uk-flex'); 5520 } else { 5521 css(this.$el, 'display', 'block'); 5522 } 5523 5524 height(this.$el); // force reflow 5525 } }, 5526 5527 5528 { 5529 name: 'hidden', 5530 5531 self: true, 5532 5533 handler() { 5534 css(this.$el, 'display', ''); 5535 removeClass(this.$el, 'uk-flex'); 5536 } }] }; 5537 5538 5539 5540 5541 function install$2(_ref) {let { modal } = _ref; 5542 modal.dialog = function (content, options) { 5543 const dialog = modal("<div class=\"uk-modal\"> <div class=\"uk-modal-dialog\">" + 5544 5545 content + "</div> </div>", 5546 5547 options); 5548 5549 5550 dialog.show(); 5551 5552 on( 5553 dialog.$el, 5554 'hidden', 5555 async () => { 5556 await Promise.resolve(); 5557 dialog.$destroy(true); 5558 }, 5559 { self: true }); 5560 5561 5562 return dialog; 5563 }; 5564 5565 modal.alert = function (message, options) { 5566 return openDialog( 5567 (_ref2) => {let { labels } = _ref2;return "<div class=\"uk-modal-body\">" + ( 5568 isString(message) ? message : html(message)) + "</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-primary uk-modal-close\" autofocus>" + 5569 5570 5571 5572 labels.ok + "</button> </div>";}, 5573 5574 5575 options, 5576 (deferred) => deferred.resolve()); 5577 5578 }; 5579 5580 modal.confirm = function (message, options) { 5581 return openDialog( 5582 (_ref3) => {let { labels } = _ref3;return "<form> <div class=\"uk-modal-body\">" + ( 5583 isString(message) ? message : html(message)) + "</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">" + 5584 5585 5586 labels.cancel + "</button> <button class=\"uk-button uk-button-primary\" autofocus>" + 5587 5588 labels.ok + "</button> </div> </form>";}, 5589 5590 5591 options, 5592 (deferred) => deferred.reject()); 5593 5594 }; 5595 5596 modal.prompt = function (message, value, options) { 5597 return openDialog( 5598 (_ref4) => {let { labels } = _ref4;return "<form class=\"uk-form-stacked\"> <div class=\"uk-modal-body\"> <label>" + ( 5599 5600 isString(message) ? message : html(message)) + "</label> <input class=\"uk-input\" value=\"" + ( 5601 value || '') + "\" autofocus> </div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">" + 5602 5603 5604 5605 labels.cancel + "</button> <button class=\"uk-button uk-button-primary\">" + 5606 5607 labels.ok + "</button> </div> </form>";}, 5608 5609 5610 options, 5611 (deferred) => deferred.resolve(null), 5612 (dialog) => $('input', dialog.$el).value); 5613 5614 }; 5615 5616 modal.labels = { 5617 ok: 'Ok', 5618 cancel: 'Cancel' }; 5619 5620 5621 function openDialog(tmpl, options, hideFn, submitFn) { 5622 options = { bgClose: false, escClose: true, labels: modal.labels, ...options }; 5623 5624 const dialog = modal.dialog(tmpl(options), options); 5625 const deferred = new Deferred(); 5626 5627 let resolved = false;
5628 5629 on(dialog.$el, 'submit', 'form', (e) => { 5630 e.preventDefault(); 5631 deferred.resolve(submitFn == null ? void 0 : submitFn(dialog)); 5632 resolved = true; 5633 dialog.hide(); 5634 }); 5635 5636 on(dialog.$el, 'hide', () => !resolved && hideFn(deferred)); 5637 5638 deferred.promise.dialog = dialog; 5639 5640 return deferred.promise; 5641 } 5642 } 5643 5644 var nav = { 5645 extends: Accordion, 5646 5647 data: { 5648 targets: '> .uk-parent', 5649 toggle: '> a', 5650 content: '> ul' } }; 5651 5652 const navItem = '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle'; 5653 5654 var navbar = { 5655 mixins: [Class, Container], 5656 5657 props: { 5658 dropdown: String, 5659 mode: 'list', 5660 align: String, 5661 offset: Number, 5662 boundary: Boolean, 5663 boundaryAlign: Boolean, 5664 clsDrop: String, 5665 delayShow: Number, 5666 delayHide: Number, 5667 dropbar: Boolean, 5668 dropbarAnchor: Boolean, 5669 duration: Number }, 5670 5671 5672 data: { 5673 dropdown: navItem, 5674 align: isRtl ? 'right' : 'left', 5675 clsDrop: 'uk-navbar-dropdown', 5676 mode: undefined, 5677 offset: undefined, 5678 delayShow: undefined, 5679 delayHide: undefined, 5680 boundaryAlign: undefined, 5681 flip: 'x', 5682 boundary: true, 5683 dropbar: false, 5684 dropbarAnchor: false, 5685 duration: 200, 5686 forceHeight: true, 5687 selMinHeight: navItem, 5688 container: false }, 5689 5690 5691 computed: { 5692 boundary(_ref, $el) {let { boundary } = _ref; 5693 return boundary === true ? $el : boundary; 5694 }, 5695 5696 dropbarAnchor(_ref2, $el) {let { dropbarAnchor } = _ref2; 5697 return query(dropbarAnchor, $el); 5698 }, 5699 5700 pos(_ref3) {let { align } = _ref3; 5701 return "bottom-" + align; 5702 }, 5703 5704 dropbar: { 5705 get(_ref4) {let { dropbar } = _ref4; 5706 if (!dropbar) { 5707 return null; 5708 } 5709 5710 dropbar = 5711 this._dropbar || 5712 query(dropbar, this.$el) || 5713 $('+ .uk-navbar-dropbar', this.$el); 5714 5715 return dropbar ? dropbar : this._dropbar = $('<div></div>'); 5716 }, 5717 5718 watch(dropbar) { 5719 addClass(dropbar, 'uk-navbar-dropbar'); 5720 }, 5721 5722 immediate: true }, 5723 5724 5725 dropContainer(_, $el) { 5726 return this.container || $el; 5727 }, 5728 5729 dropdowns: { 5730 get(_ref5, $el) {let { clsDrop } = _ref5; 5731 const dropdowns = $$("." + clsDrop, $el); 5732 5733 if (this.dropContainer !== $el) { 5734 for (const el of $$("." + clsDrop, this.dropContainer)) {var _this$getDropdown; 5735 const target = (_this$getDropdown = this.getDropdown(el)) == null ? void 0 : _this$getDropdown.target; 5736 if (!includes(dropdowns, el) && target && within(target, this.$el)) { 5737 dropdowns.push(el); 5738 } 5739 } 5740 } 5741 5742 return dropdowns; 5743 }, 5744 5745 watch(dropdowns) { 5746 this.$create( 5747 'drop', 5748 dropdowns.filter((el) => !this.getDropdown(el)), 5749 { 5750 ...this.$props, 5751 boundary: this.boundary, 5752 pos: this.pos, 5753 offset: this.dropbar || this.offset }); 5754 5755 5756 }, 5757 5758 immediate: true }, 5759 5760 5761 toggles(_ref6, $el) {let { dropdown } = _ref6; 5762 return $$(dropdown, $el); 5763 } }, 5764 5765 5766 disconnected() { 5767 this.dropbar && remove$1(this.dropbar); 5768 delete this._dropbar; 5769 }, 5770 5771 events: [ 5772 { 5773 name: 'mouseover focusin', 5774 5775 delegate() { 5776 return this.dropdown; 5777 }, 5778 5779 handler(_ref7) {let { current } = _ref7; 5780 const active = this.getActive(); 5781 if ( 5782 active && 5783 includes(active.mode, 'hover') && 5784 active.target && 5785 !within(active.target, current) && 5786 !active.isDelaying) 5787 { 5788 active.hide(false); 5789 } 5790 } }, 5791 5792 5793 { 5794 name: 'keydown', 5795 5796 delegate() { 5797 return this.dropdown; 5798 }, 5799 5800 handler(e) { 5801 const { current, keyCode } = e; 5802 const active = this.getActive(); 5803 5804 if (keyCode === keyMap.DOWN && hasAttr(current, 'aria-expanded')) { 5805 e.preventDefault(); 5806 5807 if (!active || active.target !== current) { 5808 current.click(); 5809 once(this.dropContainer, 'show', (_ref8) => {let { target } = _ref8;return ( 5810 focusFirstFocusableElement(target));}); 5811 5812 } else { 5813 focusFirstFocusableElement(active.$el); 5814 } 5815 } 5816 5817 handleNavItemNavigation(e, this.toggles, active); 5818 } },
5819 5820 5821 { 5822 name: 'keydown', 5823 5824 el() { 5825 return this.dropContainer; 5826 }, 5827 5828 delegate() { 5829 return "." + this.clsDrop; 5830 }, 5831 5832 handler(e) { 5833 const { current, keyCode } = e; 5834 5835 if (!includes(this.dropdowns, current)) { 5836 return; 5837 } 5838 5839 const active = this.getActive(); 5840 const elements = $$(selFocusable, current); 5841 const i = findIndex(elements, (el) => matches(el, ':focus')); 5842 5843 if (keyCode === keyMap.UP) { 5844 e.preventDefault(); 5845 if (i > 0) { 5846 elements[i - 1].focus(); 5847 } 5848 } 5849 5850 if (keyCode === keyMap.DOWN) { 5851 e.preventDefault(); 5852 if (i < elements.length - 1) { 5853 elements[i + 1].focus(); 5854 } 5855 } 5856 5857 if (keyCode === keyMap.ESC) {var _active$target; 5858 active == null ? void 0 : (_active$target = active.target) == null ? void 0 : _active$target.focus(); 5859 } 5860 5861 handleNavItemNavigation(e, this.toggles, active); 5862 } }, 5863 5864 5865 { 5866 name: 'mouseleave', 5867 5868 el() { 5869 return this.dropbar; 5870 }, 5871 5872 filter() { 5873 return this.dropbar; 5874 }, 5875 5876 handler() { 5877 const active = this.getActive(); 5878 5879 if ( 5880 active && 5881 includes(active.mode, 'hover') && 5882 !this.dropdowns.some((el) => matches(el, ':hover'))) 5883 { 5884 active.hide(); 5885 } 5886 } }, 5887 5888 5889 { 5890 name: 'beforeshow', 5891 5892 el() { 5893 return this.dropContainer; 5894 }, 5895 5896 filter() { 5897 return this.dropbar; 5898 }, 5899 5900 handler(_, _ref9) {let { $el } = _ref9; 5901 if (!hasClass($el, this.clsDrop)) { 5902 return; 5903 } 5904 5905 if (!parent(this.dropbar)) { 5906 after(this.dropbarAnchor || this.$el, this.dropbar); 5907 } 5908 5909 addClass($el, this.clsDrop + "-dropbar"); 5910 } }, 5911 5912 5913 { 5914 name: 'show', 5915 5916 el() { 5917 return this.dropContainer; 5918 }, 5919 5920 filter() { 5921 return this.dropbar; 5922 }, 5923 5924 handler(_, _ref10) {let { $el, dir } = _ref10; 5925 if (!hasClass($el, this.clsDrop)) { 5926 return; 5927 } 5928 5929 if (dir === 'bottom') { 5930 this.transitionTo( 5931 offset($el).bottom - 5932 offset(this.dropbar).top + 5933 toFloat(css($el, 'marginBottom')), 5934 $el); 5935 5936 } 5937 } }, 5938 5939 5940 { 5941 name: 'beforehide', 5942 5943 el() { 5944 return this.dropContainer; 5945 }, 5946 5947 filter() { 5948 return this.dropbar; 5949 }, 5950 5951 handler(e, _ref11) {let { $el } = _ref11; 5952 const active = this.getActive(); 5953 5954 if ( 5955 matches(this.dropbar, ':hover') && 5956 (active == null ? void 0 : active.$el) === $el && 5957 !this.toggles.some((el) => active.target !== el && matches(el, ':focus'))) 5958 { 5959 e.preventDefault(); 5960 } 5961 } }, 5962 5963 5964 { 5965 name: 'hide', 5966 5967 el() { 5968 return this.dropContainer; 5969 }, 5970 5971 filter() { 5972 return this.dropbar; 5973 }, 5974 5975 handler(_, _ref12) {let { $el } = _ref12; 5976 if (!hasClass($el, this.clsDrop)) { 5977 return; 5978 } 5979 5980 const active = this.getActive(); 5981 5982 if (!active || (active == null ? void 0 : active.$el) === $el) { 5983 this.transitionTo(0); 5984 } 5985 } }], 5986 5987 5988 5989 methods: { 5990 getActive() { 5991 return active$1 && within(active$1.target, this.$el) && active$1; 5992 }, 5993 5994 transitionTo(newHeight, el) { 5995 const { dropbar } = this; 5996 const oldHeight = isVisible(dropbar) ? height(dropbar) : 0; 5997 5998 el = oldHeight < newHeight && el; 5999 6000 css(el, 'clip', "rect(0," + el.offsetWidth + "px," + oldHeight + "px,0)"); 6001 6002 height(dropbar, oldHeight); 6003 6004 Transition.cancel([el, dropbar]); 6005 return Promise.all([ 6006 Transition.start(dropbar, { height: newHeight }, this.duration), 6007 Transition.start( 6008 el, 6009 { clip: "rect(0," + el.offsetWidth + "px," + newHeight + "px,0
6009)" }, 6010 this.duration)]). 6011 6012 6013 catch(noop). 6014 then(() => { 6015 css(el, { clip: '' }); 6016 this.$update(dropbar); 6017 }); 6018 }, 6019 6020 getDropdown(el) { 6021 return this.$getComponent(el, 'drop') || this.$getComponent(el, 'dropdown'); 6022 } } }; 6023 6024 6025 6026 function handleNavItemNavigation(e, toggles, active) { 6027 const { current, keyCode } = e; 6028 const target = (active == null ? void 0 : active.target) || current; 6029 const i = toggles.indexOf(target); 6030 6031 // Left 6032 if (keyCode === keyMap.LEFT && i > 0) { 6033 active == null ? void 0 : active.hide(false); 6034 toggles[i - 1].focus(); 6035 } 6036 6037 // Right 6038 if (keyCode === keyMap.RIGHT && i < toggles.length - 1) { 6039 active == null ? void 0 : active.hide(false); 6040 toggles[i + 1].focus(); 6041 } 6042 6043 if (keyCode === keyMap.TAB) { 6044 target.focus(); 6045 active == null ? void 0 : active.hide(false); 6046 } 6047 } 6048 6049 function focusFirstFocusableElement(el) { 6050 if (!$(':focus', el)) {var _$; 6051 (_$ = $(selFocusable, el)) == null ? void 0 : _$.focus(); 6052 } 6053 } 6054 6055 const keyMap = { 6056 TAB: 9, 6057 ESC: 27, 6058 LEFT: 37, 6059 UP: 38, 6060 RIGHT: 39, 6061 DOWN: 40 }; 6062 6063 var Swipe = { 6064 props: { 6065 swiping: Boolean }, 6066 6067 6068 data: { 6069 swiping: true }, 6070 6071 6072 computed: { 6073 swipeTarget(props, $el) { 6074 return $el; 6075 } }, 6076 6077 6078 connected() { 6079 if (!this.swiping) { 6080 return; 6081 } 6082 6083 registerEvent(this, { 6084 el: this.swipeTarget, 6085 name: pointerDown, 6086 passive: true, 6087 handler(e) { 6088 if (!isTouch(e)) { 6089 return; 6090 } 6091 6092 // Handle Swipe Gesture 6093 const pos = getEventPos(e); 6094 const target = 'tagName' in e.target ? e.target : parent(e.target); 6095 once(document, pointerUp + " " + pointerCancel + " scroll", (e) => { 6096 const { x, y } = getEventPos(e); 6097 6098 // swipe 6099 if ( 6100 e.type !== 'scroll' && target && x && Math.abs(pos.x - x) > 100 || 6101 y && Math.abs(pos.y - y) > 100) 6102 { 6103 setTimeout(() => { 6104 trigger(target, 'swipe'); 6105 trigger(target, "swipe" + swipeDirection(pos.x, pos.y, x, y)); 6106 }); 6107 } 6108 }); 6109 } }); 6110 6111 } }; 6112 6113 6114 function swipeDirection(x1, y1, x2, y2) { 6115 return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? 6116 x1 - x2 > 0 ? 6117 'Left' : 6118 'Right' : 6119 y1 - y2 > 0 ? 6120 'Up' : 6121 'Down'; 6122 } 6123 6124 var offcanvas = { 6125 mixins: [Modal, Swipe], 6126 6127 args: 'mode', 6128 6129 props: { 6130 mode: String, 6131 flip: Boolean, 6132 overlay: Boolean }, 6133 6134 6135 data: { 6136 mode: 'slide', 6137 flip: false, 6138 overlay: false, 6139 clsPage: 'uk-offcanvas-page', 6140 clsContainer: 'uk-offcanvas-container', 6141 selPanel: '.uk-offcanvas-bar', 6142 clsFlip: 'uk-offcanvas-flip', 6143 clsContainerAnimation: 'uk-offcanvas-container-animation', 6144 clsSidebarAnimation: 'uk-offcanvas-bar-animation', 6145 clsMode: 'uk-offcanvas', 6146 clsOverlay: 'uk-offcanvas-overlay', 6147 selClose: '.uk-offcanvas-close', 6148 container: false }, 6149 6150 6151 computed: { 6152 clsFlip(_ref) {let { flip, clsFlip } = _ref; 6153 return flip ? clsFlip : ''; 6154 }, 6155 6156 clsOverlay(_ref2) {let { overlay, clsOverlay } = _ref2; 6157 return overlay ? clsOverlay : ''; 6158 }, 6159 6160 clsMode(_ref3) {let { mode, clsMode } = _ref3; 6161 return clsMode + "-" + mode; 6162 }, 6163 6164 clsSidebarAnimation(_ref4) {let { mode, clsSidebarAnimation } = _ref4; 6165 return mode === 'none' || mode === 'reveal' ? '' : clsSidebarAnimation; 6166 }, 6167 6168 clsContainerAnimation(_ref5) {let { mode, clsContainerAnimation } = _ref5; 6169 return mode !== 'push' && mode !== 'reveal' ? '' : clsContainerAnimation; 6170 }, 6171 6172 transitionElement(_ref6) {let { mode } = _ref6; 6173 return mode === 'reveal' ? parent(this.panel) : this.panel; 6174 } },
6175 6176 6177 update: { 6178 read() { 6179 if (this.isToggled() && !isVisible(this.$el)) { 6180 this.hide(); 6181 } 6182 }, 6183 6184 events: ['resize'] }, 6185 6186 6187 events: [ 6188 { 6189 name: 'click', 6190 6191 delegate() { 6192 return 'a[href^="#"]'; 6193 }, 6194 6195 handler(_ref7) {let { current: { hash }, defaultPrevented } = _ref7; 6196 if (!defaultPrevented && hash && $(hash, document.body)) { 6197 this.hide(); 6198 } 6199 } }, 6200 6201 6202 { 6203 name: 'touchstart', 6204 6205 passive: true, 6206 6207 el() { 6208 return this.panel; 6209 }, 6210 6211 handler(_ref8) {let { targetTouches } = _ref8; 6212 if (targetTouches.length === 1) { 6213 this.clientY = targetTouches[0].clientY; 6214 } 6215 } }, 6216 6217 6218 { 6219 name: 'touchmove', 6220 6221 self: true, 6222 passive: false, 6223 6224 filter() { 6225 return this.overlay; 6226 }, 6227 6228 handler(e) { 6229 e.cancelable && e.preventDefault(); 6230 } }, 6231 6232 6233 { 6234 name: 'touchmove', 6235 6236 passive: false, 6237 6238 el() { 6239 return this.panel; 6240 }, 6241 6242 handler(e) { 6243 if (e.targetTouches.length !== 1) { 6244 return; 6245 } 6246 6247 const clientY = e.targetTouches[0].clientY - this.clientY; 6248 const { scrollTop, scrollHeight, clientHeight } = this.panel; 6249 6250 if ( 6251 clientHeight >= scrollHeight || 6252 scrollTop === 0 && clientY > 0 || 6253 scrollHeight - scrollTop <= clientHeight && clientY < 0) 6254 { 6255 e.cancelable && e.preventDefault(); 6256 } 6257 } }, 6258 6259 6260 { 6261 name: 'show', 6262 6263 self: true, 6264 6265 handler() { 6266 if (this.mode === 'reveal' && !hasClass(parent(this.panel), this.clsMode)) { 6267 wrapAll(this.panel, '<div>'); 6268 addClass(parent(this.panel), this.clsMode); 6269 } 6270 6271 css(document.documentElement, 'overflowY', this.overlay ? 'hidden' : ''); 6272 addClass(document.body, this.clsContainer, this.clsFlip); 6273 css(document.body, 'touch-action', 'pan-y pinch-zoom'); 6274 css(this.$el, 'display', 'block'); 6275 addClass(this.$el, this.clsOverlay); 6276 addClass( 6277 this.panel, 6278 this.clsSidebarAnimation, 6279 this.mode !== 'reveal' ? this.clsMode : ''); 6280 6281 6282 height(document.body); // force reflow 6283 addClass(document.body, this.clsContainerAnimation); 6284 6285 this.clsContainerAnimation && suppressUserScale(); 6286 } }, 6287 6288 6289 { 6290 name: 'hide', 6291 6292 self: true, 6293 6294 handler() { 6295 removeClass(document.body, this.clsContainerAnimation); 6296 css(document.body, 'touch-action', ''); 6297 } }, 6298 6299 6300 { 6301 name: 'hidden', 6302 6303 self: true, 6304 6305 handler() { 6306 this.clsContainerAnimation && resumeUserScale(); 6307 6308 if (this.mode === 'reveal') { 6309 unwrap(this.panel); 6310 } 6311 6312 removeClass(this.panel, this.clsSidebarAnimation, this.clsMode); 6313 removeClass(this.$el, this.clsOverlay); 6314 css(this.$el, 'display', ''); 6315 removeClass(document.body, this.clsContainer, this.clsFlip); 6316 6317 css(document.documentElement, 'overflowY', ''); 6318 } }, 6319 6320 6321 { 6322 name: 'swipeLeft swipeRight', 6323 6324 handler(e) { 6325 if (this.isToggled() && endsWith(e.type, 'Left') ^ this.flip) { 6326 this.hide(); 6327 } 6328 } }] }; 6329 6330 6331 6332 6333 // Chrome in responsive mode zooms page upon opening offcanvas 6334 function suppressUserScale() { 6335 getViewport().content += ',user-scalable=0'; 6336 } 6337 6338 function resumeUserScale() { 6339 const viewport = getViewport(); 6340 viewport.content = viewport.content.replace(/,user-scalable=0$/, ''); 6341 } 6342 6343 function getViewport() { 6344 return ( 6345 $('meta[name="viewport"]', document.head) || append(document.head, '<meta name="viewport">')); 6346 6347 } 6348 6349 var overflowAuto = { 6350 mixins: [Class, Resize], 6351 6352 props: { 6353 selContainer: String, 6354 selContent: String, 6355 minHeight: Number }, 6356 6357 6358 data: { 6359 selContainer: '.uk-modal', 6360 selContent: '.uk-modal-dialog', 6361 minHeight: 150 },
6362 6363 6364 computed: { 6365 container(_ref, $el) {let { selContainer } = _ref; 6366 return closest($el, selContainer); 6367 }, 6368 6369 content(_ref2, $el) {let { selContent } = _ref2; 6370 return closest($el, selContent); 6371 } }, 6372 6373 6374 resizeTargets() { 6375 return [this.container, this.content]; 6376 }, 6377 6378 update: { 6379 read() { 6380 if (!this.content || !this.container || !isVisible(this.$el)) { 6381 return false; 6382 } 6383 6384 return { 6385 max: Math.max( 6386 this.minHeight, 6387 height(this.container) - (dimensions$1(this.content).height - height(this.$el))) }; 6388 6389 6390 }, 6391 6392 write(_ref3) {let { max } = _ref3; 6393 css(this.$el, { minHeight: this.minHeight, maxHeight: max }); 6394 }, 6395 6396 events: ['resize'] } }; 6397 6398 var responsive = { 6399 mixins: [Resize], 6400 6401 props: ['width', 'height'], 6402 6403 resizeTargets() { 6404 return [this.$el, parent(this.$el)]; 6405 }, 6406 6407 connected() { 6408 addClass(this.$el, 'uk-responsive-width'); 6409 }, 6410 6411 update: { 6412 read() { 6413 return isVisible(this.$el) && this.width && this.height ? 6414 { width: width(parent(this.$el)), height: this.height } : 6415 false; 6416 }, 6417 6418 write(dim) { 6419 height( 6420 this.$el, 6421 Dimensions.contain( 6422 { 6423 height: this.height, 6424 width: this.width }, 6425 6426 dim). 6427 height); 6428 6429 }, 6430 6431 events: ['resize'] } }; 6432 6433 var scroll = { 6434 props: { 6435 offset: Number }, 6436 6437 6438 data: { 6439 offset: 0 }, 6440 6441 6442 methods: { 6443 async scrollTo(el) { 6444 el = el && $(el) || document.body; 6445 6446 if (trigger(this.$el, 'beforescroll', [this, el])) { 6447 await scrollIntoView(el, { offset: this.offset }); 6448 trigger(this.$el, 'scrolled', [this, el]); 6449 } 6450 } }, 6451 6452 6453 events: { 6454 click(e) { 6455 if (e.defaultPrevented) { 6456 return; 6457 } 6458 6459 e.preventDefault(); 6460 this.scrollTo(getTargetElement(this.$el)); 6461 } } }; 6462 6463 6464 6465 function getTargetElement(el) { 6466 return document.getElementById(decodeURIComponent(el.hash).substring(1)); 6467 } 6468 6469 const stateKey = '_ukScrollspy'; 6470 var scrollspy = { 6471 mixins: [Scroll], 6472 6473 args: 'cls', 6474 6475 props: { 6476 cls: String, 6477 target: String, 6478 hidden: Boolean, 6479 offsetTop: Number, 6480 offsetLeft: Number, 6481 repeat: Boolean, 6482 delay: Number }, 6483 6484 6485 data: () => ({ 6486 cls: '', 6487 target: false, 6488 hidden: true, 6489 offsetTop: 0, 6490 offsetLeft: 0, 6491 repeat: false, 6492 delay: 0, 6493 inViewClass: 'uk-scrollspy-inview' }), 6494 6495 6496 computed: { 6497 elements: { 6498 get(_ref, $el) {let { target } = _ref; 6499 return target ? $$(target, $el) : [$el]; 6500 }, 6501 6502 watch(elements) { 6503 if (this.hidden) { 6504 css(filter$1(elements, ":not(." + this.inViewClass + ")"), 'visibility', 'hidden'); 6505 } 6506 }, 6507 6508 immediate: true } }, 6509 6510 6511 6512 disconnected() { 6513 for (const el of this.elements) {var _el$stateKey; 6514 removeClass(el, this.inViewClass, ((_el$stateKey = el[stateKey]) == null ? void 0 : _el$stateKey.cls) || ''); 6515 delete el[stateKey]; 6516 } 6517 }, 6518 6519 update: [ 6520 { 6521 read() { 6522 for (const el of this.elements) { 6523 if (!el[stateKey]) { 6524 el[stateKey] = { cls: data(el, 'uk-scrollspy-class') || this.cls }; 6525 } 6526 6527 if (!this.repeat && el[stateKey].show) { 6528 continue; 6529 } 6530 6531 el[stateKey].show = isInView(el, this.offsetTop, this.offsetLeft); 6532 } 6533 }, 6534 6535 write(data) { 6536 for (const el of this.elements) { 6537 const state = el[stateKey]; 6538 6539 if (state.show && !state.inview && !state.queued) { 6540 state.queued = true; 6541 6542 data.promise = (data.promise || Promise.resolve()). 6543 then(() => new Promise((resolve) => setTimeout(resolve, this.delay))). 6544 then(() => { 6545 this.toggle(el, true); 6546 setTimeout(() => { 6547 state.queued = false;
6548 this.$emit(); 6549 }, 300); 6550 }); 6551 } else if (!state.show && state.inview && !state.queued && this.repeat) { 6552 this.toggle(el, false); 6553 } 6554 } 6555 }, 6556 6557 events: ['scroll', 'resize'] }], 6558 6559 6560 6561 methods: { 6562 toggle(el, inview) { 6563 const state = el[stateKey]; 6564 6565 state.off == null ? void 0 : state.off(); 6566 6567 css(el, 'visibility', !inview && this.hidden ? 'hidden' : ''); 6568 6569 toggleClass(el, this.inViewClass, inview); 6570 toggleClass(el, state.cls); 6571 6572 if (/\buk-animation-/.test(state.cls)) { 6573 const removeAnimationClasses = () => removeClasses(el, 'uk-animation-[\\w-]+'); 6574 if (inview) { 6575 state.off = once(el, 'animationcancel animationend', removeAnimationClasses); 6576 } else { 6577 removeAnimationClasses(); 6578 } 6579 } 6580 6581 trigger(el, inview ? 'inview' : 'outview'); 6582 6583 state.inview = inview; 6584 6585 this.$update(el); 6586 } } }; 6587 6588 var scrollspyNav = { 6589 mixins: [Scroll], 6590 6591 props: { 6592 cls: String, 6593 closest: String, 6594 scroll: Boolean, 6595 overflow: Boolean, 6596 offset: Number }, 6597 6598 6599 data: { 6600 cls: 'uk-active', 6601 closest: false, 6602 scroll: false, 6603 overflow: true, 6604 offset: 0 }, 6605 6606 6607 computed: { 6608 links: { 6609 get(_, $el) { 6610 return $$('a[href^="#"]', $el).filter((el) => el.hash); 6611 }, 6612 6613 watch(links) { 6614 if (this.scroll) { 6615 this.$create('scroll', links, { offset: this.offset || 0 }); 6616 } 6617 }, 6618 6619 immediate: true }, 6620 6621 6622 elements(_ref) {let { closest: selector } = _ref; 6623 return closest(this.links, selector || '*'); 6624 } }, 6625 6626 6627 update: [ 6628 { 6629 read() { 6630 const targets = this.links.map(getTargetElement).filter(Boolean); 6631 6632 const { length } = targets; 6633 6634 if (!length || !isVisible(this.$el)) { 6635 return false; 6636 } 6637 6638 const [scrollElement] = scrollParents(targets, /auto|scroll/, true); 6639 const { scrollTop, scrollHeight } = scrollElement; 6640 const max = scrollHeight - getViewportClientHeight(scrollElement); 6641 let active = false; 6642 6643 if (scrollTop === max) { 6644 active = length - 1; 6645 } else { 6646 for (const i in targets) { 6647 if ( 6648 offset(targets[i]).top - 6649 offset(getViewport$1(scrollElement)).top - 6650 this.offset > 6651 0) 6652 { 6653 break; 6654 } 6655 active = +i; 6656 } 6657 6658 if (active === false && this.overflow) { 6659 active = 0; 6660 } 6661 } 6662 6663 return { active }; 6664 }, 6665 6666 write(_ref2) {let { active } = _ref2; 6667 const changed = active !== false && !hasClass(this.elements[active], this.cls); 6668 6669 this.links.forEach((el) => el.blur()); 6670 for (const i in this.elements) { 6671 toggleClass(this.elements[i], this.cls, +i === active); 6672 } 6673 6674 if (changed) { 6675 trigger(this.$el, 'active', [active, this.elements[active]]); 6676 } 6677 }, 6678 6679 events: ['scroll', 'resize'] }] }; 6680 6681 var sticky = { 6682 mixins: [Class, Media, Resize, Scroll], 6683 6684 props: { 6685 position: String, 6686 top: null, 6687 bottom: Boolean, 6688 offset: String, 6689 animation: String, 6690 clsActive: String, 6691 clsInactive: String, 6692 clsFixed: String, 6693 clsBelow: String, 6694 selTarget: String, 6695 showOnUp: Boolean, 6696 targetOffset: Number }, 6697 6698 6699 data: { 6700 position: 'top', 6701 top: 0, 6702 bottom: false, 6703 offset: 0, 6704 animation: '', 6705 clsActive: 'uk-active', 6706 clsInactive: '', 6707 clsFixed: 'uk-sticky-fixed', 6708 clsBelow: 'uk-sticky-below', 6709 selTarget: '', 6710 showOnUp: false, 6711 targetOffset: false }, 6712 6713 6714 computed: { 6715 selTarget(_ref, $el) {let { selTarget } = _ref; 6716 return selTarget && $(selTarget, $el) || $el; 6717 } },
6718 6719 6720 resizeTargets() { 6721 return document.documentElement; 6722 }, 6723 6724 connected() { 6725 this.placeholder = 6726 $('+ .uk-sticky-placeholder', this.$el) || 6727 $('<div class="uk-sticky-placeholder"></div>'); 6728 this.isFixed = false; 6729 this.setActive(false); 6730 }, 6731 6732 disconnected() { 6733 if (this.isFixed) { 6734 this.hide(); 6735 removeClass(this.selTarget, this.clsInactive); 6736 } 6737 6738 remove$1(this.placeholder); 6739 this.placeholder = null; 6740 }, 6741 6742 events: [ 6743 { 6744 name: 'load hashchange popstate', 6745 6746 el() { 6747 return window; 6748 }, 6749 6750 filter() { 6751 return this.targetOffset !== false; 6752 }, 6753 6754 handler() { 6755 if (!location.hash || scrollTop(window) === 0) { 6756 return; 6757 } 6758 6759 fastdom.read(() => { 6760 const targetOffset = offset($(location.hash)); 6761 const elOffset = offset(this.$el); 6762 6763 if (this.isFixed && intersectRect(targetOffset, elOffset)) { 6764 scrollTop( 6765 window, 6766 targetOffset.top - 6767 elOffset.height - 6768 toPx(this.targetOffset, 'height') - 6769 toPx(this.offset, 'height')); 6770 6771 } 6772 }); 6773 } }], 6774 6775 6776 6777 update: [ 6778 { 6779 read(_ref2, types) {let { height: height$1, margin } = _ref2; 6780 this.inactive = !this.matchMedia || !isVisible(this.$el); 6781 6782 if (this.inactive) { 6783 return false; 6784 } 6785 6786 const hide = this.isActive && types.has('resize'); 6787 if (hide) { 6788 css(this.selTarget, 'transition', '0s'); 6789 this.hide(); 6790 } 6791 6792 if (!this.isActive) { 6793 height$1 = offset(this.$el).height; 6794 margin = css(this.$el, 'margin'); 6795 } 6796 6797 if (hide) { 6798 this.show(); 6799 fastdom.write(() => css(this.selTarget, 'transition', '')); 6800 } 6801 6802 const referenceElement = this.isFixed ? this.placeholder : this.$el; 6803 const windowHeight = height(window); 6804 6805 let position = this.position; 6806 if (position === 'auto' && height$1 > windowHeight) { 6807 position = 'bottom'; 6808 } 6809 6810 let offset$1 = toPx(this.offset, 'height', referenceElement); 6811 if (position === 'bottom') { 6812 offset$1 += windowHeight - height$1; 6813 } 6814 6815 const overflow = Math.max(0, height$1 + offset$1 - windowHeight); 6816 const topOffset = offset(referenceElement).top; 6817 6818 const top = parseProp(this.top, this.$el, topOffset); 6819 const bottom = parseProp(this.bottom, this.$el, topOffset + height$1, true); 6820 6821 const start = Math.max(top, topOffset) - offset$1; 6822 const end = bottom ? 6823 bottom - offset(this.$el).height + overflow - offset$1 : 6824 getScrollingElement(this.$el).scrollHeight - windowHeight; 6825 6826 return { 6827 start, 6828 end, 6829 offset: offset$1, 6830 overflow, 6831 topOffset, 6832 height: height$1, 6833 margin, 6834 width: dimensions$1(referenceElement).width, 6835 top: offsetPosition(referenceElement)[0] }; 6836 6837 }, 6838 6839 write(_ref3) {let { height, margin } = _ref3; 6840 const { placeholder } = this; 6841 6842 css(placeholder, { height, margin }); 6843 6844 if (!within(placeholder, document)) { 6845 after(this.$el, placeholder); 6846 placeholder.hidden = true; 6847 } 6848 }, 6849 6850 events: ['resize'] }, 6851 6852 6853 { 6854 read(_ref4) 6855 6856 6857 6858 6859 6860 6861 {let { scroll: prevScroll = 0, dir: prevDir = 'down', overflow, overflowScroll = 0, start, end } = _ref4; 6862 const scroll = scrollTop(window); 6863 const dir = prevScroll <= scroll ? 'down' : 'up'; 6864 6865 return { 6866 dir, 6867 prevDir, 6868 scroll, 6869 prevScroll, 6870 offsetParentTop: offset(this.$el.offsetParent).top, 6871 overflowScroll: clamp( 6872 overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end), 6873 0, 6874 overflow) }; 6875 6876 6877 }, 6878 6879 write(data, types) { 6880 const isScrollUpdate = types.has('scroll'); 6881 const { 6882 initTimestamp = 0, 6883 dir, 6884 prevDir, 6885 scroll, 6886 prevScroll = 0, 6887 top, 6888 start, 6889 topOffset, 6890 height } = 6891 data; 6892 6893 if ( 6894 scroll < 0 || 6895 scroll === prevScroll && isScrollUpdate || 6896 this.showOnUp && !isScrollUpdate && !this.isFixed) 6897 { 6898 return; 6899 } 6900 6901 const now = Date.now(); 6902 if (now - initTimestamp > 300 || dir !== prevDir) { 6903 data.initScroll = scroll; 6904 data.initTimestamp = now; 6905 } 6906 6907 if ( 6908 this.showOnUp && 6909 !this.isFixed && 6910 Math.abs(data.initScroll - scroll) <= 30 && 6911 Math.abs(prevScroll - scroll) <= 10) 6912 { 6913 return; 6914 } 6915 6916 if ( 6917 this.inactive || 6918 scroll < start || 6919 this.showOnUp && ( 6920 scroll <= start || 6921 dir === 'down' && isScrollUpdate || 6922 dir === 'up' && !this.isFixed && scroll <= topOffset + height)) 6923 { 6924 if (!this.isFixed) { 6925 if (Animation.inProgress(this.$el) && top > scroll) { 6926 Animation.cancel(this.$el); 6927 this.hide(); 6928 } 6929 6930 return; 6931 } 6932 6933 this.isFixed = false;
6934 6935 if (this.animation && scroll > topOffset) { 6936 Animation.cancel(this.$el); 6937 Animation.out(this.$el, this.animation).then(() => this.hide(), noop); 6938 } else { 6939 this.hide(); 6940 } 6941 } else if (this.isFixed) { 6942 this.update(); 6943 } else if (this.animation && scroll > topOffset) { 6944 Animation.cancel(this.$el); 6945 this.show(); 6946 Animation.in(this.$el, this.animation).catch(noop); 6947 } else { 6948 this.show(); 6949 } 6950 }, 6951 6952 events: ['resize', 'scroll'] }], 6953 6954 6955 6956 methods: { 6957 show() { 6958 this.isFixed = true; 6959 this.update(); 6960 this.placeholder.hidden = false; 6961 }, 6962 6963 hide() { 6964 this.setActive(false); 6965 removeClass(this.$el, this.clsFixed, this.clsBelow); 6966 css(this.$el, { position: '', top: '', width: '' }); 6967 this.placeholder.hidden = true; 6968 }, 6969 6970 update() { 6971 let { 6972 width, 6973 scroll = 0, 6974 overflow, 6975 overflowScroll = 0, 6976 start, 6977 end, 6978 offset, 6979 topOffset, 6980 height, 6981 offsetParentTop } = 6982 this._data; 6983 const active = start !== 0 || scroll > start; 6984 let position = 'fixed'; 6985 6986 if (scroll > end) { 6987 offset += end - offsetParentTop; 6988 position = 'absolute'; 6989 } 6990 6991 if (overflow) { 6992 offset -= overflowScroll; 6993 } 6994 6995 css(this.$el, { 6996 position, 6997 top: offset + "px", 6998 width }); 6999 7000 7001 this.setActive(active); 7002 toggleClass(this.$el, this.clsBelow, scroll > topOffset + height); 7003 addClass(this.$el, this.clsFixed); 7004 }, 7005 7006 setActive(active) { 7007 const prev = this.active; 7008 this.active = active; 7009 if (active) { 7010 replaceClass(this.selTarget, this.clsInactive, this.clsActive); 7011 prev !== active && trigger(this.$el, 'active'); 7012 } else { 7013 replaceClass(this.selTarget, this.clsActive, this.clsInactive); 7014 prev !== active && trigger(this.$el, 'inactive'); 7015 } 7016 } } }; 7017 7018 7019 7020 function parseProp(value, el, propOffset, padding) { 7021 if (!value) { 7022 return 0; 7023 } 7024 7025 if (isString(value) && value.match(/^-?\d/)) { 7026 return propOffset + toPx(value); 7027 } else { 7028 const refElement = value === true ? parent(el) : query(value, el); 7029 return ( 7030 offset(refElement).bottom - ( 7031 padding && refElement && within(el, refElement) ? 7032 toFloat(css(refElement, 'paddingBottom')) : 7033 0)); 7034 7035 } 7036 } 7037 7038 var Switcher = { 7039 mixins: [Lazyload, Swipe, Togglable], 7040 7041 args: 'connect', 7042 7043 props: { 7044 connect: String, 7045 toggle: String, 7046 itemNav: String, 7047 active: Number }, 7048 7049 7050 data: { 7051 connect: '~.uk-switcher', 7052 toggle: '> * > :first-child', 7053 itemNav: false, 7054 active: 0, 7055 cls: 'uk-active', 7056 attrItem: 'uk-switcher-item' }, 7057 7058 7059 computed: { 7060 connects: { 7061 get(_ref, $el) {let { connect } = _ref; 7062 return queryAll(connect, $el); 7063 }, 7064 7065 watch(connects) { 7066 if (this.swiping) { 7067 css(connects, 'touch-action', 'pan-y pinch-zoom'); 7068 } 7069 7070 const index = this.index(); 7071 this.connects.forEach((el) => 7072 children(el).forEach((child, i) => toggleClass(child, this.cls, i === index))); 7073 7074 }, 7075 7076 immediate: true }, 7077 7078 7079 toggles: { 7080 get(_ref2, $el) {let { toggle } = _ref2; 7081 return $$(toggle, $el).filter( 7082 (el) => !matches(el, '.uk-disabled *, .uk-disabled, [disabled]')); 7083 7084 }, 7085 7086 watch(toggles) { 7087 const active = this.index(); 7088 this.show(~active ? active : toggles[this.active] || toggles[0]); 7089 }, 7090 7091 immediate: true }, 7092 7093 7094 children() { 7095 return children(this.$el).filter((child) => 7096 this.toggles.some((toggle) => within(toggle, child))); 7097 7098 }, 7099 7100 swipeTarget() { 7101 return this.connects; 7102 } },
7103 7104 7105 connected() { 7106 this.lazyload(this.$el, this.connects); 7107 7108 // check for connects 7109 ready(() => this.$emit()); 7110 }, 7111 7112 events: [ 7113 { 7114 name: 'click', 7115 7116 delegate() { 7117 return this.toggle; 7118 }, 7119 7120 handler(e) { 7121 e.preventDefault(); 7122 this.show(e.current); 7123 } }, 7124 7125 7126 { 7127 name: 'click', 7128 7129 el() { 7130 return this.connects.concat(this.itemNav ? queryAll(this.itemNav, this.$el) : []); 7131 }, 7132 7133 delegate() { 7134 return "[" + this.attrItem + "],[data-" + this.attrItem + "]"; 7135 }, 7136 7137 handler(e) { 7138 e.preventDefault(); 7139 this.show(data(e.current, this.attrItem)); 7140 } }, 7141 7142 7143 { 7144 name: 'swipeRight swipeLeft', 7145 7146 filter() { 7147 return this.swiping; 7148 }, 7149 7150 el() { 7151 return this.connects; 7152 }, 7153 7154 handler(_ref3) {let { type } = _ref3; 7155 this.show(endsWith(type, 'Left') ? 'next' : 'previous'); 7156 } }], 7157 7158 7159 7160 methods: { 7161 index() { 7162 return findIndex(this.children, (el) => hasClass(el, this.cls)); 7163 }, 7164 7165 show(item) { 7166 const prev = this.index(); 7167 const next = getIndex(item, this.toggles, prev); 7168 const active = getIndex(this.children[next], children(this.$el)); 7169 children(this.$el).forEach((child, i) => { 7170 toggleClass(child, this.cls, active === i); 7171 attr(this.toggles[i], 'aria-expanded', active === i); 7172 }); 7173 7174 const animate = prev >= 0 && prev !== next; 7175 this.connects.forEach(async (_ref4) => {let { children } = _ref4; 7176 await this.toggleElement( 7177 toNodes(children).filter((child) => hasClass(child, this.cls)), 7178 false, 7179 animate); 7180 7181 await this.toggleElement(children[active], true, animate); 7182 }); 7183 } } }; 7184 7185 var tab = { 7186 mixins: [Class], 7187 7188 extends: Switcher, 7189 7190 props: { 7191 media: Boolean }, 7192 7193 7194 data: { 7195 media: 960, 7196 attrItem: 'uk-tab-item' }, 7197 7198 7199 connected() { 7200 const cls = hasClass(this.$el, 'uk-tab-left') ? 7201 'uk-tab-left' : 7202 hasClass(this.$el, 'uk-tab-right') ? 7203 'uk-tab-right' : 7204 false; 7205 7206 if (cls) { 7207 this.$create('toggle', this.$el, { cls, mode: 'media', media: this.media }); 7208 } 7209 } }; 7210 7211 const KEY_SPACE = 32; 7212 7213 var toggle = { 7214 mixins: [Lazyload, Media, Togglable], 7215 7216 args: 'target', 7217 7218 props: { 7219 href: String, 7220 target: null, 7221 mode: 'list', 7222 queued: Boolean }, 7223 7224 7225 data: { 7226 href: false, 7227 target: false, 7228 mode: 'click', 7229 queued: true }, 7230 7231 7232 computed: { 7233 target: { 7234 get(_ref, $el) {let { href, target } = _ref; 7235 target = queryAll(target || href, $el); 7236 return target.length && target || [$el]; 7237 }, 7238 7239 watch() { 7240 this.updateAria(); 7241 }, 7242 7243 immediate: true } }, 7244 7245 7246 7247 connected() { 7248 if (!includes(this.mode, 'media') && !isFocusable(this.$el)) { 7249 attr(this.$el, 'tabindex', '0'); 7250 } 7251 7252 this.lazyload(this.$el, this.target); 7253 7254 // check for target 7255 ready(() => this.$emit()); 7256 }, 7257 7258 events: [ 7259 { 7260 name: pointerDown, 7261 7262 filter() { 7263 return includes(this.mode, 'hover'); 7264 }, 7265 7266 handler(e) { 7267 if (!isTouch(e) || this._showState) { 7268 return; 7269 } 7270 7271 // Clicking a button does not give it focus on all browsers and platforms 7272 // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#clicking_and_focus 7273 trigger(this.$el, 'focus'); 7274 once( 7275 document, 7276 pointerDown, 7277 () => trigger(this.$el, 'blur'), 7278 true, 7279 (e) => !within(e.target, this.$el)); 7280 7281 7282 // Prevent initial click to prevent double toggle through focus + click 7283 if (includes(this.mode, 'click')) { 7284 this._preventClick = true; 7285 } 7286 } },
7287 7288 7289 { 7290 name: pointerEnter + " " + pointerLeave + " focus blur", 7291 7292 filter() { 7293 return includes(this.mode, 'hover'); 7294 }, 7295 7296 handler(e) { 7297 if (isTouch(e)) { 7298 return; 7299 } 7300 7301 const show = includes([pointerEnter, 'focus'], e.type); 7302 const expanded = attr(this.$el, 'aria-expanded'); 7303 7304 // Skip hide if still hovered or focused 7305 if ( 7306 !show && ( 7307 e.type === pointerLeave && matches(this.$el, ':focus') || 7308 e.type === 'blur' && matches(this.$el, ':hover'))) 7309 { 7310 return; 7311 } 7312 7313 // Skip if state does not change e.g. hover + focus received 7314 if (this._showState && show === (expanded !== this._showState)) { 7315 // Ensure reset if state has changed through click 7316 if (!show) { 7317 this._showState = null; 7318 } 7319 return; 7320 } 7321 7322 this._showState = show ? expanded : null; 7323 7324 this.toggle("toggle" + (show ? 'show' : 'hide')); 7325 } }, 7326 7327 7328 { 7329 name: 'keydown', 7330 7331 filter() { 7332 return includes(this.mode, 'click') && !isTag(this.$el, 'input'); 7333 }, 7334 7335 handler(e) { 7336 if (e.keyCode === KEY_SPACE) { 7337 e.preventDefault(); 7338 this.$el.click(); 7339 } 7340 } }, 7341 7342 7343 { 7344 name: 'click', 7345 7346 filter() { 7347 return includes(this.mode, 'click'); 7348 }, 7349 7350 handler(e) { 7351 if (this._preventClick) { 7352 return this._preventClick = null; 7353 } 7354 7355 let link; 7356 if ( 7357 closest(e.target, 'a[href="#"], a[href=""]') || 7358 (link = closest(e.target, 'a[href]')) && ( 7359 attr(this.$el, 'aria-expanded') !== 'true' || 7360 link.hash && matches(this.target, link.hash))) 7361 { 7362 e.preventDefault(); 7363 } 7364 7365 this.toggle(); 7366 } }, 7367 7368 7369 { 7370 name: 'toggled', 7371 7372 self: true, 7373 7374 el() { 7375 return this.target; 7376 }, 7377 7378 handler(e, toggled) { 7379 if (e.target === this.target[0]) { 7380 this.updateAria(toggled); 7381 } 7382 } }, 7383 7384 7385 { 7386 name: 'mediachange', 7387 7388 filter() { 7389 return includes(this.mode, 'media'); 7390 }, 7391 7392 el() { 7393 return this.target; 7394 }, 7395 7396 handler(e, mediaObj) { 7397 if (mediaObj.matches ^ this.isToggled(this.target)) { 7398 this.toggle(); 7399 } 7400 } }], 7401 7402 7403 7404 methods: { 7405 async toggle(type) { 7406 if (!trigger(this.target, type || 'toggle', [this])) { 7407 return; 7408 } 7409 7410 if (!this.queued) { 7411 return this.toggleElement(this.target); 7412 } 7413 7414 const leaving = this.target.filter((el) => hasClass(el, this.clsLeave)); 7415 7416 if (leaving.length) { 7417 for (const el of this.target) { 7418 const isLeaving = includes(leaving, el); 7419 this.toggleElement(el, isLeaving, isLeaving); 7420 } 7421 return; 7422 } 7423 7424 const toggled = this.target.filter(this.isToggled); 7425 await this.toggleElement(toggled, false); 7426 await this.toggleElement( 7427 this.target.filter((el) => !includes(toggled, el)), 7428 true); 7429 7430 }, 7431 7432 updateAria(toggled) { 7433 if (includes(this.mode, 'media')) { 7434 return; 7435 } 7436 7437 attr( 7438 this.$el, 7439 'aria-expanded', 7440 isBoolean(toggled) ? toggled : this.isToggled(this.target)); 7441 7442 } } }; 7443 7444 var components$1 = /*#__PURE__*/Object.freeze({ 7445 __proto__: null, 7446 Accordion: Accordion, 7447 Alert: alert, 7448 Cover: cover, 7449 Drop: drop, 7450 Dropdown: drop, 7451 FormCustom: formCustom, 7452 Grid: grid, 7453 HeightMatch: heightMatch, 7454 HeightViewport: heightViewport, 7455 Icon: Icon, 7456 Img: img, 7457 Leader: leader, 7458 Margin: Margin, 7459 Modal: modal, 7460 Nav: nav, 7461 Navbar: navbar, 7462 Offcanvas: offcanvas, 7463 OverflowAuto: overflowAuto, 7464 Responsive: responsive, 7465 Scroll: scroll, 7466 Scrollspy: scrollspy, 7467 ScrollspyNav: scrollspyNav, 7468 Sticky: sticky, 7469 Svg: SVG, 7470 Switcher: Switcher, 7471 Tab: tab, 7472 Toggle: toggle, 7473 Video: Video, 7474 Close: Close, 7475 Spinner: Spinner, 7476 SlidenavNext: Slidenav, 7477 SlidenavPrevious: Slidenav, 7478 SearchIcon: Search, 7479 Marker: IconComponent, 7480 NavbarToggleIcon: IconComponent, 7481 OverlayIcon: IconComponent, 7482 PaginationNext: IconComponent, 7483 PaginationPrevious: IconComponent, 7484 Totop: IconComponent 7485 }); 7486 7487 // register components 7488 each(components$1, (component, name) => UIkit.component(name, component)); 7489 7490 // core functionality 7491 UIkit.use(Core); 7492
7493 boot(UIkit); 7494 7495 const units = ['days', 'hours', 'minutes', 'seconds']; 7496 7497 var countdown = { 7498 mixins: [Class], 7499 7500 props: { 7501 date: String, 7502 clsWrapper: String }, 7503 7504 7505 data: { 7506 date: '', 7507 clsWrapper: '.uk-countdown-%unit%' }, 7508 7509 7510 connected() { 7511 this.date = Date.parse(this.$props.date); 7512 this.start(); 7513 }, 7514 7515 disconnected() { 7516 this.stop(); 7517 }, 7518 7519 events: [ 7520 { 7521 name: 'visibilitychange', 7522 7523 el() { 7524 return document; 7525 }, 7526 7527 handler() { 7528 if (document.hidden) { 7529 this.stop(); 7530 } else { 7531 this.start(); 7532 } 7533 } }], 7534 7535 7536 7537 methods: { 7538 start() { 7539 this.stop(); 7540 this.update(); 7541 this.timer = setInterval(this.update, 1000); 7542 }, 7543 7544 stop() { 7545 clearInterval(this.timer); 7546 }, 7547 7548 update() { 7549 const timespan = getTimeSpan(this.date); 7550 7551 if (!this.date || timespan.total <= 0) { 7552 this.stop(); 7553 7554 timespan.days = timespan.hours = timespan.minutes = timespan.seconds = 0; 7555 } 7556 7557 for (const unit of units) { 7558 const el = $(this.clsWrapper.replace('%unit%', unit), this.$el); 7559 7560 if (!el) { 7561 continue; 7562 } 7563 7564 let digits = String(Math.trunc(timespan[unit])); 7565 7566 digits = digits.length < 2 ? "0" + digits : digits; 7567 7568 if (el.textContent !== digits) { 7569 digits = digits.split(''); 7570 7571 if (digits.length !== el.children.length) { 7572 html(el, digits.map(() => '<span></span>').join('')); 7573 } 7574 7575 digits.forEach((digit, i) => el.children[i].textContent = digit); 7576 } 7577 } 7578 } } }; 7579 7580 7581 7582 function getTimeSpan(date) { 7583 const total = date - Date.now(); 7584 7585 return { 7586 total, 7587 seconds: total / 1000 % 60, 7588 minutes: total / 1000 / 60 % 60, 7589 hours: total / 1000 / 60 / 60 % 24, 7590 days: total / 1000 / 60 / 60 / 24 }; 7591 7592 } 7593 7594 const clsLeave = 'uk-transition-leave'; 7595 const clsEnter = 'uk-transition-enter'; 7596 7597 function fade(action, target, duration, stagger) {if (stagger === void 0) {stagger = 0;} 7598 const index = transitionIndex(target, true); 7599 const propsIn = { opacity: 1 }; 7600 const propsOut = { opacity: 0 }; 7601 7602 const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject(); 7603 7604 const leaveFn = wrapIndexFn(() => { 7605 addClass(target, clsLeave); 7606 7607 return Promise.all( 7608 getTransitionNodes(target).map( 7609 (child, i) => 7610 new Promise((resolve) => 7611 setTimeout( 7612 () => 7613 Transition.start(child, propsOut, duration / 2, 'ease').then( 7614 resolve), 7615 7616 i * stagger)))). 7617 7618 7619 7620 then(() => removeClass(target, clsLeave)); 7621 }); 7622 7623 const enterFn = wrapIndexFn(() => { 7624 const oldHeight = height(target); 7625 7626 addClass(target, clsEnter); 7627 action(); 7628 7629 css(children(target), { opacity: 0 }); 7630 7631 // Ensure UIkit updates have propagated 7632 return new Promise((resolve) => 7633 requestAnimationFrame(() => { 7634 const nodes = children(target); 7635 const newHeight = height(target); 7636 7637 // Ensure Grid cells do not stretch when height is applied 7638 css(target, 'alignContent', 'flex-start'); 7639 height(target, oldHeight); 7640 7641 const transitionNodes = getTransitionNodes(target); 7642 css(nodes, propsOut); 7643 7644 const transitions = transitionNodes.map( 7645 (child, i) => 7646 new Promise((resolve) => 7647 setTimeout( 7648 () => 7649 Transition.start(child, propsIn, duration / 2, 'ease').then( 7650 resolve), 7651 7652 i * stagger))); 7653 7654 7655 7656 7657 if (oldHeight !== newHeight) { 7658 transitions.push( 7659 Transition.start( 7660 target, 7661 { height: newHeight }, 7662 duration / 2 + transitionNodes.length * stagger, 7663 'ease')); 7664 7665 7666 } 7667 7668 Promise.all(transitions).then(() => { 7669 removeClass(target, clsEnter); 7670 if (index === transitionIndex(target)) { 7671 css(target, { height: '', alignContent: '' }); 7672 css(nodes, { opacity: '' }); 7673 delete target.dataset.transition; 7674 } 7675 resolve(); 7676 }); 7677 })); 7678 7679 }); 7680 7681 return hasClass(target, clsLeave) ? 7682 waitTransitionend(target).then(enterFn) : 7683 hasClass(target, clsEnter) ? 7684 waitTransitionend(target).then(leaveFn).then(enterFn) : 7685 leaveFn().then(enterFn); 7686 } 7687 7688 function transitionIndex(target, next) { 7689 if (next) { 7690 target.dataset.transition = 1 + transitionIndex(target); 7691 } 7692 7693 return toNumber(target.dataset.transition) || 0; 7694 } 7695 7696 function waitTransitionend(target) { 7697 return Promise.all( 7698 children(target). 7699 filter(Transition.inProgress). 7700 map( 7701 (el) => 7702 new Promise((resolve) => once(el, 'transitionend transitioncanceled', resolve)))); 7703 7704 7705 } 7706 7707 function getTransitionNodes(target) { 7708 return getRows(children(target)).reduce( 7709 (nodes, row) => 7710 nodes.concat( 7711 sortBy$1( 7712 row.filter((el) => isInView(el)), 7713 'offsetLeft')), 7714 7715 7716 []); 7717 7718 } 7719 7720 function slide (action, target, duration) { 7721 return new Promise((resolve) => 7722 requestAnimationFrame(() => { 7723 let nodes = children(target); 7724 7725 // Get current state 7726 const currentProps = nodes.map((el) => getProps(el, true)); 7727 const targetProps = css(target, ['height', 'padding']); 7728 7729 // Cancel previous animations 7730 Transition.cancel(target);
7731 nodes.forEach(Transition.cancel); 7732 reset(target); 7733 7734 // Adding, sorting, removing nodes 7735 action(); 7736 7737 // Find new nodes 7738 nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el))); 7739 7740 // Wait for update to propagate 7741 Promise.resolve().then(() => { 7742 // Force update 7743 fastdom.flush(); 7744 7745 // Get new state 7746 const targetPropsTo = css(target, ['height', 'padding']); 7747 const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps); 7748 7749 // Reset to previous state 7750 nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i])); 7751 css(target, { display: 'block', ...targetProps }); 7752 7753 // Start transitions on next frame 7754 requestAnimationFrame(() => { 7755 const transitions = nodes. 7756 map( 7757 (el, i) => 7758 parent(el) === target && 7759 Transition.start(el, propsTo[i], duration, 'ease')). 7760 7761 concat(Transition.start(target, targetPropsTo, duration, 'ease')); 7762 7763 Promise.all(transitions). 7764 then(() => { 7765 nodes.forEach( 7766 (el, i) => 7767 parent(el) === target && 7768 css(el, 'display', propsTo[i].opacity === 0 ? 'none' : '')); 7769 7770 reset(target); 7771 }, noop). 7772 then(resolve); 7773 }); 7774 }); 7775 })); 7776 7777 } 7778 7779 function getProps(el, opacity) { 7780 const zIndex = css(el, 'zIndex'); 7781 7782 return isVisible(el) ? 7783 { 7784 display: '', 7785 opacity: opacity ? css(el, 'opacity') : '0', 7786 pointerEvents: 'none', 7787 position: 'absolute', 7788 zIndex: zIndex === 'auto' ? index(el) : zIndex, 7789 ...getPositionWithMargin(el) } : 7790 7791 false; 7792 } 7793 7794 function getTransitionProps(target, nodes, currentProps) { 7795 const propsTo = nodes.map((el, i) => 7796 parent(el) && i in currentProps ? 7797 currentProps[i] ? 7798 isVisible(el) ? 7799 getPositionWithMargin(el) : 7800 { opacity: 0 } : 7801 { opacity: isVisible(el) ? 1 : 0 } : 7802 false); 7803 7804 7805 const propsFrom = propsTo.map((props, i) => { 7806 const from = parent(nodes[i]) === target && (currentProps[i] || getProps(nodes[i])); 7807 7808 if (!from) { 7809 return false; 7810 } 7811 7812 if (!props) { 7813 delete from.opacity; 7814 } else if (!('opacity' in props)) { 7815 const { opacity } = from; 7816 7817 if (opacity % 1) { 7818 props.opacity = 1; 7819 } else { 7820 delete from.opacity; 7821 } 7822 } 7823 7824 return from; 7825 }); 7826 7827 return [propsTo, propsFrom]; 7828 } 7829 7830 function reset(el) { 7831 css(el.children, { 7832 height: '', 7833 left: '', 7834 opacity: '', 7835 pointerEvents: '', 7836 position: '', 7837 top: '', 7838 marginTop: '', 7839 marginLeft: '', 7840 transform: '', 7841 width: '', 7842 zIndex: '' }); 7843 7844 css(el, { height: '', display: '', padding: '' }); 7845 } 7846 7847 function getPositionWithMargin(el) { 7848 const { height, width } = offset(el); 7849 const { top, left } = position(el); 7850 const { marginLeft, marginTop } = css(el, ['marginTop', 'marginLeft']); 7851 7852 return { top, left, height, width, marginLeft, marginTop, transform: '' }; 7853 } 7854 7855 var Animate = { 7856 props: { 7857 duration: Number, 7858 animation: Boolean }, 7859 7860 7861 data: { 7862 duration: 150, 7863 animation: 'slide' }, 7864 7865 7866 methods: { 7867 animate(action, target) {if (target === void 0) {target = this.$el;} 7868 const name = this.animation; 7869 const animationFn = 7870 name === 'fade' ? 7871 fade : 7872 name === 'delayed-fade' ? 7873 function () {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}return fade(...args, 40);} : 7874 name ? 7875 slide : 7876 () => { 7877 action(); 7878 return Promise.resolve(); 7879 }; 7880 7881 return animationFn(action, target, this.duration).then( 7882 () => this.$update(target, 'resize'), 7883 noop); 7884 7885 } } }; 7886 7887 var filter = { 7888 mixins: [Animate], 7889 7890 args: 'target', 7891 7892 props: { 7893 target: Boolean, 7894 selActive: Boolean }, 7895 7896 7897 data: { 7898 target: null, 7899 selActive: false, 7900 attrItem: 'uk-filter-control', 7901 cls: 'uk-active', 7902 duration: 250 }, 7903 7904 7905 computed: { 7906 toggles: { 7907 get(_ref, $el) {let { attrItem } = _ref; 7908 return $$("[" + attrItem + "],[data-" + attrItem + "]", $el); 7909 }, 7910 7911 watch() { 7912 this.updateState(); 7913 7914 if (this.selActive !== false) { 7915 const actives = $$(this.selActive, this.$el);
7916 this.toggles.forEach((el) => toggleClass(el, this.cls, includes(actives, el))); 7917 } 7918 }, 7919 7920 immediate: true }, 7921 7922 7923 children: { 7924 get(_ref2, $el) {let { target } = _ref2; 7925 return $$(target + " > *", $el); 7926 }, 7927 7928 watch(list, old) { 7929 if (old && !isEqualList(list, old)) { 7930 this.updateState(); 7931 } 7932 }, 7933 7934 immediate: true } }, 7935 7936 7937 7938 events: [ 7939 { 7940 name: 'click', 7941 7942 delegate() { 7943 return "[" + this.attrItem + "],[data-" + this.attrItem + "]"; 7944 }, 7945 7946 handler(e) { 7947 e.preventDefault(); 7948 this.apply(e.current); 7949 } }], 7950 7951 7952 7953 methods: { 7954 apply(el) { 7955 const prevState = this.getState(); 7956 const newState = mergeState(el, this.attrItem, this.getState()); 7957 7958 if (!isEqualState(prevState, newState)) { 7959 this.setState(newState); 7960 } 7961 }, 7962 7963 getState() { 7964 return this.toggles. 7965 filter((item) => hasClass(item, this.cls)). 7966 reduce((state, el) => mergeState(el, this.attrItem, state), { 7967 filter: { '': '' }, 7968 sort: [] }); 7969 7970 }, 7971 7972 setState(state, animate) {if (animate === void 0) {animate = true;} 7973 state = { filter: { '': '' }, sort: [], ...state }; 7974 7975 trigger(this.$el, 'beforeFilter', [this, state]); 7976 7977 this.toggles.forEach((el) => 7978 toggleClass(el, this.cls, !!matchFilter(el, this.attrItem, state))); 7979 7980 7981 Promise.all( 7982 $$(this.target, this.$el).map((target) => { 7983 const filterFn = () => { 7984 applyState(state, target, children(target)); 7985 this.$update(this.$el); 7986 }; 7987 return animate ? this.animate(filterFn, target) : filterFn(); 7988 })). 7989 then(() => trigger(this.$el, 'afterFilter', [this])); 7990 }, 7991 7992 updateState() { 7993 fastdom.write(() => this.setState(this.getState(), false)); 7994 } } }; 7995 7996 7997 7998 function getFilter(el, attr) { 7999 return parseOptions(data(el, attr), ['filter']); 8000 } 8001 8002 function isEqualState(stateA, stateB) { 8003 return ['filter', 'sort'].every((prop) => isEqual(stateA[prop], stateB[prop])); 8004 } 8005 8006 function applyState(state, target, children) { 8007 const selector = getSelector(state); 8008 8009 children.forEach((el) => css(el, 'display', selector && !matches(el, selector) ? 'none' : '')); 8010 8011 const [sort, order] = state.sort; 8012 8013 if (sort) { 8014 const sorted = sortItems(children, sort, order); 8015 if (!isEqual(sorted, children)) { 8016 append(target, sorted); 8017 } 8018 } 8019 } 8020 8021 function mergeState(el, attr, state) { 8022 const filterBy = getFilter(el, attr); 8023 const { filter, group, sort, order = 'asc' } = filterBy; 8024 8025 if (filter || isUndefined(sort)) { 8026 if (group) { 8027 if (filter) { 8028 delete state.filter['']; 8029 state.filter[group] = filter; 8030 } else { 8031 delete state.filter[group]; 8032 8033 if (isEmpty(state.filter) || '' in state.filter) { 8034 state.filter = { '': filter || '' }; 8035 } 8036 } 8037 } else { 8038 state.filter = { '': filter || '' }; 8039 } 8040 } 8041 8042 if (!isUndefined(sort)) { 8043 state.sort = [sort, order]; 8044 } 8045 8046 return state; 8047 } 8048 8049 function matchFilter( 8050 el, 8051 attr, _ref3) 8052 8053 {let { filter: stateFilter = { '': '' }, sort: [stateSort, stateOrder] } = _ref3; 8054 const { filter = '', group = '', sort, order = 'asc' } = getFilter(el, attr); 8055 8056 return isUndefined(sort) ? 8057 group in stateFilter && filter === stateFilter[group] || 8058 !filter && group && !(group in stateFilter) && !stateFilter[''] : 8059 stateSort === sort && stateOrder === order; 8060 } 8061 8062 function isEqualList(listA, listB) { 8063 return listA.length === listB.length && listA.every((el) => ~listB.indexOf(el)); 8064 } 8065 8066 function getSelector(_ref4) {let { filter } = _ref4; 8067 let selector = ''; 8068 each(filter, (value) => selector += value || ''); 8069 return selector; 8070 } 8071 8072 function sortItems(nodes, sort, order) { 8073 return [...nodes].sort( 8074 (a, b) => 8075 data(a, sort).localeCompare(data(b, sort), undefined, { numeric: true }) * ( 8076 order === 'asc' || -1)); 8077 8078 } 8079 8080 var Animations$2 = { 8081 slide: { 8082 show(dir) { 8083 return [{ transform: translate(dir * -100) }, { transform: translate() }]; 8084 }, 8085 8086 percent(current) { 8087 return translated(current); 8088 }, 8089 8090 translate(percent, dir) { 8091 return [ 8092 { transform: translate(dir * -100 * percent) }, 8093 { transform: translate(dir * 100 * (1 - percent)) }]; 8094 8095 } } }; 8096 8097 8098 8099 function translated(el) { 8100 return Math.abs(css(el, 'transform').split(',')[4] / el.offsetWidth) || 0; 8101 } 8102 8103 function translate(value, unit) {if (value === void 0) {value = 0;}if (unit === void 0) {unit = '%';} 8104 value += value ? unit : ''; 8105 return "translate3d(" + value + ", 0, 0)"; 8106 } 8107 8108 function scale3d(value) { 8109 return "scale3d(" + value + ", " + value + ", 1)"; 8110 } 8111 8112 var Animations$1 = { 8113 ...Animations$2, 8114 fade: { 8115 show() { 8116 return [{ opacity: 0 }, { opacity: 1 }]; 8117 }, 8118 8119 percent(current) { 8120 return 1 - css(current, 'opacity'); 8121 }, 8122 8123 translate(percent) { 8124 return [{ opacity: 1 - percent }, { opacity: percent }]; 8125 } },
8126 8127 8128 scale: { 8129 show() { 8130 return [ 8131 { opacity: 0, transform: scale3d(1 - 0.2) }, 8132 { opacity: 1, transform: scale3d(1) }]; 8133 8134 }, 8135 8136 percent(current) { 8137 return 1 - css(current, 'opacity'); 8138 }, 8139 8140 translate(percent) { 8141 return [ 8142 { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) }, 8143 { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) }]; 8144 8145 } } }; 8146 8147 function Transitioner$1(prev, next, dir, _ref) {let { animation, easing } = _ref; 8148 const { percent, translate, show = noop } = animation; 8149 const props = show(dir); 8150 const deferred = new Deferred(); 8151 8152 return { 8153 dir, 8154 8155 show(duration, percent, linear) {if (percent === void 0) {percent = 0;} 8156 const timing = linear ? 'linear' : easing; 8157 duration -= Math.round(duration * clamp(percent, -1, 1)); 8158 8159 this.translate(percent); 8160 8161 triggerUpdate$1(next, 'itemin', { percent, duration, timing, dir }); 8162 triggerUpdate$1(prev, 'itemout', { percent: 1 - percent, duration, timing, dir }); 8163 8164 Promise.all([ 8165 Transition.start(next, props[1], duration, timing), 8166 Transition.start(prev, props[0], duration, timing)]). 8167 then(() => { 8168 this.reset(); 8169 deferred.resolve(); 8170 }, noop); 8171 8172 return deferred.promise; 8173 }, 8174 8175 cancel() { 8176 Transition.cancel([next, prev]); 8177 }, 8178 8179 reset() { 8180 for (const prop in props[0]) { 8181 css([next, prev], prop, ''); 8182 } 8183 }, 8184 8185 forward(duration, percent) {if (percent === void 0) {percent = this.percent();} 8186 Transition.cancel([next, prev]); 8187 return this.show(duration, percent, true); 8188 }, 8189 8190 translate(percent) { 8191 this.reset(); 8192 8193 const props = translate(percent, dir); 8194 css(next, props[1]); 8195 css(prev, props[0]); 8196 triggerUpdate$1(next, 'itemtranslatein', { percent, dir }); 8197 triggerUpdate$1(prev, 'itemtranslateout', { percent: 1 - percent, dir }); 8198 }, 8199 8200 percent() { 8201 return percent(prev || next, next, dir); 8202 }, 8203 8204 getDistance() { 8205 return prev == null ? void 0 : prev.offsetWidth; 8206 } }; 8207 8208 } 8209 8210 function triggerUpdate$1(el, type, data) { 8211 trigger(el, createEvent(type, false, false, data)); 8212 } 8213 8214 var SliderAutoplay = { 8215 props: { 8216 autoplay: Boolean, 8217 autoplayInterval: Number, 8218 pauseOnHover: Boolean }, 8219 8220 8221 data: { 8222 autoplay: false, 8223 autoplayInterval: 7000, 8224 pauseOnHover: true }, 8225 8226 8227 connected() { 8228 this.autoplay && this.startAutoplay(); 8229 }, 8230 8231 disconnected() { 8232 this.stopAutoplay(); 8233 }, 8234 8235 update() { 8236 attr(this.slides, 'tabindex', '-1'); 8237 }, 8238 8239 events: [ 8240 { 8241 name: 'visibilitychange', 8242 8243 el() { 8244 return document; 8245 }, 8246 8247 filter() { 8248 return this.autoplay; 8249 }, 8250 8251 handler() { 8252 if (document.hidden) { 8253 this.stopAutoplay(); 8254 } else { 8255 this.startAutoplay(); 8256 } 8257 } }], 8258 8259 8260 8261 methods: { 8262 startAutoplay() { 8263 this.stopAutoplay(); 8264 8265 this.interval = setInterval( 8266 () => 8267 (!this.draggable || !$(':focus', this.$el)) && ( 8268 !this.pauseOnHover || !matches(this.$el, ':hover')) && 8269 !this.stack.length && 8270 this.show('next'), 8271 this.autoplayInterval); 8272 8273 }, 8274 8275 stopAutoplay() { 8276 this.interval && clearInterval(this.interval); 8277 } } }; 8278 8279 var SliderDrag = { 8280 props: { 8281 draggable: Boolean }, 8282 8283 8284 data: { 8285 draggable: true, 8286 threshold: 10 }, 8287 8288 8289 created() { 8290 for (const key of ['start', 'move', 'end']) { 8291 const fn = this[key]; 8292 this[key] = (e) => { 8293 const pos = getEventPos(e).x * (isRtl ? -1 : 1); 8294 8295 this.prevPos = pos === this.pos ? this.prevPos : this.pos; 8296 this.pos = pos; 8297 8298 fn(e); 8299 }; 8300 } 8301 }, 8302 8303 events: [ 8304 { 8305 name: pointerDown, 8306 8307 delegate() { 8308 return this.selSlides; 8309 }, 8310 8311 handler(e) { 8312 if ( 8313 !this.draggable || 8314 !isTouch(e) && hasTextNodesOnly(e.target) || 8315 closest(e.target, selInput) || 8316 e.button > 0 || 8317 this.length < 2) 8318 { 8319 return; 8320 } 8321 8322 this.start(e); 8323 } },
8324 8325 8326 { 8327 name: 'dragstart', 8328 8329 handler(e) { 8330 e.preventDefault(); 8331 } }], 8332 8333 8334 8335 methods: { 8336 start() { 8337 this.drag = this.pos; 8338 8339 if (this._transitioner) { 8340 this.percent = this._transitioner.percent(); 8341 this.drag += this._transitioner.getDistance() * this.percent * this.dir; 8342 8343 this._transitioner.cancel(); 8344 this._transitioner.translate(this.percent); 8345 8346 this.dragging = true; 8347 8348 this.stack = []; 8349 } else { 8350 this.prevIndex = this.index; 8351 } 8352 8353 on(document, pointerMove, this.move, { passive: false }); 8354 8355 // 'input' event is triggered by video controls 8356 on(document, pointerUp + " " + pointerCancel + " input", this.end, true); 8357 8358 css(this.list, 'userSelect', 'none'); 8359 }, 8360 8361 move(e) { 8362 const distance = this.pos - this.drag; 8363 8364 if ( 8365 distance === 0 || 8366 this.prevPos === this.pos || 8367 !this.dragging && Math.abs(distance) < this.threshold) 8368 { 8369 return; 8370 } 8371 8372 // prevent click event
8373 css(this.list, 'pointerEvents', 'none'); 8374 8375 e.cancelable && e.preventDefault(); 8376 8377 this.dragging = true; 8378 this.dir = distance < 0 ? 1 : -1; 8379 8380 const { slides } = this; 8381 let { prevIndex } = this; 8382 let dis = Math.abs(distance); 8383 let nextIndex = this.getIndex(prevIndex + this.dir, prevIndex); 8384 let width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth; 8385 8386 while (nextIndex !== prevIndex && dis > width) { 8387 this.drag -= width * this.dir; 8388 8389 prevIndex = nextIndex; 8390 dis -= width; 8391 nextIndex = this.getIndex(prevIndex + this.dir, prevIndex); 8392 width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth; 8393 } 8394 8395 this.percent = dis / width; 8396 8397 const prev = slides[prevIndex]; 8398 const next = slides[nextIndex]; 8399 const changed = this.index !== nextIndex; 8400 const edge = prevIndex === nextIndex; 8401 8402 let itemShown; 8403 8404 [this.index, this.prevIndex]. 8405 filter((i) => !includes([nextIndex, prevIndex], i)). 8406 forEach((i) => { 8407 trigger(slides[i], 'itemhidden', [this]); 8408 8409 if (edge) { 8410 itemShown = true; 8411 this.prevIndex = prevIndex; 8412 } 8413 }); 8414 8415 if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) { 8416 trigger(slides[this.index], 'itemshown', [this]); 8417 } 8418 8419 if (changed) { 8420 this.prevIndex = prevIndex; 8421 this.index = nextIndex; 8422 8423 !edge && trigger(prev, 'beforeitemhide', [this]); 8424 trigger(next, 'beforeitemshow', [this]); 8425 } 8426 8427 this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next); 8428 8429 if (changed) { 8430 !edge && trigger(prev, 'itemhide', [this]); 8431 trigger(next, 'itemshow', [this]); 8432 } 8433 }, 8434 8435 end() { 8436 off(document, pointerMove, this.move, { passive: false }); 8437 off(document, pointerUp + " " + pointerCancel + " input", this.end, true); 8438 8439 if (this.dragging) { 8440 this.dragging = null; 8441 8442 if (this.index === this.prevIndex) { 8443 this.percent = 1 - this.percent; 8444 this.dir *= -1; 8445 this._show(false, this.index, true); 8446 this._transitioner = null; 8447 } else { 8448 const dirChange = 8449 (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === 8450 this.prevPos > this.pos; 8451 this.index = dirChange ? this.index : this.prevIndex; 8452 8453 if (dirChange) { 8454 this.percent = 1 - this.percent; 8455 } 8456 8457 this.show( 8458 this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? 8459 'next' : 8460 'previous', 8461 true); 8462 8463 } 8464 } 8465 8466 css(this.list, { userSelect: '', pointerEvents: '' }); 8467 8468 this.drag = this.percent = null; 8469 } } }; 8470 8471 8472 8473 function hasTextNodesOnly(el) { 8474 return !el.children.length && el.childNodes.length; 8475 } 8476 8477 var SliderNav = { 8478 data: { 8479 selNav: false }, 8480 8481 8482 computed: { 8483 nav(_ref, $el) {let { selNav } = _ref; 8484 return $(selNav, $el); 8485 }, 8486 8487 selNavItem(_ref2) {let { attrItem } = _ref2; 8488 return "[" + attrItem + "],[data-" + attrItem + "]"; 8489 }, 8490 8491 navItems(_, $el) { 8492 return $$(this.selNavItem, $el); 8493 } }, 8494 8495 8496 update: { 8497 write() { 8498 if (this.nav && this.length !== this.nav.children.length) { 8499 html( 8500 this.nav, 8501 this.slides. 8502 map((_, i) => "<li " + this.attrItem + "=\"" + i + "\"><a href></a></li>"). 8503 join('')); 8504 8505 } 8506 8507 this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex)); 8508 8509 this.updateNav(); 8510 }, 8511 8512 events: ['resize'] }, 8513 8514 8515 events: [ 8516 { 8517 name: 'click', 8518 8519 delegate() { 8520 return this.selNavItem; 8521 }, 8522 8523 handler(e) { 8524 e.preventDefault(); 8525 this.show(data(e.current, this.attrItem)); 8526 } },
8527 8528 8529 { 8530 name: 'itemshow', 8531 handler: 'updateNav' }], 8532 8533 8534 8535 methods: { 8536 updateNav() { 8537 const i = this.getValidIndex(); 8538 for (const el of this.navItems) { 8539 const cmd = data(el, this.attrItem); 8540 8541 toggleClass(el, this.clsActive, toNumber(cmd) === i); 8542 toggleClass( 8543 el, 8544 'uk-invisible', 8545 this.finite && ( 8546 cmd === 'previous' && i === 0 || cmd === 'next' && i >= this.maxIndex)); 8547 8548 } 8549 } } }; 8550 8551 var Slider = { 8552 mixins: [SliderAutoplay, SliderDrag, SliderNav, Resize], 8553 8554 props: { 8555 clsActivated: Boolean, 8556 easing: String, 8557 index: Number, 8558 finite: Boolean, 8559 velocity: Number, 8560 selSlides: String }, 8561 8562 8563 data: () => ({ 8564 easing: 'ease', 8565 finite: false, 8566 velocity: 1, 8567 index: 0, 8568 prevIndex: -1, 8569 stack: [], 8570 percent: 0, 8571 clsActive: 'uk-active', 8572 clsActivated: false, 8573 Transitioner: false, 8574 transitionOptions: {} }), 8575 8576 8577 connected() { 8578 this.prevIndex = -1; 8579 this.index = this.getValidIndex(this.$props.index); 8580 this.stack = []; 8581 }, 8582 8583 disconnected() { 8584 removeClass(this.slides, this.clsActive); 8585 }, 8586 8587 computed: { 8588 duration(_ref, $el) {let { velocity } = _ref; 8589 return speedUp($el.offsetWidth / velocity); 8590 }, 8591 8592 list(_ref2, $el) {let { selList } = _ref2; 8593 return $(selList, $el); 8594 }, 8595 8596 maxIndex() { 8597 return this.length - 1; 8598 }, 8599 8600 selSlides(_ref3) {let { selList, selSlides } = _ref3; 8601 return selList + " " + (selSlides || '> *'); 8602 }, 8603 8604 slides: { 8605 get() { 8606 return $$(this.selSlides, this.$el); 8607 }, 8608 8609 watch() { 8610 this.$reset(); 8611 } }, 8612 8613 8614 length() { 8615 return this.slides.length; 8616 } }, 8617 8618 8619 methods: { 8620 show(index, force) {if (force === void 0) {force = false;} 8621 if (this.dragging || !this.length) { 8622 return; 8623 } 8624 8625 const { stack } = this; 8626 const queueIndex = force ? 0 : stack.length; 8627 const reset = () => { 8628 stack.splice(queueIndex, 1); 8629 8630 if (stack.length) { 8631 this.show(stack.shift(), true); 8632 } 8633 }; 8634 8635 stack[force ? 'unshift' : 'push'](index); 8636 8637 if (!force && stack.length > 1) { 8638 if (stack.length === 2) { 8639 this._transitioner.forward(Math.min(this.duration, 200)); 8640 } 8641 8642 return; 8643 } 8644 8645 const prevIndex = this.getIndex(this.index); 8646 const prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex]; 8647 const nextIndex = this.getIndex(index, this.index); 8648 const next = this.slides[nextIndex]; 8649 8650 if (prev === next) { 8651 reset(); 8652 return; 8653 } 8654 8655 this.dir = getDirection(index, prevIndex); 8656 this.prevIndex = prevIndex; 8657 this.index = nextIndex; 8658 8659 if ( 8660 prev && !trigger(prev, 'beforeitemhide', [this]) || 8661 !trigger(next, 'beforeitemshow', [this, prev])) 8662 { 8663 this.index = this.prevIndex; 8664 reset(); 8665 return; 8666 } 8667 8668 const promise = this._show(prev, next, force).then(() => { 8669 prev && trigger(prev, 'itemhidden', [this]); 8670 trigger(next, 'itemshown', [this]); 8671 8672 return new Promise((resolve) => { 8673 fastdom.write(() => { 8674 stack.shift(); 8675 if (stack.length) { 8676 this.show(stack.shift(), true); 8677 } else { 8678 this._transitioner = null; 8679 } 8680 resolve(); 8681 }); 8682 }); 8683 }); 8684 8685 prev && trigger(prev, 'itemhide', [this]); 8686 trigger(next, 'itemshow', [this]); 8687 8688 return promise; 8689 }, 8690 8691 getIndex(index, prev) {if (index === void 0) {index = this.index;}if (prev === void 0) {prev = this.index;} 8692 return clamp(getIndex(index, this.slides, prev, this.finite), 0, this.maxIndex); 8693 }, 8694 8695 getValidIndex(index, prevIndex) {if (index === void 0) {index = this.index;}if (prevIndex === void 0) {prevIndex = this.prevIndex;} 8696 return this.getIndex(index, prevIndex); 8697 }, 8698 8699 _show(prev, next, force) { 8700 this._transitioner = this._getTransitioner(prev, next, this.dir, { 8701 easing: force ? 8702 next.offsetWidth < 600 ? 8703 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' /* easeOutQuad */ : 8704 'cubic-bezier(0.165, 0.84, 0.44, 1)' /* easeOutQuart */ : 8705 this.easing, 8706 ...this.transitionOptions }); 8707 8708 8709 if (!force && !prev) { 8710 this._translate(1); 8711 return Promise.resolve(); 8712 } 8713 8714 const { length } = this.stack; 8715 return this._transitioner[length > 1 ? 'forward' : 'show']( 8716 length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration, 8717 this.percent); 8718 8719 }, 8720 8721 _getDistance(prev, next) { 8722 return this._getTransitioner(prev, prev !== next && next).getDistance(); 8723 }, 8724 8725 _translate(percent, prev, next) {if (prev === void 0) {prev = this.prevIndex;}if (next === void 0) {next = this.index;} 8726 const transitioner = this._getTransitioner(prev !== next ? prev : false, next); 8727 transitioner.translate(percent); 8728 return transitioner; 8729 }, 8730 8731 _getTransitioner( 8732 prev, 8733 next, 8734 dir, 8735 options) 8736 {if (prev === void 0) {prev = this.prevIndex;}if (next === void 0) {next = this.index;}if (dir === void 0) {dir = this.dir || 1;}if (options === void 0) {options = this.transitionOptions;} 8737 return new this.Transitioner( 8738 isNumber(prev) ? this.slides[prev] : prev, 8739 isNumber(next) ? this.slides[next] : next, 8740 dir * (isRtl ? -1 : 1), 8741 options); 8742 8743 } } }; 8744 8745 8746 8747 function getDirection(index, prevIndex) { 8748 return index === 'next' ? 1 : index === 'previous' ? -1 : index < prevIndex ? -1 : 1; 8749 } 8750 8751 function speedUp(x) { 8752 return 0.5 * x + 300; // parabola through (400,500; 600,600; 1800,1200) 8753 } 8754 8755 var Slideshow = { 8756 mixins: [Slider], 8757 8758 props: { 8759 animation: String }, 8760 8761 8762 data: { 8763 animation: 'slide', 8764 clsActivated: 'uk-transition-active', 8765 Animations: Animations$2, 8766 Transitioner: Transitioner$1 }, 8767 8768 8769 computed: { 8770 animation(_ref) {let { animation, Animations } = _ref; 8771 return { ...(Animations[animation] || Animations.slide), name: animation }; 8772 }, 8773 8774 transitionOptions() { 8775 return { animation: this.animation }; 8776 } },
8777 8778 8779 events: { 8780 beforeitemshow(_ref2) {let { target } = _ref2; 8781 addClass(target, this.clsActive); 8782 }, 8783 8784 itemshown(_ref3) {let { target } = _ref3; 8785 addClass(target, this.clsActivated); 8786 }, 8787 8788 itemhidden(_ref4) {let { target } = _ref4; 8789 removeClass(target, this.clsActive, this.clsActivated); 8790 } } }; 8791 8792 var LightboxPanel = { 8793 mixins: [Container, Modal, Togglable, Slideshow], 8794 8795 functional: true, 8796 8797 props: { 8798 delayControls: Number, 8799 preload: Number, 8800 videoAutoplay: Boolean, 8801 template: String }, 8802 8803 8804 data: () => ({ 8805 preload: 1, 8806 videoAutoplay: false, 8807 delayControls: 3000, 8808 items: [], 8809 cls: 'uk-open', 8810 clsPage: 'uk-lightbox-page', 8811 selList: '.uk-lightbox-items', 8812 attrItem: 'uk-lightbox-item', 8813 selClose: '.uk-close-large', 8814 selCaption: '.uk-lightbox-caption', 8815 pauseOnHover: false, 8816 velocity: 2, 8817 Animations: Animations$1, 8818 template: "<div class=\"uk-lightbox uk-overflow-hidden\"> <ul class=\"uk-lightbox-items\"></ul> <div class=\"uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-sli
8818de-top uk-transition-opaque\"> <button class=\"uk-lightbox-toolbar-icon uk-close-large\" type=\"button\" uk-close></button> </div> <a class=\"uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade\" href uk-slidenav-previous uk-lightbox-item=\"previous\"></a> <a class=\"uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade\" href uk-slidenav-next uk-lightbox-item=\"next\"></a> <div class=\"uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque\"></div> </div>" }), 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 created() { 8830 const $el = $(this.template); 8831 const list = $(this.selList, $el); 8832 this.items.forEach(() => append(list, '<li>')); 8833 8834 this.$mount(append(this.container, $el)); 8835 }, 8836 8837 computed: { 8838 caption(_ref, $el) {let { selCaption } = _ref; 8839 return $(selCaption, $el); 8840 } }, 8841 8842 8843 events: [ 8844 { 8845 name: pointerMove + " " + pointerDown + " keydown", 8846 8847 handler: 'showControls' }, 8848 8849 8850 { 8851 name: 'click', 8852 8853 self: true, 8854 8855 delegate() { 8856 return this.selSlides; 8857 }, 8858 8859 handler(e) { 8860 if (e.defaultPrevented) { 8861 return; 8862 } 8863 8864 this.hide(); 8865 } }, 8866 8867 8868 { 8869 name: 'shown', 8870 8871 self: true, 8872 8873 handler() { 8874 this.showControls(); 8875 } }, 8876 8877 8878 { 8879 name: 'hide', 8880 8881 self: true, 8882 8883 handler() { 8884 this.hideControls(); 8885 8886 removeClass(this.slides, this.clsActive); 8887 Transition.stop(this.slides); 8888 } }, 8889 8890 8891 { 8892 name: 'hidden', 8893 8894 self: true, 8895 8896 handler() { 8897 this.$destroy(true); 8898 } }, 8899 8900 8901 { 8902 name: 'keyup', 8903 8904 el() { 8905 return document; 8906 }, 8907 8908 handler(e) { 8909 if (!this.isToggled(this.$el) || !this.draggable) { 8910 return; 8911 } 8912 8913 switch (e.keyCode) { 8914 case 37: 8915 this.show('previous'); 8916 break; 8917 case 39: 8918 this.show('next'); 8919 break;} 8920 8921 } }, 8922 8923 8924 { 8925 name: 'beforeitemshow', 8926 8927 handler(e) { 8928 if (this.isToggled()) { 8929 return; 8930 } 8931 8932 this.draggable = false; 8933 8934 e.preventDefault(); 8935 8936 this.toggleElement(this.$el, true, false); 8937 8938 this.animation = Animations$1['scale']; 8939 removeClass(e.target, this.clsActive); 8940 this.stack.splice(1, 0, this.index); 8941 } }, 8942 8943 8944 { 8945 name: 'itemshow', 8946 8947 handler() { 8948 html(this.caption, this.getItem().caption || ''); 8949 8950 for (let j = -this.preload; j <= this.preload; j++) { 8951 this.loadItem(this.index + j); 8952 } 8953 } }, 8954 8955 8956 { 8957 name: 'itemshown', 8958 8959 handler() { 8960 this.draggable = this.$props.draggable; 8961 } }, 8962 8963 8964 { 8965 name: 'itemload', 8966 8967 async handler(_, item) { 8968 const { source: src, type, alt = '', poster, attrs = {} } = item; 8969 8970 this.setItem(item, '<span uk-spinner></span>'); 8971 8972 if (!src) { 8973 return; 8974 } 8975 8976 let matches; 8977 const iframeAttrs = { 8978 frameborder: '0', 8979 allow: 'autoplay', 8980 allowfullscreen: '', 8981 style: 'max-width: 100%; box-sizing: border-box;', 8982 'uk-responsive': '', 8983 'uk-video': "" + this.videoAutoplay }; 8984 8985 8986 // Image 8987 if (type === 'image' || src.match(/\.(avif|jpe?g|a?png|gif|svg|webp)($|\?)/i)) { 8988 try { 8989 const { width, height } = await getImage(src, attrs.srcset, attrs.size); 8990 this.setItem(item, createEl('img', { src, width, height, alt, ...attrs })); 8991 } catch (e) { 8992 this.setError(item); 8993 } 8994 8995 // Video 8996 } else if (type === 'video' || src.match(/\.(mp4|webm|ogv)($|\?)/i)) { 8997 const video = createEl('video', { 8998 src, 8999 poster, 9000 controls: '', 9001 playsinline: '', 9002 'uk-video': "" + this.videoAutoplay, 9003 ...attrs }); 9004 9005 9006 on(video, 'loadedmetadata', () => { 9007 attr(video, { width: video.videoWidth, height: video.videoHeight }); 9008 this.setItem(item, video); 9009 }); 9010 on(video, 'error', () => this.setError(item)); 9011 9012 // Iframe 9013 } else if (type === 'iframe' || src.match(/\.(html|php)($|\?)/i)) { 9014 this.setItem( 9015 item, 9016 createEl('iframe', { 9017 src, 9018 frameborder: '0', 9019 allowfullscreen: '', 9020 class: 'uk-lightbox-iframe', 9021 ...attrs })); 9022 9023 9024 9025 // YouTube 9026 } else if ( 9027 matches = src.match( 9028 /\/\/(?:.*?youtube(-nocookie)?\..*?[?&]v=|youtu\.be\/)([\w-]{11})[&?]?(.*)?/)) 9029 9030 { 9031 this.setItem( 9032 item, 9033 createEl('iframe', { 9034 src: "https://www.youtube" + (matches[1] || '') + ".com/embed/" + matches[2] + ( 9035 matches[3] ? "?" + matches[3] : ''), 9036 9037 width: 1920, 9038 height: 1080, 9039 ...iframeAttrs, 9040 ...attrs })); 9041 9042 9043 9044 // Vimeo 9045 } else if (matches = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/)) { 9046 try { 9047 const { height, width } = await ( 9048 await fetch("https://vimeo.com/api/oembed.json?maxwidth=1920&url=" + 9049 encodeURI( 9050 src), 9051 9052 { 9053 credentials: 'omit' })). 9054 9055 9056 json(); 9057 9058 this.setItem( 9059 item, 9060 createEl('iframe', { 9061 src: "https://player.vimeo.com/video/" + matches[1] + ( 9062 matches[2] ? "?" + matches[2] : ''), 9063 9064 width, 9065 height, 9066 ...iframeAttrs, 9067 ...attrs })); 9068 9069 9070 } catch (e) { 9071 this.setError(item); 9072 } 9073 } 9074 } }], 9075 9076 9077 9078 methods: { 9079 loadItem(index) {if (index === void 0) {index = this.index;} 9080 const item = this.getItem(index); 9081 9082 if (!this.getSlide(item).childElementCount) { 9083 trigger(this.$el, 'itemload', [item]); 9084 } 9085 }, 9086 9087 getItem(index) {if (index === void 0) {index = this.index;} 9088 return this.items[getIndex(index, this.slides)]; 9089 }, 9090 9091 setItem(item, content) { 9092 trigger(this.$el, 'itemloaded', [this, html(this.getSlide(item), content)]); 9093 }, 9094 9095 getSlide(item) { 9096 return this.slides[this.items.indexOf(item)]; 9097 }, 9098 9099 setError(item) { 9100 this.setItem(item, '<span uk-icon="icon: bolt; ratio: 2"></span>'); 9101 }, 9102 9103 showControls() { 9104 clearTimeout(this.controlsTimer); 9105 this.controlsTimer = setTimeout(this.hideControls, this.delayControls); 9106 9107 addClass(this.$el, 'uk-active', 'uk-transition-active'); 9108 }, 9109 9110 hideControls() { 9111 removeClass(this.$el, 'uk-active', 'uk-transition-active'); 9112 } } }; 9113 9114 9115 9116 function createEl(tag, attrs) { 9117 const el = fragment("<" + tag + ">"); 9118 attr(el, attrs); 9119 return el; 9120 } 9121 9122 var lightbox = { 9123 install: install$1, 9124 9125 props: { toggle: String }, 9126 9127 data: { toggle: 'a' }, 9128 9129 computed: { 9130 toggles: { 9131 get(_ref, $el) {let { toggle } = _ref; 9132 return $$(toggle, $el); 9133 }, 9134 9135 watch() { 9136 this.hide(); 9137 } } }, 9138 9139 9140 9141 disconnected() { 9142 this.hide(); 9143 }, 9144 9145 events: [ 9146 { 9147 name: 'click', 9148 9149 delegate() { 9150 return this.toggle + ":not(.uk-disabled)"; 9151 }, 9152 9153 handler(e) { 9154 e.preventDefault(); 9155 this.show(e.current); 9156 } }], 9157 9158 9159 9160 methods: { 9161 show(index) { 9162 const items = uniqueBy(this.toggles.map(toItem), 'source'); 9163 9164 if (isElement(index)) { 9165 const { source }
9165 = toItem(index); 9166 index = findIndex(items, (_ref2) => {let { source: src } = _ref2;return source === src;}); 9167 } 9168 9169 this.panel = this.panel || this.$create('lightboxPanel', { ...this.$props, items }); 9170 9171 on(this.panel.$el, 'hidden', () => this.panel = false); 9172 9173 return this.panel.show(index); 9174 }, 9175 9176 hide() {var _this$panel; 9177 return (_this$panel = this.panel) == null ? void 0 : _this$panel.hide(); 9178 } } }; 9179 9180 9181 9182 function install$1(UIkit, Lightbox) { 9183 if (!UIkit.lightboxPanel) { 9184 UIkit.component('lightboxPanel', LightboxPanel); 9185 } 9186 9187 assign(Lightbox.props, UIkit.component('lightboxPanel').options.props); 9188 } 9189 9190 function toItem(el) { 9191 const item = {}; 9192 9193 for (const attr of ['href', 'caption', 'type', 'poster', 'alt', 'attrs']) { 9194 item[attr === 'href' ? 'source' : attr] = data(el, attr); 9195 } 9196 9197 item.attrs = parseOptions(item.attrs); 9198 9199 return item; 9200 } 9201 9202 var notification = { 9203 mixins: [Container], 9204 9205 functional: true, 9206 9207 args: ['message', 'status'], 9208 9209 data: { 9210 message: '', 9211 status: '', 9212 timeout: 5000, 9213 group: null, 9214 pos: 'top-center', 9215 clsContainer: 'uk-notification', 9216 clsClose: 'uk-notification-close', 9217 clsMsg: 'uk-notification-message' }, 9218 9219 9220 install, 9221 9222 computed: { 9223 marginProp(_ref) {let { pos } = _ref; 9224 return "margin" + (startsWith(pos, 'top') ? 'Top' : 'Bottom'); 9225 }, 9226 9227 startProps() { 9228 return { opacity: 0, [this.marginProp]: -this.$el.offsetHeight }; 9229 } }, 9230 9231 9232 created() { 9233 const container = 9234 $("." + this.clsContainer + "-" + this.pos, this.container) || 9235 append( 9236 this.container, "<div class=\"" + 9237 this.clsContainer + " " + this.clsContainer + "-" + this.pos + "\" style=\"display: block\"></div>"); 9238 9239 9240 this.$mount( 9241 append( 9242 container, "<div class=\"" + 9243 this.clsMsg + (this.status ? " " + this.clsMsg + "-" + this.status : '') + "\"> <a href class=\"" + 9244 this.clsClose + "\" data-uk-close></a> <div>" + 9245 this.message + "</div> </div>")); 9246 9247 9248 9249 }, 9250 9251 async connected() { 9252 const margin = toFloat(css(this.$el, this.marginProp)); 9253 await Transition.start(css(this.$el, this.startProps), { 9254 opacity: 1, 9255 [this.marginProp]: margin }); 9256 9257 9258 if (this.timeout) { 9259 this.timer = setTimeout(this.close, this.timeout); 9260 } 9261 }, 9262 9263 events: { 9264 click(e) { 9265 if (closest(e.target, 'a[href="#"],a[href=""]')) { 9266 e.preventDefault(); 9267 } 9268 this.close(); 9269 }, 9270 9271 [pointerEnter]() { 9272 if (this.timer) { 9273 clearTimeout(this.timer); 9274 } 9275 }, 9276 9277 [pointerLeave]() { 9278 if (this.timeout) { 9279 this.timer = setTimeout(this.close, this.timeout); 9280 } 9281 } }, 9282 9283 9284 methods: { 9285 async close(immediate) { 9286 const removeFn = (el) => { 9287 const container = parent(el); 9288 9289 trigger(el, 'close', [this]); 9290 remove$1(el); 9291 9292 if (!(container != null && container.hasChildNodes())) { 9293 remove$1(container); 9294 } 9295 }; 9296 9297 if (this.timer) { 9298 clearTimeout(this.timer); 9299 } 9300 9301 if (!immediate) { 9302 await Transition.start(this.$el, this.startProps); 9303 } 9304 9305 removeFn(this.$el); 9306 } } }; 9307 9308 9309 9310 function install(UIkit) { 9311 UIkit.notification.closeAll = function (group, immediate) { 9312 apply(document.body, (el) => { 9313 const notification = UIkit.getComponent(el, 'notification'); 9314 if (notification && (!group || group === notification.group)) { 9315 notification.close(immediate); 9316 } 9317 }); 9318 }; 9319 } 9320 9321 const props = { 9322 x: transformFn, 9323 y: transformFn, 9324 rotate: transformFn, 9325 scale: transformFn, 9326 color: colorFn, 9327 backgroundColor: colorFn, 9328 borderColor: colorFn, 9329 blur: filterFn,
9330 hue: filterFn, 9331 fopacity: filterFn, 9332 grayscale: filterFn, 9333 invert: filterFn, 9334 saturate: filterFn, 9335 sepia: filterFn, 9336 opacity: cssPropFn, 9337 stroke: strokeFn, 9338 bgx: backgroundFn, 9339 bgy: backgroundFn }; 9340 9341 9342 const { keys } = Object; 9343 9344 var Parallax = { 9345 mixins: [Media], 9346 9347 props: fillObject(keys(props), 'list'), 9348 9349 data: fillObject(keys(props), undefined), 9350 9351 computed: { 9352 props(properties, $el) { 9353 return keys(props).reduce((result, prop) => { 9354 if (!isUndefined(properties[prop])) { 9355 result[prop] = props[prop](prop, $el, properties[prop].slice()); 9356 } 9357 return result; 9358 }, {}); 9359 } }, 9360 9361 9362 events: { 9363 load() { 9364 this.$emit(); 9365 } }, 9366 9367 9368 methods: { 9369 reset() { 9370 each(this.getCss(0), (_, prop) => css(this.$el, prop, '')); 9371 }, 9372 9373 getCss(percent) { 9374 const css = { transform: '', filter: '' }; 9375 for (const prop in this.props) { 9376 this.props[prop](css, percent); 9377 } 9378 return css; 9379 } } }; 9380 9381 9382 9383 function transformFn(prop, el, stops) { 9384 const unit = getUnit(stops) || { x: 'px', y: 'px', rotate: 'deg' }[prop] || ''; 9385 let transformFn; 9386 9387 if (prop === 'x' || prop === 'y') { 9388 prop = "translate" + ucfirst(prop); 9389 transformFn = (stop) => toFloat(toFloat(stop).toFixed(unit === 'px' ? 0 : 6)); 9390 } 9391 9392 if (stops.length === 1) { 9393 stops.unshift(prop === 'scale' ? 1 : 0); 9394 } 9395 9396 stops = parseStops(stops, transformFn); 9397 9398 return (css, percent) => { 9399 css.transform += " " + prop + "(" + getValue(stops, percent) + unit + ")"; 9400 }; 9401 } 9402 9403 function colorFn(prop, el, stops) { 9404 if (stops.length === 1) { 9405 stops.unshift(getCssValue(el, prop, '')); 9406 } 9407 9408 stops = parseStops(stops, (stop) => parseColor(el, stop)); 9409 9410 return (css, percent) => { 9411 const [start, end, p] = getStop(stops, percent); 9412 const value = start. 9413 map((value, i) => { 9414 value += p * (end[i] - value); 9415 return i === 3 ? toFloat(value) : parseInt(value, 10); 9416 }). 9417 join(','); 9418 css[prop] = "rgba(" + value + ")"; 9419 }; 9420 } 9421 9422 function parseColor(el, color) { 9423 return getCssValue(el, 'color', color). 9424 split(/[(),]/g). 9425 slice(1, -1). 9426 concat(1). 9427 slice(0, 4). 9428 map(toFloat); 9429 } 9430 9431 function filterFn(prop, el, stops) { 9432 if (stops.length === 1) { 9433 stops.unshift(0); 9434 } 9435 9436 const unit = getUnit(stops) || { blur: 'px', hue: 'deg' }[prop] || '%'; 9437 prop = { fopacity: 'opacity', hue: 'hue-rotate' }[prop] || prop; 9438 stops = parseStops(stops); 9439 9440 return (css, percent) => { 9441 const value = getValue(stops, percent); 9442 css.filter += " " + prop + "(" + (value + unit) + ")"; 9443 }; 9444 } 9445 9446 function cssPropFn(prop, el, stops) { 9447 if (stops.length === 1) { 9448 stops.unshift(getCssValue(el, prop, '')); 9449 } 9450 9451 stops = parseStops(stops); 9452 9453 return (css, percent) => { 9454 css[prop] = getValue(stops, percent); 9455 }; 9456 } 9457 9458 function strokeFn(prop, el, stops) { 9459 if (stops.length === 1) { 9460 stops.unshift(0); 9461 } 9462 9463 const unit = getUnit(stops); 9464 const length = getMaxPathLength(el); 9465 stops = parseStops(stops.reverse(), (stop) => { 9466 stop = toFloat(stop); 9467 return unit === '%' ? stop * length / 100 : stop; 9468 }); 9469 9470 if (!stops.some((_ref) => {let [value] = _ref;return value;})) { 9471 return noop; 9472 } 9473 9474 css(el, 'strokeDasharray', length); 9475 9476 return (css, percent) => { 9477 css.strokeDashoffset = getValue(stops, percent); 9478 }; 9479 } 9480 9481 function backgroundFn(prop, el, stops) { 9482 if (stops.length === 1) { 9483 stops.unshift(0); 9484 } 9485 9486 prop = prop.substr(-1); 9487 const attr = prop === 'y' ? 'height' : 'width'; 9488 stops = parseStops(stops, (stop) => toPx(stop, attr, el)); 9489 9490 const bgPos = getCssValue(el, "background-position-" + prop, ''); 9491 9492 return getCssValue(el, 'backgroundSize', '') === 'cover' ? 9493 backgroundCoverFn(prop, el, stops, bgPos, attr) :
9494 setBackgroundPosFn(prop, stops, bgPos); 9495 } 9496 9497 function backgroundCoverFn(prop, el, stops, bgPos, attr) { 9498 const dimImage = getBackgroundImageDimensions(el); 9499 9500 if (!dimImage.width) { 9501 return noop; 9502 } 9503 9504 const values = stops.map((_ref2) => {let [value] = _ref2;return value;}); 9505 const min = Math.min(...values); 9506 const max = Math.max(...values); 9507 const down = values.indexOf(min) < values.indexOf(max); 9508 9509 const diff = max - min; 9510 let pos = (down ? -diff : 0) - (down ? min : max); 9511 9512 const dimEl = { 9513 width: el.offsetWidth, 9514 height: el.offsetHeight }; 9515 9516 9517 const baseDim = Dimensions.cover(dimImage, dimEl); 9518 const span = baseDim[attr] - dimEl[attr]; 9519 9520 if (span < diff) { 9521 dimEl[attr] = baseDim[attr] + diff - span; 9522 } else if (span > diff) { 9523 const posPercentage = dimEl[attr] / toPx(bgPos, attr, el, true); 9524 9525 if (posPercentage) { 9526 pos -= (span - diff) / posPercentage; 9527 } 9528 } 9529 9530 const dim = Dimensions.cover(dimImage, dimEl); 9531 9532 const fn = setBackgroundPosFn(prop, stops, pos + "px"); 9533 return (css, percent) => { 9534 fn(css, percent); 9535 css.backgroundSize = dim.width + "px " + dim.height + "px"; 9536 css.backgroundRepeat = 'no-repeat'; 9537 }; 9538 } 9539 9540 function setBackgroundPosFn(prop, stops, pos) { 9541 return function (css, percent) { 9542 css["background-position-" + prop] = "calc(" + pos + " + " + getValue(stops, percent) + "px)"; 9543 }; 9544 } 9545 9546 const dimensions = {}; 9547 function getBackgroundImageDimensions(el) { 9548 const src = css(el, 'backgroundImage').replace(/^none|url\(["']?(.+?)["']?\)$/, '$1'); 9549 9550 if (dimensions[src]) { 9551 return dimensions[src]; 9552 } 9553 9554 const image = new Image(); 9555 if (src) { 9556 image.src = src; 9557 9558 if (!image.naturalWidth) { 9559 image.onload = () => { 9560 dimensions[src] = toDimensions(image); 9561 trigger(el, createEvent('load', false)); 9562 }; 9563 return toDimensions(image); 9564 } 9565 } 9566 9567 return dimensions[src] = toDimensions(image); 9568 } 9569 9570 function toDimensions(image) { 9571 return { 9572 width: image.naturalWidth, 9573 height: image.naturalHeight }; 9574 9575 } 9576 9577 function parseStops(stops, fn) {if (fn === void 0) {fn = toFloat;} 9578 const result = []; 9579 const { length } = stops; 9580 let nullIndex = 0; 9581 for (let i = 0; i < length; i++) { 9582 let [value, percent] = isString(stops[i]) ? stops[i].trim().split(' ') : [stops[i]]; 9583 value = fn(value); 9584 percent = percent ? toFloat(percent) / 100 : null; 9585 9586 if (i === 0) { 9587 if (percent === null) { 9588 percent = 0; 9589 } else if (percent) { 9590 result.push([value, 0]); 9591 } 9592 } else if (i === length - 1) { 9593 if (percent === null) { 9594 percent = 1; 9595 } else if (percent !== 1) { 9596 result.push([value, percent]); 9597 percent = 1; 9598 } 9599 } 9600 9601 result.push([value, percent]); 9602 9603 if (percent === null) { 9604 nullIndex++; 9605 } else if (nullIndex) { 9606 const leftPercent = result[i - nullIndex - 1][1]; 9607 const p = (percent - leftPercent) / (nullIndex + 1); 9608 for (let j = nullIndex; j > 0; j--) { 9609 result[i - j][1] = leftPercent + p * (nullIndex - j + 1); 9610 } 9611 9612 nullIndex = 0; 9613 } 9614 } 9615 9616 return result; 9617 } 9618 9619 function getStop(stops, percent) { 9620 const index = findIndex(stops.slice(1), (_ref3) => {let [, targetPercent] = _ref3;return percent <= targetPercent;}) + 1; 9621 return [ 9622 stops[index - 1][0], 9623 stops[index][0], 9624 (percent - stops[index - 1][1]) / (stops[index][1] - stops[index - 1][1])]; 9625 9626 } 9627 9628 function getValue(stops, percent) { 9629 const [start, end, p] = getStop(stops, percent); 9630 return isNumber(start) ? start + Math.abs(start - end) * p * (start < end ? 1 : -1) : +end; 9631 } 9632 9633 const unitRe = /^-?\d+([^\s]*)/; 9634 function getUnit(stops, defaultUnit) { 9635 for (const stop of stops) { 9636 const match = stop.match == null ? void 0 : stop.match(unitRe); 9637 if (match) { 9638 return match[1]; 9639 } 9640 } 9641 return defaultUnit; 9642 } 9643 9644 function getCssValue(el, prop, value) { 9645 const prev = el.style[prop];
9646 const val = css(css(el, prop, value), prop); 9647 el.style[prop] = prev; 9648 return val; 9649 } 9650 9651 function fillObject(keys, value) { 9652 return keys.reduce((data, prop) => { 9653 data[prop] = value; 9654 return data; 9655 }, {}); 9656 } 9657 9658 var parallax = { 9659 mixins: [Parallax, Resize, Scroll], 9660 9661 props: { 9662 target: String, 9663 viewport: Number, // Deprecated 9664 easing: Number, 9665 start: String, 9666 end: String }, 9667 9668 9669 data: { 9670 target: false, 9671 viewport: 1, 9672 easing: 1, 9673 start: 0, 9674 end: 0 }, 9675 9676 9677 computed: { 9678 target(_ref, $el) {let { target } = _ref; 9679 return getOffsetElement(target && query(target, $el) || $el); 9680 }, 9681 9682 start(_ref2) {let { start } = _ref2; 9683 return toPx(start, 'height', this.target, true); 9684 }, 9685 9686 end(_ref3) {let { end, viewport } = _ref3; 9687 return toPx( 9688 end || (viewport = (1 - viewport) * 100) && viewport + "vh+" + viewport + "%", 9689 'height', 9690 this.target, 9691 true); 9692 9693 } }, 9694 9695 9696 update: { 9697 read(_ref4, types) {let { percent } = _ref4; 9698 if (!types.has('scroll')) { 9699 percent = false; 9700 } 9701 9702 if (!this.matchMedia) { 9703 return; 9704 } 9705 9706 const prev = percent; 9707 percent = ease(scrolledOver(this.target, this.start, this.end), this.easing); 9708 9709 return { 9710 percent, 9711 style: prev === percent ? false : this.getCss(percent) }; 9712 9713 }, 9714 9715 write(_ref5) {let { style } = _ref5; 9716 if (!this.matchMedia) { 9717 this.reset(); 9718 return; 9719 } 9720 9721 style && css(this.$el, style); 9722 }, 9723 9724 events: ['scroll', 'resize'] } }; 9725 9726 9727 9728 function ease(percent, easing) { 9729 return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, -easing + 1); 9730 } 9731 9732 // SVG elements do not inherit from HTMLElement 9733 function getOffsetElement(el) { 9734 return el ? 'offsetTop' in el ? el : getOffsetElement(parent(el)) : document.documentElement; 9735 } 9736 9737 var SliderReactive = { 9738 update: { 9739 write() { 9740 if (this.stack.length || this.dragging) { 9741 return; 9742 } 9743 9744 const index = this.getValidIndex(this.index); 9745 9746 if (!~this.prevIndex || this.index !== index) { 9747 this.show(index); 9748 } 9749 }, 9750 9751 events: ['resize'] } }; 9752 9753 var SliderPreload = { 9754 mixins: [Lazyload], 9755 9756 connected() { 9757 this.lazyload(this.slides, this.getAdjacentSlides); 9758 } }; 9759 9760 function Transitioner (prev, next, dir, _ref) {let { center, easing, list } = _ref; 9761 const deferred = new Deferred(); 9762 9763 const from = prev ? 9764 getLeft(prev, list, center) : 9765 getLeft(next, list, center) + dimensions$1(next).width * dir; 9766 const to = next ? 9767 getLeft(next, list, center) : 9768 from + dimensions$1(prev).width * dir * (isRtl ? -1 : 1); 9769 9770 return { 9771 dir, 9772 9773 show(duration, percent, linear) {if (percent === void 0) {percent = 0;} 9774 const timing = linear ? 'linear' : easing; 9775 duration -= Math.round(duration * clamp(percent, -1, 1)); 9776 9777 this.translate(percent); 9778 9779 percent = prev ? percent : clamp(percent, 0, 1); 9780 triggerUpdate(this.getItemIn(), 'itemin', { percent, duration, timing, dir }); 9781 prev && 9782 triggerUpdate(this.getItemIn(true), 'itemout', { 9783 percent: 1 - percent, 9784 duration, 9785 timing, 9786 dir }); 9787 9788 9789 Transition.start( 9790 list, 9791 { transform: translate(-to * (isRtl ? -1 : 1), 'px') }, 9792 duration, 9793 timing). 9794 then(deferred.resolve, noop); 9795 9796 return deferred.promise; 9797 }, 9798 9799 cancel() { 9800 Transition.cancel(list); 9801 }, 9802 9803 reset() { 9804 css(list, 'transform', ''); 9805 }, 9806 9807 forward(duration, percent) {if (percent === void 0) {percent = this.percent();} 9808 Transition.cancel(list); 9809 return this.show(duration, percent, true); 9810 }, 9811 9812 translate(percent) { 9813 const distance = this.getDistance() * dir * (isRtl ? -1 : 1); 9814 9815 css( 9816 list, 9817 'transform', 9818 translate( 9819 clamp( 9820 -to + (distance - distance * percent), 9821 -getWidth(list), 9822 dimensions$1(list).width) * ( 9823 isRtl ? -1 : 1), 9824 'px')); 9825 9826 9827 9828 const actives = this.getActives(); 9829 const itemIn = this.getItemIn(); 9830 const itemOut = this.getItemIn(true); 9831 9832 percent = prev ? clamp(percent, -1, 1) : 0; 9833 9834 for (const slide of children(list)) { 9835 const isActive = includes(actives, slide); 9836 const isIn = slide === itemIn; 9837 const isOut = slide === itemOut; 9838 const translateIn = 9839 isIn || 9840 !isOut && ( 9841 isActive || 9842 dir * (isRtl ? -1 : 1) === -1 ^ 9843 getElLeft(slide, list) > getElLeft(prev || next)); 9844 9845 triggerUpdate(slide, "itemtranslate" + (translateIn ? 'in' : 'out'), { 9846 dir, 9847 percent: isOut ? 1 - percent : isIn ? percent : isActive ? 1 : 0 }); 9848 9849 } 9850 }, 9851 9852 percent() { 9853 return Math.abs( 9854 (css(list, 'transform').split(',')[4] * (isRtl ? -1 : 1) + from) / (to - from)); 9855 9856 }, 9857 9858 getDistance() { 9859 return Math.abs(to - from); 9860 }, 9861 9862 getItemIn(out) {if (out === void 0) {out = false;} 9863 let actives = this.getActives(); 9864 let nextActives = inView(list, getLeft(next || prev, list, center)); 9865 9866 if (out) { 9867 const temp = actives; 9868 actives = nextActives; 9869 nextActives = temp; 9870 } 9871 9872 return nextActives[findIndex(nextActives, (el) => !includes(actives, el))]; 9873 }, 9874 9875 getActives() { 9876 return inView(list, getLeft(prev || next, list, center)); 9877 } }; 9878 9879 } 9880 9881 function getLeft(el, list, center) { 9882 const left = getElLeft(el, list); 9883 9884 return center ? left - centerEl(el, list) : Math.min(left, getMax(list)); 9885 } 9886 9887 function getMax(list) { 9888 return Math.max(0, getWidth(list) - dimensions$1(list).width); 9889 } 9890 9891 function getWidth(list) { 9892 return children(list).reduce((right, el) => dimensions$1(el).width + right, 0); 9893 } 9894 9895 function centerEl(el, list) { 9896 return dimensions$1(list).width / 2 - dimensions$1(el).width / 2; 9897 } 9898 9899 function getElLeft(el, list) { 9900 return ( 9901 el && 9902 (position(el).left + (isRtl ? dimensions$1(el).width - dimensions$1(list).width : 0)) * ( 9903 isRtl ? -1 : 1) || 9904 0); 9905 9906 } 9907 9908 function inView(list, listLeft) { 9909 listLeft -= 1; 9910 const listWidth = dimensions$1(list).width; 9911 const listRight = listLeft + listWidth + 2; 9912 9913 return children(list).filter((slide) => { 9914 const slideLeft = getElLeft(slide, list); 9915 const slideRight = slideLeft + Math.min(dimensions$1(slide).width, listWidth); 9916 9917 return slideLeft >= listLeft && slideRight <= listRight; 9918 }); 9919 } 9920 9921 function triggerUpdate(el, type, data) { 9922 trigger(el, createEvent(type, false, false, data)); 9923 } 9924 9925 var slider = { 9926 mixins: [Class, Slider, SliderReactive, SliderPreload], 9927 9928 props: { 9929 center: Boolean, 9930 sets: Boolean }, 9931 9932 9933 data: { 9934 center: false, 9935 sets: false, 9936 attrItem: 'uk-slider-item', 9937 selList: '.uk-slider-items', 9938 selNav: '.uk-slider-nav', 9939 clsContainer: 'uk-slider-container', 9940 Transitioner }, 9941 9942 9943 computed: { 9944 avgWidth() { 9945 return getWidth(this.list) / this.length; 9946 }, 9947 9948 finite(_ref) {let { finite } = _ref; 9949 return ( 9950 finite || 9951 Math.ceil(getWidth(this.list)) < 9952 Math.trunc(dimensions$1(this.list).width + getMaxElWidth(this.list) + this.center)); 9953 9954 }, 9955 9956 maxIndex() { 9957 if (!this.finite || this.center && !this.sets) { 9958 return this.length - 1; 9959 } 9960 9961 if (this.center) { 9962 return last(this.sets); 9963 } 9964 9965 let lft = 0; 9966 const max = getMax(this.list); 9967 const index = findIndex(this.slides, (el) => { 9968 if (lft >= max) { 9969 return true; 9970 } 9971 9972 lft += dimensions$1(el).width; 9973 }); 9974 9975 return ~index ? index : this.length - 1; 9976 }, 9977 9978 sets(_ref2) {let { sets: enabled } = _ref2; 9979 if (!enabled) { 9980 return; 9981 } 9982 9983 let left = 0; 9984 const sets = []; 9985 const width = dimensions$1(this.list).width; 9986 for (let i in this.slides) { 9987 const slideWidth = dimensions$1(this.slides[i]).width; 9988 9989 if (left + slideWidth > width) { 9990 left = 0; 9991 } 9992 9993 if (this.center) { 9994 if ( 9995 left < width / 2 && 9996 left + slideWidth + dimensions$1(this.slides[+i + 1]).width / 2 > width / 2) 9997 { 9998 sets.push(+i); 9999 left = width / 2 - slideWidth / 2; 10000 } 10001 } else if (left === 0) { 10002 sets.push(Math.min(+i, this.maxIndex)); 10003 } 10004 10005 left += slideWidth; 10006 } 10007 10008 if (sets.length) { 10009 return sets; 10010 } 10011 }, 10012 10013 transitionOptions() { 10014 return { 10015 center: this.center, 10016 list: this.list }; 10017 10018 } },
10019 10020 10021 connected() { 10022 toggleClass(this.$el, this.clsContainer, !$("." + this.clsContainer, this.$el)); 10023 }, 10024 10025 update: { 10026 write() { 10027 for (const el of this.navItems) { 10028 const index = toNumber(data(el, this.attrItem)); 10029 if (index !== false) { 10030 el.hidden = 10031 !this.maxIndex || 10032 index > this.maxIndex || 10033 this.sets && !includes(this.sets, index); 10034 } 10035 } 10036 10037 if (this.length && !this.dragging && !this.stack.length) { 10038 this.reorder(); 10039 this._translate(1); 10040 } 10041 10042 this.updateActiveClasses(); 10043 }, 10044 10045 events: ['resize'] }, 10046 10047 10048 events: { 10049 beforeitemshow(e) { 10050 if ( 10051 !this.dragging && 10052 this.sets && 10053 this.stack.length < 2 && 10054 !includes(this.sets, this.index)) 10055 { 10056 this.index = this.getValidIndex(); 10057 } 10058 10059 const diff = Math.abs( 10060 this.index - 10061 this.prevIndex + ( 10062 this.dir > 0 && this.index < this.prevIndex || 10063 this.dir < 0 && this.index > this.prevIndex ? 10064 (this.maxIndex + 1) * this.dir : 10065 0)); 10066 10067 10068 if (!this.dragging && diff > 1) { 10069 for (let i = 0; i < diff; i++) { 10070 this.stack.splice(1, 0, this.dir > 0 ? 'next' : 'previous'); 10071 } 10072 10073 e.preventDefault(); 10074 return; 10075 } 10076 10077 const index = 10078 this.dir < 0 || !this.slides[this.prevIndex] ? this.index : this.prevIndex; 10079 this.duration = 10080 speedUp(this.avgWidth / this.velocity) * ( 10081 dimensions$1(this.slides[index]).width / this.avgWidth); 10082 10083 this.reorder(); 10084 }, 10085 10086 itemshow() { 10087 if (~this.prevIndex) { 10088 addClass(this._getTransitioner().getItemIn(), this.clsActive); 10089 } 10090 }, 10091 10092 itemshown() { 10093 this.updateActiveClasses(); 10094 } }, 10095 10096 10097 methods: { 10098 reorder() { 10099 if (this.finite) { 10100 css(this.slides, 'order', ''); 10101 return; 10102 } 10103 10104 const index = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index; 10105 10106 this.slides.forEach((slide, i) => 10107 css( 10108 slide, 10109 'order', 10110 this.dir > 0 && i < index ? 1 : this.dir < 0 && i >= this.index ? -1 : '')); 10111 10112 10113 10114 if (!this.center) { 10115 return; 10116 } 10117 10118 const next = this.slides[index]; 10119 let width = dimensions$1(this.list).width / 2 - dimensions$1(next).width / 2; 10120 let j = 0; 10121 10122 while (width > 0) { 10123 const slideIndex = this.getIndex(--j + index, index); 10124 const slide = this.slides[slideIndex]; 10125 10126 css(slide, 'order', slideIndex > index ? -2 : -1); 10127 width -= dimensions$1(slide).width; 10128 } 10129 }, 10130 10131 updateActiveClasses() { 10132 const actives = this._getTransitioner(this.index).getActives(); 10133 const activeClasses = [ 10134 this.clsActive, 10135 (!this.sets || includes(this.sets, toFloat(this.index))) && this.clsActivated || 10136 '']; 10137 10138 for (const slide of this.slides) { 10139 toggleClass(slide, activeClasses, includes(actives, slide)); 10140 } 10141 }, 10142 10143 getValidIndex(index, prevIndex) {if (index === void 0) {index = this.index;}if (prevIndex === void 0) {prevIndex = this.prevIndex;} 10144 index = this.getIndex(index, prevIndex); 10145 10146 if (!this.sets) { 10147 return index; 10148 } 10149 10150 let prev; 10151 10152 do { 10153 if (includes(this.sets, index)) { 10154 return index; 10155 } 10156 10157 prev = index; 10158 index = this.getIndex(index + this.dir, prevIndex); 10159 } while (index !== prev); 10160 10161 return index; 10162 }, 10163 10164 getAdjacentSlides() { 10165 const { width } = dimensions$1(this.list); 10166 const left = -width; 10167 const right = width * 2; 10168 const slideWidth = dimensions$1(this.slides[this.index]).width; 10169 const slideLeft = this.center ? width / 2 - slideWidth / 2 : 0; 10170 const slides = new Set(); 10171 for (const i of [-1, 1]) { 10172 let currentLeft = slideLeft + (i > 0 ? slideWidth : 0); 10173 let j = 0; 10174 do { 10175 const slide = this.slides[this.getIndex(this.index + i + j++ * i)]; 10176 currentLeft += dimensions$1(slide).width * i; 10177 slides.add(slide); 10178 } while (this.slides.length > j && currentLeft > left && currentLeft < right); 10179 } 10180 return Array.from(slides); 10181 } } }; 10182 10183 10184 10185 function getMaxElWidth(list) { 10186 return Math.max(0, ...children(list).map((el) => dimensions$1(el).width)); 10187 } 10188 10189 var sliderParallax = { 10190 mixins: [Parallax], 10191 10192 data: { 10193 selItem: '!li' }, 10194 10195 10196 beforeConnect() { 10197 this.item = query(this.selItem, this.$el); 10198 }, 10199 10200 disconnected() { 10201 this.item = null; 10202 }, 10203 10204 events: [ 10205 { 10206 name: 'itemin itemout', 10207 10208 self: true, 10209 10210 el() { 10211 return this.item; 10212 }, 10213 10214 handler(_ref) {let { type, detail: { percent, duration, timing, dir } } = _ref; 10215 fastdom.read(() => { 10216 const propsFrom = this.getCss(getCurrentPercent(type, dir, percent));
10217 const propsTo = this.getCss(isIn(type) ? 0.5 : dir > 0 ? 1 : 0); 10218 fastdom.write(() => { 10219 css(this.$el, propsFrom); 10220 Transition.start(this.$el, propsTo, duration, timing).catch(noop); 10221 }); 10222 }); 10223 } }, 10224 10225 10226 { 10227 name: 'transitioncanceled transitionend', 10228 10229 self: true, 10230 10231 el() { 10232 return this.item; 10233 }, 10234 10235 handler() { 10236 Transition.cancel(this.$el); 10237 } }, 10238 10239 10240 { 10241 name: 'itemtranslatein itemtranslateout', 10242 10243 self: true, 10244 10245 el() { 10246 return this.item; 10247 }, 10248 10249 handler(_ref2) {let { type, detail: { percent, dir } } = _ref2; 10250 fastdom.read(() => { 10251 const props = this.getCss(getCurrentPercent(type, dir, percent)); 10252 fastdom.write(() => css(this.$el, props)); 10253 }); 10254 } }] }; 10255 10256 10257 10258 10259 function isIn(type) { 10260 return endsWith(type, 'in'); 10261 } 10262 10263 function getCurrentPercent(type, dir, percent) { 10264 percent /= 2; 10265 10266 return isIn(type) ^ dir < 0 ? percent : 1 - percent; 10267 } 10268 10269 var Animations = { 10270 ...Animations$2, 10271 fade: { 10272 show() { 10273 return [{ opacity: 0, zIndex: 0 }, { zIndex: -1 }]; 10274 }, 10275 10276 percent(current) { 10277 return 1 - css(current, 'opacity'); 10278 }, 10279 10280 translate(percent) { 10281 return [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }]; 10282 } }, 10283 10284 10285 scale: { 10286 show() { 10287 return [{ opacity: 0, transform: scale3d(1 + 0.5), zIndex: 0 }, { zIndex: -1 }]; 10288 }, 10289 10290 percent(current) { 10291 return 1 - css(current, 'opacity'); 10292 }, 10293 10294 translate(percent) { 10295 return [ 10296 { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 }, 10297 { zIndex: -1 }]; 10298 10299 } }, 10300 10301 10302 pull: { 10303 show(dir) { 10304 return dir < 0 ? 10305 [ 10306 { transform: translate(30), zIndex: -1 }, 10307 { transform: translate(), zIndex: 0 }] : 10308 10309 [ 10310 { transform: translate(-100), zIndex: 0 }, 10311 { transform: translate(), zIndex: -1 }]; 10312 10313 }, 10314 10315 percent(current, next, dir) { 10316 return dir < 0 ? 1 - translated(next) : translated(current); 10317 }, 10318 10319 translate(percent, dir) { 10320 return dir < 0 ? 10321 [ 10322 { transform: translate(30 * percent), zIndex: -1 }, 10323 { transform: translate(-100 * (1 - percent)), zIndex: 0 }] : 10324 10325 [ 10326 { transform: translate(-percent * 100), zIndex: 0 }, 10327 { transform: translate(30 * (1 - percent)), zIndex: -1 }]; 10328 10329 } }, 10330 10331 10332 push: { 10333 show(dir) { 10334 return dir < 0 ? 10335 [ 10336 { transform: translate(100), zIndex: 0 }, 10337 { transform: translate(), zIndex: -1 }] : 10338 10339 [ 10340 { transform: translate(-30), zIndex: -1 }, 10341 { transform: translate(), zIndex: 0 }]; 10342 10343 }, 10344 10345 percent(current, next, dir) { 10346 return dir > 0 ? 1 - translated(next) : translated(current); 10347 }, 10348 10349 translate(percent, dir) { 10350 return dir < 0 ? 10351 [ 10352 { transform: translate(percent * 100), zIndex: 0 }, 10353 { transform: translate(-30 * (1 - percent)), zIndex: -1 }] : 10354 10355 [ 10356 { transform: translate(-30 * percent), zIndex: -1 }, 10357 { transform: translate(100 * (1 - percent)), zIndex: 0 }]; 10358 10359 } } }; 10360 10361 var slideshow = { 10362 mixins: [Class, Slideshow, SliderReactive, SliderPreload], 10363 10364 props: { 10365 ratio: String, 10366 minHeight: Number, 10367 maxHeight: Number }, 10368 10369 10370 data: { 10371 ratio: '16:9', 10372 minHeight: false, 10373 maxHeight: false, 10374 selList: '.uk-slideshow-items', 10375 attrItem: 'uk-slideshow-item', 10376 selNav: '.uk-slideshow-nav', 10377 Animations }, 10378 10379 10380 update: { 10381 read() { 10382 if (!this.list) { 10383 return false; 10384 } 10385 10386 let [width, height] = this.ratio.split(':').map(Number); 10387 10388 height = height * this.list.offsetWidth / width || 0; 10389 10390 if (this.minHeight) { 10391 height = Math.max(this.minHeight, height); 10392 } 10393 10394 if (this.maxHeight) { 10395 height = Math.min(this.maxHeight, height); 10396 } 10397 10398 return { height: height - boxModelAdjust(this.list, 'height', 'content-box') }; 10399 }, 10400 10401 write(_ref) {let { height } = _ref; 10402 height > 0 && css(this.list, 'minHeight', height); 10403 }, 10404 10405 events: ['resize'] }, 10406 10407 10408 methods: { 10409 getAdjacentSlides() { 10410 return [1, -1].map((i) =>
10410 this.slides[this.getIndex(this.index + i)]); 10411 } } }; 10412 10413 var sortable = { 10414 mixins: [Class, Animate], 10415 10416 props: { 10417 group: String, 10418 threshold: Number, 10419 clsItem: String, 10420 clsPlaceholder: String, 10421 clsDrag: String, 10422 clsDragState: String, 10423 clsBase: String, 10424 clsNoDrag: String, 10425 clsEmpty: String, 10426 clsCustom: String, 10427 handle: String }, 10428 10429 10430 data: { 10431 group: false, 10432 threshold: 5, 10433 clsItem: 'uk-sortable-item', 10434 clsPlaceholder: 'uk-sortable-placeholder', 10435 clsDrag: 'uk-sortable-drag', 10436 clsDragState: 'uk-drag', 10437 clsBase: 'uk-sortable', 10438 clsNoDrag: 'uk-sortable-nodrag', 10439 clsEmpty: 'uk-sortable-empty', 10440 clsCustom: '', 10441 handle: false, 10442 pos: {} }, 10443 10444 10445 created() { 10446 for (const key of ['init', 'start', 'move', 'end']) { 10447 const fn = this[key]; 10448 this[key] = (e) => { 10449 assign(this.pos, getEventPos(e)); 10450 fn(e); 10451 }; 10452 } 10453 }, 10454 10455 events: { 10456 name: pointerDown, 10457 passive: false, 10458 handler: 'init' }, 10459 10460 10461 computed: { 10462 target() { 10463 return (this.$el.tBodies || [this.$el])[0]; 10464 }, 10465 10466 items() { 10467 return children(this.target); 10468 }, 10469 10470 isEmpty: { 10471 get() { 10472 return isEmpty(this.items); 10473 }, 10474 10475 watch(empty) { 10476 toggleClass(this.target, this.clsEmpty, empty); 10477 }, 10478 10479 immediate: true }, 10480 10481 10482 handles: { 10483 get(_ref, el) {let { handle } = _ref; 10484 return handle ? $$(handle, el) : this.items; 10485 }, 10486 10487 watch(handles, prev) { 10488 css(prev, { touchAction: '', userSelect: '' }); 10489 css(handles, { touchAction: hasTouch ? 'none' : '', userSelect: 'none' }); // touchAction set to 'none' causes a performance drop in Chrome 80 10490 }, 10491 10492 immediate: true } }, 10493 10494 10495 10496 update: { 10497 write(data) { 10498 if (!this.drag || !parent(this.placeholder)) { 10499 return; 10500 } 10501 10502 const { 10503 pos: { x, y }, 10504 origin: { offsetTop, offsetLeft }, 10505 placeholder } = 10506 this; 10507 10508 css(this.drag, { 10509 top: y - offsetTop, 10510 left: x - offsetLeft }); 10511 10512 10513 const sortable = this.getSortable(document.elementFromPoint(x, y)); 10514 10515 if (!sortable) { 10516 return; 10517 } 10518 10519 const { items } = sortable; 10520 10521 if (items.some(Transition.inProgress)) { 10522 return; 10523 } 10524 10525 const target = findTarget(items, { x, y }); 10526 10527 if (items.length && (!target || target === placeholder)) { 10528 return; 10529 } 10530 10531 const previous = this.getSortable(placeholder); 10532 const insertTarget = findInsertTarget( 10533 sortable.target, 10534 target, 10535 placeholder, 10536 x, 10537 y, 10538 sortable === previous && data.moved !== target); 10539 10540 10541 if (insertTarget === false) { 10542 return; 10543 } 10544 10545 if (insertTarget && placeholder === insertTarget) { 10546 return; 10547 } 10548 10549 if (sortable !== previous) { 10550 previous.remove(placeholder); 10551 data.moved = target; 10552 } else { 10553 delete data.moved; 10554 } 10555 10556 sortable.insert(placeholder, insertTarget); 10557 10558 this.touched.add(sortable); 10559 }, 10560 10561 events: ['move'] }, 10562 10563 10564 methods: { 10565 init(e) { 10566 const { target, button, defaultPrevented } = e; 10567 const [placeholder] = this.items.filter((el) => within(target, el)); 10568 10569 if ( 10570 !placeholder || 10571 defaultPrevented || 10572 button > 0 || 10573 isInput(target) || 10574 within(target, "." + this.clsNoDrag) || 10575 this.handle && !within(target, this.handle)) 10576 { 10577 return; 10578 } 10579 10580 e.preventDefault(); 10581 10582 this.touched = new Set([this]); 10583 this.placeholder = placeholder; 10584 this.origin = { target, index: index(placeholder), ...this.pos }; 10585 10586 on(document, pointerMove, this.move); 10587 on(document, pointerUp, this.end); 10588 10589 if (!this.threshold) { 10590 this.start(e); 10591 } 10592 }, 10593 10594 start(e) { 10595 this.drag = appendDrag(this.$container, this.placeholder); 10596 const { left, top } = this.placeholder.getBoundingClientRect(); 10597 assign(this.origin, { offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top }); 10598 10599 addClass(this.drag, this.clsDrag, this.clsCustom); 10600 addClass(this.placeholder, this.clsPlaceholder); 10601 addClass(this.items, this.clsItem); 10602 addClass(document.documentElement, this.clsDragState); 10603 10604 trigger(this.$el, 'start', [this, this.placeholder]); 10605 10606 trackScroll(this.pos); 10607 10608 this.move(e); 10609 }, 10610 10611 move(e) { 10612 if (this.drag) { 10613 this.$emit('move'); 10614 } else if ( 10615 Math.abs(this.pos.x - this.origin.x) > this.threshold || 10616 Math.abs(this.pos.y - this.origin.y) > this.threshold) 10617 { 10618 this.start(e); 10619 } 10620 }, 10621 10622 end() { 10623 off(document, pointerMove, this.move); 10624 off(document, pointerUp, this.end); 10625 10626 if (!this.drag) { 10627 return; 10628 } 10629 10630 untrackScroll(); 10631
10632 const sortable = this.getSortable(this.placeholder); 10633 10634 if (this === sortable) { 10635 if (this.origin.index !== index(this.placeholder)) { 10636 trigger(this.$el, 'moved', [this, this.placeholder]); 10637 } 10638 } else { 10639 trigger(sortable.$el, 'added', [sortable, this.placeholder]); 10640 trigger(this.$el, 'removed', [this, this.placeholder]); 10641 } 10642 10643 trigger(this.$el, 'stop', [this, this.placeholder]); 10644 10645 remove$1(this.drag); 10646 this.drag = null; 10647 10648 for (const { clsPlaceholder, clsItem } of this.touched) { 10649 for (const sortable of this.touched) { 10650 removeClass(sortable.items, clsPlaceholder, clsItem); 10651 } 10652 } 10653 this.touched = null; 10654 removeClass(document.documentElement, this.clsDragState); 10655 }, 10656 10657 insert(element, target) { 10658 addClass(this.items, this.clsItem); 10659 10660 const insert = () => target ? before(target, element) : append(this.target, element); 10661 10662 this.animate(insert); 10663 }, 10664 10665 remove(element) { 10666 if (!within(element, this.target)) { 10667 return; 10668 } 10669 10670 this.animate(() => remove$1(element)); 10671 }, 10672 10673 getSortable(element) { 10674 do { 10675 const sortable = this.$getComponent(element, 'sortable'); 10676 10677 if ( 10678 sortable && ( 10679 sortable === this || this.group !== false && sortable.group === this.group)) 10680 { 10681 return sortable; 10682 } 10683 } while (element = parent(element)); 10684 } } }; 10685 10686 10687 10688 let trackTimer; 10689 function trackScroll(pos) { 10690 let last = Date.now(); 10691 trackTimer = setInterval(() => { 10692 let { x, y } = pos; 10693 y += scrollTop(window); 10694 10695 const dist = (Date.now() - last) * 0.3; 10696 last = Date.now(); 10697 10698 scrollParents(document.elementFromPoint(x, pos.y), /auto|scroll/). 10699 reverse(). 10700 some((scrollEl) => { 10701 let { scrollTop: scroll, scrollHeight } = scrollEl; 10702 10703 const { top, bottom, height } = offset(getViewport$1(scrollEl)); 10704 10705 if (top < y && top + 35 > y) { 10706 scroll -= dist; 10707 } else if (bottom > y && bottom - 35 < y) { 10708 scroll += dist; 10709 } else { 10710 return; 10711 } 10712 10713 if (scroll > 0 && scroll < scrollHeight - height) { 10714 scrollTop(scrollEl, scroll); 10715 return true; 10716 } 10717 }); 10718 }, 15); 10719 } 10720 10721 function untrackScroll() { 10722 clearInterval(trackTimer); 10723 } 10724 10725 function appendDrag(container, element) { 10726 const clone = append( 10727 container, 10728 element.outerHTML.replace(/(^<)(?:li|tr)|(?:li|tr)(\/>$)/g, '$1div$2')); 10729 10730 10731 css(clone, 'margin', '0', 'important'); 10732 css(clone, { 10733 boxSizing: 'border-box', 10734 width: element.offsetWidth, 10735 height: element.offsetHeight, 10736 padding: css(element, 'padding') }); 10737 10738 10739 height(clone.firstElementChild, height(element.firstElementChild)); 10740 10741 return clone; 10742 } 10743 10744 function findTarget(items, point) { 10745 return items[findIndex(items, (item) => pointInRect(point, item.getBoundingClientRect()))]; 10746 } 10747 10748 function findInsertTarget(list, target, placeholder, x, y, sameList) { 10749 if (!children(list).length) { 10750 return; 10751 } 10752 10753 const rect = target.getBoundingClientRect(); 10754 if (!sameList) { 10755 if (!isHorizontal(list, placeholder)) { 10756 return y < rect.top + rect.height / 2 ? target : target.nextElementSibling; 10757 } 10758 10759 return target; 10760 } 10761 10762 const placeholderRect = placeholder.getBoundingClientRect(); 10763 const sameRow = linesIntersect( 10764 [rect.top, rect.bottom], 10765 [placeholderRect.top, placeholderRect.bottom]); 10766 10767 10768 const pointerPos = sameRow ? x : y; 10769 const lengthProp = sameRow ? 'width' : 'height'; 10770 const startProp = sameRow ? 'left' : 'top'; 10771 const endProp = sameRow ? 'right' : 'bottom'; 10772 10773 const diff = 10774 placeholderRect[lengthProp] < rect[lengthProp] ? 10775 rect[lengthProp] - placeholderRect[lengthProp] : 10776 0; 10777 10778 if (placeholderRect[startProp] < rect[startProp]) { 10779 if (diff && pointerPos < rect[startProp] + diff) { 10780 return false;
10781 } 10782 10783 return target.nextElementSibling; 10784 } 10785 10786 if (diff && pointerPos > rect[endProp] - diff) { 10787 return false; 10788 } 10789 10790 return target; 10791 } 10792 10793 function isHorizontal(list, placeholder) { 10794 const single = children(list).length === 1; 10795 10796 if (single) { 10797 append(list, placeholder); 10798 } 10799 10800 const items = children(list); 10801 const isHorizontal = items.some((el, i) => { 10802 const rectA = el.getBoundingClientRect(); 10803 return items.slice(i + 1).some((el) => { 10804 const rectB = el.getBoundingClientRect(); 10805 return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]); 10806 }); 10807 }); 10808 10809 if (single) { 10810 remove$1(placeholder); 10811 } 10812 10813 return isHorizontal; 10814 } 10815 10816 function linesIntersect(lineA, lineB) { 10817 return lineA[1] > lineB[0] && lineB[1] > lineA[0]; 10818 } 10819 10820 var tooltip = { 10821 mixins: [Container, Togglable, Position], 10822 10823 args: 'title', 10824 10825 props: { 10826 delay: Number, 10827 title: String }, 10828 10829 10830 data: { 10831 pos: 'top', 10832 title: '', 10833 delay: 0, 10834 animation: ['uk-animation-scale-up'], 10835 duration: 100, 10836 cls: 'uk-active' }, 10837 10838 10839 beforeConnect() { 10840 this._hasTitle = hasAttr(this.$el, 'title'); 10841 attr(this.$el, 'title', ''); 10842 this.updateAria(false); 10843 makeFocusable(this.$el); 10844 }, 10845 10846 disconnected() { 10847 this.hide(); 10848 attr(this.$el, 'title', this._hasTitle ? this.title : null); 10849 }, 10850 10851 methods: { 10852 show() { 10853 if (this.isToggled(this.tooltip || null) || !this.title) { 10854 return; 10855 } 10856 10857 this._unbind = once( 10858 document, "show keydown " + 10859 pointerDown, 10860 this.hide, 10861 false, 10862 (e) => 10863 e.type === pointerDown && !within(e.target, this.$el) || 10864 e.type === 'keydown' && e.keyCode === 27 || 10865 e.type === 'show' && e.detail[0] !== this && e.detail[0].$name === this.$name); 10866 10867 10868 clearTimeout(this.showTimer); 10869 this.showTimer = setTimeout(this._show, this.delay); 10870 }, 10871 10872 async hide() { 10873 if (matches(this.$el, 'input:focus')) { 10874 return; 10875 } 10876 10877 clearTimeout(this.showTimer); 10878 10879 if (!this.isToggled(this.tooltip || null)) { 10880 return; 10881 } 10882 10883 await this.toggleElement(this.tooltip, false, false); 10884 remove$1(this.tooltip); 10885 this.tooltip = null; 10886 this._unbind(); 10887 }, 10888 10889 _show() { 10890 this.tooltip = append( 10891 this.container, "<div class=\"uk-" + 10892 this.$options.name + "\"> <div class=\"uk-" + 10893 this.$options.name + "-inner\">" + this.title + "</div> </div>"); 10894 10895 10896
10897 on(this.tooltip, 'toggled', (e, toggled) => { 10898 this.updateAria(toggled); 10899 10900 if (!toggled) { 10901 return; 10902 } 10903 10904 this.positionAt(this.tooltip, this.$el); 10905 10906 this.origin = 10907 this.getAxis() === 'y' ? 10908 flipPosition(this.dir) + "-" + this.align : 10909 this.align + "-" + flipPosition(this.dir); 10910 }); 10911 10912 this.toggleElement(this.tooltip, true); 10913 }, 10914 10915 updateAria(toggled) { 10916 attr(this.$el, 'aria-expanded', toggled); 10917 } }, 10918 10919 10920 events: { 10921 focus: 'show', 10922 blur: 'hide', 10923 10924 [pointerEnter + " " + pointerLeave](e) { 10925 if (!isTouch(e)) { 10926 this[e.type === pointerEnter ? 'show' : 'hide'](); 10927 } 10928 }, 10929 10930 // Clicking a button does not give it focus on all browsers and platforms 10931 // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#clicking_and_focus 10932 [pointerDown](e) { 10933 if (isTouch(e)) { 10934 this.show(); 10935 } 10936 } } }; 10937 10938 10939 10940 function makeFocusable(el) { 10941 if (!isFocusable(el)) { 10942 attr(el, 'tabindex', '0'); 10943 } 10944 } 10945 10946 var upload = { 10947 props: { 10948 allow: String, 10949 clsDragover: String, 10950 concurrent: Number, 10951 maxSize: Number, 10952 method: String, 10953 mime: String, 10954 msgInvalidMime: String, 10955 msgInvalidName: String, 10956 msgInvalidSize: String, 10957 multiple: Boolean, 10958 name: String, 10959 params: Object, 10960 type: String, 10961 url: String }, 10962 10963 10964 data: { 10965 allow: false, 10966 clsDragover: 'uk-dragover', 10967 concurrent: 1, 10968 maxSize: 0, 10969 method: 'POST', 10970 mime: false, 10971 msgInvalidMime: 'Invalid File Type: %s', 10972 msgInvalidName: 'Invalid File Name: %s', 10973 msgInvalidSize: 'Invalid File Size: %s Kilobytes Max', 10974 multiple: false, 10975 name: 'files[]', 10976 params: {}, 10977 type: '', 10978 url: '', 10979 abort: noop, 10980 beforeAll: noop, 10981 beforeSend: noop, 10982 complete: noop, 10983 completeAll: noop, 10984 error: noop, 10985 fail: noop, 10986 load: noop, 10987 loadEnd: noop, 10988 loadStart: noop, 10989 progress: noop }, 10990 10991 10992 events: { 10993 change(e) { 10994 if (!matches(e.target, 'input[type="file"]')) { 10995 return; 10996 } 10997 10998 e.preventDefault(); 10999 11000 if (e.target.files) { 11001 this.upload(e.target.files); 11002 } 11003 11004 e.target.value = ''; 11005 }, 11006 11007 drop(e) { 11008 stop(e); 11009 11010 const transfer = e.dataTransfer; 11011 11012 if (!(transfer != null && transfer.files)) { 11013 return; 11014 } 11015 11016 removeClass(this.$el, this.clsDragover); 11017 11018 this.upload(transfer.files); 11019 }, 11020 11021 dragenter(e) { 11022 stop(e); 11023 }, 11024 11025 dragover(e) { 11026 stop(e); 11027 addClass(this.$el, this.clsDragover); 11028 }, 11029 11030 dragleave(e) { 11031 stop(e); 11032 removeClass(this.$el, this.clsDragover); 11033 } }, 11034 11035 11036 methods: { 11037 async upload(files) { 11038 files = toArray(files); 11039 11040 if (!files.length) { 11041 return; 11042 } 11043 11044 trigger(this.$el, 'upload', [files]); 11045 11046 for (const file of files) { 11047 if (this.maxSize && this.maxSize * 1000 < file.size) { 11048 this.fail(this.msgInvalidSize.replace('%s', this.maxSize)); 11049 return; 11050 } 11051 11052 if (this.allow && !match(this.allow, file.name)) { 11053 this.fail(this.msgInvalidName.replace('%s', this.allow)); 11054 return; 11055 } 11056 11057 if (this.mime && !match(this.mime, file.type)) { 11058 this.fail(this.msgInvalidMime.replace('%s', this.mime)); 11059 return; 11060 } 11061 } 11062 11063 if (!this.multiple) { 11064 files = files.slice(0, 1); 11065 } 11066 11067 this.beforeAll(this, files); 11068 11069 const chunks = chunk(files, this.concurrent); 11070 const upload = async (files) => { 11071 const data = new FormData(); 11072
11073 files.forEach((file) => data.append(this.name, file)); 11074 11075 for (const key in this.params) { 11076 data.append(key, this.params[key]); 11077 } 11078 11079 try { 11080 const xhr = await ajax(this.url, { 11081 data, 11082 method: this.method, 11083 responseType: this.type, 11084 beforeSend: (env) => { 11085 const { xhr } = env; 11086 xhr.upload && on(xhr.upload, 'progress', this.progress); 11087 for (const type of ['loadStart', 'load', 'loadEnd', 'abort']) { 11088 on(xhr, type.toLowerCase(), this[type]); 11089 } 11090 11091 return this.beforeSend(env); 11092 } }); 11093 11094 11095 this.complete(xhr); 11096 11097 if (chunks.length) { 11098 await upload(chunks.shift()); 11099 } else { 11100 this.completeAll(xhr); 11101 } 11102 } catch (e) { 11103 this.error(e); 11104 } 11105 }; 11106 11107 await upload(chunks.shift()); 11108 } } }; 11109 11110 11111 11112 function match(pattern, path) { 11113 return path.match( 11114 new RegExp("^" + 11115 pattern. 11116 replace(/\//g, '\\/'). 11117 replace(/\*\*/g, '(\\/[^\\/]+)*'). 11118 replace(/\*/g, '[^\\/]+'). 11119 replace(/((?!\\))\?/g, '$1.') + "$", 11120 'i')); 11121 11122 11123 } 11124 11125 function chunk(files, size) { 11126 const chunks = []; 11127 for (let i = 0; i < files.length; i += size) { 11128 chunks.push(files.slice(i, i + size)); 11129 } 11130 return chunks; 11131 } 11132 11133 function stop(e) { 11134 e.preventDefault(); 11135 e.stopPropagation(); 11136 } 11137 11138 var components = /*#__PURE__*/Object.freeze({ 11139 __proto__: null, 11140 Countdown: countdown, 11141 Filter: filter, 11142 Lightbox: lightbox, 11143 LightboxPanel: LightboxPanel, 11144 Notification: notification, 11145 Parallax: parallax, 11146 Slider: slider, 11147 SliderParallax: sliderParallax, 11148 Slideshow: slideshow, 11149 SlideshowParallax: sliderParallax, 11150 Sortable: sortable, 11151 Tooltip: tooltip, 11152 Upload: upload 11153 }); 11154 11155 each(components, (component, name) => UIkit.component(name, component)); 11156 11157 return UIkit; 11158 11159})); 11160 11161},{}],3:[function(require,module,exports){ 11162'use strict'; 11163 11164require('./utils/utils'); 11165 11166var _uikit = require('uikit'); 11167 11168var _uikit2 = _interopRequireDefault(_uikit); 11169 11170var _uikitIcons = require('uikit/dist/js/uikit-icons'); 11171 11172var _uikitIcons2 = _interopRequireDefault(_uikitIcons); 11173 11174function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11175 11176_uikit2.default.use(_uikitIcons2.default); 11177 11178(function ($) { 11179 11180 var init = function init() { 11181 onloadActions(); 11182 greatMenu(); 11183 footerLinks(); 11184 }; 11185 11186 $(document).ready(function () { 11187 init(); 11188 }); 11189 11190 $(window).resize(function () {}); 11191 11192 var onloadActions = function onloadActions() { 11193 //get params from url if is page menu /navega/ to open the menu 11194 var queryParams = window.location.search; 11195 if (queryParams.length) { 11196 var urlParams = new URLSearchParams(queryParams); 11197 var page = urlParams.get('pagina'); 11198 var linkVar = $('#great-menu .page-item-' + page).children('a'); 11199 11200 if (window.matchMedia("(max-width: 767px)").matches) { 11201 // The viewport is less than 768 pixels wide 11202 executeClickLink_mobile(linkVar); 11203 } else { 11204 // The viewport is at least 768 pixels wide 11205 executeClickLink(linkVar, 'fromId'); 11206 } 11207 } 11208 }; 11209 11210 var footerLinks = function footerLinks(e) { 11211 /* links in footer that have children are redirected to the great menu */ 11212 $('.pre-footer a').click(function (e) { 11213 11214 if ($(this).parent('li').hasClass('page_item_has_children')) { 11215 e.preventDefault(); 11216 var classList = $(this).parent('li').attr('class').split(/\s+/); 11217 for (var i = 0; i < classList.length; i++) { 11218 var item = classList[i]; 11219 if (item.includes('page-item-') == true) { 11220 var id_post = item.length - 10; 11221 var newURL = window.location.protocol + "//" + window.location.host + "/navega/?pagina=" + item.slice(-id_post); 11222 location.href = newURL; 11223 } 11224 }; 11225 } 11226 }); 11227 }; 11228 11229 var greatMenu = function greatMenu(e) { 11230 // console.log("Bon dia! main js carregat. Delete me when I was working"); 11231 11232 $('#great-menu.tabs a').click(function (e) { 11233 11234 if ($(this).parent('li').hasClass('page_item_has_children')) { 11235 e.preventDefault(); 11236 if (window.matchMedia("(max-width: 767px)").matches) { 11237 // The viewport is less than 768 pixels wide 11238 11239 executeClickLink_mobile($(this)); 11240 } else { 11241 // The viewport is at least 768 pixels wide 11242 11243 executeClickLink($(this), 'normal'); 11244 } 11245 } 11246 }); 11247 }; 11248 11249 var executeClickLink = function executeClickLink(thisObj, type) { 11250 if (thisObj.hasClass('active')) { 11251 thisObj.next('ul').removeClass('active'); 11252 thisObj.removeClass('active'); 11253 } else { 11254 //removing classes 11255 $('#great-menu.tabs ul').removeClass('active'); 11256 $('#great-menu.tabs a').removeClass('active'); 11257 $('#great-menu.tabs li.page_item_has_children').removeClass('first-level second-level active'); 11258 //adding classes 11259 thisObj.addClass('active'); 11260 thisObj.closest('ul').addClass('active'); 11261 thisObj.closest('ul li').addClass('active'); 11262 thisObj.parents('.page_item_has_children').last().addClass('first-level'); 11263 if (!thisObj.closest('.page_item_has_children').hasClass('first-level')) { 11264 thisObj.closest('.page_item_has_children').addClass('second-level'); 11265 } 11266 thisObj.parents('li.page_item_has_children').last().children('a').addClass('active'); 11267 thisObj.next('ul').addClass('active'); 11268 11269 if (type == 'fromId') { 11270 //adding title in parent and sublevel if comes from footer or home 11271 var firstText = thisObj.parents('li.page_item_has_children').last().children('a').text(); 11272 var firstLevelTitle = '<p class="subtitle">' + firstText + '</p>'; 11273 if (thisObj.closest('ul.children').children('p.subtitle').length == 0) { 11274 thisObj.closest('ul.children').prepend(firstLevelTitle); 11275 } 11276 var levelTitle = '<p class="subtitle">' + thisObj.text() + '</p>'; 11277 if (thisObj.next('ul.children.active').children('p.subtitle').length === 0) { 11278 thisObj.next('ul.children.active').prepend(levelTitle); 11279 } 11280 } else { 11281 //adding title in sublevels 11282 var levelTitle = '<p class="subtitle">' + thisObj.text() + '</p>'; 11283 if (thisObj.next('ul').children('p.subtitle').length == 0) { 11284 thisObj.next('ul').prepend(levelTitle); 11285 } 11286 } 11287 11288 //calculating the highest column ul to change the hight of the div 11289 var previousCss = thisObj.next('ul').attr("style"); 11290 thisObj.next('ul').css({ 11291 visibility: 'hidden', 11292 display: 'block' 11293 }); 11294 var nextUlHeight = thisObj.next('ul').height(); 11295 var prevUlHeight = thisObj.closest('ul').height(); 11296 var firstUlHeight = $("#great-menu > .menu > ul").height(); 11297 thisObj.next('ul').attr("style", previousCss ? previousCss : ""); 11298 var largest = Math.max(nextUlHeight, prevUlHeight, firstUlHeight); 11299 $("#great-menu").height(largest); 11300 } 11301 }; 11302 11303 var executeClickLink_mobile = function executeClickLink_mobile(thisObj) { 11304 if (thisObj.hasClass('active')) { 11305 thisObj.parent('li').siblings().removeClass('inactive'); 11306 thisObj.next('ul').removeClass('active'); 11307 thisObj.removeClass('active'); 11308 } else { 11309 11310 //removing classes 11311 $('#great-menu.tabs ul').removeClass('active'); 11312 $('#great-menu.tabs a').removeClass('active'); 11313 $('#great-menu.tabs li.page_item_has_children').removeClass('first-level second-level active'); 11314 11315 //adding classes 11316 thisObj.addClass('active'); 11317 thisObj.parents('li.page_item_has_children').last().children('a').addClass('active'); 11318 thisObj.closest('ul').addClass('active'); 11319 thisObj.parent('li').addClass('active'); 11320 thisObj.parent('li').siblings().addClass('inactive'); 11321 thisObj.next('ul').addClass('active'); 11322 } 11323 }; 11324})(jQuery); 11325 11326/* 11327 if($(this).parent('li').hasClass('page_item_has_children')) { 11328 // console.log("passo per aqui"); 11329 e.preventDefault(); 11330 //removing classes 11331 $('#great-menu.tabs ul').removeClass('active'); 11332 $('#great-menu.tabs a').removeClass('active'); 11333 $('#great-menu.tabs li.page_item_has_children').removeClass('first-level second-level active'); 11334 //adding classes 11335 $(this).addClass('active'); 11336 $(this).closest('ul').addClass('active'); 11337 $(this).closest('ul li').addClass('active'); 11338 $(this).parents('.page_item_has_children').last().addClass('first-level'); 11339 if(!$(this).closest('.page_item_has_children').hasClass('first-level')) { 11340 $(this).closest('.page_item_has_children').addClass('second-level'); 11341 } 11342 11343 $(this).parents('li.page_item_has_children').last().children('a').addClass('active'); 11344 $(this).next('ul').addClass('active'); 11345 11346 //adding title 11347 //ToDO: control only one time 11348 var levelTitle = '<p class="subtitle">' + $(this).text() + '</p>'; 11349 if(!$(this).next('ul').children('p.subtitle').length) { 11350 $(this).next('ul').prepend(levelTitle); 11351 } else { 11352 console.log("true "); 11353 } 11354 //calculating height 11355 var previousCss = $(this).next('ul').attr("style"); 11356 $(this).next('ul').css({ 11357 visibility: 'hidden', 11358 display: 'block' 11359 }); 11360 var nextUlHeight = $(this).next('ul').height(); 11361 console.log(nextUlHeight); 11362 console.log($(this).text()); 11363 $(this).next('ul').attr("style", previousCss ? previousCss : ""); 11364 if($("#great-menu").height() < nextUlHeight) { 11365 $("#great-menu").height(nextUlHeight + 80); 11366 } 11367 } 11368*/ 11369 11370},{"./utils/utils":6,"uikit":2,"uikit/dist/js/uikit-icons":1}],4:[function(require,module,exports){ 11371'use strict'; 11372 11373/** 11374 * File navigation.js. 11375 * 11376 * Handles toggling the navigation menu for small screens and enables TAB key 11377 * navigation support for dropdown menus. 11378 */ 11379(function () { 11380 var container, button, menu, links, i, len; 11381 11382 container = document.getElementById('site-navigation'); 11383 if (!container) { 11384 return; 11385 } 11386 11387 button = container.getElementsByTagName('button')[0]; 11388 if ('undefined' === typeof button) { 11389 return; 11390 } 11391 11392 menu = container.getElementsByTagName('ul')[0]; 11393 11394 // Hide menu toggle button if menu is empty and return early. 11395 if ('undefined' === typeof menu) { 11396 button.style.display = 'none'; 11397 return; 11398 } 11399 11400 menu.setAttribute('aria-expanded', 'false');
11401 if (-1 === menu.className.indexOf('nav-menu')) { 11402 menu.className += ' nav-menu'; 11403 } 11404 11405 button.onclick = function () { 11406 if (-1 !== container.className.indexOf('toggled')) { 11407 container.className = container.className.replace(' toggled', ''); 11408 button.setAttribute('aria-expanded', 'false'); 11409 menu.setAttribute('aria-expanded', 'false'); 11410 } else { 11411 container.className += ' toggled'; 11412 button.setAttribute('aria-expanded', 'true'); 11413 menu.setAttribute('aria-expanded', 'true'); 11414 } 11415 }; 11416 11417 // Get all the link elements within the menu. 11418 links = menu.getElementsByTagName('a'); 11419 11420 // Each time a menu link is focused or blurred, toggle focus. 11421 for (i = 0, len = links.length; i < len; i++) { 11422 links[i].addEventListener('focus', toggleFocus, true); 11423 links[i].addEventListener('blur', toggleFocus, true); 11424 } 11425 11426 /** 11427 * Sets or removes .focus class on an element. 11428 */ 11429 function toggleFocus() { 11430 var self = this; 11431 11432 // Move up through the ancestors of the current link until we hit .nav-menu. 11433 while (-1 === self.className.indexOf('nav-menu')) { 11434 11435 // On li elements toggle the class .focus. 11436 if ('li' === self.tagName.toLowerCase()) { 11437 if (-1 !== self.className.indexOf('focus')) { 11438 self.className = self.className.replace(' focus', ''); 11439 } else { 11440 self.className += ' focus'; 11441 } 11442 } 11443 11444 self = self.parentElement; 11445 } 11446 } 11447 11448 /** 11449 * Toggles `focus` class to allow submenu access on tablets. 11450 */ 11451 (function (container) { 11452 var touchStartFn, 11453 i, 11454 parentLink = container.querySelectorAll('.menu-item-has-children > a, .page_item_has_children > a'); 11455 11456 if ('ontouchstart' in window) { 11457 touchStartFn = function touchStartFn(e) { 11458 var menuItem = this.parentNode, 11459 i; 11460 11461 if (!menuItem.classList.contains('focus')) { 11462 e.preventDefault(); 11463 for (i = 0; i < menuItem.parentNode.children.length; ++i) { 11464 if (menuItem === menuItem.parentNode.children[i]) { 11465 continue; 11466 } 11467 menuItem.parentNode.children[i].classList.remove('focus'); 11468 } 11469 menuItem.classList.add('focus'); 11470 } else { 11471 menuItem.classList.remove('focus'); 11472 } 11473 }; 11474 11475 for (i = 0; i < parentLink.length; ++i) { 11476 parentLink[i].addEventListener('touchstart', touchStartFn, false); 11477 } 11478 } 11479 })(container); 11480})(); 11481 11482},{}],5:[function(require,module,exports){ 11483'use strict'; 11484 11485/** 11486 * File skip-link-focus-fix.js. 11487 * 11488 * Helps with accessibility for keyboard only users. 11489 * 11490 * Learn more: https://git.io/vWdr2 11491 */ 11492(function () { 11493 var isIe = /(trident|msie)/i.test(navigator.userAgent); 11494 11495 if (isIe && document.getElementById && window.addEventListener) { 11496 window.addEventListener('hashchange', function () { 11497 var id = location.hash.substring(1), 11498 element; 11499 11500 if (!/^[A-z0-9_-]+$/.test(id)) { 11501 return; 11502 } 11503 11504 element = document.getElementById(id); 11505 11506 if (element) { 11507 if (!/^(?:a|select|input|button|textarea)$/i.test(element.tagName)) { 11508 element.tabIndex = -1; 11509 } 11510 11511 element.focus(); 11512 } 11513 }, false); 11514 } 11515})(); 11516 11517},{}],6:[function(require,module,exports){ 11518'use strict'; 11519 11520require('./navigation'); 11521 11522require('./skip-link-focus-fix'); 11523 11524},{"./navigation":4,"./skip-link-focus-fix":5}]},{},[3]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.