contentful-ui-extensions-sdk 4.14.1 → 4.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).contentfulExtension={})}(this,(function(e){"use strict";var t=function(e,n){return t=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])},t(e,n)};var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};var r=function(){function e(){this._id=0,this._listeners={}}return e.prototype.dispatch=function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var r in this._listeners)(e=this._listeners)[r].apply(e,t)},e.prototype.attach=function(e){var t=this;if("function"!=typeof e)throw new Error("listener function expected");var n=this._id++;return this._listeners[n]=e,function(){return delete t._listeners[n]}},e}(),o=function(e){function n(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.call(this)||this;if(!t.length)throw new Error("Initial value to be memoized expected");return r._memoizedArgs=t,r}return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(n,e),n.prototype.dispatch=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._memoizedArgs=t,e.prototype.dispatch.apply(this,t)},n.prototype.attach=function(t){var n=e.prototype.attach.call(this,t);return t.apply(void 0,this._memoizedArgs),n},n}(r);var i,a=function(){function e(e,t){var n=this;this._messageHandlers={},this._responseHandlers={},this._send=function(e,t){return function(n,r){var o=s.getMessageId();try{t.postMessage({source:e,id:o,method:n,params:r},"*")}catch(e){throw e instanceof DOMException&&"DataCloneError"===e.name&&"openDialog"===n&&console.error("Error: openCurrent[App] parameters could not be parsed. You likely tried to pass functions or DOM elements as a parameter. Tip: Use the App SDK directly within the dialog location.\n\nLearn more about the dialog location: https://ctfl.io/app-sdk-dialog"),e}return o}}(e,t.parent),t.addEventListener("message",(function(e){n._handleMessage(e.data)}))}return e.prototype.call=function(e){for(var t=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];var o=this._send(e,n);return new Promise((function(e,n){t._responseHandlers[o]={resolve:e,reject:n}}))},e.prototype.send=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];this._send(e,t)},e.prototype.addHandler=function(e,t){return e in this._messageHandlers||(this._messageHandlers[e]=new r),this._messageHandlers[e].attach(t)},e.prototype._handleMessage=function(e){if(e.method){var t=e.method,n=e.params,r=this._messageHandlers[t];r&&r.dispatch.apply(r,n)}else{var o=e.id,i=this._responseHandlers[o];if(!i)return;"result"in e?i.resolve(e.result):"error"in e&&i.reject(e.error),delete this._responseHandlers[o]}},e}(),s=(i=0,{getMessageId:function(){return i++}});var l=function(){function e(e,t){var n=this;this.id=t.id,this.locale=t.locale,this.type=t.type,this.required=t.required,this.validations=t.validations,this.items=t.items,this._value=t.value,this._valueSignal=new o(this._value),this._isDisabledSignal=new o(void 0),this._schemaErrorsChangedSignal=new o(void 0),this._channel=e,e.addHandler("valueChanged",(function(e,t,r){e!==n.id||t&&t!==n.locale||(n._value=r,n._valueSignal.dispatch(r))})),e.addHandler("isDisabledChangedForFieldLocale",(function(e,t,r){e===n.id&&t===n.locale&&n._isDisabledSignal.dispatch(r)})),e.addHandler("schemaErrorsChangedForFieldLocale",(function(e,t,r){e===n.id&&t===n.locale&&n._schemaErrorsChangedSignal.dispatch(r)}))}return e.prototype.getValue=function(){return this._value},e.prototype.setValue=function(e){return this._value=e,this._valueSignal.dispatch(e),this._channel.call("setValue",this.id,this.locale,e)},e.prototype.removeValue=function(){return this._value=void 0,this._channel.call("removeValue",this.id,this.locale)},e.prototype.setInvalid=function(e){return this._channel.call("setInvalid",e,this.locale)},e.prototype.onValueChanged=function(e){return this._valueSignal.attach(e)},e.prototype.onIsDisabledChanged=function(e){return this._isDisabledSignal.attach(e)},e.prototype.onSchemaErrorsChanged=function(e){return this._schemaErrorsChangedSignal.attach(e)},e}(),u=function(){function e(e,t,r){this.id=t.id,this.locales=t.locales,this.type=t.type,this.required=t.required,this.validations=t.validations,this.items=t.items,this._defaultLocale=r,this._fieldLocales=t.locales.reduce((function(r,o){var i,a=new l(e,{id:t.id,type:t.type,required:t.required,validations:t.validations,items:t.items,locale:o,value:t.values[o]});return n(n({},r),((i={})[o]=a,i))}),{}),this.assertHasLocale(r)}return e.prototype.getValue=function(e){return this._getFieldLocale(e).getValue()},e.prototype.setValue=function(e,t){return this._getFieldLocale(t).setValue(e)},e.prototype.removeValue=function(e){return this.setValue(void 0,e)},e.prototype.onValueChanged=function(e,t){var n=t||e;return t||(e=""),this._getFieldLocale(e).onValueChanged(n)},e.prototype.onIsDisabledChanged=function(e,t){var n=t||e;return t||(e=""),this._getFieldLocale(e).onIsDisabledChanged(n)},e.prototype._getFieldLocale=function(e){return e=e||this._defaultLocale,this.assertHasLocale(e),this._fieldLocales[e]},e.prototype.getForLocale=function(e){if(!e)throw new Error("getForLocale must be passed a locale");return this._getFieldLocale(e)},e.prototype.assertHasLocale=function(e){if(!this._fieldLocales[e])throw new Error('Unknown locale "'.concat(e,'" for field "').concat(this.id,'"'))},e}();function c(e,t){var n,r=e.document,o=e.MutationObserver,i=e.ResizeObserver,a=!1,s=!1,l=new Set,u=new o((function(e){!function(e){e.forEach((function(e){switch(e.type){case"attributes":if(e.target.nodeType===Node.ELEMENT_NODE){var t=e.target;p(e.type,t)?l.add(t):l.delete(t)}break;case"childList":e.addedNodes.forEach((function(t){if(t.nodeType===Node.ELEMENT_NODE){var n=t;p(e.type,n)&&l.add(n)}})),e.removedNodes.forEach((function(e){var t=e;l.delete(t)}))}}))}(e),a&&d.updateHeight()})),c=new i((function(){d.updateHeight()}));u.observe(r.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0});var d={startAutoResizer:function(e){var t=(void 0===e?{}:e).absoluteElements;if(s=Boolean(t===void 0?false:t),d.updateHeight(),a)return;a=!0,c.observe(r.body)},stopAutoResizer:function(){if(!a)return;a=!1,c.disconnect()},updateHeight:function(e){void 0===e&&(e=null);if(null===e){var o=Math.ceil(r.documentElement.getBoundingClientRect().height);if(s&&l.size){var i=o;l.forEach((function(e){i=Math.max(e.getBoundingClientRect().bottom,i)})),e=i}else e=o}e!==n&&(t.send("setHeight",e),n=e)}};return d;function p(e,t){var n=getComputedStyle(t);return"absolute"===n.position&&("attributes"!==e||"none"!==n.display)}}var d=["getTask","getTasks","createTask","updateTask","deleteTask"];function p(e,t,r,i){var a=t.sys,s=new o(a),l=t.metadata,u=new o(l);e.addHandler("sysChanged",(function(e){a=e,s.dispatch(a)})),e.addHandler("metadataChanged",(function(e){l=e,u.dispatch(l)}));var c={};return d.forEach((function(t){c[t]=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return e.call("callEntryMethod",t,n)}})),n(n(n({getSys:function(){return a},publish:function(t){return e.call("callEntryMethod","publish",[t])},unpublish:function(){return e.call("callEntryMethod","unpublish")},save:function(){return e.call("callEntryMethod","save")},onSysChanged:function(e){return s.attach(e)},fields:r.reduce((function(e,t){return e[t.id]=i(t),e}),{})},l?{metadata:l}:{}),{getMetadata:function(){return l},onMetadataChanged:function(e){return u.attach(e)}}),c)}var f=["getContentType","getEntry","getEntrySnapshots","getAsset","getEditorInterface","getPublishedEntries","getPublishedAssets","getContentTypes","getEntries","getEditorInterfaces","getAssets","createContentType","createEntry","createAsset","updateContentType","updateEntry","updateAsset","deleteContentType","deleteEntry","deleteAsset","publishEntry","publishAsset","unpublishEntry","unpublishAsset","archiveEntry","archiveAsset","unarchiveEntry","unarchiveAsset","createUpload","processAsset","waitUntilAssetProcessed","getUsers","getAllScheduledActions","getEntityScheduledActions","signRequest","createTag","readTags","updateTag","deleteTag","getTeams"];function h(e,t){var n={};return f.forEach((function(t){n[t]=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return console.warn("You called ".concat(String(t)," on the Space API. Since version 4.0.0 the Space API and its methods are deprecated, and they will be removed from version 5.0.0 on. We recommend that you use the CMA client instead. See https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/#using-the-contentful-management-library for more details.")),e.call("callSpaceMethod",t,n)}})),n.getCachedContentTypes=function(){return function(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}([],t,!0)},n}var g=function(e){return"object"!=typeof(t=e)||null===t||Array.isArray(t)?{}:e;var t};function v(e,t){return{openAlert:r.bind(null,"alert"),openConfirm:r.bind(null,"confirm"),openPrompt:r.bind(null,"prompt"),openExtension:o,openCurrentApp:i,openCurrent:function(e){return t.app?i(e):o(n(n({},e),{id:t.extension}))},selectSingleEntry:a.bind(null,"Entry",!1),selectSingleAsset:a.bind(null,"Asset",!1),selectMultipleEntries:a.bind(null,"Entry",!0),selectMultipleAssets:a.bind(null,"Asset",!0)};function r(t,n){return e.call("openDialog",t,g(n))}function o(r){var o=g(r);if((o=n(n({},o),{id:o.id||t.extension})).id)return e.call("openDialog","extension",o);throw new Error("Extension ID not provided.")}function i(r){if(r=g(r),t.app){var o=n(n({},r),{id:t.app});return e.call("openDialog","app",o)}throw new Error("Not in the app context.")}function a(t,n,r){return(r=g(r)).entityType=t,r.multiple=n,e.call("openDialog","entitySelector",r)}}function y(e,t){var n=new o([void 0]),r=new o([void 0]);return e.addHandler("localeSettingsChanged",(function(e){n.dispatch(e)})),e.addHandler("showDisabledFieldsChanged",(function(e){r.dispatch(e)})),{editorInterface:t,onLocaleSettingsChanged:function(e){return n.attach(e)},onShowDisabledFieldsChanged:function(e){return r.attach(e)}}}function m(e,t){var o=new r;return e.addHandler("navigateSlideIn",(function(e){o.dispatch(e)})),{openEntry:function(t,r){return e.call("navigateToContentEntity",n(n({},r),{entityType:"Entry",id:t}))},openNewEntry:function(t,r){return e.call("navigateToContentEntity",n(n({},r),{entityType:"Entry",id:null,contentTypeId:t}))},openBulkEditor:function(t,r){return e.call("navigateToBulkEditor",n({entryId:t},r))},openAsset:function(t,r){return e.call("navigateToContentEntity",n(n({},r),{entityType:"Asset",id:t}))},openNewAsset:function(t){return e.call("navigateToContentEntity",n(n({},t),{entityType:"Asset",id:null}))},openPageExtension:function(r){return e.call("navigateToPage",n({type:"extension",id:t.extension},r))},openCurrentAppPage:function(r){return e.call("navigateToPage",n({type:"app",id:t.app},r))},openAppConfig:function(){return e.call("navigateToAppConfig")},openEntriesList:function(){return e.call("navigateToSpaceEnvRoute",{route:"entries"})},openAssetsList:function(){return e.call("navigateToSpaceEnvRoute",{route:"assets"})},onSlideInNavigation:function(e){return o.attach(e)}}}var E="preInstall",_="postInstall",A=function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)},C=function(e){return"function"==typeof e},T=function(e){return console.error(e),Promise.resolve(!1)},b=function(e,t,n){if(!C(e))return Promise.resolve(t);var r;try{r=void 0===n?e():e(n)}catch(e){return T(e)}var o,i=r;return A(o=i)&&C(o.then)||(i=Promise.resolve(i)),i.then((function(e){return e instanceof Error?Promise.reject(e):!1!==e&&(A(e)?e:t)}),T).catch(T)};function w(e){var t,n=((t={}).preInstall=null,t.postInstall=null,t),r=function(e,t){if(!C(t))throw new Error("Handler must be a function.");n[e]=t};return e.addHandler("appHook",(function(t){var r=t.stage,o=t.installationRequestId,i=t.err;return r===E?b(n[r],{}).then((function(t){return e.send("appHookResult",{stage:r,installationRequestId:o,result:t})})):r===_?b(n[r],void 0,i||null).then((function(){return e.send("appHookResult",{stage:r,installationRequestId:o})})):Promise.resolve()})),{setReady:function(){return e.call("callAppMethod","setReady")},isInstalled:function(){return e.call("callAppMethod","isInstalled")},getParameters:function(){return e.call("callAppMethod","getParameters")},getCurrentState:function(){return e.call("callAppMethod","getCurrentState")},onConfigure:function(e){r(E,e)},onConfigurationCompleted:function(e){r(_,e)}}}var I,L={LOCATION_ENTRY_FIELD:"entry-field",LOCATION_ENTRY_FIELD_SIDEBAR:"entry-field-sidebar",LOCATION_ENTRY_SIDEBAR:"entry-sidebar",LOCATION_DIALOG:"dialog",LOCATION_ENTRY_EDITOR:"entry-editor",LOCATION_PAGE:"page",LOCATION_APP_CONFIG:"app-config",LOCATION_HOME:"home"},O=function(e){return function(t){return e.call("CMAAdapterCall",t)}};function S(e){return{makeRequest:O(e)}}var N=[H,P,function(e,t){var n=t.field;if(!n)throw new Error('FieldAPI called for location without "field" property defined.');return{field:new l(e,n)}},R,M],D=((I={})[L.LOCATION_ENTRY_FIELD]=N,I[L.LOCATION_ENTRY_FIELD_SIDEBAR]=N,I[L.LOCATION_ENTRY_SIDEBAR]=[H,P,R,M],I[L.LOCATION_ENTRY_EDITOR]=[H,P,R],I[L.LOCATION_DIALOG]=[H,function(e){return{close:function(t){return e.send("closeDialog",t)}}},M],I[L.LOCATION_PAGE]=[H],I[L.LOCATION_HOME]=[H],I[L.LOCATION_APP_CONFIG]=[H,function(e){return{app:w(e)}}],I);function H(e,t){var n=t.user,r=t.parameters,o=t.locales,i=t.ids,a=t.initialContentTypes,s=t.location||L.LOCATION_ENTRY_FIELD;return{cmaAdapter:S(e),location:{is:function(e){return s===e}},user:n,parameters:r,locales:{available:o.available,default:o.default,names:o.names,fallbacks:o.fallbacks,optional:o.optional,direction:o.direction},space:h(e,a),dialogs:v(e,i),navigator:m(e,i),notifier:{success:function(t){return e.send("notify",{type:"success",message:t})},error:function(t){return e.send("notify",{type:"error",message:t})},warning:function(t){return e.send("notify",{type:"warning",message:t})}},ids:i,access:{can:function(t,n,r){return e.call("checkAccess",t,n,r)},canEditAppConfig:function(){return e.call("checkAppConfigAccess")}}}}function M(e,t,n){return{window:c(n,e)}}function R(e,t){return{editor:y(e,t.editorInterface)}}function P(e,t){var n=t.locales,r=t.contentType,o=t.entry,i=t.fieldInfo;return{contentType:r,entry:p(e,o,i,(function(t){return new u(e,t,n.default)}))}}var F=function(e,t){if(void 0===e.window||void 0===e.document)return function(){};var n,r,o=((n={promise:null,resolve:null,isFulfilled:!1}).promise=new Promise((function(e){n.resolve=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];n.isFulfilled=!0,e.apply(void 0,t)}})),n);return o.promise.then((function(t){var n=t[0],r=e.document;r.addEventListener("focus",(function(){return n.send("setActive",!0)}),!0),r.addEventListener("blur",(function(){return n.send("setActive",!1)}),!0)})),function(e,t){!function(e,t){function n(r){var o=r.data;"connect"===o.method&&(e.removeEventListener("message",n),t.apply(void 0,o.params))}e.addEventListener("message",n)}(e,(function(n,r){var o=new a(n.id,e);t(o,n,r)}))}(e,(function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o.resolve(e)})),function(n,i){var a=void 0===i?{supressIframeWarning:!1}:i,l=a.makeCustomApi;a.supressIframeWarning||function(e){e.self===e.top&&console.error("Cannot use App SDK outside of Contenful:\n\nIn order for the App SDK to function correctly, your app needs to be run in an iframe in the Contentful Web App, Compose or Launch.\n\nLearn more about local development with the App SDK here:\nhttps://www.contentful.com/developers/docs/extensibility/ui-extensions/faq/#how-can-i-develop-with-the-ui-extension-sdk-locally")}(e),r||(r=o.promise.then((function(n){var r,o=n[0],i=n[1],a=n[2],s=t(o,i,e);return"function"==typeof l&&(r=l(o,i)),a.forEach((function(e){o._handleMessage(e)})),[s,r]})),o.isFulfilled||function(e){var t=s.getMessageId();e.parent.postMessage({id:t,method:"init",params:[]},"*")}(e)),r.then((function(e){var t=e[0],r=e[1];return n(t,r)}))}}(globalThis,(function(e,t,r){return(D[t.location]||N).reduce((function(o,i){return n(n({},o),i(e,t,r))}),{})}));e.init=F,e.locations=L,Object.defineProperty(e,"__esModule",{value:!0})})),globalThis.contentfulApp=globalThis.contentfulExtension;
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).contentfulExtension={})}(this,(function(e){"use strict";var t=function(e,n){return t=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])},t(e,n)};var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};function r(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function s(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))}function o(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,r=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){a.label=s[1];break}if(6===s[0]&&a.label<o[1]){a.label=o[1],o=s;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(s);break}o[2]&&a.ops.pop(),a.trys.pop();continue}s=t.call(e,a)}catch(e){s=[6,e],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}var i=function(){function e(){this._id=0,this._listeners={}}return e.prototype.dispatch=function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var r in this._listeners)(e=this._listeners)[r].apply(e,t)},e.prototype.attach=function(e){var t=this;if("function"!=typeof e)throw new Error("listener function expected");var n=this._id++;return this._listeners[n]=e,function(){return delete t._listeners[n]}},e}(),a=function(e){function n(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.call(this)||this;if(!t.length)throw new Error("Initial value to be memoized expected");return r._memoizedArgs=t,r}return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(n,e),n.prototype.dispatch=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._memoizedArgs=t,e.prototype.dispatch.apply(this,t)},n.prototype.attach=function(t){var n=e.prototype.attach.call(this,t);return t.apply(void 0,this._memoizedArgs),n},n.prototype.getMemoizedArgs=function(){return this._memoizedArgs},n}(i);var s,l=function(){function e(e,t){var n=this;this._messageHandlers={},this._responseHandlers={},this._send=function(e,t){return function(n,r){var o=u.getMessageId();try{t.postMessage({source:e,id:o,method:n,params:r},"*")}catch(e){throw e instanceof DOMException&&"DataCloneError"===e.name&&"openDialog"===n&&console.error("Error: openCurrent[App] parameters could not be parsed. You likely tried to pass functions or DOM elements as a parameter. Tip: Use the App SDK directly within the dialog location.\n\nLearn more about the dialog location: https://ctfl.io/app-sdk-dialog"),e}return o}}(e,t.parent),t.addEventListener("message",(function(e){n._handleMessage(e.data)}))}return e.prototype.call=function(e){for(var t=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];var o=this._send(e,n);return new Promise((function(e,n){t._responseHandlers[o]={resolve:e,reject:n}}))},e.prototype.send=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];this._send(e,t)},e.prototype.addHandler=function(e,t){return e in this._messageHandlers||(this._messageHandlers[e]=new i),this._messageHandlers[e].attach(t)},e.prototype._handleMessage=function(e){if(e.method){var t=e.method,n=e.params,r=this._messageHandlers[t];r&&r.dispatch.apply(r,n)}else{var o=e.id,i=this._responseHandlers[o];if(!i)return;"result"in e?i.resolve(e.result):"error"in e&&i.reject(e.error),delete this._responseHandlers[o]}},e}(),u=(s=0,{getMessageId:function(){return s++}});var c=function(){function e(e,t){var n=this;this.id=t.id,this.locale=t.locale,this.type=t.type,this.required=t.required,this.validations=t.validations,this.items=t.items,this._value=t.value,this._valueSignal=new a(this._value),this._isDisabledSignal=new a(t.isDisabled),this._schemaErrorsChangedSignal=new a(t.schemaErrors),this._channel=e,e.addHandler("valueChanged",(function(e,t,r){e!==n.id||t&&t!==n.locale||(n._value=r,n._valueSignal.dispatch(r))})),e.addHandler("isDisabledChangedForFieldLocale",(function(e,t,r){e===n.id&&t===n.locale&&n._isDisabledSignal.dispatch(r)})),e.addHandler("schemaErrorsChangedForFieldLocale",(function(e,t,r){e===n.id&&t===n.locale&&n._schemaErrorsChangedSignal.dispatch(r)}))}return e.prototype.getValue=function(){return this._value},e.prototype.setValue=function(e){return r(this,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return this._value=e,this._valueSignal.dispatch(e),[4,this._channel.call("setValue",this.id,this.locale,e)];case 1:return[2,t.sent()]}}))}))},e.prototype.removeValue=function(){return r(this,void 0,void 0,(function(){return o(this,(function(e){switch(e.label){case 0:return this._value=void 0,[4,this._channel.call("removeValue",this.id,this.locale)];case 1:return e.sent(),[2]}}))}))},e.prototype.setInvalid=function(e){return this._channel.call("setInvalid",e,this.locale)},e.prototype.onValueChanged=function(e){return this._valueSignal.attach(e)},e.prototype.getIsDisabled=function(){return this._isDisabledSignal.getMemoizedArgs()[0]},e.prototype.onIsDisabledChanged=function(e){return this._isDisabledSignal.attach(e)},e.prototype.getSchemaErrors=function(){return this._schemaErrorsChangedSignal.getMemoizedArgs()[0]},e.prototype.onSchemaErrorsChanged=function(e){return this._schemaErrorsChangedSignal.attach(e)},e}(),d=function(){function e(e,t,r){this.id=t.id,this.locales=t.locales,this.type=t.type,this.required=t.required,this.validations=t.validations,this.items=t.items,this._defaultLocale=r,this._fieldLocales=t.locales.reduce((function(r,o){var i,a=new c(e,{id:t.id,type:t.type,required:t.required,validations:t.validations,items:t.items,locale:o,value:t.values[o],isDisabled:t.isDisabled[o],schemaErrors:t.schemaErrors[o]});return n(n({},r),((i={})[o]=a,i))}),{}),this.assertHasLocale(r)}return e.prototype.getValue=function(e){return this._getFieldLocale(e).getValue()},e.prototype.setValue=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,this._getFieldLocale(t).setValue(e)];case 1:return[2,n.sent()]}}))}))},e.prototype.removeValue=function(e){return r(this,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,this.setValue(void 0,e)];case 1:return t.sent(),[2]}}))}))},e.prototype.onValueChanged=function(e,t){var n=t||e;return t||(e=""),this._getFieldLocale(e).onValueChanged(n)},e.prototype.onIsDisabledChanged=function(e,t){var n=t||e;return t||(e=""),this._getFieldLocale(e).onIsDisabledChanged(n)},e.prototype._getFieldLocale=function(e){return e=e||this._defaultLocale,this.assertHasLocale(e),this._fieldLocales[e]},e.prototype.getForLocale=function(e){if(!e)throw new Error("getForLocale must be passed a locale");return this._getFieldLocale(e)},e.prototype.assertHasLocale=function(e){if(!this._fieldLocales[e])throw new Error('Unknown locale "'.concat(e,'" for field "').concat(this.id,'"'))},e}();function p(e,t){var n,r=e.document,o=e.MutationObserver,i=e.ResizeObserver,a=!1,s=!1,l=new Set,u=new o((function(e){!function(e){e.forEach((function(e){switch(e.type){case"attributes":if(e.target.nodeType===Node.ELEMENT_NODE){var t=e.target;p(e.type,t)?l.add(t):l.delete(t)}break;case"childList":e.addedNodes.forEach((function(t){if(t.nodeType===Node.ELEMENT_NODE){var n=t;p(e.type,n)&&l.add(n)}})),e.removedNodes.forEach((function(e){var t=e;l.delete(t)}))}}))}(e),a&&d.updateHeight()})),c=new i((function(){d.updateHeight()}));u.observe(r.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0});var d={startAutoResizer:function(e){var t=(void 0===e?{}:e).absoluteElements;if(s=Boolean(t===void 0?false:t),d.updateHeight(),a)return;a=!0,c.observe(r.body)},stopAutoResizer:function(){if(!a)return;a=!1,c.disconnect()},updateHeight:function(e){void 0===e&&(e=null);if(null===e){var o=Math.ceil(r.documentElement.getBoundingClientRect().height);if(s&&l.size){var i=o;l.forEach((function(e){i=Math.max(e.getBoundingClientRect().bottom,i)})),e=i}else e=o}e!==n&&(t.send("setHeight",e),n=e)}};return d;function p(e,t){var n=getComputedStyle(t);return"absolute"===n.position&&("attributes"!==e||"none"!==n.display)}}var f=["getTask","getTasks","createTask","updateTask","deleteTask"];function h(e,t,r,o){var i=t.sys,s=new a(i),l=t.metadata,u=new a(l);e.addHandler("sysChanged",(function(e){i=e,s.dispatch(i)})),e.addHandler("metadataChanged",(function(e){l=e,u.dispatch(l)}));var c={};return f.forEach((function(t){c[t]=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return e.call("callEntryMethod",t,n)}})),n(n(n({getSys:function(){return i},publish:function(t){return e.call("callEntryMethod","publish",[t])},unpublish:function(){return e.call("callEntryMethod","unpublish")},save:function(){return e.call("callEntryMethod","save")},onSysChanged:function(e){return s.attach(e)},fields:r.reduce((function(e,t){return e[t.id]=o(t),e}),{})},l?{metadata:l}:{}),{getMetadata:function(){return l},onMetadataChanged:function(e){return u.attach(e)}}),c)}var g=["getContentType","getEntry","getEntrySnapshots","getAsset","getEditorInterface","getPublishedEntries","getPublishedAssets","getContentTypes","getEntries","getEditorInterfaces","getAssets","createContentType","createEntry","createAsset","updateContentType","updateEntry","updateAsset","deleteContentType","deleteEntry","deleteAsset","publishEntry","publishAsset","unpublishEntry","unpublishAsset","archiveEntry","archiveAsset","unarchiveEntry","unarchiveAsset","createUpload","processAsset","waitUntilAssetProcessed","getUsers","getAllScheduledActions","getEntityScheduledActions","signRequest","createTag","readTags","updateTag","deleteTag","getTeams"];function v(e,t){var n={};return g.forEach((function(t){n[t]=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return console.warn("You called ".concat(String(t)," on the Space API. Since version 4.0.0 the Space API and its methods are deprecated, and they will be removed from version 5.0.0 on. We recommend that you use the CMA client instead. See https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/#using-the-contentful-management-library for more details.")),e.call("callSpaceMethod",t,n)}})),n.getCachedContentTypes=function(){return function(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}([],t,!0)},n}var y=function(e){return"object"!=typeof(t=e)||null===t||Array.isArray(t)?{}:e;var t};function m(e,t){return{openAlert:r.bind(null,"alert"),openConfirm:r.bind(null,"confirm"),openPrompt:r.bind(null,"prompt"),openExtension:o,openCurrentApp:i,openCurrent:function(e){return t.app?i(e):o(n(n({},e),{id:t.extension}))},selectSingleEntry:a.bind(null,"Entry",!1),selectSingleAsset:a.bind(null,"Asset",!1),selectMultipleEntries:a.bind(null,"Entry",!0),selectMultipleAssets:a.bind(null,"Asset",!0)};function r(t,n){return e.call("openDialog",t,y(n))}function o(r){var o=y(r);if((o=n(n({},o),{id:o.id||t.extension})).id)return e.call("openDialog","extension",o);throw new Error("Extension ID not provided.")}function i(r){if(r=y(r),t.app){var o=n(n({},r),{id:t.app});return e.call("openDialog","app",o)}throw new Error("Not in the app context.")}function a(t,n,r){return(r=y(r)).entityType=t,r.multiple=n,e.call("openDialog","entitySelector",r)}}function E(e,t,n){var r=new a(n.localeSettings),o=new a(n.showHiddenFields);return e.addHandler("localeSettingsChanged",(function(e){r.dispatch(e)})),e.addHandler("showHiddenFieldsChanged",(function(e){o.dispatch(e)})),{editorInterface:t,getLocaleSettings:function(){return r.getMemoizedArgs()[0]},onLocaleSettingsChanged:function(e){return r.attach(e)},onShowDisabledFieldsChanged:function(e){return o.attach(e)},getShowHiddenFields:function(){return o.getMemoizedArgs()[0]},onShowHiddenFieldsChanged:function(e){return o.attach(e)}}}function _(e,t){var r=new i;return e.addHandler("navigateSlideIn",(function(e){r.dispatch(e)})),{openEntry:function(t,r){return e.call("navigateToContentEntity",n(n({},r),{entityType:"Entry",id:t}))},openNewEntry:function(t,r){return e.call("navigateToContentEntity",n(n({},r),{entityType:"Entry",id:null,contentTypeId:t}))},openBulkEditor:function(t,r){return e.call("navigateToBulkEditor",n({entryId:t},r))},openAsset:function(t,r){return e.call("navigateToContentEntity",n(n({},r),{entityType:"Asset",id:t}))},openNewAsset:function(t){return e.call("navigateToContentEntity",n(n({},t),{entityType:"Asset",id:null}))},openPageExtension:function(r){return e.call("navigateToPage",n({type:"extension",id:t.extension},r))},openCurrentAppPage:function(r){return e.call("navigateToPage",n({type:"app",id:t.app},r))},openAppConfig:function(){return e.call("navigateToAppConfig")},openEntriesList:function(){return e.call("navigateToSpaceEnvRoute",{route:"entries"})},openAssetsList:function(){return e.call("navigateToSpaceEnvRoute",{route:"assets"})},onSlideInNavigation:function(e){return r.attach(e)}}}var A="preInstall",b="postInstall",w=function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)},C=function(e){return"function"==typeof e},T=function(e){return console.error(e),Promise.resolve(!1)},I=function(e,t,n){if(!C(e))return Promise.resolve(t);var r;try{r=void 0===n?e():e(n)}catch(e){return T(e)}var o,i=r;return w(o=i)&&C(o.then)||(i=Promise.resolve(i)),i.then((function(e){return e instanceof Error?Promise.reject(e):!1!==e&&(w(e)?e:t)}),T).catch(T)};function L(e){var t,n=((t={}).preInstall=null,t.postInstall=null,t),r=function(e,t){if(!C(t))throw new Error("Handler must be a function.");n[e]=t};return e.addHandler("appHook",(function(t){var r=t.stage,o=t.installationRequestId,i=t.err;return r===A?I(n[r],{}).then((function(t){return e.send("appHookResult",{stage:r,installationRequestId:o,result:t})})):r===b?I(n[r],void 0,i||null).then((function(){return e.send("appHookResult",{stage:r,installationRequestId:o})})):Promise.resolve()})),{setReady:function(){return e.call("callAppMethod","setReady")},isInstalled:function(){return e.call("callAppMethod","isInstalled")},getParameters:function(){return e.call("callAppMethod","getParameters")},getCurrentState:function(){return e.call("callAppMethod","getCurrentState")},onConfigure:function(e){r(A,e)},onConfigurationCompleted:function(e){r(b,e)}}}var O,S={LOCATION_ENTRY_FIELD:"entry-field",LOCATION_ENTRY_FIELD_SIDEBAR:"entry-field-sidebar",LOCATION_ENTRY_SIDEBAR:"entry-sidebar",LOCATION_DIALOG:"dialog",LOCATION_ENTRY_EDITOR:"entry-editor",LOCATION_PAGE:"page",LOCATION_APP_CONFIG:"app-config",LOCATION_HOME:"home"},D=function(e){return function(t){return e.call("CMAAdapterCall",t)}};function N(e){return{makeRequest:D(e)}}var M=[P,F,function(e,t){var n=t.field;if(!n)throw new Error('FieldAPI called for location without "field" property defined.');return{field:new c(e,n)}},x,R],H=((O={})[S.LOCATION_ENTRY_FIELD]=M,O[S.LOCATION_ENTRY_FIELD_SIDEBAR]=M,O[S.LOCATION_ENTRY_SIDEBAR]=[P,F,x,R],O[S.LOCATION_ENTRY_EDITOR]=[P,F,x],O[S.LOCATION_DIALOG]=[P,function(e){return{close:function(t){return e.send("closeDialog",t)}}},R],O[S.LOCATION_PAGE]=[P],O[S.LOCATION_HOME]=[P],O[S.LOCATION_APP_CONFIG]=[P,function(e){return{app:L(e)}}],O);function P(e,t){var n=t.user,r=t.parameters,o=t.locales,i=t.ids,a=t.initialContentTypes,s=t.location||S.LOCATION_ENTRY_FIELD;return{cmaAdapter:N(e),location:{is:function(e){return s===e}},user:n,parameters:r,locales:{available:o.available,default:o.default,names:o.names,fallbacks:o.fallbacks,optional:o.optional,direction:o.direction},space:v(e,a),dialogs:m(e,i),navigator:_(e,i),notifier:{success:function(t){return e.send("notify",{type:"success",message:t})},error:function(t){return e.send("notify",{type:"error",message:t})},warning:function(t){return e.send("notify",{type:"warning",message:t})}},ids:i,access:{can:function(t,n,r){return e.call("checkAccess",t,n,r)},canEditAppConfig:function(){return e.call("checkAppConfigAccess")}}}}function R(e,t,n){return{window:p(n,e)}}function x(e,t){return{editor:E(e,t.editorInterface,t.editor)}}function F(e,t){var n=t.locales,r=t.contentType,o=t.entry,i=t.fieldInfo;return{contentType:r,entry:h(e,o,i,(function(t){return new d(e,t,n.default)}))}}var k=function(e,t){if(void 0===e.window||void 0===e.document)return function(){};var n,r,o=((n={promise:null,resolve:null,isFulfilled:!1}).promise=new Promise((function(e){n.resolve=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];n.isFulfilled=!0,e.apply(void 0,t)}})),n);return o.promise.then((function(t){var n=t[0],r=e.document;r.addEventListener("focus",(function(){return n.send("setActive",!0)}),!0),r.addEventListener("blur",(function(){return n.send("setActive",!1)}),!0)})),function(e,t){!function(e,t){function n(r){var o=r.data;"connect"===o.method&&(e.removeEventListener("message",n),t.apply(void 0,o.params))}e.addEventListener("message",n)}(e,(function(n,r){var o=new l(n.id,e);t(o,n,r)}))}(e,(function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o.resolve(e)})),function(n,i){var a=void 0===i?{supressIframeWarning:!1}:i,s=a.makeCustomApi;a.supressIframeWarning||function(e){e.self===e.top&&console.error("Cannot use App SDK outside of Contenful:\n\nIn order for the App SDK to function correctly, your app needs to be run in an iframe in the Contentful Web App, Compose or Launch.\n\nLearn more about local development with the App SDK here:\nhttps://www.contentful.com/developers/docs/extensibility/ui-extensions/faq/#how-can-i-develop-with-the-ui-extension-sdk-locally")}(e),r||(r=o.promise.then((function(n){var r,o=n[0],i=n[1],a=n[2],l=t(o,i,e);return"function"==typeof s&&(r=s(o,i)),a.forEach((function(e){o._handleMessage(e)})),[l,r]})),o.isFulfilled||function(e){var t=u.getMessageId();e.parent.postMessage({id:t,method:"init",params:[]},"*")}(e)),r.then((function(e){var t=e[0],r=e[1];return n(t,r)}))}}(globalThis,(function(e,t,r){return(H[t.location]||M).reduce((function(o,i){return n(n({},o),i(e,t,r))}),{})}));e.init=k,e.locations=S,Object.defineProperty(e,"__esModule",{value:!0})})),globalThis.contentfulApp=globalThis.contentfulExtension;
package/dist/editor.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { EditorInterface, SharedEditorSDK } from './types';
2
2
  import { Channel } from './channel';
3
- export default function createEditor(channel: Channel, editorInterface: EditorInterface): SharedEditorSDK['editor'];
3
+ import { ConnectMessage } from './types/api.types';
4
+ export default function createEditor(channel: Channel, editorInterface: EditorInterface, editorData: Exclude<ConnectMessage['editor'], undefined>): SharedEditorSDK['editor'];
package/dist/entry.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { Channel } from './channel';
2
- import { EntryAPI, EntryFieldInfo } from './types';
3
- export default function createEntry(channel: Channel, entryData: any, fieldInfo: EntryFieldInfo[], createEntryField: Function): EntryAPI;
2
+ import { EntryAPI, EntryFieldAPI, EntryFieldInfo } from './types';
3
+ export default function createEntry(channel: Channel, entryData: any, fieldInfo: EntryFieldInfo[], createEntryField: (info: EntryFieldInfo) => EntryFieldAPI): EntryAPI;
@@ -1,5 +1,5 @@
1
1
  import { Channel } from './channel';
2
- import { FieldAPI, FieldInfo, Items } from './types';
2
+ import { FieldAPI, FieldInfo, Items, SerializedJSONValue } from './types';
3
3
  import { ValidationError } from './types/validation-error';
4
4
  export default class FieldLocale implements FieldAPI {
5
5
  id: string;
@@ -15,10 +15,12 @@ export default class FieldLocale implements FieldAPI {
15
15
  private _channel;
16
16
  constructor(channel: Channel, info: FieldInfo);
17
17
  getValue(): any;
18
- setValue(value: any): any;
19
- removeValue(): any;
20
- setInvalid(isInvalid: boolean): any;
18
+ setValue(value: any): Promise<SerializedJSONValue | undefined>;
19
+ removeValue(): Promise<void>;
20
+ setInvalid(isInvalid: boolean): Promise<unknown>;
21
21
  onValueChanged(handler: (value: any) => any): () => boolean;
22
+ getIsDisabled(): boolean;
22
23
  onIsDisabledChanged(handler: (isDisabled: boolean) => any): () => boolean;
24
+ getSchemaErrors(): ValidationError[];
23
25
  onSchemaErrorsChanged(handler: (errors: ValidationError[]) => void): () => boolean;
24
26
  }
package/dist/field.d.ts CHANGED
@@ -12,8 +12,8 @@ export default class Field implements EntryFieldAPI {
12
12
  items?: Items;
13
13
  constructor(channel: Channel, info: EntryFieldInfo, defaultLocale: string);
14
14
  getValue(locale?: string): any;
15
- setValue(value: any, locale?: string): any;
16
- removeValue(locale?: string): any;
15
+ setValue(value: any, locale?: string): Promise<import("./types").SerializedJSONValue | undefined>;
16
+ removeValue(locale?: string): Promise<void>;
17
17
  onValueChanged(locale: string | ((value: any) => void), handler?: (value: any) => void): () => boolean;
18
18
  onIsDisabledChanged(locale: string | ((isDisabled: boolean) => void), handler?: (isDisabled: boolean) => void): () => boolean;
19
19
  private _getFieldLocale;
package/dist/signal.d.ts CHANGED
@@ -10,5 +10,6 @@ export declare class MemoizedSignal<T extends unknown[]> extends Signal<T> {
10
10
  constructor(...memoizedArgs: T);
11
11
  dispatch(...args: T): void;
12
12
  attach(listener: Listener<T>): () => boolean;
13
+ getMemoizedArgs(): T;
13
14
  }
14
15
  export {};
@@ -2,7 +2,7 @@ import { ContentType, EditorInterface, SpaceMembership, Role, ContentTypeField,
2
2
  import { EntryAPI } from './entry.types';
3
3
  import { SpaceAPI } from './space.types';
4
4
  import { WindowAPI } from './window.types';
5
- import { ContentEntitySys, Link, SerializedJSONValue } from './utils';
5
+ import { EntrySys, Link, SerializedJSONValue } from './utils';
6
6
  import { FieldAPI } from './field-locale.types';
7
7
  import { DialogsAPI } from './dialogs.types';
8
8
  import { AppConfigAPI } from './app.types';
@@ -99,12 +99,48 @@ export interface EditorLocaleSettings {
99
99
  export interface SharedEditorSDK {
100
100
  editor: {
101
101
  editorInterface: EditorInterface;
102
+ /**
103
+ * Returns the current locale settings
104
+ *
105
+ * The locale setting can change. To always work with the latest settings, use `onLocaleSettingsChanged`.
106
+ */
107
+ getLocaleSettings(): EditorLocaleSettings;
108
+ /**
109
+ * Subscribes to changes of the editor's locale settings
110
+ *
111
+ * @param callback Function that is called every time the locale settings change. Called immidiately with the current setting.
112
+ * @returns Function to unsubscribe. `callback` won't be called anymore.
113
+ */
102
114
  onLocaleSettingsChanged: (callback: (localeSettings: EditorLocaleSettings) => void) => () => void;
103
- onShowDisabledFieldsChanged: (callback: (showDisabledFields: boolean) => any) => () => void;
115
+ /**
116
+ * Subscribes to changes of whether or not disabled fields are displayed
117
+ *
118
+ * @param callback Function that is called every time the setting whether or not disabled fields are displayed changes. Called immediately with the current state.
119
+ * @returns Function to unsubscribe. `callback` won't be called anymore.
120
+ * @deprecated Use {@link onShowHiddenFieldsChanged} instead
121
+ */
122
+ onShowDisabledFieldsChanged: (callback: (showDisabledFields: boolean) => void) => () => void;
123
+ /**
124
+ * Returns whether or not hidden fields are displayed
125
+ *
126
+ * This setting can change. To always work with the latest settings, use `onShowHiddenFieldsChanged`.
127
+ */
128
+ getShowHiddenFields(): boolean;
129
+ /**
130
+ * Subscribes to changes of whether or not hidden fields are displayed
131
+ *
132
+ * @param callback Function that is called every time the setting whether or not hidden fields are displayed changes. Called immediately with the current state.
133
+ * @returns Function to unsubscribe. `callback` won't be called anymore.
134
+ */
135
+ onShowHiddenFieldsChanged: (callback: (showHiddenFields: boolean) => void) => () => void;
104
136
  };
105
- /** Allows to read and update the value of any field of the current entry and to get the entry's metadata */
137
+ /**
138
+ * Allows to read and update the value of any field of the current entry and to get the entry's metadata
139
+ */
106
140
  entry: EntryAPI;
107
- /** Information about the content type of the entry. */
141
+ /**
142
+ * Information about the content type of the entry.
143
+ */
108
144
  contentType: ContentTypeAPI;
109
145
  }
110
146
  export type CrudAction = 'create' | 'read' | 'update' | 'delete';
@@ -213,8 +249,12 @@ export interface ConnectMessage {
213
249
  ids: IdsAPI;
214
250
  contentType: ContentTypeAPI;
215
251
  editorInterface?: EditorInterface;
252
+ editor?: {
253
+ localeSettings: EditorLocaleSettings;
254
+ showHiddenFields: boolean;
255
+ };
216
256
  entry: {
217
- sys: ContentEntitySys;
257
+ sys: EntrySys;
218
258
  metadata?: Metadata;
219
259
  };
220
260
  fieldInfo: EntryFieldInfo[];
@@ -1,6 +1,6 @@
1
1
  import { Metadata, Task } from './entities';
2
2
  import { EntryFieldAPI } from './field.types';
3
- import { CollectionResponse, ContentEntitySys, SearchQuery } from './utils';
3
+ import { CollectionResponse, EntrySys, SearchQuery } from './utils';
4
4
  type TaskState = 'active' | 'resolved';
5
5
  export interface TaskInputData {
6
6
  assignedToId: string;
@@ -19,7 +19,7 @@ export interface TaskAPI {
19
19
  }
20
20
  export interface EntryAPI extends TaskAPI {
21
21
  /** Returns sys for an entry. */
22
- getSys: () => ContentEntitySys;
22
+ getSys: () => EntrySys;
23
23
  /** Publish the entry */
24
24
  publish: (options?: {
25
25
  skipUiValidation?: boolean;
@@ -29,7 +29,7 @@ export interface EntryAPI extends TaskAPI {
29
29
  /** Saves the current changes of the entry */
30
30
  save: () => Promise<void>;
31
31
  /** Calls the callback with sys every time that sys changes. */
32
- onSysChanged: (callback: (sys: ContentEntitySys) => void) => () => void;
32
+ onSysChanged: (callback: (sys: EntrySys) => void) => () => void;
33
33
  /** Allows to control the values of all other fields in the current entry. */
34
34
  fields: {
35
35
  [key: string]: EntryFieldAPI;
@@ -26,12 +26,30 @@ export interface FieldAPI {
26
26
  * the returned function can be called to remove the handler function
27
27
  **/
28
28
  onValueChanged: (callback: (value: any) => void) => () => void;
29
- /** Calls the callback when the disabled status of the field changes.
30
- * the returned function can be called to remove the handler function
31
- **/
29
+ /**
30
+ * Returns whether the current field is disabled
31
+ *
32
+ * The disabled state can change. To always work with the latest state, use `onIsDisabledChanged`.
33
+ */
34
+ getIsDisabled(): boolean;
35
+ /**
36
+ * Subscribes to changes to this field's disabled state
37
+ *
38
+ * @param callback Function that is called every time this field's disabled state changes. Called immidiately with the current state.
39
+ * @returns Function to unsubscribe. `callback` won't be called anymore.
40
+ */
32
41
  onIsDisabledChanged: (callback: (isDisabled: boolean) => void) => () => void;
33
- /** Calls the callback immediately with the current validation errors and whenever the field is re-validated.
34
- * the returned function can be called to remove the handler function
35
- **/
42
+ /**
43
+ * Returns the field's validation errors
44
+ *
45
+ * The schema errors can change. To always work with the latest errors, use `onSchemaErrorsChanged`.
46
+ */
47
+ getSchemaErrors(): ValidationError[];
48
+ /**
49
+ * Subscribes to schema errors
50
+ *
51
+ * @param callback Function that is called every time the schema errors change. Called immediately with the current errors.
52
+ * @returns Function to unsubscribe. `callback` won't be called anymore.
53
+ */
36
54
  onSchemaErrorsChanged: (callback: (errors: ValidationError[]) => void) => () => void;
37
55
  }
@@ -1,6 +1,7 @@
1
1
  import { Items, SerializedJSONValue } from './utils';
2
2
  import { FieldAPI } from './field-locale.types';
3
3
  import { ContentTypeFieldValidation } from './entities';
4
+ import { ValidationError } from './validation-error';
4
5
  export interface FieldInfo {
5
6
  id: string;
6
7
  locale: string;
@@ -9,6 +10,8 @@ export interface FieldInfo {
9
10
  validations: ContentTypeFieldValidation[];
10
11
  items?: Items;
11
12
  value: any;
13
+ isDisabled: boolean;
14
+ schemaErrors: ValidationError[];
12
15
  }
13
16
  export interface EntryFieldInfo {
14
17
  id: string;
@@ -20,6 +23,12 @@ export interface EntryFieldInfo {
20
23
  values: {
21
24
  [locale: string]: any;
22
25
  };
26
+ isDisabled: {
27
+ [locale: string]: boolean;
28
+ };
29
+ schemaErrors: {
30
+ [locale: string]: ValidationError[];
31
+ };
23
32
  }
24
33
  export interface EntryFieldAPI {
25
34
  /** The ID of a field is defined in an entry's content type. */
@@ -7,7 +7,7 @@ export type { FieldInfo, EntryFieldInfo, EntryFieldAPI } from './field.types';
7
7
  export type { FieldAPI } from './field-locale.types';
8
8
  export type { NavigatorAPI, AppPageLocationOptions, NavigatorAPIOptions, NavigatorOpenResponse, NavigatorPageResponse, NavigatorSlideInfo, PageExtensionOptions, } from './navigator.types';
9
9
  export type { SpaceAPI } from './space.types';
10
- export type { SearchQuery, CollectionResponse, ContentEntitySys, ContentEntityType, Items, Link, WithOptionalId, WithId, SerializedJSONValue, } from './utils';
10
+ export type { SearchQuery, CollectionResponse, EntrySys, ContentEntitySys, ContentEntityType, Items, Link, WithOptionalId, WithId, SerializedJSONValue, } from './utils';
11
11
  export type { DateRangeValidationError, InValidationError, LinkContentTypeValidationError, LinkMimetypeGroupValidationError, NotResolvableValidationError, ProhibitRegexpValidationError, RangeValidationError, RegexpValidationError, RequiredValidationError, SizeValidationError, TypeValidationError, UniqueValidationError, UnknownValidationError, ValidationError, } from './validation-error';
12
12
  export type { WindowAPI } from './window.types';
13
13
  export type { CMAClient } from './cmaClient.types';
@@ -34,7 +34,7 @@ export interface CollectionResponse<T> {
34
34
  };
35
35
  }
36
36
  export type ContentEntityType = 'Entry' | 'Asset';
37
- export interface ContentEntitySys {
37
+ export type ContentEntitySys = {
38
38
  space: Link;
39
39
  id: string;
40
40
  type: ContentEntityType;
@@ -52,6 +52,10 @@ export interface ContentEntitySys {
52
52
  version: number;
53
53
  publishedBy?: Link;
54
54
  contentType: Link;
55
+ };
56
+ export interface EntrySys extends ContentEntitySys {
57
+ type: 'Entry';
58
+ automationTags: Link<'Tag'>[];
55
59
  }
56
60
  export interface Items {
57
61
  type: string;
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"contentful-ui-extensions-sdk","description":"A JavaScript library to develop custom apps for Contentful","version":"4.14.1","author":"Contentful GmbH","license":"MIT","sideEffects":true,"repository":{"url":"https://github.com/contentful/ui-extensions-sdk.git","type":"git"},"homepage":"https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/","main":"dist/cf-extension-api.js","types":"dist/index.d.ts","files":["dist/cf-extension-api.js","dist/cf-extension-api.js.map","dist/cf-extension.css","dist/**/*.d.ts"],"scripts":{"test":"ts-mocha -p tsconfig.test.json 'test/unit/*.[jt]s' --reporter mocha-multi-reporters --reporter-options configFile=mocha.unit-reporters.json","lint":"eslint '{lib,test}/**/*.{t,j}s'","lint:fix":"npm run lint -- --fix","build":"npm run check-types && rollup -c --compact","build:debug":"npm run build -- --sourcemap","prepublishOnly":"npm run build","size":"echo \"Gzipped, estimate: $(gzip -9 -c dist/cf-extension-api.js | wc -c) bytes\"","semantic-release":"semantic-release","publish-all":"node ./scripts/publish.js","verify":"node ./scripts/verify.js","check-types":"tsc --noEmit -m commonjs","prepare":"husky install","lint-staged":"lint-staged"},"devDependencies":{"@semantic-release/changelog":"6.0.2","@semantic-release/exec":"6.0.3","@semantic-release/git":"10.0.1","@testing-library/dom":"8.19.1","@types/chai-as-promised":"7.1.5","@types/cross-spawn":"6.0.2","@types/fs-extra":"9.0.13","@types/jsdom":"20.0.1","@types/mocha":"10.0.1","@types/nanoid":"3.0.0","@types/sinon":"^10.0.0","@types/sinon-chai":"^3.2.5","@typescript-eslint/eslint-plugin":"4.33.0","@typescript-eslint/parser":"4.33.0","babel-eslint":"10.1.0","chai":"4.3.7","chai-as-promised":"7.1.1","contentful-management":"10.26.0","cross-spawn":"7.0.3","eslint":"7.32.0","eslint-config-prettier":"8.5.0","eslint-config-standard":"16.0.3","eslint-plugin-import":"2.26.0","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"4.2.1","eslint-plugin-promise":"6.1.1","eslint-plugin-react":"7.31.11","eslint-plugin-standard":"5.0.0","fs-extra":"11.1.0","husky":"8.0.2","jsdom":"20.0.3","lint-staged":"13.1.0","mocha":"10.2.0","mocha-junit-reporter":"2.2.0","mocha-multi-reporters":"1.5.1","mochawesome":"7.1.3","mochawesome-merge":"4.2.2","mochawesome-report-generator":"6.2.0","prettier":"2.8.1","rollup":"2.79.1","rollup-plugin-terser":"7.0.2","rollup-plugin-typescript2":"0.34.1","semantic-release":"19.0.5","sinon":"15.0.1","sinon-chai":"3.7.0","ts-mocha":"10.0.0","tslib":"2.4.1","typescript":"4.9.4"},"lint-staged":{"*.ts":["prettier --write","eslint --fix","git add"],"*.md":["prettier --write","git add"]},"release":{"branches":["master",{"name":"canary","channel":"canary","prerelease":"alpha"}],"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog",["@semantic-release/npm",{"npmPublish":false}],["@semantic-release/exec",{"verifyConditionsCmd":"node ./scripts/verify.js","publishCmd":"npm run publish-all"}],["@semantic-release/git",{"message":"chore: ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}","assets":["CHANGELOG.md","package.json","package-lock.json"]}],"@semantic-release/github"]},"peerDependencies":{"contentful-management":">=7.30.0"}}
1
+ {"name":"contentful-ui-extensions-sdk","description":"A JavaScript library to develop custom apps for Contentful","version":"4.16.0","author":"Contentful GmbH","license":"MIT","sideEffects":true,"repository":{"url":"https://github.com/contentful/ui-extensions-sdk.git","type":"git"},"homepage":"https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/","main":"dist/cf-extension-api.js","types":"dist/index.d.ts","files":["dist/cf-extension-api.js","dist/cf-extension-api.js.map","dist/cf-extension.css","dist/**/*.d.ts"],"scripts":{"test":"ts-mocha -p tsconfig.test.json 'test/unit/*.[jt]s' --reporter mocha-multi-reporters --reporter-options configFile=mocha.unit-reporters.json","lint":"eslint '{lib,test}/**/*.{t,j}s'","lint:fix":"npm run lint -- --fix","build":"npm run check-types && rollup -c --compact","build:debug":"npm run build -- --sourcemap","prepublishOnly":"npm run build","size":"echo \"Gzipped, estimate: $(gzip -9 -c dist/cf-extension-api.js | wc -c) bytes\"","semantic-release":"semantic-release","publish-all":"node ./scripts/publish.js","verify":"node ./scripts/verify.js","check-types":"tsc --noEmit -m commonjs","prepare":"husky install","lint-staged":"lint-staged"},"devDependencies":{"@semantic-release/changelog":"6.0.2","@semantic-release/exec":"6.0.3","@semantic-release/git":"10.0.1","@testing-library/dom":"8.20.0","@types/chai-as-promised":"7.1.5","@types/cross-spawn":"6.0.2","@types/fs-extra":"11.0.1","@types/jsdom":"21.1.0","@types/mocha":"10.0.1","@types/nanoid":"3.0.0","@types/sinon":"^10.0.0","@types/sinon-chai":"^3.2.5","@typescript-eslint/eslint-plugin":"4.33.0","@typescript-eslint/parser":"4.33.0","babel-eslint":"10.1.0","chai":"4.3.7","chai-as-promised":"7.1.1","contentful-management":"10.29.1","cross-spawn":"7.0.3","eslint":"7.32.0","eslint-config-prettier":"8.6.0","eslint-config-standard":"16.0.3","eslint-plugin-import":"2.27.5","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"4.2.1","eslint-plugin-promise":"6.1.1","eslint-plugin-react":"7.32.2","eslint-plugin-standard":"5.0.0","fs-extra":"11.1.0","husky":"8.0.3","jsdom":"21.1.0","lint-staged":"13.1.1","mocha":"10.2.0","mocha-junit-reporter":"2.2.0","mocha-multi-reporters":"1.5.1","mochawesome":"7.1.3","mochawesome-merge":"4.2.2","mochawesome-report-generator":"6.2.0","prettier":"2.8.4","rollup":"2.79.1","rollup-plugin-terser":"7.0.2","rollup-plugin-typescript2":"0.34.1","semantic-release":"19.0.5","sinon":"15.0.1","sinon-chai":"3.7.0","ts-mocha":"10.0.0","tslib":"2.5.0","typescript":"4.9.5"},"lint-staged":{"*.ts":["prettier --write","eslint --fix","git add"],"*.md":["prettier --write","git add"]},"release":{"branches":["master",{"name":"canary","channel":"canary","prerelease":"alpha"}],"plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/changelog",["@semantic-release/npm",{"npmPublish":false}],["@semantic-release/exec",{"verifyConditionsCmd":"node ./scripts/verify.js","publishCmd":"npm run publish-all"}],["@semantic-release/git",{"message":"chore: ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}","assets":["CHANGELOG.md","package.json","package-lock.json"]}],"@semantic-release/github"]},"peerDependencies":{"contentful-management":">=7.30.0"}}