From ecc283ae46c9dcd65999ba1953ab8a93e52c7d85 Mon Sep 17 00:00:00 2001 From: Anatole Date: Sun, 28 May 2023 17:37:10 +0200 Subject: [PATCH 01/26] site/kick.com: authentication --- .env.dev | 1 + .env.production | 3 +- locale/en_US.yaml | 6 + package.json | 30 +- src/composable/useCookies.ts | 26 ++ src/composable/useTooltip.ts | 10 +- src/directive/TooltipDirective.ts | 5 +- src/site/kick.com/KickSite.vue | 12 +- src/site/kick.com/composable/useApp.ts | 15 + src/site/kick.com/composable/usePinia.ts | 10 + src/site/kick.com/composable/useRouter.ts | 29 ++ src/site/kick.com/modules/auth/AuthButton.vue | 271 +++++++++++++ src/site/kick.com/modules/auth/AuthModule.vue | 35 ++ .../kick.com/modules/chat/ChatController.vue | 46 +-- src/site/kick.com/modules/chat/ChatModule.vue | 39 +- .../kick.com/modules/chat/ChatObserver.vue | 22 +- src/types/app.d.ts | 2 + src/types/kick.module.d.ts | 2 + yarn.lock | 363 +++++++++++++----- 19 files changed, 758 insertions(+), 169 deletions(-) create mode 100644 src/composable/useCookies.ts create mode 100644 src/site/kick.com/composable/useApp.ts create mode 100644 src/site/kick.com/composable/usePinia.ts create mode 100644 src/site/kick.com/composable/useRouter.ts create mode 100644 src/site/kick.com/modules/auth/AuthButton.vue create mode 100644 src/site/kick.com/modules/auth/AuthModule.vue diff --git a/.env.dev b/.env.dev index 6980f8260..638aa2acb 100644 --- a/.env.dev +++ b/.env.dev @@ -1,4 +1,5 @@ NODE_ENV=development +VITE_APP_SITE="http://localhost:4200" VITE_APP_API="http://localhost:3100/v3" VITE_APP_API_GQL="http://localhost:3000/v3/gql" VITE_APP_API_REST_OLD="http://localhost:3100/v2" diff --git a/.env.production b/.env.production index 2091048ee..a26a5175d 100644 --- a/.env.production +++ b/.env.production @@ -1,7 +1,8 @@ NODE_ENV=production +VITE_APP_SITE="https://7tv.app" VITE_APP_API="https://7tv.io/v3" VITE_APP_API_GQL="https://7tv.io/v3/gql" VITE_APP_API_REST_OLD="https://7tv.io/v2" VITE_APP_API_EVENTS="wss://events.7tv.io/v3" VITE_APP_API_EGVAULT="https://egvault.7tv.io/v1" -VITE_APP_HOST="https://extension.7tv.gg" +VITE_APP_HOST="http://localhost:8080" diff --git a/locale/en_US.yaml b/locale/en_US.yaml index ddab1817f..0db0762f1 100644 --- a/locale/en_US.yaml +++ b/locale/en_US.yaml @@ -141,3 +141,9 @@ onboarding: button_done: Done button_join: Join button_review: Review + +site: + kick: + connect_button_channel: Connect {CHANNEL} + connect_button_site: Connect 7TV... + connect_popup_confidence: Are you sure you'd like to link your current kick.com account ({ACTOR}) with 7TV? diff --git a/package.json b/package.json index 9d52b84e7..63347fcfb 100644 --- a/package.json +++ b/package.json @@ -29,26 +29,26 @@ "script:compile-emoji": "tsc -p script/script.tsconfig.json --outDir dist/ && node dist/compile-emojis.js" }, "dependencies": { - "vue": "^3.3.2" + "vue": "^3.3.4" }, "devDependencies": { "@apollo/client": "^3.7.14", "@floating-ui/dom": "^1.2.8", - "@intlify/unplugin-vue-i18n": "^0.10.0", + "@intlify/unplugin-vue-i18n": "^0.11.0", "@trivago/prettier-plugin-sort-imports": "^4.1.1", - "@types/chrome": "^0.0.236", + "@types/chrome": "^0.0.237", "@types/dompurify": "^3.0.2", "@types/fs-extra": "^11.0.1", "@types/marked": "^5.0.0", - "@types/node": "^20.2.1", + "@types/node": "^20.2.5", "@types/sharedworker": "^0.0.96", "@types/ua-parser-js": "^0.7.36", "@types/uuid": "^9.0.1", - "@typescript-eslint/eslint-plugin": "^5.59.5", - "@typescript-eslint/parser": "^5.59.5", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", "@vitejs/plugin-vue": "^4.2.3", - "@vue/apollo-composable": "^4.0.0-beta.4", - "@vue/compiler-sfc": "^3.3.2", + "@vue/apollo-composable": "^4.0.0-beta.5", + "@vue/compiler-sfc": "^3.3.4", "@vue/eslint-config-prettier": "^7.1.0", "@vue/eslint-config-typescript": "^11.0.3", "@vueuse/core": "^10.1.2", @@ -58,11 +58,11 @@ "date-fns": "^2.30.0", "dexie": "^3.2.3", "dompurify": "^3.0.3", - "eslint": "^8.40.0", + "eslint": "^8.41.0", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-vue": "^9.13.0", + "eslint-plugin-vue": "^9.14.1", "graphql": "^16.6.0", - "marked": "^5.0.2", + "marked": "^5.0.3", "nanoid": "^4.0.2", "npm-run-all": "^4.1.5", "pinia": "^2.1.3", @@ -70,21 +70,21 @@ "postcss-scss": "^4.0.6", "prettier": "^2.8.8", "sass": "^1.62.1", - "stylelint": "^15.6.1", + "stylelint": "^15.6.2", "stylelint-config-html": "^1.1.0", "stylelint-config-standard": "^33.0.0", "stylelint-config-standard-scss": "^9.0.0", "stylelint-config-standard-vue": "^1.0.0", "stylelint-scss": "^5.0.0", - "terser": "^5.17.3", + "terser": "^5.17.6", "tldts": "^6.0.5", "typescript": "^5.0.4", "ua-parser-js": "^1.0.35", "uuid": "^9.0.0", - "vite": "^4.3.6", + "vite": "^4.3.9", "vite-plugin-chrome-extension": "^0.0.7", "vue-i18n": "9.2.2", - "vue-router": "4.2.0", + "vue-router": "4.2.1", "vue-tsc": "^1.6.5", "webextension-polyfill-ts": "^0.26.0" } diff --git a/src/composable/useCookies.ts b/src/composable/useCookies.ts new file mode 100644 index 000000000..23ac0b433 --- /dev/null +++ b/src/composable/useCookies.ts @@ -0,0 +1,26 @@ +class CookieMap extends Map { + refresh(): void { + super.clear(); + + const cookies = document.cookie.split(";").map((cookie) => cookie.trim()); + + for (const cookie of cookies) { + const [key, value] = cookie.split("="); + super.set(key, decodeURIComponent(value)); + } + } + + get(key: string): string | undefined { + this.refresh(); + + return super.get(key); + } +} + +const cookieMap = new CookieMap(); + +export function useCookies() { + cookieMap.refresh(); + + return cookieMap; +} diff --git a/src/composable/useTooltip.ts b/src/composable/useTooltip.ts index 9e581cb44..47abc5f30 100644 --- a/src/composable/useTooltip.ts +++ b/src/composable/useTooltip.ts @@ -1,5 +1,5 @@ import { Component, markRaw, nextTick, reactive } from "vue"; -import { computePosition, shift } from "@floating-ui/dom"; +import { Placement, computePosition, shift } from "@floating-ui/dom"; export const tooltip = reactive({ x: 0, @@ -16,7 +16,7 @@ export const tooltip = reactive({ * @param props if content is a component, these are the props to pass to it * @returns */ -export function useTooltip(content?: string | Component, props?: Record) { +export function useTooltip(content?: string | Component, props?: Record, opt?: TooltipOptions) { // this shows the tooltip function show(el: HTMLElement | undefined): void { if (!el) return; @@ -30,7 +30,7 @@ export function useTooltip(content?: string | Component, props?: Record { computePosition(el, tooltip.container as HTMLElement, { - placement: "top", + placement: opt?.placement ?? "top", middleware: [shift({ padding: 8, crossAxis: true, mainAxis: true })], }).then(({ x: xVal, y: yVal }) => { tooltip.x = xVal; @@ -47,3 +47,7 @@ export function useTooltip(content?: string | Component, props?: Record show(el)); el.addEventListener("mouseleave", hide); diff --git a/src/site/kick.com/KickSite.vue b/src/site/kick.com/KickSite.vue index 2065bc11a..9113372b8 100644 --- a/src/site/kick.com/KickSite.vue +++ b/src/site/kick.com/KickSite.vue @@ -5,11 +5,13 @@ + + diff --git a/src/site/kick.com/modules/auth/AuthModule.vue b/src/site/kick.com/modules/auth/AuthModule.vue new file mode 100644 index 000000000..1bc176940 --- /dev/null +++ b/src/site/kick.com/modules/auth/AuthModule.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/site/kick.com/modules/chat/ChatController.vue b/src/site/kick.com/modules/chat/ChatController.vue index 7a5c1cfa1..5733794d6 100644 --- a/src/site/kick.com/modules/chat/ChatController.vue +++ b/src/site/kick.com/modules/chat/ChatController.vue @@ -7,10 +7,7 @@ diff --git a/src/site/kick.com/modules/chat/ChatModule.vue b/src/site/kick.com/modules/chat/ChatModule.vue index 39a64fbd6..6e704375a 100644 --- a/src/site/kick.com/modules/chat/ChatModule.vue +++ b/src/site/kick.com/modules/chat/ChatModule.vue @@ -5,13 +5,13 @@ diff --git a/src/site/kick.com/modules/chat/ChatObserver.vue b/src/site/kick.com/modules/chat/ChatObserver.vue index e67053e10..032781de1 100644 --- a/src/site/kick.com/modules/chat/ChatObserver.vue +++ b/src/site/kick.com/modules/chat/ChatObserver.vue @@ -5,7 +5,7 @@ diff --git a/src/types/app.d.ts b/src/types/app.d.ts index b7bd693c9..b1cc23a14 100644 --- a/src/types/app.d.ts +++ b/src/types/app.d.ts @@ -389,6 +389,8 @@ declare interface YouTubeIdentity { declare interface KickIdentity { id: string; username: string; + email: string; + bio: string; } declare type Platform = "TWITCH" | "YOUTUBE" | "KICK" | "UNKNOWN"; diff --git a/src/types/kick.module.d.ts b/src/types/kick.module.d.ts index 588a41392..f80cc0888 100644 --- a/src/types/kick.module.d.ts +++ b/src/types/kick.module.d.ts @@ -1,7 +1,9 @@ +import AuthModuleVue from "@/site/kick.com/modules/auth/AuthModule.vue"; import ChatModuleVue from "@/site/kick.com/modules/chat/ChatModule.vue"; declare type KickModuleID = keyof KickModuleComponentMap; declare type KickModuleComponentMap = { + auth: typeof AuthModuleVue; chat: typeof ChatModuleVue; }; diff --git a/yarn.lock b/yarn.lock index 68aeaad16..0a8900c11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -313,10 +313,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec" - integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== +"@eslint/js@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.41.0.tgz#080321c3b68253522f7646b55b577dd99d2950b3" + integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== "@floating-ui/core@^1.2.6": version "1.2.6" @@ -354,10 +354,10 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@intlify/bundle-utils@^5.4.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-5.5.0.tgz#ae69f2cc319aa19dd22a5e758753ee72208de06d" - integrity sha512-k5xe8oAoPXiH6unXvyyyCRbq+LtLn1tSi/6r5f6mF+MsX7mcOMtgYbyAQINsjFrf7EDu5Pg4BY00VWSt8bI9XQ== +"@intlify/bundle-utils@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-6.0.1.tgz#889ef90a07f54d3285082f1fff99be06db49c65f" + integrity sha512-BkeZNKZiC0B7K3OYMwiPLoAqsZmKH3SxTL75vYAkuQ//XWR8WO0NpfjXhTxgLTVFHxMcNb2agAopC0DP6fqDrg== dependencies: "@intlify/message-compiler" "9.3.0-beta.17" "@intlify/shared" "9.3.0-beta.17" @@ -366,6 +366,7 @@ estree-walker "^2.0.2" jsonc-eslint-parser "^1.0.1" magic-string "^0.30.0" + mlly "^1.2.0" source-map "0.6.1" yaml-eslint-parser "^0.3.2" @@ -412,12 +413,12 @@ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.17.tgz#1180dcb0b30741555fad0b62e4621802e8272ee5" integrity sha512-mscf7RQsUTOil35jTij4KGW1RC9SWQjYScwLxP53Ns6g24iEd5HN7ksbt9O6FvTmlQuX77u+MXpBdfJsGqizLQ== -"@intlify/unplugin-vue-i18n@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.10.0.tgz#28a05a7b9e0a7cc35e91e6762e5e6e57f954a45c" - integrity sha512-Sf8fe26/d8rBNcg+zBSb7RA1uyhrG9zhIM+CRX6lqcznMDjLRr/1tuVaJ9E6xqJkzjfPgRzNcCqwMt6rpNkL7Q== +"@intlify/unplugin-vue-i18n@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.11.0.tgz#43d2730d86ceb214e7e147b0cc8f78f7d7df0707" + integrity sha512-ivcLZo08fvepHWV8o5lcKfhcKFSWqhwrqIAU6pUIbvq2ICo9fnXnIPYIZj7FeuHDLW1G3ADm44ZhQC3nYmvDlg== dependencies: - "@intlify/bundle-utils" "^5.4.0" + "@intlify/bundle-utils" "^6.0.1" "@intlify/shared" "9.3.0-beta.17" "@rollup/pluginutils" "^5.0.2" "@vue/compiler-sfc" "^3.2.47" @@ -525,10 +526,10 @@ javascript-natural-sort "0.7.1" lodash "^4.17.21" -"@types/chrome@^0.0.236": - version "0.0.236" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.236.tgz#f967769015c458718d4328a54682fa24f0c62c92" - integrity sha512-ArQoxO9WtDY6GWcT2cpo+D+hyASPeFt7PHQEUDXwQhRS00Rbop07rnEOA046yws0HkM83Tcew/hW6Dgvnj4iMQ== +"@types/chrome@^0.0.237": + version "0.0.237" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.237.tgz#20a38e1d1134e2725fc7eb43c881e55e1b24ddd7" + integrity sha512-krsRmyfMlck5r+H1EapsrrucDRq6iRm0NAi5fapr93CgnpVMDdK+h2+z4x79GegdW7BNH9Vb//gkptORwwwVIQ== dependencies: "@types/filesystem" "*" "@types/har-format" "*" @@ -592,11 +593,16 @@ resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node@*", "@types/node@^20.2.1": +"@types/node@*": version "20.2.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.1.tgz#de559d4b33be9a808fd43372ccee822c70f39704" integrity sha512-DqJociPbZP1lbZ5SQPk4oag6W7AyaGMO6gSfRwq3PWl4PXTwJpRQJhDq4W0kzrg3w6tJ1SwlvGZ5uKFHY13LIg== +"@types/node@^20.2.5": + version "20.2.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" + integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" @@ -637,7 +643,7 @@ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40" integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA== -"@typescript-eslint/eslint-plugin@^5.59.1", "@typescript-eslint/eslint-plugin@^5.59.5": +"@typescript-eslint/eslint-plugin@^5.59.1": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.5.tgz#f156827610a3f8cefc56baeaa93cd4a5f32966b4" integrity sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg== @@ -653,7 +659,23 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.59.1", "@typescript-eslint/parser@^5.59.5": +"@typescript-eslint/eslint-plugin@^5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz#e470af414f05ecfdc05a23e9ce6ec8f91db56fe2" + integrity sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/type-utils" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.59.1": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.5.tgz#63064f5eafbdbfb5f9dfbf5c4503cdf949852981" integrity sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw== @@ -663,6 +685,16 @@ "@typescript-eslint/typescript-estree" "5.59.5" debug "^4.3.4" +"@typescript-eslint/parser@^5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.7.tgz#02682554d7c1028b89aa44a48bf598db33048caa" + integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== + dependencies: + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + debug "^4.3.4" + "@typescript-eslint/scope-manager@5.59.5": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz#33ffc7e8663f42cfaac873de65ebf65d2bce674d" @@ -671,6 +703,14 @@ "@typescript-eslint/types" "5.59.5" "@typescript-eslint/visitor-keys" "5.59.5" +"@typescript-eslint/scope-manager@5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz#0243f41f9066f3339d2f06d7f72d6c16a16769e2" + integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + "@typescript-eslint/type-utils@5.59.5": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.5.tgz#485b0e2c5b923460bc2ea6b338c595343f06fc9b" @@ -681,11 +721,26 @@ debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/type-utils@5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz#89c97291371b59eb18a68039857c829776f1426d" + integrity sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + tsutils "^3.21.0" + "@typescript-eslint/types@5.59.5": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.5.tgz#e63c5952532306d97c6ea432cee0981f6d2258c7" integrity sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w== +"@typescript-eslint/types@5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.7.tgz#6f4857203fceee91d0034ccc30512d2939000742" + integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A== + "@typescript-eslint/typescript-estree@5.59.5": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz#9b252ce55dd765e972a7a2f99233c439c5101e42" @@ -699,6 +754,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz#b887acbd4b58e654829c94860dbff4ac55c5cff8" + integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.59.5": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.5.tgz#15b3eb619bb223302e60413adb0accd29c32bcae" @@ -713,6 +781,20 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.7.tgz#7adf068b136deae54abd9a66ba5a8780d2d0f898" + integrity sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.59.5": version "5.59.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz#ba5b8d6791a13cf9fea6716af1e7626434b29b9b" @@ -721,6 +803,14 @@ "@typescript-eslint/types" "5.59.5" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.59.7": + version "5.59.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz#09c36eaf268086b4fbb5eb9dc5199391b6485fc5" + integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + eslint-visitor-keys "^3.3.0" + "@unhead/dom@1.1.26", "@unhead/dom@^1.1.26": version "1.1.26" resolved "https://registry.yarnpkg.com/@unhead/dom/-/dom-1.1.26.tgz#1edfdb5bf686436b0521fd34690a8e195c06f117" @@ -811,10 +901,10 @@ "@volar/typescript" "1.4.1-patch.2" "@volar/vue-language-core" "1.6.5" -"@vue/apollo-composable@^4.0.0-beta.4": - version "4.0.0-beta.4" - resolved "https://registry.yarnpkg.com/@vue/apollo-composable/-/apollo-composable-4.0.0-beta.4.tgz#a93cbccfdcf9558ada0161294b42f77bee5e6a0b" - integrity sha512-lErWL+9LGfWfdfrSYY3DQB/A8Asqs46MiKwmgKeKSj7fe01tx0UpH43aiwMGj+VgEzBZ9AfqEa/Bxf0Nff/NNw== +"@vue/apollo-composable@^4.0.0-beta.5": + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@vue/apollo-composable/-/apollo-composable-4.0.0-beta.5.tgz#f01644061f96c51cbd8e3a4ab0a98cdd2a6a2a3e" + integrity sha512-PDi/LpCJrY0m1YSRIv38n1q5WGUu8T0BzbFFNjUJ3nHdElyqvDJCnazRtasyvXB16i0+4rMQhpmf/xgkRgFePA== dependencies: throttle-debounce "^3.0.1" ts-essentials "^9.1.2" @@ -830,6 +920,16 @@ estree-walker "^2.0.2" source-map-js "^1.0.2" +"@vue/compiler-core@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128" + integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g== + dependencies: + "@babel/parser" "^7.21.3" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + "@vue/compiler-dom@3.3.2", "@vue/compiler-dom@^3.3.0": version "3.3.2" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz#2012ef4879375a4ca4ee68012a9256398b848af2" @@ -838,7 +938,31 @@ "@vue/compiler-core" "3.3.2" "@vue/shared" "3.3.2" -"@vue/compiler-sfc@3.3.2", "@vue/compiler-sfc@^3.2.47", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.2": +"@vue/compiler-dom@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151" + integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w== + dependencies: + "@vue/compiler-core" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/compiler-sfc@3.3.4", "@vue/compiler-sfc@^3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df" + integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ== + dependencies: + "@babel/parser" "^7.20.15" + "@vue/compiler-core" "3.3.4" + "@vue/compiler-dom" "3.3.4" + "@vue/compiler-ssr" "3.3.4" + "@vue/reactivity-transform" "3.3.4" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + magic-string "^0.30.0" + postcss "^8.1.10" + source-map-js "^1.0.2" + +"@vue/compiler-sfc@^3.2.47", "@vue/compiler-sfc@^3.3.0": version "3.3.2" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.2.tgz#d6467acba8446655bcee7e751441232e5ddebcbf" integrity sha512-jG4jQy28H4BqzEKsQqqW65BZgmo3vzdLHTBjF+35RwtDdlFE+Fk1VWJYUnDMMqkFBo6Ye1ltSKVOMPgkzYj7SQ== @@ -862,6 +986,14 @@ "@vue/compiler-dom" "3.3.2" "@vue/shared" "3.3.2" +"@vue/compiler-ssr@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777" + integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ== + dependencies: + "@vue/compiler-dom" "3.3.4" + "@vue/shared" "3.3.4" + "@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" @@ -895,43 +1027,66 @@ estree-walker "^2.0.2" magic-string "^0.30.0" -"@vue/reactivity@3.3.2", "@vue/reactivity@^3.3.0": +"@vue/reactivity-transform@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" + integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw== + dependencies: + "@babel/parser" "^7.20.15" + "@vue/compiler-core" "3.3.4" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + magic-string "^0.30.0" + +"@vue/reactivity@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253" + integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ== + dependencies: + "@vue/shared" "3.3.4" + +"@vue/reactivity@^3.3.0": version "3.3.2" resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.2.tgz#c4ddc5087039070c0c11810f6bc1aa59c99f0cb5" integrity sha512-yX8C4uTgg2Tdj+512EEMnMKbLveoITl7YdQX35AYgx8vBvQGszKiiCN46g4RY6/deeo/5DLbeUUGxCq1qWMf5g== dependencies: "@vue/shared" "3.3.2" -"@vue/runtime-core@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.2.tgz#7c89b30c44ad42a3256806a1e37c3cd18500d6d5" - integrity sha512-qSl95qj0BvKfcsO+hICqFEoLhJn6++HtsPxmTkkadFbuhe3uQfJ8HmQwvEr7xbxBd2rcJB6XOJg7nWAn/ymC5A== +"@vue/runtime-core@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1" + integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA== dependencies: - "@vue/reactivity" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/reactivity" "3.3.4" + "@vue/shared" "3.3.4" -"@vue/runtime-dom@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.2.tgz#b0bf7ce3fa9c181049ce783a0e13480a4f350c4b" - integrity sha512-+drStsJT+0mtgHdarT7cXZReCcTFfm6ptxMrz0kAW5hms6UNBd8Q1pi4JKlncAhu+Ld/TevsSp7pqAZxBBoGng== +"@vue/runtime-dom@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566" + integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ== dependencies: - "@vue/runtime-core" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/runtime-core" "3.3.4" + "@vue/shared" "3.3.4" csstype "^3.1.1" -"@vue/server-renderer@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.2.tgz#31dce9f76380762fc42df77f6f974c4098f179e6" - integrity sha512-QCwh6OGwJg6GDLE0fbQhRTR6tnU+XDJ1iCsTYHXBiezCXAhqMygFRij7BiLF4ytvvHcg5kX9joX5R5vP85++wg== +"@vue/server-renderer@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c" + integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ== dependencies: - "@vue/compiler-ssr" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-ssr" "3.3.4" + "@vue/shared" "3.3.4" "@vue/shared@3.3.2", "@vue/shared@^3.3.0": version "3.3.2" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.2.tgz#774cd9b4635ce801b70a3fc3713779a5ef5d77c3" integrity sha512-0rFu3h8JbclbnvvKrs7Fe5FNGV9/5X2rPD7KmOzhLSUAiQH5//Hq437Gv0fR5Mev3u/nbtvmLl8XgwCU20/ZfQ== +"@vue/shared@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780" + integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== + "@vueuse/core@^10.1.2": version "10.1.2" resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.1.2.tgz#2499eadec36c5d7109338e3a2b73725040ae8011" @@ -1711,10 +1866,10 @@ eslint-plugin-prettier@^4.0.0, eslint-plugin-prettier@^4.2.1: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-vue@^9.13.0: - version "9.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.13.0.tgz#adb21448e65a7c1502af66103ff5f215632c5319" - integrity sha512-aBz9A8WB4wmpnVv0pYUt86cmH9EkcwWzgEwecBxMoRNhQjTL5i4sqadnwShv/hOdr8Hbl8XANGV7dtX9UQIAyA== +eslint-plugin-vue@^9.14.1: + version "9.14.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz#3b0c9857642dac547c7564031cfb09d283eafdd4" + integrity sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw== dependencies: "@eslint-community/eslint-utils" "^4.3.0" natural-compare "^1.4.0" @@ -1770,15 +1925,15 @@ eslint-visitor-keys@^3.4.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^8.40.0: - version "8.40.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4" - integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== +eslint@^8.41.0: + version "8.41.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.41.0.tgz#3062ca73363b4714b16dbc1e60f035e6134b6f1c" + integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.40.0" + "@eslint/js" "8.41.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -1798,13 +1953,12 @@ eslint@^8.40.0: find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" @@ -2144,6 +2298,11 @@ grapheme-splitter@^1.0.4: resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + graphql-tag@^2.12.6: version "2.12.6" resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz" @@ -2477,11 +2636,6 @@ javascript-natural-sort@0.7.1: resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz" integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" @@ -2545,6 +2699,11 @@ jsonc-eslint-parser@^1.0.1: espree "^6.0.0" semver "^6.3.0" +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" @@ -2680,10 +2839,10 @@ map-obj@^4.0.0: resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -marked@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-5.0.2.tgz#ac79e78ea7ed9ad31de70b85e274595d9029e534" - integrity sha512-TXksm9GwqXCRNbFUZmMtqNLvy3K2cQHuWmyBDLOrY1e6i9UvZpOTJXoz7fBjYkJkaUFzV9hBFxMuZSyQt8R6KQ== +marked@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/marked/-/marked-5.0.3.tgz#a8d0d457d7bce3606db3e32bb0797490cec2fa19" + integrity sha512-KUONa43Uk74uUNWMxh6lfaNYmSAsRMiDAaX8QBCCRVXzEufR0zX6T33vrGbvTnQLL02ungDM3KSzZtO+chJaHg== mathml-tag-names@^2.1.3: version "2.1.3" @@ -2772,6 +2931,16 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" +mlly@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.3.0.tgz#3184cb80c6437bda861a9f452ae74e3434ed9cd1" + integrity sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw== + dependencies: + acorn "^8.8.2" + pathe "^1.1.0" + pkg-types "^1.0.3" + ufo "^1.1.2" + ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -3033,7 +3202,7 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.0.0: +pathe@^1.0.0, pathe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03" integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w== @@ -3066,6 +3235,15 @@ pinia@^2.1.3: "@vue/devtools-api" "^6.5.0" vue-demi ">=0.14.5" +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + postcss-html@^1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz" @@ -3588,10 +3766,10 @@ stylelint-scss@^5.0.0: postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" -stylelint@^15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.6.1.tgz#e4cd33a3af88587b99a5d1328aedd8c298b6dc81" - integrity sha512-d8icFBlVl93Elf3Z5ABQNOCe4nx69is3D/NZhDLAie1eyYnpxfeKe7pCfqzT5W4F8vxHCLSDfV8nKNJzogvV2Q== +stylelint@^15.6.2: + version "15.6.2" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.6.2.tgz#06d9005b62a83b72887eed623520e9b472af8c15" + integrity sha512-fjQWwcdUye4DU+0oIxNGwawIPC5DvG5kdObY5Sg4rc87untze3gC/5g/ikePqVjrAsBUZjwMN+pZsAYbDO6ArQ== dependencies: "@csstools/css-parser-algorithms" "^2.1.1" "@csstools/css-tokenizer" "^2.1.1" @@ -3684,10 +3862,10 @@ table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" -terser@^5.17.3: - version "5.17.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.3.tgz#7f908f16b3cdf3f6c0f8338e6c1c674837f90d25" - integrity sha512-AudpAZKmZHkG9jueayypz4duuCFJMMNGRMwaPvQKWfxKedh8Z2x3OCoDqIIi1xx5+iwx1u6Au8XQcc9Lke65Yg== +terser@^5.17.6: + version "5.17.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de" + integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -3815,6 +3993,11 @@ ua-parser-js@^1.0.35: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== +ufo@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" + integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -3916,10 +4099,10 @@ vite@^2.2.0: optionalDependencies: fsevents "~2.3.2" -vite@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.6.tgz#d129487dd9edf10ec79314e2e7891c60a2f86051" - integrity sha512-cqIyLSbA6gornMS659AXTVKF7cvSHMdKmJJwQ9DXq3lwsT1uZSdktuBRlpHQ8VnOWx0QHtjDwxPpGtyo9Fh/Qg== +vite@^4.3.9: + version "4.3.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" + integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== dependencies: esbuild "^0.17.5" postcss "^8.4.23" @@ -3960,10 +4143,10 @@ vue-i18n@9.2.2: "@intlify/vue-devtools" "9.2.2" "@vue/devtools-api" "^6.2.1" -vue-router@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.0.tgz#558f31978a21ce3accf5122ffdf2cec34a5d2517" - integrity sha512-c+usESa6ZoWsm4PPdzRSyenp5A4dsUtnDJnrI03fY1IpIihA9TK3x5ffgkFDpjhLJZewsXoKURapNLFdZjuqTg== +vue-router@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.1.tgz#f8ab85c89e74682cad71519480fdf2b855e8c9e0" + integrity sha512-nW28EeifEp8Abc5AfmAShy5ZKGsGzjcnZ3L1yc2DYUo+MqbBClrRP9yda3dIekM4I50/KnEwo1wkBLf7kHH5Cw== dependencies: "@vue/devtools-api" "^6.5.0" @@ -3984,16 +4167,16 @@ vue-tsc@^1.6.5: "@volar/vue-typescript" "1.6.5" semver "^7.3.8" -vue@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.2.tgz#407f0057a7a154d836b66f94ce81779d0c2cafbc" - integrity sha512-98hJcAhyDwZoOo2flAQBSPVYG/o0HA9ivIy2ktHshjE+6/q8IMQ+kvDKQzOZTFPxvnNMcGM+zS2A00xeZMA7tA== +vue@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6" + integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw== dependencies: - "@vue/compiler-dom" "3.3.2" - "@vue/compiler-sfc" "3.3.2" - "@vue/runtime-dom" "3.3.2" - "@vue/server-renderer" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-dom" "3.3.4" + "@vue/compiler-sfc" "3.3.4" + "@vue/runtime-dom" "3.3.4" + "@vue/server-renderer" "3.3.4" + "@vue/shared" "3.3.4" webextension-polyfill-ts@^0.26.0: version "0.26.0" From 4fe670c910012dc55ff0c9ff2ddb353c6cc63cfd Mon Sep 17 00:00:00 2001 From: Anatole Date: Sun, 28 May 2023 17:39:15 +0200 Subject: [PATCH 02/26] changelog --- CHANGELOG-nightly.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG-nightly.md b/CHANGELOG-nightly.md index d48e8ed9b..6ec19a16f 100644 --- a/CHANGELOG-nightly.md +++ b/CHANGELOG-nightly.md @@ -3,6 +3,7 @@ **The changes listed here are not assigned to an official release**. - Added new feature: Paint Tool ([subscribers only](https://7tv.app/store)) +- Added a button to link a kick.com channel with 7TV - Fixed an issue which caused mod icons to be invisible - Fixed an issue which sometimes caused channel emote sets to disappear - Fixed an issue which caused stylesheets to be duplicated when running in hosted mode From 57f4183fde3a6462b3aff6636719c790ea24d6d2 Mon Sep 17 00:00:00 2001 From: Anatole Date: Sun, 28 May 2023 17:40:46 +0200 Subject: [PATCH 03/26] turn off new lint rule --- .eslintrc.cjs | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index fe9646b37..e3f0f9e8d 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -29,6 +29,7 @@ module.exports = { "vue/valid-template-root": "off", "vue/multi-word-component-names": "off", "vue/require-default-prop": "off", + "vue/no-dupe-keys": "off", "@typescript-eslint/no-non-null-assertion": "off", }, globals: { From 5e33dfb51492eb7151ac036e04e38f66ad5717ae Mon Sep 17 00:00:00 2001 From: Anatole Date: Sun, 28 May 2023 20:56:35 +0200 Subject: [PATCH 04/26] handle completion & fix chat id --- locale/en_US.yaml | 1 + src/site/kick.com/KickSite.vue | 20 ++++++- src/site/kick.com/modules/auth/AuthButton.vue | 56 +++++++++++++++---- .../kick.com/modules/chat/ChatController.vue | 2 +- src/site/kick.com/modules/chat/ChatModule.vue | 20 ++++++- 5 files changed, 81 insertions(+), 18 deletions(-) diff --git a/locale/en_US.yaml b/locale/en_US.yaml index 0db0762f1..8da566a4e 100644 --- a/locale/en_US.yaml +++ b/locale/en_US.yaml @@ -147,3 +147,4 @@ site: connect_button_channel: Connect {CHANNEL} connect_button_site: Connect 7TV... connect_popup_confidence: Are you sure you'd like to link your current kick.com account ({ACTOR}) with 7TV? + connect_popup_done: Your channel has been successfully connected to 7TV! Use the 7tv.app website to start adding emotes diff --git a/src/site/kick.com/KickSite.vue b/src/site/kick.com/KickSite.vue index 9113372b8..510ea576c 100644 --- a/src/site/kick.com/KickSite.vue +++ b/src/site/kick.com/KickSite.vue @@ -5,7 +5,7 @@ From 50bf6139bb5f6d346e47e178bebb5224b2d49f07 Mon Sep 17 00:00:00 2001 From: Anatole Date: Mon, 29 May 2023 11:07:49 +0200 Subject: [PATCH 14/26] fix: eventapi personal events platform condition --- src/worker/worker.http.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/worker/worker.http.ts b/src/worker/worker.http.ts index 0558dbb26..5216489f1 100644 --- a/src/worker/worker.http.ts +++ b/src/worker/worker.http.ts @@ -167,7 +167,7 @@ export class WorkerHttp { // begin subscriptions to personal events in the channel const cond = { ctx: "channel", - platform: "TWITCH", + platform: port.platform ?? "TWITCH", id: channel.id, }; From 6146c7d15ac895f0da9b6d105ed03b22da8edcfe Mon Sep 17 00:00:00 2001 From: Anatole Date: Mon, 29 May 2023 11:25:16 +0200 Subject: [PATCH 15/26] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 49f5fda4d..715d4edc9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Improve your viewing experience on Twitch & YouTube with new features, emotes, vanity and performance.", "private": true, "version": "3.0.8", - "dev_version": "3.2", + "dev_version": "3.3", "scripts": { "start": "NODE_ENV=dev yarn build:dev && NODE_ENV=dev vite --mode dev", "build:section:app": "vite build --config vite.config.ts", From cf846a475018ed293bcb501b7b03c35d3ee80665 Mon Sep 17 00:00:00 2001 From: Anatole Date: Mon, 29 May 2023 12:28:05 +0200 Subject: [PATCH 16/26] user card patch --- .../kick.com/modules/chat/ChatMessage.vue | 12 +++++ .../kick.com/modules/chat/ChatObserver.vue | 47 +++++++++++++++- .../kick.com/modules/chat/ChatUserCard.vue | 53 +++++++++++++++++++ 3 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 src/site/kick.com/modules/chat/ChatUserCard.vue diff --git a/src/site/kick.com/modules/chat/ChatMessage.vue b/src/site/kick.com/modules/chat/ChatMessage.vue index 532f65817..2eb9605ed 100644 --- a/src/site/kick.com/modules/chat/ChatMessage.vue +++ b/src/site/kick.com/modules/chat/ChatMessage.vue @@ -27,6 +27,7 @@ import { onMounted, watch } from "vue"; import { ref } from "vue"; import { onUnmounted } from "vue"; +import { useEventListener } from "@vueuse/core"; import { tokenize } from "@/common/Tokenize"; import { AnyToken } from "@/common/chat/ChatMessage"; import { IsEmoteToken } from "@/common/type-predicates/MessageTokens"; @@ -52,6 +53,10 @@ const props = defineProps<{ bind: ChatMessageBinding; }>(); +const emit = defineEmits<{ + (e: "open-card", bind: ChatMessageBinding): void; +}>(); + const ctx = useChannelContext(); const emotes = useChatEmotes(ctx); const cosmetics = useCosmetics(props.bind.authorID); @@ -61,6 +66,13 @@ const badgeContainer = document.createElement("seventv-container"); const containers = ref([]); const tokens = ref([]); +// Listen for click events +useEventListener(props.bind.usernameEl, "click", () => { + setTimeout(() => { + emit("open-card", props.bind); + }, 50); +}); + // Process kick's text entries into a containerized token function process(): void { props.bind.usernameEl.insertAdjacentElement("beforebegin", badgeContainer); diff --git a/src/site/kick.com/modules/chat/ChatObserver.vue b/src/site/kick.com/modules/chat/ChatObserver.vue index 388f82576..746eee850 100644 --- a/src/site/kick.com/modules/chat/ChatObserver.vue +++ b/src/site/kick.com/modules/chat/ChatObserver.vue @@ -1,19 +1,33 @@ From 26752951b4bf4a6ce6ae0fb97ba8bfe55885e17b Mon Sep 17 00:00:00 2001 From: Anatole Date: Mon, 29 May 2023 12:44:28 +0200 Subject: [PATCH 17/26] aggressive load check --- src/site/kick.com/modules/chat/ChatModule.vue | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/site/kick.com/modules/chat/ChatModule.vue b/src/site/kick.com/modules/chat/ChatModule.vue index 206743514..fea9d471b 100644 --- a/src/site/kick.com/modules/chat/ChatModule.vue +++ b/src/site/kick.com/modules/chat/ChatModule.vue @@ -7,12 +7,14 @@ From 7be837c632ff162bdd23d8549cf811fc0dffb2b6 Mon Sep 17 00:00:00 2001 From: Anatole Date: Mon, 29 May 2023 14:17:46 +0200 Subject: [PATCH 18/26] nit: user card badge size --- src/site/kick.com/modules/chat/ChatUserCard.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/site/kick.com/modules/chat/ChatUserCard.vue b/src/site/kick.com/modules/chat/ChatUserCard.vue index b4871b367..15f05f29c 100644 --- a/src/site/kick.com/modules/chat/ChatUserCard.vue +++ b/src/site/kick.com/modules/chat/ChatUserCard.vue @@ -51,3 +51,9 @@ onUnmounted(() => { badgeContainer.remove(); }); + + From 8a9caeba67276dd7396937ec0d5e13f10c348409 Mon Sep 17 00:00:00 2001 From: Anatole Date: Mon, 29 May 2023 19:03:36 +0200 Subject: [PATCH 19/26] emote menu --- .../modules => app}/chat/ChatData.vue | 9 +- src/app/emote-menu/EmoteMenu.vue | 277 ++++++++++++++++++ .../emote-menu/EmoteMenuContext.ts | 0 .../emote-menu/EmoteMenuSet.vue | 11 +- .../emote-menu/EmoteMenuTab.vue | 8 +- src/assets/svg/logos/Logo.vue | 12 +- src/assets/svg/logos/LogoKick.vue | 9 + src/common/Image.ts | 2 +- src/common/Transform.ts | 12 +- src/composable/chat/useChatEmotes.ts | 2 +- src/site/global/components/EmoteCard.vue | 2 +- src/site/kick.com/KickSite.vue | 2 +- .../modules/chat/ChatAutocomplete.vue | 15 +- .../kick.com/modules/chat/ChatController.vue | 56 +++- .../kick.com/modules/chat/ChatMessage.vue | 6 +- .../kick.com/modules/chat/ChatObserver.vue | 26 +- src/site/twitch.tv/TwitchSite.vue | 2 +- .../twitch.tv/modules/chat-vod/ChatVod.vue | 4 +- .../twitch.tv/modules/chat/ChatController.vue | 2 +- src/site/twitch.tv/modules/chat/ChatList.vue | 2 +- .../modules/emote-menu/EmoteMenu.vue | 67 +---- .../modules/emote-menu/EmoteMenuButton.vue | 2 +- src/site/youtube.com/YouTubeSite.vue | 2 +- src/store/main.ts | 11 +- src/types/app.d.ts | 2 +- src/worker/index.ts | 1 + src/worker/worker.http.ts | 12 +- src/worker/worker.port.ts | 8 +- 28 files changed, 440 insertions(+), 124 deletions(-) rename src/{site/twitch.tv/modules => app}/chat/ChatData.vue (95%) create mode 100644 src/app/emote-menu/EmoteMenu.vue rename src/{site/twitch.tv/modules => app}/emote-menu/EmoteMenuContext.ts (100%) rename src/{site/twitch.tv/modules => app}/emote-menu/EmoteMenuSet.vue (96%) rename src/{site/twitch.tv/modules => app}/emote-menu/EmoteMenuTab.vue (97%) create mode 100644 src/assets/svg/logos/LogoKick.vue diff --git a/src/site/twitch.tv/modules/chat/ChatData.vue b/src/app/chat/ChatData.vue similarity index 95% rename from src/site/twitch.tv/modules/chat/ChatData.vue rename to src/app/chat/ChatData.vue index 6755642a2..2baed1b58 100644 --- a/src/site/twitch.tv/modules/chat/ChatData.vue +++ b/src/app/chat/ChatData.vue @@ -1,6 +1,7 @@ diff --git a/src/assets/svg/logos/LogoKick.vue b/src/assets/svg/logos/LogoKick.vue new file mode 100644 index 000000000..4979387e7 --- /dev/null +++ b/src/assets/svg/logos/LogoKick.vue @@ -0,0 +1,9 @@ + diff --git a/src/common/Image.ts b/src/common/Image.ts index bf093c6da..7f6861046 100644 --- a/src/common/Image.ts +++ b/src/common/Image.ts @@ -1,7 +1,7 @@ import { useUserAgent } from "@/composable/useUserAgent"; const layout = { - TWITCH: [1, 2, 3], + PLATFORM: [1, 2, 3], "7TV": [1, 2, 3, 4], FFZ: [1, 2, 4], BTTV: [1, 2, 4], diff --git a/src/common/Transform.ts b/src/common/Transform.ts index 00b71ad05..c83f7513c 100644 --- a/src/common/Transform.ts +++ b/src/common/Transform.ts @@ -4,17 +4,17 @@ import { ChatMessage, ChatUser } from "./chat/ChatMessage"; const BTTV_ZeroWidth = ["SoSnowy", "IceCold", "SantaHat", "TopHat", "ReinDeer", "CandyCane", "cvMask", "cvHazmat"]; -export function convertTwitchEmoteSet(data: Twitch.TwitchEmoteSet): SevenTV.EmoteSet { +export function convertPlatformEmoteSet(data: Twitch.TwitchEmoteSet): SevenTV.EmoteSet { const isGlobalSet = !data.owner; return { - id: "TWITCH#" + data.id, + id: "PLATFORM#" + data.id, name: data.owner?.displayName ?? "Global Emotes", immutable: true, privileged: true, tags: [], flags: 0, - provider: "TWITCH", + provider: "PLATFORM", scope: isGlobalSet ? "GLOBAL" : "CHANNEL", owner: data.owner?.displayName ? { @@ -30,7 +30,7 @@ export function convertTwitchEmoteSet(data: Twitch.TwitchEmoteSet): SevenTV.Emot id: e.id, name: e.token, flags: 0, - provider: "TWITCH", + provider: "PLATFORM", data: d, }; }), @@ -80,7 +80,7 @@ export function convertTwitchEmote( }, }; - emote.host.srcset = imageHostToSrcset(emote.host, "TWITCH"); + emote.host.srcset = imageHostToSrcset(emote.host, "PLATFORM"); return emote; } @@ -325,7 +325,7 @@ export function convertTwitchBadge(data: TwTypeBadge): SevenTV.Cosmetic<"BADGE"> return { id: data.setID + ":" + data.version, kind: "BADGE", - provider: "TWITCH", + provider: "PLATFORM", data: { name: data.title, host: { diff --git a/src/composable/chat/useChatEmotes.ts b/src/composable/chat/useChatEmotes.ts index 1f19560c2..40c5838d2 100644 --- a/src/composable/chat/useChatEmotes.ts +++ b/src/composable/chat/useChatEmotes.ts @@ -24,7 +24,7 @@ export function useChatEmotes(ctx: ChannelContext) { "7TV": reactive({}), FFZ: reactive({}), BTTV: reactive({}), - TWITCH: reactive({}), + PLATFORM: reactive({}), EMOJI: reactive(emojiSets), }, }); diff --git a/src/site/global/components/EmoteCard.vue b/src/site/global/components/EmoteCard.vue index 5f520b454..e619b8597 100644 --- a/src/site/global/components/EmoteCard.vue +++ b/src/site/global/components/EmoteCard.vue @@ -74,7 +74,7 @@ function emptyUser() { watchEffect(async () => { // for twitch emotes we - if (props.emote.provider === "TWITCH") { + if (props.emote.provider === "PLATFORM") { const apollo = useApollo(); if (!apollo) return; diff --git a/src/site/kick.com/KickSite.vue b/src/site/kick.com/KickSite.vue index 5f58f4e70..49ed7efc3 100644 --- a/src/site/kick.com/KickSite.vue +++ b/src/site/kick.com/KickSite.vue @@ -21,7 +21,7 @@ const ua = useUserAgent(); ua.preferredFormat = store.avifSupported ? "AVIF" : "WEBP"; store.setPreferredImageFormat(ua.preferredFormat); -store.setPlatform("KICK", []); +store.setPlatform("KICK", ["7TV"], []); document.body.setAttribute("seventv-kick", "true"); diff --git a/src/site/kick.com/modules/chat/ChatAutocomplete.vue b/src/site/kick.com/modules/chat/ChatAutocomplete.vue index 680959ab8..db83fb191 100644 --- a/src/site/kick.com/modules/chat/ChatAutocomplete.vue +++ b/src/site/kick.com/modules/chat/ChatAutocomplete.vue @@ -1,6 +1,4 @@ - + + + + + + + + + diff --git a/src/site/kick.com/modules/chat/ChatMessage.vue b/src/site/kick.com/modules/chat/ChatMessage.vue index 2eb9605ed..19f6b9ea5 100644 --- a/src/site/kick.com/modules/chat/ChatMessage.vue +++ b/src/site/kick.com/modules/chat/ChatMessage.vue @@ -67,10 +67,8 @@ const containers = ref([]); const tokens = ref([]); // Listen for click events -useEventListener(props.bind.usernameEl, "click", () => { - setTimeout(() => { - emit("open-card", props.bind); - }, 50); +useEventListener(props.bind.usernameEl.parentElement, "click", () => { + emit("open-card", props.bind); }); // Process kick's text entries into a containerized token diff --git a/src/site/kick.com/modules/chat/ChatObserver.vue b/src/site/kick.com/modules/chat/ChatObserver.vue index 746eee850..4ddae20b1 100644 --- a/src/site/kick.com/modules/chat/ChatObserver.vue +++ b/src/site/kick.com/modules/chat/ChatObserver.vue @@ -88,14 +88,14 @@ async function onOpenUserCard(bind: ChatMessageBinding) { }); } -function patchCurrentElements(): void { +function patch(): void { const entries = props.listElement.querySelectorAll("[data-chat-entry]"); for (const el of Array.from(entries)) { patchMessageElement(el as HTMLDivElement); } } -watchEffect(patchCurrentElements); +watchEffect(patch); useMutationObserver( props.listElement, @@ -110,3 +110,25 @@ useMutationObserver( { childList: true }, ); + + diff --git a/src/site/twitch.tv/TwitchSite.vue b/src/site/twitch.tv/TwitchSite.vue index 3ab87085d..08b52c7f0 100644 --- a/src/site/twitch.tv/TwitchSite.vue +++ b/src/site/twitch.tv/TwitchSite.vue @@ -27,7 +27,7 @@ const ffz = useFrankerFaceZ(); const useTransparency = useConfig("ui.transparent_backgrounds"); ua.preferredFormat = store.avifSupported ? "AVIF" : "WEBP"; store.setPreferredImageFormat(ua.preferredFormat); -store.setPlatform("TWITCH", ffz.active ? ["FFZ"] : []); +store.setPlatform("TWITCH", ["7TV", "FFZ", "BTTV"], ffz.active ? ["FFZ"] : []); const currentPath = ref(""); diff --git a/src/site/twitch.tv/modules/chat-vod/ChatVod.vue b/src/site/twitch.tv/modules/chat-vod/ChatVod.vue index 92384b1ae..58378c84f 100644 --- a/src/site/twitch.tv/modules/chat-vod/ChatVod.vue +++ b/src/site/twitch.tv/modules/chat-vod/ChatVod.vue @@ -23,8 +23,8 @@ import { ChatMessage } from "@/common/chat/ChatMessage"; import { useChannelContext } from "@/composable/channel/useChannelContext"; import { useChatEmotes } from "@/composable/chat/useChatEmotes"; import { useChatProperties } from "@/composable/chat/useChatProperties"; -import ChatData from "@/site/twitch.tv/modules/chat/ChatData.vue"; import type { TwTypeUser } from "@/assets/gql/tw.gql"; +import ChatData from "@/app/chat/ChatData.vue"; import UserMessage from "@/app/chat/UserMessage.vue"; import { MessagePartType } from "../.."; import intervalToDuration from "date-fns/fp/intervalToDuration"; @@ -221,7 +221,7 @@ function createMessageComponentRef(data: CommentData) { id: e.emoteID ?? "", name: e.alt, flags: 0, - provider: "TWITCH", + provider: "PLATFORM", isTwitchCheer: { amount: e.cheerAmount!, color: e.cheerColor!, diff --git a/src/site/twitch.tv/modules/chat/ChatController.vue b/src/site/twitch.tv/modules/chat/ChatController.vue index 881fa5987..961cb3917 100644 --- a/src/site/twitch.tv/modules/chat/ChatController.vue +++ b/src/site/twitch.tv/modules/chat/ChatController.vue @@ -50,11 +50,11 @@ import { getModule } from "@/composable/useModule"; import { useConfig } from "@/composable/useSettings"; import { useWorker } from "@/composable/useWorker"; import { MessageType } from "@/site/twitch.tv"; -import ChatData from "@/site/twitch.tv/modules/chat/ChatData.vue"; import ChatList from "@/site/twitch.tv/modules/chat/ChatList.vue"; import PauseIcon from "@/assets/svg/icons/PauseIcon.vue"; import ChatPubSub from "./ChatPubSub.vue"; import ChatTray from "./components/tray/ChatTray.vue"; +import ChatData from "@/app/chat/ChatData.vue"; import BasicSystemMessage from "@/app/chat/msg/BasicSystemMessage.vue"; import UiScrollable from "@/ui/UiScrollable.vue"; diff --git a/src/site/twitch.tv/modules/chat/ChatList.vue b/src/site/twitch.tv/modules/chat/ChatList.vue index d2c2ae928..902ba2c4a 100644 --- a/src/site/twitch.tv/modules/chat/ChatList.vue +++ b/src/site/twitch.tv/modules/chat/ChatList.vue @@ -242,7 +242,7 @@ function onChatMessage(msg: ChatMessage, msgData: Twitch.AnyMessage, shouldRende id: e.emoteID ?? "", name: e.alt, flags: 0, - provider: "TWITCH", + provider: "PLATFORM", isTwitchCheer: { amount: e.cheerAmount!, color: e.cheerColor!, diff --git a/src/site/twitch.tv/modules/emote-menu/EmoteMenu.vue b/src/site/twitch.tv/modules/emote-menu/EmoteMenu.vue index 3d5a9cb26..d26bcd08d 100644 --- a/src/site/twitch.tv/modules/emote-menu/EmoteMenu.vue +++ b/src/site/twitch.tv/modules/emote-menu/EmoteMenu.vue @@ -1,51 +1,5 @@ diff --git a/src/site/kick.com/modules/chat/ChatController.vue b/src/site/kick.com/modules/chat/ChatController.vue index cc0a26424..226d51d78 100644 --- a/src/site/kick.com/modules/chat/ChatController.vue +++ b/src/site/kick.com/modules/chat/ChatController.vue @@ -1,7 +1,7 @@ @@ -59,11 +59,19 @@ const { sendMessage: sendWorkerMessage } = useWorker(); const chatList = ref(null); const shallowList = ref(null); +const autocomplete = ref | null>(null); + const emoteMenu = useEmoteMenuContext(); const emoteMenuAnchor = document.getElementById("chatroom-footer"); const emoteMenuButtonContainer = document.createElement("seventv-container"); +function insertToInput(value: string): void { + if (!autocomplete.value) return; + + autocomplete.value.insertAtEnd(value); +} + let observer: ObserverPromise | null = null; watchEffect(async () => { From d27bb79558a4fa5608b3a903fb8189c8cdf0e0d4 Mon Sep 17 00:00:00 2001 From: Anatole Date: Mon, 29 May 2023 19:38:35 +0200 Subject: [PATCH 23/26] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 715d4edc9..6bc65fc3b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Improve your viewing experience on Twitch & YouTube with new features, emotes, vanity and performance.", "private": true, "version": "3.0.8", - "dev_version": "3.3", + "dev_version": "3.31", "scripts": { "start": "NODE_ENV=dev yarn build:dev && NODE_ENV=dev vite --mode dev", "build:section:app": "vite build --config vite.config.ts", From 7ebb8a79ef59fb68d583ea6d0ac0e79272174dd3 Mon Sep 17 00:00:00 2001 From: Anatole Date: Tue, 30 May 2023 17:15:55 +0200 Subject: [PATCH 24/26] worker: fix user channel event subscribe --- src/worker/worker.http.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/worker/worker.http.ts b/src/worker/worker.http.ts index 61c17a3c9..906e97713 100644 --- a/src/worker/worker.http.ts +++ b/src/worker/worker.http.ts @@ -103,11 +103,11 @@ export class WorkerHttp { ); // setup fetching promises - const user = seventv.loadUserConnection(port.platform ?? "TWITCH", channel.id).catch(() => void 0); + const userPromise = seventv.loadUserConnection(port.platform ?? "TWITCH", channel.id).catch(() => void 0); const promises = ( [ - ["7TV", user.then((es) => (es ? es.emote_set : null)).catch(() => void 0)], + ["7TV", userPromise.then((es) => (es ? es.emote_set : null)).catch(() => void 0)], ["FFZ", frankerfacez.loadUserEmoteSet(channel.id).catch(() => void 0)], ["BTTV", betterttv.loadUserEmoteSet(channel.id).catch(() => void 0)], ] as [SevenTV.Provider, Promise][] @@ -143,7 +143,7 @@ export class WorkerHttp { await onResult(set); } - channel.user = (await user)?.user ?? undefined; + channel.user = (await userPromise)?.user ?? undefined; if (port) { // Post channel fetch notification back to port port.postMessage("CHANNEL_FETCHED", { @@ -163,7 +163,11 @@ export class WorkerHttp { port, channel.id, ); - if (set.owner) this.driver.eventAPI.subscribe("user.*", { object_id: set.owner.id }, port, channel.id); + } + + const user = await userPromise; + if (user) { + this.driver.eventAPI.subscribe("user.*", { object_id: user.id }, port, channel.id); } // begin subscriptions to personal events in the channel From 239f42ef5ffa3f066465f5125a43cb7eacbfe8a7 Mon Sep 17 00:00:00 2001 From: Anatole Date: Tue, 30 May 2023 18:50:32 +0200 Subject: [PATCH 25/26] improve emote menu scaling --- src/app/emote-menu/EmoteMenu.vue | 423 +++++++++++------- src/app/emote-menu/EmoteMenuSet.vue | 70 ++- src/app/emote-menu/EmoteMenuTab.vue | 102 ++--- src/assets/svg/icons/EmojiIcon.vue | 2 +- .../kick.com/modules/chat/ChatController.vue | 57 +-- .../kick.com/modules/chat/ChatEmoteMenu.vue | 80 ++++ .../modules/emote-menu/EmoteMenu.vue | 151 +------ 7 files changed, 454 insertions(+), 431 deletions(-) create mode 100644 src/site/kick.com/modules/chat/ChatEmoteMenu.vue diff --git a/src/app/emote-menu/EmoteMenu.vue b/src/app/emote-menu/EmoteMenu.vue index d9887f6f5..0ae07eda9 100644 --- a/src/app/emote-menu/EmoteMenu.vue +++ b/src/app/emote-menu/EmoteMenu.vue @@ -1,56 +1,58 @@ diff --git a/src/app/emote-menu/EmoteMenuSet.vue b/src/app/emote-menu/EmoteMenuSet.vue index 0b42fedbf..19ea28415 100644 --- a/src/app/emote-menu/EmoteMenuSet.vue +++ b/src/app/emote-menu/EmoteMenuSet.vue @@ -6,7 +6,7 @@