",(0,r.escapeHTML)((0,o.__)("All Content Helper AI functionality is disabled because an API Secret has not been set.","wp-parsely")))),[3,5];case 4:return n&&(200!==n.api.code?(u=(0,o.sprintf)('%2$s',"https://wpvip.com/content-helper/#content-helper-form",(0,o.__)("Request access here","wp-parsely")),d=(0,o.sprintf)((0,r.escapeHTML)((0,o.__)("All Content Helper AI functionality is disabled for this website. %s.","wp-parsely")),u),e=(0,o.sprintf)("
%s
",d)):200===n.api.code&&200!==n.traffic_boost.code&&(p=(0,o.sprintf)('%2$s',"mailto:support@parsely.com","support@parsely.com"),d=(0,o.sprintf)((0,r.escapeHTML)((0,o.__)("Traffic Boost functionality is disabled for this website. To enable it, contact %s.","wp-parsely")),p),e=(0,o.sprintf)("
%s
",d))),e&&((f=document.createElement("div")).className="content-helper-message notice notice-error",f.innerHTML=e,(h=document.querySelector(".content-helper-section"))&&h.insertBefore(f,h.firstChild)),[7];case 5:return[2]}}))},new((a=void 0)||(a=Promise))((function(t,r){function o(e){try{l(s.next(e))}catch(e){r(e)}}function i(e){try{l(s.throw(e))}catch(e){r(e)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(e){e(n)}))).then(o,i)}l((s=s.apply(e,n||[])).next())}))}(),function(){var e=document.querySelector("input#content_helper_ai_features_enabled"),t=document.querySelectorAll("input#content_helper_smart_linking_enabled, input#content_helper_title_suggestions_enabled, input#content_helper_excerpt_suggestions_enabled, input#content_helper_traffic_boost_enabled"),n=document.querySelectorAll("div.content-helper-section fieldset");function r(){e&&(e.checked?n.forEach((function(e){s(e,!1),t.forEach((function(e){o(e)}))})):(n.forEach((function(t){t.querySelector("#".concat(e.id))||s(t)})),document.querySelectorAll("label.prevent-disable").forEach((function(e){a(e,!1)}))))}function o(e){var t,n,r=null===(n=null===(t=e.closest("fieldset"))||void 0===t?void 0:t.nextSibling)||void 0===n?void 0:n.nextSibling;e.checked?s([e,r],!1):(s(r),a(e.parentElement))}function a(e,t){void 0===t&&(t=!0),t?e.classList.add("prevent-disable"):e.classList.remove("prevent-disable")}function s(e,t){void 0===t&&(t=!0),Array.isArray(e)||(e=[e]),e.forEach((function(e){t?e.setAttribute("disabled","disabled"):e.removeAttribute("disabled")}))}(function(){var e;null===(e=document.querySelector('.wp-admin form[name="parsely"]'))||void 0===e||e.addEventListener("submit",(function(){var e=".wp-admin .content-helper-section fieldset";document.querySelectorAll("".concat(e,"[disabled]")).forEach((function(t){var n,r;null===(r=null===(n=t.parentElement)||void 0===n?void 0:n.parentElement)||void 0===r||r.classList.add("disabled-before-posting"),t.querySelectorAll("".concat(e,' label input[type="checkbox"]')).forEach((function(e){e.classList.add("disabled")})),t.removeAttribute("disabled")}))}))})(),r(),null==e||e.addEventListener("change",(function(){r()})),t.forEach((function(e){e.addEventListener("change",(function(){o(e)}))}))}(),g(),window.addEventListener("hashchange",g),null===(e=document.querySelector(".media-single-image button.browse"))||void 0===e||e.addEventListener("click",_)}))}()}();
\ No newline at end of file
+!function(){"use strict";var e={20:function(e,t,n){var r=n(609),o=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,n){var r,l={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)a.call(t,r)&&!i.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===l[r]&&(l[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:l,_owner:s.current}}},848:function(e,t,n){e.exports=n(20)},609:function(e){e.exports=window.React}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e,t,r=window.wp.escapeHtml,o=window.wp.i18n,a=n(848),s=window.wp.data,i=function(e){void 0===e&&(e=null);var t="";(null==e?void 0:e.children)&&(t=e.children);var n="content-helper-error-message";return(null==e?void 0:e.className)&&(n+=" "+e.className),(0,a.jsx)("div",{className:n,"data-testid":null==e?void 0:e.testId,dangerouslySetInnerHTML:{__html:t}})},l=(e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)},function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function __(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(__.prototype=n.prototype,new __)});!function(e){e.AccessToFeatureDisabled="ch_access_to_feature_disabled",e.CannotFormulateApiQuery="ch_cannot_formulate_api_query",e.FetchError="fetch_error",e.HttpRequestFailed="http_request_failed",e.ParselyAborted="ch_parsely_aborted",e[e.ParselyApiForbidden=403]="ParselyApiForbidden",e.ParselyApiResponseContainsError="ch_response_contains_error",e.ParselyApiReturnedNoData="ch_parsely_api_returned_no_data",e.ParselyApiReturnedTooManyResults="ch_parsely_api_returned_too_many_results",e.PluginCredentialsNotSetMessageDetected="parsely_credentials_not_set_message_detected",e.PluginSettingsApiSecretNotSet="parsely_api_secret_not_set",e.PluginSettingsSiteIdNotSet="parsely_site_id_not_set",e.PostIsNotPublished="ch_post_not_published",e.UnknownError="ch_unknown_error",e.ParselySuggestionsApiAuthUnavailable="AUTH_UNAVAILABLE",e.ParselySuggestionsApiNoAuthentication="NO_AUTHENTICATION",e.ParselySuggestionsApiNoAuthorization="NO_AUTHORIZATION",e.ParselySuggestionsApiNoData="NO_DATA",e.ParselySuggestionsApiOpenAiError="OPENAI_ERROR",e.ParselySuggestionsApiOpenAiSchema="OPENAI_SCHEMA",e.ParselySuggestionsApiOpenAiUnavailable="OPENAI_UNAVAILABLE",e.ParselySuggestionsApiSchemaError="SCHEMA_ERROR",e.TrafficBoostInboundLinkNotFound="tb_inbound_link_not_found"}(t||(t={}));var c=function(e){function n(r,a,s){void 0===s&&(s=(0,o.__)("Error:","wp-parsely"));var i=this;r.startsWith(s)&&(s=""),(i=e.call(this,s.length>0?"".concat(s," ").concat(r):r)||this).hint=null,i.name=i.constructor.name,i.code=a;var l=[t.AccessToFeatureDisabled,t.ParselyAborted,t.ParselyApiForbidden,t.ParselyApiResponseContainsError,t.ParselyApiReturnedNoData,t.ParselyApiReturnedTooManyResults,t.PluginCredentialsNotSetMessageDetected,t.PluginSettingsApiSecretNotSet,t.PluginSettingsSiteIdNotSet,t.PostIsNotPublished,t.UnknownError,t.ParselySuggestionsApiAuthUnavailable,t.ParselySuggestionsApiNoAuthentication,t.ParselySuggestionsApiNoAuthorization,t.ParselySuggestionsApiNoData,t.ParselySuggestionsApiSchemaError];return i.retryFetch=!l.includes(i.code),Object.setPrototypeOf(i,n.prototype),i.code===t.AccessToFeatureDisabled?i.message=(0,o.__)("Access to this feature is disabled by the site's administration.","wp-parsely"):i.code===t.ParselySuggestionsApiNoAuthorization?i.message=(0,o.__)('This AI-powered feature is opt-in. To gain access, please submit a request here.',"wp-parsely"):i.code===t.ParselySuggestionsApiOpenAiError||i.code===t.ParselySuggestionsApiOpenAiUnavailable?i.message=(0,o.__)("The Parse.ly API returned an internal server error. Please retry with a different input, or try again later.","wp-parsely"):i.code===t.HttpRequestFailed&&i.message.includes("cURL error 28")?i.message=(0,o.__)("The Parse.ly API did not respond in a timely manner. Please try again later.","wp-parsely"):i.code===t.ParselySuggestionsApiSchemaError?i.message=(0,o.__)("The Parse.ly API returned a validation error. Please try again with different parameters.","wp-parsely"):i.code===t.ParselySuggestionsApiNoData?i.message=(0,o.__)("The Parse.ly API couldn't find any relevant data to fulfill the request. Please retry with a different input.","wp-parsely"):i.code===t.ParselySuggestionsApiOpenAiSchema?i.message=(0,o.__)("The Parse.ly API returned an incorrect response. Please try again later.","wp-parsely"):i.code===t.ParselySuggestionsApiAuthUnavailable&&(i.message=(0,o.__)("The Parse.ly API is currently unavailable. Please try again later.","wp-parsely")),i}return l(n,e),n.prototype.Message=function(e){return void 0===e&&(e=null),[t.PluginCredentialsNotSetMessageDetected,t.PluginSettingsSiteIdNotSet,t.PluginSettingsApiSecretNotSet].includes(this.code)?function(e){var t;return void 0===e&&(e=null),(0,a.jsx)(i,{className:null==e?void 0:e.className,testId:"empty-credentials-message",children:null!==(t=window.wpParselyEmptyCredentialsMessage)&&void 0!==t?t:(0,o.__)("Please ensure that the Site ID and API Secret given in the plugin's settings are correct.","wp-parsely")})}(e):(this.code===t.FetchError&&(this.hint=this.Hint((0,o.__)("This error can sometimes be caused by ad-blockers or browser tracking protections. Please add this site to any applicable allow lists and try again.","wp-parsely"))),this.code!==t.ParselyApiForbidden&&this.code!==t.ParselySuggestionsApiNoAuthentication||(this.hint=this.Hint((0,o.__)("Please ensure that the Site ID and API Secret given in the plugin's settings are correct.","wp-parsely"))),this.code===t.HttpRequestFailed&&(this.hint=this.Hint((0,o.__)("The Parse.ly API cannot be reached. Please verify that you are online.","wp-parsely"))),(0,a.jsx)(i,{className:null==e?void 0:e.className,testId:"error",children:"
")},n.prototype.createErrorSnackbar=function(){//.test(this.message)||(0,s.dispatch)("core/notices").createNotice("error",this.message,{type:"snackbar"})},n}(Error),u=window.wp.url,p=window.wp.apiFetch,d=n.n(p),f=function(){function e(){this.abortControllers=new Map}return e.prototype.cancelRequest=function(e){if(e)(t=this.abortControllers.get(e))&&(t.abort(),this.abortControllers.delete(e));else{var t,n=Array.from(this.abortControllers.keys()).pop();n&&(t=this.abortControllers.get(n))&&(t.abort(),this.abortControllers.delete(n))}},e.prototype.cancelAll=function(){this.abortControllers.forEach((function(e){return e.abort()})),this.abortControllers.clear()},e.prototype.getOrCreateController=function(e){if(e&&this.abortControllers.has(e))return{abortController:this.abortControllers.get(e),abortId:e};var t=null!=e?e:"auto-"+Date.now(),n=new AbortController;return this.abortControllers.set(t,n),{abortController:n,abortId:t}},e.prototype.fetch=function(e,n){return r=this,a=void 0,i=function(){var r,a,s,i,l,u;return function(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return s.next=i(0),s.throw=i(1),s.return=i(2),"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function i(i){return function(l){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s&&(s=0,i[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]%s",(0,r.escapeHTML)((0,o.__)("All Content Helper AI functionality is disabled because an API Secret has not been set.","wp-parsely")))),[3,5];case 4:return n&&(200!==n.api.code?(u=(0,o.sprintf)('%2$s',"https://wpvip.com/content-helper/#content-helper-form",(0,o.__)("Request access here","wp-parsely")),d=(0,o.sprintf)((0,r.escapeHTML)((0,o.__)("All Content Helper AI functionality is disabled for this website. %s.","wp-parsely")),u),e=(0,o.sprintf)("
%s
",d)):200===n.api.code&&200!==n.traffic_boost.code&&(p=(0,o.sprintf)('%2$s',"mailto:support@parsely.com","support@parsely.com"),d=(0,o.sprintf)((0,r.escapeHTML)((0,o.__)("Traffic Boost functionality is disabled for this website. To enable it, contact %s.","wp-parsely")),p),e=(0,o.sprintf)("
%s
",d))),e&&((f=document.createElement("div")).className="content-helper-message notice notice-error",f.innerHTML=e,(h=document.querySelector(".content-helper-section"))&&h.insertBefore(f,h.firstChild)),[7];case 5:return[2]}}))},new((a=void 0)||(a=Promise))((function(t,r){function o(e){try{l(s.next(e))}catch(e){r(e)}}function i(e){try{l(s.throw(e))}catch(e){r(e)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(e){e(n)}))).then(o,i)}l((s=s.apply(e,n||[])).next())}))}(),function(){var e=document.querySelector("input#content_helper_ai_features_enabled"),t=document.querySelectorAll("input#content_helper_smart_linking_enabled, input#content_helper_title_suggestions_enabled, input#content_helper_excerpt_suggestions_enabled, input#content_helper_traffic_boost_enabled"),n=document.querySelectorAll("div.content-helper-section fieldset");function r(){e&&(e.checked?n.forEach((function(e){s(e,!1),t.forEach((function(e){o(e)}))})):(n.forEach((function(t){t.querySelector("#".concat(e.id))||s(t)})),document.querySelectorAll("label.prevent-disable").forEach((function(e){a(e,!1)}))))}function o(e){var t,n,r=null===(n=null===(t=e.closest("fieldset"))||void 0===t?void 0:t.nextSibling)||void 0===n?void 0:n.nextSibling;e.checked?s([e,r],!1):(s(r),a(e.parentElement))}function a(e,t){void 0===t&&(t=!0),t?e.classList.add("prevent-disable"):e.classList.remove("prevent-disable")}function s(e,t){void 0===t&&(t=!0),Array.isArray(e)||(e=[e]),e.forEach((function(e){t?e.setAttribute("disabled","disabled"):e.removeAttribute("disabled")}))}(function(){var e;null===(e=document.querySelector('.wp-admin form[name="parsely"]'))||void 0===e||e.addEventListener("submit",(function(){var e=".wp-admin .content-helper-section fieldset";document.querySelectorAll("".concat(e,"[disabled]")).forEach((function(t){var n,r;null===(r=null===(n=t.parentElement)||void 0===n?void 0:n.parentElement)||void 0===r||r.classList.add("disabled-before-posting"),t.querySelectorAll("".concat(e,' label input[type="checkbox"]')).forEach((function(e){e.classList.add("disabled")})),t.removeAttribute("disabled")}))}))})(),r(),null==e||e.addEventListener("change",(function(){r()})),t.forEach((function(e){e.addEventListener("change",(function(){o(e)}))}))}(),g(),window.addEventListener("hashchange",g),null===(e=document.querySelector(".media-single-image button.browse"))||void 0===e||e.addEventListener("click",_)}))}()}();
\ No newline at end of file
diff --git a/build/content-helper/dashboard-page.asset.php b/build/content-helper/dashboard-page.asset.php
index 4e573dd360..c95fe1f81c 100644
--- a/build/content-helper/dashboard-page.asset.php
+++ b/build/content-helper/dashboard-page.asset.php
@@ -1 +1 @@
- array('react', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-url'), 'version' => '3fccf4875848f7b21bfe');
+ array('react', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-url'), 'version' => '38f8c847ea1cc4bf908c');
diff --git a/build/content-helper/dashboard-page.js b/build/content-helper/dashboard-page.js
index cde0127acd..59beaa4234 100644
--- a/build/content-helper/dashboard-page.js
+++ b/build/content-helper/dashboard-page.js
@@ -1,9 +1,9 @@
-!function(){"use strict";var t={69:function(t,e){Object.prototype.toString},20:function(t,e,n){var r=n(609),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(t,e,n){var r,i={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==e.key&&(c=""+e.key),void 0!==e.ref&&(u=e.ref),e)a.call(e,r)&&!l.hasOwnProperty(r)&&(i[r]=e[r]);if(t&&t.defaultProps)for(r in e=t.defaultProps)void 0===i[r]&&(i[r]=e[r]);return{$$typeof:o,type:t,key:c,ref:u,props:i,_owner:s.current}}e.Fragment=i,e.jsx=c,e.jsxs=c},848:function(t,e,n){t.exports=n(20)},609:function(t){t.exports=window.React}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r](i,i.exports,n),i.exports}n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,{a:e}),e},n.d=function(t,e){for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},function(){var t=n(848),e=n(609),r=(n(69),"popstate");function o(t={}){return function(t,e,n,o={}){let{window:a=document.defaultView,v5Compat:u=!1}=o,d=a.history,p="POP",f=null,h=g();function g(){return(d.state||{idx:null}).idx}function v(){p="POP";let t=g(),e=null==t?null:t-h;h=t,f&&f({action:p,location:y.location,delta:e})}function m(t){return function(t,e=!1){let n="http://localhost";"undefined"!=typeof window&&(n="null"!==window.location.origin?window.location.origin:window.location.href),i(n,"No window.location.(origin|href) available to create URL");let r="string"==typeof t?t:c(t);return r=r.replace(/ $/,"%20"),!e&&r.startsWith("//")&&(r=n+r),new URL(r,n)}(t)}null==h&&(h=0,d.replaceState({...d.state,idx:h},""));let y={get action(){return p},get location(){return t(a,d)},listen(t){if(f)throw new Error("A history only accepts one active listener");return a.addEventListener(r,v),f=t,()=>{a.removeEventListener(r,v),f=null}},createHref(t){return e(a,t)},createURL:m,encodeLocation(t){let e=m(t);return{pathname:e.pathname,search:e.search,hash:e.hash}},push:function(t,e){p="PUSH";let r=l(y.location,t,e);n&&n(r,t),h=g()+1;let o=s(r,h),i=y.createHref(r);try{d.pushState(o,"",i)}catch(t){if(t instanceof DOMException&&"DataCloneError"===t.name)throw t;a.location.assign(i)}u&&f&&f({action:p,location:y.location,delta:1})},replace:function(t,e){p="REPLACE";let r=l(y.location,t,e);n&&n(r,t),h=g();let o=s(r,h),i=y.createHref(r);d.replaceState(o,"",i),u&&f&&f({action:p,location:y.location,delta:0})},go(t){return d.go(t)}};return y}((function(t,e){let{pathname:n="/",search:r="",hash:o=""}=u(t.location.hash.substring(1));return n.startsWith("/")||n.startsWith(".")||(n="/"+n),l("",{pathname:n,search:r,hash:o},e.state&&e.state.usr||null,e.state&&e.state.key||"default")}),(function(t,e){let n=t.document.querySelector("base"),r="";if(n&&n.getAttribute("href")){let e=t.location.href,n=e.indexOf("#");r=-1===n?e:e.slice(0,n)}return r+"#"+("string"==typeof e?e:c(e))}),(function(t,e){a("/"===t.pathname.charAt(0),`relative pathnames are not supported in hash history.push(${JSON.stringify(e)})`)}),t)}function i(t,e){if(!1===t||null==t)throw new Error(e)}function a(t,e){if(!t){"undefined"!=typeof console&&console.warn(e);try{throw new Error(e)}catch(t){}}}function s(t,e){return{usr:t.state,key:t.key,idx:e}}function l(t,e,n=null,r){return{pathname:"string"==typeof t?t:t.pathname,search:"",hash:"",..."string"==typeof e?u(e):e,state:n,key:e&&e.key||r||Math.random().toString(36).substring(2,10)}}function c({pathname:t="/",search:e="",hash:n=""}){return e&&"?"!==e&&(t+="?"===e.charAt(0)?e:"?"+e),n&&"#"!==n&&(t+="#"===n.charAt(0)?n:"#"+n),t}function u(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substring(r),t=t.substring(0,r)),t&&(e.pathname=t)}return e}function d(t,e,n="/"){return function(t,e,n,r){let o=E(("string"==typeof e?u(e):e).pathname||"/",n);if(null==o)return null;let i=p(t);!function(t){t.sort(((t,e)=>t.score!==e.score?e.score-t.score:function(t,e){return t.length===e.length&&t.slice(0,-1).every(((t,n)=>t===e[n]))?t[t.length-1]-e[e.length-1]:0}(t.routesMeta.map((t=>t.childrenIndex)),e.routesMeta.map((t=>t.childrenIndex)))))}(i);let a=null;for(let t=0;null==a&&t{let s={relativePath:void 0===a?t.path||"":a,caseSensitive:!0===t.caseSensitive,childrenIndex:o,route:t};s.relativePath.startsWith("/")&&(i(s.relativePath.startsWith(r),`Absolute route path "${s.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),s.relativePath=s.relativePath.slice(r.length));let l=T([r,s.relativePath]),c=n.concat(s);t.children&&t.children.length>0&&(i(!0!==t.index,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),p(t.children,e,c,l)),(null!=t.path||t.index)&&e.push({path:l,score:x(l,t.index),routesMeta:c})};return t.forEach(((t,e)=>{if(""!==t.path&&t.path?.includes("?"))for(let n of f(t.path))o(t,e,n);else o(t,e)})),e}function f(t){let e=t.split("/");if(0===e.length)return[];let[n,...r]=e,o=n.endsWith("?"),i=n.replace(/\?$/,"");if(0===r.length)return o?[i,""]:[i];let a=f(r.join("/")),s=[];return s.push(...a.map((t=>""===t?i:[i,t].join("/")))),o&&s.push(...a),s.map((e=>t.startsWith("/")&&""===e?"/":e))}new WeakMap;var h=/^:[\w-]+$/,g=3,v=2,m=1,y=10,w=-2,b=t=>"*"===t;function x(t,e){let n=t.split("/"),r=n.length;return n.some(b)&&(r+=w),e&&(r+=v),n.filter((t=>!b(t))).reduce(((t,e)=>t+(h.test(e)?g:""===e?m:y)),r)}function k(t,e,n=!1){let{routesMeta:r}=t,o={},i="/",a=[];for(let t=0;t(r.push({paramName:e,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));return t.endsWith("*")?(r.push({paramName:"*"}),o+="*"===t||"/*"===t?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==t&&"/"!==t&&(o+="(?:(?=\\/|$))"),[new RegExp(o,e?void 0:"i"),r]}(t.path,t.caseSensitive,t.end),o=e.match(n);if(!o)return null;let i=o[0],s=i.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:r.reduce(((t,{paramName:e,isOptional:n},r)=>{if("*"===e){let t=l[r]||"";s=i.slice(0,i.length-t.length).replace(/(.)\/+$/,"$1")}const o=l[r];return t[e]=n&&!o?void 0:(o||"").replace(/%2F/g,"/"),t}),{}),pathname:i,pathnameBase:s,pattern:t}}function S(t){try{return t.split("/").map((t=>decodeURIComponent(t).replace(/\//g,"%2F"))).join("/")}catch(e){return a(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function E(t,e){if("/"===e)return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&"/"!==r?null:t.slice(n)||"/"}function P(t,e,n,r){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function L(t){let e=function(t){return t.filter(((t,e)=>0===e||t.route.path&&t.route.path.length>0))}(t);return e.map(((t,n)=>n===e.length-1?t.pathname:t.pathnameBase))}function j(t,e,n,r=!1){let o;"string"==typeof t?o=u(t):(o={...t},i(!o.pathname||!o.pathname.includes("?"),P("?","pathname","search",o)),i(!o.pathname||!o.pathname.includes("#"),P("#","pathname","hash",o)),i(!o.search||!o.search.includes("#"),P("#","search","hash",o)));let a,s=""===t||""===o.pathname,l=s?"/":o.pathname;if(null==l)a=n;else{let t=e.length-1;if(!r&&l.startsWith("..")){let e=l.split("/");for(;".."===e[0];)e.shift(),t-=1;o.pathname=e.join("/")}a=t>=0?e[t]:"/"}let c=function(t,e="/"){let{pathname:n,search:r="",hash:o=""}="string"==typeof t?u(t):t,i=n?n.startsWith("/")?n:function(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach((t=>{".."===t?n.length>1&&n.pop():"."!==t&&n.push(t)})),n.length>1?n.join("/"):"/"}(n,e):e;return{pathname:i,search:C(r),hash:I(o)}}(o,a),d=l&&"/"!==l&&l.endsWith("/"),p=(s||"."===l)&&n.endsWith("/");return c.pathname.endsWith("/")||!d&&!p||(c.pathname+="/"),c}var T=t=>t.join("/").replace(/\/\/+/g,"/"),N=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),C=t=>t&&"?"!==t?t.startsWith("?")?t:"?"+t:"",I=t=>t&&"#"!==t?t.startsWith("#")?t:"#"+t:"";function R(t){return null!=t&&"number"==typeof t.status&&"string"==typeof t.statusText&&"boolean"==typeof t.internal&&"data"in t}var A=["POST","PUT","PATCH","DELETE"],O=(new Set(A),["GET",...A]);new Set(O),Symbol("ResetLoaderData");var D=e.createContext(null);D.displayName="DataRouter";var B=e.createContext(null);B.displayName="DataRouterState";var M=e.createContext({isTransitioning:!1});M.displayName="ViewTransition",e.createContext(new Map).displayName="Fetchers",e.createContext(null).displayName="Await";var G=e.createContext(null);G.displayName="Navigation";var F=e.createContext(null);F.displayName="Location";var U=e.createContext({outlet:null,matches:[],isDataRoute:!1});U.displayName="Route";var H=e.createContext(null);function V(){return null!=e.useContext(F)}function $(){return i(V(),"useLocation() may be used only in the context of a component."),e.useContext(F).location}H.displayName="RouteError";var W="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function z(t){e.useContext(G).static||e.useLayoutEffect(t)}function q(){let{isDataRoute:t}=e.useContext(U);return t?function(){let{router:t}=function(t){let n=e.useContext(D);return i(n,tt(t)),n}("useNavigate"),n=et("useNavigate"),r=e.useRef(!1);return z((()=>{r.current=!0})),e.useCallback((async(e,o={})=>{a(r.current,W),r.current&&("number"==typeof e?t.navigate(e):await t.navigate(e,{fromRouteId:n,...o}))}),[t,n])}():function(){i(V(),"useNavigate() may be used only in the context of a component.");let t=e.useContext(D),{basename:n,navigator:r}=e.useContext(G),{matches:o}=e.useContext(U),{pathname:s}=$(),l=JSON.stringify(L(o)),c=e.useRef(!1);return z((()=>{c.current=!0})),e.useCallback(((e,o={})=>{if(a(c.current,W),!c.current)return;if("number"==typeof e)return void r.go(e);let i=j(e,JSON.parse(l),s,"path"===o.relative);null==t&&"/"!==n&&(i.pathname="/"===i.pathname?n:T([n,i.pathname])),(o.replace?r.replace:r.push)(i,o.state,o)}),[n,r,l,s,t])}()}function Z(t,{relative:n}={}){let{matches:r}=e.useContext(U),{pathname:o}=$(),i=JSON.stringify(L(r));return e.useMemo((()=>j(t,JSON.parse(i),o,"path"===n)),[t,i,o,n])}function K(t,n,r,o){i(V(),"useRoutes() may be used only in the context of a component.");let{navigator:s}=e.useContext(G),{matches:l}=e.useContext(U),c=l[l.length-1],p=c?c.params:{},f=c?c.pathname:"/",h=c?c.pathnameBase:"/",g=c&&c.route;{let t=g&&g.path||"";rt(f,!g||t.endsWith("*")||t.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${f}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.\n\nPlease change the parent to .`)}let v,m=$();if(n){let t="string"==typeof n?u(n):n;i("/"===h||t.pathname?.startsWith(h),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${h}" but pathname "${t.pathname}" was given in the \`location\` prop.`),v=t}else v=m;let y=v.pathname||"/",w=y;if("/"!==h){let t=h.replace(/^\//,"").split("/");w="/"+y.replace(/^\//,"").split("/").slice(t.length).join("/")}let b=d(t,{pathname:w});a(g||null!=b,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),a(null==b||void 0!==b[b.length-1].route.element||void 0!==b[b.length-1].route.Component||void 0!==b[b.length-1].route.lazy,`Matched leaf route at location "${v.pathname}${v.search}${v.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let x=function(t,n=[],r=null){if(null==t){if(!r)return null;if(r.errors)t=r.matches;else{if(0!==n.length||r.initialized||!(r.matches.length>0))return null;t=r.matches}}let o=t,a=r?.errors;if(null!=a){let t=o.findIndex((t=>t.route.id&&void 0!==a?.[t.route.id]));i(t>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(",")}`),o=o.slice(0,Math.min(o.length,t+1))}let s=!1,l=-1;if(r)for(let t=0;t=0?o.slice(0,l+1):[o[0]];break}}}return o.reduceRight(((t,i,c)=>{let u,d=!1,p=null,f=null;r&&(u=a&&i.route.id?a[i.route.id]:void 0,p=i.route.errorElement||J,s&&(l<0&&0===c?(rt("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,f=null):l===c&&(d=!0,f=i.route.hydrateFallbackElement||null)));let h=n.concat(o.slice(0,c+1)),g=()=>{let n;return n=u?p:d?f:i.route.Component?e.createElement(i.route.Component,null):i.route.element?i.route.element:t,e.createElement(Q,{match:i,routeContext:{outlet:t,matches:h,isDataRoute:null!=r},children:n})};return r&&(i.route.ErrorBoundary||i.route.errorElement||0===c)?e.createElement(X,{location:r.location,revalidation:r.revalidation,component:p,error:u,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0}}):g()}),null)}(b&&b.map((t=>Object.assign({},t,{params:Object.assign({},p,t.params),pathname:T([h,s.encodeLocation?s.encodeLocation(t.pathname).pathname:t.pathname]),pathnameBase:"/"===t.pathnameBase?h:T([h,s.encodeLocation?s.encodeLocation(t.pathnameBase).pathname:t.pathnameBase])}))),l,r,o);return n&&x?e.createElement(F.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...v},navigationType:"POP"}},x):x}function Y(){let t=function(){let t=e.useContext(H),n=function(t){let n=e.useContext(B);return i(n,tt(t)),n}("useRouteError"),r=et("useRouteError");return void 0!==t?t:n.errors?.[r]}(),n=R(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),r=t instanceof Error?t.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o},s={padding:"2px 4px",backgroundColor:o},l=null;return console.error("Error handled by React Router default ErrorBoundary:",t),l=e.createElement(e.Fragment,null,e.createElement("p",null,"💿 Hey developer 👋"),e.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",e.createElement("code",{style:s},"ErrorBoundary")," or"," ",e.createElement("code",{style:s},"errorElement")," prop on your route.")),e.createElement(e.Fragment,null,e.createElement("h2",null,"Unexpected Application Error!"),e.createElement("h3",{style:{fontStyle:"italic"}},n),r?e.createElement("pre",{style:a},r):null,l)}e.createContext(null);var J=e.createElement(Y,null),X=class extends e.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||"idle"!==e.revalidation&&"idle"===t.revalidation?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:void 0!==t.error?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){console.error("React Router caught the following error during render",t,e)}render(){return void 0!==this.state.error?e.createElement(U.Provider,{value:this.props.routeContext},e.createElement(H.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function Q({routeContext:t,match:n,children:r}){let o=e.useContext(D);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),e.createElement(U.Provider,{value:t},r)}function tt(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function et(t){let n=function(t){let n=e.useContext(U);return i(n,tt(t)),n}(t),r=n.matches[n.matches.length-1];return i(r.route.id,`${t} can only be used on routes that contain a unique "id"`),r.route.id}var nt={};function rt(t,e,n){e||nt[t]||(nt[t]=!0,a(!1,n))}function ot({to:t,replace:n,state:r,relative:o}){i(V()," may be used only in the context of a component.");let{static:s}=e.useContext(G);a(!s," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:l}=e.useContext(U),{pathname:c}=$(),u=q(),d=j(t,L(l),c,"path"===o),p=JSON.stringify(d);return e.useEffect((()=>{u(JSON.parse(p),{replace:n,state:r,relative:o})}),[u,p,o,n,r]),null}function it(t){i(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function at({basename:t="/",children:n=null,location:r,navigationType:o="POP",navigator:s,static:l=!1}){i(!V(),"You cannot render a inside another . You should never have more than one in your app.");let c=t.replace(/^\/*/,"/"),d=e.useMemo((()=>({basename:c,navigator:s,static:l,future:{}})),[c,s,l]);"string"==typeof r&&(r=u(r));let{pathname:p="/",search:f="",hash:h="",state:g=null,key:v="default"}=r,m=e.useMemo((()=>{let t=E(p,c);return null==t?null:{location:{pathname:t,search:f,hash:h,state:g,key:v},navigationType:o}}),[c,p,f,h,g,v,o]);return a(null!=m,` is not able to match the URL "${p}${f}${h}" because it does not start with the basename, so the won't render anything.`),null==m?null:e.createElement(G.Provider,{value:d},e.createElement(F.Provider,{children:n,value:m}))}function st({children:t,location:e}){return K(lt(t),e)}function lt(t,n=[]){let r=[];return e.Children.forEach(t,((t,o)=>{if(!e.isValidElement(t))return;let a=[...n,o];if(t.type===e.Fragment)return void r.push.apply(r,lt(t.props.children,a));i(t.type===it,`[${"string"==typeof t.type?t.type:t.type.name}] is not a component. All component children of must be a or `),i(!t.props.index||!t.props.children,"An index route cannot have child routes.");let s={id:t.props.id||a.join("-"),caseSensitive:t.props.caseSensitive,element:t.props.element,Component:t.props.Component,index:t.props.index,path:t.props.path,loader:t.props.loader,action:t.props.action,hydrateFallbackElement:t.props.hydrateFallbackElement,HydrateFallback:t.props.HydrateFallback,errorElement:t.props.errorElement,ErrorBoundary:t.props.ErrorBoundary,hasErrorBoundary:!0===t.props.hasErrorBoundary||null!=t.props.ErrorBoundary||null!=t.props.errorElement,shouldRevalidate:t.props.shouldRevalidate,handle:t.props.handle,lazy:t.props.lazy};t.props.children&&(s.children=lt(t.props.children,a)),r.push(s)})),r}e.memo((function({routes:t,future:e,state:n}){return K(t,void 0,n,e)})),e.Component;var ct="get",ut="application/x-www-form-urlencoded";function dt(t){return null!=t&&"string"==typeof t.tagName}var pt=null,ft=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function ht(t){return null==t||ft.has(t)?t:(a(!1,`"${t}" is not a valid \`encType\` for \`