@contentful/app-sdk 4.59.0 → 4.61.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.
- package/dist/cf-extension-api.bundled.js +1 -1
- package/dist/cf-extension-api.js +1 -1
- package/dist/experience.d.ts +13 -0
- package/dist/types/api.types.d.ts +6 -6
- package/dist/types/dialogs.types.d.ts +22 -0
- package/dist/types/{exo.types.d.ts → experience.types.d.ts} +19 -19
- package/dist/types/index.d.ts +2 -2
- package/package.json +1 -1
- package/dist/exo.d.ts +0 -13
package/dist/cf-extension-api.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("contentful-management")):"function"==typeof define&&define.amd?define(["exports","contentful-management"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).contentfulExtension={},e.contentfulManagement)}(this,function(e,t){"use strict";var n=function(e,t){return n=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])},n(e,t)};function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var o=function(){return o=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},o.apply(this,arguments)};function i(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 a(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)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 i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}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])}}}function s(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))}"function"==typeof SuppressedError&&SuppressedError;var l=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}(),u=function(e){function t(){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 r(t,e),t.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)},t.prototype.attach=function(t){var n=e.prototype.attach.call(this,t);return t.apply(void 0,this._memoizedArgs),n},t.prototype.getMemoizedArgs=function(){return this._memoizedArgs},t}(l);var c,d=function(){function e(e,t){var n=this;this._messageHandlers={},this._responseHandlers={},this._send=function(e,t){return function(n,r){var o=f.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 l),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}(),f=(c=0,{getMessageId:function(){return c++}});var p=function(){function e(e,t){var n=this;this.id=t.id,this.name=t.name,this.locale=t.locale,this.required=t.required,this.validations=t.validations,this._value=t.value,this._valueSignal=new u(this._value),this._isDisabledSignal=new u(t.isDisabled),this._schemaErrorsChangedSignal=new u(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 i(this,void 0,void 0,function(){return a(this,function(t){switch(t.label){case 0:return this._value=e,[4,this._channel.call("setValue",this.id,this.locale,e)];case 1:return[2,t.sent()]}})})},e.prototype.removeValue=function(){return i(this,void 0,void 0,function(){return a(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}(),h=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.type=n.type,r}return r(t,e),t}(p),g=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.type=n.type,r.items=n.items,r}return r(t,e),t}(p),y=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.type=n.type,r.linkType=n.linkType,r}return r(t,e),t}(p);function v(e,t){switch(t.type){case"Link":return new y(e,t);case"Array":return new g(e,t);default:return new h(e,t)}}var m=function(){function e(e,t,n){var r=this;this.id=t.id,this.name=t.name,this.locales=t.locales,this.required=t.required,this.validations=t.validations,this._defaultLocale=n,this._fieldLocales=t.locales.reduce(function(n,i){var a,s=v(e,r.toFieldInfo(t,i));return o(o({},n),((a={})[i]=s,a))},{}),this.assertHasLocale(n)}return e.prototype.getValue=function(e){return this._getFieldLocale(e).getValue()},e.prototype.setValue=function(e,t){return i(this,void 0,void 0,function(){return a(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 i(this,void 0,void 0,function(){return a(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.prototype.toFieldInfo=function(e,t){var n={id:e.id,name:e.name,required:e.required,validations:e.validations,locale:t,value:e.values[t],isDisabled:e.isDisabled[t],schemaErrors:e.schemaErrors[t]};switch(e.type){case"Array":return o(o({},n),{type:e.type,items:e.items});case"Link":return o(o({},n),{type:e.type,linkType:e.linkType});default:return o(o({},n),{type:e.type})}},e}(),A=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.type=n.type,o}return r(t,e),t}(m),E=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.type=n.type,o.items=n.items,o}return r(t,e),t}(m),b=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.type=n.type,o.linkType=n.linkType,o}return r(t,e),t}(m);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;f(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;f(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,n=t.absoluteElements;if(s=Boolean(n===void 0?false:n),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 f(e,t){var n=getComputedStyle(t);return"absolute"===n.position&&("attributes"!==e||"none"!==n.display)}}var w=["getTask","getTasks","createTask","updateTask","deleteTask"];function _(e,t,n,r){var i=t.sys,a=T(i),s=new u(i),l=t.metadata,c=new u(l);e.addHandler("sysChanged",function(e){a=T(i=e),s.dispatch(i)}),e.addHandler("metadataChanged",function(e){l=e,c.dispatch(l)});var d={};return w.forEach(function(t){d[t]=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return e.call("callEntryMethod",t,n)}}),o(o(o({getSys:function(){return i},publish:function(t){if(a)throw new Error('SDK method "publish" is not supported in release context');return e.call("callEntryMethod","publish",[t])},unpublish:function(){if(a)throw new Error('SDK method "unpublish" is not supported in release context');return e.call("callEntryMethod","unpublish")},save:function(){return e.call("callEntryMethod","save")},onSysChanged:function(e){return s.attach(e)},fields:n.reduce(function(e,t){return e[t.id]=r(t),e},{})},l?{metadata:l}:{}),{getMetadata:function(){return l},onMetadataChanged:function(e){return c.attach(e)}}),d)}function T(e){var t,n;return!!(null===(n=null===(t=null==e?void 0:e.release)||void 0===t?void 0:t.sys)||void 0===n?void 0:n.id)}function I(e,t){if(!t)throw new Error("Asset data is required");var n=t.sys,r=new u(n),o=t.metadata,i=new u(o);return e.addHandler("sysChanged",function(e){n=e,r.dispatch(n)}),e.addHandler("metadataChanged",function(e){o=e,i.dispatch(o)}),{getSys:function(){return n},publish:function(t){return e.call("callAssetMethod","publish",[t])},unpublish:function(){return e.call("callAssetMethod","unpublish")},save:function(){return e.call("callAssetMethod","save")},onSysChanged:function(e){return r.attach(e)},getMetadata:function(){return o},onMetadataChanged:function(e){return i.attach(e)}}}var x=["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 L(e,t){var n={};return x.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 s([],t,!0)},n}var O=function(e){return"object"!=typeof(t=e)||null===t||Array.isArray(t)?{}:e;var t};function S(e,t){return{openAlert:n.bind(null,"alert"),openConfirm:n.bind(null,"confirm"),openPrompt:n.bind(null,"prompt"),openExtension:r,openCurrentApp:i,openCurrent:function(e){return t.app?i(e):r(o(o({},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),selectSingleExperience:a.bind(null,"Experience",!1),selectMultipleExperiences:a.bind(null,"Experience",!0),selectSinglePattern:a.bind(null,"Pattern",!1),selectMultiplePatterns:a.bind(null,"Pattern",!0),selectSingleComponentDefinition:a.bind(null,"ComponentDefinition",!1),selectMultipleComponentDefinitions:a.bind(null,"ComponentDefinition",!0)};function n(t,n){return e.call("openDialog",t,O(n))}function r(n){var r=O(n);if((r=o(o({},r),{id:r.id||t.extension})).id)return e.call("openDialog","extension",r);throw new Error("Extension ID not provided.")}function i(n){if(n=O(n),t.app){var r=o(o({},n),{id:t.app});return e.call("openDialog","app",r)}throw new Error("Not in the app context.")}function a(t,n,r){return(r=O(r)).entityType=t,r.multiple=n,e.call("openDialog","entitySelector",r)}}function D(e,t,n){var r=new u(n.localeSettings),o=new u(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 N(e,t,n){var r,i=new l;e.addHandler("navigateSlideIn",function(e){i.dispatch(e)});var a=n?null===(r=n.sys)||void 0===r?void 0:r.id:void 0;return{openEntry:function(t,n){return e.call("navigateToContentEntity",o(o({},n),{entityType:"Entry",id:t,releaseId:a}))},openNewEntry:function(t,n){return e.call("navigateToContentEntity",o(o({},n),{entityType:"Entry",id:null,contentTypeId:t}))},openBulkEditor:function(t,n){return e.call("navigateToBulkEditor",o({entryId:t},n))},openAsset:function(t,n){return e.call("navigateToContentEntity",o(o({},n),{entityType:"Asset",id:t,releaseId:a}))},openNewAsset:function(t){return e.call("navigateToContentEntity",o(o({},t),{entityType:"Asset",id:null}))},openPageExtension:function(n){return e.call("navigateToPage",o({type:"extension",id:t.extension},n))},openCurrentAppPage:function(n){return e.call("navigateToPage",o({type:"app",id:t.app},n))},openAppConfig:function(){return e.call("navigateToAppConfig")},openEntriesList:function(){return e.call("navigateToSpaceEnvRoute",{route:"entries",releaseId:a})},openAssetsList:function(){return e.call("navigateToSpaceEnvRoute",{route:"assets",releaseId:a})},onSlideInNavigation:function(e){return i.attach(e)}}}var M="preInstall",P="postInstall",H=function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)},R=function(e){return"function"==typeof e},k=function(e){return console.error(e),Promise.resolve(!1)},F=function(e,t,n){if(!R(e))return Promise.resolve(t);var r;try{r=void 0===n?e():e(n)}catch(e){return k(e)}var o,i=r;return H(o=i)&&R(o.then)||(i=Promise.resolve(i)),i.then(function(e){return e instanceof Error?Promise.reject(e):!1!==e&&(H(e)?e:t)},k).catch(k)};function V(e){var t,n=((t={})[M]=null,t[P]=null,t),r=function(e,t){if(!R(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===M?F(n[r],{}).then(function(t){return e.send("appHookResult",{stage:r,installationRequestId:o,result:t})}):r===P?F(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(M,e)},onConfigurationCompleted:function(e){r(P,e)}}}function z(e,t){if(!t)throw new Error("Context data is required");var n=new u(t),r=new l,o=new u("normal");return e.addHandler("contextChanged",function(e){n.dispatch(e)}),e.addHandler("toolbarAction",function(e){r.dispatch(e)}),e.addHandler("agentLayoutVariantChanged",function(e){o.dispatch(e)}),{onContextChange:function(e){return n.attach(e)},onToolbarAction:function(e){return r.attach(e)},onAgentLayoutVariantChange:function(e){return o.attach(e)},setAgentLayoutVariant:function(t){if("expanded"!==t&&"normal"!==t)throw new Error('Invalid layout variant "'.concat(t,'". Expected "expanded" or "normal".'));e.send("setAgentLayoutVariant",t)}}}function q(e,t){var n,r;if(void 0===t)throw new Error("Context data is required");var i=null!==(n=t.context)&&void 0!==n?n:{type:"experience",entityId:""},a=new u(i);e.addHandler("exo.contextChanged",function(e){a.dispatch(e)});var s=null!==(r=t.uiMode)&&void 0!==r?r:"form",l=new u(s);e.addHandler("exo.uiModeChanged",function(e){l.dispatch(e.mode)});var c=function(e,t){var n=new u(null!=t?t:{sys:{id:"",type:"Experience",version:0,template:{sys:{type:"ResourceLink",linkType:"Contentful:Template",urn:""}}}});e.addHandler("exo.experienceChanged",function(e){n.dispatch(e)});var r=function(e){var t=new u({nodeId:null});return e.addHandler("exo.selectionChanged",function(e){t.dispatch(e)}),{get:function(){return t.getMemoizedArgs()[0]},onChange:function(e){return t.attach(e)},set:function(t){e.send("exo.setSelection",{nodeId:t})},highlight:function(t,n){e.send("exo.highlightNode",o({nodeId:t},n))}}}(e),i=function(e){var t={id:"",parameters:{}},n=new u(t);return e.addHandler("exo.dataAssemblyChanged",function(e){n.dispatch(e)}),o(o({get:function(){return n.getMemoizedArgs()[0]},getAvailable:function(){return e.call("exo.getAvailableDataAssemblies")}},j(e,B)),{onChange:function(e){return n.attach(e)}})}(e),a=new Map;return{get:function(){return n.getMemoizedArgs()[0]},onChange:function(e){return n.attach(e)},save:function(){return e.call("exo.saveExperience")},publish:function(){return e.call("exo.publishExperience")},getNode:function(t){var n=a.get(t);return void 0===n&&(n=function(e,t,n){void 0===n&&(n="Component");var r=new u({id:t,nodeType:n});return e.addHandler("exo.nodeChanged.".concat(t),function(e){r.dispatch(e)}),{id:t,nodeType:n,get:function(){return r.getMemoizedArgs()[0]},onChange:function(e){return r.attach(e)},dataAssembly:j(e,Y,t),getDesignProperty:function(n){return e.call("exo.getNodeDesignProperty",t,n)},setDesignProperty:function(n,r){return e.call("exo.setNodeDesignProperty",t,n,r)},onDesignPropertyChanged:function(n,r){return e.addHandler("exo.nodeDesignPropertyChanged.".concat(t,".").concat(n),r)},getProperties:function(){return e.call("exo.getNodeProperties",t)},getSlotDescriptor:function(){return e.call("exo.getNodeSlotDescriptor",t)}}}(e,t),a.set(t,n)),n},getRootNodes:function(){return[]},selection:r,dataAssembly:i}}(e,t.experience);return{get context(){return a.getMemoizedArgs()[0]},onContextChanged:function(e){return a.attach(e)},getUiMode:function(){return l.getMemoizedArgs()[0]},onUiModeChanged:function(e){return l.attach(e)},experience:c}}function j(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return{getParameterDefinitions:function(){return e.call.apply(e,s([t.definitions],n,!1))},getParameterDefinition:function(r){return e.call.apply(e,s(s([t.definition],n,!1),[r],!1))},setParameterValue:function(r,o){return e.call.apply(e,s(s([t.setValue],n,!1),[r,o],!1))},setParameterValues:function(r){return e.call.apply(e,s(s([t.setValues],n,!1),[r],!1))}}}var B={definitions:"exo.getDataAssemblyParameterDefinitions",definition:"exo.getDataAssemblyParameterDefinition",setValue:"exo.setDataAssemblyParameterValue",setValues:"exo.setDataAssemblyParameterValues"},Y={definitions:"exo.getNodeParameterDefinitions",definition:"exo.getNodeParameterDefinition",setValue:"exo.setNodeParameterValue",setValues:"exo.setNodeParameterValues"};var G,U={LOCATION_ENTRY_FIELD:"entry-field",LOCATION_ENTRY_FIELD_SIDEBAR:"entry-field-sidebar",LOCATION_ENTRY_SIDEBAR:"entry-sidebar",LOCATION_ASSET_SIDEBAR:"asset-sidebar",LOCATION_DIALOG:"dialog",LOCATION_ENTRY_EDITOR:"entry-editor",LOCATION_PAGE:"page",LOCATION_APP_CONFIG:"app-config",LOCATION_HOME:"home",LOCATION_AGENT:"agent",LOCATION_EXPERIENCE_TOOLBAR:"experience-toolbar"},K=function(e){return function(t){return e.call("CMAAdapterCall",t)}};function W(e){return{makeRequest:K(e)}}function X(e,n){var r;return t.createClient({apiAdapter:W(n)},{type:"plain",defaults:{environmentId:null!==(r=e.environmentAlias)&&void 0!==r?r:e.environment,spaceId:e.space,organizationId:e.organization,releaseId:e.release}})}var J=[Z,te,function(e,t){var n=t.field;if(!n)throw new Error('FieldAPI called for location without "field" property defined.');return{field:v(e,n)}},ee,$],Q=((G={})[U.LOCATION_ENTRY_FIELD]=J,G[U.LOCATION_ENTRY_FIELD_SIDEBAR]=J,G[U.LOCATION_ENTRY_SIDEBAR]=[Z,te,ee,$],G[U.LOCATION_ASSET_SIDEBAR]=[Z,function(e,t){var n=t.asset;return{asset:I(e,n)}},$],G[U.LOCATION_ENTRY_EDITOR]=[Z,te,ee],G[U.LOCATION_DIALOG]=[Z,function(e){return{close:function(t){return e.send("closeDialog",t)}}},$],G[U.LOCATION_PAGE]=[Z],G[U.LOCATION_HOME]=[Z],G[U.LOCATION_APP_CONFIG]=[Z,function(e){return{app:V(e)}}],G[U.LOCATION_AGENT]=[Z,function(e,t){var n=t.agent;return{agent:z(e,n)}},$],G[U.LOCATION_EXPERIENCE_TOOLBAR]=[Z,function(e,t){return{exo:q(e,t.exo)}}],G);function Z(e,t){var n=t.user,r=t.parameters,o=t.locales,i=t.ids,a=t.initialContentTypes,s=t.hostnames,l=t.release,u=t.uiLanguageLocale,c=t.location||U.LOCATION_ENTRY_FIELD;return{cma:X(i,e),cmaAdapter:W(e),location:{is:function(e){return c===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:L(e,a),dialogs:S(e,i),navigator:N(e,i,l),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,hostnames:s,release:l,uiLanguageLocale:u,access:{can:function(t,n,r){return e.call("checkAccess",t,n,r)},canEditAppConfig:function(){return e.call("checkAppConfigAccess")}}}}function $(e,t,n){return{window:C(n,e)}}function ee(e,t){return{editor:D(e,t.editorInterface,t.editor)}}function te(e,t){var n=t.locales,r=t.contentType,o=t.entry,i=t.fieldInfo;return{contentType:r,entry:_(e,o,i,function(t){return function(e,t,n){switch(t.type){case"Array":return new E(e,t,n);case"Link":return new b(e,t,n);default:return new A(e,t,n)}}(e,t,n.default)})}}var ne=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 d(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=f.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,n){return(Q[t.location]||J).reduce(function(r,i){return o(o({},r),i(e,t,n))},{})});e.init=ne,e.locations=U,Object.defineProperty(e,"__esModule",{value:!0})}),globalThis.contentfulApp=globalThis.contentfulExtension;
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("contentful-management")):"function"==typeof define&&define.amd?define(["exports","contentful-management"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).contentfulExtension={},e.contentfulManagement)}(this,function(e,t){"use strict";var n=function(e,t){return n=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])},n(e,t)};function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var o=function(){return o=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},o.apply(this,arguments)};function i(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 a(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)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 i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}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])}}}function s(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))}"function"==typeof SuppressedError&&SuppressedError;var l=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}(),u=function(e){function t(){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 r(t,e),t.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)},t.prototype.attach=function(t){var n=e.prototype.attach.call(this,t);return t.apply(void 0,this._memoizedArgs),n},t.prototype.getMemoizedArgs=function(){return this._memoizedArgs},t}(l);var c,d=function(){function e(e,t){var n=this;this._messageHandlers={},this._responseHandlers={},this._send=function(e,t){return function(n,r){var o=f.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 l),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}(),f=(c=0,{getMessageId:function(){return c++}});var p=function(){function e(e,t){var n=this;this.id=t.id,this.name=t.name,this.locale=t.locale,this.required=t.required,this.validations=t.validations,this._value=t.value,this._valueSignal=new u(this._value),this._isDisabledSignal=new u(t.isDisabled),this._schemaErrorsChangedSignal=new u(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 i(this,void 0,void 0,function(){return a(this,function(t){switch(t.label){case 0:return this._value=e,[4,this._channel.call("setValue",this.id,this.locale,e)];case 1:return[2,t.sent()]}})})},e.prototype.removeValue=function(){return i(this,void 0,void 0,function(){return a(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}(),h=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.type=n.type,r}return r(t,e),t}(p),g=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.type=n.type,r.items=n.items,r}return r(t,e),t}(p),y=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.type=n.type,r.linkType=n.linkType,r}return r(t,e),t}(p);function v(e,t){switch(t.type){case"Link":return new y(e,t);case"Array":return new g(e,t);default:return new h(e,t)}}var m=function(){function e(e,t,n){var r=this;this.id=t.id,this.name=t.name,this.locales=t.locales,this.required=t.required,this.validations=t.validations,this._defaultLocale=n,this._fieldLocales=t.locales.reduce(function(n,i){var a,s=v(e,r.toFieldInfo(t,i));return o(o({},n),((a={})[i]=s,a))},{}),this.assertHasLocale(n)}return e.prototype.getValue=function(e){return this._getFieldLocale(e).getValue()},e.prototype.setValue=function(e,t){return i(this,void 0,void 0,function(){return a(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 i(this,void 0,void 0,function(){return a(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.prototype.toFieldInfo=function(e,t){var n={id:e.id,name:e.name,required:e.required,validations:e.validations,locale:t,value:e.values[t],isDisabled:e.isDisabled[t],schemaErrors:e.schemaErrors[t]};switch(e.type){case"Array":return o(o({},n),{type:e.type,items:e.items});case"Link":return o(o({},n),{type:e.type,linkType:e.linkType});default:return o(o({},n),{type:e.type})}},e}(),E=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.type=n.type,o}return r(t,e),t}(m),A=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.type=n.type,o.items=n.items,o}return r(t,e),t}(m),b=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.type=n.type,o.linkType=n.linkType,o}return r(t,e),t}(m);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;f(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;f(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,n=t.absoluteElements;if(s=Boolean(n===void 0?false:n),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 f(e,t){var n=getComputedStyle(t);return"absolute"===n.position&&("attributes"!==e||"none"!==n.display)}}var w=["getTask","getTasks","createTask","updateTask","deleteTask"];function _(e,t,n,r){var i=t.sys,a=T(i),s=new u(i),l=t.metadata,c=new u(l);e.addHandler("sysChanged",function(e){a=T(i=e),s.dispatch(i)}),e.addHandler("metadataChanged",function(e){l=e,c.dispatch(l)});var d={};return w.forEach(function(t){d[t]=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return e.call("callEntryMethod",t,n)}}),o(o(o({getSys:function(){return i},publish:function(t){if(a)throw new Error('SDK method "publish" is not supported in release context');return e.call("callEntryMethod","publish",[t])},unpublish:function(){if(a)throw new Error('SDK method "unpublish" is not supported in release context');return e.call("callEntryMethod","unpublish")},save:function(){return e.call("callEntryMethod","save")},onSysChanged:function(e){return s.attach(e)},fields:n.reduce(function(e,t){return e[t.id]=r(t),e},{})},l?{metadata:l}:{}),{getMetadata:function(){return l},onMetadataChanged:function(e){return c.attach(e)}}),d)}function T(e){var t,n;return!!(null===(n=null===(t=null==e?void 0:e.release)||void 0===t?void 0:t.sys)||void 0===n?void 0:n.id)}function I(e,t){if(!t)throw new Error("Asset data is required");var n=t.sys,r=new u(n),o=t.metadata,i=new u(o);return e.addHandler("sysChanged",function(e){n=e,r.dispatch(n)}),e.addHandler("metadataChanged",function(e){o=e,i.dispatch(o)}),{getSys:function(){return n},publish:function(t){return e.call("callAssetMethod","publish",[t])},unpublish:function(){return e.call("callAssetMethod","unpublish")},save:function(){return e.call("callAssetMethod","save")},onSysChanged:function(e){return r.attach(e)},getMetadata:function(){return o},onMetadataChanged:function(e){return i.attach(e)}}}var x=["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 L(e,t){var n={};return x.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 s([],t,!0)},n}var O=function(e){return"object"!=typeof(t=e)||null===t||Array.isArray(t)?{}:e;var t};function S(e,t){return{openAlert:n.bind(null,"alert"),openConfirm:n.bind(null,"confirm"),openPrompt:n.bind(null,"prompt"),openExtension:r,openCurrentApp:i,openCurrent:function(e){return t.app?i(e):r(o(o({},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),selectSingleExperience:a.bind(null,"Experience",!1),selectMultipleExperiences:a.bind(null,"Experience",!0),selectSinglePattern:a.bind(null,"Pattern",!1),selectMultiplePatterns:a.bind(null,"Pattern",!0),selectSingleComponentDefinition:a.bind(null,"ComponentDefinition",!1),selectMultipleComponentDefinitions:a.bind(null,"ComponentDefinition",!0),selectSingleResourceEntity:function(e){return s(!1,e)},selectMultipleResourceEntities:function(e){return s(!0,e)}};function n(t,n){return e.call("openDialog",t,O(n))}function r(n){var r=O(n);if((r=o(o({},r),{id:r.id||t.extension})).id)return e.call("openDialog","extension",r);throw new Error("Extension ID not provided.")}function i(n){if(n=O(n),t.app){var r=o(o({},n),{id:t.app});return e.call("openDialog","app",r)}throw new Error("Not in the app context.")}function a(t,n,r){return(r=O(r)).entityType=t,r.multiple=n,e.call("openDialog","entitySelector",r)}function s(t,n){var r=O(n);return r.multiple=t,e.call("openDialog","resourceEntitySelector",r)}}function D(e,t,n){var r=new u(n.localeSettings),o=new u(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 N(e,t,n){var r,i=new l;e.addHandler("navigateSlideIn",function(e){i.dispatch(e)});var a=n?null===(r=n.sys)||void 0===r?void 0:r.id:void 0;return{openEntry:function(t,n){return e.call("navigateToContentEntity",o(o({},n),{entityType:"Entry",id:t,releaseId:a}))},openNewEntry:function(t,n){return e.call("navigateToContentEntity",o(o({},n),{entityType:"Entry",id:null,contentTypeId:t}))},openBulkEditor:function(t,n){return e.call("navigateToBulkEditor",o({entryId:t},n))},openAsset:function(t,n){return e.call("navigateToContentEntity",o(o({},n),{entityType:"Asset",id:t,releaseId:a}))},openNewAsset:function(t){return e.call("navigateToContentEntity",o(o({},t),{entityType:"Asset",id:null}))},openPageExtension:function(n){return e.call("navigateToPage",o({type:"extension",id:t.extension},n))},openCurrentAppPage:function(n){return e.call("navigateToPage",o({type:"app",id:t.app},n))},openAppConfig:function(){return e.call("navigateToAppConfig")},openEntriesList:function(){return e.call("navigateToSpaceEnvRoute",{route:"entries",releaseId:a})},openAssetsList:function(){return e.call("navigateToSpaceEnvRoute",{route:"assets",releaseId:a})},onSlideInNavigation:function(e){return i.attach(e)}}}var M="preInstall",P="postInstall",H=function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)},R=function(e){return"function"==typeof e},k=function(e){return console.error(e),Promise.resolve(!1)},F=function(e,t,n){if(!R(e))return Promise.resolve(t);var r;try{r=void 0===n?e():e(n)}catch(e){return k(e)}var o,i=r;return H(o=i)&&R(o.then)||(i=Promise.resolve(i)),i.then(function(e){return e instanceof Error?Promise.reject(e):!1!==e&&(H(e)?e:t)},k).catch(k)};function V(e){var t,n=((t={})[M]=null,t[P]=null,t),r=function(e,t){if(!R(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===M?F(n[r],{}).then(function(t){return e.send("appHookResult",{stage:r,installationRequestId:o,result:t})}):r===P?F(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(M,e)},onConfigurationCompleted:function(e){r(P,e)}}}function z(e,t){if(!t)throw new Error("Context data is required");var n=new u(t),r=new l,o=new u("normal");return e.addHandler("contextChanged",function(e){n.dispatch(e)}),e.addHandler("toolbarAction",function(e){r.dispatch(e)}),e.addHandler("agentLayoutVariantChanged",function(e){o.dispatch(e)}),{onContextChange:function(e){return n.attach(e)},onToolbarAction:function(e){return r.attach(e)},onAgentLayoutVariantChange:function(e){return o.attach(e)},setAgentLayoutVariant:function(t){if("expanded"!==t&&"normal"!==t)throw new Error('Invalid layout variant "'.concat(t,'". Expected "expanded" or "normal".'));e.send("setAgentLayoutVariant",t)}}}function q(e,t){var n,r;if(void 0===t)throw new Error("Context data is required");var i=null!==(n=t.context)&&void 0!==n?n:{type:"experience",entityId:""},a=new u(i);e.addHandler("exo.contextChanged",function(e){a.dispatch(e)});var s=null!==(r=t.uiMode)&&void 0!==r?r:"form",l=new u(s);e.addHandler("exo.uiModeChanged",function(e){l.dispatch(e.mode)});var c=function(e,t){var n=new u(null!=t?t:{sys:{id:"",type:"Experience",version:0,template:{sys:{type:"ResourceLink",linkType:"Contentful:Template",urn:""}}}});e.addHandler("exo.experienceChanged",function(e){n.dispatch(e)});var r=function(e){var t=new u({nodeId:null});return e.addHandler("exo.selectionChanged",function(e){t.dispatch(e)}),{get:function(){return t.getMemoizedArgs()[0]},onChange:function(e){return t.attach(e)},set:function(t){e.send("exo.setSelection",{nodeId:t})},highlight:function(t,n){e.send("exo.highlightNode",o({nodeId:t},n))}}}(e),i=function(e){var t={id:"",parameters:{}},n=new u(t);return e.addHandler("exo.dataAssemblyChanged",function(e){n.dispatch(e)}),o(o({get:function(){return n.getMemoizedArgs()[0]},getAvailable:function(){return e.call("exo.getAvailableDataAssemblies")}},j(e,B)),{onChange:function(e){return n.attach(e)}})}(e),a=new Map;return{get:function(){return n.getMemoizedArgs()[0]},onChange:function(e){return n.attach(e)},save:function(){return e.call("exo.saveExperience")},publish:function(){return e.call("exo.publishExperience")},getNode:function(t){var n=a.get(t);return void 0===n&&(n=function(e,t,n){void 0===n&&(n="Component");var r=new u({id:t,nodeType:n});return e.addHandler("exo.nodeChanged.".concat(t),function(e){r.dispatch(e)}),{id:t,nodeType:n,get:function(){return r.getMemoizedArgs()[0]},onChange:function(e){return r.attach(e)},dataAssembly:j(e,Y,t),getDesignProperty:function(n){return e.call("exo.getNodeDesignProperty",t,n)},setDesignProperty:function(n,r){return e.call("exo.setNodeDesignProperty",t,n,r)},onDesignPropertyChanged:function(n,r){return e.addHandler("exo.nodeDesignPropertyChanged.".concat(t,".").concat(n),r)},getProperties:function(){return e.call("exo.getNodeProperties",t)},getSlotDescriptor:function(){return e.call("exo.getNodeSlotDescriptor",t)}}}(e,t),a.set(t,n)),n},getRootNodes:function(){return[]},selection:r,dataAssembly:i}}(e,t.experience);return{get context(){return a.getMemoizedArgs()[0]},onContextChanged:function(e){return a.attach(e)},getUiMode:function(){return l.getMemoizedArgs()[0]},onUiModeChanged:function(e){return l.attach(e)},experience:c}}function j(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return{getParameterDefinitions:function(){return e.call.apply(e,s([t.definitions],n,!1))},getParameterDefinition:function(r){return e.call.apply(e,s(s([t.definition],n,!1),[r],!1))},setParameterValue:function(r,o){return e.call.apply(e,s(s([t.setValue],n,!1),[r,o],!1))},setParameterValues:function(r){return e.call.apply(e,s(s([t.setValues],n,!1),[r],!1))}}}var B={definitions:"exo.getDataAssemblyParameterDefinitions",definition:"exo.getDataAssemblyParameterDefinition",setValue:"exo.setDataAssemblyParameterValue",setValues:"exo.setDataAssemblyParameterValues"},Y={definitions:"exo.getNodeParameterDefinitions",definition:"exo.getNodeParameterDefinition",setValue:"exo.setNodeParameterValue",setValues:"exo.setNodeParameterValues"};var G,U={LOCATION_ENTRY_FIELD:"entry-field",LOCATION_ENTRY_FIELD_SIDEBAR:"entry-field-sidebar",LOCATION_ENTRY_SIDEBAR:"entry-sidebar",LOCATION_ASSET_SIDEBAR:"asset-sidebar",LOCATION_DIALOG:"dialog",LOCATION_ENTRY_EDITOR:"entry-editor",LOCATION_PAGE:"page",LOCATION_APP_CONFIG:"app-config",LOCATION_HOME:"home",LOCATION_AGENT:"agent",LOCATION_EXPERIENCE_TOOLBAR:"experience-toolbar"},K=function(e){return function(t){return e.call("CMAAdapterCall",t)}};function W(e){return{makeRequest:K(e)}}function X(e,n){var r;return t.createClient({apiAdapter:W(n)},{type:"plain",defaults:{environmentId:null!==(r=e.environmentAlias)&&void 0!==r?r:e.environment,spaceId:e.space,organizationId:e.organization,releaseId:e.release}})}var J=[Z,te,function(e,t){var n=t.field;if(!n)throw new Error('FieldAPI called for location without "field" property defined.');return{field:v(e,n)}},ee,$],Q=((G={})[U.LOCATION_ENTRY_FIELD]=J,G[U.LOCATION_ENTRY_FIELD_SIDEBAR]=J,G[U.LOCATION_ENTRY_SIDEBAR]=[Z,te,ee,$],G[U.LOCATION_ASSET_SIDEBAR]=[Z,function(e,t){var n=t.asset;return{asset:I(e,n)}},$],G[U.LOCATION_ENTRY_EDITOR]=[Z,te,ee],G[U.LOCATION_DIALOG]=[Z,function(e){return{close:function(t){return e.send("closeDialog",t)}}},$],G[U.LOCATION_PAGE]=[Z],G[U.LOCATION_HOME]=[Z],G[U.LOCATION_APP_CONFIG]=[Z,function(e){return{app:V(e)}}],G[U.LOCATION_AGENT]=[Z,function(e,t){var n=t.agent;return{agent:z(e,n)}},$],G[U.LOCATION_EXPERIENCE_TOOLBAR]=[Z,function(e,t){return{experiences:q(e,t.experiences)}}],G);function Z(e,t){var n=t.user,r=t.parameters,o=t.locales,i=t.ids,a=t.initialContentTypes,s=t.hostnames,l=t.release,u=t.uiLanguageLocale,c=t.location||U.LOCATION_ENTRY_FIELD;return{cma:X(i,e),cmaAdapter:W(e),location:{is:function(e){return c===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:L(e,a),dialogs:S(e,i),navigator:N(e,i,l),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,hostnames:s,release:l,uiLanguageLocale:u,access:{can:function(t,n,r){return e.call("checkAccess",t,n,r)},canEditAppConfig:function(){return e.call("checkAppConfigAccess")}}}}function $(e,t,n){return{window:C(n,e)}}function ee(e,t){return{editor:D(e,t.editorInterface,t.editor)}}function te(e,t){var n=t.locales,r=t.contentType,o=t.entry,i=t.fieldInfo;return{contentType:r,entry:_(e,o,i,function(t){return function(e,t,n){switch(t.type){case"Array":return new A(e,t,n);case"Link":return new b(e,t,n);default:return new E(e,t,n)}}(e,t,n.default)})}}var ne=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 d(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=f.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,n){return(Q[t.location]||J).reduce(function(r,i){return o(o({},r),i(e,t,n))},{})});e.init=ne,e.locations=U,Object.defineProperty(e,"__esModule",{value:!0})}),globalThis.contentfulApp=globalThis.contentfulExtension;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Channel } from './channel';
|
|
2
|
+
import { ExperienceSDK, ExperienceContext, UiMode, ExperienceSnapshot } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Creates the Experience SDK namespace for the experience-toolbar location.
|
|
5
|
+
*
|
|
6
|
+
* Throws when called without handshake `experiences` data, mirroring `createAgent`. This keeps the
|
|
7
|
+
* public `ExperienceEditorToolbarAppSDK['experiences']` type sound (non-optional, always present).
|
|
8
|
+
*/
|
|
9
|
+
export default function createExperience(channel: Channel, experienceInit?: {
|
|
10
|
+
context?: ExperienceContext;
|
|
11
|
+
uiMode?: UiMode;
|
|
12
|
+
experience?: ExperienceSnapshot;
|
|
13
|
+
}): ExperienceSDK;
|
|
@@ -11,7 +11,7 @@ import { EntryFieldInfo, FieldInfo } from './field.types';
|
|
|
11
11
|
import { Adapter, KeyValueMap } from 'contentful-management';
|
|
12
12
|
import { CMAClient } from './cmaClient.types';
|
|
13
13
|
import { AgentAPI, AgentContext } from './agent.types';
|
|
14
|
-
import {
|
|
14
|
+
import { ExperienceSDK, ExperienceContext, UiMode, ExperienceSnapshot } from './experience.types';
|
|
15
15
|
export interface UserAPI {
|
|
16
16
|
sys: {
|
|
17
17
|
id: string;
|
|
@@ -264,8 +264,8 @@ export type AgentAppSDK<InstallationParameters extends KeyValueMap = KeyValueMap
|
|
|
264
264
|
};
|
|
265
265
|
export type ExperienceEditorToolbarAppSDK<InstallationParameters extends KeyValueMap = KeyValueMap> = Omit<BaseAppSDK<InstallationParameters, never, never>, 'ids'> & {
|
|
266
266
|
ids: Omit<IdsAPI, EntryScopedIds>;
|
|
267
|
-
/**
|
|
268
|
-
|
|
267
|
+
/** Experience SDK for experience-toolbar location */
|
|
268
|
+
experiences: ExperienceSDK;
|
|
269
269
|
};
|
|
270
270
|
export type KnownAppSDK<InstallationParameters extends KeyValueMap = KeyValueMap, InstanceParameters extends KeyValueMap = KeyValueMap, InvocationParameters extends SerializedJSONValue = SerializedJSONValue> = FieldAppSDK<InstallationParameters, InstanceParameters> | SidebarAppSDK<InstallationParameters, InstanceParameters> | DialogAppSDK<InstallationParameters, InvocationParameters> | EditorAppSDK<InstallationParameters, InstanceParameters> | PageAppSDK<InstallationParameters> | ConfigAppSDK<InstallationParameters> | HomeAppSDK<InstallationParameters> | AgentAppSDK<InstallationParameters> | ExperienceEditorToolbarAppSDK<InstallationParameters>;
|
|
271
271
|
/** @deprecated consider using {@link BaseAppSDK} */
|
|
@@ -327,9 +327,9 @@ export interface ConnectMessage {
|
|
|
327
327
|
release?: Release;
|
|
328
328
|
uiLanguageLocale: string;
|
|
329
329
|
agent?: AgentContext;
|
|
330
|
-
/**
|
|
331
|
-
|
|
332
|
-
context?:
|
|
330
|
+
/** Experiences data; when present, SDK constructs sdk.experiences */
|
|
331
|
+
experiences?: {
|
|
332
|
+
context?: ExperienceContext;
|
|
333
333
|
uiMode?: UiMode;
|
|
334
334
|
experience?: ExperienceSnapshot;
|
|
335
335
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ResourceLink } from './experience.types';
|
|
1
2
|
import { SerializedJSONValue } from './utils';
|
|
2
3
|
export interface OpenAlertOptions {
|
|
3
4
|
title: string;
|
|
@@ -27,6 +28,21 @@ export interface EntityDialogOptions {
|
|
|
27
28
|
min?: number;
|
|
28
29
|
max?: number;
|
|
29
30
|
}
|
|
31
|
+
export interface RecommendationsOptions {
|
|
32
|
+
searchQuery?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface CrossSpaceAllowedResource {
|
|
35
|
+
type: string;
|
|
36
|
+
source: string;
|
|
37
|
+
contentTypes?: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface ResourceEntitySelectorOptions {
|
|
40
|
+
locale?: string;
|
|
41
|
+
allowedResources?: CrossSpaceAllowedResource[];
|
|
42
|
+
referencingEntryId?: string;
|
|
43
|
+
min?: number;
|
|
44
|
+
max?: number;
|
|
45
|
+
}
|
|
30
46
|
export interface DialogsAPI {
|
|
31
47
|
/** Opens a simple alert window (which can only be closed). */
|
|
32
48
|
openAlert: (options: OpenAlertOptions) => Promise<boolean>;
|
|
@@ -46,6 +62,7 @@ export interface DialogsAPI {
|
|
|
46
62
|
selectSingleEntry: <T = Object>(options?: {
|
|
47
63
|
locale?: string;
|
|
48
64
|
contentTypes?: string[];
|
|
65
|
+
recommendations?: RecommendationsOptions;
|
|
49
66
|
}) => Promise<T | null>;
|
|
50
67
|
/** Opens a dialog for selecting multiple entries. */
|
|
51
68
|
selectMultipleEntries: <T = Object>(options?: {
|
|
@@ -53,6 +70,7 @@ export interface DialogsAPI {
|
|
|
53
70
|
contentTypes?: string[];
|
|
54
71
|
min?: number;
|
|
55
72
|
max?: number;
|
|
73
|
+
recommendations?: RecommendationsOptions;
|
|
56
74
|
}) => Promise<T[] | null>;
|
|
57
75
|
/** Opens a dialog for selecting a single asset. */
|
|
58
76
|
selectSingleAsset: <T = Object>(options?: {
|
|
@@ -108,4 +126,8 @@ export interface DialogsAPI {
|
|
|
108
126
|
min?: number;
|
|
109
127
|
max?: number;
|
|
110
128
|
}) => Promise<T[] | null>;
|
|
129
|
+
/** Opens a dialog for selecting a single cross-space resource entity. */
|
|
130
|
+
selectSingleResourceEntity: (options?: ResourceEntitySelectorOptions) => Promise<ResourceLink | null>;
|
|
131
|
+
/** Opens a dialog for selecting multiple cross-space resource entities. */
|
|
132
|
+
selectMultipleResourceEntities: (options?: ResourceEntitySelectorOptions) => Promise<ResourceLink[] | null>;
|
|
111
133
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Experience SDK types.
|
|
3
3
|
*/
|
|
4
4
|
export type Unsubscribe = () => void;
|
|
5
5
|
export type UiMode = 'form' | 'visual';
|
|
@@ -24,7 +24,7 @@ export type DesignValue = DesignTokenValue | ManualDesignValue;
|
|
|
24
24
|
* Describes a single component property: its key, area, current value, and binding.
|
|
25
25
|
* `area` distinguishes content properties (bound to entry fields / authored content)
|
|
26
26
|
* from design properties (presentation values, e.g. design tokens) — the same split
|
|
27
|
-
* the
|
|
27
|
+
* the Experience domain model and editor model natively, letting an app render them separately.
|
|
28
28
|
* `binding`, when present, is an `EntryBinding` carrying the `entryId`/`fieldId` a
|
|
29
29
|
* consumer needs to resolve the backing entry; omitted when the property is unbound.
|
|
30
30
|
*/
|
|
@@ -106,10 +106,10 @@ export interface DataAssemblyAPI extends DataAssemblyParameterAPI {
|
|
|
106
106
|
onChange(cb: (snapshot: DataAssemblySnapshot) => void): Unsubscribe;
|
|
107
107
|
}
|
|
108
108
|
/** The type of a node within an experience/fragment tree. */
|
|
109
|
-
export type
|
|
110
|
-
export interface
|
|
109
|
+
export type ExperienceNodeType = 'Component' | 'Fragment' | 'InlineFragment' | 'Slot';
|
|
110
|
+
export interface ExperienceNodeSnapshot {
|
|
111
111
|
id: string;
|
|
112
|
-
nodeType:
|
|
112
|
+
nodeType: ExperienceNodeType;
|
|
113
113
|
}
|
|
114
114
|
export interface SlotDescriptor {
|
|
115
115
|
id: string;
|
|
@@ -123,15 +123,15 @@ export interface SlotDescriptor {
|
|
|
123
123
|
* API for reading and mutating a single node (component, slot, fragment, etc.) within an
|
|
124
124
|
* experience or fragment tree. Obtained via {@link ExperienceAPI.getNode}.
|
|
125
125
|
*/
|
|
126
|
-
export interface
|
|
126
|
+
export interface ExperienceNodeAPI {
|
|
127
127
|
/** The node's unique id within the experience/fragment tree. */
|
|
128
128
|
id: string;
|
|
129
129
|
/** The node's type (component, slot, fragment, etc.). */
|
|
130
|
-
nodeType:
|
|
130
|
+
nodeType: ExperienceNodeType;
|
|
131
131
|
/** Returns the current snapshot of this node. */
|
|
132
|
-
get():
|
|
132
|
+
get(): ExperienceNodeSnapshot;
|
|
133
133
|
/** Subscribes to changes to this node. Returns an unsubscribe function. */
|
|
134
|
-
onChange(cb: (node:
|
|
134
|
+
onChange(cb: (node: ExperienceNodeSnapshot) => void): Unsubscribe;
|
|
135
135
|
/**
|
|
136
136
|
* Reads parameter definitions and writes parameter values for this node's Data Assembly.
|
|
137
137
|
* A node's content is populated through Data Assembly parameters, not free-form content
|
|
@@ -150,14 +150,14 @@ export interface ExoNodeAPI {
|
|
|
150
150
|
/** Resolves the slot descriptor for this node, or `null` if the node is not a slot. */
|
|
151
151
|
getSlotDescriptor(): Promise<SlotDescriptor | null>;
|
|
152
152
|
}
|
|
153
|
-
export interface
|
|
153
|
+
export interface ExperienceSelectionAPI {
|
|
154
154
|
get(): {
|
|
155
155
|
nodeId: string | null;
|
|
156
|
-
nodeType?:
|
|
156
|
+
nodeType?: ExperienceNodeType;
|
|
157
157
|
};
|
|
158
158
|
onChange(cb: (sel: {
|
|
159
159
|
nodeId: string | null;
|
|
160
|
-
nodeType?:
|
|
160
|
+
nodeType?: ExperienceNodeType;
|
|
161
161
|
}) => void): Unsubscribe;
|
|
162
162
|
set(nodeId: string | null): void;
|
|
163
163
|
highlight(nodeId: string, opts?: {
|
|
@@ -191,18 +191,18 @@ export interface ExperienceAPI {
|
|
|
191
191
|
onChange(cb: (v: ExperienceSnapshot) => void): Unsubscribe;
|
|
192
192
|
save(): Promise<void>;
|
|
193
193
|
publish(): Promise<void>;
|
|
194
|
-
getNode(nodeId: string):
|
|
195
|
-
getRootNodes():
|
|
196
|
-
selection:
|
|
194
|
+
getNode(nodeId: string): ExperienceNodeAPI | null;
|
|
195
|
+
getRootNodes(): ExperienceNodeAPI[];
|
|
196
|
+
selection: ExperienceSelectionAPI;
|
|
197
197
|
dataAssembly: DataAssemblyAPI;
|
|
198
198
|
}
|
|
199
|
-
export interface
|
|
199
|
+
export interface ExperienceContext {
|
|
200
200
|
type: 'experience' | 'fragment';
|
|
201
201
|
entityId: string;
|
|
202
202
|
}
|
|
203
|
-
export interface
|
|
204
|
-
context:
|
|
205
|
-
onContextChanged(cb: (context:
|
|
203
|
+
export interface ExperienceSDK {
|
|
204
|
+
context: ExperienceContext;
|
|
205
|
+
onContextChanged(cb: (context: ExperienceContext) => void): Unsubscribe;
|
|
206
206
|
getUiMode(): UiMode;
|
|
207
207
|
onUiModeChanged(cb: (mode: UiMode) => void): Unsubscribe;
|
|
208
208
|
experience: ExperienceAPI;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type { AppExtensionSDK, BaseExtensionSDK, DialogExtensionSDK, EditorExtensionSDK, FieldExtensionSDK, HomeExtensionSDK, KnownSDK, PageExtensionSDK, SidebarExtensionSDK, ConfigAppSDK, BaseAppSDK, DialogAppSDK, EditorAppSDK, FieldAppSDK, HomeAppSDK, KnownAppSDK, PageAppSDK, SidebarAppSDK, AccessAPI, ArchiveableAction, ConnectMessage, ContentTypeAPI, CrudAction, EditorLocaleSettings, IdsAPI, LocalesAPI, LocationAPI, Locations, NotifierAPI, ParametersAPI, PublishableAction, SharedEditorSDK, UserAPI, JSONPatchItem, HostnamesAPI, AgentAppSDK, ExperienceEditorToolbarAppSDK, } from './api.types';
|
|
2
2
|
export type { AgentAPI, AgentContext, LayoutVariant, ToolbarAction, ToolbarActionName, } from './agent.types';
|
|
3
3
|
export type { AppConfigAPI, AppState, OnConfigureHandler, OnConfigureHandlerReturn, } from './app.types';
|
|
4
|
-
export type { DialogsAPI, EntityDialogOptions, OpenAlertOptions, OpenConfirmOptions, OpenCustomWidgetOptions, } from './dialogs.types';
|
|
4
|
+
export type { DialogsAPI, EntityDialogOptions, OpenAlertOptions, OpenConfirmOptions, OpenCustomWidgetOptions, RecommendationsOptions, CrossSpaceAllowedResource, ResourceEntitySelectorOptions, } from './dialogs.types';
|
|
5
5
|
export type { Asset, CanonicalRequest, ContentType, ContentTypeField, EditorInterface, Entry, Metadata, Release, Role, ScheduledAction, SpaceMembership, Tag, TagVisibility, Task, Team, User, WorkflowDefinition, } from './entities';
|
|
6
6
|
export type { EntryAPI, TaskAPI, TaskInputData } from './entry.types';
|
|
7
7
|
export type { FieldInfo, EntryFieldInfo, EntryFieldAPI } from './field.types';
|
|
@@ -12,4 +12,4 @@ export type { SearchQuery, CollectionResponse, CursorBasedCollectionResponse, En
|
|
|
12
12
|
export type { DateRangeValidationError, InValidationError, LinkContentTypeValidationError, LinkMimetypeGroupValidationError, NotResolvableValidationError, ProhibitRegexpValidationError, RangeValidationError, RegexpValidationError, RequiredValidationError, SizeValidationError, TypeValidationError, UniqueValidationError, UnknownValidationError, ValidationError, AllowedResourceValidationError, AllowedResourcesValidationError, } from './validation-error';
|
|
13
13
|
export type { WindowAPI } from './window.types';
|
|
14
14
|
export type { CMAClient } from './cmaClient.types';
|
|
15
|
-
export type { Unsubscribe, UiMode,
|
|
15
|
+
export type { Unsubscribe, UiMode, ExperienceContext, ExperienceSDK, ResourceLink, EntryBinding, DesignTokenValue, ManualDesignValue, DesignValue, ComponentPropertyDescriptor, SameSpaceContentSource, AllowedResource, DataAssemblyParameterDefinition, DataAssemblyParameterValue, DataAssemblySnapshot, DataAssemblySummary, DataAssemblyParameterAPI, DataAssemblyAPI, ExperienceNodeType, ExperienceNodeSnapshot, SlotDescriptor, ExperienceSnapshot, ExperienceNodeAPI, ExperienceSelectionAPI, ExperienceAPI, } from './experience.types';
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@contentful/app-sdk","description":"A JavaScript library to develop custom apps for Contentful","version":"4.
|
|
1
|
+
{"name":"@contentful/app-sdk","description":"A JavaScript library to develop custom apps for Contentful","version":"4.61.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","unpkg":"dist/cf-extension-api.bundled.js","jsdelivr":"dist/cf-extension-api.bundled.js","types":"dist/index.d.ts","files":["dist/cf-extension-api.js","dist/cf-extension-api.js.map","dist/cf-extension-api.bundled.js","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","lint-staged":"lint-staged"},"dependencies":{"contentful-management":"^12.3.1"},"devDependencies":{"@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0","@semantic-release/changelog":"6.0.3","@semantic-release/exec":"7.1.0","@semantic-release/git":"10.0.1","@testing-library/dom":"10.4.1","@types/chai-as-promised":"7.1.8","@types/cross-spawn":"6.0.6","@types/fs-extra":"11.0.4","@types/jsdom":"28.0.3","@types/mocha":"10.0.10","@types/nanoid":"3.0.0","@types/sinon":"^21.0.0","@types/sinon-chai":"^3.2.5","@typescript-eslint/eslint-plugin":"7.18.0","@typescript-eslint/parser":"7.18.0","babel-eslint":"10.1.0","chai":"4.5.0","chai-as-promised":"7.1.2","cross-spawn":"7.0.6","eslint":"8.57.1","eslint-config-prettier":"10.1.8","eslint-config-standard":"17.1.0","eslint-plugin-import":"2.32.0","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"5.5.6","eslint-plugin-promise":"6.6.0","eslint-plugin-react":"7.37.5","eslint-plugin-standard":"5.0.0","fs-extra":"11.3.5","husky":"9.1.7","jsdom":"29.1.1","lint-staged":"17.0.7","mocha":"11.7.6","mocha-junit-reporter":"2.2.1","mocha-multi-reporters":"1.5.1","mochawesome":"7.1.4","mochawesome-merge":"5.1.1","mochawesome-report-generator":"6.3.2","prettier":"3.8.4","rollup":"2.80.0","rollup-plugin-terser":"7.0.2","rollup-plugin-typescript2":"0.37.0","semantic-release":"^25.0.2","sinon":"22.0.0","sinon-chai":"3.7.0","ts-mocha":"11.1.0","tslib":"2.8.1","typescript":"5.9.3"},"lint-staged":{"*.ts":["prettier --write","eslint --fix"],"*.md":["prettier --write"]},"release":{"branches":["main",{"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"]}}
|
package/dist/exo.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Channel } from './channel';
|
|
2
|
-
import { ExoSDK, ExoContext, UiMode, ExperienceSnapshot } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* Creates the ExO (Experience Orchestration) SDK namespace for the experience-toolbar location.
|
|
5
|
-
*
|
|
6
|
-
* Throws when called without handshake `exo` data, mirroring `createAgent`. This keeps the
|
|
7
|
-
* public `ExperienceEditorToolbarAppSDK['exo']` type sound (non-optional, always present).
|
|
8
|
-
*/
|
|
9
|
-
export default function createExo(channel: Channel, exoInit?: {
|
|
10
|
-
context?: ExoContext;
|
|
11
|
-
uiMode?: UiMode;
|
|
12
|
-
experience?: ExperienceSnapshot;
|
|
13
|
-
}): ExoSDK;
|