@pacem/pacem-cms 1.0.0-abel → 1.0.0-amaldi

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,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../esm/index.components.js", "../esm/scaffolding/types.js", "../esm/scaffolding/element-picker.js", "../esm/scaffolding/expression.js", "../esm/widgets/types.js", "../esm/widgets/helpers/types.js", "../esm/widgets/helpers/data.js", "../esm/widgets/helpers/fetcher.js", "../esm/widgets/helpers/translator.js", "../esm/widgets/helpers/clock.js", "../esm/widgets/helpers/apimanifest.js", "../esm/openapi/swagger-cms.js", "../esm/widgets/ui/types.js", "../esm/widgets/ui/text.js", "../esm/widgets/ui/composite/picker.js", "../esm/widgets/ui/composite/grid.js", "../esm/widgets/ui/dataviz/datagrid.js", "../esm/widgets/scaffolding/datacolumns.js", "../esm/index.cms.js", "../esm/types.js"],
4
- "sourcesContent": ["export * from './scaffolding/types';\nexport * from './scaffolding/element-picker';\nexport * from './scaffolding/expression';\nexport * from './widgets/types';\nexport * from './widgets/helpers/types';\nexport * from './widgets/helpers/translator';\nexport * from './widgets/helpers/data';\nexport * from './widgets/helpers/clock';\nexport * from './widgets/helpers/apimanifest';\nexport * from './widgets/helpers/fetcher';\nexport * from './widgets/ui/types';\nexport * from './widgets/ui/text';\nexport * from './widgets/ui/composite/picker';\nexport * from './widgets/ui/composite/grid';\nexport * from './widgets/ui/dataviz/datagrid';\nexport * from './widgets/scaffolding/datacolumns';\n", "import { PropertyChangeEventName, Utils, CustomElementUtils, P } from '@pacem/pacem-core';\n//namespace Pacem.Components.Cms {\n/** Function container proxy (used in metadata) */\nexport const Functions = {\n 'dismiss': (...args) => {\n for (let name of args || []) {\n delete Functions[name];\n }\n },\n 'handleExpressionValueChange': (evt, prop, entity) => {\n if (evt.detail.propertyName === 'value' && !Utils.isNull(entity)) {\n const value = evt.detail.currentValue;\n if (entity instanceof HTMLElement) {\n // handle the entity as an element and modify the attribute\n let attr = CustomElementUtils.camelToKebab(prop);\n if (Utils.isNullOrEmpty(value)) {\n entity.removeAttribute(attr);\n }\n else {\n entity.setAttribute(attr, value.toString());\n }\n }\n else {\n entity[prop] = value;\n }\n }\n }\n};\n/** Default metadata ('expression' field) 'type' factory. */\nexport const EXPRESSION_METADATA_TYPE = (host, hostRef = ':host', hostEntityRef = ':host.entity') => {\n const attrs = {}, meta = host.metadata, fns = Functions, fnKeys = [];\n attrs['value'] = `{{ ${hostEntityRef} instanceof HTMLElement && ${hostEntityRef}.getAttribute('${CustomElementUtils.camelToKebab(meta.prop)}') }}`;\n attrs['on-' + PropertyChangeEventName] = `Pacem.Components.Cms.Functions.handleExpressionValueChange($event, '${meta.prop}', ${hostEntityRef})`;\n attrs['converter'] = `{{ Pacem.CustomElementUtils.getWatchedProperty(${hostEntityRef}, '${meta.prop}').config.converter }}`;\n const tagName = P + '-expression';\n let extra = (meta.extra || {});\n // selector\n if (!Utils.isNullOrEmpty(extra.selector)) {\n attrs['selector'] = extra.selector;\n }\n // filters to the selector\n if (!Utils.isNullOrEmpty(extra.filter)) {\n switch (typeof extra.filter) {\n case 'string':\n attrs['filter'] = `{{ (e) => e.constructor.name === \"${extra.filter}\" || e.localName === \"${extra.filter.toLowerCase()}\" }}`;\n break;\n case 'function':\n const fnKey = 'fn' + Utils.uniqueCode();\n fns[fnKey] = extra.filter;\n attrs['filter'] = `{{ Pacem.Components.Cms.Functions.${fnKey}, once }}`;\n // tidy-up memento\n fnKeys.push(fnKey);\n break;\n }\n }\n // labeler\n if (typeof extra.labeler === 'function') {\n const fnKey = 'fn' + Utils.uniqueCode();\n fns[fnKey] = extra.labeler;\n attrs['labeler'] = `{{ Pacem.Components.Cms.Functions.${fnKey}, once }}`;\n // tidy-up memento\n fnKeys.push(fnKey);\n }\n if (fnKeys.length > 0) {\n // tidy-up\n attrs['on-unload'] = `{{ Pacem.Components.Cms.Functions.dismiss('${fnKeys.join('\\',\\'')}') }}`;\n }\n return { tagName: tagName, attrs: attrs };\n};\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Defaults, Watch, PropertyConverters, ViewChild, Debounce, Utils } from '@pacem/pacem-core';\nimport { Components as ScaffoldingComponents } from '@pacem/pacem-scaffolding';\n//namespace Pacem.Components.Cms {\nexport class PacemElementPickerElementBase extends ScaffoldingComponents.Scaffolding.PacemBaseElement {\n}\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemElementPickerElementBase.prototype, \"selector\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Eval })\n], PacemElementPickerElementBase.prototype, \"filter\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Eval })\n], PacemElementPickerElementBase.prototype, \"labeler\", void 0);\nlet PacemElementPickerElement = class PacemElementPickerElement extends PacemElementPickerElementBase {\n get inputFields() {\n return [this._select];\n }\n toggleReadonlyView(readonly) {\n this._select.readonly = readonly;\n }\n onChange(_) {\n return Utils.fromResult(this.value = this._select.value);\n }\n acceptValue(val) {\n this._select.value = val;\n }\n getViewValue(value) {\n return this._select.viewValue;\n }\n convertValueAttributeToProperty(attr) {\n return PropertyConverters.Element.convert(attr);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._databind();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'selector':\n case 'filter':\n case 'labeler':\n this._databind();\n break;\n }\n }\n }\n _databind() {\n const project = this.labeler || (e => {\n let label = e.constructor.name;\n if (e.id) {\n label += '#' + e.id;\n }\n return label;\n });\n const retval = [];\n document.querySelectorAll(this.selector || '[pacem]').forEach((e, i, arr) => {\n if ((Utils.isNull(this.filter) || this.filter(e) === true)\n // let' say 'id' is a must-have...\n && !Utils.isNullOrEmpty(e.id)) {\n retval.push({ element: e, label: project(e) });\n }\n });\n this._select.valueProperty = 'element';\n this._select.textProperty = 'label';\n this._select.datasource = retval;\n }\n};\n__decorate([\n ViewChild(P + '-select')\n], PacemElementPickerElement.prototype, \"_select\", void 0);\n__decorate([\n Debounce(50)\n], PacemElementPickerElement.prototype, \"_databind\", null);\nPacemElementPickerElement = __decorate([\n CustomElement({\n tagName: P + '-element-picker', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-select></${P}-select>`\n })\n], PacemElementPickerElement);\nexport { PacemElementPickerElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, Watch, PropertyConverters, ViewChild, Debounce, Utils, CustomElementUtils, RepeaterItem } from '@pacem/pacem-core';\nimport { Components as ScaffoldingComponents } from '@pacem/pacem-scaffolding';\nimport { PacemElementPickerElementBase } from './element-picker';\n//namespace Pacem.Components.Cms {\nexport var ExpressionSource;\n(function (ExpressionSource) {\n ExpressionSource[\"Constant\"] = \"const\";\n ExpressionSource[\"PropertyReference\"] = \"property\";\n ExpressionSource[\"Expression\"] = \"expr\";\n})(ExpressionSource || (ExpressionSource = {}));\nlet PacemExpressionElement = class PacemExpressionElement extends PacemElementPickerElementBase {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'converter') {\n this._setFeedbackText(this.value);\n }\n else if (!first) {\n if (this._editing) {\n switch (name) {\n case '_source':\n switch (val) {\n case ExpressionSource.PropertyReference:\n this._picker.focus();\n break;\n default:\n this._editor.focus();\n break;\n }\n break;\n case '_propRef':\n if (!Utils.isNullOrEmpty(val)) {\n this._editor.focus();\n this._editor.value = '{{ #' + this._sourceRef.id + '.' + val + ' }}';\n }\n this.changeHandler(new Event('change'));\n break;\n }\n }\n }\n }\n get inputFields() {\n return [this._editor];\n }\n toggleReadonlyView(readonly) {\n if (readonly) {\n // ensure not editing\n this._editing = false;\n }\n }\n setPristine() {\n super.setPristine();\n this._editing = false;\n }\n onChange(_) {\n return Utils.fromResult(this.value = this._editor.value);\n }\n acceptValue(val) {\n this._view.textContent = val || '...';\n this._setFeedbackText(val);\n this._reverseStructure();\n if (val !== this._editor.value) {\n this._editor.value = val;\n }\n }\n _setFeedbackText(val = this.value) {\n const converter = this.converter;\n if (CustomElementUtils.isBindingAttribute(val) || typeof (converter && converter.convert) !== 'function') {\n this._eval.setAttribute('text', val);\n }\n else if (val === undefined) {\n this._eval.text = '<undefined>';\n }\n else {\n this._eval.text = converter.convert(val);\n }\n }\n getViewValue(value) {\n return value;\n }\n convertValueAttributeToProperty(attr) {\n return attr;\n }\n _reverseStructure() {\n let cleanup = () => {\n this._source = this._sourceRef = this._propRef = /*this.value =*/ undefined;\n };\n // dependencies?\n let expr = this.value;\n if (!Utils.isNullOrEmpty(expr)) {\n // setup the most likely form fields\n if (CustomElementUtils.isBindingAttribute(expr)) {\n const expression = CustomElementUtils.parseBindingAttribute(expr, this), deps = expression.dependencies;\n // complex or simple (one dependency) expression\n if (Utils.isNullOrEmpty(deps) || deps.length > 1 || RepeaterItem.isRepeaterItem(deps[0].element)) {\n this._source = ExpressionSource.Expression;\n }\n else {\n const dep = deps[0];\n this._source = ExpressionSource.PropertyReference;\n this._sourceRef = document.querySelector('#' + dep.element.id);\n this._propRef = dep.path;\n }\n }\n else {\n this._source = ExpressionSource.Constant;\n }\n //\n }\n else {\n cleanup();\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], PacemExpressionElement.prototype, \"converter\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemExpressionElement.prototype, \"_editing\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemExpressionElement.prototype, \"_source\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemExpressionElement.prototype, \"_sourceRef\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemExpressionElement.prototype, \"_propRef\", void 0);\n__decorate([\n ViewChild(P + '-element-picker')\n], PacemExpressionElement.prototype, \"_picker\", void 0);\n__decorate([\n ViewChild(P + '-textarea')\n], PacemExpressionElement.prototype, \"_editor\", void 0);\n__decorate([\n ViewChild('span.' + PCSS + '-viewfinder')\n], PacemExpressionElement.prototype, \"_view\", void 0);\n__decorate([\n ViewChild(P + '-text')\n], PacemExpressionElement.prototype, \"_eval\", void 0);\n__decorate([\n Debounce(50)\n], PacemExpressionElement.prototype, \"_reverseStructure\", null);\nPacemExpressionElement = __decorate([\n CustomElement({\n tagName: P + '-expression', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-collapse class=\"${PCSS}-expression\" collapse=\"{{ !:host._editing }}\">\n <div class=\"expression-builder ${PCSS}-grid grid-tiny-rowgap grid-tiny-colgap ${PCSS}-pad pad-bottom-2\">\n <div class=\"${PCSS}-cell\">\n <${P}-select value=\"{{ :host._source, twoway }}\" class=\"display-block\">\n <${P}-data-item value=\"${ExpressionSource.Constant}\" label=\"constant value\"></${P}-data-item>\n <${P}-data-item value=\"${ExpressionSource.PropertyReference}\" label=\"property reference\"></${P}-data-item>\n <${P}-data-item value=\"${ExpressionSource.Expression}\" label=\"complex expression\"></${P}-data-item>\n </${P}-select>\n </div>\n\n <${P}-panel class=\"${PCSS}-cell cols-hd-6\" hide=\"{{ :host._source !== '${ExpressionSource.PropertyReference}' }}\">\n <${P}-element-picker value=\"{{ :host._sourceRef, twoway }}\" selector=\"{{ :host.selector }}\" filter=\"{{ :host.filter }}\" labeler=\"{{ :host.labeler }}\" class=\"display-block\"></${P}-element-picker>\n </${P}-panel>\n <${P}-panel class=\"${PCSS}-cell cols-hd-6\" hide=\"{{ :host._source !== '${ExpressionSource.PropertyReference}' }}\">\n <${P}-property-picker value=\"{{ :host._propRef, twoway }}\" disabled=\"{{ !:host._sourceRef }}\" target=\"{{ :host._sourceRef }}\" on-change=\"::_editor.focus()\" class=\"display-block\"></${P}-property-picker>\n </${P}-panel>\n\n <${P}-panel class=\"${PCSS}-cell\">\n <${P}-textarea class=\"display-block\" placeholder=\"{{ '{{ '+ (:host._source || '') +'... }}' }}\" change-policy=\"${ScaffoldingComponents.Scaffolding.ChangePolicy.Blur}\"></${P}-textarea>\n </${P}-panel>\n </div>\n</${P}-collapse>\n<div class=\"${PCSS}-fieldset\">\n <div class=\"fieldset-left\">\n <div class=\"${PCSS}-fieldgroup ${PCSS}-viewfinder\">\n <div class=\"text-truncate ${PCSS}-pad pad-x-1\"><span class=\"${PCSS}-viewfinder text-tech\">{{ :host.value || '...' }}</span></div>\n <${P}-panel class=\"fieldgroup-prepend\">\n <${P}-button class=\"flat edit ${PCSS}-pad pad-left-1\" on-click=\":host._editing = !:host._editing\" hide=\"{{ :host.readonly }}\"></${P}-button>\n </${P}-panel>\n <${P}-panel class=\"fieldgroup-append text-tech display-flex flex-middle flex-nowrap\" hide=\"{{ $pacem.isNullOrEmpty(:host.value) }}\">\n <i class=\"${PCSS}-icon text-primary\">keyboard_arrow_right</i>\n <${P}-text text=\"?\" class=\"bg-primary ${PCSS}-pad pad-left-1 pad-right-1 ${PCSS}-margin margin-right-1 text-truncate\" eval></${P}-text>\n </${P}-panel>\n </div>\n </div>\n</div>`\n })\n], PacemExpressionElement);\nexport { PacemExpressionElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, Watch, PropertyConverters, ViewChild, Utils, CustomElementUtils, Components } from '@pacem/pacem-core';\nimport { Components as UIComponents } from '@pacem/pacem-ui';\nconst UI = UIComponents.UI;\n//namespace Pacem.Components.Cms {\nconst DEFAULT_PERMISSION_METADATA = {\n props: [\n {\n prop: 'permissions',\n // child form-fields\n type: 'array',\n display: { name: 'Permissions' },\n props: {\n display: { cssClass: [PCSS + '-cell', PCSS + '-grid', 'grid-novgap', 'grid-tiny-colgap', 'grid-nospace'], name: 'Permission' },\n props: Array.prototype.concat.apply([\n {\n prop: 'claimType', type: 'string',\n display: { cssClass: [PCSS + '-cell', 'cols-hd-4', 'cols-lg-6', 'field-stretch', 'field-minimal'], name: 'Claim type' },\n validators: [{ type: 'required', errorMessage: '!' }]\n },\n {\n prop: 'claimValue', type: 'string',\n display: { cssClass: [PCSS + '-cell', 'cols-hd-4', 'cols-lg-6', 'field-stretch', 'field-minimal'], name: 'Claim value' },\n validators: [{ type: 'required', errorMessage: '!' }]\n },\n ], ['read', 'update', 'create', 'delete'].map((p, j) => {\n return {\n prop: p,\n type: 'boolean',\n display: { cssClass: [PCSS + '-cell', 'cols-hd-1', 'cols-3', 'field-minimal', PCSS + '-pad pad-left-2'], name: p.charAt(0).toUpperCase() + p.substr(1) }\n };\n }))\n }\n }\n ]\n};\nexport const DEFAULT_METADATA = {\n display: { name: 'Widget', cssClass: [PCSS + '-grid', 'grid-novgap', 'grid-tiny-colgap', 'grid-nospace'] },\n props: [\n { prop: 'tag', type: 'string', display: { name: 'Tag', cssClass: [PCSS + '-cell'] } }\n ]\n};\nfunction cellifyMetadata(p) {\n // ensure pacem-cell cssClass\n p.display = p.display || { name: p.prop, cssClass: [] };\n const css = p.display.cssClass = Utils.isArray(p.display.cssClass) && p.display.cssClass || [];\n css.push(PCSS + '-cell');\n}\nexport function gridifyMetadata(metadata) {\n var props = metadata && metadata.props || [];\n var display = metadata && metadata.display || { name: 'Element' };\n if (!Utils.isNull(display)) {\n const css = display.cssClass = display.cssClass || [];\n Array.prototype.push.apply(css, DEFAULT_METADATA.display.cssClass);\n }\n props.forEach(cellifyMetadata);\n return { display: display, props: props };\n}\nexport function buildWidgetMetadata(metadata) {\n var display = Utils.extend({}, DEFAULT_METADATA.display, metadata && metadata.display || {});\n var props = Utils.clone(DEFAULT_METADATA.props);\n Array.prototype.push.apply(props, (metadata && metadata.props || []).filter(p => {\n if (p.prop === 'tag') {\n return false;\n }\n cellifyMetadata(p);\n return true;\n }));\n return { display: display, props: props };\n}\nconst WIDGET_CSS_CLASS = PCSS + '-widget';\n/** Default metadata ('expression' field) 'extra' object. */\nexport const EXPRESSION_WIDGET_METADATA_EXTRA = {\n selector: '.' + WIDGET_CSS_CLASS,\n labeler: (e) => {\n if (!Utils.isNullOrEmpty(e.tag)) {\n return e.tag;\n }\n return (e.metadata && e.metadata.display && e.metadata.display.name || '') + '#' + e.id;\n }\n};\nexport class Widget {\n /**\n * Utility method for widget gathering.\n * @param predicate Predicate for filtering\n */\n static findAll(predicate) {\n return CustomElementUtils.findAll('.' + WIDGET_CSS_CLASS, (widget) => widget instanceof PacemWidgetElement && !Utils.isNullOrEmpty(widget.id) && (Utils.isNull(predicate) || predicate(widget)));\n }\n}\nlet PacemWidgetToolbarElement = class PacemWidgetToolbarElement extends Components.PacemElement {\n /** Gets the toolbar's edit button. */\n get editButton() {\n return this._btnEdit;\n }\n /** Gets the toolbar's permimssions button. */\n get permissionsButton() {\n return this._btnPerms;\n }\n /** Gets the toolbar's remove button. */\n get removeButton() {\n return this._btnRemove;\n }\n _edit(evt) {\n const form = this._proxy.dom.find(e => 'core' in e.attributes);\n form.open(this.target, true);\n form.metadata = this.target.metadata;\n // popout\n this._popoutJustInCase();\n }\n _editPermissions(evt) {\n const form = this._proxy.dom.find(e => 'permissions' in e.attributes);\n form.open(this.target);\n form.metadata = this.target.permissionMetadata;\n // popout\n this._popoutJustInCase();\n }\n _popoutJustInCase() {\n const balloon = CustomElementUtils.findAncestorOfType(this, UI.PacemBalloonElement);\n if (!Utils.isNullOrEmpty(balloon)) {\n balloon.popout();\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Element })\n], PacemWidgetToolbarElement.prototype, \"target\", void 0);\n__decorate([\n ViewChild('.buttons > div')\n], PacemWidgetToolbarElement.prototype, \"_toolbar\", void 0);\n__decorate([\n ViewChild(P + '-button[edit]')\n], PacemWidgetToolbarElement.prototype, \"_btnEdit\", void 0);\n__decorate([\n ViewChild(P + '-button[permissions]')\n], PacemWidgetToolbarElement.prototype, \"_btnPerms\", void 0);\n__decorate([\n ViewChild(P + '-button[remove]')\n], PacemWidgetToolbarElement.prototype, \"_btnRemove\", void 0);\n__decorate([\n ViewChild(P + '-shell-proxy')\n], PacemWidgetToolbarElement.prototype, \"_proxy\", void 0);\nPacemWidgetToolbarElement = __decorate([\n CustomElement({\n tagName: P + '-widget-toolbar', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-span class=\"toolbar-text\" content=\"{{ '<i class=&quot;${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) }}\"></${P}-span>\n<div class=\"buttons ${PCSS}-buttonset ${PCSS}-pad ${PCSS}-margin pad-0 margin-left-2\">\n <div class=\"buttonset-left\">\n <${P}-button edit class=\"button edit\" on-click=\":host._edit($event)\"></${P}-button>\n <${P}-button permissions class=\"button\" on-click=\":host._editPermissions($event)\" css-class=\"{{ {'button-success': ::target.permissions.length > 0} }}\" icon-glyph=\"verified_user\"></${P}-button>\n <${P}-button remove class=\"button button-danger delete\"></${P}-button>\n </div>\n<div>\n<${P}-shell-proxy>\n <${P}-modal-form core></${P}-modal-form>\n <${P}-modal-form permissions></${P}-modal-form>\n</${P}-shell-proxy>`\n })\n], PacemWidgetToolbarElement);\nexport { PacemWidgetToolbarElement };\nexport class PacemWidgetElement extends Components.PacemElement {\n constructor(metadata, role = 'widget') {\n super(role);\n this.permissionMetadata = DEFAULT_PERMISSION_METADATA;\n this.metadata = metadata;\n }\n connectedCallback() {\n super.connectedCallback();\n // ensure an explicit id for each widget\n if (Utils.isNullOrEmpty(this.id)) {\n this.id = 'wdg' + Utils.uniqueCode();\n }\n Utils.addClass(this, WIDGET_CSS_CLASS);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'editable':\n if (!val) {\n this._disposeBalloon();\n }\n else if (this.isReady) {\n this._ensureBalloon();\n }\n break;\n case 'editing':\n if (!Utils.isNull(this._balloon)) {\n this._balloon.disabled = !val;\n }\n (val ? Utils.addClass : Utils.removeClass).apply(this, [this, 'widget-' + name]);\n break;\n case 'metadata':\n this._assignIcon(val);\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._assignIcon();\n this._ensureBalloon();\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n }\n _assignIcon(val = this.metadata) {\n this.dataset['icon'] = (val && val.display && val.display.icon) || 'widgets';\n }\n _ensureBalloon() {\n if (Utils.isNull(this._balloon)) {\n const balloon = this._balloon = document.createElement(P + '-balloon');\n balloon.target = this;\n balloon.disabled = !this.editing;\n balloon.options = {\n behavior: UI.BalloonBehavior.Menu,\n trigger: UI.BalloonTrigger.Hover\n };\n // innerHTML before appending the balloon to the DOM.\n balloon.innerHTML = `<${P}-widget-toolbar target=\"{{ #${this.id} }}\"><${P}-widget-toolbar>`;\n // append to trigger connected/viewActivated callbacks\n CustomElementUtils.findAncestorShell(this).appendChild(balloon);\n }\n }\n _disposeBalloon() {\n if (!Utils.isNull(this._balloon)) {\n this._balloon.remove();\n this._balloon = null;\n }\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PacemWidgetElement.prototype, \"editing\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PacemWidgetElement.prototype, \"editable\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetElement.prototype, \"tag\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Json })\n], PacemWidgetElement.prototype, \"permissions\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemWidgetElement.prototype, \"metadata\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemWidgetElement.prototype, \"permissionMetadata\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { PacemWidgetElement, EXPRESSION_WIDGET_METADATA_EXTRA } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { PacemWidgetDataElement } from './data';\nimport { PacemWidgetFetchElement } from './fetcher';\n//namespace Pacem.Components.Cms {\nexport const FETCH_CREDENTIALS_METADATA = {\n prop: 'fetchCredentials', type: 'string', dataType: 'enumeration', display: { name: 'Fetch Credentials' }, extra: {\n enum: ['same-origin', 'omit', 'include']\n }\n};\nexport const ACCESS_TOKEN_METADATA = {\n prop: 'accessToken', type: EXPRESSION_METADATA_TYPE, display: { name: 'Access Token' },\n extra: Utils.extend({}, EXPRESSION_WIDGET_METADATA_EXTRA, { filter: (e) => e instanceof PacemWidgetDataElement || e instanceof PacemWidgetFetchElement })\n};\nexport class PacemBearerWidgetElement extends PacemWidgetElement {\n constructor() {\n super(...arguments);\n this.fetchCredentials = 'same-origin';\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'accessToken') {\n if (!Utils.isNullOrEmpty(val)) {\n this.fetchHeaders = { 'Authorization': 'Bearer ' + val };\n }\n else {\n this.fetchHeaders = {};\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemBearerWidgetElement.prototype, \"fetchCredentials\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemBearerWidgetElement.prototype, \"fetchHeaders\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemBearerWidgetElement.prototype, \"accessToken\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemBearerWidgetElement.prototype, \"fetching\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { PacemWidgetElement, buildWidgetMetadata } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\n//namespace Pacem.Components.Cms {\nconst DATA_METADATA = {\n display: { icon: 'storage', name: 'Data', description: 'Data object widget.' },\n props: [\n {\n prop: 'model', type: EXPRESSION_METADATA_TYPE, display: {\n name: 'Model'\n }, extra: {\n selector: '.' + PCSS + '-widget'\n }\n }\n ]\n};\nlet PacemWidgetDataElement = class PacemWidgetDataElement extends PacemWidgetElement {\n constructor() {\n super(buildWidgetMetadata(DATA_METADATA));\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Json })\n], PacemWidgetDataElement.prototype, \"model\", void 0);\nPacemWidgetDataElement = __decorate([\n CustomElement({\n tagName: P + '-widget-data'\n })\n], PacemWidgetDataElement);\nexport { PacemWidgetDataElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Defaults, Watch, PropertyConverters, ViewChild, Utils, CustomElementUtils, PacemEventTarget, Net } from '@pacem/pacem-core';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { buildWidgetMetadata, gridifyMetadata } from '../types';\nimport { PacemBearerWidgetElement, ACCESS_TOKEN_METADATA } from './types';\n//namespace Pacem.Components.Cms {\nconst FETCH_PARAMETER_METADATA = {\n props: [\n { prop: 'name', type: 'string', isReadOnly: true, display: { name: 'Name', cssClass: ['cols-md-4', 'cols-lg-3', 'cols-hd-2'] } },\n { prop: 'value', type: EXPRESSION_METADATA_TYPE, display: { name: 'Value', cssClass: ['cols-md-8', 'cols-lg-9', 'cols-hd-10'] } }\n ]\n};\nconst FETCH_METADATA = {\n display: {\n icon: 'wifi', name: 'Api Fetcher', description: 'Fetching widget that retrieves data from a REST endpoint.'\n }, props: [\n {\n prop: 'manifest', type: EXPRESSION_METADATA_TYPE, isComplexType: true, display: {\n name: 'Api Manifest'\n }, extra: {\n selector: P + '-widget-apimanifest'\n }, validators: [{ type: 'required', errorMessage: 'Api Manifest is a required field.' }]\n },\n {\n prop: 'endpoint', type: 'object', isComplexType: true, display: {\n name: 'Endpoint', ui: 'oneToMany'\n }, validators: [{ type: 'required', errorMessage: 'Api Manifest is a required field.' }],\n extra: {\n source: (manifest) => manifest.endpoints.map(e => Utils.extend(e, { 'fullPath': `[${e.method.toUpperCase()}] ${e.path}` })).sort(),\n textProperty: 'fullPath', valueProperty: 'fullPath',\n dependsOn: [{ prop: 'manifest', hide: true }]\n }\n },\n {\n prop: 'parameters', type: 'array', display: {\n name: 'Parameters'\n },\n props: gridifyMetadata(FETCH_PARAMETER_METADATA),\n extra: {\n lockItems: true,\n dependsOn: [{ prop: 'endpoint', hide: true }]\n }\n },\n ACCESS_TOKEN_METADATA\n ]\n};\nconst PARAMETER_TAGNAME = P + '-widget-fetch-parameter';\nlet PacemWidgetFetchParameterElement = class PacemWidgetFetchParameterElement extends PacemEventTarget {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val.first);\n if (name === 'value' && !Utils.isNull(this._fetcher)) {\n this._fetcher.fetch();\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const fetcher = this._fetcher = CustomElementUtils.findAncestorOfType(this, PacemWidgetFetchElement);\n if (!Utils.isNull(this._fetcher) && !Utils.isNull(this.value)) {\n this._fetcher.fetch();\n }\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemWidgetFetchParameterElement.prototype, \"required\", void 0);\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetFetchParameterElement.prototype, \"name\", void 0);\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetFetchParameterElement.prototype, \"value\", void 0);\nPacemWidgetFetchParameterElement = __decorate([\n CustomElement({ tagName: PARAMETER_TAGNAME })\n], PacemWidgetFetchParameterElement);\nexport { PacemWidgetFetchParameterElement };\nlet PacemWidgetFetchElement = class PacemWidgetFetchElement extends PacemBearerWidgetElement {\n constructor() {\n super(buildWidgetMetadata(FETCH_METADATA));\n this._onerror = (e) => {\n this.failure = !(this.success = false);\n };\n this._onsuccess = (e) => {\n this.failure = !(this.success = true);\n };\n this._onresult = (e) => {\n this.result = e.detail;\n };\n }\n get _parameters() {\n return Array.from(this._itemsElement.children).filter(e => e.localName === PARAMETER_TAGNAME);\n }\n fetch() {\n const fetcher = this._fetcher, parameters = this._parameters || [], endpoint = this.endpoint;\n if (!Utils.isNull(endpoint)) {\n for (let param of endpoint.parameters) {\n if (param.required && Utils.isNull(parameters.find(p => p.name === param.name))) {\n // parameters not yet aligned with the ref endpoint:\n // not all the required parameters are attached => exit\n return;\n }\n }\n }\n // build-up fetch params\n const params = {};\n for (let parameter of parameters) {\n if (!Utils.isNullOrEmpty(parameter.value)) {\n params[parameter.name] = parameter.value;\n }\n else if (parameter.required) {\n // found an empty (required) parameter => exit\n return;\n }\n }\n fetcher.url = this.url;\n fetcher.method = this.method;\n fetcher.credentials = this.fetchCredentials;\n fetcher.headers = this.fetchHeaders;\n fetcher.parameters = params;\n return fetcher.fetch();\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.fetch();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'endpoint' && !Utils.isNullOrEmpty(val)) {\n this._mergeEndpoint(val);\n }\n else\n switch (name) {\n case 'parameters':\n case 'fetchHeaders':\n case 'fetchCredentials':\n case 'url':\n case 'method':\n this.fetch();\n break;\n }\n }\n _mergeEndpoint(endpoint = this.endpoint) {\n this.url = this.manifest.baseUrl + endpoint.path;\n this.method = endpoint.method;\n this.fields = endpoint.response.fields;\n const itemsElement = this._itemsElement, parameters = this._parameters;\n // remove exceeding\n for (let j = parameters.length - 1; j >= 0; j--) {\n let item = parameters[j];\n let matching = endpoint.parameters.find(p => p.name === item.name);\n if (Utils.isNull(matching)) {\n item.remove();\n }\n }\n // add missing\n for (let param of endpoint.parameters) {\n let existing = parameters.find(p => p.name === param.name);\n if (Utils.isNull(existing)) {\n let item = existing = document.createElement(PARAMETER_TAGNAME);\n item.name = param.name;\n itemsElement.appendChild(item);\n }\n existing.required = param.required;\n }\n // for editing sake\n this.parameters = parameters;\n }\n};\n__decorate([\n Watch({ reflectBack: true, emit: true /* < due to metadata 'dependsOn' */, converter: PropertyConverters.Json })\n], PacemWidgetFetchElement.prototype, \"manifest\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: true /* < due to metadata 'dependsOn' */, converter: PropertyConverters.Json })\n], PacemWidgetFetchElement.prototype, \"endpoint\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: false, converter: PropertyConverters.String })\n], PacemWidgetFetchElement.prototype, \"url\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: false, converter: PropertyConverters.String })\n], PacemWidgetFetchElement.prototype, \"method\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: false, converter: PropertyConverters.Json })\n], PacemWidgetFetchElement.prototype, \"fields\", void 0);\n__decorate([\n Watch( /* just for editing sake */)\n], PacemWidgetFetchElement.prototype, \"parameters\", void 0);\n__decorate([\n Watch( /* can only be databound or assigned at runtime */)\n], PacemWidgetFetchElement.prototype, \"result\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemWidgetFetchElement.prototype, \"fetching\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemWidgetFetchElement.prototype, \"success\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemWidgetFetchElement.prototype, \"failure\", void 0);\n__decorate([\n ViewChild(P + '-fetch')\n], PacemWidgetFetchElement.prototype, \"_fetcher\", void 0);\n__decorate([\n ViewChild('div[hidden]')\n], PacemWidgetFetchElement.prototype, \"_itemsElement\", void 0);\nPacemWidgetFetchElement = __decorate([\n CustomElement({\n tagName: P + '-widget-fetch', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-fetch autofetch=\"false\" fetching=\"{{ :host.fetching, twoway }}\" debounce=\"100\"\non-${Net.FetchResultEventName}=\":host._onresult($event)\" on-${Net.FetchErrorEventName}=\":host._onerror($event)\" on-${Net.FetchSuccessEventName}=\":host._onsuccess($event)\"></${P}-fetch><div hidden><${P}-content></${P}-content></div>`\n })\n], PacemWidgetFetchElement);\nexport { PacemWidgetFetchElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P } from '@pacem/pacem-core';\nimport { PacemWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nlet PacemWidgetTranslatorElement = class PacemWidgetTranslatorElement extends PacemWidgetElement {\n};\nPacemWidgetTranslatorElement = __decorate([\n CustomElement({\n tagName: P + '-widget-translator'\n })\n], PacemWidgetTranslatorElement);\nexport { PacemWidgetTranslatorElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { PacemWidgetElement, buildWidgetMetadata } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\n//namespace Pacem.Components.Cms {\nconst DATA_METADATA = {\n display: { icon: 'timer', name: 'Clock', description: 'Timer widget.' },\n props: [\n {\n prop: 'interval', type: EXPRESSION_METADATA_TYPE, display: {\n name: 'Interval (msec)'\n }, extra: {\n selector: '.' + PCSS + '-widget', step: 1000\n },\n validators: [{\n type: 'range', errorMessage: 'Negative numbers not allowed', params: { min: 0 }\n }]\n }\n ]\n};\nlet PacemWidgetClockElement = class PacemWidgetClockElement extends PacemWidgetElement {\n constructor() {\n super(buildWidgetMetadata(DATA_METADATA));\n this.interval = 0;\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Number })\n], PacemWidgetClockElement.prototype, \"interval\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemWidgetClockElement.prototype, \"time\", void 0);\nPacemWidgetClockElement = __decorate([\n CustomElement({\n tagName: P + '-widget-clock', template: `<${P}-timer interval=\"{{ :host.interval }}\" on-tick=\"{{ :host.time = Date.now() }}\"></${P}-timer>`\n })\n], PacemWidgetClockElement);\nexport { PacemWidgetClockElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils, Storage } from '@pacem/pacem-core';\nimport { buildWidgetMetadata } from '../types';\nimport { PacemBearerWidgetElement, ACCESS_TOKEN_METADATA } from './types';\nimport { SwaggerCmsParser } from '../../openapi/swagger-cms';\n//namespace Pacem.Components.Cms {\nconst APIMANIFEST_METADATA = {\n display: { icon: 'cloud_circle', name: 'Api Manifest', description: 'OpenApi parser for WebApi scaffolding.' },\n props: [\n {\n prop: 'url', type: 'text', display: {\n name: 'Url', description: 'Insert the url of the OpenApi json configuration.', cssClass: ['cols-lg-8'],\n watermark: 'https://domain.com/swagger/v1/swagger.json'\n },\n extra: { tooltip: true },\n validators: [{\n type: 'required', errorMessage: 'Url field is required.'\n }]\n },\n {\n prop: 'usecache', type: 'boolean', display: {\n name: 'Cache results', description: 'Whether to cache the manifest per-url.', cssClass: ['cols-lg-4'],\n ui: 'switcher'\n },\n extra: { tooltip: true }\n },\n ACCESS_TOKEN_METADATA\n ]\n};\nlet PacemWidgetApiManifestElement = class PacemWidgetApiManifestElement extends PacemBearerWidgetElement {\n constructor(_openapi = new SwaggerCmsParser(), _cache = new Storage()) {\n super(buildWidgetMetadata(APIMANIFEST_METADATA));\n this._openapi = _openapi;\n this._cache = _cache;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'url':\n case 'editing':\n case 'editable':\n this._scaffold();\n break;\n case 'usecache':\n this._openapi.cache = val ? this._cache : null;\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (this.usecache) {\n this._openapi.cache = this._cache;\n }\n this._scaffold();\n }\n _scaffold() {\n if (this.editing && this.editable && !Utils.isNullOrEmpty(this.url)) {\n this.fetching = true;\n this._openapi.load(this.url).then(s => {\n this.manifest = s;\n this.fetching = false;\n }, _ => {\n this.fetching = false;\n });\n }\n }\n};\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetApiManifestElement.prototype, \"url\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemWidgetApiManifestElement.prototype, \"usecache\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemWidgetApiManifestElement.prototype, \"manifest\", void 0);\nPacemWidgetApiManifestElement = __decorate([\n CustomElement({ tagName: P + '-widget-apimanifest' })\n], PacemWidgetApiManifestElement);\nexport { PacemWidgetApiManifestElement };\n", "/// <reference path=\"./swagger-types.d.ts\" />\nimport { Scaffolding } from '@pacem/pacem-scaffolding';\n//namespace Pacem.Cms.OpenApi {\nconst BAG = 'pacem:metadatabag';\nexport class SwaggerCmsParser {\n constructor(_openApi = new Scaffolding.OpenApi.OpenApiParser()) {\n this._openApi = _openApi;\n this._cachedMetadataUrls = [];\n }\n async load(url, headers) {\n let api = await this._openApi.load(url, headers);\n if (api != null) {\n api[BAG] = {};\n // greedy load of datafields\n for (let endpoint of api.endpoints) {\n await this._enrichSchemas(api, endpoint, headers);\n }\n }\n return api;\n }\n async _enrichSchemas(api, endpoint, headers) {\n const response = endpoint.response;\n if (response && response.meta) {\n response.fields = await this._fetchMetadata(api, { name: response.fullType, schema: response.meta }, headers);\n }\n // parameters?\n const parameters = endpoint.parameters;\n for (let parameter of (parameters || [])) {\n if (parameter.meta && parameter.fullType) {\n let fields = await this._fetchMetadata(api, { name: parameter.fullType, schema: parameter.meta }, headers);\n parameter.fields = fields;\n }\n }\n }\n clearCache() {\n const cache = this.cache, keys = this._cachedMetadataUrls;\n if (cache) {\n for (let key of keys) {\n cache.removeProperty(key);\n }\n // clear keys\n keys.splice(0);\n }\n }\n /**\n *\n * @param def1\n * @param headers HTTP headers for API fetching\n */\n async _fetchMetadata(api, def0, headers) {\n let _fetch = async (def1) => {\n let cols = [];\n if (def1 && def1.name) {\n // short-circuit if already in the bag\n if (api[BAG][def1.name]) {\n return api[BAG][def1.name];\n }\n /* reserve a place for this type so that it gets not fetched again if aggressive recursion occurs */ api[BAG][def1.name] = cols;\n let meta = { props: [] }, metadataUrl;\n if (/^https?:\\/\\//.test(def1.name)) {\n // name is url? then it's the endpoint for type metadata, fetch it!\n metadataUrl = def1.name;\n }\n else {\n 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.`);\n return;\n }\n if (metadataUrl) {\n let retrieveFn = async () => {\n let response = await fetch(metadataUrl, { credentials: 'omit', mode: 'cors', headers: headers });\n if (response.ok) {\n return await response.json();\n }\n };\n if (this.cache) {\n // check for session cache\n meta = this.cache.getPropertyValue(metadataUrl);\n if (!meta) {\n // no cache available? then fetch...\n meta = await retrieveFn();\n this._cachedMetadataUrls.push(metadataUrl);\n this.cache.setPropertyValue(metadataUrl, meta, /* persist in session not on location */ false);\n }\n }\n else {\n // do fetch\n meta = await retrieveFn();\n }\n }\n let schema = def1.schema;\n for (let col in schema.properties) {\n let column = schema.properties[col], field = meta && meta.props.find(p => p.prop === col);\n let datafield = Object.assign({\n prop: col, type: column.type || 'text', props: undefined\n }, field || /* if there's no match, then read-only */ { isReadOnly: true });\n if (field) {\n let $ref = (column.items && column.items.$ref) || column.$ref;\n if ($ref) {\n let ref = Scaffolding.OpenApi.getOpenApiDefinition(api, $ref), key = ref.name;\n if (api[BAG][key]) {\n datafield.props = api[BAG][key];\n }\n else {\n // recursion here\n datafield.props = await _fetch(ref);\n }\n }\n }\n cols.push(datafield);\n }\n }\n return cols;\n };\n return await _fetch(def0);\n }\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, Utils, CustomElementUtils, Logging, PCSS } from '@pacem/pacem-core';\nimport { PacemWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nexport class PacemUiWidgetElement extends PacemWidgetElement {\n constructor(metadata, colspan = 1, role) {\n super(metadata, role);\n this.colspan = colspan;\n this.rowspan = 1;\n }\n // just a flag class\n connectedCallback() {\n super.connectedCallback();\n Utils.addClass(this, 'ui-widget ' + PCSS + '-cell cols-xs-start-1 cols-xs-12 rows-xs-start-auto');\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'row':\n Utils.removeClass(this, `rows-start-${old + 1}`);\n Utils.addClass(this, `rows-start-${val + 1}`);\n break;\n case 'rowspan':\n Utils.removeClass(this, `rows-${old}`);\n Utils.addClass(this, `rows-${val}`);\n break;\n case 'column':\n Utils.removeClass(this, `cols-start-${old + 1}`);\n Utils.addClass(this, `cols-start-${val + 1}`);\n break;\n case 'colspan':\n Utils.removeClass(this, `cols-${old}`);\n Utils.addClass(this, `cols-${val}`);\n break;\n case 'borders':\n (this.borders ? Utils.addClass : Utils.removeClass).apply(this, [this, PCSS + '-border']);\n break;\n case 'corners':\n (this.borders ? Utils.addClass : Utils.removeClass).apply(this, [this, PCSS + '-corners']);\n break;\n }\n }\n get container() {\n return this._container;\n }\n /** @overridable */\n findContainer() {\n return CustomElementUtils.findAncestor(this, n => n instanceof PacemCompositeWidgetElement);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n let iter = this._container = this.findContainer();\n if (!Utils.isNull(iter)) {\n iter.register(this);\n }\n }\n disconnectedCallback() {\n if (!Utils.isNull(this._container)) {\n this._container.unregister(this);\n }\n super.disconnectedCallback();\n }\n}\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"column\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"row\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"colspan\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"rowspan\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemUiWidgetElement.prototype, \"borders\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemUiWidgetElement.prototype, \"corners\", void 0);\nexport const WidgetRegisterEventName = \"widgetregister\";\nexport const WidgetUnregisterEventName = \"widgetunregister\";\nexport const LayoutChangeEventName = \"layoutchange\";\nexport class WidgetRegisterEvent extends CustomEvent {\n constructor(item, eventInit) {\n super(WidgetRegisterEventName, Utils.extend(eventInit || {}, { detail: item }));\n }\n}\nexport class WidgetUnregisterEvent extends CustomEvent {\n constructor(item, eventInit) {\n super(WidgetUnregisterEventName, Utils.extend(eventInit || {}, { detail: item }));\n }\n}\nexport class PacemCompositeWidgetElement extends PacemUiWidgetElement {\n get itemsElement() {\n return this;\n }\n validate(item) {\n return item instanceof PacemUiWidgetElement;\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n Utils.addClass(this.itemsElement, PCSS + '-items-element');\n }\n /**\n * Appends a child Element to this CompositeWidget's itemsElement.\n * @param item New child element\n */\n appendItem(item) {\n this.itemsElement.appendChild(item);\n }\n /**\n * Registers a new item among the items.\n * @param item {PacemUiWidgetElement} Item to be enrolled\n */\n register(item) {\n if (!this.validate(item)) {\n this.log(Logging.LogLevel.Debug, `${(item && item.localName)} element couldn't be registered in a ${this.localName} element.`);\n return false;\n }\n let retval = false;\n const items = this.items = this.items || [];\n if (Utils.isNullOrEmpty(items)) {\n this.items = [item];\n retval = true;\n }\n else if (items.indexOf(item) === -1) {\n items.push(item);\n retval = true;\n }\n //\n if (retval) {\n this.dispatchEvent(new WidgetRegisterEvent(item));\n }\n return retval;\n }\n /**\n * Removes an existing element from the items.\n * @param item {PacemUiWidgetElement} Item to be removed\n */\n unregister(item) {\n const items = this.items, ndx = !Utils.isNullOrEmpty(items) && items.indexOf(item);\n if (ndx >= 0) {\n let item = items.splice(ndx, 1);\n this.dispatchEvent(new WidgetUnregisterEvent(item[0]));\n return true;\n }\n return false;\n }\n}\n__decorate([\n Watch( /* can only be databound or assigned at runtime */)\n], PacemCompositeWidgetElement.prototype, \"items\", void 0);\n// #endregion COMPOSITE\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Defaults, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { buildWidgetMetadata, EXPRESSION_WIDGET_METADATA_EXTRA } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { PacemUiWidgetElement } from './types';\n//namespace Pacem.Components.Cms {\nconst TEXT_METADATA = buildWidgetMetadata({\n display: { icon: 'font_download', name: 'Text', description: 'Plain text widget.' },\n props: [{\n prop: 'text', type: EXPRESSION_METADATA_TYPE, display: { name: 'Text' }, extra: EXPRESSION_WIDGET_METADATA_EXTRA\n }]\n});\nlet PacemWidgetTextElement = class PacemWidgetTextElement extends PacemUiWidgetElement {\n constructor() {\n super(TEXT_METADATA);\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetTextElement.prototype, \"text\", void 0);\nPacemWidgetTextElement = __decorate([\n CustomElement({\n tagName: P + '-widget-text', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-text text=\"{{ :host.text }}\"></${P}-text>`\n })\n], PacemWidgetTextElement);\nexport { PacemWidgetTextElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, ViewChild } from '@pacem/pacem-core';\nimport { PacemCompositeWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\n/**\n * UI widget container that eases dragdrop-based enrollment into composite widgets.\n */\nlet PacemWidgetPickerElement = class PacemWidgetPickerElement extends PacemCompositeWidgetElement {\n register(item) {\n const retval = super.register(item);\n if (retval) {\n item.hide = true;\n }\n return retval;\n }\n};\n__decorate([\n ViewChild(P + '-drag-drop')\n], PacemWidgetPickerElement.prototype, \"_dragDrop\", void 0);\nPacemWidgetPickerElement = __decorate([\n CustomElement({\n tagName: P + '-widget-picker', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-repeater datasource=\"{{ :host.items }}\">\n <template>\n <${P}-panel behaviors=\"{{ [::_dragDrop] }}\" class=\"${PCSS}-widget-itempicker display-flex flex-fill flex-middle flex-nowrap\">\n <i class=\"${PCSS}-icon flex-auto\" dragger>drag_indicator</i>\n <${P}-icon icon=\"{{ ^item.metadata.display.icon }}\" class=\"flex-auto ${PCSS}-margin margin-x-1\"></${P}-icon>\n <${P}-text text=\"{{ ^item.metadata.display.name }}\"></${P}-text>\n </${P}-panel>\n </template>\n</${P}-repeater>\n<${P}-drag-drop handle-selector=\"i.${PCSS}-icon[dragger]\"></${P}-drag-drop>\n<${P}-content></${P}-content>`\n })\n], PacemWidgetPickerElement);\nexport { PacemWidgetPickerElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters, Debounce, Utils, UI, PropertyChangeEventName } from '@pacem/pacem-core';\nimport { buildWidgetMetadata } from '../../types';\nimport { PacemCompositeWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nfunction createSvgGridBox() {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.style.pointerEvents = 'none';\n svg.style.zIndex = '1000';\n svg.setAttribute('height', '100%');\n svg.setAttribute('width', '100%');\n svg.setAttribute('preserveAspectRatio', 'none');\n svg.setAttribute('class', 'grid-cell-wrapper');\n //svg.style.padding = '2px';\n //svg.style.boxSizing = 'border-box';\n svg.innerHTML = `<rect class=\"grid-cell\" width=\"100%\" height=\"100%\"></rect>`;\n return svg;\n}\nexport const GRID_COLUMNS = 12;\nconst FALLBACK_COLUMNS = GRID_COLUMNS;\nconst FALLBACK_ROWS = 1;\nconst GRID_METADATA = {\n display: {\n icon: 'grid_on',\n name: 'Grid',\n description: 'Composition Widget that lays out child-widgets in a grid container.'\n },\n props: [\n {\n prop: 'rows', type: 'int', display: {\n name: 'Rows', cssClass: ['cols-lg-4']\n }, validators: [\n { type: 'required', errorMessage: '' },\n {\n type: 'range', errorMessage: '', params: {\n min: 1, max: 24\n }\n }\n ]\n }, {\n prop: 'rowGap', type: 'int', display: {\n //ui: 'slider',\n name: 'Row gap', cssClass: ['cols-lg-4']\n }, validators: [\n // { type: 'required', errorMessage: '' },\n {\n type: 'range', errorMessage: '', params: {\n min: 0, max: 3, step: .25\n }\n }\n ]\n }, {\n prop: 'columnGap', type: 'int', display: {\n //ui: 'slider',\n name: 'Column gap', cssClass: ['cols-lg-4']\n }, validators: [\n // { type: 'required', errorMessage: '' },\n {\n type: 'range', errorMessage: '', params: {\n min: 0, max: 3, step: .25\n }\n }\n ]\n }\n ]\n};\nlet PacemGridWidgetElement = class PacemGridWidgetElement extends PacemCompositeWidgetElement {\n constructor() {\n super(buildWidgetMetadata(GRID_METADATA), FALLBACK_COLUMNS, \"grid\");\n this._widgetPropertyChange = (evt) => {\n if (evt.detail.propertyName === 'row' || evt.detail.propertyName === 'rowspan') {\n const widget = evt.target;\n this.rows = Math.max(this.rows, widget.row + widget.rowspan);\n }\n };\n this._dragDropHandler = (evt) => {\n const args = evt.detail, el = args.element;\n switch (evt.type) {\n case UI.DragDropEventType.Start:\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'auto'; });\n this._initState = {\n colspan: el.colspan,\n rowspan: el.rowspan,\n col: el.column,\n row: el.row\n };\n break;\n case UI.DragDropEventType.End:\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'none'; });\n break;\n case UI.DragDropEventType.Over:\n var dropTarget = args.target;\n var col = +dropTarget.style.gridColumnStart - 1;\n var row = +dropTarget.style.gridRowStart - 1;\n const farRight = col + this._initState.colspan, farBottom = row + this._initState.rowspan;\n // check overlap\n if (!this._intersects(el, col, row, el.colspan, el.rowspan)) {\n let fireLayoutChange = false;\n //\n if (farRight <= (this.columns || FALLBACK_COLUMNS)) {\n fireLayoutChange = el.column !== col;\n el.column = col; // + '/' + (col + this._initState.colspan);\n }\n if (farBottom <= (this.rows || FALLBACK_ROWS)) {\n fireLayoutChange = fireLayoutChange || (el.row !== row);\n el.row = row; // + '/' + (row + this._initState.rowspan);\n }\n if (fireLayoutChange) {\n // attributechange should suffice\n // this.dispatchLayoutChangeEvent();\n }\n }\n break;\n }\n ;\n };\n this._resizeHandler = (evt) => {\n switch (evt.type) {\n case UI.RescaleEventType.Start:\n Utils.addClass(evt.detail.element, PCSS + '-rescaling');\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'auto'; });\n break;\n case UI.RescaleEventType.End:\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'none'; });\n Utils.removeClass(evt.detail.element, PCSS + '-rescaling');\n break;\n case UI.RescaleEventType.Rescale:\n evt.preventDefault();\n // check pos\n const pos = { x: evt.clientX, y: evt.clientY }, handle = evt.detail.handle;\n const dropTarget = document.elementsFromPoint(pos.x, pos.y).find(e => this._dragDrop.dropTargets.indexOf(e) >= 0);\n if (dropTarget) {\n var col = +dropTarget.style.gridColumnStart;\n var row = +dropTarget.style.gridRowStart;\n const widget = evt.detail.element, startcol = widget.column + 1, startrow = widget.row + 1;\n const colspan = 1 + col - startcol, rowspan = 1 + row - startrow;\n if (!this._intersects(widget, widget.column, widget.row, colspan, rowspan)) {\n let fireLayoutChange = false;\n //\n if (col >= startcol && handle.endsWith('right')) {\n fireLayoutChange = widget.colspan !== colspan;\n widget.colspan = colspan;\n }\n if (row >= startrow && handle.startsWith('bottom')) {\n fireLayoutChange = fireLayoutChange || widget.rowspan !== rowspan;\n widget.rowspan = rowspan;\n }\n if (fireLayoutChange) {\n // attributechange should suffice\n // this.dispatchLayoutChangeEvent();\n }\n }\n }\n break;\n }\n };\n this._gridBoxes = [];\n }\n register(item) {\n let retval = super.register(item);\n if (retval) {\n const row = item.row || 0, column = item.column || 0, colspan = item.colspan || 2, rowspan = item.rowspan || 1;\n let foundspot = !this._intersects(item, column, row, colspan, rowspan);\n if (foundspot) {\n item.row = row;\n item.column = column;\n item.colspan = colspan;\n item.rowspan = rowspan;\n }\n else {\n if (!foundspot) {\n // select a spot or create a new row\n let check = (elasticOnColspan = false) => {\n let maxColIndex = this.columns - 1;\n if (!elasticOnColspan) {\n maxColIndex = maxColIndex - colspan + 1;\n }\n for (let j = 0; j < this.rows; j++) {\n for (let i = 0; i <= maxColIndex; i++) {\n if (!this._intersects(item, i, j, colspan, rowspan)) {\n item.column = i;\n item.row = j;\n item.colspan = Math.min(maxColIndex + 1 - i, colspan);\n item.rowspan = rowspan;\n foundspot = true;\n break;\n }\n }\n if (foundspot)\n break;\n }\n };\n check();\n if (!foundspot && colspan > 1) {\n // find first avail slot conceding less colspan\n check(true);\n }\n }\n // okay, surrender and create a new row\n if (!foundspot) {\n this.rows++;\n item.row = this.rows - 1;\n item.column = 0;\n }\n }\n //\n // item.behaviors.push(this._dragDrop, this._rescaler);\n item.behaviors = [this._dragDrop, this._rescaler];\n item.addEventListener(PropertyChangeEventName, this._widgetPropertyChange, false);\n }\n //\n return retval;\n }\n unregister(item) {\n let retval = super.unregister(item);\n if (retval) {\n item.removeEventListener(PropertyChangeEventName, this._widgetPropertyChange, false);\n const ndx = item.behaviors.indexOf(this._dragDrop);\n if (ndx >= 0)\n item.behaviors.splice(ndx, 1);\n const ndx1 = item.behaviors.indexOf(this._rescaler);\n if (ndx1 >= 0)\n item.behaviors.splice(ndx1, 1);\n }\n return retval;\n }\n _intersects(who, col, row, colspan, rowspan) {\n for (let item of this.items) {\n let widget = item;\n if (widget === who) {\n continue;\n }\n if ((widget.column < (col + colspan) && (widget.column + widget.colspan) > col)\n && (widget.row < (row + rowspan) && (widget.row + widget.rowspan) > row)) {\n return true;\n }\n }\n return false;\n }\n connectedCallback() {\n super.connectedCallback();\n Utils.addClass(this, PCSS + '-grid');\n // drag-drop\n let dragDrop = this._dragDrop = document.createElement(P + '-drag-drop');\n let floater = document.createElement('div');\n document.body.appendChild(floater);\n dragDrop.floater = floater;\n dragDrop.mode = UI.DragDataMode.Alias;\n dragDrop.dropBehavior = UI.DropBehavior.None;\n dragDrop.addEventListener(UI.DragDropEventType.Start, this._dragDropHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Over, this._dragDropHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragDropHandler, false);\n document.body.appendChild(dragDrop);\n // rescale\n let rescale = this._rescaler = document.createElement(P + '-rescale');\n rescale.handles = [UI.RescaleHandle.Right, UI.RescaleHandle.Bottom];\n rescale.addEventListener(UI.RescaleEventType.Start, this._resizeHandler, false);\n rescale.addEventListener(UI.RescaleEventType.Rescale, this._resizeHandler, false);\n rescale.addEventListener(UI.RescaleEventType.End, this._resizeHandler, false);\n document.body.appendChild(rescale);\n // editor\n // default configuration\n if (Utils.isNullOrEmpty(this.columns)) {\n this.columns = GRID_COLUMNS;\n }\n if (Utils.isNullOrEmpty(this.rows)) {\n this.rows = 1;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.adapt();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n this.adapt();\n }\n disconnectedCallback() {\n var dragDrop = this._dragDrop, rescale = this._rescaler;\n if (!Utils.isNull(dragDrop)) {\n dragDrop.floater.remove();\n dragDrop.removeEventListener(UI.DragDropEventType.Start, this._dragDropHandler, false);\n dragDrop.removeEventListener(UI.DragDropEventType.Over, this._dragDropHandler, false);\n dragDrop.removeEventListener(UI.DragDropEventType.End, this._dragDropHandler, false);\n dragDrop.remove();\n this._dragDrop = null;\n }\n if (!Utils.isNull(rescale)) {\n rescale.removeEventListener(UI.RescaleEventType.Start, this._resizeHandler, false);\n rescale.removeEventListener(UI.RescaleEventType.Rescale, this._resizeHandler, false);\n rescale.removeEventListener(UI.RescaleEventType.End, this._resizeHandler, false);\n rescale.remove();\n this._rescaler = null;\n }\n super.disconnectedCallback();\n }\n _normalize(measure, defaultValue = 1) {\n if (typeof measure === 'string') {\n return measure;\n }\n else if (measure == null) {\n measure = defaultValue;\n }\n return this.unitPixels(measure) + 'px';\n }\n unitPixels(qty) {\n return qty * (this.unit || 8);\n }\n adapt() {\n this.style.marginTop = this.unitPixels(this.marginTop || 0) + 'px';\n this.style.marginBottom = this.unitPixels(this.marginBottom || 0) + 'px';\n //\n this.style.gridTemplateColumns = `repeat(${(this.columns || FALLBACK_COLUMNS)}, 1fr)`;\n //this.style.gridAutoRows = `minmax(${(this.minRowheight || 24)}, ${(this.rowheight || 'auto')})`;\n let minrowheight = this._normalize(this.minRowheight, 3), rowheight = this._normalize(this.rowheight || 'auto');\n this.style.gridTemplateRows = `repeat(${(this.rows || FALLBACK_ROWS)}, minmax(${minrowheight}, ${rowheight}))`;\n this.style.gridRowGap = this._normalize(this.rowGap, 1);\n this.style.gridColumnGap = this._normalize(this.columnGap, 1);\n //\n this._setGridLines();\n }\n _setGridLines() {\n var splice = 0;\n const editing = this.editing;\n if (editing) {\n const cols = this.columns || FALLBACK_COLUMNS, rows = this.rows || FALLBACK_ROWS, total = cols * rows;\n splice = total;\n for (let k = 0; k < total; k++) {\n while (this._gridBoxes.length <= k) {\n let s = createSvgGridBox();\n this.appendChild(s);\n this._gridBoxes.push(s);\n }\n let svg = this._gridBoxes[k];\n const i = k % cols, j = Math.floor(k / cols);\n svg.style.gridColumn = (i + 1).toString();\n svg.style.gridRow = (j + 1).toString();\n }\n }\n for (let svg of this._gridBoxes.splice(splice)) {\n svg.remove();\n }\n // behaviors to be synchronized\n if (!Utils.isNull(this._dragDrop) && !Utils.isNull(this._rescaler)) {\n this._dragDrop.disabled = this._rescaler.disabled\n = !editing;\n this._dragDrop.dropTargets = this._gridBoxes;\n }\n }\n};\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"unit\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"marginTop\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"marginBottom\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"columns\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"rows\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemGridWidgetElement.prototype, \"minRowheight\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemGridWidgetElement.prototype, \"rowheight\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"rowGap\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"columnGap\", void 0);\n__decorate([\n Debounce(100)\n], PacemGridWidgetElement.prototype, \"adapt\", null);\nPacemGridWidgetElement = __decorate([\n CustomElement({ tagName: P + '-widget-grid' })\n], PacemGridWidgetElement);\nexport { PacemGridWidgetElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters, ViewChild, Utils, Components } from '@pacem/pacem-core';\nimport { EXPRESSION_METADATA_TYPE } from '../../../scaffolding/types';\nimport { EXPRESSION_WIDGET_METADATA_EXTRA, buildWidgetMetadata, gridifyMetadata } from '../../types';\nimport { PacemWidgetDataElement } from '../../helpers/data';\nimport { PacemWidgetFetchElement } from '../../helpers/fetcher';\nimport { DATACOLUMNS_METADATA_TYPE } from '../../scaffolding/datacolumns';\nimport { PacemUiWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nconst DATACOLUMN_METADATA = {\n display: { name: 'DataColumn' },\n props: [\n { prop: \"header\", type: \"string\", display: { name: \"Header\" } },\n { prop: \"content\", type: EXPRESSION_METADATA_TYPE, display: { name: \"Content\" }, extra: EXPRESSION_WIDGET_METADATA_EXTRA },\n ]\n};\nconst DATAGRID_METADATA = buildWidgetMetadata({\n display: { icon: 'table_chart', name: 'DataGrid', description: 'DataGrid widget.' },\n props: [{\n prop: 'datasource', type: EXPRESSION_METADATA_TYPE, display: { name: 'Datasource' },\n extra: Utils.extend({}, EXPRESSION_WIDGET_METADATA_EXTRA, { filter: (e) => e instanceof PacemWidgetDataElement || e instanceof PacemWidgetFetchElement })\n },\n {\n prop: 'columns', type: DATACOLUMNS_METADATA_TYPE, display: { name: 'Columns' },\n // this will include 'datasource' as argument in the oneToMany source fn\n extra: { properties: 'datarowMetadata' },\n props: gridifyMetadata(DATACOLUMN_METADATA)\n }]\n});\nconst DATAGRID_HEADING_SEPARATOR = 'pacem-widget-datagrid-heading';\nfunction gridify(columns = []) {\n var output = '';\n for (let column of columns || []) {\n // if empty then 1fr\n const col = column.width || 1;\n if (typeof col === 'number') {\n output += col + 'fr ';\n }\n else {\n output += 'auto ';\n }\n }\n return output;\n}\nfunction datagridFragments(columns = []) {\n const fragHeading = document.createDocumentFragment(), fragBody = document.createDocumentFragment();\n let j = 1;\n for (let col of columns) {\n // heading\n const headcell = document.createElement('div');\n headcell.classList.add(PCSS + '-headcell');\n headcell.textContent = col.header;\n fragHeading.appendChild(headcell);\n // body\n const datacell = new Components.PacemSpanElement();\n datacell.classList.add(PCSS + '-datacell', 'datacell-corners');\n datacell.style.gridColumn = j.toString();\n datacell.setAttribute('css', \"{{ {'grid-row': ^index+2} }}\");\n datacell.setAttribute('content', col.content);\n fragBody.appendChild(datacell);\n j++;\n }\n const datarow = new Components.PacemPanelElement();\n datarow.classList.add(PCSS + '-datarow');\n datarow.setAttribute('css', \"{{ {'grid-row': ^index+2} }}\");\n datarow.setAttribute('css-class', \"{{ {'datarow-alt': ^index % 2 === 1} }}\");\n datarow.style.gridColumn = \"1/\" + (columns.length + 1);\n fragBody.appendChild(datarow);\n return { head: fragHeading, body: fragBody };\n}\nfunction datagridInnerHTML(id, columns = []) {\n const { head, body } = datagridFragments(columns);\n const head0 = document.createElement('div');\n head0.appendChild(head);\n const body0 = document.createElement('div');\n body0.appendChild(body);\n return `<${P}-repeater datasource=\"{{ #${id}.datasource }}\">\n <div class=\"${PCSS}-datatable\" style=\"grid-template-columns: ${gridify(columns)}\">\n ${head0.innerHTML}\n <template>${body0.innerHTML}</template>\n</div></${P}-repeater>`;\n}\nlet PacemWidgetDataGridElement = class PacemWidgetDataGridElement extends PacemUiWidgetElement {\n constructor() {\n super(DATAGRID_METADATA);\n this.columns = [];\n this.datasource = [];\n this.datarowMetadata = [];\n this._builtUponDatasource = false;\n }\n _gridify(columns = this.columns) {\n var output = '';\n for (let column of columns || []) {\n // if empty then 1fr\n const col = column.width || 1;\n if (typeof col === 'number') {\n output += col + 'fr ';\n }\n else {\n output += 'auto ';\n }\n }\n return output;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'columns':\n /*\n *\n * TODO: manage columns separately!\n * Create an ad-hoc editor/formfield and a dedicated form\n *\n * */\n this.innerHTML = datagridInnerHTML(this.id, val);\n break;\n case 'datasource':\n this._extractMetadataJustInCase(val);\n break;\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.innerHTML = datagridInnerHTML(this.id, this.columns);\n }\n _seekArray(ds) {\n if (Utils.isArray(ds)) {\n return ds;\n }\n if (typeof ds === 'object') {\n for (let prop in ds) {\n const arr = this._seekArray(ds[prop]);\n if (!Utils.isNull(arr)) {\n return arr;\n }\n }\n }\n return null;\n }\n _extractMetadataJustInCase(ds = this.datasource) {\n if ((Utils.isNullOrEmpty(this.datarowMetadata) || this._builtUponDatasource) && !Utils.isNullOrEmpty(ds)) {\n const arr = this._seekArray(ds);\n if (!Utils.isNullOrEmpty(arr)) {\n const props = [];\n const item = arr[0];\n for (let prop in item) {\n props.push({ prop, type: typeof item[prop] });\n }\n this.datarowMetadata = props;\n this._builtUponDatasource = true;\n }\n }\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Json })\n], PacemWidgetDataGridElement.prototype, \"columns\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemWidgetDataGridElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemWidgetDataGridElement.prototype, \"datarowMetadata\", void 0);\n__decorate([\n ViewChild(`.${PCSS}-datatable`)\n], PacemWidgetDataGridElement.prototype, \"_datatable\", void 0);\n__decorate([\n ViewChild('template')\n], PacemWidgetDataGridElement.prototype, \"_template\", void 0);\n__decorate([\n ViewChild(P + '-repeater')\n], PacemWidgetDataGridElement.prototype, \"_repeater\", void 0);\nPacemWidgetDataGridElement = __decorate([\n CustomElement({\n tagName: P + '-widget-datagrid'\n })\n], PacemWidgetDataGridElement);\nexport { PacemWidgetDataGridElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, Watch, PropertyConverters, ViewChild, Utils, Components, UI } from '@pacem/pacem-core';\nimport { Components as ScaffoldingComponents } from '@pacem/pacem-scaffolding';\nimport { Functions, EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { EXPRESSION_WIDGET_METADATA_EXTRA, gridifyMetadata } from '../types';\n//namespace Pacem.Components.Cms {\n/** Default metadata ('expression' field) 'type' factory. */\nexport const DATACOLUMNS_METADATA_TYPE = (host, hostRef = ':host', hostEntityRef = ':host.entity') => {\n const attrs = {}, meta = host.metadata, fns = Functions, fnKeys = [];\n attrs['properties'] = `{{ Pacem.CustomElementUtils.getWatchedProperty(${hostEntityRef}, '${meta.prop}').config.converter }}`;\n const tagName = P + '-datacolumns';\n let extra = (meta.extra || {});\n // properties\n if (!Utils.isNullOrEmpty(extra.properties)) {\n switch (typeof extra.properties) {\n case 'string':\n attrs['properties'] = `{{ ${hostEntityRef}.${extra.properties} }}`;\n break;\n case 'function':\n const fnKey = 'fn' + Utils.uniqueCode();\n fns[fnKey] = extra.properties;\n attrs['properties'] = `{{ Pacem.Components.Cms.Functions.${fnKey}(${hostRef}), once }}`;\n // tidy-up memento\n fnKeys.push(fnKey);\n break;\n }\n }\n if (fnKeys.length > 0) {\n // tidy-up\n attrs['on-unload'] = `{{ Pacem.Components.Cms.Functions.dismiss('${fnKeys.join('\\',\\'')}') }}`;\n }\n return { tagName: tagName, attrs: attrs };\n};\nconst DATACOLUMN_METADATA = {\n display: { name: 'Columns' },\n props: [\n { prop: 'header', type: 'string', display: { cssClass: ['form-minimal'], name: 'Header' } },\n {\n prop: 'content', type: EXPRESSION_METADATA_TYPE, display: { name: 'Content' },\n extra: EXPRESSION_WIDGET_METADATA_EXTRA\n }\n ]\n};\nlet PacemDataColumnElement = class PacemDataColumnElement extends Components.PacemElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'content':\n this.contentExpression = val;\n break;\n case 'contentExpression':\n this.setAttribute('content', val || '');\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._form.entity = this;\n this._form.metadata = gridifyMetadata(DATACOLUMN_METADATA);\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemDataColumnElement.prototype, \"header\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemDataColumnElement.prototype, \"content\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemDataColumnElement.prototype, \"contentExpression\", void 0);\n__decorate([\n ViewChild(P + '-form')\n], PacemDataColumnElement.prototype, \"_form\", void 0);\nPacemDataColumnElement = __decorate([\n CustomElement({\n tagName: P + '-widget-datacolumn', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-form class=\"panel-body\" autogenerate=\"true\"></${P}-form>`\n })\n], PacemDataColumnElement);\nexport { PacemDataColumnElement };\nlet PacemDataColumnsElement = class PacemDataColumnsElement extends ScaffoldingComponents.Scaffolding.PacemBaseElement {\n constructor() {\n super(...arguments);\n this._dropHandler = (e) => {\n this.changeHandler(e);\n };\n this._columnifyMetadata = (props = this.properties) => {\n return (props || []).map(p => {\n const header = typeof p.display?.name === 'function' ? /* NOT supported */ p.prop : (p.display?.name || p.prop);\n const c = {\n header,\n content: `{{ ^item.${p.prop} }}`\n };\n return c;\n }).sort((a, b) => a.header > b.header ? 1 : -1);\n };\n }\n get inputFields() {\n return [];\n }\n toggleReadonlyView(readonly) {\n // leave it all to the template bindings\n }\n onChange(evt) {\n return Utils.fromResult(this.value = this._repeater.datasource);\n }\n acceptValue(val) {\n if (!Utils.isNull(this._repeater)) {\n this._repeater.datasource = Utils.clone(val || []);\n }\n }\n getViewValue(value) {\n return /* dummy */ '[DataColumns]';\n }\n convertValueAttributeToProperty(attr) {\n return PropertyConverters.Json.convert(attr, this);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._propDragger.addEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n this._colDragger.addEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n }\n disconnectedCallback() {\n if (!Utils.isNull(this._propDragger)) {\n this._propDragger.removeEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n }\n if (!Utils.isNull(this._colDragger)) {\n this._colDragger.removeEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n }\n super.disconnectedCallback();\n }\n};\n__decorate([\n ViewChild(`${P}-repeater[columns]`)\n], PacemDataColumnsElement.prototype, \"_repeater\", void 0);\n__decorate([\n ViewChild(`${P}-drag-drop[properties]`)\n], PacemDataColumnsElement.prototype, \"_propDragger\", void 0);\n__decorate([\n ViewChild(`${P}-drag-drop[columns]`)\n], PacemDataColumnsElement.prototype, \"_colDragger\", void 0);\n__decorate([\n ViewChild('div[drop-target]')\n], PacemDataColumnsElement.prototype, \"_dropTarget\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemDataColumnsElement.prototype, \"properties\", void 0);\nPacemDataColumnsElement = __decorate([\n CustomElement({\n tagName: P + '-widget-datacolumns', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<div class=\"${PCSS}-datacolumns\">\n <div class=\"datacolumns-main display-flex flex-fill\">\n\n <${P}-drag-drop mode=\"${UI.DragDataMode.Alias}\" disabled=\"{{ :host.readonly }}\" handle-selector=\"*[handle]\"\n drop-behavior=\"${UI.DropBehavior.InsertChild}\" drop-targets=\"{{ [::_dropTarget] }}\" columns></${P}-drag-drop>\n <${P}-repeater class=\"display-flex flex-fill\" columns>\n <!-- columns -->\n <div class=\"display-flex flex-nowrap\" drop-target>\n <template>\n <${P}-panel behaviors=\"{{ [::_colDragger] }}\">\n <div class=\"${PCSS}-panel panel-side-left side-auto\">\n <div class=\"panel-side\">\n <${P}-button class=\"display-block button-flat icon-glyph-small\" icon-glyph=\"drag_indicator\" handle></${P}-button>\n <${P}-button class=\"display-block button-flat icon-glyph-small\" on-click=\":host.value.splice(^index, 1)\" icon-glyph=\"clear\"></${P}-button>\n </div>\n <div class=\"panel-heading\">\n <${P}-text text=\"{{ ^item.header }}\"></${P}-text>\n </div>\n <${P}-widget-datacolumn class=\"panel-body\" header=\"{{ ^item.header, twoway }}\" content-expression=\"{{ ^item.content, twoway }}\"></${P}-widget-datacolumn>\n </div>\n </${P}-panel>\n </template>\n </div>\n </${P}-repeater>\n\n </div>\n <${P}-panel class=\"datacolumns-props\" hide=\"{{ :host.readonly }}\">\n <${P}-drag-drop mode=\"${UI.DragDataMode.Copy}\" disabled=\"{{ :host.readonly }}\" handle-selector=\"*[handle]\"\n drop-behavior=\"${UI.DropBehavior.InsertChild}\" drop-targets=\"{{ [::_dropTarget] }}\" properties></${P}-drag-drop>\n <${P}-repeater datasource=\"{{ :host._columnifyMetadata(:host.properties) }}\">\n <!-- properties -->\n <template>\n <${P}-panel behaviors=\"{{ [::_propDragger] }}\" class=\"${PCSS}-panel panel-side-left side-auto panel-primary panel-filled ${PCSS}-margin margin-bottom-1\">\n <div class=\"panel-side\">\n <${P}-button class=\"display-block button-flat icon-glyph-small\" icon-glyph=\"drag_indicator\" handle></${P}-button>\n </div>\n <div class=\"text-truncate panel-body\">\n <${P}-span text=\"{{ ^item.header }}\"></${P}-span>\n </div>\n </${P}-panel>\n </template>\n </${P}-repeater>\n </${P}-panel>\n</div>`\n })\n], PacemDataColumnsElement);\nexport { PacemDataColumnsElement };\n", "export * from './types';\nexport * as OpenApi from './openapi/swagger-cms';\nexport * from './widgets/scaffolding/datacolumns';\n", "import { Utils } from '@pacem/pacem-core';\nexport const PermissionEditEventName = 'permissionedit';\nexport class PermissionEditEvent extends CustomEvent {\n constructor(permissible) {\n super(PermissionEditEventName, { detail: permissible, cancelable: false, bubbles: true });\n }\n}\nexport class Permissible {\n static canEdit(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.update); }\n static canRead(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.read); }\n static canAdd(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.create); }\n static canDelete(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.delete); }\n static canTranslate(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.translate); }\n static _canDoSomethingToResource(claims, resource, predicate) {\n if (Utils.isNullOrEmpty(claims) || Utils.isNull(resource)) {\n return false;\n }\n // if no permissions are set, then you're free to go!\n var editable = true;\n if (resource.permissions && resource.permissions.length > 0) {\n // check correspondence otherwise\n editable = false;\n for (let permission of resource.permissions) {\n if (predicate(permission) && claims[permission.claimType] && claims[permission.claimType].indexOf(permission.claimValue) >= 0) {\n return true;\n }\n }\n }\n // return\n return editable;\n }\n}\n"],
4
+ "sourcesContent": ["export * from './scaffolding/types';\nexport * from './scaffolding/element-picker';\nexport * from './scaffolding/expression';\nexport * from './widgets/types';\nexport * from './widgets/helpers/types';\nexport * from './widgets/helpers/translator';\nexport * from './widgets/helpers/data';\nexport * from './widgets/helpers/clock';\nexport * from './widgets/helpers/apimanifest';\nexport * from './widgets/helpers/fetcher';\nexport * from './widgets/ui/types';\nexport * from './widgets/ui/text';\nexport * from './widgets/ui/composite/picker';\nexport * from './widgets/ui/composite/grid';\nexport * from './widgets/ui/dataviz/datagrid';\nexport * from './widgets/scaffolding/datacolumns';\n", "import { PropertyChangeEventName, Utils, CustomElementUtils, P } from '@pacem/pacem-core';\n//namespace Pacem.Components.Cms {\n/** Function container proxy (used in metadata) */\nexport const Functions = {\n 'dismiss': (...args) => {\n for (let name of args || []) {\n delete Functions[name];\n }\n },\n 'handleExpressionValueChange': (evt, prop, entity) => {\n if (evt.detail.propertyName === 'value' && !Utils.isNull(entity)) {\n const value = evt.detail.currentValue;\n if (entity instanceof HTMLElement) {\n // handle the entity as an element and modify the attribute\n let attr = CustomElementUtils.camelToKebab(prop);\n if (Utils.isNullOrEmpty(value)) {\n entity.removeAttribute(attr);\n }\n else {\n entity.setAttribute(attr, value.toString());\n }\n }\n else {\n entity[prop] = value;\n }\n }\n }\n};\n/** Default metadata ('expression' field) 'type' factory. */\nexport const EXPRESSION_METADATA_TYPE = (host, hostRef = ':host', hostEntityRef = ':host.entity') => {\n const attrs = {}, meta = host.metadata, fns = Functions, fnKeys = [];\n attrs['value'] = `{{ ${hostEntityRef} instanceof HTMLElement && ${hostEntityRef}.getAttribute('${CustomElementUtils.camelToKebab(meta.prop)}') }}`;\n attrs['on-' + PropertyChangeEventName] = `Pacem.Components.Cms.Functions.handleExpressionValueChange($event, '${meta.prop}', ${hostEntityRef})`;\n attrs['converter'] = `{{ Pacem.CustomElementUtils.getWatchedProperty(${hostEntityRef}, '${meta.prop}').config.converter }}`;\n const tagName = P + '-expression';\n let extra = (meta.extra || {});\n // selector\n if (!Utils.isNullOrEmpty(extra.selector)) {\n attrs['selector'] = extra.selector;\n }\n // filters to the selector\n if (!Utils.isNullOrEmpty(extra.filter)) {\n switch (typeof extra.filter) {\n case 'string':\n attrs['filter'] = `{{ (e) => e.constructor.name === \"${extra.filter}\" || e.localName === \"${extra.filter.toLowerCase()}\" }}`;\n break;\n case 'function':\n const fnKey = 'fn' + Utils.uniqueCode();\n fns[fnKey] = extra.filter;\n attrs['filter'] = `{{ Pacem.Components.Cms.Functions.${fnKey}, once }}`;\n // tidy-up memento\n fnKeys.push(fnKey);\n break;\n }\n }\n // labeler\n if (typeof extra.labeler === 'function') {\n const fnKey = 'fn' + Utils.uniqueCode();\n fns[fnKey] = extra.labeler;\n attrs['labeler'] = `{{ Pacem.Components.Cms.Functions.${fnKey}, once }}`;\n // tidy-up memento\n fnKeys.push(fnKey);\n }\n if (fnKeys.length > 0) {\n // tidy-up\n attrs['on-unload'] = `{{ Pacem.Components.Cms.Functions.dismiss('${fnKeys.join('\\',\\'')}') }}`;\n }\n return { tagName: tagName, attrs: attrs };\n};\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Defaults, Watch, PropertyConverters, ViewChild, Debounce, Utils } from '@pacem/pacem-core';\nimport { Components as ScaffoldingComponents } from '@pacem/pacem-scaffolding';\n//namespace Pacem.Components.Cms {\nexport class PacemElementPickerElementBase extends ScaffoldingComponents.Scaffolding.PacemBaseElement {\n}\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemElementPickerElementBase.prototype, \"selector\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Eval })\n], PacemElementPickerElementBase.prototype, \"filter\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Eval })\n], PacemElementPickerElementBase.prototype, \"labeler\", void 0);\nlet PacemElementPickerElement = class PacemElementPickerElement extends PacemElementPickerElementBase {\n get inputFields() {\n return [this._select];\n }\n toggleReadonlyView(readonly) {\n this._select.readonly = readonly;\n }\n onChange(_) {\n return Utils.fromResult(this.value = this._select.value);\n }\n acceptValue(val) {\n this._select.value = val;\n }\n getViewValue(value) {\n return this._select.viewValue;\n }\n convertValueAttributeToProperty(attr) {\n return PropertyConverters.Element.convert(attr);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._databind();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'selector':\n case 'filter':\n case 'labeler':\n this._databind();\n break;\n }\n }\n }\n _databind() {\n const project = this.labeler || (e => {\n let label = e.constructor.name;\n if (e.id) {\n label += '#' + e.id;\n }\n return label;\n });\n const retval = [];\n document.querySelectorAll(this.selector || '[pacem]').forEach((e, i, arr) => {\n if ((Utils.isNull(this.filter) || this.filter(e) === true)\n // let' say 'id' is a must-have...\n && !Utils.isNullOrEmpty(e.id)) {\n retval.push({ element: e, label: project(e) });\n }\n });\n this._select.valueProperty = 'element';\n this._select.textProperty = 'label';\n this._select.datasource = retval;\n }\n};\n__decorate([\n ViewChild(P + '-select')\n], PacemElementPickerElement.prototype, \"_select\", void 0);\n__decorate([\n Debounce(50)\n], PacemElementPickerElement.prototype, \"_databind\", null);\nPacemElementPickerElement = __decorate([\n CustomElement({\n tagName: P + '-element-picker', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-select></${P}-select>`\n })\n], PacemElementPickerElement);\nexport { PacemElementPickerElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, Watch, PropertyConverters, ViewChild, Debounce, Utils, CustomElementUtils, RepeaterItem } from '@pacem/pacem-core';\nimport { Components as ScaffoldingComponents } from '@pacem/pacem-scaffolding';\nimport { PacemElementPickerElementBase } from './element-picker';\n//namespace Pacem.Components.Cms {\nexport var ExpressionSource;\n(function (ExpressionSource) {\n ExpressionSource[\"Constant\"] = \"const\";\n ExpressionSource[\"PropertyReference\"] = \"property\";\n ExpressionSource[\"Expression\"] = \"expr\";\n})(ExpressionSource || (ExpressionSource = {}));\nlet PacemExpressionElement = class PacemExpressionElement extends PacemElementPickerElementBase {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'converter') {\n this._setFeedbackText(this.value);\n }\n else if (!first) {\n if (this._editing) {\n switch (name) {\n case '_source':\n switch (val) {\n case ExpressionSource.PropertyReference:\n this._picker.focus();\n break;\n default:\n this._editor.focus();\n break;\n }\n break;\n case '_propRef':\n if (!Utils.isNullOrEmpty(val)) {\n this._editor.focus();\n this._editor.value = '{{ #' + this._sourceRef.id + '.' + val + ' }}';\n }\n this.changeHandler(new Event('change'));\n break;\n }\n }\n }\n }\n get inputFields() {\n return [this._editor];\n }\n toggleReadonlyView(readonly) {\n if (readonly) {\n // ensure not editing\n this._editing = false;\n }\n }\n setPristine() {\n super.setPristine();\n this._editing = false;\n }\n onChange(_) {\n return Utils.fromResult(this.value = this._editor.value);\n }\n acceptValue(val) {\n this._view.textContent = val || '...';\n this._setFeedbackText(val);\n this._reverseStructure();\n if (val !== this._editor.value) {\n this._editor.value = val;\n }\n }\n _setFeedbackText(val = this.value) {\n const converter = this.converter;\n if (CustomElementUtils.isBindingAttribute(val) || typeof (converter && converter.convert) !== 'function') {\n this._eval.setAttribute('text', val);\n }\n else if (val === undefined) {\n this._eval.text = '<undefined>';\n }\n else {\n this._eval.text = converter.convert(val);\n }\n }\n getViewValue(value) {\n return value;\n }\n convertValueAttributeToProperty(attr) {\n return attr;\n }\n _reverseStructure() {\n let cleanup = () => {\n this._source = this._sourceRef = this._propRef = /*this.value =*/ undefined;\n };\n // dependencies?\n let expr = this.value;\n if (!Utils.isNullOrEmpty(expr)) {\n // setup the most likely form fields\n if (CustomElementUtils.isBindingAttribute(expr)) {\n const expression = CustomElementUtils.parseBindingAttribute(expr, this), deps = expression.dependencies;\n // complex or simple (one dependency) expression\n if (Utils.isNullOrEmpty(deps) || deps.length > 1 || RepeaterItem.isRepeaterItem(deps[0].element)) {\n this._source = ExpressionSource.Expression;\n }\n else {\n const dep = deps[0];\n this._source = ExpressionSource.PropertyReference;\n this._sourceRef = document.querySelector('#' + dep.element.id);\n this._propRef = dep.path;\n }\n }\n else {\n this._source = ExpressionSource.Constant;\n }\n //\n }\n else {\n cleanup();\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], PacemExpressionElement.prototype, \"converter\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemExpressionElement.prototype, \"_editing\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemExpressionElement.prototype, \"_source\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemExpressionElement.prototype, \"_sourceRef\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemExpressionElement.prototype, \"_propRef\", void 0);\n__decorate([\n ViewChild(P + '-element-picker')\n], PacemExpressionElement.prototype, \"_picker\", void 0);\n__decorate([\n ViewChild(P + '-textarea')\n], PacemExpressionElement.prototype, \"_editor\", void 0);\n__decorate([\n ViewChild('span.' + PCSS + '-viewfinder')\n], PacemExpressionElement.prototype, \"_view\", void 0);\n__decorate([\n ViewChild(P + '-text')\n], PacemExpressionElement.prototype, \"_eval\", void 0);\n__decorate([\n Debounce(50)\n], PacemExpressionElement.prototype, \"_reverseStructure\", null);\nPacemExpressionElement = __decorate([\n CustomElement({\n tagName: P + '-expression', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-collapse class=\"${PCSS}-expression\" collapse=\"{{ !:host._editing }}\">\r\n <div class=\"expression-builder ${PCSS}-grid grid-tiny-rowgap grid-tiny-colgap ${PCSS}-pad pad-bottom-2\">\r\n <div class=\"${PCSS}-cell\">\r\n <${P}-select value=\"{{ :host._source, twoway }}\" class=\"display-block\">\r\n <${P}-data-item value=\"${ExpressionSource.Constant}\" label=\"constant value\"></${P}-data-item>\r\n <${P}-data-item value=\"${ExpressionSource.PropertyReference}\" label=\"property reference\"></${P}-data-item>\r\n <${P}-data-item value=\"${ExpressionSource.Expression}\" label=\"complex expression\"></${P}-data-item>\r\n </${P}-select>\r\n </div>\r\n\r\n <${P}-panel class=\"${PCSS}-cell cols-hd-6\" hide=\"{{ :host._source !== '${ExpressionSource.PropertyReference}' }}\">\r\n <${P}-element-picker value=\"{{ :host._sourceRef, twoway }}\" selector=\"{{ :host.selector }}\" filter=\"{{ :host.filter }}\" labeler=\"{{ :host.labeler }}\" class=\"display-block\"></${P}-element-picker>\r\n </${P}-panel>\r\n <${P}-panel class=\"${PCSS}-cell cols-hd-6\" hide=\"{{ :host._source !== '${ExpressionSource.PropertyReference}' }}\">\r\n <${P}-property-picker value=\"{{ :host._propRef, twoway }}\" disabled=\"{{ !:host._sourceRef }}\" target=\"{{ :host._sourceRef }}\" on-change=\"::_editor.focus()\" class=\"display-block\"></${P}-property-picker>\r\n </${P}-panel>\r\n\r\n <${P}-panel class=\"${PCSS}-cell\">\r\n <${P}-textarea class=\"display-block\" placeholder=\"{{ '{{ '+ (:host._source || '') +'... }}' }}\" change-policy=\"${ScaffoldingComponents.Scaffolding.ChangePolicy.Blur}\"></${P}-textarea>\r\n </${P}-panel>\r\n </div>\r\n</${P}-collapse>\r\n<div class=\"${PCSS}-fieldset\">\r\n <div class=\"fieldset-left\">\r\n <div class=\"${PCSS}-fieldgroup ${PCSS}-viewfinder\">\r\n <div class=\"text-truncate ${PCSS}-pad pad-x-1\"><span class=\"${PCSS}-viewfinder text-tech\">{{ :host.value || '...' }}</span></div>\r\n <${P}-panel class=\"fieldgroup-prepend\">\r\n <${P}-button class=\"flat edit ${PCSS}-pad pad-left-1\" on-click=\":host._editing = !:host._editing\" hide=\"{{ :host.readonly }}\"></${P}-button>\r\n </${P}-panel>\r\n <${P}-panel class=\"fieldgroup-append text-tech display-flex flex-middle flex-nowrap\" hide=\"{{ $pacem.isNullOrEmpty(:host.value) }}\">\r\n <i class=\"${PCSS}-icon text-primary\">keyboard_arrow_right</i>\r\n <${P}-text text=\"?\" class=\"bg-primary ${PCSS}-pad pad-left-1 pad-right-1 ${PCSS}-margin margin-right-1 text-truncate\" eval></${P}-text>\r\n </${P}-panel>\r\n </div>\r\n </div>\r\n</div>`\n })\n], PacemExpressionElement);\nexport { PacemExpressionElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, Watch, PropertyConverters, ViewChild, Utils, CustomElementUtils, Components } from '@pacem/pacem-core';\nimport { Components as UIComponents } from '@pacem/pacem-ui';\nconst UI = UIComponents.UI;\n//namespace Pacem.Components.Cms {\nconst DEFAULT_PERMISSION_METADATA = {\n props: [\n {\n prop: 'permissions',\n // child form-fields\n type: 'array',\n display: { name: 'Permissions' },\n props: {\n display: { cssClass: [PCSS + '-cell', PCSS + '-grid', 'grid-novgap', 'grid-tiny-colgap', 'grid-nospace'], name: 'Permission' },\n props: Array.prototype.concat.apply([\n {\n prop: 'claimType', type: 'string',\n display: { cssClass: [PCSS + '-cell', 'cols-hd-4', 'cols-lg-6', 'field-stretch', 'field-minimal'], name: 'Claim type' },\n validators: [{ type: 'required', errorMessage: '!' }]\n },\n {\n prop: 'claimValue', type: 'string',\n display: { cssClass: [PCSS + '-cell', 'cols-hd-4', 'cols-lg-6', 'field-stretch', 'field-minimal'], name: 'Claim value' },\n validators: [{ type: 'required', errorMessage: '!' }]\n },\n ], ['read', 'update', 'create', 'delete'].map((p, j) => {\n return {\n prop: p,\n type: 'boolean',\n display: { cssClass: [PCSS + '-cell', 'cols-hd-1', 'cols-3', 'field-minimal', PCSS + '-pad pad-left-2'], name: p.charAt(0).toUpperCase() + p.substr(1) }\n };\n }))\n }\n }\n ]\n};\nexport const DEFAULT_METADATA = {\n display: { name: 'Widget', cssClass: [PCSS + '-grid', 'grid-novgap', 'grid-tiny-colgap', 'grid-nospace'] },\n props: [\n { prop: 'tag', type: 'string', display: { name: 'Tag', cssClass: [PCSS + '-cell'] } }\n ]\n};\nfunction cellifyMetadata(p) {\n // ensure pacem-cell cssClass\n p.display = p.display || { name: p.prop, cssClass: [] };\n const css = p.display.cssClass = Utils.isArray(p.display.cssClass) && p.display.cssClass || [];\n css.push(PCSS + '-cell');\n}\nexport function gridifyMetadata(metadata) {\n var props = metadata && metadata.props || [];\n var display = metadata && metadata.display || { name: 'Element' };\n if (!Utils.isNull(display)) {\n const css = display.cssClass = display.cssClass || [];\n Array.prototype.push.apply(css, DEFAULT_METADATA.display.cssClass);\n }\n props.forEach(cellifyMetadata);\n return { display: display, props: props };\n}\nexport function buildWidgetMetadata(metadata) {\n var display = Utils.extend({}, DEFAULT_METADATA.display, metadata && metadata.display || {});\n var props = Utils.clone(DEFAULT_METADATA.props);\n Array.prototype.push.apply(props, (metadata && metadata.props || []).filter(p => {\n if (p.prop === 'tag') {\n return false;\n }\n cellifyMetadata(p);\n return true;\n }));\n return { display: display, props: props };\n}\nconst WIDGET_CSS_CLASS = PCSS + '-widget';\n/** Default metadata ('expression' field) 'extra' object. */\nexport const EXPRESSION_WIDGET_METADATA_EXTRA = {\n selector: '.' + WIDGET_CSS_CLASS,\n labeler: (e) => {\n if (!Utils.isNullOrEmpty(e.tag)) {\n return e.tag;\n }\n return (e.metadata && e.metadata.display && e.metadata.display.name || '') + '#' + e.id;\n }\n};\nexport class Widget {\n /**\n * Utility method for widget gathering.\n * @param predicate Predicate for filtering\n */\n static findAll(predicate) {\n return CustomElementUtils.findAll('.' + WIDGET_CSS_CLASS, (widget) => widget instanceof PacemWidgetElement && !Utils.isNullOrEmpty(widget.id) && (Utils.isNull(predicate) || predicate(widget)));\n }\n}\nlet PacemWidgetToolbarElement = class PacemWidgetToolbarElement extends Components.PacemElement {\n /** Gets the toolbar's edit button. */\n get editButton() {\n return this._btnEdit;\n }\n /** Gets the toolbar's permimssions button. */\n get permissionsButton() {\n return this._btnPerms;\n }\n /** Gets the toolbar's remove button. */\n get removeButton() {\n return this._btnRemove;\n }\n _edit(evt) {\n const form = this._proxy.dom.find(e => 'core' in e.attributes);\n form.open(this.target, true);\n form.metadata = this.target.metadata;\n // popout\n this._popoutJustInCase();\n }\n _editPermissions(evt) {\n const form = this._proxy.dom.find(e => 'permissions' in e.attributes);\n form.open(this.target);\n form.metadata = this.target.permissionMetadata;\n // popout\n this._popoutJustInCase();\n }\n _popoutJustInCase() {\n const balloon = CustomElementUtils.findAncestorOfType(this, UI.PacemBalloonElement);\n if (!Utils.isNullOrEmpty(balloon)) {\n balloon.popout();\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Element })\n], PacemWidgetToolbarElement.prototype, \"target\", void 0);\n__decorate([\n ViewChild('.buttons > div')\n], PacemWidgetToolbarElement.prototype, \"_toolbar\", void 0);\n__decorate([\n ViewChild(P + '-button[edit]')\n], PacemWidgetToolbarElement.prototype, \"_btnEdit\", void 0);\n__decorate([\n ViewChild(P + '-button[permissions]')\n], PacemWidgetToolbarElement.prototype, \"_btnPerms\", void 0);\n__decorate([\n ViewChild(P + '-button[remove]')\n], PacemWidgetToolbarElement.prototype, \"_btnRemove\", void 0);\n__decorate([\n ViewChild(P + '-shell-proxy')\n], PacemWidgetToolbarElement.prototype, \"_proxy\", void 0);\nPacemWidgetToolbarElement = __decorate([\n CustomElement({\n tagName: P + '-widget-toolbar', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-span class=\"toolbar-text\" content=\"{{ '<i class=&quot;${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) }}\"></${P}-span>\r\n<div class=\"buttons ${PCSS}-buttonset ${PCSS}-pad ${PCSS}-margin pad-0 margin-left-2\">\r\n <div class=\"buttonset-left\">\r\n <${P}-button edit class=\"button edit\" on-click=\":host._edit($event)\"></${P}-button>\r\n <${P}-button permissions class=\"button\" on-click=\":host._editPermissions($event)\" css-class=\"{{ {'button-success': ::target.permissions.length > 0} }}\" icon-glyph=\"verified_user\"></${P}-button>\r\n <${P}-button remove class=\"button button-danger delete\"></${P}-button>\r\n </div>\r\n<div>\r\n<${P}-shell-proxy>\r\n <${P}-modal-form core></${P}-modal-form>\r\n <${P}-modal-form permissions></${P}-modal-form>\r\n</${P}-shell-proxy>`\n })\n], PacemWidgetToolbarElement);\nexport { PacemWidgetToolbarElement };\nexport class PacemWidgetElement extends Components.PacemElement {\n constructor(metadata, role = 'widget') {\n super(role);\n this.permissionMetadata = DEFAULT_PERMISSION_METADATA;\n this.metadata = metadata;\n }\n connectedCallback() {\n super.connectedCallback();\n // ensure an explicit id for each widget\n if (Utils.isNullOrEmpty(this.id)) {\n this.id = 'wdg' + Utils.uniqueCode();\n }\n Utils.addClass(this, WIDGET_CSS_CLASS);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'editable':\n if (!val) {\n this._disposeBalloon();\n }\n else if (this.isReady) {\n this._ensureBalloon();\n }\n break;\n case 'editing':\n if (!Utils.isNull(this._balloon)) {\n this._balloon.disabled = !val;\n }\n (val ? Utils.addClass : Utils.removeClass).apply(this, [this, 'widget-' + name]);\n break;\n case 'metadata':\n this._assignIcon(val);\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._assignIcon();\n this._ensureBalloon();\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n }\n _assignIcon(val = this.metadata) {\n this.dataset['icon'] = (val && val.display && val.display.icon) || 'widgets';\n }\n _ensureBalloon() {\n if (Utils.isNull(this._balloon)) {\n const balloon = this._balloon = document.createElement(P + '-balloon');\n balloon.target = this;\n balloon.disabled = !this.editing;\n balloon.options = {\n behavior: UI.BalloonBehavior.Menu,\n trigger: UI.BalloonTrigger.Hover\n };\n // innerHTML before appending the balloon to the DOM.\n balloon.innerHTML = `<${P}-widget-toolbar target=\"{{ #${this.id} }}\"><${P}-widget-toolbar>`;\n // append to trigger connected/viewActivated callbacks\n CustomElementUtils.findAncestorShell(this).appendChild(balloon);\n }\n }\n _disposeBalloon() {\n if (!Utils.isNull(this._balloon)) {\n this._balloon.remove();\n this._balloon = null;\n }\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PacemWidgetElement.prototype, \"editing\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PacemWidgetElement.prototype, \"editable\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetElement.prototype, \"tag\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Json })\n], PacemWidgetElement.prototype, \"permissions\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemWidgetElement.prototype, \"metadata\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemWidgetElement.prototype, \"permissionMetadata\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { PacemWidgetElement, EXPRESSION_WIDGET_METADATA_EXTRA } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { PacemWidgetDataElement } from './data';\nimport { PacemWidgetFetchElement } from './fetcher';\n//namespace Pacem.Components.Cms {\nexport const FETCH_CREDENTIALS_METADATA = {\n prop: 'fetchCredentials', type: 'string', dataType: 'enumeration', display: { name: 'Fetch Credentials' }, extra: {\n enum: ['same-origin', 'omit', 'include']\n }\n};\nexport const ACCESS_TOKEN_METADATA = {\n prop: 'accessToken', type: EXPRESSION_METADATA_TYPE, display: { name: 'Access Token' },\n extra: Utils.extend({}, EXPRESSION_WIDGET_METADATA_EXTRA, { filter: (e) => e instanceof PacemWidgetDataElement || e instanceof PacemWidgetFetchElement })\n};\nexport class PacemBearerWidgetElement extends PacemWidgetElement {\n constructor() {\n super(...arguments);\n this.fetchCredentials = 'same-origin';\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'accessToken') {\n if (!Utils.isNullOrEmpty(val)) {\n this.fetchHeaders = { 'Authorization': 'Bearer ' + val };\n }\n else {\n this.fetchHeaders = {};\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemBearerWidgetElement.prototype, \"fetchCredentials\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemBearerWidgetElement.prototype, \"fetchHeaders\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemBearerWidgetElement.prototype, \"accessToken\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemBearerWidgetElement.prototype, \"fetching\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { PacemWidgetElement, buildWidgetMetadata } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\n//namespace Pacem.Components.Cms {\nconst DATA_METADATA = {\n display: { icon: 'storage', name: 'Data', description: 'Data object widget.' },\n props: [\n {\n prop: 'model', type: EXPRESSION_METADATA_TYPE, display: {\n name: 'Model'\n }, extra: {\n selector: '.' + PCSS + '-widget'\n }\n }\n ]\n};\nlet PacemWidgetDataElement = class PacemWidgetDataElement extends PacemWidgetElement {\n constructor() {\n super(buildWidgetMetadata(DATA_METADATA));\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Json })\n], PacemWidgetDataElement.prototype, \"model\", void 0);\nPacemWidgetDataElement = __decorate([\n CustomElement({\n tagName: P + '-widget-data'\n })\n], PacemWidgetDataElement);\nexport { PacemWidgetDataElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Defaults, Watch, PropertyConverters, ViewChild, Utils, CustomElementUtils, PacemEventTarget, Net } from '@pacem/pacem-core';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { buildWidgetMetadata, gridifyMetadata } from '../types';\nimport { PacemBearerWidgetElement, ACCESS_TOKEN_METADATA } from './types';\n//namespace Pacem.Components.Cms {\nconst FETCH_PARAMETER_METADATA = {\n props: [\n { prop: 'name', type: 'string', isReadOnly: true, display: { name: 'Name', cssClass: ['cols-md-4', 'cols-lg-3', 'cols-hd-2'] } },\n { prop: 'value', type: EXPRESSION_METADATA_TYPE, display: { name: 'Value', cssClass: ['cols-md-8', 'cols-lg-9', 'cols-hd-10'] } }\n ]\n};\nconst FETCH_METADATA = {\n display: {\n icon: 'wifi', name: 'Api Fetcher', description: 'Fetching widget that retrieves data from a REST endpoint.'\n }, props: [\n {\n prop: 'manifest', type: EXPRESSION_METADATA_TYPE, isComplexType: true, display: {\n name: 'Api Manifest'\n }, extra: {\n selector: P + '-widget-apimanifest'\n }, validators: [{ type: 'required', errorMessage: 'Api Manifest is a required field.' }]\n },\n {\n prop: 'endpoint', type: 'object', isComplexType: true, display: {\n name: 'Endpoint', ui: 'oneToMany'\n }, validators: [{ type: 'required', errorMessage: 'Api Manifest is a required field.' }],\n extra: {\n source: (manifest) => manifest.endpoints.map(e => Utils.extend(e, { 'fullPath': `[${e.method.toUpperCase()}] ${e.path}` })).sort(),\n textProperty: 'fullPath', valueProperty: 'fullPath',\n dependsOn: [{ prop: 'manifest', hide: true }]\n }\n },\n {\n prop: 'parameters', type: 'array', display: {\n name: 'Parameters'\n },\n props: gridifyMetadata(FETCH_PARAMETER_METADATA),\n extra: {\n lockItems: true,\n dependsOn: [{ prop: 'endpoint', hide: true }]\n }\n },\n ACCESS_TOKEN_METADATA\n ]\n};\nconst PARAMETER_TAGNAME = P + '-widget-fetch-parameter';\nlet PacemWidgetFetchParameterElement = class PacemWidgetFetchParameterElement extends PacemEventTarget {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val.first);\n if (name === 'value' && !Utils.isNull(this._fetcher)) {\n this._fetcher.fetch();\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const fetcher = this._fetcher = CustomElementUtils.findAncestorOfType(this, PacemWidgetFetchElement);\n if (!Utils.isNull(this._fetcher) && !Utils.isNull(this.value)) {\n this._fetcher.fetch();\n }\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemWidgetFetchParameterElement.prototype, \"required\", void 0);\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetFetchParameterElement.prototype, \"name\", void 0);\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetFetchParameterElement.prototype, \"value\", void 0);\nPacemWidgetFetchParameterElement = __decorate([\n CustomElement({ tagName: PARAMETER_TAGNAME })\n], PacemWidgetFetchParameterElement);\nexport { PacemWidgetFetchParameterElement };\nlet PacemWidgetFetchElement = class PacemWidgetFetchElement extends PacemBearerWidgetElement {\n constructor() {\n super(buildWidgetMetadata(FETCH_METADATA));\n this._onerror = (e) => {\n this.failure = !(this.success = false);\n };\n this._onsuccess = (e) => {\n this.failure = !(this.success = true);\n };\n this._onresult = (e) => {\n this.result = e.detail;\n };\n }\n get _parameters() {\n return Array.from(this._itemsElement.children).filter(e => e.localName === PARAMETER_TAGNAME);\n }\n fetch() {\n const fetcher = this._fetcher, parameters = this._parameters || [], endpoint = this.endpoint;\n if (!Utils.isNull(endpoint)) {\n for (let param of endpoint.parameters) {\n if (param.required && Utils.isNull(parameters.find(p => p.name === param.name))) {\n // parameters not yet aligned with the ref endpoint:\n // not all the required parameters are attached => exit\n return;\n }\n }\n }\n // build-up fetch params\n const params = {};\n for (let parameter of parameters) {\n if (!Utils.isNullOrEmpty(parameter.value)) {\n params[parameter.name] = parameter.value;\n }\n else if (parameter.required) {\n // found an empty (required) parameter => exit\n return;\n }\n }\n fetcher.url = this.url;\n fetcher.method = this.method;\n fetcher.credentials = this.fetchCredentials;\n fetcher.headers = this.fetchHeaders;\n fetcher.parameters = params;\n return fetcher.fetch();\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.fetch();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'endpoint' && !Utils.isNullOrEmpty(val)) {\n this._mergeEndpoint(val);\n }\n else\n switch (name) {\n case 'parameters':\n case 'fetchHeaders':\n case 'fetchCredentials':\n case 'url':\n case 'method':\n this.fetch();\n break;\n }\n }\n _mergeEndpoint(endpoint = this.endpoint) {\n this.url = this.manifest.baseUrl + endpoint.path;\n this.method = endpoint.method;\n this.fields = endpoint.response.fields;\n const itemsElement = this._itemsElement, parameters = this._parameters;\n // remove exceeding\n for (let j = parameters.length - 1; j >= 0; j--) {\n let item = parameters[j];\n let matching = endpoint.parameters.find(p => p.name === item.name);\n if (Utils.isNull(matching)) {\n item.remove();\n }\n }\n // add missing\n for (let param of endpoint.parameters) {\n let existing = parameters.find(p => p.name === param.name);\n if (Utils.isNull(existing)) {\n let item = existing = document.createElement(PARAMETER_TAGNAME);\n item.name = param.name;\n itemsElement.appendChild(item);\n }\n existing.required = param.required;\n }\n // for editing sake\n this.parameters = parameters;\n }\n};\n__decorate([\n Watch({ reflectBack: true, emit: true /* < due to metadata 'dependsOn' */, converter: PropertyConverters.Json })\n], PacemWidgetFetchElement.prototype, \"manifest\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: true /* < due to metadata 'dependsOn' */, converter: PropertyConverters.Json })\n], PacemWidgetFetchElement.prototype, \"endpoint\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: false, converter: PropertyConverters.String })\n], PacemWidgetFetchElement.prototype, \"url\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: false, converter: PropertyConverters.String })\n], PacemWidgetFetchElement.prototype, \"method\", void 0);\n__decorate([\n Watch({ reflectBack: true, emit: false, converter: PropertyConverters.Json })\n], PacemWidgetFetchElement.prototype, \"fields\", void 0);\n__decorate([\n Watch( /* just for editing sake */)\n], PacemWidgetFetchElement.prototype, \"parameters\", void 0);\n__decorate([\n Watch( /* can only be databound or assigned at runtime */)\n], PacemWidgetFetchElement.prototype, \"result\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemWidgetFetchElement.prototype, \"fetching\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemWidgetFetchElement.prototype, \"success\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemWidgetFetchElement.prototype, \"failure\", void 0);\n__decorate([\n ViewChild(P + '-fetch')\n], PacemWidgetFetchElement.prototype, \"_fetcher\", void 0);\n__decorate([\n ViewChild('div[hidden]')\n], PacemWidgetFetchElement.prototype, \"_itemsElement\", void 0);\nPacemWidgetFetchElement = __decorate([\n CustomElement({\n tagName: P + '-widget-fetch', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-fetch autofetch=\"false\" fetching=\"{{ :host.fetching, twoway }}\" debounce=\"100\"\r\non-${Net.FetchResultEventName}=\":host._onresult($event)\" on-${Net.FetchErrorEventName}=\":host._onerror($event)\" on-${Net.FetchSuccessEventName}=\":host._onsuccess($event)\"></${P}-fetch><div hidden><${P}-content></${P}-content></div>`\n })\n], PacemWidgetFetchElement);\nexport { PacemWidgetFetchElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P } from '@pacem/pacem-core';\nimport { PacemWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nlet PacemWidgetTranslatorElement = class PacemWidgetTranslatorElement extends PacemWidgetElement {\n};\nPacemWidgetTranslatorElement = __decorate([\n CustomElement({\n tagName: P + '-widget-translator'\n })\n], PacemWidgetTranslatorElement);\nexport { PacemWidgetTranslatorElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { PacemWidgetElement, buildWidgetMetadata } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\n//namespace Pacem.Components.Cms {\nconst DATA_METADATA = {\n display: { icon: 'timer', name: 'Clock', description: 'Timer widget.' },\n props: [\n {\n prop: 'interval', type: EXPRESSION_METADATA_TYPE, display: {\n name: 'Interval (msec)'\n }, extra: {\n selector: '.' + PCSS + '-widget', step: 1000\n },\n validators: [{\n type: 'range', errorMessage: 'Negative numbers not allowed', params: { min: 0 }\n }]\n }\n ]\n};\nlet PacemWidgetClockElement = class PacemWidgetClockElement extends PacemWidgetElement {\n constructor() {\n super(buildWidgetMetadata(DATA_METADATA));\n this.interval = 0;\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Number })\n], PacemWidgetClockElement.prototype, \"interval\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemWidgetClockElement.prototype, \"time\", void 0);\nPacemWidgetClockElement = __decorate([\n CustomElement({\n tagName: P + '-widget-clock', template: `<${P}-timer interval=\"{{ :host.interval }}\" on-tick=\"{{ :host.time = Date.now() }}\"></${P}-timer>`\n })\n], PacemWidgetClockElement);\nexport { PacemWidgetClockElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils, Storage } from '@pacem/pacem-core';\nimport { buildWidgetMetadata } from '../types';\nimport { PacemBearerWidgetElement, ACCESS_TOKEN_METADATA } from './types';\nimport { SwaggerCmsParser } from '../../openapi/swagger-cms';\n//namespace Pacem.Components.Cms {\nconst APIMANIFEST_METADATA = {\n display: { icon: 'cloud_circle', name: 'Api Manifest', description: 'OpenApi parser for WebApi scaffolding.' },\n props: [\n {\n prop: 'url', type: 'text', display: {\n name: 'Url', description: 'Insert the url of the OpenApi json configuration.', cssClass: ['cols-lg-8'],\n watermark: 'https://domain.com/swagger/v1/swagger.json'\n },\n extra: { tooltip: true },\n validators: [{\n type: 'required', errorMessage: 'Url field is required.'\n }]\n },\n {\n prop: 'usecache', type: 'boolean', display: {\n name: 'Cache results', description: 'Whether to cache the manifest per-url.', cssClass: ['cols-lg-4'],\n ui: 'switcher'\n },\n extra: { tooltip: true }\n },\n ACCESS_TOKEN_METADATA\n ]\n};\nlet PacemWidgetApiManifestElement = class PacemWidgetApiManifestElement extends PacemBearerWidgetElement {\n constructor(_openapi = new SwaggerCmsParser(), _cache = new Storage()) {\n super(buildWidgetMetadata(APIMANIFEST_METADATA));\n this._openapi = _openapi;\n this._cache = _cache;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'url':\n case 'editing':\n case 'editable':\n this._scaffold();\n break;\n case 'usecache':\n this._openapi.cache = val ? this._cache : null;\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (this.usecache) {\n this._openapi.cache = this._cache;\n }\n this._scaffold();\n }\n _scaffold() {\n if (this.editing && this.editable && !Utils.isNullOrEmpty(this.url)) {\n this.fetching = true;\n this._openapi.load(this.url).then(s => {\n this.manifest = s;\n this.fetching = false;\n }, _ => {\n this.fetching = false;\n });\n }\n }\n};\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetApiManifestElement.prototype, \"url\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemWidgetApiManifestElement.prototype, \"usecache\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemWidgetApiManifestElement.prototype, \"manifest\", void 0);\nPacemWidgetApiManifestElement = __decorate([\n CustomElement({ tagName: P + '-widget-apimanifest' })\n], PacemWidgetApiManifestElement);\nexport { PacemWidgetApiManifestElement };\n", "/// <reference path=\"./swagger-types.d.ts\" />\nimport { Scaffolding } from '@pacem/pacem-scaffolding';\n//namespace Pacem.Cms.OpenApi {\nconst BAG = 'pacem:metadatabag';\nexport class SwaggerCmsParser {\n constructor(_openApi = new Scaffolding.OpenApi.OpenApiParser()) {\n this._openApi = _openApi;\n this._cachedMetadataUrls = [];\n }\n async load(url, headers) {\n let api = await this._openApi.load(url, headers);\n if (api != null) {\n api[BAG] = {};\n // greedy load of datafields\n for (let endpoint of api.endpoints) {\n await this._enrichSchemas(api, endpoint, headers);\n }\n }\n return api;\n }\n async _enrichSchemas(api, endpoint, headers) {\n const response = endpoint.response;\n if (response && response.meta) {\n response.fields = await this._fetchMetadata(api, { name: response.fullType, schema: response.meta }, headers);\n }\n // parameters?\n const parameters = endpoint.parameters;\n for (let parameter of (parameters || [])) {\n if (parameter.meta && parameter.fullType) {\n let fields = await this._fetchMetadata(api, { name: parameter.fullType, schema: parameter.meta }, headers);\n parameter.fields = fields;\n }\n }\n }\n clearCache() {\n const cache = this.cache, keys = this._cachedMetadataUrls;\n if (cache) {\n for (let key of keys) {\n cache.removeProperty(key);\n }\n // clear keys\n keys.splice(0);\n }\n }\n /**\n *\n * @param def1\n * @param headers HTTP headers for API fetching\n */\n async _fetchMetadata(api, def0, headers) {\n let _fetch = async (def1) => {\n let cols = [];\n if (def1 && def1.name) {\n // short-circuit if already in the bag\n if (api[BAG][def1.name]) {\n return api[BAG][def1.name];\n }\n /* reserve a place for this type so that it gets not fetched again if aggressive recursion occurs */ api[BAG][def1.name] = cols;\n let meta = { props: [] }, metadataUrl;\n if (/^https?:\\/\\//.test(def1.name)) {\n // name is url? then it's the endpoint for type metadata, fetch it!\n metadataUrl = def1.name;\n }\n else {\n 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.`);\n return;\n }\n if (metadataUrl) {\n let retrieveFn = async () => {\n let response = await fetch(metadataUrl, { credentials: 'omit', mode: 'cors', headers: headers });\n if (response.ok) {\n return await response.json();\n }\n };\n if (this.cache) {\n // check for session cache\n meta = this.cache.getPropertyValue(metadataUrl);\n if (!meta) {\n // no cache available? then fetch...\n meta = await retrieveFn();\n this._cachedMetadataUrls.push(metadataUrl);\n this.cache.setPropertyValue(metadataUrl, meta, /* persist in session not on location */ false);\n }\n }\n else {\n // do fetch\n meta = await retrieveFn();\n }\n }\n let schema = def1.schema;\n for (let col in schema.properties) {\n let column = schema.properties[col], field = meta && meta.props.find(p => p.prop === col);\n let datafield = Object.assign({\n prop: col, type: column.type || 'text', props: undefined\n }, field || /* if there's no match, then read-only */ { isReadOnly: true });\n if (field) {\n let $ref = (column.items && column.items.$ref) || column.$ref;\n if ($ref) {\n let ref = Scaffolding.OpenApi.getOpenApiDefinition(api, $ref), key = ref.name;\n if (api[BAG][key]) {\n datafield.props = api[BAG][key];\n }\n else {\n // recursion here\n datafield.props = await _fetch(ref);\n }\n }\n }\n cols.push(datafield);\n }\n }\n return cols;\n };\n return await _fetch(def0);\n }\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, Utils, CustomElementUtils, Logging, PCSS } from '@pacem/pacem-core';\nimport { PacemWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nexport class PacemUiWidgetElement extends PacemWidgetElement {\n constructor(metadata, colspan = 1, role) {\n super(metadata, role);\n this.colspan = colspan;\n this.rowspan = 1;\n }\n // just a flag class\n connectedCallback() {\n super.connectedCallback();\n Utils.addClass(this, 'ui-widget ' + PCSS + '-cell cols-xs-start-1 cols-xs-12 rows-xs-start-auto');\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'row':\n Utils.removeClass(this, `rows-start-${old + 1}`);\n Utils.addClass(this, `rows-start-${val + 1}`);\n break;\n case 'rowspan':\n Utils.removeClass(this, `rows-${old}`);\n Utils.addClass(this, `rows-${val}`);\n break;\n case 'column':\n Utils.removeClass(this, `cols-start-${old + 1}`);\n Utils.addClass(this, `cols-start-${val + 1}`);\n break;\n case 'colspan':\n Utils.removeClass(this, `cols-${old}`);\n Utils.addClass(this, `cols-${val}`);\n break;\n case 'borders':\n (this.borders ? Utils.addClass : Utils.removeClass).apply(this, [this, PCSS + '-border']);\n break;\n case 'corners':\n (this.borders ? Utils.addClass : Utils.removeClass).apply(this, [this, PCSS + '-corners']);\n break;\n }\n }\n get container() {\n return this._container;\n }\n /** @overridable */\n findContainer() {\n return CustomElementUtils.findAncestor(this, n => n instanceof PacemCompositeWidgetElement);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n let iter = this._container = this.findContainer();\n if (!Utils.isNull(iter)) {\n iter.register(this);\n }\n }\n disconnectedCallback() {\n if (!Utils.isNull(this._container)) {\n this._container.unregister(this);\n }\n super.disconnectedCallback();\n }\n}\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"column\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"row\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"colspan\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Number })\n], PacemUiWidgetElement.prototype, \"rowspan\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemUiWidgetElement.prototype, \"borders\", void 0);\n__decorate([\n Watch({ emit: true, reflectBack: true, converter: PropertyConverters.Boolean })\n], PacemUiWidgetElement.prototype, \"corners\", void 0);\nexport const WidgetRegisterEventName = \"widgetregister\";\nexport const WidgetUnregisterEventName = \"widgetunregister\";\nexport const LayoutChangeEventName = \"layoutchange\";\nexport class WidgetRegisterEvent extends CustomEvent {\n constructor(item, eventInit) {\n super(WidgetRegisterEventName, Utils.extend(eventInit || {}, { detail: item }));\n }\n}\nexport class WidgetUnregisterEvent extends CustomEvent {\n constructor(item, eventInit) {\n super(WidgetUnregisterEventName, Utils.extend(eventInit || {}, { detail: item }));\n }\n}\nexport class PacemCompositeWidgetElement extends PacemUiWidgetElement {\n get itemsElement() {\n return this;\n }\n validate(item) {\n return item instanceof PacemUiWidgetElement;\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n Utils.addClass(this.itemsElement, PCSS + '-items-element');\n }\n /**\n * Appends a child Element to this CompositeWidget's itemsElement.\n * @param item New child element\n */\n appendItem(item) {\n this.itemsElement.appendChild(item);\n }\n /**\n * Registers a new item among the items.\n * @param item {PacemUiWidgetElement} Item to be enrolled\n */\n register(item) {\n if (!this.validate(item)) {\n this.log(Logging.LogLevel.Debug, `${(item && item.localName)} element couldn't be registered in a ${this.localName} element.`);\n return false;\n }\n let retval = false;\n const items = this.items = this.items || [];\n if (Utils.isNullOrEmpty(items)) {\n this.items = [item];\n retval = true;\n }\n else if (items.indexOf(item) === -1) {\n items.push(item);\n retval = true;\n }\n //\n if (retval) {\n this.dispatchEvent(new WidgetRegisterEvent(item));\n }\n return retval;\n }\n /**\n * Removes an existing element from the items.\n * @param item {PacemUiWidgetElement} Item to be removed\n */\n unregister(item) {\n const items = this.items, ndx = !Utils.isNullOrEmpty(items) && items.indexOf(item);\n if (ndx >= 0) {\n let item = items.splice(ndx, 1);\n this.dispatchEvent(new WidgetUnregisterEvent(item[0]));\n return true;\n }\n return false;\n }\n}\n__decorate([\n Watch( /* can only be databound or assigned at runtime */)\n], PacemCompositeWidgetElement.prototype, \"items\", void 0);\n// #endregion COMPOSITE\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Defaults, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { buildWidgetMetadata, EXPRESSION_WIDGET_METADATA_EXTRA } from '../types';\nimport { EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { PacemUiWidgetElement } from './types';\n//namespace Pacem.Components.Cms {\nconst TEXT_METADATA = buildWidgetMetadata({\n display: { icon: 'font_download', name: 'Text', description: 'Plain text widget.' },\n props: [{\n prop: 'text', type: EXPRESSION_METADATA_TYPE, display: { name: 'Text' }, extra: EXPRESSION_WIDGET_METADATA_EXTRA\n }]\n});\nlet PacemWidgetTextElement = class PacemWidgetTextElement extends PacemUiWidgetElement {\n constructor() {\n super(TEXT_METADATA);\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.String })\n], PacemWidgetTextElement.prototype, \"text\", void 0);\nPacemWidgetTextElement = __decorate([\n CustomElement({\n tagName: P + '-widget-text', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-text text=\"{{ :host.text }}\"></${P}-text>`\n })\n], PacemWidgetTextElement);\nexport { PacemWidgetTextElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, ViewChild } from '@pacem/pacem-core';\nimport { PacemCompositeWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\n/**\n * UI widget container that eases dragdrop-based enrollment into composite widgets.\n */\nlet PacemWidgetPickerElement = class PacemWidgetPickerElement extends PacemCompositeWidgetElement {\n register(item) {\n const retval = super.register(item);\n if (retval) {\n item.hide = true;\n }\n return retval;\n }\n};\n__decorate([\n ViewChild(P + '-drag-drop')\n], PacemWidgetPickerElement.prototype, \"_dragDrop\", void 0);\nPacemWidgetPickerElement = __decorate([\n CustomElement({\n tagName: P + '-widget-picker', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-repeater datasource=\"{{ :host.items }}\">\r\n <template>\r\n <${P}-panel behaviors=\"{{ [::_dragDrop] }}\" class=\"${PCSS}-widget-itempicker display-flex flex-fill flex-middle flex-nowrap\">\r\n <i class=\"${PCSS}-icon flex-auto\" dragger>drag_indicator</i>\r\n <${P}-icon icon=\"{{ ^item.metadata.display.icon }}\" class=\"flex-auto ${PCSS}-margin margin-x-1\"></${P}-icon>\r\n <${P}-text text=\"{{ ^item.metadata.display.name }}\"></${P}-text>\r\n </${P}-panel>\r\n </template>\r\n</${P}-repeater>\r\n<${P}-drag-drop handle-selector=\"i.${PCSS}-icon[dragger]\"></${P}-drag-drop>\r\n<${P}-content></${P}-content>`\n })\n], PacemWidgetPickerElement);\nexport { PacemWidgetPickerElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters, Debounce, Utils, UI, PropertyChangeEventName } from '@pacem/pacem-core';\nimport { buildWidgetMetadata } from '../../types';\nimport { PacemCompositeWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nfunction createSvgGridBox() {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.style.pointerEvents = 'none';\n svg.style.zIndex = '1000';\n svg.setAttribute('height', '100%');\n svg.setAttribute('width', '100%');\n svg.setAttribute('preserveAspectRatio', 'none');\n svg.setAttribute('class', 'grid-cell-wrapper');\n //svg.style.padding = '2px';\n //svg.style.boxSizing = 'border-box';\n svg.innerHTML = `<rect class=\"grid-cell\" width=\"100%\" height=\"100%\"></rect>`;\n return svg;\n}\nexport const GRID_COLUMNS = 12;\nconst FALLBACK_COLUMNS = GRID_COLUMNS;\nconst FALLBACK_ROWS = 1;\nconst GRID_METADATA = {\n display: {\n icon: 'grid_on',\n name: 'Grid',\n description: 'Composition Widget that lays out child-widgets in a grid container.'\n },\n props: [\n {\n prop: 'rows', type: 'int', display: {\n name: 'Rows', cssClass: ['cols-lg-4']\n }, validators: [\n { type: 'required', errorMessage: '' },\n {\n type: 'range', errorMessage: '', params: {\n min: 1, max: 24\n }\n }\n ]\n }, {\n prop: 'rowGap', type: 'int', display: {\n //ui: 'slider',\n name: 'Row gap', cssClass: ['cols-lg-4']\n }, validators: [\n // { type: 'required', errorMessage: '' },\n {\n type: 'range', errorMessage: '', params: {\n min: 0, max: 3, step: .25\n }\n }\n ]\n }, {\n prop: 'columnGap', type: 'int', display: {\n //ui: 'slider',\n name: 'Column gap', cssClass: ['cols-lg-4']\n }, validators: [\n // { type: 'required', errorMessage: '' },\n {\n type: 'range', errorMessage: '', params: {\n min: 0, max: 3, step: .25\n }\n }\n ]\n }\n ]\n};\nlet PacemGridWidgetElement = class PacemGridWidgetElement extends PacemCompositeWidgetElement {\n constructor() {\n super(buildWidgetMetadata(GRID_METADATA), FALLBACK_COLUMNS, \"grid\");\n this._widgetPropertyChange = (evt) => {\n if (evt.detail.propertyName === 'row' || evt.detail.propertyName === 'rowspan') {\n const widget = evt.target;\n this.rows = Math.max(this.rows, widget.row + widget.rowspan);\n }\n };\n this._dragDropHandler = (evt) => {\n const args = evt.detail, el = args.element;\n switch (evt.type) {\n case UI.DragDropEventType.Start:\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'auto'; });\n this._initState = {\n colspan: el.colspan,\n rowspan: el.rowspan,\n col: el.column,\n row: el.row\n };\n break;\n case UI.DragDropEventType.End:\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'none'; });\n break;\n case UI.DragDropEventType.Over:\n var dropTarget = args.target;\n var col = +dropTarget.style.gridColumnStart - 1;\n var row = +dropTarget.style.gridRowStart - 1;\n const farRight = col + this._initState.colspan, farBottom = row + this._initState.rowspan;\n // check overlap\n if (!this._intersects(el, col, row, el.colspan, el.rowspan)) {\n let fireLayoutChange = false;\n //\n if (farRight <= (this.columns || FALLBACK_COLUMNS)) {\n fireLayoutChange = el.column !== col;\n el.column = col; // + '/' + (col + this._initState.colspan);\n }\n if (farBottom <= (this.rows || FALLBACK_ROWS)) {\n fireLayoutChange = fireLayoutChange || (el.row !== row);\n el.row = row; // + '/' + (row + this._initState.rowspan);\n }\n if (fireLayoutChange) {\n // attributechange should suffice\n // this.dispatchLayoutChangeEvent();\n }\n }\n break;\n }\n ;\n };\n this._resizeHandler = (evt) => {\n switch (evt.type) {\n case UI.RescaleEventType.Start:\n Utils.addClass(evt.detail.element, PCSS + '-rescaling');\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'auto'; });\n break;\n case UI.RescaleEventType.End:\n this._gridBoxes.forEach(svg => { svg.style.pointerEvents = 'none'; });\n Utils.removeClass(evt.detail.element, PCSS + '-rescaling');\n break;\n case UI.RescaleEventType.Rescale:\n evt.preventDefault();\n // check pos\n const pos = { x: evt.clientX, y: evt.clientY }, handle = evt.detail.handle;\n const dropTarget = document.elementsFromPoint(pos.x, pos.y).find(e => this._dragDrop.dropTargets.indexOf(e) >= 0);\n if (dropTarget) {\n var col = +dropTarget.style.gridColumnStart;\n var row = +dropTarget.style.gridRowStart;\n const widget = evt.detail.element, startcol = widget.column + 1, startrow = widget.row + 1;\n const colspan = 1 + col - startcol, rowspan = 1 + row - startrow;\n if (!this._intersects(widget, widget.column, widget.row, colspan, rowspan)) {\n let fireLayoutChange = false;\n //\n if (col >= startcol && handle.endsWith('right')) {\n fireLayoutChange = widget.colspan !== colspan;\n widget.colspan = colspan;\n }\n if (row >= startrow && handle.startsWith('bottom')) {\n fireLayoutChange = fireLayoutChange || widget.rowspan !== rowspan;\n widget.rowspan = rowspan;\n }\n if (fireLayoutChange) {\n // attributechange should suffice\n // this.dispatchLayoutChangeEvent();\n }\n }\n }\n break;\n }\n };\n this._gridBoxes = [];\n }\n register(item) {\n let retval = super.register(item);\n if (retval) {\n const row = item.row || 0, column = item.column || 0, colspan = item.colspan || 2, rowspan = item.rowspan || 1;\n let foundspot = !this._intersects(item, column, row, colspan, rowspan);\n if (foundspot) {\n item.row = row;\n item.column = column;\n item.colspan = colspan;\n item.rowspan = rowspan;\n }\n else {\n if (!foundspot) {\n // select a spot or create a new row\n let check = (elasticOnColspan = false) => {\n let maxColIndex = this.columns - 1;\n if (!elasticOnColspan) {\n maxColIndex = maxColIndex - colspan + 1;\n }\n for (let j = 0; j < this.rows; j++) {\n for (let i = 0; i <= maxColIndex; i++) {\n if (!this._intersects(item, i, j, colspan, rowspan)) {\n item.column = i;\n item.row = j;\n item.colspan = Math.min(maxColIndex + 1 - i, colspan);\n item.rowspan = rowspan;\n foundspot = true;\n break;\n }\n }\n if (foundspot)\n break;\n }\n };\n check();\n if (!foundspot && colspan > 1) {\n // find first avail slot conceding less colspan\n check(true);\n }\n }\n // okay, surrender and create a new row\n if (!foundspot) {\n this.rows++;\n item.row = this.rows - 1;\n item.column = 0;\n }\n }\n //\n // item.behaviors.push(this._dragDrop, this._rescaler);\n item.behaviors = [this._dragDrop, this._rescaler];\n item.addEventListener(PropertyChangeEventName, this._widgetPropertyChange, false);\n }\n //\n return retval;\n }\n unregister(item) {\n let retval = super.unregister(item);\n if (retval) {\n item.removeEventListener(PropertyChangeEventName, this._widgetPropertyChange, false);\n const ndx = item.behaviors.indexOf(this._dragDrop);\n if (ndx >= 0)\n item.behaviors.splice(ndx, 1);\n const ndx1 = item.behaviors.indexOf(this._rescaler);\n if (ndx1 >= 0)\n item.behaviors.splice(ndx1, 1);\n }\n return retval;\n }\n _intersects(who, col, row, colspan, rowspan) {\n for (let item of this.items) {\n let widget = item;\n if (widget === who) {\n continue;\n }\n if ((widget.column < (col + colspan) && (widget.column + widget.colspan) > col)\n && (widget.row < (row + rowspan) && (widget.row + widget.rowspan) > row)) {\n return true;\n }\n }\n return false;\n }\n connectedCallback() {\n super.connectedCallback();\n Utils.addClass(this, PCSS + '-grid');\n // drag-drop\n let dragDrop = this._dragDrop = document.createElement(P + '-drag-drop');\n let floater = document.createElement('div');\n document.body.appendChild(floater);\n dragDrop.floater = floater;\n dragDrop.mode = UI.DragDataMode.Alias;\n dragDrop.dropBehavior = UI.DropBehavior.None;\n dragDrop.addEventListener(UI.DragDropEventType.Start, this._dragDropHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Over, this._dragDropHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragDropHandler, false);\n document.body.appendChild(dragDrop);\n // rescale\n let rescale = this._rescaler = document.createElement(P + '-rescale');\n rescale.handles = [UI.RescaleHandle.Right, UI.RescaleHandle.Bottom];\n rescale.addEventListener(UI.RescaleEventType.Start, this._resizeHandler, false);\n rescale.addEventListener(UI.RescaleEventType.Rescale, this._resizeHandler, false);\n rescale.addEventListener(UI.RescaleEventType.End, this._resizeHandler, false);\n document.body.appendChild(rescale);\n // editor\n // default configuration\n if (Utils.isNullOrEmpty(this.columns)) {\n this.columns = GRID_COLUMNS;\n }\n if (Utils.isNullOrEmpty(this.rows)) {\n this.rows = 1;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.adapt();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n this.adapt();\n }\n disconnectedCallback() {\n var dragDrop = this._dragDrop, rescale = this._rescaler;\n if (!Utils.isNull(dragDrop)) {\n dragDrop.floater.remove();\n dragDrop.removeEventListener(UI.DragDropEventType.Start, this._dragDropHandler, false);\n dragDrop.removeEventListener(UI.DragDropEventType.Over, this._dragDropHandler, false);\n dragDrop.removeEventListener(UI.DragDropEventType.End, this._dragDropHandler, false);\n dragDrop.remove();\n this._dragDrop = null;\n }\n if (!Utils.isNull(rescale)) {\n rescale.removeEventListener(UI.RescaleEventType.Start, this._resizeHandler, false);\n rescale.removeEventListener(UI.RescaleEventType.Rescale, this._resizeHandler, false);\n rescale.removeEventListener(UI.RescaleEventType.End, this._resizeHandler, false);\n rescale.remove();\n this._rescaler = null;\n }\n super.disconnectedCallback();\n }\n _normalize(measure, defaultValue = 1) {\n if (typeof measure === 'string') {\n return measure;\n }\n else if (measure == null) {\n measure = defaultValue;\n }\n return this.unitPixels(measure) + 'px';\n }\n unitPixels(qty) {\n return qty * (this.unit || 8);\n }\n adapt() {\n this.style.marginTop = this.unitPixels(this.marginTop || 0) + 'px';\n this.style.marginBottom = this.unitPixels(this.marginBottom || 0) + 'px';\n //\n this.style.gridTemplateColumns = `repeat(${(this.columns || FALLBACK_COLUMNS)}, 1fr)`;\n //this.style.gridAutoRows = `minmax(${(this.minRowheight || 24)}, ${(this.rowheight || 'auto')})`;\n let minrowheight = this._normalize(this.minRowheight, 3), rowheight = this._normalize(this.rowheight || 'auto');\n this.style.gridTemplateRows = `repeat(${(this.rows || FALLBACK_ROWS)}, minmax(${minrowheight}, ${rowheight}))`;\n this.style.gridRowGap = this._normalize(this.rowGap, 1);\n this.style.gridColumnGap = this._normalize(this.columnGap, 1);\n //\n this._setGridLines();\n }\n _setGridLines() {\n var splice = 0;\n const editing = this.editing;\n if (editing) {\n const cols = this.columns || FALLBACK_COLUMNS, rows = this.rows || FALLBACK_ROWS, total = cols * rows;\n splice = total;\n for (let k = 0; k < total; k++) {\n while (this._gridBoxes.length <= k) {\n let s = createSvgGridBox();\n this.appendChild(s);\n this._gridBoxes.push(s);\n }\n let svg = this._gridBoxes[k];\n const i = k % cols, j = Math.floor(k / cols);\n svg.style.gridColumn = (i + 1).toString();\n svg.style.gridRow = (j + 1).toString();\n }\n }\n for (let svg of this._gridBoxes.splice(splice)) {\n svg.remove();\n }\n // behaviors to be synchronized\n if (!Utils.isNull(this._dragDrop) && !Utils.isNull(this._rescaler)) {\n this._dragDrop.disabled = this._rescaler.disabled\n = !editing;\n this._dragDrop.dropTargets = this._gridBoxes;\n }\n }\n};\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"unit\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"marginTop\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"marginBottom\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"columns\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"rows\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemGridWidgetElement.prototype, \"minRowheight\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], PacemGridWidgetElement.prototype, \"rowheight\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"rowGap\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.Number })\n], PacemGridWidgetElement.prototype, \"columnGap\", void 0);\n__decorate([\n Debounce(100)\n], PacemGridWidgetElement.prototype, \"adapt\", null);\nPacemGridWidgetElement = __decorate([\n CustomElement({ tagName: P + '-widget-grid' })\n], PacemGridWidgetElement);\nexport { PacemGridWidgetElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Watch, PropertyConverters, ViewChild, Utils, Components } from '@pacem/pacem-core';\nimport { EXPRESSION_METADATA_TYPE } from '../../../scaffolding/types';\nimport { EXPRESSION_WIDGET_METADATA_EXTRA, buildWidgetMetadata, gridifyMetadata } from '../../types';\nimport { PacemWidgetDataElement } from '../../helpers/data';\nimport { PacemWidgetFetchElement } from '../../helpers/fetcher';\nimport { DATACOLUMNS_METADATA_TYPE } from '../../scaffolding/datacolumns';\nimport { PacemUiWidgetElement } from '../types';\n//namespace Pacem.Components.Cms {\nconst DATACOLUMN_METADATA = {\n display: { name: 'DataColumn' },\n props: [\n { prop: \"header\", type: \"string\", display: { name: \"Header\" } },\n { prop: \"content\", type: EXPRESSION_METADATA_TYPE, display: { name: \"Content\" }, extra: EXPRESSION_WIDGET_METADATA_EXTRA },\n ]\n};\nconst DATAGRID_METADATA = buildWidgetMetadata({\n display: { icon: 'table_chart', name: 'DataGrid', description: 'DataGrid widget.' },\n props: [{\n prop: 'datasource', type: EXPRESSION_METADATA_TYPE, display: { name: 'Datasource' },\n extra: Utils.extend({}, EXPRESSION_WIDGET_METADATA_EXTRA, { filter: (e) => e instanceof PacemWidgetDataElement || e instanceof PacemWidgetFetchElement })\n },\n {\n prop: 'columns', type: DATACOLUMNS_METADATA_TYPE, display: { name: 'Columns' },\n // this will include 'datasource' as argument in the oneToMany source fn\n extra: { properties: 'datarowMetadata' },\n props: gridifyMetadata(DATACOLUMN_METADATA)\n }]\n});\nconst DATAGRID_HEADING_SEPARATOR = 'pacem-widget-datagrid-heading';\nfunction gridify(columns = []) {\n var output = '';\n for (let column of columns || []) {\n // if empty then 1fr\n const col = column.width || 1;\n if (typeof col === 'number') {\n output += col + 'fr ';\n }\n else {\n output += 'auto ';\n }\n }\n return output;\n}\nfunction datagridFragments(columns = []) {\n const fragHeading = document.createDocumentFragment(), fragBody = document.createDocumentFragment();\n let j = 1;\n for (let col of columns) {\n // heading\n const headcell = document.createElement('div');\n headcell.classList.add(PCSS + '-headcell');\n headcell.textContent = col.header;\n fragHeading.appendChild(headcell);\n // body\n const datacell = new Components.PacemSpanElement();\n datacell.classList.add(PCSS + '-datacell', 'datacell-corners');\n datacell.style.gridColumn = j.toString();\n datacell.setAttribute('css', \"{{ {'grid-row': ^index+2} }}\");\n datacell.setAttribute('content', col.content);\n fragBody.appendChild(datacell);\n j++;\n }\n const datarow = new Components.PacemPanelElement();\n datarow.classList.add(PCSS + '-datarow');\n datarow.setAttribute('css', \"{{ {'grid-row': ^index+2} }}\");\n datarow.setAttribute('css-class', \"{{ {'datarow-alt': ^index % 2 === 1} }}\");\n datarow.style.gridColumn = \"1/\" + (columns.length + 1);\n fragBody.appendChild(datarow);\n return { head: fragHeading, body: fragBody };\n}\nfunction datagridInnerHTML(id, columns = []) {\n const { head, body } = datagridFragments(columns);\n const head0 = document.createElement('div');\n head0.appendChild(head);\n const body0 = document.createElement('div');\n body0.appendChild(body);\n return `<${P}-repeater datasource=\"{{ #${id}.datasource }}\">\r\n <div class=\"${PCSS}-datatable\" style=\"grid-template-columns: ${gridify(columns)}\">\r\n ${head0.innerHTML}\r\n <template>${body0.innerHTML}</template>\r\n</div></${P}-repeater>`;\n}\nlet PacemWidgetDataGridElement = class PacemWidgetDataGridElement extends PacemUiWidgetElement {\n constructor() {\n super(DATAGRID_METADATA);\n this.columns = [];\n this.datasource = [];\n this.datarowMetadata = [];\n this._builtUponDatasource = false;\n }\n _gridify(columns = this.columns) {\n var output = '';\n for (let column of columns || []) {\n // if empty then 1fr\n const col = column.width || 1;\n if (typeof col === 'number') {\n output += col + 'fr ';\n }\n else {\n output += 'auto ';\n }\n }\n return output;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'columns':\n /*\n *\n * TODO: manage columns separately!\n * Create an ad-hoc editor/formfield and a dedicated form\n *\n * */\n this.innerHTML = datagridInnerHTML(this.id, val);\n break;\n case 'datasource':\n this._extractMetadataJustInCase(val);\n break;\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.innerHTML = datagridInnerHTML(this.id, this.columns);\n }\n _seekArray(ds) {\n if (Utils.isArray(ds)) {\n return ds;\n }\n if (typeof ds === 'object') {\n for (let prop in ds) {\n const arr = this._seekArray(ds[prop]);\n if (!Utils.isNull(arr)) {\n return arr;\n }\n }\n }\n return null;\n }\n _extractMetadataJustInCase(ds = this.datasource) {\n if ((Utils.isNullOrEmpty(this.datarowMetadata) || this._builtUponDatasource) && !Utils.isNullOrEmpty(ds)) {\n const arr = this._seekArray(ds);\n if (!Utils.isNullOrEmpty(arr)) {\n const props = [];\n const item = arr[0];\n for (let prop in item) {\n props.push({ prop, type: typeof item[prop] });\n }\n this.datarowMetadata = props;\n this._builtUponDatasource = true;\n }\n }\n }\n};\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Json })\n], PacemWidgetDataGridElement.prototype, \"columns\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemWidgetDataGridElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemWidgetDataGridElement.prototype, \"datarowMetadata\", void 0);\n__decorate([\n ViewChild(`.${PCSS}-datatable`)\n], PacemWidgetDataGridElement.prototype, \"_datatable\", void 0);\n__decorate([\n ViewChild('template')\n], PacemWidgetDataGridElement.prototype, \"_template\", void 0);\n__decorate([\n ViewChild(P + '-repeater')\n], PacemWidgetDataGridElement.prototype, \"_repeater\", void 0);\nPacemWidgetDataGridElement = __decorate([\n CustomElement({\n tagName: P + '-widget-datagrid'\n })\n], PacemWidgetDataGridElement);\nexport { PacemWidgetDataGridElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, Watch, PropertyConverters, ViewChild, Utils, Components, UI } from '@pacem/pacem-core';\nimport { Components as ScaffoldingComponents } from '@pacem/pacem-scaffolding';\nimport { Functions, EXPRESSION_METADATA_TYPE } from '../../scaffolding/types';\nimport { EXPRESSION_WIDGET_METADATA_EXTRA, gridifyMetadata } from '../types';\n//namespace Pacem.Components.Cms {\n/** Default metadata ('expression' field) 'type' factory. */\nexport const DATACOLUMNS_METADATA_TYPE = (host, hostRef = ':host', hostEntityRef = ':host.entity') => {\n const attrs = {}, meta = host.metadata, fns = Functions, fnKeys = [];\n attrs['properties'] = `{{ Pacem.CustomElementUtils.getWatchedProperty(${hostEntityRef}, '${meta.prop}').config.converter }}`;\n const tagName = P + '-datacolumns';\n let extra = (meta.extra || {});\n // properties\n if (!Utils.isNullOrEmpty(extra.properties)) {\n switch (typeof extra.properties) {\n case 'string':\n attrs['properties'] = `{{ ${hostEntityRef}.${extra.properties} }}`;\n break;\n case 'function':\n const fnKey = 'fn' + Utils.uniqueCode();\n fns[fnKey] = extra.properties;\n attrs['properties'] = `{{ Pacem.Components.Cms.Functions.${fnKey}(${hostRef}), once }}`;\n // tidy-up memento\n fnKeys.push(fnKey);\n break;\n }\n }\n if (fnKeys.length > 0) {\n // tidy-up\n attrs['on-unload'] = `{{ Pacem.Components.Cms.Functions.dismiss('${fnKeys.join('\\',\\'')}') }}`;\n }\n return { tagName: tagName, attrs: attrs };\n};\nconst DATACOLUMN_METADATA = {\n display: { name: 'Columns' },\n props: [\n { prop: 'header', type: 'string', display: { cssClass: ['form-minimal'], name: 'Header' } },\n {\n prop: 'content', type: EXPRESSION_METADATA_TYPE, display: { name: 'Content' },\n extra: EXPRESSION_WIDGET_METADATA_EXTRA\n }\n ]\n};\nlet PacemDataColumnElement = class PacemDataColumnElement extends Components.PacemElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'content':\n this.contentExpression = val;\n break;\n case 'contentExpression':\n this.setAttribute('content', val || '');\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._form.entity = this;\n this._form.metadata = gridifyMetadata(DATACOLUMN_METADATA);\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemDataColumnElement.prototype, \"header\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemDataColumnElement.prototype, \"content\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemDataColumnElement.prototype, \"contentExpression\", void 0);\n__decorate([\n ViewChild(P + '-form')\n], PacemDataColumnElement.prototype, \"_form\", void 0);\nPacemDataColumnElement = __decorate([\n CustomElement({\n tagName: P + '-widget-datacolumn', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<${P}-form class=\"panel-body\" autogenerate=\"true\"></${P}-form>`\n })\n], PacemDataColumnElement);\nexport { PacemDataColumnElement };\nlet PacemDataColumnsElement = class PacemDataColumnsElement extends ScaffoldingComponents.Scaffolding.PacemBaseElement {\n constructor() {\n super(...arguments);\n this._dropHandler = (e) => {\n this.changeHandler(e);\n };\n this._columnifyMetadata = (props = this.properties) => {\n return (props || []).map(p => {\n const header = typeof p.display?.name === 'function' ? /* NOT supported */ p.prop : (p.display?.name || p.prop);\n const c = {\n header,\n content: `{{ ^item.${p.prop} }}`\n };\n return c;\n }).sort((a, b) => a.header > b.header ? 1 : -1);\n };\n }\n get inputFields() {\n return [];\n }\n toggleReadonlyView(readonly) {\n // leave it all to the template bindings\n }\n onChange(evt) {\n return Utils.fromResult(this.value = this._repeater.datasource);\n }\n acceptValue(val) {\n if (!Utils.isNull(this._repeater)) {\n this._repeater.datasource = Utils.clone(val || []);\n }\n }\n getViewValue(value) {\n return /* dummy */ '[DataColumns]';\n }\n convertValueAttributeToProperty(attr) {\n return PropertyConverters.Json.convert(attr, this);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._propDragger.addEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n this._colDragger.addEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n }\n disconnectedCallback() {\n if (!Utils.isNull(this._propDragger)) {\n this._propDragger.removeEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n }\n if (!Utils.isNull(this._colDragger)) {\n this._colDragger.removeEventListener(UI.DragDropEventType.End, this._dropHandler, false);\n }\n super.disconnectedCallback();\n }\n};\n__decorate([\n ViewChild(`${P}-repeater[columns]`)\n], PacemDataColumnsElement.prototype, \"_repeater\", void 0);\n__decorate([\n ViewChild(`${P}-drag-drop[properties]`)\n], PacemDataColumnsElement.prototype, \"_propDragger\", void 0);\n__decorate([\n ViewChild(`${P}-drag-drop[columns]`)\n], PacemDataColumnsElement.prototype, \"_colDragger\", void 0);\n__decorate([\n ViewChild('div[drop-target]')\n], PacemDataColumnsElement.prototype, \"_dropTarget\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemDataColumnsElement.prototype, \"properties\", void 0);\nPacemDataColumnsElement = __decorate([\n CustomElement({\n tagName: P + '-widget-datacolumns', shadow: Defaults.USE_SHADOW_ROOT,\n template: `<div class=\"${PCSS}-datacolumns\">\r\n <div class=\"datacolumns-main display-flex flex-fill\">\r\n\r\n <${P}-drag-drop mode=\"${UI.DragDataMode.Alias}\" disabled=\"{{ :host.readonly }}\" handle-selector=\"*[handle]\"\r\n drop-behavior=\"${UI.DropBehavior.InsertChild}\" drop-targets=\"{{ [::_dropTarget] }}\" columns></${P}-drag-drop>\r\n <${P}-repeater class=\"display-flex flex-fill\" columns>\r\n <!-- columns -->\r\n <div class=\"display-flex flex-nowrap\" drop-target>\r\n <template>\r\n <${P}-panel behaviors=\"{{ [::_colDragger] }}\">\r\n <div class=\"${PCSS}-panel panel-side-left side-auto\">\r\n <div class=\"panel-side\">\r\n <${P}-button class=\"display-block button-flat icon-glyph-small\" icon-glyph=\"drag_indicator\" handle></${P}-button>\r\n <${P}-button class=\"display-block button-flat icon-glyph-small\" on-click=\":host.value.splice(^index, 1)\" icon-glyph=\"clear\"></${P}-button>\r\n </div>\r\n <div class=\"panel-heading\">\r\n <${P}-text text=\"{{ ^item.header }}\"></${P}-text>\r\n </div>\r\n <${P}-widget-datacolumn class=\"panel-body\" header=\"{{ ^item.header, twoway }}\" content-expression=\"{{ ^item.content, twoway }}\"></${P}-widget-datacolumn>\r\n </div>\r\n </${P}-panel>\r\n </template>\r\n </div>\r\n </${P}-repeater>\r\n\r\n </div>\r\n <${P}-panel class=\"datacolumns-props\" hide=\"{{ :host.readonly }}\">\r\n <${P}-drag-drop mode=\"${UI.DragDataMode.Copy}\" disabled=\"{{ :host.readonly }}\" handle-selector=\"*[handle]\"\r\n drop-behavior=\"${UI.DropBehavior.InsertChild}\" drop-targets=\"{{ [::_dropTarget] }}\" properties></${P}-drag-drop>\r\n <${P}-repeater datasource=\"{{ :host._columnifyMetadata(:host.properties) }}\">\r\n <!-- properties -->\r\n <template>\r\n <${P}-panel behaviors=\"{{ [::_propDragger] }}\" class=\"${PCSS}-panel panel-side-left side-auto panel-primary panel-filled ${PCSS}-margin margin-bottom-1\">\r\n <div class=\"panel-side\">\r\n <${P}-button class=\"display-block button-flat icon-glyph-small\" icon-glyph=\"drag_indicator\" handle></${P}-button>\r\n </div>\r\n <div class=\"text-truncate panel-body\">\r\n <${P}-span text=\"{{ ^item.header }}\"></${P}-span>\r\n </div>\r\n </${P}-panel>\r\n </template>\r\n </${P}-repeater>\r\n </${P}-panel>\r\n</div>`\n })\n], PacemDataColumnsElement);\nexport { PacemDataColumnsElement };\n", "export * from './types';\nexport * as OpenApi from './openapi/swagger-cms';\nexport * from './widgets/scaffolding/datacolumns';\n", "import { Utils } from '@pacem/pacem-core';\nexport const PermissionEditEventName = 'permissionedit';\nexport class PermissionEditEvent extends CustomEvent {\n constructor(permissible) {\n super(PermissionEditEventName, { detail: permissible, cancelable: false, bubbles: true });\n }\n}\nexport class Permissible {\n static canEdit(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.update); }\n static canRead(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.read); }\n static canAdd(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.create); }\n static canDelete(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.delete); }\n static canTranslate(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.translate); }\n static _canDoSomethingToResource(claims, resource, predicate) {\n if (Utils.isNullOrEmpty(claims) || Utils.isNull(resource)) {\n return false;\n }\n // if no permissions are set, then you're free to go!\n var editable = true;\n if (resource.permissions && resource.permissions.length > 0) {\n // check correspondence otherwise\n editable = false;\n for (let permission of resource.permissions) {\n if (predicate(permission) && claims[permission.claimType] && claims[permission.claimType].indexOf(permission.claimValue) >= 0) {\n return true;\n }\n }\n }\n // return\n return editable;\n }\n}\n"],
5
5
  "mappings": ";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,SAAS,yBAAyB,OAAO,oBAAoB,SAAS;AAG/D,IAAM,YAAY;AAAA,EACrB,WAAW,IAAI,SAAS;AACpB,aAAS,QAAQ,QAAQ,CAAC,GAAG;AACzB,aAAO,UAAU,IAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,+BAA+B,CAAC,KAAK,MAAM,WAAW;AAClD,QAAI,IAAI,OAAO,iBAAiB,WAAW,CAAC,MAAM,OAAO,MAAM,GAAG;AAC9D,YAAM,QAAQ,IAAI,OAAO;AACzB,UAAI,kBAAkB,aAAa;AAE/B,YAAI,OAAO,mBAAmB,aAAa,IAAI;AAC/C,YAAI,MAAM,cAAc,KAAK,GAAG;AAC5B,iBAAO,gBAAgB,IAAI;AAAA,QAC/B,OACK;AACD,iBAAO,aAAa,MAAM,MAAM,SAAS,CAAC;AAAA,QAC9C;AAAA,MACJ,OACK;AACD,eAAO,IAAI,IAAI;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,IAAM,2BAA2B,CAAC,MAAM,UAAU,SAAS,gBAAgB,mBAAmB;AACjG,QAAM,QAAQ,CAAC,GAAG,OAAO,KAAK,UAAU,MAAM,WAAW,SAAS,CAAC;AACnE,QAAM,OAAO,IAAI,MAAM,aAAa,8BAA8B,aAAa,kBAAkB,mBAAmB,aAAa,KAAK,IAAI,CAAC;AAC3I,QAAM,QAAQ,uBAAuB,IAAI,uEAAuE,KAAK,IAAI,MAAM,aAAa;AAC5I,QAAM,WAAW,IAAI,kDAAkD,aAAa,MAAM,KAAK,IAAI;AACnG,QAAM,UAAU,IAAI;AACpB,MAAI,QAAS,KAAK,SAAS,CAAC;AAE5B,MAAI,CAAC,MAAM,cAAc,MAAM,QAAQ,GAAG;AACtC,UAAM,UAAU,IAAI,MAAM;AAAA,EAC9B;AAEA,MAAI,CAAC,MAAM,cAAc,MAAM,MAAM,GAAG;AACpC,YAAQ,OAAO,MAAM,QAAQ;AAAA,MACzB,KAAK;AACD,cAAM,QAAQ,IAAI,qCAAqC,MAAM,MAAM,yBAAyB,MAAM,OAAO,YAAY,CAAC;AACtH;AAAA,MACJ,KAAK;AACD,cAAM,QAAQ,OAAO,MAAM,WAAW;AACtC,YAAI,KAAK,IAAI,MAAM;AACnB,cAAM,QAAQ,IAAI,qCAAqC,KAAK;AAE5D,eAAO,KAAK,KAAK;AACjB;AAAA,IACR;AAAA,EACJ;AAEA,MAAI,OAAO,MAAM,YAAY,YAAY;AACrC,UAAM,QAAQ,OAAO,MAAM,WAAW;AACtC,QAAI,KAAK,IAAI,MAAM;AACnB,UAAM,SAAS,IAAI,qCAAqC,KAAK;AAE7D,WAAO,KAAK,KAAK;AAAA,EACrB;AACA,MAAI,OAAO,SAAS,GAAG;AAEnB,UAAM,WAAW,IAAI,8CAA8C,OAAO,KAAK,KAAO,CAAC;AAAA,EAC3F;AACA,SAAO,EAAE,SAAkB,MAAa;AAC5C;;;AC9DA,SAAS,eAAe,KAAAA,IAAG,UAAU,OAAO,oBAAoB,WAAW,UAAU,SAAAC,cAAa;AAClG,SAAS,cAAc,6BAA6B;AAPpD,IAAI,aAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAIO,IAAM,gCAAN,cAA4C,sBAAsB,YAAY,iBAAiB;AACtG;AACA,WAAW;AAAA,EACP,MAAM,EAAE,WAAW,mBAAmB,OAAO,CAAC;AAClD,GAAG,8BAA8B,WAAW,YAAY,MAAM;AAC9D,WAAW;AAAA,EACP,MAAM,EAAE,WAAW,mBAAmB,KAAK,CAAC;AAChD,GAAG,8BAA8B,WAAW,UAAU,MAAM;AAC5D,WAAW;AAAA,EACP,MAAM,EAAE,WAAW,mBAAmB,KAAK,CAAC;AAChD,GAAG,8BAA8B,WAAW,WAAW,MAAM;AAC7D,IAAI,4BAA4B,MAAMC,mCAAkC,8BAA8B;AAAA,EAClG,IAAI,cAAc;AACd,WAAO,CAAC,KAAK,OAAO;AAAA,EACxB;AAAA,EACA,mBAAmB,UAAU;AACzB,SAAK,QAAQ,WAAW;AAAA,EAC5B;AAAA,EACA,SAAS,GAAG;AACR,WAAOD,OAAM,WAAW,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAAA,EAC3D;AAAA,EACA,YAAY,KAAK;AACb,SAAK,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,aAAa,OAAO;AAChB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EACA,gCAAgC,MAAM;AAClC,WAAO,mBAAmB,QAAQ,QAAQ,IAAI;AAAA,EAClD;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,QAAI,CAAC,OAAO;AACR,cAAQ,MAAM;AAAA,QACV,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,eAAK,UAAU;AACf;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,YAAY;AACR,UAAM,UAAU,KAAK,YAAY,OAAK;AAClC,UAAI,QAAQ,EAAE,YAAY;AAC1B,UAAI,EAAE,IAAI;AACN,iBAAS,MAAM,EAAE;AAAA,MACrB;AACA,aAAO;AAAA,IACX;AACA,UAAM,SAAS,CAAC;AAChB,aAAS,iBAAiB,KAAK,YAAY,SAAS,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ;AACzE,WAAKA,OAAM,OAAO,KAAK,MAAM,KAAK,KAAK,OAAO,CAAC,MAAM,SAE9C,CAACA,OAAM,cAAc,EAAE,EAAE,GAAG;AAC/B,eAAO,KAAK,EAAE,SAAS,GAAG,OAAO,QAAQ,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACJ,CAAC;AACD,SAAK,QAAQ,gBAAgB;AAC7B,SAAK,QAAQ,eAAe;AAC5B,SAAK,QAAQ,aAAa;AAAA,EAC9B;AACJ;AACA,WAAW;AAAA,EACP,UAAUD,KAAI,SAAS;AAC3B,GAAG,0BAA0B,WAAW,WAAW,MAAM;AACzD,WAAW;AAAA,EACP,SAAS,EAAE;AACf,GAAG,0BAA0B,WAAW,aAAa,IAAI;AACzD,4BAA4B,WAAW;AAAA,EACnC,cAAc;AAAA,IACV,SAASA,KAAI;AAAA,IAAmB,QAAQ,SAAS;AAAA,IACjD,UAAU,IAAIA,EAAC,aAAaA,EAAC;AAAA,EACjC,CAAC;AACL,GAAG,yBAAyB;;;ACjF5B,SAAS,iBAAAG,gBAAe,KAAAC,IAAG,MAAM,YAAAC,WAAU,SAAAC,QAAO,sBAAAC,qBAAoB,aAAAC,YAAW,YAAAC,WAAU,SAAAC,QAAO,sBAAAC,qBAAoB,oBAAoB;AAC1I,SAAS,cAAcC,8BAA6B;AAPpD,IAAIC,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAKO,IAAI;AAAA,CACV,SAAUC,mBAAkB;AACzB,EAAAA,kBAAiB,UAAU,IAAI;AAC/B,EAAAA,kBAAiB,mBAAmB,IAAI;AACxC,EAAAA,kBAAiB,YAAY,IAAI;AACrC,GAAG,qBAAqB,mBAAmB,CAAC,EAAE;AAC9C,IAAI,yBAAyB,MAAMC,gCAA+B,8BAA8B;AAAA,EAC5F,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,QAAI,SAAS,aAAa;AACtB,WAAK,iBAAiB,KAAK,KAAK;AAAA,IACpC,WACS,CAAC,OAAO;AACb,UAAI,KAAK,UAAU;AACf,gBAAQ,MAAM;AAAA,UACV,KAAK;AACD,oBAAQ,KAAK;AAAA,cACT,KAAK,iBAAiB;AAClB,qBAAK,QAAQ,MAAM;AACnB;AAAA,cACJ;AACI,qBAAK,QAAQ,MAAM;AACnB;AAAA,YACR;AACA;AAAA,UACJ,KAAK;AACD,gBAAI,CAACC,OAAM,cAAc,GAAG,GAAG;AAC3B,mBAAK,QAAQ,MAAM;AACnB,mBAAK,QAAQ,QAAQ,SAAS,KAAK,WAAW,KAAK,MAAM,MAAM;AAAA,YACnE;AACA,iBAAK,cAAc,IAAI,MAAM,QAAQ,CAAC;AACtC;AAAA,QACR;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,cAAc;AACd,WAAO,CAAC,KAAK,OAAO;AAAA,EACxB;AAAA,EACA,mBAAmB,UAAU;AACzB,QAAI,UAAU;AAEV,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,cAAc;AACV,UAAM,YAAY;AAClB,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,SAAS,GAAG;AACR,WAAOA,OAAM,WAAW,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAAA,EAC3D;AAAA,EACA,YAAY,KAAK;AACb,SAAK,MAAM,cAAc,OAAO;AAChC,SAAK,iBAAiB,GAAG;AACzB,SAAK,kBAAkB;AACvB,QAAI,QAAQ,KAAK,QAAQ,OAAO;AAC5B,WAAK,QAAQ,QAAQ;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,iBAAiB,MAAM,KAAK,OAAO;AAC/B,UAAM,YAAY,KAAK;AACvB,QAAIC,oBAAmB,mBAAmB,GAAG,KAAK,QAAQ,aAAa,UAAU,aAAa,YAAY;AACtG,WAAK,MAAM,aAAa,QAAQ,GAAG;AAAA,IACvC,WACS,QAAQ,QAAW;AACxB,WAAK,MAAM,OAAO;AAAA,IACtB,OACK;AACD,WAAK,MAAM,OAAO,UAAU,QAAQ,GAAG;AAAA,IAC3C;AAAA,EACJ;AAAA,EACA,aAAa,OAAO;AAChB,WAAO;AAAA,EACX;AAAA,EACA,gCAAgC,MAAM;AAClC,WAAO;AAAA,EACX;AAAA,EACA,oBAAoB;AAChB,QAAI,UAAU,MAAM;AAChB,WAAK,UAAU,KAAK,aAAa,KAAK;AAAA,MAA4B;AAAA,IACtE;AAEA,QAAI,OAAO,KAAK;AAChB,QAAI,CAACD,OAAM,cAAc,IAAI,GAAG;AAE5B,UAAIC,oBAAmB,mBAAmB,IAAI,GAAG;AAC7C,cAAM,aAAaA,oBAAmB,sBAAsB,MAAM,IAAI,GAAG,OAAO,WAAW;AAE3F,YAAID,OAAM,cAAc,IAAI,KAAK,KAAK,SAAS,KAAK,aAAa,eAAe,KAAK,CAAC,EAAE,OAAO,GAAG;AAC9F,eAAK,UAAU,iBAAiB;AAAA,QACpC,OACK;AACD,gBAAM,MAAM,KAAK,CAAC;AAClB,eAAK,UAAU,iBAAiB;AAChC,eAAK,aAAa,SAAS,cAAc,MAAM,IAAI,QAAQ,EAAE;AAC7D,eAAK,WAAW,IAAI;AAAA,QACxB;AAAA,MACJ,OACK;AACD,aAAK,UAAU,iBAAiB;AAAA,MACpC;AAAA,IAEJ,OACK;AACD,cAAQ;AAAA,IACZ;AAAA,EACJ;AACJ;AACAH,YAAW;AAAA,EACPK,OAAM,EAAE,MAAM,MAAM,CAAC;AACzB,GAAG,uBAAuB,WAAW,aAAa,MAAM;AACxDL,YAAW;AAAA,EACPK,OAAM,EAAE,WAAWC,oBAAmB,QAAQ,CAAC;AACnD,GAAG,uBAAuB,WAAW,YAAY,MAAM;AACvDN,YAAW;AAAA,EACPK,OAAM,EAAE,WAAWC,oBAAmB,OAAO,CAAC;AAClD,GAAG,uBAAuB,WAAW,WAAW,MAAM;AACtDN,YAAW;AAAA,EACPK,OAAM,EAAE,WAAWC,oBAAmB,QAAQ,CAAC;AACnD,GAAG,uBAAuB,WAAW,cAAc,MAAM;AACzDN,YAAW;AAAA,EACPK,OAAM,EAAE,WAAWC,oBAAmB,OAAO,CAAC;AAClD,GAAG,uBAAuB,WAAW,YAAY,MAAM;AACvDN,YAAW;AAAA,EACPO,WAAUC,KAAI,iBAAiB;AACnC,GAAG,uBAAuB,WAAW,WAAW,MAAM;AACtDR,YAAW;AAAA,EACPO,WAAUC,KAAI,WAAW;AAC7B,GAAG,uBAAuB,WAAW,WAAW,MAAM;AACtDR,YAAW;AAAA,EACPO,WAAU,UAAU,OAAO,aAAa;AAC5C,GAAG,uBAAuB,WAAW,SAAS,MAAM;AACpDP,YAAW;AAAA,EACPO,WAAUC,KAAI,OAAO;AACzB,GAAG,uBAAuB,WAAW,SAAS,MAAM;AACpDR,YAAW;AAAA,EACPS,UAAS,EAAE;AACf,GAAG,uBAAuB,WAAW,qBAAqB,IAAI;AAC9D,yBAAyBT,YAAW;AAAA,EAChCU,eAAc;AAAA,IACV,SAASF,KAAI;AAAA,IAAe,QAAQG,UAAS;AAAA,IAC7C,UAAU,IAAIH,EAAC,oBAAoB,IAAI;AAAA,qCACV,IAAI,2CAA2C,IAAI;AAAA,sBAClE,IAAI;AAAA,eACXA,EAAC;AAAA,mBACGA,EAAC,qBAAqB,iBAAiB,QAAQ,8BAA8BA,EAAC;AAAA,mBAC9EA,EAAC,qBAAqB,iBAAiB,iBAAiB,kCAAkCA,EAAC;AAAA,mBAC3FA,EAAC,qBAAqB,iBAAiB,UAAU,kCAAkCA,EAAC;AAAA,gBACvFA,EAAC;AAAA;AAAA;AAAA,WAGNA,EAAC,iBAAiB,IAAI,gDAAgD,iBAAiB,iBAAiB;AAAA,eACpGA,EAAC,4KAA4KA,EAAC;AAAA,YACjLA,EAAC;AAAA,WACFA,EAAC,iBAAiB,IAAI,gDAAgD,iBAAiB,iBAAiB;AAAA,eACpGA,EAAC,kLAAkLA,EAAC;AAAA,YACvLA,EAAC;AAAA;AAAA,WAEFA,EAAC,iBAAiB,IAAI;AAAA,eAClBA,EAAC,6GAA6GI,uBAAsB,YAAY,aAAa,IAAI,OAAOJ,EAAC;AAAA,YAC5KA,EAAC;AAAA;AAAA,IAETA,EAAC;AAAA,cACS,IAAI;AAAA;AAAA,sBAEI,IAAI,eAAe,IAAI;AAAA,wCACL,IAAI,8BAA8B,IAAI;AAAA,eAC/DA,EAAC;AAAA,mBACGA,EAAC,4BAA4B,IAAI,8FAA8FA,EAAC;AAAA,gBACnIA,EAAC;AAAA,eACFA,EAAC;AAAA,4BACY,IAAI;AAAA,mBACbA,EAAC,oCAAoC,IAAI,+BAA+B,IAAI,gDAAgDA,EAAC;AAAA,gBAChIA,EAAC;AAAA;AAAA;AAAA;AAAA,EAIb,CAAC;AACL,GAAG,sBAAsB;;;ACvLzB,SAAS,iBAAAK,gBAAe,KAAAC,IAAG,QAAAC,OAAM,YAAAC,WAAU,SAAAC,QAAO,sBAAAC,qBAAoB,aAAAC,YAAW,SAAAC,QAAO,sBAAAC,qBAAoB,kBAAkB;AAC9H,SAAS,cAAc,oBAAoB;AAP3C,IAAIC,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAGA,IAAM,KAAK,aAAa;AAExB,IAAM,8BAA8B;AAAA,EAChC,OAAO;AAAA,IACH;AAAA,MACI,MAAM;AAAA;AAAA,MAEN,MAAM;AAAA,MACN,SAAS,EAAE,MAAM,cAAc;AAAA,MAC/B,OAAO;AAAA,QACH,SAAS,EAAE,UAAU,CAACP,QAAO,SAASA,QAAO,SAAS,eAAe,oBAAoB,cAAc,GAAG,MAAM,aAAa;AAAA,QAC7H,OAAO,MAAM,UAAU,OAAO,MAAM;AAAA,UAChC;AAAA,YACI,MAAM;AAAA,YAAa,MAAM;AAAA,YACzB,SAAS,EAAE,UAAU,CAACA,QAAO,SAAS,aAAa,aAAa,iBAAiB,eAAe,GAAG,MAAM,aAAa;AAAA,YACtH,YAAY,CAAC,EAAE,MAAM,YAAY,cAAc,IAAI,CAAC;AAAA,UACxD;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YAAc,MAAM;AAAA,YAC1B,SAAS,EAAE,UAAU,CAACA,QAAO,SAAS,aAAa,aAAa,iBAAiB,eAAe,GAAG,MAAM,cAAc;AAAA,YACvH,YAAY,CAAC,EAAE,MAAM,YAAY,cAAc,IAAI,CAAC;AAAA,UACxD;AAAA,QACJ,GAAG,CAAC,QAAQ,UAAU,UAAU,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM;AACpD,iBAAO;AAAA,YACH,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS,EAAE,UAAU,CAACA,QAAO,SAAS,aAAa,UAAU,iBAAiBA,QAAO,iBAAiB,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,OAAO,CAAC,EAAE;AAAA,UAC3J;AAAA,QACJ,CAAC,CAAC;AAAA,MACN;AAAA,IACJ;AAAA,EACJ;AACJ;AACO,IAAM,mBAAmB;AAAA,EAC5B,SAAS,EAAE,MAAM,UAAU,UAAU,CAACA,QAAO,SAAS,eAAe,oBAAoB,cAAc,EAAE;AAAA,EACzG,OAAO;AAAA,IACH,EAAE,MAAM,OAAO,MAAM,UAAU,SAAS,EAAE,MAAM,OAAO,UAAU,CAACA,QAAO,OAAO,EAAE,EAAE;AAAA,EACxF;AACJ;AACA,SAAS,gBAAgB,GAAG;AAExB,IAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,EAAE;AACtD,QAAM,MAAM,EAAE,QAAQ,WAAWK,OAAM,QAAQ,EAAE,QAAQ,QAAQ,KAAK,EAAE,QAAQ,YAAY,CAAC;AAC7F,MAAI,KAAKL,QAAO,OAAO;AAC3B;AACO,SAAS,gBAAgB,UAAU;AACtC,MAAI,QAAQ,YAAY,SAAS,SAAS,CAAC;AAC3C,MAAI,UAAU,YAAY,SAAS,WAAW,EAAE,MAAM,UAAU;AAChE,MAAI,CAACK,OAAM,OAAO,OAAO,GAAG;AACxB,UAAM,MAAM,QAAQ,WAAW,QAAQ,YAAY,CAAC;AACpD,UAAM,UAAU,KAAK,MAAM,KAAK,iBAAiB,QAAQ,QAAQ;AAAA,EACrE;AACA,QAAM,QAAQ,eAAe;AAC7B,SAAO,EAAE,SAAkB,MAAa;AAC5C;AACO,SAAS,oBAAoB,UAAU;AAC1C,MAAI,UAAUA,OAAM,OAAO,CAAC,GAAG,iBAAiB,SAAS,YAAY,SAAS,WAAW,CAAC,CAAC;AAC3F,MAAI,QAAQA,OAAM,MAAM,iBAAiB,KAAK;AAC9C,QAAM,UAAU,KAAK,MAAM,QAAQ,YAAY,SAAS,SAAS,CAAC,GAAG,OAAO,OAAK;AAC7E,QAAI,EAAE,SAAS,OAAO;AAClB,aAAO;AAAA,IACX;AACA,oBAAgB,CAAC;AACjB,WAAO;AAAA,EACX,CAAC,CAAC;AACF,SAAO,EAAE,SAAkB,MAAa;AAC5C;AACA,IAAM,mBAAmBL,QAAO;AAEzB,IAAM,mCAAmC;AAAA,EAC5C,UAAU,MAAM;AAAA,EAChB,SAAS,CAAC,MAAM;AACZ,QAAI,CAACK,OAAM,cAAc,EAAE,GAAG,GAAG;AAC7B,aAAO,EAAE;AAAA,IACb;AACA,YAAQ,EAAE,YAAY,EAAE,SAAS,WAAW,EAAE,SAAS,QAAQ,QAAQ,MAAM,MAAM,EAAE;AAAA,EACzF;AACJ;AACO,IAAM,SAAN,MAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAKhB,OAAO,QAAQ,WAAW;AACtB,WAAOC,oBAAmB,QAAQ,MAAM,kBAAkB,CAAC,WAAW,kBAAkB,sBAAsB,CAACD,OAAM,cAAc,OAAO,EAAE,MAAMA,OAAM,OAAO,SAAS,KAAK,UAAU,MAAM,EAAE;AAAA,EACnM;AACJ;AACA,IAAI,4BAA4B,MAAMG,mCAAkC,WAAW,aAAa;AAAA;AAAA,EAE5F,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,IAAI,oBAAoB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,MAAM,KAAK;AACP,UAAM,OAAO,KAAK,OAAO,IAAI,KAAK,OAAK,UAAU,EAAE,UAAU;AAC7D,SAAK,KAAK,KAAK,QAAQ,IAAI;AAC3B,SAAK,WAAW,KAAK,OAAO;AAE5B,SAAK,kBAAkB;AAAA,EAC3B;AAAA,EACA,iBAAiB,KAAK;AAClB,UAAM,OAAO,KAAK,OAAO,IAAI,KAAK,OAAK,iBAAiB,EAAE,UAAU;AACpE,SAAK,KAAK,KAAK,MAAM;AACrB,SAAK,WAAW,KAAK,OAAO;AAE5B,SAAK,kBAAkB;AAAA,EAC3B;AAAA,EACA,oBAAoB;AAChB,UAAM,UAAUF,oBAAmB,mBAAmB,MAAM,GAAG,mBAAmB;AAClF,QAAI,CAACD,OAAM,cAAc,OAAO,GAAG;AAC/B,cAAQ,OAAO;AAAA,IACnB;AAAA,EACJ;AACJ;AACAE,YAAW;AAAA,EACPL,OAAM,EAAE,MAAM,OAAO,WAAWC,oBAAmB,QAAQ,CAAC;AAChE,GAAG,0BAA0B,WAAW,UAAU,MAAM;AACxDI,YAAW;AAAA,EACPH,WAAU,gBAAgB;AAC9B,GAAG,0BAA0B,WAAW,YAAY,MAAM;AAC1DG,YAAW;AAAA,EACPH,WAAUL,KAAI,eAAe;AACjC,GAAG,0BAA0B,WAAW,YAAY,MAAM;AAC1DQ,YAAW;AAAA,EACPH,WAAUL,KAAI,sBAAsB;AACxC,GAAG,0BAA0B,WAAW,aAAa,MAAM;AAC3DQ,YAAW;AAAA,EACPH,WAAUL,KAAI,iBAAiB;AACnC,GAAG,0BAA0B,WAAW,cAAc,MAAM;AAC5DQ,YAAW;AAAA,EACPH,WAAUL,KAAI,cAAc;AAChC,GAAG,0BAA0B,WAAW,UAAU,MAAM;AACxD,4BAA4BQ,YAAW;AAAA,EACnCT,eAAc;AAAA,IACV,SAASC,KAAI;AAAA,IAAmB,QAAQE,UAAS;AAAA,IACjD,UAAU,IAAIF,EAAC,0DAA0DC,KAAI,+QAA+QD,EAAC;AAAA,sBAC/UC,KAAI,cAAcA,KAAI,QAAQA,KAAI;AAAA;AAAA,WAE7CD,EAAC,qEAAqEA,EAAC;AAAA,WACvEA,EAAC,mLAAmLA,EAAC;AAAA,WACrLA,EAAC,wDAAwDA,EAAC;AAAA;AAAA;AAAA,GAGlEA,EAAC;AAAA,OACGA,EAAC,sBAAsBA,EAAC;AAAA,OACxBA,EAAC,6BAA6BA,EAAC;AAAA,IAClCA,EAAC;AAAA,EACD,CAAC;AACL,GAAG,yBAAyB;AAErB,IAAM,qBAAN,cAAiC,WAAW,aAAa;AAAA,EAC5D,YAAY,UAAU,OAAO,UAAU;AACnC,UAAM,IAAI;AACV,SAAK,qBAAqB;AAC1B,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,oBAAoB;AAChB,UAAM,kBAAkB;AAExB,QAAIU,OAAM,cAAc,KAAK,EAAE,GAAG;AAC9B,WAAK,KAAK,QAAQA,OAAM,WAAW;AAAA,IACvC;AACA,IAAAA,OAAM,SAAS,MAAM,gBAAgB;AAAA,EACzC;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,YAAI,CAAC,KAAK;AACN,eAAK,gBAAgB;AAAA,QACzB,WACS,KAAK,SAAS;AACnB,eAAK,eAAe;AAAA,QACxB;AACA;AAAA,MACJ,KAAK;AACD,YAAI,CAACA,OAAM,OAAO,KAAK,QAAQ,GAAG;AAC9B,eAAK,SAAS,WAAW,CAAC;AAAA,QAC9B;AACA,SAAC,MAAMA,OAAM,WAAWA,OAAM,aAAa,MAAM,MAAM,CAAC,MAAM,YAAY,IAAI,CAAC;AAC/E;AAAA,MACJ,KAAK;AACD,aAAK,YAAY,GAAG;AACpB;AAAA,IACR;AAAA,EACJ;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,SAAK,YAAY;AACjB,SAAK,eAAe;AAAA,EACxB;AAAA,EACA,uBAAuB;AACnB,UAAM,qBAAqB;AAAA,EAC/B;AAAA,EACA,YAAY,MAAM,KAAK,UAAU;AAC7B,SAAK,QAAQ,MAAM,IAAK,OAAO,IAAI,WAAW,IAAI,QAAQ,QAAS;AAAA,EACvE;AAAA,EACA,iBAAiB;AACb,QAAIA,OAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,UAAU,KAAK,WAAW,SAAS,cAAcC,KAAI,UAAU;AACrE,cAAQ,SAAS;AACjB,cAAQ,WAAW,CAAC,KAAK;AACzB,cAAQ,UAAU;AAAA,QACd,UAAU,GAAG,gBAAgB;AAAA,QAC7B,SAAS,GAAG,eAAe;AAAA,MAC/B;AAEA,cAAQ,YAAY,IAAIA,EAAC,+BAA+B,KAAK,EAAE,SAASA,EAAC;AAEzE,MAAAC,oBAAmB,kBAAkB,IAAI,EAAE,YAAY,OAAO;AAAA,IAClE;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,QAAI,CAACF,OAAM,OAAO,KAAK,QAAQ,GAAG;AAC9B,WAAK,SAAS,OAAO;AACrB,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AACJ;AACAG,YAAW;AAAA,EACPC,OAAM,EAAE,MAAM,OAAO,WAAWC,oBAAmB,QAAQ,CAAC;AAChE,GAAG,mBAAmB,WAAW,WAAW,MAAM;AAClDF,YAAW;AAAA,EACPC,OAAM,EAAE,MAAM,OAAO,WAAWC,oBAAmB,QAAQ,CAAC;AAChE,GAAG,mBAAmB,WAAW,YAAY,MAAM;AACnDF,YAAW;AAAA,EACPC,OAAM,EAAE,MAAM,MAAM,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACjF,GAAG,mBAAmB,WAAW,OAAO,MAAM;AAC9CF,YAAW;AAAA,EACPC,OAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,oBAAmB,KAAK,CAAC;AAChF,GAAG,mBAAmB,WAAW,eAAe,MAAM;AACtDF,YAAW;AAAA,EACPC,OAAM,EAAE,MAAM,OAAO,WAAWC,oBAAmB,KAAK,CAAC;AAC7D,GAAG,mBAAmB,WAAW,YAAY,MAAM;AACnDF,YAAW;AAAA,EACPC,OAAM,EAAE,MAAM,OAAO,WAAWC,oBAAmB,KAAK,CAAC;AAC7D,GAAG,mBAAmB,WAAW,sBAAsB,MAAM;;;ACrP7D,SAAS,SAAAC,QAAO,sBAAAC,qBAAoB,SAAAC,cAAa;;;ACAjD,SAAS,iBAAAC,gBAAe,KAAAC,IAAG,QAAAC,OAAM,SAAAC,QAAO,sBAAAC,2BAA0B;AANlE,IAAIC,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAKA,IAAM,gBAAgB;AAAA,EAClB,SAAS,EAAE,MAAM,WAAW,MAAM,QAAQ,aAAa,sBAAsB;AAAA,EAC7E,OAAO;AAAA,IACH;AAAA,MACI,MAAM;AAAA,MAAS,MAAM;AAAA,MAA0B,SAAS;AAAA,QACpD,MAAM;AAAA,MACV;AAAA,MAAG,OAAO;AAAA,QACN,UAAU,MAAMC,QAAO;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,IAAI,yBAAyB,MAAMC,gCAA+B,mBAAmB;AAAA,EACjF,cAAc;AACV,UAAM,oBAAoB,aAAa,CAAC;AAAA,EAC5C;AACJ;AACAF,YAAW;AAAA,EACPG,OAAM,EAAE,aAAa,MAAM,WAAWC,oBAAmB,KAAK,CAAC;AACnE,GAAG,uBAAuB,WAAW,SAAS,MAAM;AACpD,yBAAyBJ,YAAW;AAAA,EAChCK,eAAc;AAAA,IACV,SAASC,KAAI;AAAA,EACjB,CAAC;AACL,GAAG,sBAAsB;;;AC5BzB,SAAS,iBAAAC,gBAAe,KAAAC,IAAG,YAAAC,WAAU,SAAAC,QAAO,sBAAAC,qBAAoB,aAAAC,YAAW,SAAAC,QAAO,sBAAAC,qBAAoB,kBAAkB,WAAW;AANnI,IAAIC,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAMA,IAAM,2BAA2B;AAAA,EAC7B,OAAO;AAAA,IACH,EAAE,MAAM,QAAQ,MAAM,UAAU,YAAY,MAAM,SAAS,EAAE,MAAM,QAAQ,UAAU,CAAC,aAAa,aAAa,WAAW,EAAE,EAAE;AAAA,IAC/H,EAAE,MAAM,SAAS,MAAM,0BAA0B,SAAS,EAAE,MAAM,SAAS,UAAU,CAAC,aAAa,aAAa,YAAY,EAAE,EAAE;AAAA,EACpI;AACJ;AACA,IAAM,iBAAiB;AAAA,EACnB,SAAS;AAAA,IACL,MAAM;AAAA,IAAQ,MAAM;AAAA,IAAe,aAAa;AAAA,EACpD;AAAA,EAAG,OAAO;AAAA,IACN;AAAA,MACI,MAAM;AAAA,MAAY,MAAM;AAAA,MAA0B,eAAe;AAAA,MAAM,SAAS;AAAA,QAC5E,MAAM;AAAA,MACV;AAAA,MAAG,OAAO;AAAA,QACN,UAAUC,KAAI;AAAA,MAClB;AAAA,MAAG,YAAY,CAAC,EAAE,MAAM,YAAY,cAAc,oCAAoC,CAAC;AAAA,IAC3F;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MAAY,MAAM;AAAA,MAAU,eAAe;AAAA,MAAM,SAAS;AAAA,QAC5D,MAAM;AAAA,QAAY,IAAI;AAAA,MAC1B;AAAA,MAAG,YAAY,CAAC,EAAE,MAAM,YAAY,cAAc,oCAAoC,CAAC;AAAA,MACvF,OAAO;AAAA,QACH,QAAQ,CAAC,aAAa,SAAS,UAAU,IAAI,OAAKC,OAAM,OAAO,GAAG,EAAE,YAAY,IAAI,EAAE,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK;AAAA,QACjI,cAAc;AAAA,QAAY,eAAe;AAAA,QACzC,WAAW,CAAC,EAAE,MAAM,YAAY,MAAM,KAAK,CAAC;AAAA,MAChD;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MAAc,MAAM;AAAA,MAAS,SAAS;AAAA,QACxC,MAAM;AAAA,MACV;AAAA,MACA,OAAO,gBAAgB,wBAAwB;AAAA,MAC/C,OAAO;AAAA,QACH,WAAW;AAAA,QACX,WAAW,CAAC,EAAE,MAAM,YAAY,MAAM,KAAK,CAAC;AAAA,MAChD;AAAA,IACJ;AAAA,IACA;AAAA,EACJ;AACJ;AACA,IAAM,oBAAoBD,KAAI;AAC9B,IAAI,mCAAmC,MAAME,0CAAyC,iBAAiB;AAAA,EACnG,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,IAAI,KAAK;AAClD,QAAI,SAAS,WAAW,CAACD,OAAM,OAAO,KAAK,QAAQ,GAAG;AAClD,WAAK,SAAS,MAAM;AAAA,IACxB;AAAA,EACJ;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,UAAM,UAAU,KAAK,WAAWE,oBAAmB,mBAAmB,MAAM,uBAAuB;AACnG,QAAI,CAACF,OAAM,OAAO,KAAK,QAAQ,KAAK,CAACA,OAAM,OAAO,KAAK,KAAK,GAAG;AAC3D,WAAK,SAAS,MAAM;AAAA,IACxB;AAAA,EACJ;AACJ;AACAF,YAAW;AAAA,EACPK,OAAM,EAAE,aAAa,MAAM,WAAWC,oBAAmB,QAAQ,CAAC;AACtE,GAAG,iCAAiC,WAAW,YAAY,MAAM;AACjEN,YAAW;AAAA,EACPK,OAAM,EAAE,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACrE,GAAG,iCAAiC,WAAW,QAAQ,MAAM;AAC7DN,YAAW;AAAA,EACPK,OAAM,EAAE,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACrE,GAAG,iCAAiC,WAAW,SAAS,MAAM;AAC9D,mCAAmCN,YAAW;AAAA,EAC1CO,eAAc,EAAE,SAAS,kBAAkB,CAAC;AAChD,GAAG,gCAAgC;AAEnC,IAAI,0BAA0B,MAAMC,iCAAgC,yBAAyB;AAAA,EACzF,cAAc;AACV,UAAM,oBAAoB,cAAc,CAAC;AACzC,SAAK,WAAW,CAAC,MAAM;AACnB,WAAK,UAAU,EAAE,KAAK,UAAU;AAAA,IACpC;AACA,SAAK,aAAa,CAAC,MAAM;AACrB,WAAK,UAAU,EAAE,KAAK,UAAU;AAAA,IACpC;AACA,SAAK,YAAY,CAAC,MAAM;AACpB,WAAK,SAAS,EAAE;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,IAAI,cAAc;AACd,WAAO,MAAM,KAAK,KAAK,cAAc,QAAQ,EAAE,OAAO,OAAK,EAAE,cAAc,iBAAiB;AAAA,EAChG;AAAA,EACA,QAAQ;AACJ,UAAM,UAAU,KAAK,UAAU,aAAa,KAAK,eAAe,CAAC,GAAG,WAAW,KAAK;AACpF,QAAI,CAACC,OAAM,OAAO,QAAQ,GAAG;AACzB,eAAS,SAAS,SAAS,YAAY;AACnC,YAAI,MAAM,YAAYA,OAAM,OAAO,WAAW,KAAK,OAAK,EAAE,SAAS,MAAM,IAAI,CAAC,GAAG;AAG7E;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,SAAS,CAAC;AAChB,aAAS,aAAa,YAAY;AAC9B,UAAI,CAACA,OAAM,cAAc,UAAU,KAAK,GAAG;AACvC,eAAO,UAAU,IAAI,IAAI,UAAU;AAAA,MACvC,WACS,UAAU,UAAU;AAEzB;AAAA,MACJ;AAAA,IACJ;AACA,YAAQ,MAAM,KAAK;AACnB,YAAQ,SAAS,KAAK;AACtB,YAAQ,cAAc,KAAK;AAC3B,YAAQ,UAAU,KAAK;AACvB,YAAQ,aAAa;AACrB,WAAO,QAAQ,MAAM;AAAA,EACzB;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,SAAK,MAAM;AAAA,EACf;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,QAAI,SAAS,cAAc,CAACA,OAAM,cAAc,GAAG,GAAG;AAClD,WAAK,eAAe,GAAG;AAAA,IAC3B;AAEI,cAAQ,MAAM;AAAA,QACV,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,eAAK,MAAM;AACX;AAAA,MACR;AAAA,EACR;AAAA,EACA,eAAe,WAAW,KAAK,UAAU;AACrC,SAAK,MAAM,KAAK,SAAS,UAAU,SAAS;AAC5C,SAAK,SAAS,SAAS;AACvB,SAAK,SAAS,SAAS,SAAS;AAChC,UAAM,eAAe,KAAK,eAAe,aAAa,KAAK;AAE3D,aAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,UAAI,OAAO,WAAW,CAAC;AACvB,UAAI,WAAW,SAAS,WAAW,KAAK,OAAK,EAAE,SAAS,KAAK,IAAI;AACjE,UAAIA,OAAM,OAAO,QAAQ,GAAG;AACxB,aAAK,OAAO;AAAA,MAChB;AAAA,IACJ;AAEA,aAAS,SAAS,SAAS,YAAY;AACnC,UAAI,WAAW,WAAW,KAAK,OAAK,EAAE,SAAS,MAAM,IAAI;AACzD,UAAIA,OAAM,OAAO,QAAQ,GAAG;AACxB,YAAI,OAAO,WAAW,SAAS,cAAc,iBAAiB;AAC9D,aAAK,OAAO,MAAM;AAClB,qBAAa,YAAY,IAAI;AAAA,MACjC;AACA,eAAS,WAAW,MAAM;AAAA,IAC9B;AAEA,SAAK,aAAa;AAAA,EACtB;AACJ;AACAC,YAAW;AAAA,EACPC,OAAM,EAAE,aAAa,MAAM,MAAM,MAA0C,WAAWC,oBAAmB,KAAK,CAAC;AACnH,GAAG,wBAAwB,WAAW,YAAY,MAAM;AACxDF,YAAW;AAAA,EACPC,OAAM,EAAE,aAAa,MAAM,MAAM,MAA0C,WAAWC,oBAAmB,KAAK,CAAC;AACnH,GAAG,wBAAwB,WAAW,YAAY,MAAM;AACxDF,YAAW;AAAA,EACPC,OAAM,EAAE,aAAa,MAAM,MAAM,OAAO,WAAWC,oBAAmB,OAAO,CAAC;AAClF,GAAG,wBAAwB,WAAW,OAAO,MAAM;AACnDF,YAAW;AAAA,EACPC,OAAM,EAAE,aAAa,MAAM,MAAM,OAAO,WAAWC,oBAAmB,OAAO,CAAC;AAClF,GAAG,wBAAwB,WAAW,UAAU,MAAM;AACtDF,YAAW;AAAA,EACPC,OAAM,EAAE,aAAa,MAAM,MAAM,OAAO,WAAWC,oBAAmB,KAAK,CAAC;AAChF,GAAG,wBAAwB,WAAW,UAAU,MAAM;AACtDF,YAAW;AAAA,EACPC;AAAA;AAAA,EAAkC;AACtC,GAAG,wBAAwB,WAAW,cAAc,MAAM;AAC1DD,YAAW;AAAA,EACPC;AAAA;AAAA,EAAyD;AAC7D,GAAG,wBAAwB,WAAW,UAAU,MAAM;AACtDD,YAAW;AAAA,EACPC,OAAM,EAAE,WAAWC,oBAAmB,QAAQ,CAAC;AACnD,GAAG,wBAAwB,WAAW,YAAY,MAAM;AACxDF,YAAW;AAAA,EACPC,OAAM,EAAE,WAAWC,oBAAmB,QAAQ,CAAC;AACnD,GAAG,wBAAwB,WAAW,WAAW,MAAM;AACvDF,YAAW;AAAA,EACPC,OAAM,EAAE,WAAWC,oBAAmB,QAAQ,CAAC;AACnD,GAAG,wBAAwB,WAAW,WAAW,MAAM;AACvDF,YAAW;AAAA,EACPG,WAAUC,KAAI,QAAQ;AAC1B,GAAG,wBAAwB,WAAW,YAAY,MAAM;AACxDJ,YAAW;AAAA,EACPG,WAAU,aAAa;AAC3B,GAAG,wBAAwB,WAAW,iBAAiB,MAAM;AAC7D,0BAA0BH,YAAW;AAAA,EACjCK,eAAc;AAAA,IACV,SAASD,KAAI;AAAA,IAAiB,QAAQE,UAAS;AAAA,IAC/C,UAAU,IAAIF,EAAC;AAAA,KAClB,IAAI,oBAAoB,iCAAiC,IAAI,mBAAmB,gCAAgC,IAAI,qBAAqB,iCAAiCA,EAAC,uBAAuBA,EAAC,cAAcA,EAAC;AAAA,EACnN,CAAC;AACL,GAAG,uBAAuB;;;AFtN1B,IAAIG,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAOO,IAAM,6BAA6B;AAAA,EACtC,MAAM;AAAA,EAAoB,MAAM;AAAA,EAAU,UAAU;AAAA,EAAe,SAAS,EAAE,MAAM,oBAAoB;AAAA,EAAG,OAAO;AAAA,IAC9G,MAAM,CAAC,eAAe,QAAQ,SAAS;AAAA,EAC3C;AACJ;AACO,IAAM,wBAAwB;AAAA,EACjC,MAAM;AAAA,EAAe,MAAM;AAAA,EAA0B,SAAS,EAAE,MAAM,eAAe;AAAA,EACrF,OAAOC,OAAM,OAAO,CAAC,GAAG,kCAAkC,EAAE,QAAQ,CAAC,MAAM,aAAa,0BAA0B,aAAa,wBAAwB,CAAC;AAC5J;AACO,IAAM,2BAAN,cAAuC,mBAAmB;AAAA,EAC7D,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,mBAAmB;AAAA,EAC5B;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,QAAI,SAAS,eAAe;AACxB,UAAI,CAACA,OAAM,cAAc,GAAG,GAAG;AAC3B,aAAK,eAAe,EAAE,iBAAiB,YAAY,IAAI;AAAA,MAC3D,OACK;AACD,aAAK,eAAe,CAAC;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;AACJ;AACAD,YAAW;AAAA,EACPE,OAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AAClF,GAAG,yBAAyB,WAAW,oBAAoB,MAAM;AACjEH,YAAW;AAAA,EACPE,OAAM,EAAE,MAAM,OAAO,WAAWC,oBAAmB,KAAK,CAAC;AAC7D,GAAG,yBAAyB,WAAW,gBAAgB,MAAM;AAC7DH,YAAW;AAAA,EACPE,OAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AAClF,GAAG,yBAAyB,WAAW,eAAe,MAAM;AAC5DH,YAAW;AAAA,EACPE,OAAM,EAAE,WAAWC,oBAAmB,QAAQ,CAAC;AACnD,GAAG,yBAAyB,WAAW,YAAY,MAAM;;;AG3CzD,SAAS,iBAAAC,gBAAe,KAAAC,UAAS;AANjC,IAAIC,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAIA,IAAI,+BAA+B,MAAMC,sCAAqC,mBAAmB;AACjG;AACA,+BAA+BD,YAAW;AAAA,EACtCE,eAAc;AAAA,IACV,SAASC,KAAI;AAAA,EACjB,CAAC;AACL,GAAG,4BAA4B;;;ACT/B,SAAS,iBAAAC,gBAAe,KAAAC,IAAG,QAAAC,OAAM,SAAAC,QAAO,sBAAAC,2BAA0B;AANlE,IAAIC,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAKA,IAAMC,iBAAgB;AAAA,EAClB,SAAS,EAAE,MAAM,SAAS,MAAM,SAAS,aAAa,gBAAgB;AAAA,EACtE,OAAO;AAAA,IACH;AAAA,MACI,MAAM;AAAA,MAAY,MAAM;AAAA,MAA0B,SAAS;AAAA,QACvD,MAAM;AAAA,MACV;AAAA,MAAG,OAAO;AAAA,QACN,UAAU,MAAMC,QAAO;AAAA,QAAW,MAAM;AAAA,MAC5C;AAAA,MACA,YAAY,CAAC;AAAA,QACL,MAAM;AAAA,QAAS,cAAc;AAAA,QAAgC,QAAQ,EAAE,KAAK,EAAE;AAAA,MAClF,CAAC;AAAA,IACT;AAAA,EACJ;AACJ;AACA,IAAI,0BAA0B,MAAMC,iCAAgC,mBAAmB;AAAA,EACnF,cAAc;AACV,UAAM,oBAAoBF,cAAa,CAAC;AACxC,SAAK,WAAW;AAAA,EACpB;AACJ;AACAD,YAAW;AAAA,EACPI,OAAM,EAAE,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACrE,GAAG,wBAAwB,WAAW,YAAY,MAAM;AACxDL,YAAW;AAAA,EACPI,OAAM,EAAE,WAAWC,oBAAmB,OAAO,CAAC;AAClD,GAAG,wBAAwB,WAAW,QAAQ,MAAM;AACpD,0BAA0BL,YAAW;AAAA,EACjCM,eAAc;AAAA,IACV,SAASC,KAAI;AAAA,IAAiB,UAAU,IAAIA,EAAC,oFAAoFA,EAAC;AAAA,EACtI,CAAC;AACL,GAAG,uBAAuB;;;ACnC1B,SAAS,iBAAAC,gBAAe,KAAAC,IAAG,SAAAC,QAAO,sBAAAC,qBAAoB,SAAAC,QAAO,eAAe;;;ACN5E;AAAA;AAAA;AAAA;AACA,SAAS,mBAAmB;AAE5B,IAAM,MAAM;AACL,IAAM,mBAAN,MAAuB;AAAA,EAC1B,YAAY,WAAW,IAAI,YAAY,QAAQ,cAAc,GAAG;AAC5D,SAAK,WAAW;AAChB,SAAK,sBAAsB,CAAC;AAAA,EAChC;AAAA,EACA,MAAM,KAAK,KAAK,SAAS;AACrB,QAAI,MAAM,MAAM,KAAK,SAAS,KAAK,KAAK,OAAO;AAC/C,QAAI,OAAO,MAAM;AACb,UAAI,GAAG,IAAI,CAAC;AAEZ,eAAS,YAAY,IAAI,WAAW;AAChC,cAAM,KAAK,eAAe,KAAK,UAAU,OAAO;AAAA,MACpD;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,MAAM,eAAe,KAAK,UAAU,SAAS;AACzC,UAAM,WAAW,SAAS;AAC1B,QAAI,YAAY,SAAS,MAAM;AAC3B,eAAS,SAAS,MAAM,KAAK,eAAe,KAAK,EAAE,MAAM,SAAS,UAAU,QAAQ,SAAS,KAAK,GAAG,OAAO;AAAA,IAChH;AAEA,UAAM,aAAa,SAAS;AAC5B,aAAS,aAAc,cAAc,CAAC,GAAI;AACtC,UAAI,UAAU,QAAQ,UAAU,UAAU;AACtC,YAAI,SAAS,MAAM,KAAK,eAAe,KAAK,EAAE,MAAM,UAAU,UAAU,QAAQ,UAAU,KAAK,GAAG,OAAO;AACzG,kBAAU,SAAS;AAAA,MACvB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,aAAa;AACT,UAAM,QAAQ,KAAK,OAAO,OAAO,KAAK;AACtC,QAAI,OAAO;AACP,eAAS,OAAO,MAAM;AAClB,cAAM,eAAe,GAAG;AAAA,MAC5B;AAEA,WAAK,OAAO,CAAC;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,KAAK,MAAM,SAAS;AACrC,QAAI,SAAS,OAAO,SAAS;AACzB,UAAI,OAAO,CAAC;AACZ,UAAI,QAAQ,KAAK,MAAM;AAEnB,YAAI,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG;AACrB,iBAAO,IAAI,GAAG,EAAE,KAAK,IAAI;AAAA,QAC7B;AACqG,YAAI,GAAG,EAAE,KAAK,IAAI,IAAI;AAC3H,YAAI,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG;AAC1B,YAAI,eAAe,KAAK,KAAK,IAAI,GAAG;AAEhC,wBAAc,KAAK;AAAA,QACvB,OACK;AACD,kBAAQ,KAAK;AAAA,0CAAwL;AACrM;AAAA,QACJ;AACA,YAAI,aAAa;AACb,cAAI,aAAa,YAAY;AACzB,gBAAI,WAAW,MAAM,MAAM,aAAa,EAAE,aAAa,QAAQ,MAAM,QAAQ,QAAiB,CAAC;AAC/F,gBAAI,SAAS,IAAI;AACb,qBAAO,MAAM,SAAS,KAAK;AAAA,YAC/B;AAAA,UACJ;AACA,cAAI,KAAK,OAAO;AAEZ,mBAAO,KAAK,MAAM,iBAAiB,WAAW;AAC9C,gBAAI,CAAC,MAAM;AAEP,qBAAO,MAAM,WAAW;AACxB,mBAAK,oBAAoB,KAAK,WAAW;AACzC,mBAAK,MAAM;AAAA,gBAAiB;AAAA,gBAAa;AAAA;AAAA,gBAA+C;AAAA,cAAK;AAAA,YACjG;AAAA,UACJ,OACK;AAED,mBAAO,MAAM,WAAW;AAAA,UAC5B;AAAA,QACJ;AACA,YAAI,SAAS,KAAK;AAClB,iBAAS,OAAO,OAAO,YAAY;AAC/B,cAAI,SAAS,OAAO,WAAW,GAAG,GAAG,QAAQ,QAAQ,KAAK,MAAM,KAAK,OAAK,EAAE,SAAS,GAAG;AACxF,cAAI,YAAY,OAAO,OAAO;AAAA,YAC1B,MAAM;AAAA,YAAK,MAAM,OAAO,QAAQ;AAAA,YAAQ,OAAO;AAAA,UACnD,GAAG;AAAA,UAAmD,EAAE,YAAY,KAAK,CAAC;AAC1E,cAAI,OAAO;AACP,gBAAI,OAAQ,OAAO,SAAS,OAAO,MAAM,QAAS,OAAO;AACzD,gBAAI,MAAM;AACN,kBAAI,MAAM,YAAY,QAAQ,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI;AACzE,kBAAI,IAAI,GAAG,EAAE,GAAG,GAAG;AACf,0BAAU,QAAQ,IAAI,GAAG,EAAE,GAAG;AAAA,cAClC,OACK;AAED,0BAAU,QAAQ,MAAM,OAAO,GAAG;AAAA,cACtC;AAAA,YACJ;AAAA,UACJ;AACA,eAAK,KAAK,SAAS;AAAA,QACvB;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,WAAO,MAAM,OAAO,IAAI;AAAA,EAC5B;AACJ;;;ADnHA,IAAIC,cAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAMA,IAAM,uBAAuB;AAAA,EACzB,SAAS,EAAE,MAAM,gBAAgB,MAAM,gBAAgB,aAAa,yCAAyC;AAAA,EAC7G,OAAO;AAAA,IACH;AAAA,MACI,MAAM;AAAA,MAAO,MAAM;AAAA,MAAQ,SAAS;AAAA,QAChC,MAAM;AAAA,QAAO,aAAa;AAAA,QAAqD,UAAU,CAAC,WAAW;AAAA,QACrG,WAAW;AAAA,MACf;AAAA,MACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,YAAY,CAAC;AAAA,QACL,MAAM;AAAA,QAAY,cAAc;AAAA,MACpC,CAAC;AAAA,IACT;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MAAY,MAAM;AAAA,MAAW,SAAS;AAAA,QACxC,MAAM;AAAA,QAAiB,aAAa;AAAA,QAA0C,UAAU,CAAC,WAAW;AAAA,QACpG,IAAI;AAAA,MACR;AAAA,MACA,OAAO,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,EACJ;AACJ;AACA,IAAI,gCAAgC,MAAMC,uCAAsC,yBAAyB;AAAA,EACrG,YAAY,WAAW,IAAI,iBAAiB,GAAG,SAAS,IAAI,QAAQ,GAAG;AACnE,UAAM,oBAAoB,oBAAoB,CAAC;AAC/C,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,YAAQ,MAAM;AAAA,MACV,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,aAAK,UAAU;AACf;AAAA,MACJ,KAAK;AACD,aAAK,SAAS,QAAQ,MAAM,KAAK,SAAS;AAC1C;AAAA,IACR;AAAA,EACJ;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,QAAI,KAAK,UAAU;AACf,WAAK,SAAS,QAAQ,KAAK;AAAA,IAC/B;AACA,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,YAAY;AACR,QAAI,KAAK,WAAW,KAAK,YAAY,CAACC,OAAM,cAAc,KAAK,GAAG,GAAG;AACjE,WAAK,WAAW;AAChB,WAAK,SAAS,KAAK,KAAK,GAAG,EAAE,KAAK,OAAK;AACnC,aAAK,WAAW;AAChB,aAAK,WAAW;AAAA,MACpB,GAAG,OAAK;AACJ,aAAK,WAAW;AAAA,MACpB,CAAC;AAAA,IACL;AAAA,EACJ;AACJ;AACAF,YAAW;AAAA,EACPG,OAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AAClF,GAAG,8BAA8B,WAAW,OAAO,MAAM;AACzDJ,YAAW;AAAA,EACPG,OAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,oBAAmB,QAAQ,CAAC;AACnF,GAAG,8BAA8B,WAAW,YAAY,MAAM;AAC9DJ,YAAW;AAAA,EACPG,OAAM,EAAE,WAAWC,oBAAmB,KAAK,CAAC;AAChD,GAAG,8BAA8B,WAAW,YAAY,MAAM;AAC9D,gCAAgCJ,YAAW;AAAA,EACvCK,eAAc,EAAE,SAASC,KAAI,sBAAsB,CAAC;AACxD,GAAG,6BAA6B;;;AE7EhC,SAAS,SAAAC,QAAO,sBAAAC,qBAAoB,SAAAC,QAAO,sBAAAC,qBAAoB,SAAS,QAAAC,aAAY;AANpF,IAAIC,eAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAIO,IAAM,uBAAN,cAAmC,mBAAmB;AAAA,EACzD,YAAY,UAAU,UAAU,GAAG,MAAM;AACrC,UAAM,UAAU,IAAI;AACpB,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACnB;AAAA;AAAA,EAEA,oBAAoB;AAChB,UAAM,kBAAkB;AACxB,IAAAC,OAAM,SAAS,MAAM,eAAeC,QAAO,qDAAqD;AAAA,EACpG;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,QAAAD,OAAM,YAAY,MAAM,cAAc,MAAM,CAAC,EAAE;AAC/C,QAAAA,OAAM,SAAS,MAAM,cAAc,MAAM,CAAC,EAAE;AAC5C;AAAA,MACJ,KAAK;AACD,QAAAA,OAAM,YAAY,MAAM,QAAQ,GAAG,EAAE;AACrC,QAAAA,OAAM,SAAS,MAAM,QAAQ,GAAG,EAAE;AAClC;AAAA,MACJ,KAAK;AACD,QAAAA,OAAM,YAAY,MAAM,cAAc,MAAM,CAAC,EAAE;AAC/C,QAAAA,OAAM,SAAS,MAAM,cAAc,MAAM,CAAC,EAAE;AAC5C;AAAA,MACJ,KAAK;AACD,QAAAA,OAAM,YAAY,MAAM,QAAQ,GAAG,EAAE;AACrC,QAAAA,OAAM,SAAS,MAAM,QAAQ,GAAG,EAAE;AAClC;AAAA,MACJ,KAAK;AACD,SAAC,KAAK,UAAUA,OAAM,WAAWA,OAAM,aAAa,MAAM,MAAM,CAAC,MAAMC,QAAO,SAAS,CAAC;AACxF;AAAA,MACJ,KAAK;AACD,SAAC,KAAK,UAAUD,OAAM,WAAWA,OAAM,aAAa,MAAM,MAAM,CAAC,MAAMC,QAAO,UAAU,CAAC;AACzF;AAAA,IACR;AAAA,EACJ;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,gBAAgB;AACZ,WAAOC,oBAAmB,aAAa,MAAM,OAAK,aAAa,2BAA2B;AAAA,EAC9F;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,QAAI,OAAO,KAAK,aAAa,KAAK,cAAc;AAChD,QAAI,CAACF,OAAM,OAAO,IAAI,GAAG;AACrB,WAAK,SAAS,IAAI;AAAA,IACtB;AAAA,EACJ;AAAA,EACA,uBAAuB;AACnB,QAAI,CAACA,OAAM,OAAO,KAAK,UAAU,GAAG;AAChC,WAAK,WAAW,WAAW,IAAI;AAAA,IACnC;AACA,UAAM,qBAAqB;AAAA,EAC/B;AACJ;AACAD,aAAW;AAAA,EACPI,OAAM,EAAE,MAAM,MAAM,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACjF,GAAG,qBAAqB,WAAW,UAAU,MAAM;AACnDL,aAAW;AAAA,EACPI,OAAM,EAAE,MAAM,MAAM,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACjF,GAAG,qBAAqB,WAAW,OAAO,MAAM;AAChDL,aAAW;AAAA,EACPI,OAAM,EAAE,MAAM,MAAM,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACjF,GAAG,qBAAqB,WAAW,WAAW,MAAM;AACpDL,aAAW;AAAA,EACPI,OAAM,EAAE,MAAM,MAAM,aAAa,MAAM,WAAWC,oBAAmB,OAAO,CAAC;AACjF,GAAG,qBAAqB,WAAW,WAAW,MAAM;AACpDL,aAAW;AAAA,EACPI,OAAM,EAAE,MAAM,MAAM,aAAa,MAAM,WAAWC,oBAAmB,QAAQ,CAAC;AAClF,GAAG,qBAAqB,WAAW,WAAW,MAAM;AACpDL,aAAW;AAAA,EACPI,OAAM,EAAE,MAAM,MAAM,aAAa,MAAM,WAAWC,oBAAmB,QAAQ,CAAC;AAClF,GAAG,qBAAqB,WAAW,WAAW,MAAM;AAC7C,IAAM,0BAA0B;AAChC,IAAM,4BAA4B;AAClC,IAAM,wBAAwB;AAC9B,IAAM,sBAAN,cAAkC,YAAY;AAAA,EACjD,YAAY,MAAM,WAAW;AACzB,UAAM,yBAAyBJ,OAAM,OAAO,aAAa,CAAC,GAAG,EAAE,QAAQ,KAAK,CAAC,CAAC;AAAA,EAClF;AACJ;AACO,IAAM,wBAAN,cAAoC,YAAY;AAAA,EACnD,YAAY,MAAM,WAAW;AACzB,UAAM,2BAA2BA,OAAM,OAAO,aAAa,CAAC,GAAG,EAAE,QAAQ,KAAK,CAAC,CAAC;AAAA,EACpF;AACJ;AACO,IAAM,8BAAN,cAA0C,qBAAqB;AAAA,EAClE,IAAI,eAAe;AACf,WAAO;AAAA,EACX;AAAA,EACA,SAAS,MAAM;AACX,WAAO,gBAAgB;AAAA,EAC3B;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,IAAAA,OAAM,SAAS,KAAK,cAAcC,QAAO,gBAAgB;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,MAAM;AACb,SAAK,aAAa,YAAY,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,MAAM;AACX,QAAI,CAAC,KAAK,SAAS,IAAI,GAAG;AACtB,WAAK,IAAI,QAAQ,SAAS,OAAO,GAAI,QAAQ,KAAK,SAAU,wCAAwC,KAAK,SAAS,WAAW;AAC7H,aAAO;AAAA,IACX;AACA,QAAI,SAAS;AACb,UAAM,QAAQ,KAAK,QAAQ,KAAK,SAAS,CAAC;AAC1C,QAAID,OAAM,cAAc,KAAK,GAAG;AAC5B,WAAK,QAAQ,CAAC,IAAI;AAClB,eAAS;AAAA,IACb,WACS,MAAM,QAAQ,IAAI,MAAM,IAAI;AACjC,YAAM,KAAK,IAAI;AACf,eAAS;AAAA,IACb;AAEA,QAAI,QAAQ;AACR,WAAK,cAAc,IAAI,oBAAoB,IAAI,CAAC;AAAA,IACpD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,MAAM;AACb,UAAM,QAAQ,KAAK,OAAO,MAAM,CAACA,OAAM,cAAc,KAAK,KAAK,MAAM,QAAQ,IAAI;AACjF,QAAI,OAAO,GAAG;AACV,UAAIK,QAAO,MAAM,OAAO,KAAK,CAAC;AAC9B,WAAK,cAAc,IAAI,sBAAsBA,MAAK,CAAC,CAAC,CAAC;AACrD,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AACJ;AACAN,aAAW;AAAA,EACPI;AAAA;AAAA,EAAyD;AAC7D,GAAG,4BAA4B,WAAW,SAAS,MAAM;;;ACxJzD,SAAS,iBAAAG,gBAAe,KAAAC,KAAG,YAAAC,WAAU,SAAAC,SAAO,sBAAAC,4BAA0B;AANtE,IAAIC,eAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAMA,IAAM,gBAAgB,oBAAoB;AAAA,EACtC,SAAS,EAAE,MAAM,iBAAiB,MAAM,QAAQ,aAAa,qBAAqB;AAAA,EAClF,OAAO,CAAC;AAAA,IACA,MAAM;AAAA,IAAQ,MAAM;AAAA,IAA0B,SAAS,EAAE,MAAM,OAAO;AAAA,IAAG,OAAO;AAAA,EACpF,CAAC;AACT,CAAC;AACD,IAAI,yBAAyB,MAAMC,gCAA+B,qBAAqB;AAAA,EACnF,cAAc;AACV,UAAM,aAAa;AAAA,EACvB;AACJ;AACAD,aAAW;AAAA,EACPE,QAAM,EAAE,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AACrE,GAAG,uBAAuB,WAAW,QAAQ,MAAM;AACnD,yBAAyBH,aAAW;AAAA,EAChCI,eAAc;AAAA,IACV,SAASC,MAAI;AAAA,IAAgB,QAAQC,UAAS;AAAA,IAC9C,UAAU,IAAID,GAAC,mCAAmCA,GAAC;AAAA,EACvD,CAAC;AACL,GAAG,sBAAsB;;;ACxBzB,SAAS,iBAAAE,iBAAe,KAAAC,KAAG,QAAAC,OAAM,YAAAC,WAAU,aAAAC,kBAAiB;AAN5D,IAAIC,eAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAOA,IAAI,2BAA2B,MAAMC,kCAAiC,4BAA4B;AAAA,EAC9F,SAAS,MAAM;AACX,UAAM,SAAS,MAAM,SAAS,IAAI;AAClC,QAAI,QAAQ;AACR,WAAK,OAAO;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AACJ;AACAD,aAAW;AAAA,EACPE,WAAUC,MAAI,YAAY;AAC9B,GAAG,yBAAyB,WAAW,aAAa,MAAM;AAC1D,2BAA2BH,aAAW;AAAA,EAClCI,gBAAc;AAAA,IACV,SAASD,MAAI;AAAA,IAAkB,QAAQE,UAAS;AAAA,IAChD,UAAU,IAAIF,GAAC;AAAA;AAAA,WAEZA,GAAC,iDAAiDG,KAAI;AAAA,wBACzCA,KAAI;AAAA,eACbH,GAAC,mEAAmEG,KAAI,yBAAyBH,GAAC;AAAA,eAClGA,GAAC,oDAAoDA,GAAC;AAAA,YACzDA,GAAC;AAAA;AAAA,IAETA,GAAC;AAAA,GACFA,GAAC,iCAAiCG,KAAI,qBAAqBH,GAAC;AAAA,GAC5DA,GAAC,cAAcA,GAAC;AAAA,EACf,CAAC;AACL,GAAG,wBAAwB;;;ACjC3B,SAAS,iBAAAI,iBAAe,KAAAC,KAAG,QAAAC,OAAM,SAAAC,SAAO,sBAAAC,sBAAoB,YAAAC,WAAU,SAAAC,QAAO,MAAAC,KAAI,2BAAAC,gCAA+B;AANhH,IAAIC,eAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAKA,SAAS,mBAAmB;AACxB,QAAM,MAAM,SAAS,gBAAgB,8BAA8B,KAAK;AACxE,MAAI,MAAM,gBAAgB;AAC1B,MAAI,MAAM,SAAS;AACnB,MAAI,aAAa,UAAU,MAAM;AACjC,MAAI,aAAa,SAAS,MAAM;AAChC,MAAI,aAAa,uBAAuB,MAAM;AAC9C,MAAI,aAAa,SAAS,mBAAmB;AAG7C,MAAI,YAAY;AAChB,SAAO;AACX;AACO,IAAM,eAAe;AAC5B,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AAAA,EAClB,SAAS;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,EACjB;AAAA,EACA,OAAO;AAAA,IACH;AAAA,MACI,MAAM;AAAA,MAAQ,MAAM;AAAA,MAAO,SAAS;AAAA,QAChC,MAAM;AAAA,QAAQ,UAAU,CAAC,WAAW;AAAA,MACxC;AAAA,MAAG,YAAY;AAAA,QACX,EAAE,MAAM,YAAY,cAAc,GAAG;AAAA,QACrC;AAAA,UACI,MAAM;AAAA,UAAS,cAAc;AAAA,UAAI,QAAQ;AAAA,YACrC,KAAK;AAAA,YAAG,KAAK;AAAA,UACjB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IAAG;AAAA,MACC,MAAM;AAAA,MAAU,MAAM;AAAA,MAAO,SAAS;AAAA;AAAA,QAElC,MAAM;AAAA,QAAW,UAAU,CAAC,WAAW;AAAA,MAC3C;AAAA,MAAG,YAAY;AAAA;AAAA,QAEX;AAAA,UACI,MAAM;AAAA,UAAS,cAAc;AAAA,UAAI,QAAQ;AAAA,YACrC,KAAK;AAAA,YAAG,KAAK;AAAA,YAAG,MAAM;AAAA,UAC1B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IAAG;AAAA,MACC,MAAM;AAAA,MAAa,MAAM;AAAA,MAAO,SAAS;AAAA;AAAA,QAErC,MAAM;AAAA,QAAc,UAAU,CAAC,WAAW;AAAA,MAC9C;AAAA,MAAG,YAAY;AAAA;AAAA,QAEX;AAAA,UACI,MAAM;AAAA,UAAS,cAAc;AAAA,UAAI,QAAQ;AAAA,YACrC,KAAK;AAAA,YAAG,KAAK;AAAA,YAAG,MAAM;AAAA,UAC1B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,IAAI,yBAAyB,MAAMC,gCAA+B,4BAA4B;AAAA,EAC1F,cAAc;AACV,UAAM,oBAAoB,aAAa,GAAG,kBAAkB,MAAM;AAClE,SAAK,wBAAwB,CAAC,QAAQ;AAClC,UAAI,IAAI,OAAO,iBAAiB,SAAS,IAAI,OAAO,iBAAiB,WAAW;AAC5E,cAAM,SAAS,IAAI;AACnB,aAAK,OAAO,KAAK,IAAI,KAAK,MAAM,OAAO,MAAM,OAAO,OAAO;AAAA,MAC/D;AAAA,IACJ;AACA,SAAK,mBAAmB,CAAC,QAAQ;AAC7B,YAAM,OAAO,IAAI,QAAQ,KAAK,KAAK;AACnC,cAAQ,IAAI,MAAM;AAAA,QACd,KAAKC,IAAG,kBAAkB;AACtB,eAAK,WAAW,QAAQ,SAAO;AAAE,gBAAI,MAAM,gBAAgB;AAAA,UAAQ,CAAC;AACpE,eAAK,aAAa;AAAA,YACd,SAAS,GAAG;AAAA,YACZ,SAAS,GAAG;AAAA,YACZ,KAAK,GAAG;AAAA,YACR,KAAK,GAAG;AAAA,UACZ;AACA;AAAA,QACJ,KAAKA,IAAG,kBAAkB;AACtB,eAAK,WAAW,QAAQ,SAAO;AAAE,gBAAI,MAAM,gBAAgB;AAAA,UAAQ,CAAC;AACpE;AAAA,QACJ,KAAKA,IAAG,kBAAkB;AACtB,cAAI,aAAa,KAAK;AACtB,cAAI,MAAM,CAAC,WAAW,MAAM,kBAAkB;AAC9C,cAAI,MAAM,CAAC,WAAW,MAAM,eAAe;AAC3C,gBAAM,WAAW,MAAM,KAAK,WAAW,SAAS,YAAY,MAAM,KAAK,WAAW;AAElF,cAAI,CAAC,KAAK,YAAY,IAAI,KAAK,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG;AACzD,gBAAI,mBAAmB;AAEvB,gBAAI,aAAa,KAAK,WAAW,mBAAmB;AAChD,iCAAmB,GAAG,WAAW;AACjC,iBAAG,SAAS;AAAA,YAChB;AACA,gBAAI,cAAc,KAAK,QAAQ,gBAAgB;AAC3C,iCAAmB,oBAAqB,GAAG,QAAQ;AACnD,iBAAG,MAAM;AAAA,YACb;AACA,gBAAI,kBAAkB;AAAA,YAGtB;AAAA,UACJ;AACA;AAAA,MACR;AACA;AAAA,IACJ;AACA,SAAK,iBAAiB,CAAC,QAAQ;AAC3B,cAAQ,IAAI,MAAM;AAAA,QACd,KAAKA,IAAG,iBAAiB;AACrB,UAAAC,OAAM,SAAS,IAAI,OAAO,SAASC,QAAO,YAAY;AACtD,eAAK,WAAW,QAAQ,SAAO;AAAE,gBAAI,MAAM,gBAAgB;AAAA,UAAQ,CAAC;AACpE;AAAA,QACJ,KAAKF,IAAG,iBAAiB;AACrB,eAAK,WAAW,QAAQ,SAAO;AAAE,gBAAI,MAAM,gBAAgB;AAAA,UAAQ,CAAC;AACpE,UAAAC,OAAM,YAAY,IAAI,OAAO,SAASC,QAAO,YAAY;AACzD;AAAA,QACJ,KAAKF,IAAG,iBAAiB;AACrB,cAAI,eAAe;AAEnB,gBAAM,MAAM,EAAE,GAAG,IAAI,SAAS,GAAG,IAAI,QAAQ,GAAG,SAAS,IAAI,OAAO;AACpE,gBAAM,aAAa,SAAS,kBAAkB,IAAI,GAAG,IAAI,CAAC,EAAE,KAAK,OAAK,KAAK,UAAU,YAAY,QAAQ,CAAC,KAAK,CAAC;AAChH,cAAI,YAAY;AACZ,gBAAI,MAAM,CAAC,WAAW,MAAM;AAC5B,gBAAI,MAAM,CAAC,WAAW,MAAM;AAC5B,kBAAM,SAAS,IAAI,OAAO,SAAS,WAAW,OAAO,SAAS,GAAG,WAAW,OAAO,MAAM;AACzF,kBAAM,UAAU,IAAI,MAAM,UAAU,UAAU,IAAI,MAAM;AACxD,gBAAI,CAAC,KAAK,YAAY,QAAQ,OAAO,QAAQ,OAAO,KAAK,SAAS,OAAO,GAAG;AACxE,kBAAI,mBAAmB;AAEvB,kBAAI,OAAO,YAAY,OAAO,SAAS,OAAO,GAAG;AAC7C,mCAAmB,OAAO,YAAY;AACtC,uBAAO,UAAU;AAAA,cACrB;AACA,kBAAI,OAAO,YAAY,OAAO,WAAW,QAAQ,GAAG;AAChD,mCAAmB,oBAAoB,OAAO,YAAY;AAC1D,uBAAO,UAAU;AAAA,cACrB;AACA,kBAAI,kBAAkB;AAAA,cAGtB;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,MACR;AAAA,IACJ;AACA,SAAK,aAAa,CAAC;AAAA,EACvB;AAAA,EACA,SAAS,MAAM;AACX,QAAI,SAAS,MAAM,SAAS,IAAI;AAChC,QAAI,QAAQ;AACR,YAAM,MAAM,KAAK,OAAO,GAAG,SAAS,KAAK,UAAU,GAAG,UAAU,KAAK,WAAW,GAAG,UAAU,KAAK,WAAW;AAC7G,UAAI,YAAY,CAAC,KAAK,YAAY,MAAM,QAAQ,KAAK,SAAS,OAAO;AACrE,UAAI,WAAW;AACX,aAAK,MAAM;AACX,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,UAAU;AAAA,MACnB,OACK;AACD,YAAI,CAAC,WAAW;AAEZ,cAAI,QAAQ,CAAC,mBAAmB,UAAU;AACtC,gBAAI,cAAc,KAAK,UAAU;AACjC,gBAAI,CAAC,kBAAkB;AACnB,4BAAc,cAAc,UAAU;AAAA,YAC1C;AACA,qBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAChC,uBAAS,IAAI,GAAG,KAAK,aAAa,KAAK;AACnC,oBAAI,CAAC,KAAK,YAAY,MAAM,GAAG,GAAG,SAAS,OAAO,GAAG;AACjD,uBAAK,SAAS;AACd,uBAAK,MAAM;AACX,uBAAK,UAAU,KAAK,IAAI,cAAc,IAAI,GAAG,OAAO;AACpD,uBAAK,UAAU;AACf,8BAAY;AACZ;AAAA,gBACJ;AAAA,cACJ;AACA,kBAAI;AACA;AAAA,YACR;AAAA,UACJ;AACA,gBAAM;AACN,cAAI,CAAC,aAAa,UAAU,GAAG;AAE3B,kBAAM,IAAI;AAAA,UACd;AAAA,QACJ;AAEA,YAAI,CAAC,WAAW;AACZ,eAAK;AACL,eAAK,MAAM,KAAK,OAAO;AACvB,eAAK,SAAS;AAAA,QAClB;AAAA,MACJ;AAGA,WAAK,YAAY,CAAC,KAAK,WAAW,KAAK,SAAS;AAChD,WAAK,iBAAiBG,0BAAyB,KAAK,uBAAuB,KAAK;AAAA,IACpF;AAEA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,MAAM;AACb,QAAI,SAAS,MAAM,WAAW,IAAI;AAClC,QAAI,QAAQ;AACR,WAAK,oBAAoBA,0BAAyB,KAAK,uBAAuB,KAAK;AACnF,YAAM,MAAM,KAAK,UAAU,QAAQ,KAAK,SAAS;AACjD,UAAI,OAAO;AACP,aAAK,UAAU,OAAO,KAAK,CAAC;AAChC,YAAM,OAAO,KAAK,UAAU,QAAQ,KAAK,SAAS;AAClD,UAAI,QAAQ;AACR,aAAK,UAAU,OAAO,MAAM,CAAC;AAAA,IACrC;AACA,WAAO;AAAA,EACX;AAAA,EACA,YAAY,KAAK,KAAK,KAAK,SAAS,SAAS;AACzC,aAAS,QAAQ,KAAK,OAAO;AACzB,UAAI,SAAS;AACb,UAAI,WAAW,KAAK;AAChB;AAAA,MACJ;AACA,UAAK,OAAO,SAAU,MAAM,WAAa,OAAO,SAAS,OAAO,UAAW,QACnE,OAAO,MAAO,MAAM,WAAa,OAAO,MAAM,OAAO,UAAW,MAAM;AAC1E,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,oBAAoB;AAChB,UAAM,kBAAkB;AACxB,IAAAF,OAAM,SAAS,MAAMC,QAAO,OAAO;AAEnC,QAAI,WAAW,KAAK,YAAY,SAAS,cAAcE,MAAI,YAAY;AACvE,QAAI,UAAU,SAAS,cAAc,KAAK;AAC1C,aAAS,KAAK,YAAY,OAAO;AACjC,aAAS,UAAU;AACnB,aAAS,OAAOJ,IAAG,aAAa;AAChC,aAAS,eAAeA,IAAG,aAAa;AACxC,aAAS,iBAAiBA,IAAG,kBAAkB,OAAO,KAAK,kBAAkB,KAAK;AAClF,aAAS,iBAAiBA,IAAG,kBAAkB,MAAM,KAAK,kBAAkB,KAAK;AACjF,aAAS,iBAAiBA,IAAG,kBAAkB,KAAK,KAAK,kBAAkB,KAAK;AAChF,aAAS,KAAK,YAAY,QAAQ;AAElC,QAAI,UAAU,KAAK,YAAY,SAAS,cAAcI,MAAI,UAAU;AACpE,YAAQ,UAAU,CAACJ,IAAG,cAAc,OAAOA,IAAG,cAAc,MAAM;AAClE,YAAQ,iBAAiBA,IAAG,iBAAiB,OAAO,KAAK,gBAAgB,KAAK;AAC9E,YAAQ,iBAAiBA,IAAG,iBAAiB,SAAS,KAAK,gBAAgB,KAAK;AAChF,YAAQ,iBAAiBA,IAAG,iBAAiB,KAAK,KAAK,gBAAgB,KAAK;AAC5E,aAAS,KAAK,YAAY,OAAO;AAGjC,QAAIC,OAAM,cAAc,KAAK,OAAO,GAAG;AACnC,WAAK,UAAU;AAAA,IACnB;AACA,QAAIA,OAAM,cAAc,KAAK,IAAI,GAAG;AAChC,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,SAAK,MAAM;AAAA,EACf;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,SAAK,MAAM;AAAA,EACf;AAAA,EACA,uBAAuB;AACnB,QAAI,WAAW,KAAK,WAAW,UAAU,KAAK;AAC9C,QAAI,CAACA,OAAM,OAAO,QAAQ,GAAG;AACzB,eAAS,QAAQ,OAAO;AACxB,eAAS,oBAAoBD,IAAG,kBAAkB,OAAO,KAAK,kBAAkB,KAAK;AACrF,eAAS,oBAAoBA,IAAG,kBAAkB,MAAM,KAAK,kBAAkB,KAAK;AACpF,eAAS,oBAAoBA,IAAG,kBAAkB,KAAK,KAAK,kBAAkB,KAAK;AACnF,eAAS,OAAO;AAChB,WAAK,YAAY;AAAA,IACrB;AACA,QAAI,CAACC,OAAM,OAAO,OAAO,GAAG;AACxB,cAAQ,oBAAoBD,IAAG,iBAAiB,OAAO,KAAK,gBAAgB,KAAK;AACjF,cAAQ,oBAAoBA,IAAG,iBAAiB,SAAS,KAAK,gBAAgB,KAAK;AACnF,cAAQ,oBAAoBA,IAAG,iBAAiB,KAAK,KAAK,gBAAgB,KAAK;AAC/E,cAAQ,OAAO;AACf,WAAK,YAAY;AAAA,IACrB;AACA,UAAM,qBAAqB;AAAA,EAC/B;AAAA,EACA,WAAW,SAAS,eAAe,GAAG;AAClC,QAAI,OAAO,YAAY,UAAU;AAC7B,aAAO;AAAA,IACX,WACS,WAAW,MAAM;AACtB,gBAAU;AAAA,IACd;AACA,WAAO,KAAK,WAAW,OAAO,IAAI;AAAA,EACtC;AAAA,EACA,WAAW,KAAK;AACZ,WAAO,OAAO,KAAK,QAAQ;AAAA,EAC/B;AAAA,EACA,QAAQ;AACJ,SAAK,MAAM,YAAY,KAAK,WAAW,KAAK,aAAa,CAAC,IAAI;AAC9D,SAAK,MAAM,eAAe,KAAK,WAAW,KAAK,gBAAgB,CAAC,IAAI;AAEpE,SAAK,MAAM,sBAAsB,UAAW,KAAK,WAAW,gBAAiB;AAE7E,QAAI,eAAe,KAAK,WAAW,KAAK,cAAc,CAAC,GAAG,YAAY,KAAK,WAAW,KAAK,aAAa,MAAM;AAC9G,SAAK,MAAM,mBAAmB,UAAW,KAAK,QAAQ,aAAc,YAAY,YAAY,KAAK,SAAS;AAC1G,SAAK,MAAM,aAAa,KAAK,WAAW,KAAK,QAAQ,CAAC;AACtD,SAAK,MAAM,gBAAgB,KAAK,WAAW,KAAK,WAAW,CAAC;AAE5D,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,gBAAgB;AACZ,QAAI,SAAS;AACb,UAAM,UAAU,KAAK;AACrB,QAAI,SAAS;AACT,YAAM,OAAO,KAAK,WAAW,kBAAkB,OAAO,KAAK,QAAQ,eAAe,QAAQ,OAAO;AACjG,eAAS;AACT,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,eAAO,KAAK,WAAW,UAAU,GAAG;AAChC,cAAI,IAAI,iBAAiB;AACzB,eAAK,YAAY,CAAC;AAClB,eAAK,WAAW,KAAK,CAAC;AAAA,QAC1B;AACA,YAAI,MAAM,KAAK,WAAW,CAAC;AAC3B,cAAM,IAAI,IAAI,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI;AAC3C,YAAI,MAAM,cAAc,IAAI,GAAG,SAAS;AACxC,YAAI,MAAM,WAAW,IAAI,GAAG,SAAS;AAAA,MACzC;AAAA,IACJ;AACA,aAAS,OAAO,KAAK,WAAW,OAAO,MAAM,GAAG;AAC5C,UAAI,OAAO;AAAA,IACf;AAEA,QAAI,CAACC,OAAM,OAAO,KAAK,SAAS,KAAK,CAACA,OAAM,OAAO,KAAK,SAAS,GAAG;AAChE,WAAK,UAAU,WAAW,KAAK,UAAU,WACnC,CAAC;AACP,WAAK,UAAU,cAAc,KAAK;AAAA,IACtC;AAAA,EACJ;AACJ;AACAH,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,QAAQ,MAAM;AACnDR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,aAAa,MAAM;AACxDR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,gBAAgB,MAAM;AAC3DR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,WAAW,MAAM;AACtDR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,QAAQ,MAAM;AACnDR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,gBAAgB,MAAM;AAC3DR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,aAAa,MAAM;AACxDR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,UAAU,MAAM;AACrDR,aAAW;AAAA,EACPO,QAAM,EAAE,MAAM,OAAO,aAAa,MAAM,WAAWC,qBAAmB,OAAO,CAAC;AAClF,GAAG,uBAAuB,WAAW,aAAa,MAAM;AACxDR,aAAW;AAAA,EACPS,UAAS,GAAG;AAChB,GAAG,uBAAuB,WAAW,SAAS,IAAI;AAClD,yBAAyBT,aAAW;AAAA,EAChCU,gBAAc,EAAE,SAASJ,MAAI,eAAe,CAAC;AACjD,GAAG,sBAAsB;;;AC7XzB,SAAS,iBAAAK,iBAAe,KAAAC,KAAG,QAAAC,OAAM,SAAAC,SAAO,sBAAAC,sBAAoB,aAAAC,YAAW,SAAAC,SAAO,cAAAC,mBAAkB;;;ACAhG,SAAS,iBAAAC,iBAAe,KAAAC,KAAG,QAAAC,OAAM,YAAAC,WAAU,SAAAC,SAAO,sBAAAC,sBAAoB,aAAAC,YAAW,SAAAC,SAAO,cAAAC,aAAY,MAAAC,WAAU;AAC9G,SAAS,cAAcC,8BAA6B;AAPpD,IAAIC,eAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AAOO,IAAM,4BAA4B,CAAC,MAAM,UAAU,SAAS,gBAAgB,mBAAmB;AAClG,QAAM,QAAQ,CAAC,GAAG,OAAO,KAAK,UAAU,MAAM,WAAW,SAAS,CAAC;AACnE,QAAM,YAAY,IAAI,kDAAkD,aAAa,MAAM,KAAK,IAAI;AACpG,QAAM,UAAUC,MAAI;AACpB,MAAI,QAAS,KAAK,SAAS,CAAC;AAE5B,MAAI,CAACC,QAAM,cAAc,MAAM,UAAU,GAAG;AACxC,YAAQ,OAAO,MAAM,YAAY;AAAA,MAC7B,KAAK;AACD,cAAM,YAAY,IAAI,MAAM,aAAa,IAAI,MAAM,UAAU;AAC7D;AAAA,MACJ,KAAK;AACD,cAAM,QAAQ,OAAOA,QAAM,WAAW;AACtC,YAAI,KAAK,IAAI,MAAM;AACnB,cAAM,YAAY,IAAI,qCAAqC,KAAK,IAAI,OAAO;AAE3E,eAAO,KAAK,KAAK;AACjB;AAAA,IACR;AAAA,EACJ;AACA,MAAI,OAAO,SAAS,GAAG;AAEnB,UAAM,WAAW,IAAI,8CAA8C,OAAO,KAAK,KAAO,CAAC;AAAA,EAC3F;AACA,SAAO,EAAE,SAAkB,MAAa;AAC5C;AACA,IAAM,sBAAsB;AAAA,EACxB,SAAS,EAAE,MAAM,UAAU;AAAA,EAC3B,OAAO;AAAA,IACH,EAAE,MAAM,UAAU,MAAM,UAAU,SAAS,EAAE,UAAU,CAAC,cAAc,GAAG,MAAM,SAAS,EAAE;AAAA,IAC1F;AAAA,MACI,MAAM;AAAA,MAAW,MAAM;AAAA,MAA0B,SAAS,EAAE,MAAM,UAAU;AAAA,MAC5E,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AACA,IAAI,yBAAyB,MAAMC,gCAA+BC,YAAW,aAAa;AAAA,EACtF,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,oBAAoB;AACzB;AAAA,MACJ,KAAK;AACD,aAAK,aAAa,WAAW,OAAO,EAAE;AACtC;AAAA,IACR;AAAA,EACJ;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,SAAK,MAAM,SAAS;AACpB,SAAK,MAAM,WAAW,gBAAgB,mBAAmB;AAAA,EAC7D;AACJ;AACAJ,aAAW;AAAA,EACPK,QAAM,EAAE,WAAWC,qBAAmB,OAAO,CAAC;AAClD,GAAG,uBAAuB,WAAW,UAAU,MAAM;AACrDN,aAAW;AAAA,EACPK,QAAM,EAAE,WAAWC,qBAAmB,OAAO,CAAC;AAClD,GAAG,uBAAuB,WAAW,WAAW,MAAM;AACtDN,aAAW;AAAA,EACPK,QAAM,EAAE,WAAWC,qBAAmB,OAAO,CAAC;AAClD,GAAG,uBAAuB,WAAW,qBAAqB,MAAM;AAChEN,aAAW;AAAA,EACPO,WAAUN,MAAI,OAAO;AACzB,GAAG,uBAAuB,WAAW,SAAS,MAAM;AACpD,yBAAyBD,aAAW;AAAA,EAChCQ,gBAAc;AAAA,IACV,SAASP,MAAI;AAAA,IAAsB,QAAQQ,UAAS;AAAA,IACpD,UAAU,IAAIR,GAAC,kDAAkDA,GAAC;AAAA,EACtE,CAAC;AACL,GAAG,sBAAsB;AAEzB,IAAI,0BAA0B,MAAMS,iCAAgCC,uBAAsB,YAAY,iBAAiB;AAAA,EACnH,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,eAAe,CAAC,MAAM;AACvB,WAAK,cAAc,CAAC;AAAA,IACxB;AACA,SAAK,qBAAqB,CAAC,QAAQ,KAAK,eAAe;AACnD,cAAQ,SAAS,CAAC,GAAG,IAAI,OAAK;AAC1B,cAAM,SAAS,OAAO,EAAE,SAAS,SAAS;AAAA;AAAA,UAAiC,EAAE;AAAA,YAAQ,EAAE,SAAS,QAAQ,EAAE;AAC1G,cAAM,IAAI;AAAA,UACN;AAAA,UACA,SAAS,YAAY,EAAE,IAAI;AAAA,QAC/B;AACA,eAAO;AAAA,MACX,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,SAAS,IAAI,EAAE;AAAA,IAClD;AAAA,EACJ;AAAA,EACA,IAAI,cAAc;AACd,WAAO,CAAC;AAAA,EACZ;AAAA,EACA,mBAAmB,UAAU;AAAA,EAE7B;AAAA,EACA,SAAS,KAAK;AACV,WAAOC,QAAM,WAAW,KAAK,QAAQ,KAAK,UAAU,UAAU;AAAA,EAClE;AAAA,EACA,YAAY,KAAK;AACb,QAAI,CAACA,QAAM,OAAO,KAAK,SAAS,GAAG;AAC/B,WAAK,UAAU,aAAaA,QAAM,MAAM,OAAO,CAAC,CAAC;AAAA,IACrD;AAAA,EACJ;AAAA,EACA,aAAa,OAAO;AAChB;AAAA;AAAA,MAAmB;AAAA;AAAA,EACvB;AAAA,EACA,gCAAgC,MAAM;AAClC,WAAOC,qBAAmB,KAAK,QAAQ,MAAM,IAAI;AAAA,EACrD;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,SAAK,aAAa,iBAAiBC,IAAG,kBAAkB,KAAK,KAAK,cAAc,KAAK;AACrF,SAAK,YAAY,iBAAiBA,IAAG,kBAAkB,KAAK,KAAK,cAAc,KAAK;AAAA,EACxF;AAAA,EACA,uBAAuB;AACnB,QAAI,CAACF,QAAM,OAAO,KAAK,YAAY,GAAG;AAClC,WAAK,aAAa,oBAAoBE,IAAG,kBAAkB,KAAK,KAAK,cAAc,KAAK;AAAA,IAC5F;AACA,QAAI,CAACF,QAAM,OAAO,KAAK,WAAW,GAAG;AACjC,WAAK,YAAY,oBAAoBE,IAAG,kBAAkB,KAAK,KAAK,cAAc,KAAK;AAAA,IAC3F;AACA,UAAM,qBAAqB;AAAA,EAC/B;AACJ;AACAC,aAAW;AAAA,EACPC,WAAU,GAAGC,GAAC,oBAAoB;AACtC,GAAG,wBAAwB,WAAW,aAAa,MAAM;AACzDF,aAAW;AAAA,EACPC,WAAU,GAAGC,GAAC,wBAAwB;AAC1C,GAAG,wBAAwB,WAAW,gBAAgB,MAAM;AAC5DF,aAAW;AAAA,EACPC,WAAU,GAAGC,GAAC,qBAAqB;AACvC,GAAG,wBAAwB,WAAW,eAAe,MAAM;AAC3DF,aAAW;AAAA,EACPC,WAAU,kBAAkB;AAChC,GAAG,wBAAwB,WAAW,eAAe,MAAM;AAC3DD,aAAW;AAAA,EACPG,QAAM,EAAE,WAAWL,qBAAmB,KAAK,CAAC;AAChD,GAAG,wBAAwB,WAAW,cAAc,MAAM;AAC1D,0BAA0BE,aAAW;AAAA,EACjCI,gBAAc;AAAA,IACV,SAASF,MAAI;AAAA,IAAuB,QAAQG,UAAS;AAAA,IACrD,UAAU,eAAeC,KAAI;AAAA;AAAA;AAAA,WAG1BJ,GAAC,oBAAoBH,IAAG,aAAa,KAAK;AAAA,+BACtBA,IAAG,aAAa,WAAW,oDAAoDG,GAAC;AAAA,WACpGA,GAAC;AAAA;AAAA;AAAA;AAAA,uBAIWA,GAAC;AAAA,sCACcI,KAAI;AAAA;AAAA,mCAEPJ,GAAC,mGAAmGA,GAAC;AAAA,mCACrGA,GAAC,4HAA4HA,GAAC;AAAA;AAAA;AAAA,mCAG9HA,GAAC,qCAAqCA,GAAC;AAAA;AAAA,+BAE3CA,GAAC,gIAAgIA,GAAC;AAAA;AAAA,wBAEzIA,GAAC;AAAA;AAAA;AAAA,YAGbA,GAAC;AAAA;AAAA;AAAA,OAGNA,GAAC;AAAA,WACGA,GAAC,oBAAoBH,IAAG,aAAa,IAAI;AAAA,+BACrBA,IAAG,aAAa,WAAW,uDAAuDG,GAAC;AAAA,WACvGA,GAAC;AAAA;AAAA;AAAA,mBAGOA,GAAC,oDAAoDI,KAAI,+DAA+DA,KAAI;AAAA;AAAA,2BAEpHJ,GAAC,mGAAmGA,GAAC;AAAA;AAAA;AAAA,2BAGrGA,GAAC,qCAAqCA,GAAC;AAAA;AAAA,oBAE9CA,GAAC;AAAA;AAAA,YAETA,GAAC;AAAA,QACLA,GAAC;AAAA;AAAA,EAEL,CAAC;AACL,GAAG,uBAAuB;;;ADxM1B,IAAIK,eAA0C,SAAU,YAAY,QAAQ,KAAK,MAAM;AACnF,MAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO,OAAO,yBAAyB,QAAQ,GAAG,IAAI,MAAM;AAC3H,MAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa,WAAY,KAAI,QAAQ,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA,MACxH,UAAS,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,IAAI,WAAW,CAAC,EAAG,MAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;AAChJ,SAAO,IAAI,KAAK,KAAK,OAAO,eAAe,QAAQ,KAAK,CAAC,GAAG;AAChE;AASA,IAAMC,uBAAsB;AAAA,EACxB,SAAS,EAAE,MAAM,aAAa;AAAA,EAC9B,OAAO;AAAA,IACH,EAAE,MAAM,UAAU,MAAM,UAAU,SAAS,EAAE,MAAM,SAAS,EAAE;AAAA,IAC9D,EAAE,MAAM,WAAW,MAAM,0BAA0B,SAAS,EAAE,MAAM,UAAU,GAAG,OAAO,iCAAiC;AAAA,EAC7H;AACJ;AACA,IAAM,oBAAoB,oBAAoB;AAAA,EAC1C,SAAS,EAAE,MAAM,eAAe,MAAM,YAAY,aAAa,mBAAmB;AAAA,EAClF,OAAO;AAAA,IAAC;AAAA,MACA,MAAM;AAAA,MAAc,MAAM;AAAA,MAA0B,SAAS,EAAE,MAAM,aAAa;AAAA,MAClF,OAAOC,QAAM,OAAO,CAAC,GAAG,kCAAkC,EAAE,QAAQ,CAAC,MAAM,aAAa,0BAA0B,aAAa,wBAAwB,CAAC;AAAA,IAC5J;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MAAW,MAAM;AAAA,MAA2B,SAAS,EAAE,MAAM,UAAU;AAAA;AAAA,MAE7E,OAAO,EAAE,YAAY,kBAAkB;AAAA,MACvC,OAAO,gBAAgBD,oBAAmB;AAAA,IAC9C;AAAA,EAAC;AACT,CAAC;AAED,SAAS,QAAQ,UAAU,CAAC,GAAG;AAC3B,MAAI,SAAS;AACb,WAAS,UAAU,WAAW,CAAC,GAAG;AAE9B,UAAM,MAAM,OAAO,SAAS;AAC5B,QAAI,OAAO,QAAQ,UAAU;AACzB,gBAAU,MAAM;AAAA,IACpB,OACK;AACD,gBAAU;AAAA,IACd;AAAA,EACJ;AACA,SAAO;AACX;AACA,SAAS,kBAAkB,UAAU,CAAC,GAAG;AACrC,QAAM,cAAc,SAAS,uBAAuB,GAAG,WAAW,SAAS,uBAAuB;AAClG,MAAI,IAAI;AACR,WAAS,OAAO,SAAS;AAErB,UAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,aAAS,UAAU,IAAIE,QAAO,WAAW;AACzC,aAAS,cAAc,IAAI;AAC3B,gBAAY,YAAY,QAAQ;AAEhC,UAAM,WAAW,IAAIC,YAAW,iBAAiB;AACjD,aAAS,UAAU,IAAID,QAAO,aAAa,kBAAkB;AAC7D,aAAS,MAAM,aAAa,EAAE,SAAS;AACvC,aAAS,aAAa,OAAO,8BAA8B;AAC3D,aAAS,aAAa,WAAW,IAAI,OAAO;AAC5C,aAAS,YAAY,QAAQ;AAC7B;AAAA,EACJ;AACA,QAAM,UAAU,IAAIC,YAAW,kBAAkB;AACjD,UAAQ,UAAU,IAAID,QAAO,UAAU;AACvC,UAAQ,aAAa,OAAO,8BAA8B;AAC1D,UAAQ,aAAa,aAAa,yCAAyC;AAC3E,UAAQ,MAAM,aAAa,QAAQ,QAAQ,SAAS;AACpD,WAAS,YAAY,OAAO;AAC5B,SAAO,EAAE,MAAM,aAAa,MAAM,SAAS;AAC/C;AACA,SAAS,kBAAkB,IAAI,UAAU,CAAC,GAAG;AACzC,QAAM,EAAE,MAAM,KAAK,IAAI,kBAAkB,OAAO;AAChD,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,YAAY,IAAI;AACtB,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,YAAY,IAAI;AACtB,SAAO,IAAIE,GAAC,6BAA6B,EAAE;AAAA,kBAC7BF,KAAI,6CAA6C,QAAQ,OAAO,CAAC;AAAA,MAC7E,MAAM,SAAS;AAAA,gBACL,MAAM,SAAS;AAAA,UACrBE,GAAC;AACX;AACA,IAAI,6BAA6B,MAAMC,oCAAmC,qBAAqB;AAAA,EAC3F,cAAc;AACV,UAAM,iBAAiB;AACvB,SAAK,UAAU,CAAC;AAChB,SAAK,aAAa,CAAC;AACnB,SAAK,kBAAkB,CAAC;AACxB,SAAK,uBAAuB;AAAA,EAChC;AAAA,EACA,SAAS,UAAU,KAAK,SAAS;AAC7B,QAAI,SAAS;AACb,aAAS,UAAU,WAAW,CAAC,GAAG;AAE9B,YAAM,MAAM,OAAO,SAAS;AAC5B,UAAI,OAAO,QAAQ,UAAU;AACzB,kBAAU,MAAM;AAAA,MACpB,OACK;AACD,kBAAU;AAAA,MACd;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,wBAAwB,MAAM,KAAK,KAAK,OAAO;AAC3C,UAAM,wBAAwB,MAAM,KAAK,KAAK,KAAK;AACnD,QAAI,CAAC,OAAO;AACR,cAAQ,MAAM;AAAA,QACV,KAAK;AAOD,eAAK,YAAY,kBAAkB,KAAK,IAAI,GAAG;AAC/C;AAAA,QACJ,KAAK;AACD,eAAK,2BAA2B,GAAG;AACnC;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,wBAAwB;AACpB,UAAM,sBAAsB;AAC5B,SAAK,YAAY,kBAAkB,KAAK,IAAI,KAAK,OAAO;AAAA,EAC5D;AAAA,EACA,WAAW,IAAI;AACX,QAAIC,QAAM,QAAQ,EAAE,GAAG;AACnB,aAAO;AAAA,IACX;AACA,QAAI,OAAO,OAAO,UAAU;AACxB,eAAS,QAAQ,IAAI;AACjB,cAAM,MAAM,KAAK,WAAW,GAAG,IAAI,CAAC;AACpC,YAAI,CAACA,QAAM,OAAO,GAAG,GAAG;AACpB,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,2BAA2B,KAAK,KAAK,YAAY;AAC7C,SAAKA,QAAM,cAAc,KAAK,eAAe,KAAK,KAAK,yBAAyB,CAACA,QAAM,cAAc,EAAE,GAAG;AACtG,YAAM,MAAM,KAAK,WAAW,EAAE;AAC9B,UAAI,CAACA,QAAM,cAAc,GAAG,GAAG;AAC3B,cAAM,QAAQ,CAAC;AACf,cAAM,OAAO,IAAI,CAAC;AAClB,iBAAS,QAAQ,MAAM;AACnB,gBAAM,KAAK,EAAE,MAAM,MAAM,OAAO,KAAK,IAAI,EAAE,CAAC;AAAA,QAChD;AACA,aAAK,kBAAkB;AACvB,aAAK,uBAAuB;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ;AACJ;AACAC,aAAW;AAAA,EACPC,QAAM,EAAE,aAAa,MAAM,WAAWC,qBAAmB,KAAK,CAAC;AACnE,GAAG,2BAA2B,WAAW,WAAW,MAAM;AAC1DF,aAAW;AAAA,EACPC,QAAM,EAAE,WAAWC,qBAAmB,KAAK,CAAC;AAChD,GAAG,2BAA2B,WAAW,cAAc,MAAM;AAC7DF,aAAW;AAAA,EACPC,QAAM,EAAE,WAAWC,qBAAmB,KAAK,CAAC;AAChD,GAAG,2BAA2B,WAAW,mBAAmB,MAAM;AAClEF,aAAW;AAAA,EACPG,WAAU,IAAIR,KAAI,YAAY;AAClC,GAAG,2BAA2B,WAAW,cAAc,MAAM;AAC7DK,aAAW;AAAA,EACPG,WAAU,UAAU;AACxB,GAAG,2BAA2B,WAAW,aAAa,MAAM;AAC5DH,aAAW;AAAA,EACPG,WAAUN,MAAI,WAAW;AAC7B,GAAG,2BAA2B,WAAW,aAAa,MAAM;AAC5D,6BAA6BG,aAAW;AAAA,EACpCI,gBAAc;AAAA,IACV,SAASP,MAAI;AAAA,EACjB,CAAC;AACL,GAAG,0BAA0B;;;AEvL7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,SAAS,SAAAQ,eAAa;AACf,IAAM,0BAA0B;AAChC,IAAM,sBAAN,cAAkC,YAAY;AAAA,EACjD,YAAY,aAAa;AACrB,UAAM,yBAAyB,EAAE,QAAQ,aAAa,YAAY,OAAO,SAAS,KAAK,CAAC;AAAA,EAC5F;AACJ;AACO,IAAM,cAAN,MAAkB;AAAA,EACrB,OAAO,QAAQ,QAAQ,UAAU;AAAE,WAAO,KAAK,0BAA0B,QAAQ,UAAU,OAAK,EAAE,MAAM;AAAA,EAAG;AAAA,EAC3G,OAAO,QAAQ,QAAQ,UAAU;AAAE,WAAO,KAAK,0BAA0B,QAAQ,UAAU,OAAK,EAAE,IAAI;AAAA,EAAG;AAAA,EACzG,OAAO,OAAO,QAAQ,UAAU;AAAE,WAAO,KAAK,0BAA0B,QAAQ,UAAU,OAAK,EAAE,MAAM;AAAA,EAAG;AAAA,EAC1G,OAAO,UAAU,QAAQ,UAAU;AAAE,WAAO,KAAK,0BAA0B,QAAQ,UAAU,OAAK,EAAE,MAAM;AAAA,EAAG;AAAA,EAC7G,OAAO,aAAa,QAAQ,UAAU;AAAE,WAAO,KAAK,0BAA0B,QAAQ,UAAU,OAAK,EAAE,SAAS;AAAA,EAAG;AAAA,EACnH,OAAO,0BAA0B,QAAQ,UAAU,WAAW;AAC1D,QAAIA,QAAM,cAAc,MAAM,KAAKA,QAAM,OAAO,QAAQ,GAAG;AACvD,aAAO;AAAA,IACX;AAEA,QAAI,WAAW;AACf,QAAI,SAAS,eAAe,SAAS,YAAY,SAAS,GAAG;AAEzD,iBAAW;AACX,eAAS,cAAc,SAAS,aAAa;AACzC,YAAI,UAAU,UAAU,KAAK,OAAO,WAAW,SAAS,KAAK,OAAO,WAAW,SAAS,EAAE,QAAQ,WAAW,UAAU,KAAK,GAAG;AAC3H,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;",
6
6
  "names": ["P", "Utils", "PacemElementPickerElement", "CustomElement", "P", "Defaults", "Watch", "PropertyConverters", "ViewChild", "Debounce", "Utils", "CustomElementUtils", "ScaffoldingComponents", "__decorate", "ExpressionSource", "PacemExpressionElement", "Utils", "CustomElementUtils", "Watch", "PropertyConverters", "ViewChild", "P", "Debounce", "CustomElement", "Defaults", "ScaffoldingComponents", "CustomElement", "P", "PCSS", "Defaults", "Watch", "PropertyConverters", "ViewChild", "Utils", "CustomElementUtils", "__decorate", "PacemWidgetToolbarElement", "Utils", "P", "CustomElementUtils", "__decorate", "Watch", "PropertyConverters", "Watch", "PropertyConverters", "Utils", "CustomElement", "P", "PCSS", "Watch", "PropertyConverters", "__decorate", "PCSS", "PacemWidgetDataElement", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Defaults", "Watch", "PropertyConverters", "ViewChild", "Utils", "CustomElementUtils", "__decorate", "P", "Utils", "PacemWidgetFetchParameterElement", "CustomElementUtils", "Watch", "PropertyConverters", "CustomElement", "PacemWidgetFetchElement", "Utils", "__decorate", "Watch", "PropertyConverters", "ViewChild", "P", "CustomElement", "Defaults", "__decorate", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "__decorate", "PacemWidgetTranslatorElement", "CustomElement", "P", "CustomElement", "P", "PCSS", "Watch", "PropertyConverters", "__decorate", "DATA_METADATA", "PCSS", "PacemWidgetClockElement", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "__decorate", "PacemWidgetApiManifestElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "CustomElementUtils", "PCSS", "__decorate", "Utils", "PCSS", "CustomElementUtils", "Watch", "PropertyConverters", "item", "CustomElement", "P", "Defaults", "Watch", "PropertyConverters", "__decorate", "PacemWidgetTextElement", "Watch", "PropertyConverters", "CustomElement", "P", "Defaults", "CustomElement", "P", "PCSS", "Defaults", "ViewChild", "__decorate", "PacemWidgetPickerElement", "ViewChild", "P", "CustomElement", "Defaults", "PCSS", "CustomElement", "P", "PCSS", "Watch", "PropertyConverters", "Debounce", "Utils", "UI", "PropertyChangeEventName", "__decorate", "PacemGridWidgetElement", "UI", "Utils", "PCSS", "PropertyChangeEventName", "P", "Watch", "PropertyConverters", "Debounce", "CustomElement", "CustomElement", "P", "PCSS", "Watch", "PropertyConverters", "ViewChild", "Utils", "Components", "CustomElement", "P", "PCSS", "Defaults", "Watch", "PropertyConverters", "ViewChild", "Utils", "Components", "UI", "ScaffoldingComponents", "__decorate", "P", "Utils", "PacemDataColumnElement", "Components", "Watch", "PropertyConverters", "ViewChild", "CustomElement", "Defaults", "PacemDataColumnsElement", "ScaffoldingComponents", "Utils", "PropertyConverters", "UI", "__decorate", "ViewChild", "P", "Watch", "CustomElement", "Defaults", "PCSS", "__decorate", "DATACOLUMN_METADATA", "Utils", "PCSS", "Components", "P", "PacemWidgetDataGridElement", "Utils", "__decorate", "Watch", "PropertyConverters", "ViewChild", "CustomElement", "Utils"]
7
7
  }