diff --git a/ea-scripts/ExcaliAI.md b/ea-scripts/ExcaliAI.md
new file mode 100644
index 0000000..d64f350
--- /dev/null
+++ b/ea-scripts/ExcaliAI.md
@@ -0,0 +1,293 @@
+/*
+Based on https://github.com/SawyerHood/draw-a-ui
+
+
+
+
+```js*/
+
+if(!ea.verifyMinimumPluginVersion || !ea.verifyMinimumPluginVersion("2.0.4")) {
+ new Notice("This script requires a newer version of Excalidraw. Please install the latest version.");
+ return;
+}
+
+// --------------------------------------
+// Initialize values and settings
+// --------------------------------------
+let settings = ea.getScriptSettings();
+
+if(!settings["Custom System Prompts"]) {
+ settings = {
+ "Custom System Prompts" : {},
+ "Agent's Task": "Wireframe to code",
+ "Output Type": "html"
+ };
+ await ea.setScriptSettings(settings);
+}
+
+const instructions = {
+ "html": "Turn this into a single html file using tailwind. Return a single message containing only the html file in a codeblock.",
+ "mermaid": "Challenge my thinking. Return a single message containing only the mermaid diagram in a codeblock."
+}
+
+const defaultSystemPrompts = {
+ "Wireframe to code": `You are an expert tailwind developer. A user will provide you with a low-fidelity wireframe of an application and you will return a single html file that uses tailwind to create the website. Use creative license to make the application more fleshed out. Write the necessary javascript code. If you need to insert an image, use placehold.co to create a placeholder image.`,
+ "Challenge my thinking": `The user will provide you with a screenshot of a whiteboard covering ideas about a subject. Your task is to understand the topic of the whiteboard, to give it a title, and then to identify ideas, web links, images, and any additional content that challenges, disputes, contradicts what is on the whiteboard, plus ideas that extend, add, builds on, and takes the thinking of the user further.`
+}
+
+const OPENAI_API_KEY = ea.plugin.settings.openAIAPIToken;
+if(!OPENAI_API_KEY || OPENAI_API_KEY === "") {
+ new Notice("You must first configure your API key in Excalidraw Plugin Settings");
+ return;
+}
+
+let customSystemPrompts = settings["Custom System Prompts"];
+let agentTask = settings["Agent's Task"];
+let outputType = settings["Output Type"];
+if (!Object.keys(instructions).includes(outputType)) {
+ outputType = "html";
+}
+let allSystemPrompts = {
+ ...defaultSystemPrompts,
+ ...customSystemPrompts
+};
+if(!allSystemPrompts.hasOwnProperty(agentTask)) {
+ agentTask = Object.keys(defaultSystemPrompts)[0];
+}
+
+// --------------------------------------
+// Generate image
+// --------------------------------------
+const getRequestObjFromSelectedElements = async (view) => {
+ await view.forceSave(true);
+ const viewElements = ea.getViewSelectedElements();
+ if(viewElements.length === 0) {
+ new Notice ("Aborting because there is nothing selected.",4000);
+ return;
+ }
+ ea.copyViewElementsToEAforEditing(viewElements);
+ const bb = ea.getBoundingBox(viewElements);
+ const size = (bb.width*bb.height);
+ const minRatio = Math.sqrt(360000/size);
+ const maxRatio = Math.sqrt(size/16000000);
+ const scale = minRatio > 1
+ ? minRatio
+ : (
+ maxRatio > 1
+ ? 1/maxRatio
+ : 1
+ );
+
+ const loader = ea.getEmbeddedFilesLoader(false);
+ const exportSettings = {
+ withBackground: true,
+ withTheme: true,
+ };
+
+ const dataURL =
+ await ea.createPNGBase64(
+ null,
+ scale,
+ exportSettings,
+ loader,
+ "light",
+ );
+ ea.clear();
+ return { image: dataURL };
+ }
+
+// --------------------------------------
+// Submit Prompt
+// --------------------------------------
+const run = async () => {
+ const requestObject = await getRequestObjFromSelectedElements(ea.targetView);
+ requestObject.systemPrompt = allSystemPrompts[agentTask];
+ requestObject.instruction = instructions[outputType];
+
+ const spinner = await ea.convertStringToDataURL(`
+
+ `);
+ new Notice (error);
+ ea.getElement(id).src = errorDataURL;
+ ea.addElementsToView(false,true);
+ }
+
+ if(!result?.json?.hasOwnProperty("choices")) {
+ await errorMessage();
+ return;
+ }
+
+ console.log(result);
+ let content = ea.extractCodeBlocks(result.json.choices[0]?.message?.content)[0]?.data;
+
+ if(!content) {
+ await errorMessage();
+ return;
+ }
+
+ switch(outputType) {
+ case "html":
+ ea.getElement(id).link = await ea.convertStringToDataURL(content);
+ ea.addElementsToView(false,true);
+ break;
+ case "mermaid":
+ if(content.startsWith("mermaid")) {
+ content = content.replace(/^mermaid/,"").trim();
+ }
+ ea.getElement(id).isDeleted = true;
+ try {
+ await ea.addMermaid(content);
+ } catch (e) {
+ ea.addText(0,0,content);
+ }
+ ea.targetView.currentPosition = {x: bb.topX+bb.width+100, y: bb.topY-bb.height-100};
+ await ea.addElementsToView(true, false);
+ ea.clear();
+ if(content.startsWith("graph LR") || content.startsWith("graph TD")) {
+ try {
+ if(content.startsWith("graph LR") || content.startsWith("flowchart LR")) {
+ content = content.replaceAll("graph LR", "graph TD");
+ content = content.replaceAll("flowchart LR", "flowchart TD");
+ await ea.addMermaid(content);
+ } else if (content.startsWith("graph TD") || content.startsWith("flowchart TD")) {
+ content = content.replaceAll("graph TD", "graph LR");
+ content = content.replaceAll("flowchart TD", "flowchart LR");
+ await ea.addMermaid(content);
+ }
+ } catch (e) {
+ ea.addText(0,0,content);
+ }
+ ea.targetView.currentPosition = {x: bb.topX-100, y: bb.topY + 100};
+ ea.addElementsToView(true, true);
+ }
+ break;
+ }
+}
+
+// --------------------------------------
+// User Interface
+// --------------------------------------
+const fragWithHTML = (html) => createFragment((frag) => (frag.createDiv().innerHTML = html));
+
+const configModal = new ea.obsidian.Modal(app);
+let dirty=false;
+configModal.onOpen = () => {
+ const contentEl = configModal.contentEl;
+ contentEl.createEl("h1", {text: "ExcaliAI"});
+
+ let textArea, promptTitle;
+
+ new ea.obsidian.Setting(contentEl)
+ .setName("Select Prompt")
+ .addDropdown(dropdown=>{
+ Object.keys(allSystemPrompts).forEach(key=>dropdown.addOption(key,key));
+ dropdown
+ .setValue(agentTask)
+ .onChange(value => {
+ dirty = true;
+ agentTask = value;
+ textArea.setValue(allSystemPrompts[value]);
+ promptTitle.setValue(value);
+ });
+ })
+
+ new ea.obsidian.Setting(contentEl)
+ .setName("Select response type")
+ .addDropdown(dropdown=>{
+ Object.keys(instructions).forEach(key=>dropdown.addOption(key,key));
+ dropdown
+ .setValue(outputType)
+ .onChange(value => {
+ dirty = true;
+ outputType = value;
+ });
+ })
+
+ contentEl.createEl("h3", {text: "Customize Prompt"});
+/* const titleSetting = new ea.obsidian.Setting(contentEl)
+ .addText(text => {
+ promptTitle = text;
+ text.inputEl.style.width = "100%";
+ text.setValue(agentTask);
+ })
+ titleSetting.nameEl.style.display = "none";
+ titleSetting.descEl.style.display = "none";
+ titleSetting.infoEl.style.display = "none";
+*/
+ const textAreaSetting = new ea.obsidian.Setting(contentEl)
+ .addTextArea(text => {
+ textArea = text;
+ text.inputEl.style.minHeight = "10em";
+ text.inputEl.style.minWidth = "400px";
+ text.inputEl.style.width = "100%";
+ text.setValue(allSystemPrompts[agentTask]);
+ text.onChange(value => {
+ // dirty = true;
+ //Needs further work
+ allSystemPrompts[agentTask] = value;
+ })
+ })
+ textAreaSetting.nameEl.style.display = "none";
+ textAreaSetting.descEl.style.display = "none";
+ textAreaSetting.infoEl.style.display = "none";
+
+ new ea.obsidian.Setting(contentEl)
+ .addButton(button =>
+ button
+ .setButtonText("Run")
+ .onClick((event)=>{
+ setTimeout(()=>{run()},500); //Obsidian crashes otherwise, likely has to do with requesting an new frame for react
+ configModal.close();
+ })
+ );
+}
+
+configModal.onClose = () => {
+ if(dirty) {
+ settings["Custom System Prompts"] = customSystemPrompts;
+ settings["Agent's Task"] = agentTask;
+ settings["Output Type"] = outputType;
+ ea.setScriptSettings(settings);
+ }
+}
+
+configModal.open();
diff --git a/ea-scripts/ExcaliAI.svg b/ea-scripts/ExcaliAI.svg
new file mode 100644
index 0000000..1425f13
--- /dev/null
+++ b/ea-scripts/ExcaliAI.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ea-scripts/directory-info.json b/ea-scripts/directory-info.json
index c68120c..23a5dea 100644
--- a/ea-scripts/directory-info.json
+++ b/ea-scripts/directory-info.json
@@ -1 +1 @@
-[{"fname":"Mindmap connector.md","mtime":1658686599427},{"fname":"Mindmap connector.svg","mtime":1658686599427},{"fname":"Add Connector Point.md","mtime":1645305706000},{"fname":"Add Connector Point.svg","mtime":1645944722000},{"fname":"Add Link to Existing File and Open.md","mtime":1647807918345},{"fname":"Add Link to Existing File and Open.svg","mtime":1645964261000},{"fname":"Add Link to New Page and Open.md","mtime":1654168862138},{"fname":"Add Link to New Page and Open.svg","mtime":1645960639000},{"fname":"Add Next Step in Process.md","mtime":1688304760357},{"fname":"Add Next Step in Process.svg","mtime":1645960639000},{"fname":"Box Each Selected Groups.md","mtime":1645305706000},{"fname":"Box Each Selected Groups.svg","mtime":1645967510000},{"fname":"Box Selected Elements.md","mtime":1645305706000},{"fname":"Box Selected Elements.svg","mtime":1645960639000},{"fname":"Change shape of selected elements.md","mtime":1652701169236},{"fname":"Change shape of selected elements.svg","mtime":1645960775000},{"fname":"Connect elements.md","mtime":1645305706000},{"fname":"Connect elements.svg","mtime":1645960639000},{"fname":"Convert freedraw to line.md","mtime":1645305706000},{"fname":"Convert freedraw to line.svg","mtime":1645960639000},{"fname":"Convert selected text elements to sticky notes.md","mtime":1670169501383},{"fname":"Convert selected text elements to sticky notes.svg","mtime":1645960639000},{"fname":"Convert text to link with folder and alias.md","mtime":1641639819000},{"fname":"Convert text to link with folder and alias.svg","mtime":1645960639000},{"fname":"Copy Selected Element Styles to Global.md","mtime":1642232088000},{"fname":"Copy Selected Element Styles to Global.svg","mtime":1645960639000},{"fname":"Create new markdown file and embed into active drawing.md","mtime":1640866935000},{"fname":"Create new markdown file and embed into active drawing.svg","mtime":1645960639000},{"fname":"Darken background color.md","mtime":1663059051059},{"fname":"Darken background color.svg","mtime":1645960639000},{"fname":"Elbow connectors.md","mtime":1671126911490},{"fname":"Elbow connectors.svg","mtime":1645960639000},{"fname":"Expand rectangles horizontally keep text centered.md","mtime":1646563692000},{"fname":"Expand rectangles horizontally keep text centered.svg","mtime":1645967510000},{"fname":"Expand rectangles horizontally.md","mtime":1644950235000},{"fname":"Expand rectangles horizontally.svg","mtime":1645967510000},{"fname":"Expand rectangles vertically keep text centered.md","mtime":1646563692000},{"fname":"Expand rectangles vertically keep text centered.svg","mtime":1645967510000},{"fname":"Expand rectangles vertically.md","mtime":1658686599427},{"fname":"Expand rectangles vertically.svg","mtime":1645967510000},{"fname":"Fixed horizontal distance between centers.md","mtime":1646743234000},{"fname":"Fixed horizontal distance between centers.svg","mtime":1645960639000},{"fname":"Fixed inner distance.md","mtime":1646743234000},{"fname":"Fixed inner distance.svg","mtime":1645960639000},{"fname":"Fixed spacing.md","mtime":1646743234000},{"fname":"Fixed spacing.svg","mtime":1645967510000},{"fname":"Fixed vertical distance between centers.md","mtime":1646743234000},{"fname":"Fixed vertical distance between centers.svg","mtime":1645967510000},{"fname":"Fixed vertical distance.md","mtime":1646743234000},{"fname":"Fixed vertical distance.svg","mtime":1645967510000},{"fname":"Lighten background color.md","mtime":1663059051059},{"fname":"Lighten background color.svg","mtime":1645959546000},{"fname":"Modify background color opacity.md","mtime":1644924415000},{"fname":"Modify background color opacity.svg","mtime":1645944722000},{"fname":"Normalize Selected Arrows.md","mtime":1670403743278},{"fname":"Normalize Selected Arrows.svg","mtime":1645960639000},{"fname":"Organic Line.md","mtime":1672920172531},{"fname":"Organic Line.svg","mtime":1645964261000},{"fname":"Organic Line Legacy.md","mtime":1690607372668},{"fname":"Organic Line Legacy.svg","mtime":1690607372668},{"fname":"README.md","mtime":1645175700000},{"fname":"Repeat Elements.md","mtime":1663059051059},{"fname":"Repeat Elements.svg","mtime":1645960639000},{"fname":"Reverse arrows.md","mtime":1645305706000},{"fname":"Reverse arrows.svg","mtime":1645960639000},{"fname":"Scribble Helper.md","mtime":1682228345043},{"fname":"Scribble Helper.svg","mtime":1645944722000},{"fname":"Select Elements of Type.md","mtime":1643464321000},{"fname":"Select Elements of Type.svg","mtime":1645960639000},{"fname":"Set Dimensions.md","mtime":1645305706000},{"fname":"Set Dimensions.svg","mtime":1645944722000},{"fname":"Set Font Family.md","mtime":1645305706000},{"fname":"Set Font Family.svg","mtime":1645944722000},{"fname":"Set Grid.md","mtime":1693725826368},{"fname":"Set Grid.svg","mtime":1645960639000},{"fname":"Set Link Alias.md","mtime":1645305706000},{"fname":"Set Link Alias.svg","mtime":1645960639000},{"fname":"Set Stroke Width of Selected Elements.md","mtime":1645305706000},{"fname":"Set Stroke Width of Selected Elements.svg","mtime":1645960639000},{"fname":"Set Text Alignment.md","mtime":1645305706000},{"fname":"Set Text Alignment.svg","mtime":1645960639000},{"fname":"Set background color of unclosed line object by adding a shadow clone.md","mtime":1681665030892},{"fname":"Set background color of unclosed line object by adding a shadow clone.svg","mtime":1645960639000},{"fname":"Split text by lines.md","mtime":1645305706000},{"fname":"Split text by lines.svg","mtime":1645944722000},{"fname":"Zoom to Fit Selected Elements.md","mtime":1640770602000},{"fname":"Zoom to Fit Selected Elements.svg","mtime":1645960639000},{"fname":"directory-info.json","mtime":1646583437000},{"fname":"index-new.md","mtime":1645986149000},{"fname":"index.md","mtime":1645175700000},{"fname":"Grid Selected Images.md","mtime":1649614401982},{"fname":"Grid Selected Images.svg","mtime":1649614401982},{"fname":"Palette loader.md","mtime":1686511890942},{"fname":"Palette loader.svg","mtime":1649614401982},{"fname":"Rename Image.md","mtime":1663678478785},{"fname":"Rename Image.svg","mtime":1663678478785},{"fname":"Text Arch.md","mtime":1664095143846},{"fname":"Text Arch.svg","mtime":1670403743278},{"fname":"Deconstruct selected elements into new drawing.md","mtime":1693733190088},{"fname":"Deconstruct selected elements into new drawing.svg","mtime":1668541145255},{"fname":"Slideshow.md","mtime":1700511998048},{"fname":"Slideshow.svg","mtime":1670017348333},{"fname":"Auto Layout.md","mtime":1670403743278},{"fname":"Auto Layout.svg","mtime":1670175947081},{"fname":"Uniform size.md","mtime":1670175947081},{"fname":"Uniform size.svg","mtime":1670175947081},{"fname":"Mindmap format.md","mtime":1684484694228},{"fname":"Mindmap format.svg","mtime":1674944958059},{"fname":"Text to Sticky Notes.md","mtime":1678537561724},{"fname":"Text to Sticky Notes.svg","mtime":1678537561724},{"fname":"Folder Note Core - Make Current Drawing a Folder.md","mtime":1678973697470},{"fname":"Folder Note Core - Make Current Drawing a Folder.svg","mtime":1678973697470},{"fname":"Invert colors.md","mtime":1678973697470},{"fname":"Invert colors.svg","mtime":1678973697470},{"fname":"Auto Draw for Pen.md","mtime":1680418321236},{"fname":"Auto Draw for Pen.svg","mtime":1680418321236},{"fname":"Hardware Eraser Support.md","mtime":1680418321236},{"fname":"Hardware Eraser Support.svg","mtime":1680418321236},{"fname":"PDF Page Text to Clipboard.md","mtime":1683984041712},{"fname":"PDF Page Text to Clipboard.svg","mtime":1680418321236},{"fname":"Excalidraw Collaboration Frame.md","mtime":1687881495985},{"fname":"Excalidraw Collaboration Frame.svg","mtime":1687881495985},{"fname":"Create DrawIO file.md","mtime":1688243858267},{"fname":"Create DrawIO file.svg","mtime":1688243858267},{"fname":"Ellipse Selected Elements.md","mtime":1690131476331},{"fname":"Ellipse Selected Elements.svg","mtime":1690131476331},{"fname":"Select Similar Elements.md","mtime":1691270949338},{"fname":"Select Similar Elements.svg","mtime":1691270949338},{"fname":"Toggle Grid.md","mtime":1692125382945},{"fname":"Toggle Grid.svg","mtime":1692124753386},{"fname":"Split Ellipse.md","mtime":1693134104356},{"fname":"Split Ellipse.svg","mtime":1693134104356},{"fname":"Text Aura.md","mtime":1693731979540},{"fname":"Text Aura.svg","mtime":1693731979540},{"fname":"Boolean Operations.md","mtime":1695746839537},{"fname":"Boolean Operations.svg","mtime":1695746839537},{"fname":"Concatenate lines.md","mtime":1696175301525},{"fname":"Concatenate lines.svg","mtime":1696175301525},{"fname":"GPT-Draw-a-UI.md","mtime":1700892334215},{"fname":"GPT-Draw-a-UI.svg","mtime":1700511998048}]
\ No newline at end of file
+[{"fname":"Mindmap connector.md","mtime":1658686599427},{"fname":"Mindmap connector.svg","mtime":1658686599427},{"fname":"Add Connector Point.md","mtime":1645305706000},{"fname":"Add Connector Point.svg","mtime":1645944722000},{"fname":"Add Link to Existing File and Open.md","mtime":1647807918345},{"fname":"Add Link to Existing File and Open.svg","mtime":1645964261000},{"fname":"Add Link to New Page and Open.md","mtime":1654168862138},{"fname":"Add Link to New Page and Open.svg","mtime":1645960639000},{"fname":"Add Next Step in Process.md","mtime":1688304760357},{"fname":"Add Next Step in Process.svg","mtime":1645960639000},{"fname":"Box Each Selected Groups.md","mtime":1645305706000},{"fname":"Box Each Selected Groups.svg","mtime":1645967510000},{"fname":"Box Selected Elements.md","mtime":1645305706000},{"fname":"Box Selected Elements.svg","mtime":1645960639000},{"fname":"Change shape of selected elements.md","mtime":1652701169236},{"fname":"Change shape of selected elements.svg","mtime":1645960775000},{"fname":"Connect elements.md","mtime":1645305706000},{"fname":"Connect elements.svg","mtime":1645960639000},{"fname":"Convert freedraw to line.md","mtime":1645305706000},{"fname":"Convert freedraw to line.svg","mtime":1645960639000},{"fname":"Convert selected text elements to sticky notes.md","mtime":1670169501383},{"fname":"Convert selected text elements to sticky notes.svg","mtime":1645960639000},{"fname":"Convert text to link with folder and alias.md","mtime":1641639819000},{"fname":"Convert text to link with folder and alias.svg","mtime":1645960639000},{"fname":"Copy Selected Element Styles to Global.md","mtime":1642232088000},{"fname":"Copy Selected Element Styles to Global.svg","mtime":1645960639000},{"fname":"Create new markdown file and embed into active drawing.md","mtime":1640866935000},{"fname":"Create new markdown file and embed into active drawing.svg","mtime":1645960639000},{"fname":"Darken background color.md","mtime":1663059051059},{"fname":"Darken background color.svg","mtime":1645960639000},{"fname":"Elbow connectors.md","mtime":1671126911490},{"fname":"Elbow connectors.svg","mtime":1645960639000},{"fname":"Expand rectangles horizontally keep text centered.md","mtime":1646563692000},{"fname":"Expand rectangles horizontally keep text centered.svg","mtime":1645967510000},{"fname":"Expand rectangles horizontally.md","mtime":1644950235000},{"fname":"Expand rectangles horizontally.svg","mtime":1645967510000},{"fname":"Expand rectangles vertically keep text centered.md","mtime":1646563692000},{"fname":"Expand rectangles vertically keep text centered.svg","mtime":1645967510000},{"fname":"Expand rectangles vertically.md","mtime":1658686599427},{"fname":"Expand rectangles vertically.svg","mtime":1645967510000},{"fname":"Fixed horizontal distance between centers.md","mtime":1646743234000},{"fname":"Fixed horizontal distance between centers.svg","mtime":1645960639000},{"fname":"Fixed inner distance.md","mtime":1646743234000},{"fname":"Fixed inner distance.svg","mtime":1645960639000},{"fname":"Fixed spacing.md","mtime":1646743234000},{"fname":"Fixed spacing.svg","mtime":1645967510000},{"fname":"Fixed vertical distance between centers.md","mtime":1646743234000},{"fname":"Fixed vertical distance between centers.svg","mtime":1645967510000},{"fname":"Fixed vertical distance.md","mtime":1646743234000},{"fname":"Fixed vertical distance.svg","mtime":1645967510000},{"fname":"Lighten background color.md","mtime":1663059051059},{"fname":"Lighten background color.svg","mtime":1645959546000},{"fname":"Modify background color opacity.md","mtime":1644924415000},{"fname":"Modify background color opacity.svg","mtime":1645944722000},{"fname":"Normalize Selected Arrows.md","mtime":1670403743278},{"fname":"Normalize Selected Arrows.svg","mtime":1645960639000},{"fname":"Organic Line.md","mtime":1672920172531},{"fname":"Organic Line.svg","mtime":1645964261000},{"fname":"Organic Line Legacy.md","mtime":1690607372668},{"fname":"Organic Line Legacy.svg","mtime":1690607372668},{"fname":"README.md","mtime":1645175700000},{"fname":"Repeat Elements.md","mtime":1663059051059},{"fname":"Repeat Elements.svg","mtime":1645960639000},{"fname":"Reverse arrows.md","mtime":1645305706000},{"fname":"Reverse arrows.svg","mtime":1645960639000},{"fname":"Scribble Helper.md","mtime":1682228345043},{"fname":"Scribble Helper.svg","mtime":1645944722000},{"fname":"Select Elements of Type.md","mtime":1643464321000},{"fname":"Select Elements of Type.svg","mtime":1645960639000},{"fname":"Set Dimensions.md","mtime":1645305706000},{"fname":"Set Dimensions.svg","mtime":1645944722000},{"fname":"Set Font Family.md","mtime":1645305706000},{"fname":"Set Font Family.svg","mtime":1645944722000},{"fname":"Set Grid.md","mtime":1693725826368},{"fname":"Set Grid.svg","mtime":1645960639000},{"fname":"Set Link Alias.md","mtime":1645305706000},{"fname":"Set Link Alias.svg","mtime":1645960639000},{"fname":"Set Stroke Width of Selected Elements.md","mtime":1645305706000},{"fname":"Set Stroke Width of Selected Elements.svg","mtime":1645960639000},{"fname":"Set Text Alignment.md","mtime":1645305706000},{"fname":"Set Text Alignment.svg","mtime":1645960639000},{"fname":"Set background color of unclosed line object by adding a shadow clone.md","mtime":1681665030892},{"fname":"Set background color of unclosed line object by adding a shadow clone.svg","mtime":1645960639000},{"fname":"Split text by lines.md","mtime":1645305706000},{"fname":"Split text by lines.svg","mtime":1645944722000},{"fname":"Zoom to Fit Selected Elements.md","mtime":1640770602000},{"fname":"Zoom to Fit Selected Elements.svg","mtime":1645960639000},{"fname":"directory-info.json","mtime":1646583437000},{"fname":"index-new.md","mtime":1645986149000},{"fname":"index.md","mtime":1645175700000},{"fname":"Grid Selected Images.md","mtime":1649614401982},{"fname":"Grid Selected Images.svg","mtime":1649614401982},{"fname":"Palette loader.md","mtime":1686511890942},{"fname":"Palette loader.svg","mtime":1649614401982},{"fname":"Rename Image.md","mtime":1663678478785},{"fname":"Rename Image.svg","mtime":1663678478785},{"fname":"Text Arch.md","mtime":1664095143846},{"fname":"Text Arch.svg","mtime":1670403743278},{"fname":"Deconstruct selected elements into new drawing.md","mtime":1693733190088},{"fname":"Deconstruct selected elements into new drawing.svg","mtime":1668541145255},{"fname":"Slideshow.md","mtime":1700511998048},{"fname":"Slideshow.svg","mtime":1670017348333},{"fname":"Auto Layout.md","mtime":1670403743278},{"fname":"Auto Layout.svg","mtime":1670175947081},{"fname":"Uniform size.md","mtime":1670175947081},{"fname":"Uniform size.svg","mtime":1670175947081},{"fname":"Mindmap format.md","mtime":1684484694228},{"fname":"Mindmap format.svg","mtime":1674944958059},{"fname":"Text to Sticky Notes.md","mtime":1678537561724},{"fname":"Text to Sticky Notes.svg","mtime":1678537561724},{"fname":"Folder Note Core - Make Current Drawing a Folder.md","mtime":1678973697470},{"fname":"Folder Note Core - Make Current Drawing a Folder.svg","mtime":1678973697470},{"fname":"Invert colors.md","mtime":1678973697470},{"fname":"Invert colors.svg","mtime":1678973697470},{"fname":"Auto Draw for Pen.md","mtime":1680418321236},{"fname":"Auto Draw for Pen.svg","mtime":1680418321236},{"fname":"Hardware Eraser Support.md","mtime":1680418321236},{"fname":"Hardware Eraser Support.svg","mtime":1680418321236},{"fname":"PDF Page Text to Clipboard.md","mtime":1683984041712},{"fname":"PDF Page Text to Clipboard.svg","mtime":1680418321236},{"fname":"Excalidraw Collaboration Frame.md","mtime":1687881495985},{"fname":"Excalidraw Collaboration Frame.svg","mtime":1687881495985},{"fname":"Create DrawIO file.md","mtime":1688243858267},{"fname":"Create DrawIO file.svg","mtime":1688243858267},{"fname":"Ellipse Selected Elements.md","mtime":1690131476331},{"fname":"Ellipse Selected Elements.svg","mtime":1690131476331},{"fname":"Select Similar Elements.md","mtime":1691270949338},{"fname":"Select Similar Elements.svg","mtime":1691270949338},{"fname":"Toggle Grid.md","mtime":1692125382945},{"fname":"Toggle Grid.svg","mtime":1692124753386},{"fname":"Split Ellipse.md","mtime":1693134104356},{"fname":"Split Ellipse.svg","mtime":1693134104356},{"fname":"Text Aura.md","mtime":1693731979540},{"fname":"Text Aura.svg","mtime":1693731979540},{"fname":"Boolean Operations.md","mtime":1695746839537},{"fname":"Boolean Operations.svg","mtime":1695746839537},{"fname":"Concatenate lines.md","mtime":1696175301525},{"fname":"Concatenate lines.svg","mtime":1696175301525},{"fname":"GPT-Draw-a-UI.md","mtime":1700892334215},{"fname":"GPT-Draw-a-UI.svg","mtime":1700511998048},{"fname":"ExcaliAI.md","mtime":1701011028767},{"fname":"ExcaliAI.svg","mtime":1701011028767}]
\ No newline at end of file
diff --git a/ea-scripts/index-new.md b/ea-scripts/index-new.md
index 9eb6dc5..d9a9028 100644
--- a/ea-scripts/index-new.md
+++ b/ea-scripts/index-new.md
@@ -115,6 +115,7 @@ I would love to include your contribution in the script library. If you have a s
|
This script arranges selected images into compact grid view, removing gaps in-between, resizing when necessary and breaking into multiple rows/columns.