diff --git a/build/content-helper/dashboard-widget.asset.php b/build/content-helper/dashboard-widget.asset.php index 3e99feceb..13660b8f9 100644 --- a/build/content-helper/dashboard-widget.asset.php +++ b/build/content-helper/dashboard-widget.asset.php @@ -1 +1 @@ - array('react', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '58c71232f1e12c0b0925'); + array('react', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => 'a9ac73db3b76299e492d'); diff --git a/build/content-helper/dashboard-widget.js b/build/content-helper/dashboard-widget.js index ad5f82ca7..e158345ad 100644 --- a/build/content-helper/dashboard-widget.js +++ b/build/content-helper/dashboard-widget.js @@ -1 +1 @@ -!function(){"use strict";var e={251:function(e,t,r){var n=r(196),a=Symbol.for("react.element"),s=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,o=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,r){var n,s={},c=null,u=null;for(n in void 0!==r&&(c=""+r),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,n)&&!l.hasOwnProperty(n)&&(s[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===s[n]&&(s[n]=t[n]);return{$$typeof:a,type:e,key:c,ref:u,props:s,_owner:o.current}}t.Fragment=s,t.jsx=c,t.jsxs=c},893:function(e,t,r){e.exports=r(251)},196:function(e){e.exports=window.React}},t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e,t,n,a=r(893),s=window.wp.element,i=window.wp.i18n,o=function(e){void 0===e&&(e=null);var t="";(null==e?void 0:e.children)&&(t=e.children);var r="content-helper-error-message";return(null==e?void 0:e.className)&&(r+=" "+e.className),(0,a.jsx)("div",{className:r,"data-testid":null==e?void 0:e.testId,dangerouslySetInnerHTML:{__html:t}})},l=function(e){var t;return void 0===e&&(e=null),(0,a.jsx)(o,{className:null==e?void 0:e.className,testId:"empty-credentials-message",children:null!==(t=window.wpParselyEmptyCredentialsMessage)&&void 0!==t?t:(0,i.__)("Please ensure that the Site ID and API Secret given in the plugin's settings are correct.","wp-parsely")})},c=function(){return c=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]=1e4&&(clearInterval(s),r("Telemetry library not loaded"))}),100);else r("Telemetry not enabled")}))},e.prototype.trackEvent=function(t,r){var n;this.isLoaded?(0!==t.indexOf(e.TRACKS_PREFIX)&&(t=e.TRACKS_PREFIX+t),this.isEventNameValid(t)?(r=this.prepareProperties(r),null===(n=this._tkq)||void 0===n||n.push(["recordEvent",t,r])):console.error("Error tracking event: Invalid event name")):console.error("Error tracking event: Telemetry not loaded")},e.prototype.isTelemetryEnabled=function(){return this.isEnabled},e.prototype.isProprietyValid=function(t){return e.PROPERTY_REGEX.test(t)},e.prototype.isEventNameValid=function(t){return e.EVENT_NAME_REGEX.test(t)},e.prototype.prepareProperties=function(e){return(e=this.sanitizeProperties(e)).parsely_version=wpParselyTracksTelemetry.version,wpParselyTracksTelemetry.user&&(e._ut=wpParselyTracksTelemetry.user.type,e._ui=wpParselyTracksTelemetry.user.id),wpParselyTracksTelemetry.vipgo_env&&(e.vipgo_env=wpParselyTracksTelemetry.vipgo_env),this.sanitizeProperties(e)},e.prototype.sanitizeProperties=function(e){var t=this,r={};return Object.keys(e).forEach((function(n){t.isProprietyValid(n)&&(r[n]=e[n])})),r},e.TRACKS_PREFIX="wpparsely_",e.EVENT_NAME_REGEX=/^(([a-z0-9]+)_){2}([a-z0-9_]+)$/,e.PROPERTY_REGEX=/^[a-z_][a-z0-9_]*$/,e}(),h=(d.trackEvent,function(e){var t=e.defaultValue,r=e.items,n=e.onChange;return(0,a.jsx)("select",{onChange:n,value:t,children:r.map((function(e){return(0,a.jsx)("option",{value:e[0],children:e[1]},e[0])}))})}),y=window.wp.data,f=function(){return f=Object.assign||function(e){for(var t,r=1,n=arguments.length;rhere.',"wp-parsely"):s.code===T.ParselySuggestionsApiOpenAiError||s.code===T.ParselySuggestionsApiOpenAiUnavailable?s.message=(0,i.__)("The Parse.ly API returned an internal server error. Please retry with a different input, or try again later.","wp-parsely"):s.code===T.HttpRequestFailed&&s.message.includes("cURL error 28")?s.message=(0,i.__)("The Parse.ly API did not respond in a timely manner. Please try again later.","wp-parsely"):s.code===T.ParselySuggestionsApiSchemaError?s.message=(0,i.__)("The Parse.ly API returned a validation error. Please try again with different parameters.","wp-parsely"):s.code===T.ParselySuggestionsApiNoData?s.message=(0,i.__)("The Parse.ly API couldn't find any relevant data to fulfill the request. Please retry with a different input.","wp-parsely"):s.code===T.ParselySuggestionsApiOpenAiSchema?s.message=(0,i.__)("The Parse.ly API returned an incorrect response. Please try again later.","wp-parsely"):s.code===T.ParselySuggestionsApiAuthUnavailable&&(s.message=(0,i.__)("The Parse.ly API is currently unavailable. Please try again later.","wp-parsely")),s}return I(t,e),t.prototype.Message=function(e){return void 0===e&&(e=null),[T.PluginCredentialsNotSetMessageDetected,T.PluginSettingsSiteIdNotSet,T.PluginSettingsApiSecretNotSet].includes(this.code)?l(e):(this.code===T.FetchError&&(this.hint=this.Hint((0,i.__)("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,i.__)("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,i.__)("The Parse.ly API cannot be reached. Please verify that you are online.","wp-parsely"))),(0,a.jsx)(o,{className:null==e?void 0:e.className,testId:"error",children:"

".concat(this.message,"

").concat(this.hint?this.hint:"")}))},t.prototype.Hint=function(e){return'

'.concat((0,i.__)("Hint:","wp-parsely")," ").concat(e,"

")},t}(Error),k={month:"short",day:"numeric",year:"numeric"},C={month:"short",day:"numeric"},R=(0,i.__)("Date N/A","wp-parsely");function L(e){if(!1===function(e){return!isNaN(+e)&&0!==e.getTime()}(e))return R;var t=k;return e.getUTCFullYear()===(new Date).getUTCFullYear()&&(t=C),Intl.DateTimeFormat(document.documentElement.lang||"en",t).format(e)}var M=function(){return M=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]=c){var u=t;(a=n/c)%1>1/o&&(u=a>10?1:2),u=parseFloat(a.toFixed(2))===parseFloat(a.toFixed(0))?0:u,s=a.toFixed(u),i=l}o=c})),s+r+i}function q(e){var t=e.metric,r=e.post,n=e.avgEngagedIcon,s=e.viewsIcon;return"views"===t?(0,a.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("Number of Views","wp-parsely")}),s,G(r.views.toString())]}):"avg_engaged"===t?(0,a.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("Average Time","wp-parsely")}),n,r.avgEngaged]}):(0,a.jsx)("span",{className:"parsely-post-metric-data",children:"-"})}function $(e){var t,r=e.metric,n=e.post;return(0,a.jsx)("li",{className:"parsely-top-post",children:(0,a.jsxs)("div",{className:"parsely-top-post-content",children:[(0,a.jsx)(z,{post:n}),(0,a.jsxs)("div",{className:"parsely-top-post-data",children:[(0,a.jsx)(q,{metric:r,post:n}),(0,a.jsx)(X,{post:n}),(0,a.jsxs)("a",{className:"parsely-top-post-icon-link",href:n.url,target:"_blank",rel:"noreferrer",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("View Post (opens in new tab)","wp-parsely")}),(0,a.jsx)(U,{})]}),0!==n.postId&&(0,a.jsxs)("a",{className:"parsely-top-post-icon-link",href:(t=n.postId,"/wp-admin/post.php?post=".concat(t,"&action=edit")),target:"_blank",rel:"noreferrer",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("Edit Post (opens in new tab)","wp-parsely")}),(0,a.jsx)(V,{})]}),(0,a.jsxs)("div",{className:"parsely-top-post-metadata",children:[(0,a.jsxs)("span",{className:"parsely-top-post-date",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("Date","wp-parsely")}),L(new Date(n.date))]}),(0,a.jsxs)("span",{className:"parsely-top-post-author",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("Author","wp-parsely")}),n.author]})]})]})]})},n.id)}function z(e){var t=e.post;return t.thumbnailUrl?(0,a.jsxs)("div",{className:"parsely-top-post-thumbnail",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("Thumbnail","wp-parsely")}),(0,a.jsx)("img",{src:t.thumbnailUrl,alt:(0,i.__)("Post thumbnail","wp-parsely")})]}):(0,a.jsx)("div",{className:"parsely-top-post-thumbnail",children:(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("Post thumbnail not available","wp-parsely")})})}function X(e){var t=e.post;return(0,a.jsxs)("a",{className:"parsely-top-post-title",href:t.dashUrl,target:"_blank",rel:"noreferrer",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,i.__)("View in Parse.ly (opens in new tab)","wp-parsely")}),t.title]})}var B=function(){return B=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]0&&e.retryFetch?[4,new Promise((function(e){return setTimeout(e,500)}))]:[3,3];case 1:return r.sent(),[4,t(n-1)];case 2:return r.sent(),[3,4];case 3:y(!1),v(e),r.label=4;case 4:return[2]}}))}))})),[2]}))}))};return y(!0),t(1),function(){y(!1),m([]),v(void 0)}}),[o,S]);var T=function(e,t){d.trackEvent("dash_widget_filter_changed",B({filter:e},t))},j=(0,a.jsxs)("div",{className:"parsely-top-posts-filters",children:[(0,a.jsx)(h,{defaultValue:o.Period,items:Object.values(e).map((function(e){return[e,A(e)]})),onChange:function(t){x(t.target.value,e)&&(l({Period:t.target.value}),T("period",{period:t.target.value}),N(1))}}),(0,a.jsx)(h,{defaultValue:o.Metric,items:Object.values(t).map((function(e){return[e,E(e)]})),onChange:function(e){x(e.target.value,t)&&(l({Metric:e.target.value}),T("metric",{metric:e.target.value}),N(1))}})]}),I=(0,a.jsxs)("div",{className:"parsely-top-posts-navigation",children:[(0,a.jsx)("button",{className:"parsely-top-posts-navigation-prev",disabled:S<=1,"aria-label":(0,i.__)("Previous page","wp-parsely"),onClick:function(){N(S-1),d.trackEvent("dash_widget_navigation",{navigation:"previous",to_page:S-1})},children:(0,i.__)("<< Previous","wp-parsely")}),(0,i.sprintf)(/* translators: 1: Current page */(0,i.__)("Page %1$d","wp-parsely"),S),(0,a.jsx)("button",{className:"parsely-top-posts-navigation-next",disabled:!u&&_.length<5,"aria-label":(0,i.__)("Next page","wp-parsely"),onClick:function(){N(S+1),d.trackEvent("dash_widget_navigation",{navigation:"next",to_page:S+1})},children:(0,i.__)("Next >>","wp-parsely")})]});if(g)return(0,a.jsxs)(a.Fragment,{children:[j,g.Message(),S>1&&I]});var O=(0,a.jsx)("div",{className:"parsely-spinner-wrapper",children:(0,a.jsx)(p.Spinner,{})});return(0,a.jsxs)(a.Fragment,{children:[j,u?O:(0,a.jsx)("ol",{className:"parsely-top-posts",style:{counterReset:"item "+5*(S-1)},children:_.map((function(e){return(0,a.jsx)($,{metric:o.Metric,post:e},e.id)}))}),(_.length>=5||S>1)&&I]})}var K=function(r){var n;try{n=JSON.parse(r)}catch(r){return{Metric:t.Views,Period:e.Days7}}return x(null==n?void 0:n.Metric,t)||(n.Metric=t.Views),x(null==n?void 0:n.Period,e)||(n.Period=e.Days7),n};window.addEventListener("load",(function(){var e=document.querySelector("#wp-parsely-dashboard-widget > .inside");if(null!==e){var t=(0,a.jsx)(S,{endpoint:"dashboard-widget-settings",defaultSettings:K(window.wpParselyContentHelperSettings),children:(0,a.jsx)(u,{children:(0,a.jsx)(W,{})})});s.createRoot?(0,s.createRoot)(e).render(t):(0,s.render)(t,e)}}),!1)}()}(); \ No newline at end of file +!function(){"use strict";var e={251:function(e,t,r){var n=r(196),a=Symbol.for("react.element"),s=Symbol.for("react.fragment"),o=Object.prototype.hasOwnProperty,i=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,r){var n,s={},c=null,u=null;for(n in void 0!==r&&(c=""+r),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)o.call(t,n)&&!l.hasOwnProperty(n)&&(s[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===s[n]&&(s[n]=t[n]);return{$$typeof:a,type:e,key:c,ref:u,props:s,_owner:i.current}}t.Fragment=s,t.jsx=c,t.jsxs=c},893:function(e,t,r){e.exports=r(251)},196:function(e){e.exports=window.React}},t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e,t,n,a=r(893),s=window.wp.element,o=window.wp.i18n,i=function(e){void 0===e&&(e=null);var t="";(null==e?void 0:e.children)&&(t=e.children);var r="content-helper-error-message";return(null==e?void 0:e.className)&&(r+=" "+e.className),(0,a.jsx)("div",{className:r,"data-testid":null==e?void 0:e.testId,dangerouslySetInnerHTML:{__html:t}})},l=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")})},c=function(){return c=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]=1e4&&(clearInterval(s),r("Telemetry library not loaded"))}),100);else r("Telemetry not enabled")}))},e.prototype.trackEvent=function(t,r){var n;this.isLoaded?(0!==t.indexOf(e.TRACKS_PREFIX)&&(t=e.TRACKS_PREFIX+t),this.isEventNameValid(t)?(r=this.prepareProperties(r),null===(n=this._tkq)||void 0===n||n.push(["recordEvent",t,r])):console.error("Error tracking event: Invalid event name")):console.error("Error tracking event: Telemetry not loaded")},e.prototype.isTelemetryEnabled=function(){return this.isEnabled},e.prototype.isProprietyValid=function(t){return e.PROPERTY_REGEX.test(t)},e.prototype.isEventNameValid=function(t){return e.EVENT_NAME_REGEX.test(t)},e.prototype.prepareProperties=function(e){return(e=this.sanitizeProperties(e)).parsely_version=wpParselyTracksTelemetry.version,wpParselyTracksTelemetry.user&&(e._ut=wpParselyTracksTelemetry.user.type,e._ui=wpParselyTracksTelemetry.user.id),wpParselyTracksTelemetry.vipgo_env&&(e.vipgo_env=wpParselyTracksTelemetry.vipgo_env),this.sanitizeProperties(e)},e.prototype.sanitizeProperties=function(e){var t=this,r={};return Object.keys(e).forEach((function(n){t.isProprietyValid(n)&&(r[n]=e[n])})),r},e.TRACKS_PREFIX="wpparsely_",e.EVENT_NAME_REGEX=/^(([a-z0-9]+)_){2}([a-z0-9_]+)$/,e.PROPERTY_REGEX=/^[a-z_][a-z0-9_]*$/,e}(),h=(d.trackEvent,function(e){var t=e.defaultValue,r=e.items,n=e.onChange;return(0,a.jsx)("select",{onChange:n,value:t,children:r.map((function(e){return(0,a.jsx)("option",{value:e[0],children:e[1]},e[0])}))})}),f=window.wp.data,y=function(){return y=Object.assign||function(e){for(var t,r=1,n=arguments.length;rhere.',"wp-parsely"):s.code===N.ParselySuggestionsApiOpenAiError||s.code===N.ParselySuggestionsApiOpenAiUnavailable?s.message=(0,o.__)("The Parse.ly API returned an internal server error. Please retry with a different input, or try again later.","wp-parsely"):s.code===N.HttpRequestFailed&&s.message.includes("cURL error 28")?s.message=(0,o.__)("The Parse.ly API did not respond in a timely manner. Please try again later.","wp-parsely"):s.code===N.ParselySuggestionsApiSchemaError?s.message=(0,o.__)("The Parse.ly API returned a validation error. Please try again with different parameters.","wp-parsely"):s.code===N.ParselySuggestionsApiNoData?s.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"):s.code===N.ParselySuggestionsApiOpenAiSchema?s.message=(0,o.__)("The Parse.ly API returned an incorrect response. Please try again later.","wp-parsely"):s.code===N.ParselySuggestionsApiAuthUnavailable&&(s.message=(0,o.__)("The Parse.ly API is currently unavailable. Please try again later.","wp-parsely")),s}return C(t,e),t.prototype.Message=function(e){return void 0===e&&(e=null),[N.PluginCredentialsNotSetMessageDetected,N.PluginSettingsSiteIdNotSet,N.PluginSettingsApiSecretNotSet].includes(this.code)?l(e):(this.code===N.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!==N.ParselyApiForbidden&&this.code!==N.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===N.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:"

".concat(this.message,"

").concat(this.hint?this.hint:"")}))},t.prototype.Hint=function(e){return'

'.concat((0,o.__)("Hint:","wp-parsely")," ").concat(e,"

")},t}(Error),I=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,r=Array.from(this.abortControllers.keys()).pop();r&&(t=this.abortControllers.get(r))&&(t.abort(),this.abortControllers.delete(r))}},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(),r=new AbortController;return this.abortControllers.set(t,r),{abortController:r,abortId:t}},e.prototype.fetch=function(e,t){return r=this,n=void 0,s=function(){var r,n,a,s,i;return function(e,t){var r,n,a,s,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return s={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function i(i){return function(l){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s&&(s=0,i[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&i[0]?n.return:i[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,i[1])).done)return a;switch(n=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,n=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!((a=(a=o.trys).length>0&&a[a.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]0&&a[a.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]=c){var u=t;(a=n/c)%1>1/i&&(u=a>10?1:2),u=parseFloat(a.toFixed(2))===parseFloat(a.toFixed(0))?0:u,s=a.toFixed(u),o=l}i=c})),s+r+o}function z(e){var t=e.metric,r=e.post,n=e.avgEngagedIcon,s=e.viewsIcon;return"views"===t?(0,a.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("Number of Views","wp-parsely")}),s,$(r.views.toString())]}):"avg_engaged"===t?(0,a.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("Average Time","wp-parsely")}),n,r.avgEngaged]}):(0,a.jsx)("span",{className:"parsely-post-metric-data",children:"-"})}function X(e){var t,r=e.metric,n=e.post;return(0,a.jsx)("li",{className:"parsely-top-post",children:(0,a.jsxs)("div",{className:"parsely-top-post-content",children:[(0,a.jsx)(B,{post:n}),(0,a.jsxs)("div",{className:"parsely-top-post-data",children:[(0,a.jsx)(z,{metric:r,post:n}),(0,a.jsx)(Z,{post:n}),(0,a.jsxs)("a",{className:"parsely-top-post-icon-link",href:n.url,target:"_blank",rel:"noreferrer",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("View Post (opens in new tab)","wp-parsely")}),(0,a.jsx)(q,{})]}),0!==n.postId&&(0,a.jsxs)("a",{className:"parsely-top-post-icon-link",href:(t=n.postId,"/wp-admin/post.php?post=".concat(t,"&action=edit")),target:"_blank",rel:"noreferrer",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("Edit Post (opens in new tab)","wp-parsely")}),(0,a.jsx)(G,{})]}),(0,a.jsxs)("div",{className:"parsely-top-post-metadata",children:[(0,a.jsxs)("span",{className:"parsely-top-post-date",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("Date","wp-parsely")}),M(new Date(n.date))]}),(0,a.jsxs)("span",{className:"parsely-top-post-author",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("Author","wp-parsely")}),n.author]})]})]})]})},n.id)}function B(e){var t=e.post;return t.thumbnailUrl?(0,a.jsxs)("div",{className:"parsely-top-post-thumbnail",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("Thumbnail","wp-parsely")}),(0,a.jsx)("img",{src:t.thumbnailUrl,alt:(0,o.__)("Post thumbnail","wp-parsely")})]}):(0,a.jsx)("div",{className:"parsely-top-post-thumbnail",children:(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("Post thumbnail not available","wp-parsely")})})}function Z(e){var t=e.post;return(0,a.jsxs)("a",{className:"parsely-top-post-title",href:t.dashUrl,target:"_blank",rel:"noreferrer",children:[(0,a.jsx)("span",{className:"screen-reader-text",children:(0,o.__)("View in Parse.ly (opens in new tab)","wp-parsely")}),t.title]})}var Y=function(){return Y=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]0&&e.retryFetch?[4,new Promise((function(e){return setTimeout(e,500)}))]:[3,3];case 1:return r.sent(),[4,t(n-1)];case 2:return r.sent(),[3,4];case 3:f(!1),v(e),r.label=4;case 4:return[2]}}))}))})),[2]}))}))};return f(!0),t(1),function(){f(!1),m([]),v(void 0)}}),[i,S]);var N=function(e,t){d.trackEvent("dash_widget_filter_changed",Y({filter:e},t))},T=(0,a.jsxs)("div",{className:"parsely-top-posts-filters",children:[(0,a.jsx)(h,{defaultValue:i.Period,items:Object.values(e).map((function(e){return[e,A(e)]})),onChange:function(t){x(t.target.value,e)&&(l({Period:t.target.value}),N("period",{period:t.target.value}),j(1))}}),(0,a.jsx)(h,{defaultValue:i.Metric,items:Object.values(t).map((function(e){return[e,E(e)]})),onChange:function(e){x(e.target.value,t)&&(l({Metric:e.target.value}),N("metric",{metric:e.target.value}),j(1))}})]}),C=(0,a.jsxs)("div",{className:"parsely-top-posts-navigation",children:[(0,a.jsx)("button",{className:"parsely-top-posts-navigation-prev",disabled:S<=1,"aria-label":(0,o.__)("Previous page","wp-parsely"),onClick:function(){j(S-1),d.trackEvent("dash_widget_navigation",{navigation:"previous",to_page:S-1})},children:(0,o.__)("<< Previous","wp-parsely")}),(0,o.sprintf)(/* translators: 1: Current page */(0,o.__)("Page %1$d","wp-parsely"),S),(0,a.jsx)("button",{className:"parsely-top-posts-navigation-next",disabled:!u&&_.length<5,"aria-label":(0,o.__)("Next page","wp-parsely"),onClick:function(){j(S+1),d.trackEvent("dash_widget_navigation",{navigation:"next",to_page:S+1})},children:(0,o.__)("Next >>","wp-parsely")})]});if(g)return(0,a.jsxs)(a.Fragment,{children:[T,g.Message(),S>1&&C]});var O=(0,a.jsx)("div",{className:"parsely-spinner-wrapper",children:(0,a.jsx)(p.Spinner,{})});return(0,a.jsxs)(a.Fragment,{children:[T,u?O:(0,a.jsx)("ol",{className:"parsely-top-posts",style:{counterReset:"item "+5*(S-1)},children:_.map((function(e){return(0,a.jsx)(X,{metric:i.Metric,post:e},e.id)}))}),(_.length>=5||S>1)&&C]})}var J=function(r){var n;try{n=JSON.parse(r)}catch(r){return{Metric:t.Views,Period:e.Days7}}return x(null==n?void 0:n.Metric,t)||(n.Metric=t.Views),x(null==n?void 0:n.Period,e)||(n.Period=e.Days7),n};window.addEventListener("load",(function(){var e=document.querySelector("#wp-parsely-dashboard-widget > .inside");if(null!==e){var t=(0,a.jsx)(S,{endpoint:"dashboard-widget-settings",defaultSettings:J(window.wpParselyContentHelperSettings),children:(0,a.jsx)(u,{children:(0,a.jsx)(Q,{})})});s.createRoot?(0,s.createRoot)(e).render(t):(0,s.render)(t,e)}}),!1)}()}(); \ No newline at end of file diff --git a/build/content-helper/editor-sidebar.asset.php b/build/content-helper/editor-sidebar.asset.php index e53b9e47a..f9e7441f7 100644 --- a/build/content-helper/editor-sidebar.asset.php +++ b/build/content-helper/editor-sidebar.asset.php @@ -1 +1 @@ - array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => '7cda9ce01084868d6502'); + array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => 'a522b73f43053e03c73b'); diff --git a/build/content-helper/editor-sidebar.js b/build/content-helper/editor-sidebar.js index 2c7642ded..d93331f11 100644 --- a/build/content-helper/editor-sidebar.js +++ b/build/content-helper/editor-sidebar.js @@ -1,26 +1,26 @@ -!function(){"use strict";var e={251:function(e,t,n){var r=n(196),s=Symbol.for("react.element"),i=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,l=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,i={},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)&&!o.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:i,_owner:l.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},893:function(e,t,n){e.exports=n(251)},196:function(e){e.exports=window.React}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.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(){n.d({},{W:function(){return Xt}});var e,t,r,s=n(893),i=window.wp.components,a=window.wp.data,l=window.wp.editPost,o=window.wp.element,c=window.wp.i18n,u=n(196),p=window.wp.primitives,d=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{fillRule:"evenodd",d:"M11.25 5h1.5v15h-1.5V5zM6 10h1.5v10H6V10zm12 4h-1.5v6H18v-6z",clipRule:"evenodd"})),f=window.wp.plugins,g=function(){function e(){this._tkq=[],this.isLoaded=!1,this.isEnabled=!1,"undefined"!=typeof wpParselyTracksTelemetry&&(this.isEnabled=!0,this.loadTrackingLibrary())}return e.getInstance=function(){return window.wpParselyTelemetryInstance||Object.defineProperty(window,"wpParselyTelemetryInstance",{value:new e,writable:!1,configurable:!1,enumerable:!1}),window.wpParselyTelemetryInstance},e.prototype.loadTrackingLibrary=function(){var e=this,t=document.createElement("script");t.async=!0,t.src="//stats.wp.com/w.js",t.onload=function(){e.isLoaded=!0,e._tkq=window._tkq||[]},document.head.appendChild(t)},e.trackEvent=function(t){return n=this,r=arguments,i=function(t,n){var r;return void 0===n&&(n={}),function(e,t){var n,r,s,i,a={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(o){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,l[0]&&(a=0)),a;)try{if(n=1,r&&(s=2&l[0]?r.return:l[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,l[1])).done)return s;switch(r=0,s&&(l=[2&l[0],s.value]),l[0]){case 0:case 1:s=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!((s=(s=a.trys).length>0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]=1e4&&(clearInterval(i),n("Telemetry library not loaded"))}),100);else n("Telemetry not enabled")}))},e.prototype.trackEvent=function(t,n){var r;this.isLoaded?(0!==t.indexOf(e.TRACKS_PREFIX)&&(t=e.TRACKS_PREFIX+t),this.isEventNameValid(t)?(n=this.prepareProperties(n),null===(r=this._tkq)||void 0===r||r.push(["recordEvent",t,n])):console.error("Error tracking event: Invalid event name")):console.error("Error tracking event: Telemetry not loaded")},e.prototype.isTelemetryEnabled=function(){return this.isEnabled},e.prototype.isProprietyValid=function(t){return e.PROPERTY_REGEX.test(t)},e.prototype.isEventNameValid=function(t){return e.EVENT_NAME_REGEX.test(t)},e.prototype.prepareProperties=function(e){return(e=this.sanitizeProperties(e)).parsely_version=wpParselyTracksTelemetry.version,wpParselyTracksTelemetry.user&&(e._ut=wpParselyTracksTelemetry.user.type,e._ui=wpParselyTracksTelemetry.user.id),wpParselyTracksTelemetry.vipgo_env&&(e.vipgo_env=wpParselyTracksTelemetry.vipgo_env),this.sanitizeProperties(e)},e.prototype.sanitizeProperties=function(e){var t=this,n={};return Object.keys(e).forEach((function(r){t.isProprietyValid(r)&&(n[r]=e[r])})),n},e.TRACKS_PREFIX="wpparsely_",e.EVENT_NAME_REGEX=/^(([a-z0-9]+)_){2}([a-z0-9_]+)$/,e.PROPERTY_REGEX=/^[a-z_][a-z0-9_]*$/,e}(),h=(g.trackEvent,function(){return(0,s.jsx)(i.SVG,{"aria-hidden":"true",version:"1.1",viewBox:"0 0 15 15",width:"15",height:"15",xmlns:"http://www.w3.org/2000/svg",children:(0,s.jsx)(i.Path,{d:"M0 14.0025V11.0025L7.5 3.5025L10.5 6.5025L3 14.0025H0ZM12 5.0025L13.56 3.4425C14.15 2.8525 14.15 1.9025 13.56 1.3225L12.68 0.4425C12.09 -0.1475 11.14 -0.1475 10.56 0.4425L9 2.0025L12 5.0025Z"})})}),y=function(e){var t=e.size,n=void 0===t?24:t,r=e.className,a=void 0===r?"wp-parsely-icon":r;return(0,s.jsxs)(i.SVG,{className:a,height:n,viewBox:"0 0 60 65",width:n,xmlns:"http://www.w3.org/2000/svg",children:[(0,s.jsx)(i.Path,{fill:"#5ba745",d:"M23.72,51.53c0-.18,0-.34-.06-.52a13.11,13.11,0,0,0-2.1-5.53A14.74,14.74,0,0,0,19.12,43c-.27-.21-.5-.11-.51.22l-.24,3.42c0,.33-.38.35-.49,0l-1.5-4.8a1.4,1.4,0,0,0-.77-.78,23.91,23.91,0,0,0-3.1-.84c-1.38-.24-3.39-.39-3.39-.39-.34,0-.45.21-.25.49l2.06,3.76c.2.27,0,.54-.29.33l-4.51-3.6a3.68,3.68,0,0,0-2.86-.48c-1,.16-2.44.46-2.44.46a.68.68,0,0,0-.39.25.73.73,0,0,0-.14.45S.41,43,.54,44a3.63,3.63,0,0,0,1.25,2.62L6.48,50c.28.2.09.49-.23.37l-4.18-.94c-.32-.12-.5,0-.4.37,0,0,.69,1.89,1.31,3.16a24,24,0,0,0,1.66,2.74,1.34,1.34,0,0,0,1,.52l5,.13c.33,0,.41.38.1.48L7.51,58c-.31.1-.34.35-.07.55a14.29,14.29,0,0,0,3.05,1.66,13.09,13.09,0,0,0,5.9.5,25.13,25.13,0,0,0,4.34-1,9.55,9.55,0,0,1-.08-1.2,9.32,9.32,0,0,1,3.07-6.91"}),(0,s.jsx)(i.Path,{fill:"#5ba745",d:"M59.7,41.53a.73.73,0,0,0-.14-.45.68.68,0,0,0-.39-.25s-1.43-.3-2.44-.46a3.64,3.64,0,0,0-2.86.48l-4.51,3.6c-.26.21-.49-.06-.29-.33l2.06-3.76c.2-.28.09-.49-.25-.49,0,0-2,.15-3.39.39a23.91,23.91,0,0,0-3.1.84,1.4,1.4,0,0,0-.77.78l-1.5,4.8c-.11.32-.48.3-.49,0l-.24-3.42c0-.33-.24-.43-.51-.22a14.74,14.74,0,0,0-2.44,2.47A13.11,13.11,0,0,0,36.34,51c0,.18,0,.34-.06.52a9.26,9.26,0,0,1,3,8.1,24.1,24.1,0,0,0,4.34,1,13.09,13.09,0,0,0,5.9-.5,14.29,14.29,0,0,0,3.05-1.66c.27-.2.24-.45-.07-.55l-3.22-1.17c-.31-.1-.23-.47.1-.48l5-.13a1.38,1.38,0,0,0,1-.52A24.6,24.6,0,0,0,57,52.92c.61-1.27,1.31-3.16,1.31-3.16.1-.33-.08-.49-.4-.37l-4.18.94c-.32.12-.51-.17-.23-.37l4.69-3.34A3.63,3.63,0,0,0,59.46,44c.13-1,.24-2.47.24-2.47"}),(0,s.jsx)(i.Path,{fill:"#5ba745",d:"M46.5,25.61c0-.53-.35-.72-.8-.43l-4.86,2.66c-.45.28-.56-.27-.23-.69l4.66-6.23a2,2,0,0,0,.28-1.68,36.51,36.51,0,0,0-2.19-4.89,34,34,0,0,0-2.81-3.94c-.33-.41-.74-.35-.91.16l-2.28,5.68c-.16.5-.6.48-.59-.05l.28-8.93a2.54,2.54,0,0,0-.66-1.64S35,4.27,33.88,3.27,30.78.69,30.78.69a1.29,1.29,0,0,0-1.54,0s-1.88,1.49-3.12,2.59-2.48,2.35-2.48,2.35A2.5,2.5,0,0,0,23,7.27l.27,8.93c0,.53-.41.55-.58.05l-2.29-5.69c-.17-.5-.57-.56-.91-.14a35.77,35.77,0,0,0-3,4.2,35.55,35.55,0,0,0-2,4.62,2,2,0,0,0,.27,1.67l4.67,6.24c.33.42.23,1-.22.69l-4.87-2.66c-.45-.29-.82-.1-.82.43a18.6,18.6,0,0,0,.83,5.07,20.16,20.16,0,0,0,5.37,7.77c3.19,3,5.93,7.8,7.45,11.08A9.6,9.6,0,0,1,30,49.09a9.31,9.31,0,0,1,2.86.45c1.52-3.28,4.26-8.11,7.44-11.09a20.46,20.46,0,0,0,5.09-7,19,19,0,0,0,1.11-5.82"}),(0,s.jsx)(i.Path,{fill:"#5ba745",d:"M36.12,58.44A6.12,6.12,0,1,1,30,52.32a6.11,6.11,0,0,1,6.12,6.12"})]})},v=function(){return v=Object.assign||function(e){for(var t,n=1,r=arguments.length;nhere.',"wp-parsely"):i.code===A.ParselySuggestionsApiOpenAiError||i.code===A.ParselySuggestionsApiOpenAiUnavailable?i.message=(0,c.__)("The Parse.ly API returned an internal server error. Please retry with a different input, or try again later.","wp-parsely"):i.code===A.HttpRequestFailed&&i.message.includes("cURL error 28")?i.message=(0,c.__)("The Parse.ly API did not respond in a timely manner. Please try again later.","wp-parsely"):i.code===A.ParselySuggestionsApiSchemaError?i.message=(0,c.__)("The Parse.ly API returned a validation error. Please try again with different parameters.","wp-parsely"):i.code===A.ParselySuggestionsApiNoData?i.message=(0,c.__)("The Parse.ly API couldn't find any relevant data to fulfill the request. Please retry with a different input.","wp-parsely"):i.code===A.ParselySuggestionsApiOpenAiSchema?i.message=(0,c.__)("The Parse.ly API returned an incorrect response. Please try again later.","wp-parsely"):i.code===A.ParselySuggestionsApiAuthUnavailable&&(i.message=(0,c.__)("The Parse.ly API is currently unavailable. Please try again later.","wp-parsely")),i}return G(t,e),t.prototype.Message=function(e){return void 0===e&&(e=null),[A.PluginCredentialsNotSetMessageDetected,A.PluginSettingsSiteIdNotSet,A.PluginSettingsApiSecretNotSet].includes(this.code)?B(e):(this.code===A.FetchError&&(this.hint=this.Hint((0,c.__)("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!==A.ParselyApiForbidden&&this.code!==A.ParselySuggestionsApiNoAuthentication||(this.hint=this.Hint((0,c.__)("Please ensure that the Site ID and API Secret given in the plugin's settings are correct.","wp-parsely"))),this.code===A.HttpRequestFailed&&(this.hint=this.Hint((0,c.__)("The Parse.ly API cannot be reached. Please verify that you are online.","wp-parsely"))),(0,s.jsx)(I,{className:null==e?void 0:e.className,testId:"error",children:"

".concat(this.message,"

").concat(this.hint?this.hint:"")}))},t.prototype.Hint=function(e){return'

'.concat((0,c.__)("Hint:","wp-parsely")," ").concat(e,"

")},t}(Error);function z(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var W,U=function(e){var t=e.value,n=e.onChange,r=e.max,a=e.min,l=e.suffix,o=e.size,c=e.label,u=e.initialPosition,p=e.disabled,d=e.className;return(0,s.jsxs)("div",{className:"parsely-inputrange-control ".concat(d||""),children:[(0,s.jsx)(i.__experimentalHeading,{className:"parsely-inputrange-control__label",level:3,children:c}),(0,s.jsxs)("div",{className:"parsely-inputrange-control__controls",children:[(0,s.jsx)(i.__experimentalNumberControl,{disabled:p,value:t,suffix:(0,s.jsx)(i.__experimentalInputControlSuffixWrapper,{children:l}),size:null!=o?o:"__unstable-large",min:a,max:r,onChange:function(e){var t=parseInt(e,10);isNaN(t)||n(t)}}),(0,s.jsx)(i.RangeControl,{disabled:p,value:t,showTooltip:!1,initialPosition:u,onChange:function(e){n(e)},withInputField:!1,min:a,max:r})]})]})},$=function(){return $=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0)){var e={maxLinksPerPost:p.SmartLinking.MaxLinks,maxLinkWords:p.SmartLinking.MaxLinkWords};H(e)}}),[H,p]);var se=(0,a.useSelect)((function(e){var t=e("core/block-editor"),r=t.getSelectedBlock,s=t.getBlock,i=t.getBlocks,a=e("core/editor"),l=a.getEditedPostContent,o=a.getCurrentPostAttribute;return{allBlocks:i(),selectedBlock:n?s(n):r(),postContent:l(),postPermalink:o("link")}}),[n]),ie=se.allBlocks,ae=se.selectedBlock,le=se.postContent,oe=se.postPermalink,ce=function(e){return te(void 0,void 0,void 0,(function(){var t,n,r,s;return ne(this,(function(i){switch(i.label){case 0:t=[],i.label=1;case 1:return i.trys.push([1,4,,9]),[4,U((n=b||!ae)?W.All:W.Selected)];case 2:return i.sent(),a=oe.replace(/^https?:\/\//i,""),r=["http://"+a,"https://"+a],[4,J.generateSmartLinks((null==ae?void 0:ae.originalContent)&&!n?ae.originalContent:le,T,j,r)];case 3:return t=i.sent(),[3,9];case 4:if((s=i.sent()).code&&s.code===A.ParselyAborted)throw s.numRetries=3-e,s;return e>0&&s.retryFetch?(console.error(s),[4,q(!0)]):[3,8];case 5:return i.sent(),[4,X()];case 6:return i.sent(),[4,ce(e-1)];case 7:return[2,i.sent()];case 8:throw s;case 9:return[4,M(t)];case 10:return i.sent(),[2,t]}var a}))}))},ue=function(e,t,n,r){var s=oe.replace(/^https?:\/\//,"").replace(/\/+$/,"");t=t.filter((function(e){return!e.href.includes(s)||(console.warn("PCH Smart Linking: Skipping self-reference link: ".concat(e.href)),!1)})),e.forEach((function(e){var s=!1;if(e.innerBlocks&&e.innerBlocks.length)ue(e.innerBlocks,t,n,r);else if(e.originalContent){var i=e.originalContent,a=(new DOMParser).parseFromString(i,"text/html").body.firstChild;a&&a instanceof HTMLElement&&(t.forEach((function(e){var t=function(e,t){for(var n,r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:function(n){var r;if(!n.textContent||!n.textContent.includes(t))return NodeFilter.FILTER_REJECT;for(var s=n.parentNode;s&&s!==e;){if("A"===s.nodeName&&!(null===(r=s.textContent)||void 0===r?void 0:r.includes(t)))return NodeFilter.FILTER_REJECT;s=s.parentNode}return NodeFilter.FILTER_ACCEPT}}),s=[];n=r.nextNode();)s.push(n);return s}(a,e.text),r="".concat(e.text,"#").concat(e.offset);n[r]||(n[r]={encountered:0,linked:0}),t.forEach((function(t){var i;if(t.textContent){var a=n[r];if(a.linked>=1)return;for(var l=new RegExp(z(e.text),"g"),o=void 0;null!==(o=l.exec(t.textContent));)if(a.encountered++,a.encountered===e.offset+1){var c=document.createElement("a");c.href=e.href,c.title=e.title,c.textContent=o[0];var u=document.createRange();if(u.setStart(t,o.index),u.setEnd(t,o.index+o[0].length),u.deleteContents(),u.insertNode(c),t.textContent&&o.index+o[0].length[type="button"]').forEach((function(e){e.setAttribute("disabled","disabled")}))},he=function(){document.querySelectorAll('.edit-post-header__settings>[type="button"]').forEach((function(e){e.removeAttribute("disabled")})),(0,a.dispatch)("core/editor").unlockPostSaving("wp-parsely-block-overlay")};return(0,s.jsx)("div",{className:"wp-parsely-smart-linking",children:(0,s.jsxs)(i.PanelRow,{className:t,children:[(0,s.jsxs)("div",{className:"smart-linking-text",children:[(0,c.__)("Automatically insert links to your most relevant, top performing content.","wp-parsely"),(0,s.jsxs)(i.Button,{href:"https://docs.parse.ly/plugin-content-helper/#h-smart-linking-beta",target:"_blank",variant:"link",children:[(0,c.__)("Learn more about Parse.ly AI","wp-parsely"),(0,s.jsx)(D,{icon:F,size:18,className:"parsely-external-link-icon"})]})]}),P&&(0,s.jsx)(i.Notice,{status:"info",onRemove:function(){return B(null)},className:"wp-parsely-content-helper-error",children:P.Message()}),null!==S&&(0,s.jsx)(i.Notice,{status:"success",onRemove:function(){return M(null)},className:"wp-parsely-smart-linking-suggested-links",children:(0,c.sprintf)(/* translators: 1 - number of smart links generated */ -(0,c.__)("Successfully added %s smart links.","wp-parsely"),y>0?y:S.length)}),(0,s.jsx)(Q,{disabled:_,selectedBlock:null==ae?void 0:ae.clientId,onSettingChange:function(e,t){var n;f({SmartLinking:ee(ee({},p.SmartLinking),(n={},n[e]=t,n))}),"MaxLinks"===e?Z(t):"MaxLinkWords"===e&&$(t)}}),(0,s.jsx)("div",{className:"smart-linking-generate",children:(0,s.jsx)(i.Button,{onClick:function(){return te(void 0,void 0,void 0,(function(){var e,t,n,r,s;return ne(this,(function(i){switch(i.label){case 0:return[4,I(!0)];case 1:return i.sent(),[4,M(null)];case 2:return i.sent(),[4,B(null)];case 3:return i.sent(),g.trackEvent("smart_linking_generate_pressed",{is_full_content:b,selected_block:null!==(s=null==ae?void 0:ae.name)&&void 0!==s?s:"none",context:l}),[4,de(b?"all":null==ae?void 0:ae.clientId)];case 4:i.sent(),e=setTimeout((function(){var e;I(!1),g.trackEvent("smart_linking_generate_timeout",{is_full_content:b,selected_block:null!==(e=null==ae?void 0:ae.name)&&void 0!==e?e:"none",context:l}),fe(b?"all":null==ae?void 0:ae.clientId)}),18e4),t=C,i.label=5;case 5:return i.trys.push([5,7,9,14]),[4,ce(3)];case 6:return function(e){var t;g.trackEvent("smart_linking_applied",{is_full_content:b||!ae,selected_block:null!==(t=null==ae?void 0:ae.name)&&void 0!==t?t:"none",links_count:e.length,context:l});var n={},r=[];ue(ae&&!b?[ae]:ie,e,n,r),pe(r);var s=Object.values(n).reduce((function(e,t){return e+t.linked}),0);v(s),m("success",/* translators: %d: number of smart links applied */ -(0,c.sprintf)((0,c.__)("%s smart links successfully applied.","wp-parsely"),s),{type:"snackbar"})}(i.sent()),[3,14];case 7:return n=i.sent(),r=(0,c.__)("There was a problem applying smart links.","wp-parsely"),n.code&&n.code===A.ParselyAborted&&(r=(0,c.sprintf)(/* translators: %d: number of retry attempts, %s: attempt plural */ -(0,c.__)("The Smart Linking process was cancelled after %1$d %2$s.","wp-parsely"),n.numRetries,(0,c._n)("attempt","attempts",n.numRetries,"wp-parsely")),n.message=r),[4,B(n)];case 8:return i.sent(),m("error",r,{type:"snackbar"}),[3,14];case 9:return[4,I(!1)];case 10:return i.sent(),[4,U(t)];case 11:return i.sent(),[4,q(!1)];case 12:return i.sent(),[4,fe(b?"all":null==ae?void 0:ae.clientId)];case 13:return i.sent(),clearTimeout(e),[7];case 14:return[2]}}))}))},variant:"primary",isBusy:_,disabled:_,children:L?(0,c.sprintf)(/* translators: %1$d: number of retry attempts, %2$d: maximum number of retries */ -(0,c.__)("Retrying… Attempt %1$d of %2$d","wp-parsely"),N,3):_?(0,c.__)("Adding Smart Links…","wp-parsely"):(0,c.__)("Add Smart Links","wp-parsely")})})]})})},ie=function(){return ie=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=c){var u=t;(s=r/c)%1>1/l&&(u=s>10?1:2),u=parseFloat(s.toFixed(2))===parseFloat(s.toFixed(0))?0:u,i=s.toFixed(u),a=o}l=c})),i+n+a}var we=function(e){var n=e.data,r=e.isLoading,a=(0,o.useState)(t.Views),l=a[0],u=a[1],p=(0,o.useState)(!1),d=p[0],f=p[1];r||delete n.referrers.types.totals;var g=function(e){switch(e){case"social":return(0,c.__)("Social","wp-parsely");case"search":return(0,c.__)("Search","wp-parsely");case"other":return(0,c.__)("Other","wp-parsely");case"internal":return(0,c.__)("Internal","wp-parsely");case"direct":return(0,c.__)("Direct","wp-parsely")}return e},h=(0,c.sprintf)((0,c.__)("By %s","wp-parsely"),C(l)); -/* translators: %s: metric description */return(0,s.jsxs)(ve,{title:(0,c.__)("Categories","wp-parsely"),level:3,subtitle:h,isOpen:d,onClick:function(){return f(!d)},children:[d&&(0,s.jsx)("div",{className:"panel-settings",children:(0,s.jsx)(i.SelectControl,{value:l,prefix:(0,c.__)("By: ","wp-parsely"),onChange:function(e){T(e,t)&&u(e)},children:Object.values(t).map((function(e){return(0,s.jsxs)("option",{value:e,disabled:"avg_engaged"===e,children:[C(e),"avg_engaged"===e&&(0,c.__)(" (coming soon)","wp-parsely")]},e)}))})}),r?(0,s.jsx)("div",{className:"parsely-spinner-wrapper","data-testid":"parsely-spinner-wrapper",children:(0,s.jsx)(i.Spinner,{})}):(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"multi-percentage-bar",children:Object.entries(n.referrers.types).map((function(e){var t=e[0],n=e[1],r=(0,c.sprintf)(/* translators: 1: Referrer type, 2: Percentage value, %%: Escaped percent sign */ -(0,c.__)("%1$s: %2$s%%","wp-parsely"),g(t),n.viewsPercentage);return(0,s.jsx)(i.Tooltip +!function(){"use strict";var e={251:function(e,t,n){var r=n(196),i=Symbol.for("react.element"),s=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,o=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,s={},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)&&!l.hasOwnProperty(r)&&(s[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===s[r]&&(s[r]=t[r]);return{$$typeof:i,type:e,key:c,ref:u,props:s,_owner:o.current}}t.Fragment=s,t.jsx=c,t.jsxs=c},893:function(e,t,n){e.exports=n(251)},196:function(e){e.exports=window.React}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,n),s.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(){n.d({},{W:function(){return rn}});var e,t,r,i=n(893),s=window.wp.components,a=window.wp.data,o=window.wp.editPost,l=window.wp.element,c=window.wp.i18n,u=n(196),p=window.wp.primitives,d=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{fillRule:"evenodd",d:"M11.25 5h1.5v15h-1.5V5zM6 10h1.5v10H6V10zm12 4h-1.5v6H18v-6z",clipRule:"evenodd"})),f=window.wp.plugins,h=function(){function e(){this._tkq=[],this.isLoaded=!1,this.isEnabled=!1,"undefined"!=typeof wpParselyTracksTelemetry&&(this.isEnabled=!0,this.loadTrackingLibrary())}return e.getInstance=function(){return window.wpParselyTelemetryInstance||Object.defineProperty(window,"wpParselyTelemetryInstance",{value:new e,writable:!1,configurable:!1,enumerable:!1}),window.wpParselyTelemetryInstance},e.prototype.loadTrackingLibrary=function(){var e=this,t=document.createElement("script");t.async=!0,t.src="//stats.wp.com/w.js",t.onload=function(){e.isLoaded=!0,e._tkq=window._tkq||[]},document.head.appendChild(t)},e.trackEvent=function(t){return n=this,r=arguments,s=function(t,n){var r;return void 0===n&&(n={}),function(e,t){var n,r,i,s,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return s={next:o(0),throw:o(1),return:o(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function o(o){return function(l){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s&&(s=0,o[0]&&(a=0)),a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=1e4&&(clearInterval(s),n("Telemetry library not loaded"))}),100);else n("Telemetry not enabled")}))},e.prototype.trackEvent=function(t,n){var r;this.isLoaded?(0!==t.indexOf(e.TRACKS_PREFIX)&&(t=e.TRACKS_PREFIX+t),this.isEventNameValid(t)?(n=this.prepareProperties(n),null===(r=this._tkq)||void 0===r||r.push(["recordEvent",t,n])):console.error("Error tracking event: Invalid event name")):console.error("Error tracking event: Telemetry not loaded")},e.prototype.isTelemetryEnabled=function(){return this.isEnabled},e.prototype.isProprietyValid=function(t){return e.PROPERTY_REGEX.test(t)},e.prototype.isEventNameValid=function(t){return e.EVENT_NAME_REGEX.test(t)},e.prototype.prepareProperties=function(e){return(e=this.sanitizeProperties(e)).parsely_version=wpParselyTracksTelemetry.version,wpParselyTracksTelemetry.user&&(e._ut=wpParselyTracksTelemetry.user.type,e._ui=wpParselyTracksTelemetry.user.id),wpParselyTracksTelemetry.vipgo_env&&(e.vipgo_env=wpParselyTracksTelemetry.vipgo_env),this.sanitizeProperties(e)},e.prototype.sanitizeProperties=function(e){var t=this,n={};return Object.keys(e).forEach((function(r){t.isProprietyValid(r)&&(n[r]=e[r])})),n},e.TRACKS_PREFIX="wpparsely_",e.EVENT_NAME_REGEX=/^(([a-z0-9]+)_){2}([a-z0-9_]+)$/,e.PROPERTY_REGEX=/^[a-z_][a-z0-9_]*$/,e}(),g=(h.trackEvent,function(){return(0,i.jsx)(s.SVG,{"aria-hidden":"true",version:"1.1",viewBox:"0 0 15 15",width:"15",height:"15",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)(s.Path,{d:"M0 14.0025V11.0025L7.5 3.5025L10.5 6.5025L3 14.0025H0ZM12 5.0025L13.56 3.4425C14.15 2.8525 14.15 1.9025 13.56 1.3225L12.68 0.4425C12.09 -0.1475 11.14 -0.1475 10.56 0.4425L9 2.0025L12 5.0025Z"})})}),y=function(e){var t=e.size,n=void 0===t?24:t,r=e.className,a=void 0===r?"wp-parsely-icon":r;return(0,i.jsxs)(s.SVG,{className:a,height:n,viewBox:"0 0 60 65",width:n,xmlns:"http://www.w3.org/2000/svg",children:[(0,i.jsx)(s.Path,{fill:"#5ba745",d:"M23.72,51.53c0-.18,0-.34-.06-.52a13.11,13.11,0,0,0-2.1-5.53A14.74,14.74,0,0,0,19.12,43c-.27-.21-.5-.11-.51.22l-.24,3.42c0,.33-.38.35-.49,0l-1.5-4.8a1.4,1.4,0,0,0-.77-.78,23.91,23.91,0,0,0-3.1-.84c-1.38-.24-3.39-.39-3.39-.39-.34,0-.45.21-.25.49l2.06,3.76c.2.27,0,.54-.29.33l-4.51-3.6a3.68,3.68,0,0,0-2.86-.48c-1,.16-2.44.46-2.44.46a.68.68,0,0,0-.39.25.73.73,0,0,0-.14.45S.41,43,.54,44a3.63,3.63,0,0,0,1.25,2.62L6.48,50c.28.2.09.49-.23.37l-4.18-.94c-.32-.12-.5,0-.4.37,0,0,.69,1.89,1.31,3.16a24,24,0,0,0,1.66,2.74,1.34,1.34,0,0,0,1,.52l5,.13c.33,0,.41.38.1.48L7.51,58c-.31.1-.34.35-.07.55a14.29,14.29,0,0,0,3.05,1.66,13.09,13.09,0,0,0,5.9.5,25.13,25.13,0,0,0,4.34-1,9.55,9.55,0,0,1-.08-1.2,9.32,9.32,0,0,1,3.07-6.91"}),(0,i.jsx)(s.Path,{fill:"#5ba745",d:"M59.7,41.53a.73.73,0,0,0-.14-.45.68.68,0,0,0-.39-.25s-1.43-.3-2.44-.46a3.64,3.64,0,0,0-2.86.48l-4.51,3.6c-.26.21-.49-.06-.29-.33l2.06-3.76c.2-.28.09-.49-.25-.49,0,0-2,.15-3.39.39a23.91,23.91,0,0,0-3.1.84,1.4,1.4,0,0,0-.77.78l-1.5,4.8c-.11.32-.48.3-.49,0l-.24-3.42c0-.33-.24-.43-.51-.22a14.74,14.74,0,0,0-2.44,2.47A13.11,13.11,0,0,0,36.34,51c0,.18,0,.34-.06.52a9.26,9.26,0,0,1,3,8.1,24.1,24.1,0,0,0,4.34,1,13.09,13.09,0,0,0,5.9-.5,14.29,14.29,0,0,0,3.05-1.66c.27-.2.24-.45-.07-.55l-3.22-1.17c-.31-.1-.23-.47.1-.48l5-.13a1.38,1.38,0,0,0,1-.52A24.6,24.6,0,0,0,57,52.92c.61-1.27,1.31-3.16,1.31-3.16.1-.33-.08-.49-.4-.37l-4.18.94c-.32.12-.51-.17-.23-.37l4.69-3.34A3.63,3.63,0,0,0,59.46,44c.13-1,.24-2.47.24-2.47"}),(0,i.jsx)(s.Path,{fill:"#5ba745",d:"M46.5,25.61c0-.53-.35-.72-.8-.43l-4.86,2.66c-.45.28-.56-.27-.23-.69l4.66-6.23a2,2,0,0,0,.28-1.68,36.51,36.51,0,0,0-2.19-4.89,34,34,0,0,0-2.81-3.94c-.33-.41-.74-.35-.91.16l-2.28,5.68c-.16.5-.6.48-.59-.05l.28-8.93a2.54,2.54,0,0,0-.66-1.64S35,4.27,33.88,3.27,30.78.69,30.78.69a1.29,1.29,0,0,0-1.54,0s-1.88,1.49-3.12,2.59-2.48,2.35-2.48,2.35A2.5,2.5,0,0,0,23,7.27l.27,8.93c0,.53-.41.55-.58.05l-2.29-5.69c-.17-.5-.57-.56-.91-.14a35.77,35.77,0,0,0-3,4.2,35.55,35.55,0,0,0-2,4.62,2,2,0,0,0,.27,1.67l4.67,6.24c.33.42.23,1-.22.69l-4.87-2.66c-.45-.29-.82-.1-.82.43a18.6,18.6,0,0,0,.83,5.07,20.16,20.16,0,0,0,5.37,7.77c3.19,3,5.93,7.8,7.45,11.08A9.6,9.6,0,0,1,30,49.09a9.31,9.31,0,0,1,2.86.45c1.52-3.28,4.26-8.11,7.44-11.09a20.46,20.46,0,0,0,5.09-7,19,19,0,0,0,1.11-5.82"}),(0,i.jsx)(s.Path,{fill:"#5ba745",d:"M36.12,58.44A6.12,6.12,0,1,1,30,52.32a6.11,6.11,0,0,1,6.12,6.12"})]})},v=function(){return v=Object.assign||function(e){for(var t,n=1,r=arguments.length;nhere.',"wp-parsely"):s.code===A.ParselySuggestionsApiOpenAiError||s.code===A.ParselySuggestionsApiOpenAiUnavailable?s.message=(0,c.__)("The Parse.ly API returned an internal server error. Please retry with a different input, or try again later.","wp-parsely"):s.code===A.HttpRequestFailed&&s.message.includes("cURL error 28")?s.message=(0,c.__)("The Parse.ly API did not respond in a timely manner. Please try again later.","wp-parsely"):s.code===A.ParselySuggestionsApiSchemaError?s.message=(0,c.__)("The Parse.ly API returned a validation error. Please try again with different parameters.","wp-parsely"):s.code===A.ParselySuggestionsApiNoData?s.message=(0,c.__)("The Parse.ly API couldn't find any relevant data to fulfill the request. Please retry with a different input.","wp-parsely"):s.code===A.ParselySuggestionsApiOpenAiSchema?s.message=(0,c.__)("The Parse.ly API returned an incorrect response. Please try again later.","wp-parsely"):s.code===A.ParselySuggestionsApiAuthUnavailable&&(s.message=(0,c.__)("The Parse.ly API is currently unavailable. Please try again later.","wp-parsely")),s}return G(t,e),t.prototype.Message=function(e){return void 0===e&&(e=null),[A.PluginCredentialsNotSetMessageDetected,A.PluginSettingsSiteIdNotSet,A.PluginSettingsApiSecretNotSet].includes(this.code)?B(e):(this.code===A.FetchError&&(this.hint=this.Hint((0,c.__)("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!==A.ParselyApiForbidden&&this.code!==A.ParselySuggestionsApiNoAuthentication||(this.hint=this.Hint((0,c.__)("Please ensure that the Site ID and API Secret given in the plugin's settings are correct.","wp-parsely"))),this.code===A.HttpRequestFailed&&(this.hint=this.Hint((0,c.__)("The Parse.ly API cannot be reached. Please verify that you are online.","wp-parsely"))),(0,i.jsx)(I,{className:null==e?void 0:e.className,testId:"error",children:"

".concat(this.message,"

").concat(this.hint?this.hint:"")}))},t.prototype.Hint=function(e){return'

'.concat((0,c.__)("Hint:","wp-parsely")," ").concat(e,"

")},t}(Error);function z(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var W,U=function(e){var t=e.value,n=e.onChange,r=e.max,a=e.min,o=e.suffix,l=e.size,c=e.label,u=e.initialPosition,p=e.disabled,d=e.className;return(0,i.jsxs)("div",{className:"parsely-inputrange-control ".concat(d||""),children:[(0,i.jsx)(s.__experimentalHeading,{className:"parsely-inputrange-control__label",level:3,children:c}),(0,i.jsxs)("div",{className:"parsely-inputrange-control__controls",children:[(0,i.jsx)(s.__experimentalNumberControl,{disabled:p,value:t,suffix:(0,i.jsx)(s.__experimentalInputControlSuffixWrapper,{children:o}),size:null!=l?l:"__unstable-large",min:a,max:r,onChange:function(e){var t=parseInt(e,10);isNaN(t)||n(t)}}),(0,i.jsx)(s.RangeControl,{disabled:p,value:t,showTooltip:!1,initialPosition:u,onChange:function(e){n(e)},withInputField:!1,min:a,max:r})]})]})},$=function(){return $=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)){var e={maxLinksPerPost:p.SmartLinking.MaxLinks,maxLinkWords:p.SmartLinking.MaxLinkWords};H(e)}}),[H,p]);var J=(0,a.useSelect)((function(e){var t=e("core/block-editor"),r=t.getSelectedBlock,i=t.getBlock,s=t.getBlocks,a=e("core/editor"),o=a.getEditedPostContent,l=a.getCurrentPostAttribute;return{allBlocks:s(),selectedBlock:n?i(n):r(),postContent:o(),postPermalink:l("link")}}),[n]),ee=J.allBlocks,ae=J.selectedBlock,oe=J.postContent,le=J.postPermalink,ce=function(e){return re(void 0,void 0,void 0,(function(){var t,n,r,i;return ie(this,(function(s){switch(s.label){case 0:t=[],s.label=1;case 1:return s.trys.push([1,4,,9]),[4,U((n=b||!ae)?W.All:W.Selected)];case 2:return s.sent(),a=le.replace(/^https?:\/\//i,""),r=["http://"+a,"https://"+a],[4,te.getInstance().generateSmartLinks((null==ae?void 0:ae.originalContent)&&!n?ae.originalContent:oe,T,j,r)];case 3:return t=s.sent(),[3,9];case 4:if((i=s.sent()).code&&i.code===A.ParselyAborted)throw i.numRetries=3-e,i;return e>0&&i.retryFetch?(console.error(i),[4,q(!0)]):[3,8];case 5:return s.sent(),[4,X()];case 6:return s.sent(),[4,ce(e-1)];case 7:return[2,s.sent()];case 8:throw i;case 9:return[4,M(t)];case 10:return s.sent(),[2,t]}var a}))}))},ue=function(e,t,n,r){var i=le.replace(/^https?:\/\//,"").replace(/\/+$/,"");t=t.filter((function(e){return!e.href.includes(i)||(console.warn("PCH Smart Linking: Skipping self-reference link: ".concat(e.href)),!1)})),e.forEach((function(e){var i=!1;if(e.innerBlocks&&e.innerBlocks.length)ue(e.innerBlocks,t,n,r);else if(e.originalContent){var s=e.originalContent,a=(new DOMParser).parseFromString(s,"text/html").body.firstChild;a&&a instanceof HTMLElement&&(t.forEach((function(e){var t=function(e,t){for(var n,r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:function(n){var r;if(!n.textContent||!n.textContent.includes(t))return NodeFilter.FILTER_REJECT;for(var i=n.parentNode;i&&i!==e;){if("A"===i.nodeName&&!(null===(r=i.textContent)||void 0===r?void 0:r.includes(t)))return NodeFilter.FILTER_REJECT;i=i.parentNode}return NodeFilter.FILTER_ACCEPT}}),i=[];n=r.nextNode();)i.push(n);return i}(a,e.text),r="".concat(e.text,"#").concat(e.offset);n[r]||(n[r]={encountered:0,linked:0}),t.forEach((function(t){var s;if(t.textContent){var a=n[r];if(a.linked>=1)return;for(var o=new RegExp(z(e.text),"g"),l=void 0;null!==(l=o.exec(t.textContent));)if(a.encountered++,a.encountered===e.offset+1){var c=document.createElement("a");c.href=e.href,c.title=e.title,c.textContent=l[0];var u=document.createRange();if(u.setStart(t,l.index),u.setEnd(t,l.index+l[0].length),u.deleteContents(),u.insertNode(c),t.textContent&&l.index+l[0].length[type="button"]').forEach((function(e){e.setAttribute("disabled","disabled")}))},ge=function(){document.querySelectorAll('.edit-post-header__settings>[type="button"]').forEach((function(e){e.removeAttribute("disabled")})),(0,a.dispatch)("core/editor").unlockPostSaving("wp-parsely-block-overlay")};return(0,i.jsx)("div",{className:"wp-parsely-smart-linking",children:(0,i.jsxs)(s.PanelRow,{className:t,children:[(0,i.jsxs)("div",{className:"smart-linking-text",children:[(0,c.__)("Automatically insert links to your most relevant, top performing content.","wp-parsely"),(0,i.jsxs)(s.Button,{href:"https://docs.parse.ly/plugin-content-helper/#h-smart-linking-beta",target:"_blank",variant:"link",children:[(0,c.__)("Learn more about Parse.ly AI","wp-parsely"),(0,i.jsx)(D,{icon:F,size:18,className:"parsely-external-link-icon"})]})]}),P&&(0,i.jsx)(s.Notice,{status:"info",onRemove:function(){return B(null)},className:"wp-parsely-content-helper-error",children:P.Message()}),null!==S&&(0,i.jsx)(s.Notice,{status:"success",onRemove:function(){return M(null)},className:"wp-parsely-smart-linking-suggested-links",children:(0,c.sprintf)(/* translators: 1 - number of smart links generated */ +(0,c.__)("Successfully added %s smart links.","wp-parsely"),y>0?y:S.length)}),(0,i.jsx)(Q,{disabled:_,selectedBlock:null==ae?void 0:ae.clientId,onSettingChange:function(e,t){var n;f({SmartLinking:ne(ne({},p.SmartLinking),(n={},n[e]=t,n))}),"MaxLinks"===e?Z(t):"MaxLinkWords"===e&&$(t)}}),(0,i.jsx)("div",{className:"smart-linking-generate",children:(0,i.jsx)(s.Button,{onClick:function(){return re(void 0,void 0,void 0,(function(){var e,t,n,r,i;return ie(this,(function(s){switch(s.label){case 0:return[4,I(!0)];case 1:return s.sent(),[4,M(null)];case 2:return s.sent(),[4,B(null)];case 3:return s.sent(),h.trackEvent("smart_linking_generate_pressed",{is_full_content:b,selected_block:null!==(i=null==ae?void 0:ae.name)&&void 0!==i?i:"none",context:o}),[4,de(b?"all":null==ae?void 0:ae.clientId)];case 4:s.sent(),e=setTimeout((function(){var e;I(!1),h.trackEvent("smart_linking_generate_timeout",{is_full_content:b,selected_block:null!==(e=null==ae?void 0:ae.name)&&void 0!==e?e:"none",context:o}),fe(b?"all":null==ae?void 0:ae.clientId)}),18e4),t=C,s.label=5;case 5:return s.trys.push([5,7,9,14]),[4,ce(3)];case 6:return function(e){var t;h.trackEvent("smart_linking_applied",{is_full_content:b||!ae,selected_block:null!==(t=null==ae?void 0:ae.name)&&void 0!==t?t:"none",links_count:e.length,context:o});var n={},r=[];ue(ae&&!b?[ae]:ee,e,n,r),pe(r);var i=Object.values(n).reduce((function(e,t){return e+t.linked}),0);v(i),m("success",/* translators: %d: number of smart links applied */ +(0,c.sprintf)((0,c.__)("%s smart links successfully applied.","wp-parsely"),i),{type:"snackbar"})}(s.sent()),[3,14];case 7:return n=s.sent(),r=(0,c.__)("There was a problem applying smart links.","wp-parsely"),n.code&&n.code===A.ParselyAborted&&(r=(0,c.sprintf)(/* translators: %d: number of retry attempts, %s: attempt plural */ +(0,c.__)("The Smart Linking process was cancelled after %1$d %2$s.","wp-parsely"),n.numRetries,(0,c._n)("attempt","attempts",n.numRetries,"wp-parsely")),n.message=r),[4,B(n)];case 8:return s.sent(),m("error",r,{type:"snackbar"}),[3,14];case 9:return[4,I(!1)];case 10:return s.sent(),[4,U(t)];case 11:return s.sent(),[4,q(!1)];case 12:return s.sent(),[4,fe(b?"all":null==ae?void 0:ae.clientId)];case 13:return s.sent(),clearTimeout(e),[7];case 14:return[2]}}))}))},variant:"primary",isBusy:_,disabled:_,children:L?(0,c.sprintf)(/* translators: %1$d: number of retry attempts, %2$d: maximum number of retries */ +(0,c.__)("Retrying… Attempt %1$d of %2$d","wp-parsely"),N,3):_?(0,c.__)("Adding Smart Links…","wp-parsely"):(0,c.__)("Add Smart Links","wp-parsely")})})]})})},oe=function(){return oe=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=c){var u=t;(i=r/c)%1>1/o&&(u=i>10?1:2),u=parseFloat(i.toFixed(2))===parseFloat(i.toFixed(0))?0:u,s=i.toFixed(u),a=l}o=c})),s+n+a}var be=function(e){var n=e.data,r=e.isLoading,a=(0,l.useState)(t.Views),o=a[0],u=a[1],p=(0,l.useState)(!1),d=p[0],f=p[1];r||delete n.referrers.types.totals;var h=function(e){switch(e){case"social":return(0,c.__)("Social","wp-parsely");case"search":return(0,c.__)("Search","wp-parsely");case"other":return(0,c.__)("Other","wp-parsely");case"internal":return(0,c.__)("Internal","wp-parsely");case"direct":return(0,c.__)("Direct","wp-parsely")}return e},g=(0,c.sprintf)((0,c.__)("By %s","wp-parsely"),C(o)); +/* translators: %s: metric description */return(0,i.jsxs)(we,{title:(0,c.__)("Categories","wp-parsely"),level:3,subtitle:g,isOpen:d,onClick:function(){return f(!d)},children:[d&&(0,i.jsx)("div",{className:"panel-settings",children:(0,i.jsx)(s.SelectControl,{value:o,prefix:(0,c.__)("By: ","wp-parsely"),onChange:function(e){T(e,t)&&u(e)},children:Object.values(t).map((function(e){return(0,i.jsxs)("option",{value:e,disabled:"avg_engaged"===e,children:[C(e),"avg_engaged"===e&&(0,c.__)(" (coming soon)","wp-parsely")]},e)}))})}),r?(0,i.jsx)("div",{className:"parsely-spinner-wrapper","data-testid":"parsely-spinner-wrapper",children:(0,i.jsx)(s.Spinner,{})}):(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"multi-percentage-bar",children:Object.entries(n.referrers.types).map((function(e){var t=e[0],n=e[1],r=(0,c.sprintf)(/* translators: 1: Referrer type, 2: Percentage value, %%: Escaped percent sign */ +(0,c.__)("%1$s: %2$s%%","wp-parsely"),h(t),n.viewsPercentage);return(0,i.jsx)(s.Tooltip /* translators: %s: percentage value */,{ /* translators: %s: percentage value */ -text:"".concat(g(t)," - ").concat((0,c.sprintf)((0,c.__)("%s%%","wp-parsely"),n.viewsPercentage)),delay:150,children:(0,s.jsx)("div",{"aria-label":r,className:"bar-fill "+t,style:{width:n.viewsPercentage+"%"}})},t)}))}),(0,s.jsx)("div",{className:"percentage-bar-labels",children:Object.entries(n.referrers.types).map((function(e){var t=e[0],n=e[1];return(0,s.jsxs)("div",{className:"single-label "+t,children:[(0,s.jsx)("div",{className:"label-color "+t}),(0,s.jsx)("div",{className:"label-text",children:g(t)}),(0,s.jsx)("div",{className:"label-value",children:me(n.views)})]},t)}))})]})]})},_e=(0,u.createElement)(p.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,u.createElement)(p.Path,{d:"M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z"})),be=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})),xe=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"M12 4V2.2L9 4.8l3 2.5V5.5c3.6 0 6.5 2.9 6.5 6.5 0 2.9-1.9 5.3-4.5 6.2v.2l-.1-.2c-.4.1-.7.2-1.1.2l.2 1.5c.3 0 .6-.1 1-.2 3.5-.9 6-4 6-7.7 0-4.4-3.6-8-8-8zm-7.9 7l1.5.2c.1-1.2.5-2.3 1.2-3.2l-1.1-.9C4.8 8.2 4.3 9.6 4.1 11zm1.5 1.8l-1.5.2c.1.7.3 1.4.5 2 .3.7.6 1.3 1 1.8l1.2-.8c-.3-.5-.6-1-.8-1.5s-.4-1.1-.4-1.7zm1.5 5.5c1.1.9 2.4 1.4 3.8 1.6l.2-1.5c-1.1-.1-2.2-.5-3.1-1.2l-.9 1.1z"})),Pe=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"M11 13h2v-2h-2v2zm-6 0h2v-2H5v2zm12-2v2h2v-2h-2z"})),Se=function(){return Se=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]1?[2,Promise.reject(new H((0,c.sprintf)(/* translators: URL of the published post */ -(0,c.__)("Multiple results were returned for the post %s by the Parse.ly API.","wp-parsely"),t),A.ParselyApiReturnedTooManyResults))]:[2,n.data[0]]}}))}))},e.prototype.fetchReferrerDataFromWpEndpoint=function(e,t,n){return Ie(this,void 0,void 0,(function(){var r,s;return Be(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,x()({path:(0,X.addQueryArgs)("/wp-parsely/v1/referrers/post/detail",Re(Re({},Oe(e)),{itm_source:this.itmSource,total_views:n,url:t}))})];case 1:return r=i.sent(),[3,3];case 2:return s=i.sent(),[2,Promise.reject(new H(s.message,s.code))];case 3:return(null==r?void 0:r.error)?[2,Promise.reject(new H(r.error.message,A.ParselyApiResponseContainsError))]:[2,r.data]}}))}))},e}(),Ve=function(){return Ve=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0&&e.retryFetch?[4,new Promise((function(e){return setTimeout(e,500)}))]:[3,3];case 1:return n.sent(),[4,t(r-1)];case 2:return n.sent(),[3,4];case 3:d(e),l(!1),n.label=4;case 4:return[2]}}))}))})),[2]}))}))};return l(!0),t(1),function(){d(void 0)}}),[n]),(0,s.jsxs)("div",{className:"wp-parsely-performance-panel",children:[(0,s.jsx)(ve,{title:(0,c.__)("Performance Stats","wp-parsely"),icon:ye,dropdownChildren:function(e){var t=e.onClose;return(0,s.jsx)(We,{onClose:t})},children:(0,s.jsx)("div",{className:"panel-settings",children:(0,s.jsx)(i.SelectControl,{size:"__unstable-large",value:m.PerformanceStats.Period,prefix:(0,s.jsx)(i.__experimentalInputControlPrefixWrapper,{children:(0,c.__)("Period: ","wp-parsely")}),onChange:function(t){T(t,e)&&(w({PerformanceStats:Ve(Ve({},m.PerformanceStats),{Period:t})}),g.trackEvent("editor_sidebar_performance_period_changed",{period:t}))},children:Object.values(e).map((function(e){return(0,s.jsx)("option",{value:e,children:E(e)},e)}))})})}),p?p.Message():(0,s.jsxs)(s.Fragment,{children:[ze(m,"overview")&&(0,s.jsx)(Ae,{data:h,isLoading:a}),ze(m,"categories")&&(0,s.jsx)(we,{data:h,isLoading:a}),ze(m,"referrers")&&(0,s.jsx)(Ne,{data:h,isLoading:a})]}),window.wpParselyPostUrl&&(0,s.jsx)(i.Button,{className:"wp-parsely-view-post",variant:"primary",onClick:function(){g.trackEvent("editor_sidebar_view_post_pressed")},href:window.wpParselyPostUrl,rel:"noopener",target:"_blank",children:(0,c.__)("View this in Parse.ly","wp-parsely")})]})},$e=function(e){var t=e.period;return(0,s.jsx)(i.Panel,{children:(0,s.jsx)(V,{children:(0,s.jsx)(Ue,{period:t})})})},Ze=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(r=Object.getOwnPropertySymbols(e);s=1&&(0,s.jsx)(i.__experimentalToggleGroupControlOption,{value:r.Tag,label:(0,c.__)("Tag","wp-parsely")}),a.categories.length>=1&&(0,s.jsx)(i.__experimentalToggleGroupControlOption,{value:r.Section,label:(0,c.__)("Section","wp-parsely")}),(0,s.jsx)(i.__experimentalToggleGroupControlOption,{value:r.Author,label:(0,c.__)("Author","wp-parsely")})]})})},Ye=function(e){var t=e.filter,n=e.postData,a=Ze(e,["filter","postData"]);return(0,s.jsx)("div",{className:"related-posts-filter-values",children:(0,s.jsx)(i.ComboboxControl,{__next40pxDefaultSize:!0,allowReset:!0,onChange:function(e){return a.onFilterValueChange(e)},options:r.Tag===t.type?n.tags.map((function(e){return{value:e,label:e}})):r.Section===t.type?n.categories.map((function(e){return{value:e,label:e}})):r.Author===t.type?n.authors.map((function(e){return{value:e,label:e}})):[],value:t.value})})},Ke=function(e){var t=e.filter,n=e.postData,i=e.label,a=Ze(e,["filter","postData","label"]);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(qe,{filter:t,label:i,onFilterTypeChange:a.onFilterTypeChange,postData:n}),(r.Tag===t.type&&n.tags.length>1||r.Section===t.type&&n.categories.length>1||r.Author===t.type&&n.authors.length>1)&&(0,s.jsx)(Ye,{filter:t,onFilterValueChange:a.onFilterValueChange,postData:n})]})},Qe=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z"})),Xe=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.625 5.5h9.75c.069 0 .125.056.125.125v9.75a.125.125 0 0 1-.125.125h-9.75a.125.125 0 0 1-.125-.125v-9.75c0-.069.056-.125.125-.125ZM4 5.625C4 4.728 4.728 4 5.625 4h9.75C16.273 4 17 4.728 17 5.625v9.75c0 .898-.727 1.625-1.625 1.625h-9.75A1.625 1.625 0 0 1 4 15.375v-9.75Zm14.5 11.656v-9H20v9C20 18.8 18.77 20 17.251 20H6.25v-1.5h11.001c.69 0 1.249-.528 1.249-1.219Z"}));function Je(e){var t=e.metric,n=e.post,r=e.avgEngagedIcon,i=e.viewsIcon;return"views"===t?(0,s.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,s.jsx)("span",{className:"screen-reader-text",children:(0,c.__)("Number of Views","wp-parsely")}),i,me(n.views.toString())]}):"avg_engaged"===t?(0,s.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,s.jsx)("span",{className:"screen-reader-text",children:(0,c.__)("Average Time","wp-parsely")}),r,n.avgEngaged]}):(0,s.jsx)("span",{className:"parsely-post-metric-data",children:"-"})}var et,tt=function(){return(0,s.jsx)(i.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"1",height:"40",viewBox:"0 0 1 40",fill:"none",children:(0,s.jsx)(i.Rect,{width:"1",height:"40",fill:"#cccccc"})})},nt=function(e){var t,n,r=e.metric,l=e.post,o=e.postContent,u=(0,a.useDispatch)("core/notices").createNotice,p=o&&(t=o,n=z(l.rawUrl),new RegExp("]*href=[\"'](http://|https://)?.*".concat(n,".*[\"'][^>]*>"),"i").test(t));return(0,s.jsxs)("div",{className:"related-post-single","data-testid":"related-post-single",children:[(0,s.jsx)("div",{className:"related-post-title",children:(0,s.jsxs)("a",{href:l.url,target:"_blank",rel:"noreferrer",children:[(0,s.jsx)("span",{className:"screen-reader-text",children:(0,c.__)("View on website (opens new tab)","wp-parsely")}),l.title]})}),(0,s.jsx)("div",{className:"related-post-actions",children:(0,s.jsxs)("div",{className:"related-post-info",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"related-post-metric",children:(0,s.jsx)(Je,{metric:r,post:l,viewsIcon:(0,s.jsx)(D,{icon:_e}),avgEngagedIcon:(0,s.jsx)(i.Dashicon,{icon:"clock",size:24})})}),p&&(0,s.jsx)("div",{className:"related-post-linked",children:(0,s.jsx)(i.Tooltip,{text:(0,c.__)("This post is linked in the content","wp-parsely"),children:(0,s.jsx)(D,{icon:Qe,size:24})})})]}),(0,s.jsx)(tt,{}),(0,s.jsxs)("div",{children:[(0,s.jsx)(i.Button,{icon:Xe,iconSize:24,onClick:function(){navigator.clipboard.writeText(l.rawUrl).then((function(){u("success",(0,c.__)("URL copied to clipboard","wp-parsely"),{type:"snackbar"})}))},label:(0,c.__)("Copy URL to clipboard","wp-parsely")}),(0,s.jsx)(i.Button,{icon:(0,s.jsx)(y,{}),iconSize:18,href:l.dashUrl,target:"_blank",label:(0,c.__)("View in Parse.ly","wp-parsely")})]})]})})]})},rt=window.wp.coreData,st=window.wp.editor,it=function(){return it=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1?[2,Promise.reject(new H((0,c.sprintf)(/* translators: URL of the published post */ +(0,c.__)("Multiple results were returned for the post %s by the Parse.ly API.","wp-parsely"),t),A.ParselyApiReturnedTooManyResults))]:[2,n[0]]}}))}))},t.prototype.fetchReferrerDataFromWpEndpoint=function(e,t,n){return Ve(this,void 0,void 0,(function(){return De(this,(function(r){switch(r.label){case 0:return[4,this.fetch({path:(0,X.addQueryArgs)("/wp-parsely/v1/referrers/post/detail",Me(Me({},Ie(e)),{itm_source:this.itmSource,total_views:n,url:t}))})];case 1:return[2,r.sent()]}}))}))},t}(J),Ge=function(){return Ge=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&e.retryFetch?[4,new Promise((function(e){return setTimeout(e,500)}))]:[3,3];case 1:return n.sent(),[4,t(r-1)];case 2:return n.sent(),[3,4];case 3:d(e),o(!1),n.label=4;case 4:return[2]}}))}))})),[2]}))}))};return o(!0),t(1),function(){d(void 0)}}),[n]),(0,i.jsxs)("div",{className:"wp-parsely-performance-panel",children:[(0,i.jsx)(we,{title:(0,c.__)("Performance Stats","wp-parsely"),icon:me,dropdownChildren:function(e){var t=e.onClose;return(0,i.jsx)(Ze,{onClose:t})},children:(0,i.jsx)("div",{className:"panel-settings",children:(0,i.jsx)(s.SelectControl,{size:"__unstable-large",value:m.PerformanceStats.Period,prefix:(0,i.jsx)(s.__experimentalInputControlPrefixWrapper,{children:(0,c.__)("Period: ","wp-parsely")}),onChange:function(t){T(t,e)&&(w({PerformanceStats:Ge(Ge({},m.PerformanceStats),{Period:t})}),h.trackEvent("editor_sidebar_performance_period_changed",{period:t}))},children:Object.values(e).map((function(e){return(0,i.jsx)("option",{value:e,children:E(e)},e)}))})})}),p?p.Message():(0,i.jsxs)(i.Fragment,{children:[$e(m,"overview")&&(0,i.jsx)(Oe,{data:g,isLoading:a}),$e(m,"categories")&&(0,i.jsx)(be,{data:g,isLoading:a}),$e(m,"referrers")&&(0,i.jsx)(Re,{data:g,isLoading:a})]}),window.wpParselyPostUrl&&(0,i.jsx)(s.Button,{className:"wp-parsely-view-post",variant:"primary",onClick:function(){h.trackEvent("editor_sidebar_view_post_pressed")},href:window.wpParselyPostUrl,rel:"noopener",target:"_blank",children:(0,c.__)("View this in Parse.ly","wp-parsely")})]})},Ye=function(e){var t=e.period;return(0,i.jsx)(s.Panel,{children:(0,i.jsx)(V,{children:(0,i.jsx)(qe,{period:t})})})},Ke=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i=1&&(0,i.jsx)(s.__experimentalToggleGroupControlOption,{value:r.Tag,label:(0,c.__)("Tag","wp-parsely")}),a.categories.length>=1&&(0,i.jsx)(s.__experimentalToggleGroupControlOption,{value:r.Section,label:(0,c.__)("Section","wp-parsely")}),(0,i.jsx)(s.__experimentalToggleGroupControlOption,{value:r.Author,label:(0,c.__)("Author","wp-parsely")})]})})},Xe=function(e){var t=e.filter,n=e.postData,a=Ke(e,["filter","postData"]);return(0,i.jsx)("div",{className:"related-posts-filter-values",children:(0,i.jsx)(s.ComboboxControl,{__next40pxDefaultSize:!0,allowReset:!0,onChange:function(e){return a.onFilterValueChange(e)},options:r.Tag===t.type?n.tags.map((function(e){return{value:e,label:e}})):r.Section===t.type?n.categories.map((function(e){return{value:e,label:e}})):r.Author===t.type?n.authors.map((function(e){return{value:e,label:e}})):[],value:t.value})})},Je=function(e){var t=e.filter,n=e.postData,s=e.label,a=Ke(e,["filter","postData","label"]);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(Qe,{filter:t,label:s,onFilterTypeChange:a.onFilterTypeChange,postData:n}),(r.Tag===t.type&&n.tags.length>1||r.Section===t.type&&n.categories.length>1||r.Author===t.type&&n.authors.length>1)&&(0,i.jsx)(Xe,{filter:t,onFilterValueChange:a.onFilterValueChange,postData:n})]})},et=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z"})),tt=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.625 5.5h9.75c.069 0 .125.056.125.125v9.75a.125.125 0 0 1-.125.125h-9.75a.125.125 0 0 1-.125-.125v-9.75c0-.069.056-.125.125-.125ZM4 5.625C4 4.728 4.728 4 5.625 4h9.75C16.273 4 17 4.728 17 5.625v9.75c0 .898-.727 1.625-1.625 1.625h-9.75A1.625 1.625 0 0 1 4 15.375v-9.75Zm14.5 11.656v-9H20v9C20 18.8 18.77 20 17.251 20H6.25v-1.5h11.001c.69 0 1.249-.528 1.249-1.219Z"}));function nt(e){var t=e.metric,n=e.post,r=e.avgEngagedIcon,s=e.viewsIcon;return"views"===t?(0,i.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,i.jsx)("span",{className:"screen-reader-text",children:(0,c.__)("Number of Views","wp-parsely")}),s,_e(n.views.toString())]}):"avg_engaged"===t?(0,i.jsxs)("span",{className:"parsely-post-metric-data",children:[(0,i.jsx)("span",{className:"screen-reader-text",children:(0,c.__)("Average Time","wp-parsely")}),r,n.avgEngaged]}):(0,i.jsx)("span",{className:"parsely-post-metric-data",children:"-"})}var rt,it=function(){return(0,i.jsx)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"1",height:"40",viewBox:"0 0 1 40",fill:"none",children:(0,i.jsx)(s.Rect,{width:"1",height:"40",fill:"#cccccc"})})},st=function(e){var t,n,r=e.metric,o=e.post,l=e.postContent,u=(0,a.useDispatch)("core/notices").createNotice,p=l&&(t=l,n=z(o.rawUrl),new RegExp("]*href=[\"'](http://|https://)?.*".concat(n,".*[\"'][^>]*>"),"i").test(t));return(0,i.jsxs)("div",{className:"related-post-single","data-testid":"related-post-single",children:[(0,i.jsx)("div",{className:"related-post-title",children:(0,i.jsxs)("a",{href:o.url,target:"_blank",rel:"noreferrer",children:[(0,i.jsx)("span",{className:"screen-reader-text",children:(0,c.__)("View on website (opens new tab)","wp-parsely")}),o.title]})}),(0,i.jsx)("div",{className:"related-post-actions",children:(0,i.jsxs)("div",{className:"related-post-info",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"related-post-metric",children:(0,i.jsx)(nt,{metric:r,post:o,viewsIcon:(0,i.jsx)(D,{icon:xe}),avgEngagedIcon:(0,i.jsx)(s.Dashicon,{icon:"clock",size:24})})}),p&&(0,i.jsx)("div",{className:"related-post-linked",children:(0,i.jsx)(s.Tooltip,{text:(0,c.__)("This post is linked in the content","wp-parsely"),children:(0,i.jsx)(D,{icon:et,size:24})})})]}),(0,i.jsx)(it,{}),(0,i.jsxs)("div",{children:[(0,i.jsx)(s.Button,{icon:tt,iconSize:24,onClick:function(){navigator.clipboard.writeText(o.rawUrl).then((function(){u("success",(0,c.__)("URL copied to clipboard","wp-parsely"),{type:"snackbar"})}))},label:(0,c.__)("Copy URL to clipboard","wp-parsely")}),(0,i.jsx)(s.Button,{icon:(0,i.jsx)(y,{}),iconSize:18,href:o.dashUrl,target:"_blank",label:(0,c.__)("View in Parse.ly","wp-parsely")})]})]})})]})},at=window.wp.coreData,ot=window.wp.editor,lt=function(){var 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)};return 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 __)}}(),ct=function(){return ct=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0&&t.retryFetch?[4,new Promise((function(e){return setTimeout(e,500)}))]:[3,3];case 1:return r.sent(),[4,n(e-1)];case 2:return r.sent(),[3,4];case 3:S(!1),A(t),r.label=4;case 4:return[2]}}))}))})),[2]}))}))},s=r.Tag===F.type,i=r.Section===F.type,a=r.Unavailable===F.type,l=0===h.tags.length,o=0===h.categories.length,c=s&&!h.tags.includes(F.value),u=i&&!h.categories.includes(F.value);return S(!0),a||s&&l||i&&o?Object.values(h).every((function(e){return 0===e.length}))||G((e="",t=r.Unavailable,h.tags.length>=1?(t=r.Tag,e=h.tags[0]):h.categories.length>=1?(t=r.Section,e=h.categories[0]):(t=r.Author,e=h.authors[0]),{type:t,value:e})):c?G({type:r.Tag,value:h.tags[0]}):u?G({type:r.Section,value:h.categories[0]}):n(1),function(){S(!1),V([]),I(""),A(void 0)}}),[p,d,F,h]),(0,s.jsxs)("div",{className:"wp-parsely-related-posts",children:[(0,s.jsx)("div",{className:"related-posts-description",children:(0,c.__)("Find top-performing related posts based on a key metric.","wp-parsely")}),(0,s.jsxs)("div",{className:"related-posts-body",children:[(0,s.jsxs)("div",{className:"related-posts-settings",children:[(0,s.jsx)(i.SelectControl,{size:"__unstable-large",onChange:function(e){var n;T(n=e,t)&&(u({RelatedPosts:ct(ct({},l.RelatedPosts),{Metric:n})}),g.trackEvent("related_posts_metric_changed",{metric:n}))},prefix:(0,s.jsx)(i.__experimentalInputControlPrefixWrapper,{children:(0,c.__)("Metric: ","wp-parsely")}),value:d,children:Object.values(t).map((function(e){return(0,s.jsx)("option",{value:e,children:C(e)},e)}))}),(0,s.jsx)(i.SelectControl,{size:"__unstable-large",value:p,prefix:(0,s.jsxs)(i.__experimentalInputControlPrefixWrapper,{children:[(0,c.__)("Period: ","wp-parsely")," "]}),onChange:function(t){return function(t){T(t,e)&&(u({RelatedPosts:ct(ct({},l.RelatedPosts),{Period:t})}),g.trackEvent("related_posts_period_changed",{period:t}))}(t)},children:Object.values(e).map((function(e){return(0,s.jsx)("option",{value:e,children:E(e)},e)}))})]}),(h.tags.length>0||h.categories.length>0)&&(0,s.jsx)("div",{className:"related-posts-filter-settings",children:(0,s.jsx)(Ke,{label:(0,c.__)("Filter by","wp-parsely"),filter:F,onFilterTypeChange:function(e){if(T(e,r)){var t="",n=e;r.Tag===n&&(t=h.tags[0]),r.Section===n&&(t=h.categories[0]),r.Author===n&&(t=h.authors[0]),""!==t&&($(n,t),G({type:n,value:t}),g.trackEvent("related_posts_filter_type_changed",{filter_type:n}))}},onFilterValueChange:function(e){"string"==typeof e&&($(F.type,e),G(ct(ct({},F),{value:e})))},postData:h})}),(0,s.jsxs)("div",{className:"related-posts-wrapper",children:[(0,s.jsx)("div",{children:(0,s.jsx)("p",{className:"related-posts-descr","data-testid":"parsely-related-posts-descr",children:r.Tag===F.type?(0,c.sprintf)(/* translators: 1: tag name, 2: period */ +message:(0,c.sprintf)((0,c.__)('by author "%1$s"',"wp-parsely"),n.value)};throw new H((0,c.__)("No valid filter type has been specified.","wp-parsely"),A.CannotFormulateApiQuery)},t}(J),ft=function(){return ft=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&t.retryFetch?[4,new Promise((function(e){return setTimeout(e,500)}))]:[3,3];case 1:return r.sent(),[4,n(e-1)];case 2:return r.sent(),[3,4];case 3:S(!1),A(t),r.label=4;case 4:return[2]}}))}))})),[2]}))}))},i=r.Tag===F.type,s=r.Section===F.type,a=r.Unavailable===F.type,o=0===g.tags.length,l=0===g.categories.length,c=i&&!g.tags.includes(F.value),u=s&&!g.categories.includes(F.value);return S(!0),a||i&&o||s&&l?Object.values(g).every((function(e){return 0===e.length}))||G((e="",t=r.Unavailable,g.tags.length>=1?(t=r.Tag,e=g.tags[0]):g.categories.length>=1?(t=r.Section,e=g.categories[0]):(t=r.Author,e=g.authors[0]),{type:t,value:e})):c?G({type:r.Tag,value:g.tags[0]}):u?G({type:r.Section,value:g.categories[0]}):n(1),function(){S(!1),V([]),I(""),A(void 0)}}),[p,d,F,g]),(0,i.jsxs)("div",{className:"wp-parsely-related-posts",children:[(0,i.jsx)("div",{className:"related-posts-description",children:(0,c.__)("Find top-performing related posts based on a key metric.","wp-parsely")}),(0,i.jsxs)("div",{className:"related-posts-body",children:[(0,i.jsxs)("div",{className:"related-posts-settings",children:[(0,i.jsx)(s.SelectControl,{size:"__unstable-large",onChange:function(e){var n;T(n=e,t)&&(u({RelatedPosts:ft(ft({},o.RelatedPosts),{Metric:n})}),h.trackEvent("related_posts_metric_changed",{metric:n}))},prefix:(0,i.jsx)(s.__experimentalInputControlPrefixWrapper,{children:(0,c.__)("Metric: ","wp-parsely")}),value:d,children:Object.values(t).map((function(e){return(0,i.jsx)("option",{value:e,children:C(e)},e)}))}),(0,i.jsx)(s.SelectControl,{size:"__unstable-large",value:p,prefix:(0,i.jsxs)(s.__experimentalInputControlPrefixWrapper,{children:[(0,c.__)("Period: ","wp-parsely")," "]}),onChange:function(t){return function(t){T(t,e)&&(u({RelatedPosts:ft(ft({},o.RelatedPosts),{Period:t})}),h.trackEvent("related_posts_period_changed",{period:t}))}(t)},children:Object.values(e).map((function(e){return(0,i.jsx)("option",{value:e,children:E(e)},e)}))})]}),(g.tags.length>0||g.categories.length>0)&&(0,i.jsx)("div",{className:"related-posts-filter-settings",children:(0,i.jsx)(Je,{label:(0,c.__)("Filter by","wp-parsely"),filter:F,onFilterTypeChange:function(e){if(T(e,r)){var t="",n=e;r.Tag===n&&(t=g.tags[0]),r.Section===n&&(t=g.categories[0]),r.Author===n&&(t=g.authors[0]),""!==t&&($(n,t),G({type:n,value:t}),h.trackEvent("related_posts_filter_type_changed",{filter_type:n}))}},onFilterValueChange:function(e){"string"==typeof e&&($(F.type,e),G(ft(ft({},F),{value:e})))},postData:g})}),(0,i.jsxs)("div",{className:"related-posts-wrapper",children:[(0,i.jsx)("div",{children:(0,i.jsx)("p",{className:"related-posts-descr","data-testid":"parsely-related-posts-descr",children:r.Tag===F.type?(0,c.sprintf)(/* translators: 1: tag name, 2: period */ (0,c.__)("Top related posts with the “%1$s” tag in the %2$s.","wp-parsely"),F.value,E(p,!0)):r.Section===F.type?(0,c.sprintf)(/* translators: 1: section name, 2: period */ (0,c.__)("Top related posts in the “%1$s” section in the %2$s.","wp-parsely"),F.value,E(p,!0)):r.Author===F.type?(0,c.sprintf)(/* translators: 1: author name, 2: period */ -(0,c.__)("Top related posts by %1$s in the %2$s.","wp-parsely"),F.value,E(p,!0)):null!=R?R:""})}),L&&L.Message(),P&&(0,s.jsx)("div",{className:"related-posts-loading-message","data-testid":"parsely-related-posts-loading-message",children:(0,c.__)("Loading…","wp-parsely")}),!P&&!L&&0===M.length&&(0,s.jsx)("div",{className:"related-posts-empty","data-testid":"parsely-related-posts-empty",children:(0,c.__)("No related posts found.","wp-parsely")}),!P&&M.length>0&&(0,s.jsx)("div",{className:"related-posts-list",children:M.map((function(e){return(0,s.jsx)(nt,{metric:d,post:e,postContent:z},e.id)}))})]})]})]})},ft=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z"})),gt=function(){return(0,s.jsx)(i.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,s.jsx)(i.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M13.5034 7.91642L9 12.0104L4.49662 7.91642L5.25337 7.08398L8.99999 10.49L12.7466 7.08398L13.5034 7.91642Z",fill:"#1E1E1E"})})},ht={journalist:{label:(0,c.__)("Journalist","wp-parsely")},editorialWriter:{label:(0,c.__)("Editorial Writer","wp-parsely")},investigativeReporter:{label:(0,c.__)("Investigative Reporter","wp-parsely")},techAnalyst:{label:(0,c.__)("Tech Analyst","wp-parsely")},businessAnalyst:{label:(0,c.__)("Business Analyst","wp-parsely")},culturalCommentator:{label:(0,c.__)("Cultural Commentator","wp-parsely")},scienceCorrespondent:{label:(0,c.__)("Science Correspondent","wp-parsely")},politicalAnalyst:{label:(0,c.__)("Political Analyst","wp-parsely")},healthWellnessAdvocate:{label:(0,c.__)("Health and Wellness Advocate","wp-parsely")},environmentalJournalist:{label:(0,c.__)("Environmental Journalist","wp-parsely")},custom:{label:(0,c.__)("Custom Persona","wp-parsely"),icon:ft}},yt=Object.keys(ht),vt=function(e){return"custom"===e||""===e?ht.custom.label:mt(e)?e:ht[e].label},mt=function(e){return!yt.includes(e)||"custom"===e},wt=function(e){var t=e.value,n=e.onChange,r=(0,o.useState)(""),a=r[0],l=r[1],u=(0,O.useDebounce)(n,500);return(0,s.jsx)("div",{className:"parsely-persona-selector-custom",children:(0,s.jsx)(i.TextControl,{value:a||t,placeholder:(0,c.__)("Enter a custom persona…","wp-parsely"),onChange:function(e){if(""===e)return n(""),void l("");e.length>32&&(e=e.slice(0,32)),u(e),l(e)}})})},_t=function(e){var t=e.persona,n=e.value,r=void 0===n?(0,c.__)("Select a persona…","wp-parsely"):n,a=e.label,l=void 0===a?(0,c.__)("Persona","wp-parsely"):a,o=e.onChange,u=e.onDropdownChange,p=e.disabled,d=void 0!==p&&p,f=e.allowCustom,g=void 0!==f&&f;return(0,s.jsxs)(i.Disabled,{isDisabled:d,children:[l&&(0,s.jsx)("div",{className:"wp-parsely-dropdown-label",children:l}),(0,s.jsx)(i.DropdownMenu,{label:(0,c.__)("Persona","wp-parsely"),className:"parsely-persona-selector-dropdown"+(d?" is-disabled":""),popoverProps:{className:"wp-parsely-popover"},toggleProps:{children:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"parsely-persona-selector-label",children:mt(t)?ht.custom.label:r}),(0,s.jsx)(gt,{})]})},children:function(e){var n=e.onClose;return(0,s.jsx)(i.MenuGroup,{label:(0,c.__)("Persona","wp-parsely"),children:(0,s.jsx)(s.Fragment,{children:yt.map((function(e){if(!g&&"custom"===e)return null;var r=ht[e],a=e===t||mt(t)&&"custom"===e;return(0,s.jsxs)(i.MenuItem,{isSelected:a,className:a?"is-selected":"",role:"menuitemradio",onClick:function(){null==u||u(e),o(e),n(),"custom"===e&&setTimeout((function(){var e=document.querySelector(".parsely-persona-selector-custom input");e&&e.focus()}),0)},children:[r.icon&&(0,s.jsx)(D,{icon:r.icon}),r.label]},e)}))})})}}),g&&mt(t)&&(0,s.jsx)(wt,{onChange:function(e){o(""!==e?e:"custom")},value:"custom"===t?"":t})]})},bt={neutral:{label:(0,c.__)("Neutral","wp-parsely")},formal:{label:(0,c.__)("Formal","wp-parsely")},humorous:{label:(0,c.__)("Humorous","wp-parsely")},confident:{label:(0,c.__)("Confident","wp-parsely")},provocative:{label:(0,c.__)("Provocative","wp-parsely")},serious:{label:(0,c.__)("Serious","wp-parsely")},inspirational:{label:(0,c.__)("Inspirational","wp-parsely")},skeptical:{label:(0,c.__)("Skeptical","wp-parsely")},conversational:{label:(0,c.__)("Conversational","wp-parsely")},analytical:{label:(0,c.__)("Analytical","wp-parsely")},custom:{label:(0,c.__)("Custom Tone","wp-parsely"),icon:ft}},xt=Object.keys(bt),Pt=function(e){return"custom"===e||""===e?bt.custom.label:St(e)?e:bt[e].label},St=function(e){return!xt.includes(e)||"custom"===e},kt=function(e){var t=e.value,n=e.onChange,r=(0,o.useState)(""),a=r[0],l=r[1],u=(0,O.useDebounce)(n,500);return(0,s.jsx)("div",{className:"parsely-tone-selector-custom",children:(0,s.jsx)(i.TextControl,{value:a||t,placeholder:(0,c.__)("Enter a custom tone","wp-parsely"),onChange:function(e){if(""===e)return n(""),void l("");e.length>32&&(e=e.slice(0,32)),u(e),l(e)}})})},jt=function(e){var t=e.tone,n=e.value,r=void 0===n?(0,c.__)("Select a tone","wp-parsely"):n,a=e.label,l=void 0===a?(0,c.__)("Tone","wp-parsely"):a,o=e.onChange,u=e.onDropdownChange,p=e.disabled,d=void 0!==p&&p,f=e.allowCustom,g=void 0!==f&&f;return(0,s.jsxs)(i.Disabled,{isDisabled:d,children:[(0,s.jsx)("div",{className:"wp-parsely-dropdown-label",children:l}),(0,s.jsx)(i.DropdownMenu,{label:(0,c.__)("Tone","wp-parsely"),className:"parsely-tone-selector-dropdown"+(d?" is-disabled":""),popoverProps:{className:"wp-parsely-popover"},toggleProps:{children:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"parsely-tone-selector-label",children:St(t)?bt.custom.label:r}),(0,s.jsx)(gt,{})]})},children:function(e){var n=e.onClose;return(0,s.jsx)(i.MenuGroup,{label:(0,c.__)("Select a tone","wp-parsely"),children:(0,s.jsx)(s.Fragment,{children:xt.map((function(e){if(!g&&"custom"===e)return null;var r=bt[e],a=e===t||St(t)&&"custom"===e;return(0,s.jsxs)(i.MenuItem,{isSelected:a,className:a?"is-selected":"",role:"menuitemradio",onClick:function(){null==u||u(e),o(e),n(),"custom"===e&&setTimeout((function(){var e=document.querySelector(".parsely-tone-selector-custom input");e&&e.focus()}),0)},children:[r.icon&&(0,s.jsx)(D,{icon:r.icon}),r.label]},e)}))})})}}),g&&St(t)&&(0,s.jsx)(kt,{onChange:function(e){o(""!==e?e:"custom")},value:"custom"===t?"":t})]})},Tt=(0,u.createElement)(p.SVG,{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,u.createElement)(p.Path,{d:"M10.97 10.159a3.382 3.382 0 0 0-2.857.955l1.724 1.723-2.836 2.913L7 17h1.25l2.913-2.837 1.723 1.723a3.38 3.38 0 0 0 .606-.825c.33-.63.446-1.343.35-2.032L17 10.695 13.305 7l-2.334 3.159Z"})),Et=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"M18.3 11.7c-.6-.6-1.4-.9-2.3-.9H6.7l2.9-3.3-1.1-1-4.5 5L8.5 16l1-1-2.7-2.7H16c.5 0 .9.2 1.3.5 1 1 1 3.4 1 4.5v.3h1.5v-.2c0-1.5 0-4.3-1.5-5.7z"})),Ct=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"})),Lt=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z"})),At=function(){return At=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0&&s[s.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!s||l[1]>s[0]&&l[1]0?(0,s.jsx)("span",{className:"parsely-write-titles-text",children:(0,o.createInterpolateElement)( +(0,c.__)("Top related posts by %1$s in the %2$s.","wp-parsely"),F.value,E(p,!0)):null!=R?R:""})}),L&&L.Message(),P&&(0,i.jsx)("div",{className:"related-posts-loading-message","data-testid":"parsely-related-posts-loading-message",children:(0,c.__)("Loading…","wp-parsely")}),!P&&!L&&0===M.length&&(0,i.jsx)("div",{className:"related-posts-empty","data-testid":"parsely-related-posts-empty",children:(0,c.__)("No related posts found.","wp-parsely")}),!P&&M.length>0&&(0,i.jsx)("div",{className:"related-posts-list",children:M.map((function(e){return(0,i.jsx)(st,{metric:d,post:e,postContent:z},e.id)}))})]})]})]})},vt=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z"})),mt=function(){return(0,i.jsx)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,i.jsx)(s.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M13.5034 7.91642L9 12.0104L4.49662 7.91642L5.25337 7.08398L8.99999 10.49L12.7466 7.08398L13.5034 7.91642Z",fill:"#1E1E1E"})})},wt={journalist:{label:(0,c.__)("Journalist","wp-parsely")},editorialWriter:{label:(0,c.__)("Editorial Writer","wp-parsely")},investigativeReporter:{label:(0,c.__)("Investigative Reporter","wp-parsely")},techAnalyst:{label:(0,c.__)("Tech Analyst","wp-parsely")},businessAnalyst:{label:(0,c.__)("Business Analyst","wp-parsely")},culturalCommentator:{label:(0,c.__)("Cultural Commentator","wp-parsely")},scienceCorrespondent:{label:(0,c.__)("Science Correspondent","wp-parsely")},politicalAnalyst:{label:(0,c.__)("Political Analyst","wp-parsely")},healthWellnessAdvocate:{label:(0,c.__)("Health and Wellness Advocate","wp-parsely")},environmentalJournalist:{label:(0,c.__)("Environmental Journalist","wp-parsely")},custom:{label:(0,c.__)("Custom Persona","wp-parsely"),icon:vt}},_t=Object.keys(wt),bt=function(e){return"custom"===e||""===e?wt.custom.label:xt(e)?e:wt[e].label},xt=function(e){return!_t.includes(e)||"custom"===e},Pt=function(e){var t=e.value,n=e.onChange,r=(0,l.useState)(""),a=r[0],o=r[1],u=(0,O.useDebounce)(n,500);return(0,i.jsx)("div",{className:"parsely-persona-selector-custom",children:(0,i.jsx)(s.TextControl,{value:a||t,placeholder:(0,c.__)("Enter a custom persona…","wp-parsely"),onChange:function(e){if(""===e)return n(""),void o("");e.length>32&&(e=e.slice(0,32)),u(e),o(e)}})})},St=function(e){var t=e.persona,n=e.value,r=void 0===n?(0,c.__)("Select a persona…","wp-parsely"):n,a=e.label,o=void 0===a?(0,c.__)("Persona","wp-parsely"):a,l=e.onChange,u=e.onDropdownChange,p=e.disabled,d=void 0!==p&&p,f=e.allowCustom,h=void 0!==f&&f;return(0,i.jsxs)(s.Disabled,{isDisabled:d,children:[o&&(0,i.jsx)("div",{className:"wp-parsely-dropdown-label",children:o}),(0,i.jsx)(s.DropdownMenu,{label:(0,c.__)("Persona","wp-parsely"),className:"parsely-persona-selector-dropdown"+(d?" is-disabled":""),popoverProps:{className:"wp-parsely-popover"},toggleProps:{children:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{className:"parsely-persona-selector-label",children:xt(t)?wt.custom.label:r}),(0,i.jsx)(mt,{})]})},children:function(e){var n=e.onClose;return(0,i.jsx)(s.MenuGroup,{label:(0,c.__)("Persona","wp-parsely"),children:(0,i.jsx)(i.Fragment,{children:_t.map((function(e){if(!h&&"custom"===e)return null;var r=wt[e],a=e===t||xt(t)&&"custom"===e;return(0,i.jsxs)(s.MenuItem,{isSelected:a,className:a?"is-selected":"",role:"menuitemradio",onClick:function(){null==u||u(e),l(e),n(),"custom"===e&&setTimeout((function(){var e=document.querySelector(".parsely-persona-selector-custom input");e&&e.focus()}),0)},children:[r.icon&&(0,i.jsx)(D,{icon:r.icon}),r.label]},e)}))})})}}),h&&xt(t)&&(0,i.jsx)(Pt,{onChange:function(e){l(""!==e?e:"custom")},value:"custom"===t?"":t})]})},kt={neutral:{label:(0,c.__)("Neutral","wp-parsely")},formal:{label:(0,c.__)("Formal","wp-parsely")},humorous:{label:(0,c.__)("Humorous","wp-parsely")},confident:{label:(0,c.__)("Confident","wp-parsely")},provocative:{label:(0,c.__)("Provocative","wp-parsely")},serious:{label:(0,c.__)("Serious","wp-parsely")},inspirational:{label:(0,c.__)("Inspirational","wp-parsely")},skeptical:{label:(0,c.__)("Skeptical","wp-parsely")},conversational:{label:(0,c.__)("Conversational","wp-parsely")},analytical:{label:(0,c.__)("Analytical","wp-parsely")},custom:{label:(0,c.__)("Custom Tone","wp-parsely"),icon:vt}},jt=Object.keys(kt),Tt=function(e){return"custom"===e||""===e?kt.custom.label:Et(e)?e:kt[e].label},Et=function(e){return!jt.includes(e)||"custom"===e},Ct=function(e){var t=e.value,n=e.onChange,r=(0,l.useState)(""),a=r[0],o=r[1],u=(0,O.useDebounce)(n,500);return(0,i.jsx)("div",{className:"parsely-tone-selector-custom",children:(0,i.jsx)(s.TextControl,{value:a||t,placeholder:(0,c.__)("Enter a custom tone","wp-parsely"),onChange:function(e){if(""===e)return n(""),void o("");e.length>32&&(e=e.slice(0,32)),u(e),o(e)}})})},Lt=function(e){var t=e.tone,n=e.value,r=void 0===n?(0,c.__)("Select a tone","wp-parsely"):n,a=e.label,o=void 0===a?(0,c.__)("Tone","wp-parsely"):a,l=e.onChange,u=e.onDropdownChange,p=e.disabled,d=void 0!==p&&p,f=e.allowCustom,h=void 0!==f&&f;return(0,i.jsxs)(s.Disabled,{isDisabled:d,children:[(0,i.jsx)("div",{className:"wp-parsely-dropdown-label",children:o}),(0,i.jsx)(s.DropdownMenu,{label:(0,c.__)("Tone","wp-parsely"),className:"parsely-tone-selector-dropdown"+(d?" is-disabled":""),popoverProps:{className:"wp-parsely-popover"},toggleProps:{children:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{className:"parsely-tone-selector-label",children:Et(t)?kt.custom.label:r}),(0,i.jsx)(mt,{})]})},children:function(e){var n=e.onClose;return(0,i.jsx)(s.MenuGroup,{label:(0,c.__)("Select a tone","wp-parsely"),children:(0,i.jsx)(i.Fragment,{children:jt.map((function(e){if(!h&&"custom"===e)return null;var r=kt[e],a=e===t||Et(t)&&"custom"===e;return(0,i.jsxs)(s.MenuItem,{isSelected:a,className:a?"is-selected":"",role:"menuitemradio",onClick:function(){null==u||u(e),l(e),n(),"custom"===e&&setTimeout((function(){var e=document.querySelector(".parsely-tone-selector-custom input");e&&e.focus()}),0)},children:[r.icon&&(0,i.jsx)(D,{icon:r.icon}),r.label]},e)}))})})}}),h&&Et(t)&&(0,i.jsx)(Ct,{onChange:function(e){l(""!==e?e:"custom")},value:"custom"===t?"":t})]})},At=(0,u.createElement)(p.SVG,{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,u.createElement)(p.Path,{d:"M10.97 10.159a3.382 3.382 0 0 0-2.857.955l1.724 1.723-2.836 2.913L7 17h1.25l2.913-2.837 1.723 1.723a3.38 3.38 0 0 0 .606-.825c.33-.63.446-1.343.35-2.032L17 10.695 13.305 7l-2.334 3.159Z"})),Nt=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"M18.3 11.7c-.6-.6-1.4-.9-2.3-.9H6.7l2.9-3.3-1.1-1-4.5 5L8.5 16l1-1-2.7-2.7H16c.5 0 .9.2 1.3.5 1 1 1 3.4 1 4.5v.3h1.5v-.2c0-1.5 0-4.3-1.5-5.7z"})),Ot=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"})),Rt=(0,u.createElement)(p.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,u.createElement)(p.Path,{d:"m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z"})),It=function(){return It=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?(0,i.jsx)("span",{className:"parsely-write-titles-text",children:(0,l.createInterpolateElement)( // translators: %1$s is the tone, %2$s is the persona. -(0,c.__)("We've generated a few titles based on the content of your post, written as a .","wp-parsely"),{tone:(0,s.jsx)("strong",{children:Pt(d)}),persona:(0,s.jsx)("strong",{children:vt(y)})})}):(0,c.__)("Use Parse.ly AI to generate a title for your post.","wp-parsely"),(0,s.jsxs)(i.Button,{href:"https://docs.parse.ly/plugin-content-helper/#h-title-suggestions-beta",target:"_blank",variant:"link",children:[(0,c.__)("Learn more about Parse.ly AI","wp-parsely"),(0,s.jsx)(D,{icon:F,size:18,className:"parsely-external-link-icon"})]})]}),l&&(0,s.jsx)(i.Notice,{status:"info",className:"wp-parsely-content-helper-error",children:l.Message()}),void 0!==S&&(0,s.jsx)(Dt,{title:S,type:et.PostTitle,isOriginal:!0}),00&&(0,s.jsx)(Ft,{pinnedTitles:b,isOpen:!0}),_.length>0&&(0,s.jsx)(zt,{suggestions:_,isOpen:!0,isLoading:w})]}),(0,s.jsx)(Gt,{isLoading:w,onPersonaChange:function(e){N("Persona",e),v(e)},onSettingChange:N,onToneChange:function(e){N("Tone",e),f(e)},persona:t.TitleSuggestions.Persona,tone:t.TitleSuggestions.Tone}),(0,s.jsx)("div",{className:"title-suggestions-generate",children:(0,s.jsxs)(i.Button,{variant:"primary",isBusy:w,disabled:w||"custom"===d||"custom"===y,onClick:function(){return $t(void 0,void 0,void 0,(function(){return Zt(this,(function(e){switch(e.label){case 0:return u(void 0),!1!==w?[3,2]:(g.trackEvent("title_suggestions_generate_pressed",{request_more:_.length>0,total_titles:_.length,total_pinned:_.filter((function(e){return e.isPinned})).length,tone:d,persona:y}),[4,(t=et.PostTitle,n=O,r=d,s=y,$t(void 0,void 0,void 0,(function(){var e,i,a;return Zt(this,(function(l){switch(l.label){case 0:return[4,E(!0)];case 1:l.sent(),e=new Wt,l.label=2;case 2:return l.trys.push([2,5,,6]),[4,e.generateTitles(n,3,r,s)];case 3:return i=l.sent(),[4,T(t,i)];case 4:return l.sent(),[3,6];case 5:return a=l.sent(),u(a),T(t,[]),[3,6];case 6:return[4,E(!1)];case 7:return l.sent(),[2]}}))})))]);case 1:e.sent(),e.label=2;case 2:return[2]}var t,n,r,s}))}))},children:[w&&(0,c.__)("Generating Titles…","wp-parsely"),!w&&x.length>0&&(0,c.__)("Generate More","wp-parsely"),!w&&0===x.length&&(0,c.__)("Generate Titles","wp-parsely")]})})]})})},Yt=function(){return Yt=Object.assign||function(e){for(var t,n=1,r=arguments.length;n titles based on the content of your post, written as a .","wp-parsely"),{tone:(0,i.jsx)("strong",{children:Tt(d)}),persona:(0,i.jsx)("strong",{children:bt(y)})})}):(0,c.__)("Use Parse.ly AI to generate a title for your post.","wp-parsely"),(0,i.jsxs)(s.Button,{href:"https://docs.parse.ly/plugin-content-helper/#h-title-suggestions-beta",target:"_blank",variant:"link",children:[(0,c.__)("Learn more about Parse.ly AI","wp-parsely"),(0,i.jsx)(D,{icon:F,size:18,className:"parsely-external-link-icon"})]})]}),o&&(0,i.jsx)(s.Notice,{status:"info",className:"wp-parsely-content-helper-error",children:o.Message()}),void 0!==S&&(0,i.jsx)(zt,{title:S,type:rt.PostTitle,isOriginal:!0}),00&&(0,i.jsx)(Wt,{pinnedTitles:b,isOpen:!0}),_.length>0&&(0,i.jsx)(Zt,{suggestions:_,isOpen:!0,isLoading:w})]}),(0,i.jsx)(Ut,{isLoading:w,onPersonaChange:function(e){N("Persona",e),v(e)},onSettingChange:N,onToneChange:function(e){N("Tone",e),f(e)},persona:t.TitleSuggestions.Persona,tone:t.TitleSuggestions.Tone}),(0,i.jsx)("div",{className:"title-suggestions-generate",children:(0,i.jsxs)(s.Button,{variant:"primary",isBusy:w,disabled:w||"custom"===d||"custom"===y,onClick:function(){return Qt(void 0,void 0,void 0,(function(){return Xt(this,(function(e){switch(e.label){case 0:return u(void 0),!1!==w?[3,2]:(h.trackEvent("title_suggestions_generate_pressed",{request_more:_.length>0,total_titles:_.length,total_pinned:_.filter((function(e){return e.isPinned})).length,tone:d,persona:y}),[4,(t=rt.PostTitle,n=O,r=d,i=y,Qt(void 0,void 0,void 0,(function(){var e,s,a;return Xt(this,(function(o){switch(o.label){case 0:return[4,E(!0)];case 1:o.sent(),e=Yt.getInstance(),o.label=2;case 2:return o.trys.push([2,5,,6]),[4,e.generateTitles(n,3,r,i)];case 3:return s=o.sent(),[4,T(t,s)];case 4:return o.sent(),[3,6];case 5:return a=o.sent(),u(a),T(t,[]),[3,6];case 6:return[4,E(!1)];case 7:return o.sent(),[2]}}))})))]);case 1:e.sent(),e.label=2;case 2:return[2]}var t,n,r,i}))}))},children:[w&&(0,c.__)("Generating Titles…","wp-parsely"),!w&&x.length>0&&(0,c.__)("Generate More","wp-parsely"),!w&&0===x.length&&(0,c.__)("Generate Titles","wp-parsely")]})})]})})},en=function(){return en=Object.assign||function(e){for(var t,n=1,r=arguments.length;n { + error?: Error; + data: T; +} + +/** + * The result of the getOrCreateController method. + * + * @since 3.15.0 + */ +type GetAbortControllerResult = { + abortController: AbortController; + abortId: string; +}; + +/** + * Base class for all providers. + * + * Provides a common interface for fetching data from the API, with support + * for cancelling requests. + * + * @since 3.15.0 + */ +export abstract class BaseProvider { + /** + * A map of AbortControllers used to cancel fetch requests. + * + * @since 3.15.0 + */ + private abortControllers: Map = new Map(); + + /** + * Protected empty constructor to prevent instantiation. + * + * @since 3.15.0 + */ + protected constructor() {} // eslint-disable-line no-useless-constructor + + /** + * Cancels the fetch request. + * + * If an ID is provided, it cancels the request with that ID. + * If no ID is provided, it cancels the most recent request. + * + * @since 3.15.0 + * + * @param {string?} id The (optional) ID of the request to cancel. + */ + public cancelRequest( id?: string ): void { + // If an ID is provided, cancel the request with that ID. + if ( id ) { + const controller = this.abortControllers.get( id ); + + if ( controller ) { + controller.abort(); + this.abortControllers.delete( id ); + } + + return; + } + + // Otherwise, cancel the most recent request. + const lastKey = Array.from( this.abortControllers.keys() ).pop(); + if ( lastKey ) { + const controller = this.abortControllers.get( lastKey ); + + if ( controller ) { + controller.abort(); + this.abortControllers.delete( lastKey ); + } + } + } + + /** + * Cancels all fetch requests for the provider. + * + * @since 3.15.0 + */ + public cancelAll(): void { + this.abortControllers.forEach( ( controller ) => controller.abort() ); + this.abortControllers.clear(); + } + + /** + * Private method to manage creating and storing AbortControllers. + * + * @since 3.15.0 + * + * @param {string?} id The (optional) ID of the request. + * + * @return {GetAbortControllerResult} The AbortController and its ID. + */ + private getOrCreateController( id?: string ): GetAbortControllerResult { + if ( id && this.abortControllers.has( id ) ) { + return { + abortController: this.abortControllers.get( id )!, + abortId: id, + }; + } + + // If no ID is provided, generate one. + const abortId = id ?? 'auto-' + Date.now(); + // Create a new AbortController. + const controller = new AbortController(); + // Store the AbortController. + this.abortControllers.set( abortId, controller ); + + return { + abortController: controller, + abortId, + }; + } + + /** + * Fetches data from the API. Either resolves with the data or rejects with + * an error. + * + * This method is a wrapper around apiFetch() that automatically adds the + * AbortController signal. + * + * @since 3.15.0 + * + * @param {APIFetchOptions} options The options to pass to apiFetch + * @param {string?} id The (optional) ID of the request + * + * @return {Promise>} The fetched data + */ + protected async fetch( options: APIFetchOptions, id?: string ): Promise { + const { abortController, abortId } = this.getOrCreateController( id ); + options.signal = abortController.signal; + + try { + const response = await apiFetch>( options ); + + // Validate API side errors. + if ( response.error ) { + return Promise.reject( + new ContentHelperError( + response.error.message, + ContentHelperErrorCode.ParselyApiResponseContainsError, + ), + ); + } + + return response.data; + } catch ( wpError: any ) { // eslint-disable-line @typescript-eslint/no-explicit-any + if ( wpError.name === 'AbortError' ) { + return Promise.reject( + new ContentHelperError( + __( 'The operation was aborted.', 'wp-parsely' ), + ContentHelperErrorCode.ParselyAborted, + ), + ); + } + + return Promise.reject( new ContentHelperError( wpError.message, wpError.code ) ); + } finally { + // Clean-up the AbortController after a successful request. + this.abortControllers.delete( abortId ); + } + } +} diff --git a/src/content-helper/dashboard-widget/components/top-posts.tsx b/src/content-helper/dashboard-widget/components/top-posts.tsx index 9f0b7d17a..2dce7b9f3 100644 --- a/src/content-helper/dashboard-widget/components/top-posts.tsx +++ b/src/content-helper/dashboard-widget/components/top-posts.tsx @@ -43,7 +43,7 @@ export function TopPosts(): JSX.Element { * @since 3.7.0 */ useEffect( () => { - const provider = new DashboardWidgetProvider(); + const provider = DashboardWidgetProvider.getInstance(); const fetchPosts = async ( retries: number ) => { provider.getTopPosts( settings, page ) diff --git a/src/content-helper/dashboard-widget/provider.ts b/src/content-helper/dashboard-widget/provider.ts index 534452dea..23bc4673e 100644 --- a/src/content-helper/dashboard-widget/provider.ts +++ b/src/content-helper/dashboard-widget/provider.ts @@ -1,13 +1,13 @@ /** * WordPress dependencies */ -import apiFetch from '@wordpress/api-fetch'; import { __ } from '@wordpress/i18n'; import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ +import { BaseProvider } from '../common/base-provider'; import { ContentHelperError, ContentHelperErrorCode, @@ -16,18 +16,31 @@ import { getApiPeriodParams } from '../common/utils/api'; import { PostData } from '../common/utils/post'; import { TopPostsSettings } from '../common/settings'; -/** - * The form of the response returned by the /stats/posts WordPress REST API - * endpoint. - */ -interface TopPostsApiResponse { - error?: Error; - data?: PostData[]; -} - export const TOP_POSTS_DEFAULT_LIMIT = 5; -export class DashboardWidgetProvider { +export class DashboardWidgetProvider extends BaseProvider { + /** + * The singleton instance of the DashboardWidgetProvider. + * + * @since 3.15.0 + */ + private static instance: DashboardWidgetProvider; + + /** + * Returns the singleton instance of the DashboardWidgetProvider. + * + * @since 3.15.0 + * + * @return {DashboardWidgetProvider} The singleton instance. + */ + public static getInstance(): DashboardWidgetProvider { + if ( ! this.instance ) { + this.instance = new DashboardWidgetProvider(); + } + + return this.instance; + } + /** * Returns the site's top posts. * @@ -69,31 +82,16 @@ export class DashboardWidgetProvider { private async fetchTopPostsFromWpEndpoint( settings: TopPostsSettings, page: number ): Promise { - let response; - - try { - response = await apiFetch( { - path: addQueryArgs( '/wp-parsely/v1/stats/posts/', { - limit: TOP_POSTS_DEFAULT_LIMIT, - ...getApiPeriodParams( settings.Period ), - sort: settings.Metric, - page, - itm_source: 'wp-parsely-content-helper', - } ), - } ) as TopPostsApiResponse; - } catch ( wpError: any ) { // eslint-disable-line @typescript-eslint/no-explicit-any - return Promise.reject( new ContentHelperError( - wpError.message, wpError.code - ) ); - } - - if ( response?.error ) { - return Promise.reject( new ContentHelperError( - response.error.message, - ContentHelperErrorCode.ParselyApiResponseContainsError - ) ); - } + const response = this.fetch( { + path: addQueryArgs( '/wp-parsely/v1/stats/posts/', { + limit: TOP_POSTS_DEFAULT_LIMIT, + ...getApiPeriodParams( settings.Period ), + sort: settings.Metric, + page, + itm_source: 'wp-parsely-content-helper', + } ), + } ); - return response?.data ?? []; + return response ?? []; } } diff --git a/src/content-helper/editor-sidebar/performance-stats/component.tsx b/src/content-helper/editor-sidebar/performance-stats/component.tsx index 43bbcda17..c43923cfa 100644 --- a/src/content-helper/editor-sidebar/performance-stats/component.tsx +++ b/src/content-helper/editor-sidebar/performance-stats/component.tsx @@ -211,7 +211,7 @@ export const PerformanceStats = ( const { settings, setSettings } = useSettings(); useEffect( () => { - const provider = new PerformanceStatsProvider(); + const provider = PerformanceStatsProvider.getInstance(); const fetchPosts = async ( retries: number ) => { provider.getPerformanceStats( period ) diff --git a/src/content-helper/editor-sidebar/performance-stats/provider.ts b/src/content-helper/editor-sidebar/performance-stats/provider.ts index 0c318d3ca..5bc524cd6 100644 --- a/src/content-helper/editor-sidebar/performance-stats/provider.ts +++ b/src/content-helper/editor-sidebar/performance-stats/provider.ts @@ -1,7 +1,6 @@ /** * WordPress dependencies */ -import apiFetch from '@wordpress/api-fetch'; import { select } from '@wordpress/data'; import { __, sprintf } from '@wordpress/i18n'; import { addQueryArgs } from '@wordpress/url'; @@ -9,6 +8,7 @@ import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ +import { BaseProvider } from '../../common/base-provider'; import { ContentHelperError, ContentHelperErrorCode, @@ -20,30 +20,33 @@ import { PerformanceReferrerData, } from './model'; -/** - * Specifies the form of the response returned by the `/stats/post/detail` - * WordPress REST API endpoint. - */ - interface AnalyticsApiResponse { - error?: Error; - data: PerformanceData[]; -} - -/** - * Specifies the form of the response returned by the `/referrers/post/detail` - * WordPress REST API endpoint. - */ -interface ReferrersApiResponse { - error?: Error; - data: PerformanceReferrerData; -} - /** * Provides current post details data for use in other components. */ -export class PerformanceStatsProvider { +export class PerformanceStatsProvider extends BaseProvider { private itmSource = 'wp-parsely-content-helper'; + /** + * The singleton instance of the PerformanceStatsProvider. + * + * @since 3.15.0 + */ + private static instance: PerformanceStatsProvider; + + /** + * Returns the singleton instance of the PerformanceStatsProvider. + * + * @since 3.15.0 + * + * @return {PerformanceStatsProvider} The singleton instance. + */ + public static getInstance(): PerformanceStatsProvider { + if ( ! this.instance ) { + this.instance = new PerformanceStatsProvider(); + } + return this.instance; + } + /** * Returns details about the post that is currently being edited within the * WordPress Block Editor. @@ -105,32 +108,17 @@ export class PerformanceStatsProvider { private async fetchPerformanceDataFromWpEndpoint( period: Period, postUrl: string ): Promise { - let response; - - try { - response = await apiFetch( { - path: addQueryArgs( - '/wp-parsely/v1/stats/post/detail', { - ...getApiPeriodParams( period ), - itm_source: this.itmSource, - url: postUrl, - } ), - } ); - } catch ( wpError: any ) { // eslint-disable-line @typescript-eslint/no-explicit-any - return Promise.reject( new ContentHelperError( - wpError.message, wpError.code - ) ); - } - - if ( response?.error ) { - return Promise.reject( new ContentHelperError( - response.error.message, - ContentHelperErrorCode.ParselyApiResponseContainsError - ) ); - } + const response = await this.fetch( { + path: addQueryArgs( + '/wp-parsely/v1/stats/post/detail', { + ...getApiPeriodParams( period ), + itm_source: this.itmSource, + url: postUrl, + } ), + } ); // No data was returned. - if ( response.data.length === 0 ) { + if ( response.length === 0 ) { return Promise.reject( new ContentHelperError( sprintf( /* translators: URL of the published post */ @@ -141,7 +129,7 @@ export class PerformanceStatsProvider { } // Data for multiple URLs was returned. - if ( response.data.length > 1 ) { + if ( response.length > 1 ) { return Promise.reject( new ContentHelperError( sprintf( /* translators: URL of the published post */ @@ -151,7 +139,7 @@ export class PerformanceStatsProvider { ) ); } - return response.data[ 0 ]; + return response[ 0 ]; } /** @@ -166,31 +154,16 @@ export class PerformanceStatsProvider { private async fetchReferrerDataFromWpEndpoint( period: Period, postUrl: string, totalViews: string ): Promise { - let response; - - // Query WordPress API endpoint. - try { - response = await apiFetch( { path: addQueryArgs( + const response = await this.fetch( { + path: addQueryArgs( '/wp-parsely/v1/referrers/post/detail', { ...getApiPeriodParams( period ), itm_source: this.itmSource, total_views: totalViews, // Needed to calculate direct views. url: postUrl, } ), - } ); - } catch ( wpError: any ) { // eslint-disable-line @typescript-eslint/no-explicit-any - return Promise.reject( new ContentHelperError( - wpError.message, wpError.code - ) ); - } - - if ( response?.error ) { - return Promise.reject( new ContentHelperError( - response.error.message, - ContentHelperErrorCode.ParselyApiResponseContainsError - ) ); - } + } ); - return response.data; + return response; } } diff --git a/src/content-helper/editor-sidebar/related-posts/component.tsx b/src/content-helper/editor-sidebar/related-posts/component.tsx index bda2a59fd..961defe92 100644 --- a/src/content-helper/editor-sidebar/related-posts/component.tsx +++ b/src/content-helper/editor-sidebar/related-posts/component.tsx @@ -227,7 +227,7 @@ export const RelatedPostsPanel = (): JSX.Element => { }; const fetchPosts = async ( retries: number ) => { - RelatedPostsProvider.getRelatedPosts( period, metric, filter ) + RelatedPostsProvider.getInstance().getRelatedPosts( period, metric, filter ) .then( ( result ): void => { setPosts( result.posts ); setMessage( result.message ); diff --git a/src/content-helper/editor-sidebar/related-posts/provider.ts b/src/content-helper/editor-sidebar/related-posts/provider.ts index dda6cfde0..6345f4f19 100644 --- a/src/content-helper/editor-sidebar/related-posts/provider.ts +++ b/src/content-helper/editor-sidebar/related-posts/provider.ts @@ -1,13 +1,13 @@ /** * WordPress dependencies */ -import apiFetch from '@wordpress/api-fetch'; import { __, sprintf } from '@wordpress/i18n'; import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ +import { BaseProvider } from '../../common/base-provider'; import { ContentHelperError, ContentHelperErrorCode, @@ -34,15 +34,6 @@ interface RelatedPostsApiQuery { query: AnalyticsApiOptionalQueryParams } -/** - * The form of the response returned by the /stats/posts WordPress REST API - * endpoint. - */ -interface RelatedPostsApiResponse { - error?: Error; - data?: PostData[]; -} - /** * The form of the result returned by the getRelatedPosts() function. */ @@ -53,7 +44,28 @@ export interface GetRelatedPostsResult { export const RELATED_POSTS_DEFAULT_LIMIT = 5; -export class RelatedPostsProvider { +export class RelatedPostsProvider extends BaseProvider { + /** + * The singleton instance of the RelatedPostsProvider. + * + * @since 3.15.0 + */ + private static instance: RelatedPostsProvider; + + /** + * Returns the singleton instance of the RelatedPostsProvider. + * + * @since 3.15.0 + * + * @return {RelatedPostsProvider} The singleton instance. + */ + public static getInstance(): RelatedPostsProvider { + if ( ! this.instance ) { + this.instance = new RelatedPostsProvider(); + } + return this.instance; + } + /** * Returns related posts to the one that is currently being edited within * the WordPress Block Editor. @@ -67,7 +79,7 @@ export class RelatedPostsProvider { * * @return {Promise} Object containing message and posts. */ - static async getRelatedPosts( + public async getRelatedPosts( period: Period, metric: Metric, filter: PostFilter ): Promise { // Create API query. @@ -106,7 +118,7 @@ export class RelatedPostsProvider { * * @return {string} The generated message. */ - private static generateMessage( + private generateMessage( dataIsEmpty: boolean, period: Period, apiQueryMessage: string ): string { if ( dataIsEmpty ) { @@ -132,30 +144,15 @@ export class RelatedPostsProvider { * @param {RelatedPostsApiQuery} query * @return {Promise>} Array of fetched posts. */ - private static async fetchRelatedPostsFromWpEndpoint( query: RelatedPostsApiQuery ): Promise { - let response; - - try { - response = await apiFetch( { - path: addQueryArgs( '/wp-parsely/v1/stats/posts', { - ...query.query, - itm_source: 'wp-parsely-content-helper', - } ), - } ); - } catch ( wpError: any ) { // eslint-disable-line @typescript-eslint/no-explicit-any - return Promise.reject( new ContentHelperError( - wpError.message, wpError.code - ) ); - } - - if ( response?.error ) { - return Promise.reject( new ContentHelperError( - response.error.message, - ContentHelperErrorCode.ParselyApiResponseContainsError - ) ); - } - - return response?.data ?? []; + private async fetchRelatedPostsFromWpEndpoint( query: RelatedPostsApiQuery ): Promise { + const response = this.fetch( { + path: addQueryArgs( '/wp-parsely/v1/stats/posts', { + ...query.query, + itm_source: 'wp-parsely-content-helper', + } ), + } ); + + return response ?? []; } /** @@ -168,7 +165,7 @@ export class RelatedPostsProvider { * * @return {RelatedPostsApiQuery} The query object. */ - private static buildRelatedPostsApiQuery( + private buildRelatedPostsApiQuery( period: Period, metric:Metric, filter: PostFilter ): RelatedPostsApiQuery { const commonQueryParams = { diff --git a/src/content-helper/editor-sidebar/smart-linking/component-block-overlay.tsx b/src/content-helper/editor-sidebar/smart-linking/component-block-overlay.tsx index b3d4488bf..f8a532382 100644 --- a/src/content-helper/editor-sidebar/smart-linking/component-block-overlay.tsx +++ b/src/content-helper/editor-sidebar/smart-linking/component-block-overlay.tsx @@ -140,7 +140,7 @@ export const BlockOverlay = ( { className={ 'wp-parsely-block-overlay-cancel' } variant="link" onClick={ () => { - SmartLinkingProvider.cancelRequest(); + SmartLinkingProvider.getInstance().cancelRequest(); } } > { __( 'Cancel', 'wp-parsely' ) } diff --git a/src/content-helper/editor-sidebar/smart-linking/component.tsx b/src/content-helper/editor-sidebar/smart-linking/component.tsx index aad5dc8f0..6eed9600b 100644 --- a/src/content-helper/editor-sidebar/smart-linking/component.tsx +++ b/src/content-helper/editor-sidebar/smart-linking/component.tsx @@ -321,7 +321,7 @@ export const SmartLinkingPanel = ( { const urlExclusionList = generateProtocolVariants( postPermalink ); - generatedLinks = await SmartLinkingProvider.generateSmartLinks( + generatedLinks = await SmartLinkingProvider.getInstance().generateSmartLinks( ( selectedBlock?.originalContent && ! generatingFullContent ) ? selectedBlock.originalContent : postContent, diff --git a/src/content-helper/editor-sidebar/smart-linking/provider.ts b/src/content-helper/editor-sidebar/smart-linking/provider.ts index d29069846..72cc4938a 100644 --- a/src/content-helper/editor-sidebar/smart-linking/provider.ts +++ b/src/content-helper/editor-sidebar/smart-linking/provider.ts @@ -1,14 +1,12 @@ /** * WordPress dependencies */ -import apiFetch from '@wordpress/api-fetch'; -import { __ } from '@wordpress/i18n'; import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ -import { ContentHelperError, ContentHelperErrorCode } from '../../common/content-helper-error'; +import { BaseProvider } from '../../common/base-provider'; import { DEFAULT_MAX_LINK_WORDS, DEFAULT_MAX_LINKS } from './smart-linking'; /** @@ -24,39 +22,32 @@ export type LinkSuggestion = { offset: number; }; -/** - * Specifies the form of the response returned by the - * `content-suggestions/suggest-linked-reference` WordPress REST API endpoint. - * - * @since 3.14.0 - */ -interface SmartLinkingApiResponse { - error?: Error; - data: LinkSuggestion[]; -} - /** * Returns data from the `content-suggestions/suggest-linked-reference` WordPress REST API * endpoint. * * @since 3.14.0 */ -export class SmartLinkingProvider { +export class SmartLinkingProvider extends BaseProvider { /** - * The AbortController instance used to cancel the fetch request. + * The singleton instance of the SmartLinkingProvider. * * @since 3.15.0 */ - private static abortController: AbortController = new AbortController(); + private static instance: SmartLinkingProvider; /** - * Cancels the fetch request. + * Returns the singleton instance of the SmartLinkingProvider. * * @since 3.15.0 + * + * @return {SmartLinkingProvider} The singleton instance. */ - static cancelRequest(): void { - SmartLinkingProvider.abortController.abort(); - SmartLinkingProvider.abortController = new AbortController(); + public static getInstance(): SmartLinkingProvider { + if ( ! this.instance ) { + this.instance = new SmartLinkingProvider(); + } + return this.instance; } /** @@ -69,47 +60,24 @@ export class SmartLinkingProvider { * * @return {Promise} The resulting list of links. */ - static async generateSmartLinks( + public async generateSmartLinks( content: string, maxLinkWords: number = DEFAULT_MAX_LINK_WORDS, maxLinksPerPost: number = DEFAULT_MAX_LINKS, urlExclusionList: string[] = [], ): Promise { - let response; - try { - response = await apiFetch( { - method: 'POST', - path: addQueryArgs( '/wp-parsely/v1/content-suggestions/suggest-linked-reference', { - max_link_words: maxLinkWords, - max_links: maxLinksPerPost, - } ), - data: { - url_exclusion_list: urlExclusionList, - text: content, - }, - signal: SmartLinkingProvider.abortController.signal, - } ); - } catch ( wpError: any ) { // eslint-disable-line @typescript-eslint/no-explicit-any - if ( wpError.name === 'AbortError' ) { - return Promise.reject( - new ContentHelperError( - __( 'The operation was aborted.', 'wp-parsely' ), - ContentHelperErrorCode.ParselyAborted, - ), - ); - } - return Promise.reject( new ContentHelperError( wpError.message, wpError.code ) ); - } - - if ( response?.error ) { - return Promise.reject( - new ContentHelperError( - response.error.message, - ContentHelperErrorCode.ParselyApiResponseContainsError, - ), - ); - } + const response = await this.fetch( { + method: 'POST', + path: addQueryArgs( '/wp-parsely/v1/content-suggestions/suggest-linked-reference', { + max_link_words: maxLinkWords, + max_links: maxLinksPerPost, + } ), + data: { + url_exclusion_list: urlExclusionList, + text: content, + }, + } ); - return response.data ?? []; + return response ?? []; } } diff --git a/src/content-helper/editor-sidebar/title-suggestions/component.tsx b/src/content-helper/editor-sidebar/title-suggestions/component.tsx index 80abb80ce..29976251f 100644 --- a/src/content-helper/editor-sidebar/title-suggestions/component.tsx +++ b/src/content-helper/editor-sidebar/title-suggestions/component.tsx @@ -101,7 +101,7 @@ export const TitleSuggestionsPanel = (): JSX.Element => { ): Promise => { await setLoading( true ); - const provider = new TitleSuggestionsProvider(); + const provider = TitleSuggestionsProvider.getInstance(); try { const genTitles = await provider.generateTitles( content, 3, selectedTone, selectedPersona ); diff --git a/src/content-helper/editor-sidebar/title-suggestions/provider.ts b/src/content-helper/editor-sidebar/title-suggestions/provider.ts index 74b53a05a..c6095bf5e 100644 --- a/src/content-helper/editor-sidebar/title-suggestions/provider.ts +++ b/src/content-helper/editor-sidebar/title-suggestions/provider.ts @@ -1,29 +1,14 @@ /** * WordPress dependencies */ -import apiFetch from '@wordpress/api-fetch'; import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ -import { PersonaProp, getPersonaLabel } from '../../common/components/persona-selector'; -import { ToneProp, getToneLabel } from '../../common/components/tone-selector'; -import { - ContentHelperError, - ContentHelperErrorCode, -} from '../../common/content-helper-error'; - -/** - * Specifies the form of the response returned by the - * `content-suggestions/suggest-headline` WordPress REST API endpoint. - * - * @since 3.12.0 - */ -interface SuggestHeadlineApiResponse { - error?: Error; - data: string[], -} +import { BaseProvider } from '../../common/base-provider'; +import { getToneLabel, ToneProp } from '../../common/components/tone-selector'; +import { getPersonaLabel, PersonaProp } from '../../common/components/persona-selector'; /** * Returns data from the `content-suggestions/suggest-headline` WordPress REST API @@ -31,11 +16,33 @@ interface SuggestHeadlineApiResponse { * * @since 3.12.0 */ -export class TitleSuggestionsProvider { +export class TitleSuggestionsProvider extends BaseProvider { + /** + * The singleton instance of the TitleSuggestionsProvider. + * + * @since 3.15.0 + */ + private static instance: TitleSuggestionsProvider; + + /** + * Returns the singleton instance of the TitleSuggestionsProvider. + * + * @since 3.15.0 + * + * @return {TitleSuggestionsProvider} The singleton instance. + */ + public static getInstance(): TitleSuggestionsProvider { + if ( ! this.instance ) { + this.instance = new TitleSuggestionsProvider(); + } + + return this.instance; + } + /** * Returns a list of suggested titles for the given content. * - * @param {string } content The content to generate titles for. + * @param {string} content The content to generate titles for. * @param {number} limit The number of titles to return. Defaults to 3. * @param {ToneProp} tone The tone to use when generating the titles. * @param {PersonaProp} persona The persona to use when generating the titles. @@ -43,33 +50,18 @@ export class TitleSuggestionsProvider { * @return {Promise} The resulting list of titles. */ public async generateTitles( content: string, limit: number = 3, tone: ToneProp, persona: PersonaProp ): Promise { - let response; - - try { - response = await apiFetch( { - method: 'POST', - path: addQueryArgs( '/wp-parsely/v1/content-suggestions/suggest-headline', { - limit, - tone: getToneLabel( tone ), - persona: getPersonaLabel( persona ), - }, ), - data: { - content, - }, - } ); - } catch ( wpError: any ) { // eslint-disable-line @typescript-eslint/no-explicit-any - return Promise.reject( new ContentHelperError( - wpError.message, wpError.code - ) ); - } - - if ( response?.error ) { - return Promise.reject( new ContentHelperError( - response.error.message, - ContentHelperErrorCode.ParselyApiResponseContainsError - ) ); - } + const response = this.fetch( { + method: 'POST', + path: addQueryArgs( '/wp-parsely/v1/content-suggestions/suggest-headline', { + limit, + tone: getToneLabel( tone ), + persona: getPersonaLabel( persona ), + } ), + data: { + content, + }, + } ); - return response?.data ?? []; + return response ?? []; } } diff --git a/tests/js/content-helper/structure.test.tsx b/tests/js/content-helper/structure.test.tsx index ce41babf2..ed64e0e91 100644 --- a/tests/js/content-helper/structure.test.tsx +++ b/tests/js/content-helper/structure.test.tsx @@ -267,7 +267,7 @@ describe( 'PCH Editor Sidebar Related Post panel', () => { function getRelatedPostsMockFn( mockFn: () => Promise ) { return jest - .spyOn( RelatedPostsProvider, 'getRelatedPosts' ) + .spyOn( RelatedPostsProvider.getInstance(), 'getRelatedPosts' ) .mockImplementation( mockFn ); }