@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.
- package/dist/browser/pacem-cms.js +118 -3
- package/dist/browser/pacem-cms.js.map +1 -1
- package/dist/browser/pacem-cms.min.js +1 -2
- package/dist/bundle/pacem-cms.min.mjs +1 -1
- package/dist/bundle/pacem-cms.mjs +17 -1
- package/dist/bundle/pacem-cms.mjs.map +2 -2
- package/dist/docs/pacem-cms.json +9325 -0
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index.cms.js +1 -1
- package/dist/esm/index.components.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/types.js +9 -1
- package/package.json +2 -1
- package/typings/index.d.ts +178 -2
- package/dist/browser/pacem-cms.min.js.map +0 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-cms v1.0.0-
|
|
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="${t.PCSS}-icon">'+ (::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-
|
|
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;
|