@pacem/pacem-cms 1.0.0-bernoulli → 1.0.0-binet

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,7 +1,6 @@
1
1
  /*!
2
- * @pacem/pacem-cms v1.0.0-bernoulli (https://js.pacem.it)
2
+ * @pacem/pacem-cms v1.0.0-binet (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
6
6
  !function(e,t,r,s){"use strict";const a={dismiss:(...e)=>{for(let t of e||[])delete a[t]},handleExpressionValueChange:(e,r,s)=>{if("value"===e.detail.propertyName&&!t.Utils.isNull(s)){const a=e.detail.currentValue;if(s instanceof HTMLElement){let e=t.CustomElementUtils.camelToKebab(r);t.Utils.isNullOrEmpty(a)?s.removeAttribute(e):s.setAttribute(e,a.toString())}else s[r]=a}}},o=(e,r=":host",s=":host.entity")=>{const o={},i=e.metadata,n=a,l=[];o.value=`{{ ${s} instanceof HTMLElement && ${s}.getAttribute('${t.CustomElementUtils.camelToKebab(i.prop)}') }}`,o["on-"+t.PropertyChangeEventName]=`Pacem.Components.Cms.Functions.handleExpressionValueChange($event, '${i.prop}', ${s})`,o.converter=`{{ Pacem.CustomElementUtils.getWatchedProperty(${s}, '${i.prop}').config.converter }}`;const c=t.P+"-expression";let p=i.extra||{};if(t.Utils.isNullOrEmpty(p.selector)||(o.selector=p.selector),!t.Utils.isNullOrEmpty(p.filter))switch(typeof p.filter){case"string":o.filter=`{{ (e) => e.constructor.name === "${p.filter}" || e.localName === "${p.filter.toLowerCase()}" }}`;break;case"function":const e="fn"+t.Utils.uniqueCode();n[e]=p.filter,o.filter=`{{ Pacem.Components.Cms.Functions.${e}, once }}`,l.push(e)}if("function"==typeof p.labeler){const e="fn"+t.Utils.uniqueCode();n[e]=p.labeler,o.labeler=`{{ Pacem.Components.Cms.Functions.${e}, once }}`,l.push(e)}return l.length>0&&(o["on-unload"]=`{{ Pacem.Components.Cms.Functions.dismiss('${l.join("','")}') }}`),{tagName:c,attrs:o}};var i=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};class PacemElementPickerElementBase extends r.Components.Scaffolding.PacemBaseElement{}i([t.Watch({converter:t.PropertyConverters.String})],PacemElementPickerElementBase.prototype,"selector",void 0),i([t.Watch({converter:t.PropertyConverters.Eval})],PacemElementPickerElementBase.prototype,"filter",void 0),i([t.Watch({converter:t.PropertyConverters.Eval})],PacemElementPickerElementBase.prototype,"labeler",void 0);let n=class PacemElementPickerElement extends PacemElementPickerElementBase{get inputFields(){return[this._select]}toggleReadonlyView(e){this._select.readonly=e}onChange(e){return t.Utils.fromResult(this.value=this._select.value)}acceptValue(e){this._select.value=e}getViewValue(e){return this._select.viewValue}convertValueAttributeToProperty(e){return t.PropertyConverters.Element.convert(e)}viewActivatedCallback(){super.viewActivatedCallback(),this._databind()}propertyChangedCallback(e,t,r,s){if(super.propertyChangedCallback(e,t,r,s),!s)switch(e){case"selector":case"filter":case"labeler":this._databind()}}_databind(){const e=this.labeler||(e=>{let t=e.constructor.name;return e.id&&(t+="#"+e.id),t}),r=[];document.querySelectorAll(this.selector||"[pacem]").forEach((s,a,o)=>{!t.Utils.isNull(this.filter)&&!0!==this.filter(s)||t.Utils.isNullOrEmpty(s.id)||r.push({element:s,label:e(s)})}),this._select.valueProperty="element",this._select.textProperty="label",this._select.datasource=r}};i([t.ViewChild(t.P+"-select")],n.prototype,"_select",void 0),i([t.Debounce(50)],n.prototype,"_databind",null),n=i([t.CustomElement({tagName:t.P+"-element-picker",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-select></${t.P}-select>`})],n);var l,c=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};!function(e){e.Constant="const",e.PropertyReference="property",e.Expression="expr"}(l||(l={}));let p=class PacemExpressionElement extends PacemElementPickerElementBase{propertyChangedCallback(e,r,s,a){if(super.propertyChangedCallback(e,r,s,a),"converter"===e)this._setFeedbackText(this.value);else if(!a&&this._editing)switch(e){case"_source":if(s===l.PropertyReference)this._picker.focus();else this._editor.focus();break;case"_propRef":t.Utils.isNullOrEmpty(s)||(this._editor.focus(),this._editor.value="{{ #"+this._sourceRef.id+"."+s+" }}"),this.changeHandler(new Event("change"))}}get inputFields(){return[this._editor]}toggleReadonlyView(e){e&&(this._editing=!1)}setPristine(){super.setPristine(),this._editing=!1}onChange(e){return t.Utils.fromResult(this.value=this._editor.value)}acceptValue(e){this._view.textContent=e||"...",this._setFeedbackText(e),this._reverseStructure(),e!==this._editor.value&&(this._editor.value=e)}_setFeedbackText(e=this.value){const r=this.converter;t.CustomElementUtils.isBindingAttribute(e)||"function"!=typeof(r&&r.convert)?this._eval.setAttribute("text",e):this._eval.text=void 0===e?"<undefined>":r.convert(e)}getViewValue(e){return e}convertValueAttributeToProperty(e){return e}_reverseStructure(){let e=()=>{this._source=this._sourceRef=this._propRef=void 0},r=this.value;if(t.Utils.isNullOrEmpty(r))e();else if(t.CustomElementUtils.isBindingAttribute(r)){const e=t.CustomElementUtils.parseBindingAttribute(r,this).dependencies;if(t.Utils.isNullOrEmpty(e)||e.length>1||t.RepeaterItem.isRepeaterItem(e[0].element))this._source=l.Expression;else{const t=e[0];this._source=l.PropertyReference,this._sourceRef=document.querySelector("#"+t.element.id),this._propRef=t.path}}else this._source=l.Constant}};c([t.Watch({emit:!1})],p.prototype,"converter",void 0),c([t.Watch({converter:t.PropertyConverters.Boolean})],p.prototype,"_editing",void 0),c([t.Watch({converter:t.PropertyConverters.String})],p.prototype,"_source",void 0),c([t.Watch({converter:t.PropertyConverters.Element})],p.prototype,"_sourceRef",void 0),c([t.Watch({converter:t.PropertyConverters.String})],p.prototype,"_propRef",void 0),c([t.ViewChild(t.P+"-element-picker")],p.prototype,"_picker",void 0),c([t.ViewChild(t.P+"-textarea")],p.prototype,"_editor",void 0),c([t.ViewChild("span."+t.PCSS+"-viewfinder")],p.prototype,"_view",void 0),c([t.ViewChild(t.P+"-text")],p.prototype,"_eval",void 0),c([t.Debounce(50)],p.prototype,"_reverseStructure",null),p=c([t.CustomElement({tagName:t.P+"-expression",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-collapse class="${t.PCSS}-expression" collapse="{{ !:host._editing }}">\n <div class="expression-builder ${t.PCSS}-grid grid-tiny-rowgap grid-tiny-colgap ${t.PCSS}-pad pad-bottom-2">\n <div class="${t.PCSS}-cell">\n <${t.P}-select value="{{ :host._source, twoway }}" class="display-block">\n <${t.P}-data-item value="${l.Constant}" label="constant value"></${t.P}-data-item>\n <${t.P}-data-item value="${l.PropertyReference}" label="property reference"></${t.P}-data-item>\n <${t.P}-data-item value="${l.Expression}" label="complex expression"></${t.P}-data-item>\n </${t.P}-select>\n </div>\n\n <${t.P}-panel class="${t.PCSS}-cell cols-hd-6" hide="{{ :host._source !== '${l.PropertyReference}' }}">\n <${t.P}-element-picker value="{{ :host._sourceRef, twoway }}" selector="{{ :host.selector }}" filter="{{ :host.filter }}" labeler="{{ :host.labeler }}" class="display-block"></${t.P}-element-picker>\n </${t.P}-panel>\n <${t.P}-panel class="${t.PCSS}-cell cols-hd-6" hide="{{ :host._source !== '${l.PropertyReference}' }}">\n <${t.P}-property-picker value="{{ :host._propRef, twoway }}" disabled="{{ !:host._sourceRef }}" target="{{ :host._sourceRef }}" on-change="::_editor.focus()" class="display-block"></${t.P}-property-picker>\n </${t.P}-panel>\n\n <${t.P}-panel class="${t.PCSS}-cell">\n <${t.P}-textarea class="display-block" placeholder="{{ '{{ '+ (:host._source || '') +'... }}' }}" change-policy="${r.Components.Scaffolding.ChangePolicy.Blur}"></${t.P}-textarea>\n </${t.P}-panel>\n </div>\n</${t.P}-collapse>\n<div class="${t.PCSS}-fieldset">\n <div class="fieldset-left">\n <div class="${t.PCSS}-fieldgroup ${t.PCSS}-viewfinder">\n <div class="text-truncate ${t.PCSS}-pad pad-x-1"><span class="${t.PCSS}-viewfinder text-tech">{{ :host.value || '...' }}</span></div>\n <${t.P}-panel class="fieldgroup-prepend">\n <${t.P}-button class="flat edit ${t.PCSS}-pad pad-left-1" on-click=":host._editing = !:host._editing" hide="{{ :host.readonly }}"></${t.P}-button>\n </${t.P}-panel>\n <${t.P}-panel class="fieldgroup-append text-tech display-flex flex-middle flex-nowrap" hide="{{ $pacem.isNullOrEmpty(:host.value) }}">\n <i class="${t.PCSS}-icon text-primary">keyboard_arrow_right</i>\n <${t.P}-text text="?" class="bg-primary ${t.PCSS}-pad pad-left-1 pad-right-1 ${t.PCSS}-margin margin-right-1 text-truncate" eval></${t.P}-text>\n </${t.P}-panel>\n </div>\n </div>\n</div>`})],p);var d=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const m=s.Components.UI,h={props:[{prop:"permissions",type:"array",display:{name:"Permissions"},props:{display:{cssClass:[t.PCSS+"-cell",t.PCSS+"-grid","grid-novgap","grid-tiny-colgap","grid-nospace"],name:"Permission"},props:Array.prototype.concat.apply([{prop:"claimType",type:"string",display:{cssClass:[t.PCSS+"-cell","cols-hd-4","cols-lg-6","field-stretch","field-minimal"],name:"Claim type"},validators:[{type:"required",errorMessage:"!"}]},{prop:"claimValue",type:"string",display:{cssClass:[t.PCSS+"-cell","cols-hd-4","cols-lg-6","field-stretch","field-minimal"],name:"Claim value"},validators:[{type:"required",errorMessage:"!"}]}],["read","update","create","delete"].map((e,r)=>({prop:e,type:"boolean",display:{cssClass:[t.PCSS+"-cell","cols-hd-1","cols-3","field-minimal",t.PCSS+"-pad pad-left-2"],name:e.charAt(0).toUpperCase()+e.substr(1)}})))}}]},u={display:{name:"Widget",cssClass:[t.PCSS+"-grid","grid-novgap","grid-tiny-colgap","grid-nospace"]},props:[{prop:"tag",type:"string",display:{name:"Tag",cssClass:[t.PCSS+"-cell"]}}]};function g(e){e.display=e.display||{name:e.prop,cssClass:[]};(e.display.cssClass=t.Utils.isArray(e.display.cssClass)&&e.display.cssClass||[]).push(t.PCSS+"-cell")}function f(e){var r=e&&e.props||[],s=e&&e.display||{name:"Element"};if(!t.Utils.isNull(s)){const e=s.cssClass=s.cssClass||[];Array.prototype.push.apply(e,u.display.cssClass)}return r.forEach(g),{display:s,props:r}}function v(e){var r=t.Utils.extend({},u.display,e&&e.display||{}),s=t.Utils.clone(u.props);return Array.prototype.push.apply(s,(e&&e.props||[]).filter(e=>"tag"!==e.prop&&(g(e),!0))),{display:r,props:s}}const y=t.PCSS+"-widget",P={selector:"."+y,labeler:e=>t.Utils.isNullOrEmpty(e.tag)?(e.metadata&&e.metadata.display&&e.metadata.display.name||"")+"#"+e.id:e.tag};let C=class PacemWidgetToolbarElement extends t.Components.PacemElement{get editButton(){return this._btnEdit}get permissionsButton(){return this._btnPerms}get removeButton(){return this._btnRemove}_edit(e){const t=this._proxy.dom.find(e=>"core"in e.attributes);t.open(this.target,!0),t.metadata=this.target.metadata,this._popoutJustInCase()}_editPermissions(e){const t=this._proxy.dom.find(e=>"permissions"in e.attributes);t.open(this.target),t.metadata=this.target.permissionMetadata,this._popoutJustInCase()}_popoutJustInCase(){const e=t.CustomElementUtils.findAncestorOfType(this,m.PacemBalloonElement);t.Utils.isNullOrEmpty(e)||e.popout()}};d([t.Watch({emit:!1,converter:t.PropertyConverters.Element})],C.prototype,"target",void 0),d([t.ViewChild(".buttons > div")],C.prototype,"_toolbar",void 0),d([t.ViewChild(t.P+"-button[edit]")],C.prototype,"_btnEdit",void 0),d([t.ViewChild(t.P+"-button[permissions]")],C.prototype,"_btnPerms",void 0),d([t.ViewChild(t.P+"-button[remove]")],C.prototype,"_btnRemove",void 0),d([t.ViewChild(t.P+"-shell-proxy")],C.prototype,"_proxy",void 0),C=d([t.CustomElement({tagName:t.P+"-widget-toolbar",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-span class="toolbar-text" content="{{ '<i class=&quot;${t.PCSS}-icon&quot;>'+ (::target.metadata && ::target.metadata.display && ::target.metadata.display.icon || 'widgets') +'</i> '+ (::target.tag || (::target.metadata && ::target.metadata.display && ::target.metadata.display.name || ::target.localName) +'#'+ ::target.id) }}"></${t.P}-span>\n<div class="buttons ${t.PCSS}-buttonset ${t.PCSS}-pad ${t.PCSS}-margin pad-0 margin-left-2">\n <div class="buttonset-left">\n <${t.P}-button edit class="button edit" on-click=":host._edit($event)"></${t.P}-button>\n <${t.P}-button permissions class="button" on-click=":host._editPermissions($event)" css-class="{{ {'button-success': ::target.permissions.length > 0} }}" icon-glyph="verified_user"></${t.P}-button>\n <${t.P}-button remove class="button button-danger delete"></${t.P}-button>\n </div>\n<div>\n<${t.P}-shell-proxy>\n <${t.P}-modal-form core></${t.P}-modal-form>\n <${t.P}-modal-form permissions></${t.P}-modal-form>\n</${t.P}-shell-proxy>`})],C);class PacemWidgetElement extends t.Components.PacemElement{constructor(e,t="widget"){super(t),this.permissionMetadata=h,this.metadata=e}connectedCallback(){super.connectedCallback(),t.Utils.isNullOrEmpty(this.id)&&(this.id="wdg"+t.Utils.uniqueCode()),t.Utils.addClass(this,y)}propertyChangedCallback(e,r,s,a){switch(super.propertyChangedCallback(e,r,s,a),e){case"editable":s?this.isReady&&this._ensureBalloon():this._disposeBalloon();break;case"editing":t.Utils.isNull(this._balloon)||(this._balloon.disabled=!s),(s?t.Utils.addClass:t.Utils.removeClass).apply(this,[this,"widget-"+e]);break;case"metadata":this._assignIcon(s)}}viewActivatedCallback(){super.viewActivatedCallback(),this._assignIcon(),this._ensureBalloon()}disconnectedCallback(){super.disconnectedCallback()}_assignIcon(e=this.metadata){this.dataset.icon=e&&e.display&&e.display.icon||"widgets"}_ensureBalloon(){if(t.Utils.isNull(this._balloon)){const e=this._balloon=document.createElement(t.P+"-balloon");e.target=this,e.disabled=!this.editing,e.options={behavior:m.BalloonBehavior.Menu,trigger:m.BalloonTrigger.Hover},e.innerHTML=`<${t.P}-widget-toolbar target="{{ #${this.id} }}"><${t.P}-widget-toolbar>`,t.CustomElementUtils.findAncestorShell(this).appendChild(e)}}_disposeBalloon(){t.Utils.isNull(this._balloon)||(this._balloon.remove(),this._balloon=null)}}d([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],PacemWidgetElement.prototype,"editing",void 0),d([t.Watch({emit:!1,converter:t.PropertyConverters.Boolean})],PacemWidgetElement.prototype,"editable",void 0),d([t.Watch({emit:!0,reflectBack:!0,converter:t.PropertyConverters.String})],PacemWidgetElement.prototype,"tag",void 0),d([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Json})],PacemWidgetElement.prototype,"permissions",void 0),d([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],PacemWidgetElement.prototype,"metadata",void 0),d([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],PacemWidgetElement.prototype,"permissionMetadata",void 0);var E=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const b={display:{icon:"storage",name:"Data",description:"Data object widget."},props:[{prop:"model",type:o,display:{name:"Model"},extra:{selector:"."+t.PCSS+"-widget"}}]};let _=class PacemWidgetDataElement extends PacemWidgetElement{constructor(){super(v(b))}};E([t.Watch({reflectBack:!0,converter:t.PropertyConverters.Json})],_.prototype,"model",void 0),_=E([t.CustomElement({tagName:t.P+"-widget-data"})],_);var w=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const S={props:[{prop:"name",type:"string",isReadOnly:!0,display:{name:"Name",cssClass:["cols-md-4","cols-lg-3","cols-hd-2"]}},{prop:"value",type:o,display:{name:"Value",cssClass:["cols-md-8","cols-lg-9","cols-hd-10"]}}]},$={display:{icon:"wifi",name:"Api Fetcher",description:"Fetching widget that retrieves data from a REST endpoint."},props:[{prop:"manifest",type:o,isComplexType:!0,display:{name:"Api Manifest"},extra:{selector:t.P+"-widget-apimanifest"},validators:[{type:"required",errorMessage:"Api Manifest is a required field."}]},{prop:"endpoint",type:"object",isComplexType:!0,display:{name:"Endpoint",ui:"oneToMany"},validators:[{type:"required",errorMessage:"Api Manifest is a required field."}],extra:{source:e=>e.endpoints.map(e=>t.Utils.extend(e,{fullPath:`[${e.method.toUpperCase()}] ${e.path}`})).sort(),textProperty:"fullPath",valueProperty:"fullPath",dependsOn:[{prop:"manifest",hide:!0}]}},{prop:"parameters",type:"array",display:{name:"Parameters"},props:f(S),extra:{lockItems:!0,dependsOn:[{prop:"endpoint",hide:!0}]}},D]},x=t.P+"-widget-fetch-parameter";let U=class PacemWidgetFetchParameterElement extends t.PacemEventTarget{propertyChangedCallback(e,r,s,a){super.propertyChangedCallback(e,r,s.first),"value"!==e||t.Utils.isNull(this._fetcher)||this._fetcher.fetch()}viewActivatedCallback(){super.viewActivatedCallback(),this._fetcher=t.CustomElementUtils.findAncestorOfType(this,k),t.Utils.isNull(this._fetcher)||t.Utils.isNull(this.value)||this._fetcher.fetch()}};w([t.Watch({reflectBack:!0,converter:t.PropertyConverters.Boolean})],U.prototype,"required",void 0),w([t.Watch({reflectBack:!0,converter:t.PropertyConverters.String})],U.prototype,"name",void 0),w([t.Watch({reflectBack:!0,converter:t.PropertyConverters.String})],U.prototype,"value",void 0),U=w([t.CustomElement({tagName:x})],U);let k=class PacemWidgetFetchElement extends PacemBearerWidgetElement{constructor(){super(v($)),this._onerror=e=>{this.failure=!(this.success=!1)},this._onsuccess=e=>{this.failure=!(this.success=!0)},this._onresult=e=>{this.result=e.detail}}get _parameters(){return Array.from(this._itemsElement.children).filter(e=>e.localName===x)}fetch(){const e=this._fetcher,r=this._parameters||[],s=this.endpoint;if(!t.Utils.isNull(s))for(let e of s.parameters)if(e.required&&t.Utils.isNull(r.find(t=>t.name===e.name)))return;const a={};for(let e of r)if(t.Utils.isNullOrEmpty(e.value)){if(e.required)return}else a[e.name]=e.value;return e.url=this.url,e.method=this.method,e.credentials=this.fetchCredentials,e.headers=this.fetchHeaders,e.parameters=a,e.fetch()}viewActivatedCallback(){super.viewActivatedCallback(),this.fetch()}propertyChangedCallback(e,r,s,a){if(super.propertyChangedCallback(e,r,s,a),"endpoint"!==e||t.Utils.isNullOrEmpty(s))switch(e){case"parameters":case"fetchHeaders":case"fetchCredentials":case"url":case"method":this.fetch()}else this._mergeEndpoint(s)}_mergeEndpoint(e=this.endpoint){this.url=this.manifest.baseUrl+e.path,this.method=e.method,this.fields=e.response.fields;const r=this._itemsElement,s=this._parameters;for(let r=s.length-1;r>=0;r--){let a=s[r],o=e.parameters.find(e=>e.name===a.name);t.Utils.isNull(o)&&a.remove()}for(let a of e.parameters){let e=s.find(e=>e.name===a.name);if(t.Utils.isNull(e)){let t=e=document.createElement(x);t.name=a.name,r.appendChild(t)}e.required=a.required}this.parameters=s}};w([t.Watch({reflectBack:!0,emit:!0,converter:t.PropertyConverters.Json})],k.prototype,"manifest",void 0),w([t.Watch({reflectBack:!0,emit:!0,converter:t.PropertyConverters.Json})],k.prototype,"endpoint",void 0),w([t.Watch({reflectBack:!0,emit:!1,converter:t.PropertyConverters.String})],k.prototype,"url",void 0),w([t.Watch({reflectBack:!0,emit:!1,converter:t.PropertyConverters.String})],k.prototype,"method",void 0),w([t.Watch({reflectBack:!0,emit:!1,converter:t.PropertyConverters.Json})],k.prototype,"fields",void 0),w([t.Watch()],k.prototype,"parameters",void 0),w([t.Watch()],k.prototype,"result",void 0),w([t.Watch({converter:t.PropertyConverters.Boolean})],k.prototype,"fetching",void 0),w([t.Watch({converter:t.PropertyConverters.Boolean})],k.prototype,"success",void 0),w([t.Watch({converter:t.PropertyConverters.Boolean})],k.prototype,"failure",void 0),w([t.ViewChild(t.P+"-fetch")],k.prototype,"_fetcher",void 0),w([t.ViewChild("div[hidden]")],k.prototype,"_itemsElement",void 0),k=w([t.CustomElement({tagName:t.P+"-widget-fetch",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-fetch autofetch="false" fetching="{{ :host.fetching, twoway }}" debounce="100"\non-${t.Net.FetchResultEventName}=":host._onresult($event)" on-${t.Net.FetchErrorEventName}=":host._onerror($event)" on-${t.Net.FetchSuccessEventName}=":host._onsuccess($event)"></${t.P}-fetch><div hidden><${t.P}-content></${t.P}-content></div>`})],k);var W=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const D={prop:"accessToken",type:o,display:{name:"Access Token"},extra:t.Utils.extend({},P,{filter:e=>e instanceof _||e instanceof k})};class PacemBearerWidgetElement extends PacemWidgetElement{constructor(){super(...arguments),this.fetchCredentials="same-origin"}propertyChangedCallback(e,r,s,a){super.propertyChangedCallback(e,r,s,a),"accessToken"===e&&(t.Utils.isNullOrEmpty(s)?this.fetchHeaders={}:this.fetchHeaders={Authorization:"Bearer "+s})}}W([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.String})],PacemBearerWidgetElement.prototype,"fetchCredentials",void 0),W([t.Watch({emit:!1,converter:t.PropertyConverters.Json})],PacemBearerWidgetElement.prototype,"fetchHeaders",void 0),W([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.String})],PacemBearerWidgetElement.prototype,"accessToken",void 0),W([t.Watch({converter:t.PropertyConverters.Boolean})],PacemBearerWidgetElement.prototype,"fetching",void 0);var R=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};let O=class PacemWidgetTranslatorElement extends PacemWidgetElement{};O=R([t.CustomElement({tagName:t.P+"-widget-translator"})],O);var T=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const A={display:{icon:"timer",name:"Clock",description:"Timer widget."},props:[{prop:"interval",type:o,display:{name:"Interval (msec)"},extra:{selector:"."+t.PCSS+"-widget",step:1e3},validators:[{type:"range",errorMessage:"Negative numbers not allowed",params:{min:0}}]}]};let N=class PacemWidgetClockElement extends PacemWidgetElement{constructor(){super(v(A)),this.interval=0}};T([t.Watch({reflectBack:!0,converter:t.PropertyConverters.Number})],N.prototype,"interval",void 0),T([t.Watch({converter:t.PropertyConverters.Number})],N.prototype,"time",void 0),N=T([t.CustomElement({tagName:t.P+"-widget-clock",template:`<${t.P}-timer interval="{{ :host.interval }}" on-tick="{{ :host.time = Date.now() }}"></${t.P}-timer>`})],N);const B="pacem:metadatabag";class SwaggerCmsParser{constructor(e=new r.Scaffolding.OpenApi.OpenApiParser){this._openApi=e,this._cachedMetadataUrls=[]}async load(e,t){let r=await this._openApi.load(e,t);if(null!=r){r[B]={};for(let e of r.endpoints)await this._enrichSchemas(r,e,t)}return r}async _enrichSchemas(e,t,r){const s=t.response;s&&s.meta&&(s.fields=await this._fetchMetadata(e,{name:s.fullType,schema:s.meta},r));const a=t.parameters;for(let t of a||[])if(t.meta&&t.fullType){let s=await this._fetchMetadata(e,{name:t.fullType,schema:t.meta},r);t.fields=s}}clearCache(){const e=this.cache,t=this._cachedMetadataUrls;if(e){for(let r of t)e.removeProperty(r);t.splice(0)}}async _fetchMetadata(e,t,s){let a=async t=>{let o=[];if(t&&t.name){if(e[B][t.name])return e[B][t.name];e[B][t.name]=o;let i,n={props:[]};if(!/^https?:\/\//.test(t.name))return void console.warn("Swagger entity definition keys must appear in form of absolute url. Their response to a GET request needs to be the entity metadata itself.\nNo other options are currently supported.");if(i=t.name,i){let e=async()=>{let e=await fetch(i,{credentials:"omit",mode:"cors",headers:s});if(e.ok)return await e.json()};this.cache?(n=this.cache.getPropertyValue(i),n||(n=await e(),this._cachedMetadataUrls.push(i),this.cache.setPropertyValue(i,n,!1))):n=await e()}let l=t.schema;for(let t in l.properties){let s=l.properties[t],i=n&&n.props.find(e=>e.prop===t),c=Object.assign({prop:t,type:s.type||"text",props:void 0},i||{isReadOnly:!0});if(i){let t=s.items&&s.items.$ref||s.$ref;if(t){let s=r.Scaffolding.OpenApi.getOpenApiDefinition(e,t),o=s.name;e[B][o]?c.props=e[B][o]:c.props=await a(s)}}o.push(c)}}return o};return await a(t)}}var M=Object.freeze({__proto__:null,SwaggerCmsParser:SwaggerCmsParser}),j=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const I={display:{icon:"cloud_circle",name:"Api Manifest",description:"OpenApi parser for WebApi scaffolding."},props:[{prop:"url",type:"text",display:{name:"Url",description:"Insert the url of the OpenApi json configuration.",cssClass:["cols-lg-8"],watermark:"https://domain.com/swagger/v1/swagger.json"},extra:{tooltip:!0},validators:[{type:"required",errorMessage:"Url field is required."}]},{prop:"usecache",type:"boolean",display:{name:"Cache results",description:"Whether to cache the manifest per-url.",cssClass:["cols-lg-4"],ui:"switcher"},extra:{tooltip:!0}},D]};let H=class PacemWidgetApiManifestElement extends PacemBearerWidgetElement{constructor(e=new SwaggerCmsParser,r=new t.Storage){super(v(I)),this._openapi=e,this._cache=r}propertyChangedCallback(e,t,r,s){switch(super.propertyChangedCallback(e,t,r,s),e){case"url":case"editing":case"editable":this._scaffold();break;case"usecache":this._openapi.cache=r?this._cache:null}}viewActivatedCallback(){super.viewActivatedCallback(),this.usecache&&(this._openapi.cache=this._cache),this._scaffold()}_scaffold(){this.editing&&this.editable&&!t.Utils.isNullOrEmpty(this.url)&&(this.fetching=!0,this._openapi.load(this.url).then(e=>{this.manifest=e,this.fetching=!1},e=>{this.fetching=!1}))}};j([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.String})],H.prototype,"url",void 0),j([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Boolean})],H.prototype,"usecache",void 0),j([t.Watch({converter:t.PropertyConverters.Json})],H.prototype,"manifest",void 0),H=j([t.CustomElement({tagName:t.P+"-widget-apimanifest"})],H);var V=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};class PacemUiWidgetElement extends PacemWidgetElement{constructor(e,t=1,r){super(e,r),this.colspan=t,this.rowspan=1}connectedCallback(){super.connectedCallback(),t.Utils.addClass(this,"ui-widget "+t.PCSS+"-cell cols-xs-start-1 cols-xs-12 rows-xs-start-auto")}propertyChangedCallback(e,r,s,a){switch(super.propertyChangedCallback(e,r,s,a),e){case"row":t.Utils.removeClass(this,`rows-start-${r+1}`),t.Utils.addClass(this,`rows-start-${s+1}`);break;case"rowspan":t.Utils.removeClass(this,`rows-${r}`),t.Utils.addClass(this,`rows-${s}`);break;case"column":t.Utils.removeClass(this,`cols-start-${r+1}`),t.Utils.addClass(this,`cols-start-${s+1}`);break;case"colspan":t.Utils.removeClass(this,`cols-${r}`),t.Utils.addClass(this,`cols-${s}`);break;case"borders":(this.borders?t.Utils.addClass:t.Utils.removeClass).apply(this,[this,t.PCSS+"-border"]);break;case"corners":(this.borders?t.Utils.addClass:t.Utils.removeClass).apply(this,[this,t.PCSS+"-corners"])}}get container(){return this._container}findContainer(){return t.CustomElementUtils.findAncestor(this,e=>e instanceof PacemCompositeWidgetElement)}viewActivatedCallback(){super.viewActivatedCallback();let e=this._container=this.findContainer();t.Utils.isNull(e)||e.register(this)}disconnectedCallback(){t.Utils.isNull(this._container)||this._container.unregister(this),super.disconnectedCallback()}}V([t.Watch({emit:!0,reflectBack:!0,converter:t.PropertyConverters.Number})],PacemUiWidgetElement.prototype,"column",void 0),V([t.Watch({emit:!0,reflectBack:!0,converter:t.PropertyConverters.Number})],PacemUiWidgetElement.prototype,"row",void 0),V([t.Watch({emit:!0,reflectBack:!0,converter:t.PropertyConverters.Number})],PacemUiWidgetElement.prototype,"colspan",void 0),V([t.Watch({emit:!0,reflectBack:!0,converter:t.PropertyConverters.Number})],PacemUiWidgetElement.prototype,"rowspan",void 0),V([t.Watch({emit:!0,reflectBack:!0,converter:t.PropertyConverters.Boolean})],PacemUiWidgetElement.prototype,"borders",void 0),V([t.Watch({emit:!0,reflectBack:!0,converter:t.PropertyConverters.Boolean})],PacemUiWidgetElement.prototype,"corners",void 0);const L="widgetregister",F="widgetunregister";class WidgetRegisterEvent extends CustomEvent{constructor(e,r){super(L,t.Utils.extend(r||{},{detail:e}))}}class WidgetUnregisterEvent extends CustomEvent{constructor(e,r){super(F,t.Utils.extend(r||{},{detail:e}))}}class PacemCompositeWidgetElement extends PacemUiWidgetElement{get itemsElement(){return this}validate(e){return e instanceof PacemUiWidgetElement}viewActivatedCallback(){super.viewActivatedCallback(),t.Utils.addClass(this.itemsElement,t.PCSS+"-items-element")}appendItem(e){this.itemsElement.appendChild(e)}register(e){if(!this.validate(e))return this.log(t.Logging.LogLevel.Debug,`${e&&e.localName} element couldn't be registered in a ${this.localName} element.`),!1;let r=!1;const s=this.items=this.items||[];return t.Utils.isNullOrEmpty(s)?(this.items=[e],r=!0):-1===s.indexOf(e)&&(s.push(e),r=!0),r&&this.dispatchEvent(new WidgetRegisterEvent(e)),r}unregister(e){const r=this.items,s=!t.Utils.isNullOrEmpty(r)&&r.indexOf(e);if(s>=0){let e=r.splice(s,1);return this.dispatchEvent(new WidgetUnregisterEvent(e[0])),!0}return!1}}V([t.Watch()],PacemCompositeWidgetElement.prototype,"items",void 0);var q=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const G=v({display:{icon:"font_download",name:"Text",description:"Plain text widget."},props:[{prop:"text",type:o,display:{name:"Text"},extra:P}]});let J=class PacemWidgetTextElement extends PacemUiWidgetElement{constructor(){super(G)}};q([t.Watch({reflectBack:!0,converter:t.PropertyConverters.String})],J.prototype,"text",void 0),J=q([t.CustomElement({tagName:t.P+"-widget-text",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-text text="{{ :host.text }}"></${t.P}-text>`})],J);var z=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};let X=class PacemWidgetPickerElement extends PacemCompositeWidgetElement{register(e){const t=super.register(e);return t&&(e.hide=!0),t}};z([t.ViewChild(t.P+"-drag-drop")],X.prototype,"_dragDrop",void 0),X=z([t.CustomElement({tagName:t.P+"-widget-picker",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-repeater datasource="{{ :host.items }}">\n <template>\n <${t.P}-panel behaviors="{{ [::_dragDrop] }}" class="${t.PCSS}-widget-itempicker display-flex flex-fill flex-middle flex-nowrap">\n <i class="${t.PCSS}-icon flex-auto" dragger>drag_indicator</i>\n <${t.P}-icon icon="{{ ^item.metadata.display.icon }}" class="flex-auto ${t.PCSS}-margin margin-x-1"></${t.P}-icon>\n <${t.P}-text text="{{ ^item.metadata.display.name }}"></${t.P}-text>\n </${t.P}-panel>\n </template>\n</${t.P}-repeater>\n<${t.P}-drag-drop handle-selector="i.${t.PCSS}-icon[dragger]"></${t.P}-drag-drop>\n<${t.P}-content></${t.P}-content>`})],X);var Y=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};function K(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");return e.style.pointerEvents="none",e.style.zIndex="1000",e.setAttribute("height","100%"),e.setAttribute("width","100%"),e.setAttribute("preserveAspectRatio","none"),e.setAttribute("class","grid-cell-wrapper"),e.innerHTML='<rect class="grid-cell" width="100%" height="100%"></rect>',e}const Q={display:{icon:"grid_on",name:"Grid",description:"Composition Widget that lays out child-widgets in a grid container."},props:[{prop:"rows",type:"int",display:{name:"Rows",cssClass:["cols-lg-4"]},validators:[{type:"required",errorMessage:""},{type:"range",errorMessage:"",params:{min:1,max:24}}]},{prop:"rowGap",type:"int",display:{name:"Row gap",cssClass:["cols-lg-4"]},validators:[{type:"range",errorMessage:"",params:{min:0,max:3,step:.25}}]},{prop:"columnGap",type:"int",display:{name:"Column gap",cssClass:["cols-lg-4"]},validators:[{type:"range",errorMessage:"",params:{min:0,max:3,step:.25}}]}]};let Z=class PacemGridWidgetElement extends PacemCompositeWidgetElement{constructor(){super(v(Q),12,"grid"),this._widgetPropertyChange=e=>{if("row"===e.detail.propertyName||"rowspan"===e.detail.propertyName){const t=e.target;this.rows=Math.max(this.rows,t.row+t.rowspan)}},this._dragDropHandler=e=>{const r=e.detail,s=r.element;switch(e.type){case t.UI.DragDropEventType.Start:this._gridBoxes.forEach(e=>{e.style.pointerEvents="auto"}),this._initState={colspan:s.colspan,rowspan:s.rowspan,col:s.column,row:s.row};break;case t.UI.DragDropEventType.End:this._gridBoxes.forEach(e=>{e.style.pointerEvents="none"});break;case t.UI.DragDropEventType.Over:var a=r.target,o=+a.style.gridColumnStart-1,i=+a.style.gridRowStart-1;const e=o+this._initState.colspan,n=i+this._initState.rowspan;if(!this._intersects(s,o,i,s.colspan,s.rowspan)){let t=!1;e<=(this.columns||12)&&(t=s.column!==o,s.column=o),n<=(this.rows||1)&&(t=t||s.row!==i,s.row=i)}}},this._resizeHandler=e=>{switch(e.type){case t.UI.RescaleEventType.Start:t.Utils.addClass(e.detail.element,t.PCSS+"-rescaling"),this._gridBoxes.forEach(e=>{e.style.pointerEvents="auto"});break;case t.UI.RescaleEventType.End:this._gridBoxes.forEach(e=>{e.style.pointerEvents="none"}),t.Utils.removeClass(e.detail.element,t.PCSS+"-rescaling");break;case t.UI.RescaleEventType.Rescale:e.preventDefault();const a={x:e.clientX,y:e.clientY},o=e.detail.handle,i=document.elementsFromPoint(a.x,a.y).find(e=>this._dragDrop.dropTargets.indexOf(e)>=0);if(i){var r=+i.style.gridColumnStart,s=+i.style.gridRowStart;const t=e.detail.element,a=t.column+1,n=t.row+1,l=1+r-a,c=1+s-n;if(!this._intersects(t,t.column,t.row,l,c)){let e=!1;r>=a&&o.endsWith("right")&&(e=t.colspan!==l,t.colspan=l),s>=n&&o.startsWith("bottom")&&(e=e||t.rowspan!==c,t.rowspan=c)}}}},this._gridBoxes=[]}register(e){let r=super.register(e);if(r){const r=e.row||0,s=e.column||0,a=e.colspan||2,o=e.rowspan||1;let i=!this._intersects(e,s,r,a,o);if(i)e.row=r,e.column=s,e.colspan=a,e.rowspan=o;else{if(!i){let t=(t=!1)=>{let r=this.columns-1;t||(r=r-a+1);for(let t=0;t<this.rows;t++){for(let s=0;s<=r;s++)if(!this._intersects(e,s,t,a,o)){e.column=s,e.row=t,e.colspan=Math.min(r+1-s,a),e.rowspan=o,i=!0;break}if(i)break}};t(),!i&&a>1&&t(!0)}i||(this.rows++,e.row=this.rows-1,e.column=0)}e.behaviors=[this._dragDrop,this._rescaler],e.addEventListener(t.PropertyChangeEventName,this._widgetPropertyChange,!1)}return r}unregister(e){let r=super.unregister(e);if(r){e.removeEventListener(t.PropertyChangeEventName,this._widgetPropertyChange,!1);const r=e.behaviors.indexOf(this._dragDrop);r>=0&&e.behaviors.splice(r,1);const s=e.behaviors.indexOf(this._rescaler);s>=0&&e.behaviors.splice(s,1)}return r}_intersects(e,t,r,s,a){for(let o of this.items){let i=o;if(i!==e&&(i.column<t+s&&i.column+i.colspan>t&&i.row<r+a&&i.row+i.rowspan>r))return!0}return!1}connectedCallback(){super.connectedCallback(),t.Utils.addClass(this,t.PCSS+"-grid");let e=this._dragDrop=document.createElement(t.P+"-drag-drop"),r=document.createElement("div");document.body.appendChild(r),e.floater=r,e.mode=t.UI.DragDataMode.Alias,e.dropBehavior=t.UI.DropBehavior.None,e.addEventListener(t.UI.DragDropEventType.Start,this._dragDropHandler,!1),e.addEventListener(t.UI.DragDropEventType.Over,this._dragDropHandler,!1),e.addEventListener(t.UI.DragDropEventType.End,this._dragDropHandler,!1),document.body.appendChild(e);let s=this._rescaler=document.createElement(t.P+"-rescale");s.handles=[t.UI.RescaleHandle.Right,t.UI.RescaleHandle.Bottom],s.addEventListener(t.UI.RescaleEventType.Start,this._resizeHandler,!1),s.addEventListener(t.UI.RescaleEventType.Rescale,this._resizeHandler,!1),s.addEventListener(t.UI.RescaleEventType.End,this._resizeHandler,!1),document.body.appendChild(s),t.Utils.isNullOrEmpty(this.columns)&&(this.columns=12),t.Utils.isNullOrEmpty(this.rows)&&(this.rows=1)}viewActivatedCallback(){super.viewActivatedCallback(),this.adapt()}propertyChangedCallback(e,t,r,s){super.propertyChangedCallback(e,t,r,s),this.adapt()}disconnectedCallback(){var e=this._dragDrop,r=this._rescaler;t.Utils.isNull(e)||(e.floater.remove(),e.removeEventListener(t.UI.DragDropEventType.Start,this._dragDropHandler,!1),e.removeEventListener(t.UI.DragDropEventType.Over,this._dragDropHandler,!1),e.removeEventListener(t.UI.DragDropEventType.End,this._dragDropHandler,!1),e.remove(),this._dragDrop=null),t.Utils.isNull(r)||(r.removeEventListener(t.UI.RescaleEventType.Start,this._resizeHandler,!1),r.removeEventListener(t.UI.RescaleEventType.Rescale,this._resizeHandler,!1),r.removeEventListener(t.UI.RescaleEventType.End,this._resizeHandler,!1),r.remove(),this._rescaler=null),super.disconnectedCallback()}_normalize(e,t=1){return"string"==typeof e?e:(null==e&&(e=t),this.unitPixels(e)+"px")}unitPixels(e){return e*(this.unit||8)}adapt(){this.style.marginTop=this.unitPixels(this.marginTop||0)+"px",this.style.marginBottom=this.unitPixels(this.marginBottom||0)+"px",this.style.gridTemplateColumns=`repeat(${this.columns||12}, 1fr)`;let e=this._normalize(this.minRowheight,3),t=this._normalize(this.rowheight||"auto");this.style.gridTemplateRows=`repeat(${this.rows||1}, minmax(${e}, ${t}))`,this.style.gridRowGap=this._normalize(this.rowGap,1),this.style.gridColumnGap=this._normalize(this.columnGap,1),this._setGridLines()}_setGridLines(){var e=0;const r=this.editing;if(r){const t=this.columns||12,r=t*(this.rows||1);e=r;for(let e=0;e<r;e++){for(;this._gridBoxes.length<=e;){let e=K();this.appendChild(e),this._gridBoxes.push(e)}let r=this._gridBoxes[e];const s=e%t,a=Math.floor(e/t);r.style.gridColumn=(s+1).toString(),r.style.gridRow=(a+1).toString()}}for(let t of this._gridBoxes.splice(e))t.remove();t.Utils.isNull(this._dragDrop)||t.Utils.isNull(this._rescaler)||(this._dragDrop.disabled=this._rescaler.disabled=!r,this._dragDrop.dropTargets=this._gridBoxes)}};Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Number})],Z.prototype,"unit",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Number})],Z.prototype,"marginTop",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Number})],Z.prototype,"marginBottom",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Number})],Z.prototype,"columns",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Number})],Z.prototype,"rows",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.String})],Z.prototype,"minRowheight",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.String})],Z.prototype,"rowheight",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Number})],Z.prototype,"rowGap",void 0),Y([t.Watch({emit:!1,reflectBack:!0,converter:t.PropertyConverters.Number})],Z.prototype,"columnGap",void 0),Y([t.Debounce(100)],Z.prototype,"adapt",null),Z=Y([t.CustomElement({tagName:t.P+"-widget-grid"})],Z);var ee=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const te=(e,r=":host",s=":host.entity")=>{const o={},i=e.metadata,n=a,l=[];o.properties=`{{ Pacem.CustomElementUtils.getWatchedProperty(${s}, '${i.prop}').config.converter }}`;const c=t.P+"-datacolumns";let p=i.extra||{};if(!t.Utils.isNullOrEmpty(p.properties))switch(typeof p.properties){case"string":o.properties=`{{ ${s}.${p.properties} }}`;break;case"function":const e="fn"+t.Utils.uniqueCode();n[e]=p.properties,o.properties=`{{ Pacem.Components.Cms.Functions.${e}(${r}), once }}`,l.push(e)}return l.length>0&&(o["on-unload"]=`{{ Pacem.Components.Cms.Functions.dismiss('${l.join("','")}') }}`),{tagName:c,attrs:o}},re={display:{name:"Columns"},props:[{prop:"header",type:"string",display:{cssClass:["form-minimal"],name:"Header"}},{prop:"content",type:o,display:{name:"Content"},extra:P}]};let se=class PacemDataColumnElement extends t.Components.PacemElement{propertyChangedCallback(e,t,r,s){switch(super.propertyChangedCallback(e,t,r,s),e){case"content":this.contentExpression=r;break;case"contentExpression":this.setAttribute("content",r||"")}}viewActivatedCallback(){super.viewActivatedCallback(),this._form.entity=this,this._form.metadata=f(re)}};ee([t.Watch({converter:t.PropertyConverters.String})],se.prototype,"header",void 0),ee([t.Watch({converter:t.PropertyConverters.String})],se.prototype,"content",void 0),ee([t.Watch({converter:t.PropertyConverters.String})],se.prototype,"contentExpression",void 0),ee([t.ViewChild(t.P+"-form")],se.prototype,"_form",void 0),se=ee([t.CustomElement({tagName:t.P+"-widget-datacolumn",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<${t.P}-form class="panel-body" autogenerate="true"></${t.P}-form>`})],se);let ae=class PacemDataColumnsElement extends r.Components.Scaffolding.PacemBaseElement{constructor(){super(...arguments),this._dropHandler=e=>{this.changeHandler(e)},this._columnifyMetadata=(e=this.properties)=>(e||[]).map(e=>({header:"function"==typeof e.display?.name?e.prop:e.display?.name||e.prop,content:`{{ ^item.${e.prop} }}`})).sort((e,t)=>e.header>t.header?1:-1)}get inputFields(){return[]}toggleReadonlyView(e){}onChange(e){return t.Utils.fromResult(this.value=this._repeater.datasource)}acceptValue(e){t.Utils.isNull(this._repeater)||(this._repeater.datasource=t.Utils.clone(e||[]))}getViewValue(e){return"[DataColumns]"}convertValueAttributeToProperty(e){return t.PropertyConverters.Json.convert(e,this)}viewActivatedCallback(){super.viewActivatedCallback(),this._propDragger.addEventListener(t.UI.DragDropEventType.End,this._dropHandler,!1),this._colDragger.addEventListener(t.UI.DragDropEventType.End,this._dropHandler,!1)}disconnectedCallback(){t.Utils.isNull(this._propDragger)||this._propDragger.removeEventListener(t.UI.DragDropEventType.End,this._dropHandler,!1),t.Utils.isNull(this._colDragger)||this._colDragger.removeEventListener(t.UI.DragDropEventType.End,this._dropHandler,!1),super.disconnectedCallback()}};ee([t.ViewChild(`${t.P}-repeater[columns]`)],ae.prototype,"_repeater",void 0),ee([t.ViewChild(`${t.P}-drag-drop[properties]`)],ae.prototype,"_propDragger",void 0),ee([t.ViewChild(`${t.P}-drag-drop[columns]`)],ae.prototype,"_colDragger",void 0),ee([t.ViewChild("div[drop-target]")],ae.prototype,"_dropTarget",void 0),ee([t.Watch({converter:t.PropertyConverters.Json})],ae.prototype,"properties",void 0),ae=ee([t.CustomElement({tagName:t.P+"-widget-datacolumns",shadow:t.Defaults.USE_SHADOW_ROOT,template:`<div class="${t.PCSS}-datacolumns">\n <div class="datacolumns-main display-flex flex-fill">\n\n <${t.P}-drag-drop mode="${t.UI.DragDataMode.Alias}" disabled="{{ :host.readonly }}" handle-selector="*[handle]"\n drop-behavior="${t.UI.DropBehavior.InsertChild}" drop-targets="{{ [::_dropTarget] }}" columns></${t.P}-drag-drop>\n <${t.P}-repeater class="display-flex flex-fill" columns>\n \x3c!-- columns --\x3e\n <div class="display-flex flex-nowrap" drop-target>\n <template>\n <${t.P}-panel behaviors="{{ [::_colDragger] }}">\n <div class="${t.PCSS}-panel panel-side-left side-auto">\n <div class="panel-side">\n <${t.P}-button class="display-block button-flat icon-glyph-small" icon-glyph="drag_indicator" handle></${t.P}-button>\n <${t.P}-button class="display-block button-flat icon-glyph-small" on-click=":host.value.splice(^index, 1)" icon-glyph="clear"></${t.P}-button>\n </div>\n <div class="panel-heading">\n <${t.P}-text text="{{ ^item.header }}"></${t.P}-text>\n </div>\n <${t.P}-widget-datacolumn class="panel-body" header="{{ ^item.header, twoway }}" content-expression="{{ ^item.content, twoway }}"></${t.P}-widget-datacolumn>\n </div>\n </${t.P}-panel>\n </template>\n </div>\n </${t.P}-repeater>\n\n </div>\n <${t.P}-panel class="datacolumns-props" hide="{{ :host.readonly }}">\n <${t.P}-drag-drop mode="${t.UI.DragDataMode.Copy}" disabled="{{ :host.readonly }}" handle-selector="*[handle]"\n drop-behavior="${t.UI.DropBehavior.InsertChild}" drop-targets="{{ [::_dropTarget] }}" properties></${t.P}-drag-drop>\n <${t.P}-repeater datasource="{{ :host._columnifyMetadata(:host.properties) }}">\n \x3c!-- properties --\x3e\n <template>\n <${t.P}-panel behaviors="{{ [::_propDragger] }}" class="${t.PCSS}-panel panel-side-left side-auto panel-primary panel-filled ${t.PCSS}-margin margin-bottom-1">\n <div class="panel-side">\n <${t.P}-button class="display-block button-flat icon-glyph-small" icon-glyph="drag_indicator" handle></${t.P}-button>\n </div>\n <div class="text-truncate panel-body">\n <${t.P}-span text="{{ ^item.header }}"></${t.P}-span>\n </div>\n </${t.P}-panel>\n </template>\n </${t.P}-repeater>\n </${t.P}-panel>\n</div>`})],ae);var oe=function(e,t,r,s){var a,o=arguments.length,i=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};const ie={display:{name:"DataColumn"},props:[{prop:"header",type:"string",display:{name:"Header"}},{prop:"content",type:o,display:{name:"Content"},extra:P}]},ne=v({display:{icon:"table_chart",name:"DataGrid",description:"DataGrid widget."},props:[{prop:"datasource",type:o,display:{name:"Datasource"},extra:t.Utils.extend({},P,{filter:e=>e instanceof _||e instanceof k})},{prop:"columns",type:te,display:{name:"Columns"},extra:{properties:"datarowMetadata"},props:f(ie)}]});function le(e,r=[]){const{head:s,body:a}=function(e=[]){const r=document.createDocumentFragment(),s=document.createDocumentFragment();let a=1;for(let o of e){const e=document.createElement("div");e.classList.add(t.PCSS+"-headcell"),e.textContent=o.header,r.appendChild(e);const i=new t.Components.PacemSpanElement;i.classList.add(t.PCSS+"-datacell","datacell-corners"),i.style.gridColumn=a.toString(),i.setAttribute("css","{{ {'grid-row': ^index+2} }}"),i.setAttribute("content",o.content),s.appendChild(i),a++}const o=new t.Components.PacemPanelElement;return o.classList.add(t.PCSS+"-datarow"),o.setAttribute("css","{{ {'grid-row': ^index+2} }}"),o.setAttribute("css-class","{{ {'datarow-alt': ^index % 2 === 1} }}"),o.style.gridColumn="1/"+(e.length+1),s.appendChild(o),{head:r,body:s}}(r),o=document.createElement("div");o.appendChild(s);const i=document.createElement("div");return i.appendChild(a),`<${t.P}-repeater datasource="{{ #${e}.datasource }}">\n <div class="${t.PCSS}-datatable" style="grid-template-columns: ${function(e=[]){var t="";for(let r of e||[]){const e=r.width||1;t+="number"==typeof e?e+"fr ":"auto "}return t}(r)}">\n ${o.innerHTML}\n <template>${i.innerHTML}</template>\n</div></${t.P}-repeater>`}let ce=class PacemWidgetDataGridElement extends PacemUiWidgetElement{constructor(){super(ne),this.columns=[],this.datasource=[],this.datarowMetadata=[],this._builtUponDatasource=!1}_gridify(e=this.columns){var t="";for(let r of e||[]){const e=r.width||1;t+="number"==typeof e?e+"fr ":"auto "}return t}propertyChangedCallback(e,t,r,s){if(super.propertyChangedCallback(e,t,r,s),!s)switch(e){case"columns":this.innerHTML=le(this.id,r);break;case"datasource":this._extractMetadataJustInCase(r)}}viewActivatedCallback(){super.viewActivatedCallback(),this.innerHTML=le(this.id,this.columns)}_seekArray(e){if(t.Utils.isArray(e))return e;if("object"==typeof e)for(let r in e){const s=this._seekArray(e[r]);if(!t.Utils.isNull(s))return s}return null}_extractMetadataJustInCase(e=this.datasource){if((t.Utils.isNullOrEmpty(this.datarowMetadata)||this._builtUponDatasource)&&!t.Utils.isNullOrEmpty(e)){const r=this._seekArray(e);if(!t.Utils.isNullOrEmpty(r)){const e=[],t=r[0];for(let r in t)e.push({prop:r,type:typeof t[r]});this.datarowMetadata=e,this._builtUponDatasource=!0}}}};oe([t.Watch({reflectBack:!0,converter:t.PropertyConverters.Json})],ce.prototype,"columns",void 0),oe([t.Watch({converter:t.PropertyConverters.Json})],ce.prototype,"datasource",void 0),oe([t.Watch({converter:t.PropertyConverters.Json})],ce.prototype,"datarowMetadata",void 0),oe([t.ViewChild(`.${t.PCSS}-datatable`)],ce.prototype,"_datatable",void 0),oe([t.ViewChild("template")],ce.prototype,"_template",void 0),oe([t.ViewChild(t.P+"-repeater")],ce.prototype,"_repeater",void 0),ce=oe([t.CustomElement({tagName:t.P+"-widget-datagrid"})],ce);var pe=Object.freeze({__proto__:null,ACCESS_TOKEN_METADATA:D,DATACOLUMNS_METADATA_TYPE:te,DEFAULT_METADATA:u,EXPRESSION_METADATA_TYPE:o,EXPRESSION_WIDGET_METADATA_EXTRA:P,get ExpressionSource(){return l},FETCH_CREDENTIALS_METADATA:{prop:"fetchCredentials",type:"string",dataType:"enumeration",display:{name:"Fetch Credentials"},extra:{enum:["same-origin","omit","include"]}},Functions:a,GRID_COLUMNS:12,LayoutChangeEventName:"layoutchange",PacemBearerWidgetElement:PacemBearerWidgetElement,PacemCompositeWidgetElement:PacemCompositeWidgetElement,get PacemDataColumnElement(){return se},get PacemDataColumnsElement(){return ae},get PacemElementPickerElement(){return n},PacemElementPickerElementBase:PacemElementPickerElementBase,get PacemExpressionElement(){return p},get PacemGridWidgetElement(){return Z},PacemUiWidgetElement:PacemUiWidgetElement,get PacemWidgetApiManifestElement(){return H},get PacemWidgetClockElement(){return N},get PacemWidgetDataElement(){return _},get PacemWidgetDataGridElement(){return ce},PacemWidgetElement:PacemWidgetElement,get PacemWidgetFetchElement(){return k},get PacemWidgetFetchParameterElement(){return U},get PacemWidgetPickerElement(){return X},get PacemWidgetTextElement(){return J},get PacemWidgetToolbarElement(){return C},get PacemWidgetTranslatorElement(){return O},Widget:class Widget{static findAll(e){return t.CustomElementUtils.findAll("."+y,r=>r instanceof PacemWidgetElement&&!t.Utils.isNullOrEmpty(r.id)&&(t.Utils.isNull(e)||e(r)))}},WidgetRegisterEvent:WidgetRegisterEvent,WidgetRegisterEventName:L,WidgetUnregisterEvent:WidgetUnregisterEvent,WidgetUnregisterEventName:F,buildWidgetMetadata:v,gridifyMetadata:f});const de="permissionedit";class PermissionEditEvent extends CustomEvent{constructor(e){super(de,{detail:e,cancelable:!1,bubbles:!0})}}var me=Object.freeze({__proto__:null,DATACOLUMNS_METADATA_TYPE:te,OpenApi:M,get PacemDataColumnElement(){return se},get PacemDataColumnsElement(){return ae},Permissible:class Permissible{static canEdit(e,t){return this._canDoSomethingToResource(e,t,e=>e.update)}static canRead(e,t){return this._canDoSomethingToResource(e,t,e=>e.read)}static canAdd(e,t){return this._canDoSomethingToResource(e,t,e=>e.create)}static canDelete(e,t){return this._canDoSomethingToResource(e,t,e=>e.delete)}static canTranslate(e,t){return this._canDoSomethingToResource(e,t,e=>e.translate)}static _canDoSomethingToResource(e,r,s){if(t.Utils.isNullOrEmpty(e)||t.Utils.isNull(r))return!1;var a=!0;if(r.permissions&&r.permissions.length>0){a=!1;for(let t of r.permissions)if(s(t)&&e[t.claimType]&&e[t.claimType].indexOf(t.claimValue)>=0)return!0}return a}},PermissionEditEvent:PermissionEditEvent,PermissionEditEventName:de}),he=Object.freeze({__proto__:null,Cms:me,Components:pe});e.DeepMerger.merge(he)}(Pacem,Pacem,Pacem,Pacem);
7
- //# sourceMappingURL=pacem-cms.min.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-cms v1.0.0-bernoulli (https://js.pacem.it)
2
+ * @pacem/pacem-cms v1.0.0-binet (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-cms v1.0.0-bernoulli (https://js.pacem.it)
2
+ * @pacem/pacem-cms v1.0.0-binet (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -774,6 +774,7 @@ var PacemWidgetFetchElement = class PacemWidgetFetchElement2 extends PacemBearer
774
774
  get _parameters() {
775
775
  return Array.from(this._itemsElement.children).filter((e) => e.localName === PARAMETER_TAGNAME);
776
776
  }
777
+ /** Triggers the request against `endpoint`/`url`, provided all of the endpoint's required parameters are attached and populated; otherwise does nothing. */
777
778
  fetch() {
778
779
  const fetcher = this._fetcher, parameters = this._parameters || [], endpoint = this.endpoint;
779
780
  if (!Utils5.isNull(endpoint)) {
@@ -1020,6 +1021,12 @@ var SwaggerCmsParser = class {
1020
1021
  this._openApi = _openApi;
1021
1022
  this._cachedMetadataUrls = [];
1022
1023
  }
1024
+ /**
1025
+ * Loads the OpenApi manifest at `url` and enriches every endpoint's request/response schemas with their
1026
+ * fetched field metadata (see `_enrichSchemas`).
1027
+ * @param url The OpenApi (swagger) json configuration's url.
1028
+ * @param headers Optional HTTP headers for both the manifest and the per-schema metadata fetches.
1029
+ */
1023
1030
  async load(url, headers) {
1024
1031
  let api = await this._openApi.load(url, headers);
1025
1032
  if (api != null) {
@@ -1043,6 +1050,7 @@ var SwaggerCmsParser = class {
1043
1050
  }
1044
1051
  }
1045
1052
  }
1053
+ /** Removes from `cache` every metadata entry fetched by this parser so far. */
1046
1054
  clearCache() {
1047
1055
  const cache = this.cache, keys = this._cachedMetadataUrls;
1048
1056
  if (cache) {
@@ -1314,9 +1322,11 @@ var WidgetUnregisterEvent = class extends CustomEvent {
1314
1322
  }
1315
1323
  };
1316
1324
  var PacemCompositeWidgetElement = class extends PacemUiWidgetElement {
1325
+ /** Gets the `Element` new items are appended to; defaults to this widget itself. */
1317
1326
  get itemsElement() {
1318
1327
  return this;
1319
1328
  }
1329
+ /** Gets whether `item` is an acceptable child of this container; overridable by subclasses to narrow the accepted item type. */
1320
1330
  validate(item) {
1321
1331
  return item instanceof PacemUiWidgetElement;
1322
1332
  }
@@ -2236,21 +2246,27 @@ var PermissionEditEvent = class extends CustomEvent {
2236
2246
  }
2237
2247
  };
2238
2248
  var Permissible = class {
2249
+ /** Gets whether `claims` grants edit (update) permission on `resource`. */
2239
2250
  static canEdit(claims, resource) {
2240
2251
  return this._canDoSomethingToResource(claims, resource, (p) => p.update);
2241
2252
  }
2253
+ /** Gets whether `claims` grants read permission on `resource`. */
2242
2254
  static canRead(claims, resource) {
2243
2255
  return this._canDoSomethingToResource(claims, resource, (p) => p.read);
2244
2256
  }
2257
+ /** Gets whether `claims` grants add (create) permission on `resource`. */
2245
2258
  static canAdd(claims, resource) {
2246
2259
  return this._canDoSomethingToResource(claims, resource, (p) => p.create);
2247
2260
  }
2261
+ /** Gets whether `claims` grants delete permission on `resource`. */
2248
2262
  static canDelete(claims, resource) {
2249
2263
  return this._canDoSomethingToResource(claims, resource, (p) => p.delete);
2250
2264
  }
2265
+ /** Gets whether `claims` grants translate permission on `resource`. */
2251
2266
  static canTranslate(claims, resource) {
2252
2267
  return this._canDoSomethingToResource(claims, resource, (p) => p.translate);
2253
2268
  }
2269
+ /** Returns whether `claims` satisfies `predicate` for at least one of `resource.permissions`; when `resource.permissions` is empty, access is unrestricted (returns `true`). */
2254
2270
  static _canDoSomethingToResource(claims, resource, predicate) {
2255
2271
  if (Utils12.isNullOrEmpty(claims) || Utils12.isNull(resource)) {
2256
2272
  return false;