import {XtalElement, AttributeProps, define} from 'xtal-element/XtalElement.js'; import {SelectiveUpdate} from 'xtal-element/types.d.js'; import {createTemplate} from 'trans-render/createTemplate.js'; const mainTemplate = createTemplate(/* html */` `); const [label$, input$] = [Symbol('label'), Symbol('input')]; const initTransform = ({self}: SwagTagPrimitiveBase) => ({ label: label$, input: [{},{input: self.handleInput},,,input$] }); const updateLabel = ({name}: SwagTagPrimitiveBase) => ({ [label$]: name + ':', }); const updateInput = ({readOnly, inputType, disabled, value}: SwagTagPrimitiveBase) =>({ [input$]: [{},,{'readonly': readOnly, type: inputType, disabled: disabled, value: value}] }); const updateTransforms = [ updateLabel, updateInput ] as SelectiveUpdate[]; export const linkInputType = ({type, self}: SwagTagPrimitiveBase) => { switch(type){ case 'boolean': self.inputType = 'checkbox'; break; case 'number': self.inputType = 'number'; break; case 'string': self.inputType = 'text'; break; } } export const linkEditedValue = ({value, self}: SwagTagPrimitiveBase) => { self.editedValue = value; } export class SwagTagPrimitiveBase extends XtalElement { constructor(){ super(); this.eventScopes = [[,'bubbles']]; } static is = 'swag-tag-primitive-base'; static attributeProps : any = ({readOnly, type, testValues, value, disabled, eventScopes, name, description, inputType, editedValue}: SwagTagPrimitiveBase) => ({ bool: [readOnly, disabled], async: [readOnly, inputType, disabled, value], str: [type, value, name, description, inputType, editedValue], notify: [editedValue], obj: ['default', testValues, eventScopes], jsonProp: [eventScopes], reflect: [readOnly, type, disabled, name, inputType] } as AttributeProps); handleInput(e: Event){ this.editedValue = (e.target!).value; } readyToInit = true; mainTemplate = mainTemplate; readyToRender = true; initTransform: any = initTransform; editedValue: any; propActions = [ linkInputType, linkEditedValue ]; updateTransforms = updateTransforms; name: string | undefined; description: string | undefined; inputType: 'text' | 'checkbox' | 'number' | undefined; type: 'string' | 'boolean' | 'number' | undefined; readOnly!: boolean; value: any | undefined; /** * key = test name * val = test prop value */ testValues: { [key: string]: any } | undefined; } define(SwagTagPrimitiveBase);