// ==UserScript==
// @name genshinSeelieEx
// @name:zh 原神规划助手扩展
// @namespace https://github.com/KeyPJ/seelieEx
// @version 3.4.1
// @author KeyPJ
// @description:zh 个人想偷懒,不想手动在仙灵 - 原神规划助手 手动录入角色及其天赋,于是简单整理一个脚本,利用米游社养成计算器api获取角色信息,直接导入至seelie
// @license MIT
// @homepage https://github.com/KeyPJ
// @homepageURL https://github.com/KeyPJ/seelieEx
// @include https://seelie.inmagi.com/*
// @include https://seelie.me/*
// @require https://unpkg.com/react@17.0.2/umd/react.production.min.js
// @require https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js
// @resource character https://ghproxy.com/https://raw.githubusercontent.com/KeyPJ/seelieEx/main/src/data/character.json
// @resource weapon https://ghproxy.com/https://raw.githubusercontent.com/KeyPJ/seelieEx/main/src/data/weapon.json
// @connect api-takumi.mihoyo.com
// @connect api-os-takumi.hoyoverse.com
// @connect sg-public-api.hoyoverse.com
// @grant GM.xmlHttpRequest
// @grant GM_getResourceText
// @grant GM_openInTab
// @grant GM_registerMenuCommand
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @run-at document-end
// @contributionURL https://github.com/KeyPJ/seelieEx
// @copyright 2021, KeyPJ https://github.com/KeyPJ
// @description 原神规划助手扩展
// ==/UserScript==
(e=>{const t=document.createElement("style");t.dataset.source="vite-plugin-monkey",t.innerText=e,document.head.appendChild(t)})('*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-x-\\[20\\%\\]{left:20%;right:20%}.inset-y-0{top:0px;bottom:0px}.top-10{top:2.5rem}.right-0{right:0px}.left-0{left:0px}.z-\\[1200\\]{z-index:1200}.mx-auto{margin-left:auto;margin-right:auto}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-4{height:1rem}.max-h-60{max-height:15rem}.min-h-min{min-height:-moz-min-content;min-height:min-content}.w-full{width:100%}.w-5{width:1.25rem}.w-1\\/2{width:50%}.w-1\\/4{width:25%}.w-11{width:2.75rem}.w-4{width:1rem}.min-w-\\[50\\%\\]{min-width:50%}.max-w-md{max-width:28rem}.translate-x-6{--tw-translate-x: 1.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.grid-flow-col{grid-auto-flow:column}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.overflow-auto{overflow:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-md{border-radius:.375rem}.rounded-2xl{border-radius:1rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-900\\/20{background-color:#1e3a8a33}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.p-4{padding:1rem}.p-2{padding:.5rem}.p-1{padding:.25rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\\.5{padding-top:.625rem;padding-bottom:.625rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pt-4{padding-top:1rem}.pb-2{padding-bottom:.5rem}.pt-2{padding-top:.5rem}.pl-3{padding-left:.75rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pl-10{padding-left:2.5rem}.pr-4{padding-right:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.leading-5{line-height:1.25rem}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.opacity-75{opacity:.75}.opacity-100{opacity:1}.opacity-0{opacity:0}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-white{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity))}.ring-black{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity))}.ring-opacity-60{--tw-ring-opacity: .6}.ring-opacity-5{--tw-ring-opacity: .05}.ring-offset-2{--tw-ring-offset-width: 2px}.ring-offset-blue-400{--tw-ring-offset-color: #60a5fa}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.hover\\:bg-purple-200:hover{--tw-bg-opacity: 1;background-color:rgb(233 213 255 / var(--tw-bg-opacity))}.hover\\:bg-white\\/\\[0\\.12\\]:hover{background-color:#ffffff1f}.hover\\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:border-indigo-500:focus-visible{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.focus-visible\\:ring:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-purple-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(168 85 247 / var(--tw-ring-opacity))}.focus-visible\\:ring-white:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity))}.focus-visible\\:ring-opacity-75:focus-visible{--tw-ring-opacity: .75}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\\:ring-offset-orange-300:focus-visible{--tw-ring-offset-color: #fdba74}@media (min-width: 640px){.sm\\:text-sm{font-size:.875rem;line-height:1.25rem}}');
(function(React2, ReactDOM2) {
var _a, _b;
"use strict";
function _interopNamespaceDefault(e) {
const n2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
if (e) {
for (const k2 in e) {
if (k2 !== "default") {
const d = Object.getOwnPropertyDescriptor(e, k2);
Object.defineProperty(n2, k2, d.get ? d : {
enumerable: true,
get: () => e[k2]
});
}
}
}
n2.default = e;
return Object.freeze(n2);
}
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React2);
const App$1 = "";
const characters = JSON.parse(GM_getResourceText("character"));
const weapons = JSON.parse(GM_getResourceText("weapon"));
const charactersNum = characters.length;
const getCharacterId = (queryName) => {
for (let e of characters) {
const { id, name } = e;
if (queryName == name) {
return id;
}
}
console.error(`getCharacterId ${queryName} 查询失败`);
return "";
};
const getWeaponId = (queryName) => {
for (let e of weapons) {
const { id, name } = e;
if (queryName == name) {
return id;
}
}
console.error(`getWeaponrId ${queryName} 查询失败`);
return "";
};
const elementAttrIds = [
{ element_attr_id: 1, name: "pyro" },
{ element_attr_id: 2, name: "anemo" },
{ element_attr_id: 3, name: "geo" },
{ element_attr_id: 4, name: "electro" },
{ element_attr_id: 5, name: "hydro" },
{ element_attr_id: 6, name: "cryo" },
{ element_attr_id: 7, name: "dendro" }
];
const getElementAttrName = (queryName) => {
for (let e of elementAttrIds) {
const { element_attr_id, name } = e;
if (queryName == element_attr_id) {
return name;
}
}
console.error(`getElementAttrName: ${queryName} 查询失败`);
return "";
};
const getAccount$1 = () => localStorage.account || "main";
const getTotalGoal = () => JSON.parse(
localStorage.getItem(`${getAccount$1()}-goals`) || "[]"
);
const getGoalInactive = () => Object.keys(JSON.parse(localStorage.getItem(`${getAccount$1()}-inactive`) || "{}"));
const setGoals = (goals) => {
localStorage.setItem(`${getAccount$1()}-goals`, JSON.stringify(goals));
localStorage.setItem("last_update", new Date().toISOString());
};
const addGoal = (data2) => {
var _a2, _b2;
let index = -1;
const goals = getTotalGoal();
if (data2.character) {
index = goals.findIndex(
(g2) => g2.character === data2.character && g2.type === data2.type
);
} else if (data2.id) {
index = goals.findIndex((g2) => g2.id === data2.id);
}
if (index >= 0) {
goals[index] = { ...goals[index], ...data2 };
} else {
const lastId = (_b2 = (_a2 = goals == null ? void 0 : goals.map((g2) => g2.id)) == null ? void 0 : _a2.filter((id) => typeof id == "number")) == null ? void 0 : _b2.sort((a, b) => a < b ? 1 : -1)[0];
data2.id = (lastId || 0) + 1;
goals.push(data2);
console.log(data2);
}
setGoals(goals);
};
const addTalentGoal = (talentCharacter, skill_list) => {
const totalGoal = getTotalGoal();
const ids = totalGoal.map((g2) => g2.id);
const id = Math.max(...ids) + 1 || 1;
const talentIdx = totalGoal.findIndex((g2) => g2.type == "talent" && g2.character == talentCharacter);
const [normalCurrent, skillCurrent, burstCurrent] = skill_list.filter((a) => a.max_level == 10).sort().map((a) => a.level_current);
let talentGoal;
if (talentIdx < 0) {
talentGoal = {
type: "talent",
character: talentCharacter,
c3: false,
c5: false,
normal: {
current: normalCurrent,
goal: normalCurrent
},
skill: {
current: skillCurrent,
goal: skillCurrent
},
burst: {
current: burstCurrent,
goal: burstCurrent
},
id
};
} else {
const seelieGoal = totalGoal[talentIdx];
const { normal, skill, burst } = seelieGoal;
const { goal: normalGoal } = normal;
const { goal: skillGoal } = skill;
const { goal: burstGoal } = burst;
talentGoal = {
...seelieGoal,
normal: {
current: normalCurrent,
goal: normalCurrent > normalGoal ? normalCurrent : normalGoal
},
skill: {
current: skillCurrent,
goal: skillCurrent > skillGoal ? skillCurrent : skillGoal
},
burst: {
current: burstCurrent,
goal: burstCurrent > burstGoal ? burstCurrent : burstGoal
}
};
}
addGoal(talentGoal);
};
const addCharacterGoal = (level_current, nameEn, name, type) => {
let totalGoal = getTotalGoal();
const ids = totalGoal.map((g2) => g2.id);
const id = Math.max(...ids) + 1 || 1;
let characterPredicate = (g2) => g2.type == type && g2.character == nameEn;
let weaponPredicate = (g2) => g2.type == type && g2.weapon == nameEn;
const characterIdx = totalGoal.findIndex(type == "character" ? characterPredicate : weaponPredicate);
const characterStatus = initCharacterStatus(level_current);
let characterGoal;
function initCharacterGoal() {
return {
type,
character: nameEn,
current: characterStatus,
goal: characterStatus,
id
};
}
function initWeaponGoal() {
return {
type,
character: "",
weapon: nameEn,
current: characterStatus,
goal: characterStatus,
id
};
}
if (characterIdx < 0) {
characterGoal = type == "character" ? initCharacterGoal() : initWeaponGoal();
} else {
const seelieGoal = type == "character" ? totalGoal[characterIdx] : totalGoal[characterIdx];
const { goal, current } = seelieGoal;
const { level: levelCurrent, asc: ascCurrent } = current;
const { level: levelGoal, asc: ascGoal } = goal;
const { level, asc } = characterStatus;
characterGoal = {
...seelieGoal,
current: level >= levelCurrent && asc >= ascCurrent ? characterStatus : current,
goal: level >= levelGoal && asc >= ascGoal ? characterStatus : goal
};
}
addGoal(characterGoal);
};
function addCharacter(characterDataEx) {
const { character, skill_list, weapon } = characterDataEx;
const { name, element_attr_id } = character;
if (weapon) {
const { name: name2, level_current: weaponLeveL } = weapon;
const weaponId = getWeaponId(name2);
if (weaponId) {
addCharacterGoal(weaponLeveL, weaponId, name2, "weapon");
}
}
const { level_current: characterLevel } = character;
const characterId = getCharacterId(name);
if (!characterId) {
return;
}
addCharacterGoal(characterLevel, characterId, name, "character");
let talentCharacter = characterId;
if (characterId == "traveler") {
const elementAttrName = getElementAttrName(element_attr_id);
talentCharacter = `traveler_${elementAttrName}`;
}
addTalentGoal(talentCharacter, skill_list);
}
const characterStatusList = [
{ level: 1, asc: 0, text: "1" },
{ level: 20, asc: 0, text: "20" },
{ level: 20, asc: 1, text: "20 A" },
{ level: 40, asc: 1, text: "40" },
{ level: 40, asc: 2, text: "40 A" },
{ level: 50, asc: 2, text: "50" },
{ level: 50, asc: 3, text: "50 A" },
{ level: 60, asc: 3, text: "60" },
{ level: 60, asc: 4, text: "60 A" },
{ level: 70, asc: 4, text: "70" },
{ level: 70, asc: 5, text: "70 A" },
{ level: 80, asc: 5, text: "80" },
{ level: 80, asc: 6, text: "80 A" },
{ level: 90, asc: 6, text: "90" }
];
const initCharacterStatus = (level_current) => {
let initCharacterStatus2 = characterStatusList[0];
if (level_current < 20) {
return initCharacterStatus2;
}
for (let characterStatus of characterStatusList) {
const { level } = characterStatus;
if (level_current < level) {
return initCharacterStatus2;
} else if (level_current == level) {
return characterStatus;
} else if (level_current > level) {
initCharacterStatus2 = characterStatus;
}
}
return initCharacterStatus2;
};
const updateTalent = (talent, normalGoal = 9, skillGoal = 9, burstGoal = 9) => {
const { normal: { current: normalCurrent }, skill: { current: skillCurrent }, burst: { current: burstCurrent } } = talent;
const talentNew = {
...talent,
normal: {
current: normalCurrent,
goal: normalCurrent > normalGoal ? normalCurrent : normalGoal
},
skill: {
current: skillCurrent,
goal: skillCurrent > skillGoal ? skillCurrent : skillGoal
},
burst: {
current: burstCurrent,
goal: burstCurrent > burstGoal ? burstCurrent : burstGoal
}
};
addGoal(talentNew);
};
const batchUpdateTalent = (all, normal, skill, burst) => {
getTotalGoal().filter((a) => a.type == "talent").filter((a) => all || !getGoalInactive().includes(a.character)).map((a) => updateTalent(a, normal, skill, burst));
};
const updateCharacter = (character, characterStatusGoal) => {
const { current } = character;
const { level: levelCurrent, asc: ascCurrent } = current;
const { level, asc } = characterStatusGoal;
const characterGoalNew = {
...character,
goal: level >= levelCurrent && asc >= ascCurrent ? characterStatusGoal : current
};
addGoal(characterGoalNew);
};
const batchUpdateCharacter = (all, characterStatusGoal) => {
getTotalGoal().filter((a) => a.type == "character").filter((a) => all || !getGoalInactive().includes(a.character)).map((a) => updateCharacter(a, characterStatusGoal));
location.reload();
};
const batchUpdateWeapon = (all, characterStatusGoal) => {
getTotalGoal().filter((a) => a.type == "weapon").filter((a) => all || !getGoalInactive().includes(a.weapon)).map((a) => updateCharacter(a, characterStatusGoal));
location.reload();
};
function k() {
let e = [], t = [], r = { enqueue(o) {
t.push(o);
}, requestAnimationFrame(...o) {
let n2 = requestAnimationFrame(...o);
r.add(() => cancelAnimationFrame(n2));
}, nextFrame(...o) {
r.requestAnimationFrame(() => {
r.requestAnimationFrame(...o);
});
}, setTimeout(...o) {
let n2 = setTimeout(...o);
r.add(() => clearTimeout(n2));
}, add(o) {
e.push(o);
}, dispose() {
for (let o of e.splice(0))
o();
}, async workQueue() {
for (let o of t.splice(0))
await o();
} };
return r;
}
function Q() {
let [e] = React2.useState(k);
return React2.useEffect(() => () => e.dispose(), [e]), e;
}
var x = typeof window != "undefined" ? React2.useLayoutEffect : React2.useEffect;
var yt = { serverHandoffComplete: false };
function q$1() {
let [e, t] = React2.useState(yt.serverHandoffComplete);
return React2.useEffect(() => {
e !== true && t(true);
}, [e]), React2.useEffect(() => {
yt.serverHandoffComplete === false && (yt.serverHandoffComplete = true);
}, []), e;
}
var or = 0;
function to$1() {
return ++or;
}
function A() {
let e = q$1(), [t, r] = React2.useState(e ? to$1 : null);
return x(() => {
t === null && r(to$1());
}, [t]), t != null ? "" + t : void 0;
}
function ke(e) {
let t = React2.useRef(e);
return React2.useEffect(() => {
t.current = e;
}, [e]), t;
}
function ee(e, t) {
let [r, o] = React2.useState(e), n2 = ke(e);
return x(() => o(n2.current), [n2, o, ...t]), r;
}
function I(...e) {
let t = React2.useRef(e);
return React2.useEffect(() => {
t.current = e;
}, [e]), React2.useCallback((r) => {
for (let o of t.current)
o != null && (typeof o == "function" ? o(r) : o.current = r);
}, [t]);
}
function S(e, t, ...r) {
if (e in t) {
let n2 = t[e];
return typeof n2 == "function" ? n2(...r) : n2;
}
let o = new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((n2) => `"${n2}"`).join(", ")}.`);
throw Error.captureStackTrace && Error.captureStackTrace(o, S), o;
}
function E({ props: e, slot: t, defaultTag: r, features: o, visible: n2 = true, name: i }) {
if (n2)
return _e(e, t, r, i);
let a = o != null ? o : 0;
if (a & 2) {
let { static: l = false, ...s } = e;
if (l)
return _e(s, t, r, i);
}
if (a & 1) {
let { unmount: l = true, ...s } = e;
return S(l ? 0 : 1, { [0]() {
return null;
}, [1]() {
return _e({ ...s, hidden: true, style: { display: "none" } }, t, r, i);
} });
}
return _e(e, t, r, i);
}
function _e(e, t = {}, r, o) {
let { as: n2 = r, children: i, refName: a = "ref", ...l } = gt(e, ["unmount", "static"]), s = e.ref !== void 0 ? { [a]: e.ref } : {}, u = typeof i == "function" ? i(t) : i;
if (l.className && typeof l.className == "function" && (l.className = l.className(t)), n2 === React2.Fragment && Object.keys(l).length > 0) {
if (!React2.isValidElement(u) || Array.isArray(u) && u.length > 1)
throw new Error(['Passing props on "Fragment"!', "", `The current component <${o} /> is rendering a "Fragment".`, "However we need to passthrough the following props:", Object.keys(l).map((c) => ` - ${c}`).join(`
`), "", "You can apply a few solutions:", ['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".', "Render a single element as the child so that we can forward the props onto that element."].map((c) => ` - ${c}`).join(`
`)].join(`
`));
return React2.cloneElement(u, Object.assign({}, fr(mr(gt(l, ["ref"])), u.props, ["onClick"]), s));
}
return React2.createElement(n2, Object.assign({}, gt(l, ["ref"]), n2 !== React2.Fragment && s), u);
}
function fr(e, t, r) {
let o = Object.assign({}, e);
for (let n2 of r)
e[n2] !== void 0 && t[n2] !== void 0 && Object.assign(o, { [n2](i) {
i.defaultPrevented || e[n2](i), i.defaultPrevented || t[n2](i);
} });
return o;
}
function D(e) {
var t;
return Object.assign(React2.forwardRef(e), { displayName: (t = e.displayName) != null ? t : e.name });
}
function mr(e) {
let t = Object.assign({}, e);
for (let r in t)
t[r] === void 0 && delete t[r];
return t;
}
function gt(e, t = []) {
let r = Object.assign({}, e);
for (let o of t)
o in r && delete r[o];
return r;
}
function br(e) {
throw new Error("Unexpected object: " + e);
}
function ae(e, t) {
let r = t.resolveItems();
if (r.length <= 0)
return null;
let o = t.resolveActiveIndex(), n2 = o != null ? o : -1, i = (() => {
switch (e.focus) {
case 0:
return r.findIndex((a) => !t.resolveDisabled(a));
case 1: {
let a = r.slice().reverse().findIndex((l, s, u) => n2 !== -1 && u.length - s - 1 >= n2 ? false : !t.resolveDisabled(l));
return a === -1 ? a : r.length - 1 - a;
}
case 2:
return r.findIndex((a, l) => l <= n2 ? false : !t.resolveDisabled(a));
case 3: {
let a = r.slice().reverse().findIndex((l) => !t.resolveDisabled(l));
return a === -1 ? a : r.length - 1 - a;
}
case 4:
return r.findIndex((a) => t.resolveId(a) === e.id);
case 5:
return null;
default:
br(e);
}
})();
return i === -1 ? o : i;
}
function G(e) {
let t = e.parentElement, r = null;
for (; t && !(t instanceof HTMLFieldSetElement); )
t instanceof HTMLLegendElement && (r = t), t = t.parentElement;
let o = (t == null ? void 0 : t.getAttribute("disabled")) === "";
return o && Tr(r) ? false : o;
}
function Tr(e) {
if (!e)
return false;
let t = e.previousElementSibling;
for (; t !== null; ) {
if (t instanceof HTMLLegendElement)
return false;
t = t.previousElementSibling;
}
return true;
}
function w(e, t, r) {
let o = React2.useRef(t);
o.current = t, React2.useEffect(() => {
function n2(i) {
o.current.call(window, i);
}
return window.addEventListener(e, n2, r), () => window.removeEventListener(e, n2, r);
}, [e, r]);
}
var Pt = React2.createContext(null);
Pt.displayName = "OpenClosedContext";
function _() {
return React2.useContext(Pt);
}
function W({ value: e, children: t }) {
return React2.createElement(Pt.Provider, { value: e }, t);
}
function ro(e) {
var r;
if (e.type)
return e.type;
let t = (r = e.as) != null ? r : "button";
if (typeof t == "string" && t.toLowerCase() === "button")
return "button";
}
function U(e, t) {
let [r, o] = React2.useState(() => ro(e));
return x(() => {
o(ro(e));
}, [e.type, e.as]), x(() => {
r || !t.current || t.current instanceof HTMLButtonElement && !t.current.hasAttribute("type") && o("button");
}, [r, t]), r;
}
function se({ container: e, accept: t, walk: r, enabled: o = true }) {
let n2 = React2.useRef(t), i = React2.useRef(r);
React2.useEffect(() => {
n2.current = t, i.current = r;
}, [t, r]), x(() => {
if (!e || !o)
return;
let a = n2.current, l = i.current, s = Object.assign((c) => a(c), { acceptNode: a }), u = document.createTreeWalker(e, NodeFilter.SHOW_ELEMENT, s, false);
for (; u.nextNode(); )
l(u.currentNode);
}, [e, o, n2, i]);
}
var Ar = { [1](e) {
return e.disabled || e.comboboxState === 1 ? e : { ...e, activeOptionIndex: null, comboboxState: 1 };
}, [0](e) {
return e.disabled || e.comboboxState === 0 ? e : { ...e, comboboxState: 0 };
}, [2](e, t) {
return e.disabled === t.disabled ? e : { ...e, disabled: t.disabled };
}, [3](e, t) {
if (e.disabled || e.optionsRef.current && !e.optionsPropsRef.current.static && e.comboboxState === 1)
return e;
let r = ae(t, { resolveItems: () => e.options, resolveActiveIndex: () => e.activeOptionIndex, resolveId: (o) => o.id, resolveDisabled: (o) => o.dataRef.current.disabled });
return e.activeOptionIndex === r ? e : { ...e, activeOptionIndex: r };
}, [4]: (e, t) => {
var i;
let r = e.activeOptionIndex !== null ? e.options[e.activeOptionIndex] : null, o = Array.from((i = e.optionsRef.current) == null ? void 0 : i.querySelectorAll('[id^="headlessui-combobox-option-"]')).reduce((a, l, s) => Object.assign(a, { [l.id]: s }), {}), n2 = [...e.options, { id: t.id, dataRef: t.dataRef }].sort((a, l) => o[a.id] - o[l.id]);
return { ...e, options: n2, activeOptionIndex: (() => r === null ? null : n2.indexOf(r))() };
}, [5]: (e, t) => {
let r = e.options.slice(), o = e.activeOptionIndex !== null ? r[e.activeOptionIndex] : null, n2 = r.findIndex((i) => i.id === t.id);
return n2 !== -1 && r.splice(n2, 1), { ...e, options: r, activeOptionIndex: (() => n2 === e.activeOptionIndex || o === null ? null : r.indexOf(o))() };
} }, vt = React2.createContext(null);
vt.displayName = "ComboboxContext";
function pe(e) {
let t = React2.useContext(vt);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <Combobox /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, pe), r;
}
return t;
}
var Rt = React2.createContext(null);
Rt.displayName = "ComboboxActions";
function Ue() {
let e = React2.useContext(Rt);
if (e === null) {
let t = new Error("ComboboxActions is missing a parent <Combobox /> component.");
throw Error.captureStackTrace && Error.captureStackTrace(t, Ue), t;
}
return e;
}
function hr(e, t) {
return S(t.type, Ar, e, t);
}
var Or = React2.Fragment, Ir = D(function(t, r) {
let { value: o, onChange: n2, disabled: i = false, ...a } = t, l = React2.useRef({ value: o, onChange: n2 }), s = React2.useRef({ static: false, hold: false }), u = React2.useRef({ displayValue: void 0 }), c = React2.useReducer(hr, { comboboxState: 1, comboboxPropsRef: l, optionsPropsRef: s, inputPropsRef: u, labelRef: React2.createRef(), inputRef: React2.createRef(), buttonRef: React2.createRef(), optionsRef: React2.createRef(), disabled: i, options: [], activeOptionIndex: null }), [{ comboboxState: m2, options: b, activeOptionIndex: T, optionsRef: y, inputRef: p2, buttonRef: f2 }, d] = c;
x(() => {
l.current.value = o;
}, [o, l]), x(() => {
l.current.onChange = n2;
}, [n2, l]), x(() => d({ type: 2, disabled: i }), [i]), w("mousedown", (O) => {
var N, K, V;
let L = O.target;
m2 === 0 && (((N = f2.current) == null ? void 0 : N.contains(L)) || ((K = p2.current) == null ? void 0 : K.contains(L)) || ((V = y.current) == null ? void 0 : V.contains(L)) || d({ type: 1 }));
});
let P = T === null ? null : b[T].dataRef.current.value, C = React2.useMemo(() => ({ open: m2 === 0, disabled: i, activeIndex: T, activeOption: P }), [m2, i, b, T]), R = React2.useCallback(() => {
if (!p2.current || o === void 0)
return;
let O = u.current.displayValue;
typeof O == "function" ? p2.current.value = O(o) : typeof o == "string" && (p2.current.value = o);
}, [o, p2, u]), g2 = React2.useCallback((O) => {
let L = b.find((K) => K.id === O);
if (!L)
return;
let { dataRef: N } = L;
l.current.onChange(N.current.value), R();
}, [b, l, p2]), v = React2.useCallback(() => {
if (T !== null) {
let { dataRef: O } = b[T];
l.current.onChange(O.current.value), R();
}
}, [T, b, l, p2]), h2 = React2.useMemo(() => ({ selectOption: g2, selectActiveOption: v }), [g2, v]);
return x(() => {
m2 === 1 && R();
}, [R, m2]), x(R, [R]), React2.createElement(Rt.Provider, { value: h2 }, React2.createElement(vt.Provider, { value: c }, React2.createElement(W, { value: S(m2, { [0]: 0, [1]: 1 }) }, E({ props: r === null ? a : { ...a, ref: r }, slot: C, defaultTag: Or, name: "Combobox" }))));
}), Lr = "input", Dr = D(function(t, r) {
var R, g2;
let { value: o, onChange: n2, displayValue: i, ...a } = t, [l, s] = pe("Combobox.Input"), u = Ue(), c = I(l.inputRef, r), m2 = l.inputPropsRef, b = `headlessui-combobox-input-${A()}`, T = Q(), y = ke(n2);
x(() => {
m2.current.displayValue = i;
}, [i, m2]);
let p2 = React2.useCallback((v) => {
switch (v.key) {
case "Enter":
v.preventDefault(), v.stopPropagation(), u.selectActiveOption(), s({ type: 1 });
break;
case "ArrowDown":
return v.preventDefault(), v.stopPropagation(), S(l.comboboxState, { [0]: () => s({ type: 3, focus: 2 }), [1]: () => {
s({ type: 0 }), T.nextFrame(() => {
l.comboboxPropsRef.current.value || s({ type: 3, focus: 0 });
});
} });
case "ArrowUp":
return v.preventDefault(), v.stopPropagation(), S(l.comboboxState, { [0]: () => s({ type: 3, focus: 1 }), [1]: () => {
s({ type: 0 }), T.nextFrame(() => {
l.comboboxPropsRef.current.value || s({ type: 3, focus: 3 });
});
} });
case "Home":
case "PageUp":
return v.preventDefault(), v.stopPropagation(), s({ type: 3, focus: 0 });
case "End":
case "PageDown":
return v.preventDefault(), v.stopPropagation(), s({ type: 3, focus: 3 });
case "Escape":
return v.preventDefault(), l.optionsRef.current && !l.optionsPropsRef.current.static && v.stopPropagation(), s({ type: 1 });
case "Tab":
u.selectActiveOption(), s({ type: 1 });
break;
}
}, [T, s, l, u]), f2 = React2.useCallback((v) => {
var h2;
s({ type: 0 }), (h2 = y.current) == null || h2.call(y, v);
}, [s, y]), d = ee(() => {
if (!!l.labelRef.current)
return [l.labelRef.current.id].join(" ");
}, [l.labelRef.current]), P = React2.useMemo(() => ({ open: l.comboboxState === 0, disabled: l.disabled }), [l]), C = { ref: c, id: b, role: "combobox", type: "text", "aria-controls": (R = l.optionsRef.current) == null ? void 0 : R.id, "aria-expanded": l.disabled ? void 0 : l.comboboxState === 0, "aria-activedescendant": l.activeOptionIndex === null || (g2 = l.options[l.activeOptionIndex]) == null ? void 0 : g2.id, "aria-labelledby": d, disabled: l.disabled, onKeyDown: p2, onChange: f2 };
return E({ props: { ...a, ...C }, slot: P, defaultTag: Lr, name: "Combobox.Input" });
}), Mr = "button", Fr = D(function(t, r) {
var p2;
let [o, n2] = pe("Combobox.Button"), i = Ue(), a = I(o.buttonRef, r), l = `headlessui-combobox-button-${A()}`, s = Q(), u = React2.useCallback((f2) => {
switch (f2.key) {
case "ArrowDown":
return f2.preventDefault(), f2.stopPropagation(), o.comboboxState === 1 && (n2({ type: 0 }), s.nextFrame(() => {
o.comboboxPropsRef.current.value || n2({ type: 3, focus: 0 });
})), s.nextFrame(() => {
var d;
return (d = o.inputRef.current) == null ? void 0 : d.focus({ preventScroll: true });
});
case "ArrowUp":
return f2.preventDefault(), f2.stopPropagation(), o.comboboxState === 1 && (n2({ type: 0 }), s.nextFrame(() => {
o.comboboxPropsRef.current.value || n2({ type: 3, focus: 3 });
})), s.nextFrame(() => {
var d;
return (d = o.inputRef.current) == null ? void 0 : d.focus({ preventScroll: true });
});
case "Escape":
return f2.preventDefault(), o.optionsRef.current && !o.optionsPropsRef.current.static && f2.stopPropagation(), n2({ type: 1 }), s.nextFrame(() => {
var d;
return (d = o.inputRef.current) == null ? void 0 : d.focus({ preventScroll: true });
});
}
}, [s, n2, o, i]), c = React2.useCallback((f2) => {
if (G(f2.currentTarget))
return f2.preventDefault();
o.comboboxState === 0 ? n2({ type: 1 }) : (f2.preventDefault(), n2({ type: 0 })), s.nextFrame(() => {
var d;
return (d = o.inputRef.current) == null ? void 0 : d.focus({ preventScroll: true });
});
}, [n2, s, o]), m2 = ee(() => {
if (!!o.labelRef.current)
return [o.labelRef.current.id, l].join(" ");
}, [o.labelRef.current, l]), b = React2.useMemo(() => ({ open: o.comboboxState === 0, disabled: o.disabled }), [o]), T = t, y = { ref: a, id: l, type: U(t, o.buttonRef), tabIndex: -1, "aria-haspopup": true, "aria-controls": (p2 = o.optionsRef.current) == null ? void 0 : p2.id, "aria-expanded": o.disabled ? void 0 : o.comboboxState === 0, "aria-labelledby": m2, disabled: o.disabled, onClick: c, onKeyDown: u };
return E({ props: { ...T, ...y }, slot: b, defaultTag: Mr, name: "Combobox.Button" });
}), wr = "label";
function kr(e) {
let [t] = pe("Combobox.Label"), r = `headlessui-combobox-label-${A()}`, o = React2.useCallback(() => {
var a;
return (a = t.inputRef.current) == null ? void 0 : a.focus({ preventScroll: true });
}, [t.inputRef]), n2 = React2.useMemo(() => ({ open: t.comboboxState === 0, disabled: t.disabled }), [t]), i = { ref: t.labelRef, id: r, onClick: o };
return E({ props: { ...e, ...i }, slot: n2, defaultTag: wr, name: "Combobox.Label" });
}
var _r = "ul", Gr = 1 | 2, Hr = D(function(t, r) {
var y;
let { hold: o = false, ...n2 } = t, [i] = pe("Combobox.Options"), { optionsPropsRef: a } = i, l = I(i.optionsRef, r), s = `headlessui-combobox-options-${A()}`, u = _(), c = (() => u !== null ? u === 0 : i.comboboxState === 0)();
x(() => {
var p2;
a.current.static = (p2 = t.static) != null ? p2 : false;
}, [a, t.static]), x(() => {
a.current.hold = o;
}, [o, a]), se({ container: i.optionsRef.current, enabled: i.comboboxState === 0, accept(p2) {
return p2.getAttribute("role") === "option" ? NodeFilter.FILTER_REJECT : p2.hasAttribute("role") ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
}, walk(p2) {
p2.setAttribute("role", "none");
} });
let m2 = ee(() => {
var p2, f2, d;
return (d = (p2 = i.labelRef.current) == null ? void 0 : p2.id) != null ? d : (f2 = i.buttonRef.current) == null ? void 0 : f2.id;
}, [i.labelRef.current, i.buttonRef.current]), b = React2.useMemo(() => ({ open: i.comboboxState === 0 }), [i]), T = { "aria-activedescendant": i.activeOptionIndex === null || (y = i.options[i.activeOptionIndex]) == null ? void 0 : y.id, "aria-labelledby": m2, role: "listbox", id: s, ref: l };
return E({ props: { ...n2, ...T }, slot: b, defaultTag: _r, features: Gr, visible: c, name: "Combobox.Options" });
}), Ur = "li";
function Br(e) {
let { disabled: t = false, value: r, ...o } = e, [n2, i] = pe("Combobox.Option"), a = Ue(), l = `headlessui-combobox-option-${A()}`, s = n2.activeOptionIndex !== null ? n2.options[n2.activeOptionIndex].id === l : false, u = n2.comboboxPropsRef.current.value === r, c = React2.useRef({ disabled: t, value: r });
x(() => {
c.current.disabled = t;
}, [c, t]), x(() => {
c.current.value = r;
}, [c, r]), x(() => {
var P, C;
c.current.textValue = (C = (P = document.getElementById(l)) == null ? void 0 : P.textContent) == null ? void 0 : C.toLowerCase();
}, [c, l]);
let m2 = React2.useCallback(() => a.selectOption(l), [a, l]);
x(() => (i({ type: 4, id: l, dataRef: c }), () => i({ type: 5, id: l })), [c, l]), x(() => {
n2.comboboxState === 0 && (!u || i({ type: 3, focus: 4, id: l }));
}, [n2.comboboxState, u, l]), x(() => {
if (n2.comboboxState !== 0 || !s)
return;
let P = k();
return P.requestAnimationFrame(() => {
var C, R;
(R = (C = document.getElementById(l)) == null ? void 0 : C.scrollIntoView) == null || R.call(C, { block: "nearest" });
}), P.dispose;
}, [l, s, n2.comboboxState, n2.activeOptionIndex]);
let b = React2.useCallback((P) => {
if (t)
return P.preventDefault();
m2(), i({ type: 1 }), k().nextFrame(() => {
var C;
return (C = n2.inputRef.current) == null ? void 0 : C.focus({ preventScroll: true });
});
}, [i, n2.inputRef, t, m2]), T = React2.useCallback(() => {
if (t)
return i({ type: 3, focus: 5 });
i({ type: 3, focus: 4, id: l });
}, [t, l, i]), y = React2.useCallback(() => {
t || s || i({ type: 3, focus: 4, id: l });
}, [t, s, l, i]), p2 = React2.useCallback(() => {
t || !s || n2.optionsPropsRef.current.hold || i({ type: 3, focus: 5 });
}, [t, s, i, n2.comboboxState, n2.comboboxPropsRef]), f2 = React2.useMemo(() => ({ active: s, selected: u, disabled: t }), [s, u, t]);
return E({ props: { ...o, ...{ id: l, role: "option", tabIndex: t === true ? void 0 : -1, "aria-disabled": t === true ? true : void 0, "aria-selected": u === true ? true : void 0, disabled: void 0, onClick: b, onFocus: T, onPointerMove: y, onMouseMove: y, onPointerLeave: p2, onMouseLeave: p2 } }, slot: f2, defaultTag: Ur, name: "Combobox.Option" });
}
Object.assign(Ir, { Input: Dr, Button: Fr, Label: kr, Options: Hr, Option: Br });
var Et = ["[contentEditable=true]", "[tabindex]", "a[href]", "area[href]", "button:not([disabled])", "iframe", "input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])"].map((e) => `${e}:not([tabindex='-1'])`).join(",");
function xe(e = document.body) {
return e == null ? [] : Array.from(e.querySelectorAll(Et));
}
function de(e, t = 0) {
return e === document.body ? false : S(t, { [0]() {
return e.matches(Et);
}, [1]() {
let r = e;
for (; r !== null; ) {
if (r.matches(Et))
return true;
r = r.parentElement;
}
return false;
} });
}
function ce(e) {
e == null || e.focus({ preventScroll: true });
}
function M(e, t) {
let r = Array.isArray(e) ? e.slice().sort((c, m2) => {
let b = c.compareDocumentPosition(m2);
return b & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : b & Node.DOCUMENT_POSITION_PRECEDING ? 1 : 0;
}) : xe(e), o = document.activeElement, n2 = (() => {
if (t & (1 | 4))
return 1;
if (t & (2 | 8))
return -1;
throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last");
})(), i = (() => {
if (t & 1)
return 0;
if (t & 2)
return Math.max(0, r.indexOf(o)) - 1;
if (t & 4)
return Math.max(0, r.indexOf(o)) + 1;
if (t & 8)
return r.length - 1;
throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last");
})(), a = t & 32 ? { preventScroll: true } : {}, l = 0, s = r.length, u;
do {
if (l >= s || l + s <= 0)
return 0;
let c = i + l;
if (t & 16)
c = (c + s) % s;
else {
if (c < 0)
return 3;
if (c >= s)
return 1;
}
u = r[c], u == null || u.focus(a), l += n2;
} while (u !== document.activeElement);
return u.hasAttribute("tabindex") || u.setAttribute("tabindex", "0"), 2;
}
function Be() {
let e = React2.useRef(false);
return React2.useEffect(() => (e.current = true, () => {
e.current = false;
}), []), e;
}
function Ne(e, t = 30, { initialFocus: r, containers: o } = {}) {
let n2 = React2.useRef(typeof window != "undefined" ? document.activeElement : null), i = React2.useRef(null), a = Be(), l = Boolean(t & 16), s = Boolean(t & 2);
React2.useEffect(() => {
!l || (n2.current = document.activeElement);
}, [l]), React2.useEffect(() => {
if (!!l)
return () => {
ce(n2.current), n2.current = null;
};
}, [l]), React2.useEffect(() => {
if (!s || !e.current)
return;
let u = document.activeElement;
if (r == null ? void 0 : r.current) {
if ((r == null ? void 0 : r.current) === u) {
i.current = u;
return;
}
} else if (e.current.contains(u)) {
i.current = u;
return;
}
(r == null ? void 0 : r.current) ? ce(r.current) : M(e.current, 1) === 0 && console.warn("There are no focusable elements inside the <FocusTrap />"), i.current = document.activeElement;
}, [e, r, s]), w("keydown", (u) => {
!(t & 4) || !e.current || u.key === "Tab" && (u.preventDefault(), M(e.current, (u.shiftKey ? 2 : 4) | 16) === 2 && (i.current = document.activeElement));
}), w("focus", (u) => {
if (!(t & 8))
return;
let c = new Set(o == null ? void 0 : o.current);
if (c.add(e), !c.size)
return;
let m2 = i.current;
if (!m2 || !a.current)
return;
let b = u.target;
b && b instanceof HTMLElement ? Kr(c, b) ? (i.current = b, ce(b)) : (u.preventDefault(), u.stopPropagation(), ce(m2)) : ce(i.current);
}, true);
}
function Kr(e, t) {
var r;
for (let o of e)
if ((r = o.current) == null ? void 0 : r.contains(t))
return true;
return false;
}
var fe = /* @__PURE__ */ new Set(), J = /* @__PURE__ */ new Map();
function po(e) {
e.setAttribute("aria-hidden", "true"), e.inert = true;
}
function co(e) {
let t = J.get(e);
!t || (t["aria-hidden"] === null ? e.removeAttribute("aria-hidden") : e.setAttribute("aria-hidden", t["aria-hidden"]), e.inert = t.inert);
}
function fo(e, t = true) {
x(() => {
if (!t || !e.current)
return;
let r = e.current;
fe.add(r);
for (let o of J.keys())
o.contains(r) && (co(o), J.delete(o));
return document.querySelectorAll("body > *").forEach((o) => {
if (o instanceof HTMLElement) {
for (let n2 of fe)
if (o.contains(n2))
return;
fe.size === 1 && (J.set(o, { "aria-hidden": o.getAttribute("aria-hidden"), inert: o.inert }), po(o));
}
}), () => {
if (fe.delete(r), fe.size > 0)
document.querySelectorAll("body > *").forEach((o) => {
if (o instanceof HTMLElement && !J.has(o)) {
for (let n2 of fe)
if (o.contains(n2))
return;
J.set(o, { "aria-hidden": o.getAttribute("aria-hidden"), inert: o.inert }), po(o);
}
});
else
for (let o of J.keys())
co(o), J.delete(o);
};
}, [t]);
}
var mo = React2.createContext(false);
function bo() {
return React2.useContext(mo);
}
function At(e) {
return React2.createElement(mo.Provider, { value: e.force }, e.children);
}
function Xr() {
let e = bo(), t = React2.useContext(Po), [r, o] = React2.useState(() => {
if (!e && t !== null || typeof window == "undefined")
return null;
let n2 = document.getElementById("headlessui-portal-root");
if (n2)
return n2;
let i = document.createElement("div");
return i.setAttribute("id", "headlessui-portal-root"), document.body.appendChild(i);
});
return React2.useEffect(() => {
r !== null && (document.body.contains(r) || document.body.appendChild(r));
}, [r]), React2.useEffect(() => {
e || t !== null && o(t.current);
}, [t, o, e]), r;
}
var Jr = React2.Fragment;
function We(e) {
let t = e, r = Xr(), [o] = React2.useState(() => typeof window == "undefined" ? null : document.createElement("div")), n2 = q$1();
return x(() => {
if (!!r && !!o)
return r.appendChild(o), () => {
var i;
!r || !o || (r.removeChild(o), r.childNodes.length <= 0 && ((i = r.parentElement) == null || i.removeChild(r)));
};
}, [r, o]), n2 ? !r || !o ? null : ReactDOM2.createPortal(E({ props: t, defaultTag: Jr, name: "Portal" }), o) : null;
}
var Zr = React2.Fragment, Po = React2.createContext(null);
function en(e) {
let { target: t, ...r } = e;
return React2.createElement(Po.Provider, { value: t }, E({ props: r, defaultTag: Zr, name: "Popover.Group" }));
}
We.Group = en;
var vo = React2.createContext(null);
function Ro() {
let e = React2.useContext(vo);
if (e === null) {
let t = new Error("You used a <Description /> component, but it is not inside a relevant parent.");
throw Error.captureStackTrace && Error.captureStackTrace(t, Ro), t;
}
return e;
}
function re() {
let [e, t] = React2.useState([]);
return [e.length > 0 ? e.join(" ") : void 0, React2.useMemo(() => function(o) {
let n2 = React2.useCallback((a) => (t((l) => [...l, a]), () => t((l) => {
let s = l.slice(), u = s.indexOf(a);
return u !== -1 && s.splice(u, 1), s;
})), []), i = React2.useMemo(() => ({ register: n2, slot: o.slot, name: o.name, props: o.props }), [n2, o.slot, o.name, o.props]);
return React2.createElement(vo.Provider, { value: i }, o.children);
}, [t])];
}
var an = "p";
function me(e) {
let t = Ro(), r = `headlessui-description-${A()}`;
x(() => t.register(r), [r, t.register]);
let o = e, n2 = { ...t.props, id: r };
return E({ props: { ...o, ...n2 }, slot: t.slot || {}, defaultTag: an, name: t.name || "Description" });
}
var ht = React2.createContext(() => {
});
ht.displayName = "StackContext";
function cn() {
return React2.useContext(ht);
}
function Eo({ children: e, onUpdate: t, type: r, element: o }) {
let n2 = cn(), i = React2.useCallback((...a) => {
t == null || t(...a), n2(...a);
}, [n2, t]);
return x(() => (i(0, r, o), () => i(1, r, o)), [i, r, o]), React2.createElement(ht.Provider, { value: i }, e);
}
var yn = { [0](e, t) {
return e.titleId === t.id ? e : { ...e, titleId: t.id };
} }, Ve = React2.createContext(null);
Ve.displayName = "DialogContext";
function It(e) {
let t = React2.useContext(Ve);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <${An.displayName} /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, It), r;
}
return t;
}
function gn(e, t) {
return S(t.type, yn, e, t);
}
var Pn = "div", xn = 1 | 2, vn = D(function(t, r) {
let { open: o, onClose: n2, initialFocus: i, ...a } = t, [l, s] = React2.useState(0), u = _();
o === void 0 && u !== null && (o = S(u, { [0]: true, [1]: false }));
let c = React2.useRef(/* @__PURE__ */ new Set()), m2 = React2.useRef(null), b = I(m2, r), T = t.hasOwnProperty("open") || u !== null, y = t.hasOwnProperty("onClose");
if (!T && !y)
throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");
if (!T)
throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");
if (!y)
throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");
if (typeof o != "boolean")
throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${o}`);
if (typeof n2 != "function")
throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${n2}`);
let p2 = o ? 0 : 1, f2 = (() => u !== null ? u === 0 : p2 === 0)(), [d, P] = React2.useReducer(gn, { titleId: null, descriptionId: null }), C = React2.useCallback(() => n2(false), [n2]), R = React2.useCallback((F) => P({ type: 0, id: F }), [P]), v = q$1() && p2 === 0, h2 = l > 1, O = React2.useContext(Ve) !== null;
Ne(m2, v ? S(h2 ? "parent" : "leaf", { parent: 16, leaf: 30 }) : 1, { initialFocus: i, containers: c }), fo(m2, h2 ? v : false), w("mousedown", (F) => {
var H;
let $ = F.target;
p2 === 0 && (h2 || ((H = m2.current) == null ? void 0 : H.contains($)) || C());
}), w("keydown", (F) => {
F.key === "Escape" && p2 === 0 && (h2 || (F.preventDefault(), F.stopPropagation(), C()));
}), React2.useEffect(() => {
if (p2 !== 0 || O)
return;
let F = document.documentElement.style.overflow, $ = document.documentElement.style.paddingRight, H = window.innerWidth - document.documentElement.clientWidth;
return document.documentElement.style.overflow = "hidden", document.documentElement.style.paddingRight = `${H}px`, () => {
document.documentElement.style.overflow = F, document.documentElement.style.paddingRight = $;
};
}, [p2, O]), React2.useEffect(() => {
if (p2 !== 0 || !m2.current)
return;
let F = new IntersectionObserver(($) => {
for (let H of $)
H.boundingClientRect.x === 0 && H.boundingClientRect.y === 0 && H.boundingClientRect.width === 0 && H.boundingClientRect.height === 0 && C();
});
return F.observe(m2.current), () => F.disconnect();
}, [p2, m2, C]);
let [N, K] = re(), V = `headlessui-dialog-${A()}`, Fe = React2.useMemo(() => [{ dialogState: p2, close: C, setTitleId: R }, d], [p2, d, C, R]), ge = React2.useMemo(() => ({ open: p2 === 0 }), [p2]), we = { ref: b, id: V, role: "dialog", "aria-modal": p2 === 0 ? true : void 0, "aria-labelledby": d.titleId, "aria-describedby": N, onClick(F) {
F.stopPropagation();
} }, X = a;
return React2.createElement(Eo, { type: "Dialog", element: m2, onUpdate: React2.useCallback((F, $, H) => {
$ === "Dialog" && S(F, { [0]() {
c.current.add(H), s((Pe) => Pe + 1);
}, [1]() {
c.current.add(H), s((Pe) => Pe - 1);
} });
}, []) }, React2.createElement(At, { force: true }, React2.createElement(We, null, React2.createElement(Ve.Provider, { value: Fe }, React2.createElement(We.Group, { target: m2 }, React2.createElement(At, { force: false }, React2.createElement(K, { slot: ge, name: "Dialog.Description" }, E({ props: { ...X, ...we }, slot: ge, defaultTag: Pn, features: xn, visible: f2, name: "Dialog" }))))))));
}), Rn = "div", En = D(function(t, r) {
let [{ dialogState: o, close: n2 }] = It("Dialog.Overlay"), i = I(r), a = `headlessui-dialog-overlay-${A()}`, l = React2.useCallback((m2) => {
if (m2.target === m2.currentTarget) {
if (G(m2.currentTarget))
return m2.preventDefault();
m2.preventDefault(), m2.stopPropagation(), n2();
}
}, [n2]), s = React2.useMemo(() => ({ open: o === 0 }), [o]);
return E({ props: { ...t, ...{ ref: i, id: a, "aria-hidden": true, onClick: l } }, slot: s, defaultTag: Rn, name: "Dialog.Overlay" });
}), Cn = "h2";
function Sn(e) {
let [{ dialogState: t, setTitleId: r }] = It("Dialog.Title"), o = `headlessui-dialog-title-${A()}`;
React2.useEffect(() => (r(o), () => r(null)), [o, r]);
let n2 = React2.useMemo(() => ({ open: t === 0 }), [t]);
return E({ props: { ...e, ...{ id: o } }, slot: n2, defaultTag: Cn, name: "Dialog.Title" });
}
var An = Object.assign(vn, { Overlay: En, Title: Sn, Description: me });
var Ln = { [0]: (e) => ({ ...e, disclosureState: S(e.disclosureState, { [0]: 1, [1]: 0 }) }), [1]: (e) => e.disclosureState === 1 ? e : { ...e, disclosureState: 1 }, [4](e) {
return e.linkedPanel === true ? e : { ...e, linkedPanel: true };
}, [5](e) {
return e.linkedPanel === false ? e : { ...e, linkedPanel: false };
}, [2](e, t) {
return e.buttonId === t.buttonId ? e : { ...e, buttonId: t.buttonId };
}, [3](e, t) {
return e.panelId === t.panelId ? e : { ...e, panelId: t.panelId };
} }, Mt = React2.createContext(null);
Mt.displayName = "DisclosureContext";
function Ft(e) {
let t = React2.useContext(Mt);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <${Ye.name} /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, Ft), r;
}
return t;
}
var wt = React2.createContext(null);
wt.displayName = "DisclosureAPIContext";
function Ao(e) {
let t = React2.useContext(wt);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <${Ye.name} /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, Ao), r;
}
return t;
}
var kt = React2.createContext(null);
kt.displayName = "DisclosurePanelContext";
function Dn() {
return React2.useContext(kt);
}
function Mn(e, t) {
return S(t.type, Ln, e, t);
}
var Fn = React2.Fragment;
function Ye(e) {
let { defaultOpen: t = false, ...r } = e, o = `headlessui-disclosure-button-${A()}`, n2 = `headlessui-disclosure-panel-${A()}`, i = React2.useReducer(Mn, { disclosureState: t ? 0 : 1, linkedPanel: false, buttonId: o, panelId: n2 }), [{ disclosureState: a }, l] = i;
React2.useEffect(() => l({ type: 2, buttonId: o }), [o, l]), React2.useEffect(() => l({ type: 3, panelId: n2 }), [n2, l]);
let s = React2.useCallback((m2) => {
l({ type: 1 });
let b = (() => m2 ? m2 instanceof HTMLElement ? m2 : m2.current instanceof HTMLElement ? m2.current : document.getElementById(o) : document.getElementById(o))();
b == null || b.focus();
}, [l, o]), u = React2.useMemo(() => ({ close: s }), [s]), c = React2.useMemo(() => ({ open: a === 0, close: s }), [a, s]);
return React2.createElement(Mt.Provider, { value: i }, React2.createElement(wt.Provider, { value: u }, React2.createElement(W, { value: S(a, { [0]: 0, [1]: 1 }) }, E({ props: r, slot: c, defaultTag: Fn, name: "Disclosure" }))));
}
var wn = "button", kn = D(function(t, r) {
let [o, n2] = Ft("Disclosure.Button"), i = React2.useRef(null), a = I(i, r), l = Dn(), s = l === null ? false : l === o.panelId, u = React2.useCallback((f2) => {
var d;
if (s) {
if (o.disclosureState === 1)
return;
switch (f2.key) {
case " ":
case "Enter":
f2.preventDefault(), f2.stopPropagation(), n2({ type: 0 }), (d = document.getElementById(o.buttonId)) == null || d.focus();
break;
}
} else
switch (f2.key) {
case " ":
case "Enter":
f2.preventDefault(), f2.stopPropagation(), n2({ type: 0 });
break;
}
}, [n2, s, o.disclosureState, o.buttonId]), c = React2.useCallback((f2) => {
switch (f2.key) {
case " ":
f2.preventDefault();
break;
}
}, []), m2 = React2.useCallback((f2) => {
var d;
G(f2.currentTarget) || t.disabled || (s ? (n2({ type: 0 }), (d = document.getElementById(o.buttonId)) == null || d.focus()) : n2({ type: 0 }));
}, [n2, t.disabled, o.buttonId, s]), b = React2.useMemo(() => ({ open: o.disclosureState === 0 }), [o]), T = U(t, i), y = t, p2 = s ? { ref: a, type: T, onKeyDown: u, onClick: m2 } : { ref: a, id: o.buttonId, type: T, "aria-expanded": t.disabled ? void 0 : o.disclosureState === 0, "aria-controls": o.linkedPanel ? o.panelId : void 0, onKeyDown: u, onKeyUp: c, onClick: m2 };
return E({ props: { ...y, ...p2 }, slot: b, defaultTag: wn, name: "Disclosure.Button" });
}), _n = "div", Gn = 1 | 2, Hn = D(function(t, r) {
let [o, n2] = Ft("Disclosure.Panel"), { close: i } = Ao("Disclosure.Panel"), a = I(r, () => {
o.linkedPanel || n2({ type: 4 });
}), l = _(), s = (() => l !== null ? l === 0 : o.disclosureState === 0)();
React2.useEffect(() => () => n2({ type: 5 }), [n2]), React2.useEffect(() => {
var b;
o.disclosureState === 1 && ((b = t.unmount) != null ? b : true) && n2({ type: 5 });
}, [o.disclosureState, t.unmount, n2]);
let u = React2.useMemo(() => ({ open: o.disclosureState === 0, close: i }), [o, i]), c = { ref: a, id: o.panelId }, m2 = t;
return React2.createElement(kt.Provider, { value: o.panelId }, E({ props: { ...m2, ...c }, slot: u, defaultTag: _n, features: Gn, visible: s, name: "Disclosure.Panel" }));
});
Ye.Button = kn;
Ye.Panel = Hn;
var $n = { [1](e) {
return e.disabled || e.listboxState === 1 ? e : { ...e, activeOptionIndex: null, listboxState: 1 };
}, [0](e) {
return e.disabled || e.listboxState === 0 ? e : { ...e, listboxState: 0 };
}, [2](e, t) {
return e.disabled === t.disabled ? e : { ...e, disabled: t.disabled };
}, [3](e, t) {
return e.orientation === t.orientation ? e : { ...e, orientation: t.orientation };
}, [4](e, t) {
if (e.disabled || e.listboxState === 1)
return e;
let r = ae(t, { resolveItems: () => e.options, resolveActiveIndex: () => e.activeOptionIndex, resolveId: (o) => o.id, resolveDisabled: (o) => o.dataRef.current.disabled });
return e.searchQuery === "" && e.activeOptionIndex === r ? e : { ...e, searchQuery: "", activeOptionIndex: r };
}, [5]: (e, t) => {
if (e.disabled || e.listboxState === 1)
return e;
let o = e.searchQuery !== "" ? 0 : 1, n2 = e.searchQuery + t.value.toLowerCase(), a = (e.activeOptionIndex !== null ? e.options.slice(e.activeOptionIndex + o).concat(e.options.slice(0, e.activeOptionIndex + o)) : e.options).find((s) => {
var u;
return !s.dataRef.current.disabled && ((u = s.dataRef.current.textValue) == null ? void 0 : u.startsWith(n2));
}), l = a ? e.options.indexOf(a) : -1;
return l === -1 || l === e.activeOptionIndex ? { ...e, searchQuery: n2 } : { ...e, searchQuery: n2, activeOptionIndex: l };
}, [6](e) {
return e.disabled || e.listboxState === 1 || e.searchQuery === "" ? e : { ...e, searchQuery: "" };
}, [7]: (e, t) => {
var n2;
let r = Array.from((n2 = e.optionsRef.current) == null ? void 0 : n2.querySelectorAll('[id^="headlessui-listbox-option-"]')).reduce((i, a, l) => Object.assign(i, { [a.id]: l }), {}), o = [...e.options, { id: t.id, dataRef: t.dataRef }].sort((i, a) => r[i.id] - r[a.id]);
return { ...e, options: o };
}, [8]: (e, t) => {
let r = e.options.slice(), o = e.activeOptionIndex !== null ? r[e.activeOptionIndex] : null, n2 = r.findIndex((i) => i.id === t.id);
return n2 !== -1 && r.splice(n2, 1), { ...e, options: r, activeOptionIndex: (() => n2 === e.activeOptionIndex || o === null ? null : r.indexOf(o))() };
} }, Gt = React2.createContext(null);
Gt.displayName = "ListboxContext";
function Re(e) {
let t = React2.useContext(Gt);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <${Ee.name} /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, Re), r;
}
return t;
}
function Qn(e, t) {
return S(t.type, $n, e, t);
}
var qn = React2.Fragment;
function Ee(e) {
let { value: t, onChange: r, disabled: o = false, horizontal: n2 = false, ...i } = e, a = n2 ? "horizontal" : "vertical", l = React2.useReducer(Qn, { listboxState: 1, propsRef: { current: { value: t, onChange: r } }, labelRef: React2.createRef(), buttonRef: React2.createRef(), optionsRef: React2.createRef(), disabled: o, orientation: a, options: [], searchQuery: "", activeOptionIndex: null }), [{ listboxState: s, propsRef: u, optionsRef: c, buttonRef: m2 }, b] = l;
x(() => {
u.current.value = t;
}, [t, u]), x(() => {
u.current.onChange = r;
}, [r, u]), x(() => b({ type: 2, disabled: o }), [o]), x(() => b({ type: 3, orientation: a }), [a]), w("mousedown", (y) => {
var f2, d, P;
let p2 = y.target;
s === 0 && (((f2 = m2.current) == null ? void 0 : f2.contains(p2)) || ((d = c.current) == null ? void 0 : d.contains(p2)) || (b({ type: 1 }), de(p2, 1) || (y.preventDefault(), (P = m2.current) == null || P.focus())));
});
let T = React2.useMemo(() => ({ open: s === 0, disabled: o }), [s, o]);
return React2.createElement(Gt.Provider, { value: l }, React2.createElement(W, { value: S(s, { [0]: 0, [1]: 1 }) }, E({ props: i, slot: T, defaultTag: qn, name: "Listbox" })));
}
var zn = "button", Yn = D(function(t, r) {
var p2;
let [o, n2] = Re("Listbox.Button"), i = I(o.buttonRef, r), a = `headlessui-listbox-button-${A()}`, l = Q(), s = React2.useCallback((f2) => {
switch (f2.key) {
case " ":
case "Enter":
case "ArrowDown":
f2.preventDefault(), n2({ type: 0 }), l.nextFrame(() => {
o.propsRef.current.value || n2({ type: 4, focus: 0 });
});
break;
case "ArrowUp":
f2.preventDefault(), n2({ type: 0 }), l.nextFrame(() => {
o.propsRef.current.value || n2({ type: 4, focus: 3 });
});
break;
}
}, [n2, o, l]), u = React2.useCallback((f2) => {
switch (f2.key) {
case " ":
f2.preventDefault();
break;
}
}, []), c = React2.useCallback((f2) => {
if (G(f2.currentTarget))
return f2.preventDefault();
o.listboxState === 0 ? (n2({ type: 1 }), l.nextFrame(() => {
var d;
return (d = o.buttonRef.current) == null ? void 0 : d.focus({ preventScroll: true });
})) : (f2.preventDefault(), n2({ type: 0 }));
}, [n2, l, o]), m2 = ee(() => {
if (!!o.labelRef.current)
return [o.labelRef.current.id, a].join(" ");
}, [o.labelRef.current, a]), b = React2.useMemo(() => ({ open: o.listboxState === 0, disabled: o.disabled }), [o]), T = t, y = { ref: i, id: a, type: U(t, o.buttonRef), "aria-haspopup": true, "aria-controls": (p2 = o.optionsRef.current) == null ? void 0 : p2.id, "aria-expanded": o.disabled ? void 0 : o.listboxState === 0, "aria-labelledby": m2, disabled: o.disabled, onKeyDown: s, onKeyUp: u, onClick: c };
return E({ props: { ...T, ...y }, slot: b, defaultTag: zn, name: "Listbox.Button" });
}), Xn = "label";
function Jn(e) {
let [t] = Re("Listbox.Label"), r = `headlessui-listbox-label-${A()}`, o = React2.useCallback(() => {
var a;
return (a = t.buttonRef.current) == null ? void 0 : a.focus({ preventScroll: true });
}, [t.buttonRef]), n2 = React2.useMemo(() => ({ open: t.listboxState === 0, disabled: t.disabled }), [t]), i = { ref: t.labelRef, id: r, onClick: o };
return E({ props: { ...e, ...i }, slot: n2, defaultTag: Xn, name: "Listbox.Label" });
}
var Zn = "ul", ei = 1 | 2, ti = D(function(t, r) {
var f2;
let [o, n2] = Re("Listbox.Options"), i = I(o.optionsRef, r), a = `headlessui-listbox-options-${A()}`, l = Q(), s = Q(), u = _(), c = (() => u !== null ? u === 0 : o.listboxState === 0)();
x(() => {
let d = o.optionsRef.current;
!d || o.listboxState === 0 && d !== document.activeElement && d.focus({ preventScroll: true });
}, [o.listboxState, o.optionsRef]);
let m2 = React2.useCallback((d) => {
switch (s.dispose(), d.key) {
case " ":
if (o.searchQuery !== "")
return d.preventDefault(), d.stopPropagation(), n2({ type: 5, value: d.key });
case "Enter":
if (d.preventDefault(), d.stopPropagation(), n2({ type: 1 }), o.activeOptionIndex !== null) {
let { dataRef: P } = o.options[o.activeOptionIndex];
o.propsRef.current.onChange(P.current.value);
}
k().nextFrame(() => {
var P;
return (P = o.buttonRef.current) == null ? void 0 : P.focus({ preventScroll: true });
});
break;
case S(o.orientation, { vertical: "ArrowDown", horizontal: "ArrowRight" }):
return d.preventDefault(), d.stopPropagation(), n2({ type: 4, focus: 2 });
case S(o.orientation, { vertical: "ArrowUp", horizontal: "ArrowLeft" }):
return d.preventDefault(), d.stopPropagation(), n2({ type: 4, focus: 1 });
case "Home":
case "PageUp":
return d.preventDefault(), d.stopPropagation(), n2({ type: 4, focus: 0 });
case "End":
case "PageDown":
return d.preventDefault(), d.stopPropagation(), n2({ type: 4, focus: 3 });
case "Escape":
return d.preventDefault(), d.stopPropagation(), n2({ type: 1 }), l.nextFrame(() => {
var P;
return (P = o.buttonRef.current) == null ? void 0 : P.focus({ preventScroll: true });
});
case "Tab":
d.preventDefault(), d.stopPropagation();
break;
default:
d.key.length === 1 && (n2({ type: 5, value: d.key }), s.setTimeout(() => n2({ type: 6 }), 350));
break;
}
}, [l, n2, s, o]), b = ee(() => {
var d, P, C;
return (C = (d = o.labelRef.current) == null ? void 0 : d.id) != null ? C : (P = o.buttonRef.current) == null ? void 0 : P.id;
}, [o.labelRef.current, o.buttonRef.current]), T = React2.useMemo(() => ({ open: o.listboxState === 0 }), [o]), y = { "aria-activedescendant": o.activeOptionIndex === null || (f2 = o.options[o.activeOptionIndex]) == null ? void 0 : f2.id, "aria-labelledby": b, "aria-orientation": o.orientation, id: a, onKeyDown: m2, role: "listbox", tabIndex: 0, ref: i };
return E({ props: { ...t, ...y }, slot: T, defaultTag: Zn, features: ei, visible: c, name: "Listbox.Options" });
}), oi = "li";
function ri(e) {
let { disabled: t = false, value: r, ...o } = e, [n2, i] = Re("Listbox.Option"), a = `headlessui-listbox-option-${A()}`, l = n2.activeOptionIndex !== null ? n2.options[n2.activeOptionIndex].id === a : false, s = n2.propsRef.current.value === r, u = React2.useRef({ disabled: t, value: r });
x(() => {
u.current.disabled = t;
}, [u, t]), x(() => {
u.current.value = r;
}, [u, r]), x(() => {
var d, P;
u.current.textValue = (P = (d = document.getElementById(a)) == null ? void 0 : d.textContent) == null ? void 0 : P.toLowerCase();
}, [u, a]);
let c = React2.useCallback(() => n2.propsRef.current.onChange(r), [n2.propsRef, r]);
x(() => (i({ type: 7, id: a, dataRef: u }), () => i({ type: 8, id: a })), [u, a]), x(() => {
var d, P;
n2.listboxState === 0 && (!s || (i({ type: 4, focus: 4, id: a }), (P = (d = document.getElementById(a)) == null ? void 0 : d.focus) == null || P.call(d)));
}, [n2.listboxState]), x(() => {
if (n2.listboxState !== 0 || !l)
return;
let d = k();
return d.requestAnimationFrame(() => {
var P, C;
(C = (P = document.getElementById(a)) == null ? void 0 : P.scrollIntoView) == null || C.call(P, { block: "nearest" });
}), d.dispose;
}, [a, l, n2.listboxState, n2.activeOptionIndex]);
let m2 = React2.useCallback((d) => {
if (t)
return d.preventDefault();
c(), i({ type: 1 }), k().nextFrame(() => {
var P;
return (P = n2.buttonRef.current) == null ? void 0 : P.focus({ preventScroll: true });
});
}, [i, n2.buttonRef, t, c]), b = React2.useCallback(() => {
if (t)
return i({ type: 4, focus: 5 });
i({ type: 4, focus: 4, id: a });
}, [t, a, i]), T = React2.useCallback(() => {
t || l || i({ type: 4, focus: 4, id: a });
}, [t, l, a, i]), y = React2.useCallback(() => {
t || !l || i({ type: 4, focus: 5 });
}, [t, l, i]), p2 = React2.useMemo(() => ({ active: l, selected: s, disabled: t }), [l, s, t]);
return E({ props: { ...o, ...{ id: a, role: "option", tabIndex: t === true ? void 0 : -1, "aria-disabled": t === true ? true : void 0, "aria-selected": s === true ? true : void 0, disabled: void 0, onClick: m2, onFocus: b, onPointerMove: T, onMouseMove: T, onPointerLeave: y, onMouseLeave: y } }, slot: p2, defaultTag: oi, name: "Listbox.Option" });
}
Ee.Button = Yn;
Ee.Label = Jn;
Ee.Options = ti;
Ee.Option = ri;
var ui = { [1](e) {
return e.menuState === 1 ? e : { ...e, activeItemIndex: null, menuState: 1 };
}, [0](e) {
return e.menuState === 0 ? e : { ...e, menuState: 0 };
}, [2]: (e, t) => {
let r = ae(t, { resolveItems: () => e.items, resolveActiveIndex: () => e.activeItemIndex, resolveId: (o) => o.id, resolveDisabled: (o) => o.dataRef.current.disabled });
return e.searchQuery === "" && e.activeItemIndex === r ? e : { ...e, searchQuery: "", activeItemIndex: r };
}, [3]: (e, t) => {
let o = e.searchQuery !== "" ? 0 : 1, n2 = e.searchQuery + t.value.toLowerCase(), a = (e.activeItemIndex !== null ? e.items.slice(e.activeItemIndex + o).concat(e.items.slice(0, e.activeItemIndex + o)) : e.items).find((s) => {
var u;
return ((u = s.dataRef.current.textValue) == null ? void 0 : u.startsWith(n2)) && !s.dataRef.current.disabled;
}), l = a ? e.items.indexOf(a) : -1;
return l === -1 || l === e.activeItemIndex ? { ...e, searchQuery: n2 } : { ...e, searchQuery: n2, activeItemIndex: l };
}, [4](e) {
return e.searchQuery === "" ? e : { ...e, searchQuery: "", searchActiveItemIndex: null };
}, [5]: (e, t) => {
var n2;
let r = Array.from((n2 = e.itemsRef.current) == null ? void 0 : n2.querySelectorAll('[id^="headlessui-menu-item-"]')).reduce((i, a, l) => Object.assign(i, { [a.id]: l }), {}), o = [...e.items, { id: t.id, dataRef: t.dataRef }].sort((i, a) => r[i.id] - r[a.id]);
return { ...e, items: o };
}, [6]: (e, t) => {
let r = e.items.slice(), o = e.activeItemIndex !== null ? r[e.activeItemIndex] : null, n2 = r.findIndex((i) => i.id === t.id);
return n2 !== -1 && r.splice(n2, 1), { ...e, items: r, activeItemIndex: (() => n2 === e.activeItemIndex || o === null ? null : r.indexOf(o))() };
} }, Ht = React2.createContext(null);
Ht.displayName = "MenuContext";
function Je(e) {
let t = React2.useContext(Ht);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <${Ze.name} /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, Je), r;
}
return t;
}
function pi(e, t) {
return S(t.type, ui, e, t);
}
var di = React2.Fragment;
function Ze(e) {
let t = React2.useReducer(pi, { menuState: 1, buttonRef: React2.createRef(), itemsRef: React2.createRef(), items: [], searchQuery: "", activeItemIndex: null }), [{ menuState: r, itemsRef: o, buttonRef: n2 }, i] = t;
w("mousedown", (l) => {
var u, c, m2;
let s = l.target;
r === 0 && (((u = n2.current) == null ? void 0 : u.contains(s)) || ((c = o.current) == null ? void 0 : c.contains(s)) || (i({ type: 1 }), de(s, 1) || (l.preventDefault(), (m2 = n2.current) == null || m2.focus())));
});
let a = React2.useMemo(() => ({ open: r === 0 }), [r]);
return React2.createElement(Ht.Provider, { value: t }, React2.createElement(W, { value: S(r, { [0]: 0, [1]: 1 }) }, E({ props: e, slot: a, defaultTag: di, name: "Menu" })));
}
var ci = "button", fi = D(function(t, r) {
var y;
let [o, n2] = Je("Menu.Button"), i = I(o.buttonRef, r), a = `headlessui-menu-button-${A()}`, l = Q(), s = React2.useCallback((p2) => {
switch (p2.key) {
case " ":
case "Enter":
case "ArrowDown":
p2.preventDefault(), p2.stopPropagation(), n2({ type: 0 }), l.nextFrame(() => n2({ type: 2, focus: 0 }));
break;
case "ArrowUp":
p2.preventDefault(), p2.stopPropagation(), n2({ type: 0 }), l.nextFrame(() => n2({ type: 2, focus: 3 }));
break;
}
}, [n2, l]), u = React2.useCallback((p2) => {
switch (p2.key) {
case " ":
p2.preventDefault();
break;
}
}, []), c = React2.useCallback((p2) => {
if (G(p2.currentTarget))
return p2.preventDefault();
t.disabled || (o.menuState === 0 ? (n2({ type: 1 }), l.nextFrame(() => {
var f2;
return (f2 = o.buttonRef.current) == null ? void 0 : f2.focus({ preventScroll: true });
})) : (p2.preventDefault(), p2.stopPropagation(), n2({ type: 0 })));
}, [n2, l, o, t.disabled]), m2 = React2.useMemo(() => ({ open: o.menuState === 0 }), [o]), b = t, T = { ref: i, id: a, type: U(t, o.buttonRef), "aria-haspopup": true, "aria-controls": (y = o.itemsRef.current) == null ? void 0 : y.id, "aria-expanded": t.disabled ? void 0 : o.menuState === 0, onKeyDown: s, onKeyUp: u, onClick: c };
return E({ props: { ...b, ...T }, slot: m2, defaultTag: ci, name: "Menu.Button" });
}), mi = "div", bi = 1 | 2, Ti = D(function(t, r) {
var p2, f2;
let [o, n2] = Je("Menu.Items"), i = I(o.itemsRef, r), a = `headlessui-menu-items-${A()}`, l = Q(), s = _(), u = (() => s !== null ? s === 0 : o.menuState === 0)();
React2.useEffect(() => {
let d = o.itemsRef.current;
!d || o.menuState === 0 && d !== document.activeElement && d.focus({ preventScroll: true });
}, [o.menuState, o.itemsRef]), se({ container: o.itemsRef.current, enabled: o.menuState === 0, accept(d) {
return d.getAttribute("role") === "menuitem" ? NodeFilter.FILTER_REJECT : d.hasAttribute("role") ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
}, walk(d) {
d.setAttribute("role", "none");
} });
let c = React2.useCallback((d) => {
var P;
switch (l.dispose(), d.key) {
case " ":
if (o.searchQuery !== "")
return d.preventDefault(), d.stopPropagation(), n2({ type: 3, value: d.key });
case "Enter":
if (d.preventDefault(), d.stopPropagation(), n2({ type: 1 }), o.activeItemIndex !== null) {
let { id: C } = o.items[o.activeItemIndex];
(P = document.getElementById(C)) == null || P.click();
}
k().nextFrame(() => {
var C;
return (C = o.buttonRef.current) == null ? void 0 : C.focus({ preventScroll: true });
});
break;
case "ArrowDown":
return d.preventDefault(), d.stopPropagation(), n2({ type: 2, focus: 2 });
case "ArrowUp":
return d.preventDefault(), d.stopPropagation(), n2({ type: 2, focus: 1 });
case "Home":
case "PageUp":
return d.preventDefault(), d.stopPropagation(), n2({ type: 2, focus: 0 });
case "End":
case "PageDown":
return d.preventDefault(), d.stopPropagation(), n2({ type: 2, focus: 3 });
case "Escape":
d.preventDefault(), d.stopPropagation(), n2({ type: 1 }), k().nextFrame(() => {
var C;
return (C = o.buttonRef.current) == null ? void 0 : C.focus({ preventScroll: true });
});
break;
case "Tab":
d.preventDefault(), d.stopPropagation();
break;
default:
d.key.length === 1 && (n2({ type: 3, value: d.key }), l.setTimeout(() => n2({ type: 4 }), 350));
break;
}
}, [n2, l, o]), m2 = React2.useCallback((d) => {
switch (d.key) {
case " ":
d.preventDefault();
break;
}
}, []), b = React2.useMemo(() => ({ open: o.menuState === 0 }), [o]), T = { "aria-activedescendant": o.activeItemIndex === null || (p2 = o.items[o.activeItemIndex]) == null ? void 0 : p2.id, "aria-labelledby": (f2 = o.buttonRef.current) == null ? void 0 : f2.id, id: a, onKeyDown: c, onKeyUp: m2, role: "menu", tabIndex: 0, ref: i };
return E({ props: { ...t, ...T }, slot: b, defaultTag: mi, features: bi, visible: u, name: "Menu.Items" });
}), yi = React2.Fragment;
function gi(e) {
let { disabled: t = false, onClick: r, ...o } = e, [n2, i] = Je("Menu.Item"), a = `headlessui-menu-item-${A()}`, l = n2.activeItemIndex !== null ? n2.items[n2.activeItemIndex].id === a : false;
x(() => {
if (n2.menuState !== 0 || !l)
return;
let p2 = k();
return p2.requestAnimationFrame(() => {
var f2, d;
(d = (f2 = document.getElementById(a)) == null ? void 0 : f2.scrollIntoView) == null || d.call(f2, { block: "nearest" });
}), p2.dispose;
}, [a, l, n2.menuState, n2.activeItemIndex]);
let s = React2.useRef({ disabled: t });
x(() => {
s.current.disabled = t;
}, [s, t]), x(() => {
var p2, f2;
s.current.textValue = (f2 = (p2 = document.getElementById(a)) == null ? void 0 : p2.textContent) == null ? void 0 : f2.toLowerCase();
}, [s, a]), x(() => (i({ type: 5, id: a, dataRef: s }), () => i({ type: 6, id: a })), [s, a]);
let u = React2.useCallback((p2) => {
if (t)
return p2.preventDefault();
if (i({ type: 1 }), k().nextFrame(() => {
var f2;
return (f2 = n2.buttonRef.current) == null ? void 0 : f2.focus({ preventScroll: true });
}), r)
return r(p2);
}, [i, n2.buttonRef, t, r]), c = React2.useCallback(() => {
if (t)
return i({ type: 2, focus: 5 });
i({ type: 2, focus: 4, id: a });
}, [t, a, i]), m2 = React2.useCallback(() => {
t || l || i({ type: 2, focus: 4, id: a });
}, [t, l, a, i]), b = React2.useCallback(() => {
t || !l || i({ type: 2, focus: 5 });
}, [t, l, i]), T = React2.useMemo(() => ({ active: l, disabled: t }), [l, t]);
return E({ props: { ...o, ...{ id: a, role: "menuitem", tabIndex: t === true ? void 0 : -1, "aria-disabled": t === true ? true : void 0, disabled: void 0, onClick: u, onFocus: c, onPointerMove: m2, onMouseMove: m2, onPointerLeave: b, onMouseLeave: b } }, slot: T, defaultTag: yi, name: "Menu.Item" });
}
Ze.Button = fi;
Ze.Items = Ti;
Ze.Item = gi;
var vi = { [0]: (e) => ({ ...e, popoverState: S(e.popoverState, { [0]: 1, [1]: 0 }) }), [1](e) {
return e.popoverState === 1 ? e : { ...e, popoverState: 1 };
}, [2](e, t) {
return e.button === t.button ? e : { ...e, button: t.button };
}, [3](e, t) {
return e.buttonId === t.buttonId ? e : { ...e, buttonId: t.buttonId };
}, [4](e, t) {
return e.panel === t.panel ? e : { ...e, panel: t.panel };
}, [5](e, t) {
return e.panelId === t.panelId ? e : { ...e, panelId: t.panelId };
} }, Ut = React2.createContext(null);
Ut.displayName = "PopoverContext";
function ot(e) {
let t = React2.useContext(Ut);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <${Te.name} /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, ot), r;
}
return t;
}
var Bt = React2.createContext(null);
Bt.displayName = "PopoverAPIContext";
function Mo(e) {
let t = React2.useContext(Bt);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <${Te.name} /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, Mo), r;
}
return t;
}
var Nt = React2.createContext(null);
Nt.displayName = "PopoverGroupContext";
function Fo() {
return React2.useContext(Nt);
}
var Wt = React2.createContext(null);
Wt.displayName = "PopoverPanelContext";
function Ri() {
return React2.useContext(Wt);
}
function Ei(e, t) {
return S(t.type, vi, e, t);
}
var Ci = "div";
function Te(e) {
let t = `headlessui-popover-button-${A()}`, r = `headlessui-popover-panel-${A()}`, o = React2.useReducer(Ei, { popoverState: 1, button: null, buttonId: t, panel: null, panelId: r }), [{ popoverState: n2, button: i, panel: a }, l] = o;
React2.useEffect(() => l({ type: 3, buttonId: t }), [t, l]), React2.useEffect(() => l({ type: 5, panelId: r }), [r, l]);
let s = React2.useMemo(() => ({ buttonId: t, panelId: r, close: () => l({ type: 1 }) }), [t, r, l]), u = Fo(), c = u == null ? void 0 : u.registerPopover, m2 = React2.useCallback(() => {
var p2;
return (p2 = u == null ? void 0 : u.isFocusWithinPopoverGroup()) != null ? p2 : (i == null ? void 0 : i.contains(document.activeElement)) || (a == null ? void 0 : a.contains(document.activeElement));
}, [u, i, a]);
React2.useEffect(() => c == null ? void 0 : c(s), [c, s]), w("focus", () => {
n2 === 0 && (m2() || !i || !a || l({ type: 1 }));
}, true), w("mousedown", (p2) => {
let f2 = p2.target;
n2 === 0 && ((i == null ? void 0 : i.contains(f2)) || (a == null ? void 0 : a.contains(f2)) || (l({ type: 1 }), de(f2, 1) || (p2.preventDefault(), i == null || i.focus())));
});
let b = React2.useCallback((p2) => {
l({ type: 1 });
let f2 = (() => p2 ? p2 instanceof HTMLElement ? p2 : p2.current instanceof HTMLElement ? p2.current : i : i)();
f2 == null || f2.focus();
}, [l, i]), T = React2.useMemo(() => ({ close: b }), [b]), y = React2.useMemo(() => ({ open: n2 === 0, close: b }), [n2, b]);
return React2.createElement(Ut.Provider, { value: o }, React2.createElement(Bt.Provider, { value: T }, React2.createElement(W, { value: S(n2, { [0]: 0, [1]: 1 }) }, E({ props: e, slot: y, defaultTag: Ci, name: "Popover" }))));
}
var Si = "button", Ai = D(function(t, r) {
let [o, n2] = ot("Popover.Button"), i = React2.useRef(null), a = Fo(), l = a == null ? void 0 : a.closeOthers, s = Ri(), u = s === null ? false : s === o.panelId, c = I(i, r, u ? null : (g2) => n2({ type: 2, button: g2 })), m2 = I(i, r), b = React2.useRef(null), T = React2.useRef(typeof window == "undefined" ? null : document.activeElement);
w("focus", () => {
T.current = b.current, b.current = document.activeElement;
}, true);
let y = React2.useCallback((g2) => {
var v, h2;
if (u) {
if (o.popoverState === 1)
return;
switch (g2.key) {
case " ":
case "Enter":
g2.preventDefault(), g2.stopPropagation(), n2({ type: 1 }), (v = o.button) == null || v.focus();
break;
}
} else
switch (g2.key) {
case " ":
case "Enter":
g2.preventDefault(), g2.stopPropagation(), o.popoverState === 1 && (l == null || l(o.buttonId)), n2({ type: 0 });
break;
case "Escape":
if (o.popoverState !== 0)
return l == null ? void 0 : l(o.buttonId);
if (!i.current || !i.current.contains(document.activeElement))
return;
g2.preventDefault(), g2.stopPropagation(), n2({ type: 1 });
break;
case "Tab":
if (o.popoverState !== 0 || !o.panel || !o.button)
return;
if (g2.shiftKey) {
if (!T.current || ((h2 = o.button) == null ? void 0 : h2.contains(T.current)) || o.panel.contains(T.current))
return;
let O = xe(), L = O.indexOf(T.current);
if (O.indexOf(o.button) > L)
return;
g2.preventDefault(), g2.stopPropagation(), M(o.panel, 8);
} else
g2.preventDefault(), g2.stopPropagation(), M(o.panel, 1);
break;
}
}, [n2, o.popoverState, o.buttonId, o.button, o.panel, i, l, u]), p2 = React2.useCallback((g2) => {
var v;
if (!u && (g2.key === " " && g2.preventDefault(), o.popoverState === 0 && !!o.panel && !!o.button))
switch (g2.key) {
case "Tab":
if (!T.current || ((v = o.button) == null ? void 0 : v.contains(T.current)) || o.panel.contains(T.current))
return;
let h2 = xe(), O = h2.indexOf(T.current);
if (h2.indexOf(o.button) > O)
return;
g2.preventDefault(), g2.stopPropagation(), M(o.panel, 8);
break;
}
}, [o.popoverState, o.panel, o.button, u]), f2 = React2.useCallback((g2) => {
var v, h2;
G(g2.currentTarget) || t.disabled || (u ? (n2({ type: 1 }), (v = o.button) == null || v.focus()) : (o.popoverState === 1 && (l == null || l(o.buttonId)), (h2 = o.button) == null || h2.focus(), n2({ type: 0 })));
}, [n2, o.button, o.popoverState, o.buttonId, t.disabled, l, u]), d = React2.useMemo(() => ({ open: o.popoverState === 0 }), [o]), P = U(t, i), C = t, R = u ? { ref: m2, type: P, onKeyDown: y, onClick: f2 } : { ref: c, id: o.buttonId, type: P, "aria-expanded": t.disabled ? void 0 : o.popoverState === 0, "aria-controls": o.panel ? o.panelId : void 0, onKeyDown: y, onKeyUp: p2, onClick: f2 };
return E({ props: { ...C, ...R }, slot: d, defaultTag: Si, name: "Popover.Button" });
}), hi = "div", Oi = 1 | 2, Ii = D(function(t, r) {
let [{ popoverState: o }, n2] = ot("Popover.Overlay"), i = I(r), a = `headlessui-popover-overlay-${A()}`, l = _(), s = (() => l !== null ? l === 0 : o === 0)(), u = React2.useCallback((T) => {
if (G(T.currentTarget))
return T.preventDefault();
n2({ type: 1 });
}, [n2]), c = React2.useMemo(() => ({ open: o === 0 }), [o]);
return E({ props: { ...t, ...{ ref: i, id: a, "aria-hidden": true, onClick: u } }, slot: c, defaultTag: hi, features: Oi, visible: s, name: "Popover.Overlay" });
}), Li = "div", Di = 1 | 2, Mi = D(function(t, r) {
let { focus: o = false, ...n2 } = t, [i, a] = ot("Popover.Panel"), { close: l } = Mo("Popover.Panel"), s = React2.useRef(null), u = I(s, r, (p2) => {
a({ type: 4, panel: p2 });
}), c = _(), m2 = (() => c !== null ? c === 0 : i.popoverState === 0)(), b = React2.useCallback((p2) => {
var f2;
switch (p2.key) {
case "Escape":
if (i.popoverState !== 0 || !s.current || !s.current.contains(document.activeElement))
return;
p2.preventDefault(), p2.stopPropagation(), a({ type: 1 }), (f2 = i.button) == null || f2.focus();
break;
}
}, [i, s, a]);
React2.useEffect(() => () => a({ type: 4, panel: null }), [a]), React2.useEffect(() => {
var p2;
t.static || i.popoverState === 1 && ((p2 = t.unmount) != null ? p2 : true) && a({ type: 4, panel: null });
}, [i.popoverState, t.unmount, t.static, a]), React2.useEffect(() => {
if (!o || i.popoverState !== 0 || !s.current)
return;
let p2 = document.activeElement;
s.current.contains(p2) || M(s.current, 1);
}, [o, s, i.popoverState]), w("keydown", (p2) => {
var d;
if (i.popoverState !== 0 || !s.current || p2.key !== "Tab" || !document.activeElement || !s.current || !s.current.contains(document.activeElement))
return;
p2.preventDefault();
let f2 = M(s.current, p2.shiftKey ? 2 : 4);
if (f2 === 3)
return (d = i.button) == null ? void 0 : d.focus();
if (f2 === 1) {
if (!i.button)
return;
let P = xe(), C = P.indexOf(i.button), R = P.splice(C + 1).filter((g2) => {
var v;
return !((v = s.current) == null ? void 0 : v.contains(g2));
});
M(R, 1) === 0 && M(document.body, 1);
}
}), w("focus", () => {
var p2;
!o || i.popoverState === 0 && (!s.current || ((p2 = s.current) == null ? void 0 : p2.contains(document.activeElement)) || a({ type: 1 }));
}, true);
let T = React2.useMemo(() => ({ open: i.popoverState === 0, close: l }), [i, l]), y = { ref: u, id: i.panelId, onKeyDown: b };
return React2.createElement(Wt.Provider, { value: i.panelId }, E({ props: { ...n2, ...y }, slot: T, defaultTag: Li, features: Di, visible: m2, name: "Popover.Panel" }));
}), Fi = "div";
function wi(e) {
let t = React2.useRef(null), [r, o] = React2.useState([]), n2 = React2.useCallback((b) => {
o((T) => {
let y = T.indexOf(b);
if (y !== -1) {
let p2 = T.slice();
return p2.splice(y, 1), p2;
}
return T;
});
}, [o]), i = React2.useCallback((b) => (o((T) => [...T, b]), () => n2(b)), [o, n2]), a = React2.useCallback(() => {
var T;
let b = document.activeElement;
return ((T = t.current) == null ? void 0 : T.contains(b)) ? true : r.some((y) => {
var p2, f2;
return ((p2 = document.getElementById(y.buttonId)) == null ? void 0 : p2.contains(b)) || ((f2 = document.getElementById(y.panelId)) == null ? void 0 : f2.contains(b));
});
}, [t, r]), l = React2.useCallback((b) => {
for (let T of r)
T.buttonId !== b && T.close();
}, [r]), s = React2.useMemo(() => ({ registerPopover: i, unregisterPopover: n2, isFocusWithinPopoverGroup: a, closeOthers: l }), [i, n2, a, l]), u = React2.useMemo(() => ({}), []), c = { ref: t }, m2 = e;
return React2.createElement(Nt.Provider, { value: s }, E({ props: { ...m2, ...c }, slot: u, defaultTag: Fi, name: "Popover.Group" }));
}
Te.Button = Ai;
Te.Overlay = Ii;
Te.Panel = Mi;
Te.Group = wi;
var _o = React2.createContext(null);
function Go() {
let e = React2.useContext(_o);
if (e === null) {
let t = new Error("You used a <Label /> component, but it is not inside a relevant parent.");
throw Error.captureStackTrace && Error.captureStackTrace(t, Go), t;
}
return e;
}
function Ae() {
let [e, t] = React2.useState([]);
return [e.length > 0 ? e.join(" ") : void 0, React2.useMemo(() => function(o) {
let n2 = React2.useCallback((a) => (t((l) => [...l, a]), () => t((l) => {
let s = l.slice(), u = s.indexOf(a);
return u !== -1 && s.splice(u, 1), s;
})), []), i = React2.useMemo(() => ({ register: n2, slot: o.slot, name: o.name, props: o.props }), [n2, o.slot, o.name, o.props]);
return React2.createElement(_o.Provider, { value: i }, o.children);
}, [t])];
}
var Ni = "label";
function nt(e) {
let { passive: t = false, ...r } = e, o = Go(), n2 = `headlessui-label-${A()}`;
x(() => o.register(n2), [n2, o.register]);
let i = { ...o.props, id: n2 }, a = { ...r, ...i };
return t && delete a.onClick, E({ props: a, slot: o.slot || {}, defaultTag: Ni, name: o.name || "Label" });
}
var jt = React2.createContext(null);
jt.displayName = "RadioGroupContext";
var $t = React2.createContext(null);
$t.displayName = "GroupContext";
var tl = React2.Fragment;
function ol(e) {
let [t, r] = React2.useState(null), [o, n2] = Ae(), [i, a] = re(), l = React2.useMemo(() => ({ switch: t, setSwitch: r, labelledby: o, describedby: i }), [t, r, o, i]);
return React2.createElement(a, { name: "Switch.Description" }, React2.createElement(n2, { name: "Switch.Label", props: { onClick() {
!t || (t.click(), t.focus({ preventScroll: true }));
} } }, React2.createElement($t.Provider, { value: l }, E({ props: e, defaultTag: tl, name: "Switch.Group" }))));
}
var rl = "button";
function Qt(e) {
let { checked: t, onChange: r, ...o } = e, n2 = `headlessui-switch-${A()}`, i = React2.useContext($t), a = React2.useRef(null), l = I(a, i === null ? null : i.setSwitch), s = React2.useCallback(() => r(!t), [r, t]), u = React2.useCallback((y) => {
if (G(y.currentTarget))
return y.preventDefault();
y.preventDefault(), s();
}, [s]), c = React2.useCallback((y) => {
y.key !== "Tab" && y.preventDefault(), y.key === " " && s();
}, [s]), m2 = React2.useCallback((y) => y.preventDefault(), []), b = React2.useMemo(() => ({ checked: t }), [t]), T = { id: n2, ref: l, role: "switch", type: U(e, a), tabIndex: 0, "aria-checked": t, "aria-labelledby": i == null ? void 0 : i.labelledby, "aria-describedby": i == null ? void 0 : i.describedby, onClick: u, onKeyUp: c, onKeyPress: m2 };
return E({ props: { ...o, ...T }, slot: b, defaultTag: rl, name: "Switch" });
}
Qt.Group = ol;
Qt.Label = nt;
Qt.Description = me;
var ul = { [0](e, t) {
return e.selectedIndex === t.index ? e : { ...e, selectedIndex: t.index };
}, [1](e, t) {
return e.orientation === t.orientation ? e : { ...e, orientation: t.orientation };
}, [2](e, t) {
return e.activation === t.activation ? e : { ...e, activation: t.activation };
}, [3](e, t) {
return e.tabs.includes(t.tab) ? e : { ...e, tabs: [...e.tabs, t.tab] };
}, [4](e, t) {
return { ...e, tabs: e.tabs.filter((r) => r !== t.tab) };
}, [5](e, t) {
return e.panels.includes(t.panel) ? e : { ...e, panels: [...e.panels, t.panel] };
}, [6](e, t) {
return { ...e, panels: e.panels.filter((r) => r !== t.panel) };
}, [7](e) {
return { ...e };
} }, zt = React2.createContext(null);
zt.displayName = "TabsContext";
function Le(e) {
let t = React2.useContext(zt);
if (t === null) {
let r = new Error(`<${e} /> is missing a parent <Tab.Group /> component.`);
throw Error.captureStackTrace && Error.captureStackTrace(r, Le), r;
}
return t;
}
function pl(e, t) {
return S(t.type, ul, e, t);
}
var dl = React2.Fragment;
function cl(e) {
let { defaultIndex: t = 0, vertical: r = false, manual: o = false, onChange: n2, selectedIndex: i = null, ...a } = e, l = r ? "vertical" : "horizontal", s = o ? "manual" : "auto", [u, c] = React2.useReducer(pl, { selectedIndex: null, tabs: [], panels: [], orientation: l, activation: s }), m2 = React2.useMemo(() => ({ selectedIndex: u.selectedIndex }), [u.selectedIndex]), b = React2.useRef(() => {
});
React2.useEffect(() => {
c({ type: 1, orientation: l });
}, [l]), React2.useEffect(() => {
c({ type: 2, activation: s });
}, [s]), React2.useEffect(() => {
typeof n2 == "function" && (b.current = n2);
}, [n2]), React2.useEffect(() => {
if (u.tabs.length <= 0 || i === null && u.selectedIndex !== null)
return;
let p2 = u.tabs.map((P) => P.current).filter(Boolean), f2 = p2.filter((P) => !P.hasAttribute("disabled")), d = i != null ? i : t;
if (d < 0)
c({ type: 0, index: p2.indexOf(f2[0]) });
else if (d > u.tabs.length)
c({ type: 0, index: p2.indexOf(f2[f2.length - 1]) });
else {
let P = p2.slice(0, d), R = [...p2.slice(d), ...P].find((g2) => f2.includes(g2));
if (!R)
return;
c({ type: 0, index: p2.indexOf(R) });
}
}, [t, i, u.tabs, u.selectedIndex]);
let T = React2.useRef(u.selectedIndex);
React2.useEffect(() => {
T.current = u.selectedIndex;
}, [u.selectedIndex]);
let y = React2.useMemo(() => [u, { dispatch: c, change(p2) {
T.current !== p2 && b.current(p2), T.current = p2, c({ type: 0, index: p2 });
} }], [u, c]);
return React2.createElement(zt.Provider, { value: y }, E({ props: { ...a }, slot: m2, defaultTag: dl, name: "Tabs" }));
}
var fl = "div";
function ml(e) {
let [{ selectedIndex: t, orientation: r }] = Le("Tab.List"), o = { selectedIndex: t };
return E({ props: { ...e, ...{ role: "tablist", "aria-orientation": r } }, slot: o, defaultTag: fl, name: "Tabs.List" });
}
var bl = "button";
function De(e) {
var C, R;
let t = `headlessui-tabs-tab-${A()}`, [{ selectedIndex: r, tabs: o, panels: n2, orientation: i, activation: a }, { dispatch: l, change: s }] = Le(De.name), u = React2.useRef(null), c = I(u, (g2) => {
!g2 || l({ type: 7 });
});
x(() => (l({ type: 3, tab: u }), () => l({ type: 4, tab: u })), [l, u]);
let m2 = o.indexOf(u), b = m2 === r, T = React2.useCallback((g2) => {
let v = o.map((h2) => h2.current).filter(Boolean);
if (g2.key === " " || g2.key === "Enter") {
g2.preventDefault(), g2.stopPropagation(), s(m2);
return;
}
switch (g2.key) {
case "Home":
case "PageUp":
return g2.preventDefault(), g2.stopPropagation(), M(v, 1);
case "End":
case "PageDown":
return g2.preventDefault(), g2.stopPropagation(), M(v, 8);
}
return S(i, { vertical() {
if (g2.key === "ArrowUp")
return M(v, 2 | 16);
if (g2.key === "ArrowDown")
return M(v, 4 | 16);
}, horizontal() {
if (g2.key === "ArrowLeft")
return M(v, 2 | 16);
if (g2.key === "ArrowRight")
return M(v, 4 | 16);
} });
}, [o, i, m2, s]), y = React2.useCallback(() => {
var g2;
(g2 = u.current) == null || g2.focus();
}, [u]), p2 = React2.useCallback(() => {
var g2;
(g2 = u.current) == null || g2.focus(), s(m2);
}, [s, m2, u]), f2 = React2.useMemo(() => ({ selected: b }), [b]), d = { ref: c, onKeyDown: T, onFocus: a === "manual" ? y : p2, onClick: p2, id: t, role: "tab", type: U(e, u), "aria-controls": (R = (C = n2[m2]) == null ? void 0 : C.current) == null ? void 0 : R.id, "aria-selected": b, tabIndex: b ? 0 : -1 };
return E({ props: { ...e, ...d }, slot: f2, defaultTag: bl, name: "Tabs.Tab" });
}
var Tl = "div";
function yl(e) {
let [{ selectedIndex: t }] = Le("Tab.Panels"), r = React2.useMemo(() => ({ selectedIndex: t }), [t]);
return E({ props: e, slot: r, defaultTag: Tl, name: "Tabs.Panels" });
}
var gl = "div", Pl = 1 | 2;
function xl(e) {
var T, y;
let [{ selectedIndex: t, tabs: r, panels: o }, { dispatch: n2 }] = Le("Tab.Panel"), i = `headlessui-tabs-panel-${A()}`, a = React2.useRef(null), l = I(a, (p2) => {
!p2 || n2({ type: 7 });
});
x(() => (n2({ type: 5, panel: a }), () => n2({ type: 6, panel: a })), [n2, a]);
let s = o.indexOf(a), u = s === t, c = React2.useMemo(() => ({ selected: u }), [u]), m2 = { ref: l, id: i, role: "tabpanel", "aria-labelledby": (y = (T = r[s]) == null ? void 0 : T.current) == null ? void 0 : y.id, tabIndex: u ? 0 : -1 };
return E({ props: { ...e, ...m2 }, slot: c, defaultTag: gl, features: Pl, visible: u, name: "Tabs.Panel" });
}
De.Group = cl;
De.List = ml;
De.Panels = yl;
De.Panel = xl;
function Bo() {
let e = React2.useRef(true);
return React2.useEffect(() => {
e.current = false;
}, []), e.current;
}
function No(e) {
let t = { called: false };
return (...r) => {
if (!t.called)
return t.called = true, e(...r);
};
}
function Yt(e, ...t) {
e && t.length > 0 && e.classList.add(...t);
}
function ut(e, ...t) {
e && t.length > 0 && e.classList.remove(...t);
}
function El(e, t) {
let r = k();
if (!e)
return r.dispose;
let { transitionDuration: o, transitionDelay: n2 } = getComputedStyle(e), [i, a] = [o, n2].map((l) => {
let [s = 0] = l.split(",").filter(Boolean).map((u) => u.includes("ms") ? parseFloat(u) : parseFloat(u) * 1e3).sort((u, c) => c - u);
return s;
});
return i !== 0 ? r.setTimeout(() => {
t("finished");
}, i + a) : t("finished"), r.add(() => t("cancelled")), r.dispose;
}
function Xt(e, t, r, o, n2, i) {
let a = k(), l = i !== void 0 ? No(i) : () => {
};
return ut(e, ...n2), Yt(e, ...t, ...r), a.nextFrame(() => {
ut(e, ...r), Yt(e, ...o), a.add(El(e, (s) => (ut(e, ...o, ...t), Yt(e, ...n2), l(s))));
}), a.add(() => ut(e, ...t, ...r, ...o, ...n2)), a.add(() => l("cancelled")), a.dispose;
}
function le(e = "") {
return React2.useMemo(() => e.split(" ").filter((t) => t.trim().length > 1), [e]);
}
var dt = React2.createContext(null);
dt.displayName = "TransitionContext";
function Cl() {
let e = React2.useContext(dt);
if (e === null)
throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");
return e;
}
function Sl() {
let e = React2.useContext(ct);
if (e === null)
throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");
return e;
}
var ct = React2.createContext(null);
ct.displayName = "NestingContext";
function ft(e) {
return "children" in e ? ft(e.children) : e.current.filter(({ state: t }) => t === "visible").length > 0;
}
function $o(e) {
let t = React2.useRef(e), r = React2.useRef([]), o = Be();
React2.useEffect(() => {
t.current = e;
}, [e]);
let n2 = React2.useCallback((a, l = 1) => {
var u;
let s = r.current.findIndex(({ id: c }) => c === a);
s !== -1 && (S(l, { [0]() {
r.current.splice(s, 1);
}, [1]() {
r.current[s].state = "hidden";
} }), !ft(r) && o.current && ((u = t.current) == null || u.call(t)));
}, [t, o, r]), i = React2.useCallback((a) => {
let l = r.current.find(({ id: s }) => s === a);
return l ? l.state !== "visible" && (l.state = "visible") : r.current.push({ id: a, state: "visible" }), () => n2(a, 0);
}, [r, n2]);
return React2.useMemo(() => ({ children: r, register: i, unregister: n2 }), [i, n2, r]);
}
function Al() {
}
var hl = ["beforeEnter", "afterEnter", "beforeLeave", "afterLeave"];
function Qo(e) {
var r;
let t = {};
for (let o of hl)
t[o] = (r = e[o]) != null ? r : Al;
return t;
}
function Ol(e) {
let t = React2.useRef(Qo(e));
return React2.useEffect(() => {
t.current = Qo(e);
}, [e]), t;
}
var Il = "div", qo = 1;
function zo(e) {
let { beforeEnter: t, afterEnter: r, beforeLeave: o, afterLeave: n2, enter: i, enterFrom: a, enterTo: l, entered: s, leave: u, leaveFrom: c, leaveTo: m2, ...b } = e, T = React2.useRef(null), [y, p2] = React2.useState("visible"), f2 = b.unmount ? 0 : 1, { show: d, appear: P, initial: C } = Cl(), { register: R, unregister: g2 } = Sl(), v = A(), h2 = React2.useRef(false), O = $o(() => {
h2.current || (p2("hidden"), g2(v), X.current.afterLeave());
});
x(() => {
if (!!v)
return R(v);
}, [R, v]), x(() => {
if (f2 === 1 && !!v) {
if (d && y !== "visible") {
p2("visible");
return;
}
S(y, { hidden: () => g2(v), visible: () => R(v) });
}
}, [y, v, R, g2, d, f2]);
let L = le(i), N = le(a), K = le(l), V = le(s), Fe = le(u), ge = le(c), we = le(m2), X = Ol({ beforeEnter: t, afterEnter: r, beforeLeave: o, afterLeave: n2 }), F = q$1();
React2.useEffect(() => {
if (F && y === "visible" && T.current === null)
throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?");
}, [T, y, F]);
let $ = C && !P;
x(() => {
let bt = T.current;
if (!!bt && !$)
return h2.current = true, d && X.current.beforeEnter(), d || X.current.beforeLeave(), d ? Xt(bt, L, N, K, V, (Tt) => {
h2.current = false, Tt === "finished" && X.current.afterEnter();
}) : Xt(bt, Fe, ge, we, V, (Tt) => {
h2.current = false, Tt === "finished" && (ft(O) || (p2("hidden"), g2(v), X.current.afterLeave()));
});
}, [X, v, h2, g2, O, T, $, d, L, N, K, Fe, ge, we]);
let H = { ref: T }, Pe = b;
return React2.createElement(ct.Provider, { value: O }, React2.createElement(W, { value: S(y, { visible: 0, hidden: 1 }) }, E({ props: { ...Pe, ...H }, defaultTag: Il, features: qo, visible: y === "visible", name: "Transition.Child" })));
}
function mt(e) {
let { show: t, appear: r = false, unmount: o, ...n2 } = e, i = _();
if (t === void 0 && i !== null && (t = S(i, { [0]: true, [1]: false })), ![true, false].includes(t))
throw new Error("A <Transition /> is used but it is missing a `show={true | false}` prop.");
let [a, l] = React2.useState(t ? "visible" : "hidden"), s = $o(() => {
l("hidden");
}), u = Bo(), c = React2.useMemo(() => ({ show: t, appear: r || !u, initial: u }), [t, r, u]);
React2.useEffect(() => {
t ? l("visible") : ft(s) || l("hidden");
}, [t, s]);
let m2 = { unmount: o };
return React2.createElement(ct.Provider, { value: s }, React2.createElement(dt.Provider, { value: c }, E({ props: { ...m2, as: React2.Fragment, children: React2.createElement(zo, { ...m2, ...n2 }) }, defaultTag: React2.Fragment, features: qo, visible: a === "visible", name: "Transition" })));
}
mt.Child = function(t) {
let r = React2.useContext(dt) !== null, o = _() !== null;
return !r && o ? React2.createElement(mt, { ...t }) : React2.createElement(zo, { ...t });
};
mt.Root = mt;
function getDefaultExportFromCjs(x2) {
return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
}
var jsxRuntimeExports = {};
var jsxRuntime = {
get exports() {
return jsxRuntimeExports;
},
set exports(v) {
jsxRuntimeExports = v;
}
};
var reactJsxRuntime_production_min = {};
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
function toObject(val) {
if (val === null || val === void 0) {
throw new TypeError("Object.assign cannot be called with null or undefined");
}
return Object(val);
}
function shouldUseNative() {
try {
if (!Object.assign) {
return false;
}
var test1 = new String("abc");
test1[5] = "de";
if (Object.getOwnPropertyNames(test1)[0] === "5") {
return false;
}
var test2 = {};
for (var i = 0; i < 10; i++) {
test2["_" + String.fromCharCode(i)] = i;
}
var order2 = Object.getOwnPropertyNames(test2).map(function(n2) {
return test2[n2];
});
if (order2.join("") !== "0123456789") {
return false;
}
var test3 = {};
"abcdefghijklmnopqrst".split("").forEach(function(letter) {
test3[letter] = letter;
});
if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") {
return false;
}
return true;
} catch (err) {
return false;
}
}
shouldUseNative() ? Object.assign : function(target, source) {
var from;
var to2 = toObject(target);
var symbols;
for (var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for (var key in from) {
if (hasOwnProperty.call(from, key)) {
to2[key] = from[key];
}
}
if (getOwnPropertySymbols) {
symbols = getOwnPropertySymbols(from);
for (var i = 0; i < symbols.length; i++) {
if (propIsEnumerable.call(from, symbols[i])) {
to2[symbols[i]] = from[symbols[i]];
}
}
}
}
return to2;
};
/** @license React v17.0.2
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var f = React2, g = 60103;
reactJsxRuntime_production_min.Fragment = 60107;
if ("function" === typeof Symbol && Symbol.for) {
var h = Symbol.for;
g = h("react.element");
reactJsxRuntime_production_min.Fragment = h("react.fragment");
}
var m = f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, n = Object.prototype.hasOwnProperty, p = { key: true, ref: true, __self: true, __source: true };
function q(c, a, k2) {
var b, d = {}, e = null, l = null;
void 0 !== k2 && (e = "" + k2);
void 0 !== a.key && (e = "" + a.key);
void 0 !== a.ref && (l = a.ref);
for (b in a)
n.call(a, b) && !p.hasOwnProperty(b) && (d[b] = a[b]);
if (c && c.defaultProps)
for (b in a = c.defaultProps, a)
void 0 === d[b] && (d[b] = a[b]);
return { $$typeof: g, type: c, key: e, ref: l, props: d, _owner: m.current };
}
reactJsxRuntime_production_min.jsx = q;
reactJsxRuntime_production_min.jsxs = q;
(function(module) {
{
module.exports = reactJsxRuntime_production_min;
}
})(jsxRuntime);
const jsx = jsxRuntimeExports.jsx;
const jsxs = jsxRuntimeExports.jsxs;
const Fragment = jsxRuntimeExports.Fragment;
function ToggleSwitch(props) {
const {
className,
checked,
onChange,
labelLeft,
labelRight
} = props;
return /* @__PURE__ */ jsxs("div", {
className: `${className} flex flex-row`,
children: [/* @__PURE__ */ jsx("div", {
className: "w-1/4",
children: labelLeft
}), /* @__PURE__ */ jsx("div", {
className: "w-1/2",
children: /* @__PURE__ */ jsx(Qt, {
checked,
onChange,
className: `${checked ? "bg-blue-600" : "bg-gray-200"} relative inline-flex items-center h-6 rounded-full w-11`,
children: /* @__PURE__ */ jsx("span", {
className: `${checked ? "translate-x-6" : "translate-x-1"} inline-block w-4 h-4 transform bg-white rounded-full`
})
})
}), /* @__PURE__ */ jsx("div", {
className: "w-1/4",
children: labelRight
})]
});
}
function CheckIcon(props, svgRef) {
return /* @__PURE__ */ React__namespace.createElement("svg", Object.assign({
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 20 20",
fill: "currentColor",
"aria-hidden": "true",
ref: svgRef
}, props), /* @__PURE__ */ React__namespace.createElement("path", {
fillRule: "evenodd",
d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",
clipRule: "evenodd"
}));
}
const ForwardRef$2 = React__namespace.forwardRef(CheckIcon);
const CheckIcon$1 = ForwardRef$2;
function ChevronUpIcon(props, svgRef) {
return /* @__PURE__ */ React__namespace.createElement("svg", Object.assign({
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 20 20",
fill: "currentColor",
"aria-hidden": "true",
ref: svgRef
}, props), /* @__PURE__ */ React__namespace.createElement("path", {
fillRule: "evenodd",
d: "M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z",
clipRule: "evenodd"
}));
}
const ForwardRef$1 = React__namespace.forwardRef(ChevronUpIcon);
const ChevronUpIcon$1 = ForwardRef$1;
function SelectorIcon(props, svgRef) {
return /* @__PURE__ */ React__namespace.createElement("svg", Object.assign({
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 20 20",
fill: "currentColor",
"aria-hidden": "true",
ref: svgRef
}, props), /* @__PURE__ */ React__namespace.createElement("path", {
fillRule: "evenodd",
d: "M10 3a1 1 0 01.707.293l3 3a1 1 0 01-1.414 1.414L10 5.414 7.707 7.707a1 1 0 01-1.414-1.414l3-3A1 1 0 0110 3zm-3.707 9.293a1 1 0 011.414 0L10 14.586l2.293-2.293a1 1 0 011.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z",
clipRule: "evenodd"
}));
}
const ForwardRef = React__namespace.forwardRef(SelectorIcon);
const SelectorIcon$1 = ForwardRef;
function ListboxSelect(props) {
const {
selected,
setSelected,
optionList,
show
} = props;
return /* @__PURE__ */ jsx(Ee, {
value: selected,
onChange: setSelected,
children: /* @__PURE__ */ jsxs("div", {
className: "relative mt-1",
children: [/* @__PURE__ */ jsxs(Ee.Button, {
className: "relative w-full py-2 pl-3 pr-10 text-left bg-white rounded-lg shadow-md cursor-default focus:outline-none focus-visible:ring-2 focus-visible:ring-opacity-75 focus-visible:ring-white focus-visible:ring-offset-orange-300 focus-visible:ring-offset-2 focus-visible:border-indigo-500 sm:text-sm",
children: [/* @__PURE__ */ jsx("span", {
className: "block truncate text-gray-900",
children: show(selected)
}), /* @__PURE__ */ jsx("span", {
className: "absolute inset-y-0 right-0 flex items-center pr-2 pointer-events-none",
children: /* @__PURE__ */ jsx(SelectorIcon$1, {
className: "w-5 h-5 text-gray-400",
"aria-hidden": "true"
})
})]
}), /* @__PURE__ */ jsx(mt, {
as: React2.Fragment,
leave: "transition ease-in duration-100",
leaveFrom: "opacity-100",
leaveTo: "opacity-0",
children: /* @__PURE__ */ jsx(Ee.Options, {
className: "absolute w-full py-1 mt-1 overflow-auto text-base bg-white rounded-md shadow-lg max-h-60 ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm",
children: optionList.map((person, personIdx) => /* @__PURE__ */ jsx(Ee.Option, {
className: ({
active
}) => `cursor-default select-none relative py-2 pl-10 pr-4 ${active ? "text-amber-900 bg-amber-100" : "text-gray-900"}`,
value: person,
children: ({
selected: selected2
}) => /* @__PURE__ */ jsxs(Fragment, {
children: [/* @__PURE__ */ jsx("span", {
className: `block truncate ${selected2 ? "font-medium" : "font-normal"}`,
children: show(person)
}), selected2 ? /* @__PURE__ */ jsx("span", {
className: "absolute inset-y-0 left-0 flex items-center pl-3 text-amber-600",
children: /* @__PURE__ */ jsx(CheckIcon$1, {
className: "w-5 h-5",
"aria-hidden": "true"
})
}) : null]
})
}, personIdx))
})
})]
})
});
}
function CharacterGoalTab(props) {
const {
showText,
batchUpdateCharacter: batchUpdateCharacter2
} = props;
const [selectAllRoles, setSelectAllRoles] = React2.useState(() => true);
const optionList = characterStatusList.slice(0).reverse();
const [characterLevelGoal, setCharacterLevelGoal] = React2.useState(() => optionList[0]);
const batchSetCharacterGoalLevel = () => {
console.log(`批量设置${showText}目标等级`);
console.log(selectAllRoles);
console.log(characterLevelGoal);
batchUpdateCharacter2(!selectAllRoles, characterLevelGoal);
alert(`${showText}目标等级设置完毕`);
};
return /* @__PURE__ */ jsxs("div", {
children: [/* @__PURE__ */ jsx("div", {
className: "flex pt-4",
children: /* @__PURE__ */ jsx(ToggleSwitch, {
className: "w-full",
checked: selectAllRoles,
onChange: setSelectAllRoles,
labelLeft: `全部${showText}`,
labelRight: `仅激活${showText}`
})
}), /* @__PURE__ */ jsxs("div", {
className: "flex pt-4",
children: [/* @__PURE__ */ jsxs("div", {
className: "w-1/2 text-white-900",
children: [showText, "目标等级:"]
}), /* @__PURE__ */ jsx("div", {
className: "w-1/2",
children: /* @__PURE__ */ jsx(ListboxSelect, {
selected: characterLevelGoal,
setSelected: setCharacterLevelGoal,
optionList,
show: (characterStatus) => `${characterStatus.text.replace("A", "破")}`
})
})]
}), /* @__PURE__ */ jsx("div", {
className: "flex pt-2",
children: /* @__PURE__ */ jsx("div", {
className: "w-full",
children: /* @__PURE__ */ jsxs("button", {
className: "text-white bg-blue-500 px-4 py-2",
onClick: batchSetCharacterGoalLevel,
children: ["批量设置", showText, "目标等级"]
})
})
})]
});
}
function TalentGoalTab() {
const [selectAllRoles, setSelectAllRoles] = React2.useState(() => true);
const [talentGoalLevel, setTalentGoalLevel] = React2.useState({
normal: 1,
skill: 6,
burst: 6
});
const talentLevels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].reverse();
const batchSetCharacterTalentLevel = () => {
console.log("批量设置角色目标天赋");
console.log(talentGoalLevel);
const {
normal,
skill,
burst
} = talentGoalLevel;
console.log(selectAllRoles);
batchUpdateTalent(!selectAllRoles, normal, skill, burst);
alert("角色目标天赋设置完毕");
};
return /* @__PURE__ */ jsxs("div", {
children: [/* @__PURE__ */ jsx("div", {
className: "flex pt-4",
children: /* @__PURE__ */ jsx(ToggleSwitch, {
className: "w-full",
checked: selectAllRoles,
onChange: setSelectAllRoles,
labelLeft: "全部角色",
labelRight: "仅激活角色"
})
}), /* @__PURE__ */ jsxs("div", {
className: "grid grid-rows-2 grid-flow-col gap-2",
children: [/* @__PURE__ */ jsx("div", {
className: "mt-10",
children: "普通攻击"
}), /* @__PURE__ */ jsx("div", {
children: /* @__PURE__ */ jsx(ListboxSelect, {
selected: talentGoalLevel.normal,
setSelected: (num) => setTalentGoalLevel({
...talentGoalLevel,
normal: num
}),
optionList: talentLevels,
show: (num) => `${num}`
})
}), /* @__PURE__ */ jsx("div", {
className: "mt-10",
children: "元素战技"
}), /* @__PURE__ */ jsx("div", {
children: /* @__PURE__ */ jsx(ListboxSelect, {
selected: talentGoalLevel.skill,
setSelected: (num) => setTalentGoalLevel({
...talentGoalLevel,
skill: num
}),
optionList: talentLevels,
show: (num) => `${num}`
})
}), /* @__PURE__ */ jsx("div", {
className: "mt-10",
children: "元素爆发"
}), /* @__PURE__ */ jsx("div", {
children: /* @__PURE__ */ jsx(ListboxSelect, {
selected: talentGoalLevel.burst,
setSelected: (num) => setTalentGoalLevel({
...talentGoalLevel,
burst: num
}),
optionList: talentLevels,
show: (num) => `${num}`
})
})]
}), /* @__PURE__ */ jsx("div", {
className: "flex pt-2",
children: /* @__PURE__ */ jsx("div", {
className: "w-full",
children: /* @__PURE__ */ jsx("button", {
className: "text-white bg-blue-500 px-4 py-2",
onClick: batchSetCharacterTalentLevel,
children: "批量设置角色目标天赋"
})
})
})]
});
}
var axiosExports$1 = {};
var axios$3 = {
get exports() {
return axiosExports$1;
},
set exports(v) {
axiosExports$1 = v;
}
};
var axiosExports = {};
var axios$2 = {
get exports() {
return axiosExports;
},
set exports(v) {
axiosExports = v;
}
};
var bind$2 = function bind2(fn, thisArg) {
return function wrap() {
var args = new Array(arguments.length);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
return fn.apply(thisArg, args);
};
};
var bind$1 = bind$2;
var toString = Object.prototype.toString;
var kindOf = function(cache) {
return function(thing) {
var str = toString.call(thing);
return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
};
}(/* @__PURE__ */ Object.create(null));
function kindOfTest(type) {
type = type.toLowerCase();
return function isKindOf(thing) {
return kindOf(thing) === type;
};
}
function isArray(val) {
return Array.isArray(val);
}
function isUndefined(val) {
return typeof val === "undefined";
}
function isBuffer(val) {
return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === "function" && val.constructor.isBuffer(val);
}
var isArrayBuffer = kindOfTest("ArrayBuffer");
function isArrayBufferView(val) {
var result;
if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) {
result = ArrayBuffer.isView(val);
} else {
result = val && val.buffer && isArrayBuffer(val.buffer);
}
return result;
}
function isString(val) {
return typeof val === "string";
}
function isNumber(val) {
return typeof val === "number";
}
function isObject(val) {
return val !== null && typeof val === "object";
}
function isPlainObject(val) {
if (kindOf(val) !== "object") {
return false;
}
var prototype2 = Object.getPrototypeOf(val);
return prototype2 === null || prototype2 === Object.prototype;
}
var isDate = kindOfTest("Date");
var isFile = kindOfTest("File");
var isBlob = kindOfTest("Blob");
var isFileList = kindOfTest("FileList");
function isFunction(val) {
return toString.call(val) === "[object Function]";
}
function isStream(val) {
return isObject(val) && isFunction(val.pipe);
}
function isFormData(thing) {
var pattern = "[object FormData]";
return thing && (typeof FormData === "function" && thing instanceof FormData || toString.call(thing) === pattern || isFunction(thing.toString) && thing.toString() === pattern);
}
var isURLSearchParams = kindOfTest("URLSearchParams");
function trim(str) {
return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
}
function isStandardBrowserEnv() {
if (typeof navigator !== "undefined" && (navigator.product === "ReactNative" || navigator.product === "NativeScript" || navigator.product === "NS")) {
return false;
}
return typeof window !== "undefined" && typeof document !== "undefined";
}
function forEach(obj, fn) {
if (obj === null || typeof obj === "undefined") {
return;
}
if (typeof obj !== "object") {
obj = [obj];
}
if (isArray(obj)) {
for (var i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
fn.call(null, obj[key], key, obj);
}
}
}
}
function merge() {
var result = {};
function assignValue(val, key) {
if (isPlainObject(result[key]) && isPlainObject(val)) {
result[key] = merge(result[key], val);
} else if (isPlainObject(val)) {
result[key] = merge({}, val);
} else if (isArray(val)) {
result[key] = val.slice();
} else {
result[key] = val;
}
}
for (var i = 0, l = arguments.length; i < l; i++) {
forEach(arguments[i], assignValue);
}
return result;
}
function extend(a, b, thisArg) {
forEach(b, function assignValue(val, key) {
if (thisArg && typeof val === "function") {
a[key] = bind$1(val, thisArg);
} else {
a[key] = val;
}
});
return a;
}
function stripBOM(content) {
if (content.charCodeAt(0) === 65279) {
content = content.slice(1);
}
return content;
}
function inherits(constructor, superConstructor, props, descriptors2) {
constructor.prototype = Object.create(superConstructor.prototype, descriptors2);
constructor.prototype.constructor = constructor;
props && Object.assign(constructor.prototype, props);
}
function toFlatObject(sourceObj, destObj, filter) {
var props;
var i;
var prop;
var merged = {};
destObj = destObj || {};
do {
props = Object.getOwnPropertyNames(sourceObj);
i = props.length;
while (i-- > 0) {
prop = props[i];
if (!merged[prop]) {
destObj[prop] = sourceObj[prop];
merged[prop] = true;
}
}
sourceObj = Object.getPrototypeOf(sourceObj);
} while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
return destObj;
}
function endsWith(str, searchString, position) {
str = String(str);
if (position === void 0 || position > str.length) {
position = str.length;
}
position -= searchString.length;
var lastIndex = str.indexOf(searchString, position);
return lastIndex !== -1 && lastIndex === position;
}
function toArray(thing) {
if (!thing)
return null;
var i = thing.length;
if (isUndefined(i))
return null;
var arr = new Array(i);
while (i-- > 0) {
arr[i] = thing[i];
}
return arr;
}
var isTypedArray = function(TypedArray) {
return function(thing) {
return TypedArray && thing instanceof TypedArray;
};
}(typeof Uint8Array !== "undefined" && Object.getPrototypeOf(Uint8Array));
var utils$c = {
isArray,
isArrayBuffer,
isBuffer,
isFormData,
isArrayBufferView,
isString,
isNumber,
isObject,
isPlainObject,
isUndefined,
isDate,
isFile,
isBlob,
isFunction,
isStream,
isURLSearchParams,
isStandardBrowserEnv,
forEach,
merge,
extend,
trim,
stripBOM,
inherits,
toFlatObject,
kindOf,
kindOfTest,
endsWith,
toArray,
isTypedArray,
isFileList
};
var utils$b = utils$c;
function encode(val) {
return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
}
var buildURL$1 = function buildURL2(url, params, paramsSerializer) {
if (!params) {
return url;
}
var serializedParams;
if (paramsSerializer) {
serializedParams = paramsSerializer(params);
} else if (utils$b.isURLSearchParams(params)) {
serializedParams = params.toString();
} else {
var parts = [];
utils$b.forEach(params, function serialize(val, key) {
if (val === null || typeof val === "undefined") {
return;
}
if (utils$b.isArray(val)) {
key = key + "[]";
} else {
val = [val];
}
utils$b.forEach(val, function parseValue(v) {
if (utils$b.isDate(v)) {
v = v.toISOString();
} else if (utils$b.isObject(v)) {
v = JSON.stringify(v);
}
parts.push(encode(key) + "=" + encode(v));
});
});
serializedParams = parts.join("&");
}
if (serializedParams) {
var hashmarkIndex = url.indexOf("#");
if (hashmarkIndex !== -1) {
url = url.slice(0, hashmarkIndex);
}
url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams;
}
return url;
};
var utils$a = utils$c;
function InterceptorManager$1() {
this.handlers = [];
}
InterceptorManager$1.prototype.use = function use(fulfilled, rejected, options) {
this.handlers.push({
fulfilled,
rejected,
synchronous: options ? options.synchronous : false,
runWhen: options ? options.runWhen : null
});
return this.handlers.length - 1;
};
InterceptorManager$1.prototype.eject = function eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
};
InterceptorManager$1.prototype.forEach = function forEach2(fn) {
utils$a.forEach(this.handlers, function forEachHandler(h2) {
if (h2 !== null) {
fn(h2);
}
});
};
var InterceptorManager_1 = InterceptorManager$1;
var utils$9 = utils$c;
var normalizeHeaderName$1 = function normalizeHeaderName2(headers2, normalizedName) {
utils$9.forEach(headers2, function processHeader(value, name) {
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
headers2[normalizedName] = value;
delete headers2[name];
}
});
};
var utils$8 = utils$c;
function AxiosError$3(message, code, config, request, response) {
Error.call(this);
this.message = message;
this.name = "AxiosError";
code && (this.code = code);
config && (this.config = config);
request && (this.request = request);
response && (this.response = response);
}
utils$8.inherits(AxiosError$3, Error, {
toJSON: function toJSON() {
return {
// Standard
message: this.message,
name: this.name,
// Microsoft
description: this.description,
number: this.number,
// Mozilla
fileName: this.fileName,
lineNumber: this.lineNumber,
columnNumber: this.columnNumber,
stack: this.stack,
// Axios
config: this.config,
code: this.code,
status: this.response && this.response.status ? this.response.status : null
};
}
});
var prototype = AxiosError$3.prototype;
var descriptors = {};
[
"ERR_BAD_OPTION_VALUE",
"ERR_BAD_OPTION",
"ECONNABORTED",
"ETIMEDOUT",
"ERR_NETWORK",
"ERR_FR_TOO_MANY_REDIRECTS",
"ERR_DEPRECATED",
"ERR_BAD_RESPONSE",
"ERR_BAD_REQUEST",
"ERR_CANCELED"
// eslint-disable-next-line func-names
].forEach(function(code) {
descriptors[code] = { value: code };
});
Object.defineProperties(AxiosError$3, descriptors);
Object.defineProperty(prototype, "isAxiosError", { value: true });
AxiosError$3.from = function(error, code, config, request, response, customProps) {
var axiosError = Object.create(prototype);
utils$8.toFlatObject(error, axiosError, function filter(obj) {
return obj !== Error.prototype;
});
AxiosError$3.call(axiosError, error.message, code, config, request, response);
axiosError.name = error.name;
customProps && Object.assign(axiosError, customProps);
return axiosError;
};
var AxiosError_1 = AxiosError$3;
var transitional = {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
};
var utils$7 = utils$c;
function toFormData$1(obj, formData) {
formData = formData || new FormData();
var stack = [];
function convertValue(value) {
if (value === null)
return "";
if (utils$7.isDate(value)) {
return value.toISOString();
}
if (utils$7.isArrayBuffer(value) || utils$7.isTypedArray(value)) {
return typeof Blob === "function" ? new Blob([value]) : Buffer.from(value);
}
return value;
}
function build(data2, parentKey) {
if (utils$7.isPlainObject(data2) || utils$7.isArray(data2)) {
if (stack.indexOf(data2) !== -1) {
throw Error("Circular reference detected in " + parentKey);
}
stack.push(data2);
utils$7.forEach(data2, function each(value, key) {
if (utils$7.isUndefined(value))
return;
var fullKey = parentKey ? parentKey + "." + key : key;
var arr;
if (value && !parentKey && typeof value === "object") {
if (utils$7.endsWith(key, "{}")) {
value = JSON.stringify(value);
} else if (utils$7.endsWith(key, "[]") && (arr = utils$7.toArray(value))) {
arr.forEach(function(el) {
!utils$7.isUndefined(el) && formData.append(fullKey, convertValue(el));
});
return;
}
}
build(value, fullKey);
});
stack.pop();
} else {
formData.append(parentKey, convertValue(data2));
}
}
build(obj);
return formData;
}
var toFormData_1 = toFormData$1;
var AxiosError$2 = AxiosError_1;
var settle = function settle2(resolve, reject, response) {
var validateStatus = response.config.validateStatus;
if (!response.status || !validateStatus || validateStatus(response.status)) {
resolve(response);
} else {
reject(new AxiosError$2(
"Request failed with status code " + response.status,
[AxiosError$2.ERR_BAD_REQUEST, AxiosError$2.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
response.config,
response.request,
response
));
}
};
var cookies;
var hasRequiredCookies;
function requireCookies() {
if (hasRequiredCookies)
return cookies;
hasRequiredCookies = 1;
var utils2 = utils$c;
cookies = utils2.isStandardBrowserEnv() ? (
// Standard browser envs support document.cookie
function standardBrowserEnv() {
return {
write: function write(name, value, expires, path, domain, secure) {
var cookie = [];
cookie.push(name + "=" + encodeURIComponent(value));
if (utils2.isNumber(expires)) {
cookie.push("expires=" + new Date(expires).toGMTString());
}
if (utils2.isString(path)) {
cookie.push("path=" + path);
}
if (utils2.isString(domain)) {
cookie.push("domain=" + domain);
}
if (secure === true) {
cookie.push("secure");
}
document.cookie = cookie.join("; ");
},
read: function read(name) {
var match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)"));
return match ? decodeURIComponent(match[3]) : null;
},
remove: function remove(name) {
this.write(name, "", Date.now() - 864e5);
}
};
}()
) : (
// Non standard browser env (web workers, react-native) lack needed support.
function nonStandardBrowserEnv() {
return {
write: function write() {
},
read: function read() {
return null;
},
remove: function remove() {
}
};
}()
);
return cookies;
}
var isAbsoluteURL$1 = function isAbsoluteURL2(url) {
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
};
var combineURLs$1 = function combineURLs2(baseURL, relativeURL) {
return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
};
var isAbsoluteURL = isAbsoluteURL$1;
var combineURLs = combineURLs$1;
var buildFullPath$1 = function buildFullPath2(baseURL, requestedURL) {
if (baseURL && !isAbsoluteURL(requestedURL)) {
return combineURLs(baseURL, requestedURL);
}
return requestedURL;
};
var utils$6 = utils$c;
var ignoreDuplicateOf = [
"age",
"authorization",
"content-length",
"content-type",
"etag",
"expires",
"from",
"host",
"if-modified-since",
"if-unmodified-since",
"last-modified",
"location",
"max-forwards",
"proxy-authorization",
"referer",
"retry-after",
"user-agent"
];
var parseHeaders = function parseHeaders2(headers2) {
var parsed = {};
var key;
var val;
var i;
if (!headers2) {
return parsed;
}
utils$6.forEach(headers2.split("\n"), function parser(line) {
i = line.indexOf(":");
key = utils$6.trim(line.substr(0, i)).toLowerCase();
val = utils$6.trim(line.substr(i + 1));
if (key) {
if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
return;
}
if (key === "set-cookie") {
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
} else {
parsed[key] = parsed[key] ? parsed[key] + ", " + val : val;
}
}
});
return parsed;
};
var isURLSameOrigin;
var hasRequiredIsURLSameOrigin;
function requireIsURLSameOrigin() {
if (hasRequiredIsURLSameOrigin)
return isURLSameOrigin;
hasRequiredIsURLSameOrigin = 1;
var utils2 = utils$c;
isURLSameOrigin = utils2.isStandardBrowserEnv() ? (
// Standard browser envs have full support of the APIs needed to test
// whether the request URL is of the same origin as current location.
function standardBrowserEnv() {
var msie = /(msie|trident)/i.test(navigator.userAgent);
var urlParsingNode = document.createElement("a");
var originURL;
function resolveURL(url) {
var href = url;
if (msie) {
urlParsingNode.setAttribute("href", href);
href = urlParsingNode.href;
}
urlParsingNode.setAttribute("href", href);
return {
href: urlParsingNode.href,
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "",
host: urlParsingNode.host,
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "",
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "",
hostname: urlParsingNode.hostname,
port: urlParsingNode.port,
pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname
};
}
originURL = resolveURL(window.location.href);
return function isURLSameOrigin2(requestURL) {
var parsed = utils2.isString(requestURL) ? resolveURL(requestURL) : requestURL;
return parsed.protocol === originURL.protocol && parsed.host === originURL.host;
};
}()
) : (
// Non standard browser envs (web workers, react-native) lack needed support.
function nonStandardBrowserEnv() {
return function isURLSameOrigin2() {
return true;
};
}()
);
return isURLSameOrigin;
}
var CanceledError_1;
var hasRequiredCanceledError;
function requireCanceledError() {
if (hasRequiredCanceledError)
return CanceledError_1;
hasRequiredCanceledError = 1;
var AxiosError2 = AxiosError_1;
var utils2 = utils$c;
function CanceledError2(message) {
AxiosError2.call(this, message == null ? "canceled" : message, AxiosError2.ERR_CANCELED);
this.name = "CanceledError";
}
utils2.inherits(CanceledError2, AxiosError2, {
__CANCEL__: true
});
CanceledError_1 = CanceledError2;
return CanceledError_1;
}
var parseProtocol;
var hasRequiredParseProtocol;
function requireParseProtocol() {
if (hasRequiredParseProtocol)
return parseProtocol;
hasRequiredParseProtocol = 1;
parseProtocol = function parseProtocol2(url) {
var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
return match && match[1] || "";
};
return parseProtocol;
}
var xhr;
var hasRequiredXhr;
function requireXhr() {
if (hasRequiredXhr)
return xhr;
hasRequiredXhr = 1;
var utils2 = utils$c;
var settle$1 = settle;
var cookies2 = requireCookies();
var buildURL2 = buildURL$1;
var buildFullPath2 = buildFullPath$1;
var parseHeaders$1 = parseHeaders;
var isURLSameOrigin2 = requireIsURLSameOrigin();
var transitionalDefaults2 = transitional;
var AxiosError2 = AxiosError_1;
var CanceledError2 = requireCanceledError();
var parseProtocol2 = requireParseProtocol();
xhr = function xhrAdapter2(config) {
return new Promise(function dispatchXhrRequest(resolve, reject) {
var requestData = config.data;
var requestHeaders = config.headers;
var responseType = config.responseType;
var onCanceled;
function done() {
if (config.cancelToken) {
config.cancelToken.unsubscribe(onCanceled);
}
if (config.signal) {
config.signal.removeEventListener("abort", onCanceled);
}
}
if (utils2.isFormData(requestData) && utils2.isStandardBrowserEnv()) {
delete requestHeaders["Content-Type"];
}
var request = new XMLHttpRequest();
if (config.auth) {
var username = config.auth.username || "";
var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : "";
requestHeaders.Authorization = "Basic " + btoa(username + ":" + password);
}
var fullPath = buildFullPath2(config.baseURL, config.url);
request.open(config.method.toUpperCase(), buildURL2(fullPath, config.params, config.paramsSerializer), true);
request.timeout = config.timeout;
function onloadend() {
if (!request) {
return;
}
var responseHeaders = "getAllResponseHeaders" in request ? parseHeaders$1(request.getAllResponseHeaders()) : null;
var responseData = !responseType || responseType === "text" || responseType === "json" ? request.responseText : request.response;
var response = {
data: responseData,
status: request.status,
statusText: request.statusText,
headers: responseHeaders,
config,
request
};
settle$1(function _resolve(value) {
resolve(value);
done();
}, function _reject(err) {
reject(err);
done();
}, response);
request = null;
}
if ("onloadend" in request) {
request.onloadend = onloadend;
} else {
request.onreadystatechange = function handleLoad() {
if (!request || request.readyState !== 4) {
return;
}
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) {
return;
}
setTimeout(onloadend);
};
}
request.onabort = function handleAbort() {
if (!request) {
return;
}
reject(new AxiosError2("Request aborted", AxiosError2.ECONNABORTED, config, request));
request = null;
};
request.onerror = function handleError() {
reject(new AxiosError2("Network Error", AxiosError2.ERR_NETWORK, config, request, request));
request = null;
};
request.ontimeout = function handleTimeout() {
var timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded";
var transitional2 = config.transitional || transitionalDefaults2;
if (config.timeoutErrorMessage) {
timeoutErrorMessage = config.timeoutErrorMessage;
}
reject(new AxiosError2(
timeoutErrorMessage,
transitional2.clarifyTimeoutError ? AxiosError2.ETIMEDOUT : AxiosError2.ECONNABORTED,
config,
request
));
request = null;
};
if (utils2.isStandardBrowserEnv()) {
var xsrfValue = (config.withCredentials || isURLSameOrigin2(fullPath)) && config.xsrfCookieName ? cookies2.read(config.xsrfCookieName) : void 0;
if (xsrfValue) {
requestHeaders[config.xsrfHeaderName] = xsrfValue;
}
}
if ("setRequestHeader" in request) {
utils2.forEach(requestHeaders, function setRequestHeader(val, key) {
if (typeof requestData === "undefined" && key.toLowerCase() === "content-type") {
delete requestHeaders[key];
} else {
request.setRequestHeader(key, val);
}
});
}
if (!utils2.isUndefined(config.withCredentials)) {
request.withCredentials = !!config.withCredentials;
}
if (responseType && responseType !== "json") {
request.responseType = config.responseType;
}
if (typeof config.onDownloadProgress === "function") {
request.addEventListener("progress", config.onDownloadProgress);
}
if (typeof config.onUploadProgress === "function" && request.upload) {
request.upload.addEventListener("progress", config.onUploadProgress);
}
if (config.cancelToken || config.signal) {
onCanceled = function(cancel) {
if (!request) {
return;
}
reject(!cancel || cancel && cancel.type ? new CanceledError2() : cancel);
request.abort();
request = null;
};
config.cancelToken && config.cancelToken.subscribe(onCanceled);
if (config.signal) {
config.signal.aborted ? onCanceled() : config.signal.addEventListener("abort", onCanceled);
}
}
if (!requestData) {
requestData = null;
}
var protocol = parseProtocol2(fullPath);
if (protocol && ["http", "https", "file"].indexOf(protocol) === -1) {
reject(new AxiosError2("Unsupported protocol " + protocol + ":", AxiosError2.ERR_BAD_REQUEST, config));
return;
}
request.send(requestData);
});
};
return xhr;
}
var _null;
var hasRequired_null;
function require_null() {
if (hasRequired_null)
return _null;
hasRequired_null = 1;
_null = null;
return _null;
}
var utils$5 = utils$c;
var normalizeHeaderName = normalizeHeaderName$1;
var AxiosError$1 = AxiosError_1;
var transitionalDefaults = transitional;
var toFormData = toFormData_1;
var DEFAULT_CONTENT_TYPE = {
"Content-Type": "application/x-www-form-urlencoded"
};
function setContentTypeIfUnset(headers2, value) {
if (!utils$5.isUndefined(headers2) && utils$5.isUndefined(headers2["Content-Type"])) {
headers2["Content-Type"] = value;
}
}
function getDefaultAdapter() {
var adapter;
if (typeof XMLHttpRequest !== "undefined") {
adapter = requireXhr();
} else if (typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]") {
adapter = requireXhr();
}
return adapter;
}
function stringifySafely(rawValue, parser, encoder) {
if (utils$5.isString(rawValue)) {
try {
(parser || JSON.parse)(rawValue);
return utils$5.trim(rawValue);
} catch (e) {
if (e.name !== "SyntaxError") {
throw e;
}
}
}
return (encoder || JSON.stringify)(rawValue);
}
var defaults$3 = {
transitional: transitionalDefaults,
adapter: getDefaultAdapter(),
transformRequest: [function transformRequest(data2, headers2) {
normalizeHeaderName(headers2, "Accept");
normalizeHeaderName(headers2, "Content-Type");
if (utils$5.isFormData(data2) || utils$5.isArrayBuffer(data2) || utils$5.isBuffer(data2) || utils$5.isStream(data2) || utils$5.isFile(data2) || utils$5.isBlob(data2)) {
return data2;
}
if (utils$5.isArrayBufferView(data2)) {
return data2.buffer;
}
if (utils$5.isURLSearchParams(data2)) {
setContentTypeIfUnset(headers2, "application/x-www-form-urlencoded;charset=utf-8");
return data2.toString();
}
var isObjectPayload = utils$5.isObject(data2);
var contentType = headers2 && headers2["Content-Type"];
var isFileList2;
if ((isFileList2 = utils$5.isFileList(data2)) || isObjectPayload && contentType === "multipart/form-data") {
var _FormData = this.env && this.env.FormData;
return toFormData(isFileList2 ? { "files[]": data2 } : data2, _FormData && new _FormData());
} else if (isObjectPayload || contentType === "application/json") {
setContentTypeIfUnset(headers2, "application/json");
return stringifySafely(data2);
}
return data2;
}],
transformResponse: [function transformResponse(data2) {
var transitional2 = this.transitional || defaults$3.transitional;
var silentJSONParsing = transitional2 && transitional2.silentJSONParsing;
var forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing;
var strictJSONParsing = !silentJSONParsing && this.responseType === "json";
if (strictJSONParsing || forcedJSONParsing && utils$5.isString(data2) && data2.length) {
try {
return JSON.parse(data2);
} catch (e) {
if (strictJSONParsing) {
if (e.name === "SyntaxError") {
throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response);
}
throw e;
}
}
}
return data2;
}],
/**
* A timeout in milliseconds to abort a request. If set to 0 (default) a
* timeout is not created.
*/
timeout: 0,
xsrfCookieName: "XSRF-TOKEN",
xsrfHeaderName: "X-XSRF-TOKEN",
maxContentLength: -1,
maxBodyLength: -1,
env: {
FormData: require_null()
},
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
},
headers: {
common: {
"Accept": "application/json, text/plain, */*"
}
}
};
utils$5.forEach(["delete", "get", "head"], function forEachMethodNoData(method) {
defaults$3.headers[method] = {};
});
utils$5.forEach(["post", "put", "patch"], function forEachMethodWithData(method) {
defaults$3.headers[method] = utils$5.merge(DEFAULT_CONTENT_TYPE);
});
var defaults_1 = defaults$3;
var utils$4 = utils$c;
var defaults$2 = defaults_1;
var transformData$1 = function transformData2(data2, headers2, fns) {
var context = this || defaults$2;
utils$4.forEach(fns, function transform(fn) {
data2 = fn.call(context, data2, headers2);
});
return data2;
};
var isCancel$1;
var hasRequiredIsCancel;
function requireIsCancel() {
if (hasRequiredIsCancel)
return isCancel$1;
hasRequiredIsCancel = 1;
isCancel$1 = function isCancel2(value) {
return !!(value && value.__CANCEL__);
};
return isCancel$1;
}
var utils$3 = utils$c;
var transformData = transformData$1;
var isCancel = requireIsCancel();
var defaults$1 = defaults_1;
var CanceledError = requireCanceledError();
function throwIfCancellationRequested(config) {
if (config.cancelToken) {
config.cancelToken.throwIfRequested();
}
if (config.signal && config.signal.aborted) {
throw new CanceledError();
}
}
var dispatchRequest$1 = function dispatchRequest2(config) {
throwIfCancellationRequested(config);
config.headers = config.headers || {};
config.data = transformData.call(
config,
config.data,
config.headers,
config.transformRequest
);
config.headers = utils$3.merge(
config.headers.common || {},
config.headers[config.method] || {},
config.headers
);
utils$3.forEach(
["delete", "get", "head", "post", "put", "patch", "common"],
function cleanHeaderConfig(method) {
delete config.headers[method];
}
);
var adapter = config.adapter || defaults$1.adapter;
return adapter(config).then(function onAdapterResolution(response) {
throwIfCancellationRequested(config);
response.data = transformData.call(
config,
response.data,
response.headers,
config.transformResponse
);
return response;
}, function onAdapterRejection(reason) {
if (!isCancel(reason)) {
throwIfCancellationRequested(config);
if (reason && reason.response) {
reason.response.data = transformData.call(
config,
reason.response.data,
reason.response.headers,
config.transformResponse
);
}
}
return Promise.reject(reason);
});
};
var utils$2 = utils$c;
var mergeConfig$2 = function mergeConfig2(config1, config2) {
config2 = config2 || {};
var config = {};
function getMergedValue(target, source) {
if (utils$2.isPlainObject(target) && utils$2.isPlainObject(source)) {
return utils$2.merge(target, source);
} else if (utils$2.isPlainObject(source)) {
return utils$2.merge({}, source);
} else if (utils$2.isArray(source)) {
return source.slice();
}
return source;
}
function mergeDeepProperties(prop) {
if (!utils$2.isUndefined(config2[prop])) {
return getMergedValue(config1[prop], config2[prop]);
} else if (!utils$2.isUndefined(config1[prop])) {
return getMergedValue(void 0, config1[prop]);
}
}
function valueFromConfig2(prop) {
if (!utils$2.isUndefined(config2[prop])) {
return getMergedValue(void 0, config2[prop]);
}
}
function defaultToConfig2(prop) {
if (!utils$2.isUndefined(config2[prop])) {
return getMergedValue(void 0, config2[prop]);
} else if (!utils$2.isUndefined(config1[prop])) {
return getMergedValue(void 0, config1[prop]);
}
}
function mergeDirectKeys(prop) {
if (prop in config2) {
return getMergedValue(config1[prop], config2[prop]);
} else if (prop in config1) {
return getMergedValue(void 0, config1[prop]);
}
}
var mergeMap = {
"url": valueFromConfig2,
"method": valueFromConfig2,
"data": valueFromConfig2,
"baseURL": defaultToConfig2,
"transformRequest": defaultToConfig2,
"transformResponse": defaultToConfig2,
"paramsSerializer": defaultToConfig2,
"timeout": defaultToConfig2,
"timeoutMessage": defaultToConfig2,
"withCredentials": defaultToConfig2,
"adapter": defaultToConfig2,
"responseType": defaultToConfig2,
"xsrfCookieName": defaultToConfig2,
"xsrfHeaderName": defaultToConfig2,
"onUploadProgress": defaultToConfig2,
"onDownloadProgress": defaultToConfig2,
"decompress": defaultToConfig2,
"maxContentLength": defaultToConfig2,
"maxBodyLength": defaultToConfig2,
"beforeRedirect": defaultToConfig2,
"transport": defaultToConfig2,
"httpAgent": defaultToConfig2,
"httpsAgent": defaultToConfig2,
"cancelToken": defaultToConfig2,
"socketPath": defaultToConfig2,
"responseEncoding": defaultToConfig2,
"validateStatus": mergeDirectKeys
};
utils$2.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
var merge2 = mergeMap[prop] || mergeDeepProperties;
var configValue = merge2(prop);
utils$2.isUndefined(configValue) && merge2 !== mergeDirectKeys || (config[prop] = configValue);
});
return config;
};
var data;
var hasRequiredData;
function requireData() {
if (hasRequiredData)
return data;
hasRequiredData = 1;
data = {
"version": "0.27.2"
};
return data;
}
var VERSION = requireData().version;
var AxiosError = AxiosError_1;
var validators$1 = {};
["object", "boolean", "number", "function", "string", "symbol"].forEach(function(type, i) {
validators$1[type] = function validator2(thing) {
return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type;
};
});
var deprecatedWarnings = {};
validators$1.transitional = function transitional2(validator2, version, message) {
function formatMessage(opt, desc) {
return "[Axios v" + VERSION + "] Transitional option '" + opt + "'" + desc + (message ? ". " + message : "");
}
return function(value, opt, opts) {
if (validator2 === false) {
throw new AxiosError(
formatMessage(opt, " has been removed" + (version ? " in " + version : "")),
AxiosError.ERR_DEPRECATED
);
}
if (version && !deprecatedWarnings[opt]) {
deprecatedWarnings[opt] = true;
console.warn(
formatMessage(
opt,
" has been deprecated since v" + version + " and will be removed in the near future"
)
);
}
return validator2 ? validator2(value, opt, opts) : true;
};
};
function assertOptions(options, schema, allowUnknown) {
if (typeof options !== "object") {
throw new AxiosError("options must be an object", AxiosError.ERR_BAD_OPTION_VALUE);
}
var keys = Object.keys(options);
var i = keys.length;
while (i-- > 0) {
var opt = keys[i];
var validator2 = schema[opt];
if (validator2) {
var value = options[opt];
var result = value === void 0 || validator2(value, opt, options);
if (result !== true) {
throw new AxiosError("option " + opt + " must be " + result, AxiosError.ERR_BAD_OPTION_VALUE);
}
continue;
}
if (allowUnknown !== true) {
throw new AxiosError("Unknown option " + opt, AxiosError.ERR_BAD_OPTION);
}
}
}
var validator$1 = {
assertOptions,
validators: validators$1
};
var utils$1 = utils$c;
var buildURL = buildURL$1;
var InterceptorManager = InterceptorManager_1;
var dispatchRequest = dispatchRequest$1;
var mergeConfig$1 = mergeConfig$2;
var buildFullPath = buildFullPath$1;
var validator = validator$1;
var validators = validator.validators;
function Axios$1(instanceConfig) {
this.defaults = instanceConfig;
this.interceptors = {
request: new InterceptorManager(),
response: new InterceptorManager()
};
}
Axios$1.prototype.request = function request(configOrUrl, config) {
if (typeof configOrUrl === "string") {
config = config || {};
config.url = configOrUrl;
} else {
config = configOrUrl || {};
}
config = mergeConfig$1(this.defaults, config);
if (config.method) {
config.method = config.method.toLowerCase();
} else if (this.defaults.method) {
config.method = this.defaults.method.toLowerCase();
} else {
config.method = "get";
}
var transitional2 = config.transitional;
if (transitional2 !== void 0) {
validator.assertOptions(transitional2, {
silentJSONParsing: validators.transitional(validators.boolean),
forcedJSONParsing: validators.transitional(validators.boolean),
clarifyTimeoutError: validators.transitional(validators.boolean)
}, false);
}
var requestInterceptorChain = [];
var synchronousRequestInterceptors = true;
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config) === false) {
return;
}
synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
});
var responseInterceptorChain = [];
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
});
var promise;
if (!synchronousRequestInterceptors) {
var chain = [dispatchRequest, void 0];
Array.prototype.unshift.apply(chain, requestInterceptorChain);
chain = chain.concat(responseInterceptorChain);
promise = Promise.resolve(config);
while (chain.length) {
promise = promise.then(chain.shift(), chain.shift());
}
return promise;
}
var newConfig = config;
while (requestInterceptorChain.length) {
var onFulfilled = requestInterceptorChain.shift();
var onRejected = requestInterceptorChain.shift();
try {
newConfig = onFulfilled(newConfig);
} catch (error) {
onRejected(error);
break;
}
}
try {
promise = dispatchRequest(newConfig);
} catch (error) {
return Promise.reject(error);
}
while (responseInterceptorChain.length) {
promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
}
return promise;
};
Axios$1.prototype.getUri = function getUri(config) {
config = mergeConfig$1(this.defaults, config);
var fullPath = buildFullPath(config.baseURL, config.url);
return buildURL(fullPath, config.params, config.paramsSerializer);
};
utils$1.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) {
Axios$1.prototype[method] = function(url, config) {
return this.request(mergeConfig$1(config || {}, {
method,
url,
data: (config || {}).data
}));
};
});
utils$1.forEach(["post", "put", "patch"], function forEachMethodWithData(method) {
function generateHTTPMethod(isForm) {
return function httpMethod(url, data2, config) {
return this.request(mergeConfig$1(config || {}, {
method,
headers: isForm ? {
"Content-Type": "multipart/form-data"
} : {},
url,
data: data2
}));
};
}
Axios$1.prototype[method] = generateHTTPMethod();
Axios$1.prototype[method + "Form"] = generateHTTPMethod(true);
});
var Axios_1 = Axios$1;
var CancelToken_1;
var hasRequiredCancelToken;
function requireCancelToken() {
if (hasRequiredCancelToken)
return CancelToken_1;
hasRequiredCancelToken = 1;
var CanceledError2 = requireCanceledError();
function CancelToken(executor) {
if (typeof executor !== "function") {
throw new TypeError("executor must be a function.");
}
var resolvePromise;
this.promise = new Promise(function promiseExecutor(resolve) {
resolvePromise = resolve;
});
var token = this;
this.promise.then(function(cancel) {
if (!token._listeners)
return;
var i;
var l = token._listeners.length;
for (i = 0; i < l; i++) {
token._listeners[i](cancel);
}
token._listeners = null;
});
this.promise.then = function(onfulfilled) {
var _resolve;
var promise = new Promise(function(resolve) {
token.subscribe(resolve);
_resolve = resolve;
}).then(onfulfilled);
promise.cancel = function reject() {
token.unsubscribe(_resolve);
};
return promise;
};
executor(function cancel(message) {
if (token.reason) {
return;
}
token.reason = new CanceledError2(message);
resolvePromise(token.reason);
});
}
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
if (this.reason) {
throw this.reason;
}
};
CancelToken.prototype.subscribe = function subscribe(listener) {
if (this.reason) {
listener(this.reason);
return;
}
if (this._listeners) {
this._listeners.push(listener);
} else {
this._listeners = [listener];
}
};
CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
if (!this._listeners) {
return;
}
var index = this._listeners.indexOf(listener);
if (index !== -1) {
this._listeners.splice(index, 1);
}
};
CancelToken.source = function source() {
var cancel;
var token = new CancelToken(function executor(c) {
cancel = c;
});
return {
token,
cancel
};
};
CancelToken_1 = CancelToken;
return CancelToken_1;
}
var spread;
var hasRequiredSpread;
function requireSpread() {
if (hasRequiredSpread)
return spread;
hasRequiredSpread = 1;
spread = function spread2(callback) {
return function wrap(arr) {
return callback.apply(null, arr);
};
};
return spread;
}
var isAxiosError;
var hasRequiredIsAxiosError;
function requireIsAxiosError() {
if (hasRequiredIsAxiosError)
return isAxiosError;
hasRequiredIsAxiosError = 1;
var utils2 = utils$c;
isAxiosError = function isAxiosError2(payload) {
return utils2.isObject(payload) && payload.isAxiosError === true;
};
return isAxiosError;
}
var utils = utils$c;
var bind = bind$2;
var Axios = Axios_1;
var mergeConfig = mergeConfig$2;
var defaults = defaults_1;
function createInstance(defaultConfig) {
var context = new Axios(defaultConfig);
var instance = bind(Axios.prototype.request, context);
utils.extend(instance, Axios.prototype, context);
utils.extend(instance, context);
instance.create = function create(instanceConfig) {
return createInstance(mergeConfig(defaultConfig, instanceConfig));
};
return instance;
}
var axios$1 = createInstance(defaults);
axios$1.Axios = Axios;
axios$1.CanceledError = requireCanceledError();
axios$1.CancelToken = requireCancelToken();
axios$1.isCancel = requireIsCancel();
axios$1.VERSION = requireData().version;
axios$1.toFormData = toFormData_1;
axios$1.AxiosError = AxiosError_1;
axios$1.Cancel = axios$1.CanceledError;
axios$1.all = function all(promises) {
return Promise.all(promises);
};
axios$1.spread = requireSpread();
axios$1.isAxiosError = requireIsAxiosError();
axios$2.exports = axios$1;
axiosExports.default = axios$1;
(function(module) {
module.exports = axiosExports;
})(axios$3);
const axios = /* @__PURE__ */ getDefaultExportFromCjs(axiosExports$1);
function xhrAdapter(config) {
return new Promise((resolve, reject) => {
let requestData = config.data;
const requestHeaders = config.headers ?? {};
if (utils$c.isFormData(requestData)) {
delete requestHeaders["Content-Type"];
}
if (config.auth) {
const username = config.auth.username || "";
const password = config.auth.password || "";
requestHeaders.Authorization = "Basic " + Buffer.from(username + ":" + password).toString("base64");
}
const onerror = function handleError() {
reject(new axiosExports$1.AxiosError("Network Error", axiosExports$1.AxiosError.ERR_NETWORK, config));
};
const ontimeout = function handleTimeout() {
reject(new axiosExports$1.AxiosError("timeout of " + config.timeout + "ms exceeded", axiosExports$1.AxiosError.ECONNABORTED, config));
};
utils$c.forEach(requestHeaders, function setRequestHeader(val, key) {
if (typeof requestData === "undefined" && key.toLowerCase() === "content-type") {
delete requestHeaders[key];
}
});
if (requestData === void 0) {
requestData = null;
}
const onload = function handleLoad(resp) {
const responseHeaders = "responseHeaders" in resp ? parseHeaders(resp.responseHeaders) : {};
const responseData = !config.responseType || config.responseType === "text" ? resp.responseText : resp.response;
const response = {
data: responseData,
status: resp.status,
statusText: resp.statusText,
headers: responseHeaders,
config,
request: {
// can't got real XMLHttpRequest object, only some property is available
responseURL: resp.finalUrl,
status: resp.status,
statusText: resp.statusText,
responseXML: null
}
};
settle(resolve, reject, response);
};
if (config.cancelToken) {
config.cancelToken.promise.then(function onCanceled(cancel) {
reject(cancel);
});
}
let responseType;
if (config.responseType && config.responseType !== "json") {
responseType = config.responseType;
}
const method = config.method.toUpperCase();
if (method === "UNLINK" || method === "PURGE" || method === "LINK") {
reject(new axiosExports$1.AxiosError(`${method} is not a supported method by GM.xmlHttpRequest`));
} else {
GM.xmlHttpRequest({
method,
url: buildURL$1(buildFullPath$1(config.baseURL, config.url), config.params, config.paramsSerializer),
headers: Object.fromEntries(Object.entries(requestHeaders).map(([key, val]) => [key, val.toString()])),
responseType,
data: requestData,
timeout: config.timeout,
ontimeout,
onload,
onerror
});
}
});
}
const BBS_URL = "https://webstatic.mihoyo.com/ys/event/e20210928review/index.html";
const ROLE_URL = "https://api-takumi.mihoyo.com/binding/api/getUserGameRolesByCookie?game_biz=hk4e_cn";
const CHARACTERS_URL = "https://api-takumi.mihoyo.com/event/e20200928calculate/v1/sync/avatar/list";
const CHARACTERS_DETAIL_URL = "https://api-takumi.mihoyo.com/event/e20200928calculate/v1/sync/avatar/detail";
const BBS_URL_GLOBAL = "https://act.hoyoverse.com/ys/event/e20230205-firework-xm7wly/index.html?game_biz=hk4e_global";
const ROLE_URL_GLOBAL = "https://api-os-takumi.hoyoverse.com/binding/api/getUserGameRolesByLtoken?game_biz=hk4e_global";
const CHARACTERS_URL_GLOBAL = "https://sg-public-api.hoyoverse.com/event/calculateos/sync/avatar/list";
const CHARACTERS_DETAIL_URL_GLOBAL = "https://sg-public-api.hoyoverse.com/event/calculateos/sync/avatar/detail";
axios.defaults.adapter = xhrAdapter;
axios.defaults.withCredentials = true;
const headers = {
Referer: "https://webstatic.mihoyo.com/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
};
const headersGolbal = {
Referer: "https://act.hoyoverse.com/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
};
const to = (promise) => promise.then((data2) => {
return [null, data2];
}).catch((err) => [err]);
const isGlobal = () => {
return "hk4e_global" == localStorage.getItem("gameBiz");
};
const requestPageSize = 50;
const getAccount = async () => {
const [err, res] = await to(axios.get(isGlobal() ? ROLE_URL_GLOBAL : ROLE_URL, {
headers: isGlobal() ? headersGolbal : headers
}));
if (!err) {
const { status, data: resData } = await res;
if (status == 200) {
const { retcode, data: data2 } = resData;
if (retcode === 0) {
const { list: accountList } = await data2;
return accountList;
}
}
}
alert("请确认已登录活动页面且绑定原神账户!");
GM_openInTab(isGlobal() ? BBS_URL_GLOBAL : BBS_URL);
throw err ? err : new Error("账户信息获取失败");
};
const getCharacters = async (uid, region, page = 1) => {
let url = isGlobal() ? CHARACTERS_URL_GLOBAL : CHARACTERS_URL;
const [err, res] = await to(axios.post(url, JSON.stringify({
"element_attr_ids": [],
"weapon_cat_ids": [],
"page": page,
"size": requestPageSize,
"uid": uid,
"region": region,
"lang": "zh-cn"
}), {
headers: isGlobal() ? headersGolbal : headers
}));
if (!err) {
const { status, data: resData } = await res;
console.log(res);
if (status == 200) {
const { retcode, data: data2 } = resData;
if (retcode === 0) {
const { list: characterList } = await data2;
return characterList;
}
}
}
alert("请确认已登录活动页面且绑定原神账户!");
GM_openInTab(isGlobal() ? BBS_URL_GLOBAL : BBS_URL);
throw err ? err : new Error("角色列表获取失败");
};
const getCharacterDetail = async (character, uid, region) => {
const { id } = character;
const params = `?avatar_id=${id}&uid=${uid}®ion=${region}&lang=zh-cn`;
let URL = isGlobal() ? CHARACTERS_DETAIL_URL_GLOBAL : CHARACTERS_DETAIL_URL;
const [err, res] = await to(axios.get(URL + params, {
headers: isGlobal() ? headersGolbal : headers
}));
if (!err) {
const { status, data: resData } = await res;
if (status == 200) {
const { retcode, data: data2 } = resData;
if (retcode === 0) {
const characterData = await data2;
return { character, ...characterData };
}
}
} else {
console.error(err);
}
};
const getDetailList = async (game_uid, region) => {
let maxPageSize = Math.ceil(charactersNum / requestPageSize);
let idxs = Array.from(new Array(maxPageSize).keys());
const characters2 = [];
for await (let i of idxs) {
characters2.push.apply(characters2, await getCharacters(game_uid, region, i + 1));
}
const details = characters2.map((c) => getCharacterDetail(c, game_uid, region));
const detailList = [];
for await (let d of details) {
if (!!d) {
detailList.push(d);
}
}
return detailList;
};
function ExDialog() {
const [gameBizSwitchEnabled, setGameBizSwitchEnabled] = React2.useState(() => isGlobal());
const onChangeGameBiz = (e) => {
setGameBizSwitchEnabled(e);
let gameBizNew = !e ? "hk4e_cn" : "hk4e_global";
console.log(gameBizNew);
localStorage.setItem("gameBiz", gameBizNew);
};
const [accountList, setAccountList] = React2.useState([]);
const [currentAccount, setCurrentAccount] = React2.useState();
const handleRoleSelectChange = (idx) => {
setCurrentAccount(accountList[idx]);
};
const accountShow = (idx) => {
if (!accountList || !accountList[idx]) {
return "";
}
const role = accountList[idx];
return `${role.game_uid}(${role.region})`;
};
const getAccountList = () => {
getAccount().then((res) => {
const roles = res;
setAccountList(roles);
roles.length > 0 && setCurrentAccount(roles[0]);
}).catch((err) => {
console.error(err);
console.error("账户信息获取失败");
alert("账户信息获取失败");
});
};
const syncCharacterInfo = () => {
if (!currentAccount) {
console.error("账户信息获取失败");
alert("账户信息获取失败");
return;
}
console.log("开始同步角色信息");
const {
game_uid,
region
} = currentAccount;
getDetailList(game_uid, region).then((res) => {
console.group("返回数据");
console.groupCollapsed("角色");
console.table(res.map((a) => a.character));
console.groupEnd();
console.groupCollapsed("武器");
console.table(res.map((a) => a.weapon));
console.groupEnd();
console.groupCollapsed("角色天赋");
res.forEach((c) => {
const name = c.character.name;
console.groupCollapsed(name);
console.table(c.skill_list);
console.groupEnd();
});
console.groupEnd();
console.groupEnd();
res.forEach((v) => {
addCharacter(v);
});
console.log(`米游社数据无法判断是否突破,请自行比较整数等级是否已突破`);
console.log(`角色信息同步完毕`);
alert("角色信息同步完毕");
location.reload();
});
};
function classNames(...classes) {
return classes.filter(Boolean).join(" ");
}
return /* @__PURE__ */ jsxs("div", {
className: "fixed top-10 inset-x-[20%] mx-auto min-w-[50%] min-h-min rounded-md bg-slate-700 opacity-75 text-white text-center z-[1200]",
children: [/* @__PURE__ */ jsx("h1", {
className: "text-3xl font-bold underline pt-4",
children: "SeelieEX"
}), /* @__PURE__ */ jsx("h2", {
className: "text-xl font-bold underline pt-4",
children: "本脚本与原网页样式冲突,不使用时可以临时禁用脚本"
}), /* @__PURE__ */ jsx("div", {
className: "w-full p-4",
children: /* @__PURE__ */ jsxs("div", {
className: "w-full max-w-md p-2 mx-auto bg-purple rounded-2xl",
children: [/* @__PURE__ */ jsx(Ye, {
children: ({
open
}) => /* @__PURE__ */ jsxs(Fragment, {
children: [/* @__PURE__ */ jsxs(Ye.Button, {
className: "flex justify-between w-full px-4 py-2 text-sm font-medium text-left text-slate-900 bg-purple-100 rounded-lg hover:bg-purple-200 focus:outline-none focus-visible:ring focus-visible:ring-purple-500 focus-visible:ring-opacity-75",
children: [/* @__PURE__ */ jsx("span", {
children: "角色信息同步"
}), /* @__PURE__ */ jsx(ChevronUpIcon$1, {
className: `${open ? "transform rotate-180" : ""} w-5 h-5 text-purple-500`
})]
}), /* @__PURE__ */ jsxs(Ye.Panel, {
className: "px-4 pt-4 pb-2 text-sm text-white-500",
children: [/* @__PURE__ */ jsxs("div", {
className: "flex pt-4",
children: [/* @__PURE__ */ jsx("div", {
className: "w-1/2 text-white-900",
children: "区服选择:"
}), /* @__PURE__ */ jsx(ToggleSwitch, {
className: "w-1/2",
checked: gameBizSwitchEnabled,
onChange: onChangeGameBiz,
labelLeft: "国服",
labelRight: "国际服"
})]
}), /* @__PURE__ */ jsx("div", {
className: "flex pt-2",
children: /* @__PURE__ */ jsx("div", {
className: "w-full",
children: /* @__PURE__ */ jsx("button", {
className: "text-white bg-blue-500 px-4 py-2",
onClick: getAccountList,
children: "获取账户信息"
})
})
}), /* @__PURE__ */ jsxs("div", {
className: "flex pt-4",
children: [/* @__PURE__ */ jsx("div", {
className: "w-1/2 text-white-900",
children: "账户选择:"
}), /* @__PURE__ */ jsx("div", {
className: "w-1/2",
children: /* @__PURE__ */ jsx(ListboxSelect, {
selected: currentAccount ? accountList.indexOf(currentAccount) : 0,
setSelected: handleRoleSelectChange,
optionList: accountList.map((_2, idx) => idx),
show: accountShow
})
})]
}), /* @__PURE__ */ jsx("div", {
className: "flex pt-2",
children: /* @__PURE__ */ jsx("div", {
className: "w-full",
children: /* @__PURE__ */ jsx("button", {
className: "text-white bg-blue-500 px-4 py-2",
onClick: syncCharacterInfo,
children: "同步mihoyo角色信息"
})
})
})]
})]
})
}), /* @__PURE__ */ jsx(Ye, {
as: "div",
className: "mt-2",
children: ({
open
}) => /* @__PURE__ */ jsxs(Fragment, {
children: [/* @__PURE__ */ jsxs(Ye.Button, {
className: "flex justify-between w-full px-4 py-2 text-sm font-medium text-left text-slate-900 bg-purple-100 rounded-lg hover:bg-purple-200 focus:outline-none focus-visible:ring focus-visible:ring-purple-500 focus-visible:ring-opacity-75",
children: [/* @__PURE__ */ jsx("span", {
children: "规划批量操作"
}), /* @__PURE__ */ jsx(ChevronUpIcon$1, {
className: `${open ? "transform rotate-180" : ""} w-5 h-5 text-purple-500`
})]
}), /* @__PURE__ */ jsx(Ye.Panel, {
className: "px-4 pt-4 pb-2 text-sm text-white-500",
children: /* @__PURE__ */ jsxs(De.Group, {
children: [/* @__PURE__ */ jsx(De.List, {
className: "flex p-1 space-x-1 bg-blue-900/20 rounded-xl",
children: ["角色目标等级", "天赋目标等级", "武器目标等级"].map((category) => /* @__PURE__ */ jsx(De, {
className: ({
selected
}) => classNames("w-full py-2.5 text-sm leading-5 font-medium text-blue-700 rounded-lg", "focus:outline-none focus:ring-2 ring-offset-2 ring-offset-blue-400 ring-white ring-opacity-60", selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-white"),
children: category
}, category))
}), /* @__PURE__ */ jsxs(De.Panels, {
children: [/* @__PURE__ */ jsx(De.Panel, {
children: /* @__PURE__ */ jsx(CharacterGoalTab, {
showText: "角色",
batchUpdateCharacter
})
}), /* @__PURE__ */ jsx(De.Panel, {
children: /* @__PURE__ */ jsx(TalentGoalTab, {})
}), /* @__PURE__ */ jsx(De.Panel, {
children: /* @__PURE__ */ jsx(CharacterGoalTab, {
showText: "武器",
batchUpdateCharacter: batchUpdateWeapon
})
})]
})]
})
})]
})
})]
})
})]
});
}
function App() {
const [showExDialog, setShowExDialog] = React2.useState(() => false);
React2.useEffect(() => {
GM_registerMenuCommand("打开SeelieEx", () => setShowExDialog(true));
GM_registerMenuCommand("关闭SeelieEx", () => setShowExDialog(false));
GM_registerMenuCommand("原神祈愿历史一览", () => GM_openInTab("https://genshin-gacha-banners.52v6.com"));
GM_registerMenuCommand("意见反馈", () => GM_openInTab("https://github.com/KeyPJ/seelieEx/issues"));
});
return /* @__PURE__ */ jsx("div", {
className: "App",
style: {
display: showExDialog ? "" : "none"
},
children: /* @__PURE__ */ jsx(ExDialog, {})
});
}
let seelieEx = document.createElement("div");
seelieEx.id = "seelieEx";
seelieEx.className = "flex";
(_b = (_a = document.getElementById("app")) == null ? void 0 : _a.parentElement) == null ? void 0 : _b.append(seelieEx);
ReactDOM2.render(/* @__PURE__ */ jsx(React2.StrictMode, {
children: /* @__PURE__ */ jsx(App, {})
}), document.getElementById("seelieEx"));
})(React, ReactDOM);