From 1369d09a545929168b2101e7b6ffeaf486a9a9e1 Mon Sep 17 00:00:00 2001 From: Cobblestone Date: Thu, 6 Aug 2026 23:35:07 -0400 Subject: [PATCH 01/32] literally the whole feature --- src/app.css | 14 +- src/lib/components/TopUI.svelte | 2 - .../components/modals/InsertImageModal.svelte | 135 ++++++++++++++++++ src/lib/components/modals/KeybindModal.svelte | 1 + src/lib/components/toolbar/Toolbar.svelte | 11 ++ src/routes/+page.svelte | 3 - 6 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 src/lib/components/modals/InsertImageModal.svelte diff --git a/src/app.css b/src/app.css index 187fd53..3b065dc 100644 --- a/src/app.css +++ b/src/app.css @@ -63,18 +63,18 @@ strong { } .clickEvent { - background-color: #3c3c40aa; - border-bottom: solid #ff5555 2px; - padding-top: 2px; - padding-bottom: 2px; + background-color: #45454e80; + border: solid #45454e 1px; + border-bottom: solid #9448e0 2px; + padding-bottom: 4px; z-index: 10; --custom-source-align: top; } .hoverEvent { - background-color: #3c3c40aa; - border-bottom: solid #ffff55 2px; - padding-top: 4px; + background-color: #45454e80; + border: solid #45454e 1px; + border-bottom: solid #e57e2b 2px; z-index: 10; --custom-source-align: top; } diff --git a/src/lib/components/TopUI.svelte b/src/lib/components/TopUI.svelte index 0b11d36..8ff1b7d 100644 --- a/src/lib/components/TopUI.svelte +++ b/src/lib/components/TopUI.svelte @@ -28,10 +28,8 @@ function importToEditor() { const jsonContent = snbtToDocument(convertToTextOrEmpty(importText)); - console.log("importing to editor", jsonContent); editor?.commands.setContent(jsonContent, { emitUpdate: true }); importDialog?.close(); - console.log("imported to editor"); } diff --git a/src/lib/components/modals/InsertImageModal.svelte b/src/lib/components/modals/InsertImageModal.svelte new file mode 100644 index 0000000..97c58a6 --- /dev/null +++ b/src/lib/components/modals/InsertImageModal.svelte @@ -0,0 +1,135 @@ + + + e.preventDefault()} /> + + +
+

A few things to note:

+
    +
  • Total transparency is represented by empty space
  • +
  • Non-zero alpha pixels will be converted to full alpha.
  • +
  • Large or complex images will produce a very long output
  • +
  • This tool makes no attempt to resize images
  • +
+ {#if !files} + + {:else} +

Selected file: {files[0].name}

+
+ + +
+ {/if} +
+
diff --git a/src/lib/components/modals/KeybindModal.svelte b/src/lib/components/modals/KeybindModal.svelte index 0569e23..ef8aa14 100644 --- a/src/lib/components/modals/KeybindModal.svelte +++ b/src/lib/components/modals/KeybindModal.svelte @@ -31,6 +31,7 @@ { keys: [modifierKey, "Shift", "I"], action: "Import Menu" }, { keys: [modifierKey, "Shift", "E"], action: "Export Menu" }, { keys: [modifierKey, "Shift", "L"], action: "Load a snapshot" }, + { keys: [modifierKey, "Shift", "M"], action: "Load an image (with block characters)" }, ]; diff --git a/src/lib/components/toolbar/Toolbar.svelte b/src/lib/components/toolbar/Toolbar.svelte index 482dda0..cd95260 100644 --- a/src/lib/components/toolbar/Toolbar.svelte +++ b/src/lib/components/toolbar/Toolbar.svelte @@ -14,6 +14,7 @@ import IconHoverEvent from "~icons/tabler/pointer"; import IconSquare from "~icons/tabler/square-filled"; import IconHollow from "~icons/tabler/square-x"; + import IconUploadImage from "~icons/tabler/photo-scan"; import Modal from "../Modal.svelte"; import TextStyleButtons from "./TextStyleButtons.svelte"; import ToolbarButton from "./ToolbarButton.svelte"; @@ -48,6 +49,7 @@ let customDialog: Modal = $state()!; let unicodeSelectorDialog: Modal = $state()!; + let insertImageDialog: Modal = $state()!; function toTitleCase(str: string) { return str.replace( @@ -260,6 +262,11 @@
+ + + -
- - -
- - {/each} - + {/each} + + diff --git a/src/lib/components/text/MiniRenderer.svelte b/src/lib/components/text/MiniRenderer.svelte index f050c13..277cbe6 100644 --- a/src/lib/components/text/MiniRenderer.svelte +++ b/src/lib/components/text/MiniRenderer.svelte @@ -1,4 +1,5 @@ From d43d80da835a58ebc52ac0a55ecc76aa4b54cecf Mon Sep 17 00:00:00 2001 From: Silabear <56885288+Silabear@users.noreply.github.com> Date: Mon, 10 Aug 2026 23:27:30 +0100 Subject: [PATCH 05/32] add option to export only selected text --- src/app.css | 12 ++ .../modals/ExportSelectionModal.svelte | 115 ++++++++++++++++++ .../modals/topbar/ExportModal.svelte | 2 +- src/lib/components/text/MiniRenderer.svelte | 5 + src/lib/tiptap/extensions/ExportButton.ts | 73 +++++++++++ src/routes/+page.svelte | 25 ++++ 6 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 src/lib/components/modals/ExportSelectionModal.svelte create mode 100644 src/lib/tiptap/extensions/ExportButton.ts diff --git a/src/app.css b/src/app.css index 187fd53..f5fd4f5 100644 --- a/src/app.css +++ b/src/app.css @@ -54,6 +54,13 @@ strong { @apply text-xl; } +.tiptap-minirenderer { + @apply h-full w-full p-2; + @apply focus:outline-none; + font-family: Minecraft; + @apply text-xl; +} + .tiptap p.is-editor-empty:first-child::before { color: #7f7f7f; content: attr(data-placeholder); @@ -87,6 +94,11 @@ strong { filter: blur(3px); } +.export-button { + @apply items-center p-1 px-1.5 bg-zinc-900 text-zinc-200 hover:text-white rounded-md font-lexend text-xs h-6; + @apply w-0 invisible md:w-fit md:visible; /* hide on mobile */ +} + /* Useful */ .nomob { diff --git a/src/lib/components/modals/ExportSelectionModal.svelte b/src/lib/components/modals/ExportSelectionModal.svelte new file mode 100644 index 0000000..95c4452 --- /dev/null +++ b/src/lib/components/modals/ExportSelectionModal.svelte @@ -0,0 +1,115 @@ + + + +
+ {#key value} +

Selected text:

+
+ +
+ +

Output:

+ + {#if $appSettings.syntaxHighlight} + + {:else} +
+                {editor ? convert(
+                    value,
+                    shouldOptimise,
+                    "standard",
+                    jsonOutput
+                ) : "Loading..."}
+            
+ {/if} +
+ +
+ + +
+ + + + {/key} +
+
diff --git a/src/lib/components/modals/topbar/ExportModal.svelte b/src/lib/components/modals/topbar/ExportModal.svelte index 7cfc145..e42c976 100644 --- a/src/lib/components/modals/topbar/ExportModal.svelte +++ b/src/lib/components/modals/topbar/ExportModal.svelte @@ -7,6 +7,7 @@ import { Highlight } from "svelte-highlight"; import typescript from "svelte-highlight/languages/typescript"; import { appSettings } from "$lib/settings"; + import { json } from "svelte-highlight/languages"; // Icons import IconItem from "~icons/tabler/swords"; @@ -17,7 +18,6 @@ import IconCopy from "~icons/tabler/copy"; import IconCheck from "~icons/tabler/check"; import IconDownload from "~icons/tabler/download"; - import { json } from "svelte-highlight/languages"; // UI let showOutput: string | null = $state(null); diff --git a/src/lib/components/text/MiniRenderer.svelte b/src/lib/components/text/MiniRenderer.svelte index f050c13..e796f5f 100644 --- a/src/lib/components/text/MiniRenderer.svelte +++ b/src/lib/components/text/MiniRenderer.svelte @@ -58,6 +58,11 @@ FontsExtension, ], content: value, + editorProps: { + attributes: { + class: 'tiptap-minirenderer', + }, + }, }).setEditable(false); }); diff --git a/src/lib/tiptap/extensions/ExportButton.ts b/src/lib/tiptap/extensions/ExportButton.ts new file mode 100644 index 0000000..6d8ca1e --- /dev/null +++ b/src/lib/tiptap/extensions/ExportButton.ts @@ -0,0 +1,73 @@ +import { Extension } from '@tiptap/core'; +import { Plugin, PluginKey } from '@tiptap/pm/state'; +import { EditorView } from '@tiptap/pm/view'; + +// Define the shape of configuration options for type safety +export interface ExportButtonOptions { + onClick: () => void; +} + +export const ExportButtonExtension = Extension.create({ + name: 'ExportButton', + + addOptions() { + return { + onClick: () => { }, + }; + }, + + addProseMirrorPlugins() { + const { onClick } = this.options; + let buttonDom: HTMLButtonElement | null = null; + + return [ + new Plugin({ + key: new PluginKey('ExportButton'), + view(editorView: EditorView) { + return { + update(view: EditorView) { + const { state } = view; + const { selection } = state; + + const parentNode = view.dom.parentNode as HTMLElement | null; + if (!parentNode) return; + + if ((selection.empty || !view.hasFocus()) && buttonDom) { + buttonDom.style.display = 'none'; + return; + } + + if (!buttonDom) { + buttonDom = document.createElement('button'); + buttonDom.innerText = '↪ Export this'; + buttonDom.className = 'export-button'; + buttonDom.style.position = 'absolute'; + buttonDom.style.zIndex = '10'; + + buttonDom.addEventListener('mousedown', (e: MouseEvent) => e.preventDefault()); + buttonDom.addEventListener('click', onClick); + + parentNode.appendChild(buttonDom); + } + + const coords = view.coordsAtPos(selection.to); + const top = coords.top + 19; + const left = coords.left - 90; + + buttonDom.style.display = 'block'; + buttonDom.style.top = `${top}px`; + buttonDom.style.left = `${left + 5}px`; + }, + + destroy() { + if (buttonDom) { + buttonDom.remove(); + buttonDom = null; + } + } + }; + }, + }), + ]; + }, +}); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 53a6d7c..457c63b 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -36,6 +36,7 @@ import TopUI from "$lib/components/TopUI.svelte"; import { onDestroy, onMount } from "svelte"; import { appSettings } from "$lib/settings"; + import { ExportButtonExtension } from "$lib/tiptap/extensions/ExportButton"; let tiptapJSON: JSONContent = $state()!; @@ -49,6 +50,8 @@ let recentlyCopied = $state(false); let finalOutput = $derived(editor ? convert(tiptapJSON, shouldOptimise) : "Loading..."); + + let exportSelectionDialog: Modal = $state()!; async function loadData() { if (localStorage.getItem("content")) { @@ -113,6 +116,12 @@ placeholder: "Write text here, style it with the options above, and the output text components will appear at the bottom. You can also import text components with the Import button above!", }), + ExportButtonExtension.configure({ + onClick: () => { + exportSelectionDialog.open() + }, + }), + ], onTransaction: ({ editor: newEditor }) => { editor = undefined; @@ -122,6 +131,18 @@ tiptapJSON = editor.getJSON(); debounce(saveContent, 1000)(); }, + // onSelectionUpdate: ({ editor }) => { + // const { state } = editor; + // const { from, to, empty } = state.selection; + + // // Do nothing if it's just a cursor click without a highlighted range + // if (empty) return; + + // // Extract the selection slice as JSON + // const selectionJson = state.doc.slice(from, to).content.toJSON(); + + // console.log("Selected content as JSON:", selectionJson); + // } }); appSettings.subscribe(() => { @@ -390,3 +411,7 @@ {#await import("$lib/components/modals/topbar/ExportModal.svelte") then modal} {/await} + +{#await import("$lib/components/modals/ExportSelectionModal.svelte") then modal} + +{/await} From 7d5d82a7bee27bd94c9e4a5bf550d242e1768d7f Mon Sep 17 00:00:00 2001 From: Silabear <56885288+Silabear@users.noreply.github.com> Date: Mon, 10 Aug 2026 23:33:11 +0100 Subject: [PATCH 06/32] add settings option to hide export this button --- src/lib/components/modals/topbar/SettingsModal.svelte | 9 +++++++++ src/lib/settings.ts | 2 ++ src/lib/tiptap/extensions/ExportButton.ts | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/src/lib/components/modals/topbar/SettingsModal.svelte b/src/lib/components/modals/topbar/SettingsModal.svelte index a655ae2..6f0d927 100644 --- a/src/lib/components/modals/topbar/SettingsModal.svelte +++ b/src/lib/components/modals/topbar/SettingsModal.svelte @@ -42,6 +42,15 @@ +
+ + +
+
+

Note: the player must have permission to run the command!

@@ -40,7 +40,7 @@

Command:

Note: the player must have permission to run the command!

@@ -48,21 +48,21 @@

Text to copy:

{:else if clickEventType == "change_page"}

Page to go to:

{:else if clickEventType == "open_dialog"}

Dialog ID:

{/if} diff --git a/src/lib/components/modals/CustomSourceModal.svelte b/src/lib/components/modals/CustomSourceModal.svelte index 63b9aa8..59a6540 100644 --- a/src/lib/components/modals/CustomSourceModal.svelte +++ b/src/lib/components/modals/CustomSourceModal.svelte @@ -122,7 +122,7 @@ {/if}
{:else} - @@ -136,14 +136,14 @@

Translate Key

Fallback

@@ -198,13 +198,13 @@

Objective

Player, Fake Player, or Entity

@@ -225,7 +225,7 @@ {:else if customType === "nbt"}

NBT Source type

- @@ -234,14 +234,14 @@

Storage ID

NBT path

@@ -270,14 +270,14 @@

Entity

NBT path

@@ -306,14 +306,14 @@

Entity

NBT path

@@ -343,7 +343,7 @@

Keybind

{/if} diff --git a/src/lib/components/modals/topbar/SettingsModal.svelte b/src/lib/components/modals/topbar/SettingsModal.svelte index 6f0d927..6fb412a 100644 --- a/src/lib/components/modals/topbar/SettingsModal.svelte +++ b/src/lib/components/modals/topbar/SettingsModal.svelte @@ -55,7 +55,7 @@ Date: Sun, 16 Aug 2026 00:12:43 +0100 Subject: [PATCH 27/32] update main image on readme.mc --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb0bc8c..33ea890 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This is an online and open source Minecraft Text Component WYSIWYG editor, updat Check it out at: https://text.datapackhub.net/ -![image](https://github.com/user-attachments/assets/2c16718a-c8dd-49cc-9eb5-90167834e76e) +image :eyes: To prove it works, the generated text from the image above is below: From 82089126314e411081813828ddc781ea214c6ae8 Mon Sep 17 00:00:00 2001 From: Silabear <56885288+Silabear@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:39:37 +0100 Subject: [PATCH 28/32] fix tests --- package-lock.json | 37 +++++++++++++++++++ package.json | 1 + src/lib/text/nbt/export.ts | 6 +-- .../exporting/translating_mc_json.spec.ts | 10 ++--- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04ca452..814dcad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "@types/node": "^26.1.2", "@types/sortablejs": "^1.15.9", "@vitest/coverage-v8": "4.1.10", + "@vitest/ui": "^4.1.10", "file-type": "^22.0.1", "oxlint": "^1.77.0", "prettier": "^3.9.6", @@ -1936,6 +1937,28 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/ui": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.10.tgz", + "integrity": "sha512-EOUqfXHTXtpSHsyLHH40ts3Ue+hRhSGwzwzMlK0dTEOLSDYyOXLyr5JDGmHQWhN2DYI30gw6dVx3cdgM9FZl+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.10", + "fflate": "^0.8.2", + "flatted": "^3.4.2", + "pathe": "^2.0.3", + "sirv": "^3.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "4.1.10" + } + }, "node_modules/@vitest/utils": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", @@ -2201,6 +2224,13 @@ } } }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "dev": true, + "license": "MIT" + }, "node_modules/file-type": { "version": "22.0.1", "resolved": "https://registry.npmjs.org/file-type/-/file-type-22.0.1.tgz", @@ -2220,6 +2250,13 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", diff --git a/package.json b/package.json index d57dfa8..5057008 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@types/node": "^26.1.2", "@types/sortablejs": "^1.15.9", "@vitest/coverage-v8": "4.1.10", + "@vitest/ui": "^4.1.10", "file-type": "^22.0.1", "oxlint": "^1.77.0", "prettier": "^3.9.6", diff --git a/src/lib/text/nbt/export.ts b/src/lib/text/nbt/export.ts index 4d6236f..1de6a97 100644 --- a/src/lib/text/nbt/export.ts +++ b/src/lib/text/nbt/export.ts @@ -222,11 +222,11 @@ export function translateJSON(json: JSONContent, options: TranslateOptions): str if (data.length === 2 && data[0] == "") { return JSON.stringify(data[1]); + } else if (data.length === 1) { + return JSON.stringify(data[0]) } - let finalResult = JSON.stringify(data); - - return finalResult; + return JSON.stringify(data); } else if (options.exportType === "item_lore") { let data: (StringyMCText[] | StringyMCText)[] = []; diff --git a/src/tests/unit/exporting/translating_mc_json.spec.ts b/src/tests/unit/exporting/translating_mc_json.spec.ts index f00f71d..bfdb14b 100644 --- a/src/tests/unit/exporting/translating_mc_json.spec.ts +++ b/src/tests/unit/exporting/translating_mc_json.spec.ts @@ -23,7 +23,7 @@ it("should return a basic color string", async () => { exportType: "standard", optimise: true, }); - expect(JSON.parse(snbt)).toEqual(["", { text: "test", color: "dark_red" }]); + expect(JSON.parse(snbt)).toEqual({ text: "test", color: "dark_red" }); }); const baseOptions: TranslateOptions = { @@ -140,10 +140,10 @@ it("uses older format output when exportVersion=old", async () => { const result = translateJSON(json, { ...baseOptions, }); - expect(JSON.parse(result)).toHaveProperty("[1].clickEvent"); - expect(JSON.parse(result)).not.toHaveProperty("[1].click_event"); - expect(JSON.parse(result)).toHaveProperty("[1].hoverEvent"); - expect(JSON.parse(result)).not.toHaveProperty("[1].hover_event"); + expect(JSON.parse(result)).toHaveProperty("clickEvent"); + expect(JSON.parse(result)).not.toHaveProperty("click_event"); + expect(JSON.parse(result)).toHaveProperty("hoverEvent"); + expect(JSON.parse(result)).not.toHaveProperty("hover_event"); }); it("handles exportType=item_lore", () => { From 2e8162d8a4f2f62291637111a1eae4bb90ddd8ab Mon Sep 17 00:00:00 2001 From: Silabear <56885288+Silabear@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:10:55 +0100 Subject: [PATCH 29/32] only show welcome screen once, unless needed --- src/lib/components/WelcomeScreen.svelte | 14 +++++++++++++- src/routes/+page.svelte | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lib/components/WelcomeScreen.svelte b/src/lib/components/WelcomeScreen.svelte index 5a8052f..f681681 100644 --- a/src/lib/components/WelcomeScreen.svelte +++ b/src/lib/components/WelcomeScreen.svelte @@ -1,10 +1,12 @@ diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 336adc6..4c15cbe 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -55,7 +55,7 @@ let exportSelectionDialog: Modal = $state()!; - let showWelcomeScreen: boolean = $state(true); + let showWelcomeScreen: boolean = $state(false); async function loadData() { if (localStorage.getItem("content")) { From c028c60276b0cb9db0471ce6ac96e26be1c82251 Mon Sep 17 00:00:00 2001 From: Silabear <56885288+Silabear@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:20:06 +0100 Subject: [PATCH 30/32] wording changes + style fix --- src/app.css | 2 +- src/lib/components/WelcomeScreen.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.css b/src/app.css index 980a065..8a5ff9e 100644 --- a/src/app.css +++ b/src/app.css @@ -125,7 +125,7 @@ strong { } .link { - @apply font-bold underline + @apply font-bold underline; } .tippy-box[data-theme~="dph"] { diff --git a/src/lib/components/WelcomeScreen.svelte b/src/lib/components/WelcomeScreen.svelte index f681681..2645fa1 100644 --- a/src/lib/components/WelcomeScreen.svelte +++ b/src/lib/components/WelcomeScreen.svelte @@ -66,7 +66,7 @@
Gradient - Easily add gradients to text, we'll do the rest. + Add gradients to text, while keeping styles and interactivity.
From cfd7ae5c221cc3d87b045f8507ccb444287e74b8 Mon Sep 17 00:00:00 2001 From: Silabear <56885288+Silabear@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:22:18 +0100 Subject: [PATCH 31/32] click out of the welcome modal --- src/lib/components/WelcomeScreen.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/WelcomeScreen.svelte b/src/lib/components/WelcomeScreen.svelte index 2645fa1..edfa677 100644 --- a/src/lib/components/WelcomeScreen.svelte +++ b/src/lib/components/WelcomeScreen.svelte @@ -36,7 +36,7 @@ style="font-family: Lexend"> From 24d35cd6cb78ddc67c596bef28794ade0d10fd7a Mon Sep 17 00:00:00 2001 From: Silabear <56885288+Silabear@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:43:00 +0100 Subject: [PATCH 32/32] fix tests --- src/lib/components/WelcomeScreen.svelte | 3 +-- src/lib/globals.ts | 1 + src/tests/e2e/basic.test.ts | 8 ++++++++ src/tests/e2e/modals.test.ts | 8 ++++++++ 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/lib/globals.ts diff --git a/src/lib/components/WelcomeScreen.svelte b/src/lib/components/WelcomeScreen.svelte index edfa677..c86839e 100644 --- a/src/lib/components/WelcomeScreen.svelte +++ b/src/lib/components/WelcomeScreen.svelte @@ -1,12 +1,11 @@