diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c4e5a00 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,33 @@ +# .github/workflows/ci.yml +name: Automated Tests + +on: + pull_request: + push: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + + - name: Install dependencies + run: npm install + + - name: Install Playwright dependencies + run: npx playwright install + + - name: Run tests + run: npm test diff --git a/bun.lock b/bun.lock index 2052dc2..13dbe24 100644 --- a/bun.lock +++ b/bun.lock @@ -4,10 +4,10 @@ "": { "name": "tools", "dependencies": { - "@tiptap/core": "^2.23.0", - "@tiptap/extension-placeholder": "^2.23.0", - "@tiptap/pm": "^2.23.0", - "@tiptap/starter-kit": "^2.23.0", + "@tiptap/core": "^2.23.1", + "@tiptap/extension-placeholder": "^2.23.1", + "@tiptap/pm": "^2.23.1", + "@tiptap/starter-kit": "^2.23.1", "idb": "^8.0.3", "svelte-awesome-color-picker": "^4.0.2", "tippy.js": "^6.3.7", @@ -15,24 +15,24 @@ }, "devDependencies": { "@iconify-json/tabler": "^1.2.19", - "@playwright/test": "^1.49.1", + "@playwright/test": "^1.53.2", "@sveltejs/adapter-auto": "^6.0.1", "@sveltejs/kit": "^2.22.2", "@sveltejs/vite-plugin-svelte": "^5.1.0", "@tailwindcss/vite": "^4.1.11", "@testing-library/jest-dom": "^6.6.3", "@testing-library/svelte": "^5.2.8", - "@tiptap/extension-color": "^2.23.0", - "@tiptap/extension-font-family": "^2.23.0", - "@tiptap/extension-text-style": "^2.23.0", - "@tiptap/extension-underline": "^2.23.0", - "@types/node": "^24.0.4", + "@tiptap/extension-color": "^2.23.1", + "@tiptap/extension-font-family": "^2.23.1", + "@tiptap/extension-text-style": "^2.23.1", + "@tiptap/extension-underline": "^2.23.1", + "@types/node": "^24.0.8", "file-type": "^21.0.0", "jsdom": "^26.1.0", - "prettier": "^3.6.1", + "prettier": "^3.6.2", "prettier-plugin-svelte": "^3.4.0", "prettier-plugin-tailwindcss": "^0.6.13", - "svelte": "^5.34.8", + "svelte": "^5.34.9", "svelte-check": "^4.2.2", "tailwindcss": "^4.1.11", "tslib": "^2.8.1", diff --git a/playwright.config.ts b/playwright.config.ts index 7279878..4928370 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -5,5 +5,5 @@ export default defineConfig({ command: "npm run build && npm run preview", port: 4173, }, - testDir: "src/e2e", + testDir: "src/tests/e2e", }); diff --git a/src/app.html b/src/app.html index 324b50f..0ebfded 100644 --- a/src/app.html +++ b/src/app.html @@ -2,8 +2,12 @@
- - + + + + + + + import IconTick from "~icons/tabler/check"; + + let { value = $bindable(), label }: { value: boolean; label: string } = + $props(); + + +For tellraw commands (send to chat):
+As {outputVersion == "new" ? " " : "JSON "}text components:
/tellraw @s {editor
- ? convert(editor.getJSON(), "standard", outputVersion, shouldOptimise)
+
+ {editor
+ ? convert(editor.getJSON(), "standard", outputVersion, shouldOptimise, exportAsJSON)
: "Loading..."}
[lore={editor
+ >[lore={editor
? convert(
- editor.getJSON(),
- "item_lore",
- outputVersion,
- shouldOptimise,
- )
- : "Loading..."}]
-
- {:else}
- [lore={editor
- ? `'${translateJSON(editor.getJSON(), {
- exportType: "item_lore",
- exportVersion: outputVersion,
- optimise: shouldOptimise,
- })}`
- : "Loading..."}]
+ editor.getJSON(),
+ "item_lore",
+ outputVersion,
+ shouldOptimise,
+ exportAsJSON
+ )
+ : "Loading..."}]
- {/if}
As a MOTD:
@@ -103,7 +115,7 @@As JSON:
+{getTextComponentCount()} components
+•
+- Click to change output settings: + click to change output settings:
+ +•
+ + {/if} @@ -719,8 +728,6 @@ bind:outputDialog bind:outputVersion {editor} - {indent} - {indentSize} {recentlyCopied} /> {/await} diff --git a/src/e2e/basic.test.ts b/src/tests/e2e/basic.test.ts similarity index 97% rename from src/e2e/basic.test.ts rename to src/tests/e2e/basic.test.ts index 2cd5d08..0dd8365 100644 --- a/src/e2e/basic.test.ts +++ b/src/tests/e2e/basic.test.ts @@ -1,4 +1,3 @@ -import { defaultColorReverseLUT } from "$lib/text/general"; import { expect, test } from "@playwright/test"; test.beforeEach(async ({ page }) => { diff --git a/src/tests/data/bad/broken.snbt b/src/tests/unit/data/bad/broken.snbt similarity index 100% rename from src/tests/data/bad/broken.snbt rename to src/tests/unit/data/bad/broken.snbt diff --git a/src/tests/data/bad/random_text.snbt b/src/tests/unit/data/bad/random_text.snbt similarity index 100% rename from src/tests/data/bad/random_text.snbt rename to src/tests/unit/data/bad/random_text.snbt diff --git a/src/tests/data/clean/json/basic_color_tiptap.json b/src/tests/unit/data/clean/json/basic_color_tiptap.json similarity index 100% rename from src/tests/data/clean/json/basic_color_tiptap.json rename to src/tests/unit/data/clean/json/basic_color_tiptap.json diff --git a/src/tests/data/clean/json/interactives_tiptap.json b/src/tests/unit/data/clean/json/interactives_tiptap.json similarity index 100% rename from src/tests/data/clean/json/interactives_tiptap.json rename to src/tests/unit/data/clean/json/interactives_tiptap.json diff --git a/src/tests/data/clean/json/simple_text_tiptap.json b/src/tests/unit/data/clean/json/simple_text_tiptap.json similarity index 100% rename from src/tests/data/clean/json/simple_text_tiptap.json rename to src/tests/unit/data/clean/json/simple_text_tiptap.json diff --git a/src/tests/data/clean/json/simple_unicode_tiptap.json b/src/tests/unit/data/clean/json/simple_unicode_tiptap.json similarity index 100% rename from src/tests/data/clean/json/simple_unicode_tiptap.json rename to src/tests/unit/data/clean/json/simple_unicode_tiptap.json diff --git a/src/tests/data/clean/snbt/all_text_style_marks.snbt b/src/tests/unit/data/clean/snbt/all_text_style_marks.snbt similarity index 100% rename from src/tests/data/clean/snbt/all_text_style_marks.snbt rename to src/tests/unit/data/clean/snbt/all_text_style_marks.snbt diff --git a/src/tests/data/clean/snbt/basic_color.snbt b/src/tests/unit/data/clean/snbt/basic_color.snbt similarity index 100% rename from src/tests/data/clean/snbt/basic_color.snbt rename to src/tests/unit/data/clean/snbt/basic_color.snbt diff --git a/src/tests/data/clean/snbt/extra_test.snbt b/src/tests/unit/data/clean/snbt/extra_test.snbt similarity index 100% rename from src/tests/data/clean/snbt/extra_test.snbt rename to src/tests/unit/data/clean/snbt/extra_test.snbt diff --git a/src/tests/data/clean/snbt/fonts.snbt b/src/tests/unit/data/clean/snbt/fonts.snbt similarity index 100% rename from src/tests/data/clean/snbt/fonts.snbt rename to src/tests/unit/data/clean/snbt/fonts.snbt diff --git a/src/tests/data/clean/snbt/hex_color.snbt b/src/tests/unit/data/clean/snbt/hex_color.snbt similarity index 100% rename from src/tests/data/clean/snbt/hex_color.snbt rename to src/tests/unit/data/clean/snbt/hex_color.snbt diff --git a/src/tests/data/clean/snbt/single_component.snbt b/src/tests/unit/data/clean/snbt/single_component.snbt similarity index 100% rename from src/tests/data/clean/snbt/single_component.snbt rename to src/tests/unit/data/clean/snbt/single_component.snbt diff --git a/src/tests/data/clean/snbt/source.snbt b/src/tests/unit/data/clean/snbt/source.snbt similarity index 100% rename from src/tests/data/clean/snbt/source.snbt rename to src/tests/unit/data/clean/snbt/source.snbt diff --git a/src/tests/data/clean/snbt/unicode.snbt b/src/tests/unit/data/clean/snbt/unicode.snbt similarity index 100% rename from src/tests/data/clean/snbt/unicode.snbt rename to src/tests/unit/data/clean/snbt/unicode.snbt diff --git a/src/tests/optimising_mc_json.spec.ts b/src/tests/unit/optimising_mc_json.spec.ts similarity index 100% rename from src/tests/optimising_mc_json.spec.ts rename to src/tests/unit/optimising_mc_json.spec.ts diff --git a/src/tests/snbt_importing.spec.ts b/src/tests/unit/snbt_importing.spec.ts similarity index 100% rename from src/tests/snbt_importing.spec.ts rename to src/tests/unit/snbt_importing.spec.ts diff --git a/src/tests/test_utils.ts b/src/tests/unit/test_utils.ts similarity index 100% rename from src/tests/test_utils.ts rename to src/tests/unit/test_utils.ts diff --git a/src/tests/translating_mc_json.spec.ts b/src/tests/unit/translating_mc_json.spec.ts similarity index 99% rename from src/tests/translating_mc_json.spec.ts rename to src/tests/unit/translating_mc_json.spec.ts index b20ea03..f9933cb 100644 --- a/src/tests/translating_mc_json.spec.ts +++ b/src/tests/unit/translating_mc_json.spec.ts @@ -27,7 +27,7 @@ describe("translate", () => { exportType: "standard", optimise: true, }); - expect(JSON.parse(snbt)).toEqual(["", { text: "test", color: "#AA0000" }]); + expect(JSON.parse(snbt)).toEqual(["", { text: "test", color: "dark_red" }]); }); const baseOptions: TranslateOptions = { diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100644 index 0000000..1d4f105 Binary files /dev/null and b/static/apple-touch-icon.png differ diff --git a/static/dph.png b/static/dph.png deleted file mode 100644 index a269515..0000000 Binary files a/static/dph.png and /dev/null differ diff --git a/static/favicon-96x96.png b/static/favicon-96x96.png new file mode 100644 index 0000000..c9f60e6 Binary files /dev/null and b/static/favicon-96x96.png differ diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..0cb0d4d Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/favicon.svg b/static/favicon.svg new file mode 100644 index 0000000..da7c2e1 --- /dev/null +++ b/static/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/static/site.webmanifest b/static/site.webmanifest new file mode 100644 index 0000000..5ff237d --- /dev/null +++ b/static/site.webmanifest @@ -0,0 +1,24 @@ +{ + "$schema": "https://json.schemastore.org/web-manifest-combined.json", + "name": "Datapack Hub Text Editor", + "short_name": "Text Editor", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "start_url": ".", + "description": "Minecraft Tellraw Editor for Java Edition. Create colored Minecraft /tellraw, /title, and items with our easy to use editor (especially for datapacks).", + "theme_color": "#ff631a", + "background_color": "#27272a", + "display": "standalone" +} diff --git a/static/web-app-manifest-192x192.png b/static/web-app-manifest-192x192.png new file mode 100644 index 0000000..ec88993 Binary files /dev/null and b/static/web-app-manifest-192x192.png differ diff --git a/static/web-app-manifest-512x512.png b/static/web-app-manifest-512x512.png new file mode 100644 index 0000000..4348216 Binary files /dev/null and b/static/web-app-manifest-512x512.png differ diff --git a/vite.config.ts b/vite.config.ts index 1e0dbad..f43b6dd 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -15,7 +15,7 @@ export default defineConfig({ name: "client", environment: "jsdom", clearMocks: true, - include: ["src/**/*.svelte.{test,spec}.{js,ts}"], + include: ["src/tests/unit/*.svelte.{test,spec}.{js,ts}"], exclude: ["src/lib/server/**"], setupFiles: ["./vitest-setup-client.ts"], }, @@ -25,7 +25,7 @@ export default defineConfig({ test: { name: "server", environment: "node", - include: ["src/**/*.{test,spec}.{js,ts}"], + include: ["src/tests/unit/*.{test,spec}.{js,ts}"], exclude: ["src/**/*.svelte.{test,spec}.{js,ts}"], }, },