文件操作 - index.js
返回文件管理
返回主菜单
删除本文件
文件: /home/www/public/wp-content/plugins/give/vendor/vendor-prefixed/stellarwp/harbor/build-dev/index.js
编辑文件内容
/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./resources/img/logo-give.svg" /*!*************************************!*\ !*** ./resources/img/logo-give.svg ***! \*************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoGive), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path, _path2; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoGive = function SvgLogoGive(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 46, height: 46, fill: "none", "aria-labelledby": "give-title" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#3D7BF5", d: "M0 9.857C0 4.413 4.413 0 9.857 0h26.286C41.587 0 46 4.413 46 9.857v26.286C46 41.587 41.587 46 36.143 46H9.857C4.413 46 0 41.587 0 36.143z" })), _path2 || (_path2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#FEFBF2", d: "M41.071 22.372c-4.885.202-4.245.147-18.419.22-.133 0-.399.056-.399.32 0 .226.013 1.895.02 2.38 0 .079-.033.159.17.159.171 0 6.995-.068 11.754-.454-.843 5.09-5.399 8.98-10.892 8.98-5.494 0-10.385-4.183-10.974-9.544 0-.031-.006-.056-.006-.086a9.6 9.6 0 0 1-.007-2.037c.165-1.594.71-3.19 1.603-4.612l.038-.056c.133-.208.279-.41.425-.607.101-.135.202-.276.316-.405q.088-.11.184-.22a11.12 11.12 0 0 1 7.274-3.73 10.488 10.488 0 0 1 2.23.006c.102.013.197.019.298.031q.465.056.913.147c.164.037.316.074.475.117a11.564 11.564 0 0 1 1.375.442c.038.012.07.03.107.042q.419.167.799.362c.221.11.45.221.665.35a10.873 10.873 0 0 1 2.68 2.202l3.003-2.208c-2.87-3.638-7.375-5.956-12.437-5.956-7.477 0-13.73 5.066-15.308 11.844q-.02.08-.038.172c-.032.147-.057.294-.089.441q-.039.184-.07.369c-.019.104-.031.214-.044.319-.019.153-.044.306-.063.466-.013.116-.02.233-.032.355q-.02.211-.032.43-.018.398-.019.803c0 8.391 7.027 15.194 15.695 15.194 8.173 0 14.877-6.048 15.625-13.764q.039-.148.07-.295c2.863-.178 2.984 0 2.984 0" }))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDYiIGhlaWdodD0iNDYiIHZpZXdCb3g9IjAgMCA0NiA0NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0iZ2l2ZS10aXRsZSI+Cjx0aXRsZSBpZD0iZ2l2ZS10aXRsZSI+R2l2ZVdQIGxvZ288L3RpdGxlPgo8cGF0aCBkPSJNMCA5Ljg1NzE0QzAgNC40MTMxOSA0LjQxMzE5IDAgOS44NTcxNCAwSDM2LjE0MjlDNDEuNTg2OCAwIDQ2IDQuNDEzMTkgNDYgOS44NTcxNFYzNi4xNDI5QzQ2IDQxLjU4NjggNDEuNTg2OCA0NiAzNi4xNDI5IDQ2SDkuODU3MTRDNC40MTMxOSA0NiAwIDQxLjU4NjggMCAzNi4xNDI5VjkuODU3MTRaIiBmaWxsPSIjM0Q3QkY1Ii8+CjxwYXRoIGQ9Ik00MS4wNzEzIDIyLjM3MTZDMzYuMTg2MiAyMi41NzQgMzYuODI2MSAyMi41MTg4IDIyLjY1MjMgMjIuNTkyNEMyMi41MTkyIDIyLjU5MjQgMjIuMjUzMSAyMi42NDc2IDIyLjI1MzEgMjIuOTExNEMyMi4yNTMxIDIzLjEzODMgMjIuMjY1OCAyNC44MDY3IDIyLjI3MjEgMjUuMjkxM0MyMi4yNzIxIDI1LjM3MSAyMi4yNDA0IDI1LjQ1MDggMjIuNDQzMiAyNS40NTA4QzIyLjYxNDMgMjUuNDUwOCAyOS40MzgyIDI1LjM4MzMgMzQuMTk2NiAyNC45OTY5QzMzLjM1MzkgMzAuMDg3OSAyOC43OTgzIDMzLjk3NjcgMjMuMzA0OSAzMy45NzY3QzE3LjgxMTUgMzMuOTc2NyAxMi45MiAyOS43OTM1IDEyLjMzMDggMjQuNDMyNkMxMi4zMzA4IDI0LjQwMTkgMTIuMzI0NSAyNC4zNzczIDEyLjMyNDUgMjQuMzQ2N0MxMi4yODY0IDI0LjAwMzIgMTIuMjY3NCAyMy42NDc0IDEyLjI2NzQgMjMuMjk3OEMxMi4yNjc0IDIyLjk2NjYgMTIuMjg2NCAyMi42MzU0IDEyLjMxODEgMjIuMzEwM0MxMi40ODI5IDIwLjcxNTUgMTMuMDI3OCAxOS4xMjA3IDEzLjkyMTIgMTcuNjk3N0MxMy45MzM4IDE3LjY3OTMgMTMuOTQ2NSAxNy42NjA5IDEzLjk1OTIgMTcuNjQyNUMxNC4wOTIyIDE3LjQzMzkgMTQuMjM4IDE3LjIzMTUgMTQuMzgzNyAxNy4wMzUyQzE0LjQ4NTEgMTYuOTAwMyAxNC41ODY0IDE2Ljc1OTIgMTQuNzAwNSAxNi42MzA0QzE0Ljc1NzUgMTYuNTU2OCAxNC44MjA5IDE2LjQ4MzIgMTQuODg0MiAxNi40MDk2QzE2LjY3NzMgMTQuMzYwOSAxOS4yNDk4IDEyLjk2ODUgMjIuMTU4MSAxMi42ODAyQzIyLjUzMTkgMTIuNjQzNCAyMi45MTIxIDEyLjYyNSAyMy4zMDQ5IDEyLjYyNUMyMy42NzI0IDEyLjYyNSAyNC4wMzM1IDEyLjY0OTYgMjQuMzg4NCAxMi42ODY0QzI0LjQ4OTcgMTIuNjk4NiAyNC41ODQ4IDEyLjcwNDggMjQuNjg2MiAxMi43MTdDMjQuOTk2NiAxMi43NTM4IDI1LjMwMDggMTIuODAyOSAyNS41OTg2IDEyLjg2NDJDMjUuNzYzMyAxMi45MDEgMjUuOTE1NCAxMi45Mzc5IDI2LjA3MzggMTIuOTgwOEMyNi4yMDA1IDEzLjAxMTUgMjYuMzMzNSAxMy4wNDgzIDI2LjQ2MDMgMTMuMDg1MUMyNi44MDI0IDEzLjE4MzIgMjcuMTMxOSAxMy4yOTk3IDI3LjQ0ODcgMTMuNDIyNEMyNy40ODY3IDEzLjQzNDcgMjcuNTE4NCAxMy40NTMxIDI3LjU1NjQgMTMuNDY1NEMyNy44MzUyIDEzLjU3NTggMjguMTAxMyAxMy42OTg0IDI4LjM1NDggMTMuODI3MkMyOC41NzY1IDEzLjkzNzcgMjguODA0NiAxNC4wNDgxIDI5LjAyIDE0LjE3NjlDMjkuMDI2NCAxNC4xNzY5IDI5LjAzOTEgMTQuMTgzIDI5LjA0NTQgMTQuMTg5MUMzMC4wNDY1IDE0Ljc3OCAzMC45NDYyIDE1LjUyMDIgMzEuNzAwMiAxNi4zNzg5TDM0LjcwMzUgMTQuMTcwN0MzMS44MzMzIDEwLjUzMzQgMjcuMzI4MyA4LjIxNDg0IDIyLjI2NTggOC4yMTQ4NEMxNC43ODkyIDguMjE0ODQgOC41MzU0OCAxMy4yODEzIDYuOTU3NzkgMjAuMDU5MkM2Ljk0NTEyIDIwLjExNDQgNi45MzI0NSAyMC4xNjk2IDYuOTE5NzcgMjAuMjMwOUM2Ljg4ODA5IDIwLjM3ODEgNi44NjI3NSAyMC41MjUzIDYuODMxMDcgMjAuNjcyNUM2LjgwNTcyIDIwLjc5NTIgNi43ODAzOCAyMC45MTc5IDYuNzYxMzcgMjEuMDQwNkM2Ljc0MjM2IDIxLjE0NDggNi43Mjk2OSAyMS4yNTUzIDYuNzE3MDIgMjEuMzU5NUM2LjY5ODAxIDIxLjUxMjkgNi42NzI2NyAyMS42NjYyIDYuNjUzNjYgMjEuODI1N0M2LjY0MDk5IDIxLjk0MjIgNi42MzQ2NSAyMi4wNTg4IDYuNjIxOTggMjIuMTgxNUM2LjYwOTMxIDIyLjMyMjUgNi41OTY2MyAyMi40NjM2IDYuNTkwMyAyMi42MTA4QzYuNTc3NjMgMjIuODc0NiA2LjU3MTI5IDIzLjE0NDUgNi41NzEyOSAyMy40MTQzQzYuNTcxMjkgMzEuODA1MyAxMy41OTggMzguNjA3NyAyMi4yNjU4IDM4LjYwNzdDMzAuNDM5MyAzOC42MDc3IDM3LjE0MjkgMzIuNTU5OCAzNy44OTA2IDI0Ljg0MzVDMzcuOTE1OSAyNC43NDU0IDM3Ljk0MTMgMjQuNjQ3MiAzNy45NjAzIDI0LjU0OTFDNDAuODI0MiAyNC4zNzEyIDQwLjk0NDYgMjQuNTQ5MSA0MC45NDQ2IDI0LjU0OTEiIGZpbGw9IiNGRUZCRjIiLz4KPC9zdmc+Cg=="); /***/ }, /***/ "./resources/img/logo-givewp-nobg.svg" /*!********************************************!*\ !*** ./resources/img/logo-givewp-nobg.svg ***! \********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoGivewpNobg), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path, _path2; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoGivewpNobg = function SvgLogoGivewpNobg(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 32, height: 32, fill: "none" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#000", d: "M16 5c5.658 0 10.32 4.278 10.93 9.773-2.24.837-5.56 1.749-9.433 1.749 0 0 .013.137.066.26.044.096.132.178.136.182 1.946.24 4.7-.026 6.802-.313-1.204 2.584-3.352 4.316-5.337 4.316-3.697 0-6.562-4.491-6.562-4.491 1.146-1.016 3.04-4.316 5.774-4.316 2.723 0 3.91 1.486 3.919 1.497l.306-.481c-.01-.034-1.29-4.465-4.89-4.465-3.611 0-7.445 5.916-9.69 7.283 0 0 3.085 7.31 9.822 7.31 5.662 0 7.08-5.41 7.347-6.75.755-.11 1.38-.222 1.797-.293q.004-.007.006-.016C26.863 22.205 21.991 27 16 27 9.927 27 5 22.073 5 16S9.927 5 16 5" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("mask", { id: "logo-givewp-nobg_svg__a", width: 22, height: 22, x: 5, y: 5, maskUnits: "userSpaceOnUse", style: { maskType: "alpha" } }, _path2 || (_path2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#000", d: "M27 16c0-6.073-4.927-11-11-11S5 9.927 5 16s4.927 11 11 11 11-4.927 11-11" })))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE2IDVDMjEuNjU4MiA1IDI2LjMxOTIgOS4yNzc1NSAyNi45Mjk3IDE0Ljc3MzRDMjQuNjkgMTUuNjA5OCAyMS4zNjk4IDE2LjUyMTUgMTcuNDk3MSAxNi41MjE1QzE3LjQ5NzEgMTYuNTIxNSAxNy41MTA0IDE2LjY1ODYgMTcuNTYyNSAxNi43ODIyQzE3LjYwNyAxNi44Nzc1IDE3LjY5NTIgMTYuOTYwMSAxNy42OTkyIDE2Ljk2MzlDMTkuNjQ1NCAxNy4yMDQ3IDIyLjM5ODYgMTYuOTM3OCAyNC41MDEgMTYuNjUxNEMyMy4yOTcgMTkuMjM1MiAyMS4xNDkyIDIwLjk2NjYgMTkuMTY0MSAyMC45NjY4QzE1LjQ2NyAyMC45NjY4IDEyLjYwMjUgMTYuNDc1NiAxMi42MDI1IDE2LjQ3NTZDMTMuNzQ4MSAxNS40NjAxIDE1LjY0MjQgMTIuMTYwMyAxOC4zNzYgMTIuMTYwMkMyMS4wOTkzIDEyLjE2MDIgMjIuMjg2IDEzLjY0NTkgMjIuMjk0OSAxMy42NTcyTDIyLjYwMDYgMTMuMTc1OEMyMi41OTA5IDEzLjE0MjIgMjEuMzEwNiA4LjcxMDk0IDE3LjcxMTkgOC43MTA5NEMxNC4wOTk2IDguNzExMjcgMTAuMjY2IDE0LjYyNzIgOC4wMjA1MSAxNS45OTQxQzguMDIwNTEgMTUuOTk0MSAxMS4xMDYxIDIzLjMwMzcgMTcuODQyOCAyMy4zMDM3QzIzLjUwNTIgMjMuMzAzNSAyNC45MjM2IDE3Ljg5NDUgMjUuMTkwNCAxNi41NTM3QzI1Ljk0NTUgMTYuNDQzMSAyNi41NzA3IDE2LjMzMjMgMjYuOTg3MyAxNi4yNjA3QzI2Ljk4OTUgMTYuMjU1NyAyNi45OTEgMTYuMjUwMyAyNi45OTMyIDE2LjI0NTFDMjYuODYyNiAyMi4yMDQ3IDIxLjk5MDkgMjcgMTYgMjdDOS45MjcyNCAyNyA1LjAwMDAyIDIyLjA3MjcgNSAxNkM1IDkuOTI3MjQgOS45MjcyMiA1IDE2IDVaIiBmaWxsPSJibGFjayIvPgo8bWFzayBpZD0ibWFzazBfNjVfMjQzOTUiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjUiIHk9IjUiIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiI+CjxwYXRoIGQ9Ik0yNyAxNkMyNyA5LjkyNzIgMjIuMDcyOCA1IDE2IDVDOS45MjcyMiA1IDUgOS45MjcyIDUgMTZDNSAyMi4wNzI3IDkuOTI3MjIgMjcgMTYgMjdDMjIuMDcyOCAyNyAyNyAyMi4wNzI3IDI3IDE2WiIgZmlsbD0iYmxhY2siLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzY1XzI0Mzk1KSI+CjwvZz4KPC9zdmc+Cg=="); /***/ }, /***/ "./resources/img/logo-kadence-nobg.svg" /*!*********************************************!*\ !*** ./resources/img/logo-kadence-nobg.svg ***! \*********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoKadenceNobg), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoKadenceNobg = function SvgLogoKadenceNobg(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 32, height: 32, fill: "none" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#000", fillRule: "evenodd", d: "M21.858 25.098h-5.273a1.035 1.035 0 0 1 0-2.069h3.444a1.035 1.035 0 0 0-.071-2.066h-5.39a1.034 1.034 0 0 1 0-2.066h.65v-.001h.966a1.033 1.033 0 0 0 0-2.065h-2.432v-.001H8.65a1.033 1.033 0 0 1 0-2.065h5.102v-.003h1.997a1.032 1.032 0 0 0 0-2.064h-2.576a1.033 1.033 0 0 1 0-2.066h4.898l.072.003h1.752a1.035 1.035 0 0 0 0-2.069H17.32a1.035 1.035 0 0 1 .075-2.066h8.848l-8.375 9.148L28 25.099h-6.115l-.001-.001zm-9.925-2.069a1.031 1.031 0 0 1 0 2.062H8.151a1.031 1.031 0 0 1 0-2.062zm-1.497-4.132a1.034 1.034 0 1 1-.002 2.069 1.034 1.034 0 0 1 .002-2.069m-5.402-4.132a1.034 1.034 0 1 1-.001 2.068 1.034 1.034 0 0 1 0-2.068m4.006-4.133a1.034 1.034 0 1 1 0 2.07 1.034 1.034 0 0 1 0-2.07M12.748 6.5a1.031 1.031 0 0 1 0 2.062h-2.391a1.031 1.031 0 0 1 0-2.062z", clipRule: "evenodd" }))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMS44NTc5IDI1LjA5ODRIMTYuNTg1QzE2LjAxNDEgMjUuMDk4NCAxNS41NTA2IDI0LjYzNDggMTUuNTUwNiAyNC4wNjM4QzE1LjU1MDYgMjMuNDkzIDE2LjAxNDEgMjMuMDI5NCAxNi41ODUgMjMuMDI5NEgyMC4wMjk0QzIwLjU2NjkgMjIuOTkyNSAyMC45OTIgMjIuNTQ0MyAyMC45OTIgMjEuOTk3NkMyMC45OTIgMjEuNDI2NiAyMC41Mjg2IDIwLjk2MzIgMTkuOTU3NiAyMC45NjMySDE3LjQzOTRWMjAuOTYzMUgxNC41Njc5QzEzLjk5NzggMjAuOTYzMSAxMy41MzQ5IDIwLjUwMDIgMTMuNTM0OSAxOS45MzAyQzEzLjUzNDkgMTkuMzYgMTMuOTk3OCAxOC44OTcgMTQuNTY3OSAxOC44OTdIMTUuMjE4NUwxNS4yMTcxIDE4Ljg5NThIMTYuMTg0NEMxNi43NTQzIDE4Ljg5NTggMTcuMjE2OSAxOC40MzMyIDE3LjIxNjkgMTcuODYzM0MxNy4yMTY5IDE3LjI5MzUgMTYuNzU0MyAxNi44MzA5IDE2LjE4NDQgMTYuODMwOUgxMy43NTE2VjE2LjgyOTlIOC42NDk5MkM4LjA4MDA5IDE2LjgyOTkgNy42MTczNCAxNi4zNjcyIDcuNjE3MzQgMTUuNzk3M0M3LjYxNzM0IDE1LjIyNzQgOC4wODAwOSAxNC43NjQ3IDguNjQ5OTIgMTQuNzY0N0gxMy43NTE2VjE0Ljc2MThIMTUuNzQ5MUMxNi4zMTg0IDE0Ljc2MTggMTYuNzgwNyAxNC4yOTk2IDE2Ljc4MDcgMTMuNzMwMkMxNi43ODA3IDEzLjE2MDggMTYuMzE4NCAxMi42OTg1IDE1Ljc0OTEgMTIuNjk4NUgxNS4yOTM4TDE1LjI5MzkgMTIuNjk4NEgxMy4xNzI2QzEyLjYwMjQgMTIuNjk4NCAxMi4xMzk2IDEyLjIzNTUgMTIuMTM5NiAxMS42NjU0QzEyLjEzOTYgMTEuMDk1MyAxMi42MDI0IDEwLjYzMjMgMTMuMTcyNiAxMC42MzIzSDE4LjA3MUMxOC4wOTU0IDEwLjYzMjMgMTguMTE5NSAxMC42MzMyIDE4LjE0MzUgMTAuNjM0OEgxOS44OTQ1QzIwLjQ2NTMgMTAuNjM0OCAyMC45Mjg3IDEwLjE3MTQgMjAuOTI4NyA5LjYwMDUxQzIwLjkyODcgOS4wMjk2MiAyMC40NjUzIDguNTY2MTggMTkuODk0NSA4LjU2NjE4SDE3LjMyMDZDMTYuNzg1IDguNTI3MzMgMTYuMzYxOSA4LjA3OTg4IDE2LjM2MTkgNy41MzQ0NEMxNi4zNjE5IDYuOTYzNTUgMTYuODI1NCA2LjUgMTcuMzk2NCA2LjVIMjEuNDUwN0MyMS40NTUyIDYuNSAyMS40NTk2IDYuNSAyMS40NjQ0IDYuNTAwMTFIMjYuMjQ0OUwxNy44Njg2IDE1LjY0NzdMMjggMjUuMDk5M0gyMS44ODUzTDIxLjg4MzkgMjUuMDk3OUMyMS44NzUzIDI1LjA5ODIgMjEuODY2NyAyNS4wOTg0IDIxLjg1NzkgMjUuMDk4NFpNMTEuOTMzMSAyMy4wMjk0QzEyLjUwMiAyMy4wMjk0IDEyLjk2MzkgMjMuNDkxMyAxMi45NjM5IDI0LjA2MDFDMTIuOTYzOSAyNC42MjkxIDEyLjUwMiAyNS4wOTA4IDExLjkzMzEgMjUuMDkwOEg4LjE1MDUyQzcuNTgxNjkgMjUuMDkwOCA3LjExOTgxIDI0LjYyOTEgNy4xMTk4MSAyNC4wNjAxQzcuMTE5ODEgMjMuNDkxMyA3LjU4MTY5IDIzLjAyOTQgOC4xNTA1MiAyMy4wMjk0SDExLjkzMzFaTTEwLjQzNTYgMTguODk3QzExLjAwNjIgMTguODk3IDExLjQ2OTQgMTkuMzYwMyAxMS40Njk0IDE5LjkzMUMxMS40Njk0IDIwLjUwMTQgMTEuMDA2MiAyMC45NjQ4IDEwLjQzNTYgMjAuOTY0OEM5Ljg2NDk0IDIwLjk2NDggOS40MDE2OSAyMC41MDE0IDkuNDAxNjkgMTkuOTMxQzkuNDAxNjkgMTkuMzYwMyA5Ljg2NDk0IDE4Ljg5NyAxMC40MzU2IDE4Ljg5N1pNNS4wMzM4IDE0Ljc2NDdDNS42MDQ0NyAxNC43NjQ3IDYuMDY3NzEgMTUuMjI3OSA2LjA2NzcxIDE1Ljc5ODZDNi4wNjc3MSAxNi4zNjkyIDUuNjA0NDcgMTYuODMyNCA1LjAzMzggMTYuODMyNEM0LjQ2MzI1IDE2LjgzMjQgNCAxNi4zNjkyIDQgMTUuNzk4NkM0IDE1LjIyNzkgNC40NjMyNSAxNC43NjQ3IDUuMDMzOCAxNC43NjQ3Wk05LjA0MDMxIDEwLjYzMjNDOS42MTA4OSAxMC42MzIzIDEwLjA3NDIgMTEuMDk1NiAxMC4wNzQyIDExLjY2NjJDMTAuMDc0MiAxMi4yMzY4IDkuNjEwODkgMTIuNzAwMSA5LjA0MDMxIDEyLjcwMDFDOC40Njk3NSAxMi43MDAxIDguMDA2NCAxMi4yMzY4IDguMDA2NCAxMS42NjYyQzguMDA2NCAxMS4wOTU2IDguNDY5NzUgMTAuNjMyMyA5LjA0MDMxIDEwLjYzMjNaTTEyLjc0OCA2LjVDMTMuMzE2OSA2LjUgMTMuNzc4NyA2Ljk2MTg4IDEzLjc3ODcgNy41MzA3MUMxMy43Nzg3IDguMDk5NjMgMTMuMzE2OSA4LjU2MTUxIDEyLjc0OCA4LjU2MTUxSDEwLjM1N0M5Ljc4ODE5IDguNTYxNTEgOS4zMjYyOCA4LjA5OTYzIDkuMzI2MjggNy41MzA3MUM5LjMyNjI4IDYuOTYxODggOS43ODgwOCA2LjUgMTAuMzU3IDYuNUgxMi43NDhaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K"); /***/ }, /***/ "./resources/img/logo-kadence.svg" /*!****************************************!*\ !*** ./resources/img/logo-kadence.svg ***! \****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoKadence), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path, _path2; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoKadence = function SvgLogoKadence(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 46, height: 46, fill: "none", "aria-labelledby": "kadence-title" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#3D7BF5", d: "M0 9.857C0 4.413 4.413 0 9.857 0H36.14C41.585 0 46 4.413 46 9.857v26.286C46 41.587 41.585 46 36.141 46H9.857C4.413 46 0 41.587 0 36.143z" })), _path2 || (_path2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#FEFBF2", fillRule: "evenodd", d: "M30.808 36.142H23.41a1.457 1.457 0 0 1-1.451-1.462c0-.807.65-1.462 1.451-1.462h4.833a1.46 1.46 0 0 0 1.351-1.458c0-.807-.65-1.462-1.451-1.462h-7.564c-.8 0-1.449-.654-1.449-1.46s.65-1.46 1.45-1.46h.913l-.002-.002h1.357c.8 0 1.449-.654 1.449-1.46s-.65-1.458-1.449-1.458h-3.414v-.002h-7.158c-.8 0-1.45-.654-1.45-1.459s.65-1.46 1.45-1.46h7.158v-.003h2.803c.8 0 1.448-.654 1.448-1.458 0-.805-.649-1.458-1.448-1.458h-3.615c-.8 0-1.45-.655-1.45-1.46 0-.806.65-1.46 1.45-1.46h6.873q.052 0 .102.003h2.457c.801 0 1.451-.655 1.451-1.462s-.65-1.462-1.45-1.462H24.44a1.46 1.46 0 0 1-1.345-1.458c0-.807.65-1.462 1.452-1.462h12.416L25.21 22.787l14.217 13.357h-8.58l-.002-.002zm-13.926-2.924c.798 0 1.446.653 1.446 1.457s-.648 1.456-1.447 1.456h-5.307a1.45 1.45 0 0 1-1.446-1.456c0-.804.648-1.457 1.446-1.457zm-2.102-5.84c.8 0 1.451.654 1.451 1.461 0 .806-.65 1.461-1.45 1.461-.802 0-1.452-.655-1.452-1.461 0-.807.65-1.461 1.451-1.461m-7.58-5.84c.801 0 1.451.654 1.451 1.46 0 .807-.65 1.462-1.45 1.462-.801 0-1.451-.655-1.451-1.461 0-.807.65-1.461 1.45-1.461m5.622-5.84c.801 0 1.451.654 1.451 1.46 0 .807-.65 1.462-1.45 1.462-.801 0-1.451-.655-1.451-1.461 0-.807.65-1.461 1.45-1.461m5.203-5.84c.798 0 1.446.652 1.446 1.456s-.648 1.457-1.446 1.457H14.67a1.45 1.45 0 0 1-1.446-1.457c0-.804.648-1.457 1.446-1.457z", clipRule: "evenodd" }))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDYiIGhlaWdodD0iNDYiIHZpZXdCb3g9IjAgMCA0NiA0NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0ia2FkZW5jZS10aXRsZSI+Cjx0aXRsZSBpZD0ia2FkZW5jZS10aXRsZSI+S2FkZW5jZSBsb2dvPC90aXRsZT4KPHBhdGggZD0iTTAgOS44NTcxNEMwIDQuNDEzMTkgNC40MTI5OSAwIDkuODU2NyAwSDM2LjE0MTJDNDEuNTg0OSAwIDQ2IDQuNDEzMTkgNDYgOS44NTcxNFYzNi4xNDI5QzQ2IDQxLjU4NjggNDEuNTg0OSA0NiAzNi4xNDEyIDQ2SDkuODU2N0M0LjQxMjk5IDQ2IDAgNDEuNTg2OCAwIDM2LjE0MjlWOS44NTcxNFoiIGZpbGw9IiMzRDdCRjUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMC44MDgyIDM2LjE0MTlIMjMuNDA5MkMyMi42MDggMzYuMTQxOSAyMS45NTc3IDM1LjQ4NjcgMjEuOTU3NyAzNC42Nzk4QzIxLjk1NzcgMzMuODczMSAyMi42MDggMzMuMjE3OSAyMy40MDkyIDMzLjIxNzlIMjguMjQyM0MyOC45OTY2IDMzLjE2NTggMjkuNTkzMiAzMi41MzI0IDI5LjU5MzIgMzEuNzU5N0MyOS41OTMyIDMwLjk1MjggMjguOTQyOCAzMC4yOTc4IDI4LjE0MTYgMzAuMjk3OEgyNC42MDhWMzAuMjk3NkgyMC41Nzg3QzE5Ljc3ODcgMzAuMjk3NiAxOS4xMjkyIDI5LjY0MzUgMTkuMTI5MiAyOC44Mzc4QzE5LjEyOTIgMjguMDMyMSAxOS43Nzg3IDI3LjM3NzggMjAuNTc4NyAyNy4zNzc4SDIxLjQ5MTdMMjEuNDg5OCAyNy4zNzZIMjIuODQ3MUMyMy42NDY3IDI3LjM3NiAyNC4yOTU5IDI2LjcyMjIgMjQuMjk1OSAyNS45MTY4QzI0LjI5NTkgMjUuMTExNSAyMy42NDY3IDI0LjQ1NzcgMjIuODQ3MSAyNC40NTc3SDE5LjQzMzNWMjQuNDU2NEgxMi4yNzQ2QzExLjQ3NSAyNC40NTY0IDEwLjgyNTcgMjMuODAyNSAxMC44MjU3IDIyLjk5N0MxMC44MjU3IDIyLjE5MTYgMTEuNDc1IDIxLjUzNzYgMTIuMjc0NiAyMS41Mzc2SDE5LjQzMzNWMjEuNTMzNkgyMi4yMzYzQzIzLjAzNTEgMjEuNTMzNiAyMy42ODM3IDIwLjg4MDMgMjMuNjgzNyAyMC4wNzU2QzIzLjY4MzcgMTkuMjcwOSAyMy4wMzUxIDE4LjYxNzcgMjIuMjM2MyAxOC42MTc3SDIxLjU5NzNMMjEuNTk3NSAxOC42MTc0SDE4LjYyMDhDMTcuODIwOCAxOC42MTc0IDE3LjE3MTQgMTcuOTYzMiAxNy4xNzE0IDE3LjE1NzZDMTcuMTcxNCAxNi4zNTE3IDE3LjgyMDggMTUuNjk3NiAxOC42MjA4IDE1LjY5NzZIMjUuNDk0M0MyNS41Mjg2IDE1LjY5NzYgMjUuNTYyNSAxNS42OTg3IDI1LjU5NjEgMTUuNzAxMUgyOC4wNTMxQzI4Ljg1NCAxNS43MDExIDI5LjUwNDQgMTUuMDQ2MSAyOS41MDQ0IDE0LjIzOTJDMjkuNTA0NCAxMy40MzI0IDI4Ljg1NCAxMi43Nzc1IDI4LjA1MzEgMTIuNzc3NUgyNC40NDE0QzIzLjY4OTcgMTIuNzIyNiAyMy4wOTYyIDEyLjA5MDMgMjMuMDk2MiAxMS4zMTk0QzIzLjA5NjIgMTAuNTEyNSAyMy43NDY1IDkuODU3NDIgMjQuNTQ3NiA5Ljg1NzQySDMwLjIzNjhDMzAuMjQzMSA5Ljg1NzQyIDMwLjI0OTIgOS44NTc0MiAzMC4yNTYgOS44NTc1NUgzNi45NjM5TDI1LjIxMDMgMjIuNzg1NkwzOS40MjY4IDM2LjE0MzFIMzAuODQ2NkwzMC44NDQ2IDM2LjE0MTJDMzAuODMyNiAzNi4xNDE3IDMwLjgyMDQgMzYuMTQxOSAzMC44MDgyIDM2LjE0MTlaTTE2Ljg4MTUgMzMuMjE3OUMxNy42Nzk4IDMzLjIxNzkgMTguMzI3OSAzMy44NzA3IDE4LjMyNzkgMzQuNjc0NkMxOC4zMjc5IDM1LjQ3ODcgMTcuNjc5OCAzNi4xMzEzIDE2Ljg4MTUgMzYuMTMxM0gxMS41NzM5QzEwLjc3NTcgMzYuMTMxMyAxMC4xMjc2IDM1LjQ3ODcgMTAuMTI3NiAzNC42NzQ2QzEwLjEyNzYgMzMuODcwNyAxMC43NzU3IDMzLjIxNzkgMTEuNTczOSAzMy4yMTc5SDE2Ljg4MTVaTTE0Ljc4MDMgMjcuMzc3OEMxNS41ODA5IDI3LjM3NzggMTYuMjMxIDI4LjAzMjQgMTYuMjMxIDI4LjgzOUMxNi4yMzEgMjkuNjQ1MiAxNS41ODA5IDMwLjMgMTQuNzgwMyAzMC4zQzEzLjk3OTUgMzAuMyAxMy4zMjk1IDI5LjY0NTIgMTMuMzI5NSAyOC44MzlDMTMuMzI5NSAyOC4wMzI0IDEzLjk3OTUgMjcuMzc3OCAxNC43ODAzIDI3LjM3NzhaTTcuMjAwNDIgMjEuNTM3NkM4LjAwMTIgMjEuNTM3NiA4LjY1MTIyIDIyLjE5MjMgOC42NTEyMiAyMi45OTg4QzguNjUxMjIgMjMuODA1MiA4LjAwMTIgMjQuNDU5OSA3LjIwMDQyIDI0LjQ1OTlDNi4zOTk3OCAyNC40NTk5IDUuNzQ5NzYgMjMuODA1MiA1Ljc0OTc2IDIyLjk5ODhDNS43NDk3NiAyMi4xOTIzIDYuMzk5NzggMjEuNTM3NiA3LjIwMDQyIDIxLjUzNzZaTTEyLjgyMjQgMTUuNjk3NkMxMy42MjMxIDE1LjY5NzYgMTQuMjczMiAxNi4zNTIzIDE0LjI3MzIgMTcuMTU4OEMxNC4yNzMyIDE3Ljk2NTIgMTMuNjIzMSAxOC42MTk3IDEyLjgyMjQgMTguNjE5N0MxMi4wMjE4IDE4LjYxOTcgMTEuMzcxNiAxNy45NjUyIDExLjM3MTYgMTcuMTU4OEMxMS4zNzE2IDE2LjM1MjMgMTIuMDIxOCAxNS42OTc2IDEyLjgyMjQgMTUuNjk3NlpNMTguMDI1IDkuODU3NDJDMTguODIzNCA5Ljg1NzQyIDE5LjQ3MTQgMTAuNTEwMiAxOS40NzE0IDExLjMxNDFDMTkuNDcxNCAxMi4xMTgyIDE4LjgyMzQgMTIuNzcwOSAxOC4wMjUgMTIuNzcwOUgxNC42N0MxMy44NzE4IDEyLjc3MDkgMTMuMjIzNyAxMi4xMTgyIDEzLjIyMzcgMTEuMzE0MUMxMy4yMjM3IDEwLjUxMDIgMTMuODcxNyA5Ljg1NzQyIDE0LjY3IDkuODU3NDJIMTguMDI1WiIgZmlsbD0iI0ZFRkJGMiIvPgo8L3N2Zz4K"); /***/ }, /***/ "./resources/img/logo-learndash-nobg.svg" /*!***********************************************!*\ !*** ./resources/img/logo-learndash-nobg.svg ***! \***********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoLearndashNobg), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoLearndashNobg = function SvgLogoLearndashNobg(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 32, height: 32, fill: "none" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#1E1E1E", d: "M16 9.83c-.303-.002-.604.06-.884.182s-.534.3-.749.526a2.4 2.4 0 0 0-.5.788 2.5 2.5 0 0 0-.174.93v14.032c.004.118.05.23.129.313.079.084.186.132.298.135a4.1 4.1 0 0 0 2.958-1.292 4.53 4.53 0 0 0 1.228-3.113V12.256a2.5 2.5 0 0 0-.174-.93 2.4 2.4 0 0 0-.5-.788 2.3 2.3 0 0 0-.749-.526A2.2 2.2 0 0 0 16 9.83M9.306 16.687c-.303-.001-.603.061-.883.183-.28.121-.535.3-.749.526a2.4 2.4 0 0 0-.5.788c-.115.294-.175.61-.174.93v7.437c.003.118.05.23.128.314.08.083.186.131.298.135a4.1 4.1 0 0 0 2.958-1.293 4.53 4.53 0 0 0 1.229-3.112v-3.482c0-.319-.059-.635-.175-.93a2.4 2.4 0 0 0-.5-.787 2.3 2.3 0 0 0-.748-.526 2.2 2.2 0 0 0-.884-.184M22.694 4c-.303 0-.604.062-.884.183-.28.122-.534.3-.749.526a2.4 2.4 0 0 0-.5.788c-.115.295-.174.61-.174.93v20.02c.003.117.05.23.128.313.08.083.186.131.298.134a4.1 4.1 0 0 0 2.959-1.292A4.53 4.53 0 0 0 25 22.49V6.427c0-.32-.059-.635-.174-.93a2.4 2.4 0 0 0-.5-.788 2.3 2.3 0 0 0-.749-.526A2.2 2.2 0 0 0 22.694 4" }))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1Ljk5OTcgOS44MjkxMUMxNS42OTY3IDkuODI4NDEgMTUuMzk2NSA5Ljg5MDcgMTUuMTE2MyAxMC4wMTI0QzE0LjgzNjIgMTAuMTM0MSAxNC41ODE3IDEwLjMxMjggMTQuMzY3NCAxMC41MzgzQzE0LjE1MzEgMTAuNzYzOCAxMy45ODMzIDExLjAzMTUgMTMuODY3NiAxMS4zMjYzQzEzLjc1MTkgMTEuNjIxIDEzLjY5MjcgMTEuOTM2OSAxMy42OTM0IDEyLjI1NTdWMjYuMjg3OEMxMy42OTY1IDI2LjQwNTcgMTMuNzQyNCAyNi41MTc4IDEzLjgyMTcgMjYuNjAxMkMxMy45MDA5IDI2LjY4NDYgMTQuMDA3NSAyNi43MzI5IDE0LjExOTUgMjYuNzM2MkMxNS4yMjkzIDI2LjczNDEgMTYuMjkzIDI2LjI2OTQgMTcuMDc3NyAyNS40NDM4QzE3Ljg2MjQgMjQuNjE4MiAxOC4zMDQxIDIzLjQ5OSAxOC4zMDYxIDIyLjMzMTRWMTIuMjU1N0MxOC4zMDY4IDExLjkzNjkgMTguMjQ3NiAxMS42MjEgMTguMTMxOSAxMS4zMjYzQzE4LjAxNjIgMTEuMDMxNSAxNy44NDY0IDEwLjc2MzggMTcuNjMyMSAxMC41MzgzQzE3LjQxNzggMTAuMzEyOCAxNy4xNjMzIDEwLjEzNDEgMTYuODgzMSAxMC4wMTI0QzE2LjYwMyA5Ljg5MDcgMTYuMzAyOCA5LjgyODQxIDE1Ljk5OTcgOS44MjkxMVoiIGZpbGw9IiMxRTFFMUUiLz4KPHBhdGggZD0iTTkuMzA2MzggMTYuNjg2NUM5LjAwMzMyIDE2LjY4NTggOC43MDMxMSAxNi43NDgxIDguNDIyOTkgMTYuODY5OEM4LjE0Mjg3IDE2Ljk5MTUgNy44ODgzNSAxNy4xNzAyIDcuNjc0MDUgMTcuMzk1N0M3LjQ1OTc2IDE3LjYyMTIgNy4yODk4OSAxNy44ODkgNy4xNzQyMiAxOC4xODM3QzcuMDU4NTUgMTguNDc4NCA2Ljk5OTM0IDE4Ljc5NDMgNy4wMDAwMSAxOS4xMTMxVjI2LjU1MTJDNy4wMDMxNiAyNi42NjkxIDcuMDQ5MDggMjYuNzgxMiA3LjEyODMzIDI2Ljg2NDZDNy4yMDc1OCAyNi45NDggNy4zMTQxNSAyNi45OTYzIDcuNDI2MTggMjYuOTk5NkM4LjUzNTkyIDI2Ljk5NzUgOS41OTk2NCAyNi41MzI4IDEwLjM4NDMgMjUuNzA3MkMxMS4xNjkxIDI0Ljg4MTYgMTEuNjEwOCAyMy43NjI0IDExLjYxMjggMjIuNTk0OFYxOS4xMTMxQzExLjYxMzQgMTguNzk0MyAxMS41NTQyIDE4LjQ3ODQgMTEuNDM4NSAxOC4xODM3QzExLjMyMjkgMTcuODg5IDExLjE1MyAxNy42MjEyIDEwLjkzODcgMTcuMzk1N0MxMC43MjQ0IDE3LjE3MDIgMTAuNDY5OSAxNi45OTE1IDEwLjE4OTggMTYuODY5OEM5LjkwOTY2IDE2Ljc0ODEgOS42MDk0NSAxNi42ODU4IDkuMzA2MzggMTYuNjg2NVoiIGZpbGw9IiMxRTFFMUUiLz4KPHBhdGggZD0iTTIyLjY5MzYgNC4wMDAwMUMyMi4zOTA1IDMuOTk5MzEgMjIuMDkwMyA0LjA2MTYgMjEuODEwMiA0LjE4MzNDMjEuNTMwMSA0LjMwNTAxIDIxLjI3NTYgNC40ODM3MiAyMS4wNjEzIDQuNzA5MTlDMjAuODQ3IDQuOTM0NjYgMjAuNjc3MSA1LjIwMjQ1IDIwLjU2MTQgNS40OTcxN0MyMC40NDU4IDUuNzkxODkgMjAuMzg2NiA2LjEwNzc1IDIwLjM4NzIgNi40MjY2MVYyNi40NDYxQzIwLjM5MDQgMjYuNTY0IDIwLjQzNjMgMjYuNjc2MSAyMC41MTU1IDI2Ljc1OTVDMjAuNTk0OCAyNi44NDI5IDIwLjcwMTQgMjYuODkxMiAyMC44MTM0IDI2Ljg5NDVDMjEuOTIzMSAyNi44OTI0IDIyLjk4NjggMjYuNDI3NyAyMy43NzE2IDI1LjYwMjFDMjQuNTU2MyAyNC43NzY1IDI0Ljk5OCAyMy42NTczIDI1IDIyLjQ4OTdWNi40MjY2MUMyNS4wMDA2IDYuMTA3NzUgMjQuOTQxNCA1Ljc5MTg5IDI0LjgyNTggNS40OTcxN0MyNC43MTAxIDUuMjAyNDUgMjQuNTQwMiA0LjkzNDY2IDI0LjMyNTkgNC43MDkxOUMyNC4xMTE2IDQuNDgzNzIgMjMuODU3MSA0LjMwNTAxIDIzLjU3NyA0LjE4MzNDMjMuMjk2OSA0LjA2MTYgMjIuOTk2NyAzLjk5OTMxIDIyLjY5MzYgNC4wMDAwMVoiIGZpbGw9IiMxRTFFMUUiLz4KPC9zdmc+Cg=="); /***/ }, /***/ "./resources/img/logo-learndash.svg" /*!******************************************!*\ !*** ./resources/img/logo-learndash.svg ***! \******************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoLearndash), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path, _path2; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoLearndash = function SvgLogoLearndash(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 46, height: 46, fill: "none", "aria-labelledby": "learndash-title" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#3D7BF5", d: "M0 9.857C0 4.413 4.413 0 9.857 0H36.14C41.585 0 46 4.413 46 9.857v26.286C46 41.587 41.585 46 36.141 46H9.857C4.413 46 0 41.587 0 36.143z" })), _path2 || (_path2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#FEFBF2", d: "M22.67 16.099c-.388-.001-.773.079-1.133.235-.359.156-.685.385-.96.674s-.492.633-.64 1.01a3.3 3.3 0 0 0-.224 1.193V37.21a.6.6 0 0 0 .165.402.55.55 0 0 0 .381.173c1.423-.002 2.787-.599 3.793-1.657a5.81 5.81 0 0 0 1.575-3.992V19.21c.001-.409-.075-.814-.223-1.192a3.1 3.1 0 0 0-.641-1.01 2.9 2.9 0 0 0-.96-.675 2.8 2.8 0 0 0-1.133-.235M12.814 23.984c-.389 0-.774.083-1.133.246s-.685.402-.96.703c-.275.302-.493.66-.64 1.055a3.5 3.5 0 0 0-.224 1.243v9.953a.65.65 0 0 0 .164.42.54.54 0 0 0 .382.18c1.423-.002 2.787-.624 3.793-1.73 1.006-1.104 1.572-2.601 1.575-4.164v-4.659c0-.426-.075-.849-.224-1.243a3.3 3.3 0 0 0-.64-1.055 2.95 2.95 0 0 0-.96-.703 2.7 2.7 0 0 0-1.133-.246M32.527 8.214c-.389-.001-.773.08-1.133.237-.359.157-.685.388-.96.679a3.2 3.2 0 0 0-.64 1.018 3.3 3.3 0 0 0-.224 1.2v25.858a.61.61 0 0 0 .165.405c.101.108.238.17.381.174 1.423-.003 2.787-.603 3.793-1.67s1.572-2.511 1.575-4.02V11.349c0-.412-.075-.82-.223-1.2a3.2 3.2 0 0 0-.641-1.018 2.95 2.95 0 0 0-.96-.68 2.8 2.8 0 0 0-1.133-.236" }))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDYiIGhlaWdodD0iNDYiIHZpZXdCb3g9IjAgMCA0NiA0NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0ibGVhcm5kYXNoLXRpdGxlIj4KPHRpdGxlIGlkPSJsZWFybmRhc2gtdGl0bGUiPkxlYXJuRGFzaCBsb2dvPC90aXRsZT4KPHBhdGggZD0iTTAgOS44NTcxNEMwIDQuNDEzMTkgNC40MTMwMSAwIDkuODU2NzQgMEgzNi4xNDE0QzQxLjU4NTEgMCA0NiA0LjQxMzE5IDQ2IDkuODU3MTRWMzYuMTQyOUM0NiA0MS41ODY4IDQxLjU4NTEgNDYgMzYuMTQxNCA0Nkg5Ljg1Njc0QzQuNDEzMDEgNDYgMCA0MS41ODY4IDAgMzYuMTQyOVY5Ljg1NzE0WiIgZmlsbD0iIzNEN0JGNSIvPgo8cGF0aCBkPSJNMjIuNjcwMSAxNi4wOTg2QzIyLjI4MTYgMTYuMDk3NyAyMS44OTY3IDE2LjE3NzYgMjEuNTM3NSAxNi4zMzM3QzIxLjE3ODQgMTYuNDg5OCAyMC44NTIxIDE2LjcxOTEgMjAuNTc3MyAxNy4wMDgzQzIwLjMwMjYgMTcuMjk3NSAyMC4wODQ4IDE3LjY0MDkgMTkuOTM2NSAxOC4wMTg5QzE5Ljc4ODIgMTguMzk3IDE5LjcxMjMgMTguODAyMSAxOS43MTMxIDE5LjIxMTFWMzcuMjA5MUMxOS43MTcyIDM3LjM2MDMgMTkuNzc2MSAzNy41MDQxIDE5Ljg3NzcgMzcuNjExMUMxOS45NzkzIDM3LjcxOCAyMC4xMTU5IDM3Ljc4IDIwLjI1OTUgMzcuNzg0MlYzNy43ODQyQzIxLjY4MjMgMzcuNzgxNiAyMy4wNDYxIDM3LjE4NTUgMjQuMDUyMiAzNi4xMjY1QzI1LjA1ODIgMzUuMDY3NSAyNS42MjQ2IDMzLjYzMjEgMjUuNjI3MSAzMi4xMzQ1VjE5LjIxMTFDMjUuNjI4IDE4LjgwMjEgMjUuNTUyMSAxOC4zOTcgMjUuNDAzOCAxOC4wMTg5QzI1LjI1NTUgMTcuNjQwOSAyNS4wMzc3IDE3LjI5NzUgMjQuNzYyOSAxNy4wMDgzQzI0LjQ4ODIgMTYuNzE5MSAyNC4xNjE5IDE2LjQ4OTggMjMuODAyNyAxNi4zMzM3QzIzLjQ0MzYgMTYuMTc3NiAyMy4wNTg3IDE2LjA5NzcgMjIuNjcwMSAxNi4wOTg2VjE2LjA5ODZaIiBmaWxsPSIjRkVGQkYyIi8+CjxwYXRoIGQ9Ik0xMi44MTM3IDIzLjk4NDRDMTIuNDI1MSAyMy45ODM1IDEyLjA0MDIgMjQuMDY2OCAxMS42ODExIDI0LjIyOTdDMTEuMzIyIDI0LjM5MjUgMTAuOTk1NiAyNC42MzE2IDEwLjcyMDkgMjQuOTMzM0MxMC40NDYxIDI1LjIzNSAxMC4yMjg0IDI1LjU5MzQgMTAuMDgwMSAyNS45ODc3QzkuOTMxNzYgMjYuMzgyMSA5Ljg1NTg1IDI2LjgwNDggOS44NTY3IDI3LjIzMTRWMzcuMTg0M0M5Ljg2MDc0IDM3LjM0MiA5LjkxOTYxIDM3LjQ5MjEgMTAuMDIxMiAzNy42MDM3QzEwLjEyMjggMzcuNzE1MiAxMC4yNTk1IDM3Ljc3OTkgMTAuNDAzMSAzNy43ODQzVjM3Ljc4NDNDMTEuODI1OSAzNy43ODE1IDEzLjE4OTcgMzcuMTU5NiAxNC4xOTU3IDM2LjA1NDlDMTUuMjAxOCAzNC45NTAxIDE1Ljc2ODEgMzMuNDUyNiAxNS43NzA3IDMxLjg5MDJWMjcuMjMxNEMxNS43NzE1IDI2LjgwNDggMTUuNjk1NiAyNi4zODIxIDE1LjU0NzMgMjUuOTg3N0MxNS4zOTkgMjUuNTkzNCAxNS4xODEyIDI1LjIzNSAxNC45MDY1IDI0LjkzMzNDMTQuNjMxNyAyNC42MzE2IDE0LjMwNTQgMjQuMzkyNSAxMy45NDYzIDI0LjIyOTdDMTMuNTg3MSAyNC4wNjY4IDEzLjIwMjIgMjMuOTgzNSAxMi44MTM3IDIzLjk4NDRWMjMuOTg0NFoiIGZpbGw9IiNGRUZCRjIiLz4KPHBhdGggZD0iTTMyLjUyNzEgOC4yMTM4N0MzMi4xMzg1IDguMjEyOTggMzEuNzUzNiA4LjI5MzQzIDMxLjM5NDUgOC40NTA2M0MzMS4wMzUzIDguNjA3ODIgMzAuNzA5IDguODM4NjYgMzAuNDM0MyA5LjEyOTg4QzMwLjE1OTUgOS40MjExMSAyOS45NDE3IDkuNzY2OTggMjkuNzkzNCAxMC4xNDc3QzI5LjY0NTEgMTAuNTI4MyAyOS41NjkyIDEwLjkzNjMgMjkuNTcwMSAxMS4zNDgyVjM3LjIwNkMyOS41NzQxIDM3LjM1ODIgMjkuNjMzIDM3LjUwMzEgMjkuNzM0NiAzNy42MTA4QzI5LjgzNjIgMzcuNzE4NSAyOS45NzI4IDM3Ljc4MDkgMzAuMTE2NSAzNy43ODUyQzMxLjUzOTMgMzcuNzgyNCAzMi45MDMxIDM3LjE4MjIgMzMuOTA5MSAzNi4xMTU4QzM0LjkxNTIgMzUuMDQ5NCAzNS40ODE1IDMzLjYwMzggMzUuNDg0MSAzMi4wOTU3VjExLjM0ODJDMzUuNDg0OSAxMC45MzYzIDM1LjQwOSAxMC41MjgzIDM1LjI2MDcgMTAuMTQ3N0MzNS4xMTI0IDkuNzY2OTggMzQuODk0NiA5LjQyMTExIDM0LjYxOTkgOS4xMjk4OEMzNC4zNDUxIDguODM4NjYgMzQuMDE4OCA4LjYwNzgyIDMzLjY1OTcgOC40NTA2M0MzMy4zMDA1IDguMjkzNDMgMzIuOTE1NiA4LjIxMjk4IDMyLjUyNzEgOC4yMTM4N1Y4LjIxMzg3WiIgZmlsbD0iI0ZFRkJGMiIvPgo8L3N2Zz4K"); /***/ }, /***/ "./resources/img/logo-lw.svg" /*!***********************************!*\ !*** ./resources/img/logo-lw.svg ***! \***********************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoLw), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _g; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoLw = function SvgLogoLw(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 103, height: 23 }, props), _g || (_g = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("g", { fill: "#041C1E", fillRule: "evenodd" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { d: "M0 14.754c0 .138.111.25.249.25h9.63a.25.25 0 0 0 .248-.25V13.27a.25.25 0 0 0-.248-.25H2.337V.25A.25.25 0 0 0 2.09 0H.249A.25.25 0 0 0 0 .25zM11.554 2.63c0 .138.111.25.249.25h1.806a.25.25 0 0 0 .249-.25V.508a.25.25 0 0 0-.249-.25h-1.806a.25.25 0 0 0-.249.25zm.037 12.124c0 .138.11.25.248.25h1.763a.25.25 0 0 0 .249-.25V4.494a.25.25 0 0 0-.25-.252H11.84a.25.25 0 0 0-.248.251zm14.575-10.26a.25.25 0 0 0-.25-.252h-1.711a.25.25 0 0 0-.249.251v.939c-.591-.759-1.644-1.423-3.363-1.423s-2.62.474-3.519 1.43c-.89.956-1.412 2.362-1.412 4.192s.521 3.225 1.412 4.181 2.133 1.43 3.519 1.43 2.738-.654 3.313-1.361v4.913c0 .14.11.25.248.25h1.763a.25.25 0 0 0 .249-.25zm11.701 0a.25.25 0 0 0-.248-.252h-1.763a.25.25 0 0 0-.249.251v5.923c0 1.01-.326 1.733-.82 2.207-.498.474-1.174.725-1.928.725-.753 0-1.19-.173-1.54-.492-.35-.318-.573-.827-.573-1.578V4.49a.25.25 0 0 0-.248-.25h-1.763a.25.25 0 0 0-.249.25v6.899c0 1.233.387 2.206 1.096 2.863.703.654 1.696.982 2.85.982s1.85-.267 2.405-.637c.35-.233.608-.501.804-.75v.906c0 .138.111.25.249.25h1.712a.25.25 0 0 0 .248-.25V4.494zm2.405-1.864c0 .138.111.25.249.25h1.806a.25.25 0 0 0 .249-.25V.508a.25.25 0 0 0-.249-.25h-1.806a.25.25 0 0 0-.249.25zm.024 12.124c0 .138.112.25.25.25h1.762a.25.25 0 0 0 .249-.25V4.494a.25.25 0 0 0-.25-.252h-1.762a.25.25 0 0 0-.249.251zM54.874.25A.25.25 0 0 0 54.625 0h-1.762a.25.25 0 0 0-.25.25v5.124c-.571-.708-1.59-1.363-3.312-1.363s-2.62.475-3.518 1.43c-.891.957-1.413 2.363-1.413 4.192s.522 3.226 1.413 4.182c.89.956 2.132 1.43 3.518 1.43s2.765-.664 3.364-1.423v.94c0 .138.11.25.248.25h1.712a.25.25 0 0 0 .249-.25zm6.788.301v.061l3.45 14.202c.027.112.128.19.24.19h2.267a.25.25 0 0 0 .239-.18l3.149-11.298 3.148 11.297c.034.112.128.18.24.18h2.276a.246.246 0 0 0 .24-.19L80.36.614V.251A.246.246 0 0 0 80.115 0h-1.763a.24.24 0 0 0-.239.19L75.416 11.7 72.24.18a.24.24 0 0 0-.239-.18h-1.943a.25.25 0 0 0-.24.18L66.627 11.7 63.93.19A.246.246 0 0 0 63.69 0h-1.772a.25.25 0 0 0-.25.25v.302h-.009zm28.493 9.701a.25.25 0 0 0 .249-.25v-.827c0-1.552-.42-2.854-1.258-3.768-.838-.915-2.072-1.414-3.63-1.414s-2.842.492-3.74 1.458c-.898.965-1.386 2.379-1.386 4.164 0 1.786.488 3.209 1.396 4.175s2.2 1.457 3.75 1.457 2.687-.492 3.431-1.173a3.93 3.93 0 0 0 1.224-2.19v-.345a.25.25 0 0 0-.248-.25h-1.575a.256.256 0 0 0-.248.207c-.068.44-.293.914-.703 1.277s-1.02.63-1.9.63c-.882 0-1.626-.329-2.116-.898-.454-.525-.736-1.294-.797-2.26h7.549v.01zm2.072 4.5c0 .14.111.251.249.251h1.712a.25.25 0 0 0 .248-.25v-.94c.592.76 1.645 1.424 3.357 1.424s2.62-.474 3.509-1.43 1.412-2.363 1.412-4.182-.521-3.233-1.412-4.192c-.891-.956-2.133-1.43-3.51-1.43s-2.737.654-3.312 1.362V.251A.25.25 0 0 0 94.23 0h-1.763a.25.25 0 0 0-.248.25v14.504h.01zM20.952 5.907c.908 0 1.652.329 2.166.94.522.612.838 1.544.838 2.775s-.316 2.155-.838 2.768c-.521.613-1.258.94-2.166.94s-1.651-.33-2.166-.94c-.521-.613-.838-1.535-.838-2.768s.317-2.165.838-2.776c.522-.613 1.258-.939 2.166-.939m28.709 0c.908 0 1.651.329 2.166.94.521.612.838 1.544.838 2.775s-.317 2.155-.838 2.768c-.522.613-1.258.94-2.166.94s-1.652-.33-2.166-.94c-.522-.613-.838-1.535-.838-2.768s.316-2.165.838-2.776c.521-.613 1.258-.939 2.166-.939m38.553 2.552h-5.557c.104-.759.377-1.389.797-1.827.471-.491 1.147-.793 2.055-.793s1.584.295 2.021.776c.404.44.633 1.07.676 1.847h.01zm9.226 4.882c-.915 0-1.651-.328-2.173-.939-.522-.613-.838-1.534-.838-2.768s.316-2.165.838-2.775c.522-.613 1.268-.94 2.173-.94.906 0 1.652.329 2.166.94.522.613.839 1.544.839 2.775s-.317 2.155-.839 2.768c-.521.614-1.258.94-2.166.94" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fillRule: "nonzero", d: "m77.008 18.646 1.618 2.708h.12v-2.708h.66v3.657h-1.002l-1.618-2.708h-.12v2.708h-.667v-3.657zM83.076 18.646v.587h-2.19v.922h1.927v.569h-1.927v.992h2.217v.587h-2.936v-3.657zM84.369 18.646l.932 1.302h.222l.915-1.302h.76l-1.257 1.803 1.335 1.854h-.83l-.986-1.355h-.232l-.949 1.355h-.76l1.301-1.854-1.292-1.803h.838zM89.36 18.595c1.026 0 1.702.492 1.702 1.43v.052h-.72v-.051c0-.536-.36-.803-.985-.803h-.128c-.615 0-.992.294-.992.914v.665c0 .647.377.931.992.931h.128c.626 0 .993-.267.993-.81v-.034h.72v.034c0 .956-.694 1.44-1.72 1.44h-.128c-1.002 0-1.72-.491-1.72-1.552v-.664c0-1.034.71-1.544 1.72-1.544h.128l.01-.01zM94.691 18.646v.587h-2.19v.922h1.927v.569h-1.927v.992h2.217v.587h-2.936v-3.657zM96.968 18.604c.915 0 1.54.397 1.54 1.122v.233h-.702v-.233c0-.37-.326-.552-.848-.552h-.094c-.531 0-.838.18-.838.457v.051c0 .312.266.38 1.13.535.969.18 1.413.458 1.413 1.07v.061c0 .604-.538 1.027-1.591 1.027h-.094c-1.063 0-1.609-.43-1.609-1.165v-.234h.703v.234c0 .44.316.603.915.603h.085c.582 0 .89-.156.89-.447v-.052c0-.294-.282-.406-1.137-.552-.898-.155-1.395-.396-1.395-1.034v-.068c0-.647.591-1.034 1.54-1.034h.095v-.017zM100.81 18.596c.916 0 1.54.396 1.54 1.121v.234h-.702v-.234c0-.37-.326-.552-.847-.552h-.094c-.532 0-.839.18-.839.457v.051c0 .312.266.38 1.13.536.969.18 1.413.457 1.413 1.07v.06c0 .604-.538 1.027-1.591 1.027h-.094c-1.063 0-1.609-.43-1.609-1.165v-.233h.703v.233c0 .44.317.603.915.603h.085c.582 0 .89-.155.89-.447v-.051c0-.295-.281-.407-1.136-.553-.9-.155-1.396-.396-1.396-1.033v-.069c0-.647.591-1.033 1.54-1.033h.095V18.6zM68.327 22.356v-3.708h1.318q.668-.002 1.002.241t.333.76c0 .345-.033.294-.094.413a.62.62 0 0 1-.292.275.9.9 0 0 1-.444.104v-.017c.309 0 .555.095.727.258s.265.38.265.647c0 .268-.11.596-.333.76-.222.172-.548.257-.959.257h-1.514zm.565-2.121h.753c.249 0 .437-.044.572-.14a.46.46 0 0 0 .206-.396.47.47 0 0 0-.198-.406q-.196-.13-.582-.129h-.754v1.078-.01zm0 1.612h.941q.347-.001.539-.146a.5.5 0 0 0 .198-.423.5.5 0 0 0-.198-.423q-.195-.157-.539-.156h-.941v1.148M72.48 22.356v-1.491l-1.291-2.217h.642l.925 1.657.932-1.657h.642l-1.291 2.217v1.49h-.556z" })))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAzcHgiIGhlaWdodD0iMjNweCIgdmlld0JveD0iMCAwIDEwMyAyMyIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDx0aXRsZT5Hcm91cDwvdGl0bGU+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iQXJ0Ym9hcmQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNzEuMDAwMDAwLCAtMTgxLjAwMDAwMCkiIGZpbGw9IiMwNDFDMUUiPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3MS4wMDAwMDAsIDE4MS4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0tNy4xMDU0MjczNmUtMTUsMTQuNzUzODUgQy03LjEwNTQyNzM2ZS0xNSwxNC44OTI0NSAwLjExMTA3NjE2LDE1LjAwNDM1IDAuMjQ4NzE0MTYsMTUuMDA0MzUgTDkuODc4NTI1MTYsMTUuMDA0MzUgQzEwLjAxNjEzNTIsMTUuMDA0MzUgMTAuMTI3MjM1MiwxNC44OTI0NSAxMC4xMjcyMzUyLDE0Ljc1Mzg1IEwxMC4xMjcyMzUyLDEzLjI2OTk1IEMxMC4xMjcyMzUyLDEzLjEzMTI1IDEwLjAxNjEzNTIsMTMuMDE5MzUgOS44Nzg1MjUxNiwxMy4wMTkzNSBMMi4zMzc0MjUxNiwxMy4wMTkzNSBMMi4zMzc0MjUxNiwwLjI1MDU2IEMyLjMzNzQyNTE2LDAuMTExOSAyLjIyNjM0NTE2LDAgMi4wODg3MTUxNiwwIEwwLjI0ODcxNDE2LDAgQzAuMTExMDc2MTYsMCAtNy4xMDU0MjczNmUtMTUsMC4xMTE5IC03LjEwNTQyNzM2ZS0xNSwwLjI1MDU2IEwtNy4xMDU0MjczNmUtMTUsMTQuNzUzODUgWiBNMTEuNTU0MzM1MiwyLjYyOTY2IEMxMS41NTQzMzUyLDIuNzY4MzIgMTEuNjY1NDM1MiwyLjg4MDIyIDExLjgwMzAzNTIsMi44ODAyMiBMMTMuNjA5MjM1MiwyLjg4MDIyIEMxMy43NDY4MzUyLDIuODgwMjIgMTMuODU3OTM1MiwyLjc2ODMyIDEzLjg1NzkzNTIsMi42Mjk2NiBMMTMuODU3OTM1MiwwLjUwODQyIEMxMy44NTc5MzUyLDAuMzY5NzYgMTMuNzQ2ODM1MiwwLjI1Nzg2IDEzLjYwOTIzNTIsMC4yNTc4NiBMMTEuODAzMDM1MiwwLjI1Nzg2IEMxMS42NjU0MzUyLDAuMjU3ODYgMTEuNTU0MzM1MiwwLjM2OTc2IDExLjU1NDMzNTIsMC41MDg0MiBMMTEuNTU0MzM1MiwyLjYyOTY2IFogTTExLjU5MDUzNTIsMTQuNzUzODUgQzExLjU5MDUzNTIsMTQuODkyNDUgMTEuNzAxNjM1MiwxNS4wMDQzNSAxMS44MzkyMzUyLDE1LjAwNDM1IEwxMy42MDE5MzUyLDE1LjAwNDM1IEMxMy43Mzk2MzUyLDE1LjAwNDM1IDEzLjg1MDczNTIsMTQuODkyNDUgMTMuODUwNzM1MiwxNC43NTM4NSBMMTMuODUwNzM1Miw0LjQ5MzA1IEMxMy44NTA3MzUyLDQuMzU0MzkgMTMuNzM5NjM1Miw0LjI0MjQ5IDEzLjYwMTkzNTIsNC4yNDI0OSBMMTEuODM5MjM1Miw0LjI0MjQ5IEMxMS43MDE2MzUyLDQuMjQyNDkgMTEuNTkwNTM1Miw0LjM1NDM5IDExLjU5MDUzNTIsNC40OTMwNSBMMTEuNTkwNTM1MiwxNC43NTM4NSBaIE0yNi4xNjU2MzUyLDQuNDkzMDUgQzI2LjE2NTYzNTIsNC4zNTQzOSAyNi4wNTQ1MzUyLDQuMjQyNDkgMjUuOTE2OTM1Miw0LjI0MjQ5IEwyNC4yMDQ5MzUyLDQuMjQyNDkgQzI0LjA2NzIzNTIsNC4yNDI0OSAyMy45NTYyMzUyLDQuMzU0MzkgMjMuOTU2MjM1Miw0LjQ5MzA1IEwyMy45NTYyMzUyLDUuNDMyMDQgQzIzLjM2NDYzNTIsNC42NzMwNiAyMi4zMTE4MzUyLDQuMDA4OTYgMjAuNTkyNTM1Miw0LjAwODk2IEMxOC44NzMyMzUyLDQuMDA4OTYgMTcuOTcyNjM1Miw0LjQ4MzMyIDE3LjA3NDMzNTIsNS40MzkzNCBDMTYuMTgzMzM1Miw2LjM5NTM2IDE1LjY2MTczNTIsNy44MDE0NSAxNS42NjE3MzUyLDkuNjMwNzUgQzE1LjY2MTczNTIsMTEuNDYwMDUgMTYuMTgzMzM1MiwxMi44NTYzNSAxNy4wNzQzMzUyLDEzLjgxMjQ1IEMxNy45NjUzMzUyLDE0Ljc2ODQ1IDE5LjIwNjUzNTIsMTUuMjQyNzUgMjAuNTkyNTM1MiwxNS4yNDI3NSBDMjEuOTc4NTM1MiwxNS4yNDI3NSAyMy4zMzA4MzUyLDE0LjU4ODQ1IDIzLjkwNTUzNTIsMTMuODgwNTUgTDIzLjkwNTUzNTIsMTguNzk0NDUgQzIzLjkwNTUzNTIsMTguOTMzMDUgMjQuMDE2NTM1MiwxOS4wNDQ5NSAyNC4xNTQyMzUyLDE5LjA0NDk1IEwyNS45MTY5MzUyLDE5LjA0NDk1IEMyNi4wNTQ1MzUyLDE5LjA0NDk1IDI2LjE2NTYzNTIsMTguOTMzMDUgMjYuMTY1NjM1MiwxOC43OTQ0NSBMMjYuMTY1NjM1Miw0LjQ5MzA1IFogTTM3Ljg2NzIzNTIsNC40OTMwNSBDMzcuODY3MjM1Miw0LjM1NDM5IDM3Ljc1NjIzNTIsNC4yNDI0OSAzNy42MTg1MzUyLDQuMjQyNDkgTDM1Ljg1NTgzNTIsNC4yNDI0OSBDMzUuNzE4MjM1Miw0LjI0MjQ5IDM1LjYwNzEzNTIsNC4zNTQzOSAzNS42MDcxMzUyLDQuNDkzMDUgTDM1LjYwNzEzNTIsMTAuNDE2NDUgQzM1LjYwNzEzNTIsMTEuNDI2MDUgMzUuMjgxMTM1MiwxMi4xNDg1NSAzNC43ODYxMzUyLDEyLjYyMjg1IEMzNC4yODg3MzUyLDEzLjA5NzI1IDMzLjYxMjUzNTIsMTMuMzQ3NzUgMzIuODU5MjM1MiwxMy4zNDc3NSBDMzIuMTA1ODM1MiwxMy4zNDc3NSAzMS42Njg3MzUyLDEzLjE3NTA1IDMxLjMxODYzNTIsMTIuODU2MzUgQzMwLjk2ODQzNTIsMTIuNTM3NzUgMzAuNzQ2MzM1MiwxMi4wMjkzNSAzMC43NDYzMzUyLDExLjI3NzY1IEwzMC43NDYzMzUyLDQuNDkwNjEgQzMwLjc0NjMzNTIsNC4zNTE5NSAzMC42MzUyMzUyLDQuMjQwMDUgMzAuNDk3NjM1Miw0LjI0MDA1IEwyOC43MzQ5MzUyLDQuMjQwMDUgQzI4LjU5NzIzNTIsNC4yNDAwNSAyOC40ODYxMzUyLDQuMzUxOTUgMjguNDg2MTM1Miw0LjQ5MDYxIEwyOC40ODYxMzUyLDExLjM4OTU1IEMyOC40ODYxMzUyLDEyLjYyMjg1IDI4Ljg3MjUzNTIsMTMuNTk1OTUgMjkuNTgyNDM1MiwxNC4yNTI3NSBDMzAuMjg1MTM1MiwxNC45MDcwNSAzMS4yNzc1MzUyLDE1LjIzNTQ1IDMyLjQzMTgzNTIsMTUuMjM1NDUgQzMzLjU4NjAzNTIsMTUuMjM1NDUgMzQuMjgxNDM1MiwxNC45Njc5NSAzNC44MzY4MzUyLDE0LjU5ODE1IEMzNS4xODY5MzUyLDE0LjM2NDY1IDM1LjQ0NTMzNTIsMTQuMDk3MDUgMzUuNjQwOTM1MiwxMy44NDg5NSBMMzUuNjQwOTM1MiwxNC43NTM4NSBDMzUuNjQwOTM1MiwxNC44OTI0NSAzNS43NTIwMzUyLDE1LjAwNDM1IDM1Ljg4OTYzNTIsMTUuMDA0MzUgTDM3LjYwMTYzNTIsMTUuMDA0MzUgQzM3LjczOTMzNTIsMTUuMDA0MzUgMzcuODUwMzM1MiwxNC44OTI0NSAzNy44NTAzMzUyLDE0Ljc1Mzg1IEwzNy44NTAzMzUyLDQuNDkzMDUgTDM3Ljg2NzIzNTIsNC40OTMwNSBaIE00MC4yNzIzMzUyLDIuNjI5NjYgQzQwLjI3MjMzNTIsMi43NjgzMiA0MC4zODMzMzUyLDIuODgwMjIgNDAuNTIxMDM1MiwyLjg4MDIyIEw0Mi4zMjcyMzUyLDIuODgwMjIgQzQyLjQ2NDgzNTIsMi44ODAyMiA0Mi41NzU5MzUyLDIuNzY4MzIgNDIuNTc1OTM1MiwyLjYyOTY2IEw0Mi41NzU5MzUyLDAuNTA4NDIgQzQyLjU3NTkzNTIsMC4zNjk3NiA0Mi40NjQ4MzUyLDAuMjU3ODYgNDIuMzI3MjM1MiwwLjI1Nzg2IEw0MC41MjEwMzUyLDAuMjU3ODYgQzQwLjM4MzMzNTIsMC4yNTc4NiA0MC4yNzIzMzUyLDAuMzY5NzYgNDAuMjcyMzM1MiwwLjUwODQyIEw0MC4yNzIzMzUyLDIuNjI5NjYgWiBNNDAuMjk2NDM1MiwxNC43NTM4NSBDNDAuMjk2NDM1MiwxNC44OTI0NSA0MC40MDc1MzUyLDE1LjAwNDM1IDQwLjU0NTEzNTIsMTUuMDA0MzUgTDQyLjMwNzkzNTIsMTUuMDA0MzUgQzQyLjQ0NTUzNTIsMTUuMDA0MzUgNDIuNTU2NjM1MiwxNC44OTI0NSA0Mi41NTY2MzUyLDE0Ljc1Mzg1IEw0Mi41NTY2MzUyLDQuNDkzMDUgQzQyLjU1NjYzNTIsNC4zNTQzOSA0Mi40NDU1MzUyLDQuMjQyNDkgNDIuMzA3OTM1Miw0LjI0MjQ5IEw0MC41NDUxMzUyLDQuMjQyNDkgQzQwLjQwNzUzNTIsNC4yNDI0OSA0MC4yOTY0MzUyLDQuMzU0MzkgNDAuMjk2NDM1Miw0LjQ5MzA1IEw0MC4yOTY0MzUyLDE0Ljc1Mzg1IFogTTU0Ljg3MzkzNTIsMC4yNTA1NiBDNTQuODczOTM1MiwwLjExMTkgNTQuNzYyOTM1MiwwIDU0LjYyNTIzNTIsMCBMNTIuODYyNTM1MiwwIEM1Mi43MjQ5MzUyLDAgNTIuNjEzODM1MiwwLjExMTkgNTIuNjEzODM1MiwwLjI1MDU2IEw1Mi42MTM4MzUyLDUuMzczNjYgQzUyLjA0MTUzNTIsNC42NjU3NiA1MS4wMjI1MzUyLDQuMDExMzkgNDkuMzAwODM1Miw0LjAxMTM5IEM0Ny41NzkxMzUyLDQuMDExMzkgNDYuNjgwOTM1Miw0LjQ4NTc1IDQ1Ljc4MjYzNTIsNS40NDE3NyBDNDQuODkxNjM1Miw2LjM5Nzc5IDQ0LjM3MDAzNTIsNy44MDM4NSA0NC4zNzAwMzUyLDkuNjMzMTUgQzQ0LjM3MDAzNTIsMTEuNDYyNTUgNDQuODkxNjM1MiwxMi44NTg4NSA0NS43ODI2MzUyLDEzLjgxNDg1IEM0Ni42NzM2MzUyLDE0Ljc3MDg1IDQ3LjkxNDgzNTIsMTUuMjQ1MjUgNDkuMzAwODM1MiwxNS4yNDUyNSBDNTAuNjg2OTM1MiwxNS4yNDUyNSA1Mi4wNjU3MzUyLDE0LjU4MTE1IDUyLjY2NDUzNTIsMTMuODIyMTUgTDUyLjY2NDUzNTIsMTQuNzYxMTUgQzUyLjY2NDUzNTIsMTQuODk5NzUgNTIuNzc1NjM1MiwxNS4wMTE2NSA1Mi45MTMyMzUyLDE1LjAxMTY1IEw1NC42MjUyMzUyLDE1LjAxMTY1IEM1NC43NjI5MzUyLDE1LjAxMTY1IDU0Ljg3MzkzNTIsMTQuODk5NzUgNTQuODczOTM1MiwxNC43NjExNSBMNTQuODczOTM1MiwwLjI1MDU2IFogTTYxLjY2MTczNTIsMC41NTIyIEw2MS42NjE3MzUyLDAuNjEzMDIgTDY1LjExMjMzNTIsMTQuODE0NjUgQzY1LjEzODgzNTIsMTQuOTI2NTUgNjUuMjQwMjM1MiwxNS4wMDQzNSA2NS4zNTEzMzUyLDE1LjAwNDM1IEw2Ny42MTg3MzUyLDE1LjAwNDM1IEM2Ny43Mjk4MzUyLDE1LjAwNDM1IDY3LjgzMzYzNTIsMTQuOTI2NTUgNjcuODU3ODM1MiwxNC44MjQzNSBMNzEuMDA2NTM1MiwzLjUyNzMgTDc0LjE1NTMzNTIsMTQuODI0MzUgQzc0LjE4OTEzNTIsMTQuOTM2MjUgNzQuMjgzMzM1MiwxNS4wMDQzNSA3NC4zOTQzMzUyLDE1LjAwNDM1IEw3Ni42NzE0MzUyLDE1LjAwNDM1IEM3Ni43ODI1MzUyLDE1LjAwNDM1IDc2Ljg4NjMzNTIsMTQuOTI2NTUgNzYuOTEwNTM1MiwxNC44MTQ2NSBMODAuMzYxMTczMywwLjYxMzAyIEw4MC4zNjExNzMzLDAuMjUwNTYgQzgwLjM2MzUzNTIsMC4xMTE5IDgwLjI1MjQzNTIsMCA4MC4xMTQ4MzUyLDAgTDc4LjM1MjAzNTIsMCBDNzguMjMxMzM1MiwwIDc4LjEzNzEzNTIsMC4wNzc4NCA3OC4xMTMwMzUyLDAuMTg5NzQgTDc1LjQxNTgzNTIsMTEuNzAwODUgTDcyLjI0MDQzNTIsMC4xODAwMSBDNzIuMjEzOTM1MiwwLjA2ODExIDcyLjExMjUzNTIsMCA3Mi4wMDE0MzUyLDAgTDcwLjA1NzYzNTIsMCBDNjkuOTQ2NTM1MiwwIDY5Ljg0MjYzNTIsMC4wNzc4NCA2OS44MTg1MzUyLDAuMTgwMDEgTDY2LjYyNjMzNTIsMTEuNzAwODUgTDYzLjkyOTAzNTIsMC4xODk3NCBDNjMuOTA0OTM1MiwwLjA3Nzg0IDYzLjgwMTEzNTIsMCA2My42OTAwMzUyLDAgTDYxLjkxNzYzNTIsMCBDNjEuNzgwMDM1MiwwIDYxLjY2ODkzNTIsMC4xMTE5IDYxLjY2ODkzNTIsMC4yNTA1NiBMNjEuNjY4OTM1MiwwLjU1MjIgTDYxLjY1OTIzNTIsMC41NTIyIEw2MS42NjE3MzUyLDAuNTUyMiBaIE05MC4xNTUxMzUyLDEwLjI1MzQ1IEM5MC4yOTI3MzUyLDEwLjI1MzQ1IDkwLjQwMzgzNTIsMTAuMTQxNTUgOTAuNDAzODM1MiwxMC4wMDI5NSBMOTAuNDAzODM1Miw5LjE3NTg1IEM5MC40MDM4MzUyLDcuNjIzODUgODkuOTgzNjM1Miw2LjMyMjM4IDg5LjE0NTczNTIsNS40MDc3MSBDODguMzA3ODM1Miw0LjQ5MzA1IDg3LjA3MzkzNTIsMy45OTQzNiA4NS41MTY0MzUyLDMuOTk0MzYgQzgzLjk1OTAzNTIsMy45OTQzNiA4Mi42NzQzMzUyLDQuNDg1NzUgODEuNzc2MTM1Miw1LjQ1MTUgQzgwLjg3NzgzNTIsNi40MTcyNSA4MC4zOTAwMzUyLDcuODMwNjUgODAuMzkwMDM1Miw5LjYxNjE1IEM4MC4zOTAwMzUyLDExLjQwMTY1IDgwLjg3NzgzNTIsMTIuODI0NzUgODEuNzg1NzM1MiwxMy43OTA1NSBDODIuNjkzNzM1MiwxNC43NTYyNSA4My45ODU1MzUyLDE1LjI0NzY1IDg1LjUzNTgzNTIsMTUuMjQ3NjUgQzg3LjA4NjAzNTIsMTUuMjQ3NjUgODguMjIzMzM1MiwxNC43NTYyNSA4OC45NjcwMzUyLDE0LjA3NTE1IEM4OS43MTA4MzUyLDEzLjQwMzc1IDkwLjA3MDYzNTIsMTIuNTU3MTUgOTAuMTkxMzM1MiwxMS44ODU3NSBMOTAuMTkxMzM1MiwxMS41NDAzNSBDOTAuMTkxMzM1MiwxMS40MDE2NSA5MC4wODAyMzUyLDExLjI4OTc1IDg5Ljk0MjYzNTIsMTEuMjg5NzUgTDg4LjM2ODIzNTIsMTEuMjg5NzUgQzg4LjI0NzUzNTIsMTEuMjg5NzUgODguMTQ2MDM1MiwxMS4zNzQ5NSA4OC4xMTk1MzUyLDExLjQ5NjU1IEM4OC4wNTE5MzUyLDExLjkzNjg1IDg3LjgyNzMzNTIsMTIuNDExMjUgODcuNDE2ODM1MiwxMi43NzM2NSBDODcuMDA2MzM1MiwxMy4xMzYxNSA4Ni4zOTc4MzUyLDEzLjQwMzc1IDg1LjUxNjQzNTIsMTMuNDAzNzUgQzg0LjYzNTEzNTIsMTMuNDAzNzUgODMuODkxNDM1MiwxMy4wNzUzNSA4My40MDEyMzUyLDEyLjUwNjA1IEM4Mi45NDcyMzUyLDExLjk4MDY1IDgyLjY2NDczNTIsMTEuMjExOTUgODIuNjA0MzM1MiwxMC4yNDYxNSBMOTAuMTUyNzM1MiwxMC4yNDYxNSBMOTAuMTUyNzM1MiwxMC4yNTU5NSBMOTAuMTU1MTM1MiwxMC4yNTM0NSBaIE05Mi4yMjY5MzUyLDE0Ljc1Mzg1IEM5Mi4yMjY5MzUyLDE0Ljg5MjQ1IDkyLjMzODAzNTIsMTUuMDA0MzUgOTIuNDc1NjM1MiwxNS4wMDQzNSBMOTQuMTg3NjM1MiwxNS4wMDQzNSBDOTQuMzI1MzM1MiwxNS4wMDQzNSA5NC40MzYzMzUyLDE0Ljg5MjQ1IDk0LjQzNjMzNTIsMTQuNzUzODUgTDk0LjQzNjMzNTIsMTMuODE0ODUgQzk1LjAyNzkzNTIsMTQuNTczODUgOTYuMDgwNzM1MiwxNS4yMzc5NSA5Ny43OTI4MzUyLDE1LjIzNzk1IEM5OS41MDQ4MzUyLDE1LjIzNzk1IDEwMC40MTI1MzUsMTQuNzYzNTUgMTAxLjMwMTUzNSwxMy44MDc1NSBDMTAyLjE4OTUzNSwxMi44NTE1NSAxMDIuNzEzNTM1LDExLjQ0NTQ1IDEwMi43MTM1MzUsOS42MjU4NSBDMTAyLjcxMzUzNSw3LjgwNjI1IDEwMi4xOTI1MzUsNi4zOTI5MiAxMDEuMzAxNTM1LDUuNDM0NDcgQzEwMC40MTA1MzUsNC40Nzg0NSA5OS4xNjkxMzUyLDQuMDA0MDkgOTcuNzkyODM1Miw0LjAwNDA5IEM5Ni40MTY0MzUyLDQuMDA0MDkgOTUuMDU0NTM1Miw0LjY1ODQ3IDk0LjQ3OTgzNTIsNS4zNjYzNiBMOTQuNDc5ODM1MiwwLjI1MDU2IEM5NC40Nzk4MzUyLDAuMTExOSA5NC4zNjg3MzUyLDAgOTQuMjMxMTM1MiwwIEw5Mi40NjgzMzUyLDAgQzkyLjMzMDczNTIsMCA5Mi4yMTk2MzUyLDAuMTExOSA5Mi4yMTk2MzUyLDAuMjUwNTYgTDkyLjIxOTYzNTIsMTQuNzUzODUgTDkyLjIyOTMzNTIsMTQuNzUzODUgTDkyLjIyNjkzNTIsMTQuNzUzODUgWiBNMjAuOTUyMzM1Miw1LjkwNjQgQzIxLjg2MDIzNTIsNS45MDY0IDIyLjYwMzkzNTIsNi4yMzQ4IDIzLjExODMzNTIsNi44NDUzOSBDMjMuNjM5ODM1Miw3LjQ1ODQxIDIzLjk1NjIzNTIsOC4zOTAxNSAyMy45NTYyMzUyLDkuNjIxMDUgQzIzLjk1NjIzNTIsMTAuODUxOTUgMjMuNjM5ODM1MiwxMS43NzYzNSAyMy4xMTgzMzUyLDEyLjM4OTM1IEMyMi41OTY3MzUyLDEzLjAwMjM1IDIxLjg2MDIzNTIsMTMuMzI4MzUgMjAuOTUyMzM1MiwxMy4zMjgzNSBDMjAuMDQ0NDM1MiwxMy4zMjgzNSAxOS4zMDA2MzUyLDEyLjk5OTk1IDE4Ljc4NjMzNTIsMTIuMzg5MzUgQzE4LjI2NDczNTIsMTEuNzc2MzUgMTcuOTQ4NDM1MiwxMC44NTQzNSAxNy45NDg0MzUyLDkuNjIxMDUgQzE3Ljk0ODQzNTIsOC4zODc2NSAxOC4yNjQ3MzUyLDcuNDU1OTggMTguNzg2MzM1Miw2Ljg0NTM5IEMxOS4zMDc5MzUyLDYuMjMyMzcgMjAuMDQ0NDM1Miw1LjkwNjQgMjAuOTUyMzM1Miw1LjkwNjQgWiBNNDkuNjYwNjM1Miw1LjkwNjQgQzUwLjU2ODUzNTIsNS45MDY0IDUxLjMxMjMzNTIsNi4yMzQ4IDUxLjgyNjYzNTIsNi44NDUzOSBDNTIuMzQ4MjM1Miw3LjQ1ODQxIDUyLjY2NDUzNTIsOC4zOTAxNSA1Mi42NjQ1MzUyLDkuNjIxMDUgQzUyLjY2NDUzNTIsMTAuODUxOTUgNTIuMzQ4MjM1MiwxMS43NzYzNSA1MS44MjY2MzUyLDEyLjM4OTM1IEM1MS4zMDUwMzUyLDEzLjAwMjM1IDUwLjU2ODUzNTIsMTMuMzI4MzUgNDkuNjYwNjM1MiwxMy4zMjgzNSBDNDguNzUyNzM1MiwxMy4zMjgzNSA0OC4wMDkwMzUyLDEyLjk5OTk1IDQ3LjQ5NDYzNTIsMTIuMzg5MzUgQzQ2Ljk3MzEzNTIsMTEuNzc2MzUgNDYuNjU2NzM1MiwxMC44NTQzNSA0Ni42NTY3MzUyLDkuNjIxMDUgQzQ2LjY1NjczNTIsOC4zODc2NSA0Ni45NzMxMzUyLDcuNDU1OTggNDcuNDk0NjM1Miw2Ljg0NTM5IEM0OC4wMTYyMzUyLDYuMjMyMzcgNDguNzUyNzM1Miw1LjkwNjQgNDkuNjYwNjM1Miw1LjkwNjQgWiBNODguMjEzNzM1Miw4LjQ1ODI1IEw4Mi42NTc0MzUyLDguNDU4MjUgQzgyLjc2MTMzNTIsNy42OTkyNSA4My4wMzQxMzUyLDcuMDY5MTkgODMuNDU0MzM1Miw2LjYzMTMyIEM4My45MjUyMzUyLDYuMTM5OTMgODQuNjAxMzM1Miw1LjgzODI5IDg1LjUwOTIzNTIsNS44MzgyOSBDODYuNDE3MTM1Miw1LjgzODI5IDg3LjA5MzIzNTIsNi4xMzI2MyA4Ny41MzAzMzUyLDYuNjE0MjkgQzg3LjkzMzUzNTIsNy4wNTQ2IDg4LjE2MjkzNTIsNy42ODQ2NSA4OC4yMDY0MzUyLDguNDYwNjUgTDg4LjIxNjEzNTIsOC40NjA2NSBMODguMjEzNzM1Miw4LjQ1ODI1IFogTTk3LjQ0MDIzNTIsMTMuMzQwNDUgQzk2LjUyNTAzNTIsMTMuMzQwNDUgOTUuNzg4NjM1MiwxMy4wMTIwNSA5NS4yNjcwMzUyLDEyLjQwMTQ1IEM5NC43NDU0MzUyLDExLjc4ODQ1IDk0LjQyOTEzNTIsMTAuODY2NTUgOTQuNDI5MTM1Miw5LjYzMzE1IEM5NC40MjkxMzUyLDguMzk5ODUgOTQuNzQ1NDM1Miw3LjQ2ODE0IDk1LjI2NzAzNTIsNi44NTc1NSBDOTUuNzg4NjM1Miw2LjI0NDUzIDk2LjUzNDczNTIsNS45MTg1NiA5Ny40NDAyMzUyLDUuOTE4NTYgQzk4LjM0NTczNTIsNS45MTg1NiA5OS4wOTE5MzUyLDYuMjQ2OTcgOTkuNjA2MjM1Miw2Ljg1NzU1IEMxMDAuMTI3NTM1LDcuNDcwNTcgMTAwLjQ0NDUzNSw4LjQwMjI1IDEwMC40NDQ1MzUsOS42MzMxNSBDMTAwLjQ0NDUzNSwxMC44NjQwNSAxMDAuMTI3NTM1LDExLjc4ODQ1IDk5LjYwNjIzNTIsMTIuNDAxNDUgQzk5LjA4NDYzNTIsMTMuMDE0NTUgOTguMzQ4MTM1MiwxMy4zNDA0NSA5Ny40NDAyMzUyLDEzLjM0MDQ1IFoiIGlkPSJTaGFwZSI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBvbHlnb24gaWQ9IlBhdGgiIGZpbGwtcnVsZT0ibm9uemVybyIgcG9pbnRzPSI3Ny4wMDgzMzUyIDE4LjY0NjQ1IDc4LjYyNjIzNTIgMjEuMzUzOTUgNzguNzQ2OTM1MiAyMS4zNTM5NSA3OC43NDY5MzUyIDE4LjY0NjQ1IDc5LjQwNjEzNTIgMTguNjQ2NDUgNzkuNDA2MTM1MiAyMi4zMDI3NSA3OC40MDQwMzUyIDIyLjMwMjc1IDc2Ljc4NjIzNTIgMTkuNTk1MjUgNzYuNjY1NDM1MiAxOS41OTUyNSA3Ni42NjU0MzUyIDIyLjMwMjc1IDc1Ljk5OTAzNTIgMjIuMzAyNzUgNzUuOTk5MDM1MiAxOC42NDY0NSI+PC9wb2x5Z29uPgogICAgICAgICAgICAgICAgPHBvbHlnb24gaWQ9IlBhdGgiIGZpbGwtcnVsZT0ibm9uemVybyIgcG9pbnRzPSI4My4wNzYyMzUyIDE4LjY0NjQ1IDgzLjA3NjIzNTIgMTkuMjMyNzUgODAuODg2MTM1MiAxOS4yMzI3NSA4MC44ODYxMzUyIDIwLjE1NDc1IDgyLjgxMzAzNTIgMjAuMTU0NzUgODIuODEzMDM1MiAyMC43MjM5NSA4MC44ODYxMzUyIDIwLjcyMzk1IDgwLjg4NjEzNTIgMjEuNzE2NDUgODMuMTAyNzM1MiAyMS43MTY0NSA4My4xMDI3MzUyIDIyLjMwMjc1IDgwLjE2NjUzNTIgMjIuMzAyNzUgODAuMTY2NTM1MiAxOC42NDY0NSI+PC9wb2x5Z29uPgogICAgICAgICAgICAgICAgPHBvbHlnb24gaWQ9IlBhdGgiIGZpbGwtcnVsZT0ibm9uemVybyIgcG9pbnRzPSI4NC4zNjg1MzUyIDE4LjY0NjQ1IDg1LjMwMDYzNTIgMTkuOTQ3OTUgODUuNTIyNzM1MiAxOS45NDc5NSA4Ni40Mzc5MzUyIDE4LjY0NjQ1IDg3LjE5ODUzNTIgMTguNjQ2NDUgODUuOTQwNTM1MiAyMC40NDkwNSA4Ny4yNzU4MzUyIDIyLjMwMjc1IDg2LjQ0NTEzNTIgMjIuMzAyNzUgODUuNDU5OTM1MiAyMC45NDc3NSA4NS4yMjgxMzUyIDIwLjk0Nzc1IDg0LjI3OTEzNTIgMjIuMzAyNzUgODMuNTE4NTM1MiAyMi4zMDI3NSA4NC44MjAwMzUyIDIwLjQ0OTA1IDgzLjUyODIzNTIgMTguNjQ2NDUgODQuMzY2MTM1MiAxOC42NDY0NSI+PC9wb2x5Z29uPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTg5LjM1OTgzNTIsMTguNTk1MjUgQzkwLjM4NjAzNTIsMTguNTk1MjUgOTEuMDYyMjM1MiwxOS4wODY1NSA5MS4wNjIyMzUyLDIwLjAyNTU1IEw5MS4wNjIyMzUyLDIwLjA3NjY1IEw5MC4zNDI2MzUyLDIwLjA3NjY1IEw5MC4zNDI2MzUyLDIwLjAyNTU1IEM5MC4zNDI2MzUyLDE5LjQ5MDQ1IDg5Ljk4MjgzNTIsMTkuMjIyODUgODkuMzU3NDM1MiwxOS4yMjI4NSBMODkuMjI5NDM1MiwxOS4yMjI4NSBDODguNjEzNzM1MiwxOS4yMjI4NSA4OC4yMzcwMzUyLDE5LjUxNzE1IDg4LjIzNzAzNTIsMjAuMTM3NDUgTDg4LjIzNzAzNTIsMjAuODAxNTUgQzg4LjIzNzAzNTIsMjEuNDQ4NjUgODguNjEzNzM1MiwyMS43MzMyNSA4OS4yMjk0MzUyLDIxLjczMzI1IEw4OS4zNTc0MzUyLDIxLjczMzI1IEM4OS45ODI4MzUyLDIxLjczMzI1IDkwLjM0OTgzNTIsMjEuNDY1NjUgOTAuMzQ5ODM1MiwyMC45MjMyNSBMOTAuMzQ5ODM1MiwyMC44ODkxNSBMOTEuMDY5NDM1MiwyMC44ODkxNSBMOTEuMDY5NDM1MiwyMC45MjMyNSBDOTEuMDY5NDM1MiwyMS44NzkyNSA5MC4zNzY0MzUyLDIyLjM2MzM1IDg5LjM1MDEzNTIsMjIuMzYzMzUgTDg5LjIyMjIzNTIsMjIuMzYzMzUgQzg4LjIyMDEzNTIsMjIuMzYzMzUgODcuNTAyOTM1MiwyMS44NzE5NSA4Ny41MDI5MzUyLDIwLjgxMTM1IEw4Ny41MDI5MzUyLDIwLjE0NzI1IEM4Ny41MDI5MzUyLDE5LjExMzM1IDg4LjIxMjgzNTIsMTguNjAyNTUgODkuMjIyMjM1MiwxOC42MDI1NSBMODkuMzUwMTM1MiwxOC42MDI1NSBMODkuMzU5ODM1MiwxOC41OTI3NSBMODkuMzU5ODM1MiwxOC41OTUyNSBaIiBpZD0iUGF0aCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cG9seWdvbiBpZD0iUGF0aCIgZmlsbC1ydWxlPSJub256ZXJvIiBwb2ludHM9Ijk0LjY5MTQzNTIgMTguNjQ2NDUgOTQuNjkxNDM1MiAxOS4yMzI3NSA5Mi41MDEzMzUyIDE5LjIzMjc1IDkyLjUwMTMzNTIgMjAuMTU0NzUgOTQuNDI4MjM1MiAyMC4xNTQ3NSA5NC40MjgyMzUyIDIwLjcyMzk1IDkyLjUwMTMzNTIgMjAuNzIzOTUgOTIuNTAxMzM1MiAyMS43MTY0NSA5NC43MTgwMzUyIDIxLjcxNjQ1IDk0LjcxODAzNTIgMjIuMzAyNzUgOTEuNzgxNzM1MiAyMi4zMDI3NSA5MS43ODE3MzUyIDE4LjY0NjQ1Ij48L3BvbHlnb24+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTYuOTY4MTM1MiwxOC42MDQ0NSBDOTcuODgzMjM1MiwxOC42MDQ0NSA5OC41MDg2MzUyLDE5LjAwMTA1IDk4LjUwODYzNTIsMTkuNzI1OTUgTDk4LjUwODYzNTIsMTkuOTU5NDUgTDk3LjgwNjAzNTIsMTkuOTU5NDUgTDk3LjgwNjAzNTIsMTkuNzI1OTUgQzk3LjgwNjAzNTIsMTkuMzU2MTUgOTcuNDgwMDM1MiwxOS4xNzM3NSA5Ni45NTg0MzUyLDE5LjE3Mzc1IEw5Ni44NjQyMzUyLDE5LjE3Mzc1IEM5Ni4zMzMwMzUyLDE5LjE3Mzc1IDk2LjAyNjMzNTIsMTkuMzUzNzUgOTYuMDI2MzM1MiwxOS42MzEwNSBMOTYuMDI2MzM1MiwxOS42ODIxNSBDOTYuMDI2MzM1MiwxOS45OTM1NSA5Ni4yOTE5MzUyLDIwLjA2MTY1IDk3LjE1NjQzNTIsMjAuMjE3MzUgQzk4LjEyNDczNTIsMjAuMzk3MzUgOTguNTY5MDM1MiwyMC42NzQ2NSA5OC41NjkwMzUyLDIxLjI4NzY1IEw5OC41NjkwMzUyLDIxLjM0ODQ1IEM5OC41NjkwMzUyLDIxLjk1MTc1IDk4LjAzMDUzNTIsMjIuMzc1MDUgOTYuOTc3NzM1MiwyMi4zNzUwNSBMOTYuODgzNTM1MiwyMi4zNzUwNSBDOTUuODIxMTM1MiwyMi4zNzUwNSA5NS4yNzU0MzUyLDIxLjk0NDQ1IDk1LjI3NTQzNTIsMjEuMjA5ODUgTDk1LjI3NTQzNTIsMjAuOTc2MjUgTDk1Ljk3ODAzNTIsMjAuOTc2MjUgTDk1Ljk3ODAzNTIsMjEuMjA5ODUgQzk1Ljk3ODAzNTIsMjEuNjUwMTUgOTYuMjk0NDM1MiwyMS44MTMxNSA5Ni44OTMyMzUyLDIxLjgxMzE1IEw5Ni45Nzc3MzUyLDIxLjgxMzE1IEM5Ny41NTk3MzUyLDIxLjgxMzE1IDk3Ljg2ODczNTIsMjEuNjU3NDUgOTcuODY4NzM1MiwyMS4zNjU1NSBMOTcuODY4NzM1MiwyMS4zMTQ0NSBDOTcuODY4NzM1MiwyMS4wMjAwNSA5Ny41ODYyMzUyLDIwLjkwODE1IDk2LjczMTQzNTIsMjAuNzYyMjUgQzk1LjgzMzEzNTIsMjAuNjA2NTUgOTUuMzM1NzM1MiwyMC4zNjU3NSA5NS4zMzU3MzUyLDE5LjcyODM1IEw5NS4zMzU3MzUyLDE5LjY2MDI1IEM5NS4zMzU3MzUyLDE5LjAxMzE1IDk1LjkyNzMzNTIsMTguNjI2MzUgOTYuODc2MzM1MiwxOC42MjYzNSBMOTYuOTcwNTM1MiwxOC42MjYzNSBMOTYuOTcwNTM1MiwxOC42MDkzNSBMOTYuOTY4MTM1MiwxOC42MDQ0NSBaIiBpZD0iUGF0aCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTAwLjgwOTUzNSwxOC41OTU3NSBDMTAxLjcyNTUzNSwxOC41OTU3NSAxMDIuMzUwNTM1LDE4Ljk5MjI1IDEwMi4zNTA1MzUsMTkuNzE3MTUgTDEwMi4zNTA1MzUsMTkuOTUwNjUgTDEwMS42NDc1MzUsMTkuOTUwNjUgTDEwMS42NDc1MzUsMTkuNzE3MTUgQzEwMS42NDc1MzUsMTkuMzQ3MzUgMTAxLjMyMTUzNSwxOS4xNjQ5NSAxMDAuODAwNTM1LDE5LjE2NDk1IEwxMDAuNzA2NTM1LDE5LjE2NDk1IEMxMDAuMTc0NTM1LDE5LjE2NDk1IDk5Ljg2ODEzNTIsMTkuMzQ0OTUgOTkuODY4MTM1MiwxOS42MjIyNSBMOTkuODY4MTM1MiwxOS42NzMzNSBDOTkuODY4MTM1MiwxOS45ODQ3NSAxMDAuMTMzNTM1LDIwLjA1Mjg1IDEwMC45OTg1MzUsMjAuMjA4NTUgQzEwMS45NjY1MzUsMjAuMzg4NTUgMTAyLjQxMDUzNSwyMC42NjU4NSAxMDIuNDEwNTM1LDIxLjI3ODg1IEwxMDIuNDEwNTM1LDIxLjMzOTY1IEMxMDIuNDEwNTM1LDIxLjk0Mjk1IDEwMS44NzI1MzUsMjIuMzY2MjUgMTAwLjgxOTUzNSwyMi4zNjYyNSBMMTAwLjcyNTUzNSwyMi4zNjYyNSBDOTkuNjYyOTM1MiwyMi4zNjYyNSA5OS4xMTcyMzUyLDIxLjkzNTY1IDk5LjExNzIzNTIsMjEuMjAxMDUgTDk5LjExNzIzNTIsMjAuOTY3NTUgTDk5LjgxOTgzNTIsMjAuOTY3NTUgTDk5LjgxOTgzNTIsMjEuMjAxMDUgQzk5LjgxOTgzNTIsMjEuNjQxMzUgMTAwLjEzNjUzNSwyMS44MDQzNSAxMDAuNzM0NTM1LDIxLjgwNDM1IEwxMDAuODE5NTM1LDIxLjgwNDM1IEMxMDEuNDAxNTM1LDIxLjgwNDM1IDEwMS43MTA1MzUsMjEuNjQ4NjUgMTAxLjcxMDUzNSwyMS4zNTY3NSBMMTAxLjcxMDUzNSwyMS4zMDU2NSBDMTAxLjcxMDUzNSwyMS4wMTEyNSAxMDEuNDI4NTM1LDIwLjg5OTM1IDEwMC41NzM1MzUsMjAuNzUzNDUgQzk5LjY3NDkzNTIsMjAuNTk3NzUgOTkuMTc3NTM1MiwyMC4zNTY5NSA5OS4xNzc1MzUyLDE5LjcxOTU1IEw5OS4xNzc1MzUyLDE5LjY1MTQ1IEM5OS4xNzc1MzUyLDE5LjAwNDM1IDk5Ljc2OTEzNTIsMTguNjE3NTUgMTAwLjcxODUzNSwxOC42MTc1NSBMMTAwLjgxMjUzNSwxOC42MTc1NSBMMTAwLjgxMjUzNSwxOC42MDA1NSBMMTAwLjgwOTUzNSwxOC41OTU3NSBaIiBpZD0iUGF0aCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNjguMzI2NjM1MiwyMi4zNTU3NSBMNjguMzI2NjM1MiwxOC42NDg0NSBMNjkuNjQ1MDM1MiwxOC42NDg0NSBDNzAuMDg5NDM1MiwxOC42NDg0NSA3MC40MjUwMzUyLDE4LjcyNjI1IDcwLjY0NzEzNTIsMTguODg5MjUgQzcwLjg2OTMzNTIsMTkuMDUyMjUgNzAuOTgwNDM1MiwxOS4zMDI4NSA3MC45ODA0MzUyLDE5LjY0ODI1IEM3MC45ODA0MzUyLDE5Ljk5MzY1IDcwLjk0NjYzNTIsMTkuOTQyNTUgNzAuODg2MjM1MiwyMC4wNjE3NSBDNzAuODE4NjM1MiwyMC4xODM0NSA3MC43MjQ0MzUyLDIwLjI3ODI1IDcwLjU5NDAzNTIsMjAuMzM2NjUgQzcwLjQ2NjAzNTIsMjAuNDA0NzUgNzAuMzIxMjM1MiwyMC40NDEyNSA3MC4xNDk3MzUyLDIwLjQ0MTI1IEw3MC4xNDk3MzUyLDIwLjQyNDI1IEM3MC40NTg4MzUyLDIwLjQyNDI1IDcwLjcwNTEzNTIsMjAuNTE5MTUgNzAuODc2NTM1MiwyMC42ODIxNSBDNzEuMDQ4MDM1MiwyMC44NDUwNSA3MS4xNDIyMzUyLDIxLjA2MTU1IDcxLjE0MjIzNTIsMjEuMzI5MTUgQzcxLjE0MjIzNTIsMjEuNTk2NzUgNzEuMDMxMTM1MiwyMS45MjUxNSA3MC44MDg5MzUyLDIyLjA4ODE1IEM3MC41ODY4MzUyLDIyLjI2MDg1IDcwLjI2MDgzNTIsMjIuMzQ2MDUgNjkuODUwMzM1MiwyMi4zNDYwNSBMNjguMzM2MzM1MiwyMi4zNDYwNSBMNjguMzI2NjM1MiwyMi4zNTU3NSBaIE02OC44OTE3MzUyLDIwLjIzNDU1IEw2OS42NDUwMzUyLDIwLjIzNDU1IEM2OS44OTM4MzUyLDIwLjIzNDU1IDcwLjA4MjEzNTIsMjAuMTkwNzUgNzAuMjE3MzM1MiwyMC4wOTU4NSBDNzAuMzUyNjM1MiwyMC4wMDA5NSA3MC40MjI2MzUyLDE5Ljg3MjA1IDcwLjQyMjYzNTIsMTkuNjk5MzUgQzcwLjQyMjYzNTIsMTkuNTI2NjUgNzAuMzU1MDM1MiwxOS4zODA2NSA3MC4yMjQ2MzUyLDE5LjI5MzA1IEM3MC4wOTQyMzUyLDE5LjIwNTU1IDY5Ljg5ODYzNTIsMTkuMTY0MTUgNjkuNjQyNjM1MiwxOS4xNjQxNSBMNjguODg5MjM1MiwxOS4xNjQxNSBMNjguODg5MjM1MiwyMC4yNDE4NSBMNjguODg5MjM1MiwyMC4yMzIwNSBMNjguODkxNzM1MiwyMC4yMzQ1NSBaIE02OC44OTE3MzUyLDIxLjg0NzM1IEw2OS44MzM0MzUyLDIxLjg0NzM1IEM3MC4wNjUyMzUyLDIxLjg0NzM1IDcwLjI0MzkzNTIsMjEuNzk2MjUgNzAuMzcxOTM1MiwyMS43MDEzNSBDNzAuNDk5OTM1MiwyMS42MDY1NSA3MC41Njk5MzUyLDIxLjQ2Nzg1IDcwLjU2OTkzNTIsMjEuMjc4MDUgQzcwLjU2OTkzNTIsMjEuMDg4MzUgNzAuNTAyMzM1MiwyMC45NTk0NSA3MC4zNzE5MzUyLDIwLjg1NDg1IEM3MC4yNDE1MzUyLDIwLjc1MDI1IDcwLjA2MjgzNTIsMjAuNjk5MTUgNjkuODMzNDM1MiwyMC42OTkxNSBMNjguODkxNzM1MiwyMC42OTkxNSBMNjguODkxNzM1MiwyMS44NDQ4NSBMNjguODkxNzM1MiwyMS44NDczNSBaIiBpZD0iU2hhcGUiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBvbHlnb24gaWQ9IlBhdGgiIGZpbGwtcnVsZT0ibm9uemVybyIgcG9pbnRzPSI3Mi40ODA4MzUyIDIyLjM1NTc1IDcyLjQ4MDgzNTIgMjAuODY0NTUgNzEuMTg4OTM1MiAxOC42NDg0NSA3MS44MzEyMzUyIDE4LjY0ODQ1IDcyLjc1NjEzNTIgMjAuMzA1MDUgNzMuNjg4MTM1MiAxOC42NDg0NSA3NC4zMzA0MzUyIDE4LjY0ODQ1IDczLjAzODYzNTIgMjAuODY0NTUgNzMuMDM4NjM1MiAyMi4zNTU3NSA3Mi40ODMyMzUyIDIyLjM1NTc1Ij48L3BvbHlnb24+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="); /***/ }, /***/ "./resources/img/logo-nexcess.svg" /*!****************************************!*\ !*** ./resources/img/logo-nexcess.svg ***! \****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoNexcess), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path, _g, _defs; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoNexcess = function SvgLogoNexcess(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 72, height: 72, fill: "none" }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("g", { clipPath: "url(#logo-nexcess_svg__a)" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("g", { clipPath: "url(#logo-nexcess_svg__b)" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("mask", { id: "logo-nexcess_svg__c", width: 72, height: 72, x: 0, y: 0, maskUnits: "userSpaceOnUse", style: { maskType: "luminance" } }, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#fff", d: "M72 0H0v72h72z" }))), _g || (_g = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("g", { mask: "url(#logo-nexcess_svg__c)" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#3D7BF5", d: "m19.807 52.542-.015.03-.084.13c-.075.105-.151.196-.227.294.114-.144.235-.287.348-.431h-.015v-.015zm-.015.03-.084.13c-.075.105-.151.196-.227.294.114-.144.235-.287.348-.431h-.015l-.015.015h-.008zm45.576-35.086c-3.958-3.02-9.581-2.384-12.745 1.362a4.33 4.33 0 0 1 3.164-1.377c2.353 0 3.45 1.611 3.814 2.308s1.052 2.52-.318 4.427l-.113.167L43.01 46.979l-1.513-8.416-.583-3.254-2.468-13.66-.794-4.42-.946-5.23H26.058L5.124 41.303l-.53.742c-.053.083-.113.159-.174.242A9.16 9.16 0 0 0 6.774 54.23c3.852 2.944 9.286 2.422 12.503-1.052a4.25 4.25 0 0 1-3.088 1.302c-2.369 0-3.466-1.62-3.822-2.316-.363-.689-1.052-2.513.318-4.428l.287-.393.016-.03 15.961-22.335 1.521 8.424.583 3.254 3.27 18.081h-.008l.946 5.222H45.91l21.123-29.562.34-.484c.076-.114.152-.212.228-.333a9.19 9.19 0 0 0-2.24-12.11zM19.807 52.542l-.015.03-.084.13c-.075.105-.151.196-.227.294.114-.144.235-.287.348-.431h-.015v-.015z" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#0A55CC", d: "m30.834 54.124-3.02 4.269a14.3 14.3 0 0 1-11.61 5.97c-5.35 0-10.202-2.936-12.647-7.65a14.04 14.04 0 0 1 .87-14.426A9.16 9.16 0 0 0 6.783 54.23c3.852 2.944 9.286 2.422 12.503-1.052.052-.045.105-.106.158-.159q-.002-.024.03-.038c.114-.144.235-.287.349-.431h-.015l8.567-12.087 2.467 13.661zM67.616 29.587a9.19 9.19 0 0 0-2.24-12.109c-3.958-3.02-9.582-2.384-12.745 1.362-.084.106-.174.205-.25.31-.03.038-.053.069-.083.114l-8.666 12.238-2.467-13.668 3.02-4.269a14.27 14.27 0 0 1 11.617-5.971c5.343 0 10.187 2.936 12.64 7.651a14.04 14.04 0 0 1-.81 14.342z" }))))), _defs || (_defs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("defs", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("clipPath", { id: "logo-nexcess_svg__a" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#fff", d: "M0 0h72v72H0z" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("clipPath", { id: "logo-nexcess_svg__b" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#fff", d: "M0 0h72v72H0z" }))))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzIiIGhlaWdodD0iNzIiIHZpZXdCb3g9IjAgMCA3MiA3MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE2ODZfMjk2KSI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMV8xNjg2XzI5NikiPgo8bWFzayBpZD0ibWFzazBfMTY4Nl8yOTYiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iNzIiIGhlaWdodD0iNzIiPgo8cGF0aCBkPSJNNzIgMEgwVjcySDcyVjBaIiBmaWxsPSJ3aGl0ZSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMTY4Nl8yOTYpIj4KPHBhdGggZD0iTTE5LjgwNjcgNTIuNTQyM0wxOS43OTE1IDUyLjU3MjVMMTkuNzA4MyA1Mi43MDEyQzE5LjYzMjYgNTIuODA3MSAxOS41NTcgNTIuODk3OSAxOS40ODEyIDUyLjk5NjRDMTkuNTk0OCA1Mi44NTI1IDE5LjcxNTkgNTIuNzA4OCAxOS44Mjk0IDUyLjU2NDlIMTkuODE0M1Y1Mi41NDk3TDE5LjgwNjcgNTIuNTQyM1pNMTkuNzkxNSA1Mi41NzI1TDE5LjcwODMgNTIuNzAxMkMxOS42MzI2IDUyLjgwNzEgMTkuNTU3IDUyLjg5NzkgMTkuNDgxMiA1Mi45OTY0QzE5LjU5NDggNTIuODUyNSAxOS43MTU5IDUyLjcwODggMTkuODI5NCA1Mi41NjQ5SDE5LjgxNDNMMTkuNzk5MSA1Mi41ODAxSDE5Ljc5MTVWNTIuNTcyNVpNNjUuMzY4MSAxNy40ODU2QzYxLjQwOTkgMTQuNDY1OCA1NS43ODY2IDE1LjEwMTYgNTIuNjIzMSAxOC44NDhDNTMuNDMyOCAxNy45Nzc1IDU0LjU4MzMgMTcuNDcwNiA1NS43ODY2IDE3LjQ3MDZDNTguMTQwNCAxNy40NzA2IDU5LjIzNzggMTkuMDgyNSA1OS42MDExIDE5Ljc3ODhDNTkuOTY0MyAyMC40NzUxIDYwLjY1MzEgMjIuMjk5MSA1OS4yODMyIDI0LjIwNjNMNTkuMTY5NiAyNC4zNzI4TDQzLjAxMTIgNDYuOTc5NEw0MS40OTc2IDM4LjU2MzVMNDAuOTE0OCAzNS4zMDkxTDM4LjQ0NzUgMjEuNjQ4MkwzNy42NTI5IDE3LjIyODNMMzYuNzA2NyAxMS45OTg2SDI2LjA1ODJMNS4xMjQwNyA0MS4zMDMzTDQuNTk0MyA0Mi4wNDQ5QzQuNTQxMzEgNDIuMTI4MiA0LjQ4MDc3IDQyLjIwMzggNC40MjAyMiA0Mi4yODcxQzIuMDg5MTYgNDYuMjQ1NCAzLjAzNTIxIDUxLjM4NDIgNi43NzM5NyA1NC4yMjk5QzEwLjYyNjMgNTcuMTc0MSAxNi4wNjAzIDU2LjY1MTggMTkuMjc2OCA1My4xNzc5QzE4LjQ3NDcgNTQuMDE4IDE3LjM2MjEgNTQuNDc5NyAxNi4xODkgNTQuNDc5N0MxMy44MjAxIDU0LjQ3OTcgMTIuNzIyNyA1Mi44NjAxIDEyLjM2NyA1Mi4xNjM5QzEyLjAwMzcgNTEuNDc1MSAxMS4zMTUgNDkuNjUxMiAxMi42ODQ5IDQ3LjczNjNMMTIuOTcyNSA0Ny4zNDI4TDEyLjk4NzYgNDcuMzEyNEwyOC45NDkzIDI0Ljk3ODJMMzAuNDcwNCAzMy40MDE4TDMxLjA1MzIgMzYuNjU2M0wzNC4zMjI3IDU0LjczN0gzNC4zMTUxTDM1LjI2MTMgNTkuOTU5M0g0NS45MUw2Ny4wMzMyIDMwLjM5NzJMNjcuMzczNyAyOS45MTI5QzY3LjQ0OTUgMjkuNzk5MyA2Ny41MjUxIDI5LjcwMSA2Ny42MDA4IDI5LjU3OTlDNzAuMDQ1NCAyNS42MDY0IDY5LjEzNzEgMjAuMzY5MSA2NS4zNjA2IDE3LjQ3MDZMNjUuMzY4MSAxNy40ODU2Wk0xOS44MDY3IDUyLjU0MjNMMTkuNzkxNSA1Mi41NzI1TDE5LjcwODMgNTIuNzAxMkMxOS42MzI2IDUyLjgwNzEgMTkuNTU3IDUyLjg5NzkgMTkuNDgxMiA1Mi45OTY0QzE5LjU5NDggNTIuODUyNSAxOS43MTU5IDUyLjcwODggMTkuODI5NCA1Mi41NjQ5SDE5LjgxNDNWNTIuNTQ5N0wxOS44MDY3IDUyLjU0MjNaIiBmaWxsPSIjM0Q3QkY1Ii8+CjxwYXRoIGQ9Ik0zMC44MzM3IDU0LjEyNEwyNy44MTM5IDU4LjM5MjZDMjUuMTM0NyA2Mi4xMzEyIDIwLjgwNTYgNjQuMzYzOSAxNi4yMDQxIDY0LjM2MzlDMTAuODUzMyA2NC4zNjM5IDYuMDAxOTYgNjEuNDI3NCAzLjU1NzM5IDU2LjcxMjRDMS4xNTgyMiA1Mi4wODA1IDEuNDk4OCA0Ni41NzA4IDQuNDI3NzUgNDIuMjg3MUMyLjA5NjY5IDQ2LjI0NTQgMy4wNDI3NSA1MS4zODQyIDYuNzgxNSA1NC4yMjk5QzEwLjYzMzggNTcuMTc0MSAxNi4wNjc4IDU2LjY1MTggMTkuMjg0NSA1My4xNzc5QzE5LjMzNzMgNTMuMTMyNSAxOS4zOTA0IDUzLjA3MiAxOS40NDM0IDUzLjAxOUMxOS40NDM0IDUzLjAwMzggMTkuNDUxIDUyLjk4ODggMTkuNDczNiA1Mi45ODEyQzE5LjU4NzEgNTIuODM3MyAxOS43MDgzIDUyLjY5MzYgMTkuODIxOCA1Mi41NDk3SDE5LjgwNjZMMjguMzc0IDQwLjQ2MzJMMzAuODQxMyA1NC4xMjRIMzAuODMzN1oiIGZpbGw9IiMwQTU1Q0MiLz4KPHBhdGggZD0iTTY3LjYxNjEgMjkuNTg3NEM3MC4wNjA3IDI1LjYxNCA2OS4xNTI1IDIwLjM3NjcgNjUuMzc1OSAxNy40NzhDNjEuNDE3NiAxNC40NTgyIDU1Ljc5NDMgMTUuMDk0IDUyLjYzMDggMTguODQwNEM1Mi41NDc1IDE4Ljk0NjMgNTIuNDU2NyAxOS4wNDQ3IDUyLjM4MSAxOS4xNTA2QzUyLjM1MDggMTkuMTg4NCA1Mi4zMjggMTkuMjE4OCA1Mi4yOTc4IDE5LjI2NDFMNDMuNjMyMSAzMS41MDIxTDQxLjE2NDggMTcuODMzOEw0NC4xODQ2IDEzLjU2NTJDNDYuODYzOCA5LjgxMTI4IDUxLjE5MjggNy41OTM3NSA1NS44MDE5IDcuNTkzNzVDNjEuMTQ1MiA3LjU5Mzc1IDY1Ljk4ODkgMTAuNTMwMyA2OC40NDExIDE1LjI0NTNDNzAuODI1MSAxOS44Mzk0IDcwLjUwNzIgMjUuMzAzNiA2Ny42MzEzIDI5LjU4NzRINjcuNjE2MVoiIGZpbGw9IiMwQTU1Q0MiLz4KPC9nPgo8L2c+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTY4Nl8yOTYiPgo8cmVjdCB3aWR0aD0iNzIiIGhlaWdodD0iNzIiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjxjbGlwUGF0aCBpZD0iY2xpcDFfMTY4Nl8yOTYiPgo8cmVjdCB3aWR0aD0iNzIiIGhlaWdodD0iNzIiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="); /***/ }, /***/ "./resources/img/logo-tec-nobg.svg" /*!*****************************************!*\ !*** ./resources/img/logo-tec-nobg.svg ***! \*****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoTecNobg), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoTecNobg = function SvgLogoTecNobg(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 32, height: 32, fill: "none" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#000", fillRule: "evenodd", d: "M16.57 19.647c-.781.317-1.505.488-2.03.46-.681-.038-.972-.338-.973-.451 0-.08.253-.333 1.037-.39q.186-.013.386-.014c.536 0 1.132.088 1.58.395m1.463 6.907c-2.866.79-5.893.061-7.715-1.859-1.289-1.358-1.721-3.058-1.186-4.664 1.077-3.23 6.237-5.17 9.534-5.17l.106.001c1.229.016 2.08.313 2.22.775.08.26-.107.713-.5 1.213-.691.882-1.743 1.682-2.812 2.268-.678-.743-1.766-1.082-3.157-.982-1.548.113-2.094.864-2.089 1.53.006.726.71 1.5 2.044 1.574.807.044 1.771-.205 2.74-.629.142.558.098 1.29-.134 2.162a.567.567 0 0 0 1.095.292c.316-1.185.34-2.18.071-2.97 1.265-.71 2.434-1.652 3.135-2.545.657-.84.89-1.594.692-2.243-.144-.472-.483-.846-.993-1.112.039-4.26.794-7.202 1.474-7.206h.004c.1 0 .235.023.4.187.553.55 1.211 2.351 1.211 7.82 0 5.396-.462 9.99-6.14 11.558m-5.411-12.586v-.043l-.008-.063c-.082-1.163.058-2.08.412-2.571a.95.95 0 0 1 .696-.412c.416-.05.755.058 1.039.33.55.53.872 1.674.841 2.926-.944.233-1.91.565-2.828.992a12 12 0 0 1-.152-1.159m4.884-1.975c.209-.227.475-.338.815-.338.54 0 .774.177.904.31.31.318.478.934.5 1.831a7.6 7.6 0 0 0-1.055-.069c-.511 0-1.069.045-1.651.13-.025-.823.147-1.493.487-1.864m6.255-5.621c-.34-.339-.755-.517-1.2-.517h-.01c-1.494.009-2.01 2.237-2.268 3.913-.075.491-.134.993-.179 1.479l-.067-.075c-.422-.431-1-.65-1.716-.65-.656 0-1.227.243-1.65.704-.12.131-.224.283-.318.447-.187-.492-.448-.937-.805-1.28-.531-.51-1.21-.732-1.963-.64a2.1 2.1 0 0 0-1.477.874l-.004.007c-.621-3.098-1.802-6.84-3.863-6.625-.507.053-.955.326-1.296.789-1.59 2.16-.843 8.587-.152 12.043a.567.567 0 0 0 1.112-.223c-1.158-5.787-.9-9.989-.046-11.148.2-.273.382-.321.5-.334 1.138-.118 2.54 3.856 3.131 8.872.047.622.141 1.203.232 1.656l.002.006c-1.703.981-3.11 2.324-3.668 4.002-.672 2.016-.148 4.131 1.439 5.803C11.044 27.108 13.329 28 15.729 28c.863 0 1.74-.116 2.604-.354 6.44-1.777 6.973-6.998 6.973-12.65 0-4.837-.491-7.577-1.545-8.624", clipRule: "evenodd" }))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNi41Njk4IDE5LjY0NzNDMTUuNzg4NSAxOS45NjQzIDE1LjA2NTQgMjAuMTM1MyAxNC41Mzk2IDIwLjEwN0MxMy44NTg2IDIwLjA2OTEgMTMuNTY3OSAxOS43Njg3IDEzLjU2NjggMTkuNjU1N0MxMy41NjYzIDE5LjU3NTMgMTMuODIwMiAxOS4zMjM0IDE0LjYwNCAxOS4yNjY0QzE0LjcyNjkgMTkuMjU3NiAxNC44NTY2IDE5LjI1MiAxNC45OTAyIDE5LjI1MkMxNS41MjU3IDE5LjI1MiAxNi4xMjE3IDE5LjM0MDIgMTYuNTY5OCAxOS42NDczWk0xOC4wMzI2IDI2LjU1MzhDMTUuMTY3NSAyNy4zNDQxIDEyLjEzOTkgMjYuNjE1MiAxMC4zMTgzIDI0LjY5NTNDOS4wMjkxOSAyMy4zMzY4IDguNTk2OTkgMjEuNjM2NyA5LjEzMjE2IDIwLjAzMUMxMC4yMDg4IDE2LjgwMDQgMTUuMzY4NiAxNC44NjEzIDE4LjY2NjIgMTQuODYxM0MxOC43MDE3IDE0Ljg2MTMgMTguNzM3IDE0Ljg2MTQgMTguNzcxOSAxNC44NjJDMjAuMDAwNyAxNC44Nzc3IDIwLjg1MTYgMTUuMTc0NyAyMC45OTI3IDE1LjYzNzVDMjEuMDcxNyAxNS44OTY1IDIwLjg4NDggMTYuMzQ5OCAyMC40OTI3IDE2Ljg0OTlDMTkuODAwNyAxNy43MzIzIDE4Ljc0OTIgMTguNTMyIDE3LjY3OTcgMTkuMTE4NUMxNy4wMDE3IDE4LjM3NDYgMTUuOTE0MSAxOC4wMzYxIDE0LjUyMzEgMTguMTM2M0MxMi45NzQ1IDE4LjI0ODcgMTIuNDI4NyAxOS4wMDAyIDEyLjQzNDMgMTkuNjY1OUMxMi40NDA0IDIwLjM5MTkgMTMuMTQ0MyAyMS4xNjU1IDE0LjQ3NzggMjEuMjM5NkMxNS4yODQ4IDIxLjI4MzcgMTYuMjQ5NCAyMS4wMzUxIDE3LjIxOCAyMC42MTEzQzE3LjM2MDEgMjEuMTY5IDE3LjMxNjEgMjEuOTAwNyAxNy4wODM1IDIyLjc3MzFDMTcuMDAyOSAyMy4wNzU0IDE3LjE4MjcgMjMuMzg2MyAxNy40ODUxIDIzLjQ2NjlDMTcuNzg3MyAyMy41NDc1IDE4LjA5ODEgMjMuMzY3OCAxOC4xNzg5IDIzLjA2NTFDMTguNDk1IDIxLjg3OTcgMTguNTE4NCAyMC44ODU0IDE4LjI1MDIgMjAuMDk1NUMxOS41MTQ4IDE5LjM4NTkgMjAuNjgzOCAxOC40NDMxIDIxLjM4NDcgMTcuNTQ5NkMyMi4wNDI0IDE2LjcxMDkgMjIuMjc1MyAxNS45NTYzIDIyLjA3NzIgMTUuMzA2NkMyMS45MzMzIDE0LjgzNDkgMjEuNTk0NSAxNC40NjA3IDIxLjA4NCAxNC4xOTUzQzIxLjEyMyA5LjkzNTYgMjEuODc4MSA2Ljk5MzI4IDIyLjU1NzkgNi45ODkyNkgyMi41NjJDMjIuNjYxOSA2Ljk4OTI2IDIyLjc5NyA3LjAxMTY0IDIyLjk2MjYgNy4xNzYxNkMyMy41MTQ5IDcuNzI1MTQgMjQuMTczIDkuNTI3MzYgMjQuMTczIDE0Ljk5NjFDMjQuMTczIDIwLjM5MiAyMy43MTExIDI0Ljk4NjIgMTguMDMyNiAyNi41NTM4Wk0xMi42MjE5IDEzLjk2OEMxMi42MjEyIDEzLjk1MzggMTIuNjIzIDEzLjkzOTggMTIuNjIxMiAxMy45MjU1QzEyLjYxODggMTMuOTA1MSAxMi42MTYzIDEzLjg4MzQgMTIuNjEzNyAxMy44NjI0QzEyLjUzMjIgMTIuNjk5MiAxMi42NzE4IDExLjc4MjUgMTMuMDI2NSAxMS4yOTA5QzEzLjIwMjcgMTEuMDQ2OCAxMy40MjM3IDEwLjkxNiAxMy43MjIyIDEwLjg3OTNDMTQuMTM4MyAxMC44MjkyIDE0LjQ3NjggMTAuOTM2NSAxNC43NjEgMTEuMjA5NkMxNS4zMTE2IDExLjczODggMTUuNjMzIDEyLjg4MzEgMTUuNjAyNCAxNC4xMzVDMTQuNjU4NCAxNC4zNjc4IDEzLjY5MTkgMTQuNjk5NSAxMi43NzM3IDE1LjEyNjVDMTIuNzAxMyAxNC43MjAxIDEyLjY1MTMgMTQuMzMzIDEyLjYyMTkgMTMuOTY4Wk0xNy41MDYzIDExLjk5MzFDMTcuNzE1IDExLjc2NTkgMTcuOTgxMyAxMS42NTU0IDE4LjMyMSAxMS42NTU0QzE4Ljg2MDkgMTEuNjU1NCAxOS4wOTU1IDExLjgzMiAxOS4yMjUzIDExLjk2NDlDMTkuNTM1NCAxMi4yODI2IDE5LjcwMjYgMTIuODk4NyAxOS43MjU1IDEzLjc5NkMxOS40MzUxIDEzLjc1NTggMTkuMTIxOSAxMy43MzIzIDE4Ljc4NTUgMTMuNzI4MUMxOC43NDczIDEzLjcyNzYgMTguNzA5MSAxMy43Mjc0IDE4LjY3MDUgMTMuNzI3NEMxOC4xNTg4IDEzLjcyNzQgMTcuNjAxIDEzLjc3MTggMTcuMDE4OCAxMy44NTY1QzE2Ljk5MzcgMTMuMDM0MiAxNy4xNjU1IDEyLjM2NDIgMTcuNTA2MyAxMS45OTMxWk0yMy43NjExIDYuMzcxNTJDMjMuNDIxIDYuMDMzMzggMjMuMDA1OSA1Ljg1NDg4IDIyLjU2MDEgNS44NTQ4OEgyMi41NTAxQzIxLjA1NjUgNS44NjM3OSAyMC41NDEzIDguMDkyMjYgMjAuMjgzNCA5Ljc2NzcxQzIwLjIwNzkgMTAuMjU5NCAyMC4xNDk1IDEwLjc2MTEgMjAuMTA0IDExLjI0NjhDMjAuMDgxOCAxMS4yMjIgMjAuMDU5OSAxMS4xOTYzIDIwLjAzNjcgMTEuMTcyNUMxOS42MTUgMTAuNzQwNSAxOS4wMzc3IDEwLjUyMTQgMTguMzIxIDEwLjUyMTRDMTcuNjY0OSAxMC41MjE0IDE3LjA5NDQgMTAuNzY0OCAxNi42NzEzIDExLjIyNTdDMTYuNTUwNiAxMS4zNTcyIDE2LjQ0NjkgMTEuNTA5NCAxNi4zNTMyIDExLjY3MjdDMTYuMTY2MyAxMS4xODA5IDE1LjkwNSAxMC43MzU2IDE1LjU0NzggMTAuMzkyMUMxNS4wMTcgOS44ODIwNiAxNC4zMzg4IDkuNjYxMjQgMTMuNTg0OSA5Ljc1MzlDMTIuOTc3MyA5LjgyODU2IDEyLjQ2NjYgMTAuMTMwMyAxMi4xMDggMTAuNjI3MkMxMi4xMDY2IDEwLjYyOTUgMTIuMTA1NCAxMC42MzE5IDEyLjEwMzggMTAuNjMzOUMxMS40ODI2IDcuNTM1NzUgMTAuMzAxNiAzLjc5NDc4IDguMjQxIDQuMDA4NzhDNy43MzM5NyA0LjA2MjEgNy4yODU4NyA0LjMzNTAyIDYuOTQ1NDYgNC43OTc2NEM1LjM1NTg1IDYuOTU4NjIgNi4xMDE3IDEzLjM4NDYgNi43OTI4MyAxNi44NDA3QzYuODQ2ODUgMTcuMTEwMSA3LjA4MzQxIDE3LjI5NjcgNy4zNDgxMSAxNy4yOTY3QzcuMzg1IDE3LjI5NjcgNy40MjI0MiAxNy4yOTMgNy40NiAxNy4yODU1QzcuNzY2ODQgMTcuMjI0MSA3Ljk2NTk4IDE2LjkyNTUgNy45MDQ2MSAxNi42MTg1QzYuNzQ3MiAxMC44MzE0IDcuMDA1NDMgNi42Mjk0IDcuODU4ODEgNS40Njk1NEM4LjA1OTM0IDUuMTk2OTcgOC4yNDA2NSA1LjE0ODcxIDguMzU5NzEgNS4xMzYzQzkuNDk3MiA1LjAxNzkzIDEwLjg5ODUgOC45OTIzMSAxMS40OSAxNC4wMDg1QzExLjUzNzQgMTQuNjI5NyAxMS42MzE0IDE1LjIxMTQgMTEuNzIyMiAxNS42NjM1QzExLjcyMjUgMTUuNjY1NiAxMS43MjM2IDE1LjY2NzYgMTEuNzIzOSAxNS42Njk3QzEwLjAyMDUgMTYuNjUxNSA4LjYxNDggMTcuOTk0MSA4LjA1NTY3IDE5LjY3MkM3LjM4MzYgMjEuNjg3NyA3LjkwODI5IDIzLjgwMzEgOS40OTQ5MyAyNS40NzUyQzExLjA0NCAyNy4xMDc1IDEzLjMyOTQgMjggMTUuNzI4NSAyOEMxNi41OTE3IDI3Ljk5OTggMTcuNDY5OSAyNy44ODQzIDE4LjMzMzMgMjcuNjQ2QzI0Ljc3MjcgMjUuODY4NiAyNS4zMDU5IDIwLjY0NzggMjUuMzA1OSAxNC45OTU1QzI1LjMwNTkgMTAuMTU5NSAyNC44MTUgNy40MTkzMSAyMy43NjExIDYuMzcxNTJaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K"); /***/ }, /***/ "./resources/img/logo-tec.svg" /*!************************************!*\ !*** ./resources/img/logo-tec.svg ***! \************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactComponent: () => (/* binding */ SvgLogoTec), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var _path, _path2; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var SvgLogoTec = function SvgLogoTec(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({ xmlns: "http://www.w3.org/2000/svg", width: 46, height: 46, fill: "none", "aria-labelledby": "events-calendar-title" }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#3D7BF5", d: "M0 9.857C0 4.413 4.413 0 9.857 0h26.286C41.587 0 46 4.413 46 9.857v26.286C46 41.587 41.587 46 36.143 46H9.857C4.413 46 0 41.587 0 36.143z" })), _path2 || (_path2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { fill: "#FEFBF2", fillRule: "evenodd", d: "M12.262 5.513c.834-.086 1.57.232 2.203.802.629.566 1.17 1.388 1.634 2.343.86 1.767 1.485 4.046 1.932 6.163a3.28 3.28 0 0 1 1.98-.97c1.167-.143 2.227.2 3.053.994.44.423.78.941 1.041 1.507q.11-.15.232-.286c.664-.723 1.56-1.103 2.578-1.103.95 0 1.759.254 2.393.769.057-.547.124-1.103.208-1.65l.075-.467c.187-1.109.462-2.341.917-3.345.516-1.14 1.308-2.071 2.543-2.08h.017c.718 0 1.382.29 1.918.824.822.817 1.393 2.256 1.764 4.33.373 2.082.552 4.848.552 8.362 0 4.1-.191 8.091-1.574 11.384-1.393 3.315-3.985 5.906-8.728 7.215a14.5 14.5 0 0 1-3.847.523c-3.54 0-6.926-1.317-9.227-3.742-2.36-2.486-3.152-5.651-2.145-8.672.821-2.464 2.85-4.422 5.282-5.855a20 20 0 0 1-.309-2.256l-.084-.676c-.434-3.353-1.115-6.338-1.878-8.502-.408-1.156-.835-2.065-1.253-2.669q-.315-.452-.592-.65c-.182-.132-.334-.172-.462-.16a.6.6 0 0 0-.222.071 1.1 1.1 0 0 0-.33.313c-.276.376-.523 1.03-.703 1.957-.18.92-.289 2.088-.308 3.47-.038 2.764.285 6.37 1.122 10.555a1.073 1.073 0 1 1-2.104.421c-.503-2.517-1.026-6.117-1.134-9.484-.054-1.684-.005-3.317.205-4.73.21-1.408.583-2.627 1.195-3.46.53-.72 1.241-1.16 2.056-1.246M13.818 33.6c.343.77.84 1.505 1.483 2.183 1.817 1.915 4.462 3.013 7.288 3.14a12 12 0 0 1-1.89-.235c-2.095-.433-3.994-1.425-5.398-2.905a8 8 0 0 1-1.28-1.768 7 7 0 0 1-.202-.416zm19.246-23.263c-.03 0-.094.018-.194.121-.099.104-.21.27-.325.506-.23.473-.456 1.179-.656 2.09-.394 1.791-.677 4.333-.713 7.348.713.405 1.21.967 1.428 1.682.322 1.058-.072 2.24-1.047 3.483-1.01 1.287-2.66 2.628-4.448 3.657.342 1.174.281 2.604-.16 4.257a1.073 1.073 0 0 1-2.072-.552c.292-1.094.367-2.01.252-2.726-1.33.55-2.66.876-3.806.814-2.017-.112-3.191-1.302-3.202-2.531-.004-.556.223-1.14.756-1.602.53-.459 1.349-.785 2.508-.869 1.974-.142 3.582.31 4.64 1.361 1.475-.83 2.902-1.931 3.844-3.132.275-.35.47-.678.584-.953.117-.284.13-.475.099-.58-.066-.216-.325-.455-.863-.643-.523-.183-1.249-.295-2.123-.306h-.15c-2.352 0-5.384.693-8.018 1.968-2.642 1.278-4.832 3.114-5.581 5.363-.744 2.232-.15 4.605 1.665 6.518 2.57 2.71 6.865 3.753 10.947 2.628 4.048-1.118 6.213-3.301 7.38-6.157 1.177-2.878 1.347-6.457 1.347-10.375 0-3.96-.238-6.58-.573-8.303-.336-1.732-.764-2.524-1.11-2.867a.7.7 0 0 0-.24-.17.4.4 0 0 0-.165-.03zM13.289 31.66q.036.33.108.656l-.043-.218a6 6 0 0 1-.065-.438m6.728-3.19c.001.163.42.594 1.398.652-.854-.05-1.281-.386-1.377-.579a.2.2 0 0 1-.021-.073m2.065-.336q-.282 0-.543.02c-.545.04-.888.146-1.086.244a1 1 0 0 0-.146.09.8.8 0 0 0 .173.136c.19.112.502.226.962.251.6.033 1.414-.131 2.33-.458-.514-.21-1.115-.283-1.69-.283m4.482-.778-.58.334c.387-.213.774-.445 1.15-.694zm-2.483-.838q.723.226 1.287.627l-.231-.154a4.6 4.6 0 0 0-1.056-.473m-1.59-.27a9 9 0 0 0-1.089.016c-.702.051-1.262.193-1.7.393l.278-.113c.39-.14.86-.24 1.422-.28a8.6 8.6 0 0 1 1.43.01zm-8.433-1.038a10 10 0 0 0 .354-.357zm16.008-.813c-.503.64-1.135 1.25-1.835 1.807l.258-.21a10.8 10.8 0 0 0 1.576-1.597m-12.84-2.34q.056.331.113.62l.003.008-.002-.008q-.057-.288-.113-.62m14.618-.817q.363.404.521.918l-.09-.25a2.4 2.4 0 0 0-.431-.668m-12.977.657v-.001m1.406-5.915a1.13 1.13 0 0 0-.836.495c-.226.313-.397.781-.494 1.393-.095.606-.117 1.337-.06 2.162l.01.091.004.067v.014q.05.635.163 1.332a23 23 0 0 1 3.663-1.272 8.2 8.2 0 0 0-.286-2.253c-.205-.715-.504-1.276-.86-1.618a1.46 1.46 0 0 0-1.11-.426zM10.98 18.9q.079.685.178 1.4l-.095-.708a55 55 0 0 1-.083-.691m15.874.976a16 16 0 0 0 .568-.011zm.061-2.768c-.43 0-.747.136-.998.409-.394.43-.633 1.218-.642 2.25a17 17 0 0 1 2.318-.151q.577.007 1.096.064c-.06-1.126-.291-1.84-.64-2.198a1.1 1.1 0 0 0-.353-.242c-.17-.073-.417-.132-.78-.132m-.688-1.83a3 3 0 0 0-.482.133 3 3 0 0 0 .649-.162zm-8.327.088-.007.007v.002q.005-.004.006-.01.05-.067.101-.131zm11.863-1.248a30 30 0 0 0-.077.538zm-7.489.43c-.652-.396-1.412-.55-2.232-.45-.44.054-.846.191-1.206.404l.137-.076q.49-.256 1.07-.327c.82-.1 1.579.053 2.232.45m8.283-3.745c-.282.739-.483 1.571-.634 2.374l.098-.484c.137-.648.31-1.3.536-1.89m4.91-.718a7 7 0 0 1 .339.715l-.109-.254a6 6 0 0 0-.23-.46m-2.414-1.645c-1.084.006-1.813.818-2.318 1.932l.098-.205c.5-1.007 1.204-1.721 2.22-1.727M9.846 7.943a9.4 9.4 0 0 0-.502 1.8l.1-.488c.109-.477.242-.918.402-1.312M34.95 9.34q.14.158.268.344l-.132-.18a4 4 0 0 0-.136-.164m-20.879-.497q.034.06.066.122a8 8 0 0 0-.229-.4zm-.848-2.985c1.049.334 1.915 1.415 2.625 2.858-.74-1.502-1.647-2.611-2.753-2.895z", clipRule: "evenodd" }))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDYiIGhlaWdodD0iNDYiIHZpZXdCb3g9IjAgMCA0NiA0NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0iZXZlbnRzLWNhbGVuZGFyLXRpdGxlIj4KPHRpdGxlIGlkPSJldmVudHMtY2FsZW5kYXItdGl0bGUiPlRoZSBFdmVudHMgQ2FsZW5kYXIgbG9nbzwvdGl0bGU+CjxwYXRoIGQ9Ik0wIDkuODU3MTRDMCA0LjQxMzE5IDQuNDEzMTkgMCA5Ljg1NzE0IDBIMzYuMTQyOEM0MS41ODY4IDAgNDYgNC40MTMxOSA0NiA5Ljg1NzE0VjM2LjE0MjlDNDYgNDEuNTg2OCA0MS41ODY4IDQ2IDM2LjE0MjggNDZIOS44NTcxNEM0LjQxMzE5IDQ2IDAgNDEuNTg2OCAwIDM2LjE0MjlWOS44NTcxNFoiIGZpbGw9IiMzRDdCRjUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi4yNjE4IDUuNTEzMDlDMTMuMDk2MyA1LjQyNjUzIDEzLjgzMTQgNS43NDUwNiAxNC40NjQ5IDYuMzE0ODVDMTUuMDk0IDYuODgwNzUgMTUuNjM0NCA3LjcwMzMzIDE2LjA5ODcgOC42NTc2MkMxNi45NTg2IDEwLjQyNSAxNy41ODQyIDEyLjcwNDMgMTguMDMxMyAxNC44MjA3QzE4LjU1OTEgMTQuMjc5NiAxOS4yMzY4IDEzLjk0NjMgMjAuMDExOCAxMy44NTFDMjEuMTc3OCAxMy43MDc3IDIyLjIzODEgMTQuMDUxMiAyMy4wNjQ1IDE0Ljg0NTFDMjMuNTAzOCAxNS4yNjc3IDIzLjg0MzIgMTUuNzg2MiAyNC4xMDU1IDE2LjM1MkMyNC4xNzc3IDE2LjI1MjYgMjQuMjU0MyAxNi4xNTU5IDI0LjMzNyAxNi4wNjU4QzI1LjAwMDggMTUuMzQyOSAyNS44OTcxIDE0Ljk2MzQgMjYuOTE1MSAxNC45NjMzQzI3Ljg2NDggMTQuOTYzMyAyOC42NzM5IDE1LjIxNzIgMjkuMzA3NyAxNS43MzE4QzI5LjM2NTMgMTUuMTg1MiAyOS40MzE2IDE0LjYyOSAyOS41MTU3IDE0LjA4MTRMMjkuNTkwOSAxMy42MTQ3QzI5Ljc3OCAxMi41MDY0IDMwLjA1MzIgMTEuMjczOCAzMC41MDc5IDEwLjI2OTlDMzEuMDIzOSA5LjEzMDkgMzEuODE1NSA4LjE5ODUzIDMzLjA1MDkgOC4xOTA4MkgzMy4wNjc1QzMzLjc4NTYgOC4xOTA5MiAzNC40NTAxIDguNDgwODEgMzQuOTg2NCA5LjAxNDA3QzM1LjgwNzggOS44MzA5NyAzNi4zNzg4IDExLjI3MDQgMzYuNzUwMSAxMy4zNDMyQzM3LjEyMzEgMTUuNDI1OCAzNy4zMDE4IDE4LjE5MTcgMzcuMzAxOCAyMS43MDY0QzM3LjMwMTggMjUuODA1OCAzNy4xMTA2IDI5Ljc5NzEgMzUuNzI3NiAzMy4wOTAyQzM0LjMzNTMgMzYuNDA1IDMxLjc0MzIgMzguOTk1OCAyNy4wMDAxIDQwLjMwNTFDMjUuNzI1NSA0MC42NTY4IDI0LjQyOCA0MC44MjczIDIzLjE1MzQgNDAuODI3NUMxOS42MTI2IDQwLjgyNzQgMTYuMjI2OCAzOS41MTA4IDEzLjkyNTkgMzcuMDg2M0MxMS41NjY2IDM0LjU5OTkgMTAuNzc0IDMxLjQzNDkgMTEuNzgxMyAyOC40MTM1QzEyLjYwMjIgMjUuOTUgMTQuNjMxNSAyMy45OTIyIDE3LjA2MjYgMjIuNTU5QzE2Ljk0MDUgMjEuOTI0NSAxNi44MTgyIDIxLjEzODkgMTYuNzU0IDIwLjMwMzFMMTYuNjcgMTkuNjI3M0MxNi4yMzU2IDE2LjI3NDQgMTUuNTU1NCAxMy4yODk0IDE0Ljc5MjEgMTEuMTI1NEMxNC4zODQzIDkuOTY5MzMgMTMuOTU3MSA5LjA2MDQzIDEzLjUzOTEgOC40NTY0NUMxMy4zMyA4LjE1NDMzIDEzLjEzMTIgNy45Mzg4NSAxMi45NDczIDcuODA2MDZDMTIuNzY0OSA3LjY3NDM0IDEyLjYxMjUgNy42MzM2NiAxMi40ODU0IDcuNjQ2ODhDMTIuNDIyNSA3LjY1MzQ4IDEyLjM0ODcgNy42NjkxNSAxMi4yNjI4IDcuNzE3MTlDMTIuMTc1MyA3Ljc2NjE4IDEyLjA2MTUgNy44NTU5MiAxMS45MzM3IDguMDI5NjlDMTEuNjU3MiA4LjQwNTY5IDExLjQxMDIgOS4wNTkzNSAxMS4yMjk2IDkuOTg2NzJDMTEuMDUwMiAxMC45MDc2IDEwLjk0MTEgMTIuMDc1NCAxMC45MjE5IDEzLjQ1NzRDMTAuODgzOCAxNi4yMjExIDExLjIwNzEgMTkuODI3MyAxMi4wNDQgMjQuMDEyMUMxMi4xNiAyNC41OTI5IDExLjc4MzggMjUuMTU4NiAxMS4yMDMyIDI1LjI3NDhDMTEuMTMyOCAyNS4yODg5IDExLjA2MTMgMjUuMjk1MyAxMC45OTEzIDI1LjI5NTNDMTAuNDkwNCAyNS4yOTUgMTAuMDQyOCAyNC45NDI1IDkuOTQwNSAyNC40MzNDOS40MzcxMyAyMS45MTU4IDguOTEzOTMgMTguMzE2MSA4LjgwNTc0IDE0Ljk0ODZDOC43NTE2NiAxMy4yNjUxIDguODAwNjEgMTEuNjMxOCA5LjAxMDgyIDEwLjIxODJDOS4yMjAxNSA4LjgxMDggOS41OTM2NCA3LjU5MjA5IDEwLjIwNjEgNi43NTkxOEMxMC43MzU4IDYuMDM5MzkgMTEuNDQ3MSA1LjU5ODk5IDEyLjI2MTggNS41MTMwOVpNMTMuODE4NCAzMy41OTlDMTQuMTYxMSAzNC4zNjgxIDE0LjY1NzggMzUuMTA0IDE1LjMwMDkgMzUuNzgxNkMxNy4xMTgyIDM3LjY5NyAxOS43NjI2IDM4Ljc5NTMgMjIuNTg4OSAzOC45MjIzQzIyLjA3NTEgMzguODk5MiAyMS41NjczIDM4Ljg0MzYgMjEuMDY5NCAzOC43NTcyQzIwLjk0NTEgMzguNzM1NyAyMC44MjE0IDM4LjcxMjQgMjAuNjk4MyAzOC42ODY5QzE4LjYwMzkgMzguMjUzNyAxNi43MDUyIDM3LjI2MTcgMTUuMzAwOSAzNS43ODE2QzE0Ljc3NDcgMzUuMjI3MSAxNC4zNDc0IDM0LjYzMyAxNC4wMjE2IDM0LjAxNDFDMTMuOTQ5MiAzMy44NzY1IDEzLjg4MTcgMzMuNzM3OSAxMy44MTk0IDMzLjU5ODFMMTMuODE4NCAzMy41OTlaTTMzLjA2MzUgMTAuMzM2M0MzMy4wMzQ2IDEwLjMzNjggMzIuOTY5OSAxMC4zNTM5IDMyLjg3MDIgMTAuNDU3NEMzMi43NzExIDEwLjU2MDYgMzIuNjYwMiAxMC43MjY3IDMyLjU0NSAxMC45NjMzQzMyLjMxNTEgMTEuNDM1NSAzMi4wODkgMTIuMTQxNiAzMS44ODg3IDEzLjA1MzFDMzEuNDk1NCAxNC44NDQyIDMxLjIxMTYgMTcuMzg2MyAzMS4xNzU5IDIwLjQwMDhDMzEuODg5IDIwLjgwNjIgMzIuMzg1MiAyMS4zNjgxIDMyLjYwMzYgMjIuMDgzNEMzMi45MjYgMjMuMTQwOSAzMi41MzIgMjQuMzIyMiAzMS41NTY3IDI1LjU2NThDMzAuNTQ2OSAyNi44NTMxIDI4Ljg5NjMgMjguMTk0MSAyNy4xMDg1IDI5LjIyMzFDMjcuNDUxNCAzMC4zOTczIDI3LjM5MDEgMzEuODI2NyAyNi45NDkzIDMzLjQ3OTlDMjYuNzk2NCAzNC4wNTIxIDI2LjIwODUgMzQuMzkzIDI1LjYzNjggMzQuMjQwNkMyNS4wNjQ2IDM0LjA4OCAyNC43MjQ5IDMzLjQ5OTggMjQuODc3IDMyLjkyODFDMjUuMTY4NyAzMS44MzM3IDI1LjI0NDUgMzAuOTE3NCAyNS4xMjkgMzAuMjAxNkMyMy43OTk1IDMwLjc1MTQgMjIuNDY4MiAzMS4wNzg1IDIxLjMyMzMgMzEuMDE2QzE5LjMwNjEgMzAuOTAzNiAxOC4xMzE3IDI5LjcxMzggMTguMTIxMiAyOC40ODQ4QzE4LjExNjYgMjcuOTI5NCAxOC4zNDM4IDI3LjM0NTIgMTguODc3IDI2Ljg4MzJDMTkuNDA3NCAyNi40MjQgMjAuMjI1NyAyNi4wOTgzIDIxLjM4NDggMjYuMDE0MUMyMy4zNTg4IDI1Ljg3MiAyNC45NjczIDI2LjMyNDQgMjYuMDI1NSAyNy4zNzU0QzI3LjUwMDMgMjYuNTQ0MyAyOC45MjcgMjUuNDQzOSAyOS44NjkyIDI0LjI0MjZDMzAuMTQ0IDIzLjg5MjIgMzAuMzM5NyAyMy41NjU0IDMwLjQ1MzIgMjMuMjkwNEMzMC41NzAzIDIzLjAwNjUgMzAuNTgzNiAyMi44MTQ5IDMwLjU1MTggMjIuNzEwNEMzMC40ODU4IDIyLjQ5MzkgMzAuMjI3NSAyMi4yNTQ3IDI5LjY4OTUgMjIuMDY2OEMyOS4xNjYzIDIxLjg4NDIgMjguNDQwNCAyMS43NzI0IDI3LjU2NTUgMjEuNzYxMUMyNy41MTY2IDIxLjc2MDQgMjcuNDY1NiAyMS43NjAyIDI3LjQxNTEgMjEuNzYwMkMyNS4wNjM5IDIxLjc2MDIgMjIuMDMyMyAyMi40NTQyIDE5LjM5NzUgMjMuNzI4OUMxNi43NTU2IDI1LjAwNzIgMTQuNTY2IDI2Ljg0MzEgMTMuODE2NSAyOS4wOTIyQzEzLjA3MyAzMS4zMjM3IDEzLjY2NjMgMzMuNjk2OCAxNS40ODE1IDM1LjYwOThDMTguMDUyMyAzOC4zMTkyIDIyLjM0NjggMzkuMzYzNCAyNi40Mjg4IDM4LjIzNzdDMzAuNDc3IDM3LjEyMDIgMzIuNjQyNCAzNC45MzY3IDMzLjgwOTYgMzIuMDgxNEMzNC45ODY0IDI5LjIwMjcgMzUuMTU2MyAyNS42MjQ1IDM1LjE1NjMgMjEuNzA2NEMzNS4xNTYzIDE3Ljc0NjYgMzQuOTE3NyAxNS4xMjYxIDM0LjU4MzEgMTMuNDAyN0MzNC4yNDY3IDExLjY3MDYgMzMuODE5NSAxMC44Nzk0IDMzLjQ3MzcgMTAuNTM1NkMzMy4zNzQzIDEwLjQzNjcgMzMuMjkzMiAxMC4zODk0IDMzLjIzMjUgMTAuMzY1NkMzMy4xNzI3IDEwLjM0MjMgMzMuMTE5OSAxMC4zMzYzIDMzLjA2ODQgMTAuMzM2M0gzMy4wNjM1Wk0xMy4yODkxIDMxLjY1ODZDMTMuMzEyOSAzMS44Nzg0IDEzLjM0OTMgMzIuMDk3MyAxMy4zOTY2IDMyLjMxNDhMMTMuMzUzNiAzMi4wOTcxQzEzLjMyNzIgMzEuOTUxNCAxMy4zMDUgMzEuODA1MiAxMy4yODkxIDMxLjY1ODZaTTIwLjAxNjcgMjguNDY5MUMyMC4wMTgzIDI4LjYzMjQgMjAuNDM2NiAyOS4wNjMzIDIxLjQxNTEgMjkuMTIxNUMyMC41NjA4IDI5LjA3MDcgMjAuMTMzOSAyOC43MzU1IDIwLjAzODIgMjguNTQyNEMyMC4wMzExIDI4LjUyODIgMjAuMDI2IDI4LjUxNDggMjAuMDIyNSAyOC41MDIzQzIwLjAxOTIgMjguNDkwMyAyMC4wMTY4IDI4LjQ3OTMgMjAuMDE2NyAyOC40NjkxWk0yMi4wODIxIDI4LjEzMzJDMjEuODk1MyAyOC4xMzMyIDIxLjcxMjYgMjguMTQwNCAyMS41MzkxIDI4LjE1MjdDMjAuOTkzOSAyOC4xOTI1IDIwLjY1MDggMjguMjk4NyAyMC40NTMyIDI4LjM5NjlDMjAuMzg2OSAyOC40Mjk4IDIwLjMzOTYgMjguNDYyMyAyMC4zMDY3IDI4LjQ4NzdDMjAuMzQyOCAyOC41MjU0IDIwLjM5ODEgMjguNTc0IDIwLjQ3OTYgMjguNjIyNUMyMC42NjkyIDI4LjczNTMgMjAuOTgyIDI4Ljg0ODcgMjEuNDQxNSAyOC44NzQ0QzIyLjA0MTIgMjguOTA2NyAyMi44NTU3IDI4Ljc0MjUgMjMuNzcxNiAyOC40MTY0QzIzLjI1ODMgMjguMjA1NyAyMi42NTcyIDI4LjEzMzIgMjIuMDgyMSAyOC4xMzMyWk0yNi41NjM1IDI3LjM1NDlMMjUuOTgzNSAyNy42ODg5QzI2LjM3MTQgMjcuNDc2MSAyNi43NTc5IDI3LjI0NCAyNy4xMzQ4IDI2Ljk5NTVMMjYuNTYzNSAyNy4zNTQ5Wk0yNC4wODExIDI2LjUxN0MyNC41NjIyIDI2LjY2NjcgMjQuOTkyOCAyNi44NzYxIDI1LjM2ODIgMjcuMTQzOUwyNS4xMzY4IDI2Ljk4OTdDMjQuODE4OSAyNi43OTQxIDI0LjQ2NiAyNi42MzY4IDI0LjA4MTEgMjYuNTE3Wk0yMi40OTEzIDI2LjI0NzVDMjIuMTQ0NiAyNi4yMzAyIDIxLjc4MTEgMjYuMjM1OCAyMS40MDI0IDI2LjI2MzFDMjAuNzAwMyAyNi4zMTQxIDIwLjE0MDIgMjYuNDU1NiAxOS43MDIyIDI2LjY1NTdMMTkuOTc5NiAyNi41NDM0QzIwLjM2OTcgMjYuNDAzMSAyMC44NDA2IDI2LjMwMzkgMjEuNDAyNCAyNi4yNjMxQzIxLjkwNzIgMjYuMjI2NyAyMi4zODQ4IDI2LjIzMDQgMjIuODMyMSAyNi4yNzI5TDIyLjQ5MTMgMjYuMjQ3NVpNMTQuMDU3NyAyNS4yMDk0QzEzLjcxMjcgMjUuNTcyOSAxMy4zOTY4IDI1Ljk1NDIgMTMuMTE1MyAyNi4zNTI5QzEzLjQ5MDYgMjUuODIxMyAxMy45MjcgMjUuMzIwNyAxNC40MTIyIDI0Ljg1MkwxNC4wNTc3IDI1LjIwOTRaTTMwLjA2NTUgMjQuMzk1OUMyOS41NjM0IDI1LjAzNjEgMjguOTMxNCAyNS42NDY4IDI4LjIzMDUgMjYuMjAzNUwyOC40ODkzIDI1Ljk5MjZDMjkuMDg2OSAyNS40OTQyIDI5LjYyNjEgMjQuOTU2MSAzMC4wNjU1IDI0LjM5NTlaTTE3LjIyNjYgMjIuMDU2MUMxNy4yNjQgMjIuMjc2MSAxNy4zMDA2IDIyLjQ4MzkgMTcuMzM4OSAyMi42NzUyQzE3LjMzOTUgMjIuNjc4MSAxNy4zNDEzIDIyLjY4MTEgMTcuMzQxOSAyMi42ODRDMTcuMzQxNCAyMi42ODExIDE3LjM0MDUgMjIuNjc5MSAxNy4zMzk5IDIyLjY3NjJDMTcuMzAxNSAyMi40ODQ2IDE3LjI2NDEgMjIuMjc2NCAxNy4yMjY2IDIyLjA1NjFaTTMxLjg0MzggMjEuMjM4N0MzMi4wODU0IDIxLjUwOCAzMi4yNjA5IDIxLjgxNDUgMzIuMzY1MyAyMi4xNTY2TDMyLjI3NDUgMjEuOTA2NkMzMi4xNjk4IDIxLjY2MzMgMzIuMDI1MSAyMS40NDA4IDMxLjg0MzggMjEuMjM4N1pNMTguODY3MyAyMS44OTU5QzE5LjM2NjggMjEuNjYzNyAxOS44NzU5IDIxLjQ1MDMgMjAuMzg5NyAyMS4yNTcyQzE5Ljg3NTcgMjEuNDUwMyAxOS4zNjU5IDIxLjY2MjYgMTguODY2MyAyMS44OTQ5TDE4Ljg2NzMgMjEuODk1OVpNMjAuMjczNSAxNS45ODA5QzE5LjkxIDE2LjAyNTcgMTkuNjUxNSAxNi4xNzg0IDE5LjQzNjYgMTYuNDc2QzE5LjIxMSAxNi43ODg3IDE5LjA0MDMgMTcuMjU3NCAxOC45NDM0IDE3Ljg2OTVDMTguODQ3NiAxOC40NzU0IDE4LjgyNTkgMTkuMjA1NyAxOC44ODI5IDIwLjAzMDdMMTguODkzNiAyMC4xMjI1TDE4Ljg5NjYgMjAuMTg4OUMxOC44OTY0IDIwLjE5NzEgMTguODk2NiAyMC4xOTg1IDE4Ljg5NjYgMjAuMjAyNUMxOC45MzA4IDIwLjYyNTggMTguOTg1IDIxLjA3MDYgMTkuMDU5NiAyMS41MzQ2QzIwLjI1NTggMjEuMDAwNSAyMS41MDA1IDIwLjU3NTYgMjIuNzIyNyAyMC4yNjMxQzIyLjcyNjUgMTkuNDQ1NyAyMi42MjUzIDE4LjY3MDcgMjIuNDM2NiAxOC4wMTAyQzIyLjIzMjMgMTcuMjk1MiAyMS45MzMgMTYuNzM0IDIxLjU3NzIgMTYuMzkyQzIxLjI2NyAxNi4wOTQxIDIwLjkxMDUgMTUuOTUzNSAyMC40Njc4IDE1Ljk2NjJMMjAuMjczNSAxNS45ODA5Wk0xMC45Nzk2IDE4LjkwMThDMTEuMDMxOSAxOS4zNTc2IDExLjA5MTYgMTkuODI0MiAxMS4xNTgzIDIwLjMwMTJMMTEuMDYzNSAxOS41OTMyQzExLjAzMzggMTkuMzYgMTEuMDA1NyAxOS4xMjk2IDEwLjk3OTYgMTguOTAxOFpNMjYuODUzNiAxOS44NzczQzI2LjY2MDIgMTkuODg1MyAyNi40NjMxIDE5Ljg5NzcgMjYuMjYyOCAxOS45MTM1QzI2LjY2MzIgMTkuODgyIDI3LjA1MDkgMTkuODY1NyAyNy40MjE5IDE5Ljg2NTZMMjYuODUzNiAxOS44NzczWk0yNi45MTUxIDE3LjEwODhDMjYuNDg0NiAxNy4xMDg5IDI2LjE2NzYgMTcuMjQ1NCAyNS45MTcxIDE3LjUxOEMyNS41MjMxIDE3Ljk0NzUgMjUuMjg0MSAxOC43MzU2IDI1LjI3NTUgMTkuNzY4QzI2LjAyNzIgMTkuNjY5NCAyNi43NTAyIDE5LjYxNTcgMjcuNDIxOSAxOS42MTU2QzI3LjQ3ODYgMTkuNjE1NiAyNy41MzU5IDE5LjYxNTggMjcuNTkyOCAxOS42MTY2QzI3Ljk3NzkgMTkuNjIxNCAyOC4zNDM2IDE5LjY0MzcgMjguNjg5NSAxOS42ODExQzI4LjYyOTYgMTguNTU1NSAyOC4zOTggMTcuODQwNyAyOC4wNDg5IDE3LjQ4MjhDMjcuOTcxMSAxNy40MDMyIDI3Ljg2NDkgMTcuMzEyNiAyNy42OTY0IDE3LjI0MDZDMjcuNTI2IDE3LjE2OCAyNy4yNzkgMTcuMTA4OCAyNi45MTUxIDE3LjEwODhaTTI2LjIyNjYgMTUuMjc4N0MyNi4xMTU5IDE1LjMwMDUgMjYuMDA3NCAxNS4zMjczIDI1LjkwMTQgMTUuMzU5OEMyNS44NDg3IDE1LjM3NTkgMjUuNzk2NyAxNS4zOTM3IDI1Ljc0NTIgMTUuNDEyNUMyNS41MTMzIDE1LjQ5NzIgMjUuMjk1MSAxNS42MDk2IDI1LjA5MDkgMTUuNzQ2NUMyNS40NzY3IDE1LjQ4NzkgMjUuOTE1MSAxNS4zMTk5IDI2LjM5MzYgMTUuMjUwNEwyNi4yMjY2IDE1LjI3ODdaTTE3Ljg5OTUgMTUuMzY2NkMxNy44OTc3IDE1LjM2OTUgMTcuODk0NyAxNS4zNzE5IDE3Ljg5MjcgMTUuMzc0NEwxNy44OTM2IDE1LjM3NjRDMTcuODk1NyAxNS4zNzM3IDE3Ljg5NzYgMTUuMzY5NyAxNy44OTk1IDE1LjM2NjZDMTcuOTMyMSAxNS4zMjE0IDE3Ljk2NTcgMTUuMjc3OCAxOC4wMDAxIDE1LjIzNDhMMTcuODk5NSAxNS4zNjY2Wk0yOS43NjI4IDE0LjExOTVDMjkuNzM1NCAxNC4yOTc4IDI5LjcwOTkgMTQuNDc3MSAyOS42ODU2IDE0LjY1NjZMMjkuNzYyOCAxNC4xMTk1Wk0yMi4yNzQ1IDE0LjU0OTJDMjEuNjIxNSAxNC4xNTMyIDIwLjg2MjQgMTMuOTk4MiAyMC4wNDIxIDE0LjA5OUMxOS42MDE1IDE0LjE1MzIgMTkuMTk2MyAxNC4yOTAyIDE4LjgzNiAxNC41MDMzTDE4Ljk3MjcgMTQuNDI3MkMxOS4yOTc5IDE0LjI1NzUgMTkuNjU3MyAxNC4xNDc0IDIwLjA0MyAxNC4xQzIwLjg2MzEgMTMuOTk5MyAyMS42MjE3IDE0LjE1MzUgMjIuMjc0NSAxNC41NDkyWk0zMC41NTY3IDEwLjgwNDFDMzAuMjc0OSAxMS41NDI5IDMwLjA3NDIgMTIuMzc1MSAyOS45MjI5IDEzLjE3ODFMMzAuMDIwNiAxMi42OTM4QzMwLjE1ODMgMTIuMDQ2MyAzMC4zMzE1IDExLjM5NDggMzAuNTU2NyAxMC44MDQxWk0zNS40Njc4IDEwLjA4NjNDMzUuNTg3NSAxMC4zMDIxIDM1LjcwMDEgMTAuNTQwMiAzNS44MDU3IDEwLjgwMTJMMzUuNjk3MyAxMC41NDczQzM1LjYyMzkgMTAuMzgzNiAzNS41NDc1IDEwLjIzIDM1LjQ2NzggMTAuMDg2M1pNMzMuMDUyOCA4LjQ0MDgyQzMxLjk2OTEgOC40NDc0OSAzMS4yNDAyIDkuMjU5MjEgMzAuNzM1NCAxMC4zNzM0TDMwLjgzMzEgMTAuMTY4NEMzMS4zMzI5IDkuMTYxMzcgMzIuMDM2OSA4LjQ0Njk1IDMzLjA1MjggOC40NDA4MlpNOS44NDU3OCA3Ljk0Mjc4QzkuNjMyOTMgOC40Njg1MSA5LjQ2NzYyIDkuMDc1NTMgOS4zNDM4MiA5Ljc0MzU2TDkuNDQ0NDEgOS4yNTUyOEM5LjU1MyA4Ljc3ODAzIDkuNjg2MTQgOC4zMzcxIDkuODQ1NzggNy45NDI3OFpNMzQuOTUxMiA5LjM0MDI0QzM1LjA0MzcgOS40NDQ5NyAzNS4xMzI3IDkuNTU5NzQgMzUuMjE4OCA5LjY4Mzk5TDM1LjA4NyA5LjUwNDNDMzUuMDQyNSA5LjQ0NzI1IDM0Ljk5NzMgOS4zOTI0NiAzNC45NTEyIDkuMzQwMjRaTTE0LjA3MjMgOC44NDMxN0MxNC4wOTQ2IDguODgyOTEgMTQuMTE1NiA4LjkyNDAyIDE0LjEzNzggOC45NjUyNEMxNC4wNjEzIDguODIzMTcgMTMuOTg2IDguNjg5MDcgMTMuOTA5MyA4LjU2NDg1TDE0LjA3MjMgOC44NDMxN1pNMTMuMjIzNyA1Ljg1NzgyQzE0LjI3MjYgNi4xOTE4NCAxNS4xMzg1IDcuMjcyNzIgMTUuODQ4NyA4LjcxNjIyQzE1LjEwOTkgNy4yMTQyMiAxNC4yMDI0IDYuMTA0OTQgMTMuMDk1OCA1LjgyMDcxTDEzLjIyMzcgNS44NTc4MloiIGZpbGw9IiNGRUZCRjIiLz4KPC9zdmc+Cg=="); /***/ }, /***/ "./node_modules/aria-hidden/dist/es2015/index.js" /*!*******************************************************!*\ !*** ./node_modules/aria-hidden/dist/es2015/index.js ***! \*******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ hideOthers: () => (/* binding */ hideOthers), /* harmony export */ inertOthers: () => (/* binding */ inertOthers), /* harmony export */ supportsInert: () => (/* binding */ supportsInert), /* harmony export */ suppressOthers: () => (/* binding */ suppressOthers) /* harmony export */ }); var getDefaultParent = function (originalTarget) { if (typeof document === 'undefined') { return null; } var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget; return sampleTarget.ownerDocument.body; }; var counterMap = new WeakMap(); var uncontrolledNodes = new WeakMap(); var markerMap = {}; var lockCount = 0; var unwrapHost = function (node) { return node && (node.host || unwrapHost(node.parentNode)); }; var correctTargets = function (parent, targets) { return targets .map(function (target) { if (parent.contains(target)) { return target; } var correctedTarget = unwrapHost(target); if (correctedTarget && parent.contains(correctedTarget)) { return correctedTarget; } console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing'); return null; }) .filter(function (x) { return Boolean(x); }); }; /** * Marks everything except given node(or nodes) as aria-hidden * @param {Element | Element[]} originalTarget - elements to keep on the page * @param [parentNode] - top element, defaults to document.body * @param {String} [markerName] - a special attribute to mark every node * @param {String} [controlAttribute] - html Attribute to control * @return {Undo} undo command */ var applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) { var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]); if (!markerMap[markerName]) { markerMap[markerName] = new WeakMap(); } var markerCounter = markerMap[markerName]; var hiddenNodes = []; var elementsToKeep = new Set(); var elementsToStop = new Set(targets); var keep = function (el) { if (!el || elementsToKeep.has(el)) { return; } elementsToKeep.add(el); keep(el.parentNode); }; targets.forEach(keep); var deep = function (parent) { if (!parent || elementsToStop.has(parent)) { return; } Array.prototype.forEach.call(parent.children, function (node) { if (elementsToKeep.has(node)) { deep(node); } else { try { var attr = node.getAttribute(controlAttribute); var alreadyHidden = attr !== null && attr !== 'false'; var counterValue = (counterMap.get(node) || 0) + 1; var markerValue = (markerCounter.get(node) || 0) + 1; counterMap.set(node, counterValue); markerCounter.set(node, markerValue); hiddenNodes.push(node); if (counterValue === 1 && alreadyHidden) { uncontrolledNodes.set(node, true); } if (markerValue === 1) { node.setAttribute(markerName, 'true'); } if (!alreadyHidden) { node.setAttribute(controlAttribute, 'true'); } } catch (e) { console.error('aria-hidden: cannot operate on ', node, e); } } }); }; deep(parentNode); elementsToKeep.clear(); lockCount++; return function () { hiddenNodes.forEach(function (node) { var counterValue = counterMap.get(node) - 1; var markerValue = markerCounter.get(node) - 1; counterMap.set(node, counterValue); markerCounter.set(node, markerValue); if (!counterValue) { if (!uncontrolledNodes.has(node)) { node.removeAttribute(controlAttribute); } uncontrolledNodes.delete(node); } if (!markerValue) { node.removeAttribute(markerName); } }); lockCount--; if (!lockCount) { // clear counterMap = new WeakMap(); counterMap = new WeakMap(); uncontrolledNodes = new WeakMap(); markerMap = {}; } }; }; /** * Marks everything except given node(or nodes) as aria-hidden * @param {Element | Element[]} originalTarget - elements to keep on the page * @param [parentNode] - top element, defaults to document.body * @param {String} [markerName] - a special attribute to mark every node * @return {Undo} undo command */ var hideOthers = function (originalTarget, parentNode, markerName) { if (markerName === void 0) { markerName = 'data-aria-hidden'; } var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]); var activeParentNode = parentNode || getDefaultParent(originalTarget); if (!activeParentNode) { return function () { return null; }; } // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10 // and script elements, as they have no impact on accessibility. targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script'))); return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden'); }; /** * Marks everything except given node(or nodes) as inert * @param {Element | Element[]} originalTarget - elements to keep on the page * @param [parentNode] - top element, defaults to document.body * @param {String} [markerName] - a special attribute to mark every node * @return {Undo} undo command */ var inertOthers = function (originalTarget, parentNode, markerName) { if (markerName === void 0) { markerName = 'data-inert-ed'; } var activeParentNode = parentNode || getDefaultParent(originalTarget); if (!activeParentNode) { return function () { return null; }; } return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert'); }; /** * @returns if current browser supports inert */ var supportsInert = function () { return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert'); }; /** * Automatic function to "suppress" DOM elements - _hide_ or _inert_ in the best possible way * @param {Element | Element[]} originalTarget - elements to keep on the page * @param [parentNode] - top element, defaults to document.body * @param {String} [markerName] - a special attribute to mark every node * @return {Undo} undo command */ var suppressOthers = function (originalTarget, parentNode, markerName) { if (markerName === void 0) { markerName = 'data-suppressed'; } return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName); }; /***/ }, /***/ "./resources/js/App.tsx" /*!******************************!*\ !*** ./resources/js/App.tsx ***! \******************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ App: () => (/* binding */ App) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _components_templates_AppShell__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/templates/AppShell */ "./resources/js/components/templates/AppShell.tsx"); /* harmony import */ var _components_organisms_AppLoader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/organisms/AppLoader */ "./resources/js/components/organisms/AppLoader.tsx"); /* harmony import */ var _components_organisms_WelcomeScreen__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/organisms/WelcomeScreen */ "./resources/js/components/organisms/WelcomeScreen.tsx"); /* harmony import */ var _components_ui_toast__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/toast */ "./resources/js/components/ui/toast.tsx"); /* harmony import */ var _components_atoms_ErrorBoundary__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/atoms/ErrorBoundary */ "./resources/js/components/atoms/ErrorBoundary.tsx"); /* harmony import */ var _components_organisms_ErrorModal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/organisms/ErrorModal */ "./resources/js/components/organisms/ErrorModal.tsx"); /* harmony import */ var _context_toast_context__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/context/toast-context */ "./resources/js/context/toast-context.tsx"); /* harmony import */ var _context_filter_context__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/context/filter-context */ "./resources/js/context/filter-context.tsx"); /* harmony import */ var _context_error_modal_context__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/context/error-modal-context */ "./resources/js/context/error-modal-context.tsx"); /* harmony import */ var _context_harbor_data_context__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/context/harbor-data-context */ "./resources/js/context/harbor-data-context.tsx"); /* harmony import */ var _context_reload_banner_context__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/context/reload-banner-context */ "./resources/js/context/reload-banner-context.tsx"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__); /** * @package LiquidWeb\Harbor */ function AppContent() { const { isLicenseLoading } = (0,_context_harbor_data_context__WEBPACK_IMPORTED_MODULE_11__.useHarborData)(); const hasLicense = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_13__.store).hasLicense(), []); // Latch: once we've ever seen a license during this mount, stay in // AppShell. Guards against license removal and transient refresh // failures bouncing the user back to the welcome screen. Mirrors the // hasEverResolvedRef pattern in harbor-data-context.tsx. const hasEverHadLicenseRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false); if (hasLicense) { hasEverHadLicenseRef.current = true; } if (hasEverHadLicenseRef.current) return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_templates_AppShell__WEBPACK_IMPORTED_MODULE_2__.AppShell, {}); if (isLicenseLoading) return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_organisms_AppLoader__WEBPACK_IMPORTED_MODULE_3__.AppLoader, {}); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_organisms_WelcomeScreen__WEBPACK_IMPORTED_MODULE_4__.WelcomeScreen, {}); } const App = () => { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_context_toast_context__WEBPACK_IMPORTED_MODULE_8__.ToastProvider, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_context_reload_banner_context__WEBPACK_IMPORTED_MODULE_12__.ReloadBannerProvider, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_context_filter_context__WEBPACK_IMPORTED_MODULE_9__.FilterProvider, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_context_error_modal_context__WEBPACK_IMPORTED_MODULE_10__.ErrorModalProvider, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_context_harbor_data_context__WEBPACK_IMPORTED_MODULE_11__.HarborDataProvider, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_components_atoms_ErrorBoundary__WEBPACK_IMPORTED_MODULE_6__.ErrorBoundary, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(AppContent, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_ui_toast__WEBPACK_IMPORTED_MODULE_5__.Toaster, {})] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_organisms_ErrorModal__WEBPACK_IMPORTED_MODULE_7__.ErrorModal, {})] }) }) }) }) }); }; /***/ }, /***/ "./resources/js/components/atoms/ErrorBoundary.tsx" /*!*********************************************************!*\ !*** ./resources/js/components/atoms/ErrorBoundary.tsx ***! \*********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ErrorBoundary: () => (/* binding */ ErrorBoundary) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__); /** * React error boundary. * * Wrap any subtree to prevent a render crash from taking down the whole page. * Used in App.tsx and around each tab panel in AppShell.tsx. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ class ErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_0__.Component { state = { hasError: false }; static getDerivedStateFromError() { return { hasError: true }; } render() { if (this.state.hasError) { return this.props.fallback ?? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p", { className: "px-4 py-6 text-sm text-muted-foreground text-center", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('An unexpected error occurred. Please reload the page.', '%TEXTDOMAIN%') }); } return this.props.children; } } /***/ }, /***/ "./resources/js/components/atoms/ErrorItem.tsx" /*!*****************************************************!*\ !*** ./resources/js/components/atoms/ErrorItem.tsx ***! \*****************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ErrorItem: () => (/* binding */ ErrorItem) /* harmony export */ }); /* harmony import */ var _errors_harbor_error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/errors/harbor-error */ "./resources/js/errors/harbor-error.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Displays a HarborError as a bullet item, recursively nesting the cause * chain beneath the top-level message. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function ErrorItem({ error, nested = false }) { const cause = error.cause instanceof _errors_harbor_error__WEBPACK_IMPORTED_MODULE_0__["default"] ? error.cause : null; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("li", { className: "flex flex-col gap-2 m-0", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("span", { className: `flex items-start gap-2 text-sm ${nested ? 'text-muted-foreground' : 'font-medium text-foreground'}`, children: [!nested && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span", { className: "mt-1.5 shrink-0 w-1.5 h-1.5 rounded-full bg-destructive", "aria-hidden": "true" }), error.message] }), cause && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("ul", { className: "ml-4 space-y-1 border-l-2 border-border pl-4", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(ErrorItem, { error: cause, nested: true }) })] }); } /***/ }, /***/ "./resources/js/components/atoms/FeatureIcon.tsx" /*!*******************************************************!*\ !*** ./resources/js/components/atoms/FeatureIcon.tsx ***! \*******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FeatureIcon: () => (/* binding */ FeatureIcon) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /** * Feature icon resolved from a slug-based SVG asset. * * Renders a 32×32 placeholder box until per-feature SVG assets are * provided by the design team and added to resources/js/img/. * * @package LiquidWeb\Harbor */ // Feature logo assets are added here as they are delivered by design. // Key: feature slug. Value: imported SVG URL. const FEATURE_LOGOS = {}; /** * @since 1.0.0 */ function FeatureIcon({ slug }) { const src = FEATURE_LOGOS[slug]; if (!src) { return null; } return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("img", { src: src, alt: "", className: "shrink-0 rounded w-8 h-8" }); } /***/ }, /***/ "./resources/js/components/atoms/LicenseBadge.tsx" /*!********************************************************!*\ !*** ./resources/js/components/atoms/LicenseBadge.tsx ***! \********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LicenseBadge: () => (/* binding */ LicenseBadge) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _components_ui_badge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/ui/badge */ "./resources/js/components/ui/badge.tsx"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); /** * Unified badge for all license-related states. * * Covers tier name, unlicensed, legacy, and free indicators so that * all license badge rendering flows through a single atom. * * @package LiquidWeb\Harbor */ const variantMap = { licensed: 'gradient', unlicensed: 'outline', legacy: 'warning', free: 'secondary', bonus: 'warning', revoked: 'destructive', unactivated: 'warning', expired: 'destructive', cancelled: 'outline', suspended: 'destructive', over_limit: 'warning' }; const labelMap = { unlicensed: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Unlicensed', '%TEXTDOMAIN%'), legacy: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Legacy', '%TEXTDOMAIN%'), free: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Free', '%TEXTDOMAIN%'), bonus: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Bonus', '%TEXTDOMAIN%'), revoked: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Unavailable', '%TEXTDOMAIN%'), unactivated: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Unactivated', '%TEXTDOMAIN%'), expired: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Expired', '%TEXTDOMAIN%'), cancelled: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Cancelled', '%TEXTDOMAIN%'), suspended: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Suspended', '%TEXTDOMAIN%'), over_limit: () => (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Over limit', '%TEXTDOMAIN%') }; /** * @since 1.0.0 */ function LicenseBadge({ type, tierName, className }) { const label = type === 'licensed' ? tierName : labelMap[type](); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_components_ui_badge__WEBPACK_IMPORTED_MODULE_1__.Badge, { variant: variantMap[type], className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(className), children: label }); } /***/ }, /***/ "./resources/js/components/atoms/LicenseKeyInputSkeleton.tsx" /*!*******************************************************************!*\ !*** ./resources/js/components/atoms/LicenseKeyInputSkeleton.tsx ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LicenseKeyInputSkeleton: () => (/* binding */ LicenseKeyInputSkeleton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /** * Pulse-skeleton that mirrors the LicenseKeyInput locked state while the * license resolver is still in flight. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function LicenseKeyInputSkeleton() { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex items-center gap-2 animate-pulse", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "h-9 flex-1 rounded-md bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "h-3.5 w-8 rounded bg-muted shrink-0" })] }); } /***/ }, /***/ "./resources/js/components/atoms/NexcessLogo.tsx" /*!*******************************************************!*\ !*** ./resources/js/components/atoms/NexcessLogo.tsx ***! \*******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ NexcessLogo: () => (/* binding */ NexcessLogo) /* harmony export */ }); /* harmony import */ var _img_logo_nexcess_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @img/logo-nexcess.svg */ "./resources/img/logo-nexcess.svg"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Nexcess brand mark used in the welcome flow. * * Decorative — the visible "Software License Manager" heading carries the * accessible name. Uses the default URL-string export from the SVG loader, * matching ProductLogo and FilterBar. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 */ function NexcessLogo({ className }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("img", { src: _img_logo_nexcess_svg__WEBPACK_IMPORTED_MODULE_0__["default"], alt: "", "aria-hidden": "true", className: className }); } /***/ }, /***/ "./resources/js/components/atoms/ProductLogo.tsx" /*!*******************************************************!*\ !*** ./resources/js/components/atoms/ProductLogo.tsx ***! \*******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ProductLogo: () => (/* binding */ ProductLogo) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _img_logo_give_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @img/logo-give.svg */ "./resources/img/logo-give.svg"); /* harmony import */ var _img_logo_tec_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @img/logo-tec.svg */ "./resources/img/logo-tec.svg"); /* harmony import */ var _img_logo_learndash_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @img/logo-learndash.svg */ "./resources/img/logo-learndash.svg"); /* harmony import */ var _img_logo_kadence_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @img/logo-kadence.svg */ "./resources/img/logo-kadence.svg"); /* harmony import */ var _img_logo_givewp_nobg_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @img/logo-givewp-nobg.svg */ "./resources/img/logo-givewp-nobg.svg"); /* harmony import */ var _img_logo_learndash_nobg_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @img/logo-learndash-nobg.svg */ "./resources/img/logo-learndash-nobg.svg"); /* harmony import */ var _img_logo_tec_nobg_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @img/logo-tec-nobg.svg */ "./resources/img/logo-tec-nobg.svg"); /* harmony import */ var _img_logo_kadence_nobg_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @img/logo-kadence-nobg.svg */ "./resources/img/logo-kadence-nobg.svg"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__); /** * Product logo resolved from a slug-based SVG asset. * * Falls back to a neutral placeholder box when no asset is found. * Use variant="nobg" for the transparent (no background) logo variants. * * @package LiquidWeb\Harbor */ const LOGOS = { give: _img_logo_give_svg__WEBPACK_IMPORTED_MODULE_1__["default"], 'the-events-calendar': _img_logo_tec_svg__WEBPACK_IMPORTED_MODULE_2__["default"], learndash: _img_logo_learndash_svg__WEBPACK_IMPORTED_MODULE_3__["default"], kadence: _img_logo_kadence_svg__WEBPACK_IMPORTED_MODULE_4__["default"] }; const LOGOS_NOBG = { give: _img_logo_givewp_nobg_svg__WEBPACK_IMPORTED_MODULE_5__["default"], 'the-events-calendar': _img_logo_tec_nobg_svg__WEBPACK_IMPORTED_MODULE_7__["default"], learndash: _img_logo_learndash_nobg_svg__WEBPACK_IMPORTED_MODULE_6__["default"], kadence: _img_logo_kadence_nobg_svg__WEBPACK_IMPORTED_MODULE_8__["default"] }; /** * @since 1.0.0 */ function ProductLogo({ slug, size, productName, variant = 'default' }) { const src = (variant === 'nobg' ? LOGOS_NOBG : LOGOS)[slug]; /* translators: %s: product name (e.g. "Kadence", "GiveWP") */ const alt = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('%s logo', '%TEXTDOMAIN%'), productName); if (!src) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div", { className: "rounded bg-muted shrink-0", role: "img", "aria-label": alt, style: { width: size, height: size } }); } return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("img", { src: src, alt: alt, className: "shrink-0 rounded", style: { width: size, height: size } }); } /***/ }, /***/ "./resources/js/components/atoms/PurchaseLink.tsx" /*!********************************************************!*\ !*** ./resources/js/components/atoms/PurchaseLink.tsx ***! \********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PurchaseLink: () => (/* binding */ PurchaseLink) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/external-link.js"); /* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ "./resources/js/components/ui/button.tsx"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__); /** * @since 1.0.0 */ function PurchaseLink({ tierName, upgradeUrl, mode = 'upgrade', className }) { const label = mode === 'upgrade' ? /* translators: %s is the name of the license tier to upgrade to */ (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Upgrade to %s', '%TEXTDOMAIN%'), tierName) : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Learn more', '%TEXTDOMAIN%'); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("a", { href: upgradeUrl, target: "_blank", rel: "noopener noreferrer", className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)((0,_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.buttonVariants)({ variant: 'outline', size: 'sm' }), 'h-7 gap-1 text-xs', className), children: [label, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-3 h-3 -translate-y-px" })] }); } /***/ }, /***/ "./resources/js/components/atoms/SectionHeader.tsx" /*!*********************************************************!*\ !*** ./resources/js/components/atoms/SectionHeader.tsx ***! \*********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ SectionHeader: () => (/* binding */ SectionHeader) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /** * Sidebar section header: icon + uppercase label + optional trailing action. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function SectionHeader({ icon, label, action }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex items-center gap-2.5", children: [icon, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "flex-1 text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: label }), action] }); } /***/ }, /***/ "./resources/js/components/atoms/StatusBadge.tsx" /*!*******************************************************!*\ !*** ./resources/js/components/atoms/StatusBadge.tsx ***! \*******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ StatusBadge: () => (/* binding */ StatusBadge) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/loader-circle.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/download.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/lock.js"); /* harmony import */ var _components_ui_badge__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/badge */ "./resources/js/components/ui/badge.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__); const SPAN_CONFIG = { enabling: { label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Activating\u2026', '%TEXTDOMAIN%'), color: 'text-primary' }, disabling: { label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Deactivating\u2026', '%TEXTDOMAIN%'), color: 'text-muted-foreground' }, enabled: { label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Activated', '%TEXTDOMAIN%'), color: 'text-green-600' }, available: { label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Deactivated', '%TEXTDOMAIN%'), color: 'text-muted-foreground' } }; /** * @since 1.0.0 */ function StatusBadge({ status, requiredTier }) { if (status === 'installing' || status === 'updating') { const label = status === 'installing' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Installing\u2026', '%TEXTDOMAIN%') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Updating\u2026', '%TEXTDOMAIN%'); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { className: "flex flex-col items-end gap-0.5 w-36", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { className: "flex items-center gap-2 w-full", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-3.5 h-3.5 text-muted-foreground animate-pulse shrink-0" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.ProgressBar, { className: "h-1.5 rounded-full bg-muted [&>div]:bg-primary" })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { className: "text-[10px] text-muted-foreground", children: label })] }); } if (status === 'included') { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_components_ui_badge__WEBPACK_IMPORTED_MODULE_5__.Badge, { variant: "success", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Included', '%TEXTDOMAIN%') }); } const config = SPAN_CONFIG[status]; if (config) { const showSpinner = status === 'enabling' || status === 'disabling'; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("span", { className: `text-xs w-25 text-right ${config.color} flex items-center gap-1 justify-end`, children: [showSpinner && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-3 h-3 animate-spin" }), config.label] }); } if (status === 'locked' && requiredTier) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_components_ui_badge__WEBPACK_IMPORTED_MODULE_5__.Badge, { variant: "warning", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_4__["default"], { className: "w-3 h-3" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Requires %s', '%TEXTDOMAIN%'), requiredTier)] }); } // unlicensed or locked without tier label — lock icon prepended to "Deactivated" return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("span", { className: "text-xs w-25 text-right text-muted-foreground flex items-center gap-1 justify-end", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_4__["default"], { className: "w-3 h-3" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Deactivated', '%TEXTDOMAIN%')] }); } /***/ }, /***/ "./resources/js/components/atoms/UpdateButton.tsx" /*!********************************************************!*\ !*** ./resources/js/components/atoms/UpdateButton.tsx ***! \********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ UpdateButton: () => (/* binding */ UpdateButton) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/download.js"); /* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ "./resources/js/components/ui/button.tsx"); /* harmony import */ var _components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/tooltip */ "./resources/js/components/ui/tooltip.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__); /** * Icon button that triggers a feature update. * * When upgradeLabel is provided the button is rendered disabled with an * upsell tooltip. The Tooltip component handles the span wrapper needed to * keep hover events working when pointer-events are disabled on the button. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function UpdateButton({ featureName, disabled = false, onClick, upgradeLabel }) { const button = /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, { variant: "default", size: "icon-xs", className: "rounded-full", disabled: !!upgradeLabel || disabled, onClick: onClick, "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Update %s', '%TEXTDOMAIN%'), featureName), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-3.5 h-3.5" }) }); return upgradeLabel ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_3__.Tooltip, { label: upgradeLabel, children: button }) : button; } /***/ }, /***/ "./resources/js/components/molecules/FeatureRow.tsx" /*!**********************************************************!*\ !*** ./resources/js/components/molecules/FeatureRow.tsx ***! \**********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FeatureRow: () => (/* binding */ FeatureRow) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-down.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-right.js"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var _components_atoms_FeatureIcon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/atoms/FeatureIcon */ "./resources/js/components/atoms/FeatureIcon.tsx"); /* harmony import */ var _components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/atoms/LicenseBadge */ "./resources/js/components/atoms/LicenseBadge.tsx"); /* harmony import */ var _components_atoms_StatusBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/atoms/StatusBadge */ "./resources/js/components/atoms/StatusBadge.tsx"); /* harmony import */ var _components_molecules_VersionDisplay__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/molecules/VersionDisplay */ "./resources/js/components/molecules/VersionDisplay.tsx"); /* harmony import */ var _components_ui_switch__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/components/ui/switch */ "./resources/js/components/ui/switch.tsx"); /* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/ui/button */ "./resources/js/components/ui/button.tsx"); /* harmony import */ var _components_ui_dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/components/ui/dialog */ "./resources/js/components/ui/dialog.tsx"); /* harmony import */ var _hooks_useFeatureRow__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/hooks/useFeatureRow */ "./resources/js/hooks/useFeatureRow.ts"); /* harmony import */ var _types_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/types/utils */ "./resources/js/types/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__); /** * A single feature row in the product feature list. * * Clicking the row header expands/collapses the feature description. * The toggle switch remains independently clickable. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function FeatureRow({ feature, upgradeTierName }) { const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); const { pendingAction, installableBusy, badgeStatus, showSwitch, switchChecked, licenseBadgeType, showDeactivateConfirm, handleToggle, handleUpdate, handleConfirmDeactivate, handleCancelDeactivate } = (0,_hooks_useFeatureRow__WEBPACK_IMPORTED_MODULE_12__.useFeatureRow)(feature); const Chevron = expanded ? lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"] : lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"]; // Legacy-licensed and revoked features are not marked available by the API // but should render with the full available layout — controls visible, no muted style. // This override only applies to installable features (plugins/themes) since // non-installable features (services) have no controls to show. const isVisuallyAvailable = feature.is_available || (0,_types_utils__WEBPACK_IMPORTED_MODULE_13__.isInstallableFeature)(feature) && (licenseBadgeType === 'legacy' || licenseBadgeType === 'revoked'); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_4__.cn)('border-b last:border-b-0', isVisuallyAvailable ? (0,_lib_utils__WEBPACK_IMPORTED_MODULE_4__.cn)('bg-white', pendingAction && 'opacity-75') : 'bg-muted/30'), children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div", { className: "flex items-center gap-3 py-3 px-4", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div", { onClick: () => setExpanded(!expanded), className: "flex items-center gap-2 min-w-0 cursor-pointer", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(Chevron, { className: "w-4 h-4 text-muted-foreground shrink-0" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_atoms_FeatureIcon__WEBPACK_IMPORTED_MODULE_5__.FeatureIcon, { slug: feature.slug }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("span", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_4__.cn)('font-medium min-w-0 text-sm truncate', !isVisuallyAvailable && 'text-muted-foreground'), children: feature.name }), licenseBadgeType && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_6__.LicenseBadge, { type: licenseBadgeType })] }), isVisuallyAvailable ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div", { className: "flex items-center gap-3 ml-auto shrink-0", children: (0,_types_utils__WEBPACK_IMPORTED_MODULE_13__.isInstallableFeature)(feature) ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_molecules_VersionDisplay__WEBPACK_IMPORTED_MODULE_8__.VersionDisplay, { feature: feature, pendingAction: pendingAction, installableBusy: installableBusy, upgradeLabel: licenseBadgeType === 'legacy' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Upgrade your license to manage updates from the Software License Manager.', '%TEXTDOMAIN%') : undefined, onUpdate: licenseBadgeType === 'legacy' || licenseBadgeType === 'revoked' ? undefined : handleUpdate }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_atoms_StatusBadge__WEBPACK_IMPORTED_MODULE_7__.StatusBadge, { status: badgeStatus }), showSwitch && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_ui_switch__WEBPACK_IMPORTED_MODULE_9__.Switch, { checked: switchChecked, onCheckedChange: handleToggle, disabled: !!pendingAction || installableBusy || licenseBadgeType === 'revoked' && !switchChecked, "aria-label": switchChecked ? /* translators: %s is the name of the feature to disable */ (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Disable %s', '%TEXTDOMAIN%'), feature.name) : /* translators: %s is the name of the feature to enable */ (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Enable %s', '%TEXTDOMAIN%'), feature.name) })] }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_atoms_StatusBadge__WEBPACK_IMPORTED_MODULE_7__.StatusBadge, { status: badgeStatus }) }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div", { className: "ml-auto shrink-0", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_molecules_VersionDisplay__WEBPACK_IMPORTED_MODULE_8__.VersionDisplay, { feature: feature, upgradeLabel: upgradeTierName ? /* translators: %s is the name of the tier required to receive updates */ (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Upgrade to %s to receive updates and support.', '%TEXTDOMAIN%'), upgradeTierName) : undefined }) })] }), expanded && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div", { className: "px-4 pb-3 pl-11", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("p", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_4__.cn)('text-sm text-muted-foreground leading-relaxed', isVisuallyAvailable ? 'mt-[0.75em]! mb-0!' : 'mt-2 mb-0'), children: feature.description }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_11__.Dialog, { open: showDeactivateConfirm, onClose: handleCancelDeactivate, maxWidth: "max-w-md", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_11__.DialogHeader, { title: /* translators: %s is the name of the feature being deactivated */ (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Deactivate %s?', '%TEXTDOMAIN%'), feature.name), description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('This plugin powers this page. Deactivating it will make this page unavailable until it is reactivated from the WordPress Plugins page.', '%TEXTDOMAIN%'), onClose: handleCancelDeactivate }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_11__.DialogFooter, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_ui_button__WEBPACK_IMPORTED_MODULE_10__.Button, { variant: "outline", onClick: handleCancelDeactivate, children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Cancel', '%TEXTDOMAIN%') }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_ui_button__WEBPACK_IMPORTED_MODULE_10__.Button, { variant: "destructive", onClick: handleConfirmDeactivate, disabled: pendingAction === 'disabling', children: pendingAction === 'disabling' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Deactivating…', '%TEXTDOMAIN%') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Deactivate', '%TEXTDOMAIN%') })] })] })] }); } /***/ }, /***/ "./resources/js/components/molecules/FilterBar.tsx" /*!*********************************************************!*\ !*** ./resources/js/components/molecules/FilterBar.tsx ***! \*********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FilterBar: () => (/* binding */ FilterBar) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/search.js"); /* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/input */ "./resources/js/components/ui/input.tsx"); /* harmony import */ var _components_ui_select__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/select */ "./resources/js/components/ui/select.tsx"); /* harmony import */ var _data_products__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/products */ "./resources/js/data/products.ts"); /* harmony import */ var _context_filter_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/context/filter-context */ "./resources/js/context/filter-context.tsx"); /* harmony import */ var _img_logo_lw_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @img/logo-lw.svg */ "./resources/img/logo-lw.svg"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__); /** * Page header filter bar. * * Displays the product logo, a feature search input, and a product filter * dropdown. Both inputs are wired to FilterContext via useFilter(). * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function FilterBar() { const { searchQuery, setSearchQuery, productFilter, setProductFilter } = (0,_context_filter_context__WEBPACK_IMPORTED_MODULE_5__.useFilter)(); const handleProductChange = slug => { setProductFilter(slug); if (slug !== 'all') { setSearchQuery(''); } }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { className: "flex flex-wrap items-center gap-3", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("img", { src: _img_logo_lw_svg__WEBPACK_IMPORTED_MODULE_6__["default"], alt: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Liquid Web Software Manager', '%TEXTDOMAIN%'), className: "w-[130px] shrink-0" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { className: "relative w-[260px]", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_input__WEBPACK_IMPORTED_MODULE_2__.Input, { value: searchQuery, onChange: e => setSearchQuery(e.target.value), placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Search features…', '%TEXTDOMAIN%'), className: "pl-10 text-sm" })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_components_ui_select__WEBPACK_IMPORTED_MODULE_3__.Select, { value: productFilter, onValueChange: handleProductChange, children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_select__WEBPACK_IMPORTED_MODULE_3__.SelectTrigger, { className: "w-[168px]", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_select__WEBPACK_IMPORTED_MODULE_3__.SelectValue, { placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Products', '%TEXTDOMAIN%') }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_components_ui_select__WEBPACK_IMPORTED_MODULE_3__.SelectContent, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_select__WEBPACK_IMPORTED_MODULE_3__.SelectItem, { value: "all", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Products', '%TEXTDOMAIN%') }), _data_products__WEBPACK_IMPORTED_MODULE_4__.PRODUCTS.map(p => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_select__WEBPACK_IMPORTED_MODULE_3__.SelectItem, { value: p.slug, children: p.name }, p.slug))] })] })] }); } /***/ }, /***/ "./resources/js/components/molecules/LegacyLicenseBanner.tsx" /*!*******************************************************************!*\ !*** ./resources/js/components/molecules/LegacyLicenseBanner.tsx ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LegacyLicenseBanner: () => (/* binding */ LegacyLicenseBanner) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/triangle-alert.js"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__); /** * Amber warning banner shown when one or more legacy licenses are active. * * Legacy license data is fetched from the REST API via the store's * getLegacyLicenses resolver. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 Read subscriptionsUrl through the getHarborDataValue helper. * @since 1.0.0 */ function LegacyLicenseBanner() { const hasLegacy = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_4__.store).hasUncoveredLegacyLicenses(), []); const portalUrl = (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_5__.getHarborDataValue)('subscriptionsUrl'); if (!hasLegacy || !portalUrl) { return null; } return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { role: "alert", className: "flex items-start gap-3 rounded-lg border border-amber-200 bg-amber-50 mt-8 mb-0 px-4 py-3 text-sm text-amber-800", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-4 h-4 shrink-0 mt-0.5" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("p", { className: "m-0", children: (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createInterpolateElement)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('You have one or more legacy licenses active. They continue to receive product updates while valid. Consider <a>switching to a unified license</a> to manage all your products with a single key.', '%TEXTDOMAIN%'), { a: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("a", { href: portalUrl, target: "_blank", rel: "noopener noreferrer", className: "underline font-medium" }) }) })] }); } /***/ }, /***/ "./resources/js/components/molecules/LicenseKeyInput.tsx" /*!***************************************************************!*\ !*** ./resources/js/components/molecules/LicenseKeyInput.tsx ***! \***************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LicenseKeyInput: () => (/* binding */ LicenseKeyInput) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/loader-circle.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/pencil.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/trash-2.js"); /* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/ui/input */ "./resources/js/components/ui/input.tsx"); /* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/ui/button */ "./resources/js/components/ui/button.tsx"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _context_toast_context__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/context/toast-context */ "./resources/js/context/toast-context.tsx"); /* harmony import */ var _context_error_modal_context__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/context/error-modal-context */ "./resources/js/context/error-modal-context.tsx"); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/errors */ "./resources/js/errors/index.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__); /** * License key input. * * Renders in three states controlled by the parent: * - Empty (currentKey === null): editable input with Activate button. * - Locked (currentKey set, !isEditing): read-only display with inline Edit button. * - Editing (currentKey set, isEditing): editable input pre-filled with the stored key, * plus Activate, Cancel, and Remove buttons. * * Wires activation to the @wordpress/data store. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 Use the shared getLicenseKeyPlaceholder helper for the placeholder. * @since 1.0.0 */ function LicenseKeyInput({ currentKey, isEditing, onEdit, onCancel, onRemove, onSuccess }) { const [key, setKey] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(currentKey || ''); const [localError, setLocalError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); const { storeLicense } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useDispatch)(_store__WEBPACK_IMPORTED_MODULE_8__.store); const { addToast } = (0,_context_toast_context__WEBPACK_IMPORTED_MODULE_9__.useToast)(); const { addError } = (0,_context_error_modal_context__WEBPACK_IMPORTED_MODULE_10__.useErrorModal)(); const { isStoring, canModifyLicense } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => ({ isStoring: select(_store__WEBPACK_IMPORTED_MODULE_8__.store).isLicenseStoring(), canModifyLicense: select(_store__WEBPACK_IMPORTED_MODULE_8__.store).canModifyLicense() }), []); // Seed the editable value from the stored key when entering edit mode. (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (isEditing && currentKey) { setKey(currentKey); } if (!isEditing) { setKey(currentKey || ''); setLocalError(null); } }, [isEditing, currentKey]); const handleActivate = async () => { const trimmedKey = key.trim(); if (!trimmedKey) { setLocalError((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Please enter a license key.', '%TEXTDOMAIN%')); return; } setLocalError(null); const result = await storeLicense(trimmedKey); if (result instanceof _errors__WEBPACK_IMPORTED_MODULE_11__.HarborError) { addError(result); } else { addToast((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('License activated successfully.', '%TEXTDOMAIN%'), 'success'); setKey(''); onSuccess(); } }; const handleRemove = async () => { const error = await onRemove(); if (!error) { setKey(''); setLocalError(null); } }; const inputWithActivate = /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("div", { className: "flex gap-2", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_components_ui_input__WEBPACK_IMPORTED_MODULE_6__.Input, { id: "license-key-input", placeholder: (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_12__.getLicenseKeyPlaceholder)(), value: key, onChange: e => { setKey(e.target.value.toUpperCase()); if (localError) setLocalError(null); }, onKeyDown: e => e.key === 'Enter' && canModifyLicense && handleActivate(), className: "flex-1 text-xs font-mono uppercase", "aria-invalid": !!localError, "aria-describedby": localError ? 'license-key-error' : undefined, disabled: !canModifyLicense // eslint-disable-next-line jsx-a11y/no-autofocus , autoFocus: isEditing }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_components_ui_button__WEBPACK_IMPORTED_MODULE_7__.Button, { onClick: handleActivate, disabled: !canModifyLicense || !key.trim(), children: isStoring ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-4 h-4 animate-spin" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Verifying\u2026', '%TEXTDOMAIN%')] }) : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Save', '%TEXTDOMAIN%') })] }); // ----- Locked state ----- if (currentKey !== null && !isEditing) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("div", { className: "flex items-center gap-2", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_components_ui_input__WEBPACK_IMPORTED_MODULE_6__.Input, { readOnly: true, value: currentKey, className: "flex-1 text-xs font-mono uppercase bg-neutral-100 cursor-default select-all", tabIndex: -1 }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("button", { type: "button", onClick: onEdit, className: "flex shrink-0 items-center gap-1 text-[11px] text-muted-foreground transition-colors hover:opacity-75", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_4__["default"], { className: "w-3 h-3" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Edit', '%TEXTDOMAIN%')] })] }); } // ----- Editing state ----- if (currentKey !== null && isEditing) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("div", { className: "space-y-2", children: [inputWithActivate, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("div", { className: "flex items-center justify-between", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("button", { type: "button", onClick: handleRemove, disabled: !canModifyLicense, className: "flex items-center gap-1 text-[11px] text-destructive transition-colors hover:opacity-75 disabled:opacity-50", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_5__["default"], { className: "w-3 h-3" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Remove license', '%TEXTDOMAIN%')] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("button", { type: "button", onClick: onCancel, disabled: !canModifyLicense, className: "text-[11px] text-muted-foreground transition-colors hover:opacity-75 disabled:opacity-50", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Cancel', '%TEXTDOMAIN%') })] }), localError && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("p", { id: "license-key-error", className: "text-sm text-destructive", role: "alert", children: localError })] }); } // ----- Empty state ----- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("div", { className: "space-y-3", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("label", { className: "text-sm font-medium", htmlFor: "license-key-input", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Enter License Key', '%TEXTDOMAIN%') }), inputWithActivate, isStoring && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)("p", { className: "text-sm text-muted-foreground flex items-center gap-1.5", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-3.5 h-3.5 animate-spin" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Checking license with server\u2026', '%TEXTDOMAIN%')] }), localError && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("p", { id: "license-key-error", className: "text-sm text-destructive", role: "alert", children: localError })] }); } /***/ }, /***/ "./resources/js/components/molecules/LicenseProductCard.tsx" /*!******************************************************************!*\ !*** ./resources/js/components/molecules/LicenseProductCard.tsx ***! \******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LicenseProductCard: () => (/* binding */ LicenseProductCard) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-down.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-up.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/external-link.js"); /* harmony import */ var _components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/atoms/LicenseBadge */ "./resources/js/components/atoms/LicenseBadge.tsx"); /* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/ui/button */ "./resources/js/components/ui/button.tsx"); /* harmony import */ var _components_ui_tooltip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/ui/tooltip */ "./resources/js/components/ui/tooltip.tsx"); /* harmony import */ var _components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/atoms/ProductLogo */ "./resources/js/components/atoms/ProductLogo.tsx"); /* harmony import */ var _lib_activation_url__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/lib/activation-url */ "./resources/js/lib/activation-url.ts"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var _lib_license_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/lib/license-utils */ "./resources/js/lib/license-utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__); /** * Card showing a single licensed product: logo, name, tier badge, and an * expandable list of per-tier rows with expiry dates and Activate buttons. * * @package LiquidWeb\Harbor */ function getStatusBadgeType(lp) { switch (lp.validation_status) { case 'not_activated': case 'activation_required': return 'unactivated'; case 'expired': return 'expired'; case 'cancelled': return 'cancelled'; case 'suspended': case 'license_suspended': case 'license_banned': return 'suspended'; case 'out_of_activations': return 'over_limit'; default: return 'unlicensed'; } } /** * @since 1.0.0 */ function LicenseProductCard({ productSlug, productName, tiers, tierNameMap, activationUrl }) { const activatedTiers = tiers.filter(lp => lp.is_valid && lp.activated_here === true); const hasActivatedTier = activatedTiers.length > 0; const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!hasActivatedTier); const Chevron = isOpen ? lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"] : lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"]; const topActivatedTier = activatedTiers[activatedTiers.length - 1]; const headerBadge = hasActivatedTier && topActivatedTier ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_5__.LicenseBadge, { type: "licensed", tierName: tierNameMap[topActivatedTier.tier] ?? topActivatedTier.tier, className: "text-[10px] shrink-0" }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_5__.LicenseBadge, { type: getStatusBadgeType(tiers[0]), className: "text-[10px] shrink-0" }); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", { className: "rounded-lg border bg-card overflow-hidden", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("button", { type: "button", "aria-expanded": isOpen, onClick: () => setIsOpen(v => !v), className: "w-full flex items-center gap-2 px-3 py-2.5 text-left cursor-pointer", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_8__.ProductLogo, { slug: productSlug, size: 24, variant: "nobg", productName: productName }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", { className: "text-sm font-medium text-foreground flex-1 min-w-0 truncate text-left", children: productName }), headerBadge, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(Chevron, { className: "w-3.5 h-3.5 text-muted-foreground shrink-0 transition-transform duration-150" })] }), isOpen && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("div", { className: "border-t", children: tiers.map(lp => { const expiryStatus = (0,_lib_license_utils__WEBPACK_IMPORTED_MODULE_11__.getExpiryStatus)(lp.expires); const isActivatedHere = lp.is_valid && lp.activated_here === true; const showActivate = !isActivatedHere && !!activationUrl; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", { className: "flex items-center justify-between px-3 py-2 bg-muted/50 border-b last:border-b-0", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", { className: "flex flex-col gap-0.5 min-w-0", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_7__.Tooltip, { label: isActivatedHere ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Activated', '%TEXTDOMAIN%') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Not activated', '%TEXTDOMAIN%'), className: "flex items-center gap-2", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", { className: "font-bold text-[11px] w-fit whitespace-nowrap", children: tierNameMap[lp.tier] ?? lp.tier }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", { "aria-hidden": "true", className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_10__.cn)('size-1.5 rounded-full shrink-0', isActivatedHere ? 'bg-green-500' : 'bg-amber-500') })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("span", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_10__.cn)('text-[11px]', _lib_license_utils__WEBPACK_IMPORTED_MODULE_11__.expiryTextClass[expiryStatus]), children: [expiryStatus === 'expired' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Expired', '%TEXTDOMAIN%') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Expires', '%TEXTDOMAIN%'), ' ', (0,_lib_license_utils__WEBPACK_IMPORTED_MODULE_11__.formatDate)(lp.expires)] })] }), showActivate && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_ui_button__WEBPACK_IMPORTED_MODULE_6__.Button, { variant: "outline", size: "xs", asChild: true, className: "shrink-0 ml-2", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("a", { href: (0,_lib_activation_url__WEBPACK_IMPORTED_MODULE_9__.buildActivationUrl)(activationUrl, lp.product_slug, lp.tier), target: "_blank", rel: "noopener noreferrer", children: [(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Activate', '%TEXTDOMAIN%'), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_4__["default"], { className: "w-3 h-3 -translate-y-px" })] }) })] }, `${lp.product_slug}:${lp.tier}`); }) })] }); } /***/ }, /***/ "./resources/js/components/molecules/NotActivatedBanner.tsx" /*!******************************************************************!*\ !*** ./resources/js/components/molecules/NotActivatedBanner.tsx ***! \******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ NotActivatedBanner: () => (/* binding */ NotActivatedBanner) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/info.js"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__); /** * Info banner shown when all licensed products are unactivated on this domain. * * Fires when every product's validation_status is 'not_activated' or * 'activation_required'. Links to the Liquid Web portal so the user can * activate their license for this domain. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 Read activationUrl through the getHarborDataValue helper. * @since 1.0.0 */ function NotActivatedBanner() { const allNotActivated = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_3__.store).areAllProductsNotActivated(), []); const licenseKey = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getLicenseKey(), []); const activationUrl = (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_4__.getHarborDataValue)('activationUrl'); if (!allNotActivated || !licenseKey || !activationUrl) return null; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { role: "alert", className: "flex items-start gap-3 rounded-lg border border-blue-200 bg-blue-50 mt-8 mb-0 px-4 py-3 text-sm text-blue-800", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-4 h-4 shrink-0 mt-0.5" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("p", { className: "m-0", children: [(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('None of your products are activated for this domain. Activate your license to download and activate premium products.', '%TEXTDOMAIN%'), ' ', /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("a", { href: activationUrl, target: "_blank", rel: "noopener noreferrer", className: "underline font-medium", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Activate now', '%TEXTDOMAIN%') })] })] }); } /***/ }, /***/ "./resources/js/components/molecules/ReloadBanner.tsx" /*!************************************************************!*\ !*** ./resources/js/components/molecules/ReloadBanner.tsx ***! \************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReloadBanner: () => (/* binding */ ReloadBanner) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/refresh-cw.js"); /* harmony import */ var _context_reload_banner_context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/context/reload-banner-context */ "./resources/js/context/reload-banner-context.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); /** * Persistent banner shown when feature toggles require a page reload. * * Uses role="status" + aria-live="polite" so screen readers announce it once * when it appears, without interrupting the current focus. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function ReloadBanner() { const { needsReload } = (0,_context_reload_banner_context__WEBPACK_IMPORTED_MODULE_2__.useReloadBanner)(); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: "ml-auto", children: needsReload && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("button", { type: "button", onClick: () => window.location.reload(), className: "flex items-center gap-2 rounded-md border border-amber-200 bg-amber-50 px-3 py-1.5 text-xs text-amber-800 hover:bg-amber-100 transition-colors", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-3.5 h-3.5 shrink-0", "aria-hidden": "true" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Reload page to see changes', '%TEXTDOMAIN%') })] }) }); } /***/ }, /***/ "./resources/js/components/molecules/TierGroup.tsx" /*!*********************************************************!*\ !*** ./resources/js/components/molecules/TierGroup.tsx ***! \*********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ TierGroup: () => (/* binding */ TierGroup) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-down.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-right.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/lock.js"); /* harmony import */ var _components_ui_badge__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/badge */ "./resources/js/components/ui/badge.tsx"); /* harmony import */ var _components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/atoms/LicenseBadge */ "./resources/js/components/atoms/LicenseBadge.tsx"); /* harmony import */ var _components_atoms_PurchaseLink__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/atoms/PurchaseLink */ "./resources/js/components/atoms/PurchaseLink.tsx"); /* harmony import */ var _components_molecules_FeatureRow__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/molecules/FeatureRow */ "./resources/js/components/molecules/FeatureRow.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__); /** * Collapsible accordion grouping locked features under a tier header. * * Shows the tier name, feature count, a lock indicator, and an upgrade * button. Expanding the accordion reveals the locked FeatureRow entries. * * @package LiquidWeb\Harbor */ /** * @since 1.0.1 Added showUnactivated prop to render an Unactivated badge in place of the upgrade button. * @since 1.0.0 */ function TierGroup({ tier, features, forceOpen = false, showUpgrade = true, showUnactivated = false, buttonHref }) { const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); const isOpen = expanded || forceOpen; const Chevron = isOpen ? lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"] : lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"]; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)("div", { className: "w-full flex items-center gap-2 px-4 py-3 bg-muted/50 border-b", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)("div", { onClick: () => setExpanded(!expanded), className: "flex items-center gap-2 cursor-pointer hover:opacity-80 transition-opacity", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(Chevron, { className: "w-4 h-4 shrink-0 text-muted-foreground" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)("span", { className: "font-medium text-sm", children: [tier.name, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Features', '%TEXTDOMAIN%')] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_components_ui_badge__WEBPACK_IMPORTED_MODULE_5__.Badge, { variant: "secondary", className: "text-xs", children: features.length }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_4__["default"], { className: "w-3.5 h-3.5 text-muted-foreground ml-1" })] }), showUpgrade && buttonHref && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_components_atoms_PurchaseLink__WEBPACK_IMPORTED_MODULE_7__.PurchaseLink, { tierName: tier.name, upgradeUrl: buttonHref, className: "ml-auto shrink-0" }), showUnactivated && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_6__.LicenseBadge, { type: "unactivated", className: "ml-auto shrink-0 text-xs" })] }), isOpen && features.map(feature => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_components_molecules_FeatureRow__WEBPACK_IMPORTED_MODULE_8__.FeatureRow, { feature: feature, upgradeTierName: tier.name }, feature.slug))] }); } /***/ }, /***/ "./resources/js/components/molecules/UpsellCard.tsx" /*!**********************************************************!*\ !*** ./resources/js/components/molecules/UpsellCard.tsx ***! \**********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ UpsellCard: () => (/* binding */ UpsellCard) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/external-link.js"); /* harmony import */ var _components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/atoms/ProductLogo */ "./resources/js/components/atoms/ProductLogo.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); /** * Upsell card for a product not covered by the current license. * * @package LiquidWeb\Harbor */ const UPSELL_TAGLINES = { give: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Beautiful donation forms & fundraising', '%TEXTDOMAIN%'), 'the-events-calendar': (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Tickets, RSVPs & event management', '%TEXTDOMAIN%'), learndash: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Sell courses & manage learners', '%TEXTDOMAIN%'), kadence: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Themes, blocks & design tools', '%TEXTDOMAIN%') }; /** * @since 1.0.0 */ function UpsellCard({ product, href }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-2.5 rounded-xl border bg-card px-4 py-3 hover:bg-muted/50 transition-colors", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_2__.ProductLogo, { slug: product.slug, size: 32, variant: "nobg", productName: product.name }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { className: "flex-1 min-w-0", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { className: "text-sm font-medium text-foreground block", children: product.name }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { className: "text-xs text-muted-foreground", children: UPSELL_TAGLINES[product.slug] ?? product.tagline })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-3.5 h-3.5 text-muted-foreground shrink-0" })] }); } /***/ }, /***/ "./resources/js/components/molecules/VersionDisplay.tsx" /*!**************************************************************!*\ !*** ./resources/js/components/molecules/VersionDisplay.tsx ***! \**************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ VersionDisplay: () => (/* binding */ VersionDisplay) /* harmony export */ }); /* harmony import */ var _components_atoms_UpdateButton__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/components/atoms/UpdateButton */ "./resources/js/components/atoms/UpdateButton.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Displays the installed/available version of a feature, with an update * button when a newer version is available. * * When upgradeLabel is provided the update button is rendered fully disabled * (no onClick handler) with an upsell tooltip. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function VersionDisplay({ feature, upgradeLabel, pendingAction = null, installableBusy = false, onUpdate }) { if (feature.update_version) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div", { className: "flex items-center gap-1.5", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("span", { className: "text-xs font-mono text-muted-foreground line-through", children: ["v", feature.installed_version] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span", { className: "text-muted-foreground text-xs", children: "\u2192" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("span", { className: "text-xs font-mono font-bold", children: ["v", feature.update_version] }), (upgradeLabel || onUpdate) && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components_atoms_UpdateButton__WEBPACK_IMPORTED_MODULE_0__.UpdateButton, { featureName: feature.name, disabled: !!pendingAction || installableBusy, onClick: onUpdate, upgradeLabel: upgradeLabel })] }); } if (!feature.version && !feature.installed_version) { return null; } return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span", { className: "text-xs font-mono text-muted-foreground text-right", children: `v${feature.installed_version ?? feature.version}` }); } /***/ }, /***/ "./resources/js/components/molecules/WelcomeLicenseForm.tsx" /*!******************************************************************!*\ !*** ./resources/js/components/molecules/WelcomeLicenseForm.tsx ***! \******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ WelcomeLicenseForm: () => (/* binding */ WelcomeLicenseForm) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/loader-circle.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/key-round.js"); /* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/input */ "./resources/js/components/ui/input.tsx"); /* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/button */ "./resources/js/components/ui/button.tsx"); /* harmony import */ var _components_atoms_SectionHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/atoms/SectionHeader */ "./resources/js/components/atoms/SectionHeader.tsx"); /* harmony import */ var _hooks_useWelcomeLicenseForm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/hooks/useWelcomeLicenseForm */ "./resources/js/hooks/useWelcomeLicenseForm.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__); /** * License input + Activate button used on the welcome screen. * * Pure composition of UI primitives wired to useWelcomeLicenseForm. * No useState, no derived values, no async logic — the component file * is for layout and JSX wiring only. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 */ function WelcomeLicenseForm() { const { key, serverError, isStoring, canModifyLicense, showFormatHint, canSubmit, onKeyChange, onActivate } = (0,_hooks_useWelcomeLicenseForm__WEBPACK_IMPORTED_MODULE_6__.useWelcomeLicenseForm)(); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)("form", { className: "rounded-lg border border-neutral-200 bg-white p-4 space-y-3", onSubmit: e => { e.preventDefault(); if (canSubmit) { onActivate(); } }, children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_components_atoms_SectionHeader__WEBPACK_IMPORTED_MODULE_5__.SectionHeader, { icon: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-4 h-4 text-muted-foreground" }), label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Unified License', '%TEXTDOMAIN%') }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_components_ui_input__WEBPACK_IMPORTED_MODULE_3__.Input, { id: "welcome-license-key-input", placeholder: (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_7__.getLicenseKeyPlaceholder)(), value: key, onChange: e => onKeyChange(e.target.value), className: "font-mono text-sm uppercase", "aria-invalid": !!serverError, "aria-describedby": serverError ? 'welcome-license-error' : showFormatHint ? 'welcome-license-hint' : undefined, disabled: !canModifyLicense // eslint-disable-next-line jsx-a11y/no-autofocus , autoFocus: true }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_components_ui_button__WEBPACK_IMPORTED_MODULE_4__.Button, { type: "submit", className: "w-full", disabled: !canSubmit, children: isStoring ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-4 h-4 animate-spin" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Verifying…', '%TEXTDOMAIN%')] }) : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Activate', '%TEXTDOMAIN%') }), showFormatHint && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)("p", { id: "welcome-license-hint", className: "text-[13px] leading-6 text-muted-foreground tracking-[-0.08px] m-0", children: [(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)("This doesn't look like a unified license key.", '%TEXTDOMAIN%'), ' ', (0,_hooks_useWelcomeLicenseForm__WEBPACK_IMPORTED_MODULE_6__.getNonUnifiedLicenseAdvice)()] }), serverError && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("p", { id: "welcome-license-error", className: "text-[13px] leading-6 text-destructive tracking-[-0.08px] m-0", role: "alert", children: serverError })] }); } /***/ }, /***/ "./resources/js/components/molecules/WelcomeNoticeBanner.tsx" /*!*******************************************************************!*\ !*** ./resources/js/components/molecules/WelcomeNoticeBanner.tsx ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ WelcomeNoticeBanner: () => (/* binding */ WelcomeNoticeBanner) /* harmony export */ }); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/info.js"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Generic info callout used by the welcome flow. * * The molecule is a pure passthrough — the caller composes the message * (with createInterpolateElement, plain JSX, or a string) and passes * it as children. Reusable for any future welcome-screen message * without coupling to a specific copy block. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 */ function WelcomeNoticeBanner({ children }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div", { className: "flex gap-3 rounded-lg border border-neutral-200 bg-blue-50 pl-4 pr-11 py-4 text-sm text-blue-900", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_0__["default"], { className: "color-blue-600 mt-0.5 h-4 w-4 shrink-0" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("p", { className: "text-[13px] leading-6 m-0", children: children })] }); } /***/ }, /***/ "./resources/js/components/organisms/AppLoader.tsx" /*!*********************************************************!*\ !*** ./resources/js/components/organisms/AppLoader.tsx ***! \*********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AppLoader: () => (/* binding */ AppLoader) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/loader-circle.js"); /* harmony import */ var _components_templates_WelcomeShell__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/templates/WelcomeShell */ "./resources/js/components/templates/WelcomeShell.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); /** * Boot-time loader. * * Mounted by AppContent while the license resolver is on its first * resolve. Borrows WelcomeShell chrome because that is the only chrome * available before license resolution decides which screen to show. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 */ function AppLoader() { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_components_templates_WelcomeShell__WEBPACK_IMPORTED_MODULE_2__.WelcomeShell, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { className: "flex flex-col items-center gap-2 text-sm text-muted-foreground", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-5 h-5 animate-spin" }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Loading…', '%TEXTDOMAIN%')] }) }); } /***/ }, /***/ "./resources/js/components/organisms/ErrorModal.tsx" /*!**********************************************************!*\ !*** ./resources/js/components/organisms/ErrorModal.tsx ***! \**********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ErrorModal: () => (/* binding */ ErrorModal) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/external-link.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/mail.js"); /* harmony import */ var _context_error_modal_context__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/context/error-modal-context */ "./resources/js/context/error-modal-context.tsx"); /* harmony import */ var _components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/dialog */ "./resources/js/components/ui/dialog.tsx"); /* harmony import */ var _components_atoms_ErrorItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/atoms/ErrorItem */ "./resources/js/components/atoms/ErrorItem.tsx"); /* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/ui/button */ "./resources/js/components/ui/button.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__); /** * Error modal organism. * * Renders when the ErrorModalContext holds active errors. Lists each error * and provides a Dismiss button so the user can close the modal and interact * with the UI (e.g. to update the license key). * * @package LiquidWeb\Harbor */ const DOCS_URL = 'https://go.liquidweb.com/harbor-docs'; const SUPPORT_URL = 'https://go.liquidweb.com/harbor-support'; /** * @since 1.0.0 */ function ErrorModal() { const { errors, clearAll } = (0,_context_error_modal_context__WEBPACK_IMPORTED_MODULE_3__.useErrorModal)(); if (errors.length === 0) return null; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.Dialog, { open: true, onClose: clearAll, maxWidth: "max-w-xl", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogHeader, { title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('There are issues that need your attention', '%TEXTDOMAIN%'), onClose: clearAll }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogContent, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("ul", { className: "flex flex-col gap-6", children: errors.map(error => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_atoms_ErrorItem__WEBPACK_IMPORTED_MODULE_5__.ErrorItem, { error: error }, error.code)) }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogFooter, { className: "justify-between items-center bg-gray-100 rounded-b-lg py-4", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { className: "flex flex-col gap-1", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("p", { className: "text-xs text-muted-foreground m-0", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Need help resolving this?', '%TEXTDOMAIN%') }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { className: "flex gap-8", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("a", { href: DOCS_URL, target: "_blank", rel: "noreferrer", className: "flex items-center gap-1 text-xs font-bold uppercase text-muted-foreground hover:text-foreground transition-colors", children: [(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('View documentation', '%TEXTDOMAIN%'), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-3 h-3 -translate-y-px" })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("a", { href: SUPPORT_URL, target: "_blank", rel: "noreferrer", className: "flex items-center gap-1 text-xs font-bold uppercase text-muted-foreground hover:text-foreground transition-colors", children: [(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Contact support', '%TEXTDOMAIN%'), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-3 h-3 -translate-y-px" })] })] })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ui_button__WEBPACK_IMPORTED_MODULE_6__.Button, { size: "lg", onClick: clearAll, children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Dismiss', '%TEXTDOMAIN%') })] })] }); } /***/ }, /***/ "./resources/js/components/organisms/LicensePanel.tsx" /*!************************************************************!*\ !*** ./resources/js/components/organisms/LicensePanel.tsx ***! \************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LicensePanel: () => (/* binding */ LicensePanel) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_organisms_LicenseSection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/organisms/LicenseSection */ "./resources/js/components/organisms/LicenseSection.tsx"); /* harmony import */ var _components_organisms_UpsellSection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/organisms/UpsellSection */ "./resources/js/components/organisms/UpsellSection.tsx"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _data_products__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/data/products */ "./resources/js/data/products.ts"); /* harmony import */ var _context_toast_context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/context/toast-context */ "./resources/js/context/toast-context.tsx"); /* harmony import */ var _context_error_modal_context__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/context/error-modal-context */ "./resources/js/context/error-modal-context.tsx"); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/errors */ "./resources/js/errors/index.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__); /** * License sidebar panel. * * Always visible. Fetches license and catalog data from the store and passes * it to LicenseSection and UpsellSection. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 Read activationUrl through the getHarborDataValue helper. * @since 1.0.0 */ function LicensePanel() { const { addToast } = (0,_context_toast_context__WEBPACK_IMPORTED_MODULE_7__.useToast)(); const { addError } = (0,_context_error_modal_context__WEBPACK_IMPORTED_MODULE_8__.useErrorModal)(); const { deleteLicense, refreshLicense, refreshCatalog } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useDispatch)(_store__WEBPACK_IMPORTED_MODULE_5__.store); const { licenseKey, licenseProducts, catalogs, isRefreshing, isLicenseLoading } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => ({ licenseKey: select(_store__WEBPACK_IMPORTED_MODULE_5__.store).getLicenseKey(), licenseProducts: select(_store__WEBPACK_IMPORTED_MODULE_5__.store).getLicenseProducts(), catalogs: select(_store__WEBPACK_IMPORTED_MODULE_5__.store).getCatalog(), isRefreshing: select(_store__WEBPACK_IMPORTED_MODULE_5__.store).isLicenseRefreshing(), // @ts-expect-error -- hasFinishedResolution is injected at runtime by @wordpress/data but absent from the store's TypeScript surface. isLicenseLoading: !select(_store__WEBPACK_IMPORTED_MODULE_5__.store).hasFinishedResolution('getLicenseKey', []) }), []); // Flat tier slug → display name and rank lookups from all catalog tiers. const { tierNameMap, tierRankMap } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { const names = {}; const ranks = {}; catalogs.forEach(catalog => { catalog.tiers.forEach(t => { names[t.tier_slug] = t.name; ranks[t.tier_slug] = t.rank; }); }); return { tierNameMap: names, tierRankMap: ranks }; }, [catalogs]); const activationUrl = licenseKey ? (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_10__.getHarborDataValue)('activationUrl') : null; // Product slug → lowest paid-tier purchase URL map from the catalog. const upsellUrlMap = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { const map = {}; catalogs.forEach(catalog => { const sorted = catalog.tiers.slice().sort((a, b) => a.rank - b.rank); const paidTier = sorted.find(t => t.rank > 0); if (paidTier?.purchase_url) { map[catalog.product_slug] = paidTier.purchase_url; } }); return map; }, [catalogs]); const licensedSlugs = new Set(licenseProducts.map(lp => lp.product_slug)); const upsellProducts = _data_products__WEBPACK_IMPORTED_MODULE_6__.PRODUCTS.filter(p => !licensedSlugs.has(p.slug)); const handleRemove = async () => { const result = await deleteLicense(); if (result instanceof _errors__WEBPACK_IMPORTED_MODULE_9__.HarborError) { addError(result); return result; } addToast((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('License removed.', '%TEXTDOMAIN%'), 'default'); return null; }; const handleRefresh = async () => { const [licenseResult, catalogResult] = await Promise.all([refreshLicense(), refreshCatalog()]); if (licenseResult instanceof _errors__WEBPACK_IMPORTED_MODULE_9__.HarborError) { addError(licenseResult); } if (catalogResult instanceof _errors__WEBPACK_IMPORTED_MODULE_9__.HarborError) { addError(catalogResult); } if (!(licenseResult instanceof _errors__WEBPACK_IMPORTED_MODULE_9__.HarborError) && !(catalogResult instanceof _errors__WEBPACK_IMPORTED_MODULE_9__.HarborError)) { addToast((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('License refreshed.', '%TEXTDOMAIN%'), 'success'); } }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)("div", { className: "sticky top-4 w-[285px] shrink-0 space-y-6", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_organisms_LicenseSection__WEBPACK_IMPORTED_MODULE_3__.LicenseSection, { licenseKey: licenseKey, licenseProducts: licenseProducts, tierNameMap: tierNameMap, tierRankMap: tierRankMap, onRemove: handleRemove, onRefresh: handleRefresh, isRefreshing: isRefreshing, isLoading: isLicenseLoading, activationUrl: activationUrl }), !isLicenseLoading && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_organisms_UpsellSection__WEBPACK_IMPORTED_MODULE_4__.UpsellSection, { products: upsellProducts, upsellUrlMap: upsellUrlMap })] }); } /***/ }, /***/ "./resources/js/components/organisms/LicenseSection.tsx" /*!**************************************************************!*\ !*** ./resources/js/components/organisms/LicenseSection.tsx ***! \**************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LicenseSection: () => (/* binding */ LicenseSection) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/loader-circle.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/key-round.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/refresh-cw.js"); /* harmony import */ var _components_atoms_SectionHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/atoms/SectionHeader */ "./resources/js/components/atoms/SectionHeader.tsx"); /* harmony import */ var _components_atoms_LicenseKeyInputSkeleton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/atoms/LicenseKeyInputSkeleton */ "./resources/js/components/atoms/LicenseKeyInputSkeleton.tsx"); /* harmony import */ var _components_molecules_LicenseKeyInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/molecules/LicenseKeyInput */ "./resources/js/components/molecules/LicenseKeyInput.tsx"); /* harmony import */ var _components_molecules_LicenseProductCard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/molecules/LicenseProductCard */ "./resources/js/components/molecules/LicenseProductCard.tsx"); /* harmony import */ var _data_products__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/data/products */ "./resources/js/data/products.ts"); /* harmony import */ var _lib_group_license_products__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/lib/group-license-products */ "./resources/js/lib/group-license-products.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__); /** * License section: header, key input, and licensed-product cards. * * @package LiquidWeb\Harbor */ /** * Pulse-skeleton that mirrors LicenseProductCard's layout while the license * resolver is still in flight. */ function LicenseSectionSkeleton() { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("div", { className: "space-y-3", children: _data_products__WEBPACK_IMPORTED_MODULE_9__.PRODUCTS.map(p => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("div", { className: "rounded-lg border bg-card px-3 py-2.5 animate-pulse", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", { className: "flex items-center gap-2", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("div", { className: "w-6 h-6 rounded shrink-0 bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("div", { className: "h-3.5 flex-1 rounded bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("div", { className: "h-4 w-14 rounded-full shrink-0 bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("div", { className: "w-3.5 h-3.5 rounded shrink-0 bg-muted" })] }) }, p.slug)) }); } /** * @since 1.3.0 Read subscriptionsUrl through the getHarborDataValue helper. * @since 1.0.0 */ function LicenseSection({ licenseKey, licenseProducts, tierNameMap, tierRankMap, onRemove, onRefresh, isRefreshing, isLoading, activationUrl }) { const [isEditing, setIsEditing] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); const hasLicense = licenseKey !== null; const manageUrl = (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_11__.getHarborDataValue)('subscriptionsUrl'); const handleRemove = async () => { const error = await onRemove(); if (!error) { setIsEditing(false); } return error; }; const groupedProducts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_lib_group_license_products__WEBPACK_IMPORTED_MODULE_10__.groupLicenseProducts)(licenseProducts, tierRankMap), [licenseProducts, tierRankMap]); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", { className: "space-y-3", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_atoms_SectionHeader__WEBPACK_IMPORTED_MODULE_5__.SectionHeader, { icon: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-4 h-4 text-muted-foreground" }), label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('License', '%TEXTDOMAIN%'), action: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("button", { type: "button", onClick: onRefresh, disabled: isRefreshing, className: "flex cursor-pointer items-center gap-1 text-[11px] text-muted-foreground transition-colors hover:opacity-75 disabled:opacity-50 disabled:cursor-not-allowed", children: [isRefreshing ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-3 h-3 animate-spin" }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_4__["default"], { className: "w-3 h-3" }), isRefreshing ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Refreshing...', '%TEXTDOMAIN%') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Refresh', '%TEXTDOMAIN%')] }) }), isLoading ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_atoms_LicenseKeyInputSkeleton__WEBPACK_IMPORTED_MODULE_6__.LicenseKeyInputSkeleton, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(LicenseSectionSkeleton, {})] }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_molecules_LicenseKeyInput__WEBPACK_IMPORTED_MODULE_7__.LicenseKeyInput, { currentKey: licenseKey, isEditing: isEditing, onEdit: () => setIsEditing(true), onCancel: () => setIsEditing(false), onRemove: handleRemove, onSuccess: () => setIsEditing(false) }), !hasLicense && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("p", { className: "text-xs text-muted-foreground leading-relaxed mt-0 mb-0", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Enter your license key to download and activate premium products.', '%TEXTDOMAIN%') })] }), !isLoading && hasLicense && groupedProducts.length > 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", { className: "space-y-3", children: [groupedProducts.map(g => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_components_molecules_LicenseProductCard__WEBPACK_IMPORTED_MODULE_8__.LicenseProductCard, { productSlug: g.productSlug, productName: g.productName, tiers: g.tiers, tierNameMap: tierNameMap, activationUrl: activationUrl }, `${g.productSlug}:${g.tiers.some(t => t.is_valid && t.activated_here)}`)), manageUrl && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("p", { className: "text-xs text-muted-foreground text-center mt-1 mb-0", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("a", { href: manageUrl, target: "_blank", rel: "noopener noreferrer", className: "underline hover:opacity-75", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Manage license in Liquid Web', '%TEXTDOMAIN%') }) })] })] }); } /***/ }, /***/ "./resources/js/components/organisms/ProductSection.tsx" /*!**************************************************************!*\ !*** ./resources/js/components/organisms/ProductSection.tsx ***! \**************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ProductSection: () => (/* binding */ ProductSection) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/atoms/LicenseBadge */ "./resources/js/components/atoms/LicenseBadge.tsx"); /* harmony import */ var _components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/atoms/ProductLogo */ "./resources/js/components/atoms/ProductLogo.tsx"); /* harmony import */ var _components_molecules_FeatureRow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/molecules/FeatureRow */ "./resources/js/components/molecules/FeatureRow.tsx"); /* harmony import */ var _components_molecules_TierGroup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/molecules/TierGroup */ "./resources/js/components/molecules/TierGroup.tsx"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _context_filter_context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/context/filter-context */ "./resources/js/context/filter-context.tsx"); /* harmony import */ var _hooks_useProductFeatureGroups__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/hooks/useProductFeatureGroups */ "./resources/js/hooks/useProductFeatureGroups.ts"); /* harmony import */ var _lib_upgrade_url__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/lib/upgrade-url */ "./resources/js/lib/upgrade-url.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__); /** * Product section: sticky dark header + feature list + tier group accordions. * * Available features render as FeatureRow entries. Locked features are * grouped by tier and rendered inside collapsible TierGroup accordions. * * Header counts (active / deactivated) always reflect the full unfiltered * feature set so they remain stable while the user searches. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 Read domain through the getHarborDataValue helper for upgrade URLs. * @since 1.0.2 Route upgrade CTA to catalog upgrade_url for existing subscribers, purchase_url for new subscribers. * @since 1.0.1 Show Unactivated badge on tier groups and product header for unactivated licenses. * @since 1.0.0 */ function ProductSection({ product }) { const { searchQuery } = (0,_context_filter_context__WEBPACK_IMPORTED_MODULE_7__.useFilter)(); const isSearching = searchQuery.trim().length > 0; // Full unfiltered set — used only for header counts so they stay stable. const { licenseProduct, hasActiveLegacy, unactivatedLicenseProduct } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.useSelect)(select => { const licenseProducts = select(_store__WEBPACK_IMPORTED_MODULE_6__.store).getLicenseProducts(); const forProduct = licenseProducts.filter(lp => lp.product_slug === product.slug); return { licenseProduct: forProduct.find(lp => lp.activated_here === true) ?? null, hasActiveLegacy: select(_store__WEBPACK_IMPORTED_MODULE_6__.store).hasActiveLegacyLicenseForProduct(product.slug), unactivatedLicenseProduct: select(_store__WEBPACK_IMPORTED_MODULE_6__.store).getUnactivatedLicenseProduct(product.slug) }; }, [product.slug]); const { availableFeatures, lockedByTier, sortedCatalogTiers, upgradeCatalogTiers, activationCatalogTiers, isUnactivatedLicense } = (0,_hooks_useProductFeatureGroups__WEBPACK_IMPORTED_MODULE_8__.useProductFeatureGroups)(product.slug); const activeCount = availableFeatures.filter(f => f.is_enabled).length; const deactivatedCount = availableFeatures.filter(f => !f.is_enabled).length; // Show "Unactivated" in the header only when there is no activated product at all. // An unactivated upgrade tier alongside an active lower tier (e.g. pro active + elite // unactivated) should still show the active tier's name — not "Unactivated". const isNotActivated = licenseProduct === null && isUnactivatedLicense || licenseProduct !== null && (licenseProduct.validation_status === 'not_activated' || licenseProduct.validation_status === 'activation_required'); const tierName = licenseProduct ? sortedCatalogTiers.find(t => t.tier_slug === licenseProduct.tier)?.name ?? licenseProduct.tier : null; const hasContent = availableFeatures.length > 0 || Object.values(lockedByTier).some(f => f.length > 0); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)("section", { id: product.slug, className: "scroll-mt-20", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("div", { className: "h-0" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)("div", { className: "flex items-center gap-3 px-4 py-3 bg-neutral-800 text-white sticky top-0 z-10 border-x border-neutral-800 transition-[border-radius] rounded-t-lg border-t", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_3__.ProductLogo, { slug: product.slug, size: 28, productName: product.name }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("h2", { className: "text-base font-semibold m-0 p-0 text-white", children: product.name }), isNotActivated ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_2__.LicenseBadge, { type: "unactivated" }) : tierName ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_2__.LicenseBadge, { type: "licensed", tierName: tierName }) : hasActiveLegacy ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_2__.LicenseBadge, { type: "legacy" }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_atoms_LicenseBadge__WEBPACK_IMPORTED_MODULE_2__.LicenseBadge, { type: "unlicensed", className: "text-white border-white/40" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)("span", { className: "ml-auto text-xs text-white/70", children: [activeCount, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('active', '%TEXTDOMAIN%'), ' · ', deactivatedCount, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('deactivated', '%TEXTDOMAIN%')] })] }), isSearching && !hasContent && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("div", { className: "border border-t-0 rounded-b-lg", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("p", { className: "px-4 py-6 text-sm text-muted-foreground text-center", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('No features match your search.', '%TEXTDOMAIN%') }) }), !isSearching && !hasContent && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("div", { className: "border border-t-0 rounded-b-lg", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("p", { className: "px-4 py-6 text-sm text-muted-foreground text-center", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('No features are available for this product.', '%TEXTDOMAIN%') }) }), hasContent && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)("div", { className: "border border-t-0 rounded-b-lg overflow-hidden", children: [availableFeatures.map(feature => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_molecules_FeatureRow__WEBPACK_IMPORTED_MODULE_4__.FeatureRow, { feature: feature }, feature.slug)), activationCatalogTiers.map(tier => { const locked = lockedByTier[tier.tier_slug] ?? []; if (locked.length === 0) return null; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_molecules_TierGroup__WEBPACK_IMPORTED_MODULE_5__.TierGroup, { tier: tier, features: locked, forceOpen: isSearching, showUpgrade: false, showUnactivated: isUnactivatedLicense }, tier.tier_slug); }), upgradeCatalogTiers.map(tier => { const locked = lockedByTier[tier.tier_slug] ?? []; if (locked.length === 0) return null; const effectiveLicenseProduct = licenseProduct ?? unactivatedLicenseProduct; const buttonHref = effectiveLicenseProduct ? tier.upgrade_url ? (0,_lib_upgrade_url__WEBPACK_IMPORTED_MODULE_9__.buildUpgradeUrl)(tier.upgrade_url, (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_10__.getHarborDataValue)('domain')) : undefined : tier.purchase_url || undefined; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_components_molecules_TierGroup__WEBPACK_IMPORTED_MODULE_5__.TierGroup, { tier: tier, features: locked, forceOpen: isSearching, buttonHref: buttonHref }, tier.tier_slug); })] })] }); } /***/ }, /***/ "./resources/js/components/organisms/ProductSectionSkeleton.tsx" /*!**********************************************************************!*\ !*** ./resources/js/components/organisms/ProductSectionSkeleton.tsx ***! \**********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ProductSectionSkeleton: () => (/* binding */ ProductSectionSkeleton) /* harmony export */ }); /* harmony import */ var _components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/components/atoms/ProductLogo */ "./resources/js/components/atoms/ProductLogo.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Pulse-skeleton for a single product section, shown while the Harbor data * resolvers are in flight on the first page load. * * Mirrors ProductSection's DOM structure: same sticky header (with real logo * and product name but no badge or counters) followed by a fixed number of * skeleton feature rows. * * @package LiquidWeb\Harbor */ const SKELETON_ROW_COUNT = 3; function SkeletonFeatureRow({ isLast }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: `bg-white animate-pulse${isLast ? '' : ' border-b'}`, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div", { className: "flex items-center gap-3 py-3 px-4", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: "w-4 h-4 rounded shrink-0 bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: "w-8 h-8 rounded shrink-0 bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: "h-3.5 w-32 rounded bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div", { className: "ml-auto flex items-center gap-3 shrink-0", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: "h-4 w-12 rounded bg-muted" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: "h-5 w-9 rounded-full bg-muted" })] })] }) }); } /** * @since 1.0.0 */ function ProductSectionSkeleton({ product }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("section", { id: product.slug, className: "scroll-mt-20", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: "h-0" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div", { className: "flex items-center gap-3 px-4 py-3 bg-neutral-800 text-white sticky top-0 z-10 border-x border-neutral-800 transition-[border-radius] rounded-t-lg border-t", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components_atoms_ProductLogo__WEBPACK_IMPORTED_MODULE_0__.ProductLogo, { slug: product.slug, size: 28, productName: product.name }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("h2", { className: "text-base font-semibold m-0 p-0 text-white", children: product.name })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { className: "border border-t-0 rounded-b-lg overflow-hidden", children: Array.from({ length: SKELETON_ROW_COUNT }, (_, i) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(SkeletonFeatureRow, { isLast: i === SKELETON_ROW_COUNT - 1 }, i)) })] }); } /***/ }, /***/ "./resources/js/components/organisms/UpsellSection.tsx" /*!*************************************************************!*\ !*** ./resources/js/components/organisms/UpsellSection.tsx ***! \*************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ UpsellSection: () => (/* binding */ UpsellSection) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/rocket.js"); /* harmony import */ var _components_atoms_SectionHeader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/atoms/SectionHeader */ "./resources/js/components/atoms/SectionHeader.tsx"); /* harmony import */ var _components_molecules_UpsellCard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/molecules/UpsellCard */ "./resources/js/components/molecules/UpsellCard.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__); /** * Upsell section: products not covered by the current license. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function UpsellSection({ products, upsellUrlMap }) { if (products.length === 0) return null; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("hr", { className: "border-t border-0 !border-b-0" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", { className: "space-y-3", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_components_atoms_SectionHeader__WEBPACK_IMPORTED_MODULE_2__.SectionHeader, { icon: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-4 h-4 text-muted-foreground" }), label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Add to your plan', '%TEXTDOMAIN%') }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", { className: "space-y-2", children: products.map(p => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_components_molecules_UpsellCard__WEBPACK_IMPORTED_MODULE_3__.UpsellCard, { product: p, href: upsellUrlMap[p.slug] ?? '#' }, p.slug)) })] })] }); } /***/ }, /***/ "./resources/js/components/organisms/WelcomeScreen.tsx" /*!*************************************************************!*\ !*** ./resources/js/components/organisms/WelcomeScreen.tsx ***! \*************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ WelcomeScreen: () => (/* binding */ WelcomeScreen) /* harmony export */ }); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _components_templates_WelcomeShell__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/templates/WelcomeShell */ "./resources/js/components/templates/WelcomeShell.tsx"); /* harmony import */ var _components_molecules_WelcomeNoticeBanner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/molecules/WelcomeNoticeBanner */ "./resources/js/components/molecules/WelcomeNoticeBanner.tsx"); /* harmony import */ var _components_molecules_WelcomeLicenseForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/molecules/WelcomeLicenseForm */ "./resources/js/components/molecules/WelcomeLicenseForm.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__); /** * No-license welcome screen. * * Composes WelcomeShell chrome with the hardcoded non-unified-license * notice and the unified license form. The notice copy lives here so * WelcomeNoticeBanner stays a generic container. * * createInterpolateElement turns a single translatable string with * marker tags into real React elements — translators see one * continuous sentence; React renders an actual <strong> node. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 */ function WelcomeScreen() { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_components_templates_WelcomeShell__WEBPACK_IMPORTED_MODULE_2__.WelcomeShell, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_components_molecules_WelcomeNoticeBanner__WEBPACK_IMPORTED_MODULE_3__.WelcomeNoticeBanner, { children: (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createInterpolateElement)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('<strong>Have a non-unified license?</strong> Licenses issued before May 12, 2026 are managed inside each plugin\'s own settings.', '%TEXTDOMAIN%'), { strong: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("strong", {}) }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_components_molecules_WelcomeLicenseForm__WEBPACK_IMPORTED_MODULE_4__.WelcomeLicenseForm, {})] }); } /***/ }, /***/ "./resources/js/components/templates/AppShell.tsx" /*!********************************************************!*\ !*** ./resources/js/components/templates/AppShell.tsx ***! \********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AppShell: () => (/* binding */ AppShell) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _components_templates_Shell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/templates/Shell */ "./resources/js/components/templates/Shell.tsx"); /* harmony import */ var _components_molecules_FilterBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/molecules/FilterBar */ "./resources/js/components/molecules/FilterBar.tsx"); /* harmony import */ var _components_organisms_LicensePanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/organisms/LicensePanel */ "./resources/js/components/organisms/LicensePanel.tsx"); /* harmony import */ var _components_molecules_LegacyLicenseBanner__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/molecules/LegacyLicenseBanner */ "./resources/js/components/molecules/LegacyLicenseBanner.tsx"); /* harmony import */ var _components_molecules_NotActivatedBanner__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/molecules/NotActivatedBanner */ "./resources/js/components/molecules/NotActivatedBanner.tsx"); /* harmony import */ var _components_molecules_ReloadBanner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/molecules/ReloadBanner */ "./resources/js/components/molecules/ReloadBanner.tsx"); /* harmony import */ var _components_organisms_ProductSection__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/organisms/ProductSection */ "./resources/js/components/organisms/ProductSection.tsx"); /* harmony import */ var _components_organisms_ProductSectionSkeleton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/organisms/ProductSectionSkeleton */ "./resources/js/components/organisms/ProductSectionSkeleton.tsx"); /* harmony import */ var _components_atoms_ErrorBoundary__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/components/atoms/ErrorBoundary */ "./resources/js/components/atoms/ErrorBoundary.tsx"); /* harmony import */ var _data_products__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/data/products */ "./resources/js/data/products.ts"); /* harmony import */ var _context_filter_context__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/context/filter-context */ "./resources/js/context/filter-context.tsx"); /* harmony import */ var _context_harbor_data_context__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/context/harbor-data-context */ "./resources/js/context/harbor-data-context.tsx"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__); /** * Application shell — full-width two-column layout. * * Main area: FilterBar header + product sections. * Sidebar: license panel. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 Read version through the getHarborDataValue helper. * @since 1.0.0 */ function AppShell() { const { isLoading } = (0,_context_harbor_data_context__WEBPACK_IMPORTED_MODULE_12__.useHarborData)(); const version = (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_13__.getHarborDataValue)('version'); const { productFilter } = (0,_context_filter_context__WEBPACK_IMPORTED_MODULE_11__.useFilter)(); const visibleProducts = productFilter === 'all' ? _data_products__WEBPACK_IMPORTED_MODULE_10__.PRODUCTS : _data_products__WEBPACK_IMPORTED_MODULE_10__.PRODUCTS.filter(p => p.slug === productFilter); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_templates_Shell__WEBPACK_IMPORTED_MODULE_1__.Shell, { header: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_molecules_FilterBar__WEBPACK_IMPORTED_MODULE_2__.FilterBar, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_molecules_ReloadBanner__WEBPACK_IMPORTED_MODULE_6__.ReloadBanner, {})] }), sideContent: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_organisms_LicensePanel__WEBPACK_IMPORTED_MODULE_3__.LicensePanel, {}), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_components_atoms_ErrorBoundary__WEBPACK_IMPORTED_MODULE_9__.ErrorBoundary, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div", { className: "space-y-8", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_molecules_LegacyLicenseBanner__WEBPACK_IMPORTED_MODULE_4__.LegacyLicenseBanner, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_molecules_NotActivatedBanner__WEBPACK_IMPORTED_MODULE_5__.NotActivatedBanner, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div", { className: "flex items-center !mt-8 !mb-6", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("h2", { className: "!text-2xl !font-normal !m-0 !p-0", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Your Features', '%TEXTDOMAIN%') }) }), isLoading ? _data_products__WEBPACK_IMPORTED_MODULE_10__.PRODUCTS.map(product => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_organisms_ProductSectionSkeleton__WEBPACK_IMPORTED_MODULE_8__.ProductSectionSkeleton, { product: product }, product.slug)) : visibleProducts.map(product => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_organisms_ProductSection__WEBPACK_IMPORTED_MODULE_7__.ProductSection, { product: product }, product.slug))] }), version && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div", { className: "flex items-center justify-end mt-auto", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("p", { className: "text-[13px] text-gray-500 mt-8 mb-0", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Version %s', '%TEXTDOMAIN%'), version) }) })] }) }); } /***/ }, /***/ "./resources/js/components/templates/Shell.tsx" /*!*****************************************************!*\ !*** ./resources/js/components/templates/Shell.tsx ***! \*****************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Shell: () => (/* binding */ Shell) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /** * Two-column page shell: scrollable main area + sticky sidebar. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function Shell({ header, sideContent, children }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "absolute top-0 left-0 w-full max-w-full flex flex-col overflow-hidden h-[calc(100vh-32px)]", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("header", { className: "shrink-0 border-b bg-background py-4 px-8 flex items-center gap-3", children: header }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex-1 min-h-0 flex overflow-hidden", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "flex flex-col flex-1 min-w-0 overflow-y-auto pb-6 px-8 bg-neutral-50", children: children }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("aside", { className: "shrink-0 overflow-y-auto border-l px-8 py-4", children: sideContent })] })] }); } /***/ }, /***/ "./resources/js/components/templates/WelcomeShell.tsx" /*!************************************************************!*\ !*** ./resources/js/components/templates/WelcomeShell.tsx ***! \************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ WelcomeShell: () => (/* binding */ WelcomeShell) /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _components_atoms_NexcessLogo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/atoms/NexcessLogo */ "./resources/js/components/atoms/NexcessLogo.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__); /** * Welcome flow template. * * Centered single-column layout used by the welcome screen and the * boot-time AppLoader. Uses a fixed min-height because 100vh overflows * beneath the wp-admin bar and forces a vertical scroll. * * @package LiquidWeb\Harbor */ /** * @since 1.3.0 */ function WelcomeShell({ children }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { className: "absolute top-0 left-0 w-full max-w-full flex flex-col items-center justify-center h-[calc(100vh-32px)] bg-white", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div", { className: "w-full max-w-104", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div", { className: "flex flex-col items-center gap-1.5 text-center", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_components_atoms_NexcessLogo__WEBPACK_IMPORTED_MODULE_1__.NexcessLogo, { className: "w-18 h-18" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div", { className: "-space-y-1 mb-4", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1", { className: "text-2xl leading-8 font-semibold tracking-wide p-0 text-neutral-950", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Software License Manager', '%TEXTDOMAIN%') }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p", { className: "text-xs leading-8 font-semibold m-0 text-neutral-950", children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Liquid Web by Nexcess', '%TEXTDOMAIN%') })] })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { className: "space-y-8", children: children })] }) }); } /***/ }, /***/ "./resources/js/components/ui/badge.tsx" /*!**********************************************!*\ !*** ./resources/js/components/ui/badge.tsx ***! \**********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Badge: () => (/* binding */ Badge), /* harmony export */ badgeVariants: () => (/* binding */ badgeVariants) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! class-variance-authority */ "./node_modules/class-variance-authority/dist/index.mjs"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); const badgeVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_1__.cva)('inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden', { variants: { variant: { default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90", secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", destructive: "bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground", link: "text-primary underline-offset-4 [a&]:hover:underline", success: "bg-emerald-100 text-emerald-800 border-emerald-200", gradient: "bg-gradient-to-r from-emerald-500 to-emerald-600 text-white border-0", warning: "bg-amber-100 text-amber-800 border-amber-200", info: "bg-blue-100 text-blue-800 border-blue-200" } }, defaultVariants: { variant: 'default' } }); function Badge({ className, variant, ...props }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(badgeVariants({ variant }), className), ...props }); } /***/ }, /***/ "./resources/js/components/ui/button.tsx" /*!***********************************************!*\ !*** ./resources/js/components/ui/button.tsx ***! \***********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Button: () => (/* binding */ Button), /* harmony export */ buttonVariants: () => (/* binding */ buttonVariants) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! class-variance-authority */ "./node_modules/class-variance-authority/dist/index.mjs"); /* harmony import */ var radix_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! radix-ui */ "./node_modules/@radix-ui/react-slot/dist/index.mjs"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__); const buttonVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_1__.cva)("cursor-pointer inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", { variants: { variant: { default: "bg-primary text-primary-foreground hover:bg-primary/90", destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", outline: "border bg-background text-foreground shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", link: "text-primary underline-offset-4 hover:underline" }, size: { default: "h-9 px-4 py-2 has-[>svg]:px-3", xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3", sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", lg: "h-10 rounded-md px-6 has-[>svg]:px-4", icon: "size-9", "icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3", "icon-sm": "size-8", "icon-lg": "size-10" } }, defaultVariants: { variant: "default", size: "default" } }); function Button({ className, variant = "default", size = "default", asChild = false, ...props }) { const Comp = asChild ? radix_ui__WEBPACK_IMPORTED_MODULE_2__.Root : "button"; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Comp, { "data-slot": "button", "data-variant": variant, "data-size": size, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(buttonVariants({ variant, size, className })), ...props }); } /***/ }, /***/ "./resources/js/components/ui/dialog.tsx" /*!***********************************************!*\ !*** ./resources/js/components/ui/dialog.tsx ***! \***********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Dialog: () => (/* binding */ Dialog), /* harmony export */ DialogContent: () => (/* binding */ DialogContent), /* harmony export */ DialogFooter: () => (/* binding */ DialogFooter), /* harmony export */ DialogHeader: () => (/* binding */ DialogHeader) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/x.js"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__); /** * Custom modal dialog. * * Uses z-[100000] on the overlay so it clears the WP admin bar (z-index: 99999). * NOT using Radix Dialog — keeping this self-contained to control z-index. * * @package LiquidWeb\Harbor */ /** * Dialog overlay + panel. Traps focus via the backdrop click handler. * @since 1.0.0 */ function Dialog({ open, onClose, children, maxWidth = 'max-w-lg' }) { // Close on Escape key (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (!open) return; const handleKey = e => { if (e.key === 'Escape') onClose(); }; document.addEventListener('keydown', handleKey); return () => document.removeEventListener('keydown', handleKey); }, [open, onClose]); // Prevent body scroll when open (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (open) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } return () => { document.body.style.overflow = ''; }; }, [open]); if (!open) return null; const portalTarget = document.getElementById('lw-harbor-root') ?? document.body; return (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { className: "fixed inset-0 z-[100000] flex items-center justify-center p-4", role: "dialog", "aria-modal": "true", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { className: "absolute inset-0 bg-black/50", onClick: onClose, "aria-hidden": "true" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)('relative z-10 w-full rounded-lg bg-background shadow-xl overflow-y-auto max-h-[90vh] outline-none', maxWidth), onClick: e => e.stopPropagation(), children: children })] }), portalTarget); } function DialogHeader({ title, description, onClose }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { className: "flex items-start justify-between p-6 pb-4 border-b border-border", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("h2", { className: "text-lg font-semibold text-foreground m-0", children: title }), description && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("p", { className: "mt-1 text-sm text-muted-foreground m-0", children: description })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("button", { type: "button", onClick: onClose, className: "ml-4 shrink-0 rounded p-1 text-muted-foreground hover:text-foreground hover:bg-accent transition-colors", "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Close dialog', '%TEXTDOMAIN%'), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-4 h-4" }) })] }); } function DialogContent({ children, className }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)('p-6', className), children: children }); } function DialogFooter({ children, className }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)('flex items-center justify-end gap-3 px-6 pb-6 pt-4', className), children: children }); } /***/ }, /***/ "./resources/js/components/ui/input.tsx" /*!**********************************************!*\ !*** ./resources/js/components/ui/input.tsx ***! \**********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Input: () => (/* binding */ Input) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__); function Input({ className, type, ...props }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input", { type: type, "data-slot": "input", className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-white px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", className), ...props }); } /***/ }, /***/ "./resources/js/components/ui/select.tsx" /*!***********************************************!*\ !*** ./resources/js/components/ui/select.tsx ***! \***********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Select: () => (/* binding */ Select), /* harmony export */ SelectContent: () => (/* binding */ SelectContent), /* harmony export */ SelectGroup: () => (/* binding */ SelectGroup), /* harmony export */ SelectItem: () => (/* binding */ SelectItem), /* harmony export */ SelectLabel: () => (/* binding */ SelectLabel), /* harmony export */ SelectScrollDownButton: () => (/* binding */ SelectScrollDownButton), /* harmony export */ SelectScrollUpButton: () => (/* binding */ SelectScrollUpButton), /* harmony export */ SelectSeparator: () => (/* binding */ SelectSeparator), /* harmony export */ SelectTrigger: () => (/* binding */ SelectTrigger), /* harmony export */ SelectValue: () => (/* binding */ SelectValue) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var radix_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! radix-ui */ "./node_modules/@radix-ui/react-select/dist/index.mjs"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/check.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-down.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/chevron-up.js"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__); /** * Radix UI Select primitives styled to the project's design system. * * Intentionally NOT using Select.Portal — portal content renders outside * .lw-harbor-ui and would be invisible to the PostCSS scope plugin (all Tailwind * utilities are scoped to .lw-harbor-ui). The Content renders in the DOM tree but * Radix positions it with position:fixed so it still floats above other elements. * * @package LiquidWeb\Harbor */ const Select = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Root; const SelectGroup = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Group; const SelectValue = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Value; const SelectTrigger = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ className, children, ...props }, ref) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Trigger, { ref: ref, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors', 'placeholder:text-muted-foreground [&>span]:line-clamp-1', 'outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'disabled:cursor-not-allowed disabled:opacity-50', className), ...props, children: [children, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Icon, { asChild: true, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-4 h-4 shrink-0 opacity-50" }) })] })); SelectTrigger.displayName = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Trigger.displayName; const SelectScrollUpButton = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ className, ...props }, ref) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.ScrollUpButton, { ref: ref, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('flex cursor-default items-center justify-center py-1', className), ...props, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_4__["default"], { className: "w-4 h-4" }) })); SelectScrollUpButton.displayName = radix_ui__WEBPACK_IMPORTED_MODULE_1__.ScrollUpButton.displayName; const SelectScrollDownButton = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ className, ...props }, ref) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.ScrollDownButton, { ref: ref, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('flex cursor-default items-center justify-center py-1', className), ...props, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-4 h-4" }) })); SelectScrollDownButton.displayName = radix_ui__WEBPACK_IMPORTED_MODULE_1__.ScrollDownButton.displayName; const SelectContent = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ className, children, position = 'popper', ...props }, ref) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Content, { ref: ref, position: position, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('relative z-[100000] max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md', position === 'popper' && 'data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1', className), ...props, children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(SelectScrollUpButton, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Viewport, { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('p-1', position === 'popper' && 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'), children: children }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(SelectScrollDownButton, {})] })); SelectContent.displayName = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Content.displayName; const SelectLabel = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ className, ...props }, ref) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Label, { ref: ref, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('px-2 py-1.5 text-sm font-semibold', className), ...props })); SelectLabel.displayName = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Label.displayName; const SelectItem = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ className, children, ...props }, ref) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Item, { ref: ref, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none', 'focus:bg-accent focus:text-accent-foreground', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50', className), ...props, children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.ItemIndicator, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-4 h-4" }) }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.ItemText, { children: children })] })); SelectItem.displayName = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Item.displayName; const SelectSeparator = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ className, ...props }, ref) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Separator, { ref: ref, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('-mx-1 my-1 h-px bg-muted', className), ...props })); SelectSeparator.displayName = radix_ui__WEBPACK_IMPORTED_MODULE_1__.Separator.displayName; /***/ }, /***/ "./resources/js/components/ui/switch.tsx" /*!***********************************************!*\ !*** ./resources/js/components/ui/switch.tsx ***! \***********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Switch: () => (/* binding */ Switch) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var radix_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! radix-ui */ "./node_modules/@radix-ui/react-switch/dist/index.mjs"); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__); "use client"; function Switch({ className, size = "default", ...props }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Root, { "data-slot": "switch", "data-size": size, className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6", className), ...props, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_1__.Thumb, { "data-slot": "switch-thumb", className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0") }) }); } /***/ }, /***/ "./resources/js/components/ui/toast.tsx" /*!**********************************************!*\ !*** ./resources/js/components/ui/toast.tsx ***! \**********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Toaster: () => (/* binding */ Toaster) /* harmony export */ }); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/circle-check-big.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/triangle-alert.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/info.js"); /* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lucide-react */ "./node_modules/lucide-react/dist/esm/icons/x.js"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/utils */ "./resources/js/lib/utils.ts"); /* harmony import */ var _context_toast_context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/context/toast-context */ "./resources/js/context/toast-context.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__); /** * Toast notification renderer. * * Reads from useToastStore and renders a fixed bottom-right stack. * Auto-dismiss is handled by the store (3.5s). * * @package LiquidWeb\Harbor */ const VARIANT_STYLES = { default: 'bg-background border border-border text-foreground', success: 'bg-green-50 border border-green-200 text-green-800', error: 'bg-red-50 border border-red-200 text-red-800', warning: 'bg-amber-50 border border-amber-200 text-amber-800' }; function ToastIcon({ variant }) { if (variant === 'success') return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_0__["default"], { className: "w-4 h-4 shrink-0" }); if (variant === 'error') return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-4 h-4 shrink-0" }); if (variant === 'warning') return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_1__["default"], { className: "w-4 h-4 shrink-0" }); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_2__["default"], { className: "w-4 h-4 shrink-0" }); } /** * Renders the toast stack. Mount as a sibling of AppShell in App.tsx. * @since 1.0.0 */ function Toaster() { const { toasts, removeToast } = (0,_context_toast_context__WEBPACK_IMPORTED_MODULE_6__.useToast)(); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { "aria-live": "polite", className: "fixed bottom-4 right-4 z-[100001] flex flex-col gap-2 pointer-events-none", children: toasts.map(toast => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)('pointer-events-auto flex items-start gap-3 rounded-lg px-4 py-3 shadow-lg text-sm max-w-xs', VARIANT_STYLES[toast.variant]), children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(ToastIcon, { variant: toast.variant }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { className: "flex-1 flex flex-col gap-1.5", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("span", { children: toast.message }), toast.action && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("button", { type: "button", onClick: () => { toast.action.onClick(); removeToast(toast.id); }, className: "self-start text-xs font-medium underline underline-offset-2 hover:no-underline", children: toast.action.label })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("button", { type: "button", onClick: () => removeToast(toast.id), className: "shrink-0 opacity-60 hover:opacity-100 transition-opacity", "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Dismiss notification', '%TEXTDOMAIN%'), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(lucide_react__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "w-3.5 h-3.5" }) })] }, toast.id)) }); } /***/ }, /***/ "./resources/js/components/ui/tooltip.tsx" /*!************************************************!*\ !*** ./resources/js/components/ui/tooltip.tsx ***! \************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Tooltip: () => (/* binding */ Tooltip) /* harmony export */ }); /* harmony import */ var radix_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! radix-ui */ "./node_modules/@radix-ui/react-tooltip/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Single-component tooltip wrapper built on Radix UI. * * Uses a Portal + inline styles instead of Tailwind utilities because the * Portal teleports content outside .lw-harbor-ui, where the PostCSS scope plugin * would no longer apply. z-index 100001 clears the WP admin bar (99999) and * our dialogs (100000). * * The children are wrapped in a <span> so that hover detection still works * when the child element has pointer-events disabled (e.g. a disabled button). * * Usage: * <Tooltip label="Some helpful text"> * <Button disabled>...</Button> * </Tooltip> * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function Tooltip({ label, children, className, style }) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_0__.Provider, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(radix_ui__WEBPACK_IMPORTED_MODULE_0__.Root, { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_0__.Trigger, { asChild: true, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span", { className: className, children: children }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_0__.Portal, { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_0__.Content, { sideOffset: 6, style: { zIndex: 100001, maxWidth: 240, padding: '6px 10px', borderRadius: 6, fontSize: 12, lineHeight: 1.45, backgroundColor: '#1a1a1a', color: '#fff', boxShadow: '0 4px 12px rgba(0,0,0,0.2)', ...style }, children: label }) })] }) }); } /***/ }, /***/ "./resources/js/context/error-modal-context.tsx" /*!******************************************************!*\ !*** ./resources/js/context/error-modal-context.tsx ***! \******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ErrorModalProvider: () => (/* binding */ ErrorModalProvider), /* harmony export */ useErrorModal: () => (/* binding */ useErrorModal) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Error modal context — surfaces resolver and API errors in a dismissible * modal while keeping the full UI rendered. * * Mount <ErrorModalProvider> once in App.tsx; consume with useErrorModal() * anywhere in the component tree. * * @package LiquidWeb\Harbor */ const ErrorModalContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({ errors: [], addError: () => {}, removeError: () => {}, clearAll: () => {} }); /** * @since 1.0.0 */ function ErrorModalProvider({ children }) { const [errors, setErrors] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]); const addError = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(error => { setErrors(prev => prev.some(e => e.code === error.code) ? prev : [...prev, error]); }, []); const removeError = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(code => { setErrors(prev => prev.filter(e => e.code !== code)); }, []); const clearAll = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => setErrors([]), []); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(ErrorModalContext.Provider, { value: { errors, addError, removeError, clearAll }, children: children }); } /** * @since 1.0.0 */ const useErrorModal = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ErrorModalContext); /***/ }, /***/ "./resources/js/context/filter-context.tsx" /*!*************************************************!*\ !*** ./resources/js/context/filter-context.tsx ***! \*************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FilterProvider: () => (/* binding */ FilterProvider), /* harmony export */ useFilter: () => (/* binding */ useFilter) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Filter context — shared search query and product filter state. * * Mount <FilterProvider> once in App.tsx; consume with useFilter() anywhere * in the component tree. * * @package LiquidWeb\Harbor */ const FilterContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({ searchQuery: '', productFilter: 'all', setSearchQuery: () => {}, setProductFilter: () => {} }); /** * @since 1.0.0 */ function FilterProvider({ children }) { const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''); const [productFilter, setProductFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('all'); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(FilterContext.Provider, { value: { searchQuery, setSearchQuery, productFilter, setProductFilter }, children: children }); } /** * @since 1.0.0 */ const useFilter = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(FilterContext); /***/ }, /***/ "./resources/js/context/harbor-data-context.tsx" /*!******************************************************!*\ !*** ./resources/js/context/harbor-data-context.tsx ***! \******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HarborDataProvider: () => (/* binding */ HarborDataProvider), /* harmony export */ useHarborData: () => (/* binding */ useHarborData) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _hooks_use_resolvable_select_use_resolvable_select__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/hooks/use-resolvable-select/use-resolvable-select */ "./resources/js/hooks/use-resolvable-select/use-resolvable-select.ts"); /* harmony import */ var _errors_harbor_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/errors/harbor-error */ "./resources/js/errors/harbor-error.ts"); /* harmony import */ var _errors_error_code__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/errors/error-code */ "./resources/js/errors/error-code.ts"); /* harmony import */ var _context_error_modal_context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/context/error-modal-context */ "./resources/js/context/error-modal-context.tsx"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__); /** * Harbor admin screen data context. * * Owns the four core resolvers for the Harbor admin screen (license, features, * catalog, legacy licenses). Errors from any resolver are pushed to the * ErrorModalContext so the error modal opens while the full UI stays rendered. * Errors are automatically cleared when all resolvers recover. * * Mount <HarborDataProvider> inside <ErrorModalProvider> and outside * <ErrorBoundary> so it remains alive through render crashes. * * @package LiquidWeb\Harbor */ const HarborDataContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({ isLoading: true, isLicenseLoading: true }); const RESOLVER_KEYS = ['license', 'features', 'catalog', 'legacyLicenses']; function findErrors(results) { const errors = []; for (const key in results) { const entry = results[key]; if (entry.status === 'ERROR') { errors.push(_errors_harbor_error__WEBPACK_IMPORTED_MODULE_5__["default"].syncFrom(entry.error, _errors_error_code__WEBPACK_IMPORTED_MODULE_6__.ErrorCode.ResolutionFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to load your data.', '%TEXTDOMAIN%'))); } } return errors; } /** * @since 1.3.0 Expose isLicenseLoading alongside isLoading so consumers can route on the license resolver alone. * @since 1.0.0 */ function HarborDataProvider({ children }) { const { addError, removeError } = (0,_context_error_modal_context__WEBPACK_IMPORTED_MODULE_7__.useErrorModal)(); const lastErrorCodesRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]); const result = (0,_hooks_use_resolvable_select_use_resolvable_select__WEBPACK_IMPORTED_MODULE_4__["default"])(resolve => ({ license: resolve(_store__WEBPACK_IMPORTED_MODULE_3__.store).getLicenseKey(), features: resolve(_store__WEBPACK_IMPORTED_MODULE_3__.store).getFeatures(), catalog: resolve(_store__WEBPACK_IMPORTED_MODULE_3__.store).getCatalog(), legacyLicenses: resolve(_store__WEBPACK_IMPORTED_MODULE_3__.store).getLegacyLicenses() }), []); const hasEverResolvedRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({ license: false, features: false, catalog: false, legacyLicenses: false }); for (const key of RESOLVER_KEYS) { if (result[key].hasResolved) { hasEverResolvedRef.current[key] = true; } } const isLoading = RESOLVER_KEYS.some(key => result[key].isResolving && !hasEverResolvedRef.current[key]); // True until the license resolver has settled its first cycle. Covers both // the IDLE pre-fetch frame and the RESOLVING in-flight frame, so the // welcome screen never flashes before the resolver has had a chance to // report whether a key exists. const isLicenseLoading = !hasEverResolvedRef.current.license; (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { const found = findErrors(result); if (found.length > 0) { lastErrorCodesRef.current = found.map(e => e.code); found.forEach(error => addError(error)); } else if (lastErrorCodesRef.current.length > 0) { lastErrorCodesRef.current.forEach(code => removeError(code)); lastErrorCodesRef.current = []; } }, [result, addError, removeError]); const licenseError = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getLicenseError(), []); const lastLicenseErrorCodeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (licenseError !== null) { const error = new _errors_harbor_error__WEBPACK_IMPORTED_MODULE_5__["default"](_errors_error_code__WEBPACK_IMPORTED_MODULE_6__.ErrorCode.LicenseValidateFailed, licenseError.message); lastLicenseErrorCodeRef.current = error.code; addError(error); } else if (lastLicenseErrorCodeRef.current !== null) { removeError(lastLicenseErrorCodeRef.current); lastLicenseErrorCodeRef.current = null; } }, [licenseError, addError, removeError]); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(HarborDataContext.Provider, { value: { isLoading, isLicenseLoading }, children: children }); } /** * @since 1.0.0 */ const useHarborData = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(HarborDataContext); /***/ }, /***/ "./resources/js/context/reload-banner-context.tsx" /*!********************************************************!*\ !*** ./resources/js/context/reload-banner-context.tsx ***! \********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReloadBannerProvider: () => (/* binding */ ReloadBannerProvider), /* harmony export */ useReloadBanner: () => (/* binding */ useReloadBanner) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * @package LiquidWeb\Harbor */ const ReloadBannerContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({ needsReload: false, setNeedsReload: () => {} }); /** * @since 1.0.0 */ function ReloadBannerProvider({ children }) { const [needsReload, setNeedsReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(ReloadBannerContext.Provider, { value: { needsReload, setNeedsReload }, children: children }); } /** * @since 1.0.0 */ const useReloadBanner = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ReloadBannerContext); /***/ }, /***/ "./resources/js/context/toast-context.tsx" /*!************************************************!*\ !*** ./resources/js/context/toast-context.tsx ***! \************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ToastProvider: () => (/* binding */ ToastProvider), /* harmony export */ useToast: () => (/* binding */ useToast) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__); /** * Toast notification context — replaces Zustand toast-store.ts. * * Mount <ToastProvider> once in App.tsx; consume with useToast() anywhere * in the component tree. * * @package LiquidWeb\Harbor */ const ToastContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({ toasts: [], addToast: () => {}, removeToast: () => {} }); /** * @since 1.0.0 */ function ToastProvider({ children }) { const [toasts, setToasts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]); const counterRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0); const removeToast = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(id => { setToasts(prev => prev.filter(t => t.id !== id)); }, []); const addToast = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((message, variant = 'default', action) => { const id = `lw-harbor-toast-id-${++counterRef.current}`; setToasts(prev => [...prev, { id, message, variant, action }]); if (!action) { setTimeout(() => removeToast(id), 3500); } }, [removeToast]); return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: children }); } /** * @since 1.0.0 */ const useToast = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ToastContext); /***/ }, /***/ "./resources/js/data/products.ts" /*!***************************************!*\ !*** ./resources/js/data/products.ts ***! \***************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PRODUCTS: () => (/* binding */ PRODUCTS), /* harmony export */ getProduct: () => (/* binding */ getProduct) /* harmony export */ }); /** * Product catalog data. * * Product metadata. Tier definitions and feature lists come from the * liquidweb/harbor/v1/catalog and liquidweb/harbor/v1/features REST * endpoints — not stored here. * * @package LiquidWeb\Harbor */ const PRODUCTS = [{ slug: 'give', name: 'GiveWP', tagline: 'Donation forms and fundraising for WordPress' }, { slug: 'the-events-calendar', name: 'The Events Calendar', tagline: 'Powerful event management for WordPress' }, { slug: 'learndash', name: 'LearnDash', tagline: 'World-class LMS for online courses' }, { slug: 'kadence', name: 'Kadence', tagline: 'Page builder and theme toolkit for WordPress' }]; /** Lookup a product by slug */ function getProduct(slug) { return PRODUCTS.find(p => p.slug === slug); } /***/ }, /***/ "./resources/js/errors/error-code.ts" /*!*******************************************!*\ !*** ./resources/js/errors/error-code.ts ***! \*******************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ErrorCode: () => (/* binding */ ErrorCode) /* harmony export */ }); /** * Machine-readable error codes for HarborError instances. * * @package LiquidWeb\Harbor */ let ErrorCode = /*#__PURE__*/function (ErrorCode) { ErrorCode["FeaturesFetchFailed"] = "features-fetch-failed"; ErrorCode["FeatureEnableFailed"] = "feature-enable-failed"; ErrorCode["FeatureDisableFailed"] = "feature-disable-failed"; ErrorCode["FeatureUpdateFailed"] = "feature-update-failed"; ErrorCode["LicenseFetchFailed"] = "license-fetch-failed"; ErrorCode["LicenseActionInProgress"] = "license-action-in-progress"; ErrorCode["LicenseStoreFailed"] = "license-store-failed"; ErrorCode["LicenseDeleteFailed"] = "license-delete-failed"; ErrorCode["LicenseRefreshFailed"] = "license-refresh-failed"; ErrorCode["LicenseValidateFailed"] = "license-validate-failed"; ErrorCode["CatalogFetchFailed"] = "catalog-fetch-failed"; ErrorCode["CatalogRefreshFailed"] = "catalog-refresh-failed"; ErrorCode["LegacyLicensesFetchFailed"] = "legacy-licenses-fetch-failed"; ErrorCode["ResolutionFailed"] = "resolution-failed"; return ErrorCode; }({}); /***/ }, /***/ "./resources/js/errors/harbor-error.ts" /*!*********************************************!*\ !*** ./resources/js/errors/harbor-error.ts ***! \*********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ HarborError) /* harmony export */ }); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./resources/js/errors/utils.ts"); /** * HarborError -- typed wrapper around the WP REST API serialized WP_Error. * * @wordpress/api-fetch throws the parsed JSON body (a plain object) when * the server returns a non-2xx response. HarborError normalizes that into * a proper Error subclass with structured access to code, data, and any * additional errors. * * The entire error chain is typed. `additionalErrors` contains HarborError * instances (not plain WpRestError objects), so consumers get `.code`, * `.status`, and `.data` on every entry without casting. * * @package LiquidWeb\Harbor */ class HarborError extends Error { /** * Machine-readable error code from the WP_Error. */ /** * Data payload (usually contains `{ status: number }`). */ /** * Secondary errors from a multi-code WP_Error response. This is a * deserialization concern only. Use `cause` (via `HarborError.wrap()`) * to chain errors on the frontend. */ /** * Original cause, if this error wraps another. */ constructor(codeOrError, messageOrOptions, options) { if (typeof codeOrError === 'string') { super(messageOrOptions); this.name = 'HarborError'; this.code = codeOrError; this.data = {}; this.additionalErrors = []; this.cause = options?.cause; } else { super(codeOrError.message); this.name = 'HarborError'; this.code = codeOrError.code; this.data = codeOrError.data ?? {}; this.additionalErrors = (codeOrError.additional_errors ?? []).map(entry => new HarborError(entry)); this.cause = messageOrOptions?.cause; } } /** * HTTP status code, if present. */ get status() { return typeof this.data.status === 'number' ? this.data.status : undefined; } /** * Flatten the error tree into an array. Collects this error, then its * additionalErrors (server-side siblings), then recurses into cause. */ toArray() { const result = [this]; for (const additional of this.additionalErrors) { result.push(...additional.toArray()); } if (this.cause instanceof HarborError) { result.push(...this.cause.toArray()); } return result; } /** * Async conversion of an unknown value into an HarborError. * * Handles everything `syncFrom` does, plus `Response` objects that * apiFetch throws when it cannot parse JSON or when `parse: false` * is used. */ static async from(error, code, message) { if (error instanceof Response) { try { const body = await error.json(); if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isWpRestError)(body)) { return new HarborError(body); } } catch { // Response body wasn't JSON, fall through. } return new HarborError(code, message); } return HarborError.syncFrom(error, code, message); } /** * Synchronous conversion of an unknown value into an HarborError. * * If the value is already an HarborError, returns it as-is. If it is * a WpRestError, hydrates it via the constructor. Anything else * (plain Error, string, etc.) produces an HarborError with the given * fallback `code` and `message`, and the original is stored as `cause`. */ static syncFrom(error, code, message) { if (error instanceof HarborError) { return error; } if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isWpRestError)(error)) { return new HarborError(error); } if (error instanceof Error) { return new HarborError({ code, message }, { cause: error }); } return new HarborError({ code, message }); } /** * Async wrap of an unknown caught value into an HarborError with context. * * The provided `code` and `message` describe what operation failed. * The original value is preserved as `cause` so the full error chain * is available for inspection. When the original is a WpRestError, * its `data` and `additional_errors` are also carried forward. * * Handles `Response` objects that apiFetch throws when it cannot * parse JSON or when `parse: false` is used. */ static async wrap(error, code, message) { if (error instanceof Response) { try { const body = await error.json(); if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isWpRestError)(body)) { return new HarborError({ code, message, data: body.data, additional_errors: body.additional_errors }, { cause: new HarborError(body) }); } } catch { // Response body wasn't JSON, fall through. } return new HarborError({ code, message }); } return HarborError.wrapSync(error, code, message); } /** * Synchronous wrap of an unknown caught value into an HarborError * with context. * * Same as `wrap` but cannot handle `Response` objects. Use this in * synchronous code paths where `await` is not available. */ static wrapSync(error, code, message) { if (error instanceof HarborError || error instanceof Error) { return new HarborError({ code, message }, { cause: error }); } if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isWpRestError)(error)) { return new HarborError({ code, message, data: error.data, additional_errors: error.additional_errors }, { cause: new HarborError(error) }); } return new HarborError({ code, message }); } } /***/ }, /***/ "./resources/js/errors/index.ts" /*!**************************************!*\ !*** ./resources/js/errors/index.ts ***! \**************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ErrorCode: () => (/* reexport safe */ _error_code__WEBPACK_IMPORTED_MODULE_1__.ErrorCode), /* harmony export */ HarborError: () => (/* reexport safe */ _harbor_error__WEBPACK_IMPORTED_MODULE_0__["default"]), /* harmony export */ isWpRestError: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_2__.isWpRestError) /* harmony export */ }); /* harmony import */ var _harbor_error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./harbor-error */ "./resources/js/errors/harbor-error.ts"); /* harmony import */ var _error_code__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./error-code */ "./resources/js/errors/error-code.ts"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ "./resources/js/errors/utils.ts"); /***/ }, /***/ "./resources/js/errors/utils.ts" /*!**************************************!*\ !*** ./resources/js/errors/utils.ts ***! \**************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isWpRestError: () => (/* binding */ isWpRestError) /* harmony export */ }); /** * Error utility functions. * * @package LiquidWeb\Harbor */ /** * Type guard. Checks whether an unknown value matches the WP REST error shape. */ function isWpRestError(value) { return typeof value === 'object' && value !== null && 'code' in value && typeof value.code === 'string' && 'message' in value && typeof value.message === 'string'; } /***/ }, /***/ "./resources/js/hooks/use-resolvable-select/use-resolvable-select.ts" /*!***************************************************************************!*\ !*** ./resources/js/hooks/use-resolvable-select/use-resolvable-select.ts ***! \***************************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useResolvableSelect) /* harmony export */ }); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); /** * Like useSelect, but selectors return objects containing * both the original data AND the resolution info. * * Ported from sync-saas and converted to TypeScript. * * Inspired by `@wordpress/core-data` `useQuerySelect`. * * @see https://github.com/WordPress/gutenberg/blob/c97c26fe371e3d40efe197d8f398326a16cdbf46/packages/core-data/src/hooks/use-query-select.ts * * @package LiquidWeb\Harbor */ /** * Meta selectors added by @wordpress/data that should not be enriched. */ const META_SELECTORS = ['getIsResolving', 'hasStartedResolution', 'hasFinishedResolution', 'isResolving', 'getCachedResolvers']; /** * Cache enriched selector proxies by selector object identity so we * don't recreate them on every useSelect call within the same render. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any const cache = new WeakMap(); /** * Wrap store selectors so each call returns a {@link ResolvableSelectResponse} * with the original data and resolution metadata. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function enrichSelectors(selectors) { const cached = cache.get(selectors); if (cached) { return cached; } // eslint-disable-next-line @typescript-eslint/no-explicit-any const resolvers = {}; for (const selectorName in selectors) { if (META_SELECTORS.includes(selectorName)) { continue; } Object.defineProperty(resolvers, selectorName, { get: () => (...args) => { const data = selectors[selectorName](...args); const resolutionState = selectors.getResolutionState(selectorName, args); const resolutionStatus = resolutionState?.status; let status; switch (resolutionStatus) { case 'resolving': status = 'RESOLVING'; break; case 'finished': status = 'SUCCESS'; break; case 'error': status = 'ERROR'; break; default: status = 'IDLE'; } return { data, status, error: resolutionState?.error ?? null, isResolving: status === 'RESOLVING', hasStarted: status !== 'IDLE', hasResolved: status === 'SUCCESS' || status === 'ERROR' }; } }); } cache.set(selectors, resolvers); return resolvers; } /** * Like useSelect, but the selectors return objects containing * both the original data AND the resolution info. */ function useResolvableSelect(mapResolvableSelect, deps) { return (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.useSelect)((select, registry) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const resolve = store => enrichSelectors(select(store)); return mapResolvableSelect(resolve, registry); }, // eslint-disable-next-line react-hooks/exhaustive-deps deps); } /***/ }, /***/ "./resources/js/hooks/useFeatureRow.ts" /*!*********************************************!*\ !*** ./resources/js/hooks/useFeatureRow.ts ***! \*********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useFeatureRow: () => (/* binding */ useFeatureRow) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _lib_feature_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/feature-utils */ "./resources/js/lib/feature-utils.ts"); /* harmony import */ var _context_toast_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/context/toast-context */ "./resources/js/context/toast-context.tsx"); /* harmony import */ var _context_reload_banner_context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/context/reload-banner-context */ "./resources/js/context/reload-banner-context.tsx"); /* harmony import */ var _context_error_modal_context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/context/error-modal-context */ "./resources/js/context/error-modal-context.tsx"); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/errors */ "./resources/js/errors/index.ts"); /* harmony import */ var _types_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/types/utils */ "./resources/js/types/utils.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /** * Behavior hook for FeatureRow. * * Encapsulates store wiring, async action handlers, and all derived state * so FeatureRow itself stays a pure composition of atoms. * * @package LiquidWeb\Harbor */ function getBadgeStatus(pendingAction, licenseBadgeType, featureEnabled) { if (pendingAction) { return pendingAction; } if (licenseBadgeType === 'revoked' && !featureEnabled) { return 'locked'; } return featureEnabled ? 'enabled' : 'available'; } function getSwitchChecked(pendingAction, featureEnabled) { if (pendingAction === 'enabling' || pendingAction === 'installing') { return true; } if (pendingAction === 'disabling') { return false; } return featureEnabled; } /** * @since 1.3.0 Read pluginsUrl through the getHarborDataValue helper for the post-deactivate redirect. * @since 1.0.0 */ function useFeatureRow(feature) { const { addToast } = (0,_context_toast_context__WEBPACK_IMPORTED_MODULE_5__.useToast)(); const { setNeedsReload } = (0,_context_reload_banner_context__WEBPACK_IMPORTED_MODULE_6__.useReloadBanner)(); const { addError } = (0,_context_error_modal_context__WEBPACK_IMPORTED_MODULE_7__.useErrorModal)(); const { enableFeature, disableFeature, updateFeature } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useDispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.store); const installableBusy = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => (0,_types_utils__WEBPACK_IMPORTED_MODULE_9__.isInstallableFeature)(feature) && select(_store__WEBPACK_IMPORTED_MODULE_3__.store).isAnyInstallableBusy(), [feature.type]); const enabledHarborHostCount = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getEnabledHarborHostCount(), []); const harborHostBasenames = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getHarborHostBasenames(), []); const isLegacy = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => { const activeLegacy = select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getActiveLegacyLicense(feature.slug); if (!activeLegacy) return false; return !select(_store__WEBPACK_IMPORTED_MODULE_3__.store).isProductLicenseValid(feature.product); }, [feature.slug, feature.product]); const licenseBadgeType = (0,_lib_feature_utils__WEBPACK_IMPORTED_MODULE_4__.getLicenseBadgeType)(feature, isLegacy); const [pendingAction, setPendingAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); const [showDeactivateConfirm, setShowDeactivateConfirm] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); // Non-installable features (services) have no install/toggle/update lifecycle. if (!(0,_types_utils__WEBPACK_IMPORTED_MODULE_9__.isInstallableFeature)(feature)) { return { pendingAction: null, installableBusy: false, badgeStatus: 'included', showSwitch: false, switchChecked: false, licenseBadgeType, showDeactivateConfirm: false, handleToggle: async () => {}, handleUpdate: async () => {}, handleConfirmDeactivate: async () => {}, handleCancelDeactivate: () => {} }; } const featureEnabled = feature.is_enabled; const featureInstalled = feature.installed_version !== null; const isHarborHost = feature.type === 'plugin' && harborHostBasenames.includes(feature.plugin_file); const isLastHarborHost = isHarborHost && featureEnabled && enabledHarborHostCount === 1; const handleToggle = async checked => { if (!checked && isLastHarborHost) { setShowDeactivateConfirm(true); return; } setPendingAction(checked ? featureInstalled ? 'enabling' : 'installing' : 'disabling'); if (checked) { const result = await enableFeature(feature.slug); if (result instanceof _errors__WEBPACK_IMPORTED_MODULE_8__.HarborError) { addError(result); } else { addToast(/* translators: %s is the name of the feature being enabled */ (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%s enabled', '%TEXTDOMAIN%'), feature.name), 'success'); setNeedsReload(true); } } else { const result = await disableFeature(feature.slug); if (result instanceof _errors__WEBPACK_IMPORTED_MODULE_8__.HarborError) { addError(result); } else { addToast(/* translators: %s is the name of the feature being disabled */ (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%s disabled', '%TEXTDOMAIN%'), feature.name), 'default'); setNeedsReload(true); } } setPendingAction(null); }; const handleConfirmDeactivate = async () => { setShowDeactivateConfirm(false); setPendingAction('disabling'); const result = await disableFeature(feature.slug); if (result instanceof _errors__WEBPACK_IMPORTED_MODULE_8__.HarborError) { addError(result); } else { window.location.href = (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_10__.getHarborDataValue)('pluginsUrl'); } setPendingAction(null); }; const handleCancelDeactivate = () => { setShowDeactivateConfirm(false); }; const handleUpdate = async () => { setPendingAction('updating'); const result = await updateFeature(feature.slug); if (result instanceof _errors__WEBPACK_IMPORTED_MODULE_8__.HarborError) { addError(result); } else { /* translators: %s is the name of the feature being updated */ addToast((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%s updated.', '%TEXTDOMAIN%'), feature.name), 'success'); } setPendingAction(null); }; const badgeStatus = getBadgeStatus(pendingAction, licenseBadgeType, featureEnabled); const showSwitch = pendingAction !== 'installing' && pendingAction !== 'updating'; const switchChecked = getSwitchChecked(pendingAction, featureEnabled); return { pendingAction, installableBusy, badgeStatus, showSwitch, switchChecked, licenseBadgeType, showDeactivateConfirm, handleToggle, handleUpdate, handleConfirmDeactivate, handleCancelDeactivate }; } /***/ }, /***/ "./resources/js/hooks/useFilteredFeatures.ts" /*!***************************************************!*\ !*** ./resources/js/hooks/useFilteredFeatures.ts ***! \***************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useFilteredFeatures: () => (/* binding */ useFilteredFeatures) /* harmony export */ }); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _context_filter_context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/context/filter-context */ "./resources/js/context/filter-context.tsx"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /** * Hook that returns features for a product filtered by the active * search query from FilterContext. * * When the search query is empty the original selector result is returned * directly, so ProductSection only re-renders when features or the query * actually change. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function useFilteredFeatures(productSlug) { const { searchQuery } = (0,_context_filter_context__WEBPACK_IMPORTED_MODULE_1__.useFilter)(); const features = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.useSelect)(select => select(_store__WEBPACK_IMPORTED_MODULE_2__.store).getFeaturesByProduct(productSlug), [productSlug]); const query = searchQuery.trim(); if (!query) return features; // Try to use the query as a regex; fall back to a literal match if invalid. let pattern; try { pattern = new RegExp(query, 'i'); } catch { pattern = new RegExp(query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i'); } return features.filter(f => pattern.test(f.name) || pattern.test(f.slug) || pattern.test(f.description)); } /***/ }, /***/ "./resources/js/hooks/useProductFeatureGroups.ts" /*!*******************************************************!*\ !*** ./resources/js/hooks/useProductFeatureGroups.ts ***! \*******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useProductFeatureGroups: () => (/* binding */ useProductFeatureGroups) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _hooks_useFilteredFeatures__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/hooks/useFilteredFeatures */ "./resources/js/hooks/useFilteredFeatures.ts"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _lib_feature_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/feature-utils */ "./resources/js/lib/feature-utils.ts"); /** * Partitions features for a product into available and locked groups, * and groups locked features by catalog tier. * * @package LiquidWeb\Harbor */ /** * @since 1.0.1 Detect unactivated license products and route their tiers to activationCatalogTiers instead of upgradeCatalogTiers. Exposes isUnactivatedLicense flag. * @since 1.0.0 */ function useProductFeatureGroups(productSlug) { const allFeatures = (0,_hooks_useFilteredFeatures__WEBPACK_IMPORTED_MODULE_2__.useFilteredFeatures)(productSlug); const { catalogTiers, licenseProducts, isLicenseValid, legacyLicenses, unactivatedLicenseProduct } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.useSelect)(select => ({ catalogTiers: select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getProductCatalog(productSlug)?.tiers ?? [], licenseProducts: select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getLicenseProducts(), isLicenseValid: select(_store__WEBPACK_IMPORTED_MODULE_3__.store).isProductLicenseValid(productSlug), legacyLicenses: select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getLegacyLicenses(), unactivatedLicenseProduct: select(_store__WEBPACK_IMPORTED_MODULE_3__.store).getUnactivatedLicenseProduct(productSlug) }), [productSlug]); return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { const sorted = catalogTiers.slice().sort((a, b) => a.rank - b.rank); const forProduct = licenseProducts.filter(lp => lp.product_slug === productSlug); const licenseProduct = forProduct.find(lp => lp.activated_here === true); // A license is "invalid" when a validation status is known but not 'valid' // (e.g. not_activated, expired, suspended). The raw tier is still present on // the product, but features are locked — the user needs to activate, not upgrade. const isLicenseInvalid = licenseProduct !== undefined && licenseProduct.validation_status !== null && licenseProduct.validation_status !== 'valid'; // Rank of the activated product, or -1 when none is present. const activatedTier = licenseProduct?.tier ? sorted.find(t => t.tier_slug === licenseProduct.tier) : null; const activatedRank = activatedTier?.rank ?? -1; // Rank of the unactivated product, if any. // An unactivated product may sit above the activated tier (e.g. user purchased an // upgrade to elite while pro is already active but elite not yet activated on this // domain). In that case both tiers exist and only elite needs the activation badge. const unactivatedTier = unactivatedLicenseProduct?.tier ? sorted.find(t => t.tier_slug === unactivatedLicenseProduct.tier) : null; const unactivatedRank = unactivatedTier?.rank ?? -1; // isUnactivatedLicense: the user owns a tier they have not activated on this domain, // whether because no activated product exists at all (unactivatedRank > -1 > activatedRank) // or because a higher purchased tier is not yet activated (unactivatedRank > activatedRank). const isUnactivatedLicense = unactivatedLicenseProduct !== null && unactivatedRank > activatedRank; // Effective rank = highest owned tier (activated or not). const rank = Math.max(activatedRank, unactivatedRank); // Tiers strictly above the highest owned rank: features here need an upgrade. const upgrade = sorted.filter(t => t.rank > rank); // activationTiers covers two cases: // 1. isLicenseInvalid: tiers within the activated rank locked due to invalid status // (expired, suspended, etc.) — user needs to fix the license, not upgrade. // 2. isUnactivatedLicense: tiers above the activated rank but within the unactivated // rank — user owns them but hasn't activated on this domain yet. // Both render without an upgrade button. const activationTiers = isLicenseInvalid ? sorted.filter(t => t.rank <= activatedRank && t.rank > 0) : isUnactivatedLicense ? sorted.filter(t => t.rank <= rank && t.rank > activatedRank) : []; const slugs = isLicenseValid ? new Set() : new Set(legacyLicenses.filter(l => l.is_active).map(l => l.slug)); const isLegacyAvailable = f => slugs.has(f.slug); // Available: the standard set, PLUS revoked features. // Revoked features are in the user's tier but have had their capability removed. // They render as disabled rows in the available section (not in upgrade accordions), // since the user does not need to upgrade — the tier already covers them. const availableFeatures = allFeatures.filter(f => f.is_available || (0,_lib_feature_utils__WEBPACK_IMPORTED_MODULE_4__.isFreeFeature)(f.tier) || isLegacyAvailable(f) || (0,_lib_feature_utils__WEBPACK_IMPORTED_MODULE_4__.getFeatureMismatch)(f) === 'revoked'); // Locked: not available, not free, not legacy, and not revoked. const lockedFeatures = allFeatures.filter(f => !f.is_available && !(0,_lib_feature_utils__WEBPACK_IMPORTED_MODULE_4__.isFreeFeature)(f.tier) && !isLegacyAvailable(f) && (0,_lib_feature_utils__WEBPACK_IMPORTED_MODULE_4__.getFeatureMismatch)(f) !== 'revoked'); const lockedByTier = sorted.reduce((acc, tier) => { acc[tier.tier_slug] = lockedFeatures.filter(f => f.tier === tier.tier_slug); return acc; }, {}); return { availableFeatures, lockedByTier, sortedCatalogTiers: sorted, upgradeCatalogTiers: upgrade, activationCatalogTiers: activationTiers, isUnactivatedLicense }; }, [allFeatures, catalogTiers, licenseProducts, isLicenseValid, legacyLicenses, productSlug, unactivatedLicenseProduct]); } /***/ }, /***/ "./resources/js/hooks/useWelcomeLicenseForm.ts" /*!*****************************************************!*\ !*** ./resources/js/hooks/useWelcomeLicenseForm.ts ***! \*****************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getNonUnifiedLicenseAdvice: () => (/* binding */ getNonUnifiedLicenseAdvice), /* harmony export */ pickWelcomeErrorMessage: () => (/* binding */ pickWelcomeErrorMessage), /* harmony export */ useWelcomeLicenseForm: () => (/* binding */ useWelcomeLicenseForm) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/errors */ "./resources/js/errors/index.ts"); /* harmony import */ var _lib_harbor_data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/harbor-data */ "./resources/js/lib/harbor-data.ts"); /** * Behavior hook for WelcomeLicenseForm. * * Owns input state, derived validation, the storeLicense dispatch, * and the pickWelcomeErrorMessage helper. Mirrors the existing * useFeatureRow pattern so the form's component file stays JSX-only. * * Deliberately not generic — the LWSW-prefix rule and the error-message * composition are specific to this form. We do not reuse LicenseKeyInput * because that component routes failures through the global error modal * and exposes a tri-state UI we do not want here. * * @package LiquidWeb\Harbor */ const SERVER_INVALID_KEY_CODE = 'lw-harbor-invalid-key'; /** * Translated sentence that redirects a customer with a non-unified key to the * owning plugin's own settings page. Surfaced both as an inline format hint * while the user is typing and as the server-side error tail when the * licensing service rejects the key as unrecognized. * * Defined once so translators see a single string identity across both call * sites — re-translating the same advice twice risks drift. * * @since 1.3.0 */ function getNonUnifiedLicenseAdvice() { return (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("If this is a non-unified license, activate it in that plugin's own settings page.", '%TEXTDOMAIN%'); } /** * Compose the user-facing error message for a failed activation. * * storeLicense wraps any WP_Error from the licensing service via * HarborError.wrap(), which preserves the server error as `cause`. * The outer message is the generic wrapper; the cause carries the * server's diagnostic code and message. * * The plugin-settings redirection is appended only when the server * specifically rejected the key as unrecognized — for expired or * suspended subscriptions that framing would be misleading. * * @since 1.3.0 */ function pickWelcomeErrorMessage(error) { const serverError = error.cause instanceof _errors__WEBPACK_IMPORTED_MODULE_4__.HarborError ? error.cause : null; const baseMessage = serverError?.message?.trim() || error.message; if (serverError?.code === SERVER_INVALID_KEY_CODE) { return `${(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("We couldn't verify this key.", '%TEXTDOMAIN%')} ${getNonUnifiedLicenseAdvice()}`; } return baseMessage; } /** * @since 1.3.0 */ function useWelcomeLicenseForm() { const [key, setKey] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''); const [serverError, setServerError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); const { storeLicense } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useDispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.store); const { isStoring, canModifyLicense } = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.useSelect)(select => ({ isStoring: select(_store__WEBPACK_IMPORTED_MODULE_3__.store).isLicenseStoring(), canModifyLicense: select(_store__WEBPACK_IMPORTED_MODULE_3__.store).canModifyLicense() }), []); const prefix = (0,_lib_harbor_data__WEBPACK_IMPORTED_MODULE_5__.getHarborDataValue)('licenseKeyPrefix'); const trimmed = key.trim(); const hasInput = trimmed.length > 0; const hasInputMinLength = trimmed.length >= prefix.length; const isLwswFormat = trimmed.startsWith(prefix.substring(0, trimmed.length)); const showFormatHint = hasInput && !isLwswFormat && !serverError; const canSubmit = canModifyLicense && hasInputMinLength && isLwswFormat && !isStoring; const onKeyChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => { setKey(value.toUpperCase()); setServerError(null); }, []); const onActivate = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => { if (!canSubmit) { return; } setServerError(null); const result = await storeLicense(trimmed); if (result instanceof _errors__WEBPACK_IMPORTED_MODULE_4__.HarborError) { setServerError(pickWelcomeErrorMessage(result)); } // On success: hasLicense becomes true → AppContent re-renders to AppShell automatically. }, [canSubmit, storeLicense, trimmed]); return { key, serverError, isStoring, canModifyLicense, showFormatHint, canSubmit, onKeyChange, onActivate }; } /***/ }, /***/ "./resources/js/lib/activation-url.ts" /*!********************************************!*\ !*** ./resources/js/lib/activation-url.ts ***! \********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ buildActivationUrl: () => (/* binding */ buildActivationUrl) /* harmony export */ }); /** * Appends product and tier params to the base activation URL supplied by the * API, producing a product-scoped URL the Liquid Web portal can use to * pre-select the right product and tier. * * The base URL is already fully assembled by the server and includes params * such as portal-referral, redirect_url (percent-encoded), refresh, and * domain. This function only adds the two params it owns and never touches * the others. * * Example base URL from the API: * https://my.liquidweb.com/subscriptions/?portal-referral=plugin * &redirect_url=https%3A%2F%2Fexample.com%2Fwp-admin%2Foptions-general.php%3Fpage%3Dlw-software-manager%26refresh%3Dauto * &domain=example.com * * @param baseUrl The raw activationUrl string from the API. * @param productSlug e.g. "givewp" * @param tier e.g. "elite" * * @since 1.0.0 */ function buildActivationUrl(baseUrl, productSlug, tier) { try { const url = new URL(baseUrl); url.searchParams.set('sku', `${productSlug}:${tier}`); return url.toString(); } catch { return baseUrl; } } /***/ }, /***/ "./resources/js/lib/feature-utils.ts" /*!*******************************************!*\ !*** ./resources/js/lib/feature-utils.ts ***! \*******************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getFeatureMismatch: () => (/* binding */ getFeatureMismatch), /* harmony export */ getLicenseBadgeType: () => (/* binding */ getLicenseBadgeType), /* harmony export */ isFreeFeature: () => (/* binding */ isFreeFeature) /* harmony export */ }); /** * True when a feature requires no paid tier — either it has no tier at all * or its tier slug contains "free" (e.g. "give-free"). * * @since 1.0.0 */ function isFreeFeature(tier) { return !tier || tier.toLowerCase().includes('free'); } /** * Returns the single license badge type to display for a feature row, or null if none applies. * * Enforces mutual exclusivity: only the first matching condition wins. * * @since 1.0.0 */ function getLicenseBadgeType(feature, isLegacy) { if (isFreeFeature(feature.tier)) return 'free'; if (isLegacy) return 'legacy'; return getFeatureMismatch(feature); } /** * Returns the mismatch type for a feature, or null if there is no mismatch. * * Both fields are pre-computed by the backend resolution layer. * No catalog or license cross-referencing is needed at call sites. * * @since 1.0.0 */ function getFeatureMismatch(feature) { if (feature.is_available && !feature.in_catalog_tier) { return 'bonus'; } if (!feature.is_available && feature.in_catalog_tier) { return 'revoked'; } return null; } /***/ }, /***/ "./resources/js/lib/forward-resolver.ts" /*!**********************************************!*\ !*** ./resources/js/lib/forward-resolver.ts ***! \**********************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ forwardResolver: () => (/* binding */ forwardResolver), /* harmony export */ forwardResolverWithoutArgs: () => (/* binding */ forwardResolverWithoutArgs) /* harmony export */ }); /** * Utilities for @wordpress/data stores. * * Ported from sync-saas @utils/data/forward-resolver.js * * @package LiquidWeb\Harbor */ // eslint-disable-next-line @typescript-eslint/no-explicit-any /** * Forwards resolution to another resolver with the same arguments. * * Use when the source and target selectors share the same signature. */ function forwardResolver(resolverName) { return (...args) => async ({ resolveSelect }) => { await resolveSelect[resolverName](...args); }; } /** * Forwards resolution to another resolver, discarding arguments. * * Use when a derived selector (e.g. getFeature(slug)) depends on data * fetched by a resolver that takes no arguments (e.g. getFeatures()). */ function forwardResolverWithoutArgs(resolverName) { return () => async ({ resolveSelect }) => { await resolveSelect[resolverName](); }; } /***/ }, /***/ "./resources/js/lib/group-license-products.ts" /*!****************************************************!*\ !*** ./resources/js/lib/group-license-products.ts ***! \****************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ groupLicenseProducts: () => (/* binding */ groupLicenseProducts) /* harmony export */ }); /* harmony import */ var _data_products__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/data/products */ "./resources/js/data/products.ts"); /** * @package LiquidWeb\Harbor */ /** * Groups LicenseProduct entries by product_slug, sorts tiers within each group * (activated-here first, then ascending by rank), and orders groups by the * PRODUCTS constant. Products absent from licenseProducts are omitted. * * @since 1.0.0 */ function groupLicenseProducts(licenseProducts, tierRankMap) { const groups = {}; licenseProducts.forEach(lp => { if (!groups[lp.product_slug]) { groups[lp.product_slug] = []; } groups[lp.product_slug].push(lp); }); Object.values(groups).forEach(tiers => { tiers.sort((a, b) => (tierRankMap[a.tier] ?? 0) - (tierRankMap[b.tier] ?? 0)); }); return _data_products__WEBPACK_IMPORTED_MODULE_0__.PRODUCTS.filter(p => groups[p.slug] !== undefined).map(p => ({ productSlug: p.slug, productName: p.name, tiers: groups[p.slug] })); } /***/ }, /***/ "./resources/js/lib/harbor-data.ts" /*!*****************************************!*\ !*** ./resources/js/lib/harbor-data.ts ***! \*****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getHarborDataValue: () => (/* binding */ getHarborDataValue), /* harmony export */ getLicenseKeyPlaceholder: () => (/* binding */ getLicenseKeyPlaceholder) /* harmony export */ }); /** * Typed accessor for `window.harborData`. * * Single source of truth for global config access. Three lookup tiers: * 1. Live value at `window.harborData[ key ]`. * 2. Per-call `fallback` (optional). * 3. Built-in default from the `DEFAULTS` map. * 4. `null` if none of those exist. * * Defaulting to `null` rather than `undefined` matches the surrounding * codebase convention (LicenseSection / LicensePanel already type their * optional URLs as `string | null`). * * @package LiquidWeb\Harbor */ const DEFAULTS = { licenseKeyPrefix: 'LWSW-', pluginsUrl: '/wp-admin/plugins.php' }; /** * @since 1.3.0 */ function getHarborDataValue(key, fallback) { return window.harborData?.[key] ?? fallback ?? DEFAULTS[key] ?? null; } /** * Returns the placeholder string for a license-key input — the configured * prefix followed by five groups of four X's, matching the issued key shape * (e.g. `LWSW-XXXX-XXXX-XXXX-XXXX-XXXX`). * * @since 1.3.0 */ function getLicenseKeyPlaceholder() { return `${getHarborDataValue('licenseKeyPrefix')}XXXX-XXXX-XXXX-XXXX-XXXX`; } /***/ }, /***/ "./resources/js/lib/license-utils.ts" /*!*******************************************!*\ !*** ./resources/js/lib/license-utils.ts ***! \*******************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ expiryTextClass: () => (/* binding */ expiryTextClass), /* harmony export */ formatDate: () => (/* binding */ formatDate), /* harmony export */ getExpiryStatus: () => (/* binding */ getExpiryStatus) /* harmony export */ }); /** * Pure utility functions for license expiry display. * * @package LiquidWeb\Harbor */ /** * @since 1.0.0 */ function formatDate(dateStr) { return new Date(dateStr).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); } /** * @since 1.0.0 */ function getExpiryStatus(dateStr) { const diff = new Date(dateStr).getTime() - Date.now(); if (diff <= 0) return 'expired'; if (diff <= 30 * 24 * 60 * 60 * 1000) return 'expiring-soon'; return 'ok'; } const expiryTextClass = { expired: 'text-destructive font-medium', 'expiring-soon': 'text-amber-600 font-medium', ok: 'text-muted-foreground' }; /***/ }, /***/ "./resources/js/lib/upgrade-url.ts" /*!*****************************************!*\ !*** ./resources/js/lib/upgrade-url.ts ***! \*****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ buildUpgradeUrl: () => (/* binding */ buildUpgradeUrl) /* harmony export */ }); /** * Appends portal tracking parameters to a catalog upgrade URL. * * The upgrade_url comes from the catalog tier and is a base URL without * site context. This function appends domain and portal-referral so the * portal can identify the originating site and entry point. * * Example: * baseUrl = https://my.liquidweb.com/upgrade/kadence/pro/ * domain = example.com * → https://my.liquidweb.com/upgrade/kadence/pro/?domain=example.com&portal-referral=plugin * * @param baseUrl The upgrade_url string from the catalog tier. * @param domain The site domain from getHarborDataValue( 'domain' ). * * @since 1.3.0 Domain parameter is now string | null to match the getHarborDataValue helper. * @since 1.0.2 */ function buildUpgradeUrl(baseUrl, domain) { if (!domain) { return baseUrl; } try { const url = new URL(baseUrl); url.searchParams.set('domain', domain); url.searchParams.set('portal-referral', 'plugin'); return url.toString(); } catch { return baseUrl; } } /***/ }, /***/ "./resources/js/lib/utils.ts" /*!***********************************!*\ !*** ./resources/js/lib/utils.ts ***! \***********************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ cn: () => (/* binding */ cn) /* harmony export */ }); /* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.mjs"); /* harmony import */ var tailwind_merge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tailwind-merge */ "./node_modules/tailwind-merge/dist/bundle-mjs.mjs"); function cn(...inputs) { return (0,tailwind_merge__WEBPACK_IMPORTED_MODULE_1__.twMerge)((0,clsx__WEBPACK_IMPORTED_MODULE_0__.clsx)(inputs)); } /***/ }, /***/ "./resources/js/store/actions.ts" /*!***************************************!*\ !*** ./resources/js/store/actions.ts ***! \***************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ deleteLicense: () => (/* binding */ deleteLicense), /* harmony export */ disableFeature: () => (/* binding */ disableFeature), /* harmony export */ enableFeature: () => (/* binding */ enableFeature), /* harmony export */ receiveCatalog: () => (/* binding */ receiveCatalog), /* harmony export */ receiveFeatures: () => (/* binding */ receiveFeatures), /* harmony export */ receiveHarborHosts: () => (/* binding */ receiveHarborHosts), /* harmony export */ receiveLegacyLicenses: () => (/* binding */ receiveLegacyLicenses), /* harmony export */ receiveLicense: () => (/* binding */ receiveLicense), /* harmony export */ refreshCatalog: () => (/* binding */ refreshCatalog), /* harmony export */ refreshLicense: () => (/* binding */ refreshLicense), /* harmony export */ storeLicense: () => (/* binding */ storeLicense), /* harmony export */ updateFeature: () => (/* binding */ updateFeature) /* harmony export */ }); /* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch"); /* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/errors */ "./resources/js/errors/index.ts"); /** * Action creators for the lw @wordpress/data store. * * @package LiquidWeb\Harbor */ // --------------------------------------------------------------------------- // Plain action creators (synchronous) // --------------------------------------------------------------------------- /** * Receives the list of features from the REST API. * * @param features The list of features. * @since 1.0.0 */ const receiveFeatures = features => ({ type: 'RECEIVE_FEATURES', features }); /** * Receives the list of Harbor host plugin basenames from the REST API. * * @param basenames The list of Harbor host plugin basenames. * @since 1.0.0 */ const receiveHarborHosts = basenames => ({ type: 'RECEIVE_HARBOR_HOSTS', basenames }); /** * Receives the license from the REST API. * * @param license The license. * @since 1.0.0 */ const receiveLicense = license => ({ type: 'RECEIVE_LICENSE', license }); /** * Receives the product catalog from the REST API. * * @param catalogs The product catalog. * @since 1.0.0 */ const receiveCatalog = catalogs => ({ type: 'RECEIVE_CATALOG', catalogs }); /** * Receives the legacy licenses from the REST API. * * @param licenses The legacy licenses. * @since 1.0.0 */ const receiveLegacyLicenses = licenses => ({ type: 'RECEIVE_LEGACY_LICENSES', licenses }); // --------------------------------------------------------------------------- // Thunk action creators (async) // --------------------------------------------------------------------------- /** * Enable a feature via the REST API. * * @param slug * @since 1.0.0 */ const enableFeature = slug => async ({ dispatch }) => { dispatch({ type: 'TOGGLE_FEATURE_START', slug }); try { const feature = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: `/liquidweb/harbor/v1/features/${slug}/enable`, method: 'POST' }); // TOGGLE_FEATURE_FINISHED patches bySlug with the returned feature — no // need to invalidate getFeatures. A background re-fetch would race the // optimistic patch and could overwrite correct state with stale data, // causing the toggle flicker reproduced in https://github.com/stellarwp/harbor/pull/94. dispatch({ type: 'TOGGLE_FEATURE_FINISHED', feature }); // Activation may have bootstrapped a new Harbor host plugin, so refresh // the hosts list. RECEIVE_HARBOR_HOSTS only touches harborHosts.basenames // and never overwrites bySlug, so there is no flicker risk. dispatch.invalidateResolution('getHarborHostBasenames', []); return null; } catch (err) { const error = await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.FeatureEnableFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to enable your feature.', '%TEXTDOMAIN%')); dispatch({ type: 'TOGGLE_FEATURE_FAILED', slug, error }); return error; } }; /** * Disable a feature via the REST API. * * @param slug * @since 1.0.0 */ const disableFeature = slug => async ({ dispatch }) => { dispatch({ type: 'TOGGLE_FEATURE_START', slug }); try { const feature = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: `/liquidweb/harbor/v1/features/${slug}/disable`, method: 'POST' }); // Same reasoning as enableFeature: patch via TOGGLE_FEATURE_FINISHED, // do not invalidate getFeatures (https://github.com/stellarwp/harbor/pull/94). No hosts invalidation needed // because deactivation cannot introduce a new Harbor host. dispatch({ type: 'TOGGLE_FEATURE_FINISHED', feature }); return null; } catch (err) { const error = await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.FeatureDisableFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to disable your feature.', '%TEXTDOMAIN%')); dispatch({ type: 'TOGGLE_FEATURE_FAILED', slug, error }); return error; } }; /** * Update a feature via the REST API. * * @param slug * @since 1.0.0 */ const updateFeature = slug => async ({ dispatch }) => { dispatch({ type: 'UPDATE_FEATURE_START', slug }); try { const feature = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: `/liquidweb/harbor/v1/features/${slug}/update`, method: 'POST' }); // Same reasoning as enableFeature/disableFeature: UPDATE_FEATURE_FINISHED // patches bySlug directly — invalidating getFeatures is unnecessary and // risks the stale-overwrite flicker (https://github.com/stellarwp/harbor/pull/94). dispatch({ type: 'UPDATE_FEATURE_FINISHED', feature }); return null; } catch (err) { const error = await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.FeatureUpdateFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to update your feature.', '%TEXTDOMAIN%')); dispatch({ type: 'UPDATE_FEATURE_FAILED', slug, error }); return error; } }; /** * Store a license key via the REST API, then invalidate the license * and features resolvers so the UI refreshes with the new entitlements. * * @param key * @since 1.0.0 */ const storeLicense = key => async ({ dispatch, select }) => { if (!select.canModifyLicense()) { return new _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError(_errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseActionInProgress, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to validate your license, another action is in progress.', '%TEXTDOMAIN%')); } dispatch({ type: 'STORE_LICENSE_START' }); try { const result = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/license', method: 'POST', data: { key } }); dispatch({ type: 'STORE_LICENSE_FINISHED', license: result }); // License changes affect entitlements globally (available features, tiers, // locked state), so a full re-fetch of features is correct here — unlike // toggle/update actions where the API already returns the patched feature. dispatch.invalidateResolution('getFeatures', []); return null; } catch (err) { const error = await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseStoreFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to validate your license.', '%TEXTDOMAIN%')); dispatch({ type: 'STORE_LICENSE_FAILED', error }); return error; } }; /** * Refresh the license from the upstream service via the REST API, then * invalidate the features resolver so the UI reflects any plan changes. * * @since 1.0.0 */ const refreshLicense = () => async ({ dispatch, select }) => { if (!select.canModifyLicense()) { return new _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError(_errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseActionInProgress, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to refresh your license, another action is in progress.', '%TEXTDOMAIN%')); } dispatch({ type: 'REFRESH_LICENSE_START' }); try { const result = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/license/refresh', method: 'POST' }); dispatch({ type: 'REFRESH_LICENSE_FINISHED', license: result }); dispatch.invalidateResolution('getFeatures', []); if (result.error) { return new _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError(_errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseValidateFailed, result.error.message); } return null; } catch (err) { const error = await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseRefreshFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to refresh your license.', '%TEXTDOMAIN%')); dispatch({ type: 'REFRESH_LICENSE_FAILED', error }); return error; } }; /** * Refresh the product catalog from the upstream service via the REST API. * * @since 1.0.0 */ const refreshCatalog = () => async ({ dispatch }) => { try { const result = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/catalog/refresh', method: 'POST' }); dispatch.receiveCatalog(result); return null; } catch (err) { const error = await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.CatalogRefreshFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to refresh the product catalog.', '%TEXTDOMAIN%')); return error; } }; /** * Delete the stored license key via the REST API, then invalidate the * features resolver so the UI refreshes. * * @since 1.0.0 */ const deleteLicense = () => async ({ dispatch, select }) => { if (!select.canModifyLicense()) { return new _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError(_errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseActionInProgress, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to delete your license, another action is in progress.', '%TEXTDOMAIN%')); } dispatch({ type: 'DELETE_LICENSE_START' }); try { await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/license', method: 'DELETE' }); dispatch({ type: 'DELETE_LICENSE_FINISHED' }); dispatch.invalidateResolution('getFeatures', []); return null; } catch (err) { const error = await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseDeleteFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to remove your license.', '%TEXTDOMAIN%')); dispatch({ type: 'DELETE_LICENSE_FAILED', error }); return error; } }; /***/ }, /***/ "./resources/js/store/constants.ts" /*!*****************************************!*\ !*** ./resources/js/store/constants.ts ***! \*****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ STORE_NAME: () => (/* binding */ STORE_NAME) /* harmony export */ }); /** * @wordpress/data store name for the Harbor library. * * @package LiquidWeb\Harbor */ const STORE_NAME = 'lw/harbor'; /***/ }, /***/ "./resources/js/store/index.ts" /*!*************************************!*\ !*** ./resources/js/store/index.ts ***! \*************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ STORE_NAME: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_5__.STORE_NAME), /* harmony export */ registerHarborStore: () => (/* binding */ registerHarborStore), /* harmony export */ store: () => (/* binding */ store) /* harmony export */ }); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reducer */ "./resources/js/store/reducer.ts"); /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ "./resources/js/store/actions.ts"); /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./selectors */ "./resources/js/store/selectors.ts"); /* harmony import */ var _resolvers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./resolvers */ "./resources/js/store/resolvers.ts"); /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants */ "./resources/js/store/constants.ts"); /** * Registers the lw @wordpress/data store. * * Call registerHarborStore() once before createRoot() in index.tsx. * Consumers import the store descriptor and use useSelect / useDispatch. * * @package LiquidWeb\Harbor */ const store = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createReduxStore)(_constants__WEBPACK_IMPORTED_MODULE_5__.STORE_NAME, { reducer: _reducer__WEBPACK_IMPORTED_MODULE_1__.reducer, actions: _actions__WEBPACK_IMPORTED_MODULE_2__, selectors: _selectors__WEBPACK_IMPORTED_MODULE_3__, resolvers: _resolvers__WEBPACK_IMPORTED_MODULE_4__ }); function registerHarborStore() { (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.register)(store); } /***/ }, /***/ "./resources/js/store/reducer.ts" /*!***************************************!*\ !*** ./resources/js/store/reducer.ts ***! \***************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ reducer: () => (/* binding */ reducer) /* harmony export */ }); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); /** * Reducer for the lw @wordpress/data store. * * @package LiquidWeb\Harbor */ const reducer = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.combineReducers)({ features, harborHosts, license, catalog, legacyLicenses }); // --------------------------------------------------------------------------- // Catalog // --------------------------------------------------------------------------- const CATALOG_DEFAULT = { byProductSlug: {} }; function catalog(state = CATALOG_DEFAULT, action) { switch (action.type) { case 'RECEIVE_CATALOG': { return { ...state, byProductSlug: Object.fromEntries(action.catalogs.map(c => [c.product_slug, c])) }; } default: return state; } } // --------------------------------------------------------------------------- // Legacy licenses // --------------------------------------------------------------------------- const LEGACY_LICENSES_DEFAULT = { bySlug: {} }; function legacyLicenses(state = LEGACY_LICENSES_DEFAULT, action) { switch (action.type) { case 'RECEIVE_LEGACY_LICENSES': { return { ...state, bySlug: Object.fromEntries(action.licenses.map(l => [l.slug, l])) }; } default: return state; } } // --------------------------------------------------------------------------- // Features // --------------------------------------------------------------------------- const FEATURES_DEFAULT = { bySlug: {}, toggling: {}, updating: {}, errorBySlug: {} }; function features(state = FEATURES_DEFAULT, action) { switch (action.type) { case 'RECEIVE_FEATURES': { return { ...state, bySlug: Object.fromEntries(action.features.map(f => [f.slug, f])) }; } case 'TOGGLE_FEATURE_START': { const { [action.slug]: _, ...remainingErrors } = state.errorBySlug; return { ...state, toggling: { ...state.toggling, [action.slug]: true }, errorBySlug: remainingErrors }; } case 'TOGGLE_FEATURE_FINISHED': { const { slug } = action.feature; const { [slug]: _, ...remainingToggling } = state.toggling; return { ...state, bySlug: { ...state.bySlug, [slug]: action.feature }, toggling: remainingToggling }; } case 'TOGGLE_FEATURE_FAILED': { const { [action.slug]: _, ...remainingToggling } = state.toggling; return { ...state, toggling: remainingToggling, errorBySlug: { ...state.errorBySlug, [action.slug]: action.error } }; } case 'UPDATE_FEATURE_START': { const { [action.slug]: _, ...remainingErrors } = state.errorBySlug; return { ...state, updating: { ...state.updating, [action.slug]: true }, errorBySlug: remainingErrors }; } case 'UPDATE_FEATURE_FINISHED': { const { slug } = action.feature; const { [slug]: _, ...remainingUpdating } = state.updating; return { ...state, bySlug: { ...state.bySlug, [slug]: action.feature }, updating: remainingUpdating }; } case 'UPDATE_FEATURE_FAILED': { const { [action.slug]: _, ...remainingUpdating } = state.updating; return { ...state, updating: remainingUpdating, errorBySlug: { ...state.errorBySlug, [action.slug]: action.error } }; } default: return state; } } // --------------------------------------------------------------------------- // Harbor hosts // --------------------------------------------------------------------------- const HARBOR_HOSTS_DEFAULT = { basenames: [] }; function harborHosts(state = HARBOR_HOSTS_DEFAULT, action) { switch (action.type) { case 'RECEIVE_HARBOR_HOSTS': return { ...state, basenames: action.basenames }; default: return state; } } // --------------------------------------------------------------------------- // License // --------------------------------------------------------------------------- const LICENSE_DEFAULT = { license: { key: null, products: [], error: null }, isStoring: false, isDeleting: false, isRefreshing: false, storeError: null, deleteError: null, refreshError: null }; function license(state = LICENSE_DEFAULT, action) { switch (action.type) { case 'RECEIVE_LICENSE': { return { ...state, license: action.license }; } case 'STORE_LICENSE_START': { return { ...state, isStoring: true, storeError: null }; } case 'STORE_LICENSE_FINISHED': { return { ...state, isStoring: false, license: action.license }; } case 'STORE_LICENSE_FAILED': { return { ...state, isStoring: false, storeError: action.error }; } case 'DELETE_LICENSE_START': { return { ...state, isDeleting: true, deleteError: null }; } case 'DELETE_LICENSE_FINISHED': { return { ...state, isDeleting: false, license: { key: null, products: [], error: null } }; } case 'DELETE_LICENSE_FAILED': { return { ...state, isDeleting: false, deleteError: action.error }; } case 'REFRESH_LICENSE_START': { return { ...state, isRefreshing: true, refreshError: null }; } case 'REFRESH_LICENSE_FINISHED': { return { ...state, isRefreshing: false, license: action.license }; } case 'REFRESH_LICENSE_FAILED': { return { ...state, isRefreshing: false, refreshError: action.error }; } default: return state; } } /***/ }, /***/ "./resources/js/store/resolvers.ts" /*!*****************************************!*\ !*** ./resources/js/store/resolvers.ts ***! \*****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getCatalog: () => (/* binding */ getCatalog), /* harmony export */ getCatalogTier: () => (/* binding */ getCatalogTier), /* harmony export */ getFeature: () => (/* binding */ getFeature), /* harmony export */ getFeatures: () => (/* binding */ getFeatures), /* harmony export */ getFeaturesByProduct: () => (/* binding */ getFeaturesByProduct), /* harmony export */ getHarborHostBasenames: () => (/* binding */ getHarborHostBasenames), /* harmony export */ getLegacyLicenseBySlug: () => (/* binding */ getLegacyLicenseBySlug), /* harmony export */ getLegacyLicenses: () => (/* binding */ getLegacyLicenses), /* harmony export */ getLicenseKey: () => (/* binding */ getLicenseKey), /* harmony export */ getLicenseProducts: () => (/* binding */ getLicenseProducts), /* harmony export */ getProductCatalog: () => (/* binding */ getProductCatalog), /* harmony export */ getProductTiers: () => (/* binding */ getProductTiers), /* harmony export */ hasLegacyLicense: () => (/* binding */ hasLegacyLicense), /* harmony export */ hasLegacyLicenses: () => (/* binding */ hasLegacyLicenses), /* harmony export */ hasLicense: () => (/* binding */ hasLicense), /* harmony export */ isFeatureEnabled: () => (/* binding */ isFeatureEnabled) /* harmony export */ }); /* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch"); /* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/errors */ "./resources/js/errors/index.ts"); /* harmony import */ var _lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/forward-resolver */ "./resources/js/lib/forward-resolver.ts"); /** * Resolvers for the lw @wordpress/data store. * * Each resolver name matches a selector. @wordpress/data calls the resolver * automatically the first time the matching selector is invoked, then marks * it as resolved so subsequent calls hit the cache. * * @package LiquidWeb\Harbor */ /** * Fetches all features from the REST API and stores them. * Triggered automatically when getFeatures is first called. */ const getFeatures = () => async ({ dispatch }) => { try { const features = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/features' }); dispatch.receiveFeatures(features); } catch (err) { throw await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.FeaturesFetchFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to load your features.', '%TEXTDOMAIN%')); } }; /** * Fetches the active Harbor host plugin basenames from the REST API. * Triggered automatically when getHarborHostBasenames is first called, and * invalidated after plugin activation so the list stays current. */ const getHarborHostBasenames = () => async ({ dispatch }) => { try { const basenames = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/hosts' }); dispatch.receiveHarborHosts(basenames); } catch (err) { throw await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.FeaturesFetchFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to load Harbor hosts.', '%TEXTDOMAIN%')); } }; const getFeaturesByProduct = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getFeatures'); const getFeature = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getFeatures'); const isFeatureEnabled = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getFeatures'); // --------------------------------------------------------------------------- // Legacy licenses // --------------------------------------------------------------------------- /** * Fetches legacy licenses from the REST API. */ const getLegacyLicenses = () => async ({ dispatch }) => { try { const licenses = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/legacy-licenses' }); dispatch.receiveLegacyLicenses(licenses); } catch (err) { throw await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LegacyLicensesFetchFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to load legacy licenses.', '%TEXTDOMAIN%')); } }; const getLegacyLicenseBySlug = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getLegacyLicenses'); const hasLegacyLicense = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getLegacyLicenses'); const hasLegacyLicenses = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolver)('getLegacyLicenses'); // --------------------------------------------------------------------------- // Catalog // --------------------------------------------------------------------------- /** * Fetches all product catalogs from the REST API and stores them. * Triggered automatically when getCatalog is first called. */ const getCatalog = () => async ({ dispatch }) => { try { const catalogs = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/catalog' }); dispatch.receiveCatalog(catalogs); } catch (err) { throw await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.CatalogFetchFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to load the product catalog.', '%TEXTDOMAIN%')); } }; const getProductCatalog = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getCatalog'); const getProductTiers = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getCatalog'); const getCatalogTier = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getCatalog'); // --------------------------------------------------------------------------- // License // --------------------------------------------------------------------------- /** * Fetches the stored license from the REST API. * Triggered automatically when getLicenseKey is first called. */ const getLicenseKey = () => async ({ dispatch }) => { try { const result = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({ path: '/liquidweb/harbor/v1/license' }); dispatch.receiveLicense(result); } catch (err) { throw await _errors__WEBPACK_IMPORTED_MODULE_2__.HarborError.wrap(err, _errors__WEBPACK_IMPORTED_MODULE_2__.ErrorCode.LicenseFetchFailed, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Liquid Web Software Manager failed to load your license.', '%TEXTDOMAIN%')); } }; const hasLicense = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolver)('getLicenseKey'); const getLicenseProducts = (0,_lib_forward_resolver__WEBPACK_IMPORTED_MODULE_3__.forwardResolverWithoutArgs)('getLicenseKey'); /***/ }, /***/ "./resources/js/store/selectors.ts" /*!*****************************************!*\ !*** ./resources/js/store/selectors.ts ***! \*****************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ areAllProductsNotActivated: () => (/* binding */ areAllProductsNotActivated), /* harmony export */ canModifyLicense: () => (/* binding */ canModifyLicense), /* harmony export */ getActiveLegacyLicense: () => (/* binding */ getActiveLegacyLicense), /* harmony export */ getCatalog: () => (/* binding */ getCatalog), /* harmony export */ getCatalogTier: () => (/* binding */ getCatalogTier), /* harmony export */ getDeleteLicenseError: () => (/* binding */ getDeleteLicenseError), /* harmony export */ getEnabledHarborHostCount: () => (/* binding */ getEnabledHarborHostCount), /* harmony export */ getFeature: () => (/* binding */ getFeature), /* harmony export */ getFeatureError: () => (/* binding */ getFeatureError), /* harmony export */ getFeatureMismatchType: () => (/* binding */ getFeatureMismatchType), /* harmony export */ getFeatures: () => (/* binding */ getFeatures), /* harmony export */ getFeaturesByProduct: () => (/* binding */ getFeaturesByProduct), /* harmony export */ getHarborHostBasenames: () => (/* binding */ getHarborHostBasenames), /* harmony export */ getLegacyLicenseBySlug: () => (/* binding */ getLegacyLicenseBySlug), /* harmony export */ getLegacyLicenses: () => (/* binding */ getLegacyLicenses), /* harmony export */ getLicenseError: () => (/* binding */ getLicenseError), /* harmony export */ getLicenseKey: () => (/* binding */ getLicenseKey), /* harmony export */ getLicenseProducts: () => (/* binding */ getLicenseProducts), /* harmony export */ getProductCatalog: () => (/* binding */ getProductCatalog), /* harmony export */ getProductTiers: () => (/* binding */ getProductTiers), /* harmony export */ getRefreshLicenseError: () => (/* binding */ getRefreshLicenseError), /* harmony export */ getStoreLicenseError: () => (/* binding */ getStoreLicenseError), /* harmony export */ getUnactivatedLicenseProduct: () => (/* binding */ getUnactivatedLicenseProduct), /* harmony export */ getWithoutCancelledProducts: () => (/* binding */ getWithoutCancelledProducts), /* harmony export */ hasActiveLegacyLicenseForProduct: () => (/* binding */ hasActiveLegacyLicenseForProduct), /* harmony export */ hasLegacyLicense: () => (/* binding */ hasLegacyLicense), /* harmony export */ hasLegacyLicenses: () => (/* binding */ hasLegacyLicenses), /* harmony export */ hasLicense: () => (/* binding */ hasLicense), /* harmony export */ hasUncoveredLegacyLicenses: () => (/* binding */ hasUncoveredLegacyLicenses), /* harmony export */ isAnyInstallableBusy: () => (/* binding */ isAnyInstallableBusy), /* harmony export */ isFeatureEnabled: () => (/* binding */ isFeatureEnabled), /* harmony export */ isFeatureToggling: () => (/* binding */ isFeatureToggling), /* harmony export */ isFeatureUpdating: () => (/* binding */ isFeatureUpdating), /* harmony export */ isLicenseDeleting: () => (/* binding */ isLicenseDeleting), /* harmony export */ isLicenseRefreshing: () => (/* binding */ isLicenseRefreshing), /* harmony export */ isLicenseStoring: () => (/* binding */ isLicenseStoring), /* harmony export */ isProductLicenseValid: () => (/* binding */ isProductLicenseValid), /* harmony export */ isProductUnifiedLicensed: () => (/* binding */ isProductUnifiedLicensed) /* harmony export */ }); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_feature_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/feature-utils */ "./resources/js/lib/feature-utils.ts"); /* harmony import */ var _types_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/types/utils */ "./resources/js/types/utils.ts"); /** * Selectors for the lw @wordpress/data store. * * @package LiquidWeb\Harbor */ // --------------------------------------------------------------------------- // Features // --------------------------------------------------------------------------- const getFeatures = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => Object.values(state.features.bySlug), state => [state.features.bySlug]); const getFeaturesByProduct = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)((state, product) => Object.values(state.features.bySlug).filter(f => f.product === product), (state, product) => [state.features.bySlug, product]); const getFeature = (state, slug) => state.features.bySlug[slug] ?? null; const isFeatureEnabled = (state, slug) => state.features.bySlug[slug]?.is_enabled ?? false; const isFeatureToggling = (state, slug) => state.features.toggling[slug] ?? false; const getFeatureError = (state, slug) => state.features.errorBySlug[slug] ?? null; /** * Returns the capability mismatch type for a feature, or null if there is none. * * Wraps getFeatureMismatch() for consumers that only have access to the store. * Hooks that already hold a Feature object should call getFeatureMismatch() directly. */ const getFeatureMismatchType = (state, slug) => { const feature = state.features.bySlug[slug]; if (!feature) return null; return (0,_lib_feature_utils__WEBPACK_IMPORTED_MODULE_1__.getFeatureMismatch)(feature); }; const isFeatureUpdating = (state, slug) => state.features.updating[slug] ?? false; /** * Returns the plugin basenames of all active Harbor-bundled plugins. */ const getHarborHostBasenames = state => state.harborHosts.basenames; /** * Returns the number of Harbor host plugins that are currently enabled. * * Uses the dedicated hosts registry (accurate after activation) rather than * the is_harbor_host field on features (unreliable for mid-request activations). */ const getEnabledHarborHostCount = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => Object.values(state.features.bySlug).filter(f => f.type === 'plugin' && state.harborHosts.basenames.includes(f.plugin_file) && f.is_enabled).length, state => [state.harborHosts.basenames, state.features.bySlug]); /** * True when any feature is being toggled or updated. * * Both toggle and update operations trigger WordPress install/activate/deactivate * operations that should not run concurrently. * * Memoized via createSelector so the loops only re-run when * the relevant sub-trees actually change. */ const isAnyInstallableBusy = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => { const { toggling, updating, bySlug } = state.features; const isInstallable = slug => { const feature = bySlug[slug]; return feature !== undefined && (0,_types_utils__WEBPACK_IMPORTED_MODULE_2__.isInstallableFeature)(feature); }; return Object.keys(toggling).some(isInstallable) || Object.keys(updating).some(isInstallable); }, state => [state.features.toggling, state.features.updating, state.features.bySlug]); // --------------------------------------------------------------------------- // Legacy licenses // --------------------------------------------------------------------------- const getLegacyLicenses = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => Object.values(state.legacyLicenses.bySlug), state => [state.legacyLicenses.bySlug]); const getLegacyLicenseBySlug = (state, slug) => state.legacyLicenses.bySlug[slug] ?? null; const hasLegacyLicense = (state, slug) => slug in state.legacyLicenses.bySlug; const hasLegacyLicenses = state => Object.keys(state.legacyLicenses.bySlug).length > 0; /** * True when at least one legacy license belongs to a product not already * covered by the unified license. Used to suppress the banner when the * unified license makes legacy notices redundant. */ const hasUncoveredLegacyLicenses = state => Object.values(state.legacyLicenses.bySlug).some(license => !isProductUnifiedLicensed(state, license.product)); /** * Returns the legacy license for the given feature slug only if it is active, * or null if it does not exist or has expired. */ const getActiveLegacyLicense = (state, slug) => { const license = state.legacyLicenses.bySlug[slug] ?? null; return license !== null && license.is_active ? license : null; }; /** * Returns all license products excluding those with a cancelled status. * * Cancelled products are excluded globally so they do not influence any * selector's output — they clutter the UI and should not affect license * validity or activation checks. */ const getWithoutCancelledProducts = state => state.license.license.products.filter(p => p.status !== 'cancelled'); /** * True when the unified license covers the given product slug. */ const isProductUnifiedLicensed = (state, productSlug) => getWithoutCancelledProducts(state).some(p => p.product_slug === productSlug); /** * True when any tier entry for the given product has is_valid set to true, * meaning the product is activated on the current domain with an active entitlement. * * @since 1.0.0 */ const isProductLicenseValid = (state, productSlug) => getWithoutCancelledProducts(state).some(p => p.product_slug === productSlug && p.is_valid === true); /** * True when at least one feature belonging to the product has an active legacy license. */ const hasActiveLegacyLicenseForProduct = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)((state, productSlug) => Object.values(state.features.bySlug).filter(f => f.product === productSlug).some(f => state.legacyLicenses.bySlug[f.slug]?.is_active === true), (state, productSlug) => [state.features.bySlug, state.legacyLicenses.bySlug, productSlug]); // --------------------------------------------------------------------------- // Catalog // --------------------------------------------------------------------------- const getCatalog = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => Object.values(state.catalog.byProductSlug), state => [state.catalog.byProductSlug]); const getProductCatalog = (state, slug) => state.catalog.byProductSlug[slug] ?? null; const getProductTiers = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createSelector)((state, slug) => state.catalog.byProductSlug[slug]?.tiers ?? [], (state, slug) => [state.catalog.byProductSlug, slug]); /** * Returns a single CatalogTier by product slug and tier slug, or null. * * Returns the full tier object so callers can read price, currency, etc. */ const getCatalogTier = (state, productSlug, tierSlug) => state.catalog.byProductSlug[productSlug]?.tiers.find(t => t.tier_slug === tierSlug) ?? null; // --------------------------------------------------------------------------- // License // --------------------------------------------------------------------------- const UNACTIVATED_STATUSES = ['not_activated', 'activation_required']; /** * True when a license is present and every non-expired product's validation_status * indicates it has not been activated on this domain. Expired products are excluded * so they don't suppress the notice for products that can still be activated. */ const areAllProductsNotActivated = state => { const products = getWithoutCancelledProducts(state).filter(p => p.validation_status !== 'expired'); return products.length > 0 && products.every(p => UNACTIVATED_STATUSES.includes(p.validation_status)); }; /** * Returns the first license product for the given slug that the user owns but * has not yet activated on this domain, or null when none exists. * * Matches entries where activated_here is not true and validation_status is * not_activated or activation_required — i.e. the subscription exists but the * current domain is not in the activations list. * * @since 1.0.1 */ const getUnactivatedLicenseProduct = (state, productSlug) => getWithoutCancelledProducts(state).find(p => p.product_slug === productSlug && p.activated_here !== true && UNACTIVATED_STATUSES.includes(p.validation_status)) ?? null; /** * Returns the stored unified license key, or null. Triggers getLicenseKey resolver. * @param state */ const getLicenseKey = state => state.license.license.key; const hasLicense = state => state.license.license.key !== null; const getLicenseProducts = state => getWithoutCancelledProducts(state).slice().sort((a, b) => (b.activated_here === true ? 1 : 0) - (a.activated_here === true ? 1 : 0)); const getLicenseError = state => state.license.license.error; const isLicenseStoring = state => state.license.isStoring; const isLicenseDeleting = state => state.license.isDeleting; const isLicenseRefreshing = state => state.license.isRefreshing; const canModifyLicense = state => !state.license.isStoring && !state.license.isDeleting && !state.license.isRefreshing; const getStoreLicenseError = state => state.license.storeError; const getDeleteLicenseError = state => state.license.deleteError; const getRefreshLicenseError = state => state.license.refreshError; /***/ }, /***/ "./resources/js/types/utils.ts" /*!*************************************!*\ !*** ./resources/js/types/utils.ts ***! \*************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isInstallableFeature: () => (/* binding */ isInstallableFeature), /* harmony export */ isPluginFeature: () => (/* binding */ isPluginFeature), /* harmony export */ isServiceFeature: () => (/* binding */ isServiceFeature), /* harmony export */ isThemeFeature: () => (/* binding */ isThemeFeature) /* harmony export */ }); /** * Type guard utilities for narrowing Feature union types. * * @package LiquidWeb\Harbor */ function isPluginFeature(feature) { return feature.type === 'plugin'; } function isThemeFeature(feature) { return feature.type === 'theme'; } function isServiceFeature(feature) { return feature.type === 'service'; } function isInstallableFeature(feature) { return feature.type === 'plugin' || feature.type === 'theme'; } /***/ }, /***/ "./node_modules/get-nonce/dist/es2015/index.js" /*!*****************************************************!*\ !*** ./node_modules/get-nonce/dist/es2015/index.js ***! \*****************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getNonce: () => (/* binding */ getNonce), /* harmony export */ setNonce: () => (/* binding */ setNonce) /* harmony export */ }); var currentNonce; var setNonce = function (nonce) { currentNonce = nonce; }; var getNonce = function () { if (currentNonce) { return currentNonce; } if (true) { return __webpack_require__.nc; } // removed by dead control flow }; /***/ }, /***/ "./node_modules/lucide-react/dist/esm/Icon.js" /*!****************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/Icon.js ***! \****************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ Icon) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _defaultAttributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultAttributes.js */ "./node_modules/lucide-react/dist/esm/defaultAttributes.js"); /* harmony import */ var _shared_src_utils_hasA11yProp_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/src/utils/hasA11yProp.js */ "./node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js"); /* harmony import */ var _shared_src_utils_mergeClasses_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shared/src/utils/mergeClasses.js */ "./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Icon = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)( ({ color = "currentColor", size = 24, strokeWidth = 2, absoluteStrokeWidth, className = "", children, iconNode, ...rest }, ref) => (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)( "svg", { ref, ..._defaultAttributes_js__WEBPACK_IMPORTED_MODULE_1__["default"], width: size, height: size, stroke: color, strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth, className: (0,_shared_src_utils_mergeClasses_js__WEBPACK_IMPORTED_MODULE_3__.mergeClasses)("lucide", className), ...!children && !(0,_shared_src_utils_hasA11yProp_js__WEBPACK_IMPORTED_MODULE_2__.hasA11yProp)(rest) && { "aria-hidden": "true" }, ...rest }, [ ...iconNode.map(([tag, attrs]) => (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(tag, attrs)), ...Array.isArray(children) ? children : [children] ] ) ); //# sourceMappingURL=Icon.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/createLucideIcon.js" /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/createLucideIcon.js ***! \****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ createLucideIcon) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _shared_src_utils_mergeClasses_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./shared/src/utils/mergeClasses.js */ "./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js"); /* harmony import */ var _shared_src_utils_toKebabCase_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/src/utils/toKebabCase.js */ "./node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js"); /* harmony import */ var _shared_src_utils_toPascalCase_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shared/src/utils/toPascalCase.js */ "./node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js"); /* harmony import */ var _Icon_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Icon.js */ "./node_modules/lucide-react/dist/esm/Icon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const createLucideIcon = (iconName, iconNode) => { const Component = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)( ({ className, ...props }, ref) => (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Icon_js__WEBPACK_IMPORTED_MODULE_4__["default"], { ref, iconNode, className: (0,_shared_src_utils_mergeClasses_js__WEBPACK_IMPORTED_MODULE_1__.mergeClasses)( `lucide-${(0,_shared_src_utils_toKebabCase_js__WEBPACK_IMPORTED_MODULE_2__.toKebabCase)((0,_shared_src_utils_toPascalCase_js__WEBPACK_IMPORTED_MODULE_3__.toPascalCase)(iconName))}`, `lucide-${iconName}`, className ), ...props }) ); Component.displayName = (0,_shared_src_utils_toPascalCase_js__WEBPACK_IMPORTED_MODULE_3__.toPascalCase)(iconName); return Component; }; //# sourceMappingURL=createLucideIcon.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/defaultAttributes.js" /*!*****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/defaultAttributes.js ***! \*****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ defaultAttributes) /* harmony export */ }); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ var defaultAttributes = { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" }; //# sourceMappingURL=defaultAttributes.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/check.js" /*!***********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/check.js ***! \***********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Check) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]]; const Check = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("check", __iconNode); //# sourceMappingURL=check.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/chevron-down.js" /*!******************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/chevron-down.js ***! \******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ ChevronDown) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]]; const ChevronDown = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("chevron-down", __iconNode); //# sourceMappingURL=chevron-down.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/chevron-right.js" /*!*******************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/chevron-right.js ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ ChevronRight) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]]; const ChevronRight = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("chevron-right", __iconNode); //# sourceMappingURL=chevron-right.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/chevron-up.js" /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/chevron-up.js ***! \****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ ChevronUp) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]; const ChevronUp = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("chevron-up", __iconNode); //# sourceMappingURL=chevron-up.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/circle-check-big.js" /*!**********************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/circle-check-big.js ***! \**********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ CircleCheckBig) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }], ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }] ]; const CircleCheckBig = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("circle-check-big", __iconNode); //# sourceMappingURL=circle-check-big.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/download.js" /*!**************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/download.js ***! \**************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Download) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "M12 15V3", key: "m9g1x1" }], ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }], ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }] ]; const Download = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("download", __iconNode); //# sourceMappingURL=download.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/external-link.js" /*!*******************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/external-link.js ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ ExternalLink) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "M15 3h6v6", key: "1q9fwt" }], ["path", { d: "M10 14 21 3", key: "gplh6r" }], ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }] ]; const ExternalLink = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("external-link", __iconNode); //# sourceMappingURL=external-link.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/info.js" /*!**********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/info.js ***! \**********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Info) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], ["path", { d: "M12 16v-4", key: "1dtifu" }], ["path", { d: "M12 8h.01", key: "e9boi3" }] ]; const Info = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("info", __iconNode); //# sourceMappingURL=info.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/key-round.js" /*!***************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/key-round.js ***! \***************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ KeyRound) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ [ "path", { d: "M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z", key: "1s6t7t" } ], ["circle", { cx: "16.5", cy: "7.5", r: ".5", fill: "currentColor", key: "w0ekpg" }] ]; const KeyRound = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("key-round", __iconNode); //# sourceMappingURL=key-round.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/loader-circle.js" /*!*******************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/loader-circle.js ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ LoaderCircle) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]]; const LoaderCircle = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("loader-circle", __iconNode); //# sourceMappingURL=loader-circle.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/lock.js" /*!**********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/lock.js ***! \**********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Lock) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2", key: "1w4ew1" }], ["path", { d: "M7 11V7a5 5 0 0 1 10 0v4", key: "fwvmzm" }] ]; const Lock = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("lock", __iconNode); //# sourceMappingURL=lock.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/mail.js" /*!**********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/mail.js ***! \**********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Mail) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7", key: "132q7q" }], ["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", key: "izxlao" }] ]; const Mail = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("mail", __iconNode); //# sourceMappingURL=mail.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/pencil.js" /*!************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/pencil.js ***! \************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Pencil) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ [ "path", { d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z", key: "1a8usu" } ], ["path", { d: "m15 5 4 4", key: "1mk7zo" }] ]; const Pencil = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("pencil", __iconNode); //# sourceMappingURL=pencil.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/refresh-cw.js" /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/refresh-cw.js ***! \****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ RefreshCw) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }], ["path", { d: "M21 3v5h-5", key: "1q7to0" }], ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }], ["path", { d: "M8 16H3v5", key: "1cv678" }] ]; const RefreshCw = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("refresh-cw", __iconNode); //# sourceMappingURL=refresh-cw.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/rocket.js" /*!************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/rocket.js ***! \************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Rocket) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5", key: "qeys4" }], [ "path", { d: "M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09", key: "u4xsad" } ], [ "path", { d: "M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z", key: "676m9" } ], ["path", { d: "M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05", key: "92ym6u" }] ]; const Rocket = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("rocket", __iconNode); //# sourceMappingURL=rocket.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/search.js" /*!************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/search.js ***! \************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Search) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }], ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }] ]; const Search = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("search", __iconNode); //# sourceMappingURL=search.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/trash-2.js" /*!*************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/trash-2.js ***! \*************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ Trash2) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "M10 11v6", key: "nco0om" }], ["path", { d: "M14 11v6", key: "outv1u" }], ["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }], ["path", { d: "M3 6h18", key: "d0wm0j" }], ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }] ]; const Trash2 = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("trash-2", __iconNode); //# sourceMappingURL=trash-2.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/triangle-alert.js" /*!********************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/triangle-alert.js ***! \********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ TriangleAlert) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ [ "path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3", key: "wmoenq" } ], ["path", { d: "M12 9v4", key: "juzpu7" }], ["path", { d: "M12 17h.01", key: "p32p05" }] ]; const TriangleAlert = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("triangle-alert", __iconNode); //# sourceMappingURL=triangle-alert.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/icons/x.js" /*!*******************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/x.js ***! \*******************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __iconNode: () => (/* binding */ __iconNode), /* harmony export */ "default": () => (/* binding */ X) /* harmony export */ }); /* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ "./node_modules/lucide-react/dist/esm/createLucideIcon.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const __iconNode = [ ["path", { d: "M18 6 6 18", key: "1bl5f8" }], ["path", { d: "m6 6 12 12", key: "d8bk6v" }] ]; const X = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__["default"])("x", __iconNode); //# sourceMappingURL=x.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js" /*!****************************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js ***! \****************************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ hasA11yProp: () => (/* binding */ hasA11yProp) /* harmony export */ }); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const hasA11yProp = (props) => { for (const prop in props) { if (prop.startsWith("aria-") || prop === "role" || prop === "title") { return true; } } return false; }; //# sourceMappingURL=hasA11yProp.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js" /*!*****************************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js ***! \*****************************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ mergeClasses: () => (/* binding */ mergeClasses) /* harmony export */ }); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const mergeClasses = (...classes) => classes.filter((className, index, array) => { return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index; }).join(" ").trim(); //# sourceMappingURL=mergeClasses.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js" /*!****************************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js ***! \****************************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ toCamelCase: () => (/* binding */ toCamelCase) /* harmony export */ }); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const toCamelCase = (string) => string.replace( /^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase() ); //# sourceMappingURL=toCamelCase.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js" /*!****************************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js ***! \****************************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ toKebabCase: () => (/* binding */ toKebabCase) /* harmony export */ }); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(); //# sourceMappingURL=toKebabCase.js.map /***/ }, /***/ "./node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js" /*!*****************************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js ***! \*****************************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ toPascalCase: () => (/* binding */ toPascalCase) /* harmony export */ }); /* harmony import */ var _toCamelCase_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toCamelCase.js */ "./node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js"); /** * @license lucide-react v0.575.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const toPascalCase = (string) => { const camelCase = (0,_toCamelCase_js__WEBPACK_IMPORTED_MODULE_0__.toCamelCase)(string); return camelCase.charAt(0).toUpperCase() + camelCase.slice(1); }; //# sourceMappingURL=toPascalCase.js.map /***/ }, /***/ "./resources/css/globals.css" /*!***********************************!*\ !*** ./resources/css/globals.css ***! \***********************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin /***/ }, /***/ "./node_modules/react-dom/client.js" /*!******************************************!*\ !*** ./node_modules/react-dom/client.js ***! \******************************************/ (__unused_webpack_module, exports, __webpack_require__) { var m = __webpack_require__(/*! react-dom */ "react-dom"); if (false) // removed by dead control flow {} else { var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; exports.createRoot = function(c, o) { i.usingClientEntryPoint = true; try { return m.createRoot(c, o); } finally { i.usingClientEntryPoint = false; } }; exports.hydrateRoot = function(c, h, o) { i.usingClientEntryPoint = true; try { return m.hydrateRoot(c, h, o); } finally { i.usingClientEntryPoint = false; } }; } /***/ }, /***/ "./node_modules/react-remove-scroll-bar/dist/es2015/component.js" /*!***********************************************************************!*\ !*** ./node_modules/react-remove-scroll-bar/dist/es2015/component.js ***! \***********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ RemoveScrollBar: () => (/* binding */ RemoveScrollBar), /* harmony export */ lockAttribute: () => (/* binding */ lockAttribute), /* harmony export */ useLockAttribute: () => (/* binding */ useLockAttribute) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_style_singleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-style-singleton */ "./node_modules/react-style-singleton/dist/es2015/index.js"); /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/react-remove-scroll-bar/dist/es2015/constants.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./node_modules/react-remove-scroll-bar/dist/es2015/utils.js"); var Style = (0,react_style_singleton__WEBPACK_IMPORTED_MODULE_1__.styleSingleton)(); var lockAttribute = 'data-scroll-locked'; // important tip - once we measure scrollBar width and remove them // we could not repeat this operation // thus we are using style-singleton - only the first "yet correct" style will be applied. var getStyles = function (_a, allowRelative, gapMode, important) { var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap; if (gapMode === void 0) { gapMode = 'margin'; } return "\n .".concat(_constants__WEBPACK_IMPORTED_MODULE_2__.noScrollbarsClassName, " {\n overflow: hidden ").concat(important, ";\n padding-right: ").concat(gap, "px ").concat(important, ";\n }\n body[").concat(lockAttribute, "] {\n overflow: hidden ").concat(important, ";\n overscroll-behavior: contain;\n ").concat([ allowRelative && "position: relative ".concat(important, ";"), gapMode === 'margin' && "\n padding-left: ".concat(left, "px;\n padding-top: ").concat(top, "px;\n padding-right: ").concat(right, "px;\n margin-left:0;\n margin-top:0;\n margin-right: ").concat(gap, "px ").concat(important, ";\n "), gapMode === 'padding' && "padding-right: ".concat(gap, "px ").concat(important, ";"), ] .filter(Boolean) .join(''), "\n }\n \n .").concat(_constants__WEBPACK_IMPORTED_MODULE_2__.zeroRightClassName, " {\n right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(_constants__WEBPACK_IMPORTED_MODULE_2__.fullWidthClassName, " {\n margin-right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(_constants__WEBPACK_IMPORTED_MODULE_2__.zeroRightClassName, " .").concat(_constants__WEBPACK_IMPORTED_MODULE_2__.zeroRightClassName, " {\n right: 0 ").concat(important, ";\n }\n \n .").concat(_constants__WEBPACK_IMPORTED_MODULE_2__.fullWidthClassName, " .").concat(_constants__WEBPACK_IMPORTED_MODULE_2__.fullWidthClassName, " {\n margin-right: 0 ").concat(important, ";\n }\n \n body[").concat(lockAttribute, "] {\n ").concat(_constants__WEBPACK_IMPORTED_MODULE_2__.removedBarSizeVariable, ": ").concat(gap, "px;\n }\n"); }; var getCurrentUseCounter = function () { var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10); return isFinite(counter) ? counter : 0; }; var useLockAttribute = function () { react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () { document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString()); return function () { var newCounter = getCurrentUseCounter() - 1; if (newCounter <= 0) { document.body.removeAttribute(lockAttribute); } else { document.body.setAttribute(lockAttribute, newCounter.toString()); } }; }, []); }; /** * Removes page scrollbar and blocks page scroll when mounted */ var RemoveScrollBar = function (_a) { var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b; useLockAttribute(); /* gap will be measured on every component mount however it will be used only by the "first" invocation due to singleton nature of <Style */ var gap = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function () { return (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getGapWidth)(gapMode); }, [gapMode]); return react__WEBPACK_IMPORTED_MODULE_0__.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') }); }; /***/ }, /***/ "./node_modules/react-remove-scroll-bar/dist/es2015/constants.js" /*!***********************************************************************!*\ !*** ./node_modules/react-remove-scroll-bar/dist/es2015/constants.js ***! \***********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ fullWidthClassName: () => (/* binding */ fullWidthClassName), /* harmony export */ noScrollbarsClassName: () => (/* binding */ noScrollbarsClassName), /* harmony export */ removedBarSizeVariable: () => (/* binding */ removedBarSizeVariable), /* harmony export */ zeroRightClassName: () => (/* binding */ zeroRightClassName) /* harmony export */ }); var zeroRightClassName = 'right-scroll-bar-position'; var fullWidthClassName = 'width-before-scroll-bar'; var noScrollbarsClassName = 'with-scroll-bars-hidden'; /** * Name of a CSS variable containing the amount of "hidden" scrollbar * ! might be undefined ! use will fallback! */ var removedBarSizeVariable = '--removed-body-scroll-bar-size'; /***/ }, /***/ "./node_modules/react-remove-scroll-bar/dist/es2015/index.js" /*!*******************************************************************!*\ !*** ./node_modules/react-remove-scroll-bar/dist/es2015/index.js ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ RemoveScrollBar: () => (/* reexport safe */ _component__WEBPACK_IMPORTED_MODULE_0__.RemoveScrollBar), /* harmony export */ fullWidthClassName: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_1__.fullWidthClassName), /* harmony export */ getGapWidth: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_2__.getGapWidth), /* harmony export */ noScrollbarsClassName: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_1__.noScrollbarsClassName), /* harmony export */ removedBarSizeVariable: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_1__.removedBarSizeVariable), /* harmony export */ zeroRightClassName: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_1__.zeroRightClassName) /* harmony export */ }); /* harmony import */ var _component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./component */ "./node_modules/react-remove-scroll-bar/dist/es2015/component.js"); /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./node_modules/react-remove-scroll-bar/dist/es2015/constants.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ "./node_modules/react-remove-scroll-bar/dist/es2015/utils.js"); /***/ }, /***/ "./node_modules/react-remove-scroll-bar/dist/es2015/utils.js" /*!*******************************************************************!*\ !*** ./node_modules/react-remove-scroll-bar/dist/es2015/utils.js ***! \*******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getGapWidth: () => (/* binding */ getGapWidth), /* harmony export */ zeroGap: () => (/* binding */ zeroGap) /* harmony export */ }); var zeroGap = { left: 0, top: 0, right: 0, gap: 0, }; var parse = function (x) { return parseInt(x || '', 10) || 0; }; var getOffset = function (gapMode) { var cs = window.getComputedStyle(document.body); var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft']; var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop']; var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight']; return [parse(left), parse(top), parse(right)]; }; var getGapWidth = function (gapMode) { if (gapMode === void 0) { gapMode = 'margin'; } if (typeof window === 'undefined') { return zeroGap; } var offsets = getOffset(gapMode); var documentWidth = document.documentElement.clientWidth; var windowWidth = window.innerWidth; return { left: offsets[0], top: offsets[1], right: offsets[2], gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]), }; }; /***/ }, /***/ "./node_modules/react-remove-scroll/dist/es2015/Combination.js" /*!*********************************************************************!*\ !*** ./node_modules/react-remove-scroll/dist/es2015/Combination.js ***! \*********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _UI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UI */ "./node_modules/react-remove-scroll/dist/es2015/UI.js"); /* harmony import */ var _sidecar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sidecar */ "./node_modules/react-remove-scroll/dist/es2015/sidecar.js"); var ReactRemoveScroll = react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(function (props, ref) { return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_UI__WEBPACK_IMPORTED_MODULE_2__.RemoveScroll, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, props, { ref: ref, sideCar: _sidecar__WEBPACK_IMPORTED_MODULE_3__["default"] }))); }); ReactRemoveScroll.classNames = _UI__WEBPACK_IMPORTED_MODULE_2__.RemoveScroll.classNames; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ReactRemoveScroll); /***/ }, /***/ "./node_modules/react-remove-scroll/dist/es2015/SideEffect.js" /*!********************************************************************!*\ !*** ./node_modules/react-remove-scroll/dist/es2015/SideEffect.js ***! \********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ RemoveScrollSideCar: () => (/* binding */ RemoveScrollSideCar), /* harmony export */ getDeltaXY: () => (/* binding */ getDeltaXY), /* harmony export */ getTouchXY: () => (/* binding */ getTouchXY) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_remove_scroll_bar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-remove-scroll-bar */ "./node_modules/react-remove-scroll-bar/dist/es2015/index.js"); /* harmony import */ var react_style_singleton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-style-singleton */ "./node_modules/react-style-singleton/dist/es2015/index.js"); /* harmony import */ var _aggresiveCapture__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./aggresiveCapture */ "./node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js"); /* harmony import */ var _handleScroll__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./handleScroll */ "./node_modules/react-remove-scroll/dist/es2015/handleScroll.js"); var getTouchXY = function (event) { return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0]; }; var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; }; var extractRef = function (ref) { return ref && 'current' in ref ? ref.current : ref; }; var deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; }; var generateStyle = function (id) { return "\n .block-interactivity-".concat(id, " {pointer-events: none;}\n .allow-interactivity-").concat(id, " {pointer-events: all;}\n"); }; var idCounter = 0; var lockStack = []; function RemoveScrollSideCar(props) { var shouldPreventQueue = react__WEBPACK_IMPORTED_MODULE_1__.useRef([]); var touchStartRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef([0, 0]); var activeAxis = react__WEBPACK_IMPORTED_MODULE_1__.useRef(); var id = react__WEBPACK_IMPORTED_MODULE_1__.useState(idCounter++)[0]; var Style = react__WEBPACK_IMPORTED_MODULE_1__.useState(react_style_singleton__WEBPACK_IMPORTED_MODULE_3__.styleSingleton)[0]; var lastProps = react__WEBPACK_IMPORTED_MODULE_1__.useRef(props); react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { lastProps.current = props; }, [props]); react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { if (props.inert) { document.body.classList.add("block-interactivity-".concat(id)); var allow_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__spreadArray)([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean); allow_1.forEach(function (el) { return el.classList.add("allow-interactivity-".concat(id)); }); return function () { document.body.classList.remove("block-interactivity-".concat(id)); allow_1.forEach(function (el) { return el.classList.remove("allow-interactivity-".concat(id)); }); }; } return; }, [props.inert, props.lockRef.current, props.shards]); var shouldCancelEvent = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (event, parent) { if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) { return !lastProps.current.allowPinchZoom; } var touch = getTouchXY(event); var touchStart = touchStartRef.current; var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0]; var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1]; var currentAxis; var target = event.target; var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v'; // allow horizontal touch move on Range inputs. They will not cause any scroll if ('touches' in event && moveDirection === 'h' && target.type === 'range') { return false; } // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target var selection = window.getSelection(); var anchorNode = selection && selection.anchorNode; var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false; if (isTouchingSelection) { return false; } var canBeScrolledInMainDirection = (0,_handleScroll__WEBPACK_IMPORTED_MODULE_5__.locationCouldBeScrolled)(moveDirection, target); if (!canBeScrolledInMainDirection) { return true; } if (canBeScrolledInMainDirection) { currentAxis = moveDirection; } else { currentAxis = moveDirection === 'v' ? 'h' : 'v'; canBeScrolledInMainDirection = (0,_handleScroll__WEBPACK_IMPORTED_MODULE_5__.locationCouldBeScrolled)(moveDirection, target); // other axis might be not scrollable } if (!canBeScrolledInMainDirection) { return false; } if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) { activeAxis.current = currentAxis; } if (!currentAxis) { return true; } var cancelingAxis = activeAxis.current || currentAxis; return (0,_handleScroll__WEBPACK_IMPORTED_MODULE_5__.handleScroll)(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true); }, []); var shouldPrevent = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (_event) { var event = _event; if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) { // not the last active return; } var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event); var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0]; // self event, and should be canceled if (sourceEvent && sourceEvent.should) { if (event.cancelable) { event.preventDefault(); } return; } // outside or shard event if (!sourceEvent) { var shardNodes = (lastProps.current.shards || []) .map(extractRef) .filter(Boolean) .filter(function (node) { return node.contains(event.target); }); var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation; if (shouldStop) { if (event.cancelable) { event.preventDefault(); } } } }, []); var shouldCancel = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (name, delta, target, should) { var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) }; shouldPreventQueue.current.push(event); setTimeout(function () { shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; }); }, 1); }, []); var scrollTouchStart = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (event) { touchStartRef.current = getTouchXY(event); activeAxis.current = undefined; }, []); var scrollWheel = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (event) { shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); }, []); var scrollTouchMove = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (event) { shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); }, []); react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { lockStack.push(Style); props.setCallbacks({ onScrollCapture: scrollWheel, onWheelCapture: scrollWheel, onTouchMoveCapture: scrollTouchMove, }); document.addEventListener('wheel', shouldPrevent, _aggresiveCapture__WEBPACK_IMPORTED_MODULE_4__.nonPassive); document.addEventListener('touchmove', shouldPrevent, _aggresiveCapture__WEBPACK_IMPORTED_MODULE_4__.nonPassive); document.addEventListener('touchstart', scrollTouchStart, _aggresiveCapture__WEBPACK_IMPORTED_MODULE_4__.nonPassive); return function () { lockStack = lockStack.filter(function (inst) { return inst !== Style; }); document.removeEventListener('wheel', shouldPrevent, _aggresiveCapture__WEBPACK_IMPORTED_MODULE_4__.nonPassive); document.removeEventListener('touchmove', shouldPrevent, _aggresiveCapture__WEBPACK_IMPORTED_MODULE_4__.nonPassive); document.removeEventListener('touchstart', scrollTouchStart, _aggresiveCapture__WEBPACK_IMPORTED_MODULE_4__.nonPassive); }; }, []); var removeScrollBar = props.removeScrollBar, inert = props.inert; return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, inert ? react__WEBPACK_IMPORTED_MODULE_1__.createElement(Style, { styles: generateStyle(id) }) : null, removeScrollBar ? react__WEBPACK_IMPORTED_MODULE_1__.createElement(react_remove_scroll_bar__WEBPACK_IMPORTED_MODULE_2__.RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null)); } function getOutermostShadowParent(node) { var shadowParent = null; while (node !== null) { if (node instanceof ShadowRoot) { shadowParent = node.host; node = node.host; } node = node.parentNode; } return shadowParent; } /***/ }, /***/ "./node_modules/react-remove-scroll/dist/es2015/UI.js" /*!************************************************************!*\ !*** ./node_modules/react-remove-scroll/dist/es2015/UI.js ***! \************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ RemoveScroll: () => (/* binding */ RemoveScroll) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_remove_scroll_bar_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-remove-scroll-bar/constants */ "./node_modules/react-remove-scroll-bar/dist/es2015/constants.js"); /* harmony import */ var use_callback_ref__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! use-callback-ref */ "./node_modules/use-callback-ref/dist/es2015/useMergeRef.js"); /* harmony import */ var _medium__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./medium */ "./node_modules/react-remove-scroll/dist/es2015/medium.js"); var nothing = function () { return; }; /** * Removes scrollbar from the page and contain the scroll within the Lock */ var RemoveScroll = react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(function (props, parentRef) { var ref = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null); var _a = react__WEBPACK_IMPORTED_MODULE_1__.useState({ onScrollCapture: nothing, onWheelCapture: nothing, onTouchMoveCapture: nothing, }), callbacks = _a[0], setCallbacks = _a[1]; var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__rest)(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noRelative", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]); var SideCar = sideCar; var containerRef = (0,use_callback_ref__WEBPACK_IMPORTED_MODULE_3__.useMergeRefs)([ref, parentRef]); var containerProps = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, rest), callbacks); return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, enabled && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(SideCar, { sideCar: _medium__WEBPACK_IMPORTED_MODULE_4__.effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })), forwardProps ? (react__WEBPACK_IMPORTED_MODULE_1__.cloneElement(react__WEBPACK_IMPORTED_MODULE_1__.Children.only(children), (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, containerProps), { ref: containerRef }))) : (react__WEBPACK_IMPORTED_MODULE_1__.createElement(Container, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, containerProps, { className: className, ref: containerRef }), children)))); }); RemoveScroll.defaultProps = { enabled: true, removeScrollBar: true, inert: false, }; RemoveScroll.classNames = { fullWidth: react_remove_scroll_bar_constants__WEBPACK_IMPORTED_MODULE_2__.fullWidthClassName, zeroRight: react_remove_scroll_bar_constants__WEBPACK_IMPORTED_MODULE_2__.zeroRightClassName, }; /***/ }, /***/ "./node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js" /*!**************************************************************************!*\ !*** ./node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js ***! \**************************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ nonPassive: () => (/* binding */ nonPassive) /* harmony export */ }); var passiveSupported = false; if (typeof window !== 'undefined') { try { var options = Object.defineProperty({}, 'passive', { get: function () { passiveSupported = true; return true; }, }); // @ts-ignore window.addEventListener('test', options, options); // @ts-ignore window.removeEventListener('test', options, options); } catch (err) { passiveSupported = false; } } var nonPassive = passiveSupported ? { passive: false } : false; /***/ }, /***/ "./node_modules/react-remove-scroll/dist/es2015/handleScroll.js" /*!**********************************************************************!*\ !*** ./node_modules/react-remove-scroll/dist/es2015/handleScroll.js ***! \**********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ handleScroll: () => (/* binding */ handleScroll), /* harmony export */ locationCouldBeScrolled: () => (/* binding */ locationCouldBeScrolled) /* harmony export */ }); var alwaysContainsScroll = function (node) { // textarea will always _contain_ scroll inside self. It only can be hidden return node.tagName === 'TEXTAREA'; }; var elementCanBeScrolled = function (node, overflow) { if (!(node instanceof Element)) { return false; } var styles = window.getComputedStyle(node); return ( // not-not-scrollable styles[overflow] !== 'hidden' && // contains scroll inside self !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible')); }; var elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); }; var elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); }; var locationCouldBeScrolled = function (axis, node) { var ownerDocument = node.ownerDocument; var current = node; do { // Skip over shadow root if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) { current = current.host; } var isScrollable = elementCouldBeScrolled(axis, current); if (isScrollable) { var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2]; if (scrollHeight > clientHeight) { return true; } } current = current.parentNode; } while (current && current !== ownerDocument.body); return false; }; var getVScrollVariables = function (_a) { var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight; return [ scrollTop, scrollHeight, clientHeight, ]; }; var getHScrollVariables = function (_a) { var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth; return [ scrollLeft, scrollWidth, clientWidth, ]; }; var elementCouldBeScrolled = function (axis, node) { return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node); }; var getScrollVariables = function (axis, node) { return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node); }; var getDirectionFactor = function (axis, direction) { /** * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position, * and then increasingly negative as you scroll towards the end of the content. * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft */ return axis === 'h' && direction === 'rtl' ? -1 : 1; }; var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) { var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction); var delta = directionFactor * sourceDelta; // find scrollable target var target = event.target; var targetInLock = endTarget.contains(target); var shouldCancelScroll = false; var isDeltaPositive = delta > 0; var availableScroll = 0; var availableScrollTop = 0; do { if (!target) { break; } var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2]; var elementScroll = scroll_1 - capacity - directionFactor * position; if (position || elementScroll) { if (elementCouldBeScrolled(axis, target)) { availableScroll += elementScroll; availableScrollTop += position; } } var parent_1 = target.parentNode; // we will "bubble" from ShadowDom in case we are, or just to the parent in normal case // this is the same logic used in focus-lock target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1); } while ( // portaled content (!targetInLock && target !== document.body) || // self content (targetInLock && (endTarget.contains(target) || endTarget === target))); // handle epsilon around 0 (non standard zoom levels) if (isDeltaPositive && ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) { shouldCancelScroll = true; } else if (!isDeltaPositive && ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) { shouldCancelScroll = true; } return shouldCancelScroll; }; /***/ }, /***/ "./node_modules/react-remove-scroll/dist/es2015/medium.js" /*!****************************************************************!*\ !*** ./node_modules/react-remove-scroll/dist/es2015/medium.js ***! \****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ effectCar: () => (/* binding */ effectCar) /* harmony export */ }); /* harmony import */ var use_sidecar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! use-sidecar */ "./node_modules/use-sidecar/dist/es2015/medium.js"); var effectCar = (0,use_sidecar__WEBPACK_IMPORTED_MODULE_0__.createSidecarMedium)(); /***/ }, /***/ "./node_modules/react-remove-scroll/dist/es2015/sidecar.js" /*!*****************************************************************!*\ !*** ./node_modules/react-remove-scroll/dist/es2015/sidecar.js ***! \*****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var use_sidecar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! use-sidecar */ "./node_modules/use-sidecar/dist/es2015/exports.js"); /* harmony import */ var _SideEffect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SideEffect */ "./node_modules/react-remove-scroll/dist/es2015/SideEffect.js"); /* harmony import */ var _medium__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./medium */ "./node_modules/react-remove-scroll/dist/es2015/medium.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,use_sidecar__WEBPACK_IMPORTED_MODULE_0__.exportSidecar)(_medium__WEBPACK_IMPORTED_MODULE_2__.effectCar, _SideEffect__WEBPACK_IMPORTED_MODULE_1__.RemoveScrollSideCar)); /***/ }, /***/ "./node_modules/react-style-singleton/dist/es2015/component.js" /*!*********************************************************************!*\ !*** ./node_modules/react-style-singleton/dist/es2015/component.js ***! \*********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ styleSingleton: () => (/* binding */ styleSingleton) /* harmony export */ }); /* harmony import */ var _hook__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hook */ "./node_modules/react-style-singleton/dist/es2015/hook.js"); /** * create a Component to add styles on demand * - styles are added when first instance is mounted * - styles are removed when the last instance is unmounted * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior */ var styleSingleton = function () { var useStyle = (0,_hook__WEBPACK_IMPORTED_MODULE_0__.styleHookSingleton)(); var Sheet = function (_a) { var styles = _a.styles, dynamic = _a.dynamic; useStyle(styles, dynamic); return null; }; return Sheet; }; /***/ }, /***/ "./node_modules/react-style-singleton/dist/es2015/hook.js" /*!****************************************************************!*\ !*** ./node_modules/react-style-singleton/dist/es2015/hook.js ***! \****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ styleHookSingleton: () => (/* binding */ styleHookSingleton) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _singleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./singleton */ "./node_modules/react-style-singleton/dist/es2015/singleton.js"); /** * creates a hook to control style singleton * @see {@link styleSingleton} for a safer component version * @example * ```tsx * const useStyle = styleHookSingleton(); * /// * useStyle('body { overflow: hidden}'); */ var styleHookSingleton = function () { var sheet = (0,_singleton__WEBPACK_IMPORTED_MODULE_1__.stylesheetSingleton)(); return function (styles, isDynamic) { react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () { sheet.add(styles); return function () { sheet.remove(); }; }, [styles && isDynamic]); }; }; /***/ }, /***/ "./node_modules/react-style-singleton/dist/es2015/index.js" /*!*****************************************************************!*\ !*** ./node_modules/react-style-singleton/dist/es2015/index.js ***! \*****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ styleHookSingleton: () => (/* reexport safe */ _hook__WEBPACK_IMPORTED_MODULE_2__.styleHookSingleton), /* harmony export */ styleSingleton: () => (/* reexport safe */ _component__WEBPACK_IMPORTED_MODULE_0__.styleSingleton), /* harmony export */ stylesheetSingleton: () => (/* reexport safe */ _singleton__WEBPACK_IMPORTED_MODULE_1__.stylesheetSingleton) /* harmony export */ }); /* harmony import */ var _component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./component */ "./node_modules/react-style-singleton/dist/es2015/component.js"); /* harmony import */ var _singleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./singleton */ "./node_modules/react-style-singleton/dist/es2015/singleton.js"); /* harmony import */ var _hook__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hook */ "./node_modules/react-style-singleton/dist/es2015/hook.js"); /***/ }, /***/ "./node_modules/react-style-singleton/dist/es2015/singleton.js" /*!*********************************************************************!*\ !*** ./node_modules/react-style-singleton/dist/es2015/singleton.js ***! \*********************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ stylesheetSingleton: () => (/* binding */ stylesheetSingleton) /* harmony export */ }); /* harmony import */ var get_nonce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! get-nonce */ "./node_modules/get-nonce/dist/es2015/index.js"); function makeStyleTag() { if (!document) return null; var tag = document.createElement('style'); tag.type = 'text/css'; var nonce = (0,get_nonce__WEBPACK_IMPORTED_MODULE_0__.getNonce)(); if (nonce) { tag.setAttribute('nonce', nonce); } return tag; } function injectStyles(tag, css) { // @ts-ignore if (tag.styleSheet) { // @ts-ignore tag.styleSheet.cssText = css; } else { tag.appendChild(document.createTextNode(css)); } } function insertStyleTag(tag) { var head = document.head || document.getElementsByTagName('head')[0]; head.appendChild(tag); } var stylesheetSingleton = function () { var counter = 0; var stylesheet = null; return { add: function (style) { if (counter == 0) { if ((stylesheet = makeStyleTag())) { injectStyles(stylesheet, style); insertStyleTag(stylesheet); } } counter++; }, remove: function () { counter--; if (!counter && stylesheet) { stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet); stylesheet = null; } }, }; }; /***/ }, /***/ "./node_modules/use-callback-ref/dist/es2015/assignRef.js" /*!****************************************************************!*\ !*** ./node_modules/use-callback-ref/dist/es2015/assignRef.js ***! \****************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ assignRef: () => (/* binding */ assignRef) /* harmony export */ }); /** * Assigns a value for a given ref, no matter of the ref format * @param {RefObject} ref - a callback function or ref object * @param value - a new value * * @see https://github.com/theKashey/use-callback-ref#assignref * @example * const refObject = useRef(); * const refFn = (ref) => {....} * * assignRef(refObject, "refValue"); * assignRef(refFn, "refValue"); */ function assignRef(ref, value) { if (typeof ref === 'function') { ref(value); } else if (ref) { ref.current = value; } return ref; } /***/ }, /***/ "./node_modules/use-callback-ref/dist/es2015/useMergeRef.js" /*!******************************************************************!*\ !*** ./node_modules/use-callback-ref/dist/es2015/useMergeRef.js ***! \******************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useMergeRefs: () => (/* binding */ useMergeRefs) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _assignRef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assignRef */ "./node_modules/use-callback-ref/dist/es2015/assignRef.js"); /* harmony import */ var _useRef__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useRef */ "./node_modules/use-callback-ref/dist/es2015/useRef.js"); var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect; var currentValues = new WeakMap(); /** * Merges two or more refs together providing a single interface to set their value * @param {RefObject|Ref} refs * @returns {MutableRefObject} - a new ref, which translates all changes to {refs} * * @see {@link mergeRefs} a version without buit-in memoization * @see https://github.com/theKashey/use-callback-ref#usemergerefs * @example * const Component = React.forwardRef((props, ref) => { * const ownRef = useRef(); * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together * return <div ref={domRef}>...</div> * } */ function useMergeRefs(refs, defaultValue) { var callbackRef = (0,_useRef__WEBPACK_IMPORTED_MODULE_2__.useCallbackRef)(defaultValue || null, function (newValue) { return refs.forEach(function (ref) { return (0,_assignRef__WEBPACK_IMPORTED_MODULE_1__.assignRef)(ref, newValue); }); }); // handle refs changes - added or removed useIsomorphicLayoutEffect(function () { var oldValue = currentValues.get(callbackRef); if (oldValue) { var prevRefs_1 = new Set(oldValue); var nextRefs_1 = new Set(refs); var current_1 = callbackRef.current; prevRefs_1.forEach(function (ref) { if (!nextRefs_1.has(ref)) { (0,_assignRef__WEBPACK_IMPORTED_MODULE_1__.assignRef)(ref, null); } }); nextRefs_1.forEach(function (ref) { if (!prevRefs_1.has(ref)) { (0,_assignRef__WEBPACK_IMPORTED_MODULE_1__.assignRef)(ref, current_1); } }); } currentValues.set(callbackRef, refs); }, [refs]); return callbackRef; } /***/ }, /***/ "./node_modules/use-callback-ref/dist/es2015/useRef.js" /*!*************************************************************!*\ !*** ./node_modules/use-callback-ref/dist/es2015/useRef.js ***! \*************************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useCallbackRef: () => (/* binding */ useCallbackRef) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /** * creates a MutableRef with ref change callback * @param initialValue - initial ref value * @param {Function} callback - a callback to run when value changes * * @example * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue); * ref.current = 1; * // prints 0 -> 1 * * @see https://reactjs.org/docs/hooks-reference.html#useref * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref * @returns {MutableRefObject} */ function useCallbackRef(initialValue, callback) { var ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () { return ({ // value value: initialValue, // last callback callback: callback, // "memoized" public interface facade: { get current() { return ref.value; }, set current(value) { var last = ref.value; if (last !== value) { ref.value = value; ref.callback(value, last); } }, }, }); })[0]; // update callback ref.callback = callback; return ref.facade; } /***/ }, /***/ "./node_modules/use-sidecar/dist/es2015/exports.js" /*!*********************************************************!*\ !*** ./node_modules/use-sidecar/dist/es2015/exports.js ***! \*********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ exportSidecar: () => (/* binding */ exportSidecar) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); var SideCar = function (_a) { var sideCar = _a.sideCar, rest = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__rest)(_a, ["sideCar"]); if (!sideCar) { throw new Error('Sidecar: please provide `sideCar` property to import the right car'); } var Target = sideCar.read(); if (!Target) { throw new Error('Sidecar medium not found'); } return react__WEBPACK_IMPORTED_MODULE_1__.createElement(Target, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, rest)); }; SideCar.isSideCarExport = true; function exportSidecar(medium, exported) { medium.useMedium(exported); return SideCar; } /***/ }, /***/ "./node_modules/use-sidecar/dist/es2015/medium.js" /*!********************************************************!*\ !*** ./node_modules/use-sidecar/dist/es2015/medium.js ***! \********************************************************/ (__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createMedium: () => (/* binding */ createMedium), /* harmony export */ createSidecarMedium: () => (/* binding */ createSidecarMedium) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); function ItoI(a) { return a; } function innerCreateMedium(defaults, middleware) { if (middleware === void 0) { middleware = ItoI; } var buffer = []; var assigned = false; var medium = { read: function () { if (assigned) { throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.'); } if (buffer.length) { return buffer[buffer.length - 1]; } return defaults; }, useMedium: function (data) { var item = middleware(data, assigned); buffer.push(item); return function () { buffer = buffer.filter(function (x) { return x !== item; }); }; }, assignSyncMedium: function (cb) { assigned = true; while (buffer.length) { var cbs = buffer; buffer = []; cbs.forEach(cb); } buffer = { push: function (x) { return cb(x); }, filter: function () { return buffer; }, }; }, assignMedium: function (cb) { assigned = true; var pendingQueue = []; if (buffer.length) { var cbs = buffer; buffer = []; cbs.forEach(cb); pendingQueue = buffer; } var executeQueue = function () { var cbs = pendingQueue; pendingQueue = []; cbs.forEach(cb); }; var cycle = function () { return Promise.resolve().then(executeQueue); }; cycle(); buffer = { push: function (x) { pendingQueue.push(x); cycle(); }, filter: function (filter) { pendingQueue = pendingQueue.filter(filter); return buffer; }, }; }, }; return medium; } function createMedium(defaults, middleware) { if (middleware === void 0) { middleware = ItoI; } return innerCreateMedium(defaults, middleware); } // eslint-disable-next-line @typescript-eslint/ban-types function createSidecarMedium(options) { if (options === void 0) { options = {}; } var medium = innerCreateMedium(null); medium.options = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({ async: true, ssr: false }, options); return medium; } /***/ }, /***/ "react" /*!************************!*\ !*** external "React" ***! \************************/ (module) { module.exports = window["React"]; /***/ }, /***/ "react-dom" /*!***************************!*\ !*** external "ReactDOM" ***! \***************************/ (module) { module.exports = window["ReactDOM"]; /***/ }, /***/ "react/jsx-runtime" /*!**********************************!*\ !*** external "ReactJSXRuntime" ***! \**********************************/ (module) { module.exports = window["ReactJSXRuntime"]; /***/ }, /***/ "@wordpress/api-fetch" /*!**********************************!*\ !*** external ["wp","apiFetch"] ***! \**********************************/ (module) { module.exports = window["wp"]["apiFetch"]; /***/ }, /***/ "@wordpress/components" /*!************************************!*\ !*** external ["wp","components"] ***! \************************************/ (module) { module.exports = window["wp"]["components"]; /***/ }, /***/ "@wordpress/data" /*!******************************!*\ !*** external ["wp","data"] ***! \******************************/ (module) { module.exports = window["wp"]["data"]; /***/ }, /***/ "@wordpress/element" /*!*********************************!*\ !*** external ["wp","element"] ***! \*********************************/ (module) { module.exports = window["wp"]["element"]; /***/ }, /***/ "@wordpress/i18n" /*!******************************!*\ !*** external ["wp","i18n"] ***! \******************************/ (module) { module.exports = window["wp"]["i18n"]; /***/ }, /***/ "./node_modules/@floating-ui/core/dist/floating-ui.core.mjs" /*!******************************************************************!*\ !*** ./node_modules/@floating-ui/core/dist/floating-ui.core.mjs ***! \******************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ arrow: () => (/* binding */ arrow), /* harmony export */ autoPlacement: () => (/* binding */ autoPlacement), /* harmony export */ computePosition: () => (/* binding */ computePosition), /* harmony export */ detectOverflow: () => (/* binding */ detectOverflow), /* harmony export */ flip: () => (/* binding */ flip), /* harmony export */ hide: () => (/* binding */ hide), /* harmony export */ inline: () => (/* binding */ inline), /* harmony export */ limitShift: () => (/* binding */ limitShift), /* harmony export */ offset: () => (/* binding */ offset), /* harmony export */ rectToClientRect: () => (/* reexport safe */ _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect), /* harmony export */ shift: () => (/* binding */ shift), /* harmony export */ size: () => (/* binding */ size) /* harmony export */ }); /* harmony import */ var _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/utils */ "./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"); function computeCoordsFromPlacement(_ref, placement, rtl) { let { reference, floating } = _ref; const sideAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement); const alignmentAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentAxis)(placement); const alignLength = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAxisLength)(alignmentAxis); const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement); const isVertical = sideAxis === 'y'; const commonX = reference.x + reference.width / 2 - floating.width / 2; const commonY = reference.y + reference.height / 2 - floating.height / 2; const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; let coords; switch (side) { case 'top': coords = { x: commonX, y: reference.y - floating.height }; break; case 'bottom': coords = { x: commonX, y: reference.y + reference.height }; break; case 'right': coords = { x: reference.x + reference.width, y: commonY }; break; case 'left': coords = { x: reference.x - floating.width, y: commonY }; break; default: coords = { x: reference.x, y: reference.y }; } switch ((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement)) { case 'start': coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); break; case 'end': coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1); break; } return coords; } /** * Resolves with an object of overflow side offsets that determine how much the * element is overflowing a given clipping boundary on each side. * - positive = overflowing the boundary by that number of pixels * - negative = how many pixels left before it will overflow * - 0 = lies flush with the boundary * @see https://floating-ui.com/docs/detectOverflow */ async function detectOverflow(state, options) { var _await$platform$isEle; if (options === void 0) { options = {}; } const { x, y, platform, rects, elements, strategy } = state; const { boundary = 'clippingAncestors', rootBoundary = 'viewport', elementContext = 'floating', altBoundary = false, padding = 0 } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); const paddingObject = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getPaddingObject)(padding); const altContext = elementContext === 'floating' ? 'reference' : 'floating'; const element = elements[altBoundary ? altContext : elementContext]; const clippingClientRect = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(await platform.getClippingRect({ element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))), boundary, rootBoundary, strategy })); const rect = elementContext === 'floating' ? { x, y, width: rects.floating.width, height: rects.floating.height } : rects.reference; const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)); const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || { x: 1, y: 1 } : { x: 1, y: 1 }; const elementClientRect = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({ elements, rect, offsetParent, strategy }) : rect); return { top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x }; } /** * Computes the `x` and `y` coordinates that will place the floating element * next to a given reference element. * * This export does not have any `platform` interface logic. You will need to * write one for the platform you are using Floating UI with. */ const computePosition = async (reference, floating, config) => { const { placement = 'bottom', strategy = 'absolute', middleware = [], platform } = config; const validMiddleware = middleware.filter(Boolean); const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating)); let rects = await platform.getElementRects({ reference, floating, strategy }); let { x, y } = computeCoordsFromPlacement(rects, placement, rtl); let statefulPlacement = placement; let middlewareData = {}; let resetCount = 0; for (let i = 0; i < validMiddleware.length; i++) { var _platform$detectOverf; const { name, fn } = validMiddleware[i]; const { x: nextX, y: nextY, data, reset } = await fn({ x, y, initialPlacement: placement, placement: statefulPlacement, strategy, middlewareData, rects, platform: { ...platform, detectOverflow: (_platform$detectOverf = platform.detectOverflow) != null ? _platform$detectOverf : detectOverflow }, elements: { reference, floating } }); x = nextX != null ? nextX : x; y = nextY != null ? nextY : y; middlewareData = { ...middlewareData, [name]: { ...middlewareData[name], ...data } }; if (reset && resetCount <= 50) { resetCount++; if (typeof reset === 'object') { if (reset.placement) { statefulPlacement = reset.placement; } if (reset.rects) { rects = reset.rects === true ? await platform.getElementRects({ reference, floating, strategy }) : reset.rects; } ({ x, y } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); } i = -1; } } return { x, y, placement: statefulPlacement, strategy, middlewareData }; }; /** * Provides data to position an inner element of the floating element so that it * appears centered to the reference element. * @see https://floating-ui.com/docs/arrow */ const arrow = options => ({ name: 'arrow', options, async fn(state) { const { x, y, placement, rects, platform, elements, middlewareData } = state; // Since `element` is required, we don't Partial<> the type. const { element, padding = 0 } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state) || {}; if (element == null) { return {}; } const paddingObject = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getPaddingObject)(padding); const coords = { x, y }; const axis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentAxis)(placement); const length = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAxisLength)(axis); const arrowDimensions = await platform.getDimensions(element); const isYAxis = axis === 'y'; const minProp = isYAxis ? 'top' : 'left'; const maxProp = isYAxis ? 'bottom' : 'right'; const clientProp = isYAxis ? 'clientHeight' : 'clientWidth'; const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; const startDiff = coords[axis] - rects.reference[axis]; const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element)); let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0; // DOM platform can return `window` as the `offsetParent`. if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) { clientSize = elements.floating[clientProp] || rects.floating[length]; } const centerToReference = endDiff / 2 - startDiff / 2; // If the padding is large enough that it causes the arrow to no longer be // centered, modify the padding so that it is centered. const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; const minPadding = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(paddingObject[minProp], largestPossiblePadding); const maxPadding = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(paddingObject[maxProp], largestPossiblePadding); // Make sure the arrow doesn't overflow the floating element if the center // point is outside the floating element's bounds. const min$1 = minPadding; const max = clientSize - arrowDimensions[length] - maxPadding; const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; const offset = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.clamp)(min$1, center, max); // If the reference is small enough that the arrow's padding causes it to // to point to nothing for an aligned placement, adjust the offset of the // floating element itself. To ensure `shift()` continues to take action, // a single reset is performed when this is true. const shouldAddOffset = !middlewareData.arrow && (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0; return { [axis]: coords[axis] + alignmentOffset, data: { [axis]: offset, centerOffset: center - offset - alignmentOffset, ...(shouldAddOffset && { alignmentOffset }) }, reset: shouldAddOffset }; } }); function getPlacementList(alignment, autoAlignment, allowedPlacements) { const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) === alignment), ...allowedPlacements.filter(placement => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) !== alignment)] : allowedPlacements.filter(placement => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement) === placement); return allowedPlacementsSortedByAlignment.filter(placement => { if (alignment) { return (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) === alignment || (autoAlignment ? (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAlignmentPlacement)(placement) !== placement : false); } return true; }); } /** * Optimizes the visibility of the floating element by choosing the placement * that has the most space available automatically, without needing to specify a * preferred placement. Alternative to `flip`. * @see https://floating-ui.com/docs/autoPlacement */ const autoPlacement = function (options) { if (options === void 0) { options = {}; } return { name: 'autoPlacement', options, async fn(state) { var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE; const { rects, middlewareData, placement, platform, elements } = state; const { crossAxis = false, alignment, allowedPlacements = _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.placements, autoAlignment = true, ...detectOverflowOptions } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); const placements$1 = alignment !== undefined || allowedPlacements === _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements; const overflow = await platform.detectOverflow(state, detectOverflowOptions); const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0; const currentPlacement = placements$1[currentIndex]; if (currentPlacement == null) { return {}; } const alignmentSides = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentSides)(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))); // Make `computeCoords` start from the right place. if (placement !== currentPlacement) { return { reset: { placement: placements$1[0] } }; } const currentOverflows = [overflow[(0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]]; const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), { placement: currentPlacement, overflows: currentOverflows }]; const nextPlacement = placements$1[currentIndex + 1]; // There are more placements to check. if (nextPlacement) { return { data: { index: currentIndex + 1, overflows: allOverflows }, reset: { placement: nextPlacement } }; } const placementsSortedByMostSpace = allOverflows.map(d => { const alignment = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(d.placement); return [d.placement, alignment && crossAxis ? // Check along the mainAxis and main crossAxis side. d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) : // Check only the mainAxis. d.overflows[0], d.overflows]; }).sort((a, b) => a[1] - b[1]); const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0, // Aligned placements should not check their opposite crossAxis // side. (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(d[0]) ? 2 : 3).every(v => v <= 0)); const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0]; if (resetPlacement !== placement) { return { data: { index: currentIndex + 1, overflows: allOverflows }, reset: { placement: resetPlacement } }; } return {}; } }; }; /** * Optimizes the visibility of the floating element by flipping the `placement` * in order to keep it in view when the preferred placement(s) will overflow the * clipping boundary. Alternative to `autoPlacement`. * @see https://floating-ui.com/docs/flip */ const flip = function (options) { if (options === void 0) { options = {}; } return { name: 'flip', options, async fn(state) { var _middlewareData$arrow, _middlewareData$flip; const { placement, middlewareData, rects, initialPlacement, platform, elements } = state; const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = 'bestFit', fallbackAxisSideDirection = 'none', flipAlignment = true, ...detectOverflowOptions } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); // If a reset by the arrow was caused due to an alignment offset being // added, we should skip any logic now since `flip()` has already done its // work. // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { return {}; } const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement); const initialSideAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(initialPlacement); const isBasePlacement = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(initialPlacement) === initialPlacement; const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)); const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [(0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositePlacement)(initialPlacement)] : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getExpandedPlacements)(initialPlacement)); const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none'; if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { fallbackPlacements.push(...(0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAxisPlacements)(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); } const placements = [initialPlacement, ...fallbackPlacements]; const overflow = await platform.detectOverflow(state, detectOverflowOptions); const overflows = []; let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; if (checkMainAxis) { overflows.push(overflow[side]); } if (checkCrossAxis) { const sides = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentSides)(placement, rects, rtl); overflows.push(overflow[sides[0]], overflow[sides[1]]); } overflowsData = [...overflowsData, { placement, overflows }]; // One or more sides is overflowing. if (!overflows.every(side => side <= 0)) { var _middlewareData$flip2, _overflowsData$filter; const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; const nextPlacement = placements[nextIndex]; if (nextPlacement) { const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(nextPlacement) : false; if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis // overflows the main axis. overflowsData.every(d => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) { // Try next placement and re-run the lifecycle. return { data: { index: nextIndex, overflows: overflowsData }, reset: { placement: nextPlacement } }; } } // First, find the candidates that fit on the mainAxis side of overflow, // then find the placement that fits the best on the main crossAxis side. let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; // Otherwise fallback. if (!resetPlacement) { switch (fallbackStrategy) { case 'bestFit': { var _overflowsData$filter2; const placement = (_overflowsData$filter2 = overflowsData.filter(d => { if (hasFallbackAxisSideDirection) { const currentSideAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(d.placement); return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal // reading directions favoring greater width. currentSideAxis === 'y'; } return true; }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0]; if (placement) { resetPlacement = placement; } break; } case 'initialPlacement': resetPlacement = initialPlacement; break; } } if (placement !== resetPlacement) { return { reset: { placement: resetPlacement } }; } } return {}; } }; }; function getSideOffsets(overflow, rect) { return { top: overflow.top - rect.height, right: overflow.right - rect.width, bottom: overflow.bottom - rect.height, left: overflow.left - rect.width }; } function isAnySideFullyClipped(overflow) { return _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.sides.some(side => overflow[side] >= 0); } /** * Provides data to hide the floating element in applicable situations, such as * when it is not in the same clipping context as the reference element. * @see https://floating-ui.com/docs/hide */ const hide = function (options) { if (options === void 0) { options = {}; } return { name: 'hide', options, async fn(state) { const { rects, platform } = state; const { strategy = 'referenceHidden', ...detectOverflowOptions } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); switch (strategy) { case 'referenceHidden': { const overflow = await platform.detectOverflow(state, { ...detectOverflowOptions, elementContext: 'reference' }); const offsets = getSideOffsets(overflow, rects.reference); return { data: { referenceHiddenOffsets: offsets, referenceHidden: isAnySideFullyClipped(offsets) } }; } case 'escaped': { const overflow = await platform.detectOverflow(state, { ...detectOverflowOptions, altBoundary: true }); const offsets = getSideOffsets(overflow, rects.floating); return { data: { escapedOffsets: offsets, escaped: isAnySideFullyClipped(offsets) } }; } default: { return {}; } } } }; }; function getBoundingRect(rects) { const minX = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(...rects.map(rect => rect.left)); const minY = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(...rects.map(rect => rect.top)); const maxX = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(...rects.map(rect => rect.right)); const maxY = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(...rects.map(rect => rect.bottom)); return { x: minX, y: minY, width: maxX - minX, height: maxY - minY }; } function getRectsByLine(rects) { const sortedRects = rects.slice().sort((a, b) => a.y - b.y); const groups = []; let prevRect = null; for (let i = 0; i < sortedRects.length; i++) { const rect = sortedRects[i]; if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) { groups.push([rect]); } else { groups[groups.length - 1].push(rect); } prevRect = rect; } return groups.map(rect => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(getBoundingRect(rect))); } /** * Provides improved positioning for inline reference elements that can span * over multiple lines, such as hyperlinks or range selections. * @see https://floating-ui.com/docs/inline */ const inline = function (options) { if (options === void 0) { options = {}; } return { name: 'inline', options, async fn(state) { const { placement, elements, rects, platform, strategy } = state; // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a // ClientRect's bounds, despite the event listener being triggered. A // padding of 2 seems to handle this issue. const { padding = 2, x, y } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []); const clientRects = getRectsByLine(nativeClientRects); const fallback = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(getBoundingRect(nativeClientRects)); const paddingObject = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getPaddingObject)(padding); function getBoundingClientRect() { // There are two rects and they are disjoined. if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) { // Find the first rect in which the point is fully inside. return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback; } // There are 2 or more connected rects. if (clientRects.length >= 2) { if ((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement) === 'y') { const firstRect = clientRects[0]; const lastRect = clientRects[clientRects.length - 1]; const isTop = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement) === 'top'; const top = firstRect.top; const bottom = lastRect.bottom; const left = isTop ? firstRect.left : lastRect.left; const right = isTop ? firstRect.right : lastRect.right; const width = right - left; const height = bottom - top; return { top, bottom, left, right, width, height, x: left, y: top }; } const isLeftSide = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement) === 'left'; const maxRight = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(...clientRects.map(rect => rect.right)); const minLeft = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(...clientRects.map(rect => rect.left)); const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight); const top = measureRects[0].top; const bottom = measureRects[measureRects.length - 1].bottom; const left = minLeft; const right = maxRight; const width = right - left; const height = bottom - top; return { top, bottom, left, right, width, height, x: left, y: top }; } return fallback; } const resetRects = await platform.getElementRects({ reference: { getBoundingClientRect }, floating: elements.floating, strategy }); if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) { return { reset: { rects: resetRects } }; } return {}; } }; }; const originSides = /*#__PURE__*/new Set(['left', 'top']); // For type backwards-compatibility, the `OffsetOptions` type was also // Derivable. async function convertValueToCoords(state, options) { const { placement, platform, elements } = state; const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)); const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement); const alignment = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement); const isVertical = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement) === 'y'; const mainAxisMulti = originSides.has(side) ? -1 : 1; const crossAxisMulti = rtl && isVertical ? -1 : 1; const rawValue = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); // eslint-disable-next-line prefer-const let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === 'number' ? { mainAxis: rawValue, crossAxis: 0, alignmentAxis: null } : { mainAxis: rawValue.mainAxis || 0, crossAxis: rawValue.crossAxis || 0, alignmentAxis: rawValue.alignmentAxis }; if (alignment && typeof alignmentAxis === 'number') { crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis; } return isVertical ? { x: crossAxis * crossAxisMulti, y: mainAxis * mainAxisMulti } : { x: mainAxis * mainAxisMulti, y: crossAxis * crossAxisMulti }; } /** * Modifies the placement by translating the floating element along the * specified axes. * A number (shorthand for `mainAxis` or distance), or an axes configuration * object may be passed. * @see https://floating-ui.com/docs/offset */ const offset = function (options) { if (options === void 0) { options = 0; } return { name: 'offset', options, async fn(state) { var _middlewareData$offse, _middlewareData$arrow; const { x, y, placement, middlewareData } = state; const diffCoords = await convertValueToCoords(state, options); // If the placement is the same and the arrow caused an alignment offset // then we don't need to change the positioning coordinates. if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { return {}; } return { x: x + diffCoords.x, y: y + diffCoords.y, data: { ...diffCoords, placement } }; } }; }; /** * Optimizes the visibility of the floating element by shifting it in order to * keep it in view when it will overflow the clipping boundary. * @see https://floating-ui.com/docs/shift */ const shift = function (options) { if (options === void 0) { options = {}; } return { name: 'shift', options, async fn(state) { const { x, y, placement, platform } = state; const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = { fn: _ref => { let { x, y } = _ref; return { x, y }; } }, ...detectOverflowOptions } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); const coords = { x, y }; const overflow = await platform.detectOverflow(state, detectOverflowOptions); const crossAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement)); const mainAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAxis)(crossAxis); let mainAxisCoord = coords[mainAxis]; let crossAxisCoord = coords[crossAxis]; if (checkMainAxis) { const minSide = mainAxis === 'y' ? 'top' : 'left'; const maxSide = mainAxis === 'y' ? 'bottom' : 'right'; const min = mainAxisCoord + overflow[minSide]; const max = mainAxisCoord - overflow[maxSide]; mainAxisCoord = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.clamp)(min, mainAxisCoord, max); } if (checkCrossAxis) { const minSide = crossAxis === 'y' ? 'top' : 'left'; const maxSide = crossAxis === 'y' ? 'bottom' : 'right'; const min = crossAxisCoord + overflow[minSide]; const max = crossAxisCoord - overflow[maxSide]; crossAxisCoord = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.clamp)(min, crossAxisCoord, max); } const limitedCoords = limiter.fn({ ...state, [mainAxis]: mainAxisCoord, [crossAxis]: crossAxisCoord }); return { ...limitedCoords, data: { x: limitedCoords.x - x, y: limitedCoords.y - y, enabled: { [mainAxis]: checkMainAxis, [crossAxis]: checkCrossAxis } } }; } }; }; /** * Built-in `limiter` that will stop `shift()` at a certain point. */ const limitShift = function (options) { if (options === void 0) { options = {}; } return { options, fn(state) { const { x, y, placement, rects, middlewareData } = state; const { offset = 0, mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); const coords = { x, y }; const crossAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement); const mainAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAxis)(crossAxis); let mainAxisCoord = coords[mainAxis]; let crossAxisCoord = coords[crossAxis]; const rawOffset = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(offset, state); const computedOffset = typeof rawOffset === 'number' ? { mainAxis: rawOffset, crossAxis: 0 } : { mainAxis: 0, crossAxis: 0, ...rawOffset }; if (checkMainAxis) { const len = mainAxis === 'y' ? 'height' : 'width'; const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; if (mainAxisCoord < limitMin) { mainAxisCoord = limitMin; } else if (mainAxisCoord > limitMax) { mainAxisCoord = limitMax; } } if (checkCrossAxis) { var _middlewareData$offse, _middlewareData$offse2; const len = mainAxis === 'y' ? 'width' : 'height'; const isOriginSide = originSides.has((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement)); const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis); const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0); if (crossAxisCoord < limitMin) { crossAxisCoord = limitMin; } else if (crossAxisCoord > limitMax) { crossAxisCoord = limitMax; } } return { [mainAxis]: mainAxisCoord, [crossAxis]: crossAxisCoord }; } }; }; /** * Provides data that allows you to change the size of the floating element — * for instance, prevent it from overflowing the clipping boundary or match the * width of the reference element. * @see https://floating-ui.com/docs/size */ const size = function (options) { if (options === void 0) { options = {}; } return { name: 'size', options, async fn(state) { var _state$middlewareData, _state$middlewareData2; const { placement, rects, platform, elements } = state; const { apply = () => {}, ...detectOverflowOptions } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state); const overflow = await platform.detectOverflow(state, detectOverflowOptions); const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement); const alignment = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement); const isYAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement) === 'y'; const { width, height } = rects.floating; let heightSide; let widthSide; if (side === 'top' || side === 'bottom') { heightSide = side; widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right'; } else { widthSide = side; heightSide = alignment === 'end' ? 'top' : 'bottom'; } const maximumClippingHeight = height - overflow.top - overflow.bottom; const maximumClippingWidth = width - overflow.left - overflow.right; const overflowAvailableHeight = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(height - overflow[heightSide], maximumClippingHeight); const overflowAvailableWidth = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(width - overflow[widthSide], maximumClippingWidth); const noShift = !state.middlewareData.shift; let availableHeight = overflowAvailableHeight; let availableWidth = overflowAvailableWidth; if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) { availableWidth = maximumClippingWidth; } if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) { availableHeight = maximumClippingHeight; } if (noShift && !alignment) { const xMin = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.left, 0); const xMax = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.right, 0); const yMin = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.top, 0); const yMax = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.bottom, 0); if (isYAxis) { availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.left, overflow.right)); } else { availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.top, overflow.bottom)); } } await apply({ ...state, availableWidth, availableHeight }); const nextDimensions = await platform.getDimensions(elements.floating); if (width !== nextDimensions.width || height !== nextDimensions.height) { return { reset: { rects: true } }; } return {}; } }; }; /***/ }, /***/ "./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs" /*!****************************************************************!*\ !*** ./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs ***! \****************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ arrow: () => (/* binding */ arrow), /* harmony export */ autoPlacement: () => (/* binding */ autoPlacement), /* harmony export */ autoUpdate: () => (/* binding */ autoUpdate), /* harmony export */ computePosition: () => (/* binding */ computePosition), /* harmony export */ detectOverflow: () => (/* binding */ detectOverflow), /* harmony export */ flip: () => (/* binding */ flip), /* harmony export */ getOverflowAncestors: () => (/* reexport safe */ _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors), /* harmony export */ hide: () => (/* binding */ hide), /* harmony export */ inline: () => (/* binding */ inline), /* harmony export */ limitShift: () => (/* binding */ limitShift), /* harmony export */ offset: () => (/* binding */ offset), /* harmony export */ platform: () => (/* binding */ platform), /* harmony export */ shift: () => (/* binding */ shift), /* harmony export */ size: () => (/* binding */ size) /* harmony export */ }); /* harmony import */ var _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/core */ "./node_modules/@floating-ui/core/dist/floating-ui.core.mjs"); /* harmony import */ var _floating_ui_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/utils */ "./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"); /* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @floating-ui/utils/dom */ "./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"); function getCssDimensions(element) { const css = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(element); // In testing environments, the `width` and `height` properties are empty // strings for SVG elements, returning NaN. Fallback to `0` in this case. let width = parseFloat(css.width) || 0; let height = parseFloat(css.height) || 0; const hasOffset = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(element); const offsetWidth = hasOffset ? element.offsetWidth : width; const offsetHeight = hasOffset ? element.offsetHeight : height; const shouldFallback = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.round)(width) !== offsetWidth || (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.round)(height) !== offsetHeight; if (shouldFallback) { width = offsetWidth; height = offsetHeight; } return { width, height, $: shouldFallback }; } function unwrapElement(element) { return !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(element) ? element.contextElement : element; } function getScale(element) { const domElement = unwrapElement(element); if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(domElement)) { return (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1); } const rect = domElement.getBoundingClientRect(); const { width, height, $ } = getCssDimensions(domElement); let x = ($ ? (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.round)(rect.width) : rect.width) / width; let y = ($ ? (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.round)(rect.height) : rect.height) / height; // 0, NaN, or Infinity should always fallback to 1. if (!x || !Number.isFinite(x)) { x = 1; } if (!y || !Number.isFinite(y)) { y = 1; } return { x, y }; } const noOffsets = /*#__PURE__*/(0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0); function getVisualOffsets(element) { const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getWindow)(element); if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isWebKit)() || !win.visualViewport) { return noOffsets; } return { x: win.visualViewport.offsetLeft, y: win.visualViewport.offsetTop }; } function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { if (isFixed === void 0) { isFixed = false; } if (!floatingOffsetParent || isFixed && floatingOffsetParent !== (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getWindow)(element)) { return false; } return isFixed; } function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { if (includeScale === void 0) { includeScale = false; } if (isFixedStrategy === void 0) { isFixedStrategy = false; } const clientRect = element.getBoundingClientRect(); const domElement = unwrapElement(element); let scale = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1); if (includeScale) { if (offsetParent) { if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(offsetParent)) { scale = getScale(offsetParent); } } else { scale = getScale(element); } } const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0); let x = (clientRect.left + visualOffsets.x) / scale.x; let y = (clientRect.top + visualOffsets.y) / scale.y; let width = clientRect.width / scale.x; let height = clientRect.height / scale.y; if (domElement) { const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getWindow)(domElement); const offsetWin = offsetParent && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(offsetParent) ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getWindow)(offsetParent) : offsetParent; let currentWin = win; let currentIFrame = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getFrameElement)(currentWin); while (currentIFrame && offsetParent && offsetWin !== currentWin) { const iframeScale = getScale(currentIFrame); const iframeRect = currentIFrame.getBoundingClientRect(); const css = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(currentIFrame); const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; x *= iframeScale.x; y *= iframeScale.y; width *= iframeScale.x; height *= iframeScale.y; x += left; y += top; currentWin = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getWindow)(currentIFrame); currentIFrame = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getFrameElement)(currentWin); } } return (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.rectToClientRect)({ width, height, x, y }); } // If <html> has a CSS width greater than the viewport, then this will be // incorrect for RTL. function getWindowScrollBarX(element, rect) { const leftScroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getNodeScroll)(element).scrollLeft; if (!rect) { return getBoundingClientRect((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(element)).left + leftScroll; } return rect.left + leftScroll; } function getHTMLOffset(documentElement, scroll) { const htmlRect = documentElement.getBoundingClientRect(); const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); const y = htmlRect.top + scroll.scrollTop; return { x, y }; } function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { let { elements, rect, offsetParent, strategy } = _ref; const isFixed = strategy === 'fixed'; const documentElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(offsetParent); const topLayer = elements ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isTopLayer)(elements.floating) : false; if (offsetParent === documentElement || topLayer && isFixed) { return rect; } let scroll = { scrollLeft: 0, scrollTop: 0 }; let scale = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1); const offsets = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0); const isOffsetParentAnElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(offsetParent); if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getNodeName)(offsetParent) !== 'body' || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isOverflowElement)(documentElement)) { scroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getNodeScroll)(offsetParent); } if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(offsetParent)) { const offsetRect = getBoundingClientRect(offsetParent); scale = getScale(offsetParent); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } } const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0); return { width: rect.width * scale.x, height: rect.height * scale.y, x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y }; } function getClientRects(element) { return Array.from(element.getClientRects()); } // Gets the entire size of the scrollable document area, even extending outside // of the `<html>` and `<body>` rect bounds if horizontally scrollable. function getDocumentRect(element) { const html = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(element); const scroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getNodeScroll)(element); const body = element.ownerDocument.body; const width = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.max)(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); const height = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.max)(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); let x = -scroll.scrollLeft + getWindowScrollBarX(element); const y = -scroll.scrollTop; if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(body).direction === 'rtl') { x += (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.max)(html.clientWidth, body.clientWidth) - width; } return { width, height, x, y }; } // Safety check: ensure the scrollbar space is reasonable in case this // calculation is affected by unusual styles. // Most scrollbars leave 15-18px of space. const SCROLLBAR_MAX = 25; function getViewportRect(element, strategy) { const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getWindow)(element); const html = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(element); const visualViewport = win.visualViewport; let width = html.clientWidth; let height = html.clientHeight; let x = 0; let y = 0; if (visualViewport) { width = visualViewport.width; height = visualViewport.height; const visualViewportBased = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isWebKit)(); if (!visualViewportBased || visualViewportBased && strategy === 'fixed') { x = visualViewport.offsetLeft; y = visualViewport.offsetTop; } } const windowScrollbarX = getWindowScrollBarX(html); // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the // visual width of the <html> but this is not considered in the size // of `html.clientWidth`. if (windowScrollbarX <= 0) { const doc = html.ownerDocument; const body = doc.body; const bodyStyles = getComputedStyle(body); const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) { width -= clippingStableScrollbarWidth; } } else if (windowScrollbarX <= SCROLLBAR_MAX) { // If the <body> scrollbar is on the left, the width needs to be extended // by the scrollbar amount so there isn't extra space on the right. width += windowScrollbarX; } return { width, height, x, y }; } const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']); // Returns the inner client rect, subtracting scrollbars if present. function getInnerBoundingClientRect(element, strategy) { const clientRect = getBoundingClientRect(element, true, strategy === 'fixed'); const top = clientRect.top + element.clientTop; const left = clientRect.left + element.clientLeft; const scale = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(element) ? getScale(element) : (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1); const width = element.clientWidth * scale.x; const height = element.clientHeight * scale.y; const x = left * scale.x; const y = top * scale.y; return { width, height, x, y }; } function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { let rect; if (clippingAncestor === 'viewport') { rect = getViewportRect(element, strategy); } else if (clippingAncestor === 'document') { rect = getDocumentRect((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(element)); } else if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(clippingAncestor)) { rect = getInnerBoundingClientRect(clippingAncestor, strategy); } else { const visualOffsets = getVisualOffsets(element); rect = { x: clippingAncestor.x - visualOffsets.x, y: clippingAncestor.y - visualOffsets.y, width: clippingAncestor.width, height: clippingAncestor.height }; } return (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.rectToClientRect)(rect); } function hasFixedPositionAncestor(element, stopNode) { const parentNode = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getParentNode)(element); if (parentNode === stopNode || !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(parentNode) || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isLastTraversableNode)(parentNode)) { return false; } return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode); } // A "clipping ancestor" is an `overflow` element with the characteristic of // clipping (or hiding) child elements. This returns all clipping ancestors // of the given element up the tree. function getClippingElementAncestors(element, cache) { const cachedResult = cache.get(element); if (cachedResult) { return cachedResult; } let result = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors)(element, [], false).filter(el => (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(el) && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getNodeName)(el) !== 'body'); let currentContainingBlockComputedStyle = null; const elementIsFixed = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(element).position === 'fixed'; let currentNode = elementIsFixed ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getParentNode)(element) : element; // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block while ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(currentNode) && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isLastTraversableNode)(currentNode)) { const computedStyle = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(currentNode); const currentNodeIsContaining = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isContainingBlock)(currentNode); if (!currentNodeIsContaining && computedStyle.position === 'fixed') { currentContainingBlockComputedStyle = null; } const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isOverflowElement)(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); if (shouldDropCurrentNode) { // Drop non-containing blocks. result = result.filter(ancestor => ancestor !== currentNode); } else { // Record last containing block for next iteration. currentContainingBlockComputedStyle = computedStyle; } currentNode = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getParentNode)(currentNode); } cache.set(element, result); return result; } // Gets the maximum area that the element is visible in due to any number of // clipping ancestors. function getClippingRect(_ref) { let { element, boundary, rootBoundary, strategy } = _ref; const elementClippingAncestors = boundary === 'clippingAncestors' ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isTopLayer)(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); const clippingAncestors = [...elementClippingAncestors, rootBoundary]; const firstClippingAncestor = clippingAncestors[0]; const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => { const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy); accRect.top = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.max)(rect.top, accRect.top); accRect.right = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.min)(rect.right, accRect.right); accRect.bottom = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.min)(rect.bottom, accRect.bottom); accRect.left = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.max)(rect.left, accRect.left); return accRect; }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy)); return { width: clippingRect.right - clippingRect.left, height: clippingRect.bottom - clippingRect.top, x: clippingRect.left, y: clippingRect.top }; } function getDimensions(element) { const { width, height } = getCssDimensions(element); return { width, height }; } function getRectRelativeToOffsetParent(element, offsetParent, strategy) { const isOffsetParentAnElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(offsetParent); const documentElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(offsetParent); const isFixed = strategy === 'fixed'; const rect = getBoundingClientRect(element, true, isFixed, offsetParent); let scroll = { scrollLeft: 0, scrollTop: 0 }; const offsets = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0); // If the <body> scrollbar appears on the left (e.g. RTL systems). Use // Firefox with layout.scrollbar.side = 3 in about:config to test this. function setLeftRTLScrollbarOffset() { offsets.x = getWindowScrollBarX(documentElement); } if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getNodeName)(offsetParent) !== 'body' || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isOverflowElement)(documentElement)) { scroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getNodeScroll)(offsetParent); } if (isOffsetParentAnElement) { const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } else if (documentElement) { setLeftRTLScrollbarOffset(); } } if (isFixed && !isOffsetParentAnElement && documentElement) { setLeftRTLScrollbarOffset(); } const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0); const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; return { x, y, width: rect.width, height: rect.height }; } function isStaticPositioned(element) { return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(element).position === 'static'; } function getTrueOffsetParent(element, polyfill) { if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(element) || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(element).position === 'fixed') { return null; } if (polyfill) { return polyfill(element); } let rawOffsetParent = element.offsetParent; // Firefox returns the <html> element as the offsetParent if it's non-static, // while Chrome and Safari return the <body> element. The <body> element must // be used to perform the correct calculations even if the <html> element is // non-static. if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(element) === rawOffsetParent) { rawOffsetParent = rawOffsetParent.ownerDocument.body; } return rawOffsetParent; } // Gets the closest ancestor positioned element. Handles some edge cases, // such as table ancestors and cross browser bugs. function getOffsetParent(element, polyfill) { const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getWindow)(element); if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isTopLayer)(element)) { return win; } if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(element)) { let svgOffsetParent = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getParentNode)(element); while (svgOffsetParent && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isLastTraversableNode)(svgOffsetParent)) { if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement)(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { return svgOffsetParent; } svgOffsetParent = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getParentNode)(svgOffsetParent); } return win; } let offsetParent = getTrueOffsetParent(element, polyfill); while (offsetParent && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isTableElement)(offsetParent) && isStaticPositioned(offsetParent)) { offsetParent = getTrueOffsetParent(offsetParent, polyfill); } if (offsetParent && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isLastTraversableNode)(offsetParent) && isStaticPositioned(offsetParent) && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isContainingBlock)(offsetParent)) { return win; } return offsetParent || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getContainingBlock)(element) || win; } const getElementRects = async function (data) { const getOffsetParentFn = this.getOffsetParent || getOffsetParent; const getDimensionsFn = this.getDimensions; const floatingDimensions = await getDimensionsFn(data.floating); return { reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), floating: { x: 0, y: 0, width: floatingDimensions.width, height: floatingDimensions.height } }; }; function isRTL(element) { return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getComputedStyle)(element).direction === 'rtl'; } const platform = { convertOffsetParentRelativeRectToViewportRelativeRect, getDocumentElement: _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement, getClippingRect, getOffsetParent, getElementRects, getClientRects, getDimensions, getScale, isElement: _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isElement, isRTL }; function rectsAreEqual(a, b) { return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; } // https://samthor.au/2021/observing-dom/ function observeMove(element, onMove) { let io = null; let timeoutId; const root = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getDocumentElement)(element); function cleanup() { var _io; clearTimeout(timeoutId); (_io = io) == null || _io.disconnect(); io = null; } function refresh(skip, threshold) { if (skip === void 0) { skip = false; } if (threshold === void 0) { threshold = 1; } cleanup(); const elementRectForRootMargin = element.getBoundingClientRect(); const { left, top, width, height } = elementRectForRootMargin; if (!skip) { onMove(); } if (!width || !height) { return; } const insetTop = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.floor)(top); const insetRight = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.floor)(root.clientWidth - (left + width)); const insetBottom = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.floor)(root.clientHeight - (top + height)); const insetLeft = (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.floor)(left); const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; const options = { rootMargin, threshold: (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.max)(0, (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_1__.min)(1, threshold)) || 1 }; let isFirstUpdate = true; function handleObserve(entries) { const ratio = entries[0].intersectionRatio; if (ratio !== threshold) { if (!isFirstUpdate) { return refresh(); } if (!ratio) { // If the reference is clipped, the ratio is 0. Throttle the refresh // to prevent an infinite loop of updates. timeoutId = setTimeout(() => { refresh(false, 1e-7); }, 1000); } else { refresh(false, ratio); } } if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { // It's possible that even though the ratio is reported as 1, the // element is not actually fully within the IntersectionObserver's root // area anymore. This can happen under performance constraints. This may // be a bug in the browser's IntersectionObserver implementation. To // work around this, we compare the element's bounding rect now with // what it was at the time we created the IntersectionObserver. If they // are not equal then the element moved, so we refresh. refresh(); } isFirstUpdate = false; } // Older browsers don't support a `document` as the root and will throw an // error. try { io = new IntersectionObserver(handleObserve, { ...options, // Handle <iframe>s root: root.ownerDocument }); } catch (_e) { io = new IntersectionObserver(handleObserve, options); } io.observe(element); } refresh(true); return cleanup; } /** * Automatically updates the position of the floating element when necessary. * Should only be called when the floating element is mounted on the DOM or * visible on the screen. * @returns cleanup function that should be invoked when the floating element is * removed from the DOM or hidden from the screen. * @see https://floating-ui.com/docs/autoUpdate */ function autoUpdate(reference, floating, update, options) { if (options === void 0) { options = {}; } const { ancestorScroll = true, ancestorResize = true, elementResize = typeof ResizeObserver === 'function', layoutShift = typeof IntersectionObserver === 'function', animationFrame = false } = options; const referenceEl = unwrapElement(reference); const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors)(referenceEl) : []), ...(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors)(floating)] : []; ancestors.forEach(ancestor => { ancestorScroll && ancestor.addEventListener('scroll', update, { passive: true }); ancestorResize && ancestor.addEventListener('resize', update); }); const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null; let reobserveFrame = -1; let resizeObserver = null; if (elementResize) { resizeObserver = new ResizeObserver(_ref => { let [firstEntry] = _ref; if (firstEntry && firstEntry.target === referenceEl && resizeObserver) { // Prevent update loops when using the `size` middleware. // https://github.com/floating-ui/floating-ui/issues/1740 resizeObserver.unobserve(floating); cancelAnimationFrame(reobserveFrame); reobserveFrame = requestAnimationFrame(() => { var _resizeObserver; (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating); }); } update(); }); if (referenceEl && !animationFrame) { resizeObserver.observe(referenceEl); } resizeObserver.observe(floating); } let frameId; let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; if (animationFrame) { frameLoop(); } function frameLoop() { const nextRefRect = getBoundingClientRect(reference); if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) { update(); } prevRefRect = nextRefRect; frameId = requestAnimationFrame(frameLoop); } update(); return () => { var _resizeObserver2; ancestors.forEach(ancestor => { ancestorScroll && ancestor.removeEventListener('scroll', update); ancestorResize && ancestor.removeEventListener('resize', update); }); cleanupIo == null || cleanupIo(); (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect(); resizeObserver = null; if (animationFrame) { cancelAnimationFrame(frameId); } }; } /** * Resolves with an object of overflow side offsets that determine how much the * element is overflowing a given clipping boundary on each side. * - positive = overflowing the boundary by that number of pixels * - negative = how many pixels left before it will overflow * - 0 = lies flush with the boundary * @see https://floating-ui.com/docs/detectOverflow */ const detectOverflow = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.detectOverflow; /** * Modifies the placement by translating the floating element along the * specified axes. * A number (shorthand for `mainAxis` or distance), or an axes configuration * object may be passed. * @see https://floating-ui.com/docs/offset */ const offset = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.offset; /** * Optimizes the visibility of the floating element by choosing the placement * that has the most space available automatically, without needing to specify a * preferred placement. Alternative to `flip`. * @see https://floating-ui.com/docs/autoPlacement */ const autoPlacement = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.autoPlacement; /** * Optimizes the visibility of the floating element by shifting it in order to * keep it in view when it will overflow the clipping boundary. * @see https://floating-ui.com/docs/shift */ const shift = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.shift; /** * Optimizes the visibility of the floating element by flipping the `placement` * in order to keep it in view when the preferred placement(s) will overflow the * clipping boundary. Alternative to `autoPlacement`. * @see https://floating-ui.com/docs/flip */ const flip = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.flip; /** * Provides data that allows you to change the size of the floating element — * for instance, prevent it from overflowing the clipping boundary or match the * width of the reference element. * @see https://floating-ui.com/docs/size */ const size = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.size; /** * Provides data to hide the floating element in applicable situations, such as * when it is not in the same clipping context as the reference element. * @see https://floating-ui.com/docs/hide */ const hide = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.hide; /** * Provides data to position an inner element of the floating element so that it * appears centered to the reference element. * @see https://floating-ui.com/docs/arrow */ const arrow = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.arrow; /** * Provides improved positioning for inline reference elements that can span * over multiple lines, such as hyperlinks or range selections. * @see https://floating-ui.com/docs/inline */ const inline = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.inline; /** * Built-in `limiter` that will stop `shift()` at a certain point. */ const limitShift = _floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.limitShift; /** * Computes the `x` and `y` coordinates that will place the floating element * next to a given reference element. */ const computePosition = (reference, floating, options) => { // This caches the expensive `getClippingElementAncestors` function so that // multiple lifecycle resets re-use the same result. It only lives for a // single call. If other functions become expensive, we can add them as well. const cache = new Map(); const mergedOptions = { platform, ...options }; const platformWithCache = { ...mergedOptions.platform, _c: cache }; return (0,_floating_ui_core__WEBPACK_IMPORTED_MODULE_0__.computePosition)(reference, floating, { ...mergedOptions, platform: platformWithCache }); }; /***/ }, /***/ "./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs" /*!************************************************************************!*\ !*** ./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs ***! \************************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getComputedStyle: () => (/* binding */ getComputedStyle), /* harmony export */ getContainingBlock: () => (/* binding */ getContainingBlock), /* harmony export */ getDocumentElement: () => (/* binding */ getDocumentElement), /* harmony export */ getFrameElement: () => (/* binding */ getFrameElement), /* harmony export */ getNearestOverflowAncestor: () => (/* binding */ getNearestOverflowAncestor), /* harmony export */ getNodeName: () => (/* binding */ getNodeName), /* harmony export */ getNodeScroll: () => (/* binding */ getNodeScroll), /* harmony export */ getOverflowAncestors: () => (/* binding */ getOverflowAncestors), /* harmony export */ getParentNode: () => (/* binding */ getParentNode), /* harmony export */ getWindow: () => (/* binding */ getWindow), /* harmony export */ isContainingBlock: () => (/* binding */ isContainingBlock), /* harmony export */ isElement: () => (/* binding */ isElement), /* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement), /* harmony export */ isLastTraversableNode: () => (/* binding */ isLastTraversableNode), /* harmony export */ isNode: () => (/* binding */ isNode), /* harmony export */ isOverflowElement: () => (/* binding */ isOverflowElement), /* harmony export */ isShadowRoot: () => (/* binding */ isShadowRoot), /* harmony export */ isTableElement: () => (/* binding */ isTableElement), /* harmony export */ isTopLayer: () => (/* binding */ isTopLayer), /* harmony export */ isWebKit: () => (/* binding */ isWebKit) /* harmony export */ }); function hasWindow() { return typeof window !== 'undefined'; } function getNodeName(node) { if (isNode(node)) { return (node.nodeName || '').toLowerCase(); } // Mocked nodes in testing environments may not be instances of Node. By // returning `#document` an infinite loop won't occur. // https://github.com/floating-ui/floating-ui/issues/2317 return '#document'; } function getWindow(node) { var _node$ownerDocument; return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; } function getDocumentElement(node) { var _ref; return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; } function isNode(value) { if (!hasWindow()) { return false; } return value instanceof Node || value instanceof getWindow(value).Node; } function isElement(value) { if (!hasWindow()) { return false; } return value instanceof Element || value instanceof getWindow(value).Element; } function isHTMLElement(value) { if (!hasWindow()) { return false; } return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; } function isShadowRoot(value) { if (!hasWindow() || typeof ShadowRoot === 'undefined') { return false; } return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; } const invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']); function isOverflowElement(element) { const { overflow, overflowX, overflowY, display } = getComputedStyle(element); return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display); } const tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']); function isTableElement(element) { return tableElements.has(getNodeName(element)); } const topLayerSelectors = [':popover-open', ':modal']; function isTopLayer(element) { return topLayerSelectors.some(selector => { try { return element.matches(selector); } catch (_e) { return false; } }); } const transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective']; const willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter']; const containValues = ['paint', 'layout', 'strict', 'content']; function isContainingBlock(elementOrCss) { const webkit = isWebKit(); const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss; // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block // https://drafts.csswg.org/css-transforms-2/#individual-transforms return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value)); } function getContainingBlock(element) { let currentNode = getParentNode(element); while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { if (isContainingBlock(currentNode)) { return currentNode; } else if (isTopLayer(currentNode)) { return null; } currentNode = getParentNode(currentNode); } return null; } function isWebKit() { if (typeof CSS === 'undefined' || !CSS.supports) return false; return CSS.supports('-webkit-backdrop-filter', 'none'); } const lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']); function isLastTraversableNode(node) { return lastTraversableNodeNames.has(getNodeName(node)); } function getComputedStyle(element) { return getWindow(element).getComputedStyle(element); } function getNodeScroll(element) { if (isElement(element)) { return { scrollLeft: element.scrollLeft, scrollTop: element.scrollTop }; } return { scrollLeft: element.scrollX, scrollTop: element.scrollY }; } function getParentNode(node) { if (getNodeName(node) === 'html') { return node; } const result = // Step into the shadow DOM of the parent of a slotted node. node.assignedSlot || // DOM Element detected. node.parentNode || // ShadowRoot detected. isShadowRoot(node) && node.host || // Fallback. getDocumentElement(node); return isShadowRoot(result) ? result.host : result; } function getNearestOverflowAncestor(node) { const parentNode = getParentNode(node); if (isLastTraversableNode(parentNode)) { return node.ownerDocument ? node.ownerDocument.body : node.body; } if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { return parentNode; } return getNearestOverflowAncestor(parentNode); } function getOverflowAncestors(node, list, traverseIframes) { var _node$ownerDocument2; if (list === void 0) { list = []; } if (traverseIframes === void 0) { traverseIframes = true; } const scrollableAncestor = getNearestOverflowAncestor(node); const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); const win = getWindow(scrollableAncestor); if (isBody) { const frameElement = getFrameElement(win); return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); } return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); } function getFrameElement(win) { return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; } /***/ }, /***/ "./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs" /*!********************************************************************!*\ !*** ./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs ***! \********************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ alignments: () => (/* binding */ alignments), /* harmony export */ clamp: () => (/* binding */ clamp), /* harmony export */ createCoords: () => (/* binding */ createCoords), /* harmony export */ evaluate: () => (/* binding */ evaluate), /* harmony export */ expandPaddingObject: () => (/* binding */ expandPaddingObject), /* harmony export */ floor: () => (/* binding */ floor), /* harmony export */ getAlignment: () => (/* binding */ getAlignment), /* harmony export */ getAlignmentAxis: () => (/* binding */ getAlignmentAxis), /* harmony export */ getAlignmentSides: () => (/* binding */ getAlignmentSides), /* harmony export */ getAxisLength: () => (/* binding */ getAxisLength), /* harmony export */ getExpandedPlacements: () => (/* binding */ getExpandedPlacements), /* harmony export */ getOppositeAlignmentPlacement: () => (/* binding */ getOppositeAlignmentPlacement), /* harmony export */ getOppositeAxis: () => (/* binding */ getOppositeAxis), /* harmony export */ getOppositeAxisPlacements: () => (/* binding */ getOppositeAxisPlacements), /* harmony export */ getOppositePlacement: () => (/* binding */ getOppositePlacement), /* harmony export */ getPaddingObject: () => (/* binding */ getPaddingObject), /* harmony export */ getSide: () => (/* binding */ getSide), /* harmony export */ getSideAxis: () => (/* binding */ getSideAxis), /* harmony export */ max: () => (/* binding */ max), /* harmony export */ min: () => (/* binding */ min), /* harmony export */ placements: () => (/* binding */ placements), /* harmony export */ rectToClientRect: () => (/* binding */ rectToClientRect), /* harmony export */ round: () => (/* binding */ round), /* harmony export */ sides: () => (/* binding */ sides) /* harmony export */ }); /** * Custom positioning reference element. * @see https://floating-ui.com/docs/virtual-elements */ const sides = ['top', 'right', 'bottom', 'left']; const alignments = ['start', 'end']; const placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []); const min = Math.min; const max = Math.max; const round = Math.round; const floor = Math.floor; const createCoords = v => ({ x: v, y: v }); const oppositeSideMap = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; const oppositeAlignmentMap = { start: 'end', end: 'start' }; function clamp(start, value, end) { return max(start, min(value, end)); } function evaluate(value, param) { return typeof value === 'function' ? value(param) : value; } function getSide(placement) { return placement.split('-')[0]; } function getAlignment(placement) { return placement.split('-')[1]; } function getOppositeAxis(axis) { return axis === 'x' ? 'y' : 'x'; } function getAxisLength(axis) { return axis === 'y' ? 'height' : 'width'; } const yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']); function getSideAxis(placement) { return yAxisSides.has(getSide(placement)) ? 'y' : 'x'; } function getAlignmentAxis(placement) { return getOppositeAxis(getSideAxis(placement)); } function getAlignmentSides(placement, rects, rtl) { if (rtl === void 0) { rtl = false; } const alignment = getAlignment(placement); const alignmentAxis = getAlignmentAxis(placement); const length = getAxisLength(alignmentAxis); let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top'; if (rects.reference[length] > rects.floating[length]) { mainAlignmentSide = getOppositePlacement(mainAlignmentSide); } return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; } function getExpandedPlacements(placement) { const oppositePlacement = getOppositePlacement(placement); return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; } function getOppositeAlignmentPlacement(placement) { return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]); } const lrPlacement = ['left', 'right']; const rlPlacement = ['right', 'left']; const tbPlacement = ['top', 'bottom']; const btPlacement = ['bottom', 'top']; function getSideList(side, isStart, rtl) { switch (side) { case 'top': case 'bottom': if (rtl) return isStart ? rlPlacement : lrPlacement; return isStart ? lrPlacement : rlPlacement; case 'left': case 'right': return isStart ? tbPlacement : btPlacement; default: return []; } } function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { const alignment = getAlignment(placement); let list = getSideList(getSide(placement), direction === 'start', rtl); if (alignment) { list = list.map(side => side + "-" + alignment); if (flipAlignment) { list = list.concat(list.map(getOppositeAlignmentPlacement)); } } return list; } function getOppositePlacement(placement) { return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]); } function expandPaddingObject(padding) { return { top: 0, right: 0, bottom: 0, left: 0, ...padding }; } function getPaddingObject(padding) { return typeof padding !== 'number' ? expandPaddingObject(padding) : { top: padding, right: padding, bottom: padding, left: padding }; } function rectToClientRect(rect) { const { x, y, width, height } = rect; return { width, height, top: y, left: x, right: x + width, bottom: y + height, x, y }; } /***/ }, /***/ "./node_modules/@radix-ui/number/dist/index.mjs" /*!******************************************************!*\ !*** ./node_modules/@radix-ui/number/dist/index.mjs ***! \******************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ clamp: () => (/* binding */ clamp) /* harmony export */ }); // packages/core/number/src/number.ts function clamp(value, [min, max]) { return Math.min(max, Math.max(min, value)); } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/primitive/dist/index.mjs" /*!*********************************************************!*\ !*** ./node_modules/@radix-ui/primitive/dist/index.mjs ***! \*********************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ canUseDOM: () => (/* binding */ canUseDOM), /* harmony export */ composeEventHandlers: () => (/* binding */ composeEventHandlers), /* harmony export */ getActiveElement: () => (/* binding */ getActiveElement), /* harmony export */ getOwnerDocument: () => (/* binding */ getOwnerDocument), /* harmony export */ getOwnerWindow: () => (/* binding */ getOwnerWindow), /* harmony export */ isFrame: () => (/* binding */ isFrame) /* harmony export */ }); // src/primitive.tsx var canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement); function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) { return function handleEvent(event) { originalEventHandler?.(event); if (checkForDefaultPrevented === false || !event.defaultPrevented) { return ourEventHandler?.(event); } }; } function getOwnerWindow(element) { if (!canUseDOM) { throw new Error("Cannot access window outside of the DOM"); } return element?.ownerDocument?.defaultView ?? window; } function getOwnerDocument(element) { if (!canUseDOM) { throw new Error("Cannot access document outside of the DOM"); } return element?.ownerDocument ?? document; } function getActiveElement(node, activeDescendant = false) { const { activeElement } = getOwnerDocument(node); if (!activeElement?.nodeName) { return null; } if (isFrame(activeElement) && activeElement.contentDocument) { return getActiveElement(activeElement.contentDocument.body, activeDescendant); } if (activeDescendant) { const id = activeElement.getAttribute("aria-activedescendant"); if (id) { const element = getOwnerDocument(activeElement).getElementById(id); if (element) { return element; } } } return activeElement; } function isFrame(element) { return element.tagName === "IFRAME"; } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-arrow/dist/index.mjs" /*!***********************************************************!*\ !*** ./node_modules/@radix-ui/react-arrow/dist/index.mjs ***! \***********************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Arrow: () => (/* binding */ Arrow), /* harmony export */ Root: () => (/* binding */ Root) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); // src/arrow.tsx var NAME = "Arrow"; var Arrow = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { children, width = 10, height = 5, ...arrowProps } = props; return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_1__.Primitive.svg, { ...arrowProps, ref: forwardedRef, width, height, viewBox: "0 0 30 10", preserveAspectRatio: "none", children: props.asChild ? children : /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("polygon", { points: "0,0 30,0 15,10" }) } ); }); Arrow.displayName = NAME; var Root = Arrow; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-collection/dist/index.mjs" /*!****************************************************************!*\ !*** ./node_modules/@radix-ui/react-collection/dist/index.mjs ***! \****************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createCollection: () => (/* binding */ createCollection), /* harmony export */ unstable_createCollection: () => (/* binding */ createCollection2) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-context */ "./node_modules/@radix-ui/react-context/dist/index.mjs"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-slot */ "./node_modules/@radix-ui/react-slot/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/collection-legacy.tsx function createCollection(name) { const PROVIDER_NAME = name + "CollectionProvider"; const [createCollectionContext, createCollectionScope] = (0,_radix_ui_react_context__WEBPACK_IMPORTED_MODULE_1__.createContextScope)(PROVIDER_NAME); const [CollectionProviderImpl, useCollectionContext] = createCollectionContext( PROVIDER_NAME, { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() } ); const CollectionProvider = (props) => { const { scope, children } = props; const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const itemMap = react__WEBPACK_IMPORTED_MODULE_0__.useRef(/* @__PURE__ */ new Map()).current; return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children }); }; CollectionProvider.displayName = PROVIDER_NAME; const COLLECTION_SLOT_NAME = name + "CollectionSlot"; const CollectionSlotImpl = (0,_radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_3__.createSlot)(COLLECTION_SLOT_NAME); const CollectionSlot = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { scope, children } = props; const context = useCollectionContext(COLLECTION_SLOT_NAME, scope); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(forwardedRef, context.collectionRef); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionSlotImpl, { ref: composedRefs, children }); } ); CollectionSlot.displayName = COLLECTION_SLOT_NAME; const ITEM_SLOT_NAME = name + "CollectionItemSlot"; const ITEM_DATA_ATTR = "data-radix-collection-item"; const CollectionItemSlotImpl = (0,_radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_3__.createSlot)(ITEM_SLOT_NAME); const CollectionItemSlot = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { scope, children, ...itemData } = props; const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(forwardedRef, ref); const context = useCollectionContext(ITEM_SLOT_NAME, scope); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { context.itemMap.set(ref, { ref, ...itemData }); return () => void context.itemMap.delete(ref); }); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: "" }, ref: composedRefs, children }); } ); CollectionItemSlot.displayName = ITEM_SLOT_NAME; function useCollection(scope) { const context = useCollectionContext(name + "CollectionConsumer", scope); const getItems = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { const collectionNode = context.collectionRef.current; if (!collectionNode) return []; const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`)); const items = Array.from(context.itemMap.values()); const orderedItems = items.sort( (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current) ); return orderedItems; }, [context.collectionRef, context.itemMap]); return getItems; } return [ { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot }, useCollection, createCollectionScope ]; } // src/collection.tsx // src/ordered-dictionary.ts var __instanciated = /* @__PURE__ */ new WeakMap(); var OrderedDict = class _OrderedDict extends Map { #keys; constructor(entries) { super(entries); this.#keys = [...super.keys()]; __instanciated.set(this, true); } set(key, value) { if (__instanciated.get(this)) { if (this.has(key)) { this.#keys[this.#keys.indexOf(key)] = key; } else { this.#keys.push(key); } } super.set(key, value); return this; } insert(index, key, value) { const has = this.has(key); const length = this.#keys.length; const relativeIndex = toSafeInteger(index); let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex; const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex; if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) { this.set(key, value); return this; } const size = this.size + (has ? 0 : 1); if (relativeIndex < 0) { actualIndex++; } const keys = [...this.#keys]; let nextValue; let shouldSkip = false; for (let i = actualIndex; i < size; i++) { if (actualIndex === i) { let nextKey = keys[i]; if (keys[i] === key) { nextKey = keys[i + 1]; } if (has) { this.delete(key); } nextValue = this.get(nextKey); this.set(key, value); } else { if (!shouldSkip && keys[i - 1] === key) { shouldSkip = true; } const currentKey = keys[shouldSkip ? i : i - 1]; const currentValue = nextValue; nextValue = this.get(currentKey); this.delete(currentKey); this.set(currentKey, currentValue); } } return this; } with(index, key, value) { const copy = new _OrderedDict(this); copy.insert(index, key, value); return copy; } before(key) { const index = this.#keys.indexOf(key) - 1; if (index < 0) { return void 0; } return this.entryAt(index); } /** * Sets a new key-value pair at the position before the given key. */ setBefore(key, newKey, value) { const index = this.#keys.indexOf(key); if (index === -1) { return this; } return this.insert(index, newKey, value); } after(key) { let index = this.#keys.indexOf(key); index = index === -1 || index === this.size - 1 ? -1 : index + 1; if (index === -1) { return void 0; } return this.entryAt(index); } /** * Sets a new key-value pair at the position after the given key. */ setAfter(key, newKey, value) { const index = this.#keys.indexOf(key); if (index === -1) { return this; } return this.insert(index + 1, newKey, value); } first() { return this.entryAt(0); } last() { return this.entryAt(-1); } clear() { this.#keys = []; return super.clear(); } delete(key) { const deleted = super.delete(key); if (deleted) { this.#keys.splice(this.#keys.indexOf(key), 1); } return deleted; } deleteAt(index) { const key = this.keyAt(index); if (key !== void 0) { return this.delete(key); } return false; } at(index) { const key = at(this.#keys, index); if (key !== void 0) { return this.get(key); } } entryAt(index) { const key = at(this.#keys, index); if (key !== void 0) { return [key, this.get(key)]; } } indexOf(key) { return this.#keys.indexOf(key); } keyAt(index) { return at(this.#keys, index); } from(key, offset) { const index = this.indexOf(key); if (index === -1) { return void 0; } let dest = index + offset; if (dest < 0) dest = 0; if (dest >= this.size) dest = this.size - 1; return this.at(dest); } keyFrom(key, offset) { const index = this.indexOf(key); if (index === -1) { return void 0; } let dest = index + offset; if (dest < 0) dest = 0; if (dest >= this.size) dest = this.size - 1; return this.keyAt(dest); } find(predicate, thisArg) { let index = 0; for (const entry of this) { if (Reflect.apply(predicate, thisArg, [entry, index, this])) { return entry; } index++; } return void 0; } findIndex(predicate, thisArg) { let index = 0; for (const entry of this) { if (Reflect.apply(predicate, thisArg, [entry, index, this])) { return index; } index++; } return -1; } filter(predicate, thisArg) { const entries = []; let index = 0; for (const entry of this) { if (Reflect.apply(predicate, thisArg, [entry, index, this])) { entries.push(entry); } index++; } return new _OrderedDict(entries); } map(callbackfn, thisArg) { const entries = []; let index = 0; for (const entry of this) { entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]); index++; } return new _OrderedDict(entries); } reduce(...args) { const [callbackfn, initialValue] = args; let index = 0; let accumulator = initialValue ?? this.at(0); for (const entry of this) { if (index === 0 && args.length === 1) { accumulator = entry; } else { accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]); } index++; } return accumulator; } reduceRight(...args) { const [callbackfn, initialValue] = args; let accumulator = initialValue ?? this.at(-1); for (let index = this.size - 1; index >= 0; index--) { const entry = this.at(index); if (index === this.size - 1 && args.length === 1) { accumulator = entry; } else { accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]); } } return accumulator; } toSorted(compareFn) { const entries = [...this.entries()].sort(compareFn); return new _OrderedDict(entries); } toReversed() { const reversed = new _OrderedDict(); for (let index = this.size - 1; index >= 0; index--) { const key = this.keyAt(index); const element = this.get(key); reversed.set(key, element); } return reversed; } toSpliced(...args) { const entries = [...this.entries()]; entries.splice(...args); return new _OrderedDict(entries); } slice(start, end) { const result = new _OrderedDict(); let stop = this.size - 1; if (start === void 0) { return result; } if (start < 0) { start = start + this.size; } if (end !== void 0 && end > 0) { stop = end - 1; } for (let index = start; index <= stop; index++) { const key = this.keyAt(index); const element = this.get(key); result.set(key, element); } return result; } every(predicate, thisArg) { let index = 0; for (const entry of this) { if (!Reflect.apply(predicate, thisArg, [entry, index, this])) { return false; } index++; } return true; } some(predicate, thisArg) { let index = 0; for (const entry of this) { if (Reflect.apply(predicate, thisArg, [entry, index, this])) { return true; } index++; } return false; } }; function at(array, index) { if ("at" in Array.prototype) { return Array.prototype.at.call(array, index); } const actualIndex = toSafeIndex(array, index); return actualIndex === -1 ? void 0 : array[actualIndex]; } function toSafeIndex(array, index) { const length = array.length; const relativeIndex = toSafeInteger(index); const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex; return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex; } function toSafeInteger(number) { return number !== number || number === 0 ? 0 : Math.trunc(number); } // src/collection.tsx function createCollection2(name) { const PROVIDER_NAME = name + "CollectionProvider"; const [createCollectionContext, createCollectionScope] = (0,_radix_ui_react_context__WEBPACK_IMPORTED_MODULE_1__.createContextScope)(PROVIDER_NAME); const [CollectionContextProvider, useCollectionContext] = createCollectionContext( PROVIDER_NAME, { collectionElement: null, collectionRef: { current: null }, collectionRefObject: { current: null }, itemMap: new OrderedDict(), setItemMap: () => void 0 } ); const CollectionProvider = ({ state, ...props }) => { return state ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionInit, { ...props }); }; CollectionProvider.displayName = PROVIDER_NAME; const CollectionInit = (props) => { const state = useInitCollection(); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionProviderImpl, { ...props, state }); }; CollectionInit.displayName = PROVIDER_NAME + "Init"; const CollectionProviderImpl = (props) => { const { scope, children, state } = props; const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const [collectionElement, setCollectionElement] = react__WEBPACK_IMPORTED_MODULE_0__.useState( null ); const composeRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(ref, setCollectionElement); const [itemMap, setItemMap] = state; react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (!collectionElement) return; const observer = getChildListObserver(() => { }); observer.observe(collectionElement, { childList: true, subtree: true }); return () => { observer.disconnect(); }; }, [collectionElement]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)( CollectionContextProvider, { scope, itemMap, setItemMap, collectionRef: composeRefs, collectionRefObject: ref, collectionElement, children } ); }; CollectionProviderImpl.displayName = PROVIDER_NAME + "Impl"; const COLLECTION_SLOT_NAME = name + "CollectionSlot"; const CollectionSlotImpl = (0,_radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_3__.createSlot)(COLLECTION_SLOT_NAME); const CollectionSlot = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { scope, children } = props; const context = useCollectionContext(COLLECTION_SLOT_NAME, scope); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(forwardedRef, context.collectionRef); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionSlotImpl, { ref: composedRefs, children }); } ); CollectionSlot.displayName = COLLECTION_SLOT_NAME; const ITEM_SLOT_NAME = name + "CollectionItemSlot"; const ITEM_DATA_ATTR = "data-radix-collection-item"; const CollectionItemSlotImpl = (0,_radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_3__.createSlot)(ITEM_SLOT_NAME); const CollectionItemSlot = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { scope, children, ...itemData } = props; const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const [element, setElement] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(forwardedRef, ref, setElement); const context = useCollectionContext(ITEM_SLOT_NAME, scope); const { setItemMap } = context; const itemDataRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(itemData); if (!shallowEqual(itemDataRef.current, itemData)) { itemDataRef.current = itemData; } const memoizedItemData = itemDataRef.current; react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const itemData2 = memoizedItemData; setItemMap((map) => { if (!element) { return map; } if (!map.has(element)) { map.set(element, { ...itemData2, element }); return map.toSorted(sortByDocumentPosition); } return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition); }); return () => { setItemMap((map) => { if (!element || !map.has(element)) { return map; } map.delete(element); return new OrderedDict(map); }); }; }, [element, memoizedItemData, setItemMap]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: "" }, ref: composedRefs, children }); } ); CollectionItemSlot.displayName = ITEM_SLOT_NAME; function useInitCollection() { return react__WEBPACK_IMPORTED_MODULE_0__.useState(new OrderedDict()); } function useCollection(scope) { const { itemMap } = useCollectionContext(name + "CollectionConsumer", scope); return itemMap; } const functions = { createCollectionScope, useCollection, useInitCollection }; return [ { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot }, functions ]; } function shallowEqual(a, b) { if (a === b) return true; if (typeof a !== "object" || typeof b !== "object") return false; if (a == null || b == null) return false; const keysA = Object.keys(a); const keysB = Object.keys(b); if (keysA.length !== keysB.length) return false; for (const key of keysA) { if (!Object.prototype.hasOwnProperty.call(b, key)) return false; if (a[key] !== b[key]) return false; } return true; } function isElementPreceding(a, b) { return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING); } function sortByDocumentPosition(a, b) { return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1; } function getChildListObserver(callback) { const observer = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if (mutation.type === "childList") { callback(); return; } } }); return observer; } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs" /*!******************************************************************!*\ !*** ./node_modules/@radix-ui/react-compose-refs/dist/index.mjs ***! \******************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ composeRefs: () => (/* binding */ composeRefs), /* harmony export */ useComposedRefs: () => (/* binding */ useComposedRefs) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); // packages/react/compose-refs/src/compose-refs.tsx function setRef(ref, value) { if (typeof ref === "function") { return ref(value); } else if (ref !== null && ref !== void 0) { ref.current = value; } } function composeRefs(...refs) { return (node) => { let hasCleanup = false; const cleanups = refs.map((ref) => { const cleanup = setRef(ref, node); if (!hasCleanup && typeof cleanup == "function") { hasCleanup = true; } return cleanup; }); if (hasCleanup) { return () => { for (let i = 0; i < cleanups.length; i++) { const cleanup = cleanups[i]; if (typeof cleanup == "function") { cleanup(); } else { setRef(refs[i], null); } } }; } }; } function useComposedRefs(...refs) { return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(composeRefs(...refs), refs); } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-context/dist/index.mjs" /*!*************************************************************!*\ !*** ./node_modules/@radix-ui/react-context/dist/index.mjs ***! \*************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createContext: () => (/* binding */ createContext2), /* harmony export */ createContextScope: () => (/* binding */ createContextScope) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); // packages/react/context/src/create-context.tsx function createContext2(rootComponentName, defaultContext) { const Context = react__WEBPACK_IMPORTED_MODULE_0__.createContext(defaultContext); const Provider = (props) => { const { children, ...context } = props; const value = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => context, Object.values(context)); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Context.Provider, { value, children }); }; Provider.displayName = rootComponentName + "Provider"; function useContext2(consumerName) { const context = react__WEBPACK_IMPORTED_MODULE_0__.useContext(Context); if (context) return context; if (defaultContext !== void 0) return defaultContext; throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); } return [Provider, useContext2]; } function createContextScope(scopeName, createContextScopeDeps = []) { let defaultContexts = []; function createContext3(rootComponentName, defaultContext) { const BaseContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(defaultContext); const index = defaultContexts.length; defaultContexts = [...defaultContexts, defaultContext]; const Provider = (props) => { const { scope, children, ...context } = props; const Context = scope?.[scopeName]?.[index] || BaseContext; const value = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => context, Object.values(context)); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Context.Provider, { value, children }); }; Provider.displayName = rootComponentName + "Provider"; function useContext2(consumerName, scope) { const Context = scope?.[scopeName]?.[index] || BaseContext; const context = react__WEBPACK_IMPORTED_MODULE_0__.useContext(Context); if (context) return context; if (defaultContext !== void 0) return defaultContext; throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); } return [Provider, useContext2]; } const createScope = () => { const scopeContexts = defaultContexts.map((defaultContext) => { return react__WEBPACK_IMPORTED_MODULE_0__.createContext(defaultContext); }); return function useScope(scope) { const contexts = scope?.[scopeName] || scopeContexts; return react__WEBPACK_IMPORTED_MODULE_0__.useMemo( () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }), [scope, contexts] ); }; }; createScope.scopeName = scopeName; return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)]; } function composeContextScopes(...scopes) { const baseScope = scopes[0]; if (scopes.length === 1) return baseScope; const createScope = () => { const scopeHooks = scopes.map((createScope2) => ({ useScope: createScope2(), scopeName: createScope2.scopeName })); return function useComposedScopes(overrideScopes) { const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => { const scopeProps = useScope(overrideScopes); const currentScope = scopeProps[`__scope${scopeName}`]; return { ...nextScopes2, ...currentScope }; }, {}); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]); }; }; createScope.scopeName = baseScope.scopeName; return createScope; } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-direction/dist/index.mjs" /*!***************************************************************!*\ !*** ./node_modules/@radix-ui/react-direction/dist/index.mjs ***! \***************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ DirectionProvider: () => (/* binding */ DirectionProvider), /* harmony export */ Provider: () => (/* binding */ Provider), /* harmony export */ useDirection: () => (/* binding */ useDirection) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); // packages/react/direction/src/direction.tsx var DirectionContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(void 0); var DirectionProvider = (props) => { const { dir, children } = props; return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(DirectionContext.Provider, { value: dir, children }); }; function useDirection(localDir) { const globalDir = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DirectionContext); return localDir || globalDir || "ltr"; } var Provider = DirectionProvider; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs" /*!***********************************************************************!*\ !*** ./node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs ***! \***********************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Branch: () => (/* binding */ Branch), /* harmony export */ DismissableLayer: () => (/* binding */ DismissableLayer), /* harmony export */ DismissableLayerBranch: () => (/* binding */ DismissableLayerBranch), /* harmony export */ Root: () => (/* binding */ Root) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/primitive */ "./node_modules/@radix-ui/primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_escape_keydown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @radix-ui/react-use-escape-keydown */ "./node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/dismissable-layer.tsx var DISMISSABLE_LAYER_NAME = "DismissableLayer"; var CONTEXT_UPDATE = "dismissableLayer.update"; var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside"; var FOCUS_OUTSIDE = "dismissableLayer.focusOutside"; var originalBodyPointerEvents; var DismissableLayerContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext({ layers: /* @__PURE__ */ new Set(), layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(), branches: /* @__PURE__ */ new Set() }); var DismissableLayer = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { disableOutsidePointerEvents = false, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, onDismiss, ...layerProps } = props; const context = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DismissableLayerContext); const [node, setNode] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const ownerDocument = node?.ownerDocument ?? globalThis?.document; const [, force] = react__WEBPACK_IMPORTED_MODULE_0__.useState({}); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_3__.useComposedRefs)(forwardedRef, (node2) => setNode(node2)); const layers = Array.from(context.layers); const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); const index = node ? layers.indexOf(node) : -1; const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0; const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex; const pointerDownOutside = usePointerDownOutside((event) => { const target = event.target; const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target)); if (!isPointerEventsEnabled || isPointerDownOnBranch) return; onPointerDownOutside?.(event); onInteractOutside?.(event); if (!event.defaultPrevented) onDismiss?.(); }, ownerDocument); const focusOutside = useFocusOutside((event) => { const target = event.target; const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target)); if (isFocusInBranch) return; onFocusOutside?.(event); onInteractOutside?.(event); if (!event.defaultPrevented) onDismiss?.(); }, ownerDocument); (0,_radix_ui_react_use_escape_keydown__WEBPACK_IMPORTED_MODULE_5__.useEscapeKeydown)((event) => { const isHighestLayer = index === context.layers.size - 1; if (!isHighestLayer) return; onEscapeKeyDown?.(event); if (!event.defaultPrevented && onDismiss) { event.preventDefault(); onDismiss(); } }, ownerDocument); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (!node) return; if (disableOutsidePointerEvents) { if (context.layersWithOutsidePointerEventsDisabled.size === 0) { originalBodyPointerEvents = ownerDocument.body.style.pointerEvents; ownerDocument.body.style.pointerEvents = "none"; } context.layersWithOutsidePointerEventsDisabled.add(node); } context.layers.add(node); dispatchUpdate(); return () => { if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) { ownerDocument.body.style.pointerEvents = originalBodyPointerEvents; } }; }, [node, ownerDocument, disableOutsidePointerEvents, context]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { return () => { if (!node) return; context.layers.delete(node); context.layersWithOutsidePointerEventsDisabled.delete(node); dispatchUpdate(); }; }, [node, context]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const handleUpdate = () => force({}); document.addEventListener(CONTEXT_UPDATE, handleUpdate); return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate); }, []); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__.Primitive.div, { ...layerProps, ref: composedRefs, style: { pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0, ...props.style }, onFocusCapture: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onFocusCapture, focusOutside.onFocusCapture), onBlurCapture: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onBlurCapture, focusOutside.onBlurCapture), onPointerDownCapture: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)( props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture ) } ); } ); DismissableLayer.displayName = DISMISSABLE_LAYER_NAME; var BRANCH_NAME = "DismissableLayerBranch"; var DismissableLayerBranch = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const context = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DismissableLayerContext); const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_3__.useComposedRefs)(forwardedRef, ref); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const node = ref.current; if (node) { context.branches.add(node); return () => { context.branches.delete(node); }; } }, [context.branches]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__.Primitive.div, { ...props, ref: composedRefs }); }); DismissableLayerBranch.displayName = BRANCH_NAME; function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) { const handlePointerDownOutside = (0,_radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_4__.useCallbackRef)(onPointerDownOutside); const isPointerInsideReactTreeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); const handleClickRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(() => { }); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const handlePointerDown = (event) => { if (event.target && !isPointerInsideReactTreeRef.current) { let handleAndDispatchPointerDownOutsideEvent2 = function() { handleAndDispatchCustomEvent( POINTER_DOWN_OUTSIDE, handlePointerDownOutside, eventDetail, { discrete: true } ); }; var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2; const eventDetail = { originalEvent: event }; if (event.pointerType === "touch") { ownerDocument.removeEventListener("click", handleClickRef.current); handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2; ownerDocument.addEventListener("click", handleClickRef.current, { once: true }); } else { handleAndDispatchPointerDownOutsideEvent2(); } } else { ownerDocument.removeEventListener("click", handleClickRef.current); } isPointerInsideReactTreeRef.current = false; }; const timerId = window.setTimeout(() => { ownerDocument.addEventListener("pointerdown", handlePointerDown); }, 0); return () => { window.clearTimeout(timerId); ownerDocument.removeEventListener("pointerdown", handlePointerDown); ownerDocument.removeEventListener("click", handleClickRef.current); }; }, [ownerDocument, handlePointerDownOutside]); return { // ensures we check React component tree (not just DOM tree) onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true }; } function useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) { const handleFocusOutside = (0,_radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_4__.useCallbackRef)(onFocusOutside); const isFocusInsideReactTreeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const handleFocus = (event) => { if (event.target && !isFocusInsideReactTreeRef.current) { const eventDetail = { originalEvent: event }; handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, { discrete: false }); } }; ownerDocument.addEventListener("focusin", handleFocus); return () => ownerDocument.removeEventListener("focusin", handleFocus); }, [ownerDocument, handleFocusOutside]); return { onFocusCapture: () => isFocusInsideReactTreeRef.current = true, onBlurCapture: () => isFocusInsideReactTreeRef.current = false }; } function dispatchUpdate() { const event = new CustomEvent(CONTEXT_UPDATE); document.dispatchEvent(event); } function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) { const target = detail.originalEvent.target; const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail }); if (handler) target.addEventListener(name, handler, { once: true }); if (discrete) { (0,_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__.dispatchDiscreteCustomEvent)(target, event); } else { target.dispatchEvent(event); } } var Root = DismissableLayer; var Branch = DismissableLayerBranch; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-focus-guards/dist/index.mjs" /*!******************************************************************!*\ !*** ./node_modules/@radix-ui/react-focus-guards/dist/index.mjs ***! \******************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FocusGuards: () => (/* binding */ FocusGuards), /* harmony export */ Root: () => (/* binding */ FocusGuards), /* harmony export */ useFocusGuards: () => (/* binding */ useFocusGuards) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); "use client"; // src/focus-guards.tsx var count = 0; function FocusGuards(props) { useFocusGuards(); return props.children; } function useFocusGuards() { react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const edgeGuards = document.querySelectorAll("[data-radix-focus-guard]"); document.body.insertAdjacentElement("afterbegin", edgeGuards[0] ?? createFocusGuard()); document.body.insertAdjacentElement("beforeend", edgeGuards[1] ?? createFocusGuard()); count++; return () => { if (count === 1) { document.querySelectorAll("[data-radix-focus-guard]").forEach((node) => node.remove()); } count--; }; }, []); } function createFocusGuard() { const element = document.createElement("span"); element.setAttribute("data-radix-focus-guard", ""); element.tabIndex = 0; element.style.outline = "none"; element.style.opacity = "0"; element.style.position = "fixed"; element.style.pointerEvents = "none"; return element; } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-focus-scope/dist/index.mjs" /*!*****************************************************************!*\ !*** ./node_modules/@radix-ui/react-focus-scope/dist/index.mjs ***! \*****************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FocusScope: () => (/* binding */ FocusScope), /* harmony export */ Root: () => (/* binding */ Root) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/focus-scope.tsx var AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount"; var AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount"; var EVENT_OPTIONS = { bubbles: false, cancelable: true }; var FOCUS_SCOPE_NAME = "FocusScope"; var FocusScope = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { loop = false, trapped = false, onMountAutoFocus: onMountAutoFocusProp, onUnmountAutoFocus: onUnmountAutoFocusProp, ...scopeProps } = props; const [container, setContainer] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const onMountAutoFocus = (0,_radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_3__.useCallbackRef)(onMountAutoFocusProp); const onUnmountAutoFocus = (0,_radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_3__.useCallbackRef)(onUnmountAutoFocusProp); const lastFocusedElementRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_1__.useComposedRefs)(forwardedRef, (node) => setContainer(node)); const focusScope = react__WEBPACK_IMPORTED_MODULE_0__.useRef({ paused: false, pause() { this.paused = true; }, resume() { this.paused = false; } }).current; react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (trapped) { let handleFocusIn2 = function(event) { if (focusScope.paused || !container) return; const target = event.target; if (container.contains(target)) { lastFocusedElementRef.current = target; } else { focus(lastFocusedElementRef.current, { select: true }); } }, handleFocusOut2 = function(event) { if (focusScope.paused || !container) return; const relatedTarget = event.relatedTarget; if (relatedTarget === null) return; if (!container.contains(relatedTarget)) { focus(lastFocusedElementRef.current, { select: true }); } }, handleMutations2 = function(mutations) { const focusedElement = document.activeElement; if (focusedElement !== document.body) return; for (const mutation of mutations) { if (mutation.removedNodes.length > 0) focus(container); } }; var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2; document.addEventListener("focusin", handleFocusIn2); document.addEventListener("focusout", handleFocusOut2); const mutationObserver = new MutationObserver(handleMutations2); if (container) mutationObserver.observe(container, { childList: true, subtree: true }); return () => { document.removeEventListener("focusin", handleFocusIn2); document.removeEventListener("focusout", handleFocusOut2); mutationObserver.disconnect(); }; } }, [trapped, container, focusScope.paused]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (container) { focusScopesStack.add(focusScope); const previouslyFocusedElement = document.activeElement; const hasFocusedCandidate = container.contains(previouslyFocusedElement); if (!hasFocusedCandidate) { const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS); container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus); container.dispatchEvent(mountEvent); if (!mountEvent.defaultPrevented) { focusFirst(removeLinks(getTabbableCandidates(container)), { select: true }); if (document.activeElement === previouslyFocusedElement) { focus(container); } } } return () => { container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus); setTimeout(() => { const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS); container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus); container.dispatchEvent(unmountEvent); if (!unmountEvent.defaultPrevented) { focus(previouslyFocusedElement ?? document.body, { select: true }); } container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus); focusScopesStack.remove(focusScope); }, 0); }; } }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]); const handleKeyDown = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (event) => { if (!loop && !trapped) return; if (focusScope.paused) return; const isTabKey = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey; const focusedElement = document.activeElement; if (isTabKey && focusedElement) { const container2 = event.currentTarget; const [first, last] = getTabbableEdges(container2); const hasTabbableElementsInside = first && last; if (!hasTabbableElementsInside) { if (focusedElement === container2) event.preventDefault(); } else { if (!event.shiftKey && focusedElement === last) { event.preventDefault(); if (loop) focus(first, { select: true }); } else if (event.shiftKey && focusedElement === first) { event.preventDefault(); if (loop) focus(last, { select: true }); } } } }, [loop, trapped, focusScope.paused] ); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__.Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown }); }); FocusScope.displayName = FOCUS_SCOPE_NAME; function focusFirst(candidates, { select = false } = {}) { const previouslyFocusedElement = document.activeElement; for (const candidate of candidates) { focus(candidate, { select }); if (document.activeElement !== previouslyFocusedElement) return; } } function getTabbableEdges(container) { const candidates = getTabbableCandidates(container); const first = findVisible(candidates, container); const last = findVisible(candidates.reverse(), container); return [first, last]; } function getTabbableCandidates(container) { const nodes = []; const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, { acceptNode: (node) => { const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden"; if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP; return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; } }); while (walker.nextNode()) nodes.push(walker.currentNode); return nodes; } function findVisible(elements, container) { for (const element of elements) { if (!isHidden(element, { upTo: container })) return element; } } function isHidden(node, { upTo }) { if (getComputedStyle(node).visibility === "hidden") return true; while (node) { if (upTo !== void 0 && node === upTo) return false; if (getComputedStyle(node).display === "none") return true; node = node.parentElement; } return false; } function isSelectableInput(element) { return element instanceof HTMLInputElement && "select" in element; } function focus(element, { select = false } = {}) { if (element && element.focus) { const previouslyFocusedElement = document.activeElement; element.focus({ preventScroll: true }); if (element !== previouslyFocusedElement && isSelectableInput(element) && select) element.select(); } } var focusScopesStack = createFocusScopesStack(); function createFocusScopesStack() { let stack = []; return { add(focusScope) { const activeFocusScope = stack[0]; if (focusScope !== activeFocusScope) { activeFocusScope?.pause(); } stack = arrayRemove(stack, focusScope); stack.unshift(focusScope); }, remove(focusScope) { stack = arrayRemove(stack, focusScope); stack[0]?.resume(); } }; } function arrayRemove(array, item) { const updatedArray = [...array]; const index = updatedArray.indexOf(item); if (index !== -1) { updatedArray.splice(index, 1); } return updatedArray; } function removeLinks(items) { return items.filter((item) => item.tagName !== "A"); } var Root = FocusScope; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-id/dist/index.mjs" /*!********************************************************!*\ !*** ./node_modules/@radix-ui/react-id/dist/index.mjs ***! \********************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useId: () => (/* binding */ useId) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); // packages/react/id/src/id.tsx var useReactId = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))[" useId ".trim().toString()] || (() => void 0); var count = 0; function useId(deterministicId) { const [id, setId] = react__WEBPACK_IMPORTED_MODULE_0__.useState(useReactId()); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => { if (!deterministicId) setId((reactId) => reactId ?? String(count++)); }, [deterministicId]); return deterministicId || (id ? `radix-${id}` : ""); } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-popper/dist/index.mjs" /*!************************************************************!*\ !*** ./node_modules/@radix-ui/react-popper/dist/index.mjs ***! \************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ALIGN_OPTIONS: () => (/* binding */ ALIGN_OPTIONS), /* harmony export */ Anchor: () => (/* binding */ Anchor), /* harmony export */ Arrow: () => (/* binding */ Arrow), /* harmony export */ Content: () => (/* binding */ Content), /* harmony export */ Popper: () => (/* binding */ Popper), /* harmony export */ PopperAnchor: () => (/* binding */ PopperAnchor), /* harmony export */ PopperArrow: () => (/* binding */ PopperArrow), /* harmony export */ PopperContent: () => (/* binding */ PopperContent), /* harmony export */ Root: () => (/* binding */ Root2), /* harmony export */ SIDE_OPTIONS: () => (/* binding */ SIDE_OPTIONS), /* harmony export */ createPopperScope: () => (/* binding */ createPopperScope) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/react-dom */ "./node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs"); /* harmony import */ var _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @floating-ui/react-dom */ "./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"); /* harmony import */ var _radix_ui_react_arrow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-arrow */ "./node_modules/@radix-ui/react-arrow/dist/index.mjs"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @radix-ui/react-context */ "./node_modules/@radix-ui/react-context/dist/index.mjs"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_size__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @radix-ui/react-use-size */ "./node_modules/@radix-ui/react-use-size/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/popper.tsx var SIDE_OPTIONS = ["top", "right", "bottom", "left"]; var ALIGN_OPTIONS = ["start", "center", "end"]; var POPPER_NAME = "Popper"; var [createPopperContext, createPopperScope] = (0,_radix_ui_react_context__WEBPACK_IMPORTED_MODULE_5__.createContextScope)(POPPER_NAME); var [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME); var Popper = (props) => { const { __scopePopper, children } = props; const [anchor, setAnchor] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children }); }; Popper.displayName = POPPER_NAME; var ANCHOR_NAME = "PopperAnchor"; var PopperAnchor = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopePopper, virtualRef, ...anchorProps } = props; const context = usePopperContext(ANCHOR_NAME, __scopePopper); const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_4__.useComposedRefs)(forwardedRef, ref); const anchorRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const previousAnchor = anchorRef.current; anchorRef.current = virtualRef?.current || ref.current; if (previousAnchor !== anchorRef.current) { context.onAnchorChange(anchorRef.current); } }); return virtualRef ? null : /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_6__.Primitive.div, { ...anchorProps, ref: composedRefs }); } ); PopperAnchor.displayName = ANCHOR_NAME; var CONTENT_NAME = "PopperContent"; var [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME); var PopperContent = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopePopper, side = "bottom", sideOffset = 0, align = "center", alignOffset = 0, arrowPadding = 0, avoidCollisions = true, collisionBoundary = [], collisionPadding: collisionPaddingProp = 0, sticky = "partial", hideWhenDetached = false, updatePositionStrategy = "optimized", onPlaced, ...contentProps } = props; const context = usePopperContext(CONTENT_NAME, __scopePopper); const [content, setContent] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_4__.useComposedRefs)(forwardedRef, (node) => setContent(node)); const [arrow, setArrow] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const arrowSize = (0,_radix_ui_react_use_size__WEBPACK_IMPORTED_MODULE_9__.useSize)(arrow); const arrowWidth = arrowSize?.width ?? 0; const arrowHeight = arrowSize?.height ?? 0; const desiredPlacement = side + (align !== "center" ? "-" + align : ""); const collisionPadding = typeof collisionPaddingProp === "number" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp }; const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary]; const hasExplicitBoundaries = boundary.length > 0; const detectOverflowOptions = { padding: collisionPadding, boundary: boundary.filter(isNotNull), // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries altBoundary: hasExplicitBoundaries }; const { refs, floatingStyles, placement, isPositioned, middlewareData } = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.useFloating)({ // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues strategy: "fixed", placement: desiredPlacement, whileElementsMounted: (...args) => { const cleanup = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.autoUpdate)(...args, { animationFrame: updatePositionStrategy === "always" }); return cleanup; }, elements: { reference: context.anchor }, middleware: [ (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.offset)({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }), avoidCollisions && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.shift)({ mainAxis: true, crossAxis: false, limiter: sticky === "partial" ? (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.limitShift)() : void 0, ...detectOverflowOptions }), avoidCollisions && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.flip)({ ...detectOverflowOptions }), (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.size)({ ...detectOverflowOptions, apply: ({ elements, rects, availableWidth, availableHeight }) => { const { width: anchorWidth, height: anchorHeight } = rects.reference; const contentStyle = elements.floating.style; contentStyle.setProperty("--radix-popper-available-width", `${availableWidth}px`); contentStyle.setProperty("--radix-popper-available-height", `${availableHeight}px`); contentStyle.setProperty("--radix-popper-anchor-width", `${anchorWidth}px`); contentStyle.setProperty("--radix-popper-anchor-height", `${anchorHeight}px`); } }), arrow && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.arrow)({ element: arrow, padding: arrowPadding }), transformOrigin({ arrowWidth, arrowHeight }), hideWhenDetached && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.hide)({ strategy: "referenceHidden", ...detectOverflowOptions }) ] }); const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement); const handlePlaced = (0,_radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_7__.useCallbackRef)(onPlaced); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_8__.useLayoutEffect)(() => { if (isPositioned) { handlePlaced?.(); } }, [isPositioned, handlePlaced]); const arrowX = middlewareData.arrow?.x; const arrowY = middlewareData.arrow?.y; const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0; const [contentZIndex, setContentZIndex] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_8__.useLayoutEffect)(() => { if (content) setContentZIndex(window.getComputedStyle(content).zIndex); }, [content]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)( "div", { ref: refs.setFloating, "data-radix-popper-content-wrapper": "", style: { ...floatingStyles, transform: isPositioned ? floatingStyles.transform : "translate(0, -200%)", // keep off the page when measuring minWidth: "max-content", zIndex: contentZIndex, ["--radix-popper-transform-origin"]: [ middlewareData.transformOrigin?.x, middlewareData.transformOrigin?.y ].join(" "), // hide the content if using the hide middleware and should be hidden // set visibility to hidden and disable pointer events so the UI behaves // as if the PopperContent isn't there at all ...middlewareData.hide?.referenceHidden && { visibility: "hidden", pointerEvents: "none" } }, dir: props.dir, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)( PopperContentProvider, { scope: __scopePopper, placedSide, onArrowChange: setArrow, arrowX, arrowY, shouldHideArrow: cannotCenterArrow, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_6__.Primitive.div, { "data-side": placedSide, "data-align": placedAlign, ...contentProps, ref: composedRefs, style: { ...contentProps.style, // if the PopperContent hasn't been placed yet (not all measurements done) // we prevent animations so that users's animation don't kick in too early referring wrong sides animation: !isPositioned ? "none" : void 0 } } ) } ) } ); } ); PopperContent.displayName = CONTENT_NAME; var ARROW_NAME = "PopperArrow"; var OPPOSITE_SIDE = { top: "bottom", right: "left", bottom: "top", left: "right" }; var PopperArrow = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function PopperArrow2(props, forwardedRef) { const { __scopePopper, ...arrowProps } = props; const contentContext = useContentContext(ARROW_NAME, __scopePopper); const baseSide = OPPOSITE_SIDE[contentContext.placedSide]; return ( // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`) // doesn't report size as we'd expect on SVG elements. // it reports their bounding box which is effectively the largest path inside the SVG. /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)( "span", { ref: contentContext.onArrowChange, style: { position: "absolute", left: contentContext.arrowX, top: contentContext.arrowY, [baseSide]: 0, transformOrigin: { top: "", right: "0 0", bottom: "center 0", left: "100% 0" }[contentContext.placedSide], transform: { top: "translateY(100%)", right: "translateY(50%) rotate(90deg) translateX(-50%)", bottom: `rotate(180deg)`, left: "translateY(50%) rotate(-90deg) translateX(50%)" }[contentContext.placedSide], visibility: contentContext.shouldHideArrow ? "hidden" : void 0 }, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)( _radix_ui_react_arrow__WEBPACK_IMPORTED_MODULE_3__.Root, { ...arrowProps, ref: forwardedRef, style: { ...arrowProps.style, // ensures the element can be measured correctly (mostly for if SVG) display: "block" } } ) } ) ); }); PopperArrow.displayName = ARROW_NAME; function isNotNull(value) { return value !== null; } var transformOrigin = (options) => ({ name: "transformOrigin", options, fn(data) { const { placement, rects, middlewareData } = data; const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0; const isArrowHidden = cannotCenterArrow; const arrowWidth = isArrowHidden ? 0 : options.arrowWidth; const arrowHeight = isArrowHidden ? 0 : options.arrowHeight; const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement); const noArrowAlign = { start: "0%", center: "50%", end: "100%" }[placedAlign]; const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2; const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2; let x = ""; let y = ""; if (placedSide === "bottom") { x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`; y = `${-arrowHeight}px`; } else if (placedSide === "top") { x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`; y = `${rects.floating.height + arrowHeight}px`; } else if (placedSide === "right") { x = `${-arrowHeight}px`; y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`; } else if (placedSide === "left") { x = `${rects.floating.width + arrowHeight}px`; y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`; } return { data: { x, y } }; } }); function getSideAndAlignFromPlacement(placement) { const [side, align = "center"] = placement.split("-"); return [side, align]; } var Root2 = Popper; var Anchor = PopperAnchor; var Content = PopperContent; var Arrow = PopperArrow; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs" /*!****************************************************************************************************************!*\ !*** ./node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs ***! \****************************************************************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ arrow: () => (/* binding */ arrow), /* harmony export */ autoPlacement: () => (/* binding */ autoPlacement), /* harmony export */ autoUpdate: () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.autoUpdate), /* harmony export */ computePosition: () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.computePosition), /* harmony export */ detectOverflow: () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.detectOverflow), /* harmony export */ flip: () => (/* binding */ flip), /* harmony export */ getOverflowAncestors: () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_1__.getOverflowAncestors), /* harmony export */ hide: () => (/* binding */ hide), /* harmony export */ inline: () => (/* binding */ inline), /* harmony export */ limitShift: () => (/* binding */ limitShift), /* harmony export */ offset: () => (/* binding */ offset), /* harmony export */ platform: () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.platform), /* harmony export */ shift: () => (/* binding */ shift), /* harmony export */ size: () => (/* binding */ size), /* harmony export */ useFloating: () => (/* binding */ useFloating) /* harmony export */ }); /* harmony import */ var _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/dom */ "./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"); /* harmony import */ var _floating_ui_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/dom */ "./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ "react-dom"); var isClient = typeof document !== 'undefined'; var noop = function noop() {}; var index = isClient ? react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect : noop; // Fork of `fast-deep-equal` that only does the comparisons we need and compares // functions function deepEqual(a, b) { if (a === b) { return true; } if (typeof a !== typeof b) { return false; } if (typeof a === 'function' && a.toString() === b.toString()) { return true; } let length; let i; let keys; if (a && b && typeof a === 'object') { if (Array.isArray(a)) { length = a.length; if (length !== b.length) return false; for (i = length; i-- !== 0;) { if (!deepEqual(a[i], b[i])) { return false; } } return true; } keys = Object.keys(a); length = keys.length; if (length !== Object.keys(b).length) { return false; } for (i = length; i-- !== 0;) { if (!{}.hasOwnProperty.call(b, keys[i])) { return false; } } for (i = length; i-- !== 0;) { const key = keys[i]; if (key === '_owner' && a.$$typeof) { continue; } if (!deepEqual(a[key], b[key])) { return false; } } return true; } return a !== a && b !== b; } function getDPR(element) { if (typeof window === 'undefined') { return 1; } const win = element.ownerDocument.defaultView || window; return win.devicePixelRatio || 1; } function roundByDPR(element, value) { const dpr = getDPR(element); return Math.round(value * dpr) / dpr; } function useLatestRef(value) { const ref = react__WEBPACK_IMPORTED_MODULE_2__.useRef(value); index(() => { ref.current = value; }); return ref; } /** * Provides data to position a floating element. * @see https://floating-ui.com/docs/useFloating */ function useFloating(options) { if (options === void 0) { options = {}; } const { placement = 'bottom', strategy = 'absolute', middleware = [], platform, elements: { reference: externalReference, floating: externalFloating } = {}, transform = true, whileElementsMounted, open } = options; const [data, setData] = react__WEBPACK_IMPORTED_MODULE_2__.useState({ x: 0, y: 0, strategy, placement, middlewareData: {}, isPositioned: false }); const [latestMiddleware, setLatestMiddleware] = react__WEBPACK_IMPORTED_MODULE_2__.useState(middleware); if (!deepEqual(latestMiddleware, middleware)) { setLatestMiddleware(middleware); } const [_reference, _setReference] = react__WEBPACK_IMPORTED_MODULE_2__.useState(null); const [_floating, _setFloating] = react__WEBPACK_IMPORTED_MODULE_2__.useState(null); const setReference = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(node => { if (node !== referenceRef.current) { referenceRef.current = node; _setReference(node); } }, []); const setFloating = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(node => { if (node !== floatingRef.current) { floatingRef.current = node; _setFloating(node); } }, []); const referenceEl = externalReference || _reference; const floatingEl = externalFloating || _floating; const referenceRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null); const floatingRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null); const dataRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(data); const hasWhileElementsMounted = whileElementsMounted != null; const whileElementsMountedRef = useLatestRef(whileElementsMounted); const platformRef = useLatestRef(platform); const openRef = useLatestRef(open); const update = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => { if (!referenceRef.current || !floatingRef.current) { return; } const config = { placement, strategy, middleware: latestMiddleware }; if (platformRef.current) { config.platform = platformRef.current; } (0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.computePosition)(referenceRef.current, floatingRef.current, config).then(data => { const fullData = { ...data, // The floating element's position may be recomputed while it's closed // but still mounted (such as when transitioning out). To ensure // `isPositioned` will be `false` initially on the next open, avoid // setting it to `true` when `open === false` (must be specified). isPositioned: openRef.current !== false }; if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { dataRef.current = fullData; react_dom__WEBPACK_IMPORTED_MODULE_3__.flushSync(() => { setData(fullData); }); } }); }, [latestMiddleware, placement, strategy, platformRef, openRef]); index(() => { if (open === false && dataRef.current.isPositioned) { dataRef.current.isPositioned = false; setData(data => ({ ...data, isPositioned: false })); } }, [open]); const isMountedRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(false); index(() => { isMountedRef.current = true; return () => { isMountedRef.current = false; }; }, []); index(() => { if (referenceEl) referenceRef.current = referenceEl; if (floatingEl) floatingRef.current = floatingEl; if (referenceEl && floatingEl) { if (whileElementsMountedRef.current) { return whileElementsMountedRef.current(referenceEl, floatingEl, update); } update(); } }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]); const refs = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(() => ({ reference: referenceRef, floating: floatingRef, setReference, setFloating }), [setReference, setFloating]); const elements = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(() => ({ reference: referenceEl, floating: floatingEl }), [referenceEl, floatingEl]); const floatingStyles = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(() => { const initialStyles = { position: strategy, left: 0, top: 0 }; if (!elements.floating) { return initialStyles; } const x = roundByDPR(elements.floating, data.x); const y = roundByDPR(elements.floating, data.y); if (transform) { return { ...initialStyles, transform: "translate(" + x + "px, " + y + "px)", ...(getDPR(elements.floating) >= 1.5 && { willChange: 'transform' }) }; } return { position: strategy, left: x, top: y }; }, [strategy, transform, elements.floating, data.x, data.y]); return react__WEBPACK_IMPORTED_MODULE_2__.useMemo(() => ({ ...data, update, refs, elements, floatingStyles }), [data, update, refs, elements, floatingStyles]); } /** * Provides data to position an inner element of the floating element so that it * appears centered to the reference element. * This wraps the core `arrow` middleware to allow React refs as the element. * @see https://floating-ui.com/docs/arrow */ const arrow$1 = options => { function isRef(value) { return {}.hasOwnProperty.call(value, 'current'); } return { name: 'arrow', options, fn(state) { const { element, padding } = typeof options === 'function' ? options(state) : options; if (element && isRef(element)) { if (element.current != null) { return (0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.arrow)({ element: element.current, padding }).fn(state); } return {}; } if (element) { return (0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.arrow)({ element, padding }).fn(state); } return {}; } }; }; /** * Modifies the placement by translating the floating element along the * specified axes. * A number (shorthand for `mainAxis` or distance), or an axes configuration * object may be passed. * @see https://floating-ui.com/docs/offset */ const offset = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.offset)(options), options: [options, deps] }); /** * Optimizes the visibility of the floating element by shifting it in order to * keep it in view when it will overflow the clipping boundary. * @see https://floating-ui.com/docs/shift */ const shift = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.shift)(options), options: [options, deps] }); /** * Built-in `limiter` that will stop `shift()` at a certain point. */ const limitShift = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.limitShift)(options), options: [options, deps] }); /** * Optimizes the visibility of the floating element by flipping the `placement` * in order to keep it in view when the preferred placement(s) will overflow the * clipping boundary. Alternative to `autoPlacement`. * @see https://floating-ui.com/docs/flip */ const flip = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.flip)(options), options: [options, deps] }); /** * Provides data that allows you to change the size of the floating element — * for instance, prevent it from overflowing the clipping boundary or match the * width of the reference element. * @see https://floating-ui.com/docs/size */ const size = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.size)(options), options: [options, deps] }); /** * Optimizes the visibility of the floating element by choosing the placement * that has the most space available automatically, without needing to specify a * preferred placement. Alternative to `flip`. * @see https://floating-ui.com/docs/autoPlacement */ const autoPlacement = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.autoPlacement)(options), options: [options, deps] }); /** * Provides data to hide the floating element in applicable situations, such as * when it is not in the same clipping context as the reference element. * @see https://floating-ui.com/docs/hide */ const hide = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.hide)(options), options: [options, deps] }); /** * Provides improved positioning for inline reference elements that can span * over multiple lines, such as hyperlinks or range selections. * @see https://floating-ui.com/docs/inline */ const inline = (options, deps) => ({ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.inline)(options), options: [options, deps] }); /** * Provides data to position an inner element of the floating element so that it * appears centered to the reference element. * This wraps the core `arrow` middleware to allow React refs as the element. * @see https://floating-ui.com/docs/arrow */ const arrow = (options, deps) => ({ ...arrow$1(options), options: [options, deps] }); /***/ }, /***/ "./node_modules/@radix-ui/react-portal/dist/index.mjs" /*!************************************************************!*\ !*** ./node_modules/@radix-ui/react-portal/dist/index.mjs ***! \************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Portal: () => (/* binding */ Portal), /* harmony export */ Root: () => (/* binding */ Root) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/portal.tsx var PORTAL_NAME = "Portal"; var Portal = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { container: containerProp, ...portalProps } = props; const [mounted, setMounted] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_3__.useLayoutEffect)(() => setMounted(true), []); const container = containerProp || mounted && globalThis?.document?.body; return container ? react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal(/* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__.Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null; }); Portal.displayName = PORTAL_NAME; var Root = Portal; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-presence/dist/index.mjs" /*!**************************************************************!*\ !*** ./node_modules/@radix-ui/react-presence/dist/index.mjs ***! \**************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Presence: () => (/* binding */ Presence), /* harmony export */ Root: () => (/* binding */ Root) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); "use client"; // src/presence.tsx // src/use-state-machine.tsx function useStateMachine(initialState, machine) { return react__WEBPACK_IMPORTED_MODULE_0__.useReducer((state, event) => { const nextState = machine[state][event]; return nextState ?? state; }, initialState); } // src/presence.tsx var Presence = (props) => { const { present, children } = props; const presence = usePresence(present); const child = typeof children === "function" ? children({ present: presence.isPresent }) : react__WEBPACK_IMPORTED_MODULE_0__.Children.only(children); const ref = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_1__.useComposedRefs)(presence.ref, getElementRef(child)); const forceMount = typeof children === "function"; return forceMount || presence.isPresent ? react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(child, { ref }) : null; }; Presence.displayName = "Presence"; function usePresence(present) { const [node, setNode] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); const stylesRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const prevPresentRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(present); const prevAnimationNameRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef("none"); const initialState = present ? "mounted" : "unmounted"; const [state, send] = useStateMachine(initialState, { mounted: { UNMOUNT: "unmounted", ANIMATION_OUT: "unmountSuspended" }, unmountSuspended: { MOUNT: "mounted", ANIMATION_END: "unmounted" }, unmounted: { MOUNT: "mounted" } }); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const currentAnimationName = getAnimationName(stylesRef.current); prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none"; }, [state]); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => { const styles = stylesRef.current; const wasPresent = prevPresentRef.current; const hasPresentChanged = wasPresent !== present; if (hasPresentChanged) { const prevAnimationName = prevAnimationNameRef.current; const currentAnimationName = getAnimationName(styles); if (present) { send("MOUNT"); } else if (currentAnimationName === "none" || styles?.display === "none") { send("UNMOUNT"); } else { const isAnimating = prevAnimationName !== currentAnimationName; if (wasPresent && isAnimating) { send("ANIMATION_OUT"); } else { send("UNMOUNT"); } } prevPresentRef.current = present; } }, [present, send]); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => { if (node) { let timeoutId; const ownerWindow = node.ownerDocument.defaultView ?? window; const handleAnimationEnd = (event) => { const currentAnimationName = getAnimationName(stylesRef.current); const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName)); if (event.target === node && isCurrentAnimation) { send("ANIMATION_END"); if (!prevPresentRef.current) { const currentFillMode = node.style.animationFillMode; node.style.animationFillMode = "forwards"; timeoutId = ownerWindow.setTimeout(() => { if (node.style.animationFillMode === "forwards") { node.style.animationFillMode = currentFillMode; } }); } } }; const handleAnimationStart = (event) => { if (event.target === node) { prevAnimationNameRef.current = getAnimationName(stylesRef.current); } }; node.addEventListener("animationstart", handleAnimationStart); node.addEventListener("animationcancel", handleAnimationEnd); node.addEventListener("animationend", handleAnimationEnd); return () => { ownerWindow.clearTimeout(timeoutId); node.removeEventListener("animationstart", handleAnimationStart); node.removeEventListener("animationcancel", handleAnimationEnd); node.removeEventListener("animationend", handleAnimationEnd); }; } else { send("ANIMATION_END"); } }, [node, send]); return { isPresent: ["mounted", "unmountSuspended"].includes(state), ref: react__WEBPACK_IMPORTED_MODULE_0__.useCallback((node2) => { stylesRef.current = node2 ? getComputedStyle(node2) : null; setNode(node2); }, []) }; } function getAnimationName(styles) { return styles?.animationName || "none"; } function getElementRef(element) { let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; if (mayWarn) { return element.ref; } getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; if (mayWarn) { return element.props.ref; } return element.props.ref || element.ref; } var Root = Presence; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-primitive/dist/index.mjs" /*!***************************************************************!*\ !*** ./node_modules/@radix-ui/react-primitive/dist/index.mjs ***! \***************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Primitive: () => (/* binding */ Primitive), /* harmony export */ Root: () => (/* binding */ Root), /* harmony export */ dispatchDiscreteCustomEvent: () => (/* binding */ dispatchDiscreteCustomEvent) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom"); /* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-slot */ "./node_modules/@radix-ui/react-slot/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); // src/primitive.tsx var NODES = [ "a", "button", "div", "form", "h2", "h3", "img", "input", "label", "li", "nav", "ol", "p", "select", "span", "svg", "ul" ]; var Primitive = NODES.reduce((primitive, node) => { const Slot = (0,_radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_2__.createSlot)(`Primitive.${node}`); const Node = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { asChild, ...primitiveProps } = props; const Comp = asChild ? Slot : node; if (typeof window !== "undefined") { window[Symbol.for("radix-ui")] = true; } return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Comp, { ...primitiveProps, ref: forwardedRef }); }); Node.displayName = `Primitive.${node}`; return { ...primitive, [node]: Node }; }, {}); function dispatchDiscreteCustomEvent(target, event) { if (target) react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync(() => target.dispatchEvent(event)); } var Root = Primitive; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-select/dist/index.mjs" /*!************************************************************!*\ !*** ./node_modules/@radix-ui/react-select/dist/index.mjs ***! \************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Arrow: () => (/* binding */ Arrow2), /* harmony export */ Content: () => (/* binding */ Content2), /* harmony export */ Group: () => (/* binding */ Group), /* harmony export */ Icon: () => (/* binding */ Icon), /* harmony export */ Item: () => (/* binding */ Item), /* harmony export */ ItemIndicator: () => (/* binding */ ItemIndicator), /* harmony export */ ItemText: () => (/* binding */ ItemText), /* harmony export */ Label: () => (/* binding */ Label), /* harmony export */ Portal: () => (/* binding */ Portal), /* harmony export */ Root: () => (/* binding */ Root2), /* harmony export */ ScrollDownButton: () => (/* binding */ ScrollDownButton), /* harmony export */ ScrollUpButton: () => (/* binding */ ScrollUpButton), /* harmony export */ Select: () => (/* binding */ Select), /* harmony export */ SelectArrow: () => (/* binding */ SelectArrow), /* harmony export */ SelectContent: () => (/* binding */ SelectContent), /* harmony export */ SelectGroup: () => (/* binding */ SelectGroup), /* harmony export */ SelectIcon: () => (/* binding */ SelectIcon), /* harmony export */ SelectItem: () => (/* binding */ SelectItem), /* harmony export */ SelectItemIndicator: () => (/* binding */ SelectItemIndicator), /* harmony export */ SelectItemText: () => (/* binding */ SelectItemText), /* harmony export */ SelectLabel: () => (/* binding */ SelectLabel), /* harmony export */ SelectPortal: () => (/* binding */ SelectPortal), /* harmony export */ SelectScrollDownButton: () => (/* binding */ SelectScrollDownButton), /* harmony export */ SelectScrollUpButton: () => (/* binding */ SelectScrollUpButton), /* harmony export */ SelectSeparator: () => (/* binding */ SelectSeparator), /* harmony export */ SelectTrigger: () => (/* binding */ SelectTrigger), /* harmony export */ SelectValue: () => (/* binding */ SelectValue), /* harmony export */ SelectViewport: () => (/* binding */ SelectViewport), /* harmony export */ Separator: () => (/* binding */ Separator), /* harmony export */ Trigger: () => (/* binding */ Trigger), /* harmony export */ Value: () => (/* binding */ Value), /* harmony export */ Viewport: () => (/* binding */ Viewport), /* harmony export */ createSelectScope: () => (/* binding */ createSelectScope) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom"); /* harmony import */ var _radix_ui_number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/number */ "./node_modules/@radix-ui/number/dist/index.mjs"); /* harmony import */ var _radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/primitive */ "./node_modules/@radix-ui/primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_collection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-collection */ "./node_modules/@radix-ui/react-collection/dist/index.mjs"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @radix-ui/react-context */ "./node_modules/@radix-ui/react-context/dist/index.mjs"); /* harmony import */ var _radix_ui_react_direction__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @radix-ui/react-direction */ "./node_modules/@radix-ui/react-direction/dist/index.mjs"); /* harmony import */ var _radix_ui_react_dismissable_layer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @radix-ui/react-dismissable-layer */ "./node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs"); /* harmony import */ var _radix_ui_react_focus_guards__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @radix-ui/react-focus-guards */ "./node_modules/@radix-ui/react-focus-guards/dist/index.mjs"); /* harmony import */ var _radix_ui_react_focus_scope__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @radix-ui/react-focus-scope */ "./node_modules/@radix-ui/react-focus-scope/dist/index.mjs"); /* harmony import */ var _radix_ui_react_id__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @radix-ui/react-id */ "./node_modules/@radix-ui/react-id/dist/index.mjs"); /* harmony import */ var _radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @radix-ui/react-popper */ "./node_modules/@radix-ui/react-popper/dist/index.mjs"); /* harmony import */ var _radix_ui_react_portal__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @radix-ui/react-portal */ "./node_modules/@radix-ui/react-portal/dist/index.mjs"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @radix-ui/react-slot */ "./node_modules/@radix-ui/react-slot/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_controllable_state__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @radix-ui/react-use-controllable-state */ "./node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_previous__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @radix-ui/react-use-previous */ "./node_modules/@radix-ui/react-use-previous/dist/index.mjs"); /* harmony import */ var _radix_ui_react_visually_hidden__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @radix-ui/react-visually-hidden */ "./node_modules/@radix-ui/react-visually-hidden/dist/index.mjs"); /* harmony import */ var aria_hidden__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! aria-hidden */ "./node_modules/aria-hidden/dist/es2015/index.js"); /* harmony import */ var react_remove_scroll__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! react-remove-scroll */ "./node_modules/react-remove-scroll/dist/es2015/Combination.js"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/select.tsx var OPEN_KEYS = [" ", "Enter", "ArrowUp", "ArrowDown"]; var SELECTION_KEYS = [" ", "Enter"]; var SELECT_NAME = "Select"; var [Collection, useCollection, createCollectionScope] = (0,_radix_ui_react_collection__WEBPACK_IMPORTED_MODULE_4__.createCollection)(SELECT_NAME); var [createSelectContext, createSelectScope] = (0,_radix_ui_react_context__WEBPACK_IMPORTED_MODULE_6__.createContextScope)(SELECT_NAME, [ createCollectionScope, _radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_12__.createPopperScope ]); var usePopperScope = (0,_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_12__.createPopperScope)(); var [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME); var [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME); var Select = (props) => { const { __scopeSelect, children, open: openProp, defaultOpen, onOpenChange, value: valueProp, defaultValue, onValueChange, dir, name, autoComplete, disabled, required, form } = props; const popperScope = usePopperScope(__scopeSelect); const [trigger, setTrigger] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const [valueNode, setValueNode] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const [valueNodeHasChildren, setValueNodeHasChildren] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false); const direction = (0,_radix_ui_react_direction__WEBPACK_IMPORTED_MODULE_7__.useDirection)(dir); const [open, setOpen] = (0,_radix_ui_react_use_controllable_state__WEBPACK_IMPORTED_MODULE_17__.useControllableState)({ prop: openProp, defaultProp: defaultOpen ?? false, onChange: onOpenChange, caller: SELECT_NAME }); const [value, setValue] = (0,_radix_ui_react_use_controllable_state__WEBPACK_IMPORTED_MODULE_17__.useControllableState)({ prop: valueProp, defaultProp: defaultValue, onChange: onValueChange, caller: SELECT_NAME }); const triggerPointerDownPosRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const isFormControl = trigger ? form || !!trigger.closest("form") : true; const [nativeOptionsSet, setNativeOptionsSet] = react__WEBPACK_IMPORTED_MODULE_0__.useState(/* @__PURE__ */ new Set()); const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";"); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_12__.Root, { ...popperScope, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)( SelectProvider, { required, scope: __scopeSelect, trigger, onTriggerChange: setTrigger, valueNode, onValueNodeChange: setValueNode, valueNodeHasChildren, onValueNodeHasChildrenChange: setValueNodeHasChildren, contentId: (0,_radix_ui_react_id__WEBPACK_IMPORTED_MODULE_11__.useId)(), value, onValueChange: setValue, open, onOpenChange: setOpen, dir: direction, triggerPointerDownPosRef, disabled, children: [ /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( SelectNativeOptionsProvider, { scope: props.__scopeSelect, onNativeOptionAdd: react__WEBPACK_IMPORTED_MODULE_0__.useCallback((option) => { setNativeOptionsSet((prev) => new Set(prev).add(option)); }, []), onNativeOptionRemove: react__WEBPACK_IMPORTED_MODULE_0__.useCallback((option) => { setNativeOptionsSet((prev) => { const optionsSet = new Set(prev); optionsSet.delete(option); return optionsSet; }); }, []), children } ) }), isFormControl ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)( SelectBubbleInput, { "aria-hidden": true, required, tabIndex: -1, name, autoComplete, value, onChange: (event) => setValue(event.target.value), disabled, form, children: [ value === void 0 ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("option", { value: "" }) : null, Array.from(nativeOptionsSet) ] }, nativeSelectKey ) : null ] } ) }); }; Select.displayName = SELECT_NAME; var TRIGGER_NAME = "SelectTrigger"; var SelectTrigger = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, disabled = false, ...triggerProps } = props; const popperScope = usePopperScope(__scopeSelect); const context = useSelectContext(TRIGGER_NAME, __scopeSelect); const isDisabled = context.disabled || disabled; const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, context.onTriggerChange); const getItems = useCollection(__scopeSelect); const pointerTypeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef("touch"); const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => { const enabledItems = getItems().filter((item) => !item.disabled); const currentItem = enabledItems.find((item) => item.value === context.value); const nextItem = findNextItem(enabledItems, search, currentItem); if (nextItem !== void 0) { context.onValueChange(nextItem.value); } }); const handleOpen = (pointerEvent) => { if (!isDisabled) { context.onOpenChange(true); resetTypeahead(); } if (pointerEvent) { context.triggerPointerDownPosRef.current = { x: Math.round(pointerEvent.pageX), y: Math.round(pointerEvent.pageY) }; } }; return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_12__.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.button, { type: "button", role: "combobox", "aria-controls": context.contentId, "aria-expanded": context.open, "aria-required": context.required, "aria-autocomplete": "none", dir: context.dir, "data-state": context.open ? "open" : "closed", disabled: isDisabled, "data-disabled": isDisabled ? "" : void 0, "data-placeholder": shouldShowPlaceholder(context.value) ? "" : void 0, ...triggerProps, ref: composedRefs, onClick: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(triggerProps.onClick, (event) => { event.currentTarget.focus(); if (pointerTypeRef.current !== "mouse") { handleOpen(event); } }), onPointerDown: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(triggerProps.onPointerDown, (event) => { pointerTypeRef.current = event.pointerType; const target = event.target; if (target.hasPointerCapture(event.pointerId)) { target.releasePointerCapture(event.pointerId); } if (event.button === 0 && event.ctrlKey === false && event.pointerType === "mouse") { handleOpen(event); event.preventDefault(); } }), onKeyDown: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(triggerProps.onKeyDown, (event) => { const isTypingAhead = searchRef.current !== ""; const isModifierKey = event.ctrlKey || event.altKey || event.metaKey; if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key); if (isTypingAhead && event.key === " ") return; if (OPEN_KEYS.includes(event.key)) { handleOpen(); event.preventDefault(); } }) } ) }); } ); SelectTrigger.displayName = TRIGGER_NAME; var VALUE_NAME = "SelectValue"; var SelectValue = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, className, style, children, placeholder = "", ...valueProps } = props; const context = useSelectContext(VALUE_NAME, __scopeSelect); const { onValueNodeHasChildrenChange } = context; const hasChildren = children !== void 0; const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, context.onValueNodeChange); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => { onValueNodeHasChildrenChange(hasChildren); }, [onValueNodeHasChildrenChange, hasChildren]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.span, { ...valueProps, ref: composedRefs, style: { pointerEvents: "none" }, children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.Fragment, { children: placeholder }) : children } ); } ); SelectValue.displayName = VALUE_NAME; var ICON_NAME = "SelectIcon"; var SelectIcon = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, children, ...iconProps } = props; return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.span, { "aria-hidden": true, ...iconProps, ref: forwardedRef, children: children || "\u25BC" }); } ); SelectIcon.displayName = ICON_NAME; var PORTAL_NAME = "SelectPortal"; var SelectPortal = (props) => { return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_portal__WEBPACK_IMPORTED_MODULE_13__.Portal, { asChild: true, ...props }); }; SelectPortal.displayName = PORTAL_NAME; var CONTENT_NAME = "SelectContent"; var SelectContent = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const context = useSelectContext(CONTENT_NAME, props.__scopeSelect); const [fragment, setFragment] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => { setFragment(new DocumentFragment()); }, []); if (!context.open) { const frag = fragment; return frag ? react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal( /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div", { children: props.children }) }) }), frag ) : null; } return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(SelectContentImpl, { ...props, ref: forwardedRef }); } ); SelectContent.displayName = CONTENT_NAME; var CONTENT_MARGIN = 10; var [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME); var CONTENT_IMPL_NAME = "SelectContentImpl"; var Slot = (0,_radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_15__.createSlot)("SelectContent.RemoveScroll"); var SelectContentImpl = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, position = "item-aligned", onCloseAutoFocus, onEscapeKeyDown, onPointerDownOutside, // // PopperContent props side, sideOffset, align, alignOffset, arrowPadding, collisionBoundary, collisionPadding, sticky, hideWhenDetached, avoidCollisions, // ...contentProps } = props; const context = useSelectContext(CONTENT_NAME, __scopeSelect); const [content, setContent] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const [viewport, setViewport] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, (node) => setContent(node)); const [selectedItem, setSelectedItem] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const [selectedItemText, setSelectedItemText] = react__WEBPACK_IMPORTED_MODULE_0__.useState( null ); const getItems = useCollection(__scopeSelect); const [isPositioned, setIsPositioned] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false); const firstValidItemFoundRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (content) return (0,aria_hidden__WEBPACK_IMPORTED_MODULE_21__.hideOthers)(content); }, [content]); (0,_radix_ui_react_focus_guards__WEBPACK_IMPORTED_MODULE_9__.useFocusGuards)(); const focusFirst = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (candidates) => { const [firstItem, ...restItems] = getItems().map((item) => item.ref.current); const [lastItem] = restItems.slice(-1); const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement; for (const candidate of candidates) { if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return; candidate?.scrollIntoView({ block: "nearest" }); if (candidate === firstItem && viewport) viewport.scrollTop = 0; if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight; candidate?.focus(); if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return; } }, [getItems, viewport] ); const focusSelectedItem = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( () => focusFirst([selectedItem, content]), [focusFirst, selectedItem, content] ); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (isPositioned) { focusSelectedItem(); } }, [isPositioned, focusSelectedItem]); const { onOpenChange, triggerPointerDownPosRef } = context; react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (content) { let pointerMoveDelta = { x: 0, y: 0 }; const handlePointerMove = (event) => { pointerMoveDelta = { x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)), y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0)) }; }; const handlePointerUp = (event) => { if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) { event.preventDefault(); } else { if (!content.contains(event.target)) { onOpenChange(false); } } document.removeEventListener("pointermove", handlePointerMove); triggerPointerDownPosRef.current = null; }; if (triggerPointerDownPosRef.current !== null) { document.addEventListener("pointermove", handlePointerMove); document.addEventListener("pointerup", handlePointerUp, { capture: true, once: true }); } return () => { document.removeEventListener("pointermove", handlePointerMove); document.removeEventListener("pointerup", handlePointerUp, { capture: true }); }; } }, [content, onOpenChange, triggerPointerDownPosRef]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const close = () => onOpenChange(false); window.addEventListener("blur", close); window.addEventListener("resize", close); return () => { window.removeEventListener("blur", close); window.removeEventListener("resize", close); }; }, [onOpenChange]); const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => { const enabledItems = getItems().filter((item) => !item.disabled); const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement); const nextItem = findNextItem(enabledItems, search, currentItem); if (nextItem) { setTimeout(() => nextItem.ref.current.focus()); } }); const itemRefCallback = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (node, value, disabled) => { const isFirstValidItem = !firstValidItemFoundRef.current && !disabled; const isSelectedItem = context.value !== void 0 && context.value === value; if (isSelectedItem || isFirstValidItem) { setSelectedItem(node); if (isFirstValidItem) firstValidItemFoundRef.current = true; } }, [context.value] ); const handleItemLeave = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => content?.focus(), [content]); const itemTextRefCallback = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (node, value, disabled) => { const isFirstValidItem = !firstValidItemFoundRef.current && !disabled; const isSelectedItem = context.value !== void 0 && context.value === value; if (isSelectedItem || isFirstValidItem) { setSelectedItemText(node); } }, [context.value] ); const SelectPosition = position === "popper" ? SelectPopperPosition : SelectItemAlignedPosition; const popperContentProps = SelectPosition === SelectPopperPosition ? { side, sideOffset, align, alignOffset, arrowPadding, collisionBoundary, collisionPadding, sticky, hideWhenDetached, avoidCollisions } : {}; return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( SelectContentProvider, { scope: __scopeSelect, content, viewport, onViewportChange: setViewport, itemRefCallback, selectedItem, onItemLeave: handleItemLeave, itemTextRefCallback, focusSelectedItem, selectedItemText, position, isPositioned, searchRef, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(react_remove_scroll__WEBPACK_IMPORTED_MODULE_22__["default"], { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_focus_scope__WEBPACK_IMPORTED_MODULE_10__.FocusScope, { asChild: true, trapped: context.open, onMountAutoFocus: (event) => { event.preventDefault(); }, onUnmountAutoFocus: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(onCloseAutoFocus, (event) => { context.trigger?.focus({ preventScroll: true }); event.preventDefault(); }), children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_dismissable_layer__WEBPACK_IMPORTED_MODULE_8__.DismissableLayer, { asChild: true, disableOutsidePointerEvents: true, onEscapeKeyDown, onPointerDownOutside, onFocusOutside: (event) => event.preventDefault(), onDismiss: () => context.onOpenChange(false), children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( SelectPosition, { role: "listbox", id: context.contentId, "data-state": context.open ? "open" : "closed", dir: context.dir, onContextMenu: (event) => event.preventDefault(), ...contentProps, ...popperContentProps, onPlaced: () => setIsPositioned(true), ref: composedRefs, style: { // flex layout so we can place the scroll buttons properly display: "flex", flexDirection: "column", // reset the outline by default as the content MAY get focused outline: "none", ...contentProps.style }, onKeyDown: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(contentProps.onKeyDown, (event) => { const isModifierKey = event.ctrlKey || event.altKey || event.metaKey; if (event.key === "Tab") event.preventDefault(); if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key); if (["ArrowUp", "ArrowDown", "Home", "End"].includes(event.key)) { const items = getItems().filter((item) => !item.disabled); let candidateNodes = items.map((item) => item.ref.current); if (["ArrowUp", "End"].includes(event.key)) { candidateNodes = candidateNodes.slice().reverse(); } if (["ArrowUp", "ArrowDown"].includes(event.key)) { const currentElement = event.target; const currentIndex = candidateNodes.indexOf(currentElement); candidateNodes = candidateNodes.slice(currentIndex + 1); } setTimeout(() => focusFirst(candidateNodes)); event.preventDefault(); } }) } ) } ) } ) }) } ); } ); SelectContentImpl.displayName = CONTENT_IMPL_NAME; var ITEM_ALIGNED_POSITION_NAME = "SelectItemAlignedPosition"; var SelectItemAlignedPosition = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { __scopeSelect, onPlaced, ...popperProps } = props; const context = useSelectContext(CONTENT_NAME, __scopeSelect); const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect); const [contentWrapper, setContentWrapper] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const [content, setContent] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, (node) => setContent(node)); const getItems = useCollection(__scopeSelect); const shouldExpandOnScrollRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); const shouldRepositionRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(true); const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext; const position = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) { const triggerRect = context.trigger.getBoundingClientRect(); const contentRect = content.getBoundingClientRect(); const valueNodeRect = context.valueNode.getBoundingClientRect(); const itemTextRect = selectedItemText.getBoundingClientRect(); if (context.dir !== "rtl") { const itemTextOffset = itemTextRect.left - contentRect.left; const left = valueNodeRect.left - itemTextOffset; const leftDelta = triggerRect.left - left; const minContentWidth = triggerRect.width + leftDelta; const contentWidth = Math.max(minContentWidth, contentRect.width); const rightEdge = window.innerWidth - CONTENT_MARGIN; const clampedLeft = (0,_radix_ui_number__WEBPACK_IMPORTED_MODULE_2__.clamp)(left, [ CONTENT_MARGIN, // Prevents the content from going off the starting edge of the // viewport. It may still go off the ending edge, but this can be // controlled by the user since they may want to manage overflow in a // specific way. // https://github.com/radix-ui/primitives/issues/2049 Math.max(CONTENT_MARGIN, rightEdge - contentWidth) ]); contentWrapper.style.minWidth = minContentWidth + "px"; contentWrapper.style.left = clampedLeft + "px"; } else { const itemTextOffset = contentRect.right - itemTextRect.right; const right = window.innerWidth - valueNodeRect.right - itemTextOffset; const rightDelta = window.innerWidth - triggerRect.right - right; const minContentWidth = triggerRect.width + rightDelta; const contentWidth = Math.max(minContentWidth, contentRect.width); const leftEdge = window.innerWidth - CONTENT_MARGIN; const clampedRight = (0,_radix_ui_number__WEBPACK_IMPORTED_MODULE_2__.clamp)(right, [ CONTENT_MARGIN, Math.max(CONTENT_MARGIN, leftEdge - contentWidth) ]); contentWrapper.style.minWidth = minContentWidth + "px"; contentWrapper.style.right = clampedRight + "px"; } const items = getItems(); const availableHeight = window.innerHeight - CONTENT_MARGIN * 2; const itemsHeight = viewport.scrollHeight; const contentStyles = window.getComputedStyle(content); const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10); const contentPaddingTop = parseInt(contentStyles.paddingTop, 10); const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10); const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10); const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight); const viewportStyles = window.getComputedStyle(viewport); const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10); const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10); const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN; const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle; const selectedItemHalfHeight = selectedItem.offsetHeight / 2; const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight; const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle; const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle; const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle; if (willAlignWithoutTopOverflow) { const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current; contentWrapper.style.bottom = "0px"; const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight; const clampedTriggerMiddleToBottomEdge = Math.max( triggerMiddleToBottomEdge, selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth ); const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge; contentWrapper.style.height = height + "px"; } else { const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current; contentWrapper.style.top = "0px"; const clampedTopEdgeToTriggerMiddle = Math.max( topEdgeToTriggerMiddle, contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight ); const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom; contentWrapper.style.height = height + "px"; viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop; } contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`; contentWrapper.style.minHeight = minContentHeight + "px"; contentWrapper.style.maxHeight = availableHeight + "px"; onPlaced?.(); requestAnimationFrame(() => shouldExpandOnScrollRef.current = true); } }, [ getItems, context.trigger, context.valueNode, contentWrapper, content, viewport, selectedItem, selectedItemText, context.dir, onPlaced ]); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => position(), [position]); const [contentZIndex, setContentZIndex] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => { if (content) setContentZIndex(window.getComputedStyle(content).zIndex); }, [content]); const handleScrollButtonChange = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (node) => { if (node && shouldRepositionRef.current === true) { position(); focusSelectedItem?.(); shouldRepositionRef.current = false; } }, [position, focusSelectedItem] ); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( SelectViewportProvider, { scope: __scopeSelect, contentWrapper, shouldExpandOnScrollRef, onScrollButtonChange: handleScrollButtonChange, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( "div", { ref: setContentWrapper, style: { display: "flex", flexDirection: "column", position: "fixed", zIndex: contentZIndex }, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.div, { ...popperProps, ref: composedRefs, style: { // When we get the height of the content, it includes borders. If we were to set // the height without having `boxSizing: 'border-box'` it would be too big. boxSizing: "border-box", // We need to ensure the content doesn't get taller than the wrapper maxHeight: "100%", ...popperProps.style } } ) } ) } ); }); SelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME; var POPPER_POSITION_NAME = "SelectPopperPosition"; var SelectPopperPosition = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { __scopeSelect, align = "start", collisionPadding = CONTENT_MARGIN, ...popperProps } = props; const popperScope = usePopperScope(__scopeSelect); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_12__.Content, { ...popperScope, ...popperProps, ref: forwardedRef, align, collisionPadding, style: { // Ensure border-box for floating-ui calculations boxSizing: "border-box", ...popperProps.style, // re-namespace exposed content custom properties ...{ "--radix-select-content-transform-origin": "var(--radix-popper-transform-origin)", "--radix-select-content-available-width": "var(--radix-popper-available-width)", "--radix-select-content-available-height": "var(--radix-popper-available-height)", "--radix-select-trigger-width": "var(--radix-popper-anchor-width)", "--radix-select-trigger-height": "var(--radix-popper-anchor-height)" } } } ); }); SelectPopperPosition.displayName = POPPER_POSITION_NAME; var [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {}); var VIEWPORT_NAME = "SelectViewport"; var SelectViewport = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, nonce, ...viewportProps } = props; const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect); const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, contentContext.onViewportChange); const prevScrollTopRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.Fragment, { children: [ /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( "style", { dangerouslySetInnerHTML: { __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}` }, nonce } ), /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.div, { "data-radix-select-viewport": "", role: "presentation", ...viewportProps, ref: composedRefs, style: { // we use position: 'relative' here on the `viewport` so that when we call // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport // (independent of the scrollUpButton). position: "relative", flex: 1, // Viewport should only be scrollable in the vertical direction. // This won't work in vertical writing modes, so we'll need to // revisit this if/when that is supported // https://developer.chrome.com/blog/vertical-form-controls overflow: "hidden auto", ...viewportProps.style }, onScroll: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(viewportProps.onScroll, (event) => { const viewport = event.currentTarget; const { contentWrapper, shouldExpandOnScrollRef } = viewportContext; if (shouldExpandOnScrollRef?.current && contentWrapper) { const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop); if (scrolledBy > 0) { const availableHeight = window.innerHeight - CONTENT_MARGIN * 2; const cssMinHeight = parseFloat(contentWrapper.style.minHeight); const cssHeight = parseFloat(contentWrapper.style.height); const prevHeight = Math.max(cssMinHeight, cssHeight); if (prevHeight < availableHeight) { const nextHeight = prevHeight + scrolledBy; const clampedNextHeight = Math.min(availableHeight, nextHeight); const heightDiff = nextHeight - clampedNextHeight; contentWrapper.style.height = clampedNextHeight + "px"; if (contentWrapper.style.bottom === "0px") { viewport.scrollTop = heightDiff > 0 ? heightDiff : 0; contentWrapper.style.justifyContent = "flex-end"; } } } } prevScrollTopRef.current = viewport.scrollTop; }) } ) }) ] }); } ); SelectViewport.displayName = VIEWPORT_NAME; var GROUP_NAME = "SelectGroup"; var [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME); var SelectGroup = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, ...groupProps } = props; const groupId = (0,_radix_ui_react_id__WEBPACK_IMPORTED_MODULE_11__.useId)(); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.div, { role: "group", "aria-labelledby": groupId, ...groupProps, ref: forwardedRef }) }); } ); SelectGroup.displayName = GROUP_NAME; var LABEL_NAME = "SelectLabel"; var SelectLabel = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, ...labelProps } = props; const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef }); } ); SelectLabel.displayName = LABEL_NAME; var ITEM_NAME = "SelectItem"; var [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME); var SelectItem = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, value, disabled = false, textValue: textValueProp, ...itemProps } = props; const context = useSelectContext(ITEM_NAME, __scopeSelect); const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect); const isSelected = context.value === value; const [textValue, setTextValue] = react__WEBPACK_IMPORTED_MODULE_0__.useState(textValueProp ?? ""); const [isFocused, setIsFocused] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)( forwardedRef, (node) => contentContext.itemRefCallback?.(node, value, disabled) ); const textId = (0,_radix_ui_react_id__WEBPACK_IMPORTED_MODULE_11__.useId)(); const pointerTypeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef("touch"); const handleSelect = () => { if (!disabled) { context.onValueChange(value); context.onOpenChange(false); } }; if (value === "") { throw new Error( "A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder." ); } return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( SelectItemContextProvider, { scope: __scopeSelect, value, disabled, textId, isSelected, onItemTextChange: react__WEBPACK_IMPORTED_MODULE_0__.useCallback((node) => { setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? "").trim()); }, []), children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( Collection.ItemSlot, { scope: __scopeSelect, value, disabled, textValue, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.div, { role: "option", "aria-labelledby": textId, "data-highlighted": isFocused ? "" : void 0, "aria-selected": isSelected && isFocused, "data-state": isSelected ? "checked" : "unchecked", "aria-disabled": disabled || void 0, "data-disabled": disabled ? "" : void 0, tabIndex: disabled ? void 0 : -1, ...itemProps, ref: composedRefs, onFocus: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onFocus, () => setIsFocused(true)), onBlur: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onBlur, () => setIsFocused(false)), onClick: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onClick, () => { if (pointerTypeRef.current !== "mouse") handleSelect(); }), onPointerUp: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onPointerUp, () => { if (pointerTypeRef.current === "mouse") handleSelect(); }), onPointerDown: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onPointerDown, (event) => { pointerTypeRef.current = event.pointerType; }), onPointerMove: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onPointerMove, (event) => { pointerTypeRef.current = event.pointerType; if (disabled) { contentContext.onItemLeave?.(); } else if (pointerTypeRef.current === "mouse") { event.currentTarget.focus({ preventScroll: true }); } }), onPointerLeave: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onPointerLeave, (event) => { if (event.currentTarget === document.activeElement) { contentContext.onItemLeave?.(); } }), onKeyDown: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(itemProps.onKeyDown, (event) => { const isTypingAhead = contentContext.searchRef?.current !== ""; if (isTypingAhead && event.key === " ") return; if (SELECTION_KEYS.includes(event.key)) handleSelect(); if (event.key === " ") event.preventDefault(); }) } ) } ) } ); } ); SelectItem.displayName = ITEM_NAME; var ITEM_TEXT_NAME = "SelectItemText"; var SelectItemText = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, className, style, ...itemTextProps } = props; const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect); const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect); const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect); const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect); const [itemTextNode, setItemTextNode] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)( forwardedRef, (node) => setItemTextNode(node), itemContext.onItemTextChange, (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled) ); const textContent = itemTextNode?.textContent; const nativeOption = react__WEBPACK_IMPORTED_MODULE_0__.useMemo( () => /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("option", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value), [itemContext.disabled, itemContext.value, textContent] ); const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext; (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => { onNativeOptionAdd(nativeOption); return () => onNativeOptionRemove(nativeOption); }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.Fragment, { children: [ /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }), itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal(itemTextProps.children, context.valueNode) : null ] }); } ); SelectItemText.displayName = ITEM_TEXT_NAME; var ITEM_INDICATOR_NAME = "SelectItemIndicator"; var SelectItemIndicator = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, ...itemIndicatorProps } = props; const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect); return itemContext.isSelected ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.span, { "aria-hidden": true, ...itemIndicatorProps, ref: forwardedRef }) : null; } ); SelectItemIndicator.displayName = ITEM_INDICATOR_NAME; var SCROLL_UP_BUTTON_NAME = "SelectScrollUpButton"; var SelectScrollUpButton = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect); const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect); const [canScrollUp, setCanScrollUp] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, viewportContext.onScrollButtonChange); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => { if (contentContext.viewport && contentContext.isPositioned) { let handleScroll2 = function() { const canScrollUp2 = viewport.scrollTop > 0; setCanScrollUp(canScrollUp2); }; var handleScroll = handleScroll2; const viewport = contentContext.viewport; handleScroll2(); viewport.addEventListener("scroll", handleScroll2); return () => viewport.removeEventListener("scroll", handleScroll2); } }, [contentContext.viewport, contentContext.isPositioned]); return canScrollUp ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( SelectScrollButtonImpl, { ...props, ref: composedRefs, onAutoScroll: () => { const { viewport, selectedItem } = contentContext; if (viewport && selectedItem) { viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight; } } } ) : null; }); SelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME; var SCROLL_DOWN_BUTTON_NAME = "SelectScrollDownButton"; var SelectScrollDownButton = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect); const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect); const [canScrollDown, setCanScrollDown] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, viewportContext.onScrollButtonChange); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => { if (contentContext.viewport && contentContext.isPositioned) { let handleScroll2 = function() { const maxScroll = viewport.scrollHeight - viewport.clientHeight; const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll; setCanScrollDown(canScrollDown2); }; var handleScroll = handleScroll2; const viewport = contentContext.viewport; handleScroll2(); viewport.addEventListener("scroll", handleScroll2); return () => viewport.removeEventListener("scroll", handleScroll2); } }, [contentContext.viewport, contentContext.isPositioned]); return canScrollDown ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( SelectScrollButtonImpl, { ...props, ref: composedRefs, onAutoScroll: () => { const { viewport, selectedItem } = contentContext; if (viewport && selectedItem) { viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight; } } } ) : null; }); SelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME; var SelectScrollButtonImpl = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props; const contentContext = useSelectContentContext("SelectScrollButton", __scopeSelect); const autoScrollTimerRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const getItems = useCollection(__scopeSelect); const clearAutoScrollTimer = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { if (autoScrollTimerRef.current !== null) { window.clearInterval(autoScrollTimerRef.current); autoScrollTimerRef.current = null; } }, []); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { return () => clearAutoScrollTimer(); }, [clearAutoScrollTimer]); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_18__.useLayoutEffect)(() => { const activeItem = getItems().find((item) => item.ref.current === document.activeElement); activeItem?.ref.current?.scrollIntoView({ block: "nearest" }); }, [getItems]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.div, { "aria-hidden": true, ...scrollIndicatorProps, ref: forwardedRef, style: { flexShrink: 0, ...scrollIndicatorProps.style }, onPointerDown: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(scrollIndicatorProps.onPointerDown, () => { if (autoScrollTimerRef.current === null) { autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50); } }), onPointerMove: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(scrollIndicatorProps.onPointerMove, () => { contentContext.onItemLeave?.(); if (autoScrollTimerRef.current === null) { autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50); } }), onPointerLeave: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_3__.composeEventHandlers)(scrollIndicatorProps.onPointerLeave, () => { clearAutoScrollTimer(); }) } ); }); var SEPARATOR_NAME = "SelectSeparator"; var SelectSeparator = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, ...separatorProps } = props; return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.div, { "aria-hidden": true, ...separatorProps, ref: forwardedRef }); } ); SelectSeparator.displayName = SEPARATOR_NAME; var ARROW_NAME = "SelectArrow"; var SelectArrow = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSelect, ...arrowProps } = props; const popperScope = usePopperScope(__scopeSelect); const context = useSelectContext(ARROW_NAME, __scopeSelect); const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect); return context.open && contentContext.position === "popper" ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_12__.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null; } ); SelectArrow.displayName = ARROW_NAME; var BUBBLE_INPUT_NAME = "SelectBubbleInput"; var SelectBubbleInput = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( ({ __scopeSelect, value, ...props }, forwardedRef) => { const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_5__.useComposedRefs)(forwardedRef, ref); const prevValue = (0,_radix_ui_react_use_previous__WEBPACK_IMPORTED_MODULE_19__.usePrevious)(value); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const select = ref.current; if (!select) return; const selectProto = window.HTMLSelectElement.prototype; const descriptor = Object.getOwnPropertyDescriptor( selectProto, "value" ); const setValue = descriptor.set; if (prevValue !== value && setValue) { const event = new Event("change", { bubbles: true }); setValue.call(select, value); select.dispatchEvent(event); } }, [prevValue, value]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_14__.Primitive.select, { ...props, style: { ..._radix_ui_react_visually_hidden__WEBPACK_IMPORTED_MODULE_20__.VISUALLY_HIDDEN_STYLES, ...props.style }, ref: composedRefs, defaultValue: value } ); } ); SelectBubbleInput.displayName = BUBBLE_INPUT_NAME; function shouldShowPlaceholder(value) { return value === "" || value === void 0; } function useTypeaheadSearch(onSearchChange) { const handleSearchChange = (0,_radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_16__.useCallbackRef)(onSearchChange); const searchRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(""); const timerRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0); const handleTypeaheadSearch = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (key) => { const search = searchRef.current + key; handleSearchChange(search); (function updateSearch(value) { searchRef.current = value; window.clearTimeout(timerRef.current); if (value !== "") timerRef.current = window.setTimeout(() => updateSearch(""), 1e3); })(search); }, [handleSearchChange] ); const resetTypeahead = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { searchRef.current = ""; window.clearTimeout(timerRef.current); }, []); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { return () => window.clearTimeout(timerRef.current); }, []); return [searchRef, handleTypeaheadSearch, resetTypeahead]; } function findNextItem(items, search, currentItem) { const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]); const normalizedSearch = isRepeated ? search[0] : search; const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1; let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0)); const excludeCurrentItem = normalizedSearch.length === 1; if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem); const nextItem = wrappedItems.find( (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase()) ); return nextItem !== currentItem ? nextItem : void 0; } function wrapArray(array, startIndex) { return array.map((_, index) => array[(startIndex + index) % array.length]); } var Root2 = Select; var Trigger = SelectTrigger; var Value = SelectValue; var Icon = SelectIcon; var Portal = SelectPortal; var Content2 = SelectContent; var Viewport = SelectViewport; var Group = SelectGroup; var Label = SelectLabel; var Item = SelectItem; var ItemText = SelectItemText; var ItemIndicator = SelectItemIndicator; var ScrollUpButton = SelectScrollUpButton; var ScrollDownButton = SelectScrollDownButton; var Separator = SelectSeparator; var Arrow2 = SelectArrow; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-slot/dist/index.mjs" /*!**********************************************************!*\ !*** ./node_modules/@radix-ui/react-slot/dist/index.mjs ***! \**********************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Root: () => (/* binding */ Slot), /* harmony export */ Slot: () => (/* binding */ Slot), /* harmony export */ Slottable: () => (/* binding */ Slottable), /* harmony export */ createSlot: () => (/* binding */ createSlot), /* harmony export */ createSlottable: () => (/* binding */ createSlottable) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); // src/slot.tsx // @__NO_SIDE_EFFECTS__ function createSlot(ownerName) { const SlotClone = /* @__PURE__ */ createSlotClone(ownerName); const Slot2 = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { children, ...slotProps } = props; const childrenArray = react__WEBPACK_IMPORTED_MODULE_0__.Children.toArray(children); const slottable = childrenArray.find(isSlottable); if (slottable) { const newElement = slottable.props.children; const newChildren = childrenArray.map((child) => { if (child === slottable) { if (react__WEBPACK_IMPORTED_MODULE_0__.Children.count(newElement) > 1) return react__WEBPACK_IMPORTED_MODULE_0__.Children.only(null); return react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(newElement) ? newElement.props.children : null; } else { return child; } }); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(newElement) ? react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(newElement, void 0, newChildren) : null }); } return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children }); }); Slot2.displayName = `${ownerName}.Slot`; return Slot2; } var Slot = /* @__PURE__ */ createSlot("Slot"); // @__NO_SIDE_EFFECTS__ function createSlotClone(ownerName) { const SlotClone = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const { children, ...slotProps } = props; if (react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(children)) { const childrenRef = getElementRef(children); const props2 = mergeProps(slotProps, children.props); if (children.type !== react__WEBPACK_IMPORTED_MODULE_0__.Fragment) { props2.ref = forwardedRef ? (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_1__.composeRefs)(forwardedRef, childrenRef) : childrenRef; } return react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(children, props2); } return react__WEBPACK_IMPORTED_MODULE_0__.Children.count(children) > 1 ? react__WEBPACK_IMPORTED_MODULE_0__.Children.only(null) : null; }); SlotClone.displayName = `${ownerName}.SlotClone`; return SlotClone; } var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable"); // @__NO_SIDE_EFFECTS__ function createSlottable(ownerName) { const Slottable2 = ({ children }) => { return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment, { children }); }; Slottable2.displayName = `${ownerName}.Slottable`; Slottable2.__radixId = SLOTTABLE_IDENTIFIER; return Slottable2; } var Slottable = /* @__PURE__ */ createSlottable("Slottable"); function isSlottable(child) { return react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER; } function mergeProps(slotProps, childProps) { const overrideProps = { ...childProps }; for (const propName in childProps) { const slotPropValue = slotProps[propName]; const childPropValue = childProps[propName]; const isHandler = /^on[A-Z]/.test(propName); if (isHandler) { if (slotPropValue && childPropValue) { overrideProps[propName] = (...args) => { const result = childPropValue(...args); slotPropValue(...args); return result; }; } else if (slotPropValue) { overrideProps[propName] = slotPropValue; } } else if (propName === "style") { overrideProps[propName] = { ...slotPropValue, ...childPropValue }; } else if (propName === "className") { overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" "); } } return { ...slotProps, ...overrideProps }; } function getElementRef(element) { let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; if (mayWarn) { return element.ref; } getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; if (mayWarn) { return element.props.ref; } return element.props.ref || element.ref; } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-switch/dist/index.mjs" /*!************************************************************!*\ !*** ./node_modules/@radix-ui/react-switch/dist/index.mjs ***! \************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Root: () => (/* binding */ Root), /* harmony export */ Switch: () => (/* binding */ Switch), /* harmony export */ SwitchThumb: () => (/* binding */ SwitchThumb), /* harmony export */ Thumb: () => (/* binding */ Thumb), /* harmony export */ createSwitchScope: () => (/* binding */ createSwitchScope) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/primitive */ "./node_modules/@radix-ui/primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_context__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-context */ "./node_modules/@radix-ui/react-context/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_controllable_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-use-controllable-state */ "./node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_previous__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @radix-ui/react-use-previous */ "./node_modules/@radix-ui/react-use-previous/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_size__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @radix-ui/react-use-size */ "./node_modules/@radix-ui/react-use-size/dist/index.mjs"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/switch.tsx var SWITCH_NAME = "Switch"; var [createSwitchContext, createSwitchScope] = (0,_radix_ui_react_context__WEBPACK_IMPORTED_MODULE_3__.createContextScope)(SWITCH_NAME); var [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME); var Switch = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSwitch, name, checked: checkedProp, defaultChecked, required, disabled, value = "on", onCheckedChange, form, ...switchProps } = props; const [button, setButton] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(forwardedRef, (node) => setButton(node)); const hasConsumerStoppedPropagationRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); const isFormControl = button ? form || !!button.closest("form") : true; const [checked, setChecked] = (0,_radix_ui_react_use_controllable_state__WEBPACK_IMPORTED_MODULE_4__.useControllableState)({ prop: checkedProp, defaultProp: defaultChecked ?? false, onChange: onCheckedChange, caller: SWITCH_NAME }); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [ /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_7__.Primitive.button, { type: "button", role: "switch", "aria-checked": checked, "aria-required": required, "data-state": getState(checked), "data-disabled": disabled ? "" : void 0, disabled, value, ...switchProps, ref: composedRefs, onClick: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onClick, (event) => { setChecked((prevChecked) => !prevChecked); if (isFormControl) { hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(); if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation(); } }) } ), isFormControl && /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)( SwitchBubbleInput, { control: button, bubbles: !hasConsumerStoppedPropagationRef.current, name, value, checked, required, disabled, form, style: { transform: "translateX(-100%)" } } ) ] }); } ); Switch.displayName = SWITCH_NAME; var THUMB_NAME = "SwitchThumb"; var SwitchThumb = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeSwitch, ...thumbProps } = props; const context = useSwitchContext(THUMB_NAME, __scopeSwitch); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_7__.Primitive.span, { "data-state": getState(context.checked), "data-disabled": context.disabled ? "" : void 0, ...thumbProps, ref: forwardedRef } ); } ); SwitchThumb.displayName = THUMB_NAME; var BUBBLE_INPUT_NAME = "SwitchBubbleInput"; var SwitchBubbleInput = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( ({ __scopeSwitch, control, checked, bubbles = true, ...props }, forwardedRef) => { const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(ref, forwardedRef); const prevChecked = (0,_radix_ui_react_use_previous__WEBPACK_IMPORTED_MODULE_5__.usePrevious)(checked); const controlSize = (0,_radix_ui_react_use_size__WEBPACK_IMPORTED_MODULE_6__.useSize)(control); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const input = ref.current; if (!input) return; const inputProto = window.HTMLInputElement.prototype; const descriptor = Object.getOwnPropertyDescriptor( inputProto, "checked" ); const setChecked = descriptor.set; if (prevChecked !== checked && setChecked) { const event = new Event("click", { bubbles }); setChecked.call(input, checked); input.dispatchEvent(event); } }, [prevChecked, checked, bubbles]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)( "input", { type: "checkbox", "aria-hidden": true, defaultChecked: checked, ...props, tabIndex: -1, ref: composedRefs, style: { ...props.style, ...controlSize, position: "absolute", pointerEvents: "none", opacity: 0, margin: 0 } } ); } ); SwitchBubbleInput.displayName = BUBBLE_INPUT_NAME; function getState(checked) { return checked ? "checked" : "unchecked"; } var Root = Switch; var Thumb = SwitchThumb; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-tooltip/dist/index.mjs" /*!*************************************************************!*\ !*** ./node_modules/@radix-ui/react-tooltip/dist/index.mjs ***! \*************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Arrow: () => (/* binding */ Arrow2), /* harmony export */ Content: () => (/* binding */ Content2), /* harmony export */ Portal: () => (/* binding */ Portal), /* harmony export */ Provider: () => (/* binding */ Provider), /* harmony export */ Root: () => (/* binding */ Root3), /* harmony export */ Tooltip: () => (/* binding */ Tooltip), /* harmony export */ TooltipArrow: () => (/* binding */ TooltipArrow), /* harmony export */ TooltipContent: () => (/* binding */ TooltipContent), /* harmony export */ TooltipPortal: () => (/* binding */ TooltipPortal), /* harmony export */ TooltipProvider: () => (/* binding */ TooltipProvider), /* harmony export */ TooltipTrigger: () => (/* binding */ TooltipTrigger), /* harmony export */ Trigger: () => (/* binding */ Trigger), /* harmony export */ createTooltipScope: () => (/* binding */ createTooltipScope) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/primitive */ "./node_modules/@radix-ui/primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ "./node_modules/@radix-ui/react-compose-refs/dist/index.mjs"); /* harmony import */ var _radix_ui_react_context__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-context */ "./node_modules/@radix-ui/react-context/dist/index.mjs"); /* harmony import */ var _radix_ui_react_dismissable_layer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-dismissable-layer */ "./node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs"); /* harmony import */ var _radix_ui_react_id__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @radix-ui/react-id */ "./node_modules/@radix-ui/react-id/dist/index.mjs"); /* harmony import */ var _radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @radix-ui/react-popper */ "./node_modules/@radix-ui/react-popper/dist/index.mjs"); /* harmony import */ var _radix_ui_react_portal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @radix-ui/react-portal */ "./node_modules/@radix-ui/react-portal/dist/index.mjs"); /* harmony import */ var _radix_ui_react_presence__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @radix-ui/react-presence */ "./node_modules/@radix-ui/react-presence/dist/index.mjs"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @radix-ui/react-slot */ "./node_modules/@radix-ui/react-slot/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_controllable_state__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @radix-ui/react-use-controllable-state */ "./node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs"); /* harmony import */ var _radix_ui_react_visually_hidden__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @radix-ui/react-visually-hidden */ "./node_modules/@radix-ui/react-visually-hidden/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); "use client"; // src/tooltip.tsx var [createTooltipContext, createTooltipScope] = (0,_radix_ui_react_context__WEBPACK_IMPORTED_MODULE_3__.createContextScope)("Tooltip", [ _radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_6__.createPopperScope ]); var usePopperScope = (0,_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_6__.createPopperScope)(); var PROVIDER_NAME = "TooltipProvider"; var DEFAULT_DELAY_DURATION = 700; var TOOLTIP_OPEN = "tooltip.open"; var [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME); var TooltipProvider = (props) => { const { __scopeTooltip, delayDuration = DEFAULT_DELAY_DURATION, skipDelayDuration = 300, disableHoverableContent = false, children } = props; const isOpenDelayedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(true); const isPointerInTransitRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); const skipDelayTimerRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const skipDelayTimer = skipDelayTimerRef.current; return () => window.clearTimeout(skipDelayTimer); }, []); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)( TooltipProviderContextProvider, { scope: __scopeTooltip, isOpenDelayedRef, delayDuration, onOpen: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { window.clearTimeout(skipDelayTimerRef.current); isOpenDelayedRef.current = false; }, []), onClose: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { window.clearTimeout(skipDelayTimerRef.current); skipDelayTimerRef.current = window.setTimeout( () => isOpenDelayedRef.current = true, skipDelayDuration ); }, [skipDelayDuration]), isPointerInTransitRef, onPointerInTransitChange: react__WEBPACK_IMPORTED_MODULE_0__.useCallback((inTransit) => { isPointerInTransitRef.current = inTransit; }, []), disableHoverableContent, children } ); }; TooltipProvider.displayName = PROVIDER_NAME; var TOOLTIP_NAME = "Tooltip"; var [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME); var Tooltip = (props) => { const { __scopeTooltip, children, open: openProp, defaultOpen, onOpenChange, disableHoverableContent: disableHoverableContentProp, delayDuration: delayDurationProp } = props; const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip); const popperScope = usePopperScope(__scopeTooltip); const [trigger, setTrigger] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const contentId = (0,_radix_ui_react_id__WEBPACK_IMPORTED_MODULE_5__.useId)(); const openTimerRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0); const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent; const delayDuration = delayDurationProp ?? providerContext.delayDuration; const wasOpenDelayedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); const [open, setOpen] = (0,_radix_ui_react_use_controllable_state__WEBPACK_IMPORTED_MODULE_11__.useControllableState)({ prop: openProp, defaultProp: defaultOpen ?? false, onChange: (open2) => { if (open2) { providerContext.onOpen(); document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN)); } else { providerContext.onClose(); } onOpenChange?.(open2); }, caller: TOOLTIP_NAME }); const stateAttribute = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => { return open ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed"; }, [open]); const handleOpen = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { window.clearTimeout(openTimerRef.current); openTimerRef.current = 0; wasOpenDelayedRef.current = false; setOpen(true); }, [setOpen]); const handleClose = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { window.clearTimeout(openTimerRef.current); openTimerRef.current = 0; setOpen(false); }, [setOpen]); const handleDelayedOpen = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { window.clearTimeout(openTimerRef.current); openTimerRef.current = window.setTimeout(() => { wasOpenDelayedRef.current = true; setOpen(true); openTimerRef.current = 0; }, delayDuration); }, [delayDuration, setOpen]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { return () => { if (openTimerRef.current) { window.clearTimeout(openTimerRef.current); openTimerRef.current = 0; } }; }, []); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_6__.Root, { ...popperScope, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)( TooltipContextProvider, { scope: __scopeTooltip, contentId, open, stateAttribute, trigger, onTriggerChange: setTrigger, onTriggerEnter: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { if (providerContext.isOpenDelayedRef.current) handleDelayedOpen(); else handleOpen(); }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]), onTriggerLeave: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { if (disableHoverableContent) { handleClose(); } else { window.clearTimeout(openTimerRef.current); openTimerRef.current = 0; } }, [handleClose, disableHoverableContent]), onOpen: handleOpen, onClose: handleClose, disableHoverableContent, children } ) }); }; Tooltip.displayName = TOOLTIP_NAME; var TRIGGER_NAME = "TooltipTrigger"; var TooltipTrigger = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeTooltip, ...triggerProps } = props; const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip); const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip); const popperScope = usePopperScope(__scopeTooltip); const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(forwardedRef, ref, context.onTriggerChange); const isPointerDownRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); const hasPointerMoveOpenedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); const handlePointerUp = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => isPointerDownRef.current = false, []); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { return () => document.removeEventListener("pointerup", handlePointerUp); }, [handlePointerUp]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_6__.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_9__.Primitive.button, { "aria-describedby": context.open ? context.contentId : void 0, "data-state": context.stateAttribute, ...triggerProps, ref: composedRefs, onPointerMove: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onPointerMove, (event) => { if (event.pointerType === "touch") return; if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) { context.onTriggerEnter(); hasPointerMoveOpenedRef.current = true; } }), onPointerLeave: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onPointerLeave, () => { context.onTriggerLeave(); hasPointerMoveOpenedRef.current = false; }), onPointerDown: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onPointerDown, () => { if (context.open) { context.onClose(); } isPointerDownRef.current = true; document.addEventListener("pointerup", handlePointerUp, { once: true }); }), onFocus: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onFocus, () => { if (!isPointerDownRef.current) context.onOpen(); }), onBlur: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onBlur, context.onClose), onClick: (0,_radix_ui_primitive__WEBPACK_IMPORTED_MODULE_1__.composeEventHandlers)(props.onClick, context.onClose) } ) }); } ); TooltipTrigger.displayName = TRIGGER_NAME; var PORTAL_NAME = "TooltipPortal"; var [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, { forceMount: void 0 }); var TooltipPortal = (props) => { const { __scopeTooltip, forceMount, children, container } = props; const context = useTooltipContext(PORTAL_NAME, __scopeTooltip); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_radix_ui_react_presence__WEBPACK_IMPORTED_MODULE_8__.Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_radix_ui_react_portal__WEBPACK_IMPORTED_MODULE_7__.Portal, { asChild: true, container, children }) }) }); }; TooltipPortal.displayName = PORTAL_NAME; var CONTENT_NAME = "TooltipContent"; var TooltipContent = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip); const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props; const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_radix_ui_react_presence__WEBPACK_IMPORTED_MODULE_8__.Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) }); } ); var TooltipContentHoverable = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => { const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip); const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip); const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); const composedRefs = (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.useComposedRefs)(forwardedRef, ref); const [pointerGraceArea, setPointerGraceArea] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null); const { trigger, onClose } = context; const content = ref.current; const { onPointerInTransitChange } = providerContext; const handleRemoveGraceArea = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { setPointerGraceArea(null); onPointerInTransitChange(false); }, [onPointerInTransitChange]); const handleCreateGraceArea = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (event, hoverTarget) => { const currentTarget = event.currentTarget; const exitPoint = { x: event.clientX, y: event.clientY }; const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect()); const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide); const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect()); const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]); setPointerGraceArea(graceArea); onPointerInTransitChange(true); }, [onPointerInTransitChange] ); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { return () => handleRemoveGraceArea(); }, [handleRemoveGraceArea]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (trigger && content) { const handleTriggerLeave = (event) => handleCreateGraceArea(event, content); const handleContentLeave = (event) => handleCreateGraceArea(event, trigger); trigger.addEventListener("pointerleave", handleTriggerLeave); content.addEventListener("pointerleave", handleContentLeave); return () => { trigger.removeEventListener("pointerleave", handleTriggerLeave); content.removeEventListener("pointerleave", handleContentLeave); }; } }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (pointerGraceArea) { const handleTrackPointerGrace = (event) => { const target = event.target; const pointerPosition = { x: event.clientX, y: event.clientY }; const hasEnteredTarget = trigger?.contains(target) || content?.contains(target); const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea); if (hasEnteredTarget) { handleRemoveGraceArea(); } else if (isPointerOutsideGraceArea) { handleRemoveGraceArea(); onClose(); } }; document.addEventListener("pointermove", handleTrackPointerGrace); return () => document.removeEventListener("pointermove", handleTrackPointerGrace); } }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(TooltipContentImpl, { ...props, ref: composedRefs }); }); var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false }); var Slottable = (0,_radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_10__.createSlottable)("TooltipContent"); var TooltipContentImpl = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeTooltip, children, "aria-label": ariaLabel, onEscapeKeyDown, onPointerDownOutside, ...contentProps } = props; const context = useTooltipContext(CONTENT_NAME, __scopeTooltip); const popperScope = usePopperScope(__scopeTooltip); const { onClose } = context; react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { document.addEventListener(TOOLTIP_OPEN, onClose); return () => document.removeEventListener(TOOLTIP_OPEN, onClose); }, [onClose]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (context.trigger) { const handleScroll = (event) => { const target = event.target; if (target?.contains(context.trigger)) onClose(); }; window.addEventListener("scroll", handleScroll, { capture: true }); return () => window.removeEventListener("scroll", handleScroll, { capture: true }); } }, [context.trigger, onClose]); return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)( _radix_ui_react_dismissable_layer__WEBPACK_IMPORTED_MODULE_4__.DismissableLayer, { asChild: true, disableOutsidePointerEvents: false, onEscapeKeyDown, onPointerDownOutside, onFocusOutside: (event) => event.preventDefault(), onDismiss: onClose, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)( _radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_6__.Content, { "data-state": context.stateAttribute, ...popperScope, ...contentProps, ref: forwardedRef, style: { ...contentProps.style, // re-namespace exposed content custom properties ...{ "--radix-tooltip-content-transform-origin": "var(--radix-popper-transform-origin)", "--radix-tooltip-content-available-width": "var(--radix-popper-available-width)", "--radix-tooltip-content-available-height": "var(--radix-popper-available-height)", "--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)", "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)" } }, children: [ /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(Slottable, { children }), /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_radix_ui_react_visually_hidden__WEBPACK_IMPORTED_MODULE_12__.Root, { id: context.contentId, role: "tooltip", children: ariaLabel || children }) }) ] } ) } ); } ); TooltipContent.displayName = CONTENT_NAME; var ARROW_NAME = "TooltipArrow"; var TooltipArrow = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { const { __scopeTooltip, ...arrowProps } = props; const popperScope = usePopperScope(__scopeTooltip); const visuallyHiddenContentContext = useVisuallyHiddenContentContext( ARROW_NAME, __scopeTooltip ); return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_radix_ui_react_popper__WEBPACK_IMPORTED_MODULE_6__.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }); } ); TooltipArrow.displayName = ARROW_NAME; function getExitSideFromRect(point, rect) { const top = Math.abs(rect.top - point.y); const bottom = Math.abs(rect.bottom - point.y); const right = Math.abs(rect.right - point.x); const left = Math.abs(rect.left - point.x); switch (Math.min(top, bottom, right, left)) { case left: return "left"; case right: return "right"; case top: return "top"; case bottom: return "bottom"; default: throw new Error("unreachable"); } } function getPaddedExitPoints(exitPoint, exitSide, padding = 5) { const paddedExitPoints = []; switch (exitSide) { case "top": paddedExitPoints.push( { x: exitPoint.x - padding, y: exitPoint.y + padding }, { x: exitPoint.x + padding, y: exitPoint.y + padding } ); break; case "bottom": paddedExitPoints.push( { x: exitPoint.x - padding, y: exitPoint.y - padding }, { x: exitPoint.x + padding, y: exitPoint.y - padding } ); break; case "left": paddedExitPoints.push( { x: exitPoint.x + padding, y: exitPoint.y - padding }, { x: exitPoint.x + padding, y: exitPoint.y + padding } ); break; case "right": paddedExitPoints.push( { x: exitPoint.x - padding, y: exitPoint.y - padding }, { x: exitPoint.x - padding, y: exitPoint.y + padding } ); break; } return paddedExitPoints; } function getPointsFromRect(rect) { const { top, right, bottom, left } = rect; return [ { x: left, y: top }, { x: right, y: top }, { x: right, y: bottom }, { x: left, y: bottom } ]; } function isPointInPolygon(point, polygon) { const { x, y } = point; let inside = false; for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { const ii = polygon[i]; const jj = polygon[j]; const xi = ii.x; const yi = ii.y; const xj = jj.x; const yj = jj.y; const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; if (intersect) inside = !inside; } return inside; } function getHull(points) { const newPoints = points.slice(); newPoints.sort((a, b) => { if (a.x < b.x) return -1; else if (a.x > b.x) return 1; else if (a.y < b.y) return -1; else if (a.y > b.y) return 1; else return 0; }); return getHullPresorted(newPoints); } function getHullPresorted(points) { if (points.length <= 1) return points.slice(); const upperHull = []; for (let i = 0; i < points.length; i++) { const p = points[i]; while (upperHull.length >= 2) { const q = upperHull[upperHull.length - 1]; const r = upperHull[upperHull.length - 2]; if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop(); else break; } upperHull.push(p); } upperHull.pop(); const lowerHull = []; for (let i = points.length - 1; i >= 0; i--) { const p = points[i]; while (lowerHull.length >= 2) { const q = lowerHull[lowerHull.length - 1]; const r = lowerHull[lowerHull.length - 2]; if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop(); else break; } lowerHull.push(p); } lowerHull.pop(); if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) { return upperHull; } else { return upperHull.concat(lowerHull); } } var Provider = TooltipProvider; var Root3 = Tooltip; var Trigger = TooltipTrigger; var Portal = TooltipPortal; var Content2 = TooltipContent; var Arrow2 = TooltipArrow; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs" /*!**********************************************************************!*\ !*** ./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs ***! \**********************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useCallbackRef: () => (/* binding */ useCallbackRef) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); // packages/react/use-callback-ref/src/use-callback-ref.tsx function useCallbackRef(callback) { const callbackRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(callback); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { callbackRef.current = callback; }); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => (...args) => callbackRef.current?.(...args), []); } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs" /*!****************************************************************************!*\ !*** ./node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs ***! \****************************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useControllableState: () => (/* binding */ useControllableState), /* harmony export */ useControllableStateReducer: () => (/* binding */ useControllableStateReducer) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); /* harmony import */ var _radix_ui_react_use_effect_event__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-use-effect-event */ "./node_modules/@radix-ui/react-use-effect-event/dist/index.mjs"); // src/use-controllable-state.tsx var useInsertionEffect = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))[" useInsertionEffect ".trim().toString()] || _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect; function useControllableState({ prop, defaultProp, onChange = () => { }, caller }) { const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({ defaultProp, onChange }); const isControlled = prop !== void 0; const value = isControlled ? prop : uncontrolledProp; if (true) { const isControlledRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(prop !== void 0); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const wasControlled = isControlledRef.current; if (wasControlled !== isControlled) { const from = wasControlled ? "controlled" : "uncontrolled"; const to = isControlled ? "controlled" : "uncontrolled"; console.warn( `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.` ); } isControlledRef.current = isControlled; }, [isControlled, caller]); } const setValue = react__WEBPACK_IMPORTED_MODULE_0__.useCallback( (nextValue) => { if (isControlled) { const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue; if (value2 !== prop) { onChangeRef.current?.(value2); } } else { setUncontrolledProp(nextValue); } }, [isControlled, prop, setUncontrolledProp, onChangeRef] ); return [value, setValue]; } function useUncontrolledState({ defaultProp, onChange }) { const [value, setValue] = react__WEBPACK_IMPORTED_MODULE_0__.useState(defaultProp); const prevValueRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(value); const onChangeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(onChange); useInsertionEffect(() => { onChangeRef.current = onChange; }, [onChange]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (prevValueRef.current !== value) { onChangeRef.current?.(value); prevValueRef.current = value; } }, [value, prevValueRef]); return [value, setValue, onChangeRef]; } function isFunction(value) { return typeof value === "function"; } // src/use-controllable-state-reducer.tsx var SYNC_STATE = Symbol("RADIX:SYNC_STATE"); function useControllableStateReducer(reducer, userArgs, initialArg, init) { const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs; const isControlled = controlledState !== void 0; const onChange = (0,_radix_ui_react_use_effect_event__WEBPACK_IMPORTED_MODULE_2__.useEffectEvent)(onChangeProp); if (true) { const isControlledRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(controlledState !== void 0); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const wasControlled = isControlledRef.current; if (wasControlled !== isControlled) { const from = wasControlled ? "controlled" : "uncontrolled"; const to = isControlled ? "controlled" : "uncontrolled"; console.warn( `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.` ); } isControlledRef.current = isControlled; }, [isControlled, caller]); } const args = [{ ...initialArg, state: defaultProp }]; if (init) { args.push(init); } const [internalState, dispatch] = react__WEBPACK_IMPORTED_MODULE_0__.useReducer( (state2, action) => { if (action.type === SYNC_STATE) { return { ...state2, state: action.state }; } const next = reducer(state2, action); if (isControlled && !Object.is(next.state, state2.state)) { onChange(next.state); } return next; }, ...args ); const uncontrolledState = internalState.state; const prevValueRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(uncontrolledState); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (prevValueRef.current !== uncontrolledState) { prevValueRef.current = uncontrolledState; if (!isControlled) { onChange(uncontrolledState); } } }, [onChange, uncontrolledState, prevValueRef, isControlled]); const state = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => { const isControlled2 = controlledState !== void 0; if (isControlled2) { return { ...internalState, state: controlledState }; } return internalState; }, [internalState, controlledState]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { if (isControlled && !Object.is(controlledState, internalState.state)) { dispatch({ type: SYNC_STATE, state: controlledState }); } }, [controlledState, internalState.state, isControlled]); return [state, dispatch]; } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-use-effect-event/dist/index.mjs" /*!**********************************************************************!*\ !*** ./node_modules/@radix-ui/react-use-effect-event/dist/index.mjs ***! \**********************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { var react__WEBPACK_IMPORTED_MODULE_1___namespace_cache; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useEffectEvent: () => (/* binding */ useEffectEvent) /* harmony export */ }); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); // src/use-effect-event.tsx var useReactEffectEvent = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_1__, 2)))[" useEffectEvent ".trim().toString()]; var useReactInsertionEffect = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_1__, 2)))[" useInsertionEffect ".trim().toString()]; function useEffectEvent(callback) { if (typeof useReactEffectEvent === "function") { return useReactEffectEvent(callback); } const ref = react__WEBPACK_IMPORTED_MODULE_1__.useRef(() => { throw new Error("Cannot call an event handler while rendering."); }); if (typeof useReactInsertionEffect === "function") { useReactInsertionEffect(() => { ref.current = callback; }); } else { (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => { ref.current = callback; }); } return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => (...args) => ref.current?.(...args), []); } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs" /*!************************************************************************!*\ !*** ./node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs ***! \************************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useEscapeKeydown: () => (/* binding */ useEscapeKeydown) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs"); // packages/react/use-escape-keydown/src/use-escape-keydown.tsx function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) { const onEscapeKeyDown = (0,_radix_ui_react_use_callback_ref__WEBPACK_IMPORTED_MODULE_1__.useCallbackRef)(onEscapeKeyDownProp); react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { const handleKeyDown = (event) => { if (event.key === "Escape") { onEscapeKeyDown(event); } }; ownerDocument.addEventListener("keydown", handleKeyDown, { capture: true }); return () => ownerDocument.removeEventListener("keydown", handleKeyDown, { capture: true }); }, [onEscapeKeyDown, ownerDocument]); } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs" /*!***********************************************************************!*\ !*** ./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs ***! \***********************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useLayoutEffect: () => (/* binding */ useLayoutEffect2) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); // packages/react/use-layout-effect/src/use-layout-effect.tsx var useLayoutEffect2 = globalThis?.document ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : () => { }; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-use-previous/dist/index.mjs" /*!******************************************************************!*\ !*** ./node_modules/@radix-ui/react-use-previous/dist/index.mjs ***! \******************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ usePrevious: () => (/* binding */ usePrevious) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); // packages/react/use-previous/src/use-previous.tsx function usePrevious(value) { const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef({ value, previous: value }); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => { if (ref.current.value !== value) { ref.current.previous = ref.current.value; ref.current.value = value; } return ref.current.previous; }, [value]); } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-use-size/dist/index.mjs" /*!**************************************************************!*\ !*** ./node_modules/@radix-ui/react-use-size/dist/index.mjs ***! \**************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useSize: () => (/* binding */ useSize) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs"); // packages/react/use-size/src/use-size.tsx function useSize(element) { const [size, setSize] = react__WEBPACK_IMPORTED_MODULE_0__.useState(void 0); (0,_radix_ui_react_use_layout_effect__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => { if (element) { setSize({ width: element.offsetWidth, height: element.offsetHeight }); const resizeObserver = new ResizeObserver((entries) => { if (!Array.isArray(entries)) { return; } if (!entries.length) { return; } const entry = entries[0]; let width; let height; if ("borderBoxSize" in entry) { const borderSizeEntry = entry["borderBoxSize"]; const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry; width = borderSize["inlineSize"]; height = borderSize["blockSize"]; } else { width = element.offsetWidth; height = element.offsetHeight; } setSize({ width, height }); }); resizeObserver.observe(element, { box: "border-box" }); return () => resizeObserver.unobserve(element); } else { setSize(void 0); } }, [element]); return size; } //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/@radix-ui/react-visually-hidden/dist/index.mjs" /*!*********************************************************************!*\ !*** ./node_modules/@radix-ui/react-visually-hidden/dist/index.mjs ***! \*********************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Root: () => (/* binding */ Root), /* harmony export */ VISUALLY_HIDDEN_STYLES: () => (/* binding */ VISUALLY_HIDDEN_STYLES), /* harmony export */ VisuallyHidden: () => (/* binding */ VisuallyHidden) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @radix-ui/react-primitive */ "./node_modules/@radix-ui/react-primitive/dist/index.mjs"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); // src/visually-hidden.tsx var VISUALLY_HIDDEN_STYLES = Object.freeze({ // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss position: "absolute", border: 0, width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", wordWrap: "normal" }); var NAME = "VisuallyHidden"; var VisuallyHidden = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef( (props, forwardedRef) => { return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)( _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_1__.Primitive.span, { ...props, ref: forwardedRef, style: { ...VISUALLY_HIDDEN_STYLES, ...props.style } } ); } ); VisuallyHidden.displayName = NAME; var Root = VisuallyHidden; //# sourceMappingURL=index.mjs.map /***/ }, /***/ "./node_modules/class-variance-authority/dist/index.mjs" /*!**************************************************************!*\ !*** ./node_modules/class-variance-authority/dist/index.mjs ***! \**************************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ cva: () => (/* binding */ cva), /* harmony export */ cx: () => (/* binding */ cx) /* harmony export */ }); /* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.mjs"); /** * Copyright 2022 Joe Bell. All rights reserved. * * This file is licensed to you under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ const falsyToString = (value)=>typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value; const cx = clsx__WEBPACK_IMPORTED_MODULE_0__.clsx; const cva = (base, config)=>(props)=>{ var _config_compoundVariants; if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className); const { variants, defaultVariants } = config; const getVariantClassNames = Object.keys(variants).map((variant)=>{ const variantProp = props === null || props === void 0 ? void 0 : props[variant]; const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant]; if (variantProp === null) return null; const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp); return variants[variant][variantKey]; }); const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{ let [key, value] = param; if (value === undefined) { return acc; } acc[key] = value; return acc; }, {}); const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{ let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param; return Object.entries(compoundVariantOptions).every((param)=>{ let [key, value] = param; return Array.isArray(value) ? value.includes({ ...defaultVariants, ...propsWithoutUndefined }[key]) : ({ ...defaultVariants, ...propsWithoutUndefined })[key] === value; }) ? [ ...acc, cvClass, cvClassName ] : acc; }, []); return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className); }; /***/ }, /***/ "./node_modules/clsx/dist/clsx.mjs" /*!*****************************************!*\ !*** ./node_modules/clsx/dist/clsx.mjs ***! \*****************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ clsx: () => (/* binding */ clsx), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clsx); /***/ }, /***/ "./node_modules/tailwind-merge/dist/bundle-mjs.mjs" /*!*********************************************************!*\ !*** ./node_modules/tailwind-merge/dist/bundle-mjs.mjs ***! \*********************************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createTailwindMerge: () => (/* binding */ createTailwindMerge), /* harmony export */ extendTailwindMerge: () => (/* binding */ extendTailwindMerge), /* harmony export */ fromTheme: () => (/* binding */ fromTheme), /* harmony export */ getDefaultConfig: () => (/* binding */ getDefaultConfig), /* harmony export */ mergeConfigs: () => (/* binding */ mergeConfigs), /* harmony export */ twJoin: () => (/* binding */ twJoin), /* harmony export */ twMerge: () => (/* binding */ twMerge), /* harmony export */ validators: () => (/* binding */ validators) /* harmony export */ }); const CLASS_PART_SEPARATOR = '-'; const createClassGroupUtils = config => { const classMap = createClassMap(config); const { conflictingClassGroups, conflictingClassGroupModifiers } = config; const getClassGroupId = className => { const classParts = className.split(CLASS_PART_SEPARATOR); // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts. if (classParts[0] === '' && classParts.length !== 1) { classParts.shift(); } return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className); }; const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => { const conflicts = conflictingClassGroups[classGroupId] || []; if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) { return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]]; } return conflicts; }; return { getClassGroupId, getConflictingClassGroupIds }; }; const getGroupRecursive = (classParts, classPartObject) => { if (classParts.length === 0) { return classPartObject.classGroupId; } const currentClassPart = classParts[0]; const nextClassPartObject = classPartObject.nextPart.get(currentClassPart); const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined; if (classGroupFromNextClassPart) { return classGroupFromNextClassPart; } if (classPartObject.validators.length === 0) { return undefined; } const classRest = classParts.join(CLASS_PART_SEPARATOR); return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId; }; const arbitraryPropertyRegex = /^\[(.+)\]$/; const getGroupIdForArbitraryProperty = className => { if (arbitraryPropertyRegex.test(className)) { const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1]; const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':')); if (property) { // I use two dots here because one dot is used as prefix for class groups in plugins return 'arbitrary..' + property; } } }; /** * Exported for testing only */ const createClassMap = config => { const { theme, prefix } = config; const classMap = { nextPart: new Map(), validators: [] }; const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix); prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => { processClassesRecursively(classGroup, classMap, classGroupId, theme); }); return classMap; }; const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => { classGroup.forEach(classDefinition => { if (typeof classDefinition === 'string') { const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition); classPartObjectToEdit.classGroupId = classGroupId; return; } if (typeof classDefinition === 'function') { if (isThemeGetter(classDefinition)) { processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme); return; } classPartObject.validators.push({ validator: classDefinition, classGroupId }); return; } Object.entries(classDefinition).forEach(([key, classGroup]) => { processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme); }); }); }; const getPart = (classPartObject, path) => { let currentClassPartObject = classPartObject; path.split(CLASS_PART_SEPARATOR).forEach(pathPart => { if (!currentClassPartObject.nextPart.has(pathPart)) { currentClassPartObject.nextPart.set(pathPart, { nextPart: new Map(), validators: [] }); } currentClassPartObject = currentClassPartObject.nextPart.get(pathPart); }); return currentClassPartObject; }; const isThemeGetter = func => func.isThemeGetter; const getPrefixedClassGroupEntries = (classGroupEntries, prefix) => { if (!prefix) { return classGroupEntries; } return classGroupEntries.map(([classGroupId, classGroup]) => { const prefixedClassGroup = classGroup.map(classDefinition => { if (typeof classDefinition === 'string') { return prefix + classDefinition; } if (typeof classDefinition === 'object') { return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value])); } return classDefinition; }); return [classGroupId, prefixedClassGroup]; }); }; // LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance const createLruCache = maxCacheSize => { if (maxCacheSize < 1) { return { get: () => undefined, set: () => {} }; } let cacheSize = 0; let cache = new Map(); let previousCache = new Map(); const update = (key, value) => { cache.set(key, value); cacheSize++; if (cacheSize > maxCacheSize) { cacheSize = 0; previousCache = cache; cache = new Map(); } }; return { get(key) { let value = cache.get(key); if (value !== undefined) { return value; } if ((value = previousCache.get(key)) !== undefined) { update(key, value); return value; } }, set(key, value) { if (cache.has(key)) { cache.set(key, value); } else { update(key, value); } } }; }; const IMPORTANT_MODIFIER = '!'; const createParseClassName = config => { const { separator, experimentalParseClassName } = config; const isSeparatorSingleCharacter = separator.length === 1; const firstSeparatorCharacter = separator[0]; const separatorLength = separator.length; // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js const parseClassName = className => { const modifiers = []; let bracketDepth = 0; let modifierStart = 0; let postfixModifierPosition; for (let index = 0; index < className.length; index++) { let currentCharacter = className[index]; if (bracketDepth === 0) { if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) { modifiers.push(className.slice(modifierStart, index)); modifierStart = index + separatorLength; continue; } if (currentCharacter === '/') { postfixModifierPosition = index; continue; } } if (currentCharacter === '[') { bracketDepth++; } else if (currentCharacter === ']') { bracketDepth--; } } const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart); const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER); const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier; const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined; return { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition }; }; if (experimentalParseClassName) { return className => experimentalParseClassName({ className, parseClassName }); } return parseClassName; }; /** * Sorts modifiers according to following schema: * - Predefined modifiers are sorted alphabetically * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it */ const sortModifiers = modifiers => { if (modifiers.length <= 1) { return modifiers; } const sortedModifiers = []; let unsortedModifiers = []; modifiers.forEach(modifier => { const isArbitraryVariant = modifier[0] === '['; if (isArbitraryVariant) { sortedModifiers.push(...unsortedModifiers.sort(), modifier); unsortedModifiers = []; } else { unsortedModifiers.push(modifier); } }); sortedModifiers.push(...unsortedModifiers.sort()); return sortedModifiers; }; const createConfigUtils = config => ({ cache: createLruCache(config.cacheSize), parseClassName: createParseClassName(config), ...createClassGroupUtils(config) }); const SPLIT_CLASSES_REGEX = /\s+/; const mergeClassList = (classList, configUtils) => { const { parseClassName, getClassGroupId, getConflictingClassGroupIds } = configUtils; /** * Set of classGroupIds in following format: * `{importantModifier}{variantModifiers}{classGroupId}` * @example 'float' * @example 'hover:focus:bg-color' * @example 'md:!pr' */ const classGroupsInConflict = []; const classNames = classList.trim().split(SPLIT_CLASSES_REGEX); let result = ''; for (let index = classNames.length - 1; index >= 0; index -= 1) { const originalClassName = classNames[index]; const { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition } = parseClassName(originalClassName); let hasPostfixModifier = Boolean(maybePostfixModifierPosition); let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName); if (!classGroupId) { if (!hasPostfixModifier) { // Not a Tailwind class result = originalClassName + (result.length > 0 ? ' ' + result : result); continue; } classGroupId = getClassGroupId(baseClassName); if (!classGroupId) { // Not a Tailwind class result = originalClassName + (result.length > 0 ? ' ' + result : result); continue; } hasPostfixModifier = false; } const variantModifier = sortModifiers(modifiers).join(':'); const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier; const classId = modifierId + classGroupId; if (classGroupsInConflict.includes(classId)) { // Tailwind class omitted due to conflict continue; } classGroupsInConflict.push(classId); const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier); for (let i = 0; i < conflictGroups.length; ++i) { const group = conflictGroups[i]; classGroupsInConflict.push(modifierId + group); } // Tailwind class not in conflict result = originalClassName + (result.length > 0 ? ' ' + result : result); } return result; }; /** * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better. * * Specifically: * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts * * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com) */ function twJoin() { let index = 0; let argument; let resolvedValue; let string = ''; while (index < arguments.length) { if (argument = arguments[index++]) { if (resolvedValue = toValue(argument)) { string && (string += ' '); string += resolvedValue; } } } return string; } const toValue = mix => { if (typeof mix === 'string') { return mix; } let resolvedValue; let string = ''; for (let k = 0; k < mix.length; k++) { if (mix[k]) { if (resolvedValue = toValue(mix[k])) { string && (string += ' '); string += resolvedValue; } } } return string; }; function createTailwindMerge(createConfigFirst, ...createConfigRest) { let configUtils; let cacheGet; let cacheSet; let functionToCall = initTailwindMerge; function initTailwindMerge(classList) { const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst()); configUtils = createConfigUtils(config); cacheGet = configUtils.cache.get; cacheSet = configUtils.cache.set; functionToCall = tailwindMerge; return tailwindMerge(classList); } function tailwindMerge(classList) { const cachedResult = cacheGet(classList); if (cachedResult) { return cachedResult; } const result = mergeClassList(classList, configUtils); cacheSet(classList, result); return result; } return function callTailwindMerge() { return functionToCall(twJoin.apply(null, arguments)); }; } const fromTheme = key => { const themeGetter = theme => theme[key] || []; themeGetter.isThemeGetter = true; return themeGetter; }; const arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i; const fractionRegex = /^\d+\/\d+$/; const stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']); const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/; const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/; const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/; // Shadow always begins with x and y offset separated by underscore optionally prepended by inset const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/; const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/; const isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value); const isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly); const isNumber = value => Boolean(value) && !Number.isNaN(Number(value)); const isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber); const isInteger = value => Boolean(value) && Number.isInteger(Number(value)); const isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1)); const isArbitraryValue = value => arbitraryValueRegex.test(value); const isTshirtSize = value => tshirtUnitRegex.test(value); const sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']); const isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever); const isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever); const imageLabels = /*#__PURE__*/new Set(['image', 'url']); const isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage); const isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow); const isAny = () => true; const getIsArbitraryValue = (value, label, testValue) => { const result = arbitraryValueRegex.exec(value); if (result) { if (result[1]) { return typeof label === 'string' ? result[1] === label : label.has(result[1]); } return testValue(result[2]); } return false; }; const isLengthOnly = value => // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths. // For example, `hsl(0 0% 0%)` would be classified as a length without this check. // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough. lengthUnitRegex.test(value) && !colorFunctionRegex.test(value); const isNever = () => false; const isShadow = value => shadowRegex.test(value); const isImage = value => imageRegex.test(value); const validators = /*#__PURE__*/Object.defineProperty({ __proto__: null, isAny, isArbitraryImage, isArbitraryLength, isArbitraryNumber, isArbitraryPosition, isArbitraryShadow, isArbitrarySize, isArbitraryValue, isInteger, isLength, isNumber, isPercent, isTshirtSize }, Symbol.toStringTag, { value: 'Module' }); const getDefaultConfig = () => { const colors = fromTheme('colors'); const spacing = fromTheme('spacing'); const blur = fromTheme('blur'); const brightness = fromTheme('brightness'); const borderColor = fromTheme('borderColor'); const borderRadius = fromTheme('borderRadius'); const borderSpacing = fromTheme('borderSpacing'); const borderWidth = fromTheme('borderWidth'); const contrast = fromTheme('contrast'); const grayscale = fromTheme('grayscale'); const hueRotate = fromTheme('hueRotate'); const invert = fromTheme('invert'); const gap = fromTheme('gap'); const gradientColorStops = fromTheme('gradientColorStops'); const gradientColorStopPositions = fromTheme('gradientColorStopPositions'); const inset = fromTheme('inset'); const margin = fromTheme('margin'); const opacity = fromTheme('opacity'); const padding = fromTheme('padding'); const saturate = fromTheme('saturate'); const scale = fromTheme('scale'); const sepia = fromTheme('sepia'); const skew = fromTheme('skew'); const space = fromTheme('space'); const translate = fromTheme('translate'); const getOverscroll = () => ['auto', 'contain', 'none']; const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll']; const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing]; const getSpacingWithArbitrary = () => [isArbitraryValue, spacing]; const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength]; const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue]; const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top']; const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none']; const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity']; const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch']; const getZeroAndEmpty = () => ['', '0', isArbitraryValue]; const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column']; const getNumberAndArbitrary = () => [isNumber, isArbitraryValue]; return { cacheSize: 500, separator: ':', theme: { colors: [isAny], spacing: [isLength, isArbitraryLength], blur: ['none', '', isTshirtSize, isArbitraryValue], brightness: getNumberAndArbitrary(), borderColor: [colors], borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue], borderSpacing: getSpacingWithArbitrary(), borderWidth: getLengthWithEmptyAndArbitrary(), contrast: getNumberAndArbitrary(), grayscale: getZeroAndEmpty(), hueRotate: getNumberAndArbitrary(), invert: getZeroAndEmpty(), gap: getSpacingWithArbitrary(), gradientColorStops: [colors], gradientColorStopPositions: [isPercent, isArbitraryLength], inset: getSpacingWithAutoAndArbitrary(), margin: getSpacingWithAutoAndArbitrary(), opacity: getNumberAndArbitrary(), padding: getSpacingWithArbitrary(), saturate: getNumberAndArbitrary(), scale: getNumberAndArbitrary(), sepia: getZeroAndEmpty(), skew: getNumberAndArbitrary(), space: getSpacingWithArbitrary(), translate: getSpacingWithArbitrary() }, classGroups: { // Layout /** * Aspect Ratio * @see https://tailwindcss.com/docs/aspect-ratio */ aspect: [{ aspect: ['auto', 'square', 'video', isArbitraryValue] }], /** * Container * @see https://tailwindcss.com/docs/container */ container: ['container'], /** * Columns * @see https://tailwindcss.com/docs/columns */ columns: [{ columns: [isTshirtSize] }], /** * Break After * @see https://tailwindcss.com/docs/break-after */ 'break-after': [{ 'break-after': getBreaks() }], /** * Break Before * @see https://tailwindcss.com/docs/break-before */ 'break-before': [{ 'break-before': getBreaks() }], /** * Break Inside * @see https://tailwindcss.com/docs/break-inside */ 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }], /** * Box Decoration Break * @see https://tailwindcss.com/docs/box-decoration-break */ 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }], /** * Box Sizing * @see https://tailwindcss.com/docs/box-sizing */ box: [{ box: ['border', 'content'] }], /** * Display * @see https://tailwindcss.com/docs/display */ display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'], /** * Floats * @see https://tailwindcss.com/docs/float */ float: [{ float: ['right', 'left', 'none', 'start', 'end'] }], /** * Clear * @see https://tailwindcss.com/docs/clear */ clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }], /** * Isolation * @see https://tailwindcss.com/docs/isolation */ isolation: ['isolate', 'isolation-auto'], /** * Object Fit * @see https://tailwindcss.com/docs/object-fit */ 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }], /** * Object Position * @see https://tailwindcss.com/docs/object-position */ 'object-position': [{ object: [...getPositions(), isArbitraryValue] }], /** * Overflow * @see https://tailwindcss.com/docs/overflow */ overflow: [{ overflow: getOverflow() }], /** * Overflow X * @see https://tailwindcss.com/docs/overflow */ 'overflow-x': [{ 'overflow-x': getOverflow() }], /** * Overflow Y * @see https://tailwindcss.com/docs/overflow */ 'overflow-y': [{ 'overflow-y': getOverflow() }], /** * Overscroll Behavior * @see https://tailwindcss.com/docs/overscroll-behavior */ overscroll: [{ overscroll: getOverscroll() }], /** * Overscroll Behavior X * @see https://tailwindcss.com/docs/overscroll-behavior */ 'overscroll-x': [{ 'overscroll-x': getOverscroll() }], /** * Overscroll Behavior Y * @see https://tailwindcss.com/docs/overscroll-behavior */ 'overscroll-y': [{ 'overscroll-y': getOverscroll() }], /** * Position * @see https://tailwindcss.com/docs/position */ position: ['static', 'fixed', 'absolute', 'relative', 'sticky'], /** * Top / Right / Bottom / Left * @see https://tailwindcss.com/docs/top-right-bottom-left */ inset: [{ inset: [inset] }], /** * Right / Left * @see https://tailwindcss.com/docs/top-right-bottom-left */ 'inset-x': [{ 'inset-x': [inset] }], /** * Top / Bottom * @see https://tailwindcss.com/docs/top-right-bottom-left */ 'inset-y': [{ 'inset-y': [inset] }], /** * Start * @see https://tailwindcss.com/docs/top-right-bottom-left */ start: [{ start: [inset] }], /** * End * @see https://tailwindcss.com/docs/top-right-bottom-left */ end: [{ end: [inset] }], /** * Top * @see https://tailwindcss.com/docs/top-right-bottom-left */ top: [{ top: [inset] }], /** * Right * @see https://tailwindcss.com/docs/top-right-bottom-left */ right: [{ right: [inset] }], /** * Bottom * @see https://tailwindcss.com/docs/top-right-bottom-left */ bottom: [{ bottom: [inset] }], /** * Left * @see https://tailwindcss.com/docs/top-right-bottom-left */ left: [{ left: [inset] }], /** * Visibility * @see https://tailwindcss.com/docs/visibility */ visibility: ['visible', 'invisible', 'collapse'], /** * Z-Index * @see https://tailwindcss.com/docs/z-index */ z: [{ z: ['auto', isInteger, isArbitraryValue] }], // Flexbox and Grid /** * Flex Basis * @see https://tailwindcss.com/docs/flex-basis */ basis: [{ basis: getSpacingWithAutoAndArbitrary() }], /** * Flex Direction * @see https://tailwindcss.com/docs/flex-direction */ 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }], /** * Flex Wrap * @see https://tailwindcss.com/docs/flex-wrap */ 'flex-wrap': [{ flex: ['wrap', 'wrap-reverse', 'nowrap'] }], /** * Flex * @see https://tailwindcss.com/docs/flex */ flex: [{ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue] }], /** * Flex Grow * @see https://tailwindcss.com/docs/flex-grow */ grow: [{ grow: getZeroAndEmpty() }], /** * Flex Shrink * @see https://tailwindcss.com/docs/flex-shrink */ shrink: [{ shrink: getZeroAndEmpty() }], /** * Order * @see https://tailwindcss.com/docs/order */ order: [{ order: ['first', 'last', 'none', isInteger, isArbitraryValue] }], /** * Grid Template Columns * @see https://tailwindcss.com/docs/grid-template-columns */ 'grid-cols': [{ 'grid-cols': [isAny] }], /** * Grid Column Start / End * @see https://tailwindcss.com/docs/grid-column */ 'col-start-end': [{ col: ['auto', { span: ['full', isInteger, isArbitraryValue] }, isArbitraryValue] }], /** * Grid Column Start * @see https://tailwindcss.com/docs/grid-column */ 'col-start': [{ 'col-start': getNumberWithAutoAndArbitrary() }], /** * Grid Column End * @see https://tailwindcss.com/docs/grid-column */ 'col-end': [{ 'col-end': getNumberWithAutoAndArbitrary() }], /** * Grid Template Rows * @see https://tailwindcss.com/docs/grid-template-rows */ 'grid-rows': [{ 'grid-rows': [isAny] }], /** * Grid Row Start / End * @see https://tailwindcss.com/docs/grid-row */ 'row-start-end': [{ row: ['auto', { span: [isInteger, isArbitraryValue] }, isArbitraryValue] }], /** * Grid Row Start * @see https://tailwindcss.com/docs/grid-row */ 'row-start': [{ 'row-start': getNumberWithAutoAndArbitrary() }], /** * Grid Row End * @see https://tailwindcss.com/docs/grid-row */ 'row-end': [{ 'row-end': getNumberWithAutoAndArbitrary() }], /** * Grid Auto Flow * @see https://tailwindcss.com/docs/grid-auto-flow */ 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }], /** * Grid Auto Columns * @see https://tailwindcss.com/docs/grid-auto-columns */ 'auto-cols': [{ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue] }], /** * Grid Auto Rows * @see https://tailwindcss.com/docs/grid-auto-rows */ 'auto-rows': [{ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue] }], /** * Gap * @see https://tailwindcss.com/docs/gap */ gap: [{ gap: [gap] }], /** * Gap X * @see https://tailwindcss.com/docs/gap */ 'gap-x': [{ 'gap-x': [gap] }], /** * Gap Y * @see https://tailwindcss.com/docs/gap */ 'gap-y': [{ 'gap-y': [gap] }], /** * Justify Content * @see https://tailwindcss.com/docs/justify-content */ 'justify-content': [{ justify: ['normal', ...getAlign()] }], /** * Justify Items * @see https://tailwindcss.com/docs/justify-items */ 'justify-items': [{ 'justify-items': ['start', 'end', 'center', 'stretch'] }], /** * Justify Self * @see https://tailwindcss.com/docs/justify-self */ 'justify-self': [{ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch'] }], /** * Align Content * @see https://tailwindcss.com/docs/align-content */ 'align-content': [{ content: ['normal', ...getAlign(), 'baseline'] }], /** * Align Items * @see https://tailwindcss.com/docs/align-items */ 'align-items': [{ items: ['start', 'end', 'center', 'baseline', 'stretch'] }], /** * Align Self * @see https://tailwindcss.com/docs/align-self */ 'align-self': [{ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline'] }], /** * Place Content * @see https://tailwindcss.com/docs/place-content */ 'place-content': [{ 'place-content': [...getAlign(), 'baseline'] }], /** * Place Items * @see https://tailwindcss.com/docs/place-items */ 'place-items': [{ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch'] }], /** * Place Self * @see https://tailwindcss.com/docs/place-self */ 'place-self': [{ 'place-self': ['auto', 'start', 'end', 'center', 'stretch'] }], // Spacing /** * Padding * @see https://tailwindcss.com/docs/padding */ p: [{ p: [padding] }], /** * Padding X * @see https://tailwindcss.com/docs/padding */ px: [{ px: [padding] }], /** * Padding Y * @see https://tailwindcss.com/docs/padding */ py: [{ py: [padding] }], /** * Padding Start * @see https://tailwindcss.com/docs/padding */ ps: [{ ps: [padding] }], /** * Padding End * @see https://tailwindcss.com/docs/padding */ pe: [{ pe: [padding] }], /** * Padding Top * @see https://tailwindcss.com/docs/padding */ pt: [{ pt: [padding] }], /** * Padding Right * @see https://tailwindcss.com/docs/padding */ pr: [{ pr: [padding] }], /** * Padding Bottom * @see https://tailwindcss.com/docs/padding */ pb: [{ pb: [padding] }], /** * Padding Left * @see https://tailwindcss.com/docs/padding */ pl: [{ pl: [padding] }], /** * Margin * @see https://tailwindcss.com/docs/margin */ m: [{ m: [margin] }], /** * Margin X * @see https://tailwindcss.com/docs/margin */ mx: [{ mx: [margin] }], /** * Margin Y * @see https://tailwindcss.com/docs/margin */ my: [{ my: [margin] }], /** * Margin Start * @see https://tailwindcss.com/docs/margin */ ms: [{ ms: [margin] }], /** * Margin End * @see https://tailwindcss.com/docs/margin */ me: [{ me: [margin] }], /** * Margin Top * @see https://tailwindcss.com/docs/margin */ mt: [{ mt: [margin] }], /** * Margin Right * @see https://tailwindcss.com/docs/margin */ mr: [{ mr: [margin] }], /** * Margin Bottom * @see https://tailwindcss.com/docs/margin */ mb: [{ mb: [margin] }], /** * Margin Left * @see https://tailwindcss.com/docs/margin */ ml: [{ ml: [margin] }], /** * Space Between X * @see https://tailwindcss.com/docs/space */ 'space-x': [{ 'space-x': [space] }], /** * Space Between X Reverse * @see https://tailwindcss.com/docs/space */ 'space-x-reverse': ['space-x-reverse'], /** * Space Between Y * @see https://tailwindcss.com/docs/space */ 'space-y': [{ 'space-y': [space] }], /** * Space Between Y Reverse * @see https://tailwindcss.com/docs/space */ 'space-y-reverse': ['space-y-reverse'], // Sizing /** * Width * @see https://tailwindcss.com/docs/width */ w: [{ w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing] }], /** * Min-Width * @see https://tailwindcss.com/docs/min-width */ 'min-w': [{ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit'] }], /** * Max-Width * @see https://tailwindcss.com/docs/max-width */ 'max-w': [{ 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', { screen: [isTshirtSize] }, isTshirtSize] }], /** * Height * @see https://tailwindcss.com/docs/height */ h: [{ h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] }], /** * Min-Height * @see https://tailwindcss.com/docs/min-height */ 'min-h': [{ 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] }], /** * Max-Height * @see https://tailwindcss.com/docs/max-height */ 'max-h': [{ 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] }], /** * Size * @see https://tailwindcss.com/docs/size */ size: [{ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit'] }], // Typography /** * Font Size * @see https://tailwindcss.com/docs/font-size */ 'font-size': [{ text: ['base', isTshirtSize, isArbitraryLength] }], /** * Font Smoothing * @see https://tailwindcss.com/docs/font-smoothing */ 'font-smoothing': ['antialiased', 'subpixel-antialiased'], /** * Font Style * @see https://tailwindcss.com/docs/font-style */ 'font-style': ['italic', 'not-italic'], /** * Font Weight * @see https://tailwindcss.com/docs/font-weight */ 'font-weight': [{ font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber] }], /** * Font Family * @see https://tailwindcss.com/docs/font-family */ 'font-family': [{ font: [isAny] }], /** * Font Variant Numeric * @see https://tailwindcss.com/docs/font-variant-numeric */ 'fvn-normal': ['normal-nums'], /** * Font Variant Numeric * @see https://tailwindcss.com/docs/font-variant-numeric */ 'fvn-ordinal': ['ordinal'], /** * Font Variant Numeric * @see https://tailwindcss.com/docs/font-variant-numeric */ 'fvn-slashed-zero': ['slashed-zero'], /** * Font Variant Numeric * @see https://tailwindcss.com/docs/font-variant-numeric */ 'fvn-figure': ['lining-nums', 'oldstyle-nums'], /** * Font Variant Numeric * @see https://tailwindcss.com/docs/font-variant-numeric */ 'fvn-spacing': ['proportional-nums', 'tabular-nums'], /** * Font Variant Numeric * @see https://tailwindcss.com/docs/font-variant-numeric */ 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'], /** * Letter Spacing * @see https://tailwindcss.com/docs/letter-spacing */ tracking: [{ tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue] }], /** * Line Clamp * @see https://tailwindcss.com/docs/line-clamp */ 'line-clamp': [{ 'line-clamp': ['none', isNumber, isArbitraryNumber] }], /** * Line Height * @see https://tailwindcss.com/docs/line-height */ leading: [{ leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue] }], /** * List Style Image * @see https://tailwindcss.com/docs/list-style-image */ 'list-image': [{ 'list-image': ['none', isArbitraryValue] }], /** * List Style Type * @see https://tailwindcss.com/docs/list-style-type */ 'list-style-type': [{ list: ['none', 'disc', 'decimal', isArbitraryValue] }], /** * List Style Position * @see https://tailwindcss.com/docs/list-style-position */ 'list-style-position': [{ list: ['inside', 'outside'] }], /** * Placeholder Color * @deprecated since Tailwind CSS v3.0.0 * @see https://tailwindcss.com/docs/placeholder-color */ 'placeholder-color': [{ placeholder: [colors] }], /** * Placeholder Opacity * @see https://tailwindcss.com/docs/placeholder-opacity */ 'placeholder-opacity': [{ 'placeholder-opacity': [opacity] }], /** * Text Alignment * @see https://tailwindcss.com/docs/text-align */ 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }], /** * Text Color * @see https://tailwindcss.com/docs/text-color */ 'text-color': [{ text: [colors] }], /** * Text Opacity * @see https://tailwindcss.com/docs/text-opacity */ 'text-opacity': [{ 'text-opacity': [opacity] }], /** * Text Decoration * @see https://tailwindcss.com/docs/text-decoration */ 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'], /** * Text Decoration Style * @see https://tailwindcss.com/docs/text-decoration-style */ 'text-decoration-style': [{ decoration: [...getLineStyles(), 'wavy'] }], /** * Text Decoration Thickness * @see https://tailwindcss.com/docs/text-decoration-thickness */ 'text-decoration-thickness': [{ decoration: ['auto', 'from-font', isLength, isArbitraryLength] }], /** * Text Underline Offset * @see https://tailwindcss.com/docs/text-underline-offset */ 'underline-offset': [{ 'underline-offset': ['auto', isLength, isArbitraryValue] }], /** * Text Decoration Color * @see https://tailwindcss.com/docs/text-decoration-color */ 'text-decoration-color': [{ decoration: [colors] }], /** * Text Transform * @see https://tailwindcss.com/docs/text-transform */ 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'], /** * Text Overflow * @see https://tailwindcss.com/docs/text-overflow */ 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'], /** * Text Wrap * @see https://tailwindcss.com/docs/text-wrap */ 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }], /** * Text Indent * @see https://tailwindcss.com/docs/text-indent */ indent: [{ indent: getSpacingWithArbitrary() }], /** * Vertical Alignment * @see https://tailwindcss.com/docs/vertical-align */ 'vertical-align': [{ align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue] }], /** * Whitespace * @see https://tailwindcss.com/docs/whitespace */ whitespace: [{ whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] }], /** * Word Break * @see https://tailwindcss.com/docs/word-break */ break: [{ break: ['normal', 'words', 'all', 'keep'] }], /** * Hyphens * @see https://tailwindcss.com/docs/hyphens */ hyphens: [{ hyphens: ['none', 'manual', 'auto'] }], /** * Content * @see https://tailwindcss.com/docs/content */ content: [{ content: ['none', isArbitraryValue] }], // Backgrounds /** * Background Attachment * @see https://tailwindcss.com/docs/background-attachment */ 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }], /** * Background Clip * @see https://tailwindcss.com/docs/background-clip */ 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }], /** * Background Opacity * @deprecated since Tailwind CSS v3.0.0 * @see https://tailwindcss.com/docs/background-opacity */ 'bg-opacity': [{ 'bg-opacity': [opacity] }], /** * Background Origin * @see https://tailwindcss.com/docs/background-origin */ 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }], /** * Background Position * @see https://tailwindcss.com/docs/background-position */ 'bg-position': [{ bg: [...getPositions(), isArbitraryPosition] }], /** * Background Repeat * @see https://tailwindcss.com/docs/background-repeat */ 'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'round', 'space'] }] }], /** * Background Size * @see https://tailwindcss.com/docs/background-size */ 'bg-size': [{ bg: ['auto', 'cover', 'contain', isArbitrarySize] }], /** * Background Image * @see https://tailwindcss.com/docs/background-image */ 'bg-image': [{ bg: ['none', { 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] }, isArbitraryImage] }], /** * Background Color * @see https://tailwindcss.com/docs/background-color */ 'bg-color': [{ bg: [colors] }], /** * Gradient Color Stops From Position * @see https://tailwindcss.com/docs/gradient-color-stops */ 'gradient-from-pos': [{ from: [gradientColorStopPositions] }], /** * Gradient Color Stops Via Position * @see https://tailwindcss.com/docs/gradient-color-stops */ 'gradient-via-pos': [{ via: [gradientColorStopPositions] }], /** * Gradient Color Stops To Position * @see https://tailwindcss.com/docs/gradient-color-stops */ 'gradient-to-pos': [{ to: [gradientColorStopPositions] }], /** * Gradient Color Stops From * @see https://tailwindcss.com/docs/gradient-color-stops */ 'gradient-from': [{ from: [gradientColorStops] }], /** * Gradient Color Stops Via * @see https://tailwindcss.com/docs/gradient-color-stops */ 'gradient-via': [{ via: [gradientColorStops] }], /** * Gradient Color Stops To * @see https://tailwindcss.com/docs/gradient-color-stops */ 'gradient-to': [{ to: [gradientColorStops] }], // Borders /** * Border Radius * @see https://tailwindcss.com/docs/border-radius */ rounded: [{ rounded: [borderRadius] }], /** * Border Radius Start * @see https://tailwindcss.com/docs/border-radius */ 'rounded-s': [{ 'rounded-s': [borderRadius] }], /** * Border Radius End * @see https://tailwindcss.com/docs/border-radius */ 'rounded-e': [{ 'rounded-e': [borderRadius] }], /** * Border Radius Top * @see https://tailwindcss.com/docs/border-radius */ 'rounded-t': [{ 'rounded-t': [borderRadius] }], /** * Border Radius Right * @see https://tailwindcss.com/docs/border-radius */ 'rounded-r': [{ 'rounded-r': [borderRadius] }], /** * Border Radius Bottom * @see https://tailwindcss.com/docs/border-radius */ 'rounded-b': [{ 'rounded-b': [borderRadius] }], /** * Border Radius Left * @see https://tailwindcss.com/docs/border-radius */ 'rounded-l': [{ 'rounded-l': [borderRadius] }], /** * Border Radius Start Start * @see https://tailwindcss.com/docs/border-radius */ 'rounded-ss': [{ 'rounded-ss': [borderRadius] }], /** * Border Radius Start End * @see https://tailwindcss.com/docs/border-radius */ 'rounded-se': [{ 'rounded-se': [borderRadius] }], /** * Border Radius End End * @see https://tailwindcss.com/docs/border-radius */ 'rounded-ee': [{ 'rounded-ee': [borderRadius] }], /** * Border Radius End Start * @see https://tailwindcss.com/docs/border-radius */ 'rounded-es': [{ 'rounded-es': [borderRadius] }], /** * Border Radius Top Left * @see https://tailwindcss.com/docs/border-radius */ 'rounded-tl': [{ 'rounded-tl': [borderRadius] }], /** * Border Radius Top Right * @see https://tailwindcss.com/docs/border-radius */ 'rounded-tr': [{ 'rounded-tr': [borderRadius] }], /** * Border Radius Bottom Right * @see https://tailwindcss.com/docs/border-radius */ 'rounded-br': [{ 'rounded-br': [borderRadius] }], /** * Border Radius Bottom Left * @see https://tailwindcss.com/docs/border-radius */ 'rounded-bl': [{ 'rounded-bl': [borderRadius] }], /** * Border Width * @see https://tailwindcss.com/docs/border-width */ 'border-w': [{ border: [borderWidth] }], /** * Border Width X * @see https://tailwindcss.com/docs/border-width */ 'border-w-x': [{ 'border-x': [borderWidth] }], /** * Border Width Y * @see https://tailwindcss.com/docs/border-width */ 'border-w-y': [{ 'border-y': [borderWidth] }], /** * Border Width Start * @see https://tailwindcss.com/docs/border-width */ 'border-w-s': [{ 'border-s': [borderWidth] }], /** * Border Width End * @see https://tailwindcss.com/docs/border-width */ 'border-w-e': [{ 'border-e': [borderWidth] }], /** * Border Width Top * @see https://tailwindcss.com/docs/border-width */ 'border-w-t': [{ 'border-t': [borderWidth] }], /** * Border Width Right * @see https://tailwindcss.com/docs/border-width */ 'border-w-r': [{ 'border-r': [borderWidth] }], /** * Border Width Bottom * @see https://tailwindcss.com/docs/border-width */ 'border-w-b': [{ 'border-b': [borderWidth] }], /** * Border Width Left * @see https://tailwindcss.com/docs/border-width */ 'border-w-l': [{ 'border-l': [borderWidth] }], /** * Border Opacity * @see https://tailwindcss.com/docs/border-opacity */ 'border-opacity': [{ 'border-opacity': [opacity] }], /** * Border Style * @see https://tailwindcss.com/docs/border-style */ 'border-style': [{ border: [...getLineStyles(), 'hidden'] }], /** * Divide Width X * @see https://tailwindcss.com/docs/divide-width */ 'divide-x': [{ 'divide-x': [borderWidth] }], /** * Divide Width X Reverse * @see https://tailwindcss.com/docs/divide-width */ 'divide-x-reverse': ['divide-x-reverse'], /** * Divide Width Y * @see https://tailwindcss.com/docs/divide-width */ 'divide-y': [{ 'divide-y': [borderWidth] }], /** * Divide Width Y Reverse * @see https://tailwindcss.com/docs/divide-width */ 'divide-y-reverse': ['divide-y-reverse'], /** * Divide Opacity * @see https://tailwindcss.com/docs/divide-opacity */ 'divide-opacity': [{ 'divide-opacity': [opacity] }], /** * Divide Style * @see https://tailwindcss.com/docs/divide-style */ 'divide-style': [{ divide: getLineStyles() }], /** * Border Color * @see https://tailwindcss.com/docs/border-color */ 'border-color': [{ border: [borderColor] }], /** * Border Color X * @see https://tailwindcss.com/docs/border-color */ 'border-color-x': [{ 'border-x': [borderColor] }], /** * Border Color Y * @see https://tailwindcss.com/docs/border-color */ 'border-color-y': [{ 'border-y': [borderColor] }], /** * Border Color S * @see https://tailwindcss.com/docs/border-color */ 'border-color-s': [{ 'border-s': [borderColor] }], /** * Border Color E * @see https://tailwindcss.com/docs/border-color */ 'border-color-e': [{ 'border-e': [borderColor] }], /** * Border Color Top * @see https://tailwindcss.com/docs/border-color */ 'border-color-t': [{ 'border-t': [borderColor] }], /** * Border Color Right * @see https://tailwindcss.com/docs/border-color */ 'border-color-r': [{ 'border-r': [borderColor] }], /** * Border Color Bottom * @see https://tailwindcss.com/docs/border-color */ 'border-color-b': [{ 'border-b': [borderColor] }], /** * Border Color Left * @see https://tailwindcss.com/docs/border-color */ 'border-color-l': [{ 'border-l': [borderColor] }], /** * Divide Color * @see https://tailwindcss.com/docs/divide-color */ 'divide-color': [{ divide: [borderColor] }], /** * Outline Style * @see https://tailwindcss.com/docs/outline-style */ 'outline-style': [{ outline: ['', ...getLineStyles()] }], /** * Outline Offset * @see https://tailwindcss.com/docs/outline-offset */ 'outline-offset': [{ 'outline-offset': [isLength, isArbitraryValue] }], /** * Outline Width * @see https://tailwindcss.com/docs/outline-width */ 'outline-w': [{ outline: [isLength, isArbitraryLength] }], /** * Outline Color * @see https://tailwindcss.com/docs/outline-color */ 'outline-color': [{ outline: [colors] }], /** * Ring Width * @see https://tailwindcss.com/docs/ring-width */ 'ring-w': [{ ring: getLengthWithEmptyAndArbitrary() }], /** * Ring Width Inset * @see https://tailwindcss.com/docs/ring-width */ 'ring-w-inset': ['ring-inset'], /** * Ring Color * @see https://tailwindcss.com/docs/ring-color */ 'ring-color': [{ ring: [colors] }], /** * Ring Opacity * @see https://tailwindcss.com/docs/ring-opacity */ 'ring-opacity': [{ 'ring-opacity': [opacity] }], /** * Ring Offset Width * @see https://tailwindcss.com/docs/ring-offset-width */ 'ring-offset-w': [{ 'ring-offset': [isLength, isArbitraryLength] }], /** * Ring Offset Color * @see https://tailwindcss.com/docs/ring-offset-color */ 'ring-offset-color': [{ 'ring-offset': [colors] }], // Effects /** * Box Shadow * @see https://tailwindcss.com/docs/box-shadow */ shadow: [{ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow] }], /** * Box Shadow Color * @see https://tailwindcss.com/docs/box-shadow-color */ 'shadow-color': [{ shadow: [isAny] }], /** * Opacity * @see https://tailwindcss.com/docs/opacity */ opacity: [{ opacity: [opacity] }], /** * Mix Blend Mode * @see https://tailwindcss.com/docs/mix-blend-mode */ 'mix-blend': [{ 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker'] }], /** * Background Blend Mode * @see https://tailwindcss.com/docs/background-blend-mode */ 'bg-blend': [{ 'bg-blend': getBlendModes() }], // Filters /** * Filter * @deprecated since Tailwind CSS v3.0.0 * @see https://tailwindcss.com/docs/filter */ filter: [{ filter: ['', 'none'] }], /** * Blur * @see https://tailwindcss.com/docs/blur */ blur: [{ blur: [blur] }], /** * Brightness * @see https://tailwindcss.com/docs/brightness */ brightness: [{ brightness: [brightness] }], /** * Contrast * @see https://tailwindcss.com/docs/contrast */ contrast: [{ contrast: [contrast] }], /** * Drop Shadow * @see https://tailwindcss.com/docs/drop-shadow */ 'drop-shadow': [{ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue] }], /** * Grayscale * @see https://tailwindcss.com/docs/grayscale */ grayscale: [{ grayscale: [grayscale] }], /** * Hue Rotate * @see https://tailwindcss.com/docs/hue-rotate */ 'hue-rotate': [{ 'hue-rotate': [hueRotate] }], /** * Invert * @see https://tailwindcss.com/docs/invert */ invert: [{ invert: [invert] }], /** * Saturate * @see https://tailwindcss.com/docs/saturate */ saturate: [{ saturate: [saturate] }], /** * Sepia * @see https://tailwindcss.com/docs/sepia */ sepia: [{ sepia: [sepia] }], /** * Backdrop Filter * @deprecated since Tailwind CSS v3.0.0 * @see https://tailwindcss.com/docs/backdrop-filter */ 'backdrop-filter': [{ 'backdrop-filter': ['', 'none'] }], /** * Backdrop Blur * @see https://tailwindcss.com/docs/backdrop-blur */ 'backdrop-blur': [{ 'backdrop-blur': [blur] }], /** * Backdrop Brightness * @see https://tailwindcss.com/docs/backdrop-brightness */ 'backdrop-brightness': [{ 'backdrop-brightness': [brightness] }], /** * Backdrop Contrast * @see https://tailwindcss.com/docs/backdrop-contrast */ 'backdrop-contrast': [{ 'backdrop-contrast': [contrast] }], /** * Backdrop Grayscale * @see https://tailwindcss.com/docs/backdrop-grayscale */ 'backdrop-grayscale': [{ 'backdrop-grayscale': [grayscale] }], /** * Backdrop Hue Rotate * @see https://tailwindcss.com/docs/backdrop-hue-rotate */ 'backdrop-hue-rotate': [{ 'backdrop-hue-rotate': [hueRotate] }], /** * Backdrop Invert * @see https://tailwindcss.com/docs/backdrop-invert */ 'backdrop-invert': [{ 'backdrop-invert': [invert] }], /** * Backdrop Opacity * @see https://tailwindcss.com/docs/backdrop-opacity */ 'backdrop-opacity': [{ 'backdrop-opacity': [opacity] }], /** * Backdrop Saturate * @see https://tailwindcss.com/docs/backdrop-saturate */ 'backdrop-saturate': [{ 'backdrop-saturate': [saturate] }], /** * Backdrop Sepia * @see https://tailwindcss.com/docs/backdrop-sepia */ 'backdrop-sepia': [{ 'backdrop-sepia': [sepia] }], // Tables /** * Border Collapse * @see https://tailwindcss.com/docs/border-collapse */ 'border-collapse': [{ border: ['collapse', 'separate'] }], /** * Border Spacing * @see https://tailwindcss.com/docs/border-spacing */ 'border-spacing': [{ 'border-spacing': [borderSpacing] }], /** * Border Spacing X * @see https://tailwindcss.com/docs/border-spacing */ 'border-spacing-x': [{ 'border-spacing-x': [borderSpacing] }], /** * Border Spacing Y * @see https://tailwindcss.com/docs/border-spacing */ 'border-spacing-y': [{ 'border-spacing-y': [borderSpacing] }], /** * Table Layout * @see https://tailwindcss.com/docs/table-layout */ 'table-layout': [{ table: ['auto', 'fixed'] }], /** * Caption Side * @see https://tailwindcss.com/docs/caption-side */ caption: [{ caption: ['top', 'bottom'] }], // Transitions and Animation /** * Tranisition Property * @see https://tailwindcss.com/docs/transition-property */ transition: [{ transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue] }], /** * Transition Duration * @see https://tailwindcss.com/docs/transition-duration */ duration: [{ duration: getNumberAndArbitrary() }], /** * Transition Timing Function * @see https://tailwindcss.com/docs/transition-timing-function */ ease: [{ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue] }], /** * Transition Delay * @see https://tailwindcss.com/docs/transition-delay */ delay: [{ delay: getNumberAndArbitrary() }], /** * Animation * @see https://tailwindcss.com/docs/animation */ animate: [{ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue] }], // Transforms /** * Transform * @see https://tailwindcss.com/docs/transform */ transform: [{ transform: ['', 'gpu', 'none'] }], /** * Scale * @see https://tailwindcss.com/docs/scale */ scale: [{ scale: [scale] }], /** * Scale X * @see https://tailwindcss.com/docs/scale */ 'scale-x': [{ 'scale-x': [scale] }], /** * Scale Y * @see https://tailwindcss.com/docs/scale */ 'scale-y': [{ 'scale-y': [scale] }], /** * Rotate * @see https://tailwindcss.com/docs/rotate */ rotate: [{ rotate: [isInteger, isArbitraryValue] }], /** * Translate X * @see https://tailwindcss.com/docs/translate */ 'translate-x': [{ 'translate-x': [translate] }], /** * Translate Y * @see https://tailwindcss.com/docs/translate */ 'translate-y': [{ 'translate-y': [translate] }], /** * Skew X * @see https://tailwindcss.com/docs/skew */ 'skew-x': [{ 'skew-x': [skew] }], /** * Skew Y * @see https://tailwindcss.com/docs/skew */ 'skew-y': [{ 'skew-y': [skew] }], /** * Transform Origin * @see https://tailwindcss.com/docs/transform-origin */ 'transform-origin': [{ origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue] }], // Interactivity /** * Accent Color * @see https://tailwindcss.com/docs/accent-color */ accent: [{ accent: ['auto', colors] }], /** * Appearance * @see https://tailwindcss.com/docs/appearance */ appearance: [{ appearance: ['none', 'auto'] }], /** * Cursor * @see https://tailwindcss.com/docs/cursor */ cursor: [{ cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue] }], /** * Caret Color * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities */ 'caret-color': [{ caret: [colors] }], /** * Pointer Events * @see https://tailwindcss.com/docs/pointer-events */ 'pointer-events': [{ 'pointer-events': ['none', 'auto'] }], /** * Resize * @see https://tailwindcss.com/docs/resize */ resize: [{ resize: ['none', 'y', 'x', ''] }], /** * Scroll Behavior * @see https://tailwindcss.com/docs/scroll-behavior */ 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }], /** * Scroll Margin * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-m': [{ 'scroll-m': getSpacingWithArbitrary() }], /** * Scroll Margin X * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-mx': [{ 'scroll-mx': getSpacingWithArbitrary() }], /** * Scroll Margin Y * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-my': [{ 'scroll-my': getSpacingWithArbitrary() }], /** * Scroll Margin Start * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-ms': [{ 'scroll-ms': getSpacingWithArbitrary() }], /** * Scroll Margin End * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-me': [{ 'scroll-me': getSpacingWithArbitrary() }], /** * Scroll Margin Top * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-mt': [{ 'scroll-mt': getSpacingWithArbitrary() }], /** * Scroll Margin Right * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-mr': [{ 'scroll-mr': getSpacingWithArbitrary() }], /** * Scroll Margin Bottom * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-mb': [{ 'scroll-mb': getSpacingWithArbitrary() }], /** * Scroll Margin Left * @see https://tailwindcss.com/docs/scroll-margin */ 'scroll-ml': [{ 'scroll-ml': getSpacingWithArbitrary() }], /** * Scroll Padding * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-p': [{ 'scroll-p': getSpacingWithArbitrary() }], /** * Scroll Padding X * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-px': [{ 'scroll-px': getSpacingWithArbitrary() }], /** * Scroll Padding Y * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-py': [{ 'scroll-py': getSpacingWithArbitrary() }], /** * Scroll Padding Start * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-ps': [{ 'scroll-ps': getSpacingWithArbitrary() }], /** * Scroll Padding End * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-pe': [{ 'scroll-pe': getSpacingWithArbitrary() }], /** * Scroll Padding Top * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-pt': [{ 'scroll-pt': getSpacingWithArbitrary() }], /** * Scroll Padding Right * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-pr': [{ 'scroll-pr': getSpacingWithArbitrary() }], /** * Scroll Padding Bottom * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-pb': [{ 'scroll-pb': getSpacingWithArbitrary() }], /** * Scroll Padding Left * @see https://tailwindcss.com/docs/scroll-padding */ 'scroll-pl': [{ 'scroll-pl': getSpacingWithArbitrary() }], /** * Scroll Snap Align * @see https://tailwindcss.com/docs/scroll-snap-align */ 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }], /** * Scroll Snap Stop * @see https://tailwindcss.com/docs/scroll-snap-stop */ 'snap-stop': [{ snap: ['normal', 'always'] }], /** * Scroll Snap Type * @see https://tailwindcss.com/docs/scroll-snap-type */ 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }], /** * Scroll Snap Type Strictness * @see https://tailwindcss.com/docs/scroll-snap-type */ 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }], /** * Touch Action * @see https://tailwindcss.com/docs/touch-action */ touch: [{ touch: ['auto', 'none', 'manipulation'] }], /** * Touch Action X * @see https://tailwindcss.com/docs/touch-action */ 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }], /** * Touch Action Y * @see https://tailwindcss.com/docs/touch-action */ 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }], /** * Touch Action Pinch Zoom * @see https://tailwindcss.com/docs/touch-action */ 'touch-pz': ['touch-pinch-zoom'], /** * User Select * @see https://tailwindcss.com/docs/user-select */ select: [{ select: ['none', 'text', 'all', 'auto'] }], /** * Will Change * @see https://tailwindcss.com/docs/will-change */ 'will-change': [{ 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue] }], // SVG /** * Fill * @see https://tailwindcss.com/docs/fill */ fill: [{ fill: [colors, 'none'] }], /** * Stroke Width * @see https://tailwindcss.com/docs/stroke-width */ 'stroke-w': [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }], /** * Stroke * @see https://tailwindcss.com/docs/stroke */ stroke: [{ stroke: [colors, 'none'] }], // Accessibility /** * Screen Readers * @see https://tailwindcss.com/docs/screen-readers */ sr: ['sr-only', 'not-sr-only'], /** * Forced Color Adjust * @see https://tailwindcss.com/docs/forced-color-adjust */ 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }] }, conflictingClassGroups: { overflow: ['overflow-x', 'overflow-y'], overscroll: ['overscroll-x', 'overscroll-y'], inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'], 'inset-x': ['right', 'left'], 'inset-y': ['top', 'bottom'], flex: ['basis', 'grow', 'shrink'], gap: ['gap-x', 'gap-y'], p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'], px: ['pr', 'pl'], py: ['pt', 'pb'], m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'], mx: ['mr', 'ml'], my: ['mt', 'mb'], size: ['w', 'h'], 'font-size': ['leading'], 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'], 'fvn-ordinal': ['fvn-normal'], 'fvn-slashed-zero': ['fvn-normal'], 'fvn-figure': ['fvn-normal'], 'fvn-spacing': ['fvn-normal'], 'fvn-fraction': ['fvn-normal'], 'line-clamp': ['display', 'overflow'], rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'], 'rounded-s': ['rounded-ss', 'rounded-es'], 'rounded-e': ['rounded-se', 'rounded-ee'], 'rounded-t': ['rounded-tl', 'rounded-tr'], 'rounded-r': ['rounded-tr', 'rounded-br'], 'rounded-b': ['rounded-br', 'rounded-bl'], 'rounded-l': ['rounded-tl', 'rounded-bl'], 'border-spacing': ['border-spacing-x', 'border-spacing-y'], 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'], 'border-w-x': ['border-w-r', 'border-w-l'], 'border-w-y': ['border-w-t', 'border-w-b'], 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'], 'border-color-x': ['border-color-r', 'border-color-l'], 'border-color-y': ['border-color-t', 'border-color-b'], 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'], 'scroll-mx': ['scroll-mr', 'scroll-ml'], 'scroll-my': ['scroll-mt', 'scroll-mb'], 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'], 'scroll-px': ['scroll-pr', 'scroll-pl'], 'scroll-py': ['scroll-pt', 'scroll-pb'], touch: ['touch-x', 'touch-y', 'touch-pz'], 'touch-x': ['touch'], 'touch-y': ['touch'], 'touch-pz': ['touch'] }, conflictingClassGroupModifiers: { 'font-size': ['leading'] } }; }; /** * @param baseConfig Config where other config will be merged into. This object will be mutated. * @param configExtension Partial config to merge into the `baseConfig`. */ const mergeConfigs = (baseConfig, { cacheSize, prefix, separator, experimentalParseClassName, extend = {}, override = {} }) => { overrideProperty(baseConfig, 'cacheSize', cacheSize); overrideProperty(baseConfig, 'prefix', prefix); overrideProperty(baseConfig, 'separator', separator); overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName); for (const configKey in override) { overrideConfigProperties(baseConfig[configKey], override[configKey]); } for (const key in extend) { mergeConfigProperties(baseConfig[key], extend[key]); } return baseConfig; }; const overrideProperty = (baseObject, overrideKey, overrideValue) => { if (overrideValue !== undefined) { baseObject[overrideKey] = overrideValue; } }; const overrideConfigProperties = (baseObject, overrideObject) => { if (overrideObject) { for (const key in overrideObject) { overrideProperty(baseObject, key, overrideObject[key]); } } }; const mergeConfigProperties = (baseObject, mergeObject) => { if (mergeObject) { for (const key in mergeObject) { const mergeValue = mergeObject[key]; if (mergeValue !== undefined) { baseObject[key] = (baseObject[key] || []).concat(mergeValue); } } } }; const extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig); const twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig); //# sourceMappingURL=bundle-mjs.mjs.map /***/ }, /***/ "./node_modules/tslib/tslib.es6.mjs" /*!******************************************!*\ !*** ./node_modules/tslib/tslib.es6.mjs ***! \******************************************/ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource), /* harmony export */ __assign: () => (/* binding */ __assign), /* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator), /* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator), /* harmony export */ __asyncValues: () => (/* binding */ __asyncValues), /* harmony export */ __await: () => (/* binding */ __await), /* harmony export */ __awaiter: () => (/* binding */ __awaiter), /* harmony export */ __classPrivateFieldGet: () => (/* binding */ __classPrivateFieldGet), /* harmony export */ __classPrivateFieldIn: () => (/* binding */ __classPrivateFieldIn), /* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet), /* harmony export */ __createBinding: () => (/* binding */ __createBinding), /* harmony export */ __decorate: () => (/* binding */ __decorate), /* harmony export */ __disposeResources: () => (/* binding */ __disposeResources), /* harmony export */ __esDecorate: () => (/* binding */ __esDecorate), /* harmony export */ __exportStar: () => (/* binding */ __exportStar), /* harmony export */ __extends: () => (/* binding */ __extends), /* harmony export */ __generator: () => (/* binding */ __generator), /* harmony export */ __importDefault: () => (/* binding */ __importDefault), /* harmony export */ __importStar: () => (/* binding */ __importStar), /* harmony export */ __makeTemplateObject: () => (/* binding */ __makeTemplateObject), /* harmony export */ __metadata: () => (/* binding */ __metadata), /* harmony export */ __param: () => (/* binding */ __param), /* harmony export */ __propKey: () => (/* binding */ __propKey), /* harmony export */ __read: () => (/* binding */ __read), /* harmony export */ __rest: () => (/* binding */ __rest), /* harmony export */ __rewriteRelativeImportExtension: () => (/* binding */ __rewriteRelativeImportExtension), /* harmony export */ __runInitializers: () => (/* binding */ __runInitializers), /* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName), /* harmony export */ __spread: () => (/* binding */ __spread), /* harmony export */ __spreadArray: () => (/* binding */ __spreadArray), /* harmony export */ __spreadArrays: () => (/* binding */ __spreadArrays), /* harmony export */ __values: () => (/* binding */ __values), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /****************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } var __assign = function() { __assign = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; } return __assign.apply(this, arguments); } function __rest(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; } function __decorate(decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; } function __param(paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } } function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; function __runInitializers(thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; function __propKey(x) { return typeof x === "symbol" ? x : "".concat(x); }; function __setFunctionName(f, name, prefix) { if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); }; function __metadata(metadataKey, metadataValue) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); } function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __generator(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } var __createBinding = Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; }); function __exportStar(m, o) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } function __read(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; } /** @deprecated */ function __spread() { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; } /** @deprecated */ function __spreadArrays() { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; } function __spreadArray(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); } function __await(v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } function __asyncGenerator(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } } function __asyncDelegator(o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } } function __makeTemplateObject(cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } return cooked; }; var __setModuleDefault = Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }; var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; function __importStar(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; } function __importDefault(mod) { return (mod && mod.__esModule) ? mod : { default: mod }; } function __classPrivateFieldGet(receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); } function __classPrivateFieldSet(receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; } function __classPrivateFieldIn(state, receiver) { if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); return typeof state === "function" ? receiver === state : state.has(receiver); } function __addDisposableResource(env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose, inner; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; if (async) inner = dispose; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; } var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; function __disposeResources(env) { function fail(e) { env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } var r, s = 0; function next() { while (r = env.stack.pop()) { try { if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); if (r.dispose) { var result = r.dispose.call(r.value); if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } else s |= 1; } catch (e) { fail(e); } } if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); if (env.hasError) throw env.error; } return next(); } function __rewriteRelativeImportExtension(path, preserveJsx) { if (typeof path === "string" && /^\.\.?\//.test(path)) { return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); }); } return path; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ __extends, __assign, __rest, __decorate, __param, __esDecorate, __runInitializers, __propKey, __setFunctionName, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet, __classPrivateFieldIn, __addDisposableResource, __disposeResources, __rewriteRelativeImportExtension, }); /***/ } /******/ }); /************************************************************************/ /******/ // 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 /******/ if (!(moduleId in __webpack_modules__)) { /******/ delete __webpack_module_cache__[moduleId]; /******/ var e = new Error("Cannot find module '" + moduleId + "'"); /******/ e.code = 'MODULE_NOT_FOUND'; /******/ throw e; /******/ } /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/create fake namespace object */ /******/ (() => { /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); /******/ var leafPrototypes; /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 16: return value when it's Promise-like /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = this(value); /******/ if(mode & 8) return value; /******/ if(typeof value === 'object' && value) { /******/ if((mode & 4) && value.__esModule) return value; /******/ if((mode & 16) && typeof value.then === 'function') return value; /******/ } /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ var def = {}; /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; /******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) { /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); /******/ } /******/ def['default'] = () => (value); /******/ __webpack_require__.d(ns, def); /******/ return ns; /******/ }; /******/ })(); /******/ /******/ /* 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 }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/nonce */ /******/ (() => { /******/ __webpack_require__.nc = undefined; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. (() => { /*!********************************!*\ !*** ./resources/js/index.tsx ***! \********************************/ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom/client */ "./node_modules/react-dom/client.js"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/store */ "./resources/js/store/index.ts"); /* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/App */ "./resources/js/App.tsx"); /* harmony import */ var _css_globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @css/globals.css */ "./resources/css/globals.css"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__); (0,_store__WEBPACK_IMPORTED_MODULE_1__.registerHarborStore)(); const rootElement = document.getElementById('lw-harbor-root'); if (rootElement) { // Delay execution until after the DOM is fully loaded. window.addEventListener('DOMContentLoaded', () => { (0,react_dom_client__WEBPACK_IMPORTED_MODULE_0__.createRoot)(rootElement).render(/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_App__WEBPACK_IMPORTED_MODULE_2__.App, {})); }); } })(); /******/ })() ; //# sourceMappingURL=index.js.map
修改文件时间
将文件时间修改为当前时间的前一年
删除文件