diff --git a/extension.json b/extension.json index 7be6ebc..6fdad2e 100644 --- a/extension.json +++ b/extension.json @@ -160,6 +160,46 @@ "desktop", "mobile" ] + }, + "ext.isekai.baseWidgets": { + "scripts": [ + "baseWidgets/ext.isekai.baseWidgets.js" + ], + "styles": [ + "baseWidgets/ext.isekai.baseWidgets.less" + ], + "dependencies": [ + "oojs-ui-core", + "oojs-ui-toolbars" + ], + "targets": [ + "desktop", + "mobile" + ], + "messages": [ + "isekai-fab-hide-fab-button", + "isekai-fab-hide-fab-button-success" + ] + }, + "ext.isekai.offcanvasTOC": { + "scripts": [ + "offcanvasTOC/ext.isekai.offcanvasTOC.js" + ], + "styles": [ + "offcanvasTOC/ext.isekai.offcanvasTOC.less" + ], + "dependencies": [ + "ext.isekai.baseWidgets", + "oojs-ui.styles.icons-layout" + ], + "targets": [ + "desktop", + "mobile" + ], + "messages": [ + "isekai-offcanvastoc-menubutton", + "isekai-offcanvastoc-description-item" + ] } }, "ResourceFileModulePaths": { @@ -180,6 +220,9 @@ "config": { "IsekaiWidgetInformationTextSeparator": { "value": ": " + }, + "IsekaiGlobalWidgets": { + "value": ["baseWidgets", "offcanvasTOC"] } }, "manifest_version": 2 diff --git a/i18n/zh-hans.json b/i18n/zh-hans.json index 45e5047..f0514d3 100644 --- a/i18n/zh-hans.json +++ b/i18n/zh-hans.json @@ -28,5 +28,11 @@ "isekai-font-error-font-not-imported": "未导入字体: \"$1\"。", "isekai-information-title-base-information": "基本资料", - "isekai-information-error-invalid-type": "提供的信息框类型错误" + "isekai-information-error-invalid-type": "提供的信息框类型错误", + + "isekai-fab-hide-fab-button": "隐藏按钮", + "isekai-fab-hide-fab-button-success": "浮动按钮已隐藏,刷新页面可重新显示。", + + "isekai-offcanvastoc-menubutton": "目录", + "isekai-offcanvastoc-description-item": "简介" } \ No newline at end of file diff --git a/includes/Widgets.php b/includes/Widgets.php index e9f835f..9d46926 100644 --- a/includes/Widgets.php +++ b/includes/Widgets.php @@ -2,6 +2,7 @@ namespace Isekai\Widgets; use MapCacheLRU; +use MediaWiki\MediaWikiServices; use Parser; class Widgets { @@ -41,5 +42,20 @@ class Widgets { "ext.isekai.information.infobox", "ext.isekai.collapse" ]); + + $globalModuleMap = [ + 'baseWidgets' => 'ext.isekai.baseWidgets', + 'offcanvasTOC' => 'ext.isekai.offcanvasTOC', + ]; + + $config = MediaWikiServices::getInstance()->getMainConfig(); + $modules = $config->get('IsekaiGlobalWidgets'); + $outputModules = []; + foreach ($modules as $module) { + if (isset($globalModuleMap[$module])) { + $outputModules[] = $globalModuleMap[$module]; + } + } + $outputPage->addModules($outputModules); } } \ No newline at end of file diff --git a/modules/baseWidgets/ext.isekai.baseWidgets.js b/modules/baseWidgets/ext.isekai.baseWidgets.js new file mode 100644 index 0000000..87621a6 --- /dev/null +++ b/modules/baseWidgets/ext.isekai.baseWidgets.js @@ -0,0 +1,126 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/baseWidgets/bottomNav.js": +/*!**************************************!*\ + !*** ./src/baseWidgets/bottomNav.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BottomNavWidget\": () => (/* binding */ BottomNavWidget)\n/* harmony export */ });\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar BottomNavWidget = /*#__PURE__*/function () {\n function BottomNavWidget() {\n _classCallCheck(this, BottomNavWidget);\n this.domCreated = false;\n this.btnList = [];\n }\n _createClass(BottomNavWidget, [{\n key: \"initDom\",\n value: function initDom() {\n if (!this.domCreated) {\n var bottomNavContainer = document.querySelector('#isekai-bottom-nav');\n if (bottomNavContainer) {\n this.bottomNavContainer = bottomNavContainer;\n this.bottomNavElem = bottomNavContainer.querySelector('.isekai-bottom-nav');\n } else {\n bottomNavContainer = document.createElement('nav');\n bottomNavContainer.id = 'isekai-bottom-nav';\n bottomNavContainer.className = 'isekai-bottom-nav-container';\n this.bottomNavContainer = bottomNavContainer;\n var bottomNavElem = document.createElement('div');\n bottomNavElem.className = 'isekai-bottom-nav';\n this.bottomNavElem = bottomNavElem;\n var bottomNavPlaceholder = document.createElement('div');\n bottomNavPlaceholder.id = 'isekai-bottom-nav-placeholder';\n bottomNavPlaceholder.className = 'isekai-bottom-nav-placeholder';\n bottomNavContainer.appendChild(bottomNavElem);\n document.body.appendChild(bottomNavContainer);\n document.body.appendChild(bottomNavPlaceholder);\n document.body.classList.add('use-isekai-bottom-nav');\n }\n }\n }\n }, {\n key: \"addButton\",\n value: function addButton(btnInfo) {\n var _btnInfo$priority;\n if (!this.domCreated) {\n this.initDom();\n }\n var btnElem = document.createElement('a');\n btnElem.role = 'button';\n btnElem.href = 'javascript:void(0);';\n btnElem.classList.add('isekai-bottom-nav-btn');\n btnElem.dataset.id = btnInfo.id;\n if (btnInfo.className) {\n var _btnElem$classList;\n (_btnElem$classList = btnElem.classList).add.apply(_btnElem$classList, _toConsumableArray(btnInfo.className.split(' ')));\n }\n if (btnInfo.icon) {\n var iconElem = document.createElement('span');\n iconElem.className = 'isekai-bottom-nav-btn-icon';\n if (typeof btnInfo.icon === 'string') {\n iconElem.innerHTML = btnInfo.icon;\n } else if (_typeof(btnInfo.icon) === 'object') {\n iconElem.appendChild(btnInfo.icon);\n }\n btnElem.appendChild(iconElem);\n }\n if (btnInfo.label) {\n btnElem.title = btnInfo.label;\n btnElem.setAttribute('aria-label', btnInfo.label);\n }\n if (btnInfo.expand) {\n var _btnInfo$label;\n btnElem.classList.add('isekai-bottom-nav-btn-expand');\n var labelElem = document.createElement('span');\n labelElem.className = 'isekai-bottom-nav-btn-label';\n labelElem.innerText = (_btnInfo$label = btnInfo.label) !== null && _btnInfo$label !== void 0 ? _btnInfo$label : '';\n btnElem.appendChild(labelElem);\n }\n if (btnInfo.onClick) {\n btnElem.addEventListener('click', btnInfo.onClick);\n }\n var newBtnInfo = _objectSpread(_objectSpread({}, btnInfo), {}, {\n element: btnElem,\n proiorty: (_btnInfo$priority = btnInfo.priority) !== null && _btnInfo$priority !== void 0 ? _btnInfo$priority : 0\n });\n var insertAfter = null;\n var insertAfterIndex = 0;\n this.btnList.forEach(function (one, index) {\n if (newBtnInfo.priority > one.priority) {\n insertAfter = one.element;\n insertAfterIndex = index;\n }\n });\n if (insertAfter) {\n this.bottomNavElem.insertAfter(btnElem, insertAfter);\n this.btnList = [].concat(_toConsumableArray(this.btnList.slice(0, insertAfterIndex + 1)), [newBtnInfo], _toConsumableArray(this.btnList.slice(insertAfterIndex + 1)));\n } else {\n this.bottomNavElem.prepend(btnElem);\n this.btnList.unshift(newBtnInfo);\n }\n return btnElem;\n }\n }, {\n key: \"removeButton\",\n value: function removeButton(btnInfo) {\n var btnId = '';\n if (typeof btnInfo === 'string') {\n btnId = btnInfo;\n } else if (_typeof(btnInfo) === 'object') {\n btnId = btnInfo.id;\n }\n var btnElem = this.bottomNavElem.querySelector(\".isekai-bottom-nav-btn[data-id=\\\"\".concat(btnId, \"\\\"]\"));\n if (btnElem) {\n btnElem.remove();\n }\n }\n }]);\n return BottomNavWidget;\n}();\n\n//# sourceURL=webpack://isekai-widgets/./src/baseWidgets/bottomNav.js?"); + +/***/ }), + +/***/ "./src/baseWidgets/contextMenu.js": +/*!****************************************!*\ + !*** ./src/baseWidgets/contextMenu.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ContextMenuWidget\": () => (/* binding */ ContextMenuWidget)\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _wrapRegExp() { _wrapRegExp = function _wrapRegExp(re, groups) { return new BabelRegExp(re, void 0, groups); }; var _super = RegExp.prototype, _groups = new WeakMap(); function BabelRegExp(re, flags, groups) { var _this = new RegExp(re, flags); return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype); } function buildGroups(result, re) { var g = _groups.get(re); return Object.keys(g).reduce(function (groups, name) { var i = g[name]; if (\"number\" == typeof i) groups[name] = result[i];else { for (var k = 0; void 0 === result[i[k]] && k + 1 < i.length;) k++; groups[name] = result[i[k]]; } return groups; }, Object.create(null)); } return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) { var result = _super.exec.call(this, str); if (result) { result.groups = buildGroups(result, this); var indices = result.indices; indices && (indices.groups = buildGroups(indices, this)); } return result; }, BabelRegExp.prototype[Symbol.replace] = function (str, substitution) { if (\"string\" == typeof substitution) { var groups = _groups.get(this); return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) { var group = groups[name]; return \"$\" + (Array.isArray(group) ? group.join(\"$\") : group); })); } if (\"function\" == typeof substitution) { var _this = this; return _super[Symbol.replace].call(this, str, function () { var args = arguments; return \"object\" != _typeof(args[args.length - 1]) && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args); }); } return _super[Symbol.replace].call(this, str, substitution); }, _wrapRegExp.apply(this, arguments); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar isMobileSafari = function () {\n var v = navigator.userAgent.match( /*#__PURE__*/_wrapRegExp(/Version\\/(\\S+) Mobile\\/\\S+/, {\n version: 1\n }));\n if (v && v.groups.version) {\n // Safari\n return true;\n }\n return false;\n}();\nvar ContextMenuWidget = /*#__PURE__*/function () {\n function ContextMenuWidget() {\n _classCallCheck(this, ContextMenuWidget);\n this.menuItems = [];\n this.menuItemsUpdated = true;\n this.initDom();\n }\n _createClass(ContextMenuWidget, [{\n key: \"initDom\",\n value: function initDom() {\n var _this2 = this;\n var menuContainer = document.createElement('div');\n menuContainer.id = 'iseai-contextmenu';\n menuContainer.className = 'oo-ui-toolGroup-tools oo-ui-popupToolGroup-tools oo-ui-listToolGroup-tools oo-ui-toolGroup-enabled-tools oo-ui-popupToolGroup-active-tools';\n menuContainer.style.minWidth = 'unset';\n menuContainer.style.display = 'none';\n this.menuContainer = menuContainer;\n var menuCover = document.createElement('div');\n menuCover.className = 'isekai-contextmenu-cover';\n menuCover.style.display = 'none';\n menuCover.addEventListener('click', function () {\n _this2.hide();\n });\n this.menuCover = menuCover;\n document.body.appendChild(menuContainer);\n document.body.appendChild(menuCover);\n }\n }, {\n key: \"setMenuItem\",\n value: function setMenuItem(menuItems) {\n this.menuItems = menuItems;\n this.menuItemsUpdated = true;\n }\n }, {\n key: \"updateMenuItemDom\",\n value: function updateMenuItemDom() {\n var _this3 = this;\n if (this.menuItemsUpdated) {\n this.menuContainer.innerHTML = '';\n this.menuItems.sort(function (a, b) {\n var _b$priority, _a$priority;\n return ((_b$priority = b.priority) !== null && _b$priority !== void 0 ? _b$priority : 0) - ((_a$priority = a.priority) !== null && _a$priority !== void 0 ? _a$priority : 0);\n }).forEach(function (menuItem) {\n var menuElem = document.createElement('span');\n menuElem.className = 'oo-ui-widget oo-ui-widget-enabled oo-ui-tool';\n var menuLink = document.createElement('a');\n menuLink.className = 'oo-ui-tool-link';\n menuLink.tabIndex = 0;\n menuLink.role = 'button';\n menuLink.addEventListener('click', function (e) {\n var _menuItem$onClick;\n e.preventDefault();\n (_menuItem$onClick = menuItem.onClick) === null || _menuItem$onClick === void 0 ? void 0 : _menuItem$onClick.call(menuItem);\n _this3.hide();\n });\n var menuLabel = document.createElement('span');\n menuLabel.className = 'oo-ui-tool-title';\n menuLabel.innerText = menuItem.label;\n menuLink.appendChild(menuLabel);\n menuElem.appendChild(menuLink);\n _this3.menuContainer.appendChild(menuElem);\n });\n this.menuItemsUpdated = false;\n }\n }\n }, {\n key: \"show\",\n value: function show() {\n var x = 0;\n var y = 0;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args[0] instanceof MouseEvent) {\n x = args[0].clientX;\n y = args[0].clientY;\n } else if (args[0] instanceof Element) {\n var rect = args[0].getBoundingClientRect();\n x = rect.left;\n y = rect.top;\n } else if (args.length === 2 && typeof args[0] === 'number' && typeof args[1] === 'number') {\n x = args[0];\n y = args[1];\n }\n if (this.menuItemsUpdated) {\n this.updateMenuItemDom();\n }\n this.menuContainer.style.display = 'block';\n this.menuCover.style.display = 'block';\n var menuWidth = this.menuContainer.clientWidth;\n var menuHeight = this.menuContainer.clientHeight;\n if (x + menuWidth > window.innerWidth) {\n x -= menuWidth;\n }\n if (y + menuHeight > window.innerHeight) {\n y -= menuHeight;\n }\n this.menuContainer.style.left = x + 'px';\n this.menuContainer.style.top = y + 'px';\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this.menuContainer.style.display = 'none';\n this.menuCover.style.display = 'none';\n }\n }, {\n key: \"bindToDom\",\n value: function bindToDom(dom) {\n var _this4 = this;\n dom.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n _this4.show(e);\n });\n if (isMobileSafari) {\n // Safari下对长按的特殊处理\n var longPressTimer;\n dom.addEventListener('touchstart', function (e) {\n document.body.classList.add('isekai-contextmenu-ios-longpress');\n longPressTimer = setTimeout(function () {\n e.preventDefault();\n _this4.show({\n x: e.pageX - window.scrollX,\n y: e.pageY - window.scrollY\n });\n }, 200);\n });\n dom.addEventListener('touchend', function (e) {\n document.body.classList.remove('isekai-contextmenu-ios-longpress');\n if (longPressTimer) {\n clearInterval(longPressTimer);\n }\n });\n }\n }\n }]);\n return ContextMenuWidget;\n}();\n\n//# sourceURL=webpack://isekai-widgets/./src/baseWidgets/contextMenu.js?"); + +/***/ }), + +/***/ "./src/baseWidgets/ext.isekai.baseWidgets.js": +/*!***************************************************!*\ + !*** ./src/baseWidgets/ext.isekai.baseWidgets.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _moduleRegister__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moduleRegister */ \"./src/moduleRegister.js\");\n/* harmony import */ var _contextMenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./contextMenu */ \"./src/baseWidgets/contextMenu.js\");\n/* harmony import */ var _fab__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fab */ \"./src/baseWidgets/fab.js\");\n/* harmony import */ var _bottomNav__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bottomNav */ \"./src/baseWidgets/bottomNav.js\");\n\n\n\n\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_0__.registerModule)('ui.ContextMenuWidget', _contextMenu__WEBPACK_IMPORTED_MODULE_1__.ContextMenuWidget);\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_0__.registerModule)('ui.FabWidget', _fab__WEBPACK_IMPORTED_MODULE_2__.FabWidget);\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_0__.registerModule)('ui.BottomNavWidget', _bottomNav__WEBPACK_IMPORTED_MODULE_3__.BottomNavWidget);\nvar fabInstance = new _fab__WEBPACK_IMPORTED_MODULE_2__.FabWidget();\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_0__.registerModule)('fab', fabInstance);\nvar bottomNavInstance = new _bottomNav__WEBPACK_IMPORTED_MODULE_3__.BottomNavWidget();\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_0__.registerModule)('bottomNav', bottomNavInstance);\n\n//# sourceURL=webpack://isekai-widgets/./src/baseWidgets/ext.isekai.baseWidgets.js?"); + +/***/ }), + +/***/ "./src/baseWidgets/fab.js": +/*!********************************!*\ + !*** ./src/baseWidgets/fab.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FabWidget\": () => (/* binding */ FabWidget)\n/* harmony export */ });\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar FabWidget = /*#__PURE__*/function () {\n function FabWidget() {\n var _this = this;\n _classCallCheck(this, FabWidget);\n _defineProperty(this, \"_onContextMenu\", function (e) {\n e.preventDefault();\n document.body.removeEventListener('contextmenu', _this._onContextMenu);\n _this.show();\n });\n this.domCreated = false;\n this.btnList = [];\n this.hidden = false;\n }\n _createClass(FabWidget, [{\n key: \"initDom\",\n value: function initDom() {\n var _this2 = this;\n if (!this.domCreated) {\n var fabContainer = document.querySelector('#isekai-fab-container');\n if (fabContainer) {\n this.fabContainer = fabContainer;\n } else {\n fabContainer = document.createElement('div');\n fabContainer.id = 'isekai-fab-container';\n fabContainer.className = 'isekai-fab-group';\n this.fabContainer = fabContainer;\n document.body.appendChild(fabContainer);\n\n // 右键隐藏\n var menuItems = [{\n label: mw.msg('isekai-fab-hide-fab-button'),\n onClick: function onClick() {\n _this2.hide();\n mw.notify(mw.msg('isekai-fab-hide-fab-button-success'));\n }\n }];\n var contextMenu = new isekai.ui.ContextMenuWidget();\n contextMenu.setMenuItem(menuItems);\n contextMenu.bindToDom(fabContainer);\n this.contextMenu = contextMenu;\n }\n this.domCreated = true;\n }\n }\n }, {\n key: \"addButton\",\n value: function addButton(btnInfo) {\n var _btnInfo$priority;\n if (!this.domCreated) {\n this.initDom();\n }\n var btnElem = document.createElement('a');\n btnElem.role = 'button';\n btnElem.href = 'javascript:void(0);';\n btnElem.className = 'isekai-fab-btn';\n btnElem.dataset.id = btnInfo.id;\n if (btnInfo.icon) {\n var iconElem = document.createElement('span');\n iconElem.className = 'isekai-fab-btn-icon';\n if (typeof btnInfo.icon === 'string') {\n iconElem.innerHTML = btnInfo.icon;\n } else if (_typeof(btnInfo.icon) === 'object') {\n iconElem.appendChild(btnInfo.icon);\n }\n btnElem.appendChild(iconElem);\n }\n if (btnInfo.label) {\n btnElem.title = btnInfo.label;\n btnElem.setAttribute('aria-label', btnInfo.label);\n }\n if (btnInfo.onClick) {\n btnElem.addEventListener('click', btnInfo.onClick);\n }\n var newBtnInfo = _objectSpread(_objectSpread({}, btnInfo), {}, {\n element: btnElem,\n proiorty: (_btnInfo$priority = btnInfo.priority) !== null && _btnInfo$priority !== void 0 ? _btnInfo$priority : 0\n });\n var insertBefore = null;\n var insertBeforeIndex = 0;\n this.btnList.forEach(function (one, index) {\n if (one.priority < newBtnInfo.priority) {\n insertBefore = one.element;\n insertBeforeIndex = index;\n }\n });\n if (insertBefore) {\n this.fabContainer.insertBefore(btnElem, insertBefore);\n this.btnList = [].concat(_toConsumableArray(this.btnList.slice(0, insertBeforeIndex)), [newBtnInfo], _toConsumableArray(this.btnList.slice(insertBeforeIndex)));\n } else {\n this.fabContainer.appendChild(btnElem);\n this.btnList.push(newBtnInfo);\n }\n return btnElem;\n }\n }, {\n key: \"removeButton\",\n value: function removeButton(btnInfo) {\n var btnId = '';\n if (typeof btnInfo === 'string') {\n btnId = btnInfo;\n } else if (_typeof(btnInfo) === 'object') {\n btnId = btnInfo.id;\n }\n var fabBtn = this.fabContainer.querySelector(\".isekai-fab-btn[data-id=\\\"\".concat(btnId, \"\\\"]\"));\n if (fabBtn) {\n fabBtn.remove();\n }\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this.fabContainer.classList.add('isekai-fab-hidden');\n this.hidden = true;\n document.body.addEventListener('contextmenu', this._onContextMenu);\n }\n }, {\n key: \"show\",\n value: function show() {\n this.fabContainer.classList.remove('isekai-fab-hidden');\n this.hidden = false;\n }\n }]);\n return FabWidget;\n}();\n\n//# sourceURL=webpack://isekai-widgets/./src/baseWidgets/fab.js?"); + +/***/ }), + +/***/ "./src/moduleRegister.js": +/*!*******************************!*\ + !*** ./src/moduleRegister.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"registerModule\": () => (/* binding */ registerModule)\n/* harmony export */ });\nfunction registerModule(namespace, func) {\n var nsList = namespace.split('.');\n if (!('isekai' in window)) {\n window.isekai = {};\n }\n var obj = window.isekai;\n for (var i = 0; i < nsList.length - 1; i++) {\n var ns = nsList[i];\n if (!(ns in obj)) {\n obj[ns] = {};\n }\n obj = obj[ns];\n }\n obj[nsList[i]] = func;\n}\n\n//# sourceURL=webpack://isekai-widgets/./src/moduleRegister.js?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/baseWidgets/ext.isekai.baseWidgets.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/modules/baseWidgets/ext.isekai.baseWidgets.less b/modules/baseWidgets/ext.isekai.baseWidgets.less new file mode 100644 index 0000000..647f02b --- /dev/null +++ b/modules/baseWidgets/ext.isekai.baseWidgets.less @@ -0,0 +1,217 @@ +// ============================================================================= +// Fab button +// ============================================================================= +.isekai-fab-group { + display: flex; + flex-direction: column; + gap: 10px; + position: fixed; + z-index: 50; + right: 18px; + bottom: 8em; + bottom: 15vh; + + @media screen and (min-width: 1340px) { + right: 44px; + } +} + +.isekai-fab-hidden { + display: none; +} + +.isekai-fab-btn { + display: flex; + width: 48px; + height: 48px; + padding: 0; + border: 1px #eee solid; + outline: none; + align-items: center; + justify-content: center; + text-align: center; + border-radius: 50%; + text-shadow: none; + background-color: rgba(255, 255, 255, 0.95); + color: #333; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.12); + user-select: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + + &:hover { + background-color: rgba(255, 255, 255, 0.9); + color: #000; + } + + &:active, + &:focus { + outline: none; + } + + @media screen and (max-width: 850px) { + display: none; + } + + @media print { + display: none; + } +} + +// ============================================================================= +// Context menu +// ============================================================================= +.isekai-contextmenu-cover { + position: fixed; + z-index: 100; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: transparent; + cursor: default; +} + +#iseai-contextmenu { + position: fixed; + z-index: 105; +} + +// ============================================================================= +// Bottom Navbar +// ============================================================================= +@isekai-bottom-nav-button-size: 40px; + +.isekai-bottom-nav-container { + position: fixed; + z-index: 100; + bottom: -2px; // Fix white line at the bottom + left: 0; + width: 100%; + height: (@isekai-bottom-nav-button-size + 2px); + padding-bottom: 2px; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.12); + background-color: #fff; + box-sizing: border-box; + user-select: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + + // Safe area + padding-left: var(--safe-area-inset-left); + padding-right: var(--safe-area-inset-right); + padding-bottom: ~"calc(var(--safe-area-inset-bottom, 0px) + 2px)"; + + @media print { + display: none; + } + + @media screen and (min-width: 851px) { + display: none; + } +} + +.isekai-bottom-nav { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +@supports(backdrop-filter: blur(10px)) { + .isekai-bottom-nav-container { + background-color: rgba(255, 255, 255, 0.8); + backdrop-filter: blur(20px) saturate(120%); + } +} + +@supports(-webkit-backdrop-filter: blur(10px)) { + .isekai-bottom-nav { + background-color: rgba(255, 255, 255, 0.8); + -webkit-backdrop-filter: blur(20px) saturate(120%); + } +} + +.isekai-bottom-nav-placeholder { + display: flex; + width: 100%; + height: @isekai-bottom-nav-button-size; +} + +.isekai-bottom-nav-btn { + display: block; + flex-grow: 0; + flex-shrink: 0; + flex-basis: (@isekai-bottom-nav-button-size + 10px); + width: (@isekai-bottom-nav-button-size + 10px); + height: @isekai-bottom-nav-button-size; + line-height: @isekai-bottom-nav-button-size; + text-align: left; + font-size: 18px; + color: #333; + + &:hover { + background-color: rgba(0, 0, 0, 0.05); + color: #333; + text-decoration: none; + } + + &:active { + background-color: rgba(0, 0, 0, 0.1); + color: #333; + text-decoration: none; + } +} + +.isekai-bottom-nav-btn-expand { + flex-grow: 1; + flex-shrink: 1; + flex-basis: auto; + width: 100%; + display: flex; +} + +.isekai-bottom-nav-btn-icon { + display: flex; + flex-grow: 0; + flex-shrink: 0; + flex-basis: (@isekai-bottom-nav-button-size + 10px); + width: (@isekai-bottom-nav-button-size + 10px); + height: @isekai-bottom-nav-button-size; + line-height: @isekai-bottom-nav-button-size; + text-align: center; + align-items: center; + justify-content: center; +} + +.isekai-bottom-nav-btn-label { + display: inline-block; + flex-grow: 1; + flex-shrink: 1; + flex-basis: auto; + line-height: @isekai-bottom-nav-button-size; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + padding-right: 10px; +} + +.ve-activated { + .isekai-fab-group { + display: none; + } + + .isekai-bottom-nav { + display: none; + } +} + +.use-isekai-bottom-nav { + &.skin-minerva { + #mw-mf-page-center { + padding-bottom: 40px; + } + } +} \ No newline at end of file diff --git a/modules/createPage/ext.isekai.createPage.js b/modules/createPage/ext.isekai.createPage.js index 4d412d2..65c363b 100644 --- a/modules/createPage/ext.isekai.createPage.js +++ b/modules/createPage/ext.isekai.createPage.js @@ -1 +1,96 @@ -(()=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(t,i){for(var r=0;r0?(this.createButton.setDisabled(!0),this.pageExists(t).then((function(i){if(i)e.createButton.setDisabled(!1),e.setError(mw.message("isekai-createpage-page-exists").parse());else{var r=mw.util.getUrl(t,{veaction:"edit"});e.formGroup.setSuccess([mw.message("isekai-createpage-redirecting").parse()]),location.href=r}}))):this.setError(mw.message("isekai-createpage-title-empty").parse())}},{key:"onPageNameChange",value:function(){this.hasError&&this.clearError();var e=this.pageNameInput.getValue();if(-1!==e.indexOf(":")||-1!==e.indexOf("`")){var t=this.pageNameInput.getRange();e=e.replace(/:/g,":").replace(/`/g,"·"),this.pageNameInput.setValue(e),this.pageNameInput.selectRange(t.from,t.to)}}},{key:"setError",value:function(e){this.formGroup.setErrors([e]),this.hasError=!0}},{key:"clearError",value:function(){this.formGroup.setErrors([]),this.hasError=!1}},{key:"pageExists",value:function(e){var t=this;return new Promise((function(i,r){t.api.get({action:"query",titles:e}).done((function(e){e.query&&e.query.pages?e.query.pages[-1]?i(!1):i(!0):i(!1)})).fail(r)}))}},{key:"setTitle",value:function(e){this.title.text(e)}}])&&t(i.prototype,r),Object.defineProperty(i,"prototype",{writable:!1}),e}())})(); \ No newline at end of file +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/createPage/ext.isekai.createPage.js": +/*!*************************************************!*\ + !*** ./src/createPage/ext.isekai.createPage.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _moduleRegister__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moduleRegister */ \"./src/moduleRegister.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\nvar CreatePageWidget = /*#__PURE__*/function () {\n function CreatePageWidget(dom) {\n _classCallCheck(this, CreatePageWidget);\n this.baseDom = dom;\n this.pageUrl = null;\n this.api = new mw.Api();\n this.hasError = false;\n this.initDom();\n }\n _createClass(CreatePageWidget, [{\n key: \"initDom\",\n value: function initDom() {\n this.pageNameInput = new OO.ui.TextInputWidget({\n placeholder: mw.message('isekai-createpage-page-title').parse()\n });\n this.pageNameInput.on('enter', this.createPage.bind(this));\n this.pageNameInput.on('change', this.onPageNameChange.bind(this));\n this.createButton = new OO.ui.ButtonWidget({\n label: mw.message('isekai-createpage-create-page-button').parse(),\n flags: ['primary', 'progressive']\n });\n this.createButton.on('click', this.createPage.bind(this));\n this.formGroup = new OO.ui.ActionFieldLayout(this.pageNameInput, this.createButton, {\n align: 'top'\n });\n this.baseDom.find('.card-body .card-content').append(this.formGroup.$element);\n }\n }, {\n key: \"createPage\",\n value: function createPage() {\n var _this = this;\n var title = this.pageNameInput.getValue();\n if (this.hasError) {\n this.clearError(); //清除errors\n }\n\n if (title.trim().length > 0) {\n this.createButton.setDisabled(true);\n this.pageExists(title).then(function (exists) {\n if (exists) {\n _this.createButton.setDisabled(false);\n _this.setError(mw.message('isekai-createpage-page-exists').parse()); //提示页面已经存在\n } else {\n var targetUrl = mw.util.getUrl(title, {\n veaction: 'edit'\n });\n _this.formGroup.setSuccess([mw.message('isekai-createpage-redirecting').parse()]); //提示正在跳转\n location.href = targetUrl;\n }\n });\n } else {\n this.setError(mw.message('isekai-createpage-title-empty').parse());\n }\n }\n }, {\n key: \"onPageNameChange\",\n value: function onPageNameChange() {\n if (this.hasError) {\n this.clearError();\n }\n var value = this.pageNameInput.getValue();\n if (value.indexOf(':') !== -1 || value.indexOf('`') !== -1) {\n var range = this.pageNameInput.getRange();\n value = value.replace(/:/g, ':').replace(/`/g, '·');\n this.pageNameInput.setValue(value);\n this.pageNameInput.selectRange(range.from, range.to);\n }\n }\n }, {\n key: \"setError\",\n value: function setError(msg) {\n this.formGroup.setErrors([msg]); //提示页面已经存在\n this.hasError = true;\n }\n }, {\n key: \"clearError\",\n value: function clearError() {\n this.formGroup.setErrors([]);\n this.hasError = false;\n }\n }, {\n key: \"pageExists\",\n value: function pageExists(title) {\n var _this2 = this;\n return new Promise(function (resolve, reject) {\n _this2.api.get({\n action: 'query',\n titles: title\n }).done(function (data) {\n if (data.query && data.query.pages) {\n if (data.query.pages[\"-1\"]) {\n resolve(false);\n } else {\n resolve(true);\n }\n } else {\n resolve(false);\n }\n }).fail(reject);\n });\n }\n }, {\n key: \"setTitle\",\n value: function setTitle(title) {\n this.title.text(title);\n }\n }]);\n return CreatePageWidget;\n}();\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_0__.registerModule)('ui.CreatePageWidget', CreatePageWidget);\n\n//# sourceURL=webpack://isekai-widgets/./src/createPage/ext.isekai.createPage.js?"); + +/***/ }), + +/***/ "./src/moduleRegister.js": +/*!*******************************!*\ + !*** ./src/moduleRegister.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"registerModule\": () => (/* binding */ registerModule)\n/* harmony export */ });\nfunction registerModule(namespace, func) {\n var nsList = namespace.split('.');\n if (!('isekai' in window)) {\n window.isekai = {};\n }\n var obj = window.isekai;\n for (var i = 0; i < nsList.length - 1; i++) {\n var ns = nsList[i];\n if (!(ns in obj)) {\n obj[ns] = {};\n }\n obj = obj[ns];\n }\n obj[nsList[i]] = func;\n}\n\n//# sourceURL=webpack://isekai-widgets/./src/moduleRegister.js?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/createPage/ext.isekai.createPage.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/modules/discover/ext.isekai.discover.js b/modules/discover/ext.isekai.discover.js index 91d1a39..e8a8acd 100644 --- a/modules/discover/ext.isekai.discover.js +++ b/modules/discover/ext.isekai.discover.js @@ -1 +1,96 @@ -(()=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(t,n){for(var i=0;i0){var i=n.query.random[0].title;e.setTitle(i),t(i)}else n.error?e.showError(n.error.info):e.showError(mw.message("isekai-discover-error-cannotload").parse())}))}))}},{key:"parseHTMLString",value:function(e){try{return(new DOMParser).parseFromString(e,"text/html")}catch(e){console.error(e.message)}return null}},{key:"loadPage",value:function(e){var t=this,n=mw.util.getUrl(e);this.pageUrl=n,n.indexOf("?")>=0?n+="&":n+="?",n+="action=render",$.get(n,(function(e){var n=$(t.parseHTMLString(e)).find(".mw-parser-output");n.length>0&&(n.find(".toc").remove(),t.setContent(n))}),"html")}}])&&t(n.prototype,i),Object.defineProperty(n,"prototype",{writable:!1}),e}())})(); \ No newline at end of file +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/discover/ext.isekai.discover.js": +/*!*********************************************!*\ + !*** ./src/discover/ext.isekai.discover.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _moduleRegister__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moduleRegister */ \"./src/moduleRegister.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\nvar DiscoverWidget = /*#__PURE__*/function () {\n function DiscoverWidget(dom) {\n _classCallCheck(this, DiscoverWidget);\n this.baseDom = dom;\n this.pageUrl = null;\n this.api = new mw.Api();\n this.initDom();\n this.refreshPage();\n }\n _createClass(DiscoverWidget, [{\n key: \"initDom\",\n value: function initDom() {\n this.reloadButton = new OO.ui.ButtonWidget({\n icon: 'reload',\n label: mw.message('isekai-discover-change-btn').parse()\n });\n this.reloadButton.on('click', this.refreshPage.bind(this));\n this.readMoreButton = new OO.ui.ButtonWidget({\n icon: 'ellipsis',\n label: mw.message('isekai-discover-readmore-btn').parse(),\n flags: ['primary', 'progressive']\n });\n this.readMoreButton.on('click', this.showMore.bind(this));\n this.loadingBar = new OO.ui.ProgressBarWidget({\n progress: false\n });\n this.baseDom.find('.card-body .loading .spinner').append(this.loadingBar.$element);\n this.buttonGroup = new OO.ui.ButtonGroupWidget({\n items: [this.reloadButton, this.readMoreButton]\n });\n this.baseDom.find('.card-header .card-header-buttons').append(this.buttonGroup.$element);\n this.loading = this.baseDom.find('.card-body .loading');\n this.title = this.baseDom.find('.card-body .card-title');\n this.contentContainer = this.baseDom.find('.card-body .card-content');\n }\n }, {\n key: \"showMore\",\n value: function showMore() {\n if (this.pageUrl) {\n //页面存在就跳转\n window.open(this.pageUrl);\n }\n }\n }, {\n key: \"refreshPage\",\n value: function refreshPage() {\n var _this = this;\n this.pageUrl = null;\n this.clearContent();\n this.showLoading();\n this.getRandomPage().then(function (title) {\n _this.loadPage(title);\n });\n }\n }, {\n key: \"setTitle\",\n value: function setTitle(title) {\n this.title.text(title);\n }\n }, {\n key: \"showLoading\",\n value: function showLoading() {\n this.loading.show();\n this.contentContainer.hide();\n }\n }, {\n key: \"hideLoading\",\n value: function hideLoading() {\n this.loading.hide();\n this.contentContainer.show();\n }\n }, {\n key: \"clearContent\",\n value: function clearContent() {\n this.contentContainer.children().remove();\n }\n }, {\n key: \"setContent\",\n value: function setContent(dom) {\n this.hideLoading();\n this.clearContent();\n this.contentContainer.append(dom);\n }\n }, {\n key: \"showError\",\n value: function showError(msg) {\n var errorMsg = new OO.ui.MessageWidget({\n type: 'error',\n label: msg\n });\n this.setContent(errorMsg.$element);\n }\n }, {\n key: \"getRandomPage\",\n value: function getRandomPage() {\n var _this2 = this;\n return new Promise(function (resolve, reject) {\n _this2.api.get({\n action: 'query',\n list: 'random',\n rnlimit: 1,\n rnnamespace: 0\n }).done(function (data) {\n if (data.query && data.query.random && data.query.random.length > 0) {\n var title = data.query.random[0].title;\n _this2.setTitle(title);\n resolve(title);\n } else if (data.error) {\n _this2.showError(data.error.info);\n } else {\n _this2.showError(mw.message('isekai-discover-error-cannotload').parse());\n }\n });\n });\n }\n }, {\n key: \"parseHTMLString\",\n value: function parseHTMLString(txt) {\n try {\n var parser = new DOMParser();\n var xmlDoc = parser.parseFromString(txt, \"text/html\");\n return xmlDoc;\n } catch (e) {\n console.error(e.message);\n }\n return null;\n }\n }, {\n key: \"loadPage\",\n value: function loadPage(title) {\n var _this3 = this;\n var url = mw.util.getUrl(title);\n this.pageUrl = url;\n if (url.indexOf('?') >= 0) {\n url += '&';\n } else {\n url += '?';\n }\n url += 'action=render';\n $.get(url, function (str) {\n var dom = $(_this3.parseHTMLString(str));\n var content = dom.find('.mw-parser-output');\n if (content.length > 0) {\n //删除目录\n content.find('.toc').remove();\n _this3.setContent(content);\n }\n }, 'html');\n }\n }]);\n return DiscoverWidget;\n}();\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_0__.registerModule)('ui.DiscoverWidget', DiscoverWidget);\n\n//# sourceURL=webpack://isekai-widgets/./src/discover/ext.isekai.discover.js?"); + +/***/ }), + +/***/ "./src/moduleRegister.js": +/*!*******************************!*\ + !*** ./src/moduleRegister.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"registerModule\": () => (/* binding */ registerModule)\n/* harmony export */ });\nfunction registerModule(namespace, func) {\n var nsList = namespace.split('.');\n if (!('isekai' in window)) {\n window.isekai = {};\n }\n var obj = window.isekai;\n for (var i = 0; i < nsList.length - 1; i++) {\n var ns = nsList[i];\n if (!(ns in obj)) {\n obj[ns] = {};\n }\n obj = obj[ns];\n }\n obj[nsList[i]] = func;\n}\n\n//# sourceURL=webpack://isekai-widgets/./src/moduleRegister.js?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/discover/ext.isekai.discover.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/modules/ext.isekai.widgets.global.less b/modules/ext.isekai.widgets.global.less index 54325b7..4047930 100644 --- a/modules/ext.isekai.widgets.global.less +++ b/modules/ext.isekai.widgets.global.less @@ -98,6 +98,102 @@ } } +.isekai-list { + margin: 0 !important; + padding: 0 0 0.5rem 0 !important; + list-style: none; + background-color: transparent; + + .isekai-list-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + gap: 0.25rem; + -webkit-box-sizing: border-box; + box-sizing: border-box; + min-height: 3rem; + padding: 0 1rem; + text-decoration: none; + cursor: pointer; + border-bottom: 1px solid rgba(0,0,0,.12); + + &:hover { + background-color: rgba(0,0,0,.08); + } + + &:last-of-type { + border-bottom: none; + } + + &.active { + box-shadow: inset 4px 0 0 0 #3366cc; + } + } + + a { + color: #000; + text-decoration: none; + + &:hover { + color: #000; + text-decoration: none; + } + + &:visited { + color: #000; + text-decoration: none; + + &:hover { + color: #000; + text-decoration: none; + } + } + } + + .isekai-list-item-title { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 1.5rem; + + .tag { + opacity: 0.6; + font-size: 0.8rem; + padding: 2px 8px; + background-color: rgba(0, 0, 0, 0.1); + } + } + + .isekai-list-item-content { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding-top: 0.625rem; + padding-bottom: 0.625rem; + font-weight: 400; + font-size: 1rem; + line-height: 1.25rem; + } + + .isekai-list-item-title~.isekai-list-item-text { + margin-top: 0.25rem; + } + + .isekai-list-item-text { + font-size: 0.875rem; + opacity: 0.54; + -webkit-line-clamp: 1; + height: 1.25rem; + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + } +} + .isekai-well { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06), 0 -1px 4px -1px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(53,72,91,.07); border-radius: 5px; @@ -107,6 +203,28 @@ } .skin-citizen-dark, .skin-timeless-dark { + .isekai-list { + a { + color: white; + text-decoration: none; + + &:hover { + color: white; + text-decoration: none; + } + + &:visited { + color: white; + text-decoration: none; + + &:hover { + color: white; + text-decoration: none; + } + } + } + } + .isekai-well { background-color: #090909; } diff --git a/modules/feedList/FeedList.vue b/modules/feedList/FeedList.vue index 0747d93..41f3b2b 100644 --- a/modules/feedList/FeedList.vue +++ b/modules/feedList/FeedList.vue @@ -176,7 +176,12 @@ module.exports = { }); } onLoaded(); - }).catch(console.error); + }).catch((err) => { + console.error(err); + // 加载论坛帖子失败不阻塞 + recentData.recentThread = []; + onLoaded(); + }); } else { recentData.recentThread = []; } diff --git a/modules/feedList/ext.isekai.feedList.less b/modules/feedList/ext.isekai.feedList.less index 4734f4f..9a341c0 100644 --- a/modules/feedList/ext.isekai.feedList.less +++ b/modules/feedList/ext.isekai.feedList.less @@ -32,120 +32,4 @@ @media (max-width: 850px) { height: @feed-list-height-mobile; } -} - -.isekai-list { - margin: 0 !important; - padding: 0 0 0.5rem 0 !important; - list-style: none; - background-color: transparent; - - .isekai-list-item { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - gap: 0.25rem; - -webkit-box-sizing: border-box; - box-sizing: border-box; - min-height: 3rem; - padding: 0 1rem; - text-decoration: none; - cursor: pointer; - border-bottom: 1px solid rgba(0,0,0,.12); - - &:hover { - background-color: rgba(0,0,0,.08); - } - - &:last-of-type { - border-bottom: none; - } - } - - a { - color: #000; - text-decoration: none; - - &:hover { - color: #000; - text-decoration: none; - } - - &:visited { - color: #000; - text-decoration: none; - - &:hover { - color: #000; - text-decoration: none; - } - } - } - - .isekai-list-item-title { - display: flex; - align-items: center; - justify-content: space-between; - min-height: 1.5rem; - - .tag { - opacity: 0.6; - font-size: 0.8rem; - padding: 2px 8px; - background-color: rgba(0, 0, 0, 0.1); - } - } - - .isekai-list-item-content { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - padding-top: 0.625rem; - padding-bottom: 0.625rem; - font-weight: 400; - font-size: 1rem; - line-height: 1.25rem; - } - - .isekai-list-item-title~.isekai-list-item-text { - margin-top: 0.25rem; - } - - .isekai-list-item-text { - font-size: 0.875rem; - opacity: 0.54; - -webkit-line-clamp: 1; - height: 1.25rem; - display: -webkit-box; - overflow: hidden; - text-overflow: ellipsis; - -webkit-box-orient: vertical; - } -} - -.skin-citizen-dark, .skin-timeless-dark { - .isekai-list { - a { - color: white; - text-decoration: none; - - &:hover { - color: white; - text-decoration: none; - } - - &:visited { - color: white; - text-decoration: none; - - &:hover { - color: white; - text-decoration: none; - } - } - } - } } \ No newline at end of file diff --git a/modules/offcanvasTOC/ext.isekai.offcanvasTOC.js b/modules/offcanvasTOC/ext.isekai.offcanvasTOC.js new file mode 100644 index 0000000..d9fc7e5 --- /dev/null +++ b/modules/offcanvasTOC/ext.isekai.offcanvasTOC.js @@ -0,0 +1,329 @@ +var headingList = []; +var menuList = []; +var bottomNavBtn; +var bottomNavBtnLabel; +var scrollBehaviorAvaliable = (function() { + // 检测Chrome + var v = navigator.userAgent.match(/Chrome\/(?\S+)/); + if (v && v.groups.version) { + var chromeVersion = parseInt(v.groups.version); + return chromeVersion >= 61; + } + + // 检测Firefox + v = navigator.userAgent.match(/Firefox\/(?\S+)/); + if (v && v.groups.version) { + var firefoxVersion = parseInt(v.groups.version); + return firefoxVersion >= 36; + } + + // 检测Safari + v = navigator.userAgent.match(/Version\/(?\S+)/); + if (v && v.groups.version) { // Safari + var safariVersion = parseFloat(v.groups.version); + return safariVersion >= 14; + } + + return false; +})(); + +function getScrollOffset() { + if (mw.config.get('skin') === 'timeless' && window.innerWidth > 850) { + return 60; + } else if (mw.config.get('skin') === 'minerva') { + return 60; + } else { + return 10; + } +} + +function getAnchorOffset() { + if (mw.config.get('skin') === 'timeless' && window.innerWidth > 850) { + return 70; + } else if (mw.config.get('skin') === 'minerva') { + return 70; + } else { + return 20; + } +} + +function scrollToAnchor(link) { + var el = document.getElementById(link.replace(/^#/, '')); + if (el) { + var target = $(el); + + function doScroll() { + var position = target.offset().top - getScrollOffset(); + + if (scrollBehaviorAvaliable) { + window.scrollTo({ + top: position, + behavior: 'smooth' + }); + } else { + $('html, body').animate({ + scrollTop: position, + }, 500); + } + } + + if (mw.config.get('skin') === 'minerva') { // 手机端主题,需要检测折叠状态 + var collapseBlock = target.parents('.collapsible-block'); + if (collapseBlock.length > 0 && !collapseBlock.hasClass('open-block')) { + var h1Elem = collapseBlock.prev('.collapsible-heading'); + if (h1Elem.length > 0) { + // 展开目录 + h1Elem.click(); + var tid = setInterval(function() { + // 检测是否已经展开 + if (collapseBlock.hasClass('open-block')) { + doScroll(); + clearInterval(tid); + } + }, 100); + return false; + } + } + doScroll(); + } else { + doScroll(); + } + return false; + } else { + return true; + } +} + +function getScrollbarWidth() { + if (window.innerWidth && document.body.clientWidth) { + return window.innerWidth - document.body.clientWidth; + } else { + return 0; + } +} + +var lastActiveId = null; +function updateActive() { + var scrollTop = $(window).scrollTop() + getAnchorOffset(); + + if (headingList.length > 0) { + var activedId; + for (var i = 0; i < headingList.length; i ++) { + var headItem = headingList[i]; + var headPos = headItem.offset().top; + if (i === 0 && scrollTop < headPos) { // 比第一个head位置靠上,则是简介 + activedId = 'bodyContent'; + break; + } else if (scrollTop < headPos) { // 如果当前滚动条高度低于目前head,则是上一个 + activedId = headingList[i - 1].attr('id'); + break; + } + } + if (!activedId) { + activedId = headingList[headingList.length - 1].attr('id'); + } + if (activedId !== lastActiveId) { + $('#isekai-offcanvas-toc ul .list-item').removeClass('active'); + $('#isekai-offcanvas-toc ul .list-item[data-id="' + activedId + '"]').addClass('active'); + var menuItem = menuList.find((item) => { + return item.id === activedId; + }); + if (menuItem) { + if (menuItem.number) { + bottomNavBtnLabel.text(menuItem.number + '. ' + menuItem.text); + } else { + bottomNavBtnLabel.text(menuItem.text); + } + } + lastActiveId = activedId; + } + } +} + +function openOffcanvas() { + $('#iseai-offcanvas-btn').show(); + menuHidden = false; + + let scrollbarWidth = getScrollbarWidth(); + $('#isekai-offcanvas-cover').removeClass('hidden'); + + window.requestAnimationFrame(function() { + $('body').addClass(['toc-offcanvas-show', 'toc-offcanvas-open']) + .css('margin-right', scrollbarWidth); + $('#isekai-fab-container').css('margin-right', scrollbarWidth); + if (mw.config.get('skin') === 'timeless') { + $('#mw-header-container').css('padding-right', scrollbarWidth); + } + + // 滚动到当前项目 + let activedItem = $('#isekai-offcanvas-toc ul .list-item.active'); + if (activedItem.length > 0) { + let targetY = Math.max(activedItem.eq(0).prop('offsetTop') - 50, 0); + $('#isekai-offcanvas-toc').scrollTop(targetY); + } + }); +} + +function closeOffcanvas() { + if ($('#iseai-offcanvas-contextmenu').length > 0) { + $('#iseai-offcanvas-contextmenu').remove(); + $('#isekai-offcanvas-cover').addClass('hidden'); + } else { + $('body').removeClass('toc-offcanvas-open'); + setTimeout(function() { + $('body').removeClass('toc-offcanvas-show').css('margin-right', 0); + $('#isekai-offcanvas-cover').addClass('hidden'); + $('#isekai-fab-container').css('margin-right', 0); + if (mw.config.get('skin') === 'timeless') { + $('#mw-header-container').css('padding-right', 0); + } + }, 260); + } +} + +function throttle(fn, delay) { + var timer = null; + return function() { + if (!timer) { + timer = setTimeout(function() { + fn(); + timer = null; + }, delay); + } + }; +} + +$(function() { + if (mw.config.get('wgIsArticle')) { + // 创建目录dom + $('body').append(` +
+
    +
    + + `); + + // 创建按钮 + var menuIcon = new OO.ui.IconWidget({ icon: 'menu' }); + isekai.fab.addButton({ + id: 'offcanvas-toc', + label: mw.msg('isekai-offcanvastoc-menubutton'), + icon: menuIcon.$element[0], + priority: 0, + onClick: function() { + openOffcanvas(); + } + }); + var bottomMenuIcon = new OO.ui.IconWidget({ icon: 'menu' }); + bottomNavBtn = isekai.bottomNav.addButton({ + id: 'offcanvas-toc', + label: mw.msg('isekai-offcanvastoc-menubutton'), + icon: bottomMenuIcon.$element[0], + priority: 0, + expand: true, + onClick: function() { + openOffcanvas(); + } + }); + bottomNavBtnLabel = $(bottomNavBtn).find('.isekai-bottom-nav-btn-label'); + bottomNavBtnLabel.text(''); + + // 生成目录 + var parserOutput = $('.mw-parser-output'); + var headings = parserOutput.find('h1,h2,h3,h4,h5,h6,heading-6'); + + var headNum = new Array(6).fill(0); + menuList = [{ + number: false, + text: mw.msg('isekai-offcanvastoc-description-item'), + id: 'bodyContent' + }]; + + headings.each(function() { + var headline = $(this).find('.mw-headline'); + if (headline.length > 0) { + headingList.push(headline); + var text = headline.text(); + var headId = headline.prop('id'); + + var indentNum = parseInt(this.tagName.replace(/^H/, '')); + this.classList.forEach((className) => { + if (className.indexOf('heading-') === 0) { + indentNum = parseInt(className.replace(/^heading-/, '')); + } + }) + + // 计算折叠 + var menuNumStringBuilder = []; + headNum[indentNum - 1] ++; + for (var i = 0; i < indentNum; i ++) { + menuNumStringBuilder.push(headNum[i]); + } + for (var i = indentNum; i < headNum.length; i ++) { + headNum[i] = 0; + } + var menuNum = menuNumStringBuilder.join('.'); + menuList.push({ + number: menuNum, + text: text, + id: headId + }); + } + }); + + // 生成dom + var tocContainer = $('#isekai-offcanvas-toc ul'); + menuList.forEach(function(menuInfo) { + var listItem = document.createElement('a'); + listItem.href = '#' + menuInfo.id; + listItem.dataset.id = menuInfo.id; + listItem.classList.add('list-item'); + + var titleItem = document.createElement('span'); + titleItem.classList.add('title'); + titleItem.innerText = menuInfo.text; + + if (menuInfo.number) { + var numberItem = document.createElement('span'); + numberItem.classList.add('number'); + numberItem.innerText = menuInfo.number; + listItem.appendChild(numberItem); + } + + listItem.appendChild(titleItem); + + tocContainer[0].appendChild(listItem); + }); + + // 事件 + $('#isekai-offcanvas-cover').on('click', function() { + closeOffcanvas(); + }); + + $('#isekai-offcanvas-toc ul .list-item').on('click', function(e) { + // 点击链接 + e.preventDefault(); + var target = $(this).data('id'); + if (target && target != '') { + target = '#' + target; + $('#isekai-offcanvas-toc ul .list-item').removeClass('active'); + $(this).addClass('active'); + scrollToAnchor(target); + if (window.innerWidth < 550) { // 手机端,关闭抽屉 + closeOffcanvas(); + } + } + return false; + }); + + $('#content').on('dblclick', function(e) { + if (window._openOffcanvasTocViaDblclick) { + openOffcanvas(); + } + }); + + window.addEventListener('scroll', throttle(updateActive, 500), { passive: true }); + + updateActive(); + } +}); \ No newline at end of file diff --git a/modules/offcanvasTOC/ext.isekai.offcanvasTOC.less b/modules/offcanvasTOC/ext.isekai.offcanvasTOC.less new file mode 100644 index 0000000..857e76e --- /dev/null +++ b/modules/offcanvasTOC/ext.isekai.offcanvasTOC.less @@ -0,0 +1,113 @@ +.toc-offcanvas { + position: fixed; + visibility: hidden; + opacity: 0; + top: 0; + right: 0; + z-index: 102; + margin: 0; + height: 100vh; + min-width: 275px; + max-width: 80%; + box-shadow: 1px 0 8px 0 rgba(0, 0, 0, 0.35); + transform: translate3d(100%, 0, 0); + transition: opacity 250ms ease-in-out, transform 250ms ease-in-out; + will-change: transform; + overflow-y: auto; + background-color: #eaecf0; + scrollbar-width: thin; + padding-top: env(safe-area-inset-top, 0); + padding-bottom: env(safe-area-inset-bottom, 0); + padding-right: env(safe-area-inset-right, 0); + + > ul { + list-style: none; + margin: 0; + padding: 0; + + a.list-item { + text-decoration: none; + + &:hover, + &:active, + &:focus, + &:visited { + color: #54595d; + outline: none; + } + } + + .list-item { + display: block; + color: #54595d; + background-color: #fff; + border-top: 1px solid #eaecf0; + max-width: 100%; + padding: 12px 10px 12px 15px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + .title { + margin-inline-start: 10px; + } + + &:active { + background-color: #ccc; + } + + &:first-of-type { + border-top: none; + margin-top: 8px; + } + + &:last-of-type { + margin-bottom: 8px; + } + + &.active { + box-shadow: inset 4px 0 0 0 #3366cc; + } + } + } +} + +.toc-offcanvas-cover { + position: fixed; + top: 0; + left: 0; + right: 0; + opacity: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.8); + z-index: 101; + transition: opacity 250ms linear; + will-change: opacity; + + &.hidden { + display: none; + } +} + +body.toc-offcanvas-show { + overflow-y: hidden; + + .toc-offcanvas { + visibility: visible; + } + + #mw-overscroll-bottom-cover { + display: none; + } +} + +body.toc-offcanvas-open { + .toc-offcanvas-cover { + opacity: 0.5; + } + + .toc-offcanvas { + transform: translate3d(0, 0, 0); + opacity: 1; + } +} diff --git a/modules/tile/ext.isekai.tile.css b/modules/tile/ext.isekai.tile.css index 313901c..a9dbce1 100644 --- a/modules/tile/ext.isekai.tile.css +++ b/modules/tile/ext.isekai.tile.css @@ -1,1392 +1,1406 @@ -.tile-small, -.tile-medium, -.tile-wide, -.tile-large, -.tile-app { - display: block; - background-color: #1ba1e2; - color: #ffffff; - width: 150px; - height: 150px; - box-shadow: inset 0 0 1px #FFFFCC; - cursor: pointer; - position: relative; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - max-width: none!important; -} -.tile-small { - width: 70px; - height: 70px; -} -.tile-medium { - width: 150px; - height: 150px; -} -.tile-wide { - width: 310px; - height: 150px; -} -.tile-large { - width: 310px; - height: 310px; -} -.tile-app { - width: 44px; - height: 44px; -} -.tile-small .icon, -.tile-medium .icon, -.tile-wide .icon, -.tile-large .icon, -.tile-app .icon { - max-width: 33%; - height: 33%; - position: absolute; - top: 50%; - left: 50%; - transform: translateY(-50%) translateX(-50%); - /*font-size: 50px;*/ - /*line-height: 50px;*/ - z-index: 2; -} -.tile-small .branding-bar, -.tile-medium .branding-bar, -.tile-wide .branding-bar, -.tile-large .branding-bar, -.tile-app .branding-bar { - height: 32px; - line-height: 32px; - position: absolute; - left: 0; - bottom: 0; - right: 0; - padding: 0 10px 5px; - font-size: 0.875rem; - font-weight: 500; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - z-index: 2; -} -.tile-small .badge-top, -.tile-medium .badge-top, -.tile-wide .badge-top, -.tile-large .badge-top, -.tile-app .badge-top, -.tile-small .badge-bottom, -.tile-medium .badge-bottom, -.tile-wide .badge-bottom, -.tile-large .badge-bottom, -.tile-app .badge-bottom { - position: absolute; - display: block; - padding: 4px 8px; - font-size: 12px; - text-align: center; - background-color: rgba(29, 29, 29, 0.1); - z-index: 2; -} -.tile-small .badge-bottom, -.tile-medium .badge-bottom, -.tile-wide .badge-bottom, -.tile-large .badge-bottom, -.tile-app .badge-bottom { - right: 10px; - bottom: 0; -} -.tile-small .badge-top, -.tile-medium .badge-top, -.tile-wide .badge-top, -.tile-large .badge-top, -.tile-app .badge-top { - top: 10px; - right: 10px; -} -.tile-small:hover, -.tile-medium:hover, -.tile-wide:hover, -.tile-large:hover, -.tile-app:hover { - outline: rgba(29, 29, 29, 0.1) solid 4px; -} -.tile-small { - /*.branding-bar { - display: none; - }*/ -} -.tile-small .icon { - max-width: 50%; - font-size: 35px; - line-height: 35px; -} -.tile-large .icon { - font-size: 102px; - line-height: 102px; -} -.tile-app .icon { - max-width: 75%; - height: 75%; -} -.tile-small.transform-right, -.tile-medium.transform-right, -.tile-wide.transform-right, -.tile-large.transform-right, -.tile-app.transform-right { - transform-origin: left 50%; - transform: perspective(500px) rotateY(0.138372rad) !important; -} -.tile-small.transform-right.tile-small, -.tile-medium.transform-right.tile-small, -.tile-wide.transform-right.tile-small, -.tile-large.transform-right.tile-small, -.tile-app.transform-right.tile-small { - transform: perspective(500px) rotateY(0.276744rad) !important; -} -.tile-small.transform-right.tile-wide, -.tile-medium.transform-right.tile-wide, -.tile-wide.transform-right.tile-wide, -.tile-large.transform-right.tile-wide, -.tile-app.transform-right.tile-wide { - transform: perspective(500px) rotateY(0.138372rad / 2) !important; -} -.tile-small.transform-right.tile-large, -.tile-medium.transform-right.tile-large, -.tile-wide.transform-right.tile-large, -.tile-large.transform-right.tile-large, -.tile-app.transform-right.tile-large { - transform: perspective(500px) rotateY(0.138372rad / 3) !important; -} -.tile-small.transform-left, -.tile-medium.transform-left, -.tile-wide.transform-left, -.tile-large.transform-left, -.tile-app.transform-left { - transform-origin: right 50%; - transform: perspective(500px) rotateY(-0.138372rad) !important; -} -.tile-small.transform-left.tile-small, -.tile-medium.transform-left.tile-small, -.tile-wide.transform-left.tile-small, -.tile-large.transform-left.tile-small, -.tile-app.transform-left.tile-small { - transform: perspective(500px) rotateY(-0.276744rad) !important; -} -.tile-small.transform-left.tile-wide, -.tile-medium.transform-left.tile-wide, -.tile-wide.transform-left.tile-wide, -.tile-large.transform-left.tile-wide, -.tile-app.transform-left.tile-wide { - transform: perspective(500px) rotateY(-0.138372rad / 2) !important; -} -.tile-small.transform-left.tile-large, -.tile-medium.transform-left.tile-large, -.tile-wide.transform-left.tile-large, -.tile-large.transform-left.tile-large, -.tile-app.transform-left.tile-large { - transform: perspective(500px) rotateY(-0.138372rad / 3) !important; -} -.tile-small.transform-top, -.tile-medium.transform-top, -.tile-wide.transform-top, -.tile-large.transform-top, -.tile-app.transform-top { - transform-origin: 50% bottom; - transform: perspective(500px) rotateX(0.138372rad) !important; -} -.tile-small.transform-top.tile-small, -.tile-medium.transform-top.tile-small, -.tile-wide.transform-top.tile-small, -.tile-large.transform-top.tile-small, -.tile-app.transform-top.tile-small { - transform: perspective(500px) rotateX(0.276744rad) !important; -} -.tile-small.transform-top.tile-wide, -.tile-medium.transform-top.tile-wide, -.tile-wide.transform-top.tile-wide, -.tile-large.transform-top.tile-wide, -.tile-app.transform-top.tile-wide { - transform: perspective(500px) rotateX(0.138372rad / 2) !important; -} -.tile-small.transform-top.tile-large, -.tile-medium.transform-top.tile-large, -.tile-wide.transform-top.tile-large, -.tile-large.transform-top.tile-large, -.tile-app.transform-top.tile-large { - transform: perspective(500px) rotateX(0.138372rad / 3) !important; -} -.tile-small.transform-bottom, -.tile-medium.transform-bottom, -.tile-wide.transform-bottom, -.tile-large.transform-bottom, -.tile-app.transform-bottom { - transform-origin: 50% top; - transform: perspective(500px) rotateX(-0.138372rad) !important; -} -.tile-small.transform-bottom.tile-small, -.tile-medium.transform-bottom.tile-small, -.tile-wide.transform-bottom.tile-small, -.tile-large.transform-bottom.tile-small, -.tile-app.transform-bottom.tile-small { - transform: perspective(500px) rotateX(-0.276744rad) !important; -} -.tile-small.transform-bottom.tile-wide, -.tile-medium.transform-bottom.tile-wide, -.tile-wide.transform-bottom.tile-wide, -.tile-large.transform-bottom.tile-wide, -.tile-app.transform-bottom.tile-wide { - transform: perspective(500px) rotateX(-0.138372rad / 2) !important; -} -.tile-small.transform-bottom.tile-large, -.tile-medium.transform-bottom.tile-large, -.tile-wide.transform-bottom.tile-large, -.tile-large.transform-bottom.tile-large, -.tile-app.transform-bottom.tile-large { - transform: perspective(500px) rotateX(-0.138372rad / 3) !important; -} -.tiles-grid { - position: relative; - display: grid; - grid-template-columns: repeat(auto-fit, 24%); - /*grid-template-rows: repeat(auto-fit, (@tileBaseSize - 1%));*/ - grid-gap: 10px; - /*.tile-small::before, - .tile-medium::before, - .tile-large::before { - content: ''; - padding-bottom: 100%; - display: block; - } - - .tile-wide::before { - content: ''; - padding-bottom: 50%; - display: block; - }*/ -} -.tiles-grid .tile-small { - height: 100%; - width: 100%; - grid-column: span 1; - grid-row: span 1; -} -.tiles-grid .tile-medium { - height: 100%; - width: 100%; - grid-column: span 2; - grid-row: span 2; -} -.tiles-grid .tile-wide { - height: 100%; - width: 100%; - grid-column: span 4; - grid-row: span 2; -} -.tiles-grid .tile-large { - height: 100%; - width: 100%; - grid-column: span 4; - grid-row: span 4; -} -.tiles-grid .tile-small.col-1 { - grid-column: 1 / span 1; -} -.tiles-grid .tile-medium.col-1 { - grid-column: 1 / span 2; -} -.tiles-grid .tile-wide.col-1 { - grid-column: 1 / span 4; -} -.tiles-grid .tile-large.col-1 { - grid-column: 1 / span 4; -} -.tiles-grid .tile-small.row-1 { - grid-row: 1 / span 1; -} -.tiles-grid .tile-medium.row-1 { - grid-row: 1 / span 2; -} -.tiles-grid .tile-wide.row-1 { - grid-row: 1 / span 4; -} -.tiles-grid .tile-large.row-1 { - grid-row: 1 / span 4; -} -.tiles-grid .tile-small.col-2 { - grid-column: 2 / span 1; -} -.tiles-grid .tile-medium.col-2 { - grid-column: 2 / span 2; -} -.tiles-grid .tile-wide.col-2 { - grid-column: 2 / span 4; -} -.tiles-grid .tile-large.col-2 { - grid-column: 2 / span 4; -} -.tiles-grid .tile-small.row-2 { - grid-row: 2 / span 1; -} -.tiles-grid .tile-medium.row-2 { - grid-row: 2 / span 2; -} -.tiles-grid .tile-wide.row-2 { - grid-row: 2 / span 4; -} -.tiles-grid .tile-large.row-2 { - grid-row: 2 / span 4; -} -.tiles-grid .tile-small.col-3 { - grid-column: 3 / span 1; -} -.tiles-grid .tile-medium.col-3 { - grid-column: 3 / span 2; -} -.tiles-grid .tile-wide.col-3 { - grid-column: 3 / span 4; -} -.tiles-grid .tile-large.col-3 { - grid-column: 3 / span 4; -} -.tiles-grid .tile-small.row-3 { - grid-row: 3 / span 1; -} -.tiles-grid .tile-medium.row-3 { - grid-row: 3 / span 2; -} -.tiles-grid .tile-wide.row-3 { - grid-row: 3 / span 4; -} -.tiles-grid .tile-large.row-3 { - grid-row: 3 / span 4; -} -.tiles-grid .tile-small.col-4 { - grid-column: 4 / span 1; -} -.tiles-grid .tile-medium.col-4 { - grid-column: 4 / span 2; -} -.tiles-grid .tile-wide.col-4 { - grid-column: 4 / span 4; -} -.tiles-grid .tile-large.col-4 { - grid-column: 4 / span 4; -} -.tiles-grid .tile-small.row-4 { - grid-row: 4 / span 1; -} -.tiles-grid .tile-medium.row-4 { - grid-row: 4 / span 2; -} -.tiles-grid .tile-wide.row-4 { - grid-row: 4 / span 4; -} -.tiles-grid .tile-large.row-4 { - grid-row: 4 / span 4; -} -.tiles-grid .tile-small.col-5 { - grid-column: 5 / span 1; -} -.tiles-grid .tile-medium.col-5 { - grid-column: 5 / span 2; -} -.tiles-grid .tile-wide.col-5 { - grid-column: 5 / span 4; -} -.tiles-grid .tile-large.col-5 { - grid-column: 5 / span 4; -} -.tiles-grid .tile-small.row-5 { - grid-row: 5 / span 1; -} -.tiles-grid .tile-medium.row-5 { - grid-row: 5 / span 2; -} -.tiles-grid .tile-wide.row-5 { - grid-row: 5 / span 4; -} -.tiles-grid .tile-large.row-5 { - grid-row: 5 / span 4; -} -.tiles-grid .tile-small.col-6 { - grid-column: 6 / span 1; -} -.tiles-grid .tile-medium.col-6 { - grid-column: 6 / span 2; -} -.tiles-grid .tile-wide.col-6 { - grid-column: 6 / span 4; -} -.tiles-grid .tile-large.col-6 { - grid-column: 6 / span 4; -} -.tiles-grid .tile-small.row-6 { - grid-row: 6 / span 1; -} -.tiles-grid .tile-medium.row-6 { - grid-row: 6 / span 2; -} -.tiles-grid .tile-wide.row-6 { - grid-row: 6 / span 4; -} -.tiles-grid .tile-large.row-6 { - grid-row: 6 / span 4; -} -.tiles-grid .tile-small.col-7 { - grid-column: 7 / span 1; -} -.tiles-grid .tile-medium.col-7 { - grid-column: 7 / span 2; -} -.tiles-grid .tile-wide.col-7 { - grid-column: 7 / span 4; -} -.tiles-grid .tile-large.col-7 { - grid-column: 7 / span 4; -} -.tiles-grid .tile-small.row-7 { - grid-row: 7 / span 1; -} -.tiles-grid .tile-medium.row-7 { - grid-row: 7 / span 2; -} -.tiles-grid .tile-wide.row-7 { - grid-row: 7 / span 4; -} -.tiles-grid .tile-large.row-7 { - grid-row: 7 / span 4; -} -.tiles-grid .tile-small.col-8 { - grid-column: 8 / span 1; -} -.tiles-grid .tile-medium.col-8 { - grid-column: 8 / span 2; -} -.tiles-grid .tile-wide.col-8 { - grid-column: 8 / span 4; -} -.tiles-grid .tile-large.col-8 { - grid-column: 8 / span 4; -} -.tiles-grid .tile-small.row-8 { - grid-row: 8 / span 1; -} -.tiles-grid .tile-medium.row-8 { - grid-row: 8 / span 2; -} -.tiles-grid .tile-wide.row-8 { - grid-row: 8 / span 4; -} -.tiles-grid .tile-large.row-8 { - grid-row: 8 / span 4; -} -.tiles-grid .tile-small.col-9 { - grid-column: 9 / span 1; -} -.tiles-grid .tile-medium.col-9 { - grid-column: 9 / span 2; -} -.tiles-grid .tile-wide.col-9 { - grid-column: 9 / span 4; -} -.tiles-grid .tile-large.col-9 { - grid-column: 9 / span 4; -} -.tiles-grid .tile-small.row-9 { - grid-row: 9 / span 1; -} -.tiles-grid .tile-medium.row-9 { - grid-row: 9 / span 2; -} -.tiles-grid .tile-wide.row-9 { - grid-row: 9 / span 4; -} -.tiles-grid .tile-large.row-9 { - grid-row: 9 / span 4; -} -.tiles-grid .tile-small.col-10 { - grid-column: 10 / span 1; -} -.tiles-grid .tile-medium.col-10 { - grid-column: 10 / span 2; -} -.tiles-grid .tile-wide.col-10 { - grid-column: 10 / span 4; -} -.tiles-grid .tile-large.col-10 { - grid-column: 10 / span 4; -} -.tiles-grid .tile-small.row-10 { - grid-row: 10 / span 1; -} -.tiles-grid .tile-medium.row-10 { - grid-row: 10 / span 2; -} -.tiles-grid .tile-wide.row-10 { - grid-row: 10 / span 4; -} -.tiles-grid .tile-large.row-10 { - grid-row: 10 / span 4; -} -.tiles-grid .tile-small.col-11 { - grid-column: 11 / span 1; -} -.tiles-grid .tile-medium.col-11 { - grid-column: 11 / span 2; -} -.tiles-grid .tile-wide.col-11 { - grid-column: 11 / span 4; -} -.tiles-grid .tile-large.col-11 { - grid-column: 11 / span 4; -} -.tiles-grid .tile-small.row-11 { - grid-row: 11 / span 1; -} -.tiles-grid .tile-medium.row-11 { - grid-row: 11 / span 2; -} -.tiles-grid .tile-wide.row-11 { - grid-row: 11 / span 4; -} -.tiles-grid .tile-large.row-11 { - grid-row: 11 / span 4; -} -.tiles-grid .tile-small.col-12 { - grid-column: 12 / span 1; -} -.tiles-grid .tile-medium.col-12 { - grid-column: 12 / span 2; -} -.tiles-grid .tile-wide.col-12 { - grid-column: 12 / span 4; -} -.tiles-grid .tile-large.col-12 { - grid-column: 12 / span 4; -} -.tiles-grid .tile-small.row-12 { - grid-row: 12 / span 1; -} -.tiles-grid .tile-medium.row-12 { - grid-row: 12 / span 2; -} -.tiles-grid .tile-wide.row-12 { - grid-row: 12 / span 4; -} -.tiles-grid .tile-large.row-12 { - grid-row: 12 / span 4; -} -.tiles-grid.size-half { - width: 50%; -} -.tiles-grid.size-1 { - width: 8.33333333%; -} -.tiles-grid.size-2 { - width: 16.66666667%; -} -.tiles-grid.size-3 { - width: 25%; -} -.tiles-grid.size-4 { - width: 33.33333333%; -} -.tiles-grid.size-5 { - width: 41.66666667%; -} -.tiles-grid.size-6 { - width: 50%; -} -.tiles-grid.size-7 { - width: 58.33333333%; -} -.tiles-grid.size-8 { - width: 66.66666667%; -} -.tiles-grid.size-9 { - width: 75%; -} -.tiles-grid.size-10 { - width: 83.33333333%; -} -.tiles-grid.size-11 { - width: 91.66666667%; -} -.tiles-grid.size-12 { - width: 100%; -} -@media screen and (min-width: 0) { - .tiles-grid .col-fs-1 { - grid-column: 1; - } - .tiles-grid .row-fs-1 { - grid-row: 1; - } - .tiles-grid .col-fs-2 { - grid-column: 2; - } - .tiles-grid .row-fs-2 { - grid-row: 2; - } - .tiles-grid .col-fs-3 { - grid-column: 3; - } - .tiles-grid .row-fs-3 { - grid-row: 3; - } - .tiles-grid .col-fs-4 { - grid-column: 4; - } - .tiles-grid .row-fs-4 { - grid-row: 4; - } - .tiles-grid .col-fs-5 { - grid-column: 5; - } - .tiles-grid .row-fs-5 { - grid-row: 5; - } - .tiles-grid .col-fs-6 { - grid-column: 6; - } - .tiles-grid .row-fs-6 { - grid-row: 6; - } - .tiles-grid .col-fs-7 { - grid-column: 7; - } - .tiles-grid .row-fs-7 { - grid-row: 7; - } - .tiles-grid .col-fs-8 { - grid-column: 8; - } - .tiles-grid .row-fs-8 { - grid-row: 8; - } - .tiles-grid .col-fs-9 { - grid-column: 9; - } - .tiles-grid .row-fs-9 { - grid-row: 9; - } - .tiles-grid .col-fs-10 { - grid-column: 10; - } - .tiles-grid .row-fs-10 { - grid-row: 10; - } - .tiles-grid .col-fs-11 { - grid-column: 11; - } - .tiles-grid .row-fs-11 { - grid-row: 11; - } - .tiles-grid .col-fs-12 { - grid-column: 12; - } - .tiles-grid .row-fs-12 { - grid-row: 12; - } - .tiles-grid.size-fs-1 { - width: 8.33333333%; - } - .tiles-grid.size-fs-2 { - width: 16.66666667%; - } - .tiles-grid.size-fs-3 { - width: 25%; - } - .tiles-grid.size-fs-4 { - width: 33.33333333%; - } - .tiles-grid.size-fs-5 { - width: 41.66666667%; - } - .tiles-grid.size-fs-6 { - width: 50%; - } - .tiles-grid.size-fs-7 { - width: 58.33333333%; - } - .tiles-grid.size-fs-8 { - width: 66.66666667%; - } - .tiles-grid.size-fs-9 { - width: 75%; - } - .tiles-grid.size-fs-10 { - width: 83.33333333%; - } - .tiles-grid.size-fs-11 { - width: 91.66666667%; - } - .tiles-grid.size-fs-12 { - width: 100%; - } -} -@media screen and (min-width: 576px) { - .tiles-grid .col-sm-1 { - grid-column: 1; - } - .tiles-grid .row-sm-1 { - grid-row: 1; - } - .tiles-grid .col-sm-2 { - grid-column: 2; - } - .tiles-grid .row-sm-2 { - grid-row: 2; - } - .tiles-grid .col-sm-3 { - grid-column: 3; - } - .tiles-grid .row-sm-3 { - grid-row: 3; - } - .tiles-grid .col-sm-4 { - grid-column: 4; - } - .tiles-grid .row-sm-4 { - grid-row: 4; - } - .tiles-grid .col-sm-5 { - grid-column: 5; - } - .tiles-grid .row-sm-5 { - grid-row: 5; - } - .tiles-grid .col-sm-6 { - grid-column: 6; - } - .tiles-grid .row-sm-6 { - grid-row: 6; - } - .tiles-grid .col-sm-7 { - grid-column: 7; - } - .tiles-grid .row-sm-7 { - grid-row: 7; - } - .tiles-grid .col-sm-8 { - grid-column: 8; - } - .tiles-grid .row-sm-8 { - grid-row: 8; - } - .tiles-grid .col-sm-9 { - grid-column: 9; - } - .tiles-grid .row-sm-9 { - grid-row: 9; - } - .tiles-grid .col-sm-10 { - grid-column: 10; - } - .tiles-grid .row-sm-10 { - grid-row: 10; - } - .tiles-grid .col-sm-11 { - grid-column: 11; - } - .tiles-grid .row-sm-11 { - grid-row: 11; - } - .tiles-grid .col-sm-12 { - grid-column: 12; - } - .tiles-grid .row-sm-12 { - grid-row: 12; - } - .tiles-grid.size-sm-1 { - width: 8.33333333%; - } - .tiles-grid.size-sm-2 { - width: 16.66666667%; - } - .tiles-grid.size-sm-3 { - width: 25%; - } - .tiles-grid.size-sm-4 { - width: 33.33333333%; - } - .tiles-grid.size-sm-5 { - width: 41.66666667%; - } - .tiles-grid.size-sm-6 { - width: 50%; - } - .tiles-grid.size-sm-7 { - width: 58.33333333%; - } - .tiles-grid.size-sm-8 { - width: 66.66666667%; - } - .tiles-grid.size-sm-9 { - width: 75%; - } - .tiles-grid.size-sm-10 { - width: 83.33333333%; - } - .tiles-grid.size-sm-11 { - width: 91.66666667%; - } - .tiles-grid.size-sm-12 { - width: 100%; - } -} -@media screen and (min-width: 768px) { - .tiles-grid .col-md-1 { - grid-column: 1; - } - .tiles-grid .row-md-1 { - grid-row: 1; - } - .tiles-grid .col-md-2 { - grid-column: 2; - } - .tiles-grid .row-md-2 { - grid-row: 2; - } - .tiles-grid .col-md-3 { - grid-column: 3; - } - .tiles-grid .row-md-3 { - grid-row: 3; - } - .tiles-grid .col-md-4 { - grid-column: 4; - } - .tiles-grid .row-md-4 { - grid-row: 4; - } - .tiles-grid .col-md-5 { - grid-column: 5; - } - .tiles-grid .row-md-5 { - grid-row: 5; - } - .tiles-grid .col-md-6 { - grid-column: 6; - } - .tiles-grid .row-md-6 { - grid-row: 6; - } - .tiles-grid .col-md-7 { - grid-column: 7; - } - .tiles-grid .row-md-7 { - grid-row: 7; - } - .tiles-grid .col-md-8 { - grid-column: 8; - } - .tiles-grid .row-md-8 { - grid-row: 8; - } - .tiles-grid .col-md-9 { - grid-column: 9; - } - .tiles-grid .row-md-9 { - grid-row: 9; - } - .tiles-grid .col-md-10 { - grid-column: 10; - } - .tiles-grid .row-md-10 { - grid-row: 10; - } - .tiles-grid .col-md-11 { - grid-column: 11; - } - .tiles-grid .row-md-11 { - grid-row: 11; - } - .tiles-grid .col-md-12 { - grid-column: 12; - } - .tiles-grid .row-md-12 { - grid-row: 12; - } - .tiles-grid.size-md-1 { - width: 8.33333333%; - } - .tiles-grid.size-md-2 { - width: 16.66666667%; - } - .tiles-grid.size-md-3 { - width: 25%; - } - .tiles-grid.size-md-4 { - width: 33.33333333%; - } - .tiles-grid.size-md-5 { - width: 41.66666667%; - } - .tiles-grid.size-md-6 { - width: 50%; - } - .tiles-grid.size-md-7 { - width: 58.33333333%; - } - .tiles-grid.size-md-8 { - width: 66.66666667%; - } - .tiles-grid.size-md-9 { - width: 75%; - } - .tiles-grid.size-md-10 { - width: 83.33333333%; - } - .tiles-grid.size-md-11 { - width: 91.66666667%; - } - .tiles-grid.size-md-12 { - width: 100%; - } -} -@media screen and (min-width: 992px) { - .tiles-grid .col-lg-1 { - grid-column: 1; - } - .tiles-grid .row-lg-1 { - grid-row: 1; - } - .tiles-grid .col-lg-2 { - grid-column: 2; - } - .tiles-grid .row-lg-2 { - grid-row: 2; - } - .tiles-grid .col-lg-3 { - grid-column: 3; - } - .tiles-grid .row-lg-3 { - grid-row: 3; - } - .tiles-grid .col-lg-4 { - grid-column: 4; - } - .tiles-grid .row-lg-4 { - grid-row: 4; - } - .tiles-grid .col-lg-5 { - grid-column: 5; - } - .tiles-grid .row-lg-5 { - grid-row: 5; - } - .tiles-grid .col-lg-6 { - grid-column: 6; - } - .tiles-grid .row-lg-6 { - grid-row: 6; - } - .tiles-grid .col-lg-7 { - grid-column: 7; - } - .tiles-grid .row-lg-7 { - grid-row: 7; - } - .tiles-grid .col-lg-8 { - grid-column: 8; - } - .tiles-grid .row-lg-8 { - grid-row: 8; - } - .tiles-grid .col-lg-9 { - grid-column: 9; - } - .tiles-grid .row-lg-9 { - grid-row: 9; - } - .tiles-grid .col-lg-10 { - grid-column: 10; - } - .tiles-grid .row-lg-10 { - grid-row: 10; - } - .tiles-grid .col-lg-11 { - grid-column: 11; - } - .tiles-grid .row-lg-11 { - grid-row: 11; - } - .tiles-grid .col-lg-12 { - grid-column: 12; - } - .tiles-grid .row-lg-12 { - grid-row: 12; - } - .tiles-grid.size-lg-1 { - width: 8.33333333%; - } - .tiles-grid.size-lg-2 { - width: 16.66666667%; - } - .tiles-grid.size-lg-3 { - width: 25%; - } - .tiles-grid.size-lg-4 { - width: 33.33333333%; - } - .tiles-grid.size-lg-5 { - width: 41.66666667%; - } - .tiles-grid.size-lg-6 { - width: 50%; - } - .tiles-grid.size-lg-7 { - width: 58.33333333%; - } - .tiles-grid.size-lg-8 { - width: 66.66666667%; - } - .tiles-grid.size-lg-9 { - width: 75%; - } - .tiles-grid.size-lg-10 { - width: 83.33333333%; - } - .tiles-grid.size-lg-11 { - width: 91.66666667%; - } - .tiles-grid.size-lg-12 { - width: 100%; - } -} -@media screen and (min-width: 1200px) { - .tiles-grid .col-xl-1 { - grid-column: 1; - } - .tiles-grid .row-xl-1 { - grid-row: 1; - } - .tiles-grid .col-xl-2 { - grid-column: 2; - } - .tiles-grid .row-xl-2 { - grid-row: 2; - } - .tiles-grid .col-xl-3 { - grid-column: 3; - } - .tiles-grid .row-xl-3 { - grid-row: 3; - } - .tiles-grid .col-xl-4 { - grid-column: 4; - } - .tiles-grid .row-xl-4 { - grid-row: 4; - } - .tiles-grid .col-xl-5 { - grid-column: 5; - } - .tiles-grid .row-xl-5 { - grid-row: 5; - } - .tiles-grid .col-xl-6 { - grid-column: 6; - } - .tiles-grid .row-xl-6 { - grid-row: 6; - } - .tiles-grid .col-xl-7 { - grid-column: 7; - } - .tiles-grid .row-xl-7 { - grid-row: 7; - } - .tiles-grid .col-xl-8 { - grid-column: 8; - } - .tiles-grid .row-xl-8 { - grid-row: 8; - } - .tiles-grid .col-xl-9 { - grid-column: 9; - } - .tiles-grid .row-xl-9 { - grid-row: 9; - } - .tiles-grid .col-xl-10 { - grid-column: 10; - } - .tiles-grid .row-xl-10 { - grid-row: 10; - } - .tiles-grid .col-xl-11 { - grid-column: 11; - } - .tiles-grid .row-xl-11 { - grid-row: 11; - } - .tiles-grid .col-xl-12 { - grid-column: 12; - } - .tiles-grid .row-xl-12 { - grid-row: 12; - } - .tiles-grid.size-xl-1 { - width: 8.33333333%; - } - .tiles-grid.size-xl-2 { - width: 16.66666667%; - } - .tiles-grid.size-xl-3 { - width: 25%; - } - .tiles-grid.size-xl-4 { - width: 33.33333333%; - } - .tiles-grid.size-xl-5 { - width: 41.66666667%; - } - .tiles-grid.size-xl-6 { - width: 50%; - } - .tiles-grid.size-xl-7 { - width: 58.33333333%; - } - .tiles-grid.size-xl-8 { - width: 66.66666667%; - } - .tiles-grid.size-xl-9 { - width: 75%; - } - .tiles-grid.size-xl-10 { - width: 83.33333333%; - } - .tiles-grid.size-xl-11 { - width: 91.66666667%; - } - .tiles-grid.size-xl-12 { - width: 100%; - } -} -@media screen and (min-width: 1452px) { - .tiles-grid .col-xxl-1 { - grid-column: 1; - } - .tiles-grid .row-xxl-1 { - grid-row: 1; - } - .tiles-grid .col-xxl-2 { - grid-column: 2; - } - .tiles-grid .row-xxl-2 { - grid-row: 2; - } - .tiles-grid .col-xxl-3 { - grid-column: 3; - } - .tiles-grid .row-xxl-3 { - grid-row: 3; - } - .tiles-grid .col-xxl-4 { - grid-column: 4; - } - .tiles-grid .row-xxl-4 { - grid-row: 4; - } - .tiles-grid .col-xxl-5 { - grid-column: 5; - } - .tiles-grid .row-xxl-5 { - grid-row: 5; - } - .tiles-grid .col-xxl-6 { - grid-column: 6; - } - .tiles-grid .row-xxl-6 { - grid-row: 6; - } - .tiles-grid .col-xxl-7 { - grid-column: 7; - } - .tiles-grid .row-xxl-7 { - grid-row: 7; - } - .tiles-grid .col-xxl-8 { - grid-column: 8; - } - .tiles-grid .row-xxl-8 { - grid-row: 8; - } - .tiles-grid .col-xxl-9 { - grid-column: 9; - } - .tiles-grid .row-xxl-9 { - grid-row: 9; - } - .tiles-grid .col-xxl-10 { - grid-column: 10; - } - .tiles-grid .row-xxl-10 { - grid-row: 10; - } - .tiles-grid .col-xxl-11 { - grid-column: 11; - } - .tiles-grid .row-xxl-11 { - grid-row: 11; - } - .tiles-grid .col-xxl-12 { - grid-column: 12; - } - .tiles-grid .row-xxl-12 { - grid-row: 12; - } - .tiles-grid.size-xxl-1 { - width: 8.33333333%; - } - .tiles-grid.size-xxl-2 { - width: 16.66666667%; - } - .tiles-grid.size-xxl-3 { - width: 25%; - } - .tiles-grid.size-xxl-4 { - width: 33.33333333%; - } - .tiles-grid.size-xxl-5 { - width: 41.66666667%; - } - .tiles-grid.size-xxl-6 { - width: 50%; - } - .tiles-grid.size-xxl-7 { - width: 58.33333333%; - } - .tiles-grid.size-xxl-8 { - width: 66.66666667%; - } - .tiles-grid.size-xxl-9 { - width: 75%; - } - .tiles-grid.size-xxl-10 { - width: 83.33333333%; - } - .tiles-grid.size-xxl-11 { - width: 91.66666667%; - } - .tiles-grid.size-xxl-12 { - width: 100%; - } -} -.tiles-group { - width: 100%; - float: left; - overflow: visible; -} -.tiles-group::before { - content: attr(data-group-title); - display: block; - position: absolute; - left: 0; - top: -36px; - height: 1.5em; - line-height: 1.5em; - z-index: 1; - color: inherit; -} -[class*=tile-].image-set { - background-size: contain; - background-position: center; -} -[class*=tile-].image-set .img { - width: 25%; - height: 50%; - display: block; - float: left; - border: 1px solid #1d1d1d; - background-size: cover; -} -[class*=tile-].image-set .img:nth-child(1) { - width: 50%; - height: 100%; -} -[class*=tile-] .slide { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - display: block; -} -[class*=tile-] [class*=slide-] { - width: 100%; - height: 100%; - position: absolute; - transition: all 0.3s ease-in-out; -} -[class*=tile-] .slide-front { - top: 0; - left: 0; -} -[class*=tile-].effect-hover-slide-up .slide-back, -[class*=tile-].effect-hover-zoom-up .slide-back { - top: 100%; - left: 0; -} -[class*=tile-].effect-hover-slide-up:hover .slide-front, -[class*=tile-].effect-hover-zoom-up:hover .slide-front { - transform: translateY(-100%); -} -[class*=tile-].effect-hover-slide-up:hover .slide-back, -[class*=tile-].effect-hover-zoom-up:hover .slide-back { - top: 0; -} -[class*=tile-].effect-hover-slide-down .slide-back, -[class*=tile-].effect-hover-zoom-down .slide-back { - top: 0; - left: 0; - transform: translateY(-100%); -} -[class*=tile-].effect-hover-slide-down:hover .slide-front, -[class*=tile-].effect-hover-zoom-down:hover .slide-front { - top: 100%; -} -[class*=tile-].effect-hover-slide-down:hover .slide-back, -[class*=tile-].effect-hover-zoom-down:hover .slide-back { - transform: translateY(0); -} -[class*=tile-].effect-hover-slide-left .slide-back, -[class*=tile-].effect-hover-zoom-left .slide-back { - top: 0; - left: 100%; -} -[class*=tile-].effect-hover-slide-left:hover .slide-front, -[class*=tile-].effect-hover-zoom-left:hover .slide-front { - transform: translateX(-100%); -} -[class*=tile-].effect-hover-slide-left:hover .slide-back, -[class*=tile-].effect-hover-zoom-left:hover .slide-back { - left: 0; -} -[class*=tile-].effect-hover-slide-right .slide-back, -[class*=tile-].effect-hover-zoom-right .slide-back { - top: 0; - left: 0; - transform: translateX(-100%); -} -[class*=tile-].effect-hover-slide-right:hover .slide-front, -[class*=tile-].effect-hover-zoom-right:hover .slide-front { - left: 100%; -} -[class*=tile-].effect-hover-slide-right:hover .slide-back, -[class*=tile-].effect-hover-zoom-right:hover .slide-back { - transform: translateX(0); -} -[class*=tile-].effect-hover-zoom-up:hover .slide-front, -[class*=tile-].effect-hover-zoom-down:hover .slide-front, -[class*=tile-].effect-hover-zoom-left:hover .slide-front, -[class*=tile-].effect-hover-zoom-right:hover .slide-front { - left: 0; - top: 0; - transform: scale(2); -} - +/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/.pnpm/css-loader@6.7.3_webpack@5.82.0/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@7.3.0_postcss@8.4.23_webpack@5.82.0/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/less-loader@11.1.0_less@4.1.3_webpack@5.82.0/node_modules/less-loader/dist/cjs.js!./src/tile/tile.less ***! + \************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +.tile-small, +.tile-medium, +.tile-wide, +.tile-large, +.tile-app { + display: block; + background: linear-gradient(95deg, #007ec6, #0080cd, #008dd3); + color: #ffffff; + width: 150px; + height: 150px; + box-shadow: inset 0 0 1px #FFFFCC; + cursor: pointer; + position: relative; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + max-width: none!important; + border-radius: 6px; +} +.tile-small { + width: 70px; + height: 70px; +} +.tile-medium { + width: 150px; + height: 150px; +} +.tile-wide { + width: 310px; + height: 150px; +} +.tile-large { + width: 310px; + height: 310px; +} +.tile-app { + width: 44px; + height: 44px; +} +.tile-small, +.tile-medium, +.tile-wide, +.tile-large, +.tile-app { + transition: transform 250ms ease-in-out, box-shadow 250ms ease-in-out; + box-shadow: none; + transform: none; +} +.tile-small .icon, +.tile-medium .icon, +.tile-wide .icon, +.tile-large .icon, +.tile-app .icon { + max-width: 33%; + height: 33%; + position: absolute; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%); + /*font-size: 50px;*/ + /*line-height: 50px;*/ + z-index: 2; +} +.tile-small .branding-bar, +.tile-medium .branding-bar, +.tile-wide .branding-bar, +.tile-large .branding-bar, +.tile-app .branding-bar { + height: 32px; + line-height: 32px; + position: absolute; + left: 0; + bottom: 0; + right: 0; + padding: 0 10px 5px; + font-size: 0.875rem; + font-weight: 500; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + z-index: 2; +} +.tile-small .badge-top, +.tile-medium .badge-top, +.tile-wide .badge-top, +.tile-large .badge-top, +.tile-app .badge-top, +.tile-small .badge-bottom, +.tile-medium .badge-bottom, +.tile-wide .badge-bottom, +.tile-large .badge-bottom, +.tile-app .badge-bottom { + position: absolute; + display: block; + padding: 4px 8px; + font-size: 12px; + text-align: center; + background-color: rgba(29, 29, 29, 0.1); + z-index: 2; +} +.tile-small .badge-bottom, +.tile-medium .badge-bottom, +.tile-wide .badge-bottom, +.tile-large .badge-bottom, +.tile-app .badge-bottom { + right: 10px; + bottom: 0; +} +.tile-small .badge-top, +.tile-medium .badge-top, +.tile-wide .badge-top, +.tile-large .badge-top, +.tile-app .badge-top { + top: 10px; + right: 10px; +} +.tile-small:hover, +.tile-medium:hover, +.tile-wide:hover, +.tile-large:hover, +.tile-app:hover { + transform: translate3d(0, -4px, 0); + box-shadow: 0 4px 2px 0 rgba(0, 0, 0, 0.25); +} +.tile-small { + /*.branding-bar { + display: none; + }*/ +} +.tile-small .icon { + max-width: 50%; + font-size: 35px; + line-height: 35px; +} +.tile-large .icon { + font-size: 102px; + line-height: 102px; +} +.tile-app .icon { + max-width: 75%; + height: 75%; +} +.tile-small.transform-right, +.tile-medium.transform-right, +.tile-wide.transform-right, +.tile-large.transform-right, +.tile-app.transform-right { + transform-origin: left 50%; + transform: perspective(500px) rotateY(0.138372rad) !important; +} +.tile-small.transform-right.tile-small, +.tile-medium.transform-right.tile-small, +.tile-wide.transform-right.tile-small, +.tile-large.transform-right.tile-small, +.tile-app.transform-right.tile-small { + transform: perspective(500px) rotateY(0.276744rad) !important; +} +.tile-small.transform-right.tile-wide, +.tile-medium.transform-right.tile-wide, +.tile-wide.transform-right.tile-wide, +.tile-large.transform-right.tile-wide, +.tile-app.transform-right.tile-wide { + transform: perspective(500px) rotateY(0.138372rad / 2) !important; +} +.tile-small.transform-right.tile-large, +.tile-medium.transform-right.tile-large, +.tile-wide.transform-right.tile-large, +.tile-large.transform-right.tile-large, +.tile-app.transform-right.tile-large { + transform: perspective(500px) rotateY(0.138372rad / 3) !important; +} +.tile-small.transform-left, +.tile-medium.transform-left, +.tile-wide.transform-left, +.tile-large.transform-left, +.tile-app.transform-left { + transform-origin: right 50%; + transform: perspective(500px) rotateY(-0.138372rad) !important; +} +.tile-small.transform-left.tile-small, +.tile-medium.transform-left.tile-small, +.tile-wide.transform-left.tile-small, +.tile-large.transform-left.tile-small, +.tile-app.transform-left.tile-small { + transform: perspective(500px) rotateY(-0.276744rad) !important; +} +.tile-small.transform-left.tile-wide, +.tile-medium.transform-left.tile-wide, +.tile-wide.transform-left.tile-wide, +.tile-large.transform-left.tile-wide, +.tile-app.transform-left.tile-wide { + transform: perspective(500px) rotateY(-0.138372rad / 2) !important; +} +.tile-small.transform-left.tile-large, +.tile-medium.transform-left.tile-large, +.tile-wide.transform-left.tile-large, +.tile-large.transform-left.tile-large, +.tile-app.transform-left.tile-large { + transform: perspective(500px) rotateY(-0.138372rad / 3) !important; +} +.tile-small.transform-top, +.tile-medium.transform-top, +.tile-wide.transform-top, +.tile-large.transform-top, +.tile-app.transform-top { + transform-origin: 50% bottom; + transform: perspective(500px) rotateX(0.138372rad) !important; +} +.tile-small.transform-top.tile-small, +.tile-medium.transform-top.tile-small, +.tile-wide.transform-top.tile-small, +.tile-large.transform-top.tile-small, +.tile-app.transform-top.tile-small { + transform: perspective(500px) rotateX(0.276744rad) !important; +} +.tile-small.transform-top.tile-wide, +.tile-medium.transform-top.tile-wide, +.tile-wide.transform-top.tile-wide, +.tile-large.transform-top.tile-wide, +.tile-app.transform-top.tile-wide { + transform: perspective(500px) rotateX(0.138372rad / 2) !important; +} +.tile-small.transform-top.tile-large, +.tile-medium.transform-top.tile-large, +.tile-wide.transform-top.tile-large, +.tile-large.transform-top.tile-large, +.tile-app.transform-top.tile-large { + transform: perspective(500px) rotateX(0.138372rad / 3) !important; +} +.tile-small.transform-bottom, +.tile-medium.transform-bottom, +.tile-wide.transform-bottom, +.tile-large.transform-bottom, +.tile-app.transform-bottom { + transform-origin: 50% top; + transform: perspective(500px) rotateX(-0.138372rad) !important; +} +.tile-small.transform-bottom.tile-small, +.tile-medium.transform-bottom.tile-small, +.tile-wide.transform-bottom.tile-small, +.tile-large.transform-bottom.tile-small, +.tile-app.transform-bottom.tile-small { + transform: perspective(500px) rotateX(-0.276744rad) !important; +} +.tile-small.transform-bottom.tile-wide, +.tile-medium.transform-bottom.tile-wide, +.tile-wide.transform-bottom.tile-wide, +.tile-large.transform-bottom.tile-wide, +.tile-app.transform-bottom.tile-wide { + transform: perspective(500px) rotateX(-0.138372rad / 2) !important; +} +.tile-small.transform-bottom.tile-large, +.tile-medium.transform-bottom.tile-large, +.tile-wide.transform-bottom.tile-large, +.tile-large.transform-bottom.tile-large, +.tile-app.transform-bottom.tile-large { + transform: perspective(500px) rotateX(-0.138372rad / 3) !important; +} +.tiles-grid { + position: relative; + display: grid; + grid-template-columns: repeat(auto-fit, 24%); + /*grid-template-rows: repeat(auto-fit, (@tileBaseSize - 1%));*/ + grid-gap: 10px; + /*.tile-small::before, + .tile-medium::before, + .tile-large::before { + content: ''; + padding-bottom: 100%; + display: block; + } + + .tile-wide::before { + content: ''; + padding-bottom: 50%; + display: block; + }*/ +} +.tiles-grid .tile-small { + height: 100%; + width: 100%; + grid-column: span 1; + grid-row: span 1; +} +.tiles-grid .tile-medium { + height: 100%; + width: 100%; + grid-column: span 2; + grid-row: span 2; +} +.tiles-grid .tile-wide { + height: 100%; + width: 100%; + grid-column: span 4; + grid-row: span 2; +} +.tiles-grid .tile-large { + height: 100%; + width: 100%; + grid-column: span 4; + grid-row: span 4; +} +.tiles-grid .tile-small.col-1 { + grid-column: 1 / span 1; +} +.tiles-grid .tile-medium.col-1 { + grid-column: 1 / span 2; +} +.tiles-grid .tile-wide.col-1 { + grid-column: 1 / span 4; +} +.tiles-grid .tile-large.col-1 { + grid-column: 1 / span 4; +} +.tiles-grid .tile-small.row-1 { + grid-row: 1 / span 1; +} +.tiles-grid .tile-medium.row-1 { + grid-row: 1 / span 2; +} +.tiles-grid .tile-wide.row-1 { + grid-row: 1 / span 4; +} +.tiles-grid .tile-large.row-1 { + grid-row: 1 / span 4; +} +.tiles-grid .tile-small.col-2 { + grid-column: 2 / span 1; +} +.tiles-grid .tile-medium.col-2 { + grid-column: 2 / span 2; +} +.tiles-grid .tile-wide.col-2 { + grid-column: 2 / span 4; +} +.tiles-grid .tile-large.col-2 { + grid-column: 2 / span 4; +} +.tiles-grid .tile-small.row-2 { + grid-row: 2 / span 1; +} +.tiles-grid .tile-medium.row-2 { + grid-row: 2 / span 2; +} +.tiles-grid .tile-wide.row-2 { + grid-row: 2 / span 4; +} +.tiles-grid .tile-large.row-2 { + grid-row: 2 / span 4; +} +.tiles-grid .tile-small.col-3 { + grid-column: 3 / span 1; +} +.tiles-grid .tile-medium.col-3 { + grid-column: 3 / span 2; +} +.tiles-grid .tile-wide.col-3 { + grid-column: 3 / span 4; +} +.tiles-grid .tile-large.col-3 { + grid-column: 3 / span 4; +} +.tiles-grid .tile-small.row-3 { + grid-row: 3 / span 1; +} +.tiles-grid .tile-medium.row-3 { + grid-row: 3 / span 2; +} +.tiles-grid .tile-wide.row-3 { + grid-row: 3 / span 4; +} +.tiles-grid .tile-large.row-3 { + grid-row: 3 / span 4; +} +.tiles-grid .tile-small.col-4 { + grid-column: 4 / span 1; +} +.tiles-grid .tile-medium.col-4 { + grid-column: 4 / span 2; +} +.tiles-grid .tile-wide.col-4 { + grid-column: 4 / span 4; +} +.tiles-grid .tile-large.col-4 { + grid-column: 4 / span 4; +} +.tiles-grid .tile-small.row-4 { + grid-row: 4 / span 1; +} +.tiles-grid .tile-medium.row-4 { + grid-row: 4 / span 2; +} +.tiles-grid .tile-wide.row-4 { + grid-row: 4 / span 4; +} +.tiles-grid .tile-large.row-4 { + grid-row: 4 / span 4; +} +.tiles-grid .tile-small.col-5 { + grid-column: 5 / span 1; +} +.tiles-grid .tile-medium.col-5 { + grid-column: 5 / span 2; +} +.tiles-grid .tile-wide.col-5 { + grid-column: 5 / span 4; +} +.tiles-grid .tile-large.col-5 { + grid-column: 5 / span 4; +} +.tiles-grid .tile-small.row-5 { + grid-row: 5 / span 1; +} +.tiles-grid .tile-medium.row-5 { + grid-row: 5 / span 2; +} +.tiles-grid .tile-wide.row-5 { + grid-row: 5 / span 4; +} +.tiles-grid .tile-large.row-5 { + grid-row: 5 / span 4; +} +.tiles-grid .tile-small.col-6 { + grid-column: 6 / span 1; +} +.tiles-grid .tile-medium.col-6 { + grid-column: 6 / span 2; +} +.tiles-grid .tile-wide.col-6 { + grid-column: 6 / span 4; +} +.tiles-grid .tile-large.col-6 { + grid-column: 6 / span 4; +} +.tiles-grid .tile-small.row-6 { + grid-row: 6 / span 1; +} +.tiles-grid .tile-medium.row-6 { + grid-row: 6 / span 2; +} +.tiles-grid .tile-wide.row-6 { + grid-row: 6 / span 4; +} +.tiles-grid .tile-large.row-6 { + grid-row: 6 / span 4; +} +.tiles-grid .tile-small.col-7 { + grid-column: 7 / span 1; +} +.tiles-grid .tile-medium.col-7 { + grid-column: 7 / span 2; +} +.tiles-grid .tile-wide.col-7 { + grid-column: 7 / span 4; +} +.tiles-grid .tile-large.col-7 { + grid-column: 7 / span 4; +} +.tiles-grid .tile-small.row-7 { + grid-row: 7 / span 1; +} +.tiles-grid .tile-medium.row-7 { + grid-row: 7 / span 2; +} +.tiles-grid .tile-wide.row-7 { + grid-row: 7 / span 4; +} +.tiles-grid .tile-large.row-7 { + grid-row: 7 / span 4; +} +.tiles-grid .tile-small.col-8 { + grid-column: 8 / span 1; +} +.tiles-grid .tile-medium.col-8 { + grid-column: 8 / span 2; +} +.tiles-grid .tile-wide.col-8 { + grid-column: 8 / span 4; +} +.tiles-grid .tile-large.col-8 { + grid-column: 8 / span 4; +} +.tiles-grid .tile-small.row-8 { + grid-row: 8 / span 1; +} +.tiles-grid .tile-medium.row-8 { + grid-row: 8 / span 2; +} +.tiles-grid .tile-wide.row-8 { + grid-row: 8 / span 4; +} +.tiles-grid .tile-large.row-8 { + grid-row: 8 / span 4; +} +.tiles-grid .tile-small.col-9 { + grid-column: 9 / span 1; +} +.tiles-grid .tile-medium.col-9 { + grid-column: 9 / span 2; +} +.tiles-grid .tile-wide.col-9 { + grid-column: 9 / span 4; +} +.tiles-grid .tile-large.col-9 { + grid-column: 9 / span 4; +} +.tiles-grid .tile-small.row-9 { + grid-row: 9 / span 1; +} +.tiles-grid .tile-medium.row-9 { + grid-row: 9 / span 2; +} +.tiles-grid .tile-wide.row-9 { + grid-row: 9 / span 4; +} +.tiles-grid .tile-large.row-9 { + grid-row: 9 / span 4; +} +.tiles-grid .tile-small.col-10 { + grid-column: 10 / span 1; +} +.tiles-grid .tile-medium.col-10 { + grid-column: 10 / span 2; +} +.tiles-grid .tile-wide.col-10 { + grid-column: 10 / span 4; +} +.tiles-grid .tile-large.col-10 { + grid-column: 10 / span 4; +} +.tiles-grid .tile-small.row-10 { + grid-row: 10 / span 1; +} +.tiles-grid .tile-medium.row-10 { + grid-row: 10 / span 2; +} +.tiles-grid .tile-wide.row-10 { + grid-row: 10 / span 4; +} +.tiles-grid .tile-large.row-10 { + grid-row: 10 / span 4; +} +.tiles-grid .tile-small.col-11 { + grid-column: 11 / span 1; +} +.tiles-grid .tile-medium.col-11 { + grid-column: 11 / span 2; +} +.tiles-grid .tile-wide.col-11 { + grid-column: 11 / span 4; +} +.tiles-grid .tile-large.col-11 { + grid-column: 11 / span 4; +} +.tiles-grid .tile-small.row-11 { + grid-row: 11 / span 1; +} +.tiles-grid .tile-medium.row-11 { + grid-row: 11 / span 2; +} +.tiles-grid .tile-wide.row-11 { + grid-row: 11 / span 4; +} +.tiles-grid .tile-large.row-11 { + grid-row: 11 / span 4; +} +.tiles-grid .tile-small.col-12 { + grid-column: 12 / span 1; +} +.tiles-grid .tile-medium.col-12 { + grid-column: 12 / span 2; +} +.tiles-grid .tile-wide.col-12 { + grid-column: 12 / span 4; +} +.tiles-grid .tile-large.col-12 { + grid-column: 12 / span 4; +} +.tiles-grid .tile-small.row-12 { + grid-row: 12 / span 1; +} +.tiles-grid .tile-medium.row-12 { + grid-row: 12 / span 2; +} +.tiles-grid .tile-wide.row-12 { + grid-row: 12 / span 4; +} +.tiles-grid .tile-large.row-12 { + grid-row: 12 / span 4; +} +.tiles-grid.size-half { + width: 50%; +} +.tiles-grid.size-1 { + width: 8.33333333%; +} +.tiles-grid.size-2 { + width: 16.66666667%; +} +.tiles-grid.size-3 { + width: 25%; +} +.tiles-grid.size-4 { + width: 33.33333333%; +} +.tiles-grid.size-5 { + width: 41.66666667%; +} +.tiles-grid.size-6 { + width: 50%; +} +.tiles-grid.size-7 { + width: 58.33333333%; +} +.tiles-grid.size-8 { + width: 66.66666667%; +} +.tiles-grid.size-9 { + width: 75%; +} +.tiles-grid.size-10 { + width: 83.33333333%; +} +.tiles-grid.size-11 { + width: 91.66666667%; +} +.tiles-grid.size-12 { + width: 100%; +} +@media screen and (min-width: 0) { + .tiles-grid .col-fs-1 { + grid-column: 1; + } + .tiles-grid .row-fs-1 { + grid-row: 1; + } + .tiles-grid .col-fs-2 { + grid-column: 2; + } + .tiles-grid .row-fs-2 { + grid-row: 2; + } + .tiles-grid .col-fs-3 { + grid-column: 3; + } + .tiles-grid .row-fs-3 { + grid-row: 3; + } + .tiles-grid .col-fs-4 { + grid-column: 4; + } + .tiles-grid .row-fs-4 { + grid-row: 4; + } + .tiles-grid .col-fs-5 { + grid-column: 5; + } + .tiles-grid .row-fs-5 { + grid-row: 5; + } + .tiles-grid .col-fs-6 { + grid-column: 6; + } + .tiles-grid .row-fs-6 { + grid-row: 6; + } + .tiles-grid .col-fs-7 { + grid-column: 7; + } + .tiles-grid .row-fs-7 { + grid-row: 7; + } + .tiles-grid .col-fs-8 { + grid-column: 8; + } + .tiles-grid .row-fs-8 { + grid-row: 8; + } + .tiles-grid .col-fs-9 { + grid-column: 9; + } + .tiles-grid .row-fs-9 { + grid-row: 9; + } + .tiles-grid .col-fs-10 { + grid-column: 10; + } + .tiles-grid .row-fs-10 { + grid-row: 10; + } + .tiles-grid .col-fs-11 { + grid-column: 11; + } + .tiles-grid .row-fs-11 { + grid-row: 11; + } + .tiles-grid .col-fs-12 { + grid-column: 12; + } + .tiles-grid .row-fs-12 { + grid-row: 12; + } + .tiles-grid.size-fs-1 { + width: 8.33333333%; + } + .tiles-grid.size-fs-2 { + width: 16.66666667%; + } + .tiles-grid.size-fs-3 { + width: 25%; + } + .tiles-grid.size-fs-4 { + width: 33.33333333%; + } + .tiles-grid.size-fs-5 { + width: 41.66666667%; + } + .tiles-grid.size-fs-6 { + width: 50%; + } + .tiles-grid.size-fs-7 { + width: 58.33333333%; + } + .tiles-grid.size-fs-8 { + width: 66.66666667%; + } + .tiles-grid.size-fs-9 { + width: 75%; + } + .tiles-grid.size-fs-10 { + width: 83.33333333%; + } + .tiles-grid.size-fs-11 { + width: 91.66666667%; + } + .tiles-grid.size-fs-12 { + width: 100%; + } +} +@media screen and (min-width: 576px) { + .tiles-grid .col-sm-1 { + grid-column: 1; + } + .tiles-grid .row-sm-1 { + grid-row: 1; + } + .tiles-grid .col-sm-2 { + grid-column: 2; + } + .tiles-grid .row-sm-2 { + grid-row: 2; + } + .tiles-grid .col-sm-3 { + grid-column: 3; + } + .tiles-grid .row-sm-3 { + grid-row: 3; + } + .tiles-grid .col-sm-4 { + grid-column: 4; + } + .tiles-grid .row-sm-4 { + grid-row: 4; + } + .tiles-grid .col-sm-5 { + grid-column: 5; + } + .tiles-grid .row-sm-5 { + grid-row: 5; + } + .tiles-grid .col-sm-6 { + grid-column: 6; + } + .tiles-grid .row-sm-6 { + grid-row: 6; + } + .tiles-grid .col-sm-7 { + grid-column: 7; + } + .tiles-grid .row-sm-7 { + grid-row: 7; + } + .tiles-grid .col-sm-8 { + grid-column: 8; + } + .tiles-grid .row-sm-8 { + grid-row: 8; + } + .tiles-grid .col-sm-9 { + grid-column: 9; + } + .tiles-grid .row-sm-9 { + grid-row: 9; + } + .tiles-grid .col-sm-10 { + grid-column: 10; + } + .tiles-grid .row-sm-10 { + grid-row: 10; + } + .tiles-grid .col-sm-11 { + grid-column: 11; + } + .tiles-grid .row-sm-11 { + grid-row: 11; + } + .tiles-grid .col-sm-12 { + grid-column: 12; + } + .tiles-grid .row-sm-12 { + grid-row: 12; + } + .tiles-grid.size-sm-1 { + width: 8.33333333%; + } + .tiles-grid.size-sm-2 { + width: 16.66666667%; + } + .tiles-grid.size-sm-3 { + width: 25%; + } + .tiles-grid.size-sm-4 { + width: 33.33333333%; + } + .tiles-grid.size-sm-5 { + width: 41.66666667%; + } + .tiles-grid.size-sm-6 { + width: 50%; + } + .tiles-grid.size-sm-7 { + width: 58.33333333%; + } + .tiles-grid.size-sm-8 { + width: 66.66666667%; + } + .tiles-grid.size-sm-9 { + width: 75%; + } + .tiles-grid.size-sm-10 { + width: 83.33333333%; + } + .tiles-grid.size-sm-11 { + width: 91.66666667%; + } + .tiles-grid.size-sm-12 { + width: 100%; + } +} +@media screen and (min-width: 768px) { + .tiles-grid .col-md-1 { + grid-column: 1; + } + .tiles-grid .row-md-1 { + grid-row: 1; + } + .tiles-grid .col-md-2 { + grid-column: 2; + } + .tiles-grid .row-md-2 { + grid-row: 2; + } + .tiles-grid .col-md-3 { + grid-column: 3; + } + .tiles-grid .row-md-3 { + grid-row: 3; + } + .tiles-grid .col-md-4 { + grid-column: 4; + } + .tiles-grid .row-md-4 { + grid-row: 4; + } + .tiles-grid .col-md-5 { + grid-column: 5; + } + .tiles-grid .row-md-5 { + grid-row: 5; + } + .tiles-grid .col-md-6 { + grid-column: 6; + } + .tiles-grid .row-md-6 { + grid-row: 6; + } + .tiles-grid .col-md-7 { + grid-column: 7; + } + .tiles-grid .row-md-7 { + grid-row: 7; + } + .tiles-grid .col-md-8 { + grid-column: 8; + } + .tiles-grid .row-md-8 { + grid-row: 8; + } + .tiles-grid .col-md-9 { + grid-column: 9; + } + .tiles-grid .row-md-9 { + grid-row: 9; + } + .tiles-grid .col-md-10 { + grid-column: 10; + } + .tiles-grid .row-md-10 { + grid-row: 10; + } + .tiles-grid .col-md-11 { + grid-column: 11; + } + .tiles-grid .row-md-11 { + grid-row: 11; + } + .tiles-grid .col-md-12 { + grid-column: 12; + } + .tiles-grid .row-md-12 { + grid-row: 12; + } + .tiles-grid.size-md-1 { + width: 8.33333333%; + } + .tiles-grid.size-md-2 { + width: 16.66666667%; + } + .tiles-grid.size-md-3 { + width: 25%; + } + .tiles-grid.size-md-4 { + width: 33.33333333%; + } + .tiles-grid.size-md-5 { + width: 41.66666667%; + } + .tiles-grid.size-md-6 { + width: 50%; + } + .tiles-grid.size-md-7 { + width: 58.33333333%; + } + .tiles-grid.size-md-8 { + width: 66.66666667%; + } + .tiles-grid.size-md-9 { + width: 75%; + } + .tiles-grid.size-md-10 { + width: 83.33333333%; + } + .tiles-grid.size-md-11 { + width: 91.66666667%; + } + .tiles-grid.size-md-12 { + width: 100%; + } +} +@media screen and (min-width: 992px) { + .tiles-grid .col-lg-1 { + grid-column: 1; + } + .tiles-grid .row-lg-1 { + grid-row: 1; + } + .tiles-grid .col-lg-2 { + grid-column: 2; + } + .tiles-grid .row-lg-2 { + grid-row: 2; + } + .tiles-grid .col-lg-3 { + grid-column: 3; + } + .tiles-grid .row-lg-3 { + grid-row: 3; + } + .tiles-grid .col-lg-4 { + grid-column: 4; + } + .tiles-grid .row-lg-4 { + grid-row: 4; + } + .tiles-grid .col-lg-5 { + grid-column: 5; + } + .tiles-grid .row-lg-5 { + grid-row: 5; + } + .tiles-grid .col-lg-6 { + grid-column: 6; + } + .tiles-grid .row-lg-6 { + grid-row: 6; + } + .tiles-grid .col-lg-7 { + grid-column: 7; + } + .tiles-grid .row-lg-7 { + grid-row: 7; + } + .tiles-grid .col-lg-8 { + grid-column: 8; + } + .tiles-grid .row-lg-8 { + grid-row: 8; + } + .tiles-grid .col-lg-9 { + grid-column: 9; + } + .tiles-grid .row-lg-9 { + grid-row: 9; + } + .tiles-grid .col-lg-10 { + grid-column: 10; + } + .tiles-grid .row-lg-10 { + grid-row: 10; + } + .tiles-grid .col-lg-11 { + grid-column: 11; + } + .tiles-grid .row-lg-11 { + grid-row: 11; + } + .tiles-grid .col-lg-12 { + grid-column: 12; + } + .tiles-grid .row-lg-12 { + grid-row: 12; + } + .tiles-grid.size-lg-1 { + width: 8.33333333%; + } + .tiles-grid.size-lg-2 { + width: 16.66666667%; + } + .tiles-grid.size-lg-3 { + width: 25%; + } + .tiles-grid.size-lg-4 { + width: 33.33333333%; + } + .tiles-grid.size-lg-5 { + width: 41.66666667%; + } + .tiles-grid.size-lg-6 { + width: 50%; + } + .tiles-grid.size-lg-7 { + width: 58.33333333%; + } + .tiles-grid.size-lg-8 { + width: 66.66666667%; + } + .tiles-grid.size-lg-9 { + width: 75%; + } + .tiles-grid.size-lg-10 { + width: 83.33333333%; + } + .tiles-grid.size-lg-11 { + width: 91.66666667%; + } + .tiles-grid.size-lg-12 { + width: 100%; + } +} +@media screen and (min-width: 1200px) { + .tiles-grid .col-xl-1 { + grid-column: 1; + } + .tiles-grid .row-xl-1 { + grid-row: 1; + } + .tiles-grid .col-xl-2 { + grid-column: 2; + } + .tiles-grid .row-xl-2 { + grid-row: 2; + } + .tiles-grid .col-xl-3 { + grid-column: 3; + } + .tiles-grid .row-xl-3 { + grid-row: 3; + } + .tiles-grid .col-xl-4 { + grid-column: 4; + } + .tiles-grid .row-xl-4 { + grid-row: 4; + } + .tiles-grid .col-xl-5 { + grid-column: 5; + } + .tiles-grid .row-xl-5 { + grid-row: 5; + } + .tiles-grid .col-xl-6 { + grid-column: 6; + } + .tiles-grid .row-xl-6 { + grid-row: 6; + } + .tiles-grid .col-xl-7 { + grid-column: 7; + } + .tiles-grid .row-xl-7 { + grid-row: 7; + } + .tiles-grid .col-xl-8 { + grid-column: 8; + } + .tiles-grid .row-xl-8 { + grid-row: 8; + } + .tiles-grid .col-xl-9 { + grid-column: 9; + } + .tiles-grid .row-xl-9 { + grid-row: 9; + } + .tiles-grid .col-xl-10 { + grid-column: 10; + } + .tiles-grid .row-xl-10 { + grid-row: 10; + } + .tiles-grid .col-xl-11 { + grid-column: 11; + } + .tiles-grid .row-xl-11 { + grid-row: 11; + } + .tiles-grid .col-xl-12 { + grid-column: 12; + } + .tiles-grid .row-xl-12 { + grid-row: 12; + } + .tiles-grid.size-xl-1 { + width: 8.33333333%; + } + .tiles-grid.size-xl-2 { + width: 16.66666667%; + } + .tiles-grid.size-xl-3 { + width: 25%; + } + .tiles-grid.size-xl-4 { + width: 33.33333333%; + } + .tiles-grid.size-xl-5 { + width: 41.66666667%; + } + .tiles-grid.size-xl-6 { + width: 50%; + } + .tiles-grid.size-xl-7 { + width: 58.33333333%; + } + .tiles-grid.size-xl-8 { + width: 66.66666667%; + } + .tiles-grid.size-xl-9 { + width: 75%; + } + .tiles-grid.size-xl-10 { + width: 83.33333333%; + } + .tiles-grid.size-xl-11 { + width: 91.66666667%; + } + .tiles-grid.size-xl-12 { + width: 100%; + } +} +@media screen and (min-width: 1452px) { + .tiles-grid .col-xxl-1 { + grid-column: 1; + } + .tiles-grid .row-xxl-1 { + grid-row: 1; + } + .tiles-grid .col-xxl-2 { + grid-column: 2; + } + .tiles-grid .row-xxl-2 { + grid-row: 2; + } + .tiles-grid .col-xxl-3 { + grid-column: 3; + } + .tiles-grid .row-xxl-3 { + grid-row: 3; + } + .tiles-grid .col-xxl-4 { + grid-column: 4; + } + .tiles-grid .row-xxl-4 { + grid-row: 4; + } + .tiles-grid .col-xxl-5 { + grid-column: 5; + } + .tiles-grid .row-xxl-5 { + grid-row: 5; + } + .tiles-grid .col-xxl-6 { + grid-column: 6; + } + .tiles-grid .row-xxl-6 { + grid-row: 6; + } + .tiles-grid .col-xxl-7 { + grid-column: 7; + } + .tiles-grid .row-xxl-7 { + grid-row: 7; + } + .tiles-grid .col-xxl-8 { + grid-column: 8; + } + .tiles-grid .row-xxl-8 { + grid-row: 8; + } + .tiles-grid .col-xxl-9 { + grid-column: 9; + } + .tiles-grid .row-xxl-9 { + grid-row: 9; + } + .tiles-grid .col-xxl-10 { + grid-column: 10; + } + .tiles-grid .row-xxl-10 { + grid-row: 10; + } + .tiles-grid .col-xxl-11 { + grid-column: 11; + } + .tiles-grid .row-xxl-11 { + grid-row: 11; + } + .tiles-grid .col-xxl-12 { + grid-column: 12; + } + .tiles-grid .row-xxl-12 { + grid-row: 12; + } + .tiles-grid.size-xxl-1 { + width: 8.33333333%; + } + .tiles-grid.size-xxl-2 { + width: 16.66666667%; + } + .tiles-grid.size-xxl-3 { + width: 25%; + } + .tiles-grid.size-xxl-4 { + width: 33.33333333%; + } + .tiles-grid.size-xxl-5 { + width: 41.66666667%; + } + .tiles-grid.size-xxl-6 { + width: 50%; + } + .tiles-grid.size-xxl-7 { + width: 58.33333333%; + } + .tiles-grid.size-xxl-8 { + width: 66.66666667%; + } + .tiles-grid.size-xxl-9 { + width: 75%; + } + .tiles-grid.size-xxl-10 { + width: 83.33333333%; + } + .tiles-grid.size-xxl-11 { + width: 91.66666667%; + } + .tiles-grid.size-xxl-12 { + width: 100%; + } +} +.tiles-group { + width: 100%; + float: left; + overflow: visible; +} +.tiles-group::before { + content: attr(data-group-title); + display: block; + position: absolute; + left: 0; + top: -36px; + height: 1.5em; + line-height: 1.5em; + z-index: 1; + color: inherit; +} +[class*=tile-].image-set { + background-size: contain; + background-position: center; +} +[class*=tile-].image-set .img { + width: 25%; + height: 50%; + display: block; + float: left; + border: 1px solid #1d1d1d; + background-size: cover; +} +[class*=tile-].image-set .img:nth-child(1) { + width: 50%; + height: 100%; +} +[class*=tile-] .slide { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + display: block; +} +[class*=tile-] [class*=slide-] { + width: 100%; + height: 100%; + position: absolute; + transition: all 0.3s ease-in-out; +} +[class*=tile-] .slide-front { + top: 0; + left: 0; +} +[class*=tile-].effect-hover-slide-up .slide-back, +[class*=tile-].effect-hover-zoom-up .slide-back { + top: 100%; + left: 0; +} +[class*=tile-].effect-hover-slide-up:hover .slide-front, +[class*=tile-].effect-hover-zoom-up:hover .slide-front { + transform: translateY(-100%); +} +[class*=tile-].effect-hover-slide-up:hover .slide-back, +[class*=tile-].effect-hover-zoom-up:hover .slide-back { + top: 0; +} +[class*=tile-].effect-hover-slide-down .slide-back, +[class*=tile-].effect-hover-zoom-down .slide-back { + top: 0; + left: 0; + transform: translateY(-100%); +} +[class*=tile-].effect-hover-slide-down:hover .slide-front, +[class*=tile-].effect-hover-zoom-down:hover .slide-front { + top: 100%; +} +[class*=tile-].effect-hover-slide-down:hover .slide-back, +[class*=tile-].effect-hover-zoom-down:hover .slide-back { + transform: translateY(0); +} +[class*=tile-].effect-hover-slide-left .slide-back, +[class*=tile-].effect-hover-zoom-left .slide-back { + top: 0; + left: 100%; +} +[class*=tile-].effect-hover-slide-left:hover .slide-front, +[class*=tile-].effect-hover-zoom-left:hover .slide-front { + transform: translateX(-100%); +} +[class*=tile-].effect-hover-slide-left:hover .slide-back, +[class*=tile-].effect-hover-zoom-left:hover .slide-back { + left: 0; +} +[class*=tile-].effect-hover-slide-right .slide-back, +[class*=tile-].effect-hover-zoom-right .slide-back { + top: 0; + left: 0; + transform: translateX(-100%); +} +[class*=tile-].effect-hover-slide-right:hover .slide-front, +[class*=tile-].effect-hover-zoom-right:hover .slide-front { + left: 100%; +} +[class*=tile-].effect-hover-slide-right:hover .slide-back, +[class*=tile-].effect-hover-zoom-right:hover .slide-back { + transform: translateX(0); +} +[class*=tile-].effect-hover-zoom-up:hover .slide-front, +[class*=tile-].effect-hover-zoom-down:hover .slide-front, +[class*=tile-].effect-hover-zoom-left:hover .slide-front, +[class*=tile-].effect-hover-zoom-right:hover .slide-front { + left: 0; + top: 0; + transform: scale(2); +} + diff --git a/modules/tile/ext.isekai.tile.js b/modules/tile/ext.isekai.tile.js index d59d415..c301af1 100644 --- a/modules/tile/ext.isekai.tile.js +++ b/modules/tile/ext.isekai.tile.js @@ -1 +1,106 @@ -(()=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(t,i){for(var n=0;n/gi.test(e)},isType:function(t,i){if(!a.isValue(t))return!1;if(e(t)===i)return t;if(a.isTag(t)||a.isUrl(t))return!1;if(e(window[t])===i)return window[t];if("string"==typeof t&&-1===t.indexOf("."))return!1;if("string"==typeof t&&-1!==t.indexOf("/"))return!1;if("string"==typeof t&&-1!==t.indexOf(" "))return!1;if("string"==typeof t&&-1!==t.indexOf("("))return!1;if("string"==typeof t&&-1!==t.indexOf("["))return!1;if("number"==typeof t&&"number"!==i.toLowerCase())return!1;var n,r=t.split("."),f=window;for(n=0;n0&&(this.hasIcon=!0),a.find(".branding-bar")&&(this.hasBranding=!0),r.effect.indexOf("hover-")>-1&&(a.addClass("effect-"+r.effect),t.each(s,(function(){var e=t(this);void 0!==e.data("cover")&&i._setCover(e,e.data("cover"),e.data("cover-position"))}))),r.effect.indexOf("animate-")>-1&&o.length>1&&(t.each(o,(function(e){var n=t(this);i.slides.push(this),void 0!==n.data("cover")&&this._setCover(n,n.data("cover"),n.data("cover-position")),e>0&&(["animate-slide-up","animate-slide-down"].indexOf(r.effect)>-1&&n.css("top","100%"),["animate-slide-left","animate-slide-right"].indexOf(r.effect)>-1&&n.css("left","100%"),["animate-fade"].indexOf(r.effect)>-1&&n.css("opacity",0))})),this.currentSlide=0,this._runEffects()),""!==r.cover&&this._setCover(a,r.cover),"image-set"===r.effect){a.addClass("image-set"),t.each(a.children("img"),(function(){var e=document.createElement("img");e.src=this.src,e.srcset=this.srcset,e.alt=this.alt,i.images.push(e),t(this).remove()}));for(var l=this.images.slice(),c=0;c<5;c++){var d=n(0,l.length-1),u=t("
    ").addClass("img -js-img-"+c).css("background-image","url("+l[d].src+")");a.prepend(u),l.length>1&&l.splice(d,1)}var h=[0,1,4,3,2];setInterval((function(){var t,r=i.images.slice(),o=f.colors(f.PALETTES.ALL);t=o[n(0,o.length-1)],a.css("background-color",t);for(var s=0;s1&&r.splice(l,1)}h=h.reverse()}),5e3)}},this._runEffects=function(){var e=this.options;!1===this.effectInterval&&(this.effectInterval=setInterval((function(){var i,n;i=t(this.slides[this.currentSlide]),this.currentSlide++,this.currentSlide===this.slides.length&&(this.currentSlide=0),n=this.slides[this.currentSlide],"animate-slide-up"===e.effect&&r.slideUp(t(i),t(n),e.effectDuration),"animate-slide-down"===e.effect&&r.slideDown(t(i),t(n),e.effectDuration),"animate-slide-left"===e.effect&&r.slideLeft(t(i),t(n),e.effectDuration),"animate-slide-right"===e.effect&&r.slideRight(t(i),t(n),e.effectDuration),"animate-fade"===e.effect&&r.fade(t(i),t(n),e.effectDuration)}),e.effectInterval))},this._stopEffects=function(){clearInterval(this.effectInterval),this.effectInterval=!1},this.resize=function(){var e=1,t=this.element.parent(".tiles-grid");t.length>0&&t.width(),"wide"==this.options.size&&(e=.5);var i=this.element.width()*e-0;if(this.hasIcon){var n=.33*i,a=this.element.find(".icon");if(a.css("font-size",n+"px"),this.hasBranding){var r=(i+n)/2-(i-this.element.find(".branding-bar").outerHeight())+.1*i;r>0&&a.css("padding-bottom",r+"px")}}},this._setCover=function(e,t,i){a.isValue(i)||(i=this.options.coverPosition),e.css({backgroundImage:"url("+t+")",backgroundSize:"cover",backgroundRepeat:"no-repeat",backgroundPosition:i})},this._createEvents=function(){var e=this.element,i=this.options;e.on("mousedown touchstart",(function(n){var r,f=t(this),o=e.width(),s=e.height(),l=a.pageXY(n).x-f.offset().left,c=a.pageXY(n).y-f.offset().top;!1===a.isRightMouse(n)&&(r=l<1*o/3&&(c<1*s/2||c>1*s/2)?"left":l>2*o/3&&(c<1*s/2||c>1*s/2)?"right":l>1*o/3&&l<2*o/3&&c>s/2?"bottom":"top",!0===i.canTransform&&f.addClass("transform-"+r),null!==i.target&&setTimeout((function(){document.location.href=i.target}),100),a.exec(i.onClick,[r],e[0]),e.trigger("click",{side:r}))})),e.on("mouseup touchend mouseleave",(function(){t(this).removeClass("transform-left").removeClass("transform-right").removeClass("transform-top").removeClass("transform-bottom")})),t(window).on("resize",this._fixSizeCallback),t(this._fixSizeCallback)},this.destroy=function(){var e=this.element;e.off("mousedown touchstart"),e.off("mouseup touchend mouseleave"),t(window).off("resize",this._fixSizeCallback),this._stopEffects()},this.init(e,o)}function s(){t(".tiles-grid").each((function(){var e=t(this),i=e.width()/4-10;e.css({gridTemplateColumns:"repeat(4, "+i+"px)",gridAutoRows:i+"px"})}))}function l(e){e.forEach((function(e){"attributes"==e.type&&"class"==e.attributeName&&(t('*[data-role="tile"]').tile("resize"),s())}))}t.fn.extend({tile:function(e){for(var i=arguments.length,n=new Array(i>1?i-1:0),a=1;a0&&new MutationObserver(l).observe(e[0],{attributes:!0})}))}(jQuery)})(); \ No newline at end of file +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/moduleRegister.js": +/*!*******************************!*\ + !*** ./src/moduleRegister.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"registerModule\": () => (/* binding */ registerModule)\n/* harmony export */ });\nfunction registerModule(namespace, func) {\n var nsList = namespace.split('.');\n if (!('isekai' in window)) {\n window.isekai = {};\n }\n var obj = window.isekai;\n for (var i = 0; i < nsList.length - 1; i++) {\n var ns = nsList[i];\n if (!(ns in obj)) {\n obj[ns] = {};\n }\n obj = obj[ns];\n }\n obj[nsList[i]] = func;\n}\n\n//# sourceURL=webpack://isekai-widgets/./src/moduleRegister.js?"); + +/***/ }), + +/***/ "./src/tile/ext.isekai.tile.js": +/*!*************************************!*\ + !*** ./src/tile/ext.isekai.tile.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _tile_less__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tile.less */ \"./src/tile/tile.less\");\n/* harmony import */ var _moduleRegister__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../moduleRegister */ \"./src/moduleRegister.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* global Colors */\n\n\nvar TileDefaultConfig = {\n tileDeferred: 0,\n size: \"medium\",\n cover: \"\",\n coverPosition: \"center\",\n effect: \"\",\n effectInterval: 3000,\n effectDuration: 500,\n target: null,\n canTransform: true,\n onClick: function onClick() {},\n onTileCreate: function onTileCreate() {}\n};\nvar METRO_THROWS = true;\nvar GRID_GAP = 10;\nvar IsekaiTile = /*#__PURE__*/function () {\n function IsekaiTile() {\n _classCallCheck(this, IsekaiTile);\n }\n _createClass(IsekaiTile, null, [{\n key: \"setup\",\n value: function setup(options) {\n TileDefaultConfig = jQuery.extend({}, TileDefaultConfig, options);\n }\n }, {\n key: \"init\",\n value: function init() {}\n }]);\n return IsekaiTile;\n}();\n(0,_moduleRegister__WEBPACK_IMPORTED_MODULE_1__.registerModule)('ui.tile', IsekaiTile);\n(function ($) {\n function rand(min, max) {\n // min and max included \n return Math.floor(Math.random() * (max - min + 1) + min);\n }\n var Utils = {\n isValue: function isValue(val) {\n return val !== undefined && val !== null && val !== \"\";\n },\n isUrl: function isUrl(val) {\n /* eslint-disable-next-line */\n return /^(\\.\\/|\\.\\.\\/|ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@\\-\\/]))?/.test(val);\n },\n isTag: function isTag(val) {\n /* eslint-disable-next-line */\n return /^<\\/?[\\w\\s=\"/.':;#-\\/\\?]+>/gi.test(val);\n },\n isType: function isType(o, t) {\n if (!Utils.isValue(o)) {\n return false;\n }\n if (_typeof(o) === t) {\n return o;\n }\n if (Utils.isTag(o) || Utils.isUrl(o)) {\n return false;\n }\n if (_typeof(window[o]) === t) {\n return window[o];\n }\n if (typeof o === 'string' && o.indexOf(\".\") === -1) {\n return false;\n }\n if (typeof o === 'string' && o.indexOf(\"/\") !== -1) {\n return false;\n }\n if (typeof o === 'string' && o.indexOf(\" \") !== -1) {\n return false;\n }\n if (typeof o === 'string' && o.indexOf(\"(\") !== -1) {\n return false;\n }\n if (typeof o === 'string' && o.indexOf(\"[\") !== -1) {\n return false;\n }\n if (typeof o === \"number\" && t.toLowerCase() !== \"number\") {\n return false;\n }\n var ns = o.split(\".\");\n var i,\n context = window;\n for (i = 0; i < ns.length; i++) {\n context = context[ns[i]];\n }\n return _typeof(context) === t ? context : false;\n },\n isFunc: function isFunc(f) {\n return Utils.isType(f, 'function');\n },\n /**\r\n *\r\n * @param {TouchEvent|Event|MouseEvent} e\r\n * @returns {{x: (*), y: (*)}}\r\n */\n pageXY: function pageXY(e) {\n return {\n x: e.changedTouches ? e.changedTouches[0].pageX : e.pageX,\n y: e.changedTouches ? e.changedTouches[0].pageY : e.pageY\n };\n },\n isRightMouse: function isRightMouse(e) {\n return \"which\" in e ? e.which === 3 : \"button\" in e ? e.button === 2 : undefined;\n },\n func: function func(f) {\n /* jshint -W054 */\n return new Function(\"a\", f);\n },\n exec: function exec(f, args, context) {\n var result;\n if (f === undefined || f === null) {\n return false;\n }\n var func = Utils.isFunc(f);\n if (func === false) {\n func = Utils.func(f);\n }\n try {\n result = func.apply(context, args);\n } catch (err) {\n result = null;\n if (METRO_THROWS === true) {\n throw err;\n }\n }\n return result;\n }\n };\n var FrameAnimation = {\n duration: 100,\n func: \"linear\",\n \"switch\": function _switch(current, next) {\n current.hide();\n next.css({\n top: 0,\n left: 0\n }).show();\n },\n slideUp: function slideUp(current, next, duration, func) {\n var h = current.parent().outerHeight(true);\n if (duration === undefined) {\n duration = this.duration;\n }\n if (func === undefined) {\n func = this.func;\n }\n current.css(\"z-index\", 1).animate({\n draw: {\n top: -h,\n opacity: 0\n },\n dur: duration,\n ease: func\n });\n next.css({\n top: h,\n left: 0,\n zIndex: 2\n }).animate({\n draw: {\n top: 0,\n opacity: 1\n },\n dur: duration,\n ease: func\n });\n },\n slideDown: function slideDown(current, next, duration, func) {\n var h = current.parent().outerHeight(true);\n if (duration === undefined) {\n duration = this.duration;\n }\n if (func === undefined) {\n func = this.func;\n }\n current.css(\"z-index\", 1).animate({\n draw: {\n top: h,\n opacity: 0\n },\n dur: duration,\n ease: func\n });\n next.css({\n left: 0,\n top: -h,\n zIndex: 2\n }).animate({\n draw: {\n top: 0,\n opacity: 1\n },\n dur: duration,\n ease: func\n });\n },\n slideLeft: function slideLeft(current, next, duration, func) {\n var w = current.parent().outerWidth(true);\n if (duration === undefined) {\n duration = this.duration;\n }\n if (func === undefined) {\n func = this.func;\n }\n current.css(\"z-index\", 1).animate({\n draw: {\n left: -w,\n opacity: 0\n },\n dur: duration,\n ease: func\n });\n next.css({\n left: w,\n zIndex: 2\n }).animate({\n draw: {\n left: 0,\n opacity: 1\n },\n dur: duration,\n ease: func\n });\n },\n slideRight: function slideRight(current, next, duration, func) {\n var w = current.parent().outerWidth(true);\n if (duration === undefined) {\n duration = this.duration;\n }\n if (func === undefined) {\n func = this.func;\n }\n current.css(\"z-index\", 1).animate({\n draw: {\n left: w,\n opacity: 0\n },\n dur: duration,\n ease: func\n });\n next.css({\n left: -w,\n zIndex: 2\n }).animate({\n draw: {\n left: 0,\n opacity: 1\n },\n dur: duration,\n ease: func\n });\n },\n fade: function fade(current, next, duration) {\n if (duration === undefined) {\n duration = this.duration;\n }\n current.animate({\n draw: {\n opacity: 0\n },\n dur: duration\n });\n next.css({\n top: 0,\n left: 0,\n opacity: 0\n }).animate({\n draw: {\n opacity: 1\n },\n dur: duration\n });\n }\n };\n var Colors = {\n PALETTES: {\n ALL: \"colorList\",\n METRO: \"colorListMetro\",\n STANDARD: \"colorListStandard\"\n },\n colorListMetro: {\n lime: '#a4c400',\n green: '#60a917',\n emerald: '#008a00',\n blue: '#00AFF0',\n teal: '#00aba9',\n cyan: '#1ba1e2',\n cobalt: '#0050ef',\n indigo: '#6a00ff',\n violet: '#aa00ff',\n pink: '#dc4fad',\n magenta: '#d80073',\n crimson: '#a20025',\n red: '#CE352C',\n orange: '#fa6800',\n amber: '#f0a30a',\n yellow: '#fff000',\n brown: '#825a2c',\n olive: '#6d8764',\n steel: '#647687',\n mauve: '#76608a',\n taupe: '#87794e'\n },\n colorListStandard: {\n aliceBlue: \"#f0f8ff\",\n antiqueWhite: \"#faebd7\",\n aqua: \"#00ffff\",\n aquamarine: \"#7fffd4\",\n azure: \"#f0ffff\",\n beige: \"#f5f5dc\",\n bisque: \"#ffe4c4\",\n black: \"#000000\",\n blanchedAlmond: \"#ffebcd\",\n blue: \"#0000ff\",\n blueViolet: \"#8a2be2\",\n brown: \"#a52a2a\",\n burlyWood: \"#deb887\",\n cadetBlue: \"#5f9ea0\",\n chartreuse: \"#7fff00\",\n chocolate: \"#d2691e\",\n coral: \"#ff7f50\",\n cornflowerBlue: \"#6495ed\",\n cornsilk: \"#fff8dc\",\n crimson: \"#dc143c\",\n cyan: \"#00ffff\",\n darkBlue: \"#00008b\",\n darkCyan: \"#008b8b\",\n darkGoldenRod: \"#b8860b\",\n darkGray: \"#a9a9a9\",\n darkGreen: \"#006400\",\n darkKhaki: \"#bdb76b\",\n darkMagenta: \"#8b008b\",\n darkOliveGreen: \"#556b2f\",\n darkOrange: \"#ff8c00\",\n darkOrchid: \"#9932cc\",\n darkRed: \"#8b0000\",\n darkSalmon: \"#e9967a\",\n darkSeaGreen: \"#8fbc8f\",\n darkSlateBlue: \"#483d8b\",\n darkSlateGray: \"#2f4f4f\",\n darkTurquoise: \"#00ced1\",\n darkViolet: \"#9400d3\",\n deepPink: \"#ff1493\",\n deepSkyBlue: \"#00bfff\",\n dimGray: \"#696969\",\n dodgerBlue: \"#1e90ff\",\n fireBrick: \"#b22222\",\n floralWhite: \"#fffaf0\",\n forestGreen: \"#228b22\",\n fuchsia: \"#ff00ff\",\n gainsboro: \"#DCDCDC\",\n ghostWhite: \"#F8F8FF\",\n gold: \"#ffd700\",\n goldenRod: \"#daa520\",\n gray: \"#808080\",\n green: \"#008000\",\n greenYellow: \"#adff2f\",\n honeyDew: \"#f0fff0\",\n hotPink: \"#ff69b4\",\n indianRed: \"#cd5c5c\",\n indigo: \"#4b0082\",\n ivory: \"#fffff0\",\n khaki: \"#f0e68c\",\n lavender: \"#e6e6fa\",\n lavenderBlush: \"#fff0f5\",\n lawnGreen: \"#7cfc00\",\n lemonChiffon: \"#fffacd\",\n lightBlue: \"#add8e6\",\n lightCoral: \"#f08080\",\n lightCyan: \"#e0ffff\",\n lightGoldenRodYellow: \"#fafad2\",\n lightGray: \"#d3d3d3\",\n lightGreen: \"#90ee90\",\n lightPink: \"#ffb6c1\",\n lightSalmon: \"#ffa07a\",\n lightSeaGreen: \"#20b2aa\",\n lightSkyBlue: \"#87cefa\",\n lightSlateGray: \"#778899\",\n lightSteelBlue: \"#b0c4de\",\n lightYellow: \"#ffffe0\",\n lime: \"#00ff00\",\n limeGreen: \"#32dc32\",\n linen: \"#faf0e6\",\n magenta: \"#ff00ff\",\n maroon: \"#800000\",\n mediumAquaMarine: \"#66cdaa\",\n mediumBlue: \"#0000cd\",\n mediumOrchid: \"#ba55d3\",\n mediumPurple: \"#9370db\",\n mediumSeaGreen: \"#3cb371\",\n mediumSlateBlue: \"#7b68ee\",\n mediumSpringGreen: \"#00fa9a\",\n mediumTurquoise: \"#48d1cc\",\n mediumVioletRed: \"#c71585\",\n midnightBlue: \"#191970\",\n mintCream: \"#f5fffa\",\n mistyRose: \"#ffe4e1\",\n moccasin: \"#ffe4b5\",\n navajoWhite: \"#ffdead\",\n navy: \"#000080\",\n oldLace: \"#fdd5e6\",\n olive: \"#808000\",\n oliveDrab: \"#6b8e23\",\n orange: \"#ffa500\",\n orangeRed: \"#ff4500\",\n orchid: \"#da70d6\",\n paleGoldenRod: \"#eee8aa\",\n paleGreen: \"#98fb98\",\n paleTurquoise: \"#afeeee\",\n paleVioletRed: \"#db7093\",\n papayaWhip: \"#ffefd5\",\n peachPuff: \"#ffdab9\",\n peru: \"#cd853f\",\n pink: \"#ffc0cb\",\n plum: \"#dda0dd\",\n powderBlue: \"#b0e0e6\",\n purple: \"#800080\",\n rebeccaPurple: \"#663399\",\n red: \"#ff0000\",\n rosyBrown: \"#bc8f8f\",\n royalBlue: \"#4169e1\",\n saddleBrown: \"#8b4513\",\n salmon: \"#fa8072\",\n sandyBrown: \"#f4a460\",\n seaGreen: \"#2e8b57\",\n seaShell: \"#fff5ee\",\n sienna: \"#a0522d\",\n silver: \"#c0c0c0\",\n slyBlue: \"#87ceeb\",\n slateBlue: \"#6a5acd\",\n slateGray: \"#708090\",\n snow: \"#fffafa\",\n springGreen: \"#00ff7f\",\n steelBlue: \"#4682b4\",\n tan: \"#d2b48c\",\n teal: \"#008080\",\n thistle: \"#d8bfd8\",\n tomato: \"#ff6347\",\n turquoise: \"#40e0d0\",\n violet: \"#ee82ee\",\n wheat: \"#f5deb3\",\n white: \"#ffffff\",\n whiteSmoke: \"#f5f5f5\",\n yellow: \"#ffff00\",\n yellowGreen: \"#9acd32\"\n },\n colorList: {},\n colors: function colors(palette) {\n var c = [];\n palette = palette || this.PALETTES.ALL;\n $.each(this[palette], function () {\n c.push(this);\n });\n return c;\n }\n };\n function Tile(options, element) {\n this.init = function (options, element) {\n this.effectInterval = false;\n this.images = [];\n this.slides = [];\n this.currentSlide = -1;\n this.options = $.extend({}, TileDefaultConfig, options);\n this.element = element;\n this.hasIcon = false;\n this.hasBranding = false;\n this._fixSizeCallback = this.resize.bind(this);\n this._create();\n };\n this._create = function () {\n this._createTile();\n this._createEvents();\n this.element.trigger(\"tilecreate\");\n };\n this._createTile = function () {\n function switchImage(el, img_src, i) {\n setTimeout(function () {\n el.fadeOut(500, function () {\n el.css(\"background-image\", \"url(\" + img_src + \")\");\n el.fadeIn();\n });\n }, i * 300);\n }\n var that = this,\n element = this.element,\n o = this.options;\n var slides = element.find(\".slide\");\n var slides2 = element.find(\".slide-front, .slide-back\");\n element.addClass(\"tile-\" + o.size);\n if (element.find('.icon').length > 0) {\n this.hasIcon = true;\n }\n if (element.find('.branding-bar')) {\n this.hasBranding = true;\n }\n if (o.effect.indexOf(\"hover-\") > -1) {\n element.addClass(\"effect-\" + o.effect);\n $.each(slides2, function () {\n var slide = $(this);\n if (slide.data(\"cover\") !== undefined) {\n that._setCover(slide, slide.data(\"cover\"), slide.data(\"cover-position\"));\n }\n });\n }\n if (o.effect.indexOf(\"animate-\") > -1 && slides.length > 1) {\n $.each(slides, function (i) {\n var slide = $(this);\n that.slides.push(this);\n if (slide.data(\"cover\") !== undefined) {\n this._setCover(slide, slide.data(\"cover\"), slide.data(\"cover-position\"));\n }\n if (i > 0) {\n if ([\"animate-slide-up\", \"animate-slide-down\"].indexOf(o.effect) > -1) slide.css(\"top\", \"100%\");\n if ([\"animate-slide-left\", \"animate-slide-right\"].indexOf(o.effect) > -1) slide.css(\"left\", \"100%\");\n if ([\"animate-fade\"].indexOf(o.effect) > -1) slide.css(\"opacity\", 0);\n }\n });\n this.currentSlide = 0;\n this._runEffects();\n }\n if (o.cover !== \"\") {\n this._setCover(element, o.cover);\n }\n if (o.effect === \"image-set\") {\n element.addClass(\"image-set\");\n $.each(element.children(\"img\"), function () {\n var imgElem = document.createElement('img');\n imgElem.src = this.src;\n imgElem.srcset = this.srcset;\n imgElem.alt = this.alt;\n that.images.push(imgElem);\n $(this).remove();\n });\n var temp = this.images.slice();\n for (var i = 0; i < 5; i++) {\n var rnd_index = rand(0, temp.length - 1);\n var div = $(\"
    \").addClass(\"img -js-img-\" + i).css(\"background-image\", \"url(\" + temp[rnd_index].src + \")\");\n element.prepend(div);\n if (temp.length > 1) {\n temp.splice(rnd_index, 1);\n }\n }\n var a = [0, 1, 4, 3, 2];\n setInterval(function () {\n var temp = that.images.slice();\n var colors = Colors.colors(Colors.PALETTES.ALL),\n bg;\n bg = colors[rand(0, colors.length - 1)];\n element.css(\"background-color\", bg);\n for (var i = 0; i < a.length; i++) {\n var rnd_index = rand(0, temp.length - 1);\n var div = element.find(\".-js-img-\" + a[i]);\n switchImage(div, temp[rnd_index].src, i);\n if (temp.length > 1) {\n temp.splice(rnd_index, 1);\n }\n }\n a = a.reverse();\n }, 5000);\n }\n };\n this._runEffects = function () {\n var o = this.options;\n if (this.effectInterval === false) this.effectInterval = setInterval(function () {\n var current, next;\n current = $(this.slides[this.currentSlide]);\n this.currentSlide++;\n if (this.currentSlide === this.slides.length) {\n this.currentSlide = 0;\n }\n next = this.slides[this.currentSlide];\n if (o.effect === \"animate-slide-up\") FrameAnimation.slideUp($(current), $(next), o.effectDuration);\n if (o.effect === \"animate-slide-down\") FrameAnimation.slideDown($(current), $(next), o.effectDuration);\n if (o.effect === \"animate-slide-left\") FrameAnimation.slideLeft($(current), $(next), o.effectDuration);\n if (o.effect === \"animate-slide-right\") FrameAnimation.slideRight($(current), $(next), o.effectDuration);\n if (o.effect === \"animate-fade\") FrameAnimation.fade($(current), $(next), o.effectDuration);\n }, o.effectInterval);\n };\n this._stopEffects = function () {\n clearInterval(this.effectInterval);\n this.effectInterval = false;\n };\n this.resize = function () {\n var ratio = 1;\n var padding = 0;\n var grid = this.element.parent('.tiles-grid');\n var gridWidth = 0;\n if (grid.length > 0) {\n gridWidth = grid.width();\n }\n if (this.options.size == 'wide') {\n ratio = 0.5;\n }\n\n //修正长宽比\n var height = this.element.width() * ratio - padding;\n //this.element.height(height);\n\n if (this.hasIcon) {\n var fontSize = height * 0.33;\n var iconDom = this.element.find('.icon');\n iconDom.css('font-size', fontSize + 'px');\n if (this.hasBranding) {\n //计算与标签的重叠\n var iconBottom = (height + fontSize) / 2;\n var brandingTop = height - this.element.find('.branding-bar').outerHeight();\n var overlap = iconBottom - brandingTop + height * 0.1;\n if (overlap > 0) {\n iconDom.css('padding-bottom', overlap + 'px');\n }\n }\n }\n };\n this._setCover = function (to, src, pos) {\n if (!Utils.isValue(pos)) {\n pos = this.options.coverPosition;\n }\n to.css({\n backgroundImage: \"url(\" + src + \")\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: pos\n });\n };\n this._createEvents = function () {\n var element = this.element,\n o = this.options;\n element.on('mousedown touchstart', function (e) {\n var tile = $(this);\n var dim = {\n w: element.width(),\n h: element.height()\n };\n var X = Utils.pageXY(e).x - tile.offset().left,\n Y = Utils.pageXY(e).y - tile.offset().top;\n var side;\n if (Utils.isRightMouse(e) === false) {\n if (X < dim.w * 1 / 3 && (Y < dim.h * 1 / 2 || Y > dim.h * 1 / 2)) {\n side = 'left';\n } else if (X > dim.w * 2 / 3 && (Y < dim.h * 1 / 2 || Y > dim.h * 1 / 2)) {\n side = 'right';\n } else if (X > dim.w * 1 / 3 && X < dim.w * 2 / 3 && Y > dim.h / 2) {\n side = 'bottom';\n } else {\n side = \"top\";\n }\n if (o.canTransform === true) tile.addClass(\"transform-\" + side);\n if (o.target !== null) {\n setTimeout(function () {\n document.location.href = o.target;\n }, 100);\n }\n Utils.exec(o.onClick, [side], element[0]);\n element.trigger(\"click\", {\n side: side\n });\n }\n });\n element.on('mouseup touchend mouseleave', function () {\n $(this).removeClass(\"transform-left\").removeClass(\"transform-right\").removeClass(\"transform-top\").removeClass(\"transform-bottom\");\n });\n $(window).on('resize', this._fixSizeCallback);\n $(this._fixSizeCallback);\n };\n this.destroy = function () {\n var element = this.element;\n element.off('mousedown touchstart');\n element.off('mouseup touchend mouseleave');\n $(window).off('resize', this._fixSizeCallback);\n this._stopEffects();\n };\n this.init(options, element);\n }\n ;\n function getElementOptions(element) {\n var options = {};\n $.each(element[0].attributes, function (index, attribute) {\n if (attribute.name.startsWith('data-')) {\n options[attribute.name.substr(5)] = attribute.value;\n }\n });\n return options;\n }\n $.fn.extend({\n tile: function tile(action) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n var result;\n this.each(function () {\n var element = $(this);\n if (element.attr('data-role') !== 'tile') {\n throw new Error('This element isn\\'t a tile element');\n }\n var tileObj = element.data('tile');\n if (action == 'init') {\n if (tileObj) {\n throw new Error('Tile already inited.');\n }\n var options = args[0] || {};\n options = $.extend({}, options, getElementOptions(element));\n tileObj = new Tile(options, element);\n element.data('tile', tileObj);\n } else {\n var _tileObj$action;\n if (!tileObj) {\n throw new Error('Tile not inited.');\n }\n if (!tileObj[action]) {\n throw new Error('Method: ' + action + ' not exists.');\n }\n result = (_tileObj$action = tileObj[action]).apply.apply(_tileObj$action, [tileObj].concat(args));\n }\n });\n if (result == undefined) {\n return this;\n } else {\n return result;\n }\n }\n });\n function resizeGrid() {\n $('.tiles-grid').each(function () {\n var dom = $(this);\n var width = dom.width();\n var gridSize = width / 4 - GRID_GAP;\n dom.css({\n gridTemplateColumns: 'repeat(4, ' + gridSize + 'px)',\n gridAutoRows: gridSize + 'px'\n });\n });\n }\n $('*[data-role=\"tile\"]').tile('init');\n $(window).on('resize', resizeGrid);\n $(resizeGrid);\n function onCollapseDivChange(mutationsList) {\n mutationsList.forEach(function (item) {\n if (item.type == 'attributes' && item.attributeName == 'class') {\n $('*[data-role=\"tile\"]').tile('resize');\n resizeGrid();\n }\n });\n }\n if ($('body').hasClass('skin-minerva')) {\n $('#mw-content-text .collapsible-block').each(function () {\n var dom = $(this);\n if (dom.find('*[data-role=\"tile\"]').length > 0) {\n //存在tile,监听这个dom\n var observer = new MutationObserver(onCollapseDivChange);\n observer.observe(dom[0], {\n attributes: true\n });\n }\n });\n }\n})(jQuery);\n\n//# sourceURL=webpack://isekai-widgets/./src/tile/ext.isekai.tile.js?"); + +/***/ }), + +/***/ "./src/tile/tile.less": +/*!****************************!*\ + !*** ./src/tile/tile.less ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://isekai-widgets/./src/tile/tile.less?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/tile/ext.isekai.tile.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..3cc0113 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2978 @@ +lockfileVersion: '6.0' + +dependencies: + masonry-layout: + specifier: ^4.2.2 + version: 4.2.2 + +devDependencies: + '@babel/core': + specifier: ^7.21.8 + version: 7.21.8 + '@babel/preset-env': + specifier: ^7.21.5 + version: 7.21.5(@babel/core@7.21.8) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.23) + babel-loader: + specifier: ^9.1.2 + version: 9.1.2(@babel/core@7.21.8)(webpack@5.82.0) + css-loader: + specifier: ^6.7.3 + version: 6.7.3(webpack@5.82.0) + less: + specifier: ^4.1.3 + version: 4.1.3 + less-loader: + specifier: ^11.1.0 + version: 11.1.0(less@4.1.3)(webpack@5.82.0) + mini-css-extract-plugin: + specifier: ^2.7.5 + version: 2.7.5(webpack@5.82.0) + postcss: + specifier: ^8.4.23 + version: 8.4.23 + postcss-loader: + specifier: ^7.3.0 + version: 7.3.0(postcss@8.4.23)(webpack@5.82.0) + prettier: + specifier: ^2.8.8 + version: 2.8.8 + sass: + specifier: ^1.62.1 + version: 1.62.1 + sass-loader: + specifier: ^12.6.0 + version: 12.6.0(sass@1.62.1)(webpack@5.82.0) + style-loader: + specifier: ^2.0.0 + version: 2.0.0(webpack@5.82.0) + webpack: + specifier: ^5.82.0 + version: 5.82.0(webpack-cli@5.1.1) + webpack-cli: + specifier: ^5.1.1 + version: 5.1.1(webpack@5.82.0) + +packages: + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@babel/code-frame@7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/compat-data@7.22.3: + resolution: {integrity: sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.21.8: + resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.22.3 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.21.8) + '@babel/helper-module-transforms': 7.22.1 + '@babel/helpers': 7.22.3 + '@babel/parser': 7.22.4 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.22.3: + resolution: {integrity: sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.3: + resolution: {integrity: sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-compilation-targets@7.22.1(@babel/core@7.21.8): + resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.3 + '@babel/core': 7.21.8 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.7 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-create-class-features-plugin@7.22.1(@babel/core@7.21.8): + resolution: {integrity: sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.22.3 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.18.6 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-regexp-features-plugin@7.22.1(@babel/core@7.21.8): + resolution: {integrity: sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + regexpu-core: 5.3.2 + semver: 6.3.0 + dev: true + + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.8): + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor@7.22.1: + resolution: {integrity: sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.21.9 + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-hoist-variables@7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-member-expression-to-functions@7.22.3: + resolution: {integrity: sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-module-imports@7.21.4: + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-module-transforms@7.22.1: + resolution: {integrity: sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-simple-access': 7.21.5 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression@7.18.6: + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-plugin-utils@7.21.5: + resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-wrap-function': 7.20.5 + '@babel/types': 7.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers@7.22.1: + resolution: {integrity: sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-member-expression-to-functions': 7.22.3 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access@7.21.5: + resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-split-export-declaration@7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/helper-string-parser@7.21.5: + resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function@7.20.5: + resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.21.0 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helpers@7.22.3: + resolution: {integrity: sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.22.4: + resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.4 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.3(@babel/core@7.21.8): + resolution: {integrity: sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-transform-optional-chaining': 7.22.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.8): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.8): + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.8): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.3 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.8): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.8): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.8): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.8): + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.8): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.8): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.8): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.8): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.8): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.8): + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.21.8) + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/template': 7.21.9 + dev: true + + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.8): + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.3 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.21.8) + '@babel/helper-function-name': 7.21.0 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.8): + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-simple-access': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs@7.22.3(@babel/core@7.21.8): + resolution: {integrity: sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-validator-identifier': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.3(@babel/core@7.21.8): + resolution: {integrity: sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-new-target@7.22.3(@babel/core@7.21.8): + resolution: {integrity: sha512-5RuJdSo89wKdkRTqtM9RVVJzHum9c2s0te9rB7vZC1zKKxcioWIy+xcu4OoIAjyFZhb/bp5KkunuLin1q7Ct+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-optional-chaining@7.22.3(@babel/core@7.21.8): + resolution: {integrity: sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-transform-parameters@7.22.3(@babel/core@7.21.8): + resolution: {integrity: sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.8): + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: true + + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/preset-env@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.3 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.3(@babel/core@7.21.8) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.8) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-systemjs': 7.22.3(@babel/core@7.21.8) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.3(@babel/core@7.21.8) + '@babel/plugin-transform-new-target': 7.22.3(@babel/core@7.21.8) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.3(@babel/core@7.21.8) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-regenerator': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-escapes': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.8) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.8) + '@babel/types': 7.22.4 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) + core-js-compat: 3.30.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules@0.1.5(@babel/core@7.21.8): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) + '@babel/types': 7.22.4 + esutils: 2.0.3 + dev: true + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime@7.22.3: + resolution: {integrity: sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: true + + /@babel/template@7.21.9: + resolution: {integrity: sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/parser': 7.22.4 + '@babel/types': 7.22.4 + dev: true + + /@babel/traverse@7.22.4: + resolution: {integrity: sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.22.3 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.22.4 + '@babel/types': 7.22.4 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.22.4: + resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.21.5 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: true + + /@discoveryjs/json-ext@0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map@0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@types/eslint-scope@3.7.4: + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + dependencies: + '@types/eslint': 8.40.0 + '@types/estree': 1.0.1 + dev: true + + /@types/eslint@8.40.0: + resolution: {integrity: sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==} + dependencies: + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.12 + dev: true + + /@types/estree@1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + dev: true + + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true + + /@types/node@20.2.5: + resolution: {integrity: sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==} + dev: true + + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: true + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + dev: true + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 + dev: true + + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + dev: true + + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webpack-cli/configtest@2.1.0(webpack-cli@5.1.1)(webpack@5.82.0): + resolution: {integrity: sha512-K/vuv72vpfSEZoo5KIU0a2FsEoYdW0DUMtMpB5X3LlUwshetMZRZRxB7sCsVji/lFaSxtQQ3aM9O4eMolXkU9w==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.82.0(webpack-cli@5.1.1) + webpack-cli: 5.1.1(webpack@5.82.0) + dev: true + + /@webpack-cli/info@2.0.1(webpack-cli@5.1.1)(webpack@5.82.0): + resolution: {integrity: sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.82.0(webpack-cli@5.1.1) + webpack-cli: 5.1.1(webpack@5.82.0) + dev: true + + /@webpack-cli/serve@2.0.4(webpack-cli@5.1.1)(webpack@5.82.0): + resolution: {integrity: sha512-0xRgjgDLdz6G7+vvDLlaRpFatJaJ69uTalZLRSMX5B3VUrDmXcrVA3+6fXXQgmYz7bY9AAgs348XQdmtLsK41A==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack: 5.82.0(webpack-cli@5.1.1) + webpack-cli: 5.1.1(webpack@5.82.0) + dev: true + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /acorn-import-assertions@1.9.0(acorn@8.8.2): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.8.2 + dev: true + + /acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: true + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv-keywords@5.1.0(ajv@8.12.0): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /autoprefixer@10.4.14(postcss@8.4.23): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.7 + caniuse-lite: 1.0.30001491 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /babel-loader@9.1.2(@babel/core@7.21.8)(webpack@5.82.0): + resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + dependencies: + '@babel/core': 7.21.8 + find-cache-dir: 3.3.2 + schema-utils: 4.0.1 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.8): + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.3 + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.8): + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + core-js-compat: 3.30.2 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.8): + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.21.7: + resolution: {integrity: sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001491 + electron-to-chromium: 1.4.414 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.7) + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /caniuse-lite@1.0.30001491: + resolution: {integrity: sha512-17EYIi4TLnPiTzVKMveIxU5ETlxbSO3B6iPvMbprqnKh4qJsQGk5Nh1Lp4jIMAE0XfrujsJuWZAM3oJdMHaKBA==} + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + dependencies: + is-what: 3.14.1 + dev: true + + /core-js-compat@3.30.2: + resolution: {integrity: sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==} + dependencies: + browserslist: 4.21.7 + dev: true + + /cosmiconfig@8.1.3: + resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} + engines: {node: '>=14'} + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-loader@6.7.3(webpack@5.82.0): + resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.23) + postcss: 8.4.23 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.23) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.23) + postcss-modules-scope: 3.0.0(postcss@8.4.23) + postcss-modules-values: 4.0.0(postcss@8.4.23) + postcss-value-parser: 4.2.0 + semver: 7.5.1 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + optional: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /desandro-matches-selector@2.0.2: + resolution: {integrity: sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg==} + dev: false + + /electron-to-chromium@1.4.414: + resolution: {integrity: sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==} + dev: true + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /enhanced-resolve@5.14.1: + resolution: {integrity: sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /envinfo@7.8.1: + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + requiresBuild: true + dependencies: + prr: 1.0.1 + dev: true + optional: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-module-lexer@1.2.1: + resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /ev-emitter@1.1.1: + resolution: {integrity: sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==} + dev: false + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /fizzy-ui-utils@2.0.7: + resolution: {integrity: sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==} + dependencies: + desandro-matches-selector: 2.0.2 + dev: false + + /fraction.js@4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-size@2.0.3: + resolution: {integrity: sha512-lXNzT/h/dTjTxRbm9BXb+SGxxzkm97h/PCIKtlN/CBCxxmkkIVV21udumMS93MuVTDX583gqc94v3RjuHmI+2Q==} + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + optional: true + + /icss-utils@5.1.0(postcss@8.4.23): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.23 + dev: true + + /image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /immutable@4.3.0: + resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + dependencies: + has: 1.0.3 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.2.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jiti@1.18.2: + resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} + hasBin: true + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + dev: true + + /less-loader@11.1.0(less@4.1.3)(webpack@5.82.0): + resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} + engines: {node: '>= 14.15.0'} + peerDependencies: + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 + dependencies: + klona: 2.0.6 + less: 4.1.3 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /less@4.1.3: + resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.5.2 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + pify: 4.0.1 + semver: 5.7.1 + dev: true + optional: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /masonry-layout@4.2.2: + resolution: {integrity: sha512-iGtAlrpHNyxaR19CvKC3npnEcAwszXoyJiI8ARV2ePi7fmYhIud25MHK8Zx4P0LCC4d3TNO9+rFa1KoK1OEOaA==} + dependencies: + get-size: 2.0.3 + outlayer: 2.1.1 + dev: false + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /mini-css-extract-plugin@2.7.5(webpack@5.82.0): + resolution: {integrity: sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: 4.0.1 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + optional: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /needle@3.2.0: + resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} + engines: {node: '>= 4.4.x'} + hasBin: true + requiresBuild: true + dependencies: + debug: 3.2.7 + iconv-lite: 0.6.3 + sax: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /outlayer@2.1.1: + resolution: {integrity: sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw==} + dependencies: + ev-emitter: 1.1.1 + fizzy-ui-utils: 2.0.7 + get-size: 2.0.3 + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.21.4 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + optional: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /postcss-loader@7.3.0(postcss@8.4.23)(webpack@5.82.0): + resolution: {integrity: sha512-qLAFjvR2BFNz1H930P7mj1iuWJFjGey/nVhimfOAAQ1ZyPpcClAxP8+A55Sl8mBvM+K2a9Pjgdj10KpANWrNfw==} + engines: {node: '>= 14.15.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 8.1.3 + jiti: 1.18.2 + klona: 2.0.6 + postcss: 8.4.23 + semver: 7.5.1 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /postcss-modules-extract-imports@3.0.0(postcss@8.4.23): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.23 + dev: true + + /postcss-modules-local-by-default@4.0.3(postcss@8.4.23): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.23) + postcss: 8.4.23 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-scope@3.0.0(postcss@8.4.23): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-modules-values@4.0.0(postcss@8.4.23): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.23) + postcss: 8.4.23 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.23: + resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true + optional: true + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + dependencies: + resolve: 1.22.2 + dev: true + + /regenerate-unicode-properties@10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-transform@0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + dependencies: + '@babel/runtime': 7.22.3 + dev: true + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.0 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + optional: true + + /sass-loader@12.6.0(sass@1.62.1)(webpack@5.82.0): + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + sass: 1.62.1 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /sass@1.62.1: + resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.0 + source-map-js: 1.0.2 + dev: true + + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + optional: true + + /schema-utils@3.1.2: + resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.12 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@4.0.1: + resolution: {integrity: sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.12 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) + dev: true + + /semver@5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: true + optional: true + + /semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver@7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: true + + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /style-loader@2.0.0(webpack@5.82.0): + resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.1.2 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /terser-webpack-plugin@5.3.9(webpack@5.82.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + jest-worker: 27.5.1 + schema-utils: 3.1.2 + serialize-javascript: 6.0.1 + terser: 5.17.6 + webpack: 5.82.0(webpack-cli@5.1.1) + dev: true + + /terser@5.17.6: + resolution: {integrity: sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.3 + acorn: 8.8.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tslib@2.5.2: + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db@1.0.11(browserslist@4.21.7): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.7 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: true + + /webpack-cli@5.1.1(webpack@5.82.0): + resolution: {integrity: sha512-OLJwVMoXnXYH2ncNGU8gxVpUtm3ybvdioiTvHgUyBuyMLKiVvWy+QObzBsMtp5pH7qQoEuWgeEUQ/sU3ZJFzAw==} + engines: {node: '>=14.15.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.0(webpack-cli@5.1.1)(webpack@5.82.0) + '@webpack-cli/info': 2.0.1(webpack-cli@5.1.1)(webpack@5.82.0) + '@webpack-cli/serve': 2.0.4(webpack-cli@5.1.1)(webpack@5.82.0) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.3 + envinfo: 7.8.1 + fastest-levenshtein: 1.0.16 + import-local: 3.1.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.82.0(webpack-cli@5.1.1) + webpack-merge: 5.9.0 + dev: true + + /webpack-merge@5.9.0: + resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} + engines: {node: '>=10.0.0'} + dependencies: + clone-deep: 4.0.1 + wildcard: 2.0.1 + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack@5.82.0(webpack-cli@5.1.1): + resolution: {integrity: sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.8.2 + acorn-import-assertions: 1.9.0(acorn@8.8.2) + browserslist: 4.21.7 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.14.1 + es-module-lexer: 1.2.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.2 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.82.0) + watchpack: 2.4.0 + webpack-cli: 5.1.1(webpack@5.82.0) + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true diff --git a/src/baseWidgets/bottomNav.js b/src/baseWidgets/bottomNav.js new file mode 100644 index 0000000..3a84ea6 --- /dev/null +++ b/src/baseWidgets/bottomNav.js @@ -0,0 +1,110 @@ +export class BottomNavWidget { + constructor() { + this.domCreated = false; + + this.btnList = []; + } + + initDom() { + if (!this.domCreated) { + let bottomNavContainer = document.querySelector('#isekai-bottom-nav'); + if (bottomNavContainer) { + this.bottomNavContainer = bottomNavContainer; + this.bottomNavElem = bottomNavContainer.querySelector('.isekai-bottom-nav'); + } else { + bottomNavContainer = document.createElement('nav'); + bottomNavContainer.id = 'isekai-bottom-nav'; + bottomNavContainer.className = 'isekai-bottom-nav-container'; + this.bottomNavContainer = bottomNavContainer; + + let bottomNavElem = document.createElement('div'); + bottomNavElem.className = 'isekai-bottom-nav'; + this.bottomNavElem = bottomNavElem; + + let bottomNavPlaceholder = document.createElement('div'); + bottomNavPlaceholder.id = 'isekai-bottom-nav-placeholder'; + bottomNavPlaceholder.className = 'isekai-bottom-nav-placeholder'; + + bottomNavContainer.appendChild(bottomNavElem); + document.body.appendChild(bottomNavContainer); + document.body.appendChild(bottomNavPlaceholder); + document.body.classList.add('use-isekai-bottom-nav'); + } + } + } + + addButton(btnInfo) { + if (!this.domCreated) { + this.initDom(); + } + + let btnElem = document.createElement('a'); + btnElem.role = 'button'; + btnElem.href = 'javascript:void(0);'; + btnElem.classList.add('isekai-bottom-nav-btn'); + btnElem.dataset.id = btnInfo.id; + + if (btnInfo.className) { + btnElem.classList.add(...btnInfo.className.split(' ')); + } + if (btnInfo.icon) { + let iconElem = document.createElement('span'); + iconElem.className = 'isekai-bottom-nav-btn-icon'; + if (typeof btnInfo.icon === 'string') { + iconElem.innerHTML = btnInfo.icon; + } else if (typeof btnInfo.icon === 'object') { + iconElem.appendChild(btnInfo.icon); + } + btnElem.appendChild(iconElem); + } + if (btnInfo.label) { + btnElem.title = btnInfo.label; + btnElem.setAttribute('aria-label', btnInfo.label); + } + if (btnInfo.expand) { + btnElem.classList.add('isekai-bottom-nav-btn-expand'); + let labelElem = document.createElement('span'); + labelElem.className = 'isekai-bottom-nav-btn-label'; + labelElem.innerText = btnInfo.label ?? ''; + btnElem.appendChild(labelElem); + } + if (btnInfo.onClick) { + btnElem.addEventListener('click', btnInfo.onClick); + } + + let newBtnInfo = {...btnInfo, element: btnElem, proiorty: btnInfo.priority ?? 0}; + + let insertAfter = null; + let insertAfterIndex = 0; + this.btnList.forEach((one, index) => { + if (newBtnInfo.priority > one.priority) { + insertAfter = one.element; + insertAfterIndex = index; + } + }); + + if (insertAfter) { + this.bottomNavElem.insertAfter(btnElem, insertAfter); + this.btnList = [...this.btnList.slice(0, insertAfterIndex + 1), newBtnInfo, ...this.btnList.slice(insertAfterIndex + 1)]; + } else { + this.bottomNavElem.prepend(btnElem); + this.btnList.unshift(newBtnInfo); + } + + return btnElem; + } + + removeButton(btnInfo) { + let btnId = ''; + if (typeof btnInfo === 'string') { + btnId = btnInfo; + } else if (typeof btnInfo === 'object') { + btnId = btnInfo.id; + } + + let btnElem = this.bottomNavElem.querySelector(`.isekai-bottom-nav-btn[data-id="${btnId}"]`); + if (btnElem) { + btnElem.remove(); + } + } +} \ No newline at end of file diff --git a/src/baseWidgets/contextMenu.js b/src/baseWidgets/contextMenu.js new file mode 100644 index 0000000..92ce2ea --- /dev/null +++ b/src/baseWidgets/contextMenu.js @@ -0,0 +1,149 @@ + + +const isMobileSafari = (() => { + let v = navigator.userAgent.match(/Version\/(?\S+) Mobile\/\S+/); + if (v && v.groups.version) { // Safari + return true; + } + return false; +})(); + +export class ContextMenuWidget { + constructor() { + this.menuItems = []; + this.menuItemsUpdated = true; + + this.initDom(); + } + + initDom() { + let menuContainer = document.createElement('div'); + menuContainer.id = 'iseai-contextmenu'; + menuContainer.className = 'oo-ui-toolGroup-tools oo-ui-popupToolGroup-tools oo-ui-listToolGroup-tools oo-ui-toolGroup-enabled-tools oo-ui-popupToolGroup-active-tools'; + menuContainer.style.minWidth = 'unset'; + menuContainer.style.display = 'none'; + this.menuContainer = menuContainer; + + let menuCover = document.createElement('div'); + menuCover.className = 'isekai-contextmenu-cover'; + menuCover.style.display = 'none'; + menuCover.addEventListener('click', () => { + this.hide(); + }); + this.menuCover = menuCover; + + document.body.appendChild(menuContainer); + document.body.appendChild(menuCover); + } + + setMenuItem(menuItems) { + this.menuItems = menuItems; + this.menuItemsUpdated = true; + } + + updateMenuItemDom() { + if (this.menuItemsUpdated) { + this.menuContainer.innerHTML = ''; + + this.menuItems.sort((a, b) => { + return (b.priority ?? 0) - (a.priority ?? 0); + }).forEach((menuItem) => { + let menuElem = document.createElement('span'); + menuElem.className = 'oo-ui-widget oo-ui-widget-enabled oo-ui-tool'; + + let menuLink = document.createElement('a'); + menuLink.className = 'oo-ui-tool-link'; + menuLink.tabIndex = 0; + menuLink.role = 'button'; + menuLink.addEventListener('click', (e) => { + e.preventDefault(); + menuItem.onClick?.(); + this.hide(); + }); + + let menuLabel = document.createElement('span'); + menuLabel.className = 'oo-ui-tool-title'; + menuLabel.innerText = menuItem.label; + + menuLink.appendChild(menuLabel); + menuElem.appendChild(menuLink); + this.menuContainer.appendChild(menuElem); + }); + + this.menuItemsUpdated = false; + } + } + + show(...args) { + let x = 0; + let y = 0; + if (args[0] instanceof MouseEvent) { + x = args[0].clientX; + y = args[0].clientY; + } else if (args[0] instanceof Element) { + let rect = args[0].getBoundingClientRect(); + x = rect.left; + y = rect.top; + } else if (args.length === 2 && typeof args[0] === 'number' && typeof args[1] === 'number') { + x = args[0]; + y = args[1]; + } + + if (this.menuItemsUpdated) { + this.updateMenuItemDom(); + } + + this.menuContainer.style.display = 'block'; + this.menuCover.style.display = 'block'; + + let menuWidth = this.menuContainer.clientWidth; + let menuHeight = this.menuContainer.clientHeight; + + if (x + menuWidth > window.innerWidth) { + x -= menuWidth; + } + if (y + menuHeight > window.innerHeight) { + y -= menuHeight; + } + + this.menuContainer.style.left = x + 'px'; + this.menuContainer.style.top = y + 'px'; + } + + hide() { + this.menuContainer.style.display = 'none'; + this.menuCover.style.display = 'none'; + } + + bindToDom(dom) { + dom.addEventListener('contextmenu', (e) => { + e.preventDefault(); + this.show(e); + }); + + if (isMobileSafari) { + // Safari下对长按的特殊处理 + let longPressTimer; + + dom.addEventListener('touchstart', (e) => { + document.body.classList.add('isekai-contextmenu-ios-longpress'); + + longPressTimer = setTimeout(() => { + e.preventDefault(); + this.show({ + x: e.pageX - window.scrollX, + y: e.pageY - window.scrollY + }); + }, 200); + }); + + dom.addEventListener('touchend', function (e) { + document.body.classList.remove('isekai-contextmenu-ios-longpress'); + + if (longPressTimer) { + clearInterval(longPressTimer); + } + }); + } + } +} \ No newline at end of file diff --git a/src/baseWidgets/ext.isekai.baseWidgets.js b/src/baseWidgets/ext.isekai.baseWidgets.js new file mode 100644 index 0000000..9bf0c84 --- /dev/null +++ b/src/baseWidgets/ext.isekai.baseWidgets.js @@ -0,0 +1,14 @@ +import { registerModule } from '../moduleRegister'; +import { ContextMenuWidget } from './contextMenu'; +import { FabWidget } from './fab'; +import { BottomNavWidget } from './bottomNav'; + +registerModule('ui.ContextMenuWidget', ContextMenuWidget); +registerModule('ui.FabWidget', FabWidget); +registerModule('ui.BottomNavWidget', BottomNavWidget); + +const fabInstance = new FabWidget(); +registerModule('fab', fabInstance); + +const bottomNavInstance = new BottomNavWidget(); +registerModule('bottomNav', bottomNavInstance); \ No newline at end of file diff --git a/src/baseWidgets/fab.js b/src/baseWidgets/fab.js new file mode 100644 index 0000000..c31b58f --- /dev/null +++ b/src/baseWidgets/fab.js @@ -0,0 +1,123 @@ +export class FabWidget { + constructor() { + this.domCreated = false; + + this.btnList = []; + this.hidden = false; + } + + initDom() { + if (!this.domCreated) { + let fabContainer = document.querySelector('#isekai-fab-container'); + if (fabContainer) { + this.fabContainer = fabContainer; + } else { + fabContainer = document.createElement('div'); + fabContainer.id = 'isekai-fab-container'; + fabContainer.className = 'isekai-fab-group'; + this.fabContainer = fabContainer; + + document.body.appendChild(fabContainer); + + // 右键隐藏 + let menuItems = [ + { + label: mw.msg('isekai-fab-hide-fab-button'), + onClick: () => { + this.hide(); + mw.notify(mw.msg('isekai-fab-hide-fab-button-success')); + }, + } + ]; + + let contextMenu = new isekai.ui.ContextMenuWidget(); + contextMenu.setMenuItem(menuItems); + contextMenu.bindToDom(fabContainer); + this.contextMenu = contextMenu; + } + this.domCreated = true; + } + } + + addButton(btnInfo) { + if (!this.domCreated) { + this.initDom(); + } + + let btnElem = document.createElement('a'); + btnElem.role = 'button'; + btnElem.href = 'javascript:void(0);'; + btnElem.className = 'isekai-fab-btn'; + btnElem.dataset.id = btnInfo.id; + if (btnInfo.icon) { + let iconElem = document.createElement('span'); + iconElem.className = 'isekai-fab-btn-icon'; + if (typeof btnInfo.icon === 'string') { + iconElem.innerHTML = btnInfo.icon; + } else if (typeof btnInfo.icon === 'object') { + iconElem.appendChild(btnInfo.icon); + } + btnElem.appendChild(iconElem); + } + if (btnInfo.label) { + btnElem.title = btnInfo.label; + btnElem.setAttribute('aria-label', btnInfo.label); + } + if (btnInfo.onClick) { + btnElem.addEventListener('click', btnInfo.onClick); + } + + let newBtnInfo = {...btnInfo, element: btnElem, proiorty: btnInfo.priority ?? 0}; + + let insertBefore = null; + let insertBeforeIndex = 0; + this.btnList.forEach((one, index) => { + if (one.priority < newBtnInfo.priority) { + insertBefore = one.element; + insertBeforeIndex = index; + } + }); + + if (insertBefore) { + this.fabContainer.insertBefore(btnElem, insertBefore); + this.btnList = [...this.btnList.slice(0, insertBeforeIndex), newBtnInfo, ...this.btnList.slice(insertBeforeIndex)]; + } else { + this.fabContainer.appendChild(btnElem); + this.btnList.push(newBtnInfo); + } + + return btnElem; + } + + removeButton(btnInfo) { + let btnId = ''; + if (typeof btnInfo === 'string') { + btnId = btnInfo; + } else if (typeof btnInfo === 'object') { + btnId = btnInfo.id; + } + + let fabBtn = this.fabContainer.querySelector(`.isekai-fab-btn[data-id="${btnId}"]`); + if (fabBtn) { + fabBtn.remove(); + } + } + + hide() { + this.fabContainer.classList.add('isekai-fab-hidden'); + this.hidden = true; + + document.body.addEventListener('contextmenu', this._onContextMenu); + } + + show() { + this.fabContainer.classList.remove('isekai-fab-hidden'); + this.hidden = false; + } + + _onContextMenu = (e) => { + e.preventDefault(); + document.body.removeEventListener('contextmenu', this._onContextMenu); + this.show(); + } +} \ No newline at end of file diff --git a/src/tile/include/vars.less b/src/tile/include/vars.less index 2045c2d..645fd0c 100644 --- a/src/tile/include/vars.less +++ b/src/tile/include/vars.less @@ -32,7 +32,7 @@ @blue: #00AFF0; @teal: #00aba9; @cyan: #1ba1e2; -@cobalt: #0050ef; +@cobalt: #0f6cbd; @indigo: #6a00ff; @violet: #aa00ff; @pink: #dc4fad; diff --git a/src/tile/tile.less b/src/tile/tile.less index 1dbd0ca..5e36416 100644 --- a/src/tile/tile.less +++ b/src/tile/tile.less @@ -7,7 +7,7 @@ .tile-large, .tile-app { display: block; - background-color: @cyan; + background: linear-gradient(95deg, #007ec6, #0080cd, #008dd3); color: @white; width: extract(@tileMedium, 1); height: extract(@tileMedium, 2); @@ -17,6 +17,7 @@ overflow: hidden; user-select: none; max-width: none!important; + border-radius: 6px; } .tile { @@ -47,6 +48,10 @@ .tile-wide, .tile-large, .tile-app { + transition: transform 250ms ease-in-out, box-shadow 250ms ease-in-out; + box-shadow: none; + transform: none; + .icon { max-width: 33%; height: 33%; @@ -95,7 +100,9 @@ } &:hover { - outline: @tileOutlineColor solid 4px; + // outline: @tileOutlineColor solid 4px; + transform: translate3d(0, -4px, 0); + box-shadow: 0 4px 2px 0 rgba(0, 0, 0, 0.25); } } diff --git a/webpack.config.js b/webpack.config.js index e57e7e8..5bdd313 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -10,6 +10,7 @@ const config = { 'createPage': './src/createPage/ext.isekai.createPage.js', 'discover': './src/discover/ext.isekai.discover.js', 'tile': './src/tile/ext.isekai.tile.js', + 'baseWidgets': './src/baseWidgets/ext.isekai.baseWidgets.js' }, output: { filename: '[name]/ext.isekai.[name].js',