83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { DeesElement, property, html, customElement, TemplateResult, css, cssManager } from '@designestate/dees-element';
 | 
						|
import * as domtools from '@designestate/dees-domtools';
 | 
						|
 | 
						|
const deferred = domtools.plugins.smartpromise.defer();
 | 
						|
let aceDeferred: typeof deferred;
 | 
						|
 | 
						|
import type * as monaco from 'monaco-editor';
 | 
						|
 | 
						|
declare global {
 | 
						|
  interface HTMLElementTagNameMap {
 | 
						|
    'dees-editor-ace': DeesEditorAce;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
@customElement('dees-editor-ace')
 | 
						|
export class DeesEditorAce extends DeesElement {
 | 
						|
  public static demo = () => html`
 | 
						|
    <dees-editor-ace></dees-editor-ace>
 | 
						|
  `;
 | 
						|
 | 
						|
  constructor() {
 | 
						|
    super();
 | 
						|
    domtools.DomTools.setupDomTools();
 | 
						|
  }
 | 
						|
 | 
						|
  public static styles = [
 | 
						|
    domtools.elementBasic.staticStyles,
 | 
						|
    css`
 | 
						|
      :host {
 | 
						|
        
 | 
						|
      }
 | 
						|
 | 
						|
      * {
 | 
						|
        box-sizing: border-box;
 | 
						|
      }
 | 
						|
 | 
						|
      #container {
 | 
						|
        position: absolute;
 | 
						|
        height: 100%;
 | 
						|
        width: 100%;
 | 
						|
      }
 | 
						|
    `
 | 
						|
  ]
 | 
						|
 | 
						|
  public render (): TemplateResult {
 | 
						|
    return html`
 | 
						|
      <div class="mainbox">
 | 
						|
        <div id="container"></div>
 | 
						|
      </div>
 | 
						|
    `;
 | 
						|
  }
 | 
						|
 | 
						|
  public async firstUpdated (_changedProperties: Map<string | number | symbol, unknown>): Promise<void> {
 | 
						|
    super.firstUpdated(_changedProperties);
 | 
						|
    const container = this.shadowRoot.getElementById('container');
 | 
						|
    
 | 
						|
    /* if (!aceDeferred) {
 | 
						|
      aceDeferred = domtools.plugins.smartpromise.defer();
 | 
						|
      const scriptUrl = `https://cdn.jsdelivr.net/npm/monaco-editor/min/vs/loader.js`;
 | 
						|
      const script = document.createElement('script');
 | 
						|
      script.src = scriptUrl;
 | 
						|
      script.onload = () => {
 | 
						|
        aceDeferred.resolve();
 | 
						|
      }
 | 
						|
      document.head.appendChild(script);
 | 
						|
    }
 | 
						|
    await aceDeferred.promise;
 | 
						|
 | 
						|
    (window as any).require.config({
 | 
						|
      paths: { vs: "https://cdn.jsdelivr.net/npm/monaco-editor/min/vs" }
 | 
						|
    });
 | 
						|
    (window as any).require([ "vs/editor/editor.main" ], function () {
 | 
						|
      const editor: monaco.editor.IStandaloneCodeEditor = (window as any).monaco.editor.create(container, {
 | 
						|
        value: "function hello() {\n\talert('Hello world!');\n}",
 | 
						|
        language: 'javascript',
 | 
						|
        theme: 'vs-dark',
 | 
						|
        useShadowDOM: true
 | 
						|
      });
 | 
						|
    }); */
 | 
						|
    
 | 
						|
  }
 | 
						|
}
 |