exhibitionjs 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,17 @@
1
1
  import { AbstractWraplet, Constructable, Core } from "wraplet";
2
2
  import { ExhibitionPreview } from "./ExhibitionPreview";
3
- import { MonacoEditorOptions } from "./ExhibitionMonacoEditor";
3
+ import { ExhibitionMonacoEditorOptions } from "./ExhibitionMonacoEditor";
4
4
  import { DocumentAltererProviderWraplet } from "./types/DocumentAltererProviderWraplet";
5
5
  import { DocumentAlterer } from "./types/DocumentAlterer";
6
6
  export type ExhibitionOptions = {
7
- updatePreviewOnInit?: boolean;
7
+ /**
8
+ * Selector for the element that triggers the update of the preview.
9
+ */
8
10
  updaterSelector?: string;
9
11
  };
10
12
  export type ExhibitionMapOptions = {
11
13
  Class: Constructable<DocumentAltererProviderWraplet>;
12
- initEditors?: boolean;
14
+ selectEditors?: boolean;
13
15
  };
14
16
  declare const ExhibitionMap: {
15
17
  editors: {
@@ -29,6 +31,7 @@ declare const ExhibitionMap: {
29
31
  export declare class Exhibition extends AbstractWraplet<HTMLElement, typeof ExhibitionMap> {
30
32
  private options;
31
33
  constructor(core: Core<HTMLElement, typeof ExhibitionMap>, options?: ExhibitionOptions);
34
+ init(): Promise<void>;
32
35
  /**
33
36
  * Adds DocumentAltererProviderWraplet instance to the list of editors.
34
37
  */
@@ -39,17 +42,19 @@ export declare class Exhibition extends AbstractWraplet<HTMLElement, typeof Exhi
39
42
  addPreviewAlterer(alterer: DocumentAlterer, priority?: number): void;
40
43
  getPreview(): ExhibitionPreview;
41
44
  updatePreview(): Promise<void>;
45
+ initalizeMonacoEditors(): Promise<void>;
42
46
  /**
43
47
  * Create multiple Exhibitions.
44
48
  *
45
49
  * @param node Node to create Exhibitions on.
46
50
  * @param attribute Attribute to use for Exhibition instances.
47
- * @param map Map of dependencies for each Exhibition instance..
51
+ * @param map Map of dependencies for each Exhibition instance.
48
52
  * @param options Options for Exhibition instances.
49
- *
53
+ * @param init Initialize exhibitions after they're created.
54
+ * @param updatePreview Update preview of each exhibition after it's initialized.
50
55
  * @returns Array of Exhibition instances.
51
56
  */
52
- static createMultiple(node: ParentNode, attribute: string | undefined, map: typeof ExhibitionMap, options?: ExhibitionOptions): Exhibition[];
57
+ static createMultiple(node: ParentNode, attribute: string | undefined, map: typeof ExhibitionMap, options?: ExhibitionOptions, init?: boolean, updatePreview?: boolean): Promise<Exhibition[]>;
53
58
  /**
54
59
  * Create a single Exhibition instance wrapping a given element.
55
60
  *
@@ -57,16 +62,16 @@ export declare class Exhibition extends AbstractWraplet<HTMLElement, typeof Exhi
57
62
  * @param map Map of dependencies for the Exhibition instance.
58
63
  * @param options Options for the Exhibition instance.
59
64
  */
60
- static create(element: HTMLElement, map: typeof ExhibitionMap, options?: ExhibitionOptions): Exhibition;
65
+ static create(element: HTMLElement, map: typeof ExhibitionMap, options?: ExhibitionOptions): Promise<Exhibition>;
61
66
  /**
62
67
  * Returns a dependency map with editors being instances of ExhibitionMonacoEditor.
63
68
  *
64
- * @param editorOptions
65
- * MonacoEditorOptions to pass to the editor.
69
+ * @param exhibitionMonacoEditorOptions
70
+ * MonacoEditorOptions to pass to the ExhibitionMonacoEditor.
66
71
  * @param options
67
72
  * Map options.
68
73
  */
69
- static getMapWithMonacoEditor(editorOptions: Partial<MonacoEditorOptions>, options?: Omit<ExhibitionMapOptions, "Class">): typeof ExhibitionMap;
74
+ static getMapWithMonacoEditor(exhibitionMonacoEditorOptions: ExhibitionMonacoEditorOptions, options?: Omit<ExhibitionMapOptions, "Class">): typeof ExhibitionMap;
70
75
  /**
71
76
  * Returns a generic dependecy map with an undefined editor class that has to be provided through
72
77
  * the options.
@@ -1,21 +1,51 @@
1
1
  import { AbstractWraplet, Core } from "wraplet";
2
- import * as monaco from "monaco-editor";
2
+ import type * as monaco from "monaco-editor";
3
3
  import { DocumentAltererProviderWraplet } from "./types/DocumentAltererProviderWraplet";
4
4
  import { DocumentAlterer } from "./types/DocumentAlterer";
5
- export type MonacoEditorOptions = {
5
+ export type EditorCreator = (options: monaco.editor.IStandaloneEditorConstructionOptions, node: HTMLElement, monaco: MonacoInstance) => Promise<monaco.editor.IStandaloneCodeEditor>;
6
+ export type ExhibitionMonacoEditorOptions = {
7
+ /**
8
+ * Monaco instance.
9
+ */
10
+ monaco: MonacoInstance;
11
+ /**
12
+ * Instead of depending on this class for editor instantiation, you can provide your own editor instance here.
13
+ */
14
+ monacoEditorCreator?: EditorCreator;
15
+ /**
16
+ * Monaco options for the editor.
17
+ */
18
+ monacoEditorOptions?: monaco.editor.IStandaloneEditorConstructionOptions;
19
+ /**
20
+ * Attribute storing the options in the form of JSON string.
21
+ */
6
22
  optionsAttribute?: string;
7
- monacoEditorModule: typeof monaco;
8
- monacoOptions?: monaco.editor.IStandaloneEditorConstructionOptions;
23
+ /**
24
+ * Location where the editor should be inserted.
25
+ */
9
26
  location?: "head" | "body";
27
+ /**
28
+ * Priority of the editor's document alterer. Higher priority means it will be executed first.
29
+ */
10
30
  priority?: number;
31
+ /**
32
+ * Trim the default value of the editor.
33
+ */
11
34
  trimDefaultValue?: boolean;
35
+ /**
36
+ * This option applies to single tag languages only (typescript, javascript and css). It
37
+ * determines the attributes that will be added to the generated tag.
38
+ */
12
39
  tagAttributes?: Record<string, string>;
13
40
  };
41
+ export type MonacoInstance = typeof monaco;
14
42
  export declare class ExhibitionMonacoEditor extends AbstractWraplet<HTMLElement> implements DocumentAltererProviderWraplet {
15
- private monacoEditorModule;
43
+ private monaco;
16
44
  private editor;
17
45
  private options;
18
- constructor(core: Core<HTMLElement>, options: MonacoEditorOptions);
46
+ constructor(core: Core<HTMLElement>, options: ExhibitionMonacoEditorOptions);
47
+ isEditorInitialized(): boolean;
48
+ init(): Promise<void>;
19
49
  getPriority(): number;
20
50
  /**
21
51
  * Returns the current value of the editor.
@@ -27,11 +57,21 @@ export declare class ExhibitionMonacoEditor extends AbstractWraplet<HTMLElement>
27
57
  * Additional validation.
28
58
  */
29
59
  private validateOptions;
60
+ private getEditor;
30
61
  private getTSValueAsJS;
31
62
  private getLanguage;
32
- private trimDefaultValue;
63
+ static trimDefaultValue(content: string): string;
64
+ destroy(): void;
65
+ /**
66
+ * Helper method creating a new monaco editor instance.
67
+ */
68
+ static createMonacoEditor(editorOptions: monaco.editor.IStandaloneEditorConstructionOptions | undefined, node: HTMLElement, monaco: MonacoInstance): monaco.editor.IStandaloneCodeEditor;
69
+ /**
70
+ * Helper method creating a new monaco model instance.
71
+ */
72
+ static createMonacoModel(monaco: MonacoInstance, language: string, value: string): monaco.editor.ITextModel;
33
73
  /**
34
74
  * Create a single ExhibitionMonacoEditor instance wrapping a given element.
35
75
  */
36
- static create(element: HTMLElement, options: MonacoEditorOptions): ExhibitionMonacoEditor;
76
+ static create(element: HTMLElement, options: ExhibitionMonacoEditorOptions): ExhibitionMonacoEditor;
37
77
  }
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var t={d:(e,i)=>{for(var r in i)t.o(i,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:i[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{Exhibition:()=>G,ExhibitionMonacoEditor:()=>z,defaultOptionsAttribute:()=>W});class i extends Error{}class r extends Error{}class n extends Error{}class s extends Error{}class o extends Error{}class a extends Error{}class l extends Error{}function h(t){return Object.getPrototypeOf(t)===Object.prototype}const d=(t,e)=>"object"==typeof t&&null!==t&&!0===t[e],c=Symbol("WrapletSet");function u(t){return d(t,c)}class p extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const f=Symbol("WrapletSetReadonly");class g extends p{[f]=!0;[c]=!0}const m=Symbol("NodeTreeParent"),w=Symbol("ChildrenManager");function y(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function b(t){const e={};for(const i in t){const r=t[i];e[i]=y(r);const n=r.map;n&&h(n)&&(e[i].map=b(n))}return e}const C=Symbol("DynamicMap");function v(t){return d(t,C)}class E{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=b(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(".")} . No such definition.`);const r=e[i].map;if(h(r))e=r;else{if(!v(r))throw new Error("Invalid map type.");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error("Map doesn't exist.");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(v(t))return!0;if(!h(t))throw new Error("Invalid map type.");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error("At the root already.");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new E(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class M{node;[w]=!0;[m]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,e,i={}){if(this.node=t,h(e))this.mapWrapper=new E(e);else{if(!(e instanceof E))throw new r("The map provided to the Core is not a valid map.");this.mapWrapper=e}this.processInitOptions(i),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if("function"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new r("If the node provided cannot have children, the children map should be empty.");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,n=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,n,this.node,e):this.instantiateSingleWrapletChild(i,n,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(u(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!u(i))throw new l("Internal logic error. Expected a WrapletSet.");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new l("Internal logic error. Multiple instances wrapping the same element found in the core.");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const n=t.selector,s=this.findChildren(n,i);if(this.validateElements(r,s,t),0===s.length)return null;if(s.length>1)throw new o(`${this.constructor.name}: More than one element was found for the "${r}" child. Selector used: "${n}".`);const a=s[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const n=this.findExistingWraplet(t,r);if(n)return n;const s=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:s,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const n=t.selector;if(!n)return new g;const s=this.findChildren(n,i);this.validateElements(r,s,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new g;for(const i of s){if(this.findExistingWraplet(r,i))continue;const n=this.instantiateWrapletItem(r,t,e,i);o.add(n)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new a("Children are already destroyed.");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,n=t.options;e.removeEventListener(i,r,n)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return"string"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new s("Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new s("Wraplet is already initialized. Fetch children with 'children' property instead.");return this.instantiatedChildren}removeChild(t,e){if(u(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new l("Internal logic error. Destroyed child couldn't be removed because it's not among the children.")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new n("Required child has been destroyed.");if(null===this.instantiatedChildren[e])throw new l("Internal logic error. Destroyed child couldn't be removed because it's already null.");this.instantiatedChildren[e]=null}}validateMapItem(t,e){const i=e.selector,n=e.required;if(!i&&n)throw new r(`${this.constructor.name}: Child "${t}" cannot at the same be required and have no selector.`)}validateElements(t,e,r){if(0===e.length&&r.required)throw new i(`${this.constructor.name}: Couldn't find a node for the wraplet "${t}". Selector used: "${r.selector}".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(u(e))for(const t of e)t.destroy();else e.destroy()}}const O=Symbol("Wraplet"),S=Symbol("Groupable");class A{core;[O]=!0;[S]=!0;[m]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute("data-js-wraplet-groupable");if(e)return e.split(",")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!d(t,w))throw new Error("AbstractWraplet requires a Core instance.");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new M(t,e)}static createWraplets(t,e,i,r=[]){if(this===A)throw new Error("You cannot instantiate an abstract class.");const n=[];if(t instanceof Element&&t.hasAttribute(i)){const i=A.createCore(t,e);n.push(new this(i,...r))}const s=t.querySelectorAll(`[${i}]`);for(const t of s){const i=A.createCore(t,e);n.push(new this(i,...r))}return n}}class I extends Error{}class D{element;attribute;defaults;validators;data;options;constructor(t,e,i,r,n={}){this.element=t,this.attribute=e,this.defaults=i,this.validators=r,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...n},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,i)=>(t[i]=e[i],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(t,e){if(!this.validators[t](e))throw new I(`Attempted to set an invalid value for the key ${String(t)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[t]=e,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const i of t)delete e[i];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const t=this.getAttributeValue(this.attribute);if("{"!==t.charAt(0))throw new I("Data has to be defined as an object.");const e=JSON.parse(t);if(!this.validateData(e))throw new I("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,e)}validateData(t){for(const e in t)if(!this.validators[e](t[e]))return!1;return!0}getAttributeValue(t){return this.element.getAttribute(t)||"{}"}}const L="data-js-exhibition",W="data-js-options",x={html:{languages:["html"],tag:void 0},js:{languages:["javascript","typescript"],tag:"script"},css:{languages:["css"],tag:"style"}};function j(t){for(const[e,i]of Object.entries(x))if(i.languages.includes(t))return e;throw new Error("Unknown language")}function P(t){return x[t].tag}function T(t){return Boolean(P(t))}class z extends A{monacoEditorModule;editor;options;constructor(t,e){super(t);const i={optionsAttribute:"data-js-options",monacoOptions:{},location:"body",priority:0,trimDefaultValue:!0,monacoEditorModule:e.monacoEditorModule},r={optionsAttribute:t=>"string"==typeof t,monacoOptions:()=>!0,location:t=>"string"==typeof t&&["head","body"].includes(t),priority:t=>Number.isInteger(t),tagAttributes:t=>"object"==typeof t,trimDefaultValue:t=>"boolean"==typeof t,monacoEditorModule:t=>null!==t&&"object"==typeof t};if(e.monacoOptions={...i.monacoOptions,...e.monacoOptions},this.options=new D(this.node,W,{...i,...e},r,{elementOptionsMerger:(t,e)=>(e.monacoOptions={...t.monacoOptions,...e.monacoOptions},{...t,...e})}),this.monacoEditorModule=this.options.get("monacoEditorModule"),this.options.get("trimDefaultValue")){const t=this.options.get("monacoOptions");t.value&&(t.value=this.trimDefaultValue(t.value),this.options.set("monacoOptions",t))}this.validateOptions();const n=this.options.get("monacoOptions"),s=Math.random().toString(36).substring(2,15),o=this.monacoEditorModule.editor.createModel(this.options.get("monacoOptions").value||"",this.getLanguage(),this.monacoEditorModule.Uri.parse(`file:///${this.getLanguage()}-${s}.ts`)),a=this.options.get("monacoEditorModule");this.editor=a.editor.create(this.node,{...n,model:o})}getPriority(){return this.options.get("priority")}getValue(){return this.editor.getValue()}async alterDocument(t){const e=this.getLanguage(),i="typescript"===e?await this.getTSValueAsJS():this.getValue(),r=this.options.get("location"),n=j(e);if(T(n)){const e=P(n),s=this.options.get("tagAttributes")??{},o=t.createElement(e);for(const[t,e]of Object.entries(s))o.setAttribute(t,e);return o.innerHTML=i,void t[r].appendChild(o)}t[r].innerHTML+=i}getDocumentAlterer(){return this.alterDocument.bind(this)}validateOptions(){if(!this.options.get("monacoOptions").language)throw new Error("Missing language in monacoOptions");if(!T(j(this.getLanguage()))&&this.options.get("tagAttributes"))throw new Error("'tagAttributes' option is only allowed for single tag types")}async getTSValueAsJS(){const t=this.editor.getModel();if(!t)throw new Error("Model is not available");this.monacoEditorModule.languages.typescript.typescriptDefaults.setEagerModelSync(!0);const e=t.uri;if("file"!==e.scheme)throw new Error(`Model must use file:// URI, got: ${e.toString()}`);const i=async(t=10)=>{try{return await this.monacoEditorModule.languages.typescript.getTypeScriptWorker()}catch(e){if("TypeScript not registered!"!==e)throw e;return t<=0?null:(await new Promise(t=>setTimeout(t,200)),i(t-1))}},r=await i();if(!r)throw new Error("Timeout: Could not get TypeScript worker");const n=await r(e);for(let t=0;t<20;t++)try{await n.getSemanticDiagnostics(e.toString());break}catch(t){if(/Could not find source file/.test(String(t))){await new Promise(t=>setTimeout(t,250));continue}throw t}const{outputFiles:s}=await n.getEmitOutput(e.toString());if(!s.length)throw new Error("No JS output produced");return s[0].text}getLanguage(){const t=this.options.get("monacoOptions");if(!t.language)throw new Error("Missing language in monacoOptions");return t.language}trimDefaultValue(t){const e=t.split("\n"),i=e.find(t=>t.trim().length>0);if(!i)return t.trim();const r=i.search(/\S|$/);return e.map(t=>t.length>=r&&""===t.substring(0,r).trim()?t.substring(r):t).join("\n").trim()}static create(t,e){const i=new M(t,{});return new z(i,e)}}const N={editors:{selector:"[data-js-exhibition-editor]",multiple:!0,required:!1,Class:z,args:[]},preview:{selector:"iframe[data-js-exhibition-preview]",multiple:!1,required:!0,Class:class extends A{alterers=[];currentBlobUrl=null;addDocumentAlterer(t,e=0){this.alterers.push({callback:t,priority:e})}async update(){const t=document.implementation.createHTMLDocument();this.alterers.sort((t,e)=>e.priority-t.priority);for(const e of this.alterers)await e.callback(t);this.currentBlobUrl&&URL.revokeObjectURL(this.currentBlobUrl);const e="<!DOCTYPE html>\n"+t.documentElement.outerHTML,i=new Blob([e],{type:"text/html;charset=utf-8"});this.currentBlobUrl=URL.createObjectURL(i),this.node.src=this.currentBlobUrl,this.node.onload=()=>{setTimeout(()=>{this.updateHeight()},100),this.node.onload=null}}updateHeight(){const t=this.getIFrameWindow(),e=this.getIFrameDocument().querySelector("html");if(!e)return;const i=t.getComputedStyle(e),r=parseFloat(i.marginTop)+parseFloat(i.marginBottom),n=Math.ceil(e.offsetHeight+r);this.node.height=n+"px"}getIFrameDocument(){const t=this.node.contentDocument;if(!t)throw new Error("IFrame document is not available.");return t}getIFrameWindow(){const t=this.node.contentWindow;if(!t)throw new Error("IFrame window is not available.");return t}}}};class G extends A{options;constructor(t,e={}){super(t),this.options=new D(this.node,L,{updatePreviewOnInit:!0,updaterSelector:"[data-js-exhibition-updater]",...e},{updatePreviewOnInit:t=>"boolean"==typeof t,updaterSelector:t=>"string"==typeof t});for(const t of this.children.editors)this.children.preview.addDocumentAlterer(t.getDocumentAlterer(),t.getPriority());const i=this.node.querySelectorAll(this.options.get("updaterSelector"));for(const t of i)this.core.addEventListener(t,"click",()=>{this.updatePreview()});this.options.get("updatePreviewOnInit")&&this.updatePreview()}addEditor(t){this.children.editors.add(t),this.addPreviewAlterer(t.getDocumentAlterer(),t.getPriority())}addPreviewAlterer(t,e=0){this.children.preview.addDocumentAlterer(t,e)}getPreview(){return this.children.preview}async updatePreview(){await this.children.preview.update()}static createMultiple(t,e=L,i,r={}){return this.createWraplets(t,i,e,[r])}static create(t,e,i={}){const r=new M(t,e);return new G(r,i)}static getMapWithMonacoEditor(t,e={}){const i={...e,Class:z},r=this.getMap(i);return r.editors.args=[t],r}static getMap(t){const e=N,i={initEditors:!0,...t};return e.editors.Class=i.Class,i.initEditors||(e.editors.selector=void 0),e}}var $=exports;for(var F in e)$[F]=e[F];e.__esModule&&Object.defineProperty($,"__esModule",{value:!0});
1
+ var t={d:(e,i)=>{for(var r in i)t.o(i,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:i[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{Exhibition:()=>$,ExhibitionMonacoEditor:()=>T,defaultOptionsAttribute:()=>x});class i extends Error{}class r extends Error{}class n extends Error{}class s extends Error{}class o extends Error{}class a extends Error{}class l extends Error{}function h(t){return Object.getPrototypeOf(t)===Object.prototype}const d=(t,e)=>"object"==typeof t&&null!==t&&!0===t[e],c=Symbol("WrapletSet");function u(t){return d(t,c)}class p extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const f=Symbol("WrapletSetReadonly");class g extends p{[f]=!0;[c]=!0}const m=Symbol("NodeTreeParent"),w=Symbol("ChildrenManager");function y(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function b(t){const e={};for(const i in t){const r=t[i];e[i]=y(r);const n=r.map;n&&h(n)&&(e[i].map=b(n))}return e}const C=Symbol("DynamicMap");function E(t){return d(t,C)}class v{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=b(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(".")} . No such definition.`);const r=e[i].map;if(h(r))e=r;else{if(!E(r))throw new Error("Invalid map type.");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error("Map doesn't exist.");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(E(t))return!0;if(!h(t))throw new Error("Invalid map type.");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error("At the root already.");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new v(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class M{node;[w]=!0;[m]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,e,i={}){if(this.node=t,h(e))this.mapWrapper=new v(e);else{if(!(e instanceof v))throw new r("The map provided to the Core is not a valid map.");this.mapWrapper=e}this.processInitOptions(i),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if("function"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new r("If the node provided cannot have children, the children map should be empty.");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,n=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,n,this.node,e):this.instantiateSingleWrapletChild(i,n,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(u(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!u(i))throw new l("Internal logic error. Expected a WrapletSet.");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new l("Internal logic error. Multiple instances wrapping the same element found in the core.");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const n=t.selector,s=this.findChildren(n,i);if(this.validateElements(r,s,t),0===s.length)return null;if(s.length>1)throw new o(`${this.constructor.name}: More than one element was found for the "${r}" child. Selector used: "${n}".`);const a=s[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const n=this.findExistingWraplet(t,r);if(n)return n;const s=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:s,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const n=t.selector;if(!n)return new g;const s=this.findChildren(n,i);this.validateElements(r,s,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new g;for(const i of s){if(this.findExistingWraplet(r,i))continue;const n=this.instantiateWrapletItem(r,t,e,i);o.add(n)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new a("Children are already destroyed.");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,n=t.options;e.removeEventListener(i,r,n)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return"string"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new s("Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new s("Wraplet is already initialized. Fetch children with 'children' property instead.");return this.instantiatedChildren}removeChild(t,e){if(u(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new l("Internal logic error. Destroyed child couldn't be removed because it's not among the children.")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new n("Required child has been destroyed.");if(null===this.instantiatedChildren[e])throw new l("Internal logic error. Destroyed child couldn't be removed because it's already null.");this.instantiatedChildren[e]=null}}validateMapItem(t,e){const i=e.selector,n=e.required;if(!i&&n)throw new r(`${this.constructor.name}: Child "${t}" cannot at the same be required and have no selector.`)}validateElements(t,e,r){if(0===e.length&&r.required)throw new i(`${this.constructor.name}: Couldn't find a node for the wraplet "${t}". Selector used: "${r.selector}".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(u(e))for(const t of e)t.destroy();else e.destroy()}}const O=Symbol("Wraplet"),S=Symbol("Groupable");class A{core;[O]=!0;[S]=!0;[m]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute("data-js-wraplet-groupable");if(e)return e.split(",")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!d(t,w))throw new Error("AbstractWraplet requires a Core instance.");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new M(t,e)}static createWraplets(t,e,i,r=[]){if(this===A)throw new Error("You cannot instantiate an abstract class.");const n=[];if(t instanceof Element&&t.hasAttribute(i)){const i=A.createCore(t,e);n.push(new this(i,...r))}const s=t.querySelectorAll(`[${i}]`);for(const t of s){const i=A.createCore(t,e);n.push(new this(i,...r))}return n}}class D extends Error{}class I{element;attribute;defaults;validators;data;options;constructor(t,e,i,r,n={}){this.element=t,this.attribute=e,this.defaults=i,this.validators=r,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...n},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,i)=>(t[i]=e[i],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(t,e){if(!this.validators[t](e))throw new D(`Attempted to set an invalid value for the key ${String(t)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[t]=e,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const i of t)delete e[i];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const t=this.getAttributeValue(this.attribute);if("{"!==t.charAt(0))throw new D("Data has to be defined as an object.");const e=JSON.parse(t);if(!this.validateData(e))throw new D("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,e)}validateData(t){for(const e in t){if(!(e in this.validators))return console.warn(`Option ${e} doesn't have a validator.`),!1;if("function"!=typeof this.validators[e])return console.warn(`Validator for option ${e} is not a function.`),!1;if(!this.validators[e](t[e]))return!1}return!0}getAttributeValue(t){return this.element.getAttribute(t)||"{}"}}const L="data-js-exhibition",x="data-js-options",W={html:{languages:["html"],tag:void 0},js:{languages:["javascript","typescript"],tag:"script"},css:{languages:["css"],tag:"style"}};function j(t){for(const[e,i]of Object.entries(W))if(i.languages.includes(t))return e;throw new Error("Unknown language")}function P(t){return W[t].tag}function z(t){return Boolean(P(t))}class T extends A{monaco;editor=null;options;constructor(t,e){super(t);const i={optionsAttribute:"data-js-options",location:"body",priority:0,trimDefaultValue:!0,monacoEditorOptions:{}},r={optionsAttribute:t=>"string"==typeof t,location:t=>"string"==typeof t&&["head","body"].includes(t),priority:t=>Number.isInteger(t),tagAttributes:t=>"object"==typeof t,trimDefaultValue:t=>"boolean"==typeof t,monacoEditorCreator:t=>"function"==typeof t,monaco:t=>"object"==typeof t,monacoEditorOptions:()=>!0};if(e.monacoEditorOptions={...i.monacoEditorOptions,...e.monacoEditorOptions},this.options=new I(this.node,x,{...i,...e},r,{elementOptionsMerger:(t,e)=>(e.monacoEditorOptions={...t.monacoEditorOptions,...e.monacoEditorOptions},{...t,...e})}),this.monaco=this.options.get("monaco"),this.options.get("trimDefaultValue")){const t=this.options.get("monacoEditorOptions");t.value&&(t.value=T.trimDefaultValue(t.value),this.options.set("monacoEditorOptions",t))}this.validateOptions()}isEditorInitialized(){return null!==this.editor}async init(){const t=this.options.get("monacoEditorCreator")||(async(t,e,i)=>T.createMonacoEditor(t,e,i));this.editor=await t(this.options.get("monacoEditorOptions"),this.node,this.monaco)}getPriority(){return this.options.get("priority")}getValue(){return this.getEditor().getValue()}async alterDocument(t){const e=this.getLanguage(),i="typescript"===e?await this.getTSValueAsJS():this.getValue(),r=this.options.get("location"),n=j(e);if(z(n)){const e=P(n),s=this.options.get("tagAttributes")??{},o=t.createElement(e);for(const[t,e]of Object.entries(s))o.setAttribute(t,e);return o.innerHTML=i,void t[r].appendChild(o)}t[r].innerHTML+=i}getDocumentAlterer(){return this.alterDocument.bind(this)}validateOptions(){if(!this.options.get("monacoEditorOptions").language)throw new Error("Missing language in monacoOptions");if(!z(j(this.getLanguage()))&&this.options.get("tagAttributes"))throw new Error("'tagAttributes' option is only allowed for single tag types")}getEditor(){if(!this.editor)throw new Error("Editor is not initialized");return this.editor}async getTSValueAsJS(){const t=this.getEditor().getModel();if(!t)throw new Error("Model is not available");this.monaco.languages.typescript.typescriptDefaults.setEagerModelSync(!0);const e=t.uri;if("file"!==e.scheme)throw new Error(`Model must use file:// URI, got: ${e.toString()}`);const i=async(t=10)=>{try{return await this.monaco.languages.typescript.getTypeScriptWorker()}catch(e){if("TypeScript not registered!"!==e)throw e;return t<=0?null:(await new Promise(t=>setTimeout(t,200)),i(t-1))}},r=await i();if(!r)throw new Error("Timeout: Could not get TypeScript worker");const n=await r(e);for(let t=0;t<20;t++)try{await n.getSemanticDiagnostics(e.toString());break}catch(t){if(/Could not find source file/.test(String(t))){await new Promise(t=>setTimeout(t,250));continue}throw t}const{outputFiles:s}=await n.getEmitOutput(e.toString());if(!s.length)throw new Error("No JS output produced");return s[0].text}getLanguage(){const t=this.options.get("monacoEditorOptions");if(!t.language)throw new Error("Missing language in monacoOptions");return t.language}static trimDefaultValue(t){const e=t.split("\n"),i=e.find(t=>t.trim().length>0);if(!i)return t.trim();const r=i.search(/\S|$/);return e.map(t=>t.length>=r&&""===t.substring(0,r).trim()?t.substring(r):t).join("\n").trim()}destroy(){this.editor?.dispose(),super.destroy()}static createMonacoEditor(t={},e,i){const r=t.language;if(!r)throw new Error("Missing language in editorOptions");const n=this.createMonacoModel(i,r,t.value||"");return i.editor.create(e,{...t,model:n})}static createMonacoModel(t,e,i){const r=Math.random().toString(36).substring(2,15);return t.editor.createModel(i,e,t.Uri.parse(`file:///${e}-${r}.ts`))}static create(t,e){const i=new M(t,{});return new T(i,e)}}const N={editors:{selector:"[data-js-exhibition-editor]",multiple:!0,required:!1,Class:T,args:[]},preview:{selector:"iframe[data-js-exhibition-preview]",multiple:!1,required:!0,Class:class extends A{alterers=[];currentBlobUrl=null;addDocumentAlterer(t,e=0){this.alterers.push({callback:t,priority:e})}async update(){const t=document.implementation.createHTMLDocument();this.alterers.sort((t,e)=>e.priority-t.priority);for(const e of this.alterers)await e.callback(t);this.currentBlobUrl&&URL.revokeObjectURL(this.currentBlobUrl);const e="<!DOCTYPE html>\n"+t.documentElement.outerHTML,i=new Blob([e],{type:"text/html;charset=utf-8"});this.currentBlobUrl=URL.createObjectURL(i),this.node.src=this.currentBlobUrl,this.node.onload=()=>{setTimeout(()=>{this.updateHeight()},100),this.node.onload=null}}updateHeight(){const t=this.getIFrameWindow(),e=this.getIFrameDocument().querySelector("html");if(!e)return;const i=t.getComputedStyle(e),r=parseFloat(i.marginTop)+parseFloat(i.marginBottom),n=Math.ceil(e.offsetHeight+r);this.node.height=n+"px"}getIFrameDocument(){const t=this.node.contentDocument;if(!t)throw new Error("IFrame document is not available.");return t}getIFrameWindow(){const t=this.node.contentWindow;if(!t)throw new Error("IFrame window is not available.");return t}}}};class $ extends A{options;constructor(t,e={}){super(t),this.options=new I(this.node,L,{updaterSelector:"[data-js-exhibition-updater]",...e},{updaterSelector:t=>"string"==typeof t});for(const t of this.children.editors)this.children.preview.addDocumentAlterer(t.getDocumentAlterer(),t.getPriority());const i=this.node.querySelectorAll(this.options.get("updaterSelector"));for(const t of i)this.core.addEventListener(t,"click",()=>{this.updatePreview()})}async init(){await this.initalizeMonacoEditors()}addEditor(t){this.children.editors.add(t),this.addPreviewAlterer(t.getDocumentAlterer(),t.getPriority())}addPreviewAlterer(t,e=0){this.children.preview.addDocumentAlterer(t,e)}getPreview(){return this.children.preview}async updatePreview(){await this.children.preview.update()}async initalizeMonacoEditors(){for(const t of this.children.editors)if(t instanceof T){if(t.isEditorInitialized())continue;await t.init()}}static async createMultiple(t,e=L,i,r={},n=!0,s=!0){if(!n&&s)throw new Error("Cannot update preview without initializing exhibitions first");const o=this.createWraplets(t,i,e,[r]);return n&&await Promise.all(o.map(t=>t.init())),s&&await Promise.all(o.map(t=>t.updatePreview())),o}static async create(t,e,i={}){const r=new M(t,e);return new $(r,i)}static getMapWithMonacoEditor(t,e={}){const i={...e,Class:T},r=this.getMap(i);return r.editors.args=[t],r}static getMap(t){const e=N,i={selectEditors:!0,...t};return e.editors.Class=i.Class,i.selectEditors||(e.editors.selector=void 0),e}}var G=exports;for(var F in e)G[F]=e[F];e.__esModule&&Object.defineProperty(G,"__esModule",{value:!0});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","mappings":"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","sources":["webpack://exhibitionjs/webpack/bootstrap","webpack://exhibitionjs/webpack/runtime/define property getters","webpack://exhibitionjs/webpack/runtime/hasOwnProperty shorthand","webpack://exhibitionjs/webpack/runtime/make namespace object","webpack://exhibitionjs/./node_modules/wraplet/dist/index.js","webpack://exhibitionjs/./node_modules/wraplet/dist/storage.js","webpack://exhibitionjs/./src/selectors.ts","webpack://exhibitionjs/./src/TypeMap.ts","webpack://exhibitionjs/./src/ExhibitionMonacoEditor.ts","webpack://exhibitionjs/./src/Exhibition.ts","webpack://exhibitionjs/./src/ExhibitionPreview.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","class t extends Error{}class e extends Error{}class i extends Error{}class r extends Error{}class n extends Error{}class s extends Error{}class o extends Error{}function a(t){return Object.getPrototypeOf(t)===Object.prototype}const h=(t,e)=>\"object\"==typeof t&&null!==t&&!0===t[e],l=Symbol(\"WrapletSet\");function d(t){return h(t,l)}class c extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const p=Symbol(\"WrapletSetReadonly\");class u extends c{[p]=!0;[l]=!0}function f(t){const e=t.wraplets;return d(e)&&0!==e.size?e:new u}function C(t,e){return!!e.wraplets&&e.wraplets.delete(t)}function y(t,e){e(t);const i=t.childNodes;for(const t of i)y(t,e)}function w(t){y(t,t=>{const e=f(t);for(const i of e)i.isGettingDestroyed||i.isDestroyed||i.destroy(),C(i,t)})}const g=Symbol(\"NodeTreeParent\"),m=Symbol(\"ChildrenManager\");function b(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function v(t){const e={};for(const i in t){const r=t[i];e[i]=b(r);const n=r.map;n&&a(n)&&(e[i].map=v(n))}return e}const I=Symbol(\"DynamicMap\");function E(t){return h(t,I)}class W{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=v(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(\".\")} . No such definition.`);const r=e[i].map;if(a(r))e=r;else{if(!E(r))throw new Error(\"Invalid map type.\");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error(\"Map doesn't exist.\");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(E(t))return!0;if(!a(t))throw new Error(\"Invalid map type.\");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error(\"At the root already.\");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new W(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class M{node;[m]=!0;[g]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,i,r={}){if(this.node=t,a(i))this.mapWrapper=new W(i);else{if(!(i instanceof W))throw new e(\"The map provided to the Core is not a valid map.\");this.mapWrapper=i}this.processInitOptions(r),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if(\"function\"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new e(\"If the node provided cannot have children, the children map should be empty.\");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,n=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,n,this.node,e):this.instantiateSingleWrapletChild(i,n,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(d(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!d(i))throw new o(\"Internal logic error. Expected a WrapletSet.\");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new o(\"Internal logic error. Multiple instances wrapping the same element found in the core.\");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const s=t.selector,o=this.findChildren(s,i);if(this.validateElements(r,o,t),0===o.length)return null;if(o.length>1)throw new n(`${this.constructor.name}: More than one element was found for the \"${r}\" child. Selector used: \"${s}\".`);const a=o[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const n=this.findExistingWraplet(t,r);if(n)return n;const s=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:s,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const n=t.selector;if(!n)return new u;const s=this.findChildren(n,i);this.validateElements(r,s,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new u;for(const i of s){if(this.findExistingWraplet(r,i))continue;const n=this.instantiateWrapletItem(r,t,e,i);o.add(n)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new s(\"Children are already destroyed.\");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,n=t.options;e.removeEventListener(i,r,n)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return\"string\"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new r(\"Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.\");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new r(\"Wraplet is already initialized. Fetch children with 'children' property instead.\");return this.instantiatedChildren}removeChild(t,e){if(d(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's not among the children.\")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new i(\"Required child has been destroyed.\");if(null===this.instantiatedChildren[e])throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's already null.\");this.instantiatedChildren[e]=null}}validateMapItem(t,i){const r=i.selector,n=i.required;if(!r&&n)throw new e(`${this.constructor.name}: Child \"${t}\" cannot at the same be required and have no selector.`)}validateElements(e,i,r){if(0===i.length&&r.required)throw new t(`${this.constructor.name}: Couldn't find a node for the wraplet \"${e}\". Selector used: \"${r.selector}\".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(d(e))for(const t of e)t.destroy();else e.destroy()}}const L=Symbol(\"Wraplet\");function D(t){return h(t,L)}const x=Symbol(\"Groupable\");class S{core;[L]=!0;[x]=!0;[g]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute(\"data-js-wraplet-groupable\");if(e)return e.split(\",\")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!h(t,m))throw new Error(\"AbstractWraplet requires a Core instance.\");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new M(t,e)}static createWraplets(t,e,i,r=[]){if(this===S)throw new Error(\"You cannot instantiate an abstract class.\");const n=[];if(t instanceof Element&&t.hasAttribute(i)){const i=S.createCore(t,e);n.push(new this(i,...r))}const s=t.querySelectorAll(`[${i}]`);for(const t of s){const i=S.createCore(t,e);n.push(new this(i,...r))}return n}}class z{levels;[I]=!0;constructor(t=1){if(this.levels=t,t<1)throw new Error(\"There have to be more than 0 repeated levels.\")}create(t){for(let e=0;e<this.levels;e++)t.down();return t.getCurrentMap()}static create(t=1){return new z(t)}}class O extends c{[p]=!0}export{S as AbstractWraplet,M as DefaultCore,u as DefaultWrapletSet,O as DefaultWrapletSetReadonly,z as MapRepeat,w as destroyWrapletsRecursively,f as getWrapletsFromNode,D as isWraplet};\n//# sourceMappingURL=index.js.map","class t extends Error{}class e{element;attribute;defaults;validators;data;options;constructor(t,e,s,i,r={}){this.element=t,this.attribute=e,this.defaults=s,this.validators=i,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...r},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,s)=>(t[s]=e[s],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(e,s){if(!this.validators[e](s))throw new t(`Attempted to set an invalid value for the key ${String(e)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[e]=s,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const s of t)delete e[s];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const e=this.getAttributeValue(this.attribute);if(\"{\"!==e.charAt(0))throw new t(\"Data has to be defined as an object.\");const s=JSON.parse(e);if(!this.validateData(s))throw new t(\"Invalid storage value.\");return this.options.elementOptionsMerger(this.defaults,s)}validateData(t){for(const e in t)if(!this.validators[e](t[e]))return!1;return!0}getAttributeValue(t){return this.element.getAttribute(t)||\"{}\"}}export{e as ElementStorage};\n//# sourceMappingURL=storage.js.map","export const exhibitionDefaultAttribute = \"data-js-exhibition\";\nexport const defaultOptionsAttribute = \"data-js-options\";\n","export const typeMap = {\n html: {\n languages: [\"html\"],\n tag: undefined,\n },\n js: {\n languages: [\"javascript\", \"typescript\"],\n tag: \"script\",\n },\n css: {\n languages: [\"css\"],\n tag: \"style\",\n },\n};\nexport function getTypeFromLanguage(language) {\n for (const [key, value] of Object.entries(typeMap)) {\n if (value.languages.includes(language)) {\n return key;\n }\n }\n throw new Error(\"Unknown language\");\n}\nexport function getTagFromType(type) {\n return typeMap[type].tag;\n}\nexport function isSingleTagValue(item) {\n return Boolean(getTagFromType(item.type));\n}\nexport function isSingleTagType(type) {\n return Boolean(getTagFromType(type));\n}\n","import { AbstractWraplet, DefaultCore } from \"wraplet\";\nimport { ElementStorage } from \"wraplet/storage\";\nimport { defaultOptionsAttribute } from \"./selectors\";\nimport { getTagFromType, getTypeFromLanguage, isSingleTagType, } from \"./TypeMap\";\nexport class ExhibitionMonacoEditor extends AbstractWraplet {\n monacoEditorModule;\n editor;\n options;\n constructor(core, options) {\n super(core);\n const defaultOptions = {\n optionsAttribute: \"data-js-options\",\n monacoOptions: {},\n location: \"body\",\n priority: 0,\n trimDefaultValue: true,\n monacoEditorModule: options.monacoEditorModule,\n };\n const validators = {\n optionsAttribute: (data) => typeof data === \"string\",\n // We generally don't validate monacoOptions, leaving it to the monaco editor.\n monacoOptions: () => true,\n location: (data) => typeof data === \"string\" && [\"head\", \"body\"].includes(data),\n priority: (data) => Number.isInteger(data),\n tagAttributes: (data) => typeof data === \"object\",\n trimDefaultValue: (data) => typeof data === \"boolean\",\n monacoEditorModule: (data) => data !== null && typeof data === \"object\",\n };\n options.monacoOptions = {\n ...defaultOptions.monacoOptions,\n ...options.monacoOptions,\n };\n this.options = new ElementStorage(this.node, defaultOptionsAttribute, { ...defaultOptions, ...options }, validators, {\n elementOptionsMerger: (defaults, options) => {\n options.monacoOptions = {\n ...defaults.monacoOptions,\n ...options.monacoOptions,\n };\n return { ...defaults, ...options };\n },\n });\n this.monacoEditorModule = this.options.get(\"monacoEditorModule\");\n if (this.options.get(\"trimDefaultValue\")) {\n const monacoOptions = this.options.get(\"monacoOptions\");\n if (monacoOptions.value) {\n monacoOptions.value = this.trimDefaultValue(monacoOptions.value);\n this.options.set(\"monacoOptions\", monacoOptions);\n }\n }\n this.validateOptions();\n const monacoOptions = this.options.get(\"monacoOptions\");\n // Generate a unique URI for each editor instance\n const uniqueId = Math.random().toString(36).substring(2, 15);\n const model = this.monacoEditorModule.editor.createModel(this.options.get(\"monacoOptions\").value || \"\", this.getLanguage(), this.monacoEditorModule.Uri.parse(`file:///${this.getLanguage()}-${uniqueId}.ts`));\n const monacoEditorModule = this.options.get(\"monacoEditorModule\");\n this.editor = monacoEditorModule.editor.create(this.node, {\n ...monacoOptions,\n ...{ model: model },\n });\n }\n getPriority() {\n return this.options.get(\"priority\");\n }\n /**\n * Returns the current value of the editor.\n */\n getValue() {\n return this.editor.getValue();\n }\n async alterDocument(document) {\n const language = this.getLanguage();\n const content = language === \"typescript\" ? await this.getTSValueAsJS() : this.getValue();\n const location = this.options.get(\"location\");\n const type = getTypeFromLanguage(language);\n if (isSingleTagType(type)) {\n const tag = getTagFromType(type);\n const tagAttributes = this.options.get(\"tagAttributes\") ?? {};\n const tagElement = document.createElement(tag);\n for (const [key, value] of Object.entries(tagAttributes)) {\n tagElement.setAttribute(key, value);\n }\n tagElement.innerHTML = content;\n document[location].appendChild(tagElement);\n return;\n }\n document[location].innerHTML += content;\n }\n getDocumentAlterer() {\n return this.alterDocument.bind(this);\n }\n /**\n * Additional validation.\n */\n validateOptions() {\n if (!this.options.get(\"monacoOptions\").language) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n const type = getTypeFromLanguage(this.getLanguage());\n if (!isSingleTagType(type)) {\n if (this.options.get(\"tagAttributes\")) {\n throw new Error(\"'tagAttributes' option is only allowed for single tag types\");\n }\n }\n }\n async getTSValueAsJS() {\n const model = this.editor.getModel();\n if (!model)\n throw new Error(\"Model is not available\");\n // Make sure TypeScript eager sync is enabled\n this.monacoEditorModule.languages.typescript.typescriptDefaults.setEagerModelSync(true);\n // Ensure we're using file:/// URI\n const uri = model.uri;\n if (uri.scheme !== \"file\") {\n throw new Error(`Model must use file:// URI, got: ${uri.toString()}`);\n }\n // Get worker getter\n const getWorker = async (attempts = 10) => {\n try {\n return await this.monacoEditorModule.languages.typescript.getTypeScriptWorker();\n }\n catch (error) {\n if (error !== \"TypeScript not registered!\")\n throw error;\n if (attempts <= 0)\n return null;\n await new Promise((r) => setTimeout(r, 200));\n return getWorker(attempts - 1);\n }\n };\n const workerGetter = await getWorker();\n if (!workerGetter)\n throw new Error(\"Timeout: Could not get TypeScript worker\");\n const worker = await workerGetter(uri);\n // 🔸 Wait until the worker actually knows this file\n // Call something lightweight to force registration\n for (let i = 0; i < 20; i++) {\n try {\n await worker.getSemanticDiagnostics(uri.toString());\n break; // success — worker now recognizes the file\n }\n catch (err) {\n if (/Could not find source file/.test(String(err))) {\n await new Promise((r) => setTimeout(r, 250));\n continue;\n }\n throw err;\n }\n }\n // Now it's safe to call getEmitOutput\n const { outputFiles } = await worker.getEmitOutput(uri.toString());\n if (!outputFiles.length)\n throw new Error(\"No JS output produced\");\n return outputFiles[0].text;\n }\n getLanguage() {\n const monacoOptions = this.options.get(\"monacoOptions\");\n if (!monacoOptions[\"language\"]) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n return monacoOptions[\"language\"];\n }\n trimDefaultValue(content) {\n const lines = content.split(\"\\n\");\n // Find the first non-empty line to determine base indentation\n const firstNonEmptyLine = lines.find((line) => line.trim().length > 0);\n if (!firstNonEmptyLine) {\n return content.trim();\n }\n // Count leading spaces on the first non-empty line\n const leadingSpaces = firstNonEmptyLine.search(/\\S|$/);\n // Trim the same number of spaces from each line\n const trimmedLines = lines.map((line) => {\n // Only trim if the line has at least that many leading spaces\n if (line.length >= leadingSpaces &&\n line.substring(0, leadingSpaces).trim() === \"\") {\n return line.substring(leadingSpaces);\n }\n return line;\n });\n // Join back and trim any leading/trailing empty lines\n return trimmedLines.join(\"\\n\").trim();\n }\n /**\n * Create a single ExhibitionMonacoEditor instance wrapping a given element.\n */\n static create(element, options) {\n const core = new DefaultCore(element, {});\n return new ExhibitionMonacoEditor(core, options);\n }\n}\n","import { AbstractWraplet, DefaultCore, } from \"wraplet\";\nimport { ExhibitionPreview } from \"./ExhibitionPreview\";\nimport { ExhibitionMonacoEditor, } from \"./ExhibitionMonacoEditor\";\nimport { exhibitionDefaultAttribute } from \"./selectors\";\nimport { ElementStorage } from \"wraplet/storage\";\nconst ExhibitionMap = {\n editors: {\n selector: \"[data-js-exhibition-editor]\",\n multiple: true,\n required: false,\n Class: ExhibitionMonacoEditor,\n args: [],\n },\n preview: {\n selector: \"iframe[data-js-exhibition-preview]\",\n multiple: false,\n required: true,\n Class: ExhibitionPreview,\n },\n};\nexport class Exhibition extends AbstractWraplet {\n options;\n constructor(core, options = {}) {\n super(core);\n const defaultOptions = {\n updatePreviewOnInit: true,\n updaterSelector: \"[data-js-exhibition-updater]\",\n };\n this.options = new ElementStorage(this.node, exhibitionDefaultAttribute, { ...defaultOptions, ...options }, {\n updatePreviewOnInit: (data) => typeof data === \"boolean\",\n updaterSelector: (data) => typeof data === \"string\",\n });\n for (const editor of this.children.editors) {\n this.children.preview.addDocumentAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n const updaterElements = this.node.querySelectorAll(this.options.get(\"updaterSelector\"));\n for (const element of updaterElements) {\n this.core.addEventListener(element, \"click\", () => {\n this.updatePreview();\n });\n }\n if (this.options.get(\"updatePreviewOnInit\")) {\n this.updatePreview();\n }\n }\n /**\n * Adds DocumentAltererProviderWraplet instance to the list of editors.\n */\n addEditor(editor) {\n this.children.editors.add(editor);\n this.addPreviewAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n /**\n * Adds a simple DocumentAlterer to the preview.\n */\n addPreviewAlterer(alterer, priority = 0) {\n this.children.preview.addDocumentAlterer(alterer, priority);\n }\n getPreview() {\n return this.children.preview;\n }\n async updatePreview() {\n await this.children.preview.update();\n }\n /**\n * Create multiple Exhibitions.\n *\n * @param node Node to create Exhibitions on.\n * @param attribute Attribute to use for Exhibition instances.\n * @param map Map of dependencies for each Exhibition instance..\n * @param options Options for Exhibition instances.\n *\n * @returns Array of Exhibition instances.\n */\n static createMultiple(node, attribute = exhibitionDefaultAttribute, map, options = {}) {\n return this.createWraplets(node, map, attribute, [options]);\n }\n /**\n * Create a single Exhibition instance wrapping a given element.\n *\n * @param element Element to wrap.\n * @param map Map of dependencies for the Exhibition instance.\n * @param options Options for the Exhibition instance.\n */\n static create(element, map, options = {}) {\n const core = new DefaultCore(element, map);\n return new Exhibition(core, options);\n }\n /**\n * Returns a dependency map with editors being instances of ExhibitionMonacoEditor.\n *\n * @param editorOptions\n * MonacoEditorOptions to pass to the editor.\n * @param options\n * Map options.\n */\n static getMapWithMonacoEditor(editorOptions, options = {}) {\n const opts = {\n ...options,\n Class: ExhibitionMonacoEditor,\n };\n const map = this.getMap(opts);\n map[\"editors\"][\"args\"] = [editorOptions];\n return map;\n }\n /**\n * Returns a generic dependecy map with an undefined editor class that has to be provided through\n * the options.\n *\n * @param options\n * Map options.\n */\n static getMap(options) {\n const map = ExhibitionMap;\n const allOptions = {\n ...{\n initEditors: true,\n },\n ...options,\n };\n map[\"editors\"][\"Class\"] = allOptions.Class;\n if (!allOptions.initEditors) {\n map[\"editors\"][\"selector\"] = undefined;\n }\n return map;\n }\n}\n","import { AbstractWraplet } from \"wraplet\";\nexport class ExhibitionPreview extends AbstractWraplet {\n alterers = [];\n currentBlobUrl = null;\n /**\n * Adds a DocumentAlterer to the preview.\n * @param alterer\n * @param priority\n * Priority of the alterer. Higher priority alterers are executed first.\n */\n addDocumentAlterer(alterer, priority = 0) {\n this.alterers.push({\n callback: alterer,\n priority: priority,\n });\n }\n async update() {\n const doc = document.implementation.createHTMLDocument();\n this.alterers.sort((a, b) => b.priority - a.priority);\n for (const alterer of this.alterers) {\n await alterer.callback(doc);\n }\n // Revoke previous blob URL\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n const htmlContent = \"<!DOCTYPE html>\\n\" + doc.documentElement.outerHTML;\n const blob = new Blob([htmlContent], { type: \"text/html;charset=utf-8\" });\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.node.src = this.currentBlobUrl;\n this.node.onload = () => {\n // Wait for the document to render before calculating the height.\n // @todo This should be configurable.\n setTimeout(() => {\n this.updateHeight();\n }, 100);\n this.node.onload = null;\n };\n }\n /**\n * Updates preview's height to match its content.\n */\n updateHeight() {\n const iframeWindow = this.getIFrameWindow();\n const iframeDocument = this.getIFrameDocument();\n const el = iframeDocument.querySelector(\"html\");\n if (!el) {\n return;\n }\n const styles = iframeWindow.getComputedStyle(el);\n const margin = parseFloat(styles[\"marginTop\"]) + parseFloat(styles[\"marginBottom\"]);\n const height = Math.ceil(el.offsetHeight + margin);\n this.node.height = height + \"px\";\n }\n getIFrameDocument() {\n const iframeDocument = this.node.contentDocument;\n if (!iframeDocument) {\n throw new Error(\"IFrame document is not available.\");\n }\n return iframeDocument;\n }\n getIFrameWindow() {\n const window = this.node.contentWindow;\n if (!window) {\n throw new Error(\"IFrame window is not available.\");\n }\n return window;\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","t","Error","e","i","r","n","s","a","getPrototypeOf","h","l","d","c","Set","find","this","push","findOne","getOrdered","Array","from","sort","p","u","g","m","b","args","destructible","map","coreOptions","v","I","E","W","fullMap","startingPath","currentMap","path","currentPath","constructor","resolve","getStartingMap","getCurrentMap","findMap","join","create","clone","up","pathExists","hasOwn","down","length","pop","M","node","isDestroyed","isGettingDestroyed","isGettingInitialized","isInitialized","mapWrapper","instantiatedChildren","destroyChildListeners","instantiateChildListeners","listeners","defaultWrapletCreator","element","initOptions","Class","wrapletCreator","processInitOptions","init","instantiateChildren","wrapChildren","querySelectorAll","keys","multiple","validateMapItem","instantiateMultipleWrapletsChild","instantiateSingleWrapletChild","syncChildren","getNodeTreeChildren","values","children","filter","accessNode","contains","findExistingWraplet","selector","findChildren","validateElements","name","instantiateWrapletItem","id","defaultCreator","prepareIndividualWraplet","add","addDestroyChildListener","addInstantiateChildListener","setWrapletCreator","addDestroyListener","removeChild","destroy","eventName","callback","options","removeEventListener","destroyChildren","addEventListener","uninitializedChildren","delete","required","Proxy","defaultInitOptions","assign","entries","L","x","S","core","groupsExtractor","Element","getAttribute","split","destroyListeners","__debugNodeAccessors","onChildDestroyed","bind","onChildInstantiated","initialize","setGroupsExtractor","getGroups","isChildInstance","createCore","createWraplets","hasAttribute","attribute","defaults","validators","data","keepFresh","elementOptionsMerger","fetchFreshData","has","getAll","getMultiple","reduce","refresh","set","String","getAttributeValue","JSON","parse","setAll","setMultiple","setAttribute","stringify","deleteMultiple","deleteAll","removeAttribute","charAt","validateData","exhibitionDefaultAttribute","defaultOptionsAttribute","typeMap","html","languages","tag","undefined","js","css","getTypeFromLanguage","language","includes","getTagFromType","type","isSingleTagType","Boolean","ExhibitionMonacoEditor","monacoEditorModule","editor","super","defaultOptions","optionsAttribute","monacoOptions","location","priority","trimDefaultValue","Number","isInteger","tagAttributes","validateOptions","uniqueId","Math","random","toString","substring","model","createModel","getLanguage","Uri","getPriority","getValue","alterDocument","document","content","getTSValueAsJS","tagElement","createElement","innerHTML","appendChild","getDocumentAlterer","getModel","typescript","typescriptDefaults","setEagerModelSync","uri","scheme","getWorker","async","attempts","getTypeScriptWorker","error","Promise","setTimeout","workerGetter","worker","getSemanticDiagnostics","err","test","outputFiles","getEmitOutput","text","lines","firstNonEmptyLine","line","trim","leadingSpaces","search","ExhibitionMap","editors","preview","alterers","currentBlobUrl","addDocumentAlterer","alterer","update","doc","implementation","createHTMLDocument","URL","revokeObjectURL","htmlContent","documentElement","outerHTML","blob","Blob","createObjectURL","src","onload","updateHeight","iframeWindow","getIFrameWindow","el","getIFrameDocument","querySelector","styles","getComputedStyle","margin","parseFloat","height","ceil","offsetHeight","iframeDocument","contentDocument","window","contentWindow","Exhibition","updatePreviewOnInit","updaterSelector","updaterElements","updatePreview","addEditor","addPreviewAlterer","getPreview","createMultiple","getMapWithMonacoEditor","editorOptions","opts","getMap","allOptions","initEditors"],"sourceRoot":""}
1
+ {"version":3,"file":"index.cjs","mappings":"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","sources":["webpack://exhibitionjs/webpack/bootstrap","webpack://exhibitionjs/webpack/runtime/define property getters","webpack://exhibitionjs/webpack/runtime/hasOwnProperty shorthand","webpack://exhibitionjs/webpack/runtime/make namespace object","webpack://exhibitionjs/./node_modules/wraplet/dist/index.js","webpack://exhibitionjs/./node_modules/wraplet/dist/storage.js","webpack://exhibitionjs/./src/selectors.ts","webpack://exhibitionjs/./src/TypeMap.ts","webpack://exhibitionjs/./src/ExhibitionMonacoEditor.ts","webpack://exhibitionjs/./src/Exhibition.ts","webpack://exhibitionjs/./src/ExhibitionPreview.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","class t extends Error{}class e extends Error{}class i extends Error{}class r extends Error{}class n extends Error{}class s extends Error{}class o extends Error{}function a(t){return Object.getPrototypeOf(t)===Object.prototype}const h=(t,e)=>\"object\"==typeof t&&null!==t&&!0===t[e],l=Symbol(\"WrapletSet\");function d(t){return h(t,l)}class c extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const p=Symbol(\"WrapletSetReadonly\");class u extends c{[p]=!0;[l]=!0}function f(t){const e=t.wraplets;return d(e)&&0!==e.size?e:new u}function C(t,e){return!!e.wraplets&&e.wraplets.delete(t)}function y(t,e){e(t);const i=t.childNodes;for(const t of i)y(t,e)}function w(t){y(t,t=>{const e=f(t);for(const i of e)i.isGettingDestroyed||i.isDestroyed||i.destroy(),C(i,t)})}const g=Symbol(\"NodeTreeParent\"),m=Symbol(\"ChildrenManager\");function b(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function v(t){const e={};for(const i in t){const r=t[i];e[i]=b(r);const n=r.map;n&&a(n)&&(e[i].map=v(n))}return e}const I=Symbol(\"DynamicMap\");function E(t){return h(t,I)}class W{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=v(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(\".\")} . No such definition.`);const r=e[i].map;if(a(r))e=r;else{if(!E(r))throw new Error(\"Invalid map type.\");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error(\"Map doesn't exist.\");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(E(t))return!0;if(!a(t))throw new Error(\"Invalid map type.\");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error(\"At the root already.\");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new W(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class M{node;[m]=!0;[g]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,i,r={}){if(this.node=t,a(i))this.mapWrapper=new W(i);else{if(!(i instanceof W))throw new e(\"The map provided to the Core is not a valid map.\");this.mapWrapper=i}this.processInitOptions(r),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if(\"function\"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new e(\"If the node provided cannot have children, the children map should be empty.\");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,n=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,n,this.node,e):this.instantiateSingleWrapletChild(i,n,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(d(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!d(i))throw new o(\"Internal logic error. Expected a WrapletSet.\");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new o(\"Internal logic error. Multiple instances wrapping the same element found in the core.\");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const s=t.selector,o=this.findChildren(s,i);if(this.validateElements(r,o,t),0===o.length)return null;if(o.length>1)throw new n(`${this.constructor.name}: More than one element was found for the \"${r}\" child. Selector used: \"${s}\".`);const a=o[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const n=this.findExistingWraplet(t,r);if(n)return n;const s=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:s,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const n=t.selector;if(!n)return new u;const s=this.findChildren(n,i);this.validateElements(r,s,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new u;for(const i of s){if(this.findExistingWraplet(r,i))continue;const n=this.instantiateWrapletItem(r,t,e,i);o.add(n)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new s(\"Children are already destroyed.\");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,n=t.options;e.removeEventListener(i,r,n)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return\"string\"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new r(\"Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.\");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new r(\"Wraplet is already initialized. Fetch children with 'children' property instead.\");return this.instantiatedChildren}removeChild(t,e){if(d(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's not among the children.\")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new i(\"Required child has been destroyed.\");if(null===this.instantiatedChildren[e])throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's already null.\");this.instantiatedChildren[e]=null}}validateMapItem(t,i){const r=i.selector,n=i.required;if(!r&&n)throw new e(`${this.constructor.name}: Child \"${t}\" cannot at the same be required and have no selector.`)}validateElements(e,i,r){if(0===i.length&&r.required)throw new t(`${this.constructor.name}: Couldn't find a node for the wraplet \"${e}\". Selector used: \"${r.selector}\".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(d(e))for(const t of e)t.destroy();else e.destroy()}}const L=Symbol(\"Wraplet\");function D(t){return h(t,L)}const x=Symbol(\"Groupable\");class S{core;[L]=!0;[x]=!0;[g]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute(\"data-js-wraplet-groupable\");if(e)return e.split(\",\")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!h(t,m))throw new Error(\"AbstractWraplet requires a Core instance.\");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new M(t,e)}static createWraplets(t,e,i,r=[]){if(this===S)throw new Error(\"You cannot instantiate an abstract class.\");const n=[];if(t instanceof Element&&t.hasAttribute(i)){const i=S.createCore(t,e);n.push(new this(i,...r))}const s=t.querySelectorAll(`[${i}]`);for(const t of s){const i=S.createCore(t,e);n.push(new this(i,...r))}return n}}class z{levels;[I]=!0;constructor(t=1){if(this.levels=t,t<1)throw new Error(\"There have to be more than 0 repeated levels.\")}create(t){for(let e=0;e<this.levels;e++)t.down();return t.getCurrentMap()}static create(t=1){return new z(t)}}class O extends c{[p]=!0}export{S as AbstractWraplet,M as DefaultCore,u as DefaultWrapletSet,O as DefaultWrapletSetReadonly,z as MapRepeat,w as destroyWrapletsRecursively,f as getWrapletsFromNode,D as isWraplet};\n//# sourceMappingURL=index.js.map","class t extends Error{}class e{element;attribute;defaults;validators;data;options;constructor(t,e,s,i,r={}){this.element=t,this.attribute=e,this.defaults=s,this.validators=i,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...r},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,s)=>(t[s]=e[s],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(e,s){if(!this.validators[e](s))throw new t(`Attempted to set an invalid value for the key ${String(e)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[e]=s,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const s of t)delete e[s];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const e=this.getAttributeValue(this.attribute);if(\"{\"!==e.charAt(0))throw new t(\"Data has to be defined as an object.\");const s=JSON.parse(e);if(!this.validateData(s))throw new t(\"Invalid storage value.\");return this.options.elementOptionsMerger(this.defaults,s)}validateData(t){for(const e in t){if(!(e in this.validators))return console.warn(`Option ${e} doesn't have a validator.`),!1;if(\"function\"!=typeof this.validators[e])return console.warn(`Validator for option ${e} is not a function.`),!1;if(!this.validators[e](t[e]))return!1}return!0}getAttributeValue(t){return this.element.getAttribute(t)||\"{}\"}}export{e as ElementStorage};\n//# sourceMappingURL=storage.js.map","export const exhibitionDefaultAttribute = \"data-js-exhibition\";\nexport const defaultOptionsAttribute = \"data-js-options\";\n","export const typeMap = {\n html: {\n languages: [\"html\"],\n tag: undefined,\n },\n js: {\n languages: [\"javascript\", \"typescript\"],\n tag: \"script\",\n },\n css: {\n languages: [\"css\"],\n tag: \"style\",\n },\n};\nexport function getTypeFromLanguage(language) {\n for (const [key, value] of Object.entries(typeMap)) {\n if (value.languages.includes(language)) {\n return key;\n }\n }\n throw new Error(\"Unknown language\");\n}\nexport function getTagFromType(type) {\n return typeMap[type].tag;\n}\nexport function isSingleTagValue(item) {\n return Boolean(getTagFromType(item.type));\n}\nexport function isSingleTagType(type) {\n return Boolean(getTagFromType(type));\n}\n","import { AbstractWraplet, DefaultCore } from \"wraplet\";\nimport { ElementStorage } from \"wraplet/storage\";\nimport { defaultOptionsAttribute } from \"./selectors\";\nimport { getTagFromType, getTypeFromLanguage, isSingleTagType, } from \"./TypeMap\";\nexport class ExhibitionMonacoEditor extends AbstractWraplet {\n monaco;\n editor = null;\n options;\n constructor(core, options) {\n super(core);\n const defaultOptions = {\n optionsAttribute: \"data-js-options\",\n location: \"body\",\n priority: 0,\n trimDefaultValue: true,\n monacoEditorOptions: {},\n };\n const validators = {\n optionsAttribute: (data) => typeof data === \"string\",\n // We generally don't validate monacoOptions, leaving it to the monaco editor.\n location: (data) => typeof data === \"string\" && [\"head\", \"body\"].includes(data),\n priority: (data) => Number.isInteger(data),\n tagAttributes: (data) => typeof data === \"object\",\n trimDefaultValue: (data) => typeof data === \"boolean\",\n monacoEditorCreator: (data) => typeof data === \"function\",\n monaco: (data) => typeof data === \"object\",\n monacoEditorOptions: () => true,\n };\n options.monacoEditorOptions = {\n ...defaultOptions.monacoEditorOptions,\n ...options.monacoEditorOptions,\n };\n this.options = new ElementStorage(this.node, defaultOptionsAttribute, { ...defaultOptions, ...options }, validators, {\n elementOptionsMerger: (defaults, options) => {\n options.monacoEditorOptions = {\n ...defaults.monacoEditorOptions,\n ...options.monacoEditorOptions,\n };\n return { ...defaults, ...options };\n },\n });\n this.monaco = this.options.get(\"monaco\");\n if (this.options.get(\"trimDefaultValue\")) {\n const monacoOptions = this.options.get(\"monacoEditorOptions\");\n if (monacoOptions.value) {\n monacoOptions.value = ExhibitionMonacoEditor.trimDefaultValue(monacoOptions.value);\n this.options.set(\"monacoEditorOptions\", monacoOptions);\n }\n }\n this.validateOptions();\n }\n isEditorInitialized() {\n return this.editor !== null;\n }\n async init() {\n const editorCreator = this.options.get(\"monacoEditorCreator\") ||\n (async (options, element, monaco) => ExhibitionMonacoEditor.createMonacoEditor(options, element, monaco));\n this.editor = await editorCreator(this.options.get(\"monacoEditorOptions\"), this.node, this.monaco);\n }\n getPriority() {\n return this.options.get(\"priority\");\n }\n /**\n * Returns the current value of the editor.\n */\n getValue() {\n return this.getEditor().getValue();\n }\n async alterDocument(document) {\n const language = this.getLanguage();\n const content = language === \"typescript\" ? await this.getTSValueAsJS() : this.getValue();\n const location = this.options.get(\"location\");\n const type = getTypeFromLanguage(language);\n if (isSingleTagType(type)) {\n const tag = getTagFromType(type);\n const tagAttributes = this.options.get(\"tagAttributes\") ?? {};\n const tagElement = document.createElement(tag);\n for (const [key, value] of Object.entries(tagAttributes)) {\n tagElement.setAttribute(key, value);\n }\n tagElement.innerHTML = content;\n document[location].appendChild(tagElement);\n return;\n }\n document[location].innerHTML += content;\n }\n getDocumentAlterer() {\n return this.alterDocument.bind(this);\n }\n /**\n * Additional validation.\n */\n validateOptions() {\n if (!this.options.get(\"monacoEditorOptions\").language) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n const type = getTypeFromLanguage(this.getLanguage());\n if (!isSingleTagType(type)) {\n if (this.options.get(\"tagAttributes\")) {\n throw new Error(\"'tagAttributes' option is only allowed for single tag types\");\n }\n }\n }\n getEditor() {\n if (!this.editor)\n throw new Error(\"Editor is not initialized\");\n return this.editor;\n }\n async getTSValueAsJS() {\n const model = this.getEditor().getModel();\n if (!model)\n throw new Error(\"Model is not available\");\n // Make sure TypeScript eager sync is enabled\n this.monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);\n // Ensure we're using file:/// URI\n const uri = model.uri;\n if (uri.scheme !== \"file\") {\n throw new Error(`Model must use file:// URI, got: ${uri.toString()}`);\n }\n // Get worker getter\n const getWorker = async (attempts = 10) => {\n try {\n return await this.monaco.languages.typescript.getTypeScriptWorker();\n }\n catch (error) {\n if (error !== \"TypeScript not registered!\")\n throw error;\n if (attempts <= 0)\n return null;\n await new Promise((r) => setTimeout(r, 200));\n return getWorker(attempts - 1);\n }\n };\n const workerGetter = await getWorker();\n if (!workerGetter)\n throw new Error(\"Timeout: Could not get TypeScript worker\");\n const worker = await workerGetter(uri);\n // 🔸 Wait until the worker actually knows this file\n // Call something lightweight to force registration\n for (let i = 0; i < 20; i++) {\n try {\n await worker.getSemanticDiagnostics(uri.toString());\n break; // success — worker now recognizes the file\n }\n catch (err) {\n if (/Could not find source file/.test(String(err))) {\n await new Promise((r) => setTimeout(r, 250));\n continue;\n }\n throw err;\n }\n }\n // Now it's safe to call getEmitOutput\n const { outputFiles } = await worker.getEmitOutput(uri.toString());\n if (!outputFiles.length)\n throw new Error(\"No JS output produced\");\n return outputFiles[0].text;\n }\n getLanguage() {\n const monacoOptions = this.options.get(\"monacoEditorOptions\");\n if (!monacoOptions[\"language\"]) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n return monacoOptions[\"language\"];\n }\n static trimDefaultValue(content) {\n const lines = content.split(\"\\n\");\n // Find the first non-empty line to determine base indentation\n const firstNonEmptyLine = lines.find((line) => line.trim().length > 0);\n if (!firstNonEmptyLine) {\n return content.trim();\n }\n // Count leading spaces on the first non-empty line\n const leadingSpaces = firstNonEmptyLine.search(/\\S|$/);\n // Trim the same number of spaces from each line\n const trimmedLines = lines.map((line) => {\n // Only trim if the line has at least that many leading spaces\n if (line.length >= leadingSpaces &&\n line.substring(0, leadingSpaces).trim() === \"\") {\n return line.substring(leadingSpaces);\n }\n return line;\n });\n // Join back and trim any leading/trailing empty lines\n return trimmedLines.join(\"\\n\").trim();\n }\n destroy() {\n this.editor?.dispose();\n super.destroy();\n }\n /**\n * Helper method creating a new monaco editor instance.\n */\n static createMonacoEditor(editorOptions = {}, node, monaco) {\n const language = editorOptions.language;\n if (!language) {\n throw new Error(\"Missing language in editorOptions\");\n }\n const model = this.createMonacoModel(monaco, language, editorOptions.value || \"\");\n return monaco.editor.create(node, {\n ...editorOptions,\n ...{ model: model },\n });\n }\n /**\n * Helper method creating a new monaco model instance.\n */\n static createMonacoModel(monaco, language, value) {\n // Generate a unique URI for each model instance\n const uniqueId = Math.random().toString(36).substring(2, 15);\n return monaco.editor.createModel(value, language, monaco.Uri.parse(`file:///${language}-${uniqueId}.ts`));\n }\n /**\n * Create a single ExhibitionMonacoEditor instance wrapping a given element.\n */\n static create(element, options) {\n const core = new DefaultCore(element, {});\n return new ExhibitionMonacoEditor(core, options);\n }\n}\n","import { AbstractWraplet, DefaultCore, } from \"wraplet\";\nimport { ExhibitionPreview } from \"./ExhibitionPreview\";\nimport { ExhibitionMonacoEditor, } from \"./ExhibitionMonacoEditor\";\nimport { exhibitionDefaultAttribute } from \"./selectors\";\nimport { ElementStorage } from \"wraplet/storage\";\nconst ExhibitionMap = {\n editors: {\n selector: \"[data-js-exhibition-editor]\",\n multiple: true,\n required: false,\n Class: ExhibitionMonacoEditor,\n args: [],\n },\n preview: {\n selector: \"iframe[data-js-exhibition-preview]\",\n multiple: false,\n required: true,\n Class: ExhibitionPreview,\n },\n};\nexport class Exhibition extends AbstractWraplet {\n options;\n constructor(core, options = {}) {\n super(core);\n const defaultOptions = {\n updaterSelector: \"[data-js-exhibition-updater]\",\n };\n this.options = new ElementStorage(this.node, exhibitionDefaultAttribute, { ...defaultOptions, ...options }, {\n updaterSelector: (data) => typeof data === \"string\",\n });\n for (const editor of this.children.editors) {\n this.children.preview.addDocumentAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n const updaterElements = this.node.querySelectorAll(this.options.get(\"updaterSelector\"));\n for (const element of updaterElements) {\n this.core.addEventListener(element, \"click\", () => {\n this.updatePreview();\n });\n }\n }\n async init() {\n await this.initalizeMonacoEditors();\n }\n /**\n * Adds DocumentAltererProviderWraplet instance to the list of editors.\n */\n addEditor(editor) {\n this.children.editors.add(editor);\n this.addPreviewAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n /**\n * Adds a simple DocumentAlterer to the preview.\n */\n addPreviewAlterer(alterer, priority = 0) {\n this.children.preview.addDocumentAlterer(alterer, priority);\n }\n getPreview() {\n return this.children.preview;\n }\n async updatePreview() {\n await this.children.preview.update();\n }\n async initalizeMonacoEditors() {\n for (const editor of this.children.editors) {\n if (editor instanceof ExhibitionMonacoEditor) {\n if (editor.isEditorInitialized()) {\n continue;\n }\n await editor.init();\n }\n }\n }\n /**\n * Create multiple Exhibitions.\n *\n * @param node Node to create Exhibitions on.\n * @param attribute Attribute to use for Exhibition instances.\n * @param map Map of dependencies for each Exhibition instance.\n * @param options Options for Exhibition instances.\n * @param init Initialize exhibitions after they're created.\n * @param updatePreview Update preview of each exhibition after it's initialized.\n * @returns Array of Exhibition instances.\n */\n static async createMultiple(node, attribute = exhibitionDefaultAttribute, map, options = {}, init = true, updatePreview = true) {\n if (!init && updatePreview) {\n throw new Error(\"Cannot update preview without initializing exhibitions first\");\n }\n const exhibitions = this.createWraplets(node, map, attribute, [options]);\n if (init) {\n await Promise.all(exhibitions.map((exhibition) => exhibition.init()));\n }\n if (updatePreview) {\n await Promise.all(exhibitions.map((exhibition) => exhibition.updatePreview()));\n }\n return exhibitions;\n }\n /**\n * Create a single Exhibition instance wrapping a given element.\n *\n * @param element Element to wrap.\n * @param map Map of dependencies for the Exhibition instance.\n * @param options Options for the Exhibition instance.\n */\n static async create(element, map, options = {}) {\n const core = new DefaultCore(element, map);\n return new Exhibition(core, options);\n }\n /**\n * Returns a dependency map with editors being instances of ExhibitionMonacoEditor.\n *\n * @param exhibitionMonacoEditorOptions\n * MonacoEditorOptions to pass to the ExhibitionMonacoEditor.\n * @param options\n * Map options.\n */\n static getMapWithMonacoEditor(exhibitionMonacoEditorOptions, options = {}) {\n const opts = {\n ...options,\n Class: ExhibitionMonacoEditor,\n };\n const map = this.getMap(opts);\n map[\"editors\"][\"args\"] = [exhibitionMonacoEditorOptions];\n return map;\n }\n /**\n * Returns a generic dependecy map with an undefined editor class that has to be provided through\n * the options.\n *\n * @param options\n * Map options.\n */\n static getMap(options) {\n const map = ExhibitionMap;\n const allOptions = {\n ...{\n selectEditors: true,\n },\n ...options,\n };\n map[\"editors\"][\"Class\"] = allOptions.Class;\n if (!allOptions.selectEditors) {\n map[\"editors\"][\"selector\"] = undefined;\n }\n return map;\n }\n}\n","import { AbstractWraplet } from \"wraplet\";\nexport class ExhibitionPreview extends AbstractWraplet {\n alterers = [];\n currentBlobUrl = null;\n /**\n * Adds a DocumentAlterer to the preview.\n * @param alterer\n * @param priority\n * Priority of the alterer. Higher priority alterers are executed first.\n */\n addDocumentAlterer(alterer, priority = 0) {\n this.alterers.push({\n callback: alterer,\n priority: priority,\n });\n }\n async update() {\n const doc = document.implementation.createHTMLDocument();\n this.alterers.sort((a, b) => b.priority - a.priority);\n for (const alterer of this.alterers) {\n await alterer.callback(doc);\n }\n // Revoke previous blob URL\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n const htmlContent = \"<!DOCTYPE html>\\n\" + doc.documentElement.outerHTML;\n const blob = new Blob([htmlContent], { type: \"text/html;charset=utf-8\" });\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.node.src = this.currentBlobUrl;\n this.node.onload = () => {\n // Wait for the document to render before calculating the height.\n // @todo This should be configurable.\n setTimeout(() => {\n this.updateHeight();\n }, 100);\n this.node.onload = null;\n };\n }\n /**\n * Updates preview's height to match its content.\n */\n updateHeight() {\n const iframeWindow = this.getIFrameWindow();\n const iframeDocument = this.getIFrameDocument();\n const el = iframeDocument.querySelector(\"html\");\n if (!el) {\n return;\n }\n const styles = iframeWindow.getComputedStyle(el);\n const margin = parseFloat(styles[\"marginTop\"]) + parseFloat(styles[\"marginBottom\"]);\n const height = Math.ceil(el.offsetHeight + margin);\n this.node.height = height + \"px\";\n }\n getIFrameDocument() {\n const iframeDocument = this.node.contentDocument;\n if (!iframeDocument) {\n throw new Error(\"IFrame document is not available.\");\n }\n return iframeDocument;\n }\n getIFrameWindow() {\n const window = this.node.contentWindow;\n if (!window) {\n throw new Error(\"IFrame window is not available.\");\n }\n return window;\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","t","Error","e","i","r","n","s","a","getPrototypeOf","h","l","d","c","Set","find","this","push","findOne","getOrdered","Array","from","sort","p","u","g","m","b","args","destructible","map","coreOptions","v","I","E","W","fullMap","startingPath","currentMap","path","currentPath","constructor","resolve","getStartingMap","getCurrentMap","findMap","join","create","clone","up","pathExists","hasOwn","down","length","pop","M","node","isDestroyed","isGettingDestroyed","isGettingInitialized","isInitialized","mapWrapper","instantiatedChildren","destroyChildListeners","instantiateChildListeners","listeners","defaultWrapletCreator","element","initOptions","Class","wrapletCreator","processInitOptions","init","instantiateChildren","wrapChildren","querySelectorAll","keys","multiple","validateMapItem","instantiateMultipleWrapletsChild","instantiateSingleWrapletChild","syncChildren","getNodeTreeChildren","values","children","filter","accessNode","contains","findExistingWraplet","selector","findChildren","validateElements","name","instantiateWrapletItem","id","defaultCreator","prepareIndividualWraplet","add","addDestroyChildListener","addInstantiateChildListener","setWrapletCreator","addDestroyListener","removeChild","destroy","eventName","callback","options","removeEventListener","destroyChildren","addEventListener","uninitializedChildren","delete","required","Proxy","defaultInitOptions","assign","entries","L","x","S","core","groupsExtractor","Element","getAttribute","split","destroyListeners","__debugNodeAccessors","onChildDestroyed","bind","onChildInstantiated","initialize","setGroupsExtractor","getGroups","isChildInstance","createCore","createWraplets","hasAttribute","attribute","defaults","validators","data","keepFresh","elementOptionsMerger","fetchFreshData","has","getAll","getMultiple","reduce","refresh","set","String","getAttributeValue","JSON","parse","setAll","setMultiple","setAttribute","stringify","deleteMultiple","deleteAll","removeAttribute","charAt","validateData","console","warn","exhibitionDefaultAttribute","defaultOptionsAttribute","typeMap","html","languages","tag","undefined","js","css","getTypeFromLanguage","language","includes","getTagFromType","type","isSingleTagType","Boolean","ExhibitionMonacoEditor","monaco","editor","super","defaultOptions","optionsAttribute","location","priority","trimDefaultValue","monacoEditorOptions","Number","isInteger","tagAttributes","monacoEditorCreator","monacoOptions","validateOptions","isEditorInitialized","editorCreator","createMonacoEditor","getPriority","getValue","getEditor","alterDocument","document","getLanguage","content","getTSValueAsJS","tagElement","createElement","innerHTML","appendChild","getDocumentAlterer","model","getModel","typescript","typescriptDefaults","setEagerModelSync","uri","scheme","toString","getWorker","async","attempts","getTypeScriptWorker","error","Promise","setTimeout","workerGetter","worker","getSemanticDiagnostics","err","test","outputFiles","getEmitOutput","text","lines","firstNonEmptyLine","line","trim","leadingSpaces","search","substring","dispose","editorOptions","createMonacoModel","uniqueId","Math","random","createModel","Uri","ExhibitionMap","editors","preview","alterers","currentBlobUrl","addDocumentAlterer","alterer","update","doc","implementation","createHTMLDocument","URL","revokeObjectURL","htmlContent","documentElement","outerHTML","blob","Blob","createObjectURL","src","onload","updateHeight","iframeWindow","getIFrameWindow","el","getIFrameDocument","querySelector","styles","getComputedStyle","margin","parseFloat","height","ceil","offsetHeight","iframeDocument","contentDocument","window","contentWindow","Exhibition","updaterSelector","updaterElements","updatePreview","initalizeMonacoEditors","addEditor","addPreviewAlterer","getPreview","createMultiple","exhibitions","all","exhibition","getMapWithMonacoEditor","exhibitionMonacoEditorOptions","opts","getMap","allOptions","selectEditors"],"sourceRoot":""}
package/dist/index.d.ts CHANGED
@@ -2,5 +2,5 @@ export { Exhibition } from "./Exhibition";
2
2
  export type { ExhibitionOptions } from "./Exhibition";
3
3
  export { defaultOptionsAttribute } from "./selectors";
4
4
  export { ExhibitionMonacoEditor } from "./ExhibitionMonacoEditor";
5
- export type { MonacoEditorOptions } from "./ExhibitionMonacoEditor";
5
+ export type { ExhibitionMonacoEditorOptions, EditorCreator, } from "./ExhibitionMonacoEditor";
6
6
  export type { DocumentAltererProviderWraplet } from "./types/DocumentAltererProviderWraplet";
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- class t extends Error{}class e extends Error{}class i extends Error{}class r extends Error{}class s extends Error{}class n extends Error{}class o extends Error{}function a(t){return Object.getPrototypeOf(t)===Object.prototype}const l=(t,e)=>"object"==typeof t&&null!==t&&!0===t[e],h=Symbol("WrapletSet");function d(t){return l(t,h)}class c extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const u=Symbol("WrapletSetReadonly");class p extends c{[u]=!0;[h]=!0}const g=Symbol("NodeTreeParent"),f=Symbol("ChildrenManager");function m(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function w(t){const e={};for(const i in t){const r=t[i];e[i]=m(r);const s=r.map;s&&a(s)&&(e[i].map=w(s))}return e}const y=Symbol("DynamicMap");function C(t){return l(t,y)}class b{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=w(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(".")} . No such definition.`);const r=e[i].map;if(a(r))e=r;else{if(!C(r))throw new Error("Invalid map type.");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error("Map doesn't exist.");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(C(t))return!0;if(!a(t))throw new Error("Invalid map type.");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error("At the root already.");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new b(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class v{node;[f]=!0;[g]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,i,r={}){if(this.node=t,a(i))this.mapWrapper=new b(i);else{if(!(i instanceof b))throw new e("The map provided to the Core is not a valid map.");this.mapWrapper=i}this.processInitOptions(r),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if("function"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new e("If the node provided cannot have children, the children map should be empty.");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,s=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,s,this.node,e):this.instantiateSingleWrapletChild(i,s,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(d(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!d(i))throw new o("Internal logic error. Expected a WrapletSet.");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new o("Internal logic error. Multiple instances wrapping the same element found in the core.");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const n=t.selector,o=this.findChildren(n,i);if(this.validateElements(r,o,t),0===o.length)return null;if(o.length>1)throw new s(`${this.constructor.name}: More than one element was found for the "${r}" child. Selector used: "${n}".`);const a=o[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const s=this.findExistingWraplet(t,r);if(s)return s;const n=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:n,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const s=t.selector;if(!s)return new p;const n=this.findChildren(s,i);this.validateElements(r,n,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new p;for(const i of n){if(this.findExistingWraplet(r,i))continue;const s=this.instantiateWrapletItem(r,t,e,i);o.add(s)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new n("Children are already destroyed.");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,s=t.options;e.removeEventListener(i,r,s)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return"string"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new r("Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new r("Wraplet is already initialized. Fetch children with 'children' property instead.");return this.instantiatedChildren}removeChild(t,e){if(d(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new o("Internal logic error. Destroyed child couldn't be removed because it's not among the children.")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new i("Required child has been destroyed.");if(null===this.instantiatedChildren[e])throw new o("Internal logic error. Destroyed child couldn't be removed because it's already null.");this.instantiatedChildren[e]=null}}validateMapItem(t,i){const r=i.selector,s=i.required;if(!r&&s)throw new e(`${this.constructor.name}: Child "${t}" cannot at the same be required and have no selector.`)}validateElements(e,i,r){if(0===i.length&&r.required)throw new t(`${this.constructor.name}: Couldn't find a node for the wraplet "${e}". Selector used: "${r.selector}".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(d(e))for(const t of e)t.destroy();else e.destroy()}}const E=Symbol("Wraplet"),M=Symbol("Groupable");class O{core;[E]=!0;[M]=!0;[g]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute("data-js-wraplet-groupable");if(e)return e.split(",")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!l(t,f))throw new Error("AbstractWraplet requires a Core instance.");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new v(t,e)}static createWraplets(t,e,i,r=[]){if(this===O)throw new Error("You cannot instantiate an abstract class.");const s=[];if(t instanceof Element&&t.hasAttribute(i)){const i=O.createCore(t,e);s.push(new this(i,...r))}const n=t.querySelectorAll(`[${i}]`);for(const t of n){const i=O.createCore(t,e);s.push(new this(i,...r))}return s}}class A extends Error{}class I{element;attribute;defaults;validators;data;options;constructor(t,e,i,r,s={}){this.element=t,this.attribute=e,this.defaults=i,this.validators=r,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...s},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,i)=>(t[i]=e[i],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(t,e){if(!this.validators[t](e))throw new A(`Attempted to set an invalid value for the key ${String(t)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[t]=e,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const i of t)delete e[i];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const t=this.getAttributeValue(this.attribute);if("{"!==t.charAt(0))throw new A("Data has to be defined as an object.");const e=JSON.parse(t);if(!this.validateData(e))throw new A("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,e)}validateData(t){for(const e in t)if(!this.validators[e](t[e]))return!1;return!0}getAttributeValue(t){return this.element.getAttribute(t)||"{}"}}const D="data-js-exhibition",S="data-js-options",L={html:{languages:["html"],tag:void 0},js:{languages:["javascript","typescript"],tag:"script"},css:{languages:["css"],tag:"style"}};function W(t){for(const[e,i]of Object.entries(L))if(i.languages.includes(t))return e;throw new Error("Unknown language")}function x(t){return L[t].tag}function j(t){return Boolean(x(t))}class P extends O{monacoEditorModule;editor;options;constructor(t,e){super(t);const i={optionsAttribute:"data-js-options",monacoOptions:{},location:"body",priority:0,trimDefaultValue:!0,monacoEditorModule:e.monacoEditorModule},r={optionsAttribute:t=>"string"==typeof t,monacoOptions:()=>!0,location:t=>"string"==typeof t&&["head","body"].includes(t),priority:t=>Number.isInteger(t),tagAttributes:t=>"object"==typeof t,trimDefaultValue:t=>"boolean"==typeof t,monacoEditorModule:t=>null!==t&&"object"==typeof t};if(e.monacoOptions={...i.monacoOptions,...e.monacoOptions},this.options=new I(this.node,S,{...i,...e},r,{elementOptionsMerger:(t,e)=>(e.monacoOptions={...t.monacoOptions,...e.monacoOptions},{...t,...e})}),this.monacoEditorModule=this.options.get("monacoEditorModule"),this.options.get("trimDefaultValue")){const t=this.options.get("monacoOptions");t.value&&(t.value=this.trimDefaultValue(t.value),this.options.set("monacoOptions",t))}this.validateOptions();const s=this.options.get("monacoOptions"),n=Math.random().toString(36).substring(2,15),o=this.monacoEditorModule.editor.createModel(this.options.get("monacoOptions").value||"",this.getLanguage(),this.monacoEditorModule.Uri.parse(`file:///${this.getLanguage()}-${n}.ts`)),a=this.options.get("monacoEditorModule");this.editor=a.editor.create(this.node,{...s,model:o})}getPriority(){return this.options.get("priority")}getValue(){return this.editor.getValue()}async alterDocument(t){const e=this.getLanguage(),i="typescript"===e?await this.getTSValueAsJS():this.getValue(),r=this.options.get("location"),s=W(e);if(j(s)){const e=x(s),n=this.options.get("tagAttributes")??{},o=t.createElement(e);for(const[t,e]of Object.entries(n))o.setAttribute(t,e);return o.innerHTML=i,void t[r].appendChild(o)}t[r].innerHTML+=i}getDocumentAlterer(){return this.alterDocument.bind(this)}validateOptions(){if(!this.options.get("monacoOptions").language)throw new Error("Missing language in monacoOptions");if(!j(W(this.getLanguage()))&&this.options.get("tagAttributes"))throw new Error("'tagAttributes' option is only allowed for single tag types")}async getTSValueAsJS(){const t=this.editor.getModel();if(!t)throw new Error("Model is not available");this.monacoEditorModule.languages.typescript.typescriptDefaults.setEagerModelSync(!0);const e=t.uri;if("file"!==e.scheme)throw new Error(`Model must use file:// URI, got: ${e.toString()}`);const i=async(t=10)=>{try{return await this.monacoEditorModule.languages.typescript.getTypeScriptWorker()}catch(e){if("TypeScript not registered!"!==e)throw e;return t<=0?null:(await new Promise(t=>setTimeout(t,200)),i(t-1))}},r=await i();if(!r)throw new Error("Timeout: Could not get TypeScript worker");const s=await r(e);for(let t=0;t<20;t++)try{await s.getSemanticDiagnostics(e.toString());break}catch(t){if(/Could not find source file/.test(String(t))){await new Promise(t=>setTimeout(t,250));continue}throw t}const{outputFiles:n}=await s.getEmitOutput(e.toString());if(!n.length)throw new Error("No JS output produced");return n[0].text}getLanguage(){const t=this.options.get("monacoOptions");if(!t.language)throw new Error("Missing language in monacoOptions");return t.language}trimDefaultValue(t){const e=t.split("\n"),i=e.find(t=>t.trim().length>0);if(!i)return t.trim();const r=i.search(/\S|$/);return e.map(t=>t.length>=r&&""===t.substring(0,r).trim()?t.substring(r):t).join("\n").trim()}static create(t,e){const i=new v(t,{});return new P(i,e)}}const T={editors:{selector:"[data-js-exhibition-editor]",multiple:!0,required:!1,Class:P,args:[]},preview:{selector:"iframe[data-js-exhibition-preview]",multiple:!1,required:!0,Class:class extends O{alterers=[];currentBlobUrl=null;addDocumentAlterer(t,e=0){this.alterers.push({callback:t,priority:e})}async update(){const t=document.implementation.createHTMLDocument();this.alterers.sort((t,e)=>e.priority-t.priority);for(const e of this.alterers)await e.callback(t);this.currentBlobUrl&&URL.revokeObjectURL(this.currentBlobUrl);const e="<!DOCTYPE html>\n"+t.documentElement.outerHTML,i=new Blob([e],{type:"text/html;charset=utf-8"});this.currentBlobUrl=URL.createObjectURL(i),this.node.src=this.currentBlobUrl,this.node.onload=()=>{setTimeout(()=>{this.updateHeight()},100),this.node.onload=null}}updateHeight(){const t=this.getIFrameWindow(),e=this.getIFrameDocument().querySelector("html");if(!e)return;const i=t.getComputedStyle(e),r=parseFloat(i.marginTop)+parseFloat(i.marginBottom),s=Math.ceil(e.offsetHeight+r);this.node.height=s+"px"}getIFrameDocument(){const t=this.node.contentDocument;if(!t)throw new Error("IFrame document is not available.");return t}getIFrameWindow(){const t=this.node.contentWindow;if(!t)throw new Error("IFrame window is not available.");return t}}}};class z extends O{options;constructor(t,e={}){super(t),this.options=new I(this.node,D,{updatePreviewOnInit:!0,updaterSelector:"[data-js-exhibition-updater]",...e},{updatePreviewOnInit:t=>"boolean"==typeof t,updaterSelector:t=>"string"==typeof t});for(const t of this.children.editors)this.children.preview.addDocumentAlterer(t.getDocumentAlterer(),t.getPriority());const i=this.node.querySelectorAll(this.options.get("updaterSelector"));for(const t of i)this.core.addEventListener(t,"click",()=>{this.updatePreview()});this.options.get("updatePreviewOnInit")&&this.updatePreview()}addEditor(t){this.children.editors.add(t),this.addPreviewAlterer(t.getDocumentAlterer(),t.getPriority())}addPreviewAlterer(t,e=0){this.children.preview.addDocumentAlterer(t,e)}getPreview(){return this.children.preview}async updatePreview(){await this.children.preview.update()}static createMultiple(t,e=D,i,r={}){return this.createWraplets(t,i,e,[r])}static create(t,e,i={}){const r=new v(t,e);return new z(r,i)}static getMapWithMonacoEditor(t,e={}){const i={...e,Class:P},r=this.getMap(i);return r.editors.args=[t],r}static getMap(t){const e=T,i={initEditors:!0,...t};return e.editors.Class=i.Class,i.initEditors||(e.editors.selector=void 0),e}}export{z as Exhibition,P as ExhibitionMonacoEditor,S as defaultOptionsAttribute};
1
+ class t extends Error{}class e extends Error{}class i extends Error{}class r extends Error{}class n extends Error{}class s extends Error{}class o extends Error{}function a(t){return Object.getPrototypeOf(t)===Object.prototype}const l=(t,e)=>"object"==typeof t&&null!==t&&!0===t[e],h=Symbol("WrapletSet");function d(t){return l(t,h)}class c extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const u=Symbol("WrapletSetReadonly");class p extends c{[u]=!0;[h]=!0}const f=Symbol("NodeTreeParent"),g=Symbol("ChildrenManager");function m(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function w(t){const e={};for(const i in t){const r=t[i];e[i]=m(r);const n=r.map;n&&a(n)&&(e[i].map=w(n))}return e}const y=Symbol("DynamicMap");function C(t){return l(t,y)}class b{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=w(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(".")} . No such definition.`);const r=e[i].map;if(a(r))e=r;else{if(!C(r))throw new Error("Invalid map type.");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error("Map doesn't exist.");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(C(t))return!0;if(!a(t))throw new Error("Invalid map type.");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error("At the root already.");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new b(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class E{node;[g]=!0;[f]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,i,r={}){if(this.node=t,a(i))this.mapWrapper=new b(i);else{if(!(i instanceof b))throw new e("The map provided to the Core is not a valid map.");this.mapWrapper=i}this.processInitOptions(r),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if("function"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new e("If the node provided cannot have children, the children map should be empty.");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,n=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,n,this.node,e):this.instantiateSingleWrapletChild(i,n,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(d(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!d(i))throw new o("Internal logic error. Expected a WrapletSet.");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new o("Internal logic error. Multiple instances wrapping the same element found in the core.");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const s=t.selector,o=this.findChildren(s,i);if(this.validateElements(r,o,t),0===o.length)return null;if(o.length>1)throw new n(`${this.constructor.name}: More than one element was found for the "${r}" child. Selector used: "${s}".`);const a=o[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const n=this.findExistingWraplet(t,r);if(n)return n;const s=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:s,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const n=t.selector;if(!n)return new p;const s=this.findChildren(n,i);this.validateElements(r,s,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new p;for(const i of s){if(this.findExistingWraplet(r,i))continue;const n=this.instantiateWrapletItem(r,t,e,i);o.add(n)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new s("Children are already destroyed.");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,n=t.options;e.removeEventListener(i,r,n)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return"string"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new r("Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new r("Wraplet is already initialized. Fetch children with 'children' property instead.");return this.instantiatedChildren}removeChild(t,e){if(d(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new o("Internal logic error. Destroyed child couldn't be removed because it's not among the children.")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new i("Required child has been destroyed.");if(null===this.instantiatedChildren[e])throw new o("Internal logic error. Destroyed child couldn't be removed because it's already null.");this.instantiatedChildren[e]=null}}validateMapItem(t,i){const r=i.selector,n=i.required;if(!r&&n)throw new e(`${this.constructor.name}: Child "${t}" cannot at the same be required and have no selector.`)}validateElements(e,i,r){if(0===i.length&&r.required)throw new t(`${this.constructor.name}: Couldn't find a node for the wraplet "${e}". Selector used: "${r.selector}".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(d(e))for(const t of e)t.destroy();else e.destroy()}}const v=Symbol("Wraplet"),M=Symbol("Groupable");class O{core;[v]=!0;[M]=!0;[f]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute("data-js-wraplet-groupable");if(e)return e.split(",")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!l(t,g))throw new Error("AbstractWraplet requires a Core instance.");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new E(t,e)}static createWraplets(t,e,i,r=[]){if(this===O)throw new Error("You cannot instantiate an abstract class.");const n=[];if(t instanceof Element&&t.hasAttribute(i)){const i=O.createCore(t,e);n.push(new this(i,...r))}const s=t.querySelectorAll(`[${i}]`);for(const t of s){const i=O.createCore(t,e);n.push(new this(i,...r))}return n}}class A extends Error{}class D{element;attribute;defaults;validators;data;options;constructor(t,e,i,r,n={}){this.element=t,this.attribute=e,this.defaults=i,this.validators=r,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...n},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,i)=>(t[i]=e[i],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(t,e){if(!this.validators[t](e))throw new A(`Attempted to set an invalid value for the key ${String(t)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[t]=e,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const i of t)delete e[i];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const t=this.getAttributeValue(this.attribute);if("{"!==t.charAt(0))throw new A("Data has to be defined as an object.");const e=JSON.parse(t);if(!this.validateData(e))throw new A("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,e)}validateData(t){for(const e in t){if(!(e in this.validators))return console.warn(`Option ${e} doesn't have a validator.`),!1;if("function"!=typeof this.validators[e])return console.warn(`Validator for option ${e} is not a function.`),!1;if(!this.validators[e](t[e]))return!1}return!0}getAttributeValue(t){return this.element.getAttribute(t)||"{}"}}const I="data-js-exhibition",S="data-js-options",L={html:{languages:["html"],tag:void 0},js:{languages:["javascript","typescript"],tag:"script"},css:{languages:["css"],tag:"style"}};function W(t){for(const[e,i]of Object.entries(L))if(i.languages.includes(t))return e;throw new Error("Unknown language")}function x(t){return L[t].tag}function j(t){return Boolean(x(t))}class z extends O{monaco;editor=null;options;constructor(t,e){super(t);const i={optionsAttribute:"data-js-options",location:"body",priority:0,trimDefaultValue:!0,monacoEditorOptions:{}},r={optionsAttribute:t=>"string"==typeof t,location:t=>"string"==typeof t&&["head","body"].includes(t),priority:t=>Number.isInteger(t),tagAttributes:t=>"object"==typeof t,trimDefaultValue:t=>"boolean"==typeof t,monacoEditorCreator:t=>"function"==typeof t,monaco:t=>"object"==typeof t,monacoEditorOptions:()=>!0};if(e.monacoEditorOptions={...i.monacoEditorOptions,...e.monacoEditorOptions},this.options=new D(this.node,S,{...i,...e},r,{elementOptionsMerger:(t,e)=>(e.monacoEditorOptions={...t.monacoEditorOptions,...e.monacoEditorOptions},{...t,...e})}),this.monaco=this.options.get("monaco"),this.options.get("trimDefaultValue")){const t=this.options.get("monacoEditorOptions");t.value&&(t.value=z.trimDefaultValue(t.value),this.options.set("monacoEditorOptions",t))}this.validateOptions()}isEditorInitialized(){return null!==this.editor}async init(){const t=this.options.get("monacoEditorCreator")||(async(t,e,i)=>z.createMonacoEditor(t,e,i));this.editor=await t(this.options.get("monacoEditorOptions"),this.node,this.monaco)}getPriority(){return this.options.get("priority")}getValue(){return this.getEditor().getValue()}async alterDocument(t){const e=this.getLanguage(),i="typescript"===e?await this.getTSValueAsJS():this.getValue(),r=this.options.get("location"),n=W(e);if(j(n)){const e=x(n),s=this.options.get("tagAttributes")??{},o=t.createElement(e);for(const[t,e]of Object.entries(s))o.setAttribute(t,e);return o.innerHTML=i,void t[r].appendChild(o)}t[r].innerHTML+=i}getDocumentAlterer(){return this.alterDocument.bind(this)}validateOptions(){if(!this.options.get("monacoEditorOptions").language)throw new Error("Missing language in monacoOptions");if(!j(W(this.getLanguage()))&&this.options.get("tagAttributes"))throw new Error("'tagAttributes' option is only allowed for single tag types")}getEditor(){if(!this.editor)throw new Error("Editor is not initialized");return this.editor}async getTSValueAsJS(){const t=this.getEditor().getModel();if(!t)throw new Error("Model is not available");this.monaco.languages.typescript.typescriptDefaults.setEagerModelSync(!0);const e=t.uri;if("file"!==e.scheme)throw new Error(`Model must use file:// URI, got: ${e.toString()}`);const i=async(t=10)=>{try{return await this.monaco.languages.typescript.getTypeScriptWorker()}catch(e){if("TypeScript not registered!"!==e)throw e;return t<=0?null:(await new Promise(t=>setTimeout(t,200)),i(t-1))}},r=await i();if(!r)throw new Error("Timeout: Could not get TypeScript worker");const n=await r(e);for(let t=0;t<20;t++)try{await n.getSemanticDiagnostics(e.toString());break}catch(t){if(/Could not find source file/.test(String(t))){await new Promise(t=>setTimeout(t,250));continue}throw t}const{outputFiles:s}=await n.getEmitOutput(e.toString());if(!s.length)throw new Error("No JS output produced");return s[0].text}getLanguage(){const t=this.options.get("monacoEditorOptions");if(!t.language)throw new Error("Missing language in monacoOptions");return t.language}static trimDefaultValue(t){const e=t.split("\n"),i=e.find(t=>t.trim().length>0);if(!i)return t.trim();const r=i.search(/\S|$/);return e.map(t=>t.length>=r&&""===t.substring(0,r).trim()?t.substring(r):t).join("\n").trim()}destroy(){this.editor?.dispose(),super.destroy()}static createMonacoEditor(t={},e,i){const r=t.language;if(!r)throw new Error("Missing language in editorOptions");const n=this.createMonacoModel(i,r,t.value||"");return i.editor.create(e,{...t,model:n})}static createMonacoModel(t,e,i){const r=Math.random().toString(36).substring(2,15);return t.editor.createModel(i,e,t.Uri.parse(`file:///${e}-${r}.ts`))}static create(t,e){const i=new E(t,{});return new z(i,e)}}const P={editors:{selector:"[data-js-exhibition-editor]",multiple:!0,required:!1,Class:z,args:[]},preview:{selector:"iframe[data-js-exhibition-preview]",multiple:!1,required:!0,Class:class extends O{alterers=[];currentBlobUrl=null;addDocumentAlterer(t,e=0){this.alterers.push({callback:t,priority:e})}async update(){const t=document.implementation.createHTMLDocument();this.alterers.sort((t,e)=>e.priority-t.priority);for(const e of this.alterers)await e.callback(t);this.currentBlobUrl&&URL.revokeObjectURL(this.currentBlobUrl);const e="<!DOCTYPE html>\n"+t.documentElement.outerHTML,i=new Blob([e],{type:"text/html;charset=utf-8"});this.currentBlobUrl=URL.createObjectURL(i),this.node.src=this.currentBlobUrl,this.node.onload=()=>{setTimeout(()=>{this.updateHeight()},100),this.node.onload=null}}updateHeight(){const t=this.getIFrameWindow(),e=this.getIFrameDocument().querySelector("html");if(!e)return;const i=t.getComputedStyle(e),r=parseFloat(i.marginTop)+parseFloat(i.marginBottom),n=Math.ceil(e.offsetHeight+r);this.node.height=n+"px"}getIFrameDocument(){const t=this.node.contentDocument;if(!t)throw new Error("IFrame document is not available.");return t}getIFrameWindow(){const t=this.node.contentWindow;if(!t)throw new Error("IFrame window is not available.");return t}}}};class T extends O{options;constructor(t,e={}){super(t),this.options=new D(this.node,I,{updaterSelector:"[data-js-exhibition-updater]",...e},{updaterSelector:t=>"string"==typeof t});for(const t of this.children.editors)this.children.preview.addDocumentAlterer(t.getDocumentAlterer(),t.getPriority());const i=this.node.querySelectorAll(this.options.get("updaterSelector"));for(const t of i)this.core.addEventListener(t,"click",()=>{this.updatePreview()})}async init(){await this.initalizeMonacoEditors()}addEditor(t){this.children.editors.add(t),this.addPreviewAlterer(t.getDocumentAlterer(),t.getPriority())}addPreviewAlterer(t,e=0){this.children.preview.addDocumentAlterer(t,e)}getPreview(){return this.children.preview}async updatePreview(){await this.children.preview.update()}async initalizeMonacoEditors(){for(const t of this.children.editors)if(t instanceof z){if(t.isEditorInitialized())continue;await t.init()}}static async createMultiple(t,e=I,i,r={},n=!0,s=!0){if(!n&&s)throw new Error("Cannot update preview without initializing exhibitions first");const o=this.createWraplets(t,i,e,[r]);return n&&await Promise.all(o.map(t=>t.init())),s&&await Promise.all(o.map(t=>t.updatePreview())),o}static async create(t,e,i={}){const r=new E(t,e);return new T(r,i)}static getMapWithMonacoEditor(t,e={}){const i={...e,Class:z},r=this.getMap(i);return r.editors.args=[t],r}static getMap(t){const e=P,i={selectEditors:!0,...t};return e.editors.Class=i.Class,i.selectEditors||(e.editors.selector=void 0),e}}export{T as Exhibition,z as ExhibitionMonacoEditor,S as defaultOptionsAttribute};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://exhibitionjs/./node_modules/wraplet/dist/index.js","webpack://exhibitionjs/./node_modules/wraplet/dist/storage.js","webpack://exhibitionjs/./src/selectors.ts","webpack://exhibitionjs/./src/TypeMap.ts","webpack://exhibitionjs/./src/ExhibitionMonacoEditor.ts","webpack://exhibitionjs/./src/Exhibition.ts","webpack://exhibitionjs/./src/ExhibitionPreview.ts"],"sourcesContent":["class t extends Error{}class e extends Error{}class i extends Error{}class r extends Error{}class n extends Error{}class s extends Error{}class o extends Error{}function a(t){return Object.getPrototypeOf(t)===Object.prototype}const h=(t,e)=>\"object\"==typeof t&&null!==t&&!0===t[e],l=Symbol(\"WrapletSet\");function d(t){return h(t,l)}class c extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const p=Symbol(\"WrapletSetReadonly\");class u extends c{[p]=!0;[l]=!0}function f(t){const e=t.wraplets;return d(e)&&0!==e.size?e:new u}function C(t,e){return!!e.wraplets&&e.wraplets.delete(t)}function y(t,e){e(t);const i=t.childNodes;for(const t of i)y(t,e)}function w(t){y(t,t=>{const e=f(t);for(const i of e)i.isGettingDestroyed||i.isDestroyed||i.destroy(),C(i,t)})}const g=Symbol(\"NodeTreeParent\"),m=Symbol(\"ChildrenManager\");function b(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function v(t){const e={};for(const i in t){const r=t[i];e[i]=b(r);const n=r.map;n&&a(n)&&(e[i].map=v(n))}return e}const I=Symbol(\"DynamicMap\");function E(t){return h(t,I)}class W{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=v(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(\".\")} . No such definition.`);const r=e[i].map;if(a(r))e=r;else{if(!E(r))throw new Error(\"Invalid map type.\");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error(\"Map doesn't exist.\");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(E(t))return!0;if(!a(t))throw new Error(\"Invalid map type.\");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error(\"At the root already.\");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new W(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class M{node;[m]=!0;[g]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,i,r={}){if(this.node=t,a(i))this.mapWrapper=new W(i);else{if(!(i instanceof W))throw new e(\"The map provided to the Core is not a valid map.\");this.mapWrapper=i}this.processInitOptions(r),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if(\"function\"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new e(\"If the node provided cannot have children, the children map should be empty.\");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,n=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,n,this.node,e):this.instantiateSingleWrapletChild(i,n,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(d(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!d(i))throw new o(\"Internal logic error. Expected a WrapletSet.\");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new o(\"Internal logic error. Multiple instances wrapping the same element found in the core.\");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const s=t.selector,o=this.findChildren(s,i);if(this.validateElements(r,o,t),0===o.length)return null;if(o.length>1)throw new n(`${this.constructor.name}: More than one element was found for the \"${r}\" child. Selector used: \"${s}\".`);const a=o[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const n=this.findExistingWraplet(t,r);if(n)return n;const s=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:s,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const n=t.selector;if(!n)return new u;const s=this.findChildren(n,i);this.validateElements(r,s,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new u;for(const i of s){if(this.findExistingWraplet(r,i))continue;const n=this.instantiateWrapletItem(r,t,e,i);o.add(n)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new s(\"Children are already destroyed.\");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,n=t.options;e.removeEventListener(i,r,n)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return\"string\"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new r(\"Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.\");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new r(\"Wraplet is already initialized. Fetch children with 'children' property instead.\");return this.instantiatedChildren}removeChild(t,e){if(d(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's not among the children.\")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new i(\"Required child has been destroyed.\");if(null===this.instantiatedChildren[e])throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's already null.\");this.instantiatedChildren[e]=null}}validateMapItem(t,i){const r=i.selector,n=i.required;if(!r&&n)throw new e(`${this.constructor.name}: Child \"${t}\" cannot at the same be required and have no selector.`)}validateElements(e,i,r){if(0===i.length&&r.required)throw new t(`${this.constructor.name}: Couldn't find a node for the wraplet \"${e}\". Selector used: \"${r.selector}\".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(d(e))for(const t of e)t.destroy();else e.destroy()}}const L=Symbol(\"Wraplet\");function D(t){return h(t,L)}const x=Symbol(\"Groupable\");class S{core;[L]=!0;[x]=!0;[g]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute(\"data-js-wraplet-groupable\");if(e)return e.split(\",\")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!h(t,m))throw new Error(\"AbstractWraplet requires a Core instance.\");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new M(t,e)}static createWraplets(t,e,i,r=[]){if(this===S)throw new Error(\"You cannot instantiate an abstract class.\");const n=[];if(t instanceof Element&&t.hasAttribute(i)){const i=S.createCore(t,e);n.push(new this(i,...r))}const s=t.querySelectorAll(`[${i}]`);for(const t of s){const i=S.createCore(t,e);n.push(new this(i,...r))}return n}}class z{levels;[I]=!0;constructor(t=1){if(this.levels=t,t<1)throw new Error(\"There have to be more than 0 repeated levels.\")}create(t){for(let e=0;e<this.levels;e++)t.down();return t.getCurrentMap()}static create(t=1){return new z(t)}}class O extends c{[p]=!0}export{S as AbstractWraplet,M as DefaultCore,u as DefaultWrapletSet,O as DefaultWrapletSetReadonly,z as MapRepeat,w as destroyWrapletsRecursively,f as getWrapletsFromNode,D as isWraplet};\n//# sourceMappingURL=index.js.map","class t extends Error{}class e{element;attribute;defaults;validators;data;options;constructor(t,e,s,i,r={}){this.element=t,this.attribute=e,this.defaults=s,this.validators=i,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...r},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,s)=>(t[s]=e[s],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(e,s){if(!this.validators[e](s))throw new t(`Attempted to set an invalid value for the key ${String(e)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[e]=s,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const s of t)delete e[s];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const e=this.getAttributeValue(this.attribute);if(\"{\"!==e.charAt(0))throw new t(\"Data has to be defined as an object.\");const s=JSON.parse(e);if(!this.validateData(s))throw new t(\"Invalid storage value.\");return this.options.elementOptionsMerger(this.defaults,s)}validateData(t){for(const e in t)if(!this.validators[e](t[e]))return!1;return!0}getAttributeValue(t){return this.element.getAttribute(t)||\"{}\"}}export{e as ElementStorage};\n//# sourceMappingURL=storage.js.map","export const exhibitionDefaultAttribute = \"data-js-exhibition\";\nexport const defaultOptionsAttribute = \"data-js-options\";\n","export const typeMap = {\n html: {\n languages: [\"html\"],\n tag: undefined,\n },\n js: {\n languages: [\"javascript\", \"typescript\"],\n tag: \"script\",\n },\n css: {\n languages: [\"css\"],\n tag: \"style\",\n },\n};\nexport function getTypeFromLanguage(language) {\n for (const [key, value] of Object.entries(typeMap)) {\n if (value.languages.includes(language)) {\n return key;\n }\n }\n throw new Error(\"Unknown language\");\n}\nexport function getTagFromType(type) {\n return typeMap[type].tag;\n}\nexport function isSingleTagValue(item) {\n return Boolean(getTagFromType(item.type));\n}\nexport function isSingleTagType(type) {\n return Boolean(getTagFromType(type));\n}\n","import { AbstractWraplet, DefaultCore } from \"wraplet\";\nimport { ElementStorage } from \"wraplet/storage\";\nimport { defaultOptionsAttribute } from \"./selectors\";\nimport { getTagFromType, getTypeFromLanguage, isSingleTagType, } from \"./TypeMap\";\nexport class ExhibitionMonacoEditor extends AbstractWraplet {\n monacoEditorModule;\n editor;\n options;\n constructor(core, options) {\n super(core);\n const defaultOptions = {\n optionsAttribute: \"data-js-options\",\n monacoOptions: {},\n location: \"body\",\n priority: 0,\n trimDefaultValue: true,\n monacoEditorModule: options.monacoEditorModule,\n };\n const validators = {\n optionsAttribute: (data) => typeof data === \"string\",\n // We generally don't validate monacoOptions, leaving it to the monaco editor.\n monacoOptions: () => true,\n location: (data) => typeof data === \"string\" && [\"head\", \"body\"].includes(data),\n priority: (data) => Number.isInteger(data),\n tagAttributes: (data) => typeof data === \"object\",\n trimDefaultValue: (data) => typeof data === \"boolean\",\n monacoEditorModule: (data) => data !== null && typeof data === \"object\",\n };\n options.monacoOptions = {\n ...defaultOptions.monacoOptions,\n ...options.monacoOptions,\n };\n this.options = new ElementStorage(this.node, defaultOptionsAttribute, { ...defaultOptions, ...options }, validators, {\n elementOptionsMerger: (defaults, options) => {\n options.monacoOptions = {\n ...defaults.monacoOptions,\n ...options.monacoOptions,\n };\n return { ...defaults, ...options };\n },\n });\n this.monacoEditorModule = this.options.get(\"monacoEditorModule\");\n if (this.options.get(\"trimDefaultValue\")) {\n const monacoOptions = this.options.get(\"monacoOptions\");\n if (monacoOptions.value) {\n monacoOptions.value = this.trimDefaultValue(monacoOptions.value);\n this.options.set(\"monacoOptions\", monacoOptions);\n }\n }\n this.validateOptions();\n const monacoOptions = this.options.get(\"monacoOptions\");\n // Generate a unique URI for each editor instance\n const uniqueId = Math.random().toString(36).substring(2, 15);\n const model = this.monacoEditorModule.editor.createModel(this.options.get(\"monacoOptions\").value || \"\", this.getLanguage(), this.monacoEditorModule.Uri.parse(`file:///${this.getLanguage()}-${uniqueId}.ts`));\n const monacoEditorModule = this.options.get(\"monacoEditorModule\");\n this.editor = monacoEditorModule.editor.create(this.node, {\n ...monacoOptions,\n ...{ model: model },\n });\n }\n getPriority() {\n return this.options.get(\"priority\");\n }\n /**\n * Returns the current value of the editor.\n */\n getValue() {\n return this.editor.getValue();\n }\n async alterDocument(document) {\n const language = this.getLanguage();\n const content = language === \"typescript\" ? await this.getTSValueAsJS() : this.getValue();\n const location = this.options.get(\"location\");\n const type = getTypeFromLanguage(language);\n if (isSingleTagType(type)) {\n const tag = getTagFromType(type);\n const tagAttributes = this.options.get(\"tagAttributes\") ?? {};\n const tagElement = document.createElement(tag);\n for (const [key, value] of Object.entries(tagAttributes)) {\n tagElement.setAttribute(key, value);\n }\n tagElement.innerHTML = content;\n document[location].appendChild(tagElement);\n return;\n }\n document[location].innerHTML += content;\n }\n getDocumentAlterer() {\n return this.alterDocument.bind(this);\n }\n /**\n * Additional validation.\n */\n validateOptions() {\n if (!this.options.get(\"monacoOptions\").language) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n const type = getTypeFromLanguage(this.getLanguage());\n if (!isSingleTagType(type)) {\n if (this.options.get(\"tagAttributes\")) {\n throw new Error(\"'tagAttributes' option is only allowed for single tag types\");\n }\n }\n }\n async getTSValueAsJS() {\n const model = this.editor.getModel();\n if (!model)\n throw new Error(\"Model is not available\");\n // Make sure TypeScript eager sync is enabled\n this.monacoEditorModule.languages.typescript.typescriptDefaults.setEagerModelSync(true);\n // Ensure we're using file:/// URI\n const uri = model.uri;\n if (uri.scheme !== \"file\") {\n throw new Error(`Model must use file:// URI, got: ${uri.toString()}`);\n }\n // Get worker getter\n const getWorker = async (attempts = 10) => {\n try {\n return await this.monacoEditorModule.languages.typescript.getTypeScriptWorker();\n }\n catch (error) {\n if (error !== \"TypeScript not registered!\")\n throw error;\n if (attempts <= 0)\n return null;\n await new Promise((r) => setTimeout(r, 200));\n return getWorker(attempts - 1);\n }\n };\n const workerGetter = await getWorker();\n if (!workerGetter)\n throw new Error(\"Timeout: Could not get TypeScript worker\");\n const worker = await workerGetter(uri);\n // 🔸 Wait until the worker actually knows this file\n // Call something lightweight to force registration\n for (let i = 0; i < 20; i++) {\n try {\n await worker.getSemanticDiagnostics(uri.toString());\n break; // success — worker now recognizes the file\n }\n catch (err) {\n if (/Could not find source file/.test(String(err))) {\n await new Promise((r) => setTimeout(r, 250));\n continue;\n }\n throw err;\n }\n }\n // Now it's safe to call getEmitOutput\n const { outputFiles } = await worker.getEmitOutput(uri.toString());\n if (!outputFiles.length)\n throw new Error(\"No JS output produced\");\n return outputFiles[0].text;\n }\n getLanguage() {\n const monacoOptions = this.options.get(\"monacoOptions\");\n if (!monacoOptions[\"language\"]) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n return monacoOptions[\"language\"];\n }\n trimDefaultValue(content) {\n const lines = content.split(\"\\n\");\n // Find the first non-empty line to determine base indentation\n const firstNonEmptyLine = lines.find((line) => line.trim().length > 0);\n if (!firstNonEmptyLine) {\n return content.trim();\n }\n // Count leading spaces on the first non-empty line\n const leadingSpaces = firstNonEmptyLine.search(/\\S|$/);\n // Trim the same number of spaces from each line\n const trimmedLines = lines.map((line) => {\n // Only trim if the line has at least that many leading spaces\n if (line.length >= leadingSpaces &&\n line.substring(0, leadingSpaces).trim() === \"\") {\n return line.substring(leadingSpaces);\n }\n return line;\n });\n // Join back and trim any leading/trailing empty lines\n return trimmedLines.join(\"\\n\").trim();\n }\n /**\n * Create a single ExhibitionMonacoEditor instance wrapping a given element.\n */\n static create(element, options) {\n const core = new DefaultCore(element, {});\n return new ExhibitionMonacoEditor(core, options);\n }\n}\n","import { AbstractWraplet, DefaultCore, } from \"wraplet\";\nimport { ExhibitionPreview } from \"./ExhibitionPreview\";\nimport { ExhibitionMonacoEditor, } from \"./ExhibitionMonacoEditor\";\nimport { exhibitionDefaultAttribute } from \"./selectors\";\nimport { ElementStorage } from \"wraplet/storage\";\nconst ExhibitionMap = {\n editors: {\n selector: \"[data-js-exhibition-editor]\",\n multiple: true,\n required: false,\n Class: ExhibitionMonacoEditor,\n args: [],\n },\n preview: {\n selector: \"iframe[data-js-exhibition-preview]\",\n multiple: false,\n required: true,\n Class: ExhibitionPreview,\n },\n};\nexport class Exhibition extends AbstractWraplet {\n options;\n constructor(core, options = {}) {\n super(core);\n const defaultOptions = {\n updatePreviewOnInit: true,\n updaterSelector: \"[data-js-exhibition-updater]\",\n };\n this.options = new ElementStorage(this.node, exhibitionDefaultAttribute, { ...defaultOptions, ...options }, {\n updatePreviewOnInit: (data) => typeof data === \"boolean\",\n updaterSelector: (data) => typeof data === \"string\",\n });\n for (const editor of this.children.editors) {\n this.children.preview.addDocumentAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n const updaterElements = this.node.querySelectorAll(this.options.get(\"updaterSelector\"));\n for (const element of updaterElements) {\n this.core.addEventListener(element, \"click\", () => {\n this.updatePreview();\n });\n }\n if (this.options.get(\"updatePreviewOnInit\")) {\n this.updatePreview();\n }\n }\n /**\n * Adds DocumentAltererProviderWraplet instance to the list of editors.\n */\n addEditor(editor) {\n this.children.editors.add(editor);\n this.addPreviewAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n /**\n * Adds a simple DocumentAlterer to the preview.\n */\n addPreviewAlterer(alterer, priority = 0) {\n this.children.preview.addDocumentAlterer(alterer, priority);\n }\n getPreview() {\n return this.children.preview;\n }\n async updatePreview() {\n await this.children.preview.update();\n }\n /**\n * Create multiple Exhibitions.\n *\n * @param node Node to create Exhibitions on.\n * @param attribute Attribute to use for Exhibition instances.\n * @param map Map of dependencies for each Exhibition instance..\n * @param options Options for Exhibition instances.\n *\n * @returns Array of Exhibition instances.\n */\n static createMultiple(node, attribute = exhibitionDefaultAttribute, map, options = {}) {\n return this.createWraplets(node, map, attribute, [options]);\n }\n /**\n * Create a single Exhibition instance wrapping a given element.\n *\n * @param element Element to wrap.\n * @param map Map of dependencies for the Exhibition instance.\n * @param options Options for the Exhibition instance.\n */\n static create(element, map, options = {}) {\n const core = new DefaultCore(element, map);\n return new Exhibition(core, options);\n }\n /**\n * Returns a dependency map with editors being instances of ExhibitionMonacoEditor.\n *\n * @param editorOptions\n * MonacoEditorOptions to pass to the editor.\n * @param options\n * Map options.\n */\n static getMapWithMonacoEditor(editorOptions, options = {}) {\n const opts = {\n ...options,\n Class: ExhibitionMonacoEditor,\n };\n const map = this.getMap(opts);\n map[\"editors\"][\"args\"] = [editorOptions];\n return map;\n }\n /**\n * Returns a generic dependecy map with an undefined editor class that has to be provided through\n * the options.\n *\n * @param options\n * Map options.\n */\n static getMap(options) {\n const map = ExhibitionMap;\n const allOptions = {\n ...{\n initEditors: true,\n },\n ...options,\n };\n map[\"editors\"][\"Class\"] = allOptions.Class;\n if (!allOptions.initEditors) {\n map[\"editors\"][\"selector\"] = undefined;\n }\n return map;\n }\n}\n","import { AbstractWraplet } from \"wraplet\";\nexport class ExhibitionPreview extends AbstractWraplet {\n alterers = [];\n currentBlobUrl = null;\n /**\n * Adds a DocumentAlterer to the preview.\n * @param alterer\n * @param priority\n * Priority of the alterer. Higher priority alterers are executed first.\n */\n addDocumentAlterer(alterer, priority = 0) {\n this.alterers.push({\n callback: alterer,\n priority: priority,\n });\n }\n async update() {\n const doc = document.implementation.createHTMLDocument();\n this.alterers.sort((a, b) => b.priority - a.priority);\n for (const alterer of this.alterers) {\n await alterer.callback(doc);\n }\n // Revoke previous blob URL\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n const htmlContent = \"<!DOCTYPE html>\\n\" + doc.documentElement.outerHTML;\n const blob = new Blob([htmlContent], { type: \"text/html;charset=utf-8\" });\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.node.src = this.currentBlobUrl;\n this.node.onload = () => {\n // Wait for the document to render before calculating the height.\n // @todo This should be configurable.\n setTimeout(() => {\n this.updateHeight();\n }, 100);\n this.node.onload = null;\n };\n }\n /**\n * Updates preview's height to match its content.\n */\n updateHeight() {\n const iframeWindow = this.getIFrameWindow();\n const iframeDocument = this.getIFrameDocument();\n const el = iframeDocument.querySelector(\"html\");\n if (!el) {\n return;\n }\n const styles = iframeWindow.getComputedStyle(el);\n const margin = parseFloat(styles[\"marginTop\"]) + parseFloat(styles[\"marginBottom\"]);\n const height = Math.ceil(el.offsetHeight + margin);\n this.node.height = height + \"px\";\n }\n getIFrameDocument() {\n const iframeDocument = this.node.contentDocument;\n if (!iframeDocument) {\n throw new Error(\"IFrame document is not available.\");\n }\n return iframeDocument;\n }\n getIFrameWindow() {\n const window = this.node.contentWindow;\n if (!window) {\n throw new Error(\"IFrame window is not available.\");\n }\n return window;\n }\n}\n"],"names":["t","Error","e","i","r","n","s","o","a","Object","getPrototypeOf","prototype","h","l","Symbol","d","c","Set","find","this","push","findOne","getOrdered","Array","from","sort","p","u","g","m","b","args","destructible","map","coreOptions","v","I","E","W","fullMap","startingPath","currentMap","path","currentPath","constructor","resolve","getStartingMap","getCurrentMap","findMap","join","create","clone","up","pathExists","hasOwn","down","length","pop","M","node","isDestroyed","isGettingDestroyed","isGettingInitialized","isInitialized","mapWrapper","instantiatedChildren","destroyChildListeners","instantiateChildListeners","listeners","defaultWrapletCreator","element","initOptions","Class","wrapletCreator","processInitOptions","init","instantiateChildren","wrapChildren","querySelectorAll","keys","multiple","validateMapItem","instantiateMultipleWrapletsChild","instantiateSingleWrapletChild","syncChildren","getNodeTreeChildren","values","children","filter","accessNode","contains","findExistingWraplet","selector","findChildren","validateElements","name","instantiateWrapletItem","id","defaultCreator","prepareIndividualWraplet","add","addDestroyChildListener","addInstantiateChildListener","setWrapletCreator","addDestroyListener","removeChild","destroy","eventName","callback","options","removeEventListener","destroyChildren","addEventListener","uninitializedChildren","delete","required","Proxy","get","defaultInitOptions","assign","entries","L","x","S","core","groupsExtractor","Element","getAttribute","split","destroyListeners","__debugNodeAccessors","onChildDestroyed","bind","onChildInstantiated","initialize","setGroupsExtractor","getGroups","isChildInstance","createCore","createWraplets","hasAttribute","attribute","defaults","validators","data","keepFresh","elementOptionsMerger","fetchFreshData","has","getAll","getMultiple","reduce","refresh","set","String","getAttributeValue","JSON","parse","setAll","setMultiple","setAttribute","stringify","deleteMultiple","deleteAll","removeAttribute","charAt","validateData","exhibitionDefaultAttribute","defaultOptionsAttribute","typeMap","html","languages","tag","undefined","js","css","getTypeFromLanguage","language","key","value","includes","getTagFromType","type","isSingleTagType","Boolean","ExhibitionMonacoEditor","monacoEditorModule","editor","super","defaultOptions","optionsAttribute","monacoOptions","location","priority","trimDefaultValue","Number","isInteger","tagAttributes","validateOptions","uniqueId","Math","random","toString","substring","model","createModel","getLanguage","Uri","getPriority","getValue","alterDocument","document","content","getTSValueAsJS","tagElement","createElement","innerHTML","appendChild","getDocumentAlterer","getModel","typescript","typescriptDefaults","setEagerModelSync","uri","scheme","getWorker","async","attempts","getTypeScriptWorker","error","Promise","setTimeout","workerGetter","worker","getSemanticDiagnostics","err","test","outputFiles","getEmitOutput","text","lines","firstNonEmptyLine","line","trim","leadingSpaces","search","ExhibitionMap","editors","preview","alterers","currentBlobUrl","addDocumentAlterer","alterer","update","doc","implementation","createHTMLDocument","URL","revokeObjectURL","htmlContent","documentElement","outerHTML","blob","Blob","createObjectURL","src","onload","updateHeight","iframeWindow","getIFrameWindow","el","getIFrameDocument","querySelector","styles","getComputedStyle","margin","parseFloat","height","ceil","offsetHeight","iframeDocument","contentDocument","window","contentWindow","Exhibition","updatePreviewOnInit","updaterSelector","updaterElements","updatePreview","addEditor","addPreviewAlterer","getPreview","createMultiple","getMapWithMonacoEditor","editorOptions","opts","getMap","allOptions","initEditors"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://exhibitionjs/./node_modules/wraplet/dist/index.js","webpack://exhibitionjs/./node_modules/wraplet/dist/storage.js","webpack://exhibitionjs/./src/selectors.ts","webpack://exhibitionjs/./src/TypeMap.ts","webpack://exhibitionjs/./src/ExhibitionMonacoEditor.ts","webpack://exhibitionjs/./src/Exhibition.ts","webpack://exhibitionjs/./src/ExhibitionPreview.ts"],"sourcesContent":["class t extends Error{}class e extends Error{}class i extends Error{}class r extends Error{}class n extends Error{}class s extends Error{}class o extends Error{}function a(t){return Object.getPrototypeOf(t)===Object.prototype}const h=(t,e)=>\"object\"==typeof t&&null!==t&&!0===t[e],l=Symbol(\"WrapletSet\");function d(t){return h(t,l)}class c extends Set{find(t){const e=[];for(const i of this)t(i)&&e.push(i);return e}findOne(t){for(const e of this)if(t(e))return e;return null}getOrdered(t){return Array.from(this).sort((e,i)=>t(e)-t(i))}}const p=Symbol(\"WrapletSetReadonly\");class u extends c{[p]=!0;[l]=!0}function f(t){const e=t.wraplets;return d(e)&&0!==e.size?e:new u}function C(t,e){return!!e.wraplets&&e.wraplets.delete(t)}function y(t,e){e(t);const i=t.childNodes;for(const t of i)y(t,e)}function w(t){y(t,t=>{const e=f(t);for(const i of e)i.isGettingDestroyed||i.isDestroyed||i.destroy(),C(i,t)})}const g=Symbol(\"NodeTreeParent\"),m=Symbol(\"ChildrenManager\");function b(t){return{args:[],destructible:!0,map:{},coreOptions:{},...t}}function v(t){const e={};for(const i in t){const r=t[i];e[i]=b(r);const n=r.map;n&&a(n)&&(e[i].map=v(n))}return e}const I=Symbol(\"DynamicMap\");function E(t){return h(t,I)}class W{fullMap;startingPath;currentMap=null;path;currentPath=[];constructor(t,e=[],i=!0){this.path=e,this.startingPath=e,this.fullMap=v(t),i&&(this.currentMap=this.resolve(this.path))}getStartingMap(){return this.resolve(this.startingPath)}getCurrentMap(){return this.currentMap&&this.currentPath==this.path||(this.currentMap=this.resolve(this.path),this.currentPath=this.path),this.currentMap}findMap(t){let e=this.fullMap;for(const i of t){if(!e[i])throw new Error(`Invalid path: ${this.path.join(\".\")} . No such definition.`);const r=e[i].map;if(a(r))e=r;else{if(!E(r))throw new Error(\"Invalid map type.\");e=r.create(this.clone(t,!1))}}return e}up(t,e=!0){if(!this.pathExists([...this.path,t]))throw new Error(\"Map doesn't exist.\");this.path.push(t),e&&(this.currentMap=this.resolve(this.path))}pathExists(t){let e=this.fullMap;for(const i of t){if(!Object.hasOwn(e,i))return!1;const t=e[i].map;if(E(t))return!0;if(!a(t))throw new Error(\"Invalid map type.\");e=t}return!0}down(t=!0){if(0===this.path.length)throw new Error(\"At the root already.\");this.path.pop(),t&&(this.currentMap=this.resolve(this.path))}clone(t,e=!0){return new W(this.fullMap,t,e)}resolve(t){return this.findMap(t)}}class M{node;[m]=!0;[g]=!0;isDestroyed=!1;isGettingDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;mapWrapper;instantiatedChildren={};destroyChildListeners=[];instantiateChildListeners=[];listeners=[];defaultWrapletCreator=t=>{const e=new this.constructor(t.element,t.map,t.initOptions);return new t.Class(e,...t.args)};wrapletCreator=this.defaultWrapletCreator;constructor(t,i,r={}){if(this.node=t,a(i))this.mapWrapper=new W(i);else{if(!(i instanceof W))throw new e(\"The map provided to the Core is not a valid map.\");this.mapWrapper=i}this.processInitOptions(r),this.instantiatedChildren={}}init(){this.isGettingInitialized=!0;const t=this.instantiateChildren();this.instantiatedChildren=this.wrapChildren(t),this.isInitialized=!0,this.isGettingInitialized=!1}get map(){return this.mapWrapper.getStartingMap()}instantiateChildren(){const t=this.instantiatedChildren;if(\"function\"!=typeof this.node.querySelectorAll){if(Object.keys(this.map).length>0)throw new e(\"If the node provided cannot have children, the children map should be empty.\");return t}for(const e in this.map){const i=this.map[e],r=i.multiple,n=this.mapWrapper.clone([...this.mapWrapper.path,e]);this.validateMapItem(e,i),t[e]=r?this.instantiateMultipleWrapletsChild(i,n,this.node,e):this.instantiateSingleWrapletChild(i,n,this.node,e)}return t}syncChildren(){this.instantiatedChildren=this.instantiateChildren()}getNodeTreeChildren(){const t=[];for(const e of Object.values(this.children))if(d(e))for(const i of e)t.push(i);else t.push(e);return t.filter(t=>{let e=!1;return t.accessNode(t=>{e=this.node.contains(t)}),e})}findExistingWraplet(t,e){if(void 0===this.instantiatedChildren||!this.instantiatedChildren[t])return null;const i=this.instantiatedChildren[t];if(this.map[t].multiple){if(!d(i))throw new o(\"Internal logic error. Expected a WrapletSet.\");const t=i.find(t=>{let i=!1;return t.accessNode(t=>{t===e&&(i=!0)}),i});if(0===t.length)return null;if(t.length>1)throw new o(\"Internal logic error. Multiple instances wrapping the same element found in the core.\");return t[0]}return i}instantiateSingleWrapletChild(t,e,i,r){if(!t.selector)return null;const s=t.selector,o=this.findChildren(s,i);if(this.validateElements(r,o,t),0===o.length)return null;if(o.length>1)throw new n(`${this.constructor.name}: More than one element was found for the \"${r}\" child. Selector used: \"${s}\".`);const a=o[0];return this.instantiateWrapletItem(r,t,e,a)}instantiateWrapletItem(t,e,i,r){const n=this.findExistingWraplet(t,r);if(n)return n;const s=e.Class,o=e.args,a=this.wrapletCreator({id:t,Class:s,element:r,map:i,initOptions:e.coreOptions,args:o,defaultCreator:this.defaultWrapletCreator});this.prepareIndividualWraplet(t,a);for(const e of this.instantiateChildListeners)e(a,t);return a}instantiateMultipleWrapletsChild(t,e,i,r){const n=t.selector;if(!n)return new u;const s=this.findChildren(n,i);this.validateElements(r,s,t);const o=this.instantiatedChildren&&this.instantiatedChildren[r]?this.instantiatedChildren[r]:new u;for(const i of s){if(this.findExistingWraplet(r,i))continue;const n=this.instantiateWrapletItem(r,t,e,i);o.add(n)}return o}addDestroyChildListener(t){this.destroyChildListeners.push(t)}addInstantiateChildListener(t){this.instantiateChildListeners.push(t)}setWrapletCreator(t){this.wrapletCreator=t}prepareIndividualWraplet(t,e){e.addDestroyListener(e=>{this.removeChild(e,t);for(const i of this.destroyChildListeners)i(e,t)})}destroy(){if(this.isDestroyed)throw new s(\"Children are already destroyed.\");this.isGettingDestroyed=!0;for(const t of this.listeners){const e=t.node,i=t.eventName,r=t.callback,n=t.options;e.removeEventListener(i,r,n)}this.destroyChildren(),this.isGettingDestroyed=!1,this.isDestroyed=!0}findChildren(t,e){return\"string\"==typeof t?((t,e)=>Array.from(e.querySelectorAll(t)))(t,e):t(e)}addEventListener(t,e,i,r){this.listeners.push({node:t,eventName:e,callback:i,options:r}),t.addEventListener(e,i,r)}get children(){if(!this.isInitialized)throw new r(\"Wraplet is not yet fully initialized. You can fetch partial children with the 'uninitializedChildren' property.\");return this.instantiatedChildren}get uninitializedChildren(){if(this.isInitialized)throw new r(\"Wraplet is already initialized. Fetch children with 'children' property instead.\");return this.instantiatedChildren}removeChild(t,e){if(d(this.instantiatedChildren[e])){if(!this.instantiatedChildren[e].delete(t))throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's not among the children.\")}else{if(this.map[e].required&&!this.isGettingDestroyed)throw new i(\"Required child has been destroyed.\");if(null===this.instantiatedChildren[e])throw new o(\"Internal logic error. Destroyed child couldn't be removed because it's already null.\");this.instantiatedChildren[e]=null}}validateMapItem(t,i){const r=i.selector,n=i.required;if(!r&&n)throw new e(`${this.constructor.name}: Child \"${t}\" cannot at the same be required and have no selector.`)}validateElements(e,i,r){if(0===i.length&&r.required)throw new t(`${this.constructor.name}: Couldn't find a node for the wraplet \"${e}\". Selector used: \"${r.selector}\".`)}wrapChildren(t){return new Proxy(t,{get:function(t,e){if(!(e in t))throw new Error(`Child '${e}' has not been found.`);return t[e]}})}defaultInitOptions(){return{instantiateChildListeners:[],destroyChildListeners:[]}}processInitOptions(t){const e=Object.assign(this.defaultInitOptions(),t);for(const t of e.instantiateChildListeners)this.instantiateChildListeners.push(t);for(const t of e.destroyChildListeners)this.destroyChildListeners.push(t)}destroyChildren(){for(const[t,e]of Object.entries(this.children))if(e&&this.map[t].destructible)if(d(e))for(const t of e)t.destroy();else e.destroy()}}const L=Symbol(\"Wraplet\");function D(t){return h(t,L)}const x=Symbol(\"Groupable\");class S{core;[L]=!0;[x]=!0;[g]=!0;isGettingDestroyed=!1;isDestroyed=!1;isGettingInitialized=!1;isInitialized=!1;groupsExtractor=t=>{if(t instanceof Element){const e=t.getAttribute(\"data-js-wraplet-groupable\");if(e)return e.split(\",\")}return[]};destroyListeners=[];__debugNodeAccessors=[];constructor(t){if(this.core=t,!h(t,m))throw new Error(\"AbstractWraplet requires a Core instance.\");t.addDestroyChildListener(this.onChildDestroyed.bind(this)),t.addInstantiateChildListener(this.onChildInstantiated.bind(this)),this.initialize()}getNodeTreeChildren(){return this.core.getNodeTreeChildren()}setGroupsExtractor(t){this.groupsExtractor=t}getGroups(){return this.groupsExtractor(this.node)}get children(){return this.core.children}accessNode(t){this.__debugNodeAccessors.push(t),t(this.node)}destroy(){this.isGettingDestroyed=!0;for(const t of this.destroyListeners)t(this);this.destroyListeners.length=0,this.core.destroy(),this.isDestroyed=!0,this.isGettingDestroyed=!1}addDestroyListener(t){this.destroyListeners.push(t)}onChildDestroyed(t,e){}initialize(){this.isGettingInitialized=!0,this.core.init(),this.isInitialized=!0,this.isGettingInitialized=!1}get node(){return this.core.node}onChildInstantiated(t,e){}isChildInstance(t,e,i=null){return e===(i||e)&&t instanceof this.core.map[e].Class}static createCore(t,e){return new M(t,e)}static createWraplets(t,e,i,r=[]){if(this===S)throw new Error(\"You cannot instantiate an abstract class.\");const n=[];if(t instanceof Element&&t.hasAttribute(i)){const i=S.createCore(t,e);n.push(new this(i,...r))}const s=t.querySelectorAll(`[${i}]`);for(const t of s){const i=S.createCore(t,e);n.push(new this(i,...r))}return n}}class z{levels;[I]=!0;constructor(t=1){if(this.levels=t,t<1)throw new Error(\"There have to be more than 0 repeated levels.\")}create(t){for(let e=0;e<this.levels;e++)t.down();return t.getCurrentMap()}static create(t=1){return new z(t)}}class O extends c{[p]=!0}export{S as AbstractWraplet,M as DefaultCore,u as DefaultWrapletSet,O as DefaultWrapletSetReadonly,z as MapRepeat,w as destroyWrapletsRecursively,f as getWrapletsFromNode,D as isWraplet};\n//# sourceMappingURL=index.js.map","class t extends Error{}class e{element;attribute;defaults;validators;data;options;constructor(t,e,s,i,r={}){this.element=t,this.attribute=e,this.defaults=s,this.validators=i,this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...r},this.data=this.fetchFreshData()}has(t){return t in this.getAll()}get(t){return this.getAll()[t]}getMultiple(t){const e=this.getAll();return t.reduce((t,s)=>(t[s]=e[s],t),{})}getAll(){return this.options.keepFresh&&this.refresh(),this.data}set(e,s){if(!this.validators[e](s))throw new t(`Attempted to set an invalid value for the key ${String(e)}.`);const i=this.getAttributeValue(this.attribute),r=JSON.parse(i);r[e]=s,this.setAll(r)}setMultiple(t){const e=this.getAll();this.setAll({...e,...t})}setAll(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}delete(t){const e=this.getAll();t in e&&(delete e[t],this.element.setAttribute(this.attribute,JSON.stringify(e)))}deleteMultiple(t){const e=this.getAll();for(const s of t)delete e[s];this.setAll(e)}deleteAll(){this.element.removeAttribute(this.attribute),this.refresh()}refresh(){this.data=this.fetchFreshData()}fetchFreshData(){const e=this.getAttributeValue(this.attribute);if(\"{\"!==e.charAt(0))throw new t(\"Data has to be defined as an object.\");const s=JSON.parse(e);if(!this.validateData(s))throw new t(\"Invalid storage value.\");return this.options.elementOptionsMerger(this.defaults,s)}validateData(t){for(const e in t){if(!(e in this.validators))return console.warn(`Option ${e} doesn't have a validator.`),!1;if(\"function\"!=typeof this.validators[e])return console.warn(`Validator for option ${e} is not a function.`),!1;if(!this.validators[e](t[e]))return!1}return!0}getAttributeValue(t){return this.element.getAttribute(t)||\"{}\"}}export{e as ElementStorage};\n//# sourceMappingURL=storage.js.map","export const exhibitionDefaultAttribute = \"data-js-exhibition\";\nexport const defaultOptionsAttribute = \"data-js-options\";\n","export const typeMap = {\n html: {\n languages: [\"html\"],\n tag: undefined,\n },\n js: {\n languages: [\"javascript\", \"typescript\"],\n tag: \"script\",\n },\n css: {\n languages: [\"css\"],\n tag: \"style\",\n },\n};\nexport function getTypeFromLanguage(language) {\n for (const [key, value] of Object.entries(typeMap)) {\n if (value.languages.includes(language)) {\n return key;\n }\n }\n throw new Error(\"Unknown language\");\n}\nexport function getTagFromType(type) {\n return typeMap[type].tag;\n}\nexport function isSingleTagValue(item) {\n return Boolean(getTagFromType(item.type));\n}\nexport function isSingleTagType(type) {\n return Boolean(getTagFromType(type));\n}\n","import { AbstractWraplet, DefaultCore } from \"wraplet\";\nimport { ElementStorage } from \"wraplet/storage\";\nimport { defaultOptionsAttribute } from \"./selectors\";\nimport { getTagFromType, getTypeFromLanguage, isSingleTagType, } from \"./TypeMap\";\nexport class ExhibitionMonacoEditor extends AbstractWraplet {\n monaco;\n editor = null;\n options;\n constructor(core, options) {\n super(core);\n const defaultOptions = {\n optionsAttribute: \"data-js-options\",\n location: \"body\",\n priority: 0,\n trimDefaultValue: true,\n monacoEditorOptions: {},\n };\n const validators = {\n optionsAttribute: (data) => typeof data === \"string\",\n // We generally don't validate monacoOptions, leaving it to the monaco editor.\n location: (data) => typeof data === \"string\" && [\"head\", \"body\"].includes(data),\n priority: (data) => Number.isInteger(data),\n tagAttributes: (data) => typeof data === \"object\",\n trimDefaultValue: (data) => typeof data === \"boolean\",\n monacoEditorCreator: (data) => typeof data === \"function\",\n monaco: (data) => typeof data === \"object\",\n monacoEditorOptions: () => true,\n };\n options.monacoEditorOptions = {\n ...defaultOptions.monacoEditorOptions,\n ...options.monacoEditorOptions,\n };\n this.options = new ElementStorage(this.node, defaultOptionsAttribute, { ...defaultOptions, ...options }, validators, {\n elementOptionsMerger: (defaults, options) => {\n options.monacoEditorOptions = {\n ...defaults.monacoEditorOptions,\n ...options.monacoEditorOptions,\n };\n return { ...defaults, ...options };\n },\n });\n this.monaco = this.options.get(\"monaco\");\n if (this.options.get(\"trimDefaultValue\")) {\n const monacoOptions = this.options.get(\"monacoEditorOptions\");\n if (monacoOptions.value) {\n monacoOptions.value = ExhibitionMonacoEditor.trimDefaultValue(monacoOptions.value);\n this.options.set(\"monacoEditorOptions\", monacoOptions);\n }\n }\n this.validateOptions();\n }\n isEditorInitialized() {\n return this.editor !== null;\n }\n async init() {\n const editorCreator = this.options.get(\"monacoEditorCreator\") ||\n (async (options, element, monaco) => ExhibitionMonacoEditor.createMonacoEditor(options, element, monaco));\n this.editor = await editorCreator(this.options.get(\"monacoEditorOptions\"), this.node, this.monaco);\n }\n getPriority() {\n return this.options.get(\"priority\");\n }\n /**\n * Returns the current value of the editor.\n */\n getValue() {\n return this.getEditor().getValue();\n }\n async alterDocument(document) {\n const language = this.getLanguage();\n const content = language === \"typescript\" ? await this.getTSValueAsJS() : this.getValue();\n const location = this.options.get(\"location\");\n const type = getTypeFromLanguage(language);\n if (isSingleTagType(type)) {\n const tag = getTagFromType(type);\n const tagAttributes = this.options.get(\"tagAttributes\") ?? {};\n const tagElement = document.createElement(tag);\n for (const [key, value] of Object.entries(tagAttributes)) {\n tagElement.setAttribute(key, value);\n }\n tagElement.innerHTML = content;\n document[location].appendChild(tagElement);\n return;\n }\n document[location].innerHTML += content;\n }\n getDocumentAlterer() {\n return this.alterDocument.bind(this);\n }\n /**\n * Additional validation.\n */\n validateOptions() {\n if (!this.options.get(\"monacoEditorOptions\").language) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n const type = getTypeFromLanguage(this.getLanguage());\n if (!isSingleTagType(type)) {\n if (this.options.get(\"tagAttributes\")) {\n throw new Error(\"'tagAttributes' option is only allowed for single tag types\");\n }\n }\n }\n getEditor() {\n if (!this.editor)\n throw new Error(\"Editor is not initialized\");\n return this.editor;\n }\n async getTSValueAsJS() {\n const model = this.getEditor().getModel();\n if (!model)\n throw new Error(\"Model is not available\");\n // Make sure TypeScript eager sync is enabled\n this.monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);\n // Ensure we're using file:/// URI\n const uri = model.uri;\n if (uri.scheme !== \"file\") {\n throw new Error(`Model must use file:// URI, got: ${uri.toString()}`);\n }\n // Get worker getter\n const getWorker = async (attempts = 10) => {\n try {\n return await this.monaco.languages.typescript.getTypeScriptWorker();\n }\n catch (error) {\n if (error !== \"TypeScript not registered!\")\n throw error;\n if (attempts <= 0)\n return null;\n await new Promise((r) => setTimeout(r, 200));\n return getWorker(attempts - 1);\n }\n };\n const workerGetter = await getWorker();\n if (!workerGetter)\n throw new Error(\"Timeout: Could not get TypeScript worker\");\n const worker = await workerGetter(uri);\n // 🔸 Wait until the worker actually knows this file\n // Call something lightweight to force registration\n for (let i = 0; i < 20; i++) {\n try {\n await worker.getSemanticDiagnostics(uri.toString());\n break; // success — worker now recognizes the file\n }\n catch (err) {\n if (/Could not find source file/.test(String(err))) {\n await new Promise((r) => setTimeout(r, 250));\n continue;\n }\n throw err;\n }\n }\n // Now it's safe to call getEmitOutput\n const { outputFiles } = await worker.getEmitOutput(uri.toString());\n if (!outputFiles.length)\n throw new Error(\"No JS output produced\");\n return outputFiles[0].text;\n }\n getLanguage() {\n const monacoOptions = this.options.get(\"monacoEditorOptions\");\n if (!monacoOptions[\"language\"]) {\n throw new Error(\"Missing language in monacoOptions\");\n }\n return monacoOptions[\"language\"];\n }\n static trimDefaultValue(content) {\n const lines = content.split(\"\\n\");\n // Find the first non-empty line to determine base indentation\n const firstNonEmptyLine = lines.find((line) => line.trim().length > 0);\n if (!firstNonEmptyLine) {\n return content.trim();\n }\n // Count leading spaces on the first non-empty line\n const leadingSpaces = firstNonEmptyLine.search(/\\S|$/);\n // Trim the same number of spaces from each line\n const trimmedLines = lines.map((line) => {\n // Only trim if the line has at least that many leading spaces\n if (line.length >= leadingSpaces &&\n line.substring(0, leadingSpaces).trim() === \"\") {\n return line.substring(leadingSpaces);\n }\n return line;\n });\n // Join back and trim any leading/trailing empty lines\n return trimmedLines.join(\"\\n\").trim();\n }\n destroy() {\n this.editor?.dispose();\n super.destroy();\n }\n /**\n * Helper method creating a new monaco editor instance.\n */\n static createMonacoEditor(editorOptions = {}, node, monaco) {\n const language = editorOptions.language;\n if (!language) {\n throw new Error(\"Missing language in editorOptions\");\n }\n const model = this.createMonacoModel(monaco, language, editorOptions.value || \"\");\n return monaco.editor.create(node, {\n ...editorOptions,\n ...{ model: model },\n });\n }\n /**\n * Helper method creating a new monaco model instance.\n */\n static createMonacoModel(monaco, language, value) {\n // Generate a unique URI for each model instance\n const uniqueId = Math.random().toString(36).substring(2, 15);\n return monaco.editor.createModel(value, language, monaco.Uri.parse(`file:///${language}-${uniqueId}.ts`));\n }\n /**\n * Create a single ExhibitionMonacoEditor instance wrapping a given element.\n */\n static create(element, options) {\n const core = new DefaultCore(element, {});\n return new ExhibitionMonacoEditor(core, options);\n }\n}\n","import { AbstractWraplet, DefaultCore, } from \"wraplet\";\nimport { ExhibitionPreview } from \"./ExhibitionPreview\";\nimport { ExhibitionMonacoEditor, } from \"./ExhibitionMonacoEditor\";\nimport { exhibitionDefaultAttribute } from \"./selectors\";\nimport { ElementStorage } from \"wraplet/storage\";\nconst ExhibitionMap = {\n editors: {\n selector: \"[data-js-exhibition-editor]\",\n multiple: true,\n required: false,\n Class: ExhibitionMonacoEditor,\n args: [],\n },\n preview: {\n selector: \"iframe[data-js-exhibition-preview]\",\n multiple: false,\n required: true,\n Class: ExhibitionPreview,\n },\n};\nexport class Exhibition extends AbstractWraplet {\n options;\n constructor(core, options = {}) {\n super(core);\n const defaultOptions = {\n updaterSelector: \"[data-js-exhibition-updater]\",\n };\n this.options = new ElementStorage(this.node, exhibitionDefaultAttribute, { ...defaultOptions, ...options }, {\n updaterSelector: (data) => typeof data === \"string\",\n });\n for (const editor of this.children.editors) {\n this.children.preview.addDocumentAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n const updaterElements = this.node.querySelectorAll(this.options.get(\"updaterSelector\"));\n for (const element of updaterElements) {\n this.core.addEventListener(element, \"click\", () => {\n this.updatePreview();\n });\n }\n }\n async init() {\n await this.initalizeMonacoEditors();\n }\n /**\n * Adds DocumentAltererProviderWraplet instance to the list of editors.\n */\n addEditor(editor) {\n this.children.editors.add(editor);\n this.addPreviewAlterer(editor.getDocumentAlterer(), editor.getPriority());\n }\n /**\n * Adds a simple DocumentAlterer to the preview.\n */\n addPreviewAlterer(alterer, priority = 0) {\n this.children.preview.addDocumentAlterer(alterer, priority);\n }\n getPreview() {\n return this.children.preview;\n }\n async updatePreview() {\n await this.children.preview.update();\n }\n async initalizeMonacoEditors() {\n for (const editor of this.children.editors) {\n if (editor instanceof ExhibitionMonacoEditor) {\n if (editor.isEditorInitialized()) {\n continue;\n }\n await editor.init();\n }\n }\n }\n /**\n * Create multiple Exhibitions.\n *\n * @param node Node to create Exhibitions on.\n * @param attribute Attribute to use for Exhibition instances.\n * @param map Map of dependencies for each Exhibition instance.\n * @param options Options for Exhibition instances.\n * @param init Initialize exhibitions after they're created.\n * @param updatePreview Update preview of each exhibition after it's initialized.\n * @returns Array of Exhibition instances.\n */\n static async createMultiple(node, attribute = exhibitionDefaultAttribute, map, options = {}, init = true, updatePreview = true) {\n if (!init && updatePreview) {\n throw new Error(\"Cannot update preview without initializing exhibitions first\");\n }\n const exhibitions = this.createWraplets(node, map, attribute, [options]);\n if (init) {\n await Promise.all(exhibitions.map((exhibition) => exhibition.init()));\n }\n if (updatePreview) {\n await Promise.all(exhibitions.map((exhibition) => exhibition.updatePreview()));\n }\n return exhibitions;\n }\n /**\n * Create a single Exhibition instance wrapping a given element.\n *\n * @param element Element to wrap.\n * @param map Map of dependencies for the Exhibition instance.\n * @param options Options for the Exhibition instance.\n */\n static async create(element, map, options = {}) {\n const core = new DefaultCore(element, map);\n return new Exhibition(core, options);\n }\n /**\n * Returns a dependency map with editors being instances of ExhibitionMonacoEditor.\n *\n * @param exhibitionMonacoEditorOptions\n * MonacoEditorOptions to pass to the ExhibitionMonacoEditor.\n * @param options\n * Map options.\n */\n static getMapWithMonacoEditor(exhibitionMonacoEditorOptions, options = {}) {\n const opts = {\n ...options,\n Class: ExhibitionMonacoEditor,\n };\n const map = this.getMap(opts);\n map[\"editors\"][\"args\"] = [exhibitionMonacoEditorOptions];\n return map;\n }\n /**\n * Returns a generic dependecy map with an undefined editor class that has to be provided through\n * the options.\n *\n * @param options\n * Map options.\n */\n static getMap(options) {\n const map = ExhibitionMap;\n const allOptions = {\n ...{\n selectEditors: true,\n },\n ...options,\n };\n map[\"editors\"][\"Class\"] = allOptions.Class;\n if (!allOptions.selectEditors) {\n map[\"editors\"][\"selector\"] = undefined;\n }\n return map;\n }\n}\n","import { AbstractWraplet } from \"wraplet\";\nexport class ExhibitionPreview extends AbstractWraplet {\n alterers = [];\n currentBlobUrl = null;\n /**\n * Adds a DocumentAlterer to the preview.\n * @param alterer\n * @param priority\n * Priority of the alterer. Higher priority alterers are executed first.\n */\n addDocumentAlterer(alterer, priority = 0) {\n this.alterers.push({\n callback: alterer,\n priority: priority,\n });\n }\n async update() {\n const doc = document.implementation.createHTMLDocument();\n this.alterers.sort((a, b) => b.priority - a.priority);\n for (const alterer of this.alterers) {\n await alterer.callback(doc);\n }\n // Revoke previous blob URL\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n const htmlContent = \"<!DOCTYPE html>\\n\" + doc.documentElement.outerHTML;\n const blob = new Blob([htmlContent], { type: \"text/html;charset=utf-8\" });\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.node.src = this.currentBlobUrl;\n this.node.onload = () => {\n // Wait for the document to render before calculating the height.\n // @todo This should be configurable.\n setTimeout(() => {\n this.updateHeight();\n }, 100);\n this.node.onload = null;\n };\n }\n /**\n * Updates preview's height to match its content.\n */\n updateHeight() {\n const iframeWindow = this.getIFrameWindow();\n const iframeDocument = this.getIFrameDocument();\n const el = iframeDocument.querySelector(\"html\");\n if (!el) {\n return;\n }\n const styles = iframeWindow.getComputedStyle(el);\n const margin = parseFloat(styles[\"marginTop\"]) + parseFloat(styles[\"marginBottom\"]);\n const height = Math.ceil(el.offsetHeight + margin);\n this.node.height = height + \"px\";\n }\n getIFrameDocument() {\n const iframeDocument = this.node.contentDocument;\n if (!iframeDocument) {\n throw new Error(\"IFrame document is not available.\");\n }\n return iframeDocument;\n }\n getIFrameWindow() {\n const window = this.node.contentWindow;\n if (!window) {\n throw new Error(\"IFrame window is not available.\");\n }\n return window;\n }\n}\n"],"names":["t","Error","e","i","r","n","s","o","a","Object","getPrototypeOf","prototype","h","l","Symbol","d","c","Set","find","this","push","findOne","getOrdered","Array","from","sort","p","u","g","m","b","args","destructible","map","coreOptions","v","I","E","W","fullMap","startingPath","currentMap","path","currentPath","constructor","resolve","getStartingMap","getCurrentMap","findMap","join","create","clone","up","pathExists","hasOwn","down","length","pop","M","node","isDestroyed","isGettingDestroyed","isGettingInitialized","isInitialized","mapWrapper","instantiatedChildren","destroyChildListeners","instantiateChildListeners","listeners","defaultWrapletCreator","element","initOptions","Class","wrapletCreator","processInitOptions","init","instantiateChildren","wrapChildren","querySelectorAll","keys","multiple","validateMapItem","instantiateMultipleWrapletsChild","instantiateSingleWrapletChild","syncChildren","getNodeTreeChildren","values","children","filter","accessNode","contains","findExistingWraplet","selector","findChildren","validateElements","name","instantiateWrapletItem","id","defaultCreator","prepareIndividualWraplet","add","addDestroyChildListener","addInstantiateChildListener","setWrapletCreator","addDestroyListener","removeChild","destroy","eventName","callback","options","removeEventListener","destroyChildren","addEventListener","uninitializedChildren","delete","required","Proxy","get","defaultInitOptions","assign","entries","L","x","S","core","groupsExtractor","Element","getAttribute","split","destroyListeners","__debugNodeAccessors","onChildDestroyed","bind","onChildInstantiated","initialize","setGroupsExtractor","getGroups","isChildInstance","createCore","createWraplets","hasAttribute","attribute","defaults","validators","data","keepFresh","elementOptionsMerger","fetchFreshData","has","getAll","getMultiple","reduce","refresh","set","String","getAttributeValue","JSON","parse","setAll","setMultiple","setAttribute","stringify","deleteMultiple","deleteAll","removeAttribute","charAt","validateData","console","warn","exhibitionDefaultAttribute","defaultOptionsAttribute","typeMap","html","languages","tag","undefined","js","css","getTypeFromLanguage","language","key","value","includes","getTagFromType","type","isSingleTagType","Boolean","ExhibitionMonacoEditor","monaco","editor","super","defaultOptions","optionsAttribute","location","priority","trimDefaultValue","monacoEditorOptions","Number","isInteger","tagAttributes","monacoEditorCreator","monacoOptions","validateOptions","isEditorInitialized","editorCreator","createMonacoEditor","getPriority","getValue","getEditor","alterDocument","document","getLanguage","content","getTSValueAsJS","tagElement","createElement","innerHTML","appendChild","getDocumentAlterer","model","getModel","typescript","typescriptDefaults","setEagerModelSync","uri","scheme","toString","getWorker","async","attempts","getTypeScriptWorker","error","Promise","setTimeout","workerGetter","worker","getSemanticDiagnostics","err","test","outputFiles","getEmitOutput","text","lines","firstNonEmptyLine","line","trim","leadingSpaces","search","substring","dispose","editorOptions","createMonacoModel","uniqueId","Math","random","createModel","Uri","ExhibitionMap","editors","preview","alterers","currentBlobUrl","addDocumentAlterer","alterer","update","doc","implementation","createHTMLDocument","URL","revokeObjectURL","htmlContent","documentElement","outerHTML","blob","Blob","createObjectURL","src","onload","updateHeight","iframeWindow","getIFrameWindow","el","getIFrameDocument","querySelector","styles","getComputedStyle","margin","parseFloat","height","ceil","offsetHeight","iframeDocument","contentDocument","window","contentWindow","Exhibition","updaterSelector","updaterElements","updatePreview","initalizeMonacoEditors","addEditor","addPreviewAlterer","getPreview","createMultiple","exhibitions","all","exhibition","getMapWithMonacoEditor","exhibitionMonacoEditorOptions","opts","getMap","allOptions","selectEditors"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exhibitionjs",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Library for showcasing your js/ts code snippets.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -22,7 +22,7 @@
22
22
  "author": "Łukasz Zaroda",
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "wraplet": "^0.26.0"
25
+ "wraplet": "^0.27.0"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "monaco-editor": "^0.54.0"