@tomorrowevening/hermes
Version:
An extendable set of Web Tools controlled via a separate window for non-intereference with content.
2 lines (1 loc) • 1.87 kB
JavaScript
"use strict";const n=require("react/jsx-runtime"),u=require("react"),h=require("../Accordion.cjs"),g=require("./InspectorField.cjs"),m=require("../../utils.cjs");function v(a){return"items"in a}class p extends u.Component{subgroupNames=[];subgroupElements=[];valueOverrides=new Map;three;constructor(t){super(t),this.three=t.three,this.state={lastUpdated:Date.now()}}addGroup(t){const e=[];t.items.forEach(s=>{e.push({type:s.type,prop:s.prop,title:s.title!==void 0?s.title:s.prop,value:s.value,min:s.min,max:s.max,step:s.step,options:s.options,disabled:s.disabled,onChange:(i,l)=>{t.onUpdate(i,l)}})});const o=u.createRef(),r=n.jsx(p,{three:this.props.three,ref:o,title:t.title,expanded:t.expanded,items:e},t.title);return this.subgroupNames.push(t.title),this.subgroupElements.push(r),this.setState({lastUpdated:Date.now()}),o}removeGroup(t){const e=this.subgroupNames.length;for(let o=0;o<e;o++){const r=this.subgroupNames[o];if(t===r){this.subgroupNames.splice(o,1),this.subgroupElements.splice(o,1),this.setState({lastUpdated:Date.now()});return}}}setField(t,e){this.valueOverrides.set(t,e),this.setState({lastUpdated:Date.now()})}render(){const t=[];return this.props.items.forEach(e=>{if(v(e))t.push(n.jsx(p,{three:this.props.three,title:m.capitalize(e.title),items:e.items},e.title));else{const o=this.valueOverrides.get(e.title),r=o!==void 0?o:e.value;t.push(n.jsx(g,{title:e.title,prop:e.prop,value:r,type:e.type,min:e.min,max:e.max,step:e.step,disabled:e.disabled,options:e.options,onChange:(s,i)=>{e.onChange!==void 0&&(this.valueOverrides.delete(e.title),e.onChange(s,i))},onKeyDown:s=>{e.onKeyDown!==void 0&&e.onKeyDown(s)}},e.title))}}),this.subgroupElements.forEach(e=>t.push(e)),n.jsx(h,{three:this.props.three,label:this.props.title,open:this.props.expanded===!0,onToggle:e=>{this.props.onToggle&&this.props?.onToggle(e)},children:t})}}module.exports=p;