From 88398334fed38818c6af5cb554ff676df151d85f Mon Sep 17 00:00:00 2001 From: mStar Date: Mon, 7 Jul 2025 21:48:39 +0200 Subject: [PATCH] JS frontend stuff Move old ember frontend to properly named folder Add vue based new frontend --- .../.editorconfig | 0 .../.ember-cli | 0 .../.eslintignore | 0 .../.eslintrc.js | 0 .../.github/workflows/ci.yml | 0 .../.gitignore | 0 .../.prettierignore | 0 .../.prettierrc.js | 0 .../.stylelintignore | 0 .../.stylelintrc.js | 0 .../.template-lintrc.js | 0 .../.watchmanconfig | 0 .../README.md | 0 .../TODOS.md | 0 .../app/app.ts | 0 .../app/components/.gitkeep | 0 .../app/components/account/full.hbs | 0 .../app/components/account/header.hbs | 0 .../account/header/profilepicture.hbs | 0 .../app/components/account/overview.hbs | 0 .../app/components/auth.hbs | 0 .../app/components/auth.ts | 0 .../app/components/auth/login.hbs | 0 .../app/components/auth/login.ts | 0 .../auth/post-registration-form.hbs | 0 .../components/auth/post-registration-form.ts | 0 .../app/components/auth/register-start.hbs | 0 .../app/components/auth/register-start.ts | 0 .../app/components/global/general-sidebar.hbs | 0 .../app/components/note.hbs | 0 .../app/components/note.ts | 0 .../app/components/note/content.hbs | 0 .../app/components/note/content.ts | 0 .../app/components/note/interactions.hbs | 0 .../app/components/note/interactions.ts | 0 .../app/components/note/user-header.hbs | 0 .../app/components/page.hbs | 0 .../app/components/page/header.hbs | 0 .../app/components/page/left-sidebar.hbs | 0 .../app/components/svgs/arrow-down-black.hbs | 0 .../app/components/svgs/arrow-right-black.hbs | 0 .../app/components/svgs/heart-filled.hbs | 0 .../app/components/svgs/heart-outline.hbs | 0 .../app/components/svgs/plus-black.hbs | 0 .../app/components/svgs/plus-pink.hbs | 0 .../app/components/svgs/reload-coloured.hbs | 0 .../app/components/svgs/reload-outline.hbs | 0 .../app/components/timeline.hbs | 0 .../app/components/timeline/.gitkeep | 0 .../app/components/timeline/header.hbs | 0 .../app/components/util/formatter.hbs | 0 .../app/components/util/formatter/akoma.hbs | 0 .../app/components/util/formatter/akoma.ts | 0 .../components/util/formatter/linstrom.hbs | 0 .../app/components/util/formatter/linstrom.ts | 0 .../components/util/formatter/mastodon.hbs | 0 .../app/components/util/formatter/mastodon.ts | 0 .../app/components/util/formatter/misskey.hbs | 0 .../app/components/util/formatter/misskey.ts | 0 .../app/components/util/formatter/wafrn.hbs | 0 .../app/components/util/formatter/wafrn.ts | 0 .../app/components/util/mail-entry.hbs | 0 .../app/components/util/mail-entry.ts | 0 .../app/components/util/map-edit.hbs | 0 .../app/components/util/map-edit.ts | 0 .../app/components/util/multiselect.hbs | 0 .../app/components/util/multiselect.ts | 0 .../app/components/util/one-of-array.hbs | 0 .../app/components/util/string-array.hbs | 0 .../app/components/util/string-array.ts | 0 .../app/config/environment.d.ts | 0 .../app/controllers/.gitkeep | 0 .../app/formats.js | 0 .../app/helpers/.gitkeep | 0 .../app/helpers/equals.ts | 0 .../app/helpers/formatter.ts | 0 .../app/helpers/is-valid-mail.ts | 0 .../app/helpers/isLandscape.ts | 0 .../app/index.html | 0 .../app/models/.gitkeep | 0 .../app/models/account.ts | 0 .../app/models/custom-account-field.ts | 0 .../app/models/emote.ts | 0 .../app/models/media-metadata.ts | 0 .../app/models/note.ts | 0 .../app/models/origin-server.ts | 0 .../app/models/reaction.ts | 0 .../app/models/relation.ts | 0 .../app/models/role.ts | 0 .../app/router.ts | 0 .../app/routes/.gitkeep | 0 .../app/routes/about.ts | 0 .../app/routes/application.ts | 0 .../app/routes/auth.ts | 0 .../app/routes/index.ts | 0 .../app/routes/registerform.ts | 0 .../app/routes/testing.ts | 0 .../app/services/auth.ts | 0 .../app/styles/app.css | 0 .../app/styles/auth.css | 0 .../app/styles/auth/registerForm.css | 0 .../app/styles/colors-precise.css | 0 .../app/styles/colors.css | 0 .../app/styles/debug.css | 0 .../app/styles/fonts.css | 0 .../app/styles/notes.css | 0 .../app/styles/svgs.css | 0 .../app/styles/timeline.css | 0 .../app/styles/util.css | 0 .../app/styles/util/mailEntry.css | 0 .../app/styles/util/stringArray.css | 0 .../app/templates/about.hbs | 0 .../app/templates/application.hbs | 0 .../app/templates/auth.hbs | 0 .../app/templates/index.hbs | 0 .../app/templates/notes/:note-id.hbs | 0 .../app/templates/registerform.hbs | 0 .../app/templates/testing.hbs | 0 .../biome.json | 0 .../bun.lockb | Bin .../config/ember-cli-update.json | 0 .../config/ember-intl.js | 0 .../config/environment.js | 0 .../config/optional-features.json | 0 .../config/targets.js | 0 .../ember-cli-build.js | 0 .../otherServerScreenshots/leftSidebar.png | Bin .../otherServerScreenshots/timeline.png | Bin .../otherServerScreenshots/timelineHeader.png | Bin .../package-lock.json | 0 .../package.json | 0 .../assets/fonts/OpenDyslexic-Bold-Italic.eot | Bin .../assets/fonts/OpenDyslexic-Bold-Italic.otf | Bin .../fonts/OpenDyslexic-Bold-Italic.woff | Bin .../fonts/OpenDyslexic-Bold-Italic.woff2 | Bin .../public/assets/fonts/OpenDyslexic-Bold.eot | Bin .../public/assets/fonts/OpenDyslexic-Bold.otf | Bin .../assets/fonts/OpenDyslexic-Bold.woff | Bin .../assets/fonts/OpenDyslexic-Bold.woff2 | Bin .../assets/fonts/OpenDyslexic-Italic.eot | Bin .../assets/fonts/OpenDyslexic-Italic.otf | Bin .../assets/fonts/OpenDyslexic-Italic.woff | Bin .../assets/fonts/OpenDyslexic-Italic.woff2 | Bin .../assets/fonts/OpenDyslexic-Regular.eot | Bin .../assets/fonts/OpenDyslexic-Regular.otf | Bin .../assets/fonts/OpenDyslexic-Regular.woff | Bin .../assets/fonts/OpenDyslexic-Regular.woff2 | Bin .../public/assets/svgs/credit.txt | 0 .../assets/svgs/heart-black-outline-old.svg | 0 .../assets/svgs/heart-black-outline.svg | 0 .../public/assets/svgs/heart-rainbow.svg | 0 .../public/assets/svgs/reload-black.svg | 0 .../public/assets/svgs/reload-coloured.svg | 0 .../public/humans.txt | 0 .../public/robots.txt | 0 .../testem.js | 0 .../tests/helpers/index.ts | 0 .../tests/index.html | 0 .../tests/integration/.gitkeep | 0 .../components/account/full-test.ts | 0 .../components/account/header-test.ts | 0 .../components/account/overview-test.ts | 0 .../components/account/profilepicture-test.ts | 0 .../integration/components/auth/login-test.ts | 0 .../auth/post-registration-form-test.ts | 0 .../components/auth/register-start-test.ts | 0 .../components/global/general-sidebar-test.ts | 0 .../tests/integration/components/note-test.ts | 0 .../components/note/content-test.ts | 0 .../components/note/formatter-test.ts | 0 .../components/note/formatter/akoma-test.ts | 0 .../note/formatter/linstrom-test.ts | 0 .../note/formatter/mastodon-test.ts | 0 .../components/note/formatter/misskey-test.ts | 0 .../components/note/formatter/wafrn-test.ts | 0 .../components/note/interactions-test.ts | 0 .../components/note/user-header-test.ts | 0 .../tests/integration/components/page-test.ts | 0 .../components/page/header-test.ts | 0 .../components/page/left-sidebar-test.ts | 0 .../integration/components/passkey-test.ts | 0 .../integration/components/timeline-test.ts | 0 .../components/timeline/header-test.ts | 0 .../components/util/mail-entry-test.ts | 0 .../components/util/map-edit-test.ts | 0 .../components/util/multiselect-test.ts | 0 .../components/util/one-of-array-test.ts | 0 .../components/util/string-array-test.ts | 0 .../helpers/binding-array-element-test.ts | 0 .../helpers/count-properties-test.ts | 0 .../tests/integration/helpers/equals-test.ts | 0 .../integration/helpers/is-valid-mail-test.ts | 0 .../helpers/tokenise-content-test.ts | 0 .../tests/test-helper.ts | 0 .../tests/unit/.gitkeep | 0 .../tests/unit/models/account-test.js | 0 .../unit/models/custom-account-field-test.js | 0 .../tests/unit/models/emote-test.js | 0 .../tests/unit/models/media-metadata-test.js | 0 .../tests/unit/models/note-test.js | 0 .../tests/unit/models/reaction-test.js | 0 .../tests/unit/models/relation-test.js | 0 .../tests/unit/models/remote-server-test.js | 0 .../tests/unit/models/role-test.js | 0 .../tests/unit/routes/about-test.ts | 0 .../tests/unit/routes/application-test.ts | 0 .../tests/unit/routes/auth-test.ts | 0 .../tests/unit/routes/index-test.ts | 0 .../tests/unit/routes/notes/:note-id-test.ts | 0 .../tests/unit/routes/register-form-test.ts | 0 .../tests/unit/routes/testing-test.ts | 0 .../tests/unit/services/auth-test.ts | 0 .../unit/services/authentication-test.ts | 0 .../translations/de-de.yaml | 0 .../translations/en-us.yaml | 0 .../tsconfig.json | 0 .../ember-data/types/registries/model.d.ts | 0 .../types/global.d.ts | 0 frontend-vue/.editorconfig | 9 ++ frontend-vue/.gitattributes | 1 + frontend-vue/.gitignore | 30 ++++++ frontend-vue/.prettierrc.json | 6 ++ frontend-vue/.vscode/extensions.json | 9 ++ frontend-vue/README.md | 45 +++++++++ frontend-vue/bun.lockb | Bin 0 -> 195481 bytes frontend-vue/env.d.ts | 1 + frontend-vue/eslint.config.ts | 28 ++++++ frontend-vue/index.html | 13 +++ frontend-vue/package.json | 44 ++++++++ frontend-vue/public/favicon.ico | Bin 0 -> 4286 bytes frontend-vue/src/App.vue | 85 ++++++++++++++++ frontend-vue/src/assets/base.css | 86 ++++++++++++++++ frontend-vue/src/assets/logo.svg | 1 + frontend-vue/src/assets/main.css | 35 +++++++ frontend-vue/src/components/HelloWorld.vue | 41 ++++++++ frontend-vue/src/components/TheWelcome.vue | 95 ++++++++++++++++++ frontend-vue/src/components/WelcomeItem.vue | 87 ++++++++++++++++ .../components/__tests__/HelloWorld.spec.ts | 11 ++ .../src/components/icons/IconCommunity.vue | 7 ++ .../components/icons/IconDocumentation.vue | 7 ++ .../src/components/icons/IconEcosystem.vue | 7 ++ .../src/components/icons/IconSupport.vue | 7 ++ .../src/components/icons/IconTooling.vue | 19 ++++ frontend-vue/src/main.ts | 14 +++ frontend-vue/src/router/index.ts | 23 +++++ frontend-vue/src/stores/counter.ts | 12 +++ frontend-vue/src/views/AboutView.vue | 15 +++ frontend-vue/src/views/HomeView.vue | 9 ++ frontend-vue/tsconfig.app.json | 12 +++ frontend-vue/tsconfig.json | 14 +++ frontend-vue/tsconfig.node.json | 19 ++++ frontend-vue/tsconfig.vitest.json | 11 ++ frontend-vue/vite.config.ts | 20 ++++ frontend-vue/vitest.config.ts | 14 +++ 254 files changed, 837 insertions(+) rename {frontend-reactive => frontend-old-ember}/.editorconfig (100%) rename {frontend-reactive => frontend-old-ember}/.ember-cli (100%) rename {frontend-reactive => frontend-old-ember}/.eslintignore (100%) rename {frontend-reactive => frontend-old-ember}/.eslintrc.js (100%) rename {frontend-reactive => frontend-old-ember}/.github/workflows/ci.yml (100%) rename {frontend-reactive => frontend-old-ember}/.gitignore (100%) rename {frontend-reactive => frontend-old-ember}/.prettierignore (100%) rename {frontend-reactive => frontend-old-ember}/.prettierrc.js (100%) rename {frontend-reactive => frontend-old-ember}/.stylelintignore (100%) rename {frontend-reactive => frontend-old-ember}/.stylelintrc.js (100%) rename {frontend-reactive => frontend-old-ember}/.template-lintrc.js (100%) rename {frontend-reactive => frontend-old-ember}/.watchmanconfig (100%) rename {frontend-reactive => frontend-old-ember}/README.md (100%) rename {frontend-reactive => frontend-old-ember}/TODOS.md (100%) rename {frontend-reactive => frontend-old-ember}/app/app.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/app/components/account/full.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/account/header.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/account/header/profilepicture.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/account/overview.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth/login.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth/login.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth/post-registration-form.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth/post-registration-form.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth/register-start.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/auth/register-start.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/global/general-sidebar.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/note.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/note.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/note/content.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/note/content.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/note/interactions.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/note/interactions.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/note/user-header.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/page.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/page/header.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/page/left-sidebar.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/arrow-down-black.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/arrow-right-black.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/heart-filled.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/heart-outline.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/plus-black.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/plus-pink.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/reload-coloured.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/svgs/reload-outline.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/timeline.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/timeline/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/app/components/timeline/header.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/akoma.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/akoma.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/linstrom.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/linstrom.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/mastodon.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/mastodon.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/misskey.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/misskey.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/wafrn.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/formatter/wafrn.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/mail-entry.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/mail-entry.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/map-edit.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/map-edit.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/multiselect.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/multiselect.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/one-of-array.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/string-array.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/components/util/string-array.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/config/environment.d.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/controllers/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/app/formats.js (100%) rename {frontend-reactive => frontend-old-ember}/app/helpers/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/app/helpers/equals.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/helpers/formatter.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/helpers/is-valid-mail.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/helpers/isLandscape.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/index.html (100%) rename {frontend-reactive => frontend-old-ember}/app/models/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/app/models/account.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/custom-account-field.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/emote.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/media-metadata.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/note.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/origin-server.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/reaction.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/relation.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/models/role.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/router.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/routes/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/app/routes/about.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/routes/application.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/routes/auth.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/routes/index.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/routes/registerform.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/routes/testing.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/services/auth.ts (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/app.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/auth.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/auth/registerForm.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/colors-precise.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/colors.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/debug.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/fonts.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/notes.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/svgs.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/timeline.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/util.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/util/mailEntry.css (100%) rename {frontend-reactive => frontend-old-ember}/app/styles/util/stringArray.css (100%) rename {frontend-reactive => frontend-old-ember}/app/templates/about.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/templates/application.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/templates/auth.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/templates/index.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/templates/notes/:note-id.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/templates/registerform.hbs (100%) rename {frontend-reactive => frontend-old-ember}/app/templates/testing.hbs (100%) rename {frontend-reactive => frontend-old-ember}/biome.json (100%) rename {frontend-reactive => frontend-old-ember}/bun.lockb (100%) rename {frontend-reactive => frontend-old-ember}/config/ember-cli-update.json (100%) rename {frontend-reactive => frontend-old-ember}/config/ember-intl.js (100%) rename {frontend-reactive => frontend-old-ember}/config/environment.js (100%) rename {frontend-reactive => frontend-old-ember}/config/optional-features.json (100%) rename {frontend-reactive => frontend-old-ember}/config/targets.js (100%) rename {frontend-reactive => frontend-old-ember}/ember-cli-build.js (100%) rename {frontend-reactive => frontend-old-ember}/otherServerScreenshots/leftSidebar.png (100%) rename {frontend-reactive => frontend-old-ember}/otherServerScreenshots/timeline.png (100%) rename {frontend-reactive => frontend-old-ember}/otherServerScreenshots/timelineHeader.png (100%) rename {frontend-reactive => frontend-old-ember}/package-lock.json (100%) rename {frontend-reactive => frontend-old-ember}/package.json (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold-Italic.eot (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold-Italic.otf (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold-Italic.woff (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold-Italic.woff2 (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold.eot (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold.otf (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold.woff (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Bold.woff2 (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Italic.eot (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Italic.otf (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Italic.woff (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Italic.woff2 (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Regular.eot (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Regular.otf (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Regular.woff (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/fonts/OpenDyslexic-Regular.woff2 (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/svgs/credit.txt (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/svgs/heart-black-outline-old.svg (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/svgs/heart-black-outline.svg (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/svgs/heart-rainbow.svg (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/svgs/reload-black.svg (100%) rename {frontend-reactive => frontend-old-ember}/public/assets/svgs/reload-coloured.svg (100%) rename {frontend-reactive => frontend-old-ember}/public/humans.txt (100%) rename {frontend-reactive => frontend-old-ember}/public/robots.txt (100%) rename {frontend-reactive => frontend-old-ember}/testem.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/helpers/index.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/index.html (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/account/full-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/account/header-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/account/overview-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/account/profilepicture-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/auth/login-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/auth/post-registration-form-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/auth/register-start-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/global/general-sidebar-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/content-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/formatter-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/formatter/akoma-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/formatter/linstrom-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/formatter/mastodon-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/formatter/misskey-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/formatter/wafrn-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/interactions-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/note/user-header-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/page-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/page/header-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/page/left-sidebar-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/passkey-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/timeline-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/timeline/header-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/util/mail-entry-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/util/map-edit-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/util/multiselect-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/util/one-of-array-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/components/util/string-array-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/helpers/binding-array-element-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/helpers/count-properties-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/helpers/equals-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/helpers/is-valid-mail-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/integration/helpers/tokenise-content-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/test-helper.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/.gitkeep (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/account-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/custom-account-field-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/emote-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/media-metadata-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/note-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/reaction-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/relation-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/remote-server-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/models/role-test.js (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/routes/about-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/routes/application-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/routes/auth-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/routes/index-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/routes/notes/:note-id-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/routes/register-form-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/routes/testing-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/services/auth-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/tests/unit/services/authentication-test.ts (100%) rename {frontend-reactive => frontend-old-ember}/translations/de-de.yaml (100%) rename {frontend-reactive => frontend-old-ember}/translations/en-us.yaml (100%) rename {frontend-reactive => frontend-old-ember}/tsconfig.json (100%) rename {frontend-reactive => frontend-old-ember}/types/ember-data/types/registries/model.d.ts (100%) rename {frontend-reactive => frontend-old-ember}/types/global.d.ts (100%) create mode 100644 frontend-vue/.editorconfig create mode 100644 frontend-vue/.gitattributes create mode 100644 frontend-vue/.gitignore create mode 100644 frontend-vue/.prettierrc.json create mode 100644 frontend-vue/.vscode/extensions.json create mode 100644 frontend-vue/README.md create mode 100755 frontend-vue/bun.lockb create mode 100644 frontend-vue/env.d.ts create mode 100644 frontend-vue/eslint.config.ts create mode 100644 frontend-vue/index.html create mode 100644 frontend-vue/package.json create mode 100644 frontend-vue/public/favicon.ico create mode 100644 frontend-vue/src/App.vue create mode 100644 frontend-vue/src/assets/base.css create mode 100644 frontend-vue/src/assets/logo.svg create mode 100644 frontend-vue/src/assets/main.css create mode 100644 frontend-vue/src/components/HelloWorld.vue create mode 100644 frontend-vue/src/components/TheWelcome.vue create mode 100644 frontend-vue/src/components/WelcomeItem.vue create mode 100644 frontend-vue/src/components/__tests__/HelloWorld.spec.ts create mode 100644 frontend-vue/src/components/icons/IconCommunity.vue create mode 100644 frontend-vue/src/components/icons/IconDocumentation.vue create mode 100644 frontend-vue/src/components/icons/IconEcosystem.vue create mode 100644 frontend-vue/src/components/icons/IconSupport.vue create mode 100644 frontend-vue/src/components/icons/IconTooling.vue create mode 100644 frontend-vue/src/main.ts create mode 100644 frontend-vue/src/router/index.ts create mode 100644 frontend-vue/src/stores/counter.ts create mode 100644 frontend-vue/src/views/AboutView.vue create mode 100644 frontend-vue/src/views/HomeView.vue create mode 100644 frontend-vue/tsconfig.app.json create mode 100644 frontend-vue/tsconfig.json create mode 100644 frontend-vue/tsconfig.node.json create mode 100644 frontend-vue/tsconfig.vitest.json create mode 100644 frontend-vue/vite.config.ts create mode 100644 frontend-vue/vitest.config.ts diff --git a/frontend-reactive/.editorconfig b/frontend-old-ember/.editorconfig similarity index 100% rename from frontend-reactive/.editorconfig rename to frontend-old-ember/.editorconfig diff --git a/frontend-reactive/.ember-cli b/frontend-old-ember/.ember-cli similarity index 100% rename from frontend-reactive/.ember-cli rename to frontend-old-ember/.ember-cli diff --git a/frontend-reactive/.eslintignore b/frontend-old-ember/.eslintignore similarity index 100% rename from frontend-reactive/.eslintignore rename to frontend-old-ember/.eslintignore diff --git a/frontend-reactive/.eslintrc.js b/frontend-old-ember/.eslintrc.js similarity index 100% rename from frontend-reactive/.eslintrc.js rename to frontend-old-ember/.eslintrc.js diff --git a/frontend-reactive/.github/workflows/ci.yml b/frontend-old-ember/.github/workflows/ci.yml similarity index 100% rename from frontend-reactive/.github/workflows/ci.yml rename to frontend-old-ember/.github/workflows/ci.yml diff --git a/frontend-reactive/.gitignore b/frontend-old-ember/.gitignore similarity index 100% rename from frontend-reactive/.gitignore rename to frontend-old-ember/.gitignore diff --git a/frontend-reactive/.prettierignore b/frontend-old-ember/.prettierignore similarity index 100% rename from frontend-reactive/.prettierignore rename to frontend-old-ember/.prettierignore diff --git a/frontend-reactive/.prettierrc.js b/frontend-old-ember/.prettierrc.js similarity index 100% rename from frontend-reactive/.prettierrc.js rename to frontend-old-ember/.prettierrc.js diff --git a/frontend-reactive/.stylelintignore b/frontend-old-ember/.stylelintignore similarity index 100% rename from frontend-reactive/.stylelintignore rename to frontend-old-ember/.stylelintignore diff --git a/frontend-reactive/.stylelintrc.js b/frontend-old-ember/.stylelintrc.js similarity index 100% rename from frontend-reactive/.stylelintrc.js rename to frontend-old-ember/.stylelintrc.js diff --git a/frontend-reactive/.template-lintrc.js b/frontend-old-ember/.template-lintrc.js similarity index 100% rename from frontend-reactive/.template-lintrc.js rename to frontend-old-ember/.template-lintrc.js diff --git a/frontend-reactive/.watchmanconfig b/frontend-old-ember/.watchmanconfig similarity index 100% rename from frontend-reactive/.watchmanconfig rename to frontend-old-ember/.watchmanconfig diff --git a/frontend-reactive/README.md b/frontend-old-ember/README.md similarity index 100% rename from frontend-reactive/README.md rename to frontend-old-ember/README.md diff --git a/frontend-reactive/TODOS.md b/frontend-old-ember/TODOS.md similarity index 100% rename from frontend-reactive/TODOS.md rename to frontend-old-ember/TODOS.md diff --git a/frontend-reactive/app/app.ts b/frontend-old-ember/app/app.ts similarity index 100% rename from frontend-reactive/app/app.ts rename to frontend-old-ember/app/app.ts diff --git a/frontend-reactive/app/components/.gitkeep b/frontend-old-ember/app/components/.gitkeep similarity index 100% rename from frontend-reactive/app/components/.gitkeep rename to frontend-old-ember/app/components/.gitkeep diff --git a/frontend-reactive/app/components/account/full.hbs b/frontend-old-ember/app/components/account/full.hbs similarity index 100% rename from frontend-reactive/app/components/account/full.hbs rename to frontend-old-ember/app/components/account/full.hbs diff --git a/frontend-reactive/app/components/account/header.hbs b/frontend-old-ember/app/components/account/header.hbs similarity index 100% rename from frontend-reactive/app/components/account/header.hbs rename to frontend-old-ember/app/components/account/header.hbs diff --git a/frontend-reactive/app/components/account/header/profilepicture.hbs b/frontend-old-ember/app/components/account/header/profilepicture.hbs similarity index 100% rename from frontend-reactive/app/components/account/header/profilepicture.hbs rename to frontend-old-ember/app/components/account/header/profilepicture.hbs diff --git a/frontend-reactive/app/components/account/overview.hbs b/frontend-old-ember/app/components/account/overview.hbs similarity index 100% rename from frontend-reactive/app/components/account/overview.hbs rename to frontend-old-ember/app/components/account/overview.hbs diff --git a/frontend-reactive/app/components/auth.hbs b/frontend-old-ember/app/components/auth.hbs similarity index 100% rename from frontend-reactive/app/components/auth.hbs rename to frontend-old-ember/app/components/auth.hbs diff --git a/frontend-reactive/app/components/auth.ts b/frontend-old-ember/app/components/auth.ts similarity index 100% rename from frontend-reactive/app/components/auth.ts rename to frontend-old-ember/app/components/auth.ts diff --git a/frontend-reactive/app/components/auth/login.hbs b/frontend-old-ember/app/components/auth/login.hbs similarity index 100% rename from frontend-reactive/app/components/auth/login.hbs rename to frontend-old-ember/app/components/auth/login.hbs diff --git a/frontend-reactive/app/components/auth/login.ts b/frontend-old-ember/app/components/auth/login.ts similarity index 100% rename from frontend-reactive/app/components/auth/login.ts rename to frontend-old-ember/app/components/auth/login.ts diff --git a/frontend-reactive/app/components/auth/post-registration-form.hbs b/frontend-old-ember/app/components/auth/post-registration-form.hbs similarity index 100% rename from frontend-reactive/app/components/auth/post-registration-form.hbs rename to frontend-old-ember/app/components/auth/post-registration-form.hbs diff --git a/frontend-reactive/app/components/auth/post-registration-form.ts b/frontend-old-ember/app/components/auth/post-registration-form.ts similarity index 100% rename from frontend-reactive/app/components/auth/post-registration-form.ts rename to frontend-old-ember/app/components/auth/post-registration-form.ts diff --git a/frontend-reactive/app/components/auth/register-start.hbs b/frontend-old-ember/app/components/auth/register-start.hbs similarity index 100% rename from frontend-reactive/app/components/auth/register-start.hbs rename to frontend-old-ember/app/components/auth/register-start.hbs diff --git a/frontend-reactive/app/components/auth/register-start.ts b/frontend-old-ember/app/components/auth/register-start.ts similarity index 100% rename from frontend-reactive/app/components/auth/register-start.ts rename to frontend-old-ember/app/components/auth/register-start.ts diff --git a/frontend-reactive/app/components/global/general-sidebar.hbs b/frontend-old-ember/app/components/global/general-sidebar.hbs similarity index 100% rename from frontend-reactive/app/components/global/general-sidebar.hbs rename to frontend-old-ember/app/components/global/general-sidebar.hbs diff --git a/frontend-reactive/app/components/note.hbs b/frontend-old-ember/app/components/note.hbs similarity index 100% rename from frontend-reactive/app/components/note.hbs rename to frontend-old-ember/app/components/note.hbs diff --git a/frontend-reactive/app/components/note.ts b/frontend-old-ember/app/components/note.ts similarity index 100% rename from frontend-reactive/app/components/note.ts rename to frontend-old-ember/app/components/note.ts diff --git a/frontend-reactive/app/components/note/content.hbs b/frontend-old-ember/app/components/note/content.hbs similarity index 100% rename from frontend-reactive/app/components/note/content.hbs rename to frontend-old-ember/app/components/note/content.hbs diff --git a/frontend-reactive/app/components/note/content.ts b/frontend-old-ember/app/components/note/content.ts similarity index 100% rename from frontend-reactive/app/components/note/content.ts rename to frontend-old-ember/app/components/note/content.ts diff --git a/frontend-reactive/app/components/note/interactions.hbs b/frontend-old-ember/app/components/note/interactions.hbs similarity index 100% rename from frontend-reactive/app/components/note/interactions.hbs rename to frontend-old-ember/app/components/note/interactions.hbs diff --git a/frontend-reactive/app/components/note/interactions.ts b/frontend-old-ember/app/components/note/interactions.ts similarity index 100% rename from frontend-reactive/app/components/note/interactions.ts rename to frontend-old-ember/app/components/note/interactions.ts diff --git a/frontend-reactive/app/components/note/user-header.hbs b/frontend-old-ember/app/components/note/user-header.hbs similarity index 100% rename from frontend-reactive/app/components/note/user-header.hbs rename to frontend-old-ember/app/components/note/user-header.hbs diff --git a/frontend-reactive/app/components/page.hbs b/frontend-old-ember/app/components/page.hbs similarity index 100% rename from frontend-reactive/app/components/page.hbs rename to frontend-old-ember/app/components/page.hbs diff --git a/frontend-reactive/app/components/page/header.hbs b/frontend-old-ember/app/components/page/header.hbs similarity index 100% rename from frontend-reactive/app/components/page/header.hbs rename to frontend-old-ember/app/components/page/header.hbs diff --git a/frontend-reactive/app/components/page/left-sidebar.hbs b/frontend-old-ember/app/components/page/left-sidebar.hbs similarity index 100% rename from frontend-reactive/app/components/page/left-sidebar.hbs rename to frontend-old-ember/app/components/page/left-sidebar.hbs diff --git a/frontend-reactive/app/components/svgs/arrow-down-black.hbs b/frontend-old-ember/app/components/svgs/arrow-down-black.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/arrow-down-black.hbs rename to frontend-old-ember/app/components/svgs/arrow-down-black.hbs diff --git a/frontend-reactive/app/components/svgs/arrow-right-black.hbs b/frontend-old-ember/app/components/svgs/arrow-right-black.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/arrow-right-black.hbs rename to frontend-old-ember/app/components/svgs/arrow-right-black.hbs diff --git a/frontend-reactive/app/components/svgs/heart-filled.hbs b/frontend-old-ember/app/components/svgs/heart-filled.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/heart-filled.hbs rename to frontend-old-ember/app/components/svgs/heart-filled.hbs diff --git a/frontend-reactive/app/components/svgs/heart-outline.hbs b/frontend-old-ember/app/components/svgs/heart-outline.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/heart-outline.hbs rename to frontend-old-ember/app/components/svgs/heart-outline.hbs diff --git a/frontend-reactive/app/components/svgs/plus-black.hbs b/frontend-old-ember/app/components/svgs/plus-black.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/plus-black.hbs rename to frontend-old-ember/app/components/svgs/plus-black.hbs diff --git a/frontend-reactive/app/components/svgs/plus-pink.hbs b/frontend-old-ember/app/components/svgs/plus-pink.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/plus-pink.hbs rename to frontend-old-ember/app/components/svgs/plus-pink.hbs diff --git a/frontend-reactive/app/components/svgs/reload-coloured.hbs b/frontend-old-ember/app/components/svgs/reload-coloured.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/reload-coloured.hbs rename to frontend-old-ember/app/components/svgs/reload-coloured.hbs diff --git a/frontend-reactive/app/components/svgs/reload-outline.hbs b/frontend-old-ember/app/components/svgs/reload-outline.hbs similarity index 100% rename from frontend-reactive/app/components/svgs/reload-outline.hbs rename to frontend-old-ember/app/components/svgs/reload-outline.hbs diff --git a/frontend-reactive/app/components/timeline.hbs b/frontend-old-ember/app/components/timeline.hbs similarity index 100% rename from frontend-reactive/app/components/timeline.hbs rename to frontend-old-ember/app/components/timeline.hbs diff --git a/frontend-reactive/app/components/timeline/.gitkeep b/frontend-old-ember/app/components/timeline/.gitkeep similarity index 100% rename from frontend-reactive/app/components/timeline/.gitkeep rename to frontend-old-ember/app/components/timeline/.gitkeep diff --git a/frontend-reactive/app/components/timeline/header.hbs b/frontend-old-ember/app/components/timeline/header.hbs similarity index 100% rename from frontend-reactive/app/components/timeline/header.hbs rename to frontend-old-ember/app/components/timeline/header.hbs diff --git a/frontend-reactive/app/components/util/formatter.hbs b/frontend-old-ember/app/components/util/formatter.hbs similarity index 100% rename from frontend-reactive/app/components/util/formatter.hbs rename to frontend-old-ember/app/components/util/formatter.hbs diff --git a/frontend-reactive/app/components/util/formatter/akoma.hbs b/frontend-old-ember/app/components/util/formatter/akoma.hbs similarity index 100% rename from frontend-reactive/app/components/util/formatter/akoma.hbs rename to frontend-old-ember/app/components/util/formatter/akoma.hbs diff --git a/frontend-reactive/app/components/util/formatter/akoma.ts b/frontend-old-ember/app/components/util/formatter/akoma.ts similarity index 100% rename from frontend-reactive/app/components/util/formatter/akoma.ts rename to frontend-old-ember/app/components/util/formatter/akoma.ts diff --git a/frontend-reactive/app/components/util/formatter/linstrom.hbs b/frontend-old-ember/app/components/util/formatter/linstrom.hbs similarity index 100% rename from frontend-reactive/app/components/util/formatter/linstrom.hbs rename to frontend-old-ember/app/components/util/formatter/linstrom.hbs diff --git a/frontend-reactive/app/components/util/formatter/linstrom.ts b/frontend-old-ember/app/components/util/formatter/linstrom.ts similarity index 100% rename from frontend-reactive/app/components/util/formatter/linstrom.ts rename to frontend-old-ember/app/components/util/formatter/linstrom.ts diff --git a/frontend-reactive/app/components/util/formatter/mastodon.hbs b/frontend-old-ember/app/components/util/formatter/mastodon.hbs similarity index 100% rename from frontend-reactive/app/components/util/formatter/mastodon.hbs rename to frontend-old-ember/app/components/util/formatter/mastodon.hbs diff --git a/frontend-reactive/app/components/util/formatter/mastodon.ts b/frontend-old-ember/app/components/util/formatter/mastodon.ts similarity index 100% rename from frontend-reactive/app/components/util/formatter/mastodon.ts rename to frontend-old-ember/app/components/util/formatter/mastodon.ts diff --git a/frontend-reactive/app/components/util/formatter/misskey.hbs b/frontend-old-ember/app/components/util/formatter/misskey.hbs similarity index 100% rename from frontend-reactive/app/components/util/formatter/misskey.hbs rename to frontend-old-ember/app/components/util/formatter/misskey.hbs diff --git a/frontend-reactive/app/components/util/formatter/misskey.ts b/frontend-old-ember/app/components/util/formatter/misskey.ts similarity index 100% rename from frontend-reactive/app/components/util/formatter/misskey.ts rename to frontend-old-ember/app/components/util/formatter/misskey.ts diff --git a/frontend-reactive/app/components/util/formatter/wafrn.hbs b/frontend-old-ember/app/components/util/formatter/wafrn.hbs similarity index 100% rename from frontend-reactive/app/components/util/formatter/wafrn.hbs rename to frontend-old-ember/app/components/util/formatter/wafrn.hbs diff --git a/frontend-reactive/app/components/util/formatter/wafrn.ts b/frontend-old-ember/app/components/util/formatter/wafrn.ts similarity index 100% rename from frontend-reactive/app/components/util/formatter/wafrn.ts rename to frontend-old-ember/app/components/util/formatter/wafrn.ts diff --git a/frontend-reactive/app/components/util/mail-entry.hbs b/frontend-old-ember/app/components/util/mail-entry.hbs similarity index 100% rename from frontend-reactive/app/components/util/mail-entry.hbs rename to frontend-old-ember/app/components/util/mail-entry.hbs diff --git a/frontend-reactive/app/components/util/mail-entry.ts b/frontend-old-ember/app/components/util/mail-entry.ts similarity index 100% rename from frontend-reactive/app/components/util/mail-entry.ts rename to frontend-old-ember/app/components/util/mail-entry.ts diff --git a/frontend-reactive/app/components/util/map-edit.hbs b/frontend-old-ember/app/components/util/map-edit.hbs similarity index 100% rename from frontend-reactive/app/components/util/map-edit.hbs rename to frontend-old-ember/app/components/util/map-edit.hbs diff --git a/frontend-reactive/app/components/util/map-edit.ts b/frontend-old-ember/app/components/util/map-edit.ts similarity index 100% rename from frontend-reactive/app/components/util/map-edit.ts rename to frontend-old-ember/app/components/util/map-edit.ts diff --git a/frontend-reactive/app/components/util/multiselect.hbs b/frontend-old-ember/app/components/util/multiselect.hbs similarity index 100% rename from frontend-reactive/app/components/util/multiselect.hbs rename to frontend-old-ember/app/components/util/multiselect.hbs diff --git a/frontend-reactive/app/components/util/multiselect.ts b/frontend-old-ember/app/components/util/multiselect.ts similarity index 100% rename from frontend-reactive/app/components/util/multiselect.ts rename to frontend-old-ember/app/components/util/multiselect.ts diff --git a/frontend-reactive/app/components/util/one-of-array.hbs b/frontend-old-ember/app/components/util/one-of-array.hbs similarity index 100% rename from frontend-reactive/app/components/util/one-of-array.hbs rename to frontend-old-ember/app/components/util/one-of-array.hbs diff --git a/frontend-reactive/app/components/util/string-array.hbs b/frontend-old-ember/app/components/util/string-array.hbs similarity index 100% rename from frontend-reactive/app/components/util/string-array.hbs rename to frontend-old-ember/app/components/util/string-array.hbs diff --git a/frontend-reactive/app/components/util/string-array.ts b/frontend-old-ember/app/components/util/string-array.ts similarity index 100% rename from frontend-reactive/app/components/util/string-array.ts rename to frontend-old-ember/app/components/util/string-array.ts diff --git a/frontend-reactive/app/config/environment.d.ts b/frontend-old-ember/app/config/environment.d.ts similarity index 100% rename from frontend-reactive/app/config/environment.d.ts rename to frontend-old-ember/app/config/environment.d.ts diff --git a/frontend-reactive/app/controllers/.gitkeep b/frontend-old-ember/app/controllers/.gitkeep similarity index 100% rename from frontend-reactive/app/controllers/.gitkeep rename to frontend-old-ember/app/controllers/.gitkeep diff --git a/frontend-reactive/app/formats.js b/frontend-old-ember/app/formats.js similarity index 100% rename from frontend-reactive/app/formats.js rename to frontend-old-ember/app/formats.js diff --git a/frontend-reactive/app/helpers/.gitkeep b/frontend-old-ember/app/helpers/.gitkeep similarity index 100% rename from frontend-reactive/app/helpers/.gitkeep rename to frontend-old-ember/app/helpers/.gitkeep diff --git a/frontend-reactive/app/helpers/equals.ts b/frontend-old-ember/app/helpers/equals.ts similarity index 100% rename from frontend-reactive/app/helpers/equals.ts rename to frontend-old-ember/app/helpers/equals.ts diff --git a/frontend-reactive/app/helpers/formatter.ts b/frontend-old-ember/app/helpers/formatter.ts similarity index 100% rename from frontend-reactive/app/helpers/formatter.ts rename to frontend-old-ember/app/helpers/formatter.ts diff --git a/frontend-reactive/app/helpers/is-valid-mail.ts b/frontend-old-ember/app/helpers/is-valid-mail.ts similarity index 100% rename from frontend-reactive/app/helpers/is-valid-mail.ts rename to frontend-old-ember/app/helpers/is-valid-mail.ts diff --git a/frontend-reactive/app/helpers/isLandscape.ts b/frontend-old-ember/app/helpers/isLandscape.ts similarity index 100% rename from frontend-reactive/app/helpers/isLandscape.ts rename to frontend-old-ember/app/helpers/isLandscape.ts diff --git a/frontend-reactive/app/index.html b/frontend-old-ember/app/index.html similarity index 100% rename from frontend-reactive/app/index.html rename to frontend-old-ember/app/index.html diff --git a/frontend-reactive/app/models/.gitkeep b/frontend-old-ember/app/models/.gitkeep similarity index 100% rename from frontend-reactive/app/models/.gitkeep rename to frontend-old-ember/app/models/.gitkeep diff --git a/frontend-reactive/app/models/account.ts b/frontend-old-ember/app/models/account.ts similarity index 100% rename from frontend-reactive/app/models/account.ts rename to frontend-old-ember/app/models/account.ts diff --git a/frontend-reactive/app/models/custom-account-field.ts b/frontend-old-ember/app/models/custom-account-field.ts similarity index 100% rename from frontend-reactive/app/models/custom-account-field.ts rename to frontend-old-ember/app/models/custom-account-field.ts diff --git a/frontend-reactive/app/models/emote.ts b/frontend-old-ember/app/models/emote.ts similarity index 100% rename from frontend-reactive/app/models/emote.ts rename to frontend-old-ember/app/models/emote.ts diff --git a/frontend-reactive/app/models/media-metadata.ts b/frontend-old-ember/app/models/media-metadata.ts similarity index 100% rename from frontend-reactive/app/models/media-metadata.ts rename to frontend-old-ember/app/models/media-metadata.ts diff --git a/frontend-reactive/app/models/note.ts b/frontend-old-ember/app/models/note.ts similarity index 100% rename from frontend-reactive/app/models/note.ts rename to frontend-old-ember/app/models/note.ts diff --git a/frontend-reactive/app/models/origin-server.ts b/frontend-old-ember/app/models/origin-server.ts similarity index 100% rename from frontend-reactive/app/models/origin-server.ts rename to frontend-old-ember/app/models/origin-server.ts diff --git a/frontend-reactive/app/models/reaction.ts b/frontend-old-ember/app/models/reaction.ts similarity index 100% rename from frontend-reactive/app/models/reaction.ts rename to frontend-old-ember/app/models/reaction.ts diff --git a/frontend-reactive/app/models/relation.ts b/frontend-old-ember/app/models/relation.ts similarity index 100% rename from frontend-reactive/app/models/relation.ts rename to frontend-old-ember/app/models/relation.ts diff --git a/frontend-reactive/app/models/role.ts b/frontend-old-ember/app/models/role.ts similarity index 100% rename from frontend-reactive/app/models/role.ts rename to frontend-old-ember/app/models/role.ts diff --git a/frontend-reactive/app/router.ts b/frontend-old-ember/app/router.ts similarity index 100% rename from frontend-reactive/app/router.ts rename to frontend-old-ember/app/router.ts diff --git a/frontend-reactive/app/routes/.gitkeep b/frontend-old-ember/app/routes/.gitkeep similarity index 100% rename from frontend-reactive/app/routes/.gitkeep rename to frontend-old-ember/app/routes/.gitkeep diff --git a/frontend-reactive/app/routes/about.ts b/frontend-old-ember/app/routes/about.ts similarity index 100% rename from frontend-reactive/app/routes/about.ts rename to frontend-old-ember/app/routes/about.ts diff --git a/frontend-reactive/app/routes/application.ts b/frontend-old-ember/app/routes/application.ts similarity index 100% rename from frontend-reactive/app/routes/application.ts rename to frontend-old-ember/app/routes/application.ts diff --git a/frontend-reactive/app/routes/auth.ts b/frontend-old-ember/app/routes/auth.ts similarity index 100% rename from frontend-reactive/app/routes/auth.ts rename to frontend-old-ember/app/routes/auth.ts diff --git a/frontend-reactive/app/routes/index.ts b/frontend-old-ember/app/routes/index.ts similarity index 100% rename from frontend-reactive/app/routes/index.ts rename to frontend-old-ember/app/routes/index.ts diff --git a/frontend-reactive/app/routes/registerform.ts b/frontend-old-ember/app/routes/registerform.ts similarity index 100% rename from frontend-reactive/app/routes/registerform.ts rename to frontend-old-ember/app/routes/registerform.ts diff --git a/frontend-reactive/app/routes/testing.ts b/frontend-old-ember/app/routes/testing.ts similarity index 100% rename from frontend-reactive/app/routes/testing.ts rename to frontend-old-ember/app/routes/testing.ts diff --git a/frontend-reactive/app/services/auth.ts b/frontend-old-ember/app/services/auth.ts similarity index 100% rename from frontend-reactive/app/services/auth.ts rename to frontend-old-ember/app/services/auth.ts diff --git a/frontend-reactive/app/styles/app.css b/frontend-old-ember/app/styles/app.css similarity index 100% rename from frontend-reactive/app/styles/app.css rename to frontend-old-ember/app/styles/app.css diff --git a/frontend-reactive/app/styles/auth.css b/frontend-old-ember/app/styles/auth.css similarity index 100% rename from frontend-reactive/app/styles/auth.css rename to frontend-old-ember/app/styles/auth.css diff --git a/frontend-reactive/app/styles/auth/registerForm.css b/frontend-old-ember/app/styles/auth/registerForm.css similarity index 100% rename from frontend-reactive/app/styles/auth/registerForm.css rename to frontend-old-ember/app/styles/auth/registerForm.css diff --git a/frontend-reactive/app/styles/colors-precise.css b/frontend-old-ember/app/styles/colors-precise.css similarity index 100% rename from frontend-reactive/app/styles/colors-precise.css rename to frontend-old-ember/app/styles/colors-precise.css diff --git a/frontend-reactive/app/styles/colors.css b/frontend-old-ember/app/styles/colors.css similarity index 100% rename from frontend-reactive/app/styles/colors.css rename to frontend-old-ember/app/styles/colors.css diff --git a/frontend-reactive/app/styles/debug.css b/frontend-old-ember/app/styles/debug.css similarity index 100% rename from frontend-reactive/app/styles/debug.css rename to frontend-old-ember/app/styles/debug.css diff --git a/frontend-reactive/app/styles/fonts.css b/frontend-old-ember/app/styles/fonts.css similarity index 100% rename from frontend-reactive/app/styles/fonts.css rename to frontend-old-ember/app/styles/fonts.css diff --git a/frontend-reactive/app/styles/notes.css b/frontend-old-ember/app/styles/notes.css similarity index 100% rename from frontend-reactive/app/styles/notes.css rename to frontend-old-ember/app/styles/notes.css diff --git a/frontend-reactive/app/styles/svgs.css b/frontend-old-ember/app/styles/svgs.css similarity index 100% rename from frontend-reactive/app/styles/svgs.css rename to frontend-old-ember/app/styles/svgs.css diff --git a/frontend-reactive/app/styles/timeline.css b/frontend-old-ember/app/styles/timeline.css similarity index 100% rename from frontend-reactive/app/styles/timeline.css rename to frontend-old-ember/app/styles/timeline.css diff --git a/frontend-reactive/app/styles/util.css b/frontend-old-ember/app/styles/util.css similarity index 100% rename from frontend-reactive/app/styles/util.css rename to frontend-old-ember/app/styles/util.css diff --git a/frontend-reactive/app/styles/util/mailEntry.css b/frontend-old-ember/app/styles/util/mailEntry.css similarity index 100% rename from frontend-reactive/app/styles/util/mailEntry.css rename to frontend-old-ember/app/styles/util/mailEntry.css diff --git a/frontend-reactive/app/styles/util/stringArray.css b/frontend-old-ember/app/styles/util/stringArray.css similarity index 100% rename from frontend-reactive/app/styles/util/stringArray.css rename to frontend-old-ember/app/styles/util/stringArray.css diff --git a/frontend-reactive/app/templates/about.hbs b/frontend-old-ember/app/templates/about.hbs similarity index 100% rename from frontend-reactive/app/templates/about.hbs rename to frontend-old-ember/app/templates/about.hbs diff --git a/frontend-reactive/app/templates/application.hbs b/frontend-old-ember/app/templates/application.hbs similarity index 100% rename from frontend-reactive/app/templates/application.hbs rename to frontend-old-ember/app/templates/application.hbs diff --git a/frontend-reactive/app/templates/auth.hbs b/frontend-old-ember/app/templates/auth.hbs similarity index 100% rename from frontend-reactive/app/templates/auth.hbs rename to frontend-old-ember/app/templates/auth.hbs diff --git a/frontend-reactive/app/templates/index.hbs b/frontend-old-ember/app/templates/index.hbs similarity index 100% rename from frontend-reactive/app/templates/index.hbs rename to frontend-old-ember/app/templates/index.hbs diff --git a/frontend-reactive/app/templates/notes/:note-id.hbs b/frontend-old-ember/app/templates/notes/:note-id.hbs similarity index 100% rename from frontend-reactive/app/templates/notes/:note-id.hbs rename to frontend-old-ember/app/templates/notes/:note-id.hbs diff --git a/frontend-reactive/app/templates/registerform.hbs b/frontend-old-ember/app/templates/registerform.hbs similarity index 100% rename from frontend-reactive/app/templates/registerform.hbs rename to frontend-old-ember/app/templates/registerform.hbs diff --git a/frontend-reactive/app/templates/testing.hbs b/frontend-old-ember/app/templates/testing.hbs similarity index 100% rename from frontend-reactive/app/templates/testing.hbs rename to frontend-old-ember/app/templates/testing.hbs diff --git a/frontend-reactive/biome.json b/frontend-old-ember/biome.json similarity index 100% rename from frontend-reactive/biome.json rename to frontend-old-ember/biome.json diff --git a/frontend-reactive/bun.lockb b/frontend-old-ember/bun.lockb similarity index 100% rename from frontend-reactive/bun.lockb rename to frontend-old-ember/bun.lockb diff --git a/frontend-reactive/config/ember-cli-update.json b/frontend-old-ember/config/ember-cli-update.json similarity index 100% rename from frontend-reactive/config/ember-cli-update.json rename to frontend-old-ember/config/ember-cli-update.json diff --git a/frontend-reactive/config/ember-intl.js b/frontend-old-ember/config/ember-intl.js similarity index 100% rename from frontend-reactive/config/ember-intl.js rename to frontend-old-ember/config/ember-intl.js diff --git a/frontend-reactive/config/environment.js b/frontend-old-ember/config/environment.js similarity index 100% rename from frontend-reactive/config/environment.js rename to frontend-old-ember/config/environment.js diff --git a/frontend-reactive/config/optional-features.json b/frontend-old-ember/config/optional-features.json similarity index 100% rename from frontend-reactive/config/optional-features.json rename to frontend-old-ember/config/optional-features.json diff --git a/frontend-reactive/config/targets.js b/frontend-old-ember/config/targets.js similarity index 100% rename from frontend-reactive/config/targets.js rename to frontend-old-ember/config/targets.js diff --git a/frontend-reactive/ember-cli-build.js b/frontend-old-ember/ember-cli-build.js similarity index 100% rename from frontend-reactive/ember-cli-build.js rename to frontend-old-ember/ember-cli-build.js diff --git a/frontend-reactive/otherServerScreenshots/leftSidebar.png b/frontend-old-ember/otherServerScreenshots/leftSidebar.png similarity index 100% rename from frontend-reactive/otherServerScreenshots/leftSidebar.png rename to frontend-old-ember/otherServerScreenshots/leftSidebar.png diff --git a/frontend-reactive/otherServerScreenshots/timeline.png b/frontend-old-ember/otherServerScreenshots/timeline.png similarity index 100% rename from frontend-reactive/otherServerScreenshots/timeline.png rename to frontend-old-ember/otherServerScreenshots/timeline.png diff --git a/frontend-reactive/otherServerScreenshots/timelineHeader.png b/frontend-old-ember/otherServerScreenshots/timelineHeader.png similarity index 100% rename from frontend-reactive/otherServerScreenshots/timelineHeader.png rename to frontend-old-ember/otherServerScreenshots/timelineHeader.png diff --git a/frontend-reactive/package-lock.json b/frontend-old-ember/package-lock.json similarity index 100% rename from frontend-reactive/package-lock.json rename to frontend-old-ember/package-lock.json diff --git a/frontend-reactive/package.json b/frontend-old-ember/package.json similarity index 100% rename from frontend-reactive/package.json rename to frontend-old-ember/package.json diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.eot b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.eot similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.eot rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.eot diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.otf b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.otf similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.otf rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.otf diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.woff b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.woff similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.woff rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.woff diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.woff2 b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.woff2 similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold-Italic.woff2 rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold-Italic.woff2 diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.eot b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.eot similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.eot rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.eot diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.otf b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.otf similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.otf rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.otf diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.woff b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.woff similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.woff rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.woff diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.woff2 b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.woff2 similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Bold.woff2 rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Bold.woff2 diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.eot b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.eot similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.eot rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.eot diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.otf b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.otf similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.otf rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.otf diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.woff b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.woff similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.woff rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.woff diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.woff2 b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.woff2 similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Italic.woff2 rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Italic.woff2 diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.eot b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.eot similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.eot rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.eot diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.otf b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.otf similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.otf rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.otf diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.woff b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.woff similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.woff rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.woff diff --git a/frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.woff2 b/frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.woff2 similarity index 100% rename from frontend-reactive/public/assets/fonts/OpenDyslexic-Regular.woff2 rename to frontend-old-ember/public/assets/fonts/OpenDyslexic-Regular.woff2 diff --git a/frontend-reactive/public/assets/svgs/credit.txt b/frontend-old-ember/public/assets/svgs/credit.txt similarity index 100% rename from frontend-reactive/public/assets/svgs/credit.txt rename to frontend-old-ember/public/assets/svgs/credit.txt diff --git a/frontend-reactive/public/assets/svgs/heart-black-outline-old.svg b/frontend-old-ember/public/assets/svgs/heart-black-outline-old.svg similarity index 100% rename from frontend-reactive/public/assets/svgs/heart-black-outline-old.svg rename to frontend-old-ember/public/assets/svgs/heart-black-outline-old.svg diff --git a/frontend-reactive/public/assets/svgs/heart-black-outline.svg b/frontend-old-ember/public/assets/svgs/heart-black-outline.svg similarity index 100% rename from frontend-reactive/public/assets/svgs/heart-black-outline.svg rename to frontend-old-ember/public/assets/svgs/heart-black-outline.svg diff --git a/frontend-reactive/public/assets/svgs/heart-rainbow.svg b/frontend-old-ember/public/assets/svgs/heart-rainbow.svg similarity index 100% rename from frontend-reactive/public/assets/svgs/heart-rainbow.svg rename to frontend-old-ember/public/assets/svgs/heart-rainbow.svg diff --git a/frontend-reactive/public/assets/svgs/reload-black.svg b/frontend-old-ember/public/assets/svgs/reload-black.svg similarity index 100% rename from frontend-reactive/public/assets/svgs/reload-black.svg rename to frontend-old-ember/public/assets/svgs/reload-black.svg diff --git a/frontend-reactive/public/assets/svgs/reload-coloured.svg b/frontend-old-ember/public/assets/svgs/reload-coloured.svg similarity index 100% rename from frontend-reactive/public/assets/svgs/reload-coloured.svg rename to frontend-old-ember/public/assets/svgs/reload-coloured.svg diff --git a/frontend-reactive/public/humans.txt b/frontend-old-ember/public/humans.txt similarity index 100% rename from frontend-reactive/public/humans.txt rename to frontend-old-ember/public/humans.txt diff --git a/frontend-reactive/public/robots.txt b/frontend-old-ember/public/robots.txt similarity index 100% rename from frontend-reactive/public/robots.txt rename to frontend-old-ember/public/robots.txt diff --git a/frontend-reactive/testem.js b/frontend-old-ember/testem.js similarity index 100% rename from frontend-reactive/testem.js rename to frontend-old-ember/testem.js diff --git a/frontend-reactive/tests/helpers/index.ts b/frontend-old-ember/tests/helpers/index.ts similarity index 100% rename from frontend-reactive/tests/helpers/index.ts rename to frontend-old-ember/tests/helpers/index.ts diff --git a/frontend-reactive/tests/index.html b/frontend-old-ember/tests/index.html similarity index 100% rename from frontend-reactive/tests/index.html rename to frontend-old-ember/tests/index.html diff --git a/frontend-reactive/tests/integration/.gitkeep b/frontend-old-ember/tests/integration/.gitkeep similarity index 100% rename from frontend-reactive/tests/integration/.gitkeep rename to frontend-old-ember/tests/integration/.gitkeep diff --git a/frontend-reactive/tests/integration/components/account/full-test.ts b/frontend-old-ember/tests/integration/components/account/full-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/account/full-test.ts rename to frontend-old-ember/tests/integration/components/account/full-test.ts diff --git a/frontend-reactive/tests/integration/components/account/header-test.ts b/frontend-old-ember/tests/integration/components/account/header-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/account/header-test.ts rename to frontend-old-ember/tests/integration/components/account/header-test.ts diff --git a/frontend-reactive/tests/integration/components/account/overview-test.ts b/frontend-old-ember/tests/integration/components/account/overview-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/account/overview-test.ts rename to frontend-old-ember/tests/integration/components/account/overview-test.ts diff --git a/frontend-reactive/tests/integration/components/account/profilepicture-test.ts b/frontend-old-ember/tests/integration/components/account/profilepicture-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/account/profilepicture-test.ts rename to frontend-old-ember/tests/integration/components/account/profilepicture-test.ts diff --git a/frontend-reactive/tests/integration/components/auth/login-test.ts b/frontend-old-ember/tests/integration/components/auth/login-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/auth/login-test.ts rename to frontend-old-ember/tests/integration/components/auth/login-test.ts diff --git a/frontend-reactive/tests/integration/components/auth/post-registration-form-test.ts b/frontend-old-ember/tests/integration/components/auth/post-registration-form-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/auth/post-registration-form-test.ts rename to frontend-old-ember/tests/integration/components/auth/post-registration-form-test.ts diff --git a/frontend-reactive/tests/integration/components/auth/register-start-test.ts b/frontend-old-ember/tests/integration/components/auth/register-start-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/auth/register-start-test.ts rename to frontend-old-ember/tests/integration/components/auth/register-start-test.ts diff --git a/frontend-reactive/tests/integration/components/global/general-sidebar-test.ts b/frontend-old-ember/tests/integration/components/global/general-sidebar-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/global/general-sidebar-test.ts rename to frontend-old-ember/tests/integration/components/global/general-sidebar-test.ts diff --git a/frontend-reactive/tests/integration/components/note-test.ts b/frontend-old-ember/tests/integration/components/note-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note-test.ts rename to frontend-old-ember/tests/integration/components/note-test.ts diff --git a/frontend-reactive/tests/integration/components/note/content-test.ts b/frontend-old-ember/tests/integration/components/note/content-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/content-test.ts rename to frontend-old-ember/tests/integration/components/note/content-test.ts diff --git a/frontend-reactive/tests/integration/components/note/formatter-test.ts b/frontend-old-ember/tests/integration/components/note/formatter-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/formatter-test.ts rename to frontend-old-ember/tests/integration/components/note/formatter-test.ts diff --git a/frontend-reactive/tests/integration/components/note/formatter/akoma-test.ts b/frontend-old-ember/tests/integration/components/note/formatter/akoma-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/formatter/akoma-test.ts rename to frontend-old-ember/tests/integration/components/note/formatter/akoma-test.ts diff --git a/frontend-reactive/tests/integration/components/note/formatter/linstrom-test.ts b/frontend-old-ember/tests/integration/components/note/formatter/linstrom-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/formatter/linstrom-test.ts rename to frontend-old-ember/tests/integration/components/note/formatter/linstrom-test.ts diff --git a/frontend-reactive/tests/integration/components/note/formatter/mastodon-test.ts b/frontend-old-ember/tests/integration/components/note/formatter/mastodon-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/formatter/mastodon-test.ts rename to frontend-old-ember/tests/integration/components/note/formatter/mastodon-test.ts diff --git a/frontend-reactive/tests/integration/components/note/formatter/misskey-test.ts b/frontend-old-ember/tests/integration/components/note/formatter/misskey-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/formatter/misskey-test.ts rename to frontend-old-ember/tests/integration/components/note/formatter/misskey-test.ts diff --git a/frontend-reactive/tests/integration/components/note/formatter/wafrn-test.ts b/frontend-old-ember/tests/integration/components/note/formatter/wafrn-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/formatter/wafrn-test.ts rename to frontend-old-ember/tests/integration/components/note/formatter/wafrn-test.ts diff --git a/frontend-reactive/tests/integration/components/note/interactions-test.ts b/frontend-old-ember/tests/integration/components/note/interactions-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/interactions-test.ts rename to frontend-old-ember/tests/integration/components/note/interactions-test.ts diff --git a/frontend-reactive/tests/integration/components/note/user-header-test.ts b/frontend-old-ember/tests/integration/components/note/user-header-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/note/user-header-test.ts rename to frontend-old-ember/tests/integration/components/note/user-header-test.ts diff --git a/frontend-reactive/tests/integration/components/page-test.ts b/frontend-old-ember/tests/integration/components/page-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/page-test.ts rename to frontend-old-ember/tests/integration/components/page-test.ts diff --git a/frontend-reactive/tests/integration/components/page/header-test.ts b/frontend-old-ember/tests/integration/components/page/header-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/page/header-test.ts rename to frontend-old-ember/tests/integration/components/page/header-test.ts diff --git a/frontend-reactive/tests/integration/components/page/left-sidebar-test.ts b/frontend-old-ember/tests/integration/components/page/left-sidebar-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/page/left-sidebar-test.ts rename to frontend-old-ember/tests/integration/components/page/left-sidebar-test.ts diff --git a/frontend-reactive/tests/integration/components/passkey-test.ts b/frontend-old-ember/tests/integration/components/passkey-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/passkey-test.ts rename to frontend-old-ember/tests/integration/components/passkey-test.ts diff --git a/frontend-reactive/tests/integration/components/timeline-test.ts b/frontend-old-ember/tests/integration/components/timeline-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/timeline-test.ts rename to frontend-old-ember/tests/integration/components/timeline-test.ts diff --git a/frontend-reactive/tests/integration/components/timeline/header-test.ts b/frontend-old-ember/tests/integration/components/timeline/header-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/timeline/header-test.ts rename to frontend-old-ember/tests/integration/components/timeline/header-test.ts diff --git a/frontend-reactive/tests/integration/components/util/mail-entry-test.ts b/frontend-old-ember/tests/integration/components/util/mail-entry-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/util/mail-entry-test.ts rename to frontend-old-ember/tests/integration/components/util/mail-entry-test.ts diff --git a/frontend-reactive/tests/integration/components/util/map-edit-test.ts b/frontend-old-ember/tests/integration/components/util/map-edit-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/util/map-edit-test.ts rename to frontend-old-ember/tests/integration/components/util/map-edit-test.ts diff --git a/frontend-reactive/tests/integration/components/util/multiselect-test.ts b/frontend-old-ember/tests/integration/components/util/multiselect-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/util/multiselect-test.ts rename to frontend-old-ember/tests/integration/components/util/multiselect-test.ts diff --git a/frontend-reactive/tests/integration/components/util/one-of-array-test.ts b/frontend-old-ember/tests/integration/components/util/one-of-array-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/util/one-of-array-test.ts rename to frontend-old-ember/tests/integration/components/util/one-of-array-test.ts diff --git a/frontend-reactive/tests/integration/components/util/string-array-test.ts b/frontend-old-ember/tests/integration/components/util/string-array-test.ts similarity index 100% rename from frontend-reactive/tests/integration/components/util/string-array-test.ts rename to frontend-old-ember/tests/integration/components/util/string-array-test.ts diff --git a/frontend-reactive/tests/integration/helpers/binding-array-element-test.ts b/frontend-old-ember/tests/integration/helpers/binding-array-element-test.ts similarity index 100% rename from frontend-reactive/tests/integration/helpers/binding-array-element-test.ts rename to frontend-old-ember/tests/integration/helpers/binding-array-element-test.ts diff --git a/frontend-reactive/tests/integration/helpers/count-properties-test.ts b/frontend-old-ember/tests/integration/helpers/count-properties-test.ts similarity index 100% rename from frontend-reactive/tests/integration/helpers/count-properties-test.ts rename to frontend-old-ember/tests/integration/helpers/count-properties-test.ts diff --git a/frontend-reactive/tests/integration/helpers/equals-test.ts b/frontend-old-ember/tests/integration/helpers/equals-test.ts similarity index 100% rename from frontend-reactive/tests/integration/helpers/equals-test.ts rename to frontend-old-ember/tests/integration/helpers/equals-test.ts diff --git a/frontend-reactive/tests/integration/helpers/is-valid-mail-test.ts b/frontend-old-ember/tests/integration/helpers/is-valid-mail-test.ts similarity index 100% rename from frontend-reactive/tests/integration/helpers/is-valid-mail-test.ts rename to frontend-old-ember/tests/integration/helpers/is-valid-mail-test.ts diff --git a/frontend-reactive/tests/integration/helpers/tokenise-content-test.ts b/frontend-old-ember/tests/integration/helpers/tokenise-content-test.ts similarity index 100% rename from frontend-reactive/tests/integration/helpers/tokenise-content-test.ts rename to frontend-old-ember/tests/integration/helpers/tokenise-content-test.ts diff --git a/frontend-reactive/tests/test-helper.ts b/frontend-old-ember/tests/test-helper.ts similarity index 100% rename from frontend-reactive/tests/test-helper.ts rename to frontend-old-ember/tests/test-helper.ts diff --git a/frontend-reactive/tests/unit/.gitkeep b/frontend-old-ember/tests/unit/.gitkeep similarity index 100% rename from frontend-reactive/tests/unit/.gitkeep rename to frontend-old-ember/tests/unit/.gitkeep diff --git a/frontend-reactive/tests/unit/models/account-test.js b/frontend-old-ember/tests/unit/models/account-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/account-test.js rename to frontend-old-ember/tests/unit/models/account-test.js diff --git a/frontend-reactive/tests/unit/models/custom-account-field-test.js b/frontend-old-ember/tests/unit/models/custom-account-field-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/custom-account-field-test.js rename to frontend-old-ember/tests/unit/models/custom-account-field-test.js diff --git a/frontend-reactive/tests/unit/models/emote-test.js b/frontend-old-ember/tests/unit/models/emote-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/emote-test.js rename to frontend-old-ember/tests/unit/models/emote-test.js diff --git a/frontend-reactive/tests/unit/models/media-metadata-test.js b/frontend-old-ember/tests/unit/models/media-metadata-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/media-metadata-test.js rename to frontend-old-ember/tests/unit/models/media-metadata-test.js diff --git a/frontend-reactive/tests/unit/models/note-test.js b/frontend-old-ember/tests/unit/models/note-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/note-test.js rename to frontend-old-ember/tests/unit/models/note-test.js diff --git a/frontend-reactive/tests/unit/models/reaction-test.js b/frontend-old-ember/tests/unit/models/reaction-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/reaction-test.js rename to frontend-old-ember/tests/unit/models/reaction-test.js diff --git a/frontend-reactive/tests/unit/models/relation-test.js b/frontend-old-ember/tests/unit/models/relation-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/relation-test.js rename to frontend-old-ember/tests/unit/models/relation-test.js diff --git a/frontend-reactive/tests/unit/models/remote-server-test.js b/frontend-old-ember/tests/unit/models/remote-server-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/remote-server-test.js rename to frontend-old-ember/tests/unit/models/remote-server-test.js diff --git a/frontend-reactive/tests/unit/models/role-test.js b/frontend-old-ember/tests/unit/models/role-test.js similarity index 100% rename from frontend-reactive/tests/unit/models/role-test.js rename to frontend-old-ember/tests/unit/models/role-test.js diff --git a/frontend-reactive/tests/unit/routes/about-test.ts b/frontend-old-ember/tests/unit/routes/about-test.ts similarity index 100% rename from frontend-reactive/tests/unit/routes/about-test.ts rename to frontend-old-ember/tests/unit/routes/about-test.ts diff --git a/frontend-reactive/tests/unit/routes/application-test.ts b/frontend-old-ember/tests/unit/routes/application-test.ts similarity index 100% rename from frontend-reactive/tests/unit/routes/application-test.ts rename to frontend-old-ember/tests/unit/routes/application-test.ts diff --git a/frontend-reactive/tests/unit/routes/auth-test.ts b/frontend-old-ember/tests/unit/routes/auth-test.ts similarity index 100% rename from frontend-reactive/tests/unit/routes/auth-test.ts rename to frontend-old-ember/tests/unit/routes/auth-test.ts diff --git a/frontend-reactive/tests/unit/routes/index-test.ts b/frontend-old-ember/tests/unit/routes/index-test.ts similarity index 100% rename from frontend-reactive/tests/unit/routes/index-test.ts rename to frontend-old-ember/tests/unit/routes/index-test.ts diff --git a/frontend-reactive/tests/unit/routes/notes/:note-id-test.ts b/frontend-old-ember/tests/unit/routes/notes/:note-id-test.ts similarity index 100% rename from frontend-reactive/tests/unit/routes/notes/:note-id-test.ts rename to frontend-old-ember/tests/unit/routes/notes/:note-id-test.ts diff --git a/frontend-reactive/tests/unit/routes/register-form-test.ts b/frontend-old-ember/tests/unit/routes/register-form-test.ts similarity index 100% rename from frontend-reactive/tests/unit/routes/register-form-test.ts rename to frontend-old-ember/tests/unit/routes/register-form-test.ts diff --git a/frontend-reactive/tests/unit/routes/testing-test.ts b/frontend-old-ember/tests/unit/routes/testing-test.ts similarity index 100% rename from frontend-reactive/tests/unit/routes/testing-test.ts rename to frontend-old-ember/tests/unit/routes/testing-test.ts diff --git a/frontend-reactive/tests/unit/services/auth-test.ts b/frontend-old-ember/tests/unit/services/auth-test.ts similarity index 100% rename from frontend-reactive/tests/unit/services/auth-test.ts rename to frontend-old-ember/tests/unit/services/auth-test.ts diff --git a/frontend-reactive/tests/unit/services/authentication-test.ts b/frontend-old-ember/tests/unit/services/authentication-test.ts similarity index 100% rename from frontend-reactive/tests/unit/services/authentication-test.ts rename to frontend-old-ember/tests/unit/services/authentication-test.ts diff --git a/frontend-reactive/translations/de-de.yaml b/frontend-old-ember/translations/de-de.yaml similarity index 100% rename from frontend-reactive/translations/de-de.yaml rename to frontend-old-ember/translations/de-de.yaml diff --git a/frontend-reactive/translations/en-us.yaml b/frontend-old-ember/translations/en-us.yaml similarity index 100% rename from frontend-reactive/translations/en-us.yaml rename to frontend-old-ember/translations/en-us.yaml diff --git a/frontend-reactive/tsconfig.json b/frontend-old-ember/tsconfig.json similarity index 100% rename from frontend-reactive/tsconfig.json rename to frontend-old-ember/tsconfig.json diff --git a/frontend-reactive/types/ember-data/types/registries/model.d.ts b/frontend-old-ember/types/ember-data/types/registries/model.d.ts similarity index 100% rename from frontend-reactive/types/ember-data/types/registries/model.d.ts rename to frontend-old-ember/types/ember-data/types/registries/model.d.ts diff --git a/frontend-reactive/types/global.d.ts b/frontend-old-ember/types/global.d.ts similarity index 100% rename from frontend-reactive/types/global.d.ts rename to frontend-old-ember/types/global.d.ts diff --git a/frontend-vue/.editorconfig b/frontend-vue/.editorconfig new file mode 100644 index 0000000..5a5809d --- /dev/null +++ b/frontend-vue/.editorconfig @@ -0,0 +1,9 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +end_of_line = lf +max_line_length = 100 diff --git a/frontend-vue/.gitattributes b/frontend-vue/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/frontend-vue/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/frontend-vue/.gitignore b/frontend-vue/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/frontend-vue/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/frontend-vue/.prettierrc.json b/frontend-vue/.prettierrc.json new file mode 100644 index 0000000..29a2402 --- /dev/null +++ b/frontend-vue/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "singleQuote": true, + "printWidth": 100 +} diff --git a/frontend-vue/.vscode/extensions.json b/frontend-vue/.vscode/extensions.json new file mode 100644 index 0000000..a06a8c6 --- /dev/null +++ b/frontend-vue/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "Vue.volar", + "vitest.explorer", + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode" + ] +} diff --git a/frontend-vue/README.md b/frontend-vue/README.md new file mode 100644 index 0000000..fd95afc --- /dev/null +++ b/frontend-vue/README.md @@ -0,0 +1,45 @@ +# frontend-vue + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +bun install +``` + +### Compile and Hot-Reload for Development + +```sh +bun dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +bun run build +``` + +### Run Unit Tests with [Vitest](https://vitest.dev/) + +```sh +bun test:unit +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +bun lint +``` diff --git a/frontend-vue/bun.lockb b/frontend-vue/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..7999c8e98bf7d10514eb0376f3cff721adb21947 GIT binary patch literal 195481 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 diff --git a/frontend-vue/eslint.config.ts b/frontend-vue/eslint.config.ts new file mode 100644 index 0000000..1c7df8c --- /dev/null +++ b/frontend-vue/eslint.config.ts @@ -0,0 +1,28 @@ +import { globalIgnores } from 'eslint/config' +import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' +import pluginVue from 'eslint-plugin-vue' +import pluginVitest from '@vitest/eslint-plugin' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: +// import { configureVueProject } from '@vue/eslint-config-typescript' +// configureVueProject({ scriptLangs: ['ts', 'tsx'] }) +// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + + { + ...pluginVitest.configs.recommended, + files: ['src/**/__tests__/*'], + }, + skipFormatting, +) diff --git a/frontend-vue/index.html b/frontend-vue/index.html new file mode 100644 index 0000000..9e5fc8f --- /dev/null +++ b/frontend-vue/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/frontend-vue/package.json b/frontend-vue/package.json new file mode 100644 index 0000000..fb4f9ca --- /dev/null +++ b/frontend-vue/package.json @@ -0,0 +1,44 @@ +{ + "name": "frontend-vue", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "test:unit": "vitest", + "build-only": "vite build", + "type-check": "vue-tsc --build", + "lint": "eslint . --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/jsdom": "^21.1.7", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vitejs/plugin-vue-jsx": "^5.0.0", + "@vitest/eslint-plugin": "^1.2.7", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/test-utils": "^2.4.6", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "jsdom": "^26.1.0", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "npm:rolldown-vite@latest", + "vite-plugin-vue-devtools": "^7.7.7", + "vitest": "^3.2.4", + "vue-tsc": "^2.2.10" + } +} \ No newline at end of file diff --git a/frontend-vue/public/favicon.ico b/frontend-vue/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/frontend-vue/src/App.vue b/frontend-vue/src/App.vue new file mode 100644 index 0000000..7905b05 --- /dev/null +++ b/frontend-vue/src/App.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/frontend-vue/src/assets/base.css b/frontend-vue/src/assets/base.css new file mode 100644 index 0000000..8816868 --- /dev/null +++ b/frontend-vue/src/assets/base.css @@ -0,0 +1,86 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/frontend-vue/src/assets/logo.svg b/frontend-vue/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/frontend-vue/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/frontend-vue/src/assets/main.css b/frontend-vue/src/assets/main.css new file mode 100644 index 0000000..36fb845 --- /dev/null +++ b/frontend-vue/src/assets/main.css @@ -0,0 +1,35 @@ +@import './base.css'; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git a/frontend-vue/src/components/HelloWorld.vue b/frontend-vue/src/components/HelloWorld.vue new file mode 100644 index 0000000..d174cf8 --- /dev/null +++ b/frontend-vue/src/components/HelloWorld.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/frontend-vue/src/components/TheWelcome.vue b/frontend-vue/src/components/TheWelcome.vue new file mode 100644 index 0000000..8b731d9 --- /dev/null +++ b/frontend-vue/src/components/TheWelcome.vue @@ -0,0 +1,95 @@ + + + diff --git a/frontend-vue/src/components/WelcomeItem.vue b/frontend-vue/src/components/WelcomeItem.vue new file mode 100644 index 0000000..6d7086a --- /dev/null +++ b/frontend-vue/src/components/WelcomeItem.vue @@ -0,0 +1,87 @@ + + + diff --git a/frontend-vue/src/components/__tests__/HelloWorld.spec.ts b/frontend-vue/src/components/__tests__/HelloWorld.spec.ts new file mode 100644 index 0000000..2533202 --- /dev/null +++ b/frontend-vue/src/components/__tests__/HelloWorld.spec.ts @@ -0,0 +1,11 @@ +import { describe, it, expect } from 'vitest' + +import { mount } from '@vue/test-utils' +import HelloWorld from '../HelloWorld.vue' + +describe('HelloWorld', () => { + it('renders properly', () => { + const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } }) + expect(wrapper.text()).toContain('Hello Vitest') + }) +}) diff --git a/frontend-vue/src/components/icons/IconCommunity.vue b/frontend-vue/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/frontend-vue/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/frontend-vue/src/components/icons/IconDocumentation.vue b/frontend-vue/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/frontend-vue/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/frontend-vue/src/components/icons/IconEcosystem.vue b/frontend-vue/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/frontend-vue/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/frontend-vue/src/components/icons/IconSupport.vue b/frontend-vue/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/frontend-vue/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/frontend-vue/src/components/icons/IconTooling.vue b/frontend-vue/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/frontend-vue/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/frontend-vue/src/main.ts b/frontend-vue/src/main.ts new file mode 100644 index 0000000..5dcad83 --- /dev/null +++ b/frontend-vue/src/main.ts @@ -0,0 +1,14 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' + +import App from './App.vue' +import router from './router' + +const app = createApp(App) + +app.use(createPinia()) +app.use(router) + +app.mount('#app') diff --git a/frontend-vue/src/router/index.ts b/frontend-vue/src/router/index.ts new file mode 100644 index 0000000..3e49915 --- /dev/null +++ b/frontend-vue/src/router/index.ts @@ -0,0 +1,23 @@ +import { createRouter, createWebHistory } from 'vue-router' +import HomeView from '../views/HomeView.vue' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: HomeView, + }, + { + path: '/about', + name: 'about', + // route level code-splitting + // this generates a separate chunk (About.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import('../views/AboutView.vue'), + }, + ], +}) + +export default router diff --git a/frontend-vue/src/stores/counter.ts b/frontend-vue/src/stores/counter.ts new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/frontend-vue/src/stores/counter.ts @@ -0,0 +1,12 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', () => { + const count = ref(0) + const doubleCount = computed(() => count.value * 2) + function increment() { + count.value++ + } + + return { count, doubleCount, increment } +}) diff --git a/frontend-vue/src/views/AboutView.vue b/frontend-vue/src/views/AboutView.vue new file mode 100644 index 0000000..756ad2a --- /dev/null +++ b/frontend-vue/src/views/AboutView.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend-vue/src/views/HomeView.vue b/frontend-vue/src/views/HomeView.vue new file mode 100644 index 0000000..d5c0217 --- /dev/null +++ b/frontend-vue/src/views/HomeView.vue @@ -0,0 +1,9 @@ + + + diff --git a/frontend-vue/tsconfig.app.json b/frontend-vue/tsconfig.app.json new file mode 100644 index 0000000..913b8f2 --- /dev/null +++ b/frontend-vue/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend-vue/tsconfig.json b/frontend-vue/tsconfig.json new file mode 100644 index 0000000..100cf6a --- /dev/null +++ b/frontend-vue/tsconfig.json @@ -0,0 +1,14 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.vitest.json" + } + ] +} diff --git a/frontend-vue/tsconfig.node.json b/frontend-vue/tsconfig.node.json new file mode 100644 index 0000000..a83dfc9 --- /dev/null +++ b/frontend-vue/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*", + "eslint.config.*" + ], + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend-vue/tsconfig.vitest.json b/frontend-vue/tsconfig.vitest.json new file mode 100644 index 0000000..7d1d8ce --- /dev/null +++ b/frontend-vue/tsconfig.vitest.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.app.json", + "include": ["src/**/__tests__/*", "env.d.ts"], + "exclude": [], + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.vitest.tsbuildinfo", + + "lib": [], + "types": ["node", "jsdom"] + } +} diff --git a/frontend-vue/vite.config.ts b/frontend-vue/vite.config.ts new file mode 100644 index 0000000..d49d708 --- /dev/null +++ b/frontend-vue/vite.config.ts @@ -0,0 +1,20 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueJsx(), + vueDevTools(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +}) diff --git a/frontend-vue/vitest.config.ts b/frontend-vue/vitest.config.ts new file mode 100644 index 0000000..c328717 --- /dev/null +++ b/frontend-vue/vitest.config.ts @@ -0,0 +1,14 @@ +import { fileURLToPath } from 'node:url' +import { mergeConfig, defineConfig, configDefaults } from 'vitest/config' +import viteConfig from './vite.config' + +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + environment: 'jsdom', + exclude: [...configDefaults.exclude, 'e2e/**'], + root: fileURLToPath(new URL('./', import.meta.url)), + }, + }), +)