import {createDiv, createStyles, css, JSUndoManager} from "ts-browser-helpers";
import {UiConfigRenderer, UiObjectConfig} from "uiconfig.js";
import React from 'react'
import {createRoot, Root} from 'react-dom/client'
import {ConfigurationPanelComponent} from './components/ConfigurationPanelComponent'
import {BPComponent, UiConfigRendererContext} from './bpComponents/BPComponent'
// @ts-ignore
import rendererCss from './renderer.scss?inline' // for rollup build remove ?inline
import {FocusStyleManager} from '@blueprintjs/core'
import {THREE} from "./threejs";
export class UiConfigRendererBlueprint extends UiConfigRenderer {
constructor(container: HTMLElement = document.body, {autoPostFrame = true} = {}, undoManager?: JSUndoManager|false) {
super(container, autoPostFrame, undefined, undoManager);
// this._root.expanded = expanded
}
protected _root: Root
protected _createUiContainer(): HTMLDivElement {
FocusStyleManager.onlyShowFocusOnTabs();
const container = createDiv({id: 'blueprintUiContainer', addToBody: false})
createStyles(css`
:root {
--blueprint-ui-container-width: 300px;
}
@media only screen and (min-width: 1500px) {
:root {
--blueprint-ui-container-width: 400px;
}
}
@media only screen and (min-width: 2500px) {
:root {
--blueprint-ui-container-width: 500px;
}
}
@media only screen and (min-width: 600px) {
#blueprintUiContainer {
min-width: var(--blueprint-ui-container-width);
min-height: 200px;
max-height: 100%;
max-width: 100%;
resize: both;
}
}
`)
createStyles(rendererCss)
this._root = createRoot(container, {
identifierPrefix: 'bpUi',
onRecoverableError: (error) => {
console.warn(error)
}
})
this._root.render(
)
return container
}
protected _refreshUiConfigObject(config: UiObjectConfig): void {
(config.uiRef as BPComponent)?.refreshConfigState()
}
renderUiConfig(_: UiObjectConfig): void {
return;
}
// eslint-disable-next-line @typescript-eslint/naming-convention
THREE: THREE|undefined = (window as any).THREE
unmount() {
this._root?.unmount()
}
}