import { html } from 'xtal-element/lib/html.js'; import { xc, PropAction, PropDefMap, PropDef } from 'xtal-element/lib/XtalCore.js'; import { xp, XtalPattern } from 'xtal-element/lib/XtalPattern.js'; import { RxSuppl } from 'xtal-element/lib/RxSuppl.js'; import { DOMKeyPEA, PEASettings as Tag } from 'xtal-element/lib/DOMKeyPEA.js'; import {OnToMeProps} from 'on-to-me/types.d.js'; import('ib-id/i-bid.js'); import('on-to-me/on-to-me.js'); import('./swag-tag-event-viewer.js'); const mainTemplate = html`

`; const refs = {h2Element:'', repeatListenersId:'', placeHolderElement:''}; const propActions = [ xp.manageMainTemplate, ({domCache, name}: SwagTagInstance) => [ {[refs.h2Element]: name} ], xp.createShadow, ({domCache, name}: SwagTagInstance) => [ {[refs.placeHolderElement]: [{localName: name}]}, ], ({domCache, events, name}: SwagTagInstance) => [ {[refs.repeatListenersId]: [{ list: events, map: (event: IEvent) => (>[,,{ observe:name, on: event.name, to: '[-new-event]', me: '1', val: '.'}]), }]} ], ({domCache, properties}: SwagTagInstance) => { for(const prop of properties!){ if(prop.default!== undefined){ try{ const parsedProp = JSON.parse(prop.default); domCache[refs.placeHolderElement][prop.name] = parsedProp; }catch(e){ console.error(e); } } } console.log(properties); }, ] as PropAction[]; interface IEvent { name: string, description?: string, } interface IProperty{ name: string, type: string, default: string, } /** * @element swag-tag-instance */ export class SwagTagInstance extends HTMLElement implements XtalPattern{ static is='swag-tag-instance'; self = this; refs = refs; propActions = propActions; reactor = new RxSuppl(this, [ { rhsType: Array, ctor: DOMKeyPEA, } ]); domCache: any; mainTemplate = mainTemplate; clonedTemplate: DocumentFragment | undefined; name: string | undefined; events: IEvent[] | undefined; properties: IProperty[] | undefined; connectedCallback(){ xc.hydrate(this, slicedPropDefs); } onPropChange(n: string, prop: PropDef, nv: any){ this.reactor.addToQueue(prop, nv); } } const propDefMap : PropDefMap = { ...xp.props, name:{ type: String, dry: true }, properties:{ type: Object, dry: true, stopReactionsIfFalsy: true }, events:{ type: Object, async: true, dry: true, stopReactionsIfFalsy: true } }; const slicedPropDefs = xc.getSlicedPropDefs(propDefMap); xc.letThereBeProps(SwagTagInstance, slicedPropDefs, 'onPropChange'); xc.define(SwagTagInstance);