Inspector

Inspector components.

interface Control 
extends Property, Element {
  fallback?: Scalar
  frame?: number
  icon?: string
  input?: Element
  inputInitialize?: Element
  inputSelect: HTMLSelectElement
  max?: number
  min?: number
  name?: string
  options?: Array<Scalar> | ScalarRecord
  order?: number
  scalar?: Scalar
  scalarFromInput?: Scalar
  scalarFromOptions: (index: number) => Scalar | undefined
  setInputValue: (value?: Scalar) => boolean
  step?: number
  target?: string
  tweens?: boolean
  type?: string
  undoable?: boolean
}
interface ControlElement 
extends Element, Control {
  fallback?: Scalar
  frame?: number
  icon?: string
  input?: Element
  inputInitialize?: Element
  inputSelect: HTMLSelectElement
  max?: number
  min?: number
  name?: string
  options?: Array<Scalar> | ScalarRecord
  order?: number
  scalar?: Scalar
  scalarFromInput?: Scalar
  scalarFromOptions: (index: number) => Scalar | undefined
  setInputValue: (value?: Scalar) => boolean
  step?: number
  target?: string
  tweens?: boolean
  type?: string
  undoable?: boolean
}
type ControlFunctionInfo = ArrayOf3<number, ControlGroupFunction, Array<SignalId>>
interface ControlGroup  {
  addOrRemoveEnd: (addOrRemove: string, propertyNamePrefix: string) => Promise<void>
  controlContent: (name: string, icon?: string, more?: OptionalContent) => OptionalContent
  controlInputContent: (propertyId?: SignalId) => OptionalContent
  controlInputContentEnd: (namePrefix: string) => OptionalContent
  currentValue: (name: string) => Scalar | undefined
  icon: string
  legendContent: OptionalContent
  propertyIdValue: (nameOrPropertyId: string) => Scalar | undefined
  propertyIds?: Array<SignalId>
  propertyNameContent: (propertyName: string) => OptionalContent
  signalIdForName: (name: string) => SignalId | undefined
  targetForName: (name: string) => StringOrNot
  updatePropertyIds: Array<SignalId>
}
interface ControlGroupEventDetail 
extends WithOrder {
  functions: Map<ControlGroupFunction, Array<SignalId>>
  order?: number
  propertyIds: Array<SignalId>
}
type ControlGroupFunction = object
type ElementControlFunction = (args: ElementInspectorArgs) => Promise<DataOrError<ControlElement>>
type ElementGroupsFunction = () => Promise<DataOrError<boolean>>
interface ElementInspectorArgs  {
  element?: ControlElement
  scalarProperty: ScalarProperty
}
/**
 * @implements DropHandled
 * @implements HeadHandled
 */
class ControlAssetElement
extends ControlElementBase {
  border: () => number
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  drop: (dataTransfer: DataTransfer, clientX: number) => void
  dropValid: (dataTransfer: DataTransfer) => boolean
  handleChange: (event?: Event) => Promise<void>
  handleInput: (event?: Event) => Promise<void>
  head: OptionalContent
  iconIds: Strings
  input: () => Element | undefined
  inputInitialize: () => Element | undefined
  inputSelect: () => HTMLSelectElement
  label?: string
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  previewSize: () => Size
  promise: Promise<void> | undefined
  properties: PropertyDeclarations
  propertyId: () => SignalId
  scalarFromInput: () => Scalar | undefined
  scalarFromOptions: (index: number) => Scalar | undefined
  setInputValue: (scalar?: Scalar) => boolean
  signals: SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (content: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
  visibility: boolean
}
class ControlBooleanElement
extends ControlElementBase {
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  handleChange: (event?: Event) => Promise<void>
  handleInput: (event?: Event) => Promise<void>
  input: () => Element | undefined
  inputInitialize: () => Element | undefined
  inputSelect: () => HTMLSelectElement
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  propertyId: () => SignalId
  scalarFromInput: () => Scalar | undefined
  scalarFromOptions: (index: number) => Scalar | undefined
  setInputValue: (scalar?: Scalar) => boolean
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class ControlInputElement
extends ElementBase {
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  handleChange: () => Promise<void>
  handleInput: () => Promise<void>
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  scalarProperty: () => 
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class ControlNumericElement
extends ControlElementBase {
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  handleChange: (event?: Event) => Promise<void>
  handleInput: (event?: Event) => Promise<void>
  input: () => Element | undefined
  inputInitialize: () => Element | undefined
  inputSelect: () => HTMLSelectElement
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  propertyId: () => SignalId
  scalarFromInput: () => Scalar | undefined
  scalarFromOptions: (index: number) => Scalar | undefined
  setInputValue: (scalar?: Scalar) => boolean
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class ControlRgbElement
extends ControlElementBase {
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  handleChange: (event?: Event) => Promise<void>
  handleInput: (event?: Event) => Promise<void>
  input: () => Element | undefined
  inputInitialize: () => Element | undefined
  inputSelect: () => HTMLSelectElement
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  propertyId: () => SignalId
  scalarFromInput: () => Scalar | undefined
  scalarFromOptions: (index: number) => Scalar | undefined
  setInputValue: (scalar?: Scalar) => boolean
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class ControlRowElement
extends LoaderElementBase {
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class ControlStringElement
extends ControlElementBase {
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  handleChange: (event?: Event) => Promise<void>
  handleInput: (event?: Event) => Promise<void>
  input: () => Element | undefined
  inputInitialize: () => Element | undefined
  inputSelect: () => HTMLSelectElement
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  propertyId: () => SignalId
  scalarFromInput: () => Scalar | undefined
  scalarFromOptions: (index: number) => Scalar | undefined
  setInputValue: (scalar?: Scalar) => boolean
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class InspectorContentElement
extends ContentElementBase {
  chromeCss: CSSResult
  connectedCallback: () => void
  contentCss: CSSResult
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  cssShared: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  mediaMasher: () => MediaMasherNode
  partContent: (part: string, slots: Array<Element>) => OptionalContent
  partSeparator: string
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  refreshParts: () => string
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class InspectorElement
extends PanelElementBase {
  connectedCallback: () => void
  contentContent: (slots: Array<Element>) => OptionalContent
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  footerContent: (slots: Array<Element>) => OptionalContent
  headerContent: (slots: Array<Element>) => OptionalContent
  mediaMasher: () => MediaMasherNode
  partContent: (part: string, slots: Array<Element>) => OptionalContent
  partSeparator: string
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  refreshParts: () => string
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class InspectorFooterElement
extends FooterElementBase {
  chromeCss: CSSResult
  connectedCallback: () => void
  contentCss: CSSResult
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  cssShared: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  mediaMasher: () => MediaMasherNode
  partContent: (part: string, slots: Array<Element>) => OptionalContent
  partSeparator: string
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  refreshParts: () => string
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class InspectorHeaderElement
extends HeaderElementBase {
  chromeCss: CSSResult
  connectedCallback: () => void
  contentCss: CSSResult
  cssBorderBoxSizing: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  cssShared: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  mediaMasher: () => MediaMasherNode
  partContent: (part: string, slots: Array<Element>) => OptionalContent
  partSeparator: string
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  refreshParts: () => string
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
class InspectorTargetElement
extends ScrollerElementBase {
  connectedCallback: () => void
  cssBorderBoxSizing: CSSResult
  cssDivRoot: CSSResult
  cssHostDropping: CSSResult
  cssHostFlex: CSSResult
  defaultContent: () => OptionalContent
  disconnectedCallback: () => void
  handleChanged: () => void
  handleSignal: (signal: Signal) => void
  mediaMasher: () => MediaMasherNode
  pluginsNeeded: Array<PluginId>
  properties: PropertyDeclarations
  refreshSelectedProperties: (refreshIfUnchanged?: boolean) => void
  signals: () => SignalsRecord
  styles: CSSResult
  subscribe: (handler: SignalFunction, arg: string | SignalId | PropertyObject, name?: string, type?: string) => Signal
  templateContent: (contents: TemplateContents) => TemplateContent
  unsubscribe: (arg: string | SignalId | PropertyObject, name?: string, type?: string) => void
  variable: (name: string) => number
  variableSet: (nameOrSignal: Signal | string, value?: Scalar, suffix?: string) => void
  variableString: (name: string) => string
}
function svgElementGroup(
  document: Document
): SVGGElement
const CONTROL_CSS = {
  _$cssResult$: true,
  cssText: '
  input, select {
    width: 100%;
    height: var(--size-control-pix);
    min-width: var(--size-control-pix);
  }
  input[type="search"] {
    border-radius: calc(var(--size-control-pix) / 2);
    padding-left: 2ch;
  }
  input[type="checkbox"] {
    width: var(--size-control-pix);
  }
  input[type=range] {
    flex-grow: 1;
    -webkit-appearance: none;
    width: 100%;
    border-radius: calc(var(--size-control-pix) * 0.25);
    height: calc(var(--size-control-pix) * 0.5);
    border: 1px solid var(--fore-chrome);
    background-color: var(--back-chrome); 
  }
  input[type=range]::-webkit-slider-thumb {
    -webkit-appearance: none;
    background-color: var(--fore-chrome);
    border: 1px solid var(--back-chrome);
    border-radius: calc(var(--size-control-pix) * 0.5);
    width: var(--size-control-pix);
    height: var(--size-control-pix);
    cursor: pointer;
  }
  input[type=range]:is(:active, :hover) {
    border-color: var(--on-fore-chrome);
  }
  input[type=range]:is(:active, :hover)::-webkit-slider-thumb {
    background-color: var(--on-fore-chrome);
  }
',
  t: [
    '
  input, select {
    width: 100%;
    height: var(--size-control-pix);
    min-width: var(--size-control-pix);
  }
  input[type="search"] {
    border-radius: calc(var(--size-control-pix) / 2);
    padding-left: 2ch;
  }
  input[type="checkbox"] {
    width: var(--size-control-pix);
  }
  ',
    '
'
  ]
}
const CONTROL_INPUT_PROPS = {
  target: {},
  name: {},
  scalar: {},
  type: {},
  options: {
    converter: {}
  },
  max: {},
  min: {},
  step: {},
  frame: {}
}
const CONTROL_MIN_PROPS = {
  target: {},
  name: {},
  scalar: {},
  type: {},
  options: {
    converter: {}
  }
}
const CONTROL_PROPS = {
  propertyId: {
    attribute: 'property-id'
  }
}