1- import { NpmPackageLoader , BaseCustomWebcomponentBindingsService , JsonFileElementsService , DocumentContainer , CopyPasteAsJsonService , UnkownElementsPropertiesService , sleep , BindingsRefactorService , TextRefactorService , SeperatorContextMenu , DomConverter , ValueType } from '@node-projects/web-component-designer' ;
1+ import { NpmPackageLoader , BaseCustomWebcomponentBindingsService , JsonFileElementsService , DocumentContainer , CopyPasteAsJsonService , UnkownElementsPropertiesService , sleep , BindingsRefactorService , TextRefactorService , SeperatorContextMenu , DomConverter , ValueType , ObservedCustomElementsRegistry , PreDefinedElementsService } from '@node-projects/web-component-designer' ;
22import createDefaultServiceContainer from '@node-projects/web-component-designer/dist/elements/services/DefaultServiceBootstrap.js' ;
33import { NodeHtmlParserService } from '@node-projects/web-component-designer-htmlparserservice-nodehtmlparser' ;
44import { CodeViewMonaco } from '@node-projects/web-component-designer-codeview-monaco' ;
@@ -21,7 +21,7 @@ serviceContainer.designerContextMenuExtensions.push(new ExpandCollapseContextMen
2121serviceContainer . designerContextMenuExtensions . push ( new SeperatorContextMenu ( ) , new EditTemplateContextMenu ( ) ) ;
2222//Instance Service Container Factories
2323serviceContainer . register ( "stylesheetService" , designerCanvas => new CssToolsStylesheetService ( designerCanvas ) ) ;
24- import { BaseCustomWebComponentConstructorAppend , css , html } from '@node-projects/base-custom-webcomponent' ;
24+ import { BaseCustomWebComponentConstructorAppend , css , html , LazyLoader } from '@node-projects/base-custom-webcomponent' ;
2525import { CommandHandling } from './CommandHandling.js' ;
2626import './styleEditor.js' ;
2727import { CustomBindableObjectsService } from './services/CustomBindableObjectsService.js' ;
@@ -191,10 +191,34 @@ export class AppShell extends BaseCustomWebComponentConstructorAppend {
191191 }
192192 } ;
193193 this . _getNpm . onclick = async ( e ) => {
194- let res = await this . _npmPackageLoader . loadNpmPackage ( this . _npmInput . value , serviceContainer , this . _paletteTree , loadAllImports , state => this . _npmStatus . innerText = state ) ;
195- if ( res . html ) {
196- let element = this . _dock . getElementInSlot ( this . _dockManager . activeDocument . elementContent ) ;
197- element . content = res . html + element . content ;
194+ const pkgName = this . _npmInput . value ;
195+ if ( pkgName . startsWith ( 'http://' ) ) {
196+ const observedCustomElementsRegistry = new ObservedCustomElementsRegistry ( ) ;
197+ try {
198+ await import ( pkgName ) ;
199+ }
200+ catch ( error ) {
201+ console . error ( "Error loading url with import, trying with script tag." , error ) ;
202+ await LazyLoader . LoadJavascript ( pkgName ) ;
203+ }
204+ await sleep ( 500 ) ;
205+ const newElements = observedCustomElementsRegistry . getNewElements ( ) ;
206+ if ( newElements . length > 0 && serviceContainer && this . _paletteTree ) {
207+ const elementsCfg = {
208+ elements : newElements
209+ } ;
210+ let elService = new PreDefinedElementsService ( pkgName , elementsCfg ) ;
211+ serviceContainer . register ( 'elementsService' , elService ) ;
212+ this . _paletteTree . loadControls ( serviceContainer , serviceContainer . elementsServices ) ;
213+ }
214+ observedCustomElementsRegistry . dispose ( ) ;
215+ }
216+ else {
217+ let res = await this . _npmPackageLoader . loadNpmPackage ( pkgName , serviceContainer , this . _paletteTree , loadAllImports , state => this . _npmStatus . innerText = state ) ;
218+ if ( res . html ) {
219+ let element = this . _dock . getElementInSlot ( this . _dockManager . activeDocument . elementContent ) ;
220+ element . content = res . html + element . content ;
221+ }
198222 }
199223 this . _npmInput . value = '' ;
200224 } ;
0 commit comments