diff --git a/packages/frontend-shared/js-built/array.d.ts b/packages/frontend-shared/js-built/array.d.ts deleted file mode 100644 index 358581f0e0..0000000000 --- a/packages/frontend-shared/js-built/array.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -type Predicate = (x: T) => boolean; -export declare function countIf(f: Predicate, xs: T[]): number; -export declare function count(a: T, xs: T[]): number; -export declare function concat(xss: T[][]): T[]; -export declare function intersperse(sep: T, xs: T[]): T[]; -export declare function erase(a: T, xs: T[]): T[]; -export declare function difference(xs: T[], ys: T[]): T[]; -export declare function unique(xs: T[]): T[]; -export declare function uniqueBy(values: TValue[], keySelector: (value: TValue) => TKey): TValue[]; -export declare function sum(xs: number[]): number; -export declare function maximum(xs: number[]): number; -export declare function lessThan(xs: number[], ys: number[]): boolean; -export declare function takeWhile(f: Predicate, xs: T[]): T[]; -export declare function cumulativeSum(xs: number[]): number[]; -export declare function toArray(x: T | T[] | undefined): T[]; -export declare function toSingle(x: T | T[] | undefined): T | undefined; -export {}; -//# sourceMappingURL=array.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/array.d.ts.map b/packages/frontend-shared/js-built/array.d.ts.map deleted file mode 100644 index e1ac11745f..0000000000 --- a/packages/frontend-shared/js-built/array.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../js/array.ts"],"names":[],"mappings":"AAMA,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAMtC,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,MAAM,CAE3D;AAKD,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,MAAM,CAE9C;AAKD,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAEzC;AAMD,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEnD;AAKD,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE3C;AAMD,wBAAgB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEnD;AAKD,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEtC;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,EAAE,CASvG;AAED,wBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAExC;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAE5C;AAKD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAM5D;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAU1D;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAIpD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,EAAE,CAEtD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAEjE"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/array.js b/packages/frontend-shared/js-built/array.js deleted file mode 100644 index 53577a00ad..0000000000 --- a/packages/frontend-shared/js-built/array.js +++ /dev/null @@ -1,82 +0,0 @@ -function countIf(f, xs) { - return xs.filter(f).length; -} -function count(a, xs) { - return countIf((x) => x === a, xs); -} -function concat(xss) { - return [].concat(...xss); -} -function intersperse(sep, xs) { - return concat(xs.map((x) => [sep, x])).slice(1); -} -function erase(a, xs) { - return xs.filter((x) => x !== a); -} -function difference(xs, ys) { - return xs.filter((x) => !ys.includes(x)); -} -function unique(xs) { - return [...new Set(xs)]; -} -function uniqueBy(values, keySelector) { - const map = /* @__PURE__ */ new Map(); - for (const value of values) { - const key = keySelector(value); - if (!map.has(key)) map.set(key, value); - } - return [...map.values()]; -} -function sum(xs) { - return xs.reduce((a, b) => a + b, 0); -} -function maximum(xs) { - return Math.max(...xs); -} -function lessThan(xs, ys) { - for (let i = 0; i < Math.min(xs.length, ys.length); i++) { - if (xs[i] < ys[i]) return true; - if (xs[i] > ys[i]) return false; - } - return xs.length < ys.length; -} -function takeWhile(f, xs) { - const ys = []; - for (const x of xs) { - if (f(x)) { - ys.push(x); - } else { - break; - } - } - return ys; -} -function cumulativeSum(xs) { - const ys = Array.from(xs); - for (let i = 1; i < ys.length; i++) ys[i] += ys[i - 1]; - return ys; -} -function toArray(x) { - return Array.isArray(x) ? x : x != null ? [x] : []; -} -function toSingle(x) { - return Array.isArray(x) ? x[0] : x; -} -export { - concat, - count, - countIf, - cumulativeSum, - difference, - erase, - intersperse, - lessThan, - maximum, - sum, - takeWhile, - toArray, - toSingle, - unique, - uniqueBy -}; -//# sourceMappingURL=array.js.map diff --git a/packages/frontend-shared/js-built/array.js.map b/packages/frontend-shared/js-built/array.js.map deleted file mode 100644 index 559d885973..0000000000 --- a/packages/frontend-shared/js-built/array.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/array.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\ntype EndoRelation = (a: T, b: T) => boolean;\ntype Predicate = (x: T) => boolean;\n\n/**\n * Count the number of elements that satisfy the predicate\n */\n\nexport function countIf(f: Predicate, xs: T[]): number {\n\treturn xs.filter(f).length;\n}\n\n/**\n * Count the number of elements that is equal to the element\n */\nexport function count(a: T, xs: T[]): number {\n\treturn countIf(x => x === a, xs);\n}\n\n/**\n * Concatenate an array of arrays\n */\nexport function concat(xss: T[][]): T[] {\n\treturn ([] as T[]).concat(...xss);\n}\n\n/**\n * Intersperse the element between the elements of the array\n * @param sep The element to be interspersed\n */\nexport function intersperse(sep: T, xs: T[]): T[] {\n\treturn concat(xs.map(x => [sep, x])).slice(1);\n}\n\n/**\n * Returns the array of elements that is not equal to the element\n */\nexport function erase(a: T, xs: T[]): T[] {\n\treturn xs.filter(x => x !== a);\n}\n\n/**\n * Finds the array of all elements in the first array not contained in the second array.\n * The order of result values are determined by the first array.\n */\nexport function difference(xs: T[], ys: T[]): T[] {\n\treturn xs.filter(x => !ys.includes(x));\n}\n\n/**\n * Remove all but the first element from every group of equivalent elements\n */\nexport function unique(xs: T[]): T[] {\n\treturn [...new Set(xs)];\n}\n\nexport function uniqueBy(values: TValue[], keySelector: (value: TValue) => TKey): TValue[] {\n\tconst map = new Map();\n\n\tfor (const value of values) {\n\t\tconst key = keySelector(value);\n\t\tif (!map.has(key)) map.set(key, value);\n\t}\n\n\treturn [...map.values()];\n}\n\nexport function sum(xs: number[]): number {\n\treturn xs.reduce((a, b) => a + b, 0);\n}\n\nexport function maximum(xs: number[]): number {\n\treturn Math.max(...xs);\n}\n\n/**\n * Compare two arrays by lexicographical order\n */\nexport function lessThan(xs: number[], ys: number[]): boolean {\n\tfor (let i = 0; i < Math.min(xs.length, ys.length); i++) {\n\t\tif (xs[i] < ys[i]) return true;\n\t\tif (xs[i] > ys[i]) return false;\n\t}\n\treturn xs.length < ys.length;\n}\n\n/**\n * Returns the longest prefix of elements that satisfy the predicate\n */\nexport function takeWhile(f: Predicate, xs: T[]): T[] {\n\tconst ys: T[] = [];\n\tfor (const x of xs) {\n\t\tif (f(x)) {\n\t\t\tys.push(x);\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn ys;\n}\n\nexport function cumulativeSum(xs: number[]): number[] {\n\tconst ys = Array.from(xs); // deep copy\n\tfor (let i = 1; i < ys.length; i++) ys[i] += ys[i - 1];\n\treturn ys;\n}\n\nexport function toArray(x: T | T[] | undefined): T[] {\n\treturn Array.isArray(x) ? x : x != null ? [x] : [];\n}\n\nexport function toSingle(x: T | T[] | undefined): T | undefined {\n\treturn Array.isArray(x) ? x[0] : x;\n}\n"], - "mappings": "AAYO,SAAS,QAAW,GAAiB,IAAiB;AAC5D,SAAO,GAAG,OAAO,CAAC,EAAE;AACrB;AAKO,SAAS,MAAS,GAAM,IAAiB;AAC/C,SAAO,QAAQ,OAAK,MAAM,GAAG,EAAE;AAChC;AAKO,SAAS,OAAU,KAAiB;AAC1C,SAAQ,CAAC,EAAU,OAAO,GAAG,GAAG;AACjC;AAMO,SAAS,YAAe,KAAQ,IAAc;AACpD,SAAO,OAAO,GAAG,IAAI,OAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;AAC7C;AAKO,SAAS,MAAS,GAAM,IAAc;AAC5C,SAAO,GAAG,OAAO,OAAK,MAAM,CAAC;AAC9B;AAMO,SAAS,WAAc,IAAS,IAAc;AACpD,SAAO,GAAG,OAAO,OAAK,CAAC,GAAG,SAAS,CAAC,CAAC;AACtC;AAKO,SAAS,OAAU,IAAc;AACvC,SAAO,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACvB;AAEO,SAAS,SAAuB,QAAkB,aAAgD;AACxG,QAAM,MAAM,oBAAI,IAAkB;AAElC,aAAW,SAAS,QAAQ;AAC3B,UAAM,MAAM,YAAY,KAAK;AAC7B,QAAI,CAAC,IAAI,IAAI,GAAG,EAAG,KAAI,IAAI,KAAK,KAAK;AAAA,EACtC;AAEA,SAAO,CAAC,GAAG,IAAI,OAAO,CAAC;AACxB;AAEO,SAAS,IAAI,IAAsB;AACzC,SAAO,GAAG,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACpC;AAEO,SAAS,QAAQ,IAAsB;AAC7C,SAAO,KAAK,IAAI,GAAG,EAAE;AACtB;AAKO,SAAS,SAAS,IAAc,IAAuB;AAC7D,WAAS,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK;AACxD,QAAI,GAAG,CAAC,IAAI,GAAG,CAAC,EAAG,QAAO;AAC1B,QAAI,GAAG,CAAC,IAAI,GAAG,CAAC,EAAG,QAAO;AAAA,EAC3B;AACA,SAAO,GAAG,SAAS,GAAG;AACvB;AAKO,SAAS,UAAa,GAAiB,IAAc;AAC3D,QAAM,KAAU,CAAC;AACjB,aAAW,KAAK,IAAI;AACnB,QAAI,EAAE,CAAC,GAAG;AACT,SAAG,KAAK,CAAC;AAAA,IACV,OAAO;AACN;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAEO,SAAS,cAAc,IAAwB;AACrD,QAAM,KAAK,MAAM,KAAK,EAAE;AACxB,WAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAK,IAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AACrD,SAAO;AACR;AAEO,SAAS,QAAW,GAA6B;AACvD,SAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC;AAClD;AAEO,SAAS,SAAY,GAAuC;AAClE,SAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI;AAClC;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/collapsed.d.ts b/packages/frontend-shared/js-built/collapsed.d.ts deleted file mode 100644 index 6583eba6a4..0000000000 --- a/packages/frontend-shared/js-built/collapsed.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as Misskey from 'cherrypick-js'; -export declare function shouldCollapsed(note: Misskey.entities.Note, urls: string[]): boolean; -export declare function shouldMfmCollapsed(note: Misskey.entities.Note): boolean; -export declare function shouldAnimatedMfm(note: Misskey.entities.Note): boolean; -//# sourceMappingURL=collapsed.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/collapsed.d.ts.map b/packages/frontend-shared/js-built/collapsed.d.ts.map deleted file mode 100644 index 99c8484f49..0000000000 --- a/packages/frontend-shared/js-built/collapsed.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"collapsed.d.ts","sourceRoot":"","sources":["../js/collapsed.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AAEzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAQpF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAOvE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAatE"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/collapsed.js b/packages/frontend-shared/js-built/collapsed.js deleted file mode 100644 index 338140f02c..0000000000 --- a/packages/frontend-shared/js-built/collapsed.js +++ /dev/null @@ -1,15 +0,0 @@ -function shouldCollapsed(note, urls) { - return note.cw == null && (note.text != null && (note.text.split("\n").length > 9 || note.text.length > 500 || urls.length >= 4) || note.files != null && note.files.length >= 5); -} -function shouldMfmCollapsed(note) { - return note.cw == null && note.text != null && (note.text.includes("$[x2") || note.text.includes("$[x3") || note.text.includes("$[x4") || note.text.includes("$[scale")); -} -function shouldAnimatedMfm(note) { - return note.cw == null && note.text != null && (note.text.includes("$[tada") || note.text.includes("$[jelly") || note.text.includes("$[twitch") || note.text.includes("$[shake") || note.text.includes("$[spin") || note.text.includes("$[jump") || note.text.includes("$[bounce") || note.text.includes("$[rainbow") || note.text.includes("$[sparkle") || note.text.includes("$[fade")); -} -export { - shouldAnimatedMfm, - shouldCollapsed, - shouldMfmCollapsed -}; -//# sourceMappingURL=collapsed.js.map diff --git a/packages/frontend-shared/js-built/collapsed.js.map b/packages/frontend-shared/js-built/collapsed.js.map deleted file mode 100644 index 2eb4c2ca20..0000000000 --- a/packages/frontend-shared/js-built/collapsed.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/collapsed.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nimport * as Misskey from 'cherrypick-js';\n\nexport function shouldCollapsed(note: Misskey.entities.Note, urls: string[]): boolean {\n\treturn note.cw == null && (\n\t\t(note.text != null && (\n\t\t\t(note.text.split('\\n').length > 9) ||\n\t\t\t(note.text.length > 500) ||\n\t\t\t(urls.length >= 4)\n\t\t)) || (note.files != null && note.files.length >= 5)\n\t);\n}\n\nexport function shouldMfmCollapsed(note: Misskey.entities.Note): boolean {\n\treturn note.cw == null && note.text != null && (\n\t\t(note.text.includes('$[x2')) ||\n\t\t(note.text.includes('$[x3')) ||\n\t\t(note.text.includes('$[x4')) ||\n\t\t(note.text.includes('$[scale'))\n\t);\n}\n\nexport function shouldAnimatedMfm(note: Misskey.entities.Note): boolean {\n\treturn note.cw == null && note.text != null && (\n\t\t(note.text.includes('$[tada')) ||\n\t\t(note.text.includes('$[jelly')) ||\n\t\t(note.text.includes('$[twitch')) ||\n\t\t(note.text.includes('$[shake')) ||\n\t\t(note.text.includes('$[spin')) ||\n\t\t(note.text.includes('$[jump')) ||\n\t\t(note.text.includes('$[bounce')) ||\n\t\t(note.text.includes('$[rainbow')) ||\n\t\t(note.text.includes('$[sparkle')) ||\n\t\t(note.text.includes('$[fade'))\n\t);\n}\n"], - "mappings": "AAOO,SAAS,gBAAgB,MAA6B,MAAyB;AACrF,SAAO,KAAK,MAAM,SAChB,KAAK,QAAQ,SACZ,KAAK,KAAK,MAAM,IAAI,EAAE,SAAS,KAC/B,KAAK,KAAK,SAAS,OACnB,KAAK,UAAU,MACV,KAAK,SAAS,QAAQ,KAAK,MAAM,UAAU;AAEpD;AAEO,SAAS,mBAAmB,MAAsC;AACxE,SAAO,KAAK,MAAM,QAAQ,KAAK,QAAQ,SACrC,KAAK,KAAK,SAAS,MAAM,KACzB,KAAK,KAAK,SAAS,MAAM,KACzB,KAAK,KAAK,SAAS,MAAM,KACzB,KAAK,KAAK,SAAS,SAAS;AAE/B;AAEO,SAAS,kBAAkB,MAAsC;AACvE,SAAO,KAAK,MAAM,QAAQ,KAAK,QAAQ,SACrC,KAAK,KAAK,SAAS,QAAQ,KAC3B,KAAK,KAAK,SAAS,SAAS,KAC5B,KAAK,KAAK,SAAS,UAAU,KAC7B,KAAK,KAAK,SAAS,SAAS,KAC5B,KAAK,KAAK,SAAS,QAAQ,KAC3B,KAAK,KAAK,SAAS,QAAQ,KAC3B,KAAK,KAAK,SAAS,UAAU,KAC7B,KAAK,KAAK,SAAS,WAAW,KAC9B,KAAK,KAAK,SAAS,WAAW,KAC9B,KAAK,KAAK,SAAS,QAAQ;AAE9B;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/config.d.ts b/packages/frontend-shared/js-built/config.d.ts deleted file mode 100644 index 40a2382b84..0000000000 --- a/packages/frontend-shared/js-built/config.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Locale } from '../../../locales/index.js'; -export declare const host: string; -export declare const hostname: string; -export declare const url: string; -export declare const apiUrl: string; -export declare const wsOrigin: string; -export declare const lang: string; -export declare const langs: string[][]; -export declare let locale: Locale; -export declare const version: string; -export declare const basedMisskeyVersion: string; -export declare const instanceName: string; -export declare const ui: string | null; -export declare const debug: boolean; -export declare function updateLocale(newLocale: Locale): void; -//# sourceMappingURL=config.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/config.d.ts.map b/packages/frontend-shared/js-built/config.d.ts.map deleted file mode 100644 index 1ca6372fab..0000000000 --- a/packages/frontend-shared/js-built/config.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../js/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAMxD,eAAO,MAAM,IAAI,QAAe,CAAC;AACjC,eAAO,MAAM,QAAQ,QAAmB,CAAC;AACzC,eAAO,MAAM,GAAG,QAAiB,CAAC;AAClC,eAAO,MAAM,MAAM,QAA2B,CAAC;AAC/C,eAAO,MAAM,QAAQ,QAAkB,CAAC;AACxC,eAAO,MAAM,IAAI,QAA0C,CAAC;AAC5D,eAAO,MAAM,KAAK,YAAU,CAAC;AAE7B,eAAO,IAAI,MAAM,EAAE,MAA2D,CAAC;AAC/E,eAAO,MAAM,OAAO,QAAY,CAAC;AACjC,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,eAAO,MAAM,YAAY,QAAoE,CAAC;AAC9F,eAAO,MAAM,EAAE,eAA6B,CAAC;AAC7C,eAAO,MAAM,KAAK,SAA2C,CAAC;AAE9D,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/config.js b/packages/frontend-shared/js-built/config.js deleted file mode 100644 index d39c9f6d9e..0000000000 --- a/packages/frontend-shared/js-built/config.js +++ /dev/null @@ -1,36 +0,0 @@ -const address = new URL(document.querySelector('meta[property="instance_url"]')?.content || location.href); -const siteName = document.querySelector('meta[property="og:site_name"]')?.content; -const host = address.host; -const hostname = address.hostname; -const url = address.origin; -const apiUrl = location.origin + "/api"; -const wsOrigin = location.origin; -const lang = localStorage.getItem("lang") ?? "en-US"; -const langs = _LANGS_; -const preParseLocale = localStorage.getItem("locale"); -let locale = preParseLocale ? JSON.parse(preParseLocale) : null; -const version = _VERSION_; -const basedMisskeyVersion = _BASEDMISSKEYVERSION_; -const instanceName = siteName === "CherryPick" || siteName == null ? host : siteName; -const ui = localStorage.getItem("ui"); -const debug = localStorage.getItem("debug") === "true"; -function updateLocale(newLocale) { - locale = newLocale; -} -export { - apiUrl, - basedMisskeyVersion, - debug, - host, - hostname, - instanceName, - lang, - langs, - locale, - ui, - updateLocale, - url, - version, - wsOrigin -}; -//# sourceMappingURL=config.js.map diff --git a/packages/frontend-shared/js-built/config.js.map b/packages/frontend-shared/js-built/config.js.map deleted file mode 100644 index 5736c07c59..0000000000 --- a/packages/frontend-shared/js-built/config.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/config.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nimport type { Locale } from '../../../locales/index.js';\n\n// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\nconst address = new URL(document.querySelector('meta[property=\"instance_url\"]')?.content || location.href);\nconst siteName = document.querySelector('meta[property=\"og:site_name\"]')?.content;\n\nexport const host = address.host;\nexport const hostname = address.hostname;\nexport const url = address.origin;\nexport const apiUrl = location.origin + '/api';\nexport const wsOrigin = location.origin;\nexport const lang = localStorage.getItem('lang') ?? 'en-US';\nexport const langs = _LANGS_;\nconst preParseLocale = localStorage.getItem('locale');\nexport let locale: Locale = preParseLocale ? JSON.parse(preParseLocale) : null;\nexport const version = _VERSION_;\nexport const basedMisskeyVersion = _BASEDMISSKEYVERSION_;\nexport const instanceName = (siteName === 'CherryPick' || siteName == null) ? host : siteName;\nexport const ui = localStorage.getItem('ui');\nexport const debug = localStorage.getItem('debug') === 'true';\n\nexport function updateLocale(newLocale: Locale): void {\n\tlocale = newLocale;\n}\n"], - "mappings": "AAQA,MAAM,UAAU,IAAI,IAAI,SAAS,cAA+B,+BAA+B,GAAG,WAAW,SAAS,IAAI;AAC1H,MAAM,WAAW,SAAS,cAA+B,+BAA+B,GAAG;AAEpF,MAAM,OAAO,QAAQ;AACrB,MAAM,WAAW,QAAQ;AACzB,MAAM,MAAM,QAAQ;AACpB,MAAM,SAAS,SAAS,SAAS;AACjC,MAAM,WAAW,SAAS;AAC1B,MAAM,OAAO,aAAa,QAAQ,MAAM,KAAK;AAC7C,MAAM,QAAQ;AACrB,MAAM,iBAAiB,aAAa,QAAQ,QAAQ;AAC7C,IAAI,SAAiB,iBAAiB,KAAK,MAAM,cAAc,IAAI;AACnE,MAAM,UAAU;AAChB,MAAM,sBAAsB;AAC5B,MAAM,eAAgB,aAAa,gBAAgB,YAAY,OAAQ,OAAO;AAC9E,MAAM,KAAK,aAAa,QAAQ,IAAI;AACpC,MAAM,QAAQ,aAAa,QAAQ,OAAO,MAAM;AAEhD,SAAS,aAAa,WAAyB;AACrD,WAAS;AACV;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/const.d.ts b/packages/frontend-shared/js-built/const.d.ts deleted file mode 100644 index c0438d484b..0000000000 --- a/packages/frontend-shared/js-built/const.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export declare const FILE_TYPE_BROWSERSAFE: string[]; -export declare const notificationTypes: readonly ["note", "follow", "mention", "reply", "renote", "quote", "reaction", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "roleAssigned", "achievementEarned", "exportCompleted", "test", "app"]; -export declare const obsoleteNotificationTypes: readonly ["pollVote"]; -export declare const ROLE_POLICIES: readonly ["gtlAvailable", "ltlAvailable", "canPublicNote", "canEditNote", "scheduleNoteMax", "mentionLimit", "canInvite", "inviteLimit", "inviteLimitCycle", "inviteExpirationTime", "canManageCustomEmojis", "canManageAvatarDecorations", "canSearchNotes", "canUseTranslator", "canUseAutoTranslate", "canHideAds", "driveCapacityMb", "alwaysMarkNsfw", "canUpdateBioMedia", "pinLimit", "antennaLimit", "wordMuteLimit", "webhookLimit", "clipLimit", "noteEachClipsLimit", "userListLimit", "userEachUserListsLimit", "rateLimitFactor", "avatarDecorationLimit", "canImportAntennas", "canImportBlocking", "canImportFollowing", "canImportMuting", "canImportUserLists", "fileSizeLimit"]; -export declare const CURRENT_STICKY_TOP = "CURRENT_STICKY_TOP"; -export declare const CURRENT_STICKY_BOTTOM = "CURRENT_STICKY_BOTTOM"; -export declare const DEFAULT_SERVER_ERROR_IMAGE_URL = "https://xn--931a.moe/assets/error.jpg"; -export declare const DEFAULT_NOT_FOUND_IMAGE_URL = "https://xn--931a.moe/assets/not-found.jpg"; -export declare const DEFAULT_INFO_IMAGE_URL = "https://xn--931a.moe/assets/info.jpg"; -export declare const DEFAULT_YOU_BLOCKED_IMAGE_URL = "https://xn--931a.moe/assets/error.jpg"; -export declare const MFM_TAGS: string[]; -export declare const MFM_PARAMS: Record; -export declare const HTML_TAGS: string[]; -//# sourceMappingURL=const.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/const.d.ts.map b/packages/frontend-shared/js-built/const.d.ts.map deleted file mode 100644 index 97b76da021..0000000000 --- a/packages/frontend-shared/js-built/const.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../js/const.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,qBAAqB,UAyCjC,CAAC;AAOF,eAAO,MAAM,iBAAiB,qOAiBpB,CAAC;AACX,eAAO,MAAM,yBAAyB,uBAA4C,CAAC;AAEnF,eAAO,MAAM,aAAa,mqBAoChB,CAAC;AAKX,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,eAAO,MAAM,8BAA8B,0CAA0C,CAAC;AACtF,eAAO,MAAM,2BAA2B,8CAA8C,CAAC;AACvF,eAAO,MAAM,sBAAsB,yCAAyC,CAAC;AAC7E,eAAO,MAAM,6BAA6B,0CAA0C,CAAC;AAErF,eAAO,MAAM,QAAQ,UAAkN,CAAC;AACxO,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAwBhE,CAAC;AACF,eAAO,MAAM,SAAS,UAAiH,CAAC"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/const.js b/packages/frontend-shared/js-built/const.js deleted file mode 100644 index 82d01d849a..0000000000 --- a/packages/frontend-shared/js-built/const.js +++ /dev/null @@ -1,144 +0,0 @@ -const FILE_TYPE_BROWSERSAFE = [ - // Images - "image/png", - "image/gif", - "image/jpeg", - "image/webp", - "image/avif", - "image/apng", - "image/bmp", - "image/tiff", - "image/x-icon", - // OggS - "audio/opus", - "video/ogg", - "audio/ogg", - "application/ogg", - // ISO/IEC base media file format - "video/quicktime", - "video/mp4", - "audio/mp4", - "video/x-m4v", - "audio/x-m4a", - "video/3gpp", - "video/3gpp2", - "video/mpeg", - "audio/mpeg", - "video/webm", - "audio/webm", - "audio/aac", - // see https://github.com/misskey-dev/misskey/pull/10686 - "audio/flac", - "audio/wav", - // backward compatibility - "audio/x-flac", - "audio/vnd.wave" -]; -const notificationTypes = [ - "note", - "follow", - "mention", - "reply", - "renote", - "quote", - "reaction", - "pollEnded", - "receiveFollowRequest", - "followRequestAccepted", - "groupInvited", - "roleAssigned", - "achievementEarned", - "exportCompleted", - "test", - "app" -]; -const obsoleteNotificationTypes = [ - "pollVote" - /*, 'groupInvited'*/ -]; -const ROLE_POLICIES = [ - "gtlAvailable", - "ltlAvailable", - "canPublicNote", - "canEditNote", - "scheduleNoteMax", - "mentionLimit", - "canInvite", - "inviteLimit", - "inviteLimitCycle", - "inviteExpirationTime", - "canManageCustomEmojis", - "canManageAvatarDecorations", - "canSearchNotes", - "canUseTranslator", - "canUseAutoTranslate", - "canHideAds", - "driveCapacityMb", - "alwaysMarkNsfw", - "canUpdateBioMedia", - "pinLimit", - "antennaLimit", - "wordMuteLimit", - "webhookLimit", - "clipLimit", - "noteEachClipsLimit", - "userListLimit", - "userEachUserListsLimit", - "rateLimitFactor", - "avatarDecorationLimit", - "canImportAntennas", - "canImportBlocking", - "canImportFollowing", - "canImportMuting", - "canImportUserLists", - "fileSizeLimit" -]; -const CURRENT_STICKY_TOP = "CURRENT_STICKY_TOP"; -const CURRENT_STICKY_BOTTOM = "CURRENT_STICKY_BOTTOM"; -const DEFAULT_SERVER_ERROR_IMAGE_URL = "https://xn--931a.moe/assets/error.jpg"; -const DEFAULT_NOT_FOUND_IMAGE_URL = "https://xn--931a.moe/assets/not-found.jpg"; -const DEFAULT_INFO_IMAGE_URL = "https://xn--931a.moe/assets/info.jpg"; -const DEFAULT_YOU_BLOCKED_IMAGE_URL = "https://xn--931a.moe/assets/error.jpg"; -const MFM_TAGS = ["tada", "jelly", "twitch", "shake", "spin", "jump", "bounce", "flip", "x2", "x3", "x4", "scale", "position", "fg", "bg", "border", "font", "blur", "rainbow", "sparkle", "fade", "rotate", "ruby", "unixtime"]; -const MFM_PARAMS = { - tada: ["speed=", "delay="], - jelly: ["speed=", "delay="], - twitch: ["speed=", "delay="], - shake: ["speed=", "delay="], - spin: ["speed=", "delay=", "left", "alternate", "x", "y"], - jump: ["speed=", "delay="], - bounce: ["speed=", "delay="], - flip: ["h", "v"], - x2: [], - x3: [], - x4: [], - scale: ["x=", "y="], - position: ["x=", "y="], - fg: ["color="], - bg: ["color="], - border: ["width=", "style=", "color=", "radius=", "noclip"], - font: ["serif", "monospace", "cursive", "fantasy", "emoji", "math"], - blur: [], - rainbow: ["speed=", "delay="], - fade: ["speed=", "delay="], - rotate: ["deg="], - ruby: [], - unixtime: [] -}; -const HTML_TAGS = ["bold", "strike", "italic", "small", "center", "plain", "inlinecode", "blockcode", "mathinline", "mathblock"]; -export { - CURRENT_STICKY_BOTTOM, - CURRENT_STICKY_TOP, - DEFAULT_INFO_IMAGE_URL, - DEFAULT_NOT_FOUND_IMAGE_URL, - DEFAULT_SERVER_ERROR_IMAGE_URL, - DEFAULT_YOU_BLOCKED_IMAGE_URL, - FILE_TYPE_BROWSERSAFE, - HTML_TAGS, - MFM_PARAMS, - MFM_TAGS, - ROLE_POLICIES, - notificationTypes, - obsoleteNotificationTypes -}; -//# sourceMappingURL=const.js.map diff --git a/packages/frontend-shared/js-built/const.js.map b/packages/frontend-shared/js-built/const.js.map deleted file mode 100644 index 61f72bc79b..0000000000 --- a/packages/frontend-shared/js-built/const.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/const.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\n// \u30D6\u30E9\u30A6\u30B6\u3067\u76F4\u63A5\u8868\u793A\u3059\u308B\u3053\u3068\u3092\u8A31\u53EF\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u306E\u7A2E\u985E\u306E\u30EA\u30B9\u30C8\n// \u3053\u3053\u306B\u542B\u307E\u308C\u306A\u3044\u3082\u306E\u306F application/octet-stream \u3068\u3057\u3066\u30EC\u30B9\u30DD\u30F3\u30B9\u3055\u308C\u308B\n// SVG\u306FXSS\u3092\u751F\u3080\u306E\u3067\u8A31\u53EF\u3057\u306A\u3044\nexport const FILE_TYPE_BROWSERSAFE = [\n\t// Images\n\t'image/png',\n\t'image/gif',\n\t'image/jpeg',\n\t'image/webp',\n\t'image/avif',\n\t'image/apng',\n\t'image/bmp',\n\t'image/tiff',\n\t'image/x-icon',\n\n\t// OggS\n\t'audio/opus',\n\t'video/ogg',\n\t'audio/ogg',\n\t'application/ogg',\n\n\t// ISO/IEC base media file format\n\t'video/quicktime',\n\t'video/mp4',\n\t'audio/mp4',\n\t'video/x-m4v',\n\t'audio/x-m4a',\n\t'video/3gpp',\n\t'video/3gpp2',\n\n\t'video/mpeg',\n\t'audio/mpeg',\n\n\t'video/webm',\n\t'audio/webm',\n\n\t'audio/aac',\n\n\t// see https://github.com/misskey-dev/misskey/pull/10686\n\t'audio/flac',\n\t'audio/wav',\n\t// backward compatibility\n\t'audio/x-flac',\n\t'audio/vnd.wave',\n];\n/*\nhttps://github.com/sindresorhus/file-type/blob/main/supported.js\nhttps://github.com/sindresorhus/file-type/blob/main/core.js\nhttps://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers\n*/\n\nexport const notificationTypes = [\n\t'note',\n\t'follow',\n\t'mention',\n\t'reply',\n\t'renote',\n\t'quote',\n\t'reaction',\n\t'pollEnded',\n\t'receiveFollowRequest',\n\t'followRequestAccepted',\n\t'groupInvited',\n\t'roleAssigned',\n\t'achievementEarned',\n\t'exportCompleted',\n\t'test',\n\t'app',\n] as const;\nexport const obsoleteNotificationTypes = ['pollVote'/*, 'groupInvited'*/] as const;\n\nexport const ROLE_POLICIES = [\n\t'gtlAvailable',\n\t'ltlAvailable',\n\t'canPublicNote',\n\t'canEditNote',\n\t'scheduleNoteMax',\n\t'mentionLimit',\n\t'canInvite',\n\t'inviteLimit',\n\t'inviteLimitCycle',\n\t'inviteExpirationTime',\n\t'canManageCustomEmojis',\n\t'canManageAvatarDecorations',\n\t'canSearchNotes',\n\t'canUseTranslator',\n\t'canUseAutoTranslate',\n\t'canHideAds',\n\t'driveCapacityMb',\n\t'alwaysMarkNsfw',\n\t'canUpdateBioMedia',\n\t'pinLimit',\n\t'antennaLimit',\n\t'wordMuteLimit',\n\t'webhookLimit',\n\t'clipLimit',\n\t'noteEachClipsLimit',\n\t'userListLimit',\n\t'userEachUserListsLimit',\n\t'rateLimitFactor',\n\t'avatarDecorationLimit',\n\t'canImportAntennas',\n\t'canImportBlocking',\n\t'canImportFollowing',\n\t'canImportMuting',\n\t'canImportUserLists',\n\t'fileSizeLimit',\n] as const;\n\n// \u306A\u3093\u304B\u52D5\u304B\u306A\u3044\n//export const CURRENT_STICKY_TOP = Symbol('CURRENT_STICKY_TOP');\n//export const CURRENT_STICKY_BOTTOM = Symbol('CURRENT_STICKY_BOTTOM');\nexport const CURRENT_STICKY_TOP = 'CURRENT_STICKY_TOP';\nexport const CURRENT_STICKY_BOTTOM = 'CURRENT_STICKY_BOTTOM';\n\nexport const DEFAULT_SERVER_ERROR_IMAGE_URL = 'https://xn--931a.moe/assets/error.jpg';\nexport const DEFAULT_NOT_FOUND_IMAGE_URL = 'https://xn--931a.moe/assets/not-found.jpg';\nexport const DEFAULT_INFO_IMAGE_URL = 'https://xn--931a.moe/assets/info.jpg';\nexport const DEFAULT_YOU_BLOCKED_IMAGE_URL = 'https://xn--931a.moe/assets/error.jpg';\n\nexport const MFM_TAGS = ['tada', 'jelly', 'twitch', 'shake', 'spin', 'jump', 'bounce', 'flip', 'x2', 'x3', 'x4', 'scale', 'position', 'fg', 'bg', 'border', 'font', 'blur', 'rainbow', 'sparkle', 'fade', 'rotate', 'ruby', 'unixtime'];\nexport const MFM_PARAMS: Record = {\n\ttada: ['speed=', 'delay='],\n\tjelly: ['speed=', 'delay='],\n\ttwitch: ['speed=', 'delay='],\n\tshake: ['speed=', 'delay='],\n\tspin: ['speed=', 'delay=', 'left', 'alternate', 'x', 'y'],\n\tjump: ['speed=', 'delay='],\n\tbounce: ['speed=', 'delay='],\n\tflip: ['h', 'v'],\n\tx2: [],\n\tx3: [],\n\tx4: [],\n\tscale: ['x=', 'y='],\n\tposition: ['x=', 'y='],\n\tfg: ['color='],\n\tbg: ['color='],\n\tborder: ['width=', 'style=', 'color=', 'radius=', 'noclip'],\n\tfont: ['serif', 'monospace', 'cursive', 'fantasy', 'emoji', 'math'],\n\tblur: [],\n\trainbow: ['speed=', 'delay='],\n\tfade: ['speed=', 'delay='],\n\trotate: ['deg='],\n\truby: [],\n\tunixtime: [],\n};\nexport const HTML_TAGS = ['bold', 'strike', 'italic', 'small', 'center', 'plain', 'inlinecode', 'blockcode', 'mathinline', 'mathblock'];\n"], - "mappings": "AAQO,MAAM,wBAAwB;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AACD;AAOO,MAAM,oBAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AACO,MAAM,4BAA4B;AAAA,EAAC;AAAA;AAA8B;AAEjE,MAAM,gBAAgB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAKO,MAAM,qBAAqB;AAC3B,MAAM,wBAAwB;AAE9B,MAAM,iCAAiC;AACvC,MAAM,8BAA8B;AACpC,MAAM,yBAAyB;AAC/B,MAAM,gCAAgC;AAEtC,MAAM,WAAW,CAAC,QAAQ,SAAS,UAAU,SAAS,QAAQ,QAAQ,UAAU,QAAQ,MAAM,MAAM,MAAM,SAAS,YAAY,MAAM,MAAM,UAAU,QAAQ,QAAQ,WAAW,WAAW,QAAQ,UAAU,QAAQ,UAAU;AAC/N,MAAM,aAAwD;AAAA,EACpE,MAAM,CAAC,UAAU,QAAQ;AAAA,EACzB,OAAO,CAAC,UAAU,QAAQ;AAAA,EAC1B,QAAQ,CAAC,UAAU,QAAQ;AAAA,EAC3B,OAAO,CAAC,UAAU,QAAQ;AAAA,EAC1B,MAAM,CAAC,UAAU,UAAU,QAAQ,aAAa,KAAK,GAAG;AAAA,EACxD,MAAM,CAAC,UAAU,QAAQ;AAAA,EACzB,QAAQ,CAAC,UAAU,QAAQ;AAAA,EAC3B,MAAM,CAAC,KAAK,GAAG;AAAA,EACf,IAAI,CAAC;AAAA,EACL,IAAI,CAAC;AAAA,EACL,IAAI,CAAC;AAAA,EACL,OAAO,CAAC,MAAM,IAAI;AAAA,EAClB,UAAU,CAAC,MAAM,IAAI;AAAA,EACrB,IAAI,CAAC,QAAQ;AAAA,EACb,IAAI,CAAC,QAAQ;AAAA,EACb,QAAQ,CAAC,UAAU,UAAU,UAAU,WAAW,QAAQ;AAAA,EAC1D,MAAM,CAAC,SAAS,aAAa,WAAW,WAAW,SAAS,MAAM;AAAA,EAClE,MAAM,CAAC;AAAA,EACP,SAAS,CAAC,UAAU,QAAQ;AAAA,EAC5B,MAAM,CAAC,UAAU,QAAQ;AAAA,EACzB,QAAQ,CAAC,MAAM;AAAA,EACf,MAAM,CAAC;AAAA,EACP,UAAU,CAAC;AACZ;AACO,MAAM,YAAY,CAAC,QAAQ,UAAU,UAAU,SAAS,UAAU,SAAS,cAAc,aAAa,cAAc,WAAW;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/embed-page.d.ts b/packages/frontend-shared/js-built/embed-page.d.ts deleted file mode 100644 index f828f46b07..0000000000 --- a/packages/frontend-shared/js-built/embed-page.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare const embeddableEntities: readonly ["notes", "user-timeline", "clips", "tags"]; -export type EmbeddableEntity = typeof embeddableEntities[number]; -export declare const embedRouteWithScrollbar: EmbeddableEntity[]; -export type EmbedParams = { - maxHeight?: number; - colorMode?: 'light' | 'dark'; - rounded?: boolean; - border?: boolean; - autoload?: boolean; - header?: boolean; -}; -export type ParsedEmbedParams = Required> & Pick; -export declare const defaultEmbedParams: { - readonly maxHeight: undefined; - readonly colorMode: undefined; - readonly rounded: true; - readonly border: true; - readonly autoload: false; - readonly header: true; -}; -export declare function parseEmbedParams(searchParams: URLSearchParams | string): ParsedEmbedParams; -export {}; -//# sourceMappingURL=embed-page.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/embed-page.d.ts.map b/packages/frontend-shared/js-built/embed-page.d.ts.map deleted file mode 100644 index e5d1d5bcdb..0000000000 --- a/packages/frontend-shared/js-built/embed-page.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embed-page.d.ts","sourceRoot":"","sources":["../js/embed-page.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,kBAAkB,sDAKd,CAAC;AAGX,MAAM,MAAM,gBAAgB,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAGjE,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAIrD,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC;AAGtI,eAAO,MAAM,kBAAkB;;;;;;;CAOC,CAAC;AASjC,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,eAAe,GAAG,MAAM,GAAG,iBAAiB,CAyC1F"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/embed-page.js b/packages/frontend-shared/js-built/embed-page.js deleted file mode 100644 index dfab6c26a8..0000000000 --- a/packages/frontend-shared/js-built/embed-page.js +++ /dev/null @@ -1,63 +0,0 @@ -const embeddableEntities = [ - "notes", - "user-timeline", - "clips", - "tags" -]; -const embedRouteWithScrollbar = [ - "clips", - "tags", - "user-timeline" -]; -const defaultEmbedParams = { - maxHeight: void 0, - colorMode: void 0, - rounded: true, - border: true, - autoload: false, - header: true -}; -function parseEmbedParams(searchParams) { - let _searchParams; - if (typeof searchParams === "string") { - _searchParams = new URLSearchParams(searchParams); - } else if (searchParams instanceof URLSearchParams) { - _searchParams = searchParams; - } else { - throw new Error("searchParams must be URLSearchParams or string"); - } - function convertBoolean(value) { - if (value === "true") { - return true; - } else if (value === "false") { - return false; - } - return void 0; - } - function convertNumber(value) { - if (value != null && !isNaN(Number(value))) { - return Number(value); - } - return void 0; - } - function convertColorMode(value) { - if (value != null && ["light", "dark"].includes(value)) { - return value; - } - return void 0; - } - return { - maxHeight: convertNumber(_searchParams.get("maxHeight")) ?? defaultEmbedParams.maxHeight, - colorMode: convertColorMode(_searchParams.get("colorMode")) ?? defaultEmbedParams.colorMode, - rounded: convertBoolean(_searchParams.get("rounded")) ?? defaultEmbedParams.rounded, - border: convertBoolean(_searchParams.get("border")) ?? defaultEmbedParams.border, - autoload: convertBoolean(_searchParams.get("autoload")) ?? defaultEmbedParams.autoload, - header: convertBoolean(_searchParams.get("header")) ?? defaultEmbedParams.header - }; -} -export { - defaultEmbedParams, - embedRouteWithScrollbar, - parseEmbedParams -}; -//# sourceMappingURL=embed-page.js.map diff --git a/packages/frontend-shared/js-built/embed-page.js.map b/packages/frontend-shared/js-built/embed-page.js.map deleted file mode 100644 index a20674dc35..0000000000 --- a/packages/frontend-shared/js-built/embed-page.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/embed-page.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\n//#region Embed\u95A2\u9023\u306E\u5B9A\u7FA9\n\n/** \u57CB\u3081\u8FBC\u307F\u306E\u5BFE\u8C61\u3068\u306A\u308B\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\uFF08/embed/xxx \u306E xxx \u306E\u90E8\u5206\u3068\u5BFE\u5FDC\u3055\u305B\u308B\uFF09 */\nconst embeddableEntities = [\n\t'notes',\n\t'user-timeline',\n\t'clips',\n\t'tags',\n] as const;\n\n/** \u57CB\u3081\u8FBC\u307F\u306E\u5BFE\u8C61\u3068\u306A\u308B\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3 */\nexport type EmbeddableEntity = typeof embeddableEntities[number];\n\n/** \u5185\u90E8\u3067\u30B9\u30AF\u30ED\u30FC\u30EB\u304C\u3042\u308B\u30DA\u30FC\u30B8 */\nexport const embedRouteWithScrollbar: EmbeddableEntity[] = [\n\t'clips',\n\t'tags',\n\t'user-timeline',\n];\n\n/** \u57CB\u3081\u8FBC\u307F\u30B3\u30FC\u30C9\u306E\u30D1\u30E9\u30E1\u30FC\u30BF */\nexport type EmbedParams = {\n\tmaxHeight?: number;\n\tcolorMode?: 'light' | 'dark';\n\trounded?: boolean;\n\tborder?: boolean;\n\tautoload?: boolean;\n\theader?: boolean;\n};\n\n/** \u6B63\u898F\u5316\u3055\u308C\u305F\u30D1\u30E9\u30E1\u30FC\u30BF */\nexport type ParsedEmbedParams = Required> & Pick;\n\n/** \u30D1\u30E9\u30E1\u30FC\u30BF\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u5024 */\nexport const defaultEmbedParams = {\n\tmaxHeight: undefined,\n\tcolorMode: undefined,\n\trounded: true,\n\tborder: true,\n\tautoload: false,\n\theader: true,\n} as const satisfies EmbedParams;\n\n//#endregion\n\n/**\n * \u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u6B63\u898F\u5316\u3059\u308B\uFF08\u57CB\u3081\u8FBC\u307F\u30DA\u30FC\u30B8\u521D\u671F\u5316\u7528\uFF09\n * @param searchParams URLSearchParams\u3082\u3057\u304F\u306F\u30AF\u30A8\u30EA\u6587\u5B57\u5217\n * @returns \u6B63\u898F\u5316\u3055\u308C\u305F\u30D1\u30E9\u30E1\u30FC\u30BF\n */\nexport function parseEmbedParams(searchParams: URLSearchParams | string): ParsedEmbedParams {\n\tlet _searchParams: URLSearchParams;\n\tif (typeof searchParams === 'string') {\n\t\t_searchParams = new URLSearchParams(searchParams);\n\t} else if (searchParams instanceof URLSearchParams) {\n\t\t_searchParams = searchParams;\n\t} else {\n\t\tthrow new Error('searchParams must be URLSearchParams or string');\n\t}\n\n\tfunction convertBoolean(value: string | null): boolean | undefined {\n\t\tif (value === 'true') {\n\t\t\treturn true;\n\t\t} else if (value === 'false') {\n\t\t\treturn false;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tfunction convertNumber(value: string | null): number | undefined {\n\t\tif (value != null && !isNaN(Number(value))) {\n\t\t\treturn Number(value);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tfunction convertColorMode(value: string | null): 'light' | 'dark' | undefined {\n\t\tif (value != null && ['light', 'dark'].includes(value)) {\n\t\t\treturn value as 'light' | 'dark';\n\t\t}\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tmaxHeight: convertNumber(_searchParams.get('maxHeight')) ?? defaultEmbedParams.maxHeight,\n\t\tcolorMode: convertColorMode(_searchParams.get('colorMode')) ?? defaultEmbedParams.colorMode,\n\t\trounded: convertBoolean(_searchParams.get('rounded')) ?? defaultEmbedParams.rounded,\n\t\tborder: convertBoolean(_searchParams.get('border')) ?? defaultEmbedParams.border,\n\t\tautoload: convertBoolean(_searchParams.get('autoload')) ?? defaultEmbedParams.autoload,\n\t\theader: convertBoolean(_searchParams.get('header')) ?? defaultEmbedParams.header,\n\t};\n}\n"], - "mappings": "AAQA,MAAM,qBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAMO,MAAM,0BAA8C;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AACD;AAgBO,MAAM,qBAAqB;AAAA,EACjC,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AACT;AASO,SAAS,iBAAiB,cAA2D;AAC3F,MAAI;AACJ,MAAI,OAAO,iBAAiB,UAAU;AACrC,oBAAgB,IAAI,gBAAgB,YAAY;AAAA,EACjD,WAAW,wBAAwB,iBAAiB;AACnD,oBAAgB;AAAA,EACjB,OAAO;AACN,UAAM,IAAI,MAAM,gDAAgD;AAAA,EACjE;AAEA,WAAS,eAAe,OAA2C;AAClE,QAAI,UAAU,QAAQ;AACrB,aAAO;AAAA,IACR,WAAW,UAAU,SAAS;AAC7B,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR;AAEA,WAAS,cAAc,OAA0C;AAChE,QAAI,SAAS,QAAQ,CAAC,MAAM,OAAO,KAAK,CAAC,GAAG;AAC3C,aAAO,OAAO,KAAK;AAAA,IACpB;AACA,WAAO;AAAA,EACR;AAEA,WAAS,iBAAiB,OAAoD;AAC7E,QAAI,SAAS,QAAQ,CAAC,SAAS,MAAM,EAAE,SAAS,KAAK,GAAG;AACvD,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN,WAAW,cAAc,cAAc,IAAI,WAAW,CAAC,KAAK,mBAAmB;AAAA,IAC/E,WAAW,iBAAiB,cAAc,IAAI,WAAW,CAAC,KAAK,mBAAmB;AAAA,IAClF,SAAS,eAAe,cAAc,IAAI,SAAS,CAAC,KAAK,mBAAmB;AAAA,IAC5E,QAAQ,eAAe,cAAc,IAAI,QAAQ,CAAC,KAAK,mBAAmB;AAAA,IAC1E,UAAU,eAAe,cAAc,IAAI,UAAU,CAAC,KAAK,mBAAmB;AAAA,IAC9E,QAAQ,eAAe,cAAc,IAAI,QAAQ,CAAC,KAAK,mBAAmB;AAAA,EAC3E;AACD;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/emoji-base.d.ts b/packages/frontend-shared/js-built/emoji-base.d.ts deleted file mode 100644 index 126706dba6..0000000000 --- a/packages/frontend-shared/js-built/emoji-base.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare function char2twemojiFilePath(char: string): string; -export declare function char2fluentEmojiFilePath(char: string): string; -//# sourceMappingURL=emoji-base.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/emoji-base.d.ts.map b/packages/frontend-shared/js-built/emoji-base.d.ts.map deleted file mode 100644 index ee82a317a9..0000000000 --- a/packages/frontend-shared/js-built/emoji-base.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"emoji-base.d.ts","sourceRoot":"","sources":["../js/emoji-base.ts"],"names":[],"mappings":"AAQA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ7D"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/emoji-base.js b/packages/frontend-shared/js-built/emoji-base.js deleted file mode 100644 index 1b49990b46..0000000000 --- a/packages/frontend-shared/js-built/emoji-base.js +++ /dev/null @@ -1,22 +0,0 @@ -const twemojiSvgBase = "/twemoji"; -const fluentEmojiPngBase = "/fluent-emoji"; -function char2twemojiFilePath(char) { - let codes = Array.from(char, (x) => x.codePointAt(0)?.toString(16)); - if (!codes.includes("200d")) codes = codes.filter((x) => x !== "fe0f"); - codes = codes.filter((x) => x && x.length); - const fileName = codes.join("-"); - return `${twemojiSvgBase}/${fileName}.svg`; -} -function char2fluentEmojiFilePath(char) { - let codes = Array.from(char, (x) => x.codePointAt(0)?.toString(16)); - if (codes[0]?.startsWith("1f1")) return char2twemojiFilePath(char); - if (!codes.includes("200d")) codes = codes.filter((x) => x !== "fe0f"); - codes = codes.filter((x) => x != null && x.length > 0); - const fileName = codes.map((x) => x.padStart(4, "0")).join("-"); - return `${fluentEmojiPngBase}/${fileName}.png`; -} -export { - char2fluentEmojiFilePath, - char2twemojiFilePath -}; -//# sourceMappingURL=emoji-base.js.map diff --git a/packages/frontend-shared/js-built/emoji-base.js.map b/packages/frontend-shared/js-built/emoji-base.js.map deleted file mode 100644 index 2e1e07b1dc..0000000000 --- a/packages/frontend-shared/js-built/emoji-base.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/emoji-base.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nconst twemojiSvgBase = '/twemoji';\nconst fluentEmojiPngBase = '/fluent-emoji';\n\nexport function char2twemojiFilePath(char: string): string {\n\tlet codes = Array.from(char, x => x.codePointAt(0)?.toString(16));\n\tif (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');\n\tcodes = codes.filter(x => x && x.length);\n\tconst fileName = codes.join('-');\n\treturn `${twemojiSvgBase}/${fileName}.svg`;\n}\n\nexport function char2fluentEmojiFilePath(char: string): string {\n\tlet codes = Array.from(char, x => x.codePointAt(0)?.toString(16));\n\t// Fluent Emoji\u306F\u56FD\u65D7\u975E\u5BFE\u5FDC https://github.com/microsoft/fluentui-emoji/issues/25\n\tif (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char);\n\tif (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');\n\tcodes = codes.filter(x => x != null && x.length > 0);\n\tconst fileName = (codes as string[]).map(x => x.padStart(4, '0')).join('-');\n\treturn `${fluentEmojiPngBase}/${fileName}.png`;\n}\n"], - "mappings": "AAKA,MAAM,iBAAiB;AACvB,MAAM,qBAAqB;AAEpB,SAAS,qBAAqB,MAAsB;AAC1D,MAAI,QAAQ,MAAM,KAAK,MAAM,OAAK,EAAE,YAAY,CAAC,GAAG,SAAS,EAAE,CAAC;AAChE,MAAI,CAAC,MAAM,SAAS,MAAM,EAAG,SAAQ,MAAM,OAAO,OAAK,MAAM,MAAM;AACnE,UAAQ,MAAM,OAAO,OAAK,KAAK,EAAE,MAAM;AACvC,QAAM,WAAW,MAAM,KAAK,GAAG;AAC/B,SAAO,GAAG,cAAc,IAAI,QAAQ;AACrC;AAEO,SAAS,yBAAyB,MAAsB;AAC9D,MAAI,QAAQ,MAAM,KAAK,MAAM,OAAK,EAAE,YAAY,CAAC,GAAG,SAAS,EAAE,CAAC;AAEhE,MAAI,MAAM,CAAC,GAAG,WAAW,KAAK,EAAG,QAAO,qBAAqB,IAAI;AACjE,MAAI,CAAC,MAAM,SAAS,MAAM,EAAG,SAAQ,MAAM,OAAO,OAAK,MAAM,MAAM;AACnE,UAAQ,MAAM,OAAO,OAAK,KAAK,QAAQ,EAAE,SAAS,CAAC;AACnD,QAAM,WAAY,MAAmB,IAAI,OAAK,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG;AAC1E,SAAO,GAAG,kBAAkB,IAAI,QAAQ;AACzC;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/emojilist.d.ts b/packages/frontend-shared/js-built/emojilist.d.ts deleted file mode 100644 index 0792b4a321..0000000000 --- a/packages/frontend-shared/js-built/emojilist.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -export declare const unicodeEmojiCategories: readonly ["face", "people", "animals_and_nature", "food_and_drink", "activity", "travel_and_places", "objects", "symbols", "flags"]; -export type UnicodeEmojiDef = { - name: string; - char: string; - category: typeof unicodeEmojiCategories[number]; -}; -export declare const emojilist: UnicodeEmojiDef[]; -export declare const emojiCharByCategory: Map; -export declare function getUnicodeEmoji(char: string): UnicodeEmojiDef | string; -export declare function getEmojiName(char: string): string; -export declare function colorizeEmoji(char: string): string; -export interface CustomEmojiFolderTree { - value: string; - category: string; - children: CustomEmojiFolderTree[]; -} -//# sourceMappingURL=emojilist.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/emojilist.d.ts.map b/packages/frontend-shared/js-built/emojilist.d.ts.map deleted file mode 100644 index 2370d46dd5..0000000000 --- a/packages/frontend-shared/js-built/emojilist.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"emojilist.d.ts","sourceRoot":"","sources":["../js/emojilist.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,qIAAsI,CAAC;AAE1K,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;CAChD,CAAA;AAKD,eAAO,MAAM,SAAS,EAAE,eAAe,EAIpC,CAAC;AAmBJ,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AAExD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,MAAM,CAOtE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASjD;AAKD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UAEzC;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CAClC"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/emojilist.js b/packages/frontend-shared/js-built/emojilist.js deleted file mode 100644 index 8c4ca360b4..0000000000 --- a/packages/frontend-shared/js-built/emojilist.js +++ /dev/null @@ -1,45 +0,0 @@ -const unicodeEmojiCategories = ["face", "people", "animals_and_nature", "food_and_drink", "activity", "travel_and_places", "objects", "symbols", "flags"]; -import _emojilist from "./emojilist.json"; -const emojilist = _emojilist.map((x) => ({ - name: x[1], - char: x[0], - category: unicodeEmojiCategories[x[2]] -})); -const unicodeEmojisMap = new Map( - emojilist.map((x) => [x.char, x]) -); -const _indexByChar = /* @__PURE__ */ new Map(); -const _charGroupByCategory = /* @__PURE__ */ new Map(); -for (let i = 0; i < emojilist.length; i++) { - const emo = emojilist[i]; - _indexByChar.set(emo.char, i); - if (_charGroupByCategory.has(emo.category)) { - _charGroupByCategory.get(emo.category)?.push(emo.char); - } else { - _charGroupByCategory.set(emo.category, [emo.char]); - } -} -const emojiCharByCategory = _charGroupByCategory; -function getUnicodeEmoji(char) { - return unicodeEmojisMap.get(colorizeEmoji(char)) ?? unicodeEmojisMap.get(char) ?? char; -} -function getEmojiName(char) { - const idx = _indexByChar.get(colorizeEmoji(char)) ?? _indexByChar.get(char); - if (idx === void 0) { - return char; - } else { - return emojilist[idx].name; - } -} -function colorizeEmoji(char) { - return char.length === 1 ? `${char}\uFE0F` : char; -} -export { - colorizeEmoji, - emojiCharByCategory, - emojilist, - getEmojiName, - getUnicodeEmoji, - unicodeEmojiCategories -}; -//# sourceMappingURL=emojilist.js.map diff --git a/packages/frontend-shared/js-built/emojilist.js.map b/packages/frontend-shared/js-built/emojilist.js.map deleted file mode 100644 index f6413f656c..0000000000 --- a/packages/frontend-shared/js-built/emojilist.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/emojilist.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nexport const unicodeEmojiCategories = ['face', 'people', 'animals_and_nature', 'food_and_drink', 'activity', 'travel_and_places', 'objects', 'symbols', 'flags'] as const;\n\nexport type UnicodeEmojiDef = {\n\tname: string;\n\tchar: string;\n\tcategory: typeof unicodeEmojiCategories[number];\n}\n\n// initial converted from https://github.com/muan/emojilib/commit/242fe68be86ed6536843b83f7e32f376468b38fb\nimport _emojilist from './emojilist.json';\n\nexport const emojilist: UnicodeEmojiDef[] = _emojilist.map(x => ({\n\tname: x[1] as string,\n\tchar: x[0] as string,\n\tcategory: unicodeEmojiCategories[x[2] as number],\n}));\n\nconst unicodeEmojisMap = new Map(\n\temojilist.map(x => [x.char, x]),\n);\n\nconst _indexByChar = new Map();\nconst _charGroupByCategory = new Map();\nfor (let i = 0; i < emojilist.length; i++) {\n\tconst emo = emojilist[i];\n\t_indexByChar.set(emo.char, i);\n\n\tif (_charGroupByCategory.has(emo.category)) {\n\t\t_charGroupByCategory.get(emo.category)?.push(emo.char);\n\t} else {\n\t\t_charGroupByCategory.set(emo.category, [emo.char]);\n\t}\n}\n\nexport const emojiCharByCategory = _charGroupByCategory;\n\nexport function getUnicodeEmoji(char: string): UnicodeEmojiDef | string {\n\t// Colorize it because emojilist.json assumes that\n\treturn unicodeEmojisMap.get(colorizeEmoji(char))\n\t\t// \u30AB\u30E9\u30FC\u30B9\u30BF\u30A4\u30EB\u7D75\u6587\u5B57\u304Cjson\u306B\u7121\u3044\u5834\u5408\u306F\u30C6\u30AD\u30B9\u30C8\u30B9\u30BF\u30A4\u30EB\u7D75\u6587\u5B57\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3059\u308B\n\t\t?? unicodeEmojisMap.get(char)\n\t\t// \u305D\u308C\u3067\u3082\u898B\u3064\u304B\u3089\u306A\u3044\u5834\u5408\u306F\u305D\u306E\u307E\u307E\u8FD4\u3059\uFF08\u7D75\u6587\u5B57\u60C5\u5831\u304Cjson\u306B\u7121\u3044\u5834\u5408\u3001\u3053\u306E\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u304C\u7121\u3044\u3068\u30EC\u30F3\u30C0\u30EA\u30F3\u30B0\u306B\u5931\u6557\u3059\u308B\uFF09\n\t\t?? char;\n}\n\nexport function getEmojiName(char: string): string {\n\t// Colorize it because emojilist.json assumes that\n\tconst idx = _indexByChar.get(colorizeEmoji(char)) ?? _indexByChar.get(char);\n\tif (idx === undefined) {\n\t\t// \u7D75\u6587\u5B57\u60C5\u5831\u304Cjson\u306B\u7121\u3044\u5834\u5408\u306F\u540D\u524D\u306E\u53D6\u5F97\u304C\u51FA\u6765\u306A\u3044\u306E\u3067\u305D\u306E\u307E\u307E\u8FD4\u3059\u3057\u304B\u7121\u3044\n\t\treturn char;\n\t} else {\n\t\treturn emojilist[idx].name;\n\t}\n}\n\n/**\n * \u30C6\u30AD\u30B9\u30C8\u30B9\u30BF\u30A4\u30EB\u7D75\u6587\u5B57\uFF08U+260E\u306A\u3069\u306E1\u6587\u5B57\u3067\u8868\u73FE\u3055\u308C\u308B\u7D75\u6587\u5B57\uFF09\u3092\u30AB\u30E9\u30FC\u30B9\u30BF\u30A4\u30EB\u7D75\u6587\u5B57\u306B\u5909\u63DB\u3057\u307E\u3059\uFF08VS16:U+FE0F\u3092\u4ED8\u4E0E\uFF09\u3002\n */\nexport function colorizeEmoji(char: string) {\n\treturn char.length === 1 ? `${char}\\uFE0F` : char;\n}\n\nexport interface CustomEmojiFolderTree {\n\tvalue: string;\n\tcategory: string;\n\tchildren: CustomEmojiFolderTree[];\n}\n"], - "mappings": "AAKO,MAAM,yBAAyB,CAAC,QAAQ,UAAU,sBAAsB,kBAAkB,YAAY,qBAAqB,WAAW,WAAW,OAAO;AAS/J,OAAO,gBAAgB;AAEhB,MAAM,YAA+B,WAAW,IAAI,QAAM;AAAA,EAChE,MAAM,EAAE,CAAC;AAAA,EACT,MAAM,EAAE,CAAC;AAAA,EACT,UAAU,uBAAuB,EAAE,CAAC,CAAW;AAChD,EAAE;AAEF,MAAM,mBAAmB,IAAI;AAAA,EAC5B,UAAU,IAAI,OAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/B;AAEA,MAAM,eAAe,oBAAI,IAAoB;AAC7C,MAAM,uBAAuB,oBAAI,IAAsB;AACvD,SAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAC1C,QAAM,MAAM,UAAU,CAAC;AACvB,eAAa,IAAI,IAAI,MAAM,CAAC;AAE5B,MAAI,qBAAqB,IAAI,IAAI,QAAQ,GAAG;AAC3C,yBAAqB,IAAI,IAAI,QAAQ,GAAG,KAAK,IAAI,IAAI;AAAA,EACtD,OAAO;AACN,yBAAqB,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC;AAAA,EAClD;AACD;AAEO,MAAM,sBAAsB;AAE5B,SAAS,gBAAgB,MAAwC;AAEvE,SAAO,iBAAiB,IAAI,cAAc,IAAI,CAAC,KAE3C,iBAAiB,IAAI,IAAI,KAEzB;AACL;AAEO,SAAS,aAAa,MAAsB;AAElD,QAAM,MAAM,aAAa,IAAI,cAAc,IAAI,CAAC,KAAK,aAAa,IAAI,IAAI;AAC1E,MAAI,QAAQ,QAAW;AAEtB,WAAO;AAAA,EACR,OAAO;AACN,WAAO,UAAU,GAAG,EAAE;AAAA,EACvB;AACD;AAKO,SAAS,cAAc,MAAc;AAC3C,SAAO,KAAK,WAAW,IAAI,GAAG,IAAI,WAAW;AAC9C;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/emojilist.json b/packages/frontend-shared/js-built/emojilist.json deleted file mode 100644 index 75d5c34d71..0000000000 --- a/packages/frontend-shared/js-built/emojilist.json +++ /dev/null @@ -1,1805 +0,0 @@ -[ - ["๐Ÿ˜€", "grinning", 0], - ["๐Ÿ˜ฌ", "grimacing", 0], - ["๐Ÿ˜", "grin", 0], - ["๐Ÿ˜‚", "joy", 0], - ["๐Ÿคฃ", "rofl", 0], - ["๐Ÿฅณ", "partying", 0], - ["๐Ÿ˜ƒ", "smiley", 0], - ["๐Ÿ˜„", "smile", 0], - ["๐Ÿ˜…", "sweat_smile", 0], - ["๐Ÿฅฒ", "smiling_face_with_tear", 0], - ["๐Ÿ˜†", "laughing", 0], - ["๐Ÿ˜‡", "innocent", 0], - ["๐Ÿ˜‰", "wink", 0], - ["๐Ÿ˜Š", "blush", 0], - ["๐Ÿ™‚", "slightly_smiling_face", 0], - ["๐Ÿ™ƒ", "upside_down_face", 0], - ["โ˜บ๏ธ", "relaxed", 0], - ["๐Ÿ˜‹", "yum", 0], - ["๐Ÿ˜Œ", "relieved", 0], - ["๐Ÿ˜", "heart_eyes", 0], - ["๐Ÿฅฐ", "smiling_face_with_three_hearts", 0], - ["๐Ÿ˜˜", "kissing_heart", 0], - ["๐Ÿ˜—", "kissing", 0], - ["๐Ÿ˜™", "kissing_smiling_eyes", 0], - ["๐Ÿ˜š", "kissing_closed_eyes", 0], - ["๐Ÿ˜œ", "stuck_out_tongue_winking_eye", 0], - ["๐Ÿคช", "zany", 0], - ["๐Ÿคจ", "raised_eyebrow", 0], - ["๐Ÿง", "monocle", 0], - ["๐Ÿ˜", "stuck_out_tongue_closed_eyes", 0], - ["๐Ÿ˜›", "stuck_out_tongue", 0], - ["๐Ÿค‘", "money_mouth_face", 0], - ["๐Ÿค“", "nerd_face", 0], - ["๐Ÿฅธ", "disguised_face", 0], - ["๐Ÿ˜Ž", "sunglasses", 0], - ["๐Ÿคฉ", "star_struck", 0], - ["๐Ÿคก", "clown_face", 0], - ["๐Ÿค ", "cowboy_hat_face", 0], - ["๐Ÿค—", "hugs", 0], - ["๐Ÿ˜", "smirk", 0], - ["๐Ÿ˜ถ", "no_mouth", 0], - ["๐Ÿ˜", "neutral_face", 0], - ["๐Ÿ˜‘", "expressionless", 0], - ["๐Ÿ˜’", "unamused", 0], - ["๐Ÿ™„", "roll_eyes", 0], - ["๐Ÿค”", "thinking", 0], - ["๐Ÿคฅ", "lying_face", 0], - ["๐Ÿคญ", "hand_over_mouth", 0], - ["๐Ÿคซ", "shushing", 0], - ["๐Ÿคฌ", "symbols_over_mouth", 0], - ["๐Ÿคฏ", "exploding_head", 0], - ["๐Ÿ˜ณ", "flushed", 0], - ["๐Ÿ˜ž", "disappointed", 0], - ["๐Ÿ˜Ÿ", "worried", 0], - ["๐Ÿ˜ ", "angry", 0], - ["๐Ÿ˜ก", "rage", 0], - ["๐Ÿ˜”", "pensive", 0], - ["๐Ÿ˜•", "confused", 0], - ["๐Ÿ™", "slightly_frowning_face", 0], - ["โ˜น", "frowning_face", 0], - ["๐Ÿ˜ฃ", "persevere", 0], - ["๐Ÿ˜–", "confounded", 0], - ["๐Ÿ˜ซ", "tired_face", 0], - ["๐Ÿ˜ฉ", "weary", 0], - ["๐Ÿฅบ", "pleading", 0], - ["๐Ÿ˜ค", "triumph", 0], - ["๐Ÿ˜ฎ", "open_mouth", 0], - ["๐Ÿ˜ฑ", "scream", 0], - ["๐Ÿ˜จ", "fearful", 0], - ["๐Ÿ˜ฐ", "cold_sweat", 0], - ["๐Ÿ˜ฏ", "hushed", 0], - ["๐Ÿ˜ฆ", "frowning", 0], - ["๐Ÿ˜ง", "anguished", 0], - ["๐Ÿ˜ข", "cry", 0], - ["๐Ÿ˜ฅ", "disappointed_relieved", 0], - ["๐Ÿคค", "drooling_face", 0], - ["๐Ÿ˜ช", "sleepy", 0], - ["๐Ÿ˜“", "sweat", 0], - ["๐Ÿฅต", "hot", 0], - ["๐Ÿฅถ", "cold", 0], - ["๐Ÿ˜ญ", "sob", 0], - ["๐Ÿ˜ต", "dizzy_face", 0], - ["๐Ÿ˜ฒ", "astonished", 0], - ["๐Ÿค", "zipper_mouth_face", 0], - ["๐Ÿคข", "nauseated_face", 0], - ["๐Ÿคง", "sneezing_face", 0], - ["๐Ÿคฎ", "vomiting", 0], - ["๐Ÿ˜ท", "mask", 0], - ["๐Ÿค’", "face_with_thermometer", 0], - ["๐Ÿค•", "face_with_head_bandage", 0], - ["๐Ÿฅด", "woozy", 0], - ["๐Ÿฅฑ", "yawning", 0], - ["๐Ÿ˜ด", "sleeping", 0], - ["๐Ÿ’ค", "zzz", 0], - ["๐Ÿ˜ถโ€๐ŸŒซ๏ธ", "face_in_clouds", 0], - ["๐Ÿ˜ฎโ€๐Ÿ’จ", "face_exhaling", 0], - ["๐Ÿ˜ตโ€๐Ÿ’ซ", "face_with_spiral_eyes", 0], - ["๐Ÿซ ", "melting_face", 0], - ["๐Ÿซข", "face_with_open_eyes_and_hand_over_mouth", 0], - ["๐Ÿซฃ", "face_with_peeking_eye", 0], - ["๐Ÿซก", "saluting_face", 0], - ["๐Ÿซฅ", "dotted_line_face", 0], - ["๐Ÿซค", "face_with_diagonal_mouth", 0], - ["๐Ÿฅน", "face_holding_back_tears", 0], - ["๐Ÿซจ", "shaking_face", 0], - ["๐Ÿ’ฉ", "poop", 0], - ["๐Ÿ˜ˆ", "smiling_imp", 0], - ["๐Ÿ‘ฟ", "imp", 0], - ["๐Ÿ‘น", "japanese_ogre", 0], - ["๐Ÿ‘บ", "japanese_goblin", 0], - ["๐Ÿ’€", "skull", 0], - ["๐Ÿ‘ป", "ghost", 0], - ["๐Ÿ‘ฝ", "alien", 0], - ["๐Ÿค–", "robot", 0], - ["๐Ÿ˜บ", "smiley_cat", 0], - ["๐Ÿ˜ธ", "smile_cat", 0], - ["๐Ÿ˜น", "joy_cat", 0], - ["๐Ÿ˜ป", "heart_eyes_cat", 0], - ["๐Ÿ˜ผ", "smirk_cat", 0], - ["๐Ÿ˜ฝ", "kissing_cat", 0], - ["๐Ÿ™€", "scream_cat", 0], - ["๐Ÿ˜ฟ", "crying_cat_face", 0], - ["๐Ÿ˜พ", "pouting_cat", 0], - ["๐Ÿคฒ", "palms_up", 1], - ["๐Ÿ™Œ", "raised_hands", 1], - ["๐Ÿ‘", "clap", 1], - ["๐Ÿ‘‹", "wave", 1], - ["๐Ÿค™", "call_me_hand", 1], - ["๐Ÿ‘", "+1", 1], - ["๐Ÿ‘Ž", "-1", 1], - ["๐Ÿ‘Š", "facepunch", 1], - ["โœŠ", "fist", 1], - ["๐Ÿค›", "fist_left", 1], - ["๐Ÿคœ", "fist_right", 1], - ["๐Ÿซท", "leftwards_pushing_hand", 1], - ["๐Ÿซธ", "rightwards_pushing_hand", 1], - ["โœŒ", "v", 1], - ["๐Ÿ‘Œ", "ok_hand", 1], - ["โœ‹", "raised_hand", 1], - ["๐Ÿคš", "raised_back_of_hand", 1], - ["๐Ÿ‘", "open_hands", 1], - ["๐Ÿ’ช", "muscle", 1], - ["๐Ÿฆพ", "mechanical_arm", 1], - ["๐Ÿ™", "pray", 1], - ["๐Ÿฆถ", "foot", 1], - ["๐Ÿฆต", "leg", 1], - ["๐Ÿฆฟ", "mechanical_leg", 1], - ["๐Ÿค", "handshake", 1], - ["โ˜", "point_up", 1], - ["๐Ÿ‘†", "point_up_2", 1], - ["๐Ÿ‘‡", "point_down", 1], - ["๐Ÿ‘ˆ", "point_left", 1], - ["๐Ÿ‘‰", "point_right", 1], - ["๐Ÿ–•", "fu", 1], - ["๐Ÿ–", "raised_hand_with_fingers_splayed", 1], - ["๐ŸคŸ", "love_you", 1], - ["๐Ÿค˜", "metal", 1], - ["๐Ÿคž", "crossed_fingers", 1], - ["๐Ÿ––", "vulcan_salute", 1], - ["โœ", "writing_hand", 1], - ["๐Ÿซฐ", "hand_with_index_finger_and_thumb_crossed", 1], - ["๐Ÿซฑ", "rightwards_hand", 1], - ["๐Ÿซฒ", "leftwards_hand", 1], - ["๐Ÿซณ", "palm_down_hand", 1], - ["๐Ÿซด", "palm_up_hand", 1], - ["๐Ÿซต", "index_pointing_at_the_viewer", 1], - ["๐Ÿซถ", "heart_hands", 1], - ["๐Ÿค", "pinching_hand", 1], - ["๐ŸคŒ", "pinched_fingers", 1], - ["๐Ÿคณ", "selfie", 1], - ["๐Ÿ’…", "nail_care", 1], - ["๐Ÿ‘„", "lips", 1], - ["๐Ÿซฆ", "biting_lip", 1], - ["๐Ÿฆท", "tooth", 1], - ["๐Ÿ‘…", "tongue", 1], - ["๐Ÿ‘‚", "ear", 1], - ["๐Ÿฆป", "ear_with_hearing_aid", 1], - ["๐Ÿ‘ƒ", "nose", 1], - ["๐Ÿ‘", "eye", 1], - ["๐Ÿ‘€", "eyes", 1], - ["๐Ÿง ", "brain", 1], - ["๐Ÿซ€", "anatomical_heart", 1], - ["๐Ÿซ", "lungs", 1], - ["๐Ÿ‘ค", "bust_in_silhouette", 1], - ["๐Ÿ‘ฅ", "busts_in_silhouette", 1], - ["๐Ÿ—ฃ", "speaking_head", 1], - ["๐Ÿ‘ถ", "baby", 1], - ["๐Ÿง’", "child", 1], - ["๐Ÿ‘ฆ", "boy", 1], - ["๐Ÿ‘ง", "girl", 1], - ["๐Ÿง‘", "adult", 1], - ["๐Ÿ‘จ", "man", 1], - ["๐Ÿ‘ฉ", "woman", 1], - ["๐Ÿง‘โ€๐Ÿฆฑ", "curly_hair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฑ", "curly_hair_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆฑ", "curly_hair_man", 1], - ["๐Ÿง‘โ€๐Ÿฆฐ", "red_hair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฐ", "red_hair_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆฐ", "red_hair_man", 1], - ["๐Ÿ‘ฑโ€โ™€๏ธ", "blonde_woman", 1], - ["๐Ÿ‘ฑ", "blonde_man", 1], - ["๐Ÿง‘โ€๐Ÿฆณ", "white_hair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆณ", "white_hair_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆณ", "white_hair_man", 1], - ["๐Ÿง‘โ€๐Ÿฆฒ", "bald", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฒ", "bald_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆฒ", "bald_man", 1], - ["๐Ÿง”", "bearded_person", 1], - ["๐Ÿง“", "older_adult", 1], - ["๐Ÿ‘ด", "older_man", 1], - ["๐Ÿ‘ต", "older_woman", 1], - ["๐Ÿ‘ฒ", "man_with_gua_pi_mao", 1], - ["๐Ÿง•", "woman_with_headscarf", 1], - ["๐Ÿ‘ณโ€โ™€๏ธ", "woman_with_turban", 1], - ["๐Ÿ‘ณ", "man_with_turban", 1], - ["๐Ÿ‘ฎโ€โ™€๏ธ", "policewoman", 1], - ["๐Ÿ‘ฎ", "policeman", 1], - ["๐Ÿ‘ทโ€โ™€๏ธ", "construction_worker_woman", 1], - ["๐Ÿ‘ท", "construction_worker_man", 1], - ["๐Ÿ’‚โ€โ™€๏ธ", "guardswoman", 1], - ["๐Ÿ’‚", "guardsman", 1], - ["๐Ÿ•ต๏ธโ€โ™€๏ธ", "female_detective", 1], - ["๐Ÿ•ต", "male_detective", 1], - ["๐Ÿง‘โ€โš•๏ธ", "health_worker", 1], - ["๐Ÿ‘ฉโ€โš•๏ธ", "woman_health_worker", 1], - ["๐Ÿ‘จโ€โš•๏ธ", "man_health_worker", 1], - ["๐Ÿง‘โ€๐ŸŒพ", "farmer", 1], - ["๐Ÿ‘ฉโ€๐ŸŒพ", "woman_farmer", 1], - ["๐Ÿ‘จโ€๐ŸŒพ", "man_farmer", 1], - ["๐Ÿง‘โ€๐Ÿณ", "cook", 1], - ["๐Ÿ‘ฉโ€๐Ÿณ", "woman_cook", 1], - ["๐Ÿ‘จโ€๐Ÿณ", "man_cook", 1], - ["๐Ÿง‘โ€๐ŸŽ“", "student", 1], - ["๐Ÿ‘ฉโ€๐ŸŽ“", "woman_student", 1], - ["๐Ÿ‘จโ€๐ŸŽ“", "man_student", 1], - ["๐Ÿง‘โ€๐ŸŽค", "singer", 1], - ["๐Ÿ‘ฉโ€๐ŸŽค", "woman_singer", 1], - ["๐Ÿ‘จโ€๐ŸŽค", "man_singer", 1], - ["๐Ÿง‘โ€๐Ÿซ", "teacher", 1], - ["๐Ÿ‘ฉโ€๐Ÿซ", "woman_teacher", 1], - ["๐Ÿ‘จโ€๐Ÿซ", "man_teacher", 1], - ["๐Ÿง‘โ€๐Ÿญ", "factory_worker", 1], - ["๐Ÿ‘ฉโ€๐Ÿญ", "woman_factory_worker", 1], - ["๐Ÿ‘จโ€๐Ÿญ", "man_factory_worker", 1], - ["๐Ÿง‘โ€๐Ÿ’ป", "technologist", 1], - ["๐Ÿ‘ฉโ€๐Ÿ’ป", "woman_technologist", 1], - ["๐Ÿ‘จโ€๐Ÿ’ป", "man_technologist", 1], - ["๐Ÿง‘โ€๐Ÿ’ผ", "office_worker", 1], - ["๐Ÿ‘ฉโ€๐Ÿ’ผ", "woman_office_worker", 1], - ["๐Ÿ‘จโ€๐Ÿ’ผ", "man_office_worker", 1], - ["๐Ÿง‘โ€๐Ÿ”ง", "mechanic", 1], - ["๐Ÿ‘ฉโ€๐Ÿ”ง", "woman_mechanic", 1], - ["๐Ÿ‘จโ€๐Ÿ”ง", "man_mechanic", 1], - ["๐Ÿง‘โ€๐Ÿ”ฌ", "scientist", 1], - ["๐Ÿ‘ฉโ€๐Ÿ”ฌ", "woman_scientist", 1], - ["๐Ÿ‘จโ€๐Ÿ”ฌ", "man_scientist", 1], - ["๐Ÿง‘โ€๐ŸŽจ", "artist", 1], - ["๐Ÿ‘ฉโ€๐ŸŽจ", "woman_artist", 1], - ["๐Ÿ‘จโ€๐ŸŽจ", "man_artist", 1], - ["๐Ÿง‘โ€๐Ÿš’", "firefighter", 1], - ["๐Ÿ‘ฉโ€๐Ÿš’", "woman_firefighter", 1], - ["๐Ÿ‘จโ€๐Ÿš’", "man_firefighter", 1], - ["๐Ÿง‘โ€โœˆ๏ธ", "pilot", 1], - ["๐Ÿ‘ฉโ€โœˆ๏ธ", "woman_pilot", 1], - ["๐Ÿ‘จโ€โœˆ๏ธ", "man_pilot", 1], - ["๐Ÿง‘โ€๐Ÿš€", "astronaut", 1], - ["๐Ÿ‘ฉโ€๐Ÿš€", "woman_astronaut", 1], - ["๐Ÿ‘จโ€๐Ÿš€", "man_astronaut", 1], - ["๐Ÿง‘โ€โš–๏ธ", "judge", 1], - ["๐Ÿ‘ฉโ€โš–๏ธ", "woman_judge", 1], - ["๐Ÿ‘จโ€โš–๏ธ", "man_judge", 1], - ["๐Ÿฆธโ€โ™€๏ธ", "woman_superhero", 1], - ["๐Ÿฆธโ€โ™‚๏ธ", "man_superhero", 1], - ["๐Ÿฆนโ€โ™€๏ธ", "woman_supervillain", 1], - ["๐Ÿฆนโ€โ™‚๏ธ", "man_supervillain", 1], - ["๐Ÿคถ", "mrs_claus", 1], - ["๐Ÿง‘โ€๐ŸŽ„", "mx_claus", 1], - ["๐ŸŽ…", "santa", 1], - ["๐Ÿฅท", "ninja", 1], - ["๐Ÿง™โ€โ™€๏ธ", "sorceress", 1], - ["๐Ÿง™โ€โ™‚๏ธ", "wizard", 1], - ["๐Ÿงโ€โ™€๏ธ", "woman_elf", 1], - ["๐Ÿงโ€โ™‚๏ธ", "man_elf", 1], - ["๐Ÿง›โ€โ™€๏ธ", "woman_vampire", 1], - ["๐Ÿง›โ€โ™‚๏ธ", "man_vampire", 1], - ["๐ŸงŸโ€โ™€๏ธ", "woman_zombie", 1], - ["๐ŸงŸโ€โ™‚๏ธ", "man_zombie", 1], - ["๐Ÿงžโ€โ™€๏ธ", "woman_genie", 1], - ["๐Ÿงžโ€โ™‚๏ธ", "man_genie", 1], - ["๐Ÿงœโ€โ™€๏ธ", "mermaid", 1], - ["๐Ÿงœโ€โ™‚๏ธ", "merman", 1], - ["๐Ÿงšโ€โ™€๏ธ", "woman_fairy", 1], - ["๐Ÿงšโ€โ™‚๏ธ", "man_fairy", 1], - ["๐Ÿ‘ผ", "angel", 1], - ["๐ŸงŒ", "troll", 1], - ["๐Ÿคฐ", "pregnant_woman", 1], - ["๐Ÿซƒ", "pregnant_man", 1], - ["๐Ÿซ„", "pregnant_person", 1], - ["๐Ÿซ…", "person_with_crown", 1], - ["๐Ÿคฑ", "breastfeeding", 1], - ["๐Ÿ‘ฉโ€๐Ÿผ", "woman_feeding_baby", 1], - ["๐Ÿ‘จโ€๐Ÿผ", "man_feeding_baby", 1], - ["๐Ÿง‘โ€๐Ÿผ", "person_feeding_baby", 1], - ["๐Ÿ‘ธ", "princess", 1], - ["๐Ÿคด", "prince", 1], - ["๐Ÿ‘ฐ", "person_with_veil", 1], - ["๐Ÿ‘ฐ", "bride_with_veil", 1], - ["๐Ÿคต", "person_in_tuxedo", 1], - ["๐Ÿคต", "man_in_tuxedo", 1], - ["๐Ÿƒโ€โ™€๏ธ", "running_woman", 1], - ["๐Ÿƒ", "running_man", 1], - ["๐Ÿšถโ€โ™€๏ธ", "walking_woman", 1], - ["๐Ÿšถ", "walking_man", 1], - ["๐Ÿ’ƒ", "dancer", 1], - ["๐Ÿ•บ", "man_dancing", 1], - ["๐Ÿ‘ฏ", "dancing_women", 1], - ["๐Ÿ‘ฏโ€โ™‚๏ธ", "dancing_men", 1], - ["๐Ÿ‘ซ", "couple", 1], - ["๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘", "people_holding_hands", 1], - ["๐Ÿ‘ฌ", "two_men_holding_hands", 1], - ["๐Ÿ‘ญ", "two_women_holding_hands", 1], - ["๐Ÿซ‚", "people_hugging", 1], - ["๐Ÿ™‡โ€โ™€๏ธ", "bowing_woman", 1], - ["๐Ÿ™‡", "bowing_man", 1], - ["๐Ÿคฆโ€โ™‚๏ธ", "man_facepalming", 1], - ["๐Ÿคฆโ€โ™€๏ธ", "woman_facepalming", 1], - ["๐Ÿคท", "woman_shrugging", 1], - ["๐Ÿคทโ€โ™‚๏ธ", "man_shrugging", 1], - ["๐Ÿ’", "tipping_hand_woman", 1], - ["๐Ÿ’โ€โ™‚๏ธ", "tipping_hand_man", 1], - ["๐Ÿ™…", "no_good_woman", 1], - ["๐Ÿ™…โ€โ™‚๏ธ", "no_good_man", 1], - ["๐Ÿ™†", "ok_woman", 1], - ["๐Ÿ™†โ€โ™‚๏ธ", "ok_man", 1], - ["๐Ÿ™‹", "raising_hand_woman", 1], - ["๐Ÿ™‹โ€โ™‚๏ธ", "raising_hand_man", 1], - ["๐Ÿ™Ž", "pouting_woman", 1], - ["๐Ÿ™Žโ€โ™‚๏ธ", "pouting_man", 1], - ["๐Ÿ™", "frowning_woman", 1], - ["๐Ÿ™โ€โ™‚๏ธ", "frowning_man", 1], - ["๐Ÿ’‡", "haircut_woman", 1], - ["๐Ÿ’‡โ€โ™‚๏ธ", "haircut_man", 1], - ["๐Ÿ’†", "massage_woman", 1], - ["๐Ÿ’†โ€โ™‚๏ธ", "massage_man", 1], - ["๐Ÿง–โ€โ™€๏ธ", "woman_in_steamy_room", 1], - ["๐Ÿง–โ€โ™‚๏ธ", "man_in_steamy_room", 1], - ["๐Ÿงโ€โ™€๏ธ", "woman_deaf", 1], - ["๐Ÿงโ€โ™‚๏ธ", "man_deaf", 1], - ["๐Ÿงโ€โ™€๏ธ", "woman_standing", 1], - ["๐Ÿงโ€โ™‚๏ธ", "man_standing", 1], - ["๐ŸงŽโ€โ™€๏ธ", "woman_kneeling", 1], - ["๐ŸงŽโ€โ™‚๏ธ", "man_kneeling", 1], - ["๐Ÿง‘โ€๐Ÿฆฏ", "person_with_probing_cane", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฏ", "woman_with_probing_cane", 1], - ["๐Ÿ‘จโ€๐Ÿฆฏ", "man_with_probing_cane", 1], - ["๐Ÿง‘โ€๐Ÿฆผ", "person_in_motorized_wheelchair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆผ", "woman_in_motorized_wheelchair", 1], - ["๐Ÿ‘จโ€๐Ÿฆผ", "man_in_motorized_wheelchair", 1], - ["๐Ÿง‘โ€๐Ÿฆฝ", "person_in_manual_wheelchair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฝ", "woman_in_manual_wheelchair", 1], - ["๐Ÿ‘จโ€๐Ÿฆฝ", "man_in_manual_wheelchair", 1], - ["๐Ÿ’‘", "couple_with_heart_woman_man", 1], - ["๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", "couple_with_heart_woman_woman", 1], - ["๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", "couple_with_heart_man_man", 1], - ["๐Ÿ’", "couplekiss_man_woman", 1], - ["๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", "couplekiss_woman_woman", 1], - ["๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", "couplekiss_man_man", 1], - ["๐Ÿ‘ช", "family_man_woman_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", "family_man_woman_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_man_woman_girl_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_man_woman_boy_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_man_woman_girl_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", "family_woman_woman_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", "family_woman_woman_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_woman_woman_girl_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_woman_woman_boy_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_woman_woman_girl_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ", "family_man_man_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง", "family_man_man_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_man_man_girl_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_man_man_boy_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_man_man_girl_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฆ", "family_woman_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ง", "family_woman_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_woman_girl_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_woman_boy_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_woman_girl_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฆ", "family_man_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ง", "family_man_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_man_girl_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_man_boy_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_man_girl_girl", 1], - ["๐Ÿงถ", "yarn", 1], - ["๐Ÿงต", "thread", 1], - ["๐Ÿงฅ", "coat", 1], - ["๐Ÿฅผ", "labcoat", 1], - ["๐Ÿ‘š", "womans_clothes", 1], - ["๐Ÿ‘•", "tshirt", 1], - ["๐Ÿ‘–", "jeans", 1], - ["๐Ÿ‘”", "necktie", 1], - ["๐Ÿ‘—", "dress", 1], - ["๐Ÿ‘™", "bikini", 1], - ["๐Ÿฉฑ", "one_piece_swimsuit", 1], - ["๐Ÿ‘˜", "kimono", 1], - ["๐Ÿฅป", "sari", 1], - ["๐Ÿฉฒ", "briefs", 1], - ["๐Ÿฉณ", "shorts", 1], - ["๐Ÿ’„", "lipstick", 1], - ["๐Ÿ’‹", "kiss", 1], - ["๐Ÿ‘ฃ", "footprints", 1], - ["๐Ÿฅฟ", "flat_shoe", 1], - ["๐Ÿ‘ ", "high_heel", 1], - ["๐Ÿ‘ก", "sandal", 1], - ["๐Ÿ‘ข", "boot", 1], - ["๐Ÿ‘ž", "mans_shoe", 1], - ["๐Ÿ‘Ÿ", "athletic_shoe", 1], - ["๐Ÿฉด", "thong_sandal", 1], - ["๐Ÿฉฐ", "ballet_shoes", 1], - ["๐Ÿงฆ", "socks", 1], - ["๐Ÿงค", "gloves", 1], - ["๐Ÿงฃ", "scarf", 1], - ["๐Ÿ‘’", "womans_hat", 1], - ["๐ŸŽฉ", "tophat", 1], - ["๐Ÿงข", "billed_hat", 1], - ["โ›‘", "rescue_worker_helmet", 1], - ["๐Ÿช–", "military_helmet", 1], - ["๐ŸŽ“", "mortar_board", 1], - ["๐Ÿ‘‘", "crown", 1], - ["๐ŸŽ’", "school_satchel", 1], - ["๐Ÿงณ", "luggage", 1], - ["๐Ÿ‘", "pouch", 1], - ["๐Ÿ‘›", "purse", 1], - ["๐Ÿ‘œ", "handbag", 1], - ["๐Ÿ’ผ", "briefcase", 1], - ["๐Ÿ‘“", "eyeglasses", 1], - ["๐Ÿ•ถ", "dark_sunglasses", 1], - ["๐Ÿฅฝ", "goggles", 1], - ["๐Ÿ’", "ring", 1], - ["๐ŸŒ‚", "closed_umbrella", 1], - ["๐Ÿถ", "dog", 2], - ["๐Ÿฑ", "cat", 2], - ["๐Ÿˆโ€โฌ›", "black_cat", 2], - ["๐Ÿญ", "mouse", 2], - ["๐Ÿน", "hamster", 2], - ["๐Ÿฐ", "rabbit", 2], - ["๐ŸฆŠ", "fox_face", 2], - ["๐Ÿป", "bear", 2], - ["๐Ÿผ", "panda_face", 2], - ["๐Ÿจ", "koala", 2], - ["๐Ÿฏ", "tiger", 2], - ["๐Ÿฆ", "lion", 2], - ["๐Ÿฎ", "cow", 2], - ["๐Ÿท", "pig", 2], - ["๐Ÿฝ", "pig_nose", 2], - ["๐Ÿธ", "frog", 2], - ["๐Ÿฆ‘", "squid", 2], - ["๐Ÿ™", "octopus", 2], - ["๐Ÿชผ", "jellyfish", 2], - ["๐Ÿฆ", "shrimp", 2], - ["๐Ÿต", "monkey_face", 2], - ["๐Ÿฆ", "gorilla", 2], - ["๐Ÿ™ˆ", "see_no_evil", 2], - ["๐Ÿ™‰", "hear_no_evil", 2], - ["๐Ÿ™Š", "speak_no_evil", 2], - ["๐Ÿ’", "monkey", 2], - ["๐Ÿ”", "chicken", 2], - ["๐Ÿง", "penguin", 2], - ["๐Ÿฆ", "bird", 2], - ["๐Ÿค", "baby_chick", 2], - ["๐Ÿฃ", "hatching_chick", 2], - ["๐Ÿฅ", "hatched_chick", 2], - ["๐Ÿชฟ", "goose", 2], - ["๐Ÿฆ†", "duck", 2], - ["๐Ÿฆโ€โฌ›", "black_bird", 2], - ["๐Ÿฆ…", "eagle", 2], - ["๐Ÿฆ‰", "owl", 2], - ["๐Ÿฆ‡", "bat", 2], - ["๐Ÿบ", "wolf", 2], - ["๐Ÿ—", "boar", 2], - ["๐Ÿด", "horse", 2], - ["๐Ÿฆ„", "unicorn", 2], - ["๐ŸซŽ", "moose", 2], - ["๐Ÿ", "honeybee", 2], - ["๐Ÿ›", "bug", 2], - ["๐Ÿฆ‹", "butterfly", 2], - ["๐ŸŒ", "snail", 2], - ["๐Ÿž", "lady_beetle", 2], - ["๐Ÿœ", "ant", 2], - ["๐Ÿฆ—", "grasshopper", 2], - ["๐Ÿ•ท", "spider", 2], - ["๐Ÿชฒ", "beetle", 2], - ["๐Ÿชณ", "cockroach", 2], - ["๐Ÿชฐ", "fly", 2], - ["๐Ÿชฑ", "worm", 2], - ["๐Ÿฆ‚", "scorpion", 2], - ["๐Ÿฆ€", "crab", 2], - ["๐Ÿ", "snake", 2], - ["๐ŸฆŽ", "lizard", 2], - ["๐Ÿฆ–", "t-rex", 2], - ["๐Ÿฆ•", "sauropod", 2], - ["๐Ÿข", "turtle", 2], - ["๐Ÿ ", "tropical_fish", 2], - ["๐ŸŸ", "fish", 2], - ["๐Ÿก", "blowfish", 2], - ["๐Ÿฌ", "dolphin", 2], - ["๐Ÿฆˆ", "shark", 2], - ["๐Ÿณ", "whale", 2], - ["๐Ÿ‹", "whale2", 2], - ["๐ŸŠ", "crocodile", 2], - ["๐Ÿ†", "leopard", 2], - ["๐Ÿฆ“", "zebra", 2], - ["๐Ÿ…", "tiger2", 2], - ["๐Ÿƒ", "water_buffalo", 2], - ["๐Ÿ‚", "ox", 2], - ["๐Ÿ„", "cow2", 2], - ["๐ŸฆŒ", "deer", 2], - ["๐Ÿช", "dromedary_camel", 2], - ["๐Ÿซ", "camel", 2], - ["๐Ÿฆ’", "giraffe", 2], - ["๐Ÿ˜", "elephant", 2], - ["๐Ÿฆ", "rhinoceros", 2], - ["๐Ÿ", "goat", 2], - ["๐Ÿ", "ram", 2], - ["๐Ÿ‘", "sheep", 2], - ["๐Ÿซ", "donkey", 2], - ["๐ŸŽ", "racehorse", 2], - ["๐Ÿ–", "pig2", 2], - ["๐Ÿ€", "rat", 2], - ["๐Ÿ", "mouse2", 2], - ["๐Ÿ“", "rooster", 2], - ["๐Ÿฆƒ", "turkey", 2], - ["๐Ÿ•Š", "dove", 2], - ["๐Ÿ•", "dog2", 2], - ["๐Ÿฉ", "poodle", 2], - ["๐Ÿˆ", "cat2", 2], - ["๐Ÿ‡", "rabbit2", 2], - ["๐Ÿฟ", "chipmunk", 2], - ["๐Ÿฆ”", "hedgehog", 2], - ["๐Ÿฆ", "raccoon", 2], - ["๐Ÿฆ™", "llama", 2], - ["๐Ÿฆ›", "hippopotamus", 2], - ["๐Ÿฆ˜", "kangaroo", 2], - ["๐Ÿฆก", "badger", 2], - ["๐Ÿฆข", "swan", 2], - ["๐Ÿฆš", "peacock", 2], - ["๐Ÿฆœ", "parrot", 2], - ["๐Ÿฆž", "lobster", 2], - ["๐Ÿฆ ", "microbe", 2], - ["๐ŸฆŸ", "mosquito", 2], - ["๐Ÿฆฌ", "bison", 2], - ["๐Ÿฆฃ", "mammoth", 2], - ["๐Ÿฆซ", "beaver", 2], - ["๐Ÿปโ€โ„๏ธ", "polar_bear", 2], - ["๐Ÿฆค", "dodo", 2], - ["๐Ÿชถ", "feather", 2], - ["๐Ÿชฝ", "wing", 2], - ["๐Ÿฆญ", "seal", 2], - ["๐Ÿพ", "paw_prints", 2], - ["๐Ÿ‰", "dragon", 2], - ["๐Ÿฒ", "dragon_face", 2], - ["๐Ÿฆง", "orangutan", 2], - ["๐Ÿฆฎ", "guide_dog", 2], - ["๐Ÿ•โ€๐Ÿฆบ", "service_dog", 2], - ["๐Ÿฆฅ", "sloth", 2], - ["๐Ÿฆฆ", "otter", 2], - ["๐Ÿฆจ", "skunk", 2], - ["๐Ÿฆฉ", "flamingo", 2], - ["๐ŸŒต", "cactus", 2], - ["๐ŸŽ„", "christmas_tree", 2], - ["๐ŸŒฒ", "evergreen_tree", 2], - ["๐ŸŒณ", "deciduous_tree", 2], - ["๐ŸŒด", "palm_tree", 2], - ["๐ŸŒฑ", "seedling", 2], - ["๐ŸŒฟ", "herb", 2], - ["โ˜˜", "shamrock", 2], - ["๐Ÿ€", "four_leaf_clover", 2], - ["๐ŸŽ", "bamboo", 2], - ["๐ŸŽ‹", "tanabata_tree", 2], - ["๐Ÿƒ", "leaves", 2], - ["๐Ÿ‚", "fallen_leaf", 2], - ["๐Ÿ", "maple_leaf", 2], - ["๐ŸŒพ", "ear_of_rice", 2], - ["๐ŸŒบ", "hibiscus", 2], - ["๐ŸŒป", "sunflower", 2], - ["๐ŸŒน", "rose", 2], - ["๐Ÿฅ€", "wilted_flower", 2], - ["๐Ÿชป", "hyacinth", 2], - ["๐ŸŒท", "tulip", 2], - ["๐ŸŒผ", "blossom", 2], - ["๐ŸŒธ", "cherry_blossom", 2], - ["๐Ÿ’", "bouquet", 2], - ["๐Ÿ„", "mushroom", 2], - ["๐Ÿชด", "potted_plant", 2], - ["๐ŸŒฐ", "chestnut", 2], - ["๐ŸŽƒ", "jack_o_lantern", 2], - ["๐Ÿš", "shell", 2], - ["๐Ÿ•ธ", "spider_web", 2], - ["๐ŸŒŽ", "earth_americas", 2], - ["๐ŸŒ", "earth_africa", 2], - ["๐ŸŒ", "earth_asia", 2], - ["๐Ÿช", "ringed_planet", 2], - ["๐ŸŒ•", "full_moon", 2], - ["๐ŸŒ–", "waning_gibbous_moon", 2], - ["๐ŸŒ—", "last_quarter_moon", 2], - ["๐ŸŒ˜", "waning_crescent_moon", 2], - ["๐ŸŒ‘", "new_moon", 2], - ["๐ŸŒ’", "waxing_crescent_moon", 2], - ["๐ŸŒ“", "first_quarter_moon", 2], - ["๐ŸŒ”", "waxing_gibbous_moon", 2], - ["๐ŸŒš", "new_moon_with_face", 2], - ["๐ŸŒ", "full_moon_with_face", 2], - ["๐ŸŒ›", "first_quarter_moon_with_face", 2], - ["๐ŸŒœ", "last_quarter_moon_with_face", 2], - ["๐ŸŒž", "sun_with_face", 2], - ["๐ŸŒ™", "crescent_moon", 2], - ["โญ", "star", 2], - ["๐ŸŒŸ", "star2", 2], - ["๐Ÿ’ซ", "dizzy", 2], - ["โœจ", "sparkles", 2], - ["โ˜„", "comet", 2], - ["โ˜€๏ธ", "sunny", 2], - ["๐ŸŒค", "sun_behind_small_cloud", 2], - ["โ›…", "partly_sunny", 2], - ["๐ŸŒฅ", "sun_behind_large_cloud", 2], - ["๐ŸŒฆ", "sun_behind_rain_cloud", 2], - ["โ˜๏ธ", "cloud", 2], - ["๐ŸŒง", "cloud_with_rain", 2], - ["โ›ˆ", "cloud_with_lightning_and_rain", 2], - ["๐ŸŒฉ", "cloud_with_lightning", 2], - ["โšก", "zap", 2], - ["๐Ÿ”ฅ", "fire", 2], - ["๐Ÿ’ฅ", "boom", 2], - ["โ„๏ธ", "snowflake", 2], - ["๐ŸŒจ", "cloud_with_snow", 2], - ["โ›„", "snowman", 2], - ["โ˜ƒ", "snowman_with_snow", 2], - ["๐ŸŒฌ", "wind_face", 2], - ["๐Ÿ’จ", "dash", 2], - ["๐ŸŒช", "tornado", 2], - ["๐ŸŒซ", "fog", 2], - ["โ˜‚", "open_umbrella", 2], - ["โ˜”", "umbrella", 2], - ["๐Ÿ’ง", "droplet", 2], - ["๐Ÿ’ฆ", "sweat_drops", 2], - ["๐ŸŒŠ", "ocean", 2], - ["๐Ÿชท", "lotus", 2], - ["๐Ÿชธ", "coral", 2], - ["๐Ÿชน", "empty_nest", 2], - ["๐Ÿชบ", "nest_with_eggs", 2], - ["๐Ÿ", "green_apple", 3], - ["๐ŸŽ", "apple", 3], - ["๐Ÿ", "pear", 3], - ["๐ŸŠ", "tangerine", 3], - ["๐Ÿ‹", "lemon", 3], - ["๐ŸŒ", "banana", 3], - ["๐Ÿ‰", "watermelon", 3], - ["๐Ÿ‡", "grapes", 3], - ["๐Ÿ“", "strawberry", 3], - ["๐Ÿˆ", "melon", 3], - ["๐Ÿ’", "cherries", 3], - ["๐Ÿ‘", "peach", 3], - ["๐Ÿ", "pineapple", 3], - ["๐Ÿฅฅ", "coconut", 3], - ["๐Ÿฅ", "kiwi_fruit", 3], - ["๐Ÿฅญ", "mango", 3], - ["๐Ÿฅ‘", "avocado", 3], - ["๐Ÿซ›", "pea_pod", 3], - ["๐Ÿฅฆ", "broccoli", 3], - ["๐Ÿ…", "tomato", 3], - ["๐Ÿ†", "eggplant", 3], - ["๐Ÿฅ’", "cucumber", 3], - ["๐Ÿซ", "blueberries", 3], - ["๐Ÿซ’", "olive", 3], - ["๐Ÿซ‘", "bell_pepper", 3], - ["๐Ÿฅ•", "carrot", 3], - ["๐ŸŒถ", "hot_pepper", 3], - ["๐Ÿฅ”", "potato", 3], - ["๐ŸŒฝ", "corn", 3], - ["๐Ÿฅฌ", "leafy_greens", 3], - ["๐Ÿ ", "sweet_potato", 3], - ["๐Ÿซš", "ginger_root", 3], - ["๐Ÿฅœ", "peanuts", 3], - ["๐Ÿง„", "garlic", 3], - ["๐Ÿง…", "onion", 3], - ["๐Ÿฏ", "honey_pot", 3], - ["๐Ÿฅ", "croissant", 3], - ["๐Ÿž", "bread", 3], - ["๐Ÿฅ–", "baguette_bread", 3], - ["๐Ÿฅฏ", "bagel", 3], - ["๐Ÿฅจ", "pretzel", 3], - ["๐Ÿง€", "cheese", 3], - ["๐Ÿฅš", "egg", 3], - ["๐Ÿฅ“", "bacon", 3], - ["๐Ÿฅฉ", "steak", 3], - ["๐Ÿฅž", "pancakes", 3], - ["๐Ÿ—", "poultry_leg", 3], - ["๐Ÿ–", "meat_on_bone", 3], - ["๐Ÿฆด", "bone", 3], - ["๐Ÿค", "fried_shrimp", 3], - ["๐Ÿณ", "fried_egg", 3], - ["๐Ÿ”", "hamburger", 3], - ["๐ŸŸ", "fries", 3], - ["๐Ÿฅ™", "stuffed_flatbread", 3], - ["๐ŸŒญ", "hotdog", 3], - ["๐Ÿ•", "pizza", 3], - ["๐Ÿฅช", "sandwich", 3], - ["๐Ÿฅซ", "canned_food", 3], - ["๐Ÿ", "spaghetti", 3], - ["๐ŸŒฎ", "taco", 3], - ["๐ŸŒฏ", "burrito", 3], - ["๐Ÿฅ—", "green_salad", 3], - ["๐Ÿฅ˜", "shallow_pan_of_food", 3], - ["๐Ÿœ", "ramen", 3], - ["๐Ÿฒ", "stew", 3], - ["๐Ÿฅ", "fish_cake", 3], - ["๐Ÿฅ ", "fortune_cookie", 3], - ["๐Ÿฃ", "sushi", 3], - ["๐Ÿฑ", "bento", 3], - ["๐Ÿ›", "curry", 3], - ["๐Ÿ™", "rice_ball", 3], - ["๐Ÿš", "rice", 3], - ["๐Ÿ˜", "rice_cracker", 3], - ["๐Ÿข", "oden", 3], - ["๐Ÿก", "dango", 3], - ["๐Ÿง", "shaved_ice", 3], - ["๐Ÿจ", "ice_cream", 3], - ["๐Ÿฆ", "icecream", 3], - ["๐Ÿฅง", "pie", 3], - ["๐Ÿฐ", "cake", 3], - ["๐Ÿง", "cupcake", 3], - ["๐Ÿฅฎ", "moon_cake", 3], - ["๐ŸŽ‚", "birthday", 3], - ["๐Ÿฎ", "custard", 3], - ["๐Ÿฌ", "candy", 3], - ["๐Ÿญ", "lollipop", 3], - ["๐Ÿซ", "chocolate_bar", 3], - ["๐Ÿฟ", "popcorn", 3], - ["๐ŸฅŸ", "dumpling", 3], - ["๐Ÿฉ", "doughnut", 3], - ["๐Ÿช", "cookie", 3], - ["๐Ÿง‡", "waffle", 3], - ["๐Ÿง†", "falafel", 3], - ["๐Ÿงˆ", "butter", 3], - ["๐Ÿฆช", "oyster", 3], - ["๐Ÿซ“", "flatbread", 3], - ["๐Ÿซ”", "tamale", 3], - ["๐Ÿซ•", "fondue", 3], - ["๐Ÿฅ›", "milk_glass", 3], - ["๐Ÿบ", "beer", 3], - ["๐Ÿป", "beers", 3], - ["๐Ÿฅ‚", "clinking_glasses", 3], - ["๐Ÿท", "wine_glass", 3], - ["๐Ÿฅƒ", "tumbler_glass", 3], - ["๐Ÿธ", "cocktail", 3], - ["๐Ÿน", "tropical_drink", 3], - ["๐Ÿพ", "champagne", 3], - ["๐Ÿถ", "sake", 3], - ["๐Ÿต", "tea", 3], - ["๐Ÿฅค", "cup_with_straw", 3], - ["โ˜•", "coffee", 3], - ["๐Ÿซ–", "teapot", 3], - ["๐Ÿง‹", "bubble_tea", 3], - ["๐Ÿผ", "baby_bottle", 3], - ["๐Ÿงƒ", "beverage_box", 3], - ["๐Ÿง‰", "mate", 3], - ["๐ŸงŠ", "ice_cube", 3], - ["๐Ÿง‚", "salt", 3], - ["๐Ÿฅ„", "spoon", 3], - ["๐Ÿด", "fork_and_knife", 3], - ["๐Ÿฝ", "plate_with_cutlery", 3], - ["๐Ÿฅฃ", "bowl_with_spoon", 3], - ["๐Ÿฅก", "takeout_box", 3], - ["๐Ÿฅข", "chopsticks", 3], - ["๐Ÿซ—", "pouring_liquid", 3], - ["๐Ÿซ˜", "beans", 3], - ["๐Ÿซ™", "jar", 3], - ["โšฝ", "soccer", 4], - ["๐Ÿ€", "basketball", 4], - ["๐Ÿˆ", "football", 4], - ["โšพ", "baseball", 4], - ["๐ŸฅŽ", "softball", 4], - ["๐ŸŽพ", "tennis", 4], - ["๐Ÿ", "volleyball", 4], - ["๐Ÿ‰", "rugby_football", 4], - ["๐Ÿฅ", "flying_disc", 4], - ["๐ŸŽฑ", "8ball", 4], - ["โ›ณ", "golf", 4], - ["๐ŸŒ๏ธโ€โ™€๏ธ", "golfing_woman", 4], - ["๐ŸŒ", "golfing_man", 4], - ["๐Ÿ“", "ping_pong", 4], - ["๐Ÿธ", "badminton", 4], - ["๐Ÿฅ…", "goal_net", 4], - ["๐Ÿ’", "ice_hockey", 4], - ["๐Ÿ‘", "field_hockey", 4], - ["๐Ÿฅ", "lacrosse", 4], - ["๐Ÿ", "cricket", 4], - ["๐ŸŽฟ", "ski", 4], - ["โ›ท", "skier", 4], - ["๐Ÿ‚", "snowboarder", 4], - ["๐Ÿคบ", "person_fencing", 4], - ["๐Ÿคผโ€โ™€๏ธ", "women_wrestling", 4], - ["๐Ÿคผโ€โ™‚๏ธ", "men_wrestling", 4], - ["๐Ÿคธโ€โ™€๏ธ", "woman_cartwheeling", 4], - ["๐Ÿคธโ€โ™‚๏ธ", "man_cartwheeling", 4], - ["๐Ÿคพโ€โ™€๏ธ", "woman_playing_handball", 4], - ["๐Ÿคพโ€โ™‚๏ธ", "man_playing_handball", 4], - ["โ›ธ", "ice_skate", 4], - ["๐ŸฅŒ", "curling_stone", 4], - ["๐Ÿ›น", "skateboard", 4], - ["๐Ÿ›ท", "sled", 4], - ["๐Ÿน", "bow_and_arrow", 4], - ["๐ŸŽฃ", "fishing_pole_and_fish", 4], - ["๐ŸฅŠ", "boxing_glove", 4], - ["๐Ÿฅ‹", "martial_arts_uniform", 4], - ["๐Ÿšฃโ€โ™€๏ธ", "rowing_woman", 4], - ["๐Ÿšฃ", "rowing_man", 4], - ["๐Ÿง—โ€โ™€๏ธ", "climbing_woman", 4], - ["๐Ÿง—โ€โ™‚๏ธ", "climbing_man", 4], - ["๐ŸŠโ€โ™€๏ธ", "swimming_woman", 4], - ["๐ŸŠ", "swimming_man", 4], - ["๐Ÿคฝโ€โ™€๏ธ", "woman_playing_water_polo", 4], - ["๐Ÿคฝโ€โ™‚๏ธ", "man_playing_water_polo", 4], - ["๐Ÿง˜โ€โ™€๏ธ", "woman_in_lotus_position", 4], - ["๐Ÿง˜โ€โ™‚๏ธ", "man_in_lotus_position", 4], - ["๐Ÿ„โ€โ™€๏ธ", "surfing_woman", 4], - ["๐Ÿ„", "surfing_man", 4], - ["๐Ÿ›€", "bath", 4], - ["โ›น๏ธโ€โ™€๏ธ", "basketball_woman", 4], - ["โ›น", "basketball_man", 4], - ["๐Ÿ‹๏ธโ€โ™€๏ธ", "weight_lifting_woman", 4], - ["๐Ÿ‹", "weight_lifting_man", 4], - ["๐Ÿšดโ€โ™€๏ธ", "biking_woman", 4], - ["๐Ÿšด", "biking_man", 4], - ["๐Ÿšตโ€โ™€๏ธ", "mountain_biking_woman", 4], - ["๐Ÿšต", "mountain_biking_man", 4], - ["๐Ÿ‡", "horse_racing", 4], - ["๐Ÿคฟ", "diving_mask", 4], - ["๐Ÿช€", "yo_yo", 4], - ["๐Ÿช", "kite", 4], - ["๐Ÿฆบ", "safety_vest", 4], - ["๐Ÿชก", "sewing_needle", 4], - ["๐Ÿชข", "knot", 4], - ["๐Ÿ•ด", "business_suit_levitating", 4], - ["๐Ÿ†", "trophy", 4], - ["๐ŸŽฝ", "running_shirt_with_sash", 4], - ["๐Ÿ…", "medal_sports", 4], - ["๐ŸŽ–", "medal_military", 4], - ["๐Ÿฅ‡", "1st_place_medal", 4], - ["๐Ÿฅˆ", "2nd_place_medal", 4], - ["๐Ÿฅ‰", "3rd_place_medal", 4], - ["๐ŸŽ—", "reminder_ribbon", 4], - ["๐Ÿต", "rosette", 4], - ["๐ŸŽซ", "ticket", 4], - ["๐ŸŽŸ", "tickets", 4], - ["๐ŸŽญ", "performing_arts", 4], - ["๐ŸŽจ", "art", 4], - ["๐ŸŽช", "circus_tent", 4], - ["๐Ÿคนโ€โ™€๏ธ", "woman_juggling", 4], - ["๐Ÿคนโ€โ™‚๏ธ", "man_juggling", 4], - ["๐ŸŽค", "microphone", 4], - ["๐ŸŽง", "headphones", 4], - ["๐ŸŽผ", "musical_score", 4], - ["๐ŸŽน", "musical_keyboard", 4], - ["๐Ÿช‡", "maracas", 4], - ["๐Ÿฅ", "drum", 4], - ["๐ŸŽท", "saxophone", 4], - ["๐ŸŽบ", "trumpet", 4], - ["๐Ÿชˆ", "flute", 4], - ["๐ŸŽธ", "guitar", 4], - ["๐ŸŽป", "violin", 4], - ["๐Ÿช•", "banjo", 4], - ["๐Ÿช—", "accordion", 4], - ["๐Ÿช˜", "long_drum", 4], - ["๐ŸŽฌ", "clapper", 4], - ["๐ŸŽฎ", "video_game", 4], - ["๐Ÿ‘พ", "space_invader", 4], - ["๐ŸŽฏ", "dart", 4], - ["๐ŸŽฒ", "game_die", 4], - ["โ™Ÿ๏ธ", "chess_pawn", 4], - ["๐ŸŽฐ", "slot_machine", 4], - ["๐Ÿงฉ", "jigsaw", 4], - ["๐ŸŽณ", "bowling", 4], - ["๐Ÿช„", "magic_wand", 4], - ["๐Ÿช…", "pinata", 4], - ["๐Ÿช†", "nesting_dolls", 4], - ["๐Ÿชฌ", "hamsa", 4], - ["๐Ÿชฉ", "mirror_ball", 4], - ["๐Ÿš—", "red_car", 5], - ["๐Ÿš•", "taxi", 5], - ["๐Ÿš™", "blue_car", 5], - ["๐ŸšŒ", "bus", 5], - ["๐ŸšŽ", "trolleybus", 5], - ["๐ŸŽ", "racing_car", 5], - ["๐Ÿš“", "police_car", 5], - ["๐Ÿš‘", "ambulance", 5], - ["๐Ÿš’", "fire_engine", 5], - ["๐Ÿš", "minibus", 5], - ["๐Ÿšš", "truck", 5], - ["๐Ÿš›", "articulated_lorry", 5], - ["๐Ÿšœ", "tractor", 5], - ["๐Ÿ›ด", "kick_scooter", 5], - ["๐Ÿ", "motorcycle", 5], - ["๐Ÿšฒ", "bike", 5], - ["๐Ÿ›ต", "motor_scooter", 5], - ["๐Ÿฆฝ", "manual_wheelchair", 5], - ["๐Ÿฆผ", "motorized_wheelchair", 5], - ["๐Ÿ›บ", "auto_rickshaw", 5], - ["๐Ÿช‚", "parachute", 5], - ["๐Ÿšจ", "rotating_light", 5], - ["๐Ÿš”", "oncoming_police_car", 5], - ["๐Ÿš", "oncoming_bus", 5], - ["๐Ÿš˜", "oncoming_automobile", 5], - ["๐Ÿš–", "oncoming_taxi", 5], - ["๐Ÿšก", "aerial_tramway", 5], - ["๐Ÿš ", "mountain_cableway", 5], - ["๐ŸšŸ", "suspension_railway", 5], - ["๐Ÿšƒ", "railway_car", 5], - ["๐Ÿš‹", "train", 5], - ["๐Ÿš", "monorail", 5], - ["๐Ÿš„", "bullettrain_side", 5], - ["๐Ÿš…", "bullettrain_front", 5], - ["๐Ÿšˆ", "light_rail", 5], - ["๐Ÿšž", "mountain_railway", 5], - ["๐Ÿš‚", "steam_locomotive", 5], - ["๐Ÿš†", "train2", 5], - ["๐Ÿš‡", "metro", 5], - ["๐ŸšŠ", "tram", 5], - ["๐Ÿš‰", "station", 5], - ["๐Ÿ›ธ", "flying_saucer", 5], - ["๐Ÿš", "helicopter", 5], - ["๐Ÿ›ฉ", "small_airplane", 5], - ["โœˆ๏ธ", "airplane", 5], - ["๐Ÿ›ซ", "flight_departure", 5], - ["๐Ÿ›ฌ", "flight_arrival", 5], - ["โ›ต", "sailboat", 5], - ["๐Ÿ›ฅ", "motor_boat", 5], - ["๐Ÿšค", "speedboat", 5], - ["โ›ด", "ferry", 5], - ["๐Ÿ›ณ", "passenger_ship", 5], - ["๐Ÿš€", "rocket", 5], - ["๐Ÿ›ฐ", "artificial_satellite", 5], - ["๐Ÿ›ป", "pickup_truck", 5], - ["๐Ÿ›ผ", "roller_skate", 5], - ["๐Ÿ’บ", "seat", 5], - ["๐Ÿ›ถ", "canoe", 5], - ["โš“", "anchor", 5], - ["๐Ÿšง", "construction", 5], - ["โ›ฝ", "fuelpump", 5], - ["๐Ÿš", "busstop", 5], - ["๐Ÿšฆ", "vertical_traffic_light", 5], - ["๐Ÿšฅ", "traffic_light", 5], - ["๐Ÿ", "checkered_flag", 5], - ["๐Ÿšข", "ship", 5], - ["๐ŸŽก", "ferris_wheel", 5], - ["๐ŸŽข", "roller_coaster", 5], - ["๐ŸŽ ", "carousel_horse", 5], - ["๐Ÿ—", "building_construction", 5], - ["๐ŸŒ", "foggy", 5], - ["๐Ÿญ", "factory", 5], - ["โ›ฒ", "fountain", 5], - ["๐ŸŽ‘", "rice_scene", 5], - ["โ›ฐ", "mountain", 5], - ["๐Ÿ”", "mountain_snow", 5], - ["๐Ÿ—ป", "mount_fuji", 5], - ["๐ŸŒ‹", "volcano", 5], - ["๐Ÿ—พ", "japan", 5], - ["๐Ÿ•", "camping", 5], - ["โ›บ", "tent", 5], - ["๐Ÿž", "national_park", 5], - ["๐Ÿ›ฃ", "motorway", 5], - ["๐Ÿ›ค", "railway_track", 5], - ["๐ŸŒ…", "sunrise", 5], - ["๐ŸŒ„", "sunrise_over_mountains", 5], - ["๐Ÿœ", "desert", 5], - ["๐Ÿ–", "beach_umbrella", 5], - ["๐Ÿ", "desert_island", 5], - ["๐ŸŒ‡", "city_sunrise", 5], - ["๐ŸŒ†", "city_sunset", 5], - ["๐Ÿ™", "cityscape", 5], - ["๐ŸŒƒ", "night_with_stars", 5], - ["๐ŸŒ‰", "bridge_at_night", 5], - ["๐ŸŒŒ", "milky_way", 5], - ["๐ŸŒ ", "stars", 5], - ["๐ŸŽ‡", "sparkler", 5], - ["๐ŸŽ†", "fireworks", 5], - ["๐ŸŒˆ", "rainbow", 5], - ["๐Ÿ˜", "houses", 5], - ["๐Ÿฐ", "european_castle", 5], - ["๐Ÿฏ", "japanese_castle", 5], - ["๐Ÿ—ผ", "tokyo_tower", 5], - ["๎”Š", "shibuya_109", 5], - ["๐ŸŸ", "stadium", 5], - ["๐Ÿ—ฝ", "statue_of_liberty", 5], - ["๐Ÿ ", "house", 5], - ["๐Ÿก", "house_with_garden", 5], - ["๐Ÿš", "derelict_house", 5], - ["๐Ÿข", "office", 5], - ["๐Ÿฌ", "department_store", 5], - ["๐Ÿฃ", "post_office", 5], - ["๐Ÿค", "european_post_office", 5], - ["๐Ÿฅ", "hospital", 5], - ["๐Ÿฆ", "bank", 5], - ["๐Ÿจ", "hotel", 5], - ["๐Ÿช", "convenience_store", 5], - ["๐Ÿซ", "school", 5], - ["๐Ÿฉ", "love_hotel", 5], - ["๐Ÿ’’", "wedding", 5], - ["๐Ÿ›", "classical_building", 5], - ["โ›ช", "church", 5], - ["๐Ÿ•Œ", "mosque", 5], - ["๐Ÿ•", "synagogue", 5], - ["๐Ÿ•‹", "kaaba", 5], - ["โ›ฉ", "shinto_shrine", 5], - ["๐Ÿ›•", "hindu_temple", 5], - ["๐Ÿชจ", "rock", 5], - ["๐Ÿชต", "wood", 5], - ["๐Ÿ›–", "hut", 5], - ["๐Ÿ›", "playground_slide", 5], - ["๐Ÿ›ž", "wheel", 5], - ["๐Ÿ›Ÿ", "ring_buoy", 5], - ["โŒš", "watch", 6], - ["๐Ÿ“ฑ", "iphone", 6], - ["๐Ÿ“ฒ", "calling", 6], - ["๐Ÿ’ป", "computer", 6], - ["โŒจ", "keyboard", 6], - ["๐Ÿ–ฅ", "desktop_computer", 6], - ["๐Ÿ–จ", "printer", 6], - ["๐Ÿ–ฑ", "computer_mouse", 6], - ["๐Ÿ–ฒ", "trackball", 6], - ["๐Ÿ•น", "joystick", 6], - ["๐Ÿ—œ", "clamp", 6], - ["๐Ÿ’ฝ", "minidisc", 6], - ["๐Ÿ’พ", "floppy_disk", 6], - ["๐Ÿ’ฟ", "cd", 6], - ["๐Ÿ“€", "dvd", 6], - ["๐Ÿ“ผ", "vhs", 6], - ["๐Ÿ“ท", "camera", 6], - ["๐Ÿ“ธ", "camera_flash", 6], - ["๐Ÿ“น", "video_camera", 6], - ["๐ŸŽฅ", "movie_camera", 6], - ["๐Ÿ“ฝ", "film_projector", 6], - ["๐ŸŽž", "film_strip", 6], - ["๐Ÿ“ž", "telephone_receiver", 6], - ["โ˜Ž๏ธ", "phone", 6], - ["๐Ÿ“Ÿ", "pager", 6], - ["๐Ÿ“ ", "fax", 6], - ["๐Ÿ“บ", "tv", 6], - ["๐Ÿ“ป", "radio", 6], - ["๐ŸŽ™", "studio_microphone", 6], - ["๐ŸŽš", "level_slider", 6], - ["๐ŸŽ›", "control_knobs", 6], - ["๐Ÿงญ", "compass", 6], - ["โฑ", "stopwatch", 6], - ["โฒ", "timer_clock", 6], - ["โฐ", "alarm_clock", 6], - ["๐Ÿ•ฐ", "mantelpiece_clock", 6], - ["โณ", "hourglass_flowing_sand", 6], - ["โŒ›", "hourglass", 6], - ["๐Ÿ“ก", "satellite", 6], - ["๐Ÿ”‹", "battery", 6], - ["๐Ÿชซ", "low_battery", 6], - ["๐Ÿ”Œ", "electric_plug", 6], - ["๐Ÿ’ก", "bulb", 6], - ["๐Ÿ”ฆ", "flashlight", 6], - ["๐Ÿ•ฏ", "candle", 6], - ["๐Ÿงฏ", "fire_extinguisher", 6], - ["๐Ÿ—‘", "wastebasket", 6], - ["๐Ÿ›ข", "oil_drum", 6], - ["๐Ÿ’ธ", "money_with_wings", 6], - ["๐Ÿ’ต", "dollar", 6], - ["๐Ÿ’ด", "yen", 6], - ["๐Ÿ’ถ", "euro", 6], - ["๐Ÿ’ท", "pound", 6], - ["๐Ÿ’ฐ", "moneybag", 6], - ["๐Ÿช™", "coin", 6], - ["๐Ÿ’ณ", "credit_card", 6], - ["๐Ÿชช", "identification_card", 6], - ["๐Ÿ’Ž", "gem", 6], - ["โš–", "balance_scale", 6], - ["๐Ÿงฐ", "toolbox", 6], - ["๐Ÿ”ง", "wrench", 6], - ["๐Ÿ”จ", "hammer", 6], - ["โš’", "hammer_and_pick", 6], - ["๐Ÿ› ", "hammer_and_wrench", 6], - ["โ›", "pick", 6], - ["๐Ÿช“", "axe", 6], - ["๐Ÿฆฏ", "probing_cane", 6], - ["๐Ÿ”ฉ", "nut_and_bolt", 6], - ["โš™", "gear", 6], - ["๐Ÿชƒ", "boomerang", 6], - ["๐Ÿชš", "carpentry_saw", 6], - ["๐Ÿช›", "screwdriver", 6], - ["๐Ÿช", "hook", 6], - ["๐Ÿชœ", "ladder", 6], - ["๐Ÿงฑ", "brick", 6], - ["โ›“", "chains", 6], - ["๐Ÿงฒ", "magnet", 6], - ["๐Ÿ”ซ", "gun", 6], - ["๐Ÿ’ฃ", "bomb", 6], - ["๐Ÿงจ", "firecracker", 6], - ["๐Ÿ”ช", "hocho", 6], - ["๐Ÿ—ก", "dagger", 6], - ["โš”", "crossed_swords", 6], - ["๐Ÿ›ก", "shield", 6], - ["๐Ÿšฌ", "smoking", 6], - ["โ˜ ", "skull_and_crossbones", 6], - ["โšฐ", "coffin", 6], - ["โšฑ", "funeral_urn", 6], - ["๐Ÿบ", "amphora", 6], - ["๐Ÿ”ฎ", "crystal_ball", 6], - ["๐Ÿ“ฟ", "prayer_beads", 6], - ["๐Ÿงฟ", "nazar_amulet", 6], - ["๐Ÿ’ˆ", "barber", 6], - ["โš—", "alembic", 6], - ["๐Ÿ”ญ", "telescope", 6], - ["๐Ÿ”ฌ", "microscope", 6], - ["๐Ÿ•ณ", "hole", 6], - ["๐Ÿ’Š", "pill", 6], - ["๐Ÿ’‰", "syringe", 6], - ["๐Ÿฉธ", "drop_of_blood", 6], - ["๐Ÿฉน", "adhesive_bandage", 6], - ["๐Ÿฉบ", "stethoscope", 6], - ["๐Ÿช’", "razor", 6], - ["๐Ÿชฎ", "hair_pick", 6], - ["๐Ÿฉป", "xray", 6], - ["๐Ÿฉผ", "crutch", 6], - ["๐Ÿงฌ", "dna", 6], - ["๐Ÿงซ", "petri_dish", 6], - ["๐Ÿงช", "test_tube", 6], - ["๐ŸŒก", "thermometer", 6], - ["๐Ÿงน", "broom", 6], - ["๐Ÿงบ", "basket", 6], - ["๐Ÿงป", "toilet_paper", 6], - ["๐Ÿท", "label", 6], - ["๐Ÿ”–", "bookmark", 6], - ["๐Ÿšฝ", "toilet", 6], - ["๐Ÿšฟ", "shower", 6], - ["๐Ÿ›", "bathtub", 6], - ["๐Ÿงผ", "soap", 6], - ["๐Ÿงฝ", "sponge", 6], - ["๐Ÿงด", "lotion_bottle", 6], - ["๐Ÿ”‘", "key", 6], - ["๐Ÿ—", "old_key", 6], - ["๐Ÿ›‹", "couch_and_lamp", 6], - ["๐Ÿช”", "diya_Lamp", 6], - ["๐Ÿ›Œ", "sleeping_bed", 6], - ["๐Ÿ›", "bed", 6], - ["๐Ÿšช", "door", 6], - ["๐Ÿช‘", "chair", 6], - ["๐Ÿ›Ž", "bellhop_bell", 6], - ["๐Ÿงธ", "teddy_bear", 6], - ["๐Ÿ–ผ", "framed_picture", 6], - ["๐Ÿ—บ", "world_map", 6], - ["๐Ÿ›—", "elevator", 6], - ["๐Ÿชž", "mirror", 6], - ["๐ŸชŸ", "window", 6], - ["๐Ÿช ", "plunger", 6], - ["๐Ÿชค", "mouse_trap", 6], - ["๐Ÿชฃ", "bucket", 6], - ["๐Ÿชฅ", "toothbrush", 6], - ["๐Ÿซง", "bubbles", 6], - ["โ›ฑ", "parasol_on_ground", 6], - ["๐Ÿ—ฟ", "moyai", 6], - ["๐Ÿ›", "shopping", 6], - ["๐Ÿ›’", "shopping_cart", 6], - ["๐ŸŽˆ", "balloon", 6], - ["๐ŸŽ", "flags", 6], - ["๐ŸŽ€", "ribbon", 6], - ["๐ŸŽ", "gift", 6], - ["๐ŸŽŠ", "confetti_ball", 6], - ["๐ŸŽ‰", "tada", 6], - ["๐ŸŽŽ", "dolls", 6], - ["๐Ÿชญ", "folding_hand_fan", 6], - ["๐ŸŽ", "wind_chime", 6], - ["๐ŸŽŒ", "crossed_flags", 6], - ["๐Ÿฎ", "izakaya_lantern", 6], - ["๐Ÿงง", "red_envelope", 6], - ["โœ‰๏ธ", "email", 6], - ["๐Ÿ“ฉ", "envelope_with_arrow", 6], - ["๐Ÿ“จ", "incoming_envelope", 6], - ["๐Ÿ“ง", "e-mail", 6], - ["๐Ÿ’Œ", "love_letter", 6], - ["๐Ÿ“ฎ", "postbox", 6], - ["๐Ÿ“ช", "mailbox_closed", 6], - ["๐Ÿ“ซ", "mailbox", 6], - ["๐Ÿ“ฌ", "mailbox_with_mail", 6], - ["๐Ÿ“ญ", "mailbox_with_no_mail", 6], - ["๐Ÿ“ฆ", "package", 6], - ["๐Ÿ“ฏ", "postal_horn", 6], - ["๐Ÿ“ฅ", "inbox_tray", 6], - ["๐Ÿ“ค", "outbox_tray", 6], - ["๐Ÿ“œ", "scroll", 6], - ["๐Ÿ“ƒ", "page_with_curl", 6], - ["๐Ÿ“‘", "bookmark_tabs", 6], - ["๐Ÿงพ", "receipt", 6], - ["๐Ÿ“Š", "bar_chart", 6], - ["๐Ÿ“ˆ", "chart_with_upwards_trend", 6], - ["๐Ÿ“‰", "chart_with_downwards_trend", 6], - ["๐Ÿ“„", "page_facing_up", 6], - ["๐Ÿ“…", "date", 6], - ["๐Ÿ“†", "calendar", 6], - ["๐Ÿ—“", "spiral_calendar", 6], - ["๐Ÿ“‡", "card_index", 6], - ["๐Ÿ—ƒ", "card_file_box", 6], - ["๐Ÿ—ณ", "ballot_box", 6], - ["๐Ÿ—„", "file_cabinet", 6], - ["๐Ÿ“‹", "clipboard", 6], - ["๐Ÿ—’", "spiral_notepad", 6], - ["๐Ÿ“", "file_folder", 6], - ["๐Ÿ“‚", "open_file_folder", 6], - ["๐Ÿ—‚", "card_index_dividers", 6], - ["๐Ÿ—ž", "newspaper_roll", 6], - ["๐Ÿ“ฐ", "newspaper", 6], - ["๐Ÿ““", "notebook", 6], - ["๐Ÿ“•", "closed_book", 6], - ["๐Ÿ“—", "green_book", 6], - ["๐Ÿ“˜", "blue_book", 6], - ["๐Ÿ“™", "orange_book", 6], - ["๐Ÿ“”", "notebook_with_decorative_cover", 6], - ["๐Ÿ“’", "ledger", 6], - ["๐Ÿ“š", "books", 6], - ["๐Ÿ“–", "open_book", 6], - ["๐Ÿงท", "safety_pin", 6], - ["๐Ÿ”—", "link", 6], - ["๐Ÿ“Ž", "paperclip", 6], - ["๐Ÿ–‡", "paperclips", 6], - ["โœ‚๏ธ", "scissors", 6], - ["๐Ÿ“", "triangular_ruler", 6], - ["๐Ÿ“", "straight_ruler", 6], - ["๐Ÿงฎ", "abacus", 6], - ["๐Ÿ“Œ", "pushpin", 6], - ["๐Ÿ“", "round_pushpin", 6], - ["๐Ÿšฉ", "triangular_flag_on_post", 6], - ["๐Ÿณ", "white_flag", 6], - ["๐Ÿด", "black_flag", 6], - ["๐Ÿณ๏ธโ€๐ŸŒˆ", "rainbow_flag", 6], - ["๐Ÿณ๏ธโ€โšง๏ธ", "transgender_flag", 6], - ["๐Ÿ”", "closed_lock_with_key", 6], - ["๐Ÿ”’", "lock", 6], - ["๐Ÿ”“", "unlock", 6], - ["๐Ÿ”", "lock_with_ink_pen", 6], - ["๐Ÿ–Š", "pen", 6], - ["๐Ÿ–‹", "fountain_pen", 6], - ["โœ’๏ธ", "black_nib", 6], - ["๐Ÿ“", "memo", 6], - ["โœ๏ธ", "pencil2", 6], - ["๐Ÿ–", "crayon", 6], - ["๐Ÿ–Œ", "paintbrush", 6], - ["๐Ÿ”", "mag", 6], - ["๐Ÿ”Ž", "mag_right", 6], - ["๐Ÿชฆ", "headstone", 6], - ["๐Ÿชง", "placard", 6], - ["๐Ÿ’ฏ", "100", 7], - ["๐Ÿ”ข", "1234", 7], - ["๐Ÿฉท", "pink_heart", 7], - ["โค๏ธ", "heart", 7], - ["๐Ÿงก", "orange_heart", 7], - ["๐Ÿ’›", "yellow_heart", 7], - ["๐Ÿ’š", "green_heart", 7], - ["๐Ÿฉต", "light_blue_heart", 7], - ["๐Ÿ’™", "blue_heart", 7], - ["๐Ÿ’œ", "purple_heart", 7], - ["๐ŸคŽ", "brown_heart", 7], - ["๐Ÿ–ค", "black_heart", 7], - ["๐Ÿฉถ", "grey_heart", 7], - ["๐Ÿค", "white_heart", 7], - ["๐Ÿ’”", "broken_heart", 7], - ["โฃ", "heavy_heart_exclamation", 7], - ["๐Ÿ’•", "two_hearts", 7], - ["๐Ÿ’ž", "revolving_hearts", 7], - ["๐Ÿ’“", "heartbeat", 7], - ["๐Ÿ’—", "heartpulse", 7], - ["๐Ÿ’–", "sparkling_heart", 7], - ["๐Ÿ’˜", "cupid", 7], - ["๐Ÿ’", "gift_heart", 7], - ["๐Ÿ’Ÿ", "heart_decoration", 7], - ["โค๏ธโ€๐Ÿ”ฅ", "heart_on_fire", 7], - ["โค๏ธโ€๐Ÿฉน", "mending_heart", 7], - ["โ˜ฎ", "peace_symbol", 7], - ["โœ", "latin_cross", 7], - ["โ˜ช", "star_and_crescent", 7], - ["๐Ÿ•‰", "om", 7], - ["โ˜ธ", "wheel_of_dharma", 7], - ["๐Ÿชฏ", "khanda", 7], - ["โœก", "star_of_david", 7], - ["๐Ÿ”ฏ", "six_pointed_star", 7], - ["๐Ÿ•Ž", "menorah", 7], - ["โ˜ฏ", "yin_yang", 7], - ["โ˜ฆ", "orthodox_cross", 7], - ["๐Ÿ›", "place_of_worship", 7], - ["โ›Ž", "ophiuchus", 7], - ["โ™ˆ", "aries", 7], - ["โ™‰", "taurus", 7], - ["โ™Š", "gemini", 7], - ["โ™‹", "cancer", 7], - ["โ™Œ", "leo", 7], - ["โ™", "virgo", 7], - ["โ™Ž", "libra", 7], - ["โ™", "scorpius", 7], - ["โ™", "sagittarius", 7], - ["โ™‘", "capricorn", 7], - ["โ™’", "aquarius", 7], - ["โ™“", "pisces", 7], - ["๐Ÿ†”", "id", 7], - ["โš›", "atom_symbol", 7], - ["โšง๏ธ", "transgender_symbol", 7], - ["๐Ÿˆณ", "u7a7a", 7], - ["๐Ÿˆน", "u5272", 7], - ["โ˜ข", "radioactive", 7], - ["โ˜ฃ", "biohazard", 7], - ["๐Ÿ“ด", "mobile_phone_off", 7], - ["๐Ÿ“ณ", "vibration_mode", 7], - ["๐Ÿˆถ", "u6709", 7], - ["๐Ÿˆš", "u7121", 7], - ["๐Ÿˆธ", "u7533", 7], - ["๐Ÿˆบ", "u55b6", 7], - ["๐Ÿˆท๏ธ", "u6708", 7], - ["โœด๏ธ", "eight_pointed_black_star", 7], - ["๐Ÿ†š", "vs", 7], - ["๐Ÿ‰‘", "accept", 7], - ["๐Ÿ’ฎ", "white_flower", 7], - ["๐Ÿ‰", "ideograph_advantage", 7], - ["ใŠ™๏ธ", "secret", 7], - ["ใŠ—๏ธ", "congratulations", 7], - ["๐Ÿˆด", "u5408", 7], - ["๐Ÿˆต", "u6e80", 7], - ["๐Ÿˆฒ", "u7981", 7], - ["๐Ÿ…ฐ๏ธ", "a", 7], - ["๐Ÿ…ฑ๏ธ", "b", 7], - ["๐Ÿ†Ž", "ab", 7], - ["๐Ÿ†‘", "cl", 7], - ["๐Ÿ…พ๏ธ", "o2", 7], - ["๐Ÿ†˜", "sos", 7], - ["โ›”", "no_entry", 7], - ["๐Ÿ“›", "name_badge", 7], - ["๐Ÿšซ", "no_entry_sign", 7], - ["โŒ", "x", 7], - ["โญ•", "o", 7], - ["๐Ÿ›‘", "stop_sign", 7], - ["๐Ÿ’ข", "anger", 7], - ["โ™จ๏ธ", "hotsprings", 7], - ["๐Ÿšท", "no_pedestrians", 7], - ["๐Ÿšฏ", "do_not_litter", 7], - ["๐Ÿšณ", "no_bicycles", 7], - ["๐Ÿšฑ", "non-potable_water", 7], - ["๐Ÿ”ž", "underage", 7], - ["๐Ÿ“ต", "no_mobile_phones", 7], - ["โ—", "exclamation", 7], - ["โ•", "grey_exclamation", 7], - ["โ“", "question", 7], - ["โ”", "grey_question", 7], - ["โ€ผ๏ธ", "bangbang", 7], - ["โ‰๏ธ", "interrobang", 7], - ["๐Ÿ”…", "low_brightness", 7], - ["๐Ÿ”†", "high_brightness", 7], - ["๐Ÿ”ฑ", "trident", 7], - ["โšœ", "fleur_de_lis", 7], - ["ใ€ฝ๏ธ", "part_alternation_mark", 7], - ["โš ๏ธ", "warning", 7], - ["๐Ÿšธ", "children_crossing", 7], - ["๐Ÿ”ฐ", "beginner", 7], - ["โ™ป๏ธ", "recycle", 7], - ["๐Ÿˆฏ", "u6307", 7], - ["๐Ÿ’น", "chart", 7], - ["โ‡๏ธ", "sparkle", 7], - ["โœณ๏ธ", "eight_spoked_asterisk", 7], - ["โŽ", "negative_squared_cross_mark", 7], - ["โœ…", "white_check_mark", 7], - ["๐Ÿ’ ", "diamond_shape_with_a_dot_inside", 7], - ["๐ŸŒ€", "cyclone", 7], - ["โžฟ", "loop", 7], - ["๐ŸŒ", "globe_with_meridians", 7], - ["โ“‚๏ธ", "m", 7], - ["๐Ÿง", "atm", 7], - ["๐Ÿˆ‚๏ธ", "sa", 7], - ["๐Ÿ›‚", "passport_control", 7], - ["๐Ÿ›ƒ", "customs", 7], - ["๐Ÿ›„", "baggage_claim", 7], - ["๐Ÿ›…", "left_luggage", 7], - ["๐Ÿ›œ", "wireless", 7], - ["โ™ฟ", "wheelchair", 7], - ["๐Ÿšญ", "no_smoking", 7], - ["๐Ÿšพ", "wc", 7], - ["๐Ÿ…ฟ๏ธ", "parking", 7], - ["๐Ÿšฐ", "potable_water", 7], - ["๐Ÿšน", "mens", 7], - ["๐Ÿšบ", "womens", 7], - ["๐Ÿšผ", "baby_symbol", 7], - ["๐Ÿšป", "restroom", 7], - ["๐Ÿšฎ", "put_litter_in_its_place", 7], - ["๐ŸŽฆ", "cinema", 7], - ["๐Ÿ“ถ", "signal_strength", 7], - ["๐Ÿˆ", "koko", 7], - ["๐Ÿ†–", "ng", 7], - ["๐Ÿ†—", "ok", 7], - ["๐Ÿ†™", "up", 7], - ["๐Ÿ†’", "cool", 7], - ["๐Ÿ†•", "new", 7], - ["๐Ÿ†“", "free", 7], - ["0๏ธโƒฃ", "zero", 7], - ["1๏ธโƒฃ", "one", 7], - ["2๏ธโƒฃ", "two", 7], - ["3๏ธโƒฃ", "three", 7], - ["4๏ธโƒฃ", "four", 7], - ["5๏ธโƒฃ", "five", 7], - ["6๏ธโƒฃ", "six", 7], - ["7๏ธโƒฃ", "seven", 7], - ["8๏ธโƒฃ", "eight", 7], - ["9๏ธโƒฃ", "nine", 7], - ["๐Ÿ”Ÿ", "keycap_ten", 7], - ["*โƒฃ", "asterisk", 7], - ["โ๏ธ", "eject_button", 7], - ["โ–ถ๏ธ", "arrow_forward", 7], - ["โธ", "pause_button", 7], - ["โญ", "next_track_button", 7], - ["โน", "stop_button", 7], - ["โบ", "record_button", 7], - ["โฏ", "play_or_pause_button", 7], - ["โฎ", "previous_track_button", 7], - ["โฉ", "fast_forward", 7], - ["โช", "rewind", 7], - ["๐Ÿ”€", "twisted_rightwards_arrows", 7], - ["๐Ÿ”", "repeat", 7], - ["๐Ÿ”‚", "repeat_one", 7], - ["โ—€๏ธ", "arrow_backward", 7], - ["๐Ÿ”ผ", "arrow_up_small", 7], - ["๐Ÿ”ฝ", "arrow_down_small", 7], - ["โซ", "arrow_double_up", 7], - ["โฌ", "arrow_double_down", 7], - ["โžก๏ธ", "arrow_right", 7], - ["โฌ…๏ธ", "arrow_left", 7], - ["โฌ†๏ธ", "arrow_up", 7], - ["โฌ‡๏ธ", "arrow_down", 7], - ["โ†—๏ธ", "arrow_upper_right", 7], - ["โ†˜๏ธ", "arrow_lower_right", 7], - ["โ†™๏ธ", "arrow_lower_left", 7], - ["โ†–๏ธ", "arrow_upper_left", 7], - ["โ†•๏ธ", "arrow_up_down", 7], - ["โ†”๏ธ", "left_right_arrow", 7], - ["๐Ÿ”„", "arrows_counterclockwise", 7], - ["โ†ช๏ธ", "arrow_right_hook", 7], - ["โ†ฉ๏ธ", "leftwards_arrow_with_hook", 7], - ["โคด๏ธ", "arrow_heading_up", 7], - ["โคต๏ธ", "arrow_heading_down", 7], - ["#๏ธโƒฃ", "hash", 7], - ["โ„น๏ธ", "information_source", 7], - ["๐Ÿ”ค", "abc", 7], - ["๐Ÿ”ก", "abcd", 7], - ["๐Ÿ” ", "capital_abcd", 7], - ["๐Ÿ”ฃ", "symbols", 7], - ["๐ŸŽต", "musical_note", 7], - ["๐ŸŽถ", "notes", 7], - ["ใ€ฐ๏ธ", "wavy_dash", 7], - ["โžฐ", "curly_loop", 7], - ["โœ”๏ธ", "heavy_check_mark", 7], - ["๐Ÿ”ƒ", "arrows_clockwise", 7], - ["โž•", "heavy_plus_sign", 7], - ["โž–", "heavy_minus_sign", 7], - ["โž—", "heavy_division_sign", 7], - ["โœ–๏ธ", "heavy_multiplication_x", 7], - ["๐ŸŸฐ", "heavy_equals_sign", 7], - ["โ™พ", "infinity", 7], - ["๐Ÿ’ฒ", "heavy_dollar_sign", 7], - ["๐Ÿ’ฑ", "currency_exchange", 7], - ["ยฉ๏ธ", "copyright", 7], - ["ยฎ๏ธ", "registered", 7], - ["โ„ข๏ธ", "tm", 7], - ["๐Ÿ”š", "end", 7], - ["๐Ÿ”™", "back", 7], - ["๐Ÿ”›", "on", 7], - ["๐Ÿ”", "top", 7], - ["๐Ÿ”œ", "soon", 7], - ["โ˜‘๏ธ", "ballot_box_with_check", 7], - ["๐Ÿ”˜", "radio_button", 7], - ["โšซ", "black_circle", 7], - ["โšช", "white_circle", 7], - ["๐Ÿ”ด", "red_circle", 7], - ["๐ŸŸ ", "orange_circle", 7], - ["๐ŸŸก", "yellow_circle", 7], - ["๐ŸŸข", "green_circle", 7], - ["๐Ÿ”ต", "large_blue_circle", 7], - ["๐ŸŸฃ", "purple_circle", 7], - ["๐ŸŸค", "brown_circle", 7], - ["๐Ÿ”ธ", "small_orange_diamond", 7], - ["๐Ÿ”น", "small_blue_diamond", 7], - ["๐Ÿ”ถ", "large_orange_diamond", 7], - ["๐Ÿ”ท", "large_blue_diamond", 7], - ["๐Ÿ”บ", "small_red_triangle", 7], - ["โ–ช๏ธ", "black_small_square", 7], - ["โ–ซ๏ธ", "white_small_square", 7], - ["โฌ›", "black_large_square", 7], - ["โฌœ", "white_large_square", 7], - ["๐ŸŸฅ", "red_square", 7], - ["๐ŸŸง", "orange_square", 7], - ["๐ŸŸจ", "yellow_square", 7], - ["๐ŸŸฉ", "green_square", 7], - ["๐ŸŸฆ", "blue_square", 7], - ["๐ŸŸช", "purple_square", 7], - ["๐ŸŸซ", "brown_square", 7], - ["๐Ÿ”ป", "small_red_triangle_down", 7], - ["โ—ผ๏ธ", "black_medium_square", 7], - ["โ—ป๏ธ", "white_medium_square", 7], - ["โ—พ", "black_medium_small_square", 7], - ["โ—ฝ", "white_medium_small_square", 7], - ["๐Ÿ”ฒ", "black_square_button", 7], - ["๐Ÿ”ณ", "white_square_button", 7], - ["๐Ÿ”ˆ", "speaker", 7], - ["๐Ÿ”‰", "sound", 7], - ["๐Ÿ”Š", "loud_sound", 7], - ["๐Ÿ”‡", "mute", 7], - ["๐Ÿ“ฃ", "mega", 7], - ["๐Ÿ“ข", "loudspeaker", 7], - ["๐Ÿ””", "bell", 7], - ["๐Ÿ”•", "no_bell", 7], - ["๐Ÿƒ", "black_joker", 7], - ["๐Ÿ€„", "mahjong", 7], - ["โ™ ๏ธ", "spades", 7], - ["โ™ฃ๏ธ", "clubs", 7], - ["โ™ฅ๏ธ", "hearts", 7], - ["โ™ฆ๏ธ", "diamonds", 7], - ["๐ŸŽด", "flower_playing_cards", 7], - ["๐Ÿ’ญ", "thought_balloon", 7], - ["๐Ÿ—ฏ", "right_anger_bubble", 7], - ["๐Ÿ’ฌ", "speech_balloon", 7], - ["๐Ÿ—จ", "left_speech_bubble", 7], - ["๐Ÿ•", "clock1", 7], - ["๐Ÿ•‘", "clock2", 7], - ["๐Ÿ•’", "clock3", 7], - ["๐Ÿ•“", "clock4", 7], - ["๐Ÿ•”", "clock5", 7], - ["๐Ÿ••", "clock6", 7], - ["๐Ÿ•–", "clock7", 7], - ["๐Ÿ•—", "clock8", 7], - ["๐Ÿ•˜", "clock9", 7], - ["๐Ÿ•™", "clock10", 7], - ["๐Ÿ•š", "clock11", 7], - ["๐Ÿ•›", "clock12", 7], - ["๐Ÿ•œ", "clock130", 7], - ["๐Ÿ•", "clock230", 7], - ["๐Ÿ•ž", "clock330", 7], - ["๐Ÿ•Ÿ", "clock430", 7], - ["๐Ÿ• ", "clock530", 7], - ["๐Ÿ•ก", "clock630", 7], - ["๐Ÿ•ข", "clock730", 7], - ["๐Ÿ•ฃ", "clock830", 7], - ["๐Ÿ•ค", "clock930", 7], - ["๐Ÿ•ฅ", "clock1030", 7], - ["๐Ÿ•ฆ", "clock1130", 7], - ["๐Ÿ•ง", "clock1230", 7], - ["๐Ÿ‡ฆ๐Ÿ‡ซ", "afghanistan", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฝ", "aland_islands", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฑ", "albania", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฟ", "algeria", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ธ", "american_samoa", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฉ", "andorra", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ด", "angola", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฎ", "anguilla", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ถ", "antarctica", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฌ", "antigua_barbuda", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ท", "argentina", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฒ", "armenia", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ผ", "aruba", 8], - ["๐Ÿ‡ฆ๐Ÿ‡จ", "ascension_island", 8], - ["๐Ÿ‡ฆ๐Ÿ‡บ", "australia", 8], - ["๐Ÿ‡ฆ๐Ÿ‡น", "austria", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฟ", "azerbaijan", 8], - ["๐Ÿ‡ง๐Ÿ‡ธ", "bahamas", 8], - ["๐Ÿ‡ง๐Ÿ‡ญ", "bahrain", 8], - ["๐Ÿ‡ง๐Ÿ‡ฉ", "bangladesh", 8], - ["๐Ÿ‡ง๐Ÿ‡ง", "barbados", 8], - ["๐Ÿ‡ง๐Ÿ‡พ", "belarus", 8], - ["๐Ÿ‡ง๐Ÿ‡ช", "belgium", 8], - ["๐Ÿ‡ง๐Ÿ‡ฟ", "belize", 8], - ["๐Ÿ‡ง๐Ÿ‡ฏ", "benin", 8], - ["๐Ÿ‡ง๐Ÿ‡ฒ", "bermuda", 8], - ["๐Ÿ‡ง๐Ÿ‡น", "bhutan", 8], - ["๐Ÿ‡ง๐Ÿ‡ด", "bolivia", 8], - ["๐Ÿ‡ง๐Ÿ‡ถ", "caribbean_netherlands", 8], - ["๐Ÿ‡ง๐Ÿ‡ฆ", "bosnia_herzegovina", 8], - ["๐Ÿ‡ง๐Ÿ‡ผ", "botswana", 8], - ["๐Ÿ‡ง๐Ÿ‡ท", "brazil", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ด", "british_indian_ocean_territory", 8], - ["๐Ÿ‡ป๐Ÿ‡ฌ", "british_virgin_islands", 8], - ["๐Ÿ‡ง๐Ÿ‡ณ", "brunei", 8], - ["๐Ÿ‡ง๐Ÿ‡ฌ", "bulgaria", 8], - ["๐Ÿ‡ง๐Ÿ‡ซ", "burkina_faso", 8], - ["๐Ÿ‡ง๐Ÿ‡ฎ", "burundi", 8], - ["๐Ÿ‡จ๐Ÿ‡ป", "cape_verde", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ญ", "cambodia", 8], - ["๐Ÿ‡จ๐Ÿ‡ฒ", "cameroon", 8], - ["๐Ÿ‡จ๐Ÿ‡ฆ", "canada", 8], - ["๐Ÿ‡ฎ๐Ÿ‡จ", "canary_islands", 8], - ["๐Ÿ‡ฐ๐Ÿ‡พ", "cayman_islands", 8], - ["๐Ÿ‡จ๐Ÿ‡ซ", "central_african_republic", 8], - ["๐Ÿ‡น๐Ÿ‡ฉ", "chad", 8], - ["๐Ÿ‡จ๐Ÿ‡ฑ", "chile", 8], - ["๐Ÿ‡จ๐Ÿ‡ณ", "cn", 8], - ["๐Ÿ‡จ๐Ÿ‡ฝ", "christmas_island", 8], - ["๐Ÿ‡จ๐Ÿ‡จ", "cocos_islands", 8], - ["๐Ÿ‡จ๐Ÿ‡ด", "colombia", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฒ", "comoros", 8], - ["๐Ÿ‡จ๐Ÿ‡ฌ", "congo_brazzaville", 8], - ["๐Ÿ‡จ๐Ÿ‡ฉ", "congo_kinshasa", 8], - ["๐Ÿ‡จ๐Ÿ‡ฐ", "cook_islands", 8], - ["๐Ÿ‡จ๐Ÿ‡ท", "costa_rica", 8], - ["๐Ÿ‡ญ๐Ÿ‡ท", "croatia", 8], - ["๐Ÿ‡จ๐Ÿ‡บ", "cuba", 8], - ["๐Ÿ‡จ๐Ÿ‡ผ", "curacao", 8], - ["๐Ÿ‡จ๐Ÿ‡พ", "cyprus", 8], - ["๐Ÿ‡จ๐Ÿ‡ฟ", "czech_republic", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฐ", "denmark", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฏ", "djibouti", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฒ", "dominica", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ด", "dominican_republic", 8], - ["๐Ÿ‡ช๐Ÿ‡จ", "ecuador", 8], - ["๐Ÿ‡ช๐Ÿ‡ฌ", "egypt", 8], - ["๐Ÿ‡ธ๐Ÿ‡ป", "el_salvador", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ถ", "equatorial_guinea", 8], - ["๐Ÿ‡ช๐Ÿ‡ท", "eritrea", 8], - ["๐Ÿ‡ช๐Ÿ‡ช", "estonia", 8], - ["๐Ÿ‡ช๐Ÿ‡น", "ethiopia", 8], - ["๐Ÿ‡ช๐Ÿ‡บ", "eu", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฐ", "falkland_islands", 8], - ["๐Ÿ‡ซ๐Ÿ‡ด", "faroe_islands", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฏ", "fiji", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฎ", "finland", 8], - ["๐Ÿ‡ซ๐Ÿ‡ท", "fr", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ซ", "french_guiana", 8], - ["๐Ÿ‡ต๐Ÿ‡ซ", "french_polynesia", 8], - ["๐Ÿ‡น๐Ÿ‡ซ", "french_southern_territories", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฆ", "gabon", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฒ", "gambia", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ช", "georgia", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ช", "de", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ญ", "ghana", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฎ", "gibraltar", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ท", "greece", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฑ", "greenland", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฉ", "grenada", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ต", "guadeloupe", 8], - ["๐Ÿ‡ฌ๐Ÿ‡บ", "guam", 8], - ["๐Ÿ‡ฌ๐Ÿ‡น", "guatemala", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฌ", "guernsey", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ณ", "guinea", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ผ", "guinea_bissau", 8], - ["๐Ÿ‡ฌ๐Ÿ‡พ", "guyana", 8], - ["๐Ÿ‡ญ๐Ÿ‡น", "haiti", 8], - ["๐Ÿ‡ญ๐Ÿ‡ณ", "honduras", 8], - ["๐Ÿ‡ญ๐Ÿ‡ฐ", "hong_kong", 8], - ["๐Ÿ‡ญ๐Ÿ‡บ", "hungary", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ธ", "iceland", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ณ", "india", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ฉ", "indonesia", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ท", "iran", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ถ", "iraq", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ช", "ireland", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ฒ", "isle_of_man", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ฑ", "israel", 8], - ["๐Ÿ‡ฎ๐Ÿ‡น", "it", 8], - ["๐Ÿ‡จ๐Ÿ‡ฎ", "cote_divoire", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ฒ", "jamaica", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ต", "jp", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ช", "jersey", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ด", "jordan", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฟ", "kazakhstan", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ช", "kenya", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฎ", "kiribati", 8], - ["๐Ÿ‡ฝ๐Ÿ‡ฐ", "kosovo", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ผ", "kuwait", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฌ", "kyrgyzstan", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ฆ", "laos", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ป", "latvia", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ง", "lebanon", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ธ", "lesotho", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ท", "liberia", 8], - ["๐Ÿ‡ฑ๐Ÿ‡พ", "libya", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ฎ", "liechtenstein", 8], - ["๐Ÿ‡ฑ๐Ÿ‡น", "lithuania", 8], - ["๐Ÿ‡ฑ๐Ÿ‡บ", "luxembourg", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ด", "macau", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฐ", "macedonia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฌ", "madagascar", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ผ", "malawi", 8], - ["๐Ÿ‡ฒ๐Ÿ‡พ", "malaysia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ป", "maldives", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฑ", "mali", 8], - ["๐Ÿ‡ฒ๐Ÿ‡น", "malta", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ญ", "marshall_islands", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ถ", "martinique", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ท", "mauritania", 8], - ["๐Ÿ‡ฒ๐Ÿ‡บ", "mauritius", 8], - ["๐Ÿ‡พ๐Ÿ‡น", "mayotte", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฝ", "mexico", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฒ", "micronesia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฉ", "moldova", 8], - ["๐Ÿ‡ฒ๐Ÿ‡จ", "monaco", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ณ", "mongolia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ช", "montenegro", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ธ", "montserrat", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฆ", "morocco", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฟ", "mozambique", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฒ", "myanmar", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฆ", "namibia", 8], - ["๐Ÿ‡ณ๐Ÿ‡ท", "nauru", 8], - ["๐Ÿ‡ณ๐Ÿ‡ต", "nepal", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฑ", "netherlands", 8], - ["๐Ÿ‡ณ๐Ÿ‡จ", "new_caledonia", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฟ", "new_zealand", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฎ", "nicaragua", 8], - ["๐Ÿ‡ณ๐Ÿ‡ช", "niger", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฌ", "nigeria", 8], - ["๐Ÿ‡ณ๐Ÿ‡บ", "niue", 8], - ["๐Ÿ‡ณ๐Ÿ‡ซ", "norfolk_island", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ต", "northern_mariana_islands", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ต", "north_korea", 8], - ["๐Ÿ‡ณ๐Ÿ‡ด", "norway", 8], - ["๐Ÿ‡ด๐Ÿ‡ฒ", "oman", 8], - ["๐Ÿ‡ต๐Ÿ‡ฐ", "pakistan", 8], - ["๐Ÿ‡ต๐Ÿ‡ผ", "palau", 8], - ["๐Ÿ‡ต๐Ÿ‡ธ", "palestinian_territories", 8], - ["๐Ÿ‡ต๐Ÿ‡ฆ", "panama", 8], - ["๐Ÿ‡ต๐Ÿ‡ฌ", "papua_new_guinea", 8], - ["๐Ÿ‡ต๐Ÿ‡พ", "paraguay", 8], - ["๐Ÿ‡ต๐Ÿ‡ช", "peru", 8], - ["๐Ÿ‡ต๐Ÿ‡ญ", "philippines", 8], - ["๐Ÿ‡ต๐Ÿ‡ณ", "pitcairn_islands", 8], - ["๐Ÿ‡ต๐Ÿ‡ฑ", "poland", 8], - ["๐Ÿ‡ต๐Ÿ‡น", "portugal", 8], - ["๐Ÿ‡ต๐Ÿ‡ท", "puerto_rico", 8], - ["๐Ÿ‡ถ๐Ÿ‡ฆ", "qatar", 8], - ["๐Ÿ‡ท๐Ÿ‡ช", "reunion", 8], - ["๐Ÿ‡ท๐Ÿ‡ด", "romania", 8], - ["๐Ÿ‡ท๐Ÿ‡บ", "ru", 8], - ["๐Ÿ‡ท๐Ÿ‡ผ", "rwanda", 8], - ["๐Ÿ‡ง๐Ÿ‡ฑ", "st_barthelemy", 8], - ["๐Ÿ‡ธ๐Ÿ‡ญ", "st_helena", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ณ", "st_kitts_nevis", 8], - ["๐Ÿ‡ฑ๐Ÿ‡จ", "st_lucia", 8], - ["๐Ÿ‡ต๐Ÿ‡ฒ", "st_pierre_miquelon", 8], - ["๐Ÿ‡ป๐Ÿ‡จ", "st_vincent_grenadines", 8], - ["๐Ÿ‡ผ๐Ÿ‡ธ", "samoa", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฒ", "san_marino", 8], - ["๐Ÿ‡ธ๐Ÿ‡น", "sao_tome_principe", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฆ", "saudi_arabia", 8], - ["๐Ÿ‡ธ๐Ÿ‡ณ", "senegal", 8], - ["๐Ÿ‡ท๐Ÿ‡ธ", "serbia", 8], - ["๐Ÿ‡ธ๐Ÿ‡จ", "seychelles", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฑ", "sierra_leone", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฌ", "singapore", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฝ", "sint_maarten", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฐ", "slovakia", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฎ", "slovenia", 8], - ["๐Ÿ‡ธ๐Ÿ‡ง", "solomon_islands", 8], - ["๐Ÿ‡ธ๐Ÿ‡ด", "somalia", 8], - ["๐Ÿ‡ฟ๐Ÿ‡ฆ", "south_africa", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ธ", "south_georgia_south_sandwich_islands", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ท", "kr", 8], - ["๐Ÿ‡ธ๐Ÿ‡ธ", "south_sudan", 8], - ["๐Ÿ‡ช๐Ÿ‡ธ", "es", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ฐ", "sri_lanka", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฉ", "sudan", 8], - ["๐Ÿ‡ธ๐Ÿ‡ท", "suriname", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฟ", "swaziland", 8], - ["๐Ÿ‡ธ๐Ÿ‡ช", "sweden", 8], - ["๐Ÿ‡จ๐Ÿ‡ญ", "switzerland", 8], - ["๐Ÿ‡ธ๐Ÿ‡พ", "syria", 8], - ["๐Ÿ‡น๐Ÿ‡ผ", "taiwan", 8], - ["๐Ÿ‡น๐Ÿ‡ฏ", "tajikistan", 8], - ["๐Ÿ‡น๐Ÿ‡ฟ", "tanzania", 8], - ["๐Ÿ‡น๐Ÿ‡ญ", "thailand", 8], - ["๐Ÿ‡น๐Ÿ‡ฑ", "timor_leste", 8], - ["๐Ÿ‡น๐Ÿ‡ฌ", "togo", 8], - ["๐Ÿ‡น๐Ÿ‡ฐ", "tokelau", 8], - ["๐Ÿ‡น๐Ÿ‡ด", "tonga", 8], - ["๐Ÿ‡น๐Ÿ‡น", "trinidad_tobago", 8], - ["๐Ÿ‡น๐Ÿ‡ฆ", "tristan_da_cunha", 8], - ["๐Ÿ‡น๐Ÿ‡ณ", "tunisia", 8], - ["๐Ÿ‡น๐Ÿ‡ท", "tr", 8], - ["๐Ÿ‡น๐Ÿ‡ฒ", "turkmenistan", 8], - ["๐Ÿ‡น๐Ÿ‡จ", "turks_caicos_islands", 8], - ["๐Ÿ‡น๐Ÿ‡ป", "tuvalu", 8], - ["๐Ÿ‡บ๐Ÿ‡ฌ", "uganda", 8], - ["๐Ÿ‡บ๐Ÿ‡ฆ", "ukraine", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ช", "united_arab_emirates", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ง", "uk", 8], - ["๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ", "england", 8], - ["๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ", "scotland", 8], - ["๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ", "wales", 8], - ["๐Ÿ‡บ๐Ÿ‡ธ", "us", 8], - ["๐Ÿ‡ป๐Ÿ‡ฎ", "us_virgin_islands", 8], - ["๐Ÿ‡บ๐Ÿ‡พ", "uruguay", 8], - ["๐Ÿ‡บ๐Ÿ‡ฟ", "uzbekistan", 8], - ["๐Ÿ‡ป๐Ÿ‡บ", "vanuatu", 8], - ["๐Ÿ‡ป๐Ÿ‡ฆ", "vatican_city", 8], - ["๐Ÿ‡ป๐Ÿ‡ช", "venezuela", 8], - ["๐Ÿ‡ป๐Ÿ‡ณ", "vietnam", 8], - ["๐Ÿ‡ผ๐Ÿ‡ซ", "wallis_futuna", 8], - ["๐Ÿ‡ช๐Ÿ‡ญ", "western_sahara", 8], - ["๐Ÿ‡พ๐Ÿ‡ช", "yemen", 8], - ["๐Ÿ‡ฟ๐Ÿ‡ฒ", "zambia", 8], - ["๐Ÿ‡ฟ๐Ÿ‡ผ", "zimbabwe", 8], - ["๐Ÿ‡บ๐Ÿ‡ณ", "united_nations", 8], - ["๐Ÿดโ€โ˜ ๏ธ", "pirate_flag", 8] -] diff --git a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.d.ts b/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.d.ts deleted file mode 100644 index f4cea3e5f7..0000000000 --- a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function extractAvgColorFromBlurhash(hash: string): string | undefined; -//# sourceMappingURL=extract-avg-color-from-blurhash.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.d.ts.map b/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.d.ts.map deleted file mode 100644 index 1c5665fc92..0000000000 --- a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extract-avg-color-from-blurhash.d.ts","sourceRoot":"","sources":["../js/extract-avg-color-from-blurhash.ts"],"names":[],"mappings":"AAKA,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,sBAQvD"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.js b/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.js deleted file mode 100644 index f7a6437c2d..0000000000 --- a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.js +++ /dev/null @@ -1,7 +0,0 @@ -function extractAvgColorFromBlurhash(hash) { - return typeof hash === "string" ? "#" + [...hash.slice(2, 6)].map((x) => "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".indexOf(x)).reduce((a, c) => a * 83 + c, 0).toString(16).padStart(6, "0") : void 0; -} -export { - extractAvgColorFromBlurhash -}; -//# sourceMappingURL=extract-avg-color-from-blurhash.js.map diff --git a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.js.map b/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.js.map deleted file mode 100644 index 2160b2c7f0..0000000000 --- a/packages/frontend-shared/js-built/extract-avg-color-from-blurhash.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/extract-avg-color-from-blurhash.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nexport function extractAvgColorFromBlurhash(hash: string) {\n\treturn typeof hash === 'string'\n\t\t? '#' + [...hash.slice(2, 6)]\n\t\t\t.map(x => '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~'.indexOf(x))\n\t\t\t.reduce((a, c) => a * 83 + c, 0)\n\t\t\t.toString(16)\n\t\t\t.padStart(6, '0')\n\t\t: undefined;\n}\n"], - "mappings": "AAKO,SAAS,4BAA4B,MAAc;AACzD,SAAO,OAAO,SAAS,WACpB,MAAM,CAAC,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC,EAC1B,IAAI,OAAK,sFAAsF,QAAQ,CAAC,CAAC,EACzG,OAAO,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,EAC9B,SAAS,EAAE,EACX,SAAS,GAAG,GAAG,IACf;AACJ;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/i18n.d.ts b/packages/frontend-shared/js-built/i18n.d.ts deleted file mode 100644 index 7589bac48c..0000000000 --- a/packages/frontend-shared/js-built/i18n.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { ILocale, ParameterizedString } from '../../../locales/index.js'; -type FlattenKeys = keyof { - [K in keyof T as T[K] extends ILocale ? FlattenKeys extends infer C extends string ? `${K & string}.${C}` : never : T[K] extends TPrediction ? K : never]: T[K]; -}; -type ParametersOf> = TKey extends `${infer K}.${infer C}` ? ParametersOf : TKey extends keyof T ? T[TKey] extends ParameterizedString ? P : never : never; -type Tsx = { - readonly [K in keyof T as T[K] extends string ? never : K]: T[K] extends ParameterizedString ? (arg: { - readonly [_ in P]: string | number; - }) => string : Tsx; -}; -export declare class I18n { - locale: T; - private tsxCache?; - private devMode; - constructor(locale: T, devMode?: boolean); - get ts(): T; - get tsx(): Tsx; - t>(key: TKey): string; - t>(key: TKey, args: { - readonly [_ in ParametersOf]: string | number; - }): string; -} -export {}; -//# sourceMappingURL=i18n.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/i18n.d.ts.map b/packages/frontend-shared/js-built/i18n.d.ts.map deleted file mode 100644 index da50383ab8..0000000000 --- a/packages/frontend-shared/js-built/i18n.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../js/i18n.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAK9E,KAAK,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,IAAI,MAAM;KACvD,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,GAClC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM,GAC5D,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,GACpB,KAAK,GACN,CAAC,CAAC,CAAC,CAAC,SAAS,WAAW,GACvB,CAAC,GACD,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAChB,CAAC;AAEF,KAAK,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,SAAS,WAAW,CAAC,CAAC,EAAE,mBAAmB,CAAC,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GAE1H,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACrB,IAAI,SAAS,MAAM,CAAC,GACnB,CAAC,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAC3C,CAAC,GACD,KAAK,GACN,KAAK,CAAC;AAEV,KAAK,GAAG,CAAC,CAAC,SAAS,OAAO,IAAI;IAC7B,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAClG,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM;KAAE,KAAK,MAAM,GAEvD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACZ,CAAC;AAEF,qBAAa,IAAI,CAAC,CAAC,SAAS,OAAO;IAIf,MAAM,EAAE,CAAC;IAH5B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAU;gBAEN,MAAM,EAAE,CAAC,EAAE,OAAO,UAAQ;IAQ7C,IAAW,EAAE,IAAI,CAAC,CA8BjB;IAED,IAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CA2HvB;IAKM,CAAC,CAAC,IAAI,SAAS,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM;IAIzD,CAAC,CAAC,IAAI,SAAS,WAAW,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM;KAAE,GAAG,MAAM;CAuC/I"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/i18n.js b/packages/frontend-shared/js-built/i18n.js deleted file mode 100644 index 6ab28da9fb..0000000000 --- a/packages/frontend-shared/js-built/i18n.js +++ /dev/null @@ -1,156 +0,0 @@ -class I18n { - constructor(locale, devMode = false) { - this.locale = locale; - this.devMode = devMode; - this.t = this.t.bind(this); - } - tsxCache; - devMode; - get ts() { - if (this.devMode) { - class Handler { - get(target, p) { - const value = target[p]; - if (typeof value === "object") { - return new Proxy(value, new Handler()); - } - if (typeof value === "string") { - const parameters = Array.from(value.matchAll(/\{(\w+)\}/g), ([, parameter]) => parameter); - if (parameters.length) { - console.error(`Missing locale parameters: ${parameters.join(", ")} at ${String(p)}`); - } - return value; - } - console.error(`Unexpected locale key: ${String(p)}`); - return p; - } - } - return new Proxy(this.locale, new Handler()); - } - return this.locale; - } - get tsx() { - if (this.devMode) { - if (this.tsxCache) { - return this.tsxCache; - } - class Handler { - get(target, p) { - const value = target[p]; - if (typeof value === "object") { - return new Proxy(value, new Handler()); - } - if (typeof value === "string") { - const quasis = []; - const expressions = []; - let cursor = 0; - while (~cursor) { - const start = value.indexOf("{", cursor); - if (!~start) { - quasis.push(value.slice(cursor)); - break; - } - quasis.push(value.slice(cursor, start)); - const end = value.indexOf("}", start); - expressions.push(value.slice(start + 1, end)); - cursor = end + 1; - } - if (!expressions.length) { - console.error(`Unexpected locale key: ${String(p)}`); - return () => value; - } - return (arg) => { - let str = quasis[0]; - for (let i = 0; i < expressions.length; i++) { - if (!Object.hasOwn(arg, expressions[i])) { - console.error(`Missing locale parameters: ${expressions[i]} at ${String(p)}`); - } - str += arg[expressions[i]] + quasis[i + 1]; - } - return str; - }; - } - console.error(`Unexpected locale key: ${String(p)}`); - return p; - } - } - return this.tsxCache = new Proxy(this.locale, new Handler()); - } - if (this.tsxCache) { - return this.tsxCache; - } - function build(target) { - const result = {}; - for (const k in target) { - if (!Object.hasOwn(target, k)) { - continue; - } - const value = target[k]; - if (typeof value === "object") { - result[k] = build(value); - } else if (typeof value === "string") { - const quasis = []; - const expressions = []; - let cursor = 0; - while (~cursor) { - const start = value.indexOf("{", cursor); - if (!~start) { - quasis.push(value.slice(cursor)); - break; - } - quasis.push(value.slice(cursor, start)); - const end = value.indexOf("}", start); - expressions.push(value.slice(start + 1, end)); - cursor = end + 1; - } - if (!expressions.length) { - continue; - } - result[k] = (arg) => { - let str = quasis[0]; - for (let i = 0; i < expressions.length; i++) { - str += arg[expressions[i]] + quasis[i + 1]; - } - return str; - }; - } - } - return result; - } - return this.tsxCache = build(this.locale); - } - t(key, args) { - let str = this.locale; - for (const k of key.split(".")) { - str = str[k]; - if (this.devMode) { - if (typeof str === "undefined") { - console.error(`Unexpected locale key: ${key}`); - return key; - } - } - } - if (args) { - if (this.devMode) { - const missing = Array.from(str.matchAll(/\{(\w+)\}/g), ([, parameter]) => parameter).filter((parameter) => !Object.hasOwn(args, parameter)); - if (missing.length) { - console.error(`Missing locale parameters: ${missing.join(", ")} at ${key}`); - } - } - for (const [k, v] of Object.entries(args)) { - const search = `{${k}}`; - if (this.devMode) { - if (!str.includes(search)) { - console.error(`Unexpected locale parameter: ${k} at ${key}`); - } - } - str = str.replace(search, v.toString()); - } - } - return str; - } -} -export { - I18n -}; -//# sourceMappingURL=i18n.js.map diff --git a/packages/frontend-shared/js-built/i18n.js.map b/packages/frontend-shared/js-built/i18n.js.map deleted file mode 100644 index 3e877da1a0..0000000000 --- a/packages/frontend-shared/js-built/i18n.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/i18n.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\nimport type { ILocale, ParameterizedString } from '../../../locales/index.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype TODO = any;\n\ntype FlattenKeys = keyof {\n\t[K in keyof T as T[K] extends ILocale\n\t\t? FlattenKeys extends infer C extends string\n\t\t\t? `${K & string}.${C}`\n\t\t\t: never\n\t\t: T[K] extends TPrediction\n\t\t\t? K\n\t\t\t: never]: T[K];\n};\n\ntype ParametersOf> = TKey extends `${infer K}.${infer C}`\n\t// @ts-expect-error -- C \u306F\u660E\u3089\u304B\u306B FlattenKeys \u306B\u306A\u308B\u304C\u3001\u578B\u30B7\u30B9\u30C6\u30E0\u306F\u3053\u3053\u3067\u306F TKey \u304C\u30C9\u30C3\u30C8\u533A\u5207\u308A\u3067\u3042\u308B\u3053\u3068\u306E\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u6301\u305F\u306A\u3044\u306E\u3067\u3001\u578B\u30B7\u30B9\u30C6\u30E0\u306B\u5408\u6CD5\u306B\u3066\u793A\u3059\u3053\u3068\u306F\u3067\u304D\u306A\u3044\u3002\n\t? ParametersOf\n\t: TKey extends keyof T\n\t\t? T[TKey] extends ParameterizedString\n\t\t\t? P\n\t\t\t: never\n\t\t: never;\n\ntype Tsx = {\n\treadonly [K in keyof T as T[K] extends string ? never : K]: T[K] extends ParameterizedString\n\t\t? (arg: { readonly [_ in P]: string | number }) => string\n\t\t// @ts-expect-error -- \u8A3C\u660E\u7701\u7565\n\t\t: Tsx;\n};\n\nexport class I18n {\n\tprivate tsxCache?: Tsx;\n\tprivate devMode: boolean;\n\n\tconstructor(public locale: T, devMode = false) {\n\t\tthis.devMode = devMode;\n\n\t\t//#region BIND\n\t\tthis.t = this.t.bind(this);\n\t\t//#endregion\n\t}\n\n\tpublic get ts(): T {\n\t\tif (this.devMode) {\n\t\t\tclass Handler implements ProxyHandler {\n\t\t\t\tget(target: TTarget, p: string | symbol): unknown {\n\t\t\t\t\tconst value = target[p as keyof TTarget];\n\n\t\t\t\t\tif (typeof value === 'object') {\n\t\t\t\t\t\treturn new Proxy(value, new Handler());\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\tconst parameters = Array.from(value.matchAll(/\\{(\\w+)\\}/g), ([, parameter]) => parameter);\n\n\t\t\t\t\t\tif (parameters.length) {\n\t\t\t\t\t\t\tconsole.error(`Missing locale parameters: ${parameters.join(', ')} at ${String(p)}`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.error(`Unexpected locale key: ${String(p)}`);\n\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new Proxy(this.locale, new Handler());\n\t\t}\n\n\t\treturn this.locale;\n\t}\n\n\tpublic get tsx(): Tsx {\n\t\tif (this.devMode) {\n\t\t\tif (this.tsxCache) {\n\t\t\t\treturn this.tsxCache;\n\t\t\t}\n\n\t\t\tclass Handler implements ProxyHandler {\n\t\t\t\tget(target: TTarget, p: string | symbol): unknown {\n\t\t\t\t\tconst value = target[p as keyof TTarget];\n\n\t\t\t\t\tif (typeof value === 'object') {\n\t\t\t\t\t\treturn new Proxy(value, new Handler());\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\tconst quasis: string[] = [];\n\t\t\t\t\t\tconst expressions: string[] = [];\n\t\t\t\t\t\tlet cursor = 0;\n\n\t\t\t\t\t\twhile (~cursor) {\n\t\t\t\t\t\t\tconst start = value.indexOf('{', cursor);\n\n\t\t\t\t\t\t\tif (!~start) {\n\t\t\t\t\t\t\t\tquasis.push(value.slice(cursor));\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tquasis.push(value.slice(cursor, start));\n\n\t\t\t\t\t\t\tconst end = value.indexOf('}', start);\n\n\t\t\t\t\t\t\texpressions.push(value.slice(start + 1, end));\n\n\t\t\t\t\t\t\tcursor = end + 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!expressions.length) {\n\t\t\t\t\t\t\tconsole.error(`Unexpected locale key: ${String(p)}`);\n\n\t\t\t\t\t\t\treturn () => value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (arg: TODO) => {\n\t\t\t\t\t\t\tlet str = quasis[0];\n\n\t\t\t\t\t\t\tfor (let i = 0; i < expressions.length; i++) {\n\t\t\t\t\t\t\t\tif (!Object.hasOwn(arg, expressions[i])) {\n\t\t\t\t\t\t\t\t\tconsole.error(`Missing locale parameters: ${expressions[i]} at ${String(p)}`);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstr += arg[expressions[i]] + quasis[i + 1];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn str;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.error(`Unexpected locale key: ${String(p)}`);\n\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.tsxCache = new Proxy(this.locale, new Handler()) as unknown as Tsx;\n\t\t}\n\n\t\tif (this.tsxCache) {\n\t\t\treturn this.tsxCache;\n\t\t}\n\n\t\tfunction build(target: ILocale): Tsx {\n\t\t\tconst result = {} as Tsx;\n\n\t\t\tfor (const k in target) {\n\t\t\t\tif (!Object.hasOwn(target, k)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst value = target[k as keyof typeof target];\n\n\t\t\t\tif (typeof value === 'object') {\n\t\t\t\t\t(result as TODO)[k] = build(value as ILocale);\n\t\t\t\t} else if (typeof value === 'string') {\n\t\t\t\t\tconst quasis: string[] = [];\n\t\t\t\t\tconst expressions: string[] = [];\n\t\t\t\t\tlet cursor = 0;\n\n\t\t\t\t\twhile (~cursor) {\n\t\t\t\t\t\tconst start = value.indexOf('{', cursor);\n\n\t\t\t\t\t\tif (!~start) {\n\t\t\t\t\t\t\tquasis.push(value.slice(cursor));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquasis.push(value.slice(cursor, start));\n\n\t\t\t\t\t\tconst end = value.indexOf('}', start);\n\n\t\t\t\t\t\texpressions.push(value.slice(start + 1, end));\n\n\t\t\t\t\t\tcursor = end + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!expressions.length) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t(result as TODO)[k] = (arg: TODO) => {\n\t\t\t\t\t\tlet str = quasis[0];\n\n\t\t\t\t\t\tfor (let i = 0; i < expressions.length; i++) {\n\t\t\t\t\t\t\tstr += arg[expressions[i]] + quasis[i + 1];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn str;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\treturn this.tsxCache = build(this.locale);\n\t}\n\n\t/**\n\t * @deprecated \u306A\u308B\u3079\u304F\u3053\u306E\u30E1\u30BD\u30C3\u30C9\u4F7F\u3046\u3088\u308A\u3082 ts \u76F4\u63A5\u53C2\u7167\u306E\u65B9\u304C vue \u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u52B9\u3044\u3066\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u304C\u826F\u3044\u304B\u3082\n\t */\n\tpublic t>(key: TKey): string;\n\t/**\n\t * @deprecated \u306A\u308B\u3079\u304F\u3053\u306E\u30E1\u30BD\u30C3\u30C9\u4F7F\u3046\u3088\u308A\u3082 tsx \u76F4\u63A5\u53C2\u7167\u306E\u65B9\u304C vue \u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u52B9\u3044\u3066\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u304C\u826F\u3044\u304B\u3082\n\t */\n\tpublic t>(key: TKey, args: { readonly [_ in ParametersOf]: string | number }): string;\n\tpublic t(key: string, args?: { readonly [_: string]: string | number }) {\n\t\tlet str: string | ParameterizedString | ILocale = this.locale;\n\n\t\tfor (const k of key.split('.')) {\n\t\t\tstr = (str as TODO)[k];\n\n\t\t\tif (this.devMode) {\n\t\t\t\tif (typeof str === 'undefined') {\n\t\t\t\t\tconsole.error(`Unexpected locale key: ${key}`);\n\t\t\t\t\treturn key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (args) {\n\t\t\tif (this.devMode) {\n\t\t\t\tconst missing = Array.from((str as string).matchAll(/\\{(\\w+)\\}/g), ([, parameter]) => parameter).filter(parameter => !Object.hasOwn(args, parameter));\n\n\t\t\t\tif (missing.length) {\n\t\t\t\t\tconsole.error(`Missing locale parameters: ${missing.join(', ')} at ${key}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, v] of Object.entries(args)) {\n\t\t\t\tconst search = `{${k}}`;\n\n\t\t\t\tif (this.devMode) {\n\t\t\t\t\tif (!(str as string).includes(search)) {\n\t\t\t\t\t\tconsole.error(`Unexpected locale parameter: ${k} at ${key}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstr = (str as string).replace(search, v.toString());\n\t\t\t}\n\t\t}\n\n\t\treturn str;\n\t}\n}\n"], - "mappings": "AAmCO,MAAM,KAAwB;AAAA,EAIpC,YAAmB,QAAW,UAAU,OAAO;AAA5B;AAClB,SAAK,UAAU;AAGf,SAAK,IAAI,KAAK,EAAE,KAAK,IAAI;AAAA,EAE1B;AAAA,EATQ;AAAA,EACA;AAAA,EAUR,IAAW,KAAQ;AAClB,QAAI,KAAK,SAAS;AAAA,MACjB,MAAM,QAAkE;AAAA,QACvE,IAAI,QAAiB,GAA6B;AACjD,gBAAM,QAAQ,OAAO,CAAkB;AAEvC,cAAI,OAAO,UAAU,UAAU;AAC9B,mBAAO,IAAI,MAAM,OAAO,IAAI,QAA0C,CAAC;AAAA,UACxE;AAEA,cAAI,OAAO,UAAU,UAAU;AAC9B,kBAAM,aAAa,MAAM,KAAK,MAAM,SAAS,YAAY,GAAG,CAAC,CAAC,EAAE,SAAS,MAAM,SAAS;AAExF,gBAAI,WAAW,QAAQ;AACtB,sBAAQ,MAAM,8BAA8B,WAAW,KAAK,IAAI,CAAC,OAAO,OAAO,CAAC,CAAC,EAAE;AAAA,YACpF;AAEA,mBAAO;AAAA,UACR;AAEA,kBAAQ,MAAM,0BAA0B,OAAO,CAAC,CAAC,EAAE;AAEnD,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,aAAO,IAAI,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC;AAAA,IAC5C;AAEA,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAW,MAAc;AACxB,QAAI,KAAK,SAAS;AACjB,UAAI,KAAK,UAAU;AAClB,eAAO,KAAK;AAAA,MACb;AAAA,MAEA,MAAM,QAAkE;AAAA,QACvE,IAAI,QAAiB,GAA6B;AACjD,gBAAM,QAAQ,OAAO,CAAkB;AAEvC,cAAI,OAAO,UAAU,UAAU;AAC9B,mBAAO,IAAI,MAAM,OAAO,IAAI,QAA0C,CAAC;AAAA,UACxE;AAEA,cAAI,OAAO,UAAU,UAAU;AAC9B,kBAAM,SAAmB,CAAC;AAC1B,kBAAM,cAAwB,CAAC;AAC/B,gBAAI,SAAS;AAEb,mBAAO,CAAC,QAAQ;AACf,oBAAM,QAAQ,MAAM,QAAQ,KAAK,MAAM;AAEvC,kBAAI,CAAC,CAAC,OAAO;AACZ,uBAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAC/B;AAAA,cACD;AAEA,qBAAO,KAAK,MAAM,MAAM,QAAQ,KAAK,CAAC;AAEtC,oBAAM,MAAM,MAAM,QAAQ,KAAK,KAAK;AAEpC,0BAAY,KAAK,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5C,uBAAS,MAAM;AAAA,YAChB;AAEA,gBAAI,CAAC,YAAY,QAAQ;AACxB,sBAAQ,MAAM,0BAA0B,OAAO,CAAC,CAAC,EAAE;AAEnD,qBAAO,MAAM;AAAA,YACd;AAEA,mBAAO,CAAC,QAAc;AACrB,kBAAI,MAAM,OAAO,CAAC;AAElB,uBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC5C,oBAAI,CAAC,OAAO,OAAO,KAAK,YAAY,CAAC,CAAC,GAAG;AACxC,0BAAQ,MAAM,8BAA8B,YAAY,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,EAAE;AAAA,gBAC7E;AAEA,uBAAO,IAAI,YAAY,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC;AAAA,cAC1C;AAEA,qBAAO;AAAA,YACR;AAAA,UACD;AAEA,kBAAQ,MAAM,0BAA0B,OAAO,CAAC,CAAC,EAAE;AAEnD,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,aAAO,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC;AAAA,IAC5D;AAEA,QAAI,KAAK,UAAU;AAClB,aAAO,KAAK;AAAA,IACb;AAEA,aAAS,MAAM,QAAyB;AACvC,YAAM,SAAS,CAAC;AAEhB,iBAAW,KAAK,QAAQ;AACvB,YAAI,CAAC,OAAO,OAAO,QAAQ,CAAC,GAAG;AAC9B;AAAA,QACD;AAEA,cAAM,QAAQ,OAAO,CAAwB;AAE7C,YAAI,OAAO,UAAU,UAAU;AAC9B,UAAC,OAAgB,CAAC,IAAI,MAAM,KAAgB;AAAA,QAC7C,WAAW,OAAO,UAAU,UAAU;AACrC,gBAAM,SAAmB,CAAC;AAC1B,gBAAM,cAAwB,CAAC;AAC/B,cAAI,SAAS;AAEb,iBAAO,CAAC,QAAQ;AACf,kBAAM,QAAQ,MAAM,QAAQ,KAAK,MAAM;AAEvC,gBAAI,CAAC,CAAC,OAAO;AACZ,qBAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAC/B;AAAA,YACD;AAEA,mBAAO,KAAK,MAAM,MAAM,QAAQ,KAAK,CAAC;AAEtC,kBAAM,MAAM,MAAM,QAAQ,KAAK,KAAK;AAEpC,wBAAY,KAAK,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5C,qBAAS,MAAM;AAAA,UAChB;AAEA,cAAI,CAAC,YAAY,QAAQ;AACxB;AAAA,UACD;AAEA,UAAC,OAAgB,CAAC,IAAI,CAAC,QAAc;AACpC,gBAAI,MAAM,OAAO,CAAC;AAElB,qBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC5C,qBAAO,IAAI,YAAY,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC;AAAA,YAC1C;AAEA,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,WAAO,KAAK,WAAW,MAAM,KAAK,MAAM;AAAA,EACzC;AAAA,EAUO,EAAE,KAAa,MAAkD;AACvE,QAAI,MAA8C,KAAK;AAEvD,eAAW,KAAK,IAAI,MAAM,GAAG,GAAG;AAC/B,YAAO,IAAa,CAAC;AAErB,UAAI,KAAK,SAAS;AACjB,YAAI,OAAO,QAAQ,aAAa;AAC/B,kBAAQ,MAAM,0BAA0B,GAAG,EAAE;AAC7C,iBAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAEA,QAAI,MAAM;AACT,UAAI,KAAK,SAAS;AACjB,cAAM,UAAU,MAAM,KAAM,IAAe,SAAS,YAAY,GAAG,CAAC,CAAC,EAAE,SAAS,MAAM,SAAS,EAAE,OAAO,eAAa,CAAC,OAAO,OAAO,MAAM,SAAS,CAAC;AAEpJ,YAAI,QAAQ,QAAQ;AACnB,kBAAQ,MAAM,8BAA8B,QAAQ,KAAK,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,QAC3E;AAAA,MACD;AAEA,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC1C,cAAM,SAAS,IAAI,CAAC;AAEpB,YAAI,KAAK,SAAS;AACjB,cAAI,CAAE,IAAe,SAAS,MAAM,GAAG;AACtC,oBAAQ,MAAM,gCAAgC,CAAC,OAAO,GAAG,EAAE;AAAA,UAC5D;AAAA,QACD;AAEA,cAAO,IAAe,QAAQ,QAAQ,EAAE,SAAS,CAAC;AAAA,MACnD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/intl-const.d.ts b/packages/frontend-shared/js-built/intl-const.d.ts deleted file mode 100644 index 571dbee655..0000000000 --- a/packages/frontend-shared/js-built/intl-const.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare const versatileLang: string; -export declare const dateTimeFormat: Intl.DateTimeFormat; -export declare const timeZone: string; -export declare const hemisphere: string; -export declare const numberFormat: Intl.NumberFormat; -//# sourceMappingURL=intl-const.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/intl-const.d.ts.map b/packages/frontend-shared/js-built/intl-const.d.ts.map deleted file mode 100644 index bbc11fa614..0000000000 --- a/packages/frontend-shared/js-built/intl-const.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"intl-const.d.ts","sourceRoot":"","sources":["../js/intl-const.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,QAA8C,CAAC;AA0BzE,eAAO,MAAM,cAAc,qBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,QAA4C,CAAC;AAElE,eAAO,MAAM,UAAU,QAAyE,CAAC;AAYjG,eAAO,MAAM,YAAY,mBAAgB,CAAC"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/intl-const.js b/packages/frontend-shared/js-built/intl-const.js deleted file mode 100644 index fd68e96007..0000000000 --- a/packages/frontend-shared/js-built/intl-const.js +++ /dev/null @@ -1,44 +0,0 @@ -import { lang } from "@@/js/config.js"; -const versatileLang = (lang ?? "ja-JP").replace("ja-KS", "ja-JP"); -let _dateTimeFormat; -try { - _dateTimeFormat = new Intl.DateTimeFormat(versatileLang, { - year: "numeric", - month: "numeric", - day: "numeric", - hour: "numeric", - minute: "numeric", - second: "numeric" - }); -} catch (err) { - console.warn(err); - if (_DEV_) console.log("[Intl] Fallback to en-US"); - _dateTimeFormat = new Intl.DateTimeFormat("en-US", { - year: "numeric", - month: "numeric", - day: "numeric", - hour: "numeric", - minute: "numeric", - second: "numeric" - }); -} -const dateTimeFormat = _dateTimeFormat; -const timeZone = dateTimeFormat.resolvedOptions().timeZone; -const hemisphere = /^(australia|pacific|antarctica|indian)\//i.test(timeZone) ? "S" : "N"; -let _numberFormat; -try { - _numberFormat = new Intl.NumberFormat(versatileLang); -} catch (err) { - console.warn(err); - if (_DEV_) console.log("[Intl] Fallback to en-US"); - _numberFormat = new Intl.NumberFormat("en-US"); -} -const numberFormat = _numberFormat; -export { - dateTimeFormat, - hemisphere, - numberFormat, - timeZone, - versatileLang -}; -//# sourceMappingURL=intl-const.js.map diff --git a/packages/frontend-shared/js-built/intl-const.js.map b/packages/frontend-shared/js-built/intl-const.js.map deleted file mode 100644 index d051a3cff0..0000000000 --- a/packages/frontend-shared/js-built/intl-const.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/intl-const.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nimport { lang } from '@@/js/config.js';\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nexport const versatileLang = (lang ?? 'ja-JP').replace('ja-KS', 'ja-JP');\n\nlet _dateTimeFormat: Intl.DateTimeFormat;\ntry {\n\t_dateTimeFormat = new Intl.DateTimeFormat(versatileLang, {\n\t\tyear: 'numeric',\n\t\tmonth: 'numeric',\n\t\tday: 'numeric',\n\t\thour: 'numeric',\n\t\tminute: 'numeric',\n\t\tsecond: 'numeric',\n\t});\n} catch (err) {\n\tconsole.warn(err);\n\tif (_DEV_) console.log('[Intl] Fallback to en-US');\n\n\t// Fallback to en-US\n\t_dateTimeFormat = new Intl.DateTimeFormat('en-US', {\n\t\tyear: 'numeric',\n\t\tmonth: 'numeric',\n\t\tday: 'numeric',\n\t\thour: 'numeric',\n\t\tminute: 'numeric',\n\t\tsecond: 'numeric',\n\t});\n}\nexport const dateTimeFormat = _dateTimeFormat;\n\nexport const timeZone = dateTimeFormat.resolvedOptions().timeZone;\n\nexport const hemisphere = /^(australia|pacific|antarctica|indian)\\//i.test(timeZone) ? 'S' : 'N';\n\nlet _numberFormat: Intl.NumberFormat;\ntry {\n\t_numberFormat = new Intl.NumberFormat(versatileLang);\n} catch (err) {\n\tconsole.warn(err);\n\tif (_DEV_) console.log('[Intl] Fallback to en-US');\n\n\t// Fallback to en-US\n\t_numberFormat = new Intl.NumberFormat('en-US');\n}\nexport const numberFormat = _numberFormat;\n"], - "mappings": "AAKA,SAAS,YAAY;AAGd,MAAM,iBAAiB,QAAQ,SAAS,QAAQ,SAAS,OAAO;AAEvE,IAAI;AACJ,IAAI;AACH,oBAAkB,IAAI,KAAK,eAAe,eAAe;AAAA,IACxD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,EACT,CAAC;AACF,SAAS,KAAK;AACb,UAAQ,KAAK,GAAG;AAChB,MAAI,MAAO,SAAQ,IAAI,0BAA0B;AAGjD,oBAAkB,IAAI,KAAK,eAAe,SAAS;AAAA,IAClD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,EACT,CAAC;AACF;AACO,MAAM,iBAAiB;AAEvB,MAAM,WAAW,eAAe,gBAAgB,EAAE;AAElD,MAAM,aAAa,4CAA4C,KAAK,QAAQ,IAAI,MAAM;AAE7F,IAAI;AACJ,IAAI;AACH,kBAAgB,IAAI,KAAK,aAAa,aAAa;AACpD,SAAS,KAAK;AACb,UAAQ,KAAK,GAAG;AAChB,MAAI,MAAO,SAAQ,IAAI,0BAA0B;AAGjD,kBAAgB,IAAI,KAAK,aAAa,OAAO;AAC9C;AACO,MAAM,eAAe;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/is-link.d.ts b/packages/frontend-shared/js-built/is-link.d.ts deleted file mode 100644 index 962b54a74e..0000000000 --- a/packages/frontend-shared/js-built/is-link.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function isLink(el: HTMLElement): boolean; -//# sourceMappingURL=is-link.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/is-link.d.ts.map b/packages/frontend-shared/js-built/is-link.d.ts.map deleted file mode 100644 index 625b799b7c..0000000000 --- a/packages/frontend-shared/js-built/is-link.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"is-link.d.ts","sourceRoot":"","sources":["../js/is-link.ts"],"names":[],"mappings":"AAKA,wBAAgB,MAAM,CAAC,EAAE,EAAE,WAAW,WAMrC"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/is-link.js b/packages/frontend-shared/js-built/is-link.js deleted file mode 100644 index 3cc859b423..0000000000 --- a/packages/frontend-shared/js-built/is-link.js +++ /dev/null @@ -1,11 +0,0 @@ -function isLink(el) { - if (el.tagName === "A") return true; - if (el.parentElement) { - return isLink(el.parentElement); - } - return false; -} -export { - isLink -}; -//# sourceMappingURL=is-link.js.map diff --git a/packages/frontend-shared/js-built/is-link.js.map b/packages/frontend-shared/js-built/is-link.js.map deleted file mode 100644 index 5430713119..0000000000 --- a/packages/frontend-shared/js-built/is-link.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/is-link.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nexport function isLink(el: HTMLElement) {\n\tif (el.tagName === 'A') return true;\n\tif (el.parentElement) {\n\t\treturn isLink(el.parentElement);\n\t}\n\treturn false;\n}\n"], - "mappings": "AAKO,SAAS,OAAO,IAAiB;AACvC,MAAI,GAAG,YAAY,IAAK,QAAO;AAC/B,MAAI,GAAG,eAAe;AACrB,WAAO,OAAO,GAAG,aAAa;AAAA,EAC/B;AACA,SAAO;AACR;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/media-proxy.d.ts b/packages/frontend-shared/js-built/media-proxy.d.ts deleted file mode 100644 index 9ad9c1cfde..0000000000 --- a/packages/frontend-shared/js-built/media-proxy.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as Misskey from 'cherrypick-js'; -export declare class MediaProxy { - private serverMetadata; - private url; - constructor(serverMetadata: Misskey.entities.MetaDetailed, url: string); - getProxiedImageUrl(imageUrl: string, type?: 'preview' | 'emoji' | 'avatar', mustOrigin?: boolean, noFallback?: boolean): string; - getProxiedImageUrlNullable(imageUrl: string | null | undefined, type?: 'preview'): string | null; - getStaticImageUrl(baseUrl: string): string; -} -//# sourceMappingURL=media-proxy.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/media-proxy.d.ts.map b/packages/frontend-shared/js-built/media-proxy.d.ts.map deleted file mode 100644 index 832b958874..0000000000 --- a/packages/frontend-shared/js-built/media-proxy.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"media-proxy.d.ts","sourceRoot":"","sources":["../js/media-proxy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AAGzC,qBAAa,UAAU;IACtB,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,GAAG,CAAS;gBAER,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM;IAK/D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,EAAE,UAAU,UAAQ,EAAE,UAAU,UAAQ,GAAG,MAAM;IAoB3H,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IAKhG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAoBjD"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/media-proxy.js b/packages/frontend-shared/js-built/media-proxy.js deleted file mode 100644 index 15a8f4fe51..0000000000 --- a/packages/frontend-shared/js-built/media-proxy.js +++ /dev/null @@ -1,45 +0,0 @@ -import { query } from "./url.js"; -class MediaProxy { - serverMetadata; - url; - constructor(serverMetadata, url) { - this.serverMetadata = serverMetadata; - this.url = url; - } - getProxiedImageUrl(imageUrl, type, mustOrigin = false, noFallback = false) { - const localProxy = `${this.url}/proxy`; - let _imageUrl = imageUrl; - if (imageUrl.startsWith(this.serverMetadata.mediaProxy + "/") || imageUrl.startsWith("/proxy/") || imageUrl.startsWith(localProxy + "/")) { - _imageUrl = new URL(imageUrl).searchParams.get("url") ?? imageUrl; - } - return `${mustOrigin ? localProxy : this.serverMetadata.mediaProxy}/${type === "preview" ? "preview.webp" : "image.webp"}?${query({ - url: _imageUrl, - ...!noFallback ? { "fallback": "1" } : {}, - ...type ? { [type]: "1" } : {}, - ...mustOrigin ? { origin: "1" } : {} - })}`; - } - getProxiedImageUrlNullable(imageUrl, type) { - if (imageUrl == null) return null; - return this.getProxiedImageUrl(imageUrl, type); - } - getStaticImageUrl(baseUrl) { - const u = baseUrl.startsWith("http") ? new URL(baseUrl) : new URL(baseUrl, this.url); - if (u.href.startsWith(`${this.url}/emoji/`)) { - u.searchParams.set("static", "1"); - return u.href; - } - if (u.href.startsWith(this.serverMetadata.mediaProxy + "/")) { - u.searchParams.set("static", "1"); - return u.href; - } - return `${this.serverMetadata.mediaProxy}/static.webp?${query({ - url: u.href, - static: "1" - })}`; - } -} -export { - MediaProxy -}; -//# sourceMappingURL=media-proxy.js.map diff --git a/packages/frontend-shared/js-built/media-proxy.js.map b/packages/frontend-shared/js-built/media-proxy.js.map deleted file mode 100644 index 8604c57f71..0000000000 --- a/packages/frontend-shared/js-built/media-proxy.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/media-proxy.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nimport * as Misskey from 'cherrypick-js';\nimport { query } from './url.js';\n\nexport class MediaProxy {\n\tprivate serverMetadata: Misskey.entities.MetaDetailed;\n\tprivate url: string;\n\n\tconstructor(serverMetadata: Misskey.entities.MetaDetailed, url: string) {\n\t\tthis.serverMetadata = serverMetadata;\n\t\tthis.url = url;\n\t}\n\n\tpublic getProxiedImageUrl(imageUrl: string, type?: 'preview' | 'emoji' | 'avatar', mustOrigin = false, noFallback = false): string {\n\t\tconst localProxy = `${this.url}/proxy`;\n\t\tlet _imageUrl = imageUrl;\n\n\t\tif (imageUrl.startsWith(this.serverMetadata.mediaProxy + '/') || imageUrl.startsWith('/proxy/') || imageUrl.startsWith(localProxy + '/')) {\n\t\t\t// \u3082\u3046\u65E2\u306Bproxy\u3063\u307D\u305D\u3046\u3060\u3063\u305F\u3089url\u3092\u53D6\u308A\u51FA\u3059\n\t\t\t_imageUrl = (new URL(imageUrl)).searchParams.get('url') ?? imageUrl;\n\t\t}\n\n\t\treturn `${mustOrigin ? localProxy : this.serverMetadata.mediaProxy}/${\n\t\t\ttype === 'preview' ? 'preview.webp'\n\t\t\t: 'image.webp'\n\t\t}?${query({\n\t\t\turl: _imageUrl,\n\t\t\t...(!noFallback ? { 'fallback': '1' } : {}),\n\t\t\t...(type ? { [type]: '1' } : {}),\n\t\t\t...(mustOrigin ? { origin: '1' } : {}),\n\t\t})}`;\n\t}\n\n\tpublic getProxiedImageUrlNullable(imageUrl: string | null | undefined, type?: 'preview'): string | null {\n\t\tif (imageUrl == null) return null;\n\t\treturn this.getProxiedImageUrl(imageUrl, type);\n\t}\n\n\tpublic getStaticImageUrl(baseUrl: string): string {\n\t\tconst u = baseUrl.startsWith('http') ? new URL(baseUrl) : new URL(baseUrl, this.url);\n\n\t\tif (u.href.startsWith(`${this.url}/emoji/`)) {\n\t\t\t// \u3082\u3046\u65E2\u306Bemoji\u3063\u307D\u305D\u3046\u3060\u3063\u305F\u3089searchParams\u4ED8\u3051\u308B\u3060\u3051\n\t\t\tu.searchParams.set('static', '1');\n\t\t\treturn u.href;\n\t\t}\n\n\t\tif (u.href.startsWith(this.serverMetadata.mediaProxy + '/')) {\n\t\t\t// \u3082\u3046\u65E2\u306Bproxy\u3063\u307D\u305D\u3046\u3060\u3063\u305F\u3089searchParams\u4ED8\u3051\u308B\u3060\u3051\n\t\t\tu.searchParams.set('static', '1');\n\t\t\treturn u.href;\n\t\t}\n\n\t\treturn `${this.serverMetadata.mediaProxy}/static.webp?${query({\n\t\t\turl: u.href,\n\t\t\tstatic: '1',\n\t\t})}`;\n\t}\n}\n"], - "mappings": "AAMA,SAAS,aAAa;AAEf,MAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EAER,YAAY,gBAA+C,KAAa;AACvE,SAAK,iBAAiB;AACtB,SAAK,MAAM;AAAA,EACZ;AAAA,EAEO,mBAAmB,UAAkB,MAAuC,aAAa,OAAO,aAAa,OAAe;AAClI,UAAM,aAAa,GAAG,KAAK,GAAG;AAC9B,QAAI,YAAY;AAEhB,QAAI,SAAS,WAAW,KAAK,eAAe,aAAa,GAAG,KAAK,SAAS,WAAW,SAAS,KAAK,SAAS,WAAW,aAAa,GAAG,GAAG;AAEzI,kBAAa,IAAI,IAAI,QAAQ,EAAG,aAAa,IAAI,KAAK,KAAK;AAAA,IAC5D;AAEA,WAAO,GAAG,aAAa,aAAa,KAAK,eAAe,UAAU,IACjE,SAAS,YAAY,iBACnB,YACH,IAAI,MAAM;AAAA,MACT,KAAK;AAAA,MACL,GAAI,CAAC,aAAa,EAAE,YAAY,IAAI,IAAI,CAAC;AAAA,MACzC,GAAI,OAAO,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;AAAA,MAC9B,GAAI,aAAa,EAAE,QAAQ,IAAI,IAAI,CAAC;AAAA,IACrC,CAAC,CAAC;AAAA,EACH;AAAA,EAEO,2BAA2B,UAAqC,MAAiC;AACvG,QAAI,YAAY,KAAM,QAAO;AAC7B,WAAO,KAAK,mBAAmB,UAAU,IAAI;AAAA,EAC9C;AAAA,EAEO,kBAAkB,SAAyB;AACjD,UAAM,IAAI,QAAQ,WAAW,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,SAAS,KAAK,GAAG;AAEnF,QAAI,EAAE,KAAK,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG;AAE5C,QAAE,aAAa,IAAI,UAAU,GAAG;AAChC,aAAO,EAAE;AAAA,IACV;AAEA,QAAI,EAAE,KAAK,WAAW,KAAK,eAAe,aAAa,GAAG,GAAG;AAE5D,QAAE,aAAa,IAAI,UAAU,GAAG;AAChC,aAAO,EAAE;AAAA,IACV;AAEA,WAAO,GAAG,KAAK,eAAe,UAAU,gBAAgB,MAAM;AAAA,MAC7D,KAAK,EAAE;AAAA,MACP,QAAQ;AAAA,IACT,CAAC,CAAC;AAAA,EACH;AACD;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/scroll.d.ts b/packages/frontend-shared/js-built/scroll.d.ts deleted file mode 100644 index 622c71989c..0000000000 --- a/packages/frontend-shared/js-built/scroll.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -type ScrollBehavior = 'auto' | 'smooth' | 'instant'; -export declare function getScrollContainer(el: HTMLElement | null): HTMLElement | null; -export declare function getStickyTop(el: HTMLElement, container?: HTMLElement | null, top?: number): number; -export declare function getStickyBottom(el: HTMLElement, container?: HTMLElement | null, bottom?: number): number; -export declare function getScrollPosition(el: HTMLElement | null): number; -export declare function onScrollTop(el: HTMLElement, cb: (topVisible: boolean) => unknown, tolerance?: number, once?: boolean): (() => void) | null; -export declare function onScrollBottom(el: HTMLElement, cb: () => unknown, tolerance?: number, once?: boolean): (() => void) | null; -export declare function scroll(el: HTMLElement, options: ScrollToOptions | undefined): void; -export declare function scrollToTop(el: HTMLElement, options?: { - behavior?: ScrollBehavior; -}): void; -export declare function scrollToBottom(el: HTMLElement, options?: ScrollToOptions, container?: HTMLElement | null): void; -export declare function isTopVisible(el: HTMLElement, tolerance?: number): boolean; -export declare function isBottomVisible(el: HTMLElement, tolerance?: number, container?: HTMLElement | null): boolean; -export declare function getBodyScrollHeight(): number; -export {}; -//# sourceMappingURL=scroll.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/scroll.d.ts.map b/packages/frontend-shared/js-built/scroll.d.ts.map deleted file mode 100644 index 23a83e9684..0000000000 --- a/packages/frontend-shared/js-built/scroll.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../js/scroll.ts"],"names":[],"mappings":"AAKA,KAAK,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEpD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAQ7E;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,GAAE,WAAW,GAAG,IAAW,EAAE,GAAG,SAAI,UAM1F;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,GAAE,WAAW,GAAG,IAAW,EAAE,MAAM,SAAI,UAMhG;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAGhE;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,OAAO,EAAE,SAAS,SAAI,EAAE,IAAI,UAAQ,uBA6B7G;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,OAAO,EAAE,SAAS,SAAI,EAAE,IAAI,UAAQ,uBAwB7F;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAG,SAAS,QAO3E;AAOD,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;CAAO,QAExF;AAQD,wBAAgB,cAAc,CAC7B,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,eAAoB,EAC7B,SAAS,qBAAyB,QAUlC;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,SAAI,GAAG,OAAO,CAIpE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,SAAI,EAAE,SAAS,qBAAyB,WAGjG;AAGD,wBAAgB,mBAAmB,WAMlC"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/scroll.js b/packages/frontend-shared/js-built/scroll.js deleted file mode 100644 index 233629a4d3..0000000000 --- a/packages/frontend-shared/js-built/scroll.js +++ /dev/null @@ -1,125 +0,0 @@ -function getScrollContainer(el) { - if (el == null || el.tagName === "HTML") return null; - const overflow = window.getComputedStyle(el).getPropertyValue("overflow-y"); - if (overflow === "scroll" || overflow === "auto") { - return el; - } else { - return getScrollContainer(el.parentElement); - } -} -function getStickyTop(el, container = null, top = 0) { - if (!el.parentElement) return top; - const data = el.dataset.stickyContainerHeaderHeight; - const newTop = data ? Number(data) + top : top; - if (el === container) return newTop; - return getStickyTop(el.parentElement, container, newTop); -} -function getStickyBottom(el, container = null, bottom = 0) { - if (!el.parentElement) return bottom; - const data = el.dataset.stickyContainerFooterHeight; - const newBottom = data ? Number(data) + bottom : bottom; - if (el === container) return newBottom; - return getStickyBottom(el.parentElement, container, newBottom); -} -function getScrollPosition(el) { - const container = getScrollContainer(el); - return container == null ? window.scrollY : container.scrollTop; -} -function onScrollTop(el, cb, tolerance = 1, once = false) { - const firstTopVisible = isTopVisible(el); - if (el.isConnected && firstTopVisible) { - cb(firstTopVisible); - if (once) return null; - } - const container = getScrollContainer(el) ?? window; - let prevTopVisible = firstTopVisible; - const onScroll = () => { - if (!document.body.contains(el)) return; - const topVisible = isTopVisible(el, tolerance); - if (topVisible !== prevTopVisible) { - prevTopVisible = topVisible; - cb(topVisible); - if (once) removeListener(); - } - }; - function removeListener() { - container.removeEventListener("scroll", onScroll); - } - container.addEventListener("scroll", onScroll, { passive: true }); - return removeListener; -} -function onScrollBottom(el, cb, tolerance = 1, once = false) { - const container = getScrollContainer(el); - if (el.isConnected && isBottomVisible(el, tolerance, container)) { - cb(); - if (once) return null; - } - const containerOrWindow = container ?? window; - const onScroll = () => { - if (!document.body.contains(el)) return; - if (isBottomVisible(el, 1, container)) { - cb(); - if (once) removeListener(); - } - }; - function removeListener() { - containerOrWindow.removeEventListener("scroll", onScroll); - } - containerOrWindow.addEventListener("scroll", onScroll, { passive: true }); - return removeListener; -} -function scroll(el, options) { - const container = getScrollContainer(el); - if (container == null) { - window.scroll(options); - } else { - container.scroll(options); - } -} -function scrollToTop(el, options = {}) { - scroll(el, { top: 0, ...options }); -} -function scrollToBottom(el, options = {}, container = getScrollContainer(el)) { - if (container) { - container.scroll({ top: el.scrollHeight - container.clientHeight + getStickyTop(el, container) || 0, ...options }); - } else { - window.scroll({ - top: el.scrollHeight - window.innerHeight + getStickyTop(el, container) + (window.innerWidth <= 500 ? 96 : 0) || 0, - ...options - }); - } -} -function isTopVisible(el, tolerance = 1) { - const scrollTop = getScrollPosition(el); - if (_DEV_) console.log(scrollTop, tolerance, scrollTop <= tolerance); - return scrollTop <= tolerance; -} -function isBottomVisible(el, tolerance = 1, container = getScrollContainer(el)) { - if (container) return el.scrollHeight <= container.clientHeight + Math.abs(container.scrollTop) + tolerance; - return el.scrollHeight <= window.innerHeight + window.scrollY + tolerance; -} -function getBodyScrollHeight() { - return Math.max( - document.body.scrollHeight, - document.documentElement.scrollHeight, - document.body.offsetHeight, - document.documentElement.offsetHeight, - document.body.clientHeight, - document.documentElement.clientHeight - ); -} -export { - getBodyScrollHeight, - getScrollContainer, - getScrollPosition, - getStickyBottom, - getStickyTop, - isBottomVisible, - isTopVisible, - onScrollBottom, - onScrollTop, - scroll, - scrollToBottom, - scrollToTop -}; -//# sourceMappingURL=scroll.js.map diff --git a/packages/frontend-shared/js-built/scroll.js.map b/packages/frontend-shared/js-built/scroll.js.map deleted file mode 100644 index dd9db3c6ac..0000000000 --- a/packages/frontend-shared/js-built/scroll.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/scroll.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\ntype ScrollBehavior = 'auto' | 'smooth' | 'instant';\n\nexport function getScrollContainer(el: HTMLElement | null): HTMLElement | null {\n\tif (el == null || el.tagName === 'HTML') return null;\n\tconst overflow = window.getComputedStyle(el).getPropertyValue('overflow-y');\n\tif (overflow === 'scroll' || overflow === 'auto') {\n\t\treturn el;\n\t} else {\n\t\treturn getScrollContainer(el.parentElement);\n\t}\n}\n\nexport function getStickyTop(el: HTMLElement, container: HTMLElement | null = null, top = 0) {\n\tif (!el.parentElement) return top;\n\tconst data = el.dataset.stickyContainerHeaderHeight;\n\tconst newTop = data ? Number(data) + top : top;\n\tif (el === container) return newTop;\n\treturn getStickyTop(el.parentElement, container, newTop);\n}\n\nexport function getStickyBottom(el: HTMLElement, container: HTMLElement | null = null, bottom = 0) {\n\tif (!el.parentElement) return bottom;\n\tconst data = el.dataset.stickyContainerFooterHeight;\n\tconst newBottom = data ? Number(data) + bottom : bottom;\n\tif (el === container) return newBottom;\n\treturn getStickyBottom(el.parentElement, container, newBottom);\n}\n\nexport function getScrollPosition(el: HTMLElement | null): number {\n\tconst container = getScrollContainer(el);\n\treturn container == null ? window.scrollY : container.scrollTop;\n}\n\nexport function onScrollTop(el: HTMLElement, cb: (topVisible: boolean) => unknown, tolerance = 1, once = false) {\n\t// \u3068\u308A\u3042\u3048\u305A\u8A55\u4FA1\u3057\u3066\u307F\u308B\n\tconst firstTopVisible = isTopVisible(el);\n\tif (el.isConnected && firstTopVisible) {\n\t\tcb(firstTopVisible);\n\t\tif (once) return null;\n\t}\n\n\tconst container = getScrollContainer(el) ?? window;\n\n\t// \u4EE5\u4E0B\u306E\u30B1\u30FC\u30B9\u306B\u304A\u3044\u3066\u3001cb\u304C\u4F55\u5EA6\u3082\u547C\u3073\u51FA\u3055\u308C\u3066\u3057\u307E\u3063\u3066\u5177\u5408\u304C\u60AA\u3044\u306E\u30671\u56DE\u547C\u3093\u3060\u3089\u4EE5\u964D\u306F\u7121\u8996\u3059\u308B\u3088\u3046\u306B\u3059\u308B\n\t// - \u30B9\u30AF\u30ED\u30FC\u30EB\u30A4\u30D9\u30F3\u30C8\u306F1\u56DE\u306E\u30B9\u30AF\u30ED\u30FC\u30EB\u3067\u8907\u6570\u56DE\u767A\u751F\u3059\u308B\u3053\u3068\u304C\u3042\u308B\n\t// - tolerance\u306E\u7BC4\u56F2\u5185\u306B\u53CE\u307E\u308B\u7A0B\u5EA6\u306E\u5FAE\u91CF\u306A\u30B9\u30AF\u30ED\u30FC\u30EB\u304C\u767A\u751F\u3057\u305F\n\tlet prevTopVisible = firstTopVisible;\n\tconst onScroll = () => {\n\t\tif (!document.body.contains(el)) return;\n\n\t\tconst topVisible = isTopVisible(el, tolerance);\n\t\tif (topVisible !== prevTopVisible) {\n\t\t\tprevTopVisible = topVisible;\n\t\t\tcb(topVisible);\n\t\t\tif (once) removeListener();\n\t\t}\n\t};\n\n\tfunction removeListener() { container.removeEventListener('scroll', onScroll); }\n\n\tcontainer.addEventListener('scroll', onScroll, { passive: true });\n\treturn removeListener;\n}\n\nexport function onScrollBottom(el: HTMLElement, cb: () => unknown, tolerance = 1, once = false) {\n\tconst container = getScrollContainer(el);\n\n\t// \u3068\u308A\u3042\u3048\u305A\u8A55\u4FA1\u3057\u3066\u307F\u308B\n\tif (el.isConnected && isBottomVisible(el, tolerance, container)) {\n\t\tcb();\n\t\tif (once) return null;\n\t}\n\n\tconst containerOrWindow = container ?? window;\n\tconst onScroll = () => {\n\t\tif (!document.body.contains(el)) return;\n\t\tif (isBottomVisible(el, 1, container)) {\n\t\t\tcb();\n\t\t\tif (once) removeListener();\n\t\t}\n\t};\n\n\tfunction removeListener() {\n\t\tcontainerOrWindow.removeEventListener('scroll', onScroll);\n\t}\n\n\tcontainerOrWindow.addEventListener('scroll', onScroll, { passive: true });\n\treturn removeListener;\n}\n\nexport function scroll(el: HTMLElement, options: ScrollToOptions | undefined) {\n\tconst container = getScrollContainer(el);\n\tif (container == null) {\n\t\twindow.scroll(options);\n\t} else {\n\t\tcontainer.scroll(options);\n\t}\n}\n\n/**\n * Scroll to Top\n * @param el Scroll container element\n * @param options Scroll options\n */\nexport function scrollToTop(el: HTMLElement, options: { behavior?: ScrollBehavior; } = {}) {\n\tscroll(el, { top: 0, ...options });\n}\n\n/**\n * Scroll to Bottom\n * @param el Content element\n * @param options Scroll options\n * @param container Scroll container element\n */\nexport function scrollToBottom(\n\tel: HTMLElement,\n\toptions: ScrollToOptions = {},\n\tcontainer = getScrollContainer(el),\n) {\n\tif (container) {\n\t\tcontainer.scroll({ top: el.scrollHeight - container.clientHeight + getStickyTop(el, container) || 0, ...options });\n\t} else {\n\t\twindow.scroll({\n\t\t\ttop: (el.scrollHeight - window.innerHeight + getStickyTop(el, container) + (window.innerWidth <= 500 ? 96 : 0)) || 0,\n\t\t\t...options,\n\t\t});\n\t}\n}\n\nexport function isTopVisible(el: HTMLElement, tolerance = 1): boolean {\n\tconst scrollTop = getScrollPosition(el);\n\tif (_DEV_) console.log(scrollTop, tolerance, scrollTop <= tolerance);\n\treturn scrollTop <= tolerance;\n}\n\nexport function isBottomVisible(el: HTMLElement, tolerance = 1, container = getScrollContainer(el)) {\n\tif (container) return el.scrollHeight <= container.clientHeight + Math.abs(container.scrollTop) + tolerance;\n\treturn el.scrollHeight <= window.innerHeight + window.scrollY + tolerance;\n}\n\n// https://ja.javascript.info/size-and-scroll-window#ref-932\nexport function getBodyScrollHeight() {\n\treturn Math.max(\n\t\tdocument.body.scrollHeight, document.documentElement.scrollHeight,\n\t\tdocument.body.offsetHeight, document.documentElement.offsetHeight,\n\t\tdocument.body.clientHeight, document.documentElement.clientHeight,\n\t);\n}\n"], - "mappings": "AAOO,SAAS,mBAAmB,IAA4C;AAC9E,MAAI,MAAM,QAAQ,GAAG,YAAY,OAAQ,QAAO;AAChD,QAAM,WAAW,OAAO,iBAAiB,EAAE,EAAE,iBAAiB,YAAY;AAC1E,MAAI,aAAa,YAAY,aAAa,QAAQ;AACjD,WAAO;AAAA,EACR,OAAO;AACN,WAAO,mBAAmB,GAAG,aAAa;AAAA,EAC3C;AACD;AAEO,SAAS,aAAa,IAAiB,YAAgC,MAAM,MAAM,GAAG;AAC5F,MAAI,CAAC,GAAG,cAAe,QAAO;AAC9B,QAAM,OAAO,GAAG,QAAQ;AACxB,QAAM,SAAS,OAAO,OAAO,IAAI,IAAI,MAAM;AAC3C,MAAI,OAAO,UAAW,QAAO;AAC7B,SAAO,aAAa,GAAG,eAAe,WAAW,MAAM;AACxD;AAEO,SAAS,gBAAgB,IAAiB,YAAgC,MAAM,SAAS,GAAG;AAClG,MAAI,CAAC,GAAG,cAAe,QAAO;AAC9B,QAAM,OAAO,GAAG,QAAQ;AACxB,QAAM,YAAY,OAAO,OAAO,IAAI,IAAI,SAAS;AACjD,MAAI,OAAO,UAAW,QAAO;AAC7B,SAAO,gBAAgB,GAAG,eAAe,WAAW,SAAS;AAC9D;AAEO,SAAS,kBAAkB,IAAgC;AACjE,QAAM,YAAY,mBAAmB,EAAE;AACvC,SAAO,aAAa,OAAO,OAAO,UAAU,UAAU;AACvD;AAEO,SAAS,YAAY,IAAiB,IAAsC,YAAY,GAAG,OAAO,OAAO;AAE/G,QAAM,kBAAkB,aAAa,EAAE;AACvC,MAAI,GAAG,eAAe,iBAAiB;AACtC,OAAG,eAAe;AAClB,QAAI,KAAM,QAAO;AAAA,EAClB;AAEA,QAAM,YAAY,mBAAmB,EAAE,KAAK;AAK5C,MAAI,iBAAiB;AACrB,QAAM,WAAW,MAAM;AACtB,QAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAG;AAEjC,UAAM,aAAa,aAAa,IAAI,SAAS;AAC7C,QAAI,eAAe,gBAAgB;AAClC,uBAAiB;AACjB,SAAG,UAAU;AACb,UAAI,KAAM,gBAAe;AAAA,IAC1B;AAAA,EACD;AAEA,WAAS,iBAAiB;AAAE,cAAU,oBAAoB,UAAU,QAAQ;AAAA,EAAG;AAE/E,YAAU,iBAAiB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAC;AAChE,SAAO;AACR;AAEO,SAAS,eAAe,IAAiB,IAAmB,YAAY,GAAG,OAAO,OAAO;AAC/F,QAAM,YAAY,mBAAmB,EAAE;AAGvC,MAAI,GAAG,eAAe,gBAAgB,IAAI,WAAW,SAAS,GAAG;AAChE,OAAG;AACH,QAAI,KAAM,QAAO;AAAA,EAClB;AAEA,QAAM,oBAAoB,aAAa;AACvC,QAAM,WAAW,MAAM;AACtB,QAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAG;AACjC,QAAI,gBAAgB,IAAI,GAAG,SAAS,GAAG;AACtC,SAAG;AACH,UAAI,KAAM,gBAAe;AAAA,IAC1B;AAAA,EACD;AAEA,WAAS,iBAAiB;AACzB,sBAAkB,oBAAoB,UAAU,QAAQ;AAAA,EACzD;AAEA,oBAAkB,iBAAiB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAC;AACxE,SAAO;AACR;AAEO,SAAS,OAAO,IAAiB,SAAsC;AAC7E,QAAM,YAAY,mBAAmB,EAAE;AACvC,MAAI,aAAa,MAAM;AACtB,WAAO,OAAO,OAAO;AAAA,EACtB,OAAO;AACN,cAAU,OAAO,OAAO;AAAA,EACzB;AACD;AAOO,SAAS,YAAY,IAAiB,UAA0C,CAAC,GAAG;AAC1F,SAAO,IAAI,EAAE,KAAK,GAAG,GAAG,QAAQ,CAAC;AAClC;AAQO,SAAS,eACf,IACA,UAA2B,CAAC,GAC5B,YAAY,mBAAmB,EAAE,GAChC;AACD,MAAI,WAAW;AACd,cAAU,OAAO,EAAE,KAAK,GAAG,eAAe,UAAU,eAAe,aAAa,IAAI,SAAS,KAAK,GAAG,GAAG,QAAQ,CAAC;AAAA,EAClH,OAAO;AACN,WAAO,OAAO;AAAA,MACb,KAAM,GAAG,eAAe,OAAO,cAAc,aAAa,IAAI,SAAS,KAAK,OAAO,cAAc,MAAM,KAAK,MAAO;AAAA,MACnH,GAAG;AAAA,IACJ,CAAC;AAAA,EACF;AACD;AAEO,SAAS,aAAa,IAAiB,YAAY,GAAY;AACrE,QAAM,YAAY,kBAAkB,EAAE;AACtC,MAAI,MAAO,SAAQ,IAAI,WAAW,WAAW,aAAa,SAAS;AACnE,SAAO,aAAa;AACrB;AAEO,SAAS,gBAAgB,IAAiB,YAAY,GAAG,YAAY,mBAAmB,EAAE,GAAG;AACnG,MAAI,UAAW,QAAO,GAAG,gBAAgB,UAAU,eAAe,KAAK,IAAI,UAAU,SAAS,IAAI;AAClG,SAAO,GAAG,gBAAgB,OAAO,cAAc,OAAO,UAAU;AACjE;AAGO,SAAS,sBAAsB;AACrC,SAAO,KAAK;AAAA,IACX,SAAS,KAAK;AAAA,IAAc,SAAS,gBAAgB;AAAA,IACrD,SAAS,KAAK;AAAA,IAAc,SAAS,gBAAgB;AAAA,IACrD,SAAS,KAAK;AAAA,IAAc,SAAS,gBAAgB;AAAA,EACtD;AACD;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/url.d.ts b/packages/frontend-shared/js-built/url.d.ts deleted file mode 100644 index 75f7f35e0b..0000000000 --- a/packages/frontend-shared/js-built/url.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function query(obj: Record): string; -export declare function appendQuery(url: string, queryString: string): string; -export declare function extractDomain(url: string): string | null; -//# sourceMappingURL=url.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/url.d.ts.map b/packages/frontend-shared/js-built/url.d.ts.map deleted file mode 100644 index ad23442a36..0000000000 --- a/packages/frontend-shared/js-built/url.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../js/url.ts"],"names":[],"mappings":"AAUA,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CAQ5E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,iBAGxC"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/url.js b/packages/frontend-shared/js-built/url.js deleted file mode 100644 index ae908a58d8..0000000000 --- a/packages/frontend-shared/js-built/url.js +++ /dev/null @@ -1,17 +0,0 @@ -function query(obj) { - const params = Object.entries(obj).filter(([, v]) => Array.isArray(v) ? v.length : v !== void 0).reduce((a, [k, v]) => (a[k] = v, a), {}); - return Object.entries(params).map((p) => `${p[0]}=${encodeURIComponent(p[1])}`).join("&"); -} -function appendQuery(url, queryString) { - return `${url}${/\?/.test(url) ? url.endsWith("?") ? "" : "&" : "?"}${queryString}`; -} -function extractDomain(url) { - const match = url.match(/^(?:https?:)?(?:\/\/)?(?:[^@\n]+@)?([^:\/\n]+)/im); - return match ? match[1] : null; -} -export { - appendQuery, - extractDomain, - query -}; -//# sourceMappingURL=url.js.map diff --git a/packages/frontend-shared/js-built/url.js.map b/packages/frontend-shared/js-built/url.js.map deleted file mode 100644 index 2c78e52d24..0000000000 --- a/packages/frontend-shared/js-built/url.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/url.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\n/* obj\u3092\u691C\u67FB\u3057\u3066\n * 1. \u914D\u5217\u306B\u4F55\u3082\u5165\u3063\u3066\u3044\u306A\u3044\u6642\u306F\u30AF\u30A8\u30EA\u3092\u4ED8\u3051\u306A\u3044\n * 2. \u30D7\u30ED\u30D1\u30C6\u30A3\u304Cundefined\u306E\u6642\u306F\u30AF\u30A8\u30EA\u3092\u4ED8\u3051\u306A\u3044\n * \uFF08new URLSearchParams(obj)\u3067\u306F\u305D\u3053\u307E\u3067\u4E01\u5BE7\u306A\u3053\u3068\u3092\u3057\u3066\u304F\u308C\u306A\u3044\uFF09\n */\nexport function query(obj: Record): string {\n\tconst params = Object.entries(obj)\n\t\t.filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined) // eslint-disable-line @typescript-eslint/no-unnecessary-condition\n\t\t.reduce>((a, [k, v]) => (a[k] = v, a), {});\n\n\treturn Object.entries(params)\n\t\t.map((p) => `${p[0]}=${encodeURIComponent(p[1])}`)\n\t\t.join('&');\n}\n\nexport function appendQuery(url: string, queryString: string): string {\n\treturn `${url}${/\\?/.test(url) ? url.endsWith('?') ? '' : '&' : '?'}${queryString}`;\n}\n\nexport function extractDomain(url: string) {\n\tconst match = url.match(/^(?:https?:)?(?:\\/\\/)?(?:[^@\\n]+@)?([^:\\/\\n]+)/im);\n\treturn match ? match[1] : null;\n}\n"], - "mappings": "AAUO,SAAS,MAAM,KAAwD;AAC7E,QAAM,SAAS,OAAO,QAAQ,GAAG,EAC/B,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,MAAS,EAC/D,OAAkD,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAEpF,SAAO,OAAO,QAAQ,MAAM,EAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,EAChD,KAAK,GAAG;AACX;AAEO,SAAS,YAAY,KAAa,aAA6B;AACrE,SAAO,GAAG,GAAG,GAAG,KAAK,KAAK,GAAG,IAAI,IAAI,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG,GAAG,WAAW;AAClF;AAEO,SAAS,cAAc,KAAa;AAC1C,QAAM,QAAQ,IAAI,MAAM,kDAAkD;AAC1E,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC3B;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/use-document-visibility.d.ts b/packages/frontend-shared/js-built/use-document-visibility.d.ts deleted file mode 100644 index 54f585e14d..0000000000 --- a/packages/frontend-shared/js-built/use-document-visibility.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Ref } from 'vue'; -export declare function useDocumentVisibility(): Ref; -//# sourceMappingURL=use-document-visibility.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/use-document-visibility.d.ts.map b/packages/frontend-shared/js-built/use-document-visibility.d.ts.map deleted file mode 100644 index 3a8e063d1c..0000000000 --- a/packages/frontend-shared/js-built/use-document-visibility.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"use-document-visibility.d.ts","sourceRoot":"","sources":["../js/use-document-visibility.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,wBAAgB,qBAAqB,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAgBpE"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/use-document-visibility.js b/packages/frontend-shared/js-built/use-document-visibility.js deleted file mode 100644 index 9bca730a0f..0000000000 --- a/packages/frontend-shared/js-built/use-document-visibility.js +++ /dev/null @@ -1,18 +0,0 @@ -import { onMounted, onUnmounted, ref } from "vue"; -function useDocumentVisibility() { - const visibility = ref(document.visibilityState); - const onChange = () => { - visibility.value = document.visibilityState; - }; - onMounted(() => { - document.addEventListener("visibilitychange", onChange); - }); - onUnmounted(() => { - document.removeEventListener("visibilitychange", onChange); - }); - return visibility; -} -export { - useDocumentVisibility -}; -//# sourceMappingURL=use-document-visibility.js.map diff --git a/packages/frontend-shared/js-built/use-document-visibility.js.map b/packages/frontend-shared/js-built/use-document-visibility.js.map deleted file mode 100644 index 3efc6163b2..0000000000 --- a/packages/frontend-shared/js-built/use-document-visibility.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/use-document-visibility.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nimport { onMounted, onUnmounted, ref } from 'vue';\nimport type { Ref } from 'vue';\n\nexport function useDocumentVisibility(): Ref {\n\tconst visibility = ref(document.visibilityState);\n\n\tconst onChange = (): void => {\n\t\tvisibility.value = document.visibilityState;\n\t};\n\n\tonMounted(() => {\n\t\tdocument.addEventListener('visibilitychange', onChange);\n\t});\n\n\tonUnmounted(() => {\n\t\tdocument.removeEventListener('visibilitychange', onChange);\n\t});\n\n\treturn visibility;\n}\n"], - "mappings": "AAKA,SAAS,WAAW,aAAa,WAAW;AAGrC,SAAS,wBAAsD;AACrE,QAAM,aAAa,IAAI,SAAS,eAAe;AAE/C,QAAM,WAAW,MAAY;AAC5B,eAAW,QAAQ,SAAS;AAAA,EAC7B;AAEA,YAAU,MAAM;AACf,aAAS,iBAAiB,oBAAoB,QAAQ;AAAA,EACvD,CAAC;AAED,cAAY,MAAM;AACjB,aAAS,oBAAoB,oBAAoB,QAAQ;AAAA,EAC1D,CAAC;AAED,SAAO;AACR;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/use-interval.d.ts b/packages/frontend-shared/js-built/use-interval.d.ts deleted file mode 100644 index 5bfcb8d68b..0000000000 --- a/packages/frontend-shared/js-built/use-interval.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare function useInterval(fn: () => void, interval: number, options: { - immediate: boolean; - afterMounted: boolean; -}): (() => void) | undefined; -//# sourceMappingURL=use-interval.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/use-interval.d.ts.map b/packages/frontend-shared/js-built/use-interval.d.ts.map deleted file mode 100644 index 8a1da08ac9..0000000000 --- a/packages/frontend-shared/js-built/use-interval.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"use-interval.d.ts","sourceRoot":"","sources":["../js/use-interval.ts"],"names":[],"mappings":"AAOA,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACtB,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAmC3B"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/use-interval.js b/packages/frontend-shared/js-built/use-interval.js deleted file mode 100644 index 0f8e96382a..0000000000 --- a/packages/frontend-shared/js-built/use-interval.js +++ /dev/null @@ -1,34 +0,0 @@ -import { onActivated, onDeactivated, onMounted, onUnmounted } from "vue"; -function useInterval(fn, interval, options) { - if (Number.isNaN(interval)) return; - let intervalId = null; - if (options.afterMounted) { - onMounted(() => { - if (options.immediate) fn(); - intervalId = window.setInterval(fn, interval); - }); - } else { - if (options.immediate) fn(); - intervalId = window.setInterval(fn, interval); - } - const clear = () => { - if (intervalId) window.clearInterval(intervalId); - intervalId = null; - }; - onActivated(() => { - if (intervalId) return; - if (options.immediate) fn(); - intervalId = window.setInterval(fn, interval); - }); - onDeactivated(() => { - clear(); - }); - onUnmounted(() => { - clear(); - }); - return clear; -} -export { - useInterval -}; -//# sourceMappingURL=use-interval.js.map diff --git a/packages/frontend-shared/js-built/use-interval.js.map b/packages/frontend-shared/js-built/use-interval.js.map deleted file mode 100644 index fadabcf18a..0000000000 --- a/packages/frontend-shared/js-built/use-interval.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/use-interval.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nimport { onActivated, onDeactivated, onMounted, onUnmounted } from 'vue';\n\nexport function useInterval(fn: () => void, interval: number, options: {\n\timmediate: boolean;\n\tafterMounted: boolean;\n}): (() => void) | undefined {\n\tif (Number.isNaN(interval)) return;\n\n\tlet intervalId: number | null = null;\n\n\tif (options.afterMounted) {\n\t\tonMounted(() => {\n\t\t\tif (options.immediate) fn();\n\t\t\tintervalId = window.setInterval(fn, interval);\n\t\t});\n\t} else {\n\t\tif (options.immediate) fn();\n\t\tintervalId = window.setInterval(fn, interval);\n\t}\n\n\tconst clear = () => {\n\t\tif (intervalId) window.clearInterval(intervalId);\n\t\tintervalId = null;\n\t};\n\n\tonActivated(() => {\n\t\tif (intervalId) return;\n\t\tif (options.immediate) fn();\n\t\tintervalId = window.setInterval(fn, interval);\n\t});\n\n\tonDeactivated(() => {\n\t\tclear();\n\t});\n\n\tonUnmounted(() => {\n\t\tclear();\n\t});\n\n\treturn clear;\n}\n"], - "mappings": "AAKA,SAAS,aAAa,eAAe,WAAW,mBAAmB;AAE5D,SAAS,YAAY,IAAgB,UAAkB,SAGjC;AAC5B,MAAI,OAAO,MAAM,QAAQ,EAAG;AAE5B,MAAI,aAA4B;AAEhC,MAAI,QAAQ,cAAc;AACzB,cAAU,MAAM;AACf,UAAI,QAAQ,UAAW,IAAG;AAC1B,mBAAa,OAAO,YAAY,IAAI,QAAQ;AAAA,IAC7C,CAAC;AAAA,EACF,OAAO;AACN,QAAI,QAAQ,UAAW,IAAG;AAC1B,iBAAa,OAAO,YAAY,IAAI,QAAQ;AAAA,EAC7C;AAEA,QAAM,QAAQ,MAAM;AACnB,QAAI,WAAY,QAAO,cAAc,UAAU;AAC/C,iBAAa;AAAA,EACd;AAEA,cAAY,MAAM;AACjB,QAAI,WAAY;AAChB,QAAI,QAAQ,UAAW,IAAG;AAC1B,iBAAa,OAAO,YAAY,IAAI,QAAQ;AAAA,EAC7C,CAAC;AAED,gBAAc,MAAM;AACnB,UAAM;AAAA,EACP,CAAC;AAED,cAAY,MAAM;AACjB,UAAM;AAAA,EACP,CAAC;AAED,SAAO;AACR;", - "names": [] -} diff --git a/packages/frontend-shared/js-built/worker-multi-dispatch.d.ts b/packages/frontend-shared/js-built/worker-multi-dispatch.d.ts deleted file mode 100644 index c5778a75d2..0000000000 --- a/packages/frontend-shared/js-built/worker-multi-dispatch.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -declare function defaultUseWorkerNumber(prev: number): number; -type WorkerNumberGetter = (prev: number, totalWorkers: number) => number; -export declare class WorkerMultiDispatch { - private symbol; - private workers; - private terminated; - private prevWorkerNumber; - private getUseWorkerNumber; - private finalizationRegistry; - constructor(workerConstructor: () => Worker, concurrency: number, getUseWorkerNumber?: typeof defaultUseWorkerNumber); - postMessage(message: POST, options?: Transferable[] | StructuredSerializeOptions, useWorkerNumber?: WorkerNumberGetter): number; - addListener(callback: (this: Worker, ev: MessageEvent) => any, options?: boolean | AddEventListenerOptions): void; - removeListener(callback: (this: Worker, ev: MessageEvent) => any, options?: boolean | AddEventListenerOptions): void; - terminate(): void; - isTerminated(): boolean; - getWorkers(): Worker[]; - getSymbol(): symbol; -} -export {}; -//# sourceMappingURL=worker-multi-dispatch.d.ts.map \ No newline at end of file diff --git a/packages/frontend-shared/js-built/worker-multi-dispatch.d.ts.map b/packages/frontend-shared/js-built/worker-multi-dispatch.d.ts.map deleted file mode 100644 index af8de44252..0000000000 --- a/packages/frontend-shared/js-built/worker-multi-dispatch.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"worker-multi-dispatch.d.ts","sourceRoot":"","sources":["../js/worker-multi-dispatch.ts"],"names":[],"mappings":"AAKA,iBAAS,sBAAsB,CAAC,IAAI,EAAE,MAAM,UAE3C;AAED,KAAK,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;AAEzE,qBAAa,mBAAmB,CAAC,IAAI,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO;IAChE,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,oBAAoB,CAA+B;gBAE/C,iBAAiB,EAAE,MAAM,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,gCAAyB;IActG,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE,eAAe,GAAE,kBAA4C;IAkB/I,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB;IAOlH,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB;IAMrH,SAAS;IAUT,YAAY;IAIZ,UAAU;IAIV,SAAS;CAGhB"} \ No newline at end of file diff --git a/packages/frontend-shared/js-built/worker-multi-dispatch.js b/packages/frontend-shared/js-built/worker-multi-dispatch.js deleted file mode 100644 index 1649cdf987..0000000000 --- a/packages/frontend-shared/js-built/worker-multi-dispatch.js +++ /dev/null @@ -1,68 +0,0 @@ -function defaultUseWorkerNumber(prev) { - return prev + 1; -} -class WorkerMultiDispatch { - symbol = Symbol("WorkerMultiDispatch"); - workers = []; - terminated = false; - prevWorkerNumber = 0; - getUseWorkerNumber; - finalizationRegistry; - constructor(workerConstructor, concurrency, getUseWorkerNumber = defaultUseWorkerNumber) { - this.getUseWorkerNumber = getUseWorkerNumber; - for (let i = 0; i < concurrency; i++) { - this.workers.push(workerConstructor()); - } - this.finalizationRegistry = new FinalizationRegistry(() => { - this.terminate(); - }); - this.finalizationRegistry.register(this, this.symbol); - if (_DEV_) console.log("WorkerMultiDispatch: Created", this); - } - postMessage(message, options, useWorkerNumber = this.getUseWorkerNumber) { - let workerNumber = useWorkerNumber(this.prevWorkerNumber, this.workers.length); - workerNumber = Math.abs(Math.round(workerNumber)) % this.workers.length; - if (_DEV_) console.log("WorkerMultiDispatch: Posting message to worker", workerNumber, useWorkerNumber); - this.prevWorkerNumber = workerNumber; - if (Array.isArray(options)) { - this.workers[workerNumber].postMessage(message, options); - } else { - this.workers[workerNumber].postMessage(message, options); - } - return workerNumber; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - addListener(callback, options) { - this.workers.forEach((worker) => { - worker.addEventListener("message", callback, options); - }); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - removeListener(callback, options) { - this.workers.forEach((worker) => { - worker.removeEventListener("message", callback, options); - }); - } - terminate() { - this.terminated = true; - if (_DEV_) console.log("WorkerMultiDispatch: Terminating", this); - this.workers.forEach((worker) => { - worker.terminate(); - }); - this.workers = []; - this.finalizationRegistry.unregister(this); - } - isTerminated() { - return this.terminated; - } - getWorkers() { - return this.workers; - } - getSymbol() { - return this.symbol; - } -} -export { - WorkerMultiDispatch -}; -//# sourceMappingURL=worker-multi-dispatch.js.map diff --git a/packages/frontend-shared/js-built/worker-multi-dispatch.js.map b/packages/frontend-shared/js-built/worker-multi-dispatch.js.map deleted file mode 100644 index d364313c49..0000000000 --- a/packages/frontend-shared/js-built/worker-multi-dispatch.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../js/worker-multi-dispatch.ts"], - "sourcesContent": ["/*\n * SPDX-FileCopyrightText: syuilo and misskey-project\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nfunction defaultUseWorkerNumber(prev: number) {\n\treturn prev + 1;\n}\n\ntype WorkerNumberGetter = (prev: number, totalWorkers: number) => number;\n\nexport class WorkerMultiDispatch {\n\tprivate symbol = Symbol('WorkerMultiDispatch');\n\tprivate workers: Worker[] = [];\n\tprivate terminated = false;\n\tprivate prevWorkerNumber = 0;\n\tprivate getUseWorkerNumber: WorkerNumberGetter;\n\tprivate finalizationRegistry: FinalizationRegistry;\n\n\tconstructor(workerConstructor: () => Worker, concurrency: number, getUseWorkerNumber = defaultUseWorkerNumber) {\n\t\tthis.getUseWorkerNumber = getUseWorkerNumber;\n\t\tfor (let i = 0; i < concurrency; i++) {\n\t\t\tthis.workers.push(workerConstructor());\n\t\t}\n\n\t\tthis.finalizationRegistry = new FinalizationRegistry(() => {\n\t\t\tthis.terminate();\n\t\t});\n\t\tthis.finalizationRegistry.register(this, this.symbol);\n\n\t\tif (_DEV_) console.log('WorkerMultiDispatch: Created', this);\n\t}\n\n\tpublic postMessage(message: POST, options?: Transferable[] | StructuredSerializeOptions, useWorkerNumber: WorkerNumberGetter = this.getUseWorkerNumber) {\n\t\tlet workerNumber = useWorkerNumber(this.prevWorkerNumber, this.workers.length);\n\t\tworkerNumber = Math.abs(Math.round(workerNumber)) % this.workers.length;\n\t\tif (_DEV_) console.log('WorkerMultiDispatch: Posting message to worker', workerNumber, useWorkerNumber);\n\t\tthis.prevWorkerNumber = workerNumber;\n\n\t\t// \u4E0D\u6BDB\u3060\u304Cunion\u3092overload\u306B\u7A81\u3063\u8FBC\u3081\u306A\u3044\n\t\t// https://stackoverflow.com/questions/66507585/overload-signatures-union-types-and-no-overload-matches-this-call-error\n\t\t// https://github.com/microsoft/TypeScript/issues/14107\n\t\tif (Array.isArray(options)) {\n\t\t\tthis.workers[workerNumber].postMessage(message, options);\n\t\t} else {\n\t\t\tthis.workers[workerNumber].postMessage(message, options);\n\t\t}\n\t\treturn workerNumber;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic addListener(callback: (this: Worker, ev: MessageEvent) => any, options?: boolean | AddEventListenerOptions) {\n\t\tthis.workers.forEach(worker => {\n\t\t\tworker.addEventListener('message', callback, options);\n\t\t});\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic removeListener(callback: (this: Worker, ev: MessageEvent) => any, options?: boolean | AddEventListenerOptions) {\n\t\tthis.workers.forEach(worker => {\n\t\t\tworker.removeEventListener('message', callback, options);\n\t\t});\n\t}\n\n\tpublic terminate() {\n\t\tthis.terminated = true;\n\t\tif (_DEV_) console.log('WorkerMultiDispatch: Terminating', this);\n\t\tthis.workers.forEach(worker => {\n\t\t\tworker.terminate();\n\t\t});\n\t\tthis.workers = [];\n\t\tthis.finalizationRegistry.unregister(this);\n\t}\n\n\tpublic isTerminated() {\n\t\treturn this.terminated;\n\t}\n\n\tpublic getWorkers() {\n\t\treturn this.workers;\n\t}\n\n\tpublic getSymbol() {\n\t\treturn this.symbol;\n\t}\n}\n"], - "mappings": "AAKA,SAAS,uBAAuB,MAAc;AAC7C,SAAO,OAAO;AACf;AAIO,MAAM,oBAAsD;AAAA,EAC1D,SAAS,OAAO,qBAAqB;AAAA,EACrC,UAAoB,CAAC;AAAA,EACrB,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EAER,YAAY,mBAAiC,aAAqB,qBAAqB,wBAAwB;AAC9G,SAAK,qBAAqB;AAC1B,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACrC,WAAK,QAAQ,KAAK,kBAAkB,CAAC;AAAA,IACtC;AAEA,SAAK,uBAAuB,IAAI,qBAAqB,MAAM;AAC1D,WAAK,UAAU;AAAA,IAChB,CAAC;AACD,SAAK,qBAAqB,SAAS,MAAM,KAAK,MAAM;AAEpD,QAAI,MAAO,SAAQ,IAAI,gCAAgC,IAAI;AAAA,EAC5D;AAAA,EAEO,YAAY,SAAe,SAAuD,kBAAsC,KAAK,oBAAoB;AACvJ,QAAI,eAAe,gBAAgB,KAAK,kBAAkB,KAAK,QAAQ,MAAM;AAC7E,mBAAe,KAAK,IAAI,KAAK,MAAM,YAAY,CAAC,IAAI,KAAK,QAAQ;AACjE,QAAI,MAAO,SAAQ,IAAI,kDAAkD,cAAc,eAAe;AACtG,SAAK,mBAAmB;AAKxB,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC3B,WAAK,QAAQ,YAAY,EAAE,YAAY,SAAS,OAAO;AAAA,IACxD,OAAO;AACN,WAAK,QAAQ,YAAY,EAAE,YAAY,SAAS,OAAO;AAAA,IACxD;AACA,WAAO;AAAA,EACR;AAAA;AAAA,EAGO,YAAY,UAA2D,SAA6C;AAC1H,SAAK,QAAQ,QAAQ,YAAU;AAC9B,aAAO,iBAAiB,WAAW,UAAU,OAAO;AAAA,IACrD,CAAC;AAAA,EACF;AAAA;AAAA,EAGO,eAAe,UAA2D,SAA6C;AAC7H,SAAK,QAAQ,QAAQ,YAAU;AAC9B,aAAO,oBAAoB,WAAW,UAAU,OAAO;AAAA,IACxD,CAAC;AAAA,EACF;AAAA,EAEO,YAAY;AAClB,SAAK,aAAa;AAClB,QAAI,MAAO,SAAQ,IAAI,oCAAoC,IAAI;AAC/D,SAAK,QAAQ,QAAQ,YAAU;AAC9B,aAAO,UAAU;AAAA,IAClB,CAAC;AACD,SAAK,UAAU,CAAC;AAChB,SAAK,qBAAqB,WAAW,IAAI;AAAA,EAC1C;AAAA,EAEO,eAAe;AACrB,WAAO,KAAK;AAAA,EACb;AAAA,EAEO,aAAa;AACnB,WAAO,KAAK;AAAA,EACb;AAAA,EAEO,YAAY;AAClB,WAAO,KAAK;AAAA,EACb;AACD;", - "names": [] -} diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts deleted file mode 100644 index 730351f795..0000000000 --- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -/* eslint-disable @typescript-eslint/explicit-function-return-type */ -import { StoryObj } from '@storybook/vue3'; -import { expect, within } from '@storybook/test'; -import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.js'; -export const Default = { - render(args) { - return { - components: { - MkMisskeyFlavoredMarkdown, - }, - setup() { - return { - args, - }; - }, - computed: { - props() { - return { - ...this.args, - }; - }, - }, - template: '', - }; - }, - async play({ canvasElement, args }) { - const canvas = within(canvasElement); - if (args.plain) { - const aiHelloMiskist = canvas.getByText('@ai *Hello*, #Miskist!'); - await expect(aiHelloMiskist).toBeInTheDocument(); - } else { - const ai = canvas.getByText('@ai'); - await expect(ai).toBeInTheDocument(); - await expect(ai.closest('a')).toHaveAttribute('href', '/@ai'); - const hello = canvas.getByText('Hello'); - await expect(hello).toBeInTheDocument(); - await expect(hello.style.fontStyle).toBe('oblique'); - const miskist = canvas.getByText('#Miskist'); - await expect(miskist).toBeInTheDocument(); - await expect(miskist).toHaveAttribute('href', args.isNote ?? true ? '/tags/Miskist' : '/user-tags/Miskist'); - } - const heart = canvas.getByAltText('โค'); - await expect(heart).toBeInTheDocument(); - await expect(heart).toHaveAttribute('src', '/twemoji/2764.svg'); - }, - args: { - text: '@ai *Hello*, #Miskist! โค', - }, - parameters: { - layout: 'centered', - }, -} satisfies StoryObj; -export const Plain = { - ...Default, - args: { - ...Default.args, - plain: true, - }, -} satisfies StoryObj; -export const Nowrap = { - ...Default, - args: { - ...Default.args, - nowrap: true, - }, -} satisfies StoryObj; -export const IsNotNote = { - ...Default, - args: { - ...Default.args, - isNote: false, - }, -} satisfies StoryObj; diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts deleted file mode 100644 index c30aa263a8..0000000000 --- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts +++ /dev/null @@ -1,491 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -import { VNode, h, SetupContext, provide } from 'vue'; -import * as mfm from 'cherrypick-mfm-js'; -import * as Misskey from 'cherrypick-js'; -import temml from 'temml/dist/temml.mjs'; -import MkUrl from '@/components/global/MkUrl.vue'; -import MkTime from '@/components/global/MkTime.vue'; -import MkLink from '@/components/MkLink.vue'; -import MkMention from '@/components/MkMention.vue'; -import MkEmoji from '@/components/global/MkEmoji.vue'; -import MkCustomEmoji from '@/components/global/MkCustomEmoji.vue'; -import MkCode from '@/components/MkCode.vue'; -import MkCodeInline from '@/components/MkCodeInline.vue'; -import MkGoogle from '@/components/MkGoogle.vue'; -import MkSparkle from '@/components/MkSparkle.vue'; -import MkA, { MkABehavior } from '@/components/global/MkA.vue'; -import { host } from '@/config.js'; -import { defaultStore } from '@/store.js'; -import { nyaize as doNyaize } from '@/scripts/nyaize.js'; -import { safeParseFloat } from '@/scripts/safe-parse.js'; - -const QUOTE_STYLE = ` -display: block; -margin: 8px; -padding: 6px 0 6px 12px; -color: var(--fg); -border-left: solid 3px var(--fg); -opacity: 0.7; -`.split('\n').join(' '); - -type MfmProps = { - text: string; - plain?: boolean; - nowrap?: boolean; - author?: Misskey.entities.UserLite; - isNote?: boolean; - emojiUrls?: Record; - rootScale?: number; - nyaize?: boolean | 'respect'; - parsedNodes?: mfm.MfmNode[] | null; - enableEmojiMenu?: boolean; - enableEmojiMenuReaction?: boolean; - linkNavigationBehavior?: MkABehavior; - enableAnimatedMfm?: boolean; -}; - -type MfmEvents = { - clickEv(id: string): void; -}; - -// eslint-disable-next-line import/no-default-export -export default function (props: MfmProps, { emit }: { emit: SetupContext['emit'] }) { - provide('linkNavigationBehavior', props.linkNavigationBehavior); - - const isNote = props.isNote ?? true; - const shouldNyaize = props.nyaize ? props.nyaize === 'respect' ? props.author?.isCat : false : false; - - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (props.text == null || props.text === '') return; - - const rootAst = props.parsedNodes ?? (props.plain ? mfm.parseSimple : mfm.parse)(props.text); - - const validTime = (t: string | boolean | null | undefined) => { - if (t == null) return null; - if (typeof t === 'boolean') return null; - return t.match(/^\-?[0-9.]+s$/) ? t : null; - }; - - const validColor = (c: unknown): string | null => { - if (typeof c !== 'string') return null; - return c.match(/^[0-9a-f]{3,6}$/i) ? c : null; - }; - - const useAnim = props.enableAnimatedMfm ?? (defaultStore.state.advancedMfm && defaultStore.state.animatedMfm); - - /** - * Gen Vue Elements from MFM AST - * @param ast MFM AST - * @param scale How times large the text is - * @param disableNyaize Whether nyaize is disabled or not - */ - const genEl = (ast: mfm.MfmNode[], scale: number, disableNyaize = false) => ast.map((token): VNode | string | (VNode | string)[] => { - switch (token.type) { - case 'text': { - let text = token.props.text.replace(/(\r\n|\n|\r)/g, '\n'); - if (!disableNyaize && shouldNyaize) { - text = doNyaize(text); - } - - if (!props.plain) { - const res: (VNode | string)[] = []; - for (const t of text.split('\n')) { - res.push(h('br')); - res.push(t); - } - res.shift(); - return res; - } else { - return [text.replace(/\n/g, ' ')]; - } - } - - case 'bold': { - return [h('b', genEl(token.children, scale))]; - } - - case 'strike': { - return [h('del', genEl(token.children, scale))]; - } - - case 'italic': { - return h('i', { - style: 'font-style: oblique;', - }, genEl(token.children, scale)); - } - - case 'fn': { - // TODO: CSSใ‚’ๆ–‡ๅญ—ๅˆ—ใง็ต„ใฟ็ซ‹ใฆใฆใ„ใใจ token.props.args.~~~ ็ตŒ็”ฑใงCSSใ‚คใƒณใ‚ธใ‚งใ‚ฏใ‚ทใƒงใƒณใงใใ‚‹ใฎใงใ‚ˆใ—ใชใซใ‚„ใ‚‹ - let style: string | undefined; - switch (token.props.name) { - case 'tada': { - const speed = validTime(token.props.args.speed) ?? '1s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = 'font-size: 150%;' + (useAnim ? `animation: global-tada ${speed} linear infinite both; animation-delay: ${delay};` : ''); - break; - } - case 'jelly': { - const speed = validTime(token.props.args.speed) ?? '1s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = (useAnim ? `animation: mfm-rubberBand ${speed} linear infinite both; animation-delay: ${delay};` : ''); - break; - } - case 'twitch': { - const speed = validTime(token.props.args.speed) ?? '0.5s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = useAnim ? `animation: mfm-twitch ${speed} ease infinite; animation-delay: ${delay};` : ''; - break; - } - case 'shake': { - const speed = validTime(token.props.args.speed) ?? '0.5s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = useAnim ? `animation: mfm-shake ${speed} ease infinite; animation-delay: ${delay};` : ''; - break; - } - case 'spin': { - const direction = - token.props.args.left ? 'reverse' : - token.props.args.alternate ? 'alternate' : - 'normal'; - const anime = - token.props.args.x ? 'mfm-spinX' : - token.props.args.y ? 'mfm-spinY' : - 'mfm-spin'; - const speed = validTime(token.props.args.speed) ?? '1.5s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = useAnim ? `animation: ${anime} ${speed} linear infinite; animation-direction: ${direction}; animation-delay: ${delay};` : ''; - break; - } - case 'jump': { - const speed = validTime(token.props.args.speed) ?? '0.75s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = useAnim ? `animation: mfm-jump ${speed} linear infinite; animation-delay: ${delay};` : ''; - break; - } - case 'bounce': { - const speed = validTime(token.props.args.speed) ?? '0.75s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = useAnim ? `animation: mfm-bounce ${speed} linear infinite; transform-origin: center bottom; animation-delay: ${delay};` : ''; - break; - } - case 'flip': { - const transform = - (token.props.args.h && token.props.args.v) ? 'scale(-1, -1)' : - token.props.args.v ? 'scaleY(-1)' : - 'scaleX(-1)'; - style = `transform: ${transform};`; - break; - } - case 'x2': { - return h('span', { - class: defaultStore.state.advancedMfm ? 'mfm-x2' : '', - }, genEl(token.children, scale * 2)); - } - case 'x3': { - return h('span', { - class: defaultStore.state.advancedMfm ? 'mfm-x3' : '', - }, genEl(token.children, scale * 3)); - } - case 'x4': { - return h('span', { - class: defaultStore.state.advancedMfm ? 'mfm-x4' : '', - }, genEl(token.children, scale * 4)); - } - case 'font': { - const family = - token.props.args.serif ? 'serif' : - token.props.args.monospace ? 'monospace' : - token.props.args.cursive ? 'cursive' : - token.props.args.fantasy ? 'fantasy' : - token.props.args.emoji ? 'emoji' : - token.props.args.math ? 'math' : - null; - if (family) style = `font-family: ${family};`; - break; - } - case 'blur': { - return h('span', { - class: '_mfm_blur_', - }, genEl(token.children, scale)); - } - case 'rainbow': { - if (!useAnim) { - return h('span', { - class: '_mfm_rainbow_fallback_', - }, genEl(token.children, scale)); - } - const speed = validTime(token.props.args.speed) ?? '1s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = `animation: mfm-rainbow ${speed} linear infinite; animation-delay: ${delay};`; - break; - } - case 'sparkle': { - if (!useAnim) { - return genEl(token.children, scale); - } - return h(MkSparkle, {}, genEl(token.children, scale)); - } - case 'fade': { - if (!useAnim) { - return genEl(token.children, scale); - } - const speed = validTime(token.props.args.speed) ?? '4s'; - const delay = validTime(token.props.args.delay) ?? '0s'; - style = `animation: mfm-fade ${speed} linear infinite; animation-delay: ${delay};`; - break; - } - case 'rotate': { - const degrees = safeParseFloat(token.props.args.deg) ?? 90; - style = `transform: rotate(${degrees}deg); transform-origin: center center;`; - break; - } - case 'position': { - if (!defaultStore.state.advancedMfm) break; - const x = safeParseFloat(token.props.args.x) ?? 0; - const y = safeParseFloat(token.props.args.y) ?? 0; - style = `transform: translateX(${x}em) translateY(${y}em);`; - break; - } - case 'scale': { - if (!defaultStore.state.advancedMfm) { - style = ''; - break; - } - const x = Math.min(safeParseFloat(token.props.args.x) ?? 1, 5); - const y = Math.min(safeParseFloat(token.props.args.y) ?? 1, 5); - style = `transform: scale(${x}, ${y});`; - scale = scale * Math.max(x, y); - break; - } - case 'fg': { - let color = validColor(token.props.args.color); - color = color ?? 'f00'; - style = `color: #${color}; overflow-wrap: anywhere;`; - break; - } - case 'bg': { - let color = validColor(token.props.args.color); - color = color ?? 'f00'; - style = `background-color: #${color}; overflow-wrap: anywhere;`; - break; - } - case 'border': { - let color = validColor(token.props.args.color); - color = color ? `#${color}` : 'var(--accent)'; - let b_style = token.props.args.style; - if ( - typeof b_style !== 'string' || - !['hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset'] - .includes(b_style) - ) b_style = 'solid'; - const width = safeParseFloat(token.props.args.width) ?? 1; - const radius = safeParseFloat(token.props.args.radius) ?? 0; - style = `border: ${width}px ${b_style} ${color}; border-radius: ${radius}px;${token.props.args.noclip ? '' : ' overflow: clip;'}`; - break; - } - case 'ruby': { - if (token.children.length === 1) { - const child = token.children[0]; - let text = child.type === 'text' ? child.props.text : ''; - if (!disableNyaize && shouldNyaize) { - text = doNyaize(text); - } - return h('ruby', {}, [text.split(' ')[0], h('rt', text.split(' ')[1])]); - } else { - const rt = token.children.at(-1)!; - let text = rt.type === 'text' ? rt.props.text : ''; - if (!disableNyaize && shouldNyaize) { - text = doNyaize(text); - } - return h('ruby', {}, [...genEl(token.children.slice(0, token.children.length - 1), scale), h('rt', text.trim())]); - } - } - case 'unixtime': { - const child = token.children[0]; - const unixtime = parseInt(child.type === 'text' ? child.props.text : ''); - return h('span', { - style: 'display: inline-block; font-size: 90%; border: solid 1px var(--divider); border-radius: 999px; padding: 4px 10px 4px 6px;', - }, [ - h('i', { - class: 'ti ti-clock', - style: 'margin-right: 0.25em;', - }), - h(MkTime, { - key: Math.random(), - time: unixtime * 1000, - mode: 'detail', - }), - ]); - } - case 'clickable': { - return h('span', { onClick(ev: MouseEvent): void { - ev.stopPropagation(); - ev.preventDefault(); - const clickEv = typeof token.props.args.ev === 'string' ? token.props.args.ev : ''; - emit('clickEv', clickEv); - } }, genEl(token.children, scale)); - } - } - if (style === undefined) { - return h('span', {}, ['$[', token.props.name, ' ', ...genEl(token.children, scale), ']']); - } else { - return h('span', { - style: 'display: inline-block; ' + style, - }, genEl(token.children, scale)); - } - } - - case 'small': { - return [h('small', { - style: 'opacity: 0.7;', - }, genEl(token.children, scale))]; - } - - case 'center': { - return [h('div', { - style: 'text-align:center;', - }, genEl(token.children, scale))]; - } - - case 'url': { - return [h(MkUrl, { - key: Math.random(), - url: token.props.url, - rel: 'nofollow noopener', - host: props.author?.host, - })]; - } - - case 'link': { - return [h(MkLink, { - key: Math.random(), - url: token.props.url, - rel: 'nofollow noopener', - host: props.author?.host, - }, genEl(token.children, scale, true))]; - } - - case 'mention': { - return [h(MkMention, { - key: Math.random(), - host: (token.props.host == null && props.author && props.author.host != null ? props.author.host : token.props.host) ?? host, - username: token.props.username, - })]; - } - - case 'hashtag': { - return [h(MkA, { - key: Math.random(), - to: isNote ? `/tags/${encodeURIComponent(token.props.hashtag)}` : `/user-tags/${encodeURIComponent(token.props.hashtag)}`, - style: 'color:var(--hashtag);', - }, `#${token.props.hashtag}`)]; - } - - case 'blockCode': { - return [h(MkCode, { - key: Math.random(), - code: token.props.code, - lang: token.props.lang ?? undefined, - })]; - } - - case 'inlineCode': { - return [h(MkCodeInline, { - key: Math.random(), - code: token.props.code, - })]; - } - - case 'quote': { - if (!props.nowrap) { - return [h('div', { - style: QUOTE_STYLE, - }, genEl(token.children, scale, true))]; - } else { - return [h('span', { - style: QUOTE_STYLE, - }, genEl(token.children, scale, true))]; - } - } - - case 'emojiCode': { - if (props.author?.host == null) { - return [h(MkCustomEmoji, { - key: Math.random(), - name: token.props.name, - normal: props.plain, - host: null, - useOriginalSize: scale >= 2.5, - menu: props.enableEmojiMenu, - menuReaction: props.enableEmojiMenuReaction, - fallbackToImage: false, - })]; - } else { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (props.emojiUrls && (props.emojiUrls[token.props.name] == null)) { - return [h('span', `:${token.props.name}:`)]; - } else { - return [h(MkCustomEmoji, { - key: Math.random(), - name: token.props.name, - url: props.emojiUrls && props.emojiUrls[token.props.name], - normal: props.plain, - host: props.author.host, - useOriginalSize: scale >= 2.5, - menu: props.enableEmojiMenu, - menuReaction: props.enableEmojiMenuReaction, - })]; - } - } - } - - case 'unicodeEmoji': { - return [h(MkEmoji, { - key: Math.random(), - emoji: token.props.emoji, - menu: props.enableEmojiMenu, - menuReaction: props.enableEmojiMenuReaction, - })]; - } - - case 'mathInline': { - const ret = document.createElement('span'); - temml.render(token.props.formula, ret, {}); - return [h('span', { innerHTML: ret.innerHTML })]; - } - - case 'mathBlock': { - const ret = document.createElement('div'); - temml.render(token.props.formula, ret, { displayMode: true }); - return [h('div', { innerHTML: ret.innerHTML })]; - } - - case 'search': { - return [h(MkGoogle, { - key: Math.random(), - q: token.props.query, - })]; - } - - case 'plain': { - return [h('span', genEl(token.children, scale, true))]; - } - - default: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - console.error('unrecognized ast type:', (token as any).type); - - return []; - } - } - }).flat(Infinity) as (VNode | string)[]; - - return h('span', { - // https://codeday.me/jp/qa/20190424/690106.html - style: props.nowrap ? 'white-space: pre; word-wrap: normal; overflow: hidden; text-overflow: ellipsis;' : 'white-space: pre-wrap;', - }, genEl(rootAst, props.rootScale ?? 1)); -} diff --git a/packages/frontend/src/config.ts b/packages/frontend/src/config.ts deleted file mode 100644 index 77d3f92f81..0000000000 --- a/packages/frontend/src/config.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -import { miLocalStorage } from '@/local-storage.js'; - -const address = new URL(document.querySelector('meta[property="instance_url"]')?.content || location.href); -const siteName = document.querySelector('meta[property="og:site_name"]')?.content; - -export const host = address.host; -export const hostname = address.hostname; -export const url = address.origin; -export const apiUrl = location.origin + '/api'; -export const wsOrigin = location.origin; -export const lang = miLocalStorage.getItem('lang') ?? 'en-US'; -export const langs = _LANGS_; -const preParseLocale = miLocalStorage.getItem('locale'); -export let locale = preParseLocale ? JSON.parse(preParseLocale) : null; -export const version = _VERSION_; -export const basedMisskeyVersion = _BASEDMISSKEYVERSION_; -export const instanceName = siteName === 'CherryPick' || siteName == null ? host : siteName; -export const ui = miLocalStorage.getItem('ui'); -export const debug = miLocalStorage.getItem('debug') === 'true'; - -export function updateLocale(newLocale): void { - locale = newLocale; -} diff --git a/packages/frontend/src/const.ts b/packages/frontend/src/const.ts deleted file mode 100644 index 32e3f91ee0..0000000000 --- a/packages/frontend/src/const.ts +++ /dev/null @@ -1,149 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -// ใƒ–ใƒฉใ‚ฆใ‚ถใง็›ดๆŽฅ่กจ็คบใ™ใ‚‹ใ“ใจใ‚’่จฑๅฏใ™ใ‚‹ใƒ•ใ‚กใ‚คใƒซใฎ็จฎ้กžใฎใƒชใ‚นใƒˆ -// ใ“ใ“ใซๅซใพใ‚Œใชใ„ใ‚‚ใฎใฏ application/octet-stream ใจใ—ใฆใƒฌใ‚นใƒใƒณใ‚นใ•ใ‚Œใ‚‹ -// SVGใฏXSSใ‚’็”Ÿใ‚€ใฎใง่จฑๅฏใ—ใชใ„ -export const FILE_TYPE_BROWSERSAFE = [ - // Images - 'image/png', - 'image/gif', - 'image/jpeg', - 'image/webp', - 'image/avif', - 'image/apng', - 'image/bmp', - 'image/tiff', - 'image/x-icon', - - // OggS - 'audio/opus', - 'video/ogg', - 'audio/ogg', - 'application/ogg', - - // ISO/IEC base media file format - 'video/quicktime', - 'video/mp4', - 'audio/mp4', - 'video/x-m4v', - 'audio/x-m4a', - 'video/3gpp', - 'video/3gpp2', - - 'video/mpeg', - 'audio/mpeg', - - 'video/webm', - 'audio/webm', - - 'audio/aac', - - // see https://github.com/misskey-dev/misskey/pull/10686 - 'audio/flac', - 'audio/wav', - // backward compatibility - 'audio/x-flac', - 'audio/vnd.wave', -]; -/* -https://github.com/sindresorhus/file-type/blob/main/supported.js -https://github.com/sindresorhus/file-type/blob/main/core.js -https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers -*/ - -export const notificationTypes = [ - 'note', - 'follow', - 'mention', - 'reply', - 'renote', - 'quote', - 'reaction', - 'pollEnded', - 'receiveFollowRequest', - 'followRequestAccepted', - 'groupInvited', - 'roleAssigned', - 'achievementEarned', - 'scheduleNote', - 'app', - 'test', - 'pollVote', -] as const; -export const obsoleteNotificationTypes = ['pollVote'/*, 'groupInvited'*/] as const; - -export const ROLE_POLICIES = [ - 'gtlAvailable', - 'ltlAvailable', - 'canPublicNote', - 'canEditNote', - 'scheduleNoteMax', - 'mentionLimit', - 'canInvite', - 'inviteLimit', - 'inviteLimitCycle', - 'inviteExpirationTime', - 'canManageCustomEmojis', - 'canManageAvatarDecorations', - 'canSearchNotes', - 'canAdvancedSearchNotes', - 'canUseTranslator', - 'canHideAds', - 'driveCapacityMb', - 'alwaysMarkNsfw', - 'canUpdateBioMedia', - 'pinLimit', - 'antennaLimit', - 'wordMuteLimit', - 'webhookLimit', - 'clipLimit', - 'noteEachClipsLimit', - 'userListLimit', - 'userEachUserListsLimit', - 'rateLimitFactor', - 'avatarDecorationLimit', - 'fileSizeLimit', - 'mutualLinkSectionLimit', - 'mutualLinkLimit', -] as const; - -// ใชใ‚“ใ‹ๅ‹•ใ‹ใชใ„ -//export const CURRENT_STICKY_TOP = Symbol('CURRENT_STICKY_TOP'); -//export const CURRENT_STICKY_BOTTOM = Symbol('CURRENT_STICKY_BOTTOM'); -export const CURRENT_STICKY_TOP = 'CURRENT_STICKY_TOP'; -export const CURRENT_STICKY_BOTTOM = 'CURRENT_STICKY_BOTTOM'; - -export const DEFAULT_SERVER_ERROR_IMAGE_URL = 'https://xn--931a.moe/assets/error.jpg'; -export const DEFAULT_NOT_FOUND_IMAGE_URL = 'https://xn--931a.moe/assets/not-found.jpg'; -export const DEFAULT_INFO_IMAGE_URL = 'https://xn--931a.moe/assets/info.jpg'; - -export const MFM_TAGS = ['tada', 'jelly', 'twitch', 'shake', 'spin', 'jump', 'bounce', 'flip', 'x2', 'x3', 'x4', 'scale', 'position', 'fg', 'bg', 'border', 'font', 'blur', 'rainbow', 'sparkle', 'fade', 'rotate', 'ruby', 'unixtime']; -export const MFM_PARAMS: Record = { - tada: ['speed=', 'delay='], - jelly: ['speed=', 'delay='], - twitch: ['speed=', 'delay='], - shake: ['speed=', 'delay='], - spin: ['speed=', 'delay=', 'left', 'alternate', 'x', 'y'], - jump: ['speed=', 'delay='], - bounce: ['speed=', 'delay='], - flip: ['h', 'v'], - x2: [], - x3: [], - x4: [], - scale: ['x=', 'y='], - position: ['x=', 'y='], - fg: ['color='], - bg: ['color='], - border: ['width=', 'style=', 'color=', 'radius=', 'noclip'], - font: ['serif', 'monospace', 'cursive', 'fantasy', 'emoji', 'math'], - blur: [], - rainbow: ['speed=', 'delay='], - fade: ['speed=', 'delay='], - rotate: ['deg='], - ruby: [], - unixtime: [], -}; -export const HTML_TAGS = ['bold', 'strike', 'italic', 'small', 'center', 'plain', 'inlinecode', 'blockcode', 'mathinline', 'mathblock']; diff --git a/packages/frontend/src/emojilist.json b/packages/frontend/src/emojilist.json deleted file mode 100644 index 75d5c34d71..0000000000 --- a/packages/frontend/src/emojilist.json +++ /dev/null @@ -1,1805 +0,0 @@ -[ - ["๐Ÿ˜€", "grinning", 0], - ["๐Ÿ˜ฌ", "grimacing", 0], - ["๐Ÿ˜", "grin", 0], - ["๐Ÿ˜‚", "joy", 0], - ["๐Ÿคฃ", "rofl", 0], - ["๐Ÿฅณ", "partying", 0], - ["๐Ÿ˜ƒ", "smiley", 0], - ["๐Ÿ˜„", "smile", 0], - ["๐Ÿ˜…", "sweat_smile", 0], - ["๐Ÿฅฒ", "smiling_face_with_tear", 0], - ["๐Ÿ˜†", "laughing", 0], - ["๐Ÿ˜‡", "innocent", 0], - ["๐Ÿ˜‰", "wink", 0], - ["๐Ÿ˜Š", "blush", 0], - ["๐Ÿ™‚", "slightly_smiling_face", 0], - ["๐Ÿ™ƒ", "upside_down_face", 0], - ["โ˜บ๏ธ", "relaxed", 0], - ["๐Ÿ˜‹", "yum", 0], - ["๐Ÿ˜Œ", "relieved", 0], - ["๐Ÿ˜", "heart_eyes", 0], - ["๐Ÿฅฐ", "smiling_face_with_three_hearts", 0], - ["๐Ÿ˜˜", "kissing_heart", 0], - ["๐Ÿ˜—", "kissing", 0], - ["๐Ÿ˜™", "kissing_smiling_eyes", 0], - ["๐Ÿ˜š", "kissing_closed_eyes", 0], - ["๐Ÿ˜œ", "stuck_out_tongue_winking_eye", 0], - ["๐Ÿคช", "zany", 0], - ["๐Ÿคจ", "raised_eyebrow", 0], - ["๐Ÿง", "monocle", 0], - ["๐Ÿ˜", "stuck_out_tongue_closed_eyes", 0], - ["๐Ÿ˜›", "stuck_out_tongue", 0], - ["๐Ÿค‘", "money_mouth_face", 0], - ["๐Ÿค“", "nerd_face", 0], - ["๐Ÿฅธ", "disguised_face", 0], - ["๐Ÿ˜Ž", "sunglasses", 0], - ["๐Ÿคฉ", "star_struck", 0], - ["๐Ÿคก", "clown_face", 0], - ["๐Ÿค ", "cowboy_hat_face", 0], - ["๐Ÿค—", "hugs", 0], - ["๐Ÿ˜", "smirk", 0], - ["๐Ÿ˜ถ", "no_mouth", 0], - ["๐Ÿ˜", "neutral_face", 0], - ["๐Ÿ˜‘", "expressionless", 0], - ["๐Ÿ˜’", "unamused", 0], - ["๐Ÿ™„", "roll_eyes", 0], - ["๐Ÿค”", "thinking", 0], - ["๐Ÿคฅ", "lying_face", 0], - ["๐Ÿคญ", "hand_over_mouth", 0], - ["๐Ÿคซ", "shushing", 0], - ["๐Ÿคฌ", "symbols_over_mouth", 0], - ["๐Ÿคฏ", "exploding_head", 0], - ["๐Ÿ˜ณ", "flushed", 0], - ["๐Ÿ˜ž", "disappointed", 0], - ["๐Ÿ˜Ÿ", "worried", 0], - ["๐Ÿ˜ ", "angry", 0], - ["๐Ÿ˜ก", "rage", 0], - ["๐Ÿ˜”", "pensive", 0], - ["๐Ÿ˜•", "confused", 0], - ["๐Ÿ™", "slightly_frowning_face", 0], - ["โ˜น", "frowning_face", 0], - ["๐Ÿ˜ฃ", "persevere", 0], - ["๐Ÿ˜–", "confounded", 0], - ["๐Ÿ˜ซ", "tired_face", 0], - ["๐Ÿ˜ฉ", "weary", 0], - ["๐Ÿฅบ", "pleading", 0], - ["๐Ÿ˜ค", "triumph", 0], - ["๐Ÿ˜ฎ", "open_mouth", 0], - ["๐Ÿ˜ฑ", "scream", 0], - ["๐Ÿ˜จ", "fearful", 0], - ["๐Ÿ˜ฐ", "cold_sweat", 0], - ["๐Ÿ˜ฏ", "hushed", 0], - ["๐Ÿ˜ฆ", "frowning", 0], - ["๐Ÿ˜ง", "anguished", 0], - ["๐Ÿ˜ข", "cry", 0], - ["๐Ÿ˜ฅ", "disappointed_relieved", 0], - ["๐Ÿคค", "drooling_face", 0], - ["๐Ÿ˜ช", "sleepy", 0], - ["๐Ÿ˜“", "sweat", 0], - ["๐Ÿฅต", "hot", 0], - ["๐Ÿฅถ", "cold", 0], - ["๐Ÿ˜ญ", "sob", 0], - ["๐Ÿ˜ต", "dizzy_face", 0], - ["๐Ÿ˜ฒ", "astonished", 0], - ["๐Ÿค", "zipper_mouth_face", 0], - ["๐Ÿคข", "nauseated_face", 0], - ["๐Ÿคง", "sneezing_face", 0], - ["๐Ÿคฎ", "vomiting", 0], - ["๐Ÿ˜ท", "mask", 0], - ["๐Ÿค’", "face_with_thermometer", 0], - ["๐Ÿค•", "face_with_head_bandage", 0], - ["๐Ÿฅด", "woozy", 0], - ["๐Ÿฅฑ", "yawning", 0], - ["๐Ÿ˜ด", "sleeping", 0], - ["๐Ÿ’ค", "zzz", 0], - ["๐Ÿ˜ถโ€๐ŸŒซ๏ธ", "face_in_clouds", 0], - ["๐Ÿ˜ฎโ€๐Ÿ’จ", "face_exhaling", 0], - ["๐Ÿ˜ตโ€๐Ÿ’ซ", "face_with_spiral_eyes", 0], - ["๐Ÿซ ", "melting_face", 0], - ["๐Ÿซข", "face_with_open_eyes_and_hand_over_mouth", 0], - ["๐Ÿซฃ", "face_with_peeking_eye", 0], - ["๐Ÿซก", "saluting_face", 0], - ["๐Ÿซฅ", "dotted_line_face", 0], - ["๐Ÿซค", "face_with_diagonal_mouth", 0], - ["๐Ÿฅน", "face_holding_back_tears", 0], - ["๐Ÿซจ", "shaking_face", 0], - ["๐Ÿ’ฉ", "poop", 0], - ["๐Ÿ˜ˆ", "smiling_imp", 0], - ["๐Ÿ‘ฟ", "imp", 0], - ["๐Ÿ‘น", "japanese_ogre", 0], - ["๐Ÿ‘บ", "japanese_goblin", 0], - ["๐Ÿ’€", "skull", 0], - ["๐Ÿ‘ป", "ghost", 0], - ["๐Ÿ‘ฝ", "alien", 0], - ["๐Ÿค–", "robot", 0], - ["๐Ÿ˜บ", "smiley_cat", 0], - ["๐Ÿ˜ธ", "smile_cat", 0], - ["๐Ÿ˜น", "joy_cat", 0], - ["๐Ÿ˜ป", "heart_eyes_cat", 0], - ["๐Ÿ˜ผ", "smirk_cat", 0], - ["๐Ÿ˜ฝ", "kissing_cat", 0], - ["๐Ÿ™€", "scream_cat", 0], - ["๐Ÿ˜ฟ", "crying_cat_face", 0], - ["๐Ÿ˜พ", "pouting_cat", 0], - ["๐Ÿคฒ", "palms_up", 1], - ["๐Ÿ™Œ", "raised_hands", 1], - ["๐Ÿ‘", "clap", 1], - ["๐Ÿ‘‹", "wave", 1], - ["๐Ÿค™", "call_me_hand", 1], - ["๐Ÿ‘", "+1", 1], - ["๐Ÿ‘Ž", "-1", 1], - ["๐Ÿ‘Š", "facepunch", 1], - ["โœŠ", "fist", 1], - ["๐Ÿค›", "fist_left", 1], - ["๐Ÿคœ", "fist_right", 1], - ["๐Ÿซท", "leftwards_pushing_hand", 1], - ["๐Ÿซธ", "rightwards_pushing_hand", 1], - ["โœŒ", "v", 1], - ["๐Ÿ‘Œ", "ok_hand", 1], - ["โœ‹", "raised_hand", 1], - ["๐Ÿคš", "raised_back_of_hand", 1], - ["๐Ÿ‘", "open_hands", 1], - ["๐Ÿ’ช", "muscle", 1], - ["๐Ÿฆพ", "mechanical_arm", 1], - ["๐Ÿ™", "pray", 1], - ["๐Ÿฆถ", "foot", 1], - ["๐Ÿฆต", "leg", 1], - ["๐Ÿฆฟ", "mechanical_leg", 1], - ["๐Ÿค", "handshake", 1], - ["โ˜", "point_up", 1], - ["๐Ÿ‘†", "point_up_2", 1], - ["๐Ÿ‘‡", "point_down", 1], - ["๐Ÿ‘ˆ", "point_left", 1], - ["๐Ÿ‘‰", "point_right", 1], - ["๐Ÿ–•", "fu", 1], - ["๐Ÿ–", "raised_hand_with_fingers_splayed", 1], - ["๐ŸคŸ", "love_you", 1], - ["๐Ÿค˜", "metal", 1], - ["๐Ÿคž", "crossed_fingers", 1], - ["๐Ÿ––", "vulcan_salute", 1], - ["โœ", "writing_hand", 1], - ["๐Ÿซฐ", "hand_with_index_finger_and_thumb_crossed", 1], - ["๐Ÿซฑ", "rightwards_hand", 1], - ["๐Ÿซฒ", "leftwards_hand", 1], - ["๐Ÿซณ", "palm_down_hand", 1], - ["๐Ÿซด", "palm_up_hand", 1], - ["๐Ÿซต", "index_pointing_at_the_viewer", 1], - ["๐Ÿซถ", "heart_hands", 1], - ["๐Ÿค", "pinching_hand", 1], - ["๐ŸคŒ", "pinched_fingers", 1], - ["๐Ÿคณ", "selfie", 1], - ["๐Ÿ’…", "nail_care", 1], - ["๐Ÿ‘„", "lips", 1], - ["๐Ÿซฆ", "biting_lip", 1], - ["๐Ÿฆท", "tooth", 1], - ["๐Ÿ‘…", "tongue", 1], - ["๐Ÿ‘‚", "ear", 1], - ["๐Ÿฆป", "ear_with_hearing_aid", 1], - ["๐Ÿ‘ƒ", "nose", 1], - ["๐Ÿ‘", "eye", 1], - ["๐Ÿ‘€", "eyes", 1], - ["๐Ÿง ", "brain", 1], - ["๐Ÿซ€", "anatomical_heart", 1], - ["๐Ÿซ", "lungs", 1], - ["๐Ÿ‘ค", "bust_in_silhouette", 1], - ["๐Ÿ‘ฅ", "busts_in_silhouette", 1], - ["๐Ÿ—ฃ", "speaking_head", 1], - ["๐Ÿ‘ถ", "baby", 1], - ["๐Ÿง’", "child", 1], - ["๐Ÿ‘ฆ", "boy", 1], - ["๐Ÿ‘ง", "girl", 1], - ["๐Ÿง‘", "adult", 1], - ["๐Ÿ‘จ", "man", 1], - ["๐Ÿ‘ฉ", "woman", 1], - ["๐Ÿง‘โ€๐Ÿฆฑ", "curly_hair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฑ", "curly_hair_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆฑ", "curly_hair_man", 1], - ["๐Ÿง‘โ€๐Ÿฆฐ", "red_hair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฐ", "red_hair_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆฐ", "red_hair_man", 1], - ["๐Ÿ‘ฑโ€โ™€๏ธ", "blonde_woman", 1], - ["๐Ÿ‘ฑ", "blonde_man", 1], - ["๐Ÿง‘โ€๐Ÿฆณ", "white_hair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆณ", "white_hair_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆณ", "white_hair_man", 1], - ["๐Ÿง‘โ€๐Ÿฆฒ", "bald", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฒ", "bald_woman", 1], - ["๐Ÿ‘จโ€๐Ÿฆฒ", "bald_man", 1], - ["๐Ÿง”", "bearded_person", 1], - ["๐Ÿง“", "older_adult", 1], - ["๐Ÿ‘ด", "older_man", 1], - ["๐Ÿ‘ต", "older_woman", 1], - ["๐Ÿ‘ฒ", "man_with_gua_pi_mao", 1], - ["๐Ÿง•", "woman_with_headscarf", 1], - ["๐Ÿ‘ณโ€โ™€๏ธ", "woman_with_turban", 1], - ["๐Ÿ‘ณ", "man_with_turban", 1], - ["๐Ÿ‘ฎโ€โ™€๏ธ", "policewoman", 1], - ["๐Ÿ‘ฎ", "policeman", 1], - ["๐Ÿ‘ทโ€โ™€๏ธ", "construction_worker_woman", 1], - ["๐Ÿ‘ท", "construction_worker_man", 1], - ["๐Ÿ’‚โ€โ™€๏ธ", "guardswoman", 1], - ["๐Ÿ’‚", "guardsman", 1], - ["๐Ÿ•ต๏ธโ€โ™€๏ธ", "female_detective", 1], - ["๐Ÿ•ต", "male_detective", 1], - ["๐Ÿง‘โ€โš•๏ธ", "health_worker", 1], - ["๐Ÿ‘ฉโ€โš•๏ธ", "woman_health_worker", 1], - ["๐Ÿ‘จโ€โš•๏ธ", "man_health_worker", 1], - ["๐Ÿง‘โ€๐ŸŒพ", "farmer", 1], - ["๐Ÿ‘ฉโ€๐ŸŒพ", "woman_farmer", 1], - ["๐Ÿ‘จโ€๐ŸŒพ", "man_farmer", 1], - ["๐Ÿง‘โ€๐Ÿณ", "cook", 1], - ["๐Ÿ‘ฉโ€๐Ÿณ", "woman_cook", 1], - ["๐Ÿ‘จโ€๐Ÿณ", "man_cook", 1], - ["๐Ÿง‘โ€๐ŸŽ“", "student", 1], - ["๐Ÿ‘ฉโ€๐ŸŽ“", "woman_student", 1], - ["๐Ÿ‘จโ€๐ŸŽ“", "man_student", 1], - ["๐Ÿง‘โ€๐ŸŽค", "singer", 1], - ["๐Ÿ‘ฉโ€๐ŸŽค", "woman_singer", 1], - ["๐Ÿ‘จโ€๐ŸŽค", "man_singer", 1], - ["๐Ÿง‘โ€๐Ÿซ", "teacher", 1], - ["๐Ÿ‘ฉโ€๐Ÿซ", "woman_teacher", 1], - ["๐Ÿ‘จโ€๐Ÿซ", "man_teacher", 1], - ["๐Ÿง‘โ€๐Ÿญ", "factory_worker", 1], - ["๐Ÿ‘ฉโ€๐Ÿญ", "woman_factory_worker", 1], - ["๐Ÿ‘จโ€๐Ÿญ", "man_factory_worker", 1], - ["๐Ÿง‘โ€๐Ÿ’ป", "technologist", 1], - ["๐Ÿ‘ฉโ€๐Ÿ’ป", "woman_technologist", 1], - ["๐Ÿ‘จโ€๐Ÿ’ป", "man_technologist", 1], - ["๐Ÿง‘โ€๐Ÿ’ผ", "office_worker", 1], - ["๐Ÿ‘ฉโ€๐Ÿ’ผ", "woman_office_worker", 1], - ["๐Ÿ‘จโ€๐Ÿ’ผ", "man_office_worker", 1], - ["๐Ÿง‘โ€๐Ÿ”ง", "mechanic", 1], - ["๐Ÿ‘ฉโ€๐Ÿ”ง", "woman_mechanic", 1], - ["๐Ÿ‘จโ€๐Ÿ”ง", "man_mechanic", 1], - ["๐Ÿง‘โ€๐Ÿ”ฌ", "scientist", 1], - ["๐Ÿ‘ฉโ€๐Ÿ”ฌ", "woman_scientist", 1], - ["๐Ÿ‘จโ€๐Ÿ”ฌ", "man_scientist", 1], - ["๐Ÿง‘โ€๐ŸŽจ", "artist", 1], - ["๐Ÿ‘ฉโ€๐ŸŽจ", "woman_artist", 1], - ["๐Ÿ‘จโ€๐ŸŽจ", "man_artist", 1], - ["๐Ÿง‘โ€๐Ÿš’", "firefighter", 1], - ["๐Ÿ‘ฉโ€๐Ÿš’", "woman_firefighter", 1], - ["๐Ÿ‘จโ€๐Ÿš’", "man_firefighter", 1], - ["๐Ÿง‘โ€โœˆ๏ธ", "pilot", 1], - ["๐Ÿ‘ฉโ€โœˆ๏ธ", "woman_pilot", 1], - ["๐Ÿ‘จโ€โœˆ๏ธ", "man_pilot", 1], - ["๐Ÿง‘โ€๐Ÿš€", "astronaut", 1], - ["๐Ÿ‘ฉโ€๐Ÿš€", "woman_astronaut", 1], - ["๐Ÿ‘จโ€๐Ÿš€", "man_astronaut", 1], - ["๐Ÿง‘โ€โš–๏ธ", "judge", 1], - ["๐Ÿ‘ฉโ€โš–๏ธ", "woman_judge", 1], - ["๐Ÿ‘จโ€โš–๏ธ", "man_judge", 1], - ["๐Ÿฆธโ€โ™€๏ธ", "woman_superhero", 1], - ["๐Ÿฆธโ€โ™‚๏ธ", "man_superhero", 1], - ["๐Ÿฆนโ€โ™€๏ธ", "woman_supervillain", 1], - ["๐Ÿฆนโ€โ™‚๏ธ", "man_supervillain", 1], - ["๐Ÿคถ", "mrs_claus", 1], - ["๐Ÿง‘โ€๐ŸŽ„", "mx_claus", 1], - ["๐ŸŽ…", "santa", 1], - ["๐Ÿฅท", "ninja", 1], - ["๐Ÿง™โ€โ™€๏ธ", "sorceress", 1], - ["๐Ÿง™โ€โ™‚๏ธ", "wizard", 1], - ["๐Ÿงโ€โ™€๏ธ", "woman_elf", 1], - ["๐Ÿงโ€โ™‚๏ธ", "man_elf", 1], - ["๐Ÿง›โ€โ™€๏ธ", "woman_vampire", 1], - ["๐Ÿง›โ€โ™‚๏ธ", "man_vampire", 1], - ["๐ŸงŸโ€โ™€๏ธ", "woman_zombie", 1], - ["๐ŸงŸโ€โ™‚๏ธ", "man_zombie", 1], - ["๐Ÿงžโ€โ™€๏ธ", "woman_genie", 1], - ["๐Ÿงžโ€โ™‚๏ธ", "man_genie", 1], - ["๐Ÿงœโ€โ™€๏ธ", "mermaid", 1], - ["๐Ÿงœโ€โ™‚๏ธ", "merman", 1], - ["๐Ÿงšโ€โ™€๏ธ", "woman_fairy", 1], - ["๐Ÿงšโ€โ™‚๏ธ", "man_fairy", 1], - ["๐Ÿ‘ผ", "angel", 1], - ["๐ŸงŒ", "troll", 1], - ["๐Ÿคฐ", "pregnant_woman", 1], - ["๐Ÿซƒ", "pregnant_man", 1], - ["๐Ÿซ„", "pregnant_person", 1], - ["๐Ÿซ…", "person_with_crown", 1], - ["๐Ÿคฑ", "breastfeeding", 1], - ["๐Ÿ‘ฉโ€๐Ÿผ", "woman_feeding_baby", 1], - ["๐Ÿ‘จโ€๐Ÿผ", "man_feeding_baby", 1], - ["๐Ÿง‘โ€๐Ÿผ", "person_feeding_baby", 1], - ["๐Ÿ‘ธ", "princess", 1], - ["๐Ÿคด", "prince", 1], - ["๐Ÿ‘ฐ", "person_with_veil", 1], - ["๐Ÿ‘ฐ", "bride_with_veil", 1], - ["๐Ÿคต", "person_in_tuxedo", 1], - ["๐Ÿคต", "man_in_tuxedo", 1], - ["๐Ÿƒโ€โ™€๏ธ", "running_woman", 1], - ["๐Ÿƒ", "running_man", 1], - ["๐Ÿšถโ€โ™€๏ธ", "walking_woman", 1], - ["๐Ÿšถ", "walking_man", 1], - ["๐Ÿ’ƒ", "dancer", 1], - ["๐Ÿ•บ", "man_dancing", 1], - ["๐Ÿ‘ฏ", "dancing_women", 1], - ["๐Ÿ‘ฏโ€โ™‚๏ธ", "dancing_men", 1], - ["๐Ÿ‘ซ", "couple", 1], - ["๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘", "people_holding_hands", 1], - ["๐Ÿ‘ฌ", "two_men_holding_hands", 1], - ["๐Ÿ‘ญ", "two_women_holding_hands", 1], - ["๐Ÿซ‚", "people_hugging", 1], - ["๐Ÿ™‡โ€โ™€๏ธ", "bowing_woman", 1], - ["๐Ÿ™‡", "bowing_man", 1], - ["๐Ÿคฆโ€โ™‚๏ธ", "man_facepalming", 1], - ["๐Ÿคฆโ€โ™€๏ธ", "woman_facepalming", 1], - ["๐Ÿคท", "woman_shrugging", 1], - ["๐Ÿคทโ€โ™‚๏ธ", "man_shrugging", 1], - ["๐Ÿ’", "tipping_hand_woman", 1], - ["๐Ÿ’โ€โ™‚๏ธ", "tipping_hand_man", 1], - ["๐Ÿ™…", "no_good_woman", 1], - ["๐Ÿ™…โ€โ™‚๏ธ", "no_good_man", 1], - ["๐Ÿ™†", "ok_woman", 1], - ["๐Ÿ™†โ€โ™‚๏ธ", "ok_man", 1], - ["๐Ÿ™‹", "raising_hand_woman", 1], - ["๐Ÿ™‹โ€โ™‚๏ธ", "raising_hand_man", 1], - ["๐Ÿ™Ž", "pouting_woman", 1], - ["๐Ÿ™Žโ€โ™‚๏ธ", "pouting_man", 1], - ["๐Ÿ™", "frowning_woman", 1], - ["๐Ÿ™โ€โ™‚๏ธ", "frowning_man", 1], - ["๐Ÿ’‡", "haircut_woman", 1], - ["๐Ÿ’‡โ€โ™‚๏ธ", "haircut_man", 1], - ["๐Ÿ’†", "massage_woman", 1], - ["๐Ÿ’†โ€โ™‚๏ธ", "massage_man", 1], - ["๐Ÿง–โ€โ™€๏ธ", "woman_in_steamy_room", 1], - ["๐Ÿง–โ€โ™‚๏ธ", "man_in_steamy_room", 1], - ["๐Ÿงโ€โ™€๏ธ", "woman_deaf", 1], - ["๐Ÿงโ€โ™‚๏ธ", "man_deaf", 1], - ["๐Ÿงโ€โ™€๏ธ", "woman_standing", 1], - ["๐Ÿงโ€โ™‚๏ธ", "man_standing", 1], - ["๐ŸงŽโ€โ™€๏ธ", "woman_kneeling", 1], - ["๐ŸงŽโ€โ™‚๏ธ", "man_kneeling", 1], - ["๐Ÿง‘โ€๐Ÿฆฏ", "person_with_probing_cane", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฏ", "woman_with_probing_cane", 1], - ["๐Ÿ‘จโ€๐Ÿฆฏ", "man_with_probing_cane", 1], - ["๐Ÿง‘โ€๐Ÿฆผ", "person_in_motorized_wheelchair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆผ", "woman_in_motorized_wheelchair", 1], - ["๐Ÿ‘จโ€๐Ÿฆผ", "man_in_motorized_wheelchair", 1], - ["๐Ÿง‘โ€๐Ÿฆฝ", "person_in_manual_wheelchair", 1], - ["๐Ÿ‘ฉโ€๐Ÿฆฝ", "woman_in_manual_wheelchair", 1], - ["๐Ÿ‘จโ€๐Ÿฆฝ", "man_in_manual_wheelchair", 1], - ["๐Ÿ’‘", "couple_with_heart_woman_man", 1], - ["๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", "couple_with_heart_woman_woman", 1], - ["๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", "couple_with_heart_man_man", 1], - ["๐Ÿ’", "couplekiss_man_woman", 1], - ["๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", "couplekiss_woman_woman", 1], - ["๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", "couplekiss_man_man", 1], - ["๐Ÿ‘ช", "family_man_woman_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", "family_man_woman_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_man_woman_girl_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_man_woman_boy_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_man_woman_girl_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", "family_woman_woman_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", "family_woman_woman_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_woman_woman_girl_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_woman_woman_boy_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_woman_woman_girl_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ", "family_man_man_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง", "family_man_man_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_man_man_girl_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_man_man_boy_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_man_man_girl_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฆ", "family_woman_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ง", "family_woman_girl", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_woman_girl_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_woman_boy_boy", 1], - ["๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_woman_girl_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฆ", "family_man_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ง", "family_man_girl", 1], - ["๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "family_man_girl_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", "family_man_boy_boy", 1], - ["๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", "family_man_girl_girl", 1], - ["๐Ÿงถ", "yarn", 1], - ["๐Ÿงต", "thread", 1], - ["๐Ÿงฅ", "coat", 1], - ["๐Ÿฅผ", "labcoat", 1], - ["๐Ÿ‘š", "womans_clothes", 1], - ["๐Ÿ‘•", "tshirt", 1], - ["๐Ÿ‘–", "jeans", 1], - ["๐Ÿ‘”", "necktie", 1], - ["๐Ÿ‘—", "dress", 1], - ["๐Ÿ‘™", "bikini", 1], - ["๐Ÿฉฑ", "one_piece_swimsuit", 1], - ["๐Ÿ‘˜", "kimono", 1], - ["๐Ÿฅป", "sari", 1], - ["๐Ÿฉฒ", "briefs", 1], - ["๐Ÿฉณ", "shorts", 1], - ["๐Ÿ’„", "lipstick", 1], - ["๐Ÿ’‹", "kiss", 1], - ["๐Ÿ‘ฃ", "footprints", 1], - ["๐Ÿฅฟ", "flat_shoe", 1], - ["๐Ÿ‘ ", "high_heel", 1], - ["๐Ÿ‘ก", "sandal", 1], - ["๐Ÿ‘ข", "boot", 1], - ["๐Ÿ‘ž", "mans_shoe", 1], - ["๐Ÿ‘Ÿ", "athletic_shoe", 1], - ["๐Ÿฉด", "thong_sandal", 1], - ["๐Ÿฉฐ", "ballet_shoes", 1], - ["๐Ÿงฆ", "socks", 1], - ["๐Ÿงค", "gloves", 1], - ["๐Ÿงฃ", "scarf", 1], - ["๐Ÿ‘’", "womans_hat", 1], - ["๐ŸŽฉ", "tophat", 1], - ["๐Ÿงข", "billed_hat", 1], - ["โ›‘", "rescue_worker_helmet", 1], - ["๐Ÿช–", "military_helmet", 1], - ["๐ŸŽ“", "mortar_board", 1], - ["๐Ÿ‘‘", "crown", 1], - ["๐ŸŽ’", "school_satchel", 1], - ["๐Ÿงณ", "luggage", 1], - ["๐Ÿ‘", "pouch", 1], - ["๐Ÿ‘›", "purse", 1], - ["๐Ÿ‘œ", "handbag", 1], - ["๐Ÿ’ผ", "briefcase", 1], - ["๐Ÿ‘“", "eyeglasses", 1], - ["๐Ÿ•ถ", "dark_sunglasses", 1], - ["๐Ÿฅฝ", "goggles", 1], - ["๐Ÿ’", "ring", 1], - ["๐ŸŒ‚", "closed_umbrella", 1], - ["๐Ÿถ", "dog", 2], - ["๐Ÿฑ", "cat", 2], - ["๐Ÿˆโ€โฌ›", "black_cat", 2], - ["๐Ÿญ", "mouse", 2], - ["๐Ÿน", "hamster", 2], - ["๐Ÿฐ", "rabbit", 2], - ["๐ŸฆŠ", "fox_face", 2], - ["๐Ÿป", "bear", 2], - ["๐Ÿผ", "panda_face", 2], - ["๐Ÿจ", "koala", 2], - ["๐Ÿฏ", "tiger", 2], - ["๐Ÿฆ", "lion", 2], - ["๐Ÿฎ", "cow", 2], - ["๐Ÿท", "pig", 2], - ["๐Ÿฝ", "pig_nose", 2], - ["๐Ÿธ", "frog", 2], - ["๐Ÿฆ‘", "squid", 2], - ["๐Ÿ™", "octopus", 2], - ["๐Ÿชผ", "jellyfish", 2], - ["๐Ÿฆ", "shrimp", 2], - ["๐Ÿต", "monkey_face", 2], - ["๐Ÿฆ", "gorilla", 2], - ["๐Ÿ™ˆ", "see_no_evil", 2], - ["๐Ÿ™‰", "hear_no_evil", 2], - ["๐Ÿ™Š", "speak_no_evil", 2], - ["๐Ÿ’", "monkey", 2], - ["๐Ÿ”", "chicken", 2], - ["๐Ÿง", "penguin", 2], - ["๐Ÿฆ", "bird", 2], - ["๐Ÿค", "baby_chick", 2], - ["๐Ÿฃ", "hatching_chick", 2], - ["๐Ÿฅ", "hatched_chick", 2], - ["๐Ÿชฟ", "goose", 2], - ["๐Ÿฆ†", "duck", 2], - ["๐Ÿฆโ€โฌ›", "black_bird", 2], - ["๐Ÿฆ…", "eagle", 2], - ["๐Ÿฆ‰", "owl", 2], - ["๐Ÿฆ‡", "bat", 2], - ["๐Ÿบ", "wolf", 2], - ["๐Ÿ—", "boar", 2], - ["๐Ÿด", "horse", 2], - ["๐Ÿฆ„", "unicorn", 2], - ["๐ŸซŽ", "moose", 2], - ["๐Ÿ", "honeybee", 2], - ["๐Ÿ›", "bug", 2], - ["๐Ÿฆ‹", "butterfly", 2], - ["๐ŸŒ", "snail", 2], - ["๐Ÿž", "lady_beetle", 2], - ["๐Ÿœ", "ant", 2], - ["๐Ÿฆ—", "grasshopper", 2], - ["๐Ÿ•ท", "spider", 2], - ["๐Ÿชฒ", "beetle", 2], - ["๐Ÿชณ", "cockroach", 2], - ["๐Ÿชฐ", "fly", 2], - ["๐Ÿชฑ", "worm", 2], - ["๐Ÿฆ‚", "scorpion", 2], - ["๐Ÿฆ€", "crab", 2], - ["๐Ÿ", "snake", 2], - ["๐ŸฆŽ", "lizard", 2], - ["๐Ÿฆ–", "t-rex", 2], - ["๐Ÿฆ•", "sauropod", 2], - ["๐Ÿข", "turtle", 2], - ["๐Ÿ ", "tropical_fish", 2], - ["๐ŸŸ", "fish", 2], - ["๐Ÿก", "blowfish", 2], - ["๐Ÿฌ", "dolphin", 2], - ["๐Ÿฆˆ", "shark", 2], - ["๐Ÿณ", "whale", 2], - ["๐Ÿ‹", "whale2", 2], - ["๐ŸŠ", "crocodile", 2], - ["๐Ÿ†", "leopard", 2], - ["๐Ÿฆ“", "zebra", 2], - ["๐Ÿ…", "tiger2", 2], - ["๐Ÿƒ", "water_buffalo", 2], - ["๐Ÿ‚", "ox", 2], - ["๐Ÿ„", "cow2", 2], - ["๐ŸฆŒ", "deer", 2], - ["๐Ÿช", "dromedary_camel", 2], - ["๐Ÿซ", "camel", 2], - ["๐Ÿฆ’", "giraffe", 2], - ["๐Ÿ˜", "elephant", 2], - ["๐Ÿฆ", "rhinoceros", 2], - ["๐Ÿ", "goat", 2], - ["๐Ÿ", "ram", 2], - ["๐Ÿ‘", "sheep", 2], - ["๐Ÿซ", "donkey", 2], - ["๐ŸŽ", "racehorse", 2], - ["๐Ÿ–", "pig2", 2], - ["๐Ÿ€", "rat", 2], - ["๐Ÿ", "mouse2", 2], - ["๐Ÿ“", "rooster", 2], - ["๐Ÿฆƒ", "turkey", 2], - ["๐Ÿ•Š", "dove", 2], - ["๐Ÿ•", "dog2", 2], - ["๐Ÿฉ", "poodle", 2], - ["๐Ÿˆ", "cat2", 2], - ["๐Ÿ‡", "rabbit2", 2], - ["๐Ÿฟ", "chipmunk", 2], - ["๐Ÿฆ”", "hedgehog", 2], - ["๐Ÿฆ", "raccoon", 2], - ["๐Ÿฆ™", "llama", 2], - ["๐Ÿฆ›", "hippopotamus", 2], - ["๐Ÿฆ˜", "kangaroo", 2], - ["๐Ÿฆก", "badger", 2], - ["๐Ÿฆข", "swan", 2], - ["๐Ÿฆš", "peacock", 2], - ["๐Ÿฆœ", "parrot", 2], - ["๐Ÿฆž", "lobster", 2], - ["๐Ÿฆ ", "microbe", 2], - ["๐ŸฆŸ", "mosquito", 2], - ["๐Ÿฆฌ", "bison", 2], - ["๐Ÿฆฃ", "mammoth", 2], - ["๐Ÿฆซ", "beaver", 2], - ["๐Ÿปโ€โ„๏ธ", "polar_bear", 2], - ["๐Ÿฆค", "dodo", 2], - ["๐Ÿชถ", "feather", 2], - ["๐Ÿชฝ", "wing", 2], - ["๐Ÿฆญ", "seal", 2], - ["๐Ÿพ", "paw_prints", 2], - ["๐Ÿ‰", "dragon", 2], - ["๐Ÿฒ", "dragon_face", 2], - ["๐Ÿฆง", "orangutan", 2], - ["๐Ÿฆฎ", "guide_dog", 2], - ["๐Ÿ•โ€๐Ÿฆบ", "service_dog", 2], - ["๐Ÿฆฅ", "sloth", 2], - ["๐Ÿฆฆ", "otter", 2], - ["๐Ÿฆจ", "skunk", 2], - ["๐Ÿฆฉ", "flamingo", 2], - ["๐ŸŒต", "cactus", 2], - ["๐ŸŽ„", "christmas_tree", 2], - ["๐ŸŒฒ", "evergreen_tree", 2], - ["๐ŸŒณ", "deciduous_tree", 2], - ["๐ŸŒด", "palm_tree", 2], - ["๐ŸŒฑ", "seedling", 2], - ["๐ŸŒฟ", "herb", 2], - ["โ˜˜", "shamrock", 2], - ["๐Ÿ€", "four_leaf_clover", 2], - ["๐ŸŽ", "bamboo", 2], - ["๐ŸŽ‹", "tanabata_tree", 2], - ["๐Ÿƒ", "leaves", 2], - ["๐Ÿ‚", "fallen_leaf", 2], - ["๐Ÿ", "maple_leaf", 2], - ["๐ŸŒพ", "ear_of_rice", 2], - ["๐ŸŒบ", "hibiscus", 2], - ["๐ŸŒป", "sunflower", 2], - ["๐ŸŒน", "rose", 2], - ["๐Ÿฅ€", "wilted_flower", 2], - ["๐Ÿชป", "hyacinth", 2], - ["๐ŸŒท", "tulip", 2], - ["๐ŸŒผ", "blossom", 2], - ["๐ŸŒธ", "cherry_blossom", 2], - ["๐Ÿ’", "bouquet", 2], - ["๐Ÿ„", "mushroom", 2], - ["๐Ÿชด", "potted_plant", 2], - ["๐ŸŒฐ", "chestnut", 2], - ["๐ŸŽƒ", "jack_o_lantern", 2], - ["๐Ÿš", "shell", 2], - ["๐Ÿ•ธ", "spider_web", 2], - ["๐ŸŒŽ", "earth_americas", 2], - ["๐ŸŒ", "earth_africa", 2], - ["๐ŸŒ", "earth_asia", 2], - ["๐Ÿช", "ringed_planet", 2], - ["๐ŸŒ•", "full_moon", 2], - ["๐ŸŒ–", "waning_gibbous_moon", 2], - ["๐ŸŒ—", "last_quarter_moon", 2], - ["๐ŸŒ˜", "waning_crescent_moon", 2], - ["๐ŸŒ‘", "new_moon", 2], - ["๐ŸŒ’", "waxing_crescent_moon", 2], - ["๐ŸŒ“", "first_quarter_moon", 2], - ["๐ŸŒ”", "waxing_gibbous_moon", 2], - ["๐ŸŒš", "new_moon_with_face", 2], - ["๐ŸŒ", "full_moon_with_face", 2], - ["๐ŸŒ›", "first_quarter_moon_with_face", 2], - ["๐ŸŒœ", "last_quarter_moon_with_face", 2], - ["๐ŸŒž", "sun_with_face", 2], - ["๐ŸŒ™", "crescent_moon", 2], - ["โญ", "star", 2], - ["๐ŸŒŸ", "star2", 2], - ["๐Ÿ’ซ", "dizzy", 2], - ["โœจ", "sparkles", 2], - ["โ˜„", "comet", 2], - ["โ˜€๏ธ", "sunny", 2], - ["๐ŸŒค", "sun_behind_small_cloud", 2], - ["โ›…", "partly_sunny", 2], - ["๐ŸŒฅ", "sun_behind_large_cloud", 2], - ["๐ŸŒฆ", "sun_behind_rain_cloud", 2], - ["โ˜๏ธ", "cloud", 2], - ["๐ŸŒง", "cloud_with_rain", 2], - ["โ›ˆ", "cloud_with_lightning_and_rain", 2], - ["๐ŸŒฉ", "cloud_with_lightning", 2], - ["โšก", "zap", 2], - ["๐Ÿ”ฅ", "fire", 2], - ["๐Ÿ’ฅ", "boom", 2], - ["โ„๏ธ", "snowflake", 2], - ["๐ŸŒจ", "cloud_with_snow", 2], - ["โ›„", "snowman", 2], - ["โ˜ƒ", "snowman_with_snow", 2], - ["๐ŸŒฌ", "wind_face", 2], - ["๐Ÿ’จ", "dash", 2], - ["๐ŸŒช", "tornado", 2], - ["๐ŸŒซ", "fog", 2], - ["โ˜‚", "open_umbrella", 2], - ["โ˜”", "umbrella", 2], - ["๐Ÿ’ง", "droplet", 2], - ["๐Ÿ’ฆ", "sweat_drops", 2], - ["๐ŸŒŠ", "ocean", 2], - ["๐Ÿชท", "lotus", 2], - ["๐Ÿชธ", "coral", 2], - ["๐Ÿชน", "empty_nest", 2], - ["๐Ÿชบ", "nest_with_eggs", 2], - ["๐Ÿ", "green_apple", 3], - ["๐ŸŽ", "apple", 3], - ["๐Ÿ", "pear", 3], - ["๐ŸŠ", "tangerine", 3], - ["๐Ÿ‹", "lemon", 3], - ["๐ŸŒ", "banana", 3], - ["๐Ÿ‰", "watermelon", 3], - ["๐Ÿ‡", "grapes", 3], - ["๐Ÿ“", "strawberry", 3], - ["๐Ÿˆ", "melon", 3], - ["๐Ÿ’", "cherries", 3], - ["๐Ÿ‘", "peach", 3], - ["๐Ÿ", "pineapple", 3], - ["๐Ÿฅฅ", "coconut", 3], - ["๐Ÿฅ", "kiwi_fruit", 3], - ["๐Ÿฅญ", "mango", 3], - ["๐Ÿฅ‘", "avocado", 3], - ["๐Ÿซ›", "pea_pod", 3], - ["๐Ÿฅฆ", "broccoli", 3], - ["๐Ÿ…", "tomato", 3], - ["๐Ÿ†", "eggplant", 3], - ["๐Ÿฅ’", "cucumber", 3], - ["๐Ÿซ", "blueberries", 3], - ["๐Ÿซ’", "olive", 3], - ["๐Ÿซ‘", "bell_pepper", 3], - ["๐Ÿฅ•", "carrot", 3], - ["๐ŸŒถ", "hot_pepper", 3], - ["๐Ÿฅ”", "potato", 3], - ["๐ŸŒฝ", "corn", 3], - ["๐Ÿฅฌ", "leafy_greens", 3], - ["๐Ÿ ", "sweet_potato", 3], - ["๐Ÿซš", "ginger_root", 3], - ["๐Ÿฅœ", "peanuts", 3], - ["๐Ÿง„", "garlic", 3], - ["๐Ÿง…", "onion", 3], - ["๐Ÿฏ", "honey_pot", 3], - ["๐Ÿฅ", "croissant", 3], - ["๐Ÿž", "bread", 3], - ["๐Ÿฅ–", "baguette_bread", 3], - ["๐Ÿฅฏ", "bagel", 3], - ["๐Ÿฅจ", "pretzel", 3], - ["๐Ÿง€", "cheese", 3], - ["๐Ÿฅš", "egg", 3], - ["๐Ÿฅ“", "bacon", 3], - ["๐Ÿฅฉ", "steak", 3], - ["๐Ÿฅž", "pancakes", 3], - ["๐Ÿ—", "poultry_leg", 3], - ["๐Ÿ–", "meat_on_bone", 3], - ["๐Ÿฆด", "bone", 3], - ["๐Ÿค", "fried_shrimp", 3], - ["๐Ÿณ", "fried_egg", 3], - ["๐Ÿ”", "hamburger", 3], - ["๐ŸŸ", "fries", 3], - ["๐Ÿฅ™", "stuffed_flatbread", 3], - ["๐ŸŒญ", "hotdog", 3], - ["๐Ÿ•", "pizza", 3], - ["๐Ÿฅช", "sandwich", 3], - ["๐Ÿฅซ", "canned_food", 3], - ["๐Ÿ", "spaghetti", 3], - ["๐ŸŒฎ", "taco", 3], - ["๐ŸŒฏ", "burrito", 3], - ["๐Ÿฅ—", "green_salad", 3], - ["๐Ÿฅ˜", "shallow_pan_of_food", 3], - ["๐Ÿœ", "ramen", 3], - ["๐Ÿฒ", "stew", 3], - ["๐Ÿฅ", "fish_cake", 3], - ["๐Ÿฅ ", "fortune_cookie", 3], - ["๐Ÿฃ", "sushi", 3], - ["๐Ÿฑ", "bento", 3], - ["๐Ÿ›", "curry", 3], - ["๐Ÿ™", "rice_ball", 3], - ["๐Ÿš", "rice", 3], - ["๐Ÿ˜", "rice_cracker", 3], - ["๐Ÿข", "oden", 3], - ["๐Ÿก", "dango", 3], - ["๐Ÿง", "shaved_ice", 3], - ["๐Ÿจ", "ice_cream", 3], - ["๐Ÿฆ", "icecream", 3], - ["๐Ÿฅง", "pie", 3], - ["๐Ÿฐ", "cake", 3], - ["๐Ÿง", "cupcake", 3], - ["๐Ÿฅฎ", "moon_cake", 3], - ["๐ŸŽ‚", "birthday", 3], - ["๐Ÿฎ", "custard", 3], - ["๐Ÿฌ", "candy", 3], - ["๐Ÿญ", "lollipop", 3], - ["๐Ÿซ", "chocolate_bar", 3], - ["๐Ÿฟ", "popcorn", 3], - ["๐ŸฅŸ", "dumpling", 3], - ["๐Ÿฉ", "doughnut", 3], - ["๐Ÿช", "cookie", 3], - ["๐Ÿง‡", "waffle", 3], - ["๐Ÿง†", "falafel", 3], - ["๐Ÿงˆ", "butter", 3], - ["๐Ÿฆช", "oyster", 3], - ["๐Ÿซ“", "flatbread", 3], - ["๐Ÿซ”", "tamale", 3], - ["๐Ÿซ•", "fondue", 3], - ["๐Ÿฅ›", "milk_glass", 3], - ["๐Ÿบ", "beer", 3], - ["๐Ÿป", "beers", 3], - ["๐Ÿฅ‚", "clinking_glasses", 3], - ["๐Ÿท", "wine_glass", 3], - ["๐Ÿฅƒ", "tumbler_glass", 3], - ["๐Ÿธ", "cocktail", 3], - ["๐Ÿน", "tropical_drink", 3], - ["๐Ÿพ", "champagne", 3], - ["๐Ÿถ", "sake", 3], - ["๐Ÿต", "tea", 3], - ["๐Ÿฅค", "cup_with_straw", 3], - ["โ˜•", "coffee", 3], - ["๐Ÿซ–", "teapot", 3], - ["๐Ÿง‹", "bubble_tea", 3], - ["๐Ÿผ", "baby_bottle", 3], - ["๐Ÿงƒ", "beverage_box", 3], - ["๐Ÿง‰", "mate", 3], - ["๐ŸงŠ", "ice_cube", 3], - ["๐Ÿง‚", "salt", 3], - ["๐Ÿฅ„", "spoon", 3], - ["๐Ÿด", "fork_and_knife", 3], - ["๐Ÿฝ", "plate_with_cutlery", 3], - ["๐Ÿฅฃ", "bowl_with_spoon", 3], - ["๐Ÿฅก", "takeout_box", 3], - ["๐Ÿฅข", "chopsticks", 3], - ["๐Ÿซ—", "pouring_liquid", 3], - ["๐Ÿซ˜", "beans", 3], - ["๐Ÿซ™", "jar", 3], - ["โšฝ", "soccer", 4], - ["๐Ÿ€", "basketball", 4], - ["๐Ÿˆ", "football", 4], - ["โšพ", "baseball", 4], - ["๐ŸฅŽ", "softball", 4], - ["๐ŸŽพ", "tennis", 4], - ["๐Ÿ", "volleyball", 4], - ["๐Ÿ‰", "rugby_football", 4], - ["๐Ÿฅ", "flying_disc", 4], - ["๐ŸŽฑ", "8ball", 4], - ["โ›ณ", "golf", 4], - ["๐ŸŒ๏ธโ€โ™€๏ธ", "golfing_woman", 4], - ["๐ŸŒ", "golfing_man", 4], - ["๐Ÿ“", "ping_pong", 4], - ["๐Ÿธ", "badminton", 4], - ["๐Ÿฅ…", "goal_net", 4], - ["๐Ÿ’", "ice_hockey", 4], - ["๐Ÿ‘", "field_hockey", 4], - ["๐Ÿฅ", "lacrosse", 4], - ["๐Ÿ", "cricket", 4], - ["๐ŸŽฟ", "ski", 4], - ["โ›ท", "skier", 4], - ["๐Ÿ‚", "snowboarder", 4], - ["๐Ÿคบ", "person_fencing", 4], - ["๐Ÿคผโ€โ™€๏ธ", "women_wrestling", 4], - ["๐Ÿคผโ€โ™‚๏ธ", "men_wrestling", 4], - ["๐Ÿคธโ€โ™€๏ธ", "woman_cartwheeling", 4], - ["๐Ÿคธโ€โ™‚๏ธ", "man_cartwheeling", 4], - ["๐Ÿคพโ€โ™€๏ธ", "woman_playing_handball", 4], - ["๐Ÿคพโ€โ™‚๏ธ", "man_playing_handball", 4], - ["โ›ธ", "ice_skate", 4], - ["๐ŸฅŒ", "curling_stone", 4], - ["๐Ÿ›น", "skateboard", 4], - ["๐Ÿ›ท", "sled", 4], - ["๐Ÿน", "bow_and_arrow", 4], - ["๐ŸŽฃ", "fishing_pole_and_fish", 4], - ["๐ŸฅŠ", "boxing_glove", 4], - ["๐Ÿฅ‹", "martial_arts_uniform", 4], - ["๐Ÿšฃโ€โ™€๏ธ", "rowing_woman", 4], - ["๐Ÿšฃ", "rowing_man", 4], - ["๐Ÿง—โ€โ™€๏ธ", "climbing_woman", 4], - ["๐Ÿง—โ€โ™‚๏ธ", "climbing_man", 4], - ["๐ŸŠโ€โ™€๏ธ", "swimming_woman", 4], - ["๐ŸŠ", "swimming_man", 4], - ["๐Ÿคฝโ€โ™€๏ธ", "woman_playing_water_polo", 4], - ["๐Ÿคฝโ€โ™‚๏ธ", "man_playing_water_polo", 4], - ["๐Ÿง˜โ€โ™€๏ธ", "woman_in_lotus_position", 4], - ["๐Ÿง˜โ€โ™‚๏ธ", "man_in_lotus_position", 4], - ["๐Ÿ„โ€โ™€๏ธ", "surfing_woman", 4], - ["๐Ÿ„", "surfing_man", 4], - ["๐Ÿ›€", "bath", 4], - ["โ›น๏ธโ€โ™€๏ธ", "basketball_woman", 4], - ["โ›น", "basketball_man", 4], - ["๐Ÿ‹๏ธโ€โ™€๏ธ", "weight_lifting_woman", 4], - ["๐Ÿ‹", "weight_lifting_man", 4], - ["๐Ÿšดโ€โ™€๏ธ", "biking_woman", 4], - ["๐Ÿšด", "biking_man", 4], - ["๐Ÿšตโ€โ™€๏ธ", "mountain_biking_woman", 4], - ["๐Ÿšต", "mountain_biking_man", 4], - ["๐Ÿ‡", "horse_racing", 4], - ["๐Ÿคฟ", "diving_mask", 4], - ["๐Ÿช€", "yo_yo", 4], - ["๐Ÿช", "kite", 4], - ["๐Ÿฆบ", "safety_vest", 4], - ["๐Ÿชก", "sewing_needle", 4], - ["๐Ÿชข", "knot", 4], - ["๐Ÿ•ด", "business_suit_levitating", 4], - ["๐Ÿ†", "trophy", 4], - ["๐ŸŽฝ", "running_shirt_with_sash", 4], - ["๐Ÿ…", "medal_sports", 4], - ["๐ŸŽ–", "medal_military", 4], - ["๐Ÿฅ‡", "1st_place_medal", 4], - ["๐Ÿฅˆ", "2nd_place_medal", 4], - ["๐Ÿฅ‰", "3rd_place_medal", 4], - ["๐ŸŽ—", "reminder_ribbon", 4], - ["๐Ÿต", "rosette", 4], - ["๐ŸŽซ", "ticket", 4], - ["๐ŸŽŸ", "tickets", 4], - ["๐ŸŽญ", "performing_arts", 4], - ["๐ŸŽจ", "art", 4], - ["๐ŸŽช", "circus_tent", 4], - ["๐Ÿคนโ€โ™€๏ธ", "woman_juggling", 4], - ["๐Ÿคนโ€โ™‚๏ธ", "man_juggling", 4], - ["๐ŸŽค", "microphone", 4], - ["๐ŸŽง", "headphones", 4], - ["๐ŸŽผ", "musical_score", 4], - ["๐ŸŽน", "musical_keyboard", 4], - ["๐Ÿช‡", "maracas", 4], - ["๐Ÿฅ", "drum", 4], - ["๐ŸŽท", "saxophone", 4], - ["๐ŸŽบ", "trumpet", 4], - ["๐Ÿชˆ", "flute", 4], - ["๐ŸŽธ", "guitar", 4], - ["๐ŸŽป", "violin", 4], - ["๐Ÿช•", "banjo", 4], - ["๐Ÿช—", "accordion", 4], - ["๐Ÿช˜", "long_drum", 4], - ["๐ŸŽฌ", "clapper", 4], - ["๐ŸŽฎ", "video_game", 4], - ["๐Ÿ‘พ", "space_invader", 4], - ["๐ŸŽฏ", "dart", 4], - ["๐ŸŽฒ", "game_die", 4], - ["โ™Ÿ๏ธ", "chess_pawn", 4], - ["๐ŸŽฐ", "slot_machine", 4], - ["๐Ÿงฉ", "jigsaw", 4], - ["๐ŸŽณ", "bowling", 4], - ["๐Ÿช„", "magic_wand", 4], - ["๐Ÿช…", "pinata", 4], - ["๐Ÿช†", "nesting_dolls", 4], - ["๐Ÿชฌ", "hamsa", 4], - ["๐Ÿชฉ", "mirror_ball", 4], - ["๐Ÿš—", "red_car", 5], - ["๐Ÿš•", "taxi", 5], - ["๐Ÿš™", "blue_car", 5], - ["๐ŸšŒ", "bus", 5], - ["๐ŸšŽ", "trolleybus", 5], - ["๐ŸŽ", "racing_car", 5], - ["๐Ÿš“", "police_car", 5], - ["๐Ÿš‘", "ambulance", 5], - ["๐Ÿš’", "fire_engine", 5], - ["๐Ÿš", "minibus", 5], - ["๐Ÿšš", "truck", 5], - ["๐Ÿš›", "articulated_lorry", 5], - ["๐Ÿšœ", "tractor", 5], - ["๐Ÿ›ด", "kick_scooter", 5], - ["๐Ÿ", "motorcycle", 5], - ["๐Ÿšฒ", "bike", 5], - ["๐Ÿ›ต", "motor_scooter", 5], - ["๐Ÿฆฝ", "manual_wheelchair", 5], - ["๐Ÿฆผ", "motorized_wheelchair", 5], - ["๐Ÿ›บ", "auto_rickshaw", 5], - ["๐Ÿช‚", "parachute", 5], - ["๐Ÿšจ", "rotating_light", 5], - ["๐Ÿš”", "oncoming_police_car", 5], - ["๐Ÿš", "oncoming_bus", 5], - ["๐Ÿš˜", "oncoming_automobile", 5], - ["๐Ÿš–", "oncoming_taxi", 5], - ["๐Ÿšก", "aerial_tramway", 5], - ["๐Ÿš ", "mountain_cableway", 5], - ["๐ŸšŸ", "suspension_railway", 5], - ["๐Ÿšƒ", "railway_car", 5], - ["๐Ÿš‹", "train", 5], - ["๐Ÿš", "monorail", 5], - ["๐Ÿš„", "bullettrain_side", 5], - ["๐Ÿš…", "bullettrain_front", 5], - ["๐Ÿšˆ", "light_rail", 5], - ["๐Ÿšž", "mountain_railway", 5], - ["๐Ÿš‚", "steam_locomotive", 5], - ["๐Ÿš†", "train2", 5], - ["๐Ÿš‡", "metro", 5], - ["๐ŸšŠ", "tram", 5], - ["๐Ÿš‰", "station", 5], - ["๐Ÿ›ธ", "flying_saucer", 5], - ["๐Ÿš", "helicopter", 5], - ["๐Ÿ›ฉ", "small_airplane", 5], - ["โœˆ๏ธ", "airplane", 5], - ["๐Ÿ›ซ", "flight_departure", 5], - ["๐Ÿ›ฌ", "flight_arrival", 5], - ["โ›ต", "sailboat", 5], - ["๐Ÿ›ฅ", "motor_boat", 5], - ["๐Ÿšค", "speedboat", 5], - ["โ›ด", "ferry", 5], - ["๐Ÿ›ณ", "passenger_ship", 5], - ["๐Ÿš€", "rocket", 5], - ["๐Ÿ›ฐ", "artificial_satellite", 5], - ["๐Ÿ›ป", "pickup_truck", 5], - ["๐Ÿ›ผ", "roller_skate", 5], - ["๐Ÿ’บ", "seat", 5], - ["๐Ÿ›ถ", "canoe", 5], - ["โš“", "anchor", 5], - ["๐Ÿšง", "construction", 5], - ["โ›ฝ", "fuelpump", 5], - ["๐Ÿš", "busstop", 5], - ["๐Ÿšฆ", "vertical_traffic_light", 5], - ["๐Ÿšฅ", "traffic_light", 5], - ["๐Ÿ", "checkered_flag", 5], - ["๐Ÿšข", "ship", 5], - ["๐ŸŽก", "ferris_wheel", 5], - ["๐ŸŽข", "roller_coaster", 5], - ["๐ŸŽ ", "carousel_horse", 5], - ["๐Ÿ—", "building_construction", 5], - ["๐ŸŒ", "foggy", 5], - ["๐Ÿญ", "factory", 5], - ["โ›ฒ", "fountain", 5], - ["๐ŸŽ‘", "rice_scene", 5], - ["โ›ฐ", "mountain", 5], - ["๐Ÿ”", "mountain_snow", 5], - ["๐Ÿ—ป", "mount_fuji", 5], - ["๐ŸŒ‹", "volcano", 5], - ["๐Ÿ—พ", "japan", 5], - ["๐Ÿ•", "camping", 5], - ["โ›บ", "tent", 5], - ["๐Ÿž", "national_park", 5], - ["๐Ÿ›ฃ", "motorway", 5], - ["๐Ÿ›ค", "railway_track", 5], - ["๐ŸŒ…", "sunrise", 5], - ["๐ŸŒ„", "sunrise_over_mountains", 5], - ["๐Ÿœ", "desert", 5], - ["๐Ÿ–", "beach_umbrella", 5], - ["๐Ÿ", "desert_island", 5], - ["๐ŸŒ‡", "city_sunrise", 5], - ["๐ŸŒ†", "city_sunset", 5], - ["๐Ÿ™", "cityscape", 5], - ["๐ŸŒƒ", "night_with_stars", 5], - ["๐ŸŒ‰", "bridge_at_night", 5], - ["๐ŸŒŒ", "milky_way", 5], - ["๐ŸŒ ", "stars", 5], - ["๐ŸŽ‡", "sparkler", 5], - ["๐ŸŽ†", "fireworks", 5], - ["๐ŸŒˆ", "rainbow", 5], - ["๐Ÿ˜", "houses", 5], - ["๐Ÿฐ", "european_castle", 5], - ["๐Ÿฏ", "japanese_castle", 5], - ["๐Ÿ—ผ", "tokyo_tower", 5], - ["๎”Š", "shibuya_109", 5], - ["๐ŸŸ", "stadium", 5], - ["๐Ÿ—ฝ", "statue_of_liberty", 5], - ["๐Ÿ ", "house", 5], - ["๐Ÿก", "house_with_garden", 5], - ["๐Ÿš", "derelict_house", 5], - ["๐Ÿข", "office", 5], - ["๐Ÿฌ", "department_store", 5], - ["๐Ÿฃ", "post_office", 5], - ["๐Ÿค", "european_post_office", 5], - ["๐Ÿฅ", "hospital", 5], - ["๐Ÿฆ", "bank", 5], - ["๐Ÿจ", "hotel", 5], - ["๐Ÿช", "convenience_store", 5], - ["๐Ÿซ", "school", 5], - ["๐Ÿฉ", "love_hotel", 5], - ["๐Ÿ’’", "wedding", 5], - ["๐Ÿ›", "classical_building", 5], - ["โ›ช", "church", 5], - ["๐Ÿ•Œ", "mosque", 5], - ["๐Ÿ•", "synagogue", 5], - ["๐Ÿ•‹", "kaaba", 5], - ["โ›ฉ", "shinto_shrine", 5], - ["๐Ÿ›•", "hindu_temple", 5], - ["๐Ÿชจ", "rock", 5], - ["๐Ÿชต", "wood", 5], - ["๐Ÿ›–", "hut", 5], - ["๐Ÿ›", "playground_slide", 5], - ["๐Ÿ›ž", "wheel", 5], - ["๐Ÿ›Ÿ", "ring_buoy", 5], - ["โŒš", "watch", 6], - ["๐Ÿ“ฑ", "iphone", 6], - ["๐Ÿ“ฒ", "calling", 6], - ["๐Ÿ’ป", "computer", 6], - ["โŒจ", "keyboard", 6], - ["๐Ÿ–ฅ", "desktop_computer", 6], - ["๐Ÿ–จ", "printer", 6], - ["๐Ÿ–ฑ", "computer_mouse", 6], - ["๐Ÿ–ฒ", "trackball", 6], - ["๐Ÿ•น", "joystick", 6], - ["๐Ÿ—œ", "clamp", 6], - ["๐Ÿ’ฝ", "minidisc", 6], - ["๐Ÿ’พ", "floppy_disk", 6], - ["๐Ÿ’ฟ", "cd", 6], - ["๐Ÿ“€", "dvd", 6], - ["๐Ÿ“ผ", "vhs", 6], - ["๐Ÿ“ท", "camera", 6], - ["๐Ÿ“ธ", "camera_flash", 6], - ["๐Ÿ“น", "video_camera", 6], - ["๐ŸŽฅ", "movie_camera", 6], - ["๐Ÿ“ฝ", "film_projector", 6], - ["๐ŸŽž", "film_strip", 6], - ["๐Ÿ“ž", "telephone_receiver", 6], - ["โ˜Ž๏ธ", "phone", 6], - ["๐Ÿ“Ÿ", "pager", 6], - ["๐Ÿ“ ", "fax", 6], - ["๐Ÿ“บ", "tv", 6], - ["๐Ÿ“ป", "radio", 6], - ["๐ŸŽ™", "studio_microphone", 6], - ["๐ŸŽš", "level_slider", 6], - ["๐ŸŽ›", "control_knobs", 6], - ["๐Ÿงญ", "compass", 6], - ["โฑ", "stopwatch", 6], - ["โฒ", "timer_clock", 6], - ["โฐ", "alarm_clock", 6], - ["๐Ÿ•ฐ", "mantelpiece_clock", 6], - ["โณ", "hourglass_flowing_sand", 6], - ["โŒ›", "hourglass", 6], - ["๐Ÿ“ก", "satellite", 6], - ["๐Ÿ”‹", "battery", 6], - ["๐Ÿชซ", "low_battery", 6], - ["๐Ÿ”Œ", "electric_plug", 6], - ["๐Ÿ’ก", "bulb", 6], - ["๐Ÿ”ฆ", "flashlight", 6], - ["๐Ÿ•ฏ", "candle", 6], - ["๐Ÿงฏ", "fire_extinguisher", 6], - ["๐Ÿ—‘", "wastebasket", 6], - ["๐Ÿ›ข", "oil_drum", 6], - ["๐Ÿ’ธ", "money_with_wings", 6], - ["๐Ÿ’ต", "dollar", 6], - ["๐Ÿ’ด", "yen", 6], - ["๐Ÿ’ถ", "euro", 6], - ["๐Ÿ’ท", "pound", 6], - ["๐Ÿ’ฐ", "moneybag", 6], - ["๐Ÿช™", "coin", 6], - ["๐Ÿ’ณ", "credit_card", 6], - ["๐Ÿชช", "identification_card", 6], - ["๐Ÿ’Ž", "gem", 6], - ["โš–", "balance_scale", 6], - ["๐Ÿงฐ", "toolbox", 6], - ["๐Ÿ”ง", "wrench", 6], - ["๐Ÿ”จ", "hammer", 6], - ["โš’", "hammer_and_pick", 6], - ["๐Ÿ› ", "hammer_and_wrench", 6], - ["โ›", "pick", 6], - ["๐Ÿช“", "axe", 6], - ["๐Ÿฆฏ", "probing_cane", 6], - ["๐Ÿ”ฉ", "nut_and_bolt", 6], - ["โš™", "gear", 6], - ["๐Ÿชƒ", "boomerang", 6], - ["๐Ÿชš", "carpentry_saw", 6], - ["๐Ÿช›", "screwdriver", 6], - ["๐Ÿช", "hook", 6], - ["๐Ÿชœ", "ladder", 6], - ["๐Ÿงฑ", "brick", 6], - ["โ›“", "chains", 6], - ["๐Ÿงฒ", "magnet", 6], - ["๐Ÿ”ซ", "gun", 6], - ["๐Ÿ’ฃ", "bomb", 6], - ["๐Ÿงจ", "firecracker", 6], - ["๐Ÿ”ช", "hocho", 6], - ["๐Ÿ—ก", "dagger", 6], - ["โš”", "crossed_swords", 6], - ["๐Ÿ›ก", "shield", 6], - ["๐Ÿšฌ", "smoking", 6], - ["โ˜ ", "skull_and_crossbones", 6], - ["โšฐ", "coffin", 6], - ["โšฑ", "funeral_urn", 6], - ["๐Ÿบ", "amphora", 6], - ["๐Ÿ”ฎ", "crystal_ball", 6], - ["๐Ÿ“ฟ", "prayer_beads", 6], - ["๐Ÿงฟ", "nazar_amulet", 6], - ["๐Ÿ’ˆ", "barber", 6], - ["โš—", "alembic", 6], - ["๐Ÿ”ญ", "telescope", 6], - ["๐Ÿ”ฌ", "microscope", 6], - ["๐Ÿ•ณ", "hole", 6], - ["๐Ÿ’Š", "pill", 6], - ["๐Ÿ’‰", "syringe", 6], - ["๐Ÿฉธ", "drop_of_blood", 6], - ["๐Ÿฉน", "adhesive_bandage", 6], - ["๐Ÿฉบ", "stethoscope", 6], - ["๐Ÿช’", "razor", 6], - ["๐Ÿชฎ", "hair_pick", 6], - ["๐Ÿฉป", "xray", 6], - ["๐Ÿฉผ", "crutch", 6], - ["๐Ÿงฌ", "dna", 6], - ["๐Ÿงซ", "petri_dish", 6], - ["๐Ÿงช", "test_tube", 6], - ["๐ŸŒก", "thermometer", 6], - ["๐Ÿงน", "broom", 6], - ["๐Ÿงบ", "basket", 6], - ["๐Ÿงป", "toilet_paper", 6], - ["๐Ÿท", "label", 6], - ["๐Ÿ”–", "bookmark", 6], - ["๐Ÿšฝ", "toilet", 6], - ["๐Ÿšฟ", "shower", 6], - ["๐Ÿ›", "bathtub", 6], - ["๐Ÿงผ", "soap", 6], - ["๐Ÿงฝ", "sponge", 6], - ["๐Ÿงด", "lotion_bottle", 6], - ["๐Ÿ”‘", "key", 6], - ["๐Ÿ—", "old_key", 6], - ["๐Ÿ›‹", "couch_and_lamp", 6], - ["๐Ÿช”", "diya_Lamp", 6], - ["๐Ÿ›Œ", "sleeping_bed", 6], - ["๐Ÿ›", "bed", 6], - ["๐Ÿšช", "door", 6], - ["๐Ÿช‘", "chair", 6], - ["๐Ÿ›Ž", "bellhop_bell", 6], - ["๐Ÿงธ", "teddy_bear", 6], - ["๐Ÿ–ผ", "framed_picture", 6], - ["๐Ÿ—บ", "world_map", 6], - ["๐Ÿ›—", "elevator", 6], - ["๐Ÿชž", "mirror", 6], - ["๐ŸชŸ", "window", 6], - ["๐Ÿช ", "plunger", 6], - ["๐Ÿชค", "mouse_trap", 6], - ["๐Ÿชฃ", "bucket", 6], - ["๐Ÿชฅ", "toothbrush", 6], - ["๐Ÿซง", "bubbles", 6], - ["โ›ฑ", "parasol_on_ground", 6], - ["๐Ÿ—ฟ", "moyai", 6], - ["๐Ÿ›", "shopping", 6], - ["๐Ÿ›’", "shopping_cart", 6], - ["๐ŸŽˆ", "balloon", 6], - ["๐ŸŽ", "flags", 6], - ["๐ŸŽ€", "ribbon", 6], - ["๐ŸŽ", "gift", 6], - ["๐ŸŽŠ", "confetti_ball", 6], - ["๐ŸŽ‰", "tada", 6], - ["๐ŸŽŽ", "dolls", 6], - ["๐Ÿชญ", "folding_hand_fan", 6], - ["๐ŸŽ", "wind_chime", 6], - ["๐ŸŽŒ", "crossed_flags", 6], - ["๐Ÿฎ", "izakaya_lantern", 6], - ["๐Ÿงง", "red_envelope", 6], - ["โœ‰๏ธ", "email", 6], - ["๐Ÿ“ฉ", "envelope_with_arrow", 6], - ["๐Ÿ“จ", "incoming_envelope", 6], - ["๐Ÿ“ง", "e-mail", 6], - ["๐Ÿ’Œ", "love_letter", 6], - ["๐Ÿ“ฎ", "postbox", 6], - ["๐Ÿ“ช", "mailbox_closed", 6], - ["๐Ÿ“ซ", "mailbox", 6], - ["๐Ÿ“ฌ", "mailbox_with_mail", 6], - ["๐Ÿ“ญ", "mailbox_with_no_mail", 6], - ["๐Ÿ“ฆ", "package", 6], - ["๐Ÿ“ฏ", "postal_horn", 6], - ["๐Ÿ“ฅ", "inbox_tray", 6], - ["๐Ÿ“ค", "outbox_tray", 6], - ["๐Ÿ“œ", "scroll", 6], - ["๐Ÿ“ƒ", "page_with_curl", 6], - ["๐Ÿ“‘", "bookmark_tabs", 6], - ["๐Ÿงพ", "receipt", 6], - ["๐Ÿ“Š", "bar_chart", 6], - ["๐Ÿ“ˆ", "chart_with_upwards_trend", 6], - ["๐Ÿ“‰", "chart_with_downwards_trend", 6], - ["๐Ÿ“„", "page_facing_up", 6], - ["๐Ÿ“…", "date", 6], - ["๐Ÿ“†", "calendar", 6], - ["๐Ÿ—“", "spiral_calendar", 6], - ["๐Ÿ“‡", "card_index", 6], - ["๐Ÿ—ƒ", "card_file_box", 6], - ["๐Ÿ—ณ", "ballot_box", 6], - ["๐Ÿ—„", "file_cabinet", 6], - ["๐Ÿ“‹", "clipboard", 6], - ["๐Ÿ—’", "spiral_notepad", 6], - ["๐Ÿ“", "file_folder", 6], - ["๐Ÿ“‚", "open_file_folder", 6], - ["๐Ÿ—‚", "card_index_dividers", 6], - ["๐Ÿ—ž", "newspaper_roll", 6], - ["๐Ÿ“ฐ", "newspaper", 6], - ["๐Ÿ““", "notebook", 6], - ["๐Ÿ“•", "closed_book", 6], - ["๐Ÿ“—", "green_book", 6], - ["๐Ÿ“˜", "blue_book", 6], - ["๐Ÿ“™", "orange_book", 6], - ["๐Ÿ“”", "notebook_with_decorative_cover", 6], - ["๐Ÿ“’", "ledger", 6], - ["๐Ÿ“š", "books", 6], - ["๐Ÿ“–", "open_book", 6], - ["๐Ÿงท", "safety_pin", 6], - ["๐Ÿ”—", "link", 6], - ["๐Ÿ“Ž", "paperclip", 6], - ["๐Ÿ–‡", "paperclips", 6], - ["โœ‚๏ธ", "scissors", 6], - ["๐Ÿ“", "triangular_ruler", 6], - ["๐Ÿ“", "straight_ruler", 6], - ["๐Ÿงฎ", "abacus", 6], - ["๐Ÿ“Œ", "pushpin", 6], - ["๐Ÿ“", "round_pushpin", 6], - ["๐Ÿšฉ", "triangular_flag_on_post", 6], - ["๐Ÿณ", "white_flag", 6], - ["๐Ÿด", "black_flag", 6], - ["๐Ÿณ๏ธโ€๐ŸŒˆ", "rainbow_flag", 6], - ["๐Ÿณ๏ธโ€โšง๏ธ", "transgender_flag", 6], - ["๐Ÿ”", "closed_lock_with_key", 6], - ["๐Ÿ”’", "lock", 6], - ["๐Ÿ”“", "unlock", 6], - ["๐Ÿ”", "lock_with_ink_pen", 6], - ["๐Ÿ–Š", "pen", 6], - ["๐Ÿ–‹", "fountain_pen", 6], - ["โœ’๏ธ", "black_nib", 6], - ["๐Ÿ“", "memo", 6], - ["โœ๏ธ", "pencil2", 6], - ["๐Ÿ–", "crayon", 6], - ["๐Ÿ–Œ", "paintbrush", 6], - ["๐Ÿ”", "mag", 6], - ["๐Ÿ”Ž", "mag_right", 6], - ["๐Ÿชฆ", "headstone", 6], - ["๐Ÿชง", "placard", 6], - ["๐Ÿ’ฏ", "100", 7], - ["๐Ÿ”ข", "1234", 7], - ["๐Ÿฉท", "pink_heart", 7], - ["โค๏ธ", "heart", 7], - ["๐Ÿงก", "orange_heart", 7], - ["๐Ÿ’›", "yellow_heart", 7], - ["๐Ÿ’š", "green_heart", 7], - ["๐Ÿฉต", "light_blue_heart", 7], - ["๐Ÿ’™", "blue_heart", 7], - ["๐Ÿ’œ", "purple_heart", 7], - ["๐ŸคŽ", "brown_heart", 7], - ["๐Ÿ–ค", "black_heart", 7], - ["๐Ÿฉถ", "grey_heart", 7], - ["๐Ÿค", "white_heart", 7], - ["๐Ÿ’”", "broken_heart", 7], - ["โฃ", "heavy_heart_exclamation", 7], - ["๐Ÿ’•", "two_hearts", 7], - ["๐Ÿ’ž", "revolving_hearts", 7], - ["๐Ÿ’“", "heartbeat", 7], - ["๐Ÿ’—", "heartpulse", 7], - ["๐Ÿ’–", "sparkling_heart", 7], - ["๐Ÿ’˜", "cupid", 7], - ["๐Ÿ’", "gift_heart", 7], - ["๐Ÿ’Ÿ", "heart_decoration", 7], - ["โค๏ธโ€๐Ÿ”ฅ", "heart_on_fire", 7], - ["โค๏ธโ€๐Ÿฉน", "mending_heart", 7], - ["โ˜ฎ", "peace_symbol", 7], - ["โœ", "latin_cross", 7], - ["โ˜ช", "star_and_crescent", 7], - ["๐Ÿ•‰", "om", 7], - ["โ˜ธ", "wheel_of_dharma", 7], - ["๐Ÿชฏ", "khanda", 7], - ["โœก", "star_of_david", 7], - ["๐Ÿ”ฏ", "six_pointed_star", 7], - ["๐Ÿ•Ž", "menorah", 7], - ["โ˜ฏ", "yin_yang", 7], - ["โ˜ฆ", "orthodox_cross", 7], - ["๐Ÿ›", "place_of_worship", 7], - ["โ›Ž", "ophiuchus", 7], - ["โ™ˆ", "aries", 7], - ["โ™‰", "taurus", 7], - ["โ™Š", "gemini", 7], - ["โ™‹", "cancer", 7], - ["โ™Œ", "leo", 7], - ["โ™", "virgo", 7], - ["โ™Ž", "libra", 7], - ["โ™", "scorpius", 7], - ["โ™", "sagittarius", 7], - ["โ™‘", "capricorn", 7], - ["โ™’", "aquarius", 7], - ["โ™“", "pisces", 7], - ["๐Ÿ†”", "id", 7], - ["โš›", "atom_symbol", 7], - ["โšง๏ธ", "transgender_symbol", 7], - ["๐Ÿˆณ", "u7a7a", 7], - ["๐Ÿˆน", "u5272", 7], - ["โ˜ข", "radioactive", 7], - ["โ˜ฃ", "biohazard", 7], - ["๐Ÿ“ด", "mobile_phone_off", 7], - ["๐Ÿ“ณ", "vibration_mode", 7], - ["๐Ÿˆถ", "u6709", 7], - ["๐Ÿˆš", "u7121", 7], - ["๐Ÿˆธ", "u7533", 7], - ["๐Ÿˆบ", "u55b6", 7], - ["๐Ÿˆท๏ธ", "u6708", 7], - ["โœด๏ธ", "eight_pointed_black_star", 7], - ["๐Ÿ†š", "vs", 7], - ["๐Ÿ‰‘", "accept", 7], - ["๐Ÿ’ฎ", "white_flower", 7], - ["๐Ÿ‰", "ideograph_advantage", 7], - ["ใŠ™๏ธ", "secret", 7], - ["ใŠ—๏ธ", "congratulations", 7], - ["๐Ÿˆด", "u5408", 7], - ["๐Ÿˆต", "u6e80", 7], - ["๐Ÿˆฒ", "u7981", 7], - ["๐Ÿ…ฐ๏ธ", "a", 7], - ["๐Ÿ…ฑ๏ธ", "b", 7], - ["๐Ÿ†Ž", "ab", 7], - ["๐Ÿ†‘", "cl", 7], - ["๐Ÿ…พ๏ธ", "o2", 7], - ["๐Ÿ†˜", "sos", 7], - ["โ›”", "no_entry", 7], - ["๐Ÿ“›", "name_badge", 7], - ["๐Ÿšซ", "no_entry_sign", 7], - ["โŒ", "x", 7], - ["โญ•", "o", 7], - ["๐Ÿ›‘", "stop_sign", 7], - ["๐Ÿ’ข", "anger", 7], - ["โ™จ๏ธ", "hotsprings", 7], - ["๐Ÿšท", "no_pedestrians", 7], - ["๐Ÿšฏ", "do_not_litter", 7], - ["๐Ÿšณ", "no_bicycles", 7], - ["๐Ÿšฑ", "non-potable_water", 7], - ["๐Ÿ”ž", "underage", 7], - ["๐Ÿ“ต", "no_mobile_phones", 7], - ["โ—", "exclamation", 7], - ["โ•", "grey_exclamation", 7], - ["โ“", "question", 7], - ["โ”", "grey_question", 7], - ["โ€ผ๏ธ", "bangbang", 7], - ["โ‰๏ธ", "interrobang", 7], - ["๐Ÿ”…", "low_brightness", 7], - ["๐Ÿ”†", "high_brightness", 7], - ["๐Ÿ”ฑ", "trident", 7], - ["โšœ", "fleur_de_lis", 7], - ["ใ€ฝ๏ธ", "part_alternation_mark", 7], - ["โš ๏ธ", "warning", 7], - ["๐Ÿšธ", "children_crossing", 7], - ["๐Ÿ”ฐ", "beginner", 7], - ["โ™ป๏ธ", "recycle", 7], - ["๐Ÿˆฏ", "u6307", 7], - ["๐Ÿ’น", "chart", 7], - ["โ‡๏ธ", "sparkle", 7], - ["โœณ๏ธ", "eight_spoked_asterisk", 7], - ["โŽ", "negative_squared_cross_mark", 7], - ["โœ…", "white_check_mark", 7], - ["๐Ÿ’ ", "diamond_shape_with_a_dot_inside", 7], - ["๐ŸŒ€", "cyclone", 7], - ["โžฟ", "loop", 7], - ["๐ŸŒ", "globe_with_meridians", 7], - ["โ“‚๏ธ", "m", 7], - ["๐Ÿง", "atm", 7], - ["๐Ÿˆ‚๏ธ", "sa", 7], - ["๐Ÿ›‚", "passport_control", 7], - ["๐Ÿ›ƒ", "customs", 7], - ["๐Ÿ›„", "baggage_claim", 7], - ["๐Ÿ›…", "left_luggage", 7], - ["๐Ÿ›œ", "wireless", 7], - ["โ™ฟ", "wheelchair", 7], - ["๐Ÿšญ", "no_smoking", 7], - ["๐Ÿšพ", "wc", 7], - ["๐Ÿ…ฟ๏ธ", "parking", 7], - ["๐Ÿšฐ", "potable_water", 7], - ["๐Ÿšน", "mens", 7], - ["๐Ÿšบ", "womens", 7], - ["๐Ÿšผ", "baby_symbol", 7], - ["๐Ÿšป", "restroom", 7], - ["๐Ÿšฎ", "put_litter_in_its_place", 7], - ["๐ŸŽฆ", "cinema", 7], - ["๐Ÿ“ถ", "signal_strength", 7], - ["๐Ÿˆ", "koko", 7], - ["๐Ÿ†–", "ng", 7], - ["๐Ÿ†—", "ok", 7], - ["๐Ÿ†™", "up", 7], - ["๐Ÿ†’", "cool", 7], - ["๐Ÿ†•", "new", 7], - ["๐Ÿ†“", "free", 7], - ["0๏ธโƒฃ", "zero", 7], - ["1๏ธโƒฃ", "one", 7], - ["2๏ธโƒฃ", "two", 7], - ["3๏ธโƒฃ", "three", 7], - ["4๏ธโƒฃ", "four", 7], - ["5๏ธโƒฃ", "five", 7], - ["6๏ธโƒฃ", "six", 7], - ["7๏ธโƒฃ", "seven", 7], - ["8๏ธโƒฃ", "eight", 7], - ["9๏ธโƒฃ", "nine", 7], - ["๐Ÿ”Ÿ", "keycap_ten", 7], - ["*โƒฃ", "asterisk", 7], - ["โ๏ธ", "eject_button", 7], - ["โ–ถ๏ธ", "arrow_forward", 7], - ["โธ", "pause_button", 7], - ["โญ", "next_track_button", 7], - ["โน", "stop_button", 7], - ["โบ", "record_button", 7], - ["โฏ", "play_or_pause_button", 7], - ["โฎ", "previous_track_button", 7], - ["โฉ", "fast_forward", 7], - ["โช", "rewind", 7], - ["๐Ÿ”€", "twisted_rightwards_arrows", 7], - ["๐Ÿ”", "repeat", 7], - ["๐Ÿ”‚", "repeat_one", 7], - ["โ—€๏ธ", "arrow_backward", 7], - ["๐Ÿ”ผ", "arrow_up_small", 7], - ["๐Ÿ”ฝ", "arrow_down_small", 7], - ["โซ", "arrow_double_up", 7], - ["โฌ", "arrow_double_down", 7], - ["โžก๏ธ", "arrow_right", 7], - ["โฌ…๏ธ", "arrow_left", 7], - ["โฌ†๏ธ", "arrow_up", 7], - ["โฌ‡๏ธ", "arrow_down", 7], - ["โ†—๏ธ", "arrow_upper_right", 7], - ["โ†˜๏ธ", "arrow_lower_right", 7], - ["โ†™๏ธ", "arrow_lower_left", 7], - ["โ†–๏ธ", "arrow_upper_left", 7], - ["โ†•๏ธ", "arrow_up_down", 7], - ["โ†”๏ธ", "left_right_arrow", 7], - ["๐Ÿ”„", "arrows_counterclockwise", 7], - ["โ†ช๏ธ", "arrow_right_hook", 7], - ["โ†ฉ๏ธ", "leftwards_arrow_with_hook", 7], - ["โคด๏ธ", "arrow_heading_up", 7], - ["โคต๏ธ", "arrow_heading_down", 7], - ["#๏ธโƒฃ", "hash", 7], - ["โ„น๏ธ", "information_source", 7], - ["๐Ÿ”ค", "abc", 7], - ["๐Ÿ”ก", "abcd", 7], - ["๐Ÿ” ", "capital_abcd", 7], - ["๐Ÿ”ฃ", "symbols", 7], - ["๐ŸŽต", "musical_note", 7], - ["๐ŸŽถ", "notes", 7], - ["ใ€ฐ๏ธ", "wavy_dash", 7], - ["โžฐ", "curly_loop", 7], - ["โœ”๏ธ", "heavy_check_mark", 7], - ["๐Ÿ”ƒ", "arrows_clockwise", 7], - ["โž•", "heavy_plus_sign", 7], - ["โž–", "heavy_minus_sign", 7], - ["โž—", "heavy_division_sign", 7], - ["โœ–๏ธ", "heavy_multiplication_x", 7], - ["๐ŸŸฐ", "heavy_equals_sign", 7], - ["โ™พ", "infinity", 7], - ["๐Ÿ’ฒ", "heavy_dollar_sign", 7], - ["๐Ÿ’ฑ", "currency_exchange", 7], - ["ยฉ๏ธ", "copyright", 7], - ["ยฎ๏ธ", "registered", 7], - ["โ„ข๏ธ", "tm", 7], - ["๐Ÿ”š", "end", 7], - ["๐Ÿ”™", "back", 7], - ["๐Ÿ”›", "on", 7], - ["๐Ÿ”", "top", 7], - ["๐Ÿ”œ", "soon", 7], - ["โ˜‘๏ธ", "ballot_box_with_check", 7], - ["๐Ÿ”˜", "radio_button", 7], - ["โšซ", "black_circle", 7], - ["โšช", "white_circle", 7], - ["๐Ÿ”ด", "red_circle", 7], - ["๐ŸŸ ", "orange_circle", 7], - ["๐ŸŸก", "yellow_circle", 7], - ["๐ŸŸข", "green_circle", 7], - ["๐Ÿ”ต", "large_blue_circle", 7], - ["๐ŸŸฃ", "purple_circle", 7], - ["๐ŸŸค", "brown_circle", 7], - ["๐Ÿ”ธ", "small_orange_diamond", 7], - ["๐Ÿ”น", "small_blue_diamond", 7], - ["๐Ÿ”ถ", "large_orange_diamond", 7], - ["๐Ÿ”ท", "large_blue_diamond", 7], - ["๐Ÿ”บ", "small_red_triangle", 7], - ["โ–ช๏ธ", "black_small_square", 7], - ["โ–ซ๏ธ", "white_small_square", 7], - ["โฌ›", "black_large_square", 7], - ["โฌœ", "white_large_square", 7], - ["๐ŸŸฅ", "red_square", 7], - ["๐ŸŸง", "orange_square", 7], - ["๐ŸŸจ", "yellow_square", 7], - ["๐ŸŸฉ", "green_square", 7], - ["๐ŸŸฆ", "blue_square", 7], - ["๐ŸŸช", "purple_square", 7], - ["๐ŸŸซ", "brown_square", 7], - ["๐Ÿ”ป", "small_red_triangle_down", 7], - ["โ—ผ๏ธ", "black_medium_square", 7], - ["โ—ป๏ธ", "white_medium_square", 7], - ["โ—พ", "black_medium_small_square", 7], - ["โ—ฝ", "white_medium_small_square", 7], - ["๐Ÿ”ฒ", "black_square_button", 7], - ["๐Ÿ”ณ", "white_square_button", 7], - ["๐Ÿ”ˆ", "speaker", 7], - ["๐Ÿ”‰", "sound", 7], - ["๐Ÿ”Š", "loud_sound", 7], - ["๐Ÿ”‡", "mute", 7], - ["๐Ÿ“ฃ", "mega", 7], - ["๐Ÿ“ข", "loudspeaker", 7], - ["๐Ÿ””", "bell", 7], - ["๐Ÿ”•", "no_bell", 7], - ["๐Ÿƒ", "black_joker", 7], - ["๐Ÿ€„", "mahjong", 7], - ["โ™ ๏ธ", "spades", 7], - ["โ™ฃ๏ธ", "clubs", 7], - ["โ™ฅ๏ธ", "hearts", 7], - ["โ™ฆ๏ธ", "diamonds", 7], - ["๐ŸŽด", "flower_playing_cards", 7], - ["๐Ÿ’ญ", "thought_balloon", 7], - ["๐Ÿ—ฏ", "right_anger_bubble", 7], - ["๐Ÿ’ฌ", "speech_balloon", 7], - ["๐Ÿ—จ", "left_speech_bubble", 7], - ["๐Ÿ•", "clock1", 7], - ["๐Ÿ•‘", "clock2", 7], - ["๐Ÿ•’", "clock3", 7], - ["๐Ÿ•“", "clock4", 7], - ["๐Ÿ•”", "clock5", 7], - ["๐Ÿ••", "clock6", 7], - ["๐Ÿ•–", "clock7", 7], - ["๐Ÿ•—", "clock8", 7], - ["๐Ÿ•˜", "clock9", 7], - ["๐Ÿ•™", "clock10", 7], - ["๐Ÿ•š", "clock11", 7], - ["๐Ÿ•›", "clock12", 7], - ["๐Ÿ•œ", "clock130", 7], - ["๐Ÿ•", "clock230", 7], - ["๐Ÿ•ž", "clock330", 7], - ["๐Ÿ•Ÿ", "clock430", 7], - ["๐Ÿ• ", "clock530", 7], - ["๐Ÿ•ก", "clock630", 7], - ["๐Ÿ•ข", "clock730", 7], - ["๐Ÿ•ฃ", "clock830", 7], - ["๐Ÿ•ค", "clock930", 7], - ["๐Ÿ•ฅ", "clock1030", 7], - ["๐Ÿ•ฆ", "clock1130", 7], - ["๐Ÿ•ง", "clock1230", 7], - ["๐Ÿ‡ฆ๐Ÿ‡ซ", "afghanistan", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฝ", "aland_islands", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฑ", "albania", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฟ", "algeria", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ธ", "american_samoa", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฉ", "andorra", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ด", "angola", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฎ", "anguilla", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ถ", "antarctica", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฌ", "antigua_barbuda", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ท", "argentina", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฒ", "armenia", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ผ", "aruba", 8], - ["๐Ÿ‡ฆ๐Ÿ‡จ", "ascension_island", 8], - ["๐Ÿ‡ฆ๐Ÿ‡บ", "australia", 8], - ["๐Ÿ‡ฆ๐Ÿ‡น", "austria", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ฟ", "azerbaijan", 8], - ["๐Ÿ‡ง๐Ÿ‡ธ", "bahamas", 8], - ["๐Ÿ‡ง๐Ÿ‡ญ", "bahrain", 8], - ["๐Ÿ‡ง๐Ÿ‡ฉ", "bangladesh", 8], - ["๐Ÿ‡ง๐Ÿ‡ง", "barbados", 8], - ["๐Ÿ‡ง๐Ÿ‡พ", "belarus", 8], - ["๐Ÿ‡ง๐Ÿ‡ช", "belgium", 8], - ["๐Ÿ‡ง๐Ÿ‡ฟ", "belize", 8], - ["๐Ÿ‡ง๐Ÿ‡ฏ", "benin", 8], - ["๐Ÿ‡ง๐Ÿ‡ฒ", "bermuda", 8], - ["๐Ÿ‡ง๐Ÿ‡น", "bhutan", 8], - ["๐Ÿ‡ง๐Ÿ‡ด", "bolivia", 8], - ["๐Ÿ‡ง๐Ÿ‡ถ", "caribbean_netherlands", 8], - ["๐Ÿ‡ง๐Ÿ‡ฆ", "bosnia_herzegovina", 8], - ["๐Ÿ‡ง๐Ÿ‡ผ", "botswana", 8], - ["๐Ÿ‡ง๐Ÿ‡ท", "brazil", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ด", "british_indian_ocean_territory", 8], - ["๐Ÿ‡ป๐Ÿ‡ฌ", "british_virgin_islands", 8], - ["๐Ÿ‡ง๐Ÿ‡ณ", "brunei", 8], - ["๐Ÿ‡ง๐Ÿ‡ฌ", "bulgaria", 8], - ["๐Ÿ‡ง๐Ÿ‡ซ", "burkina_faso", 8], - ["๐Ÿ‡ง๐Ÿ‡ฎ", "burundi", 8], - ["๐Ÿ‡จ๐Ÿ‡ป", "cape_verde", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ญ", "cambodia", 8], - ["๐Ÿ‡จ๐Ÿ‡ฒ", "cameroon", 8], - ["๐Ÿ‡จ๐Ÿ‡ฆ", "canada", 8], - ["๐Ÿ‡ฎ๐Ÿ‡จ", "canary_islands", 8], - ["๐Ÿ‡ฐ๐Ÿ‡พ", "cayman_islands", 8], - ["๐Ÿ‡จ๐Ÿ‡ซ", "central_african_republic", 8], - ["๐Ÿ‡น๐Ÿ‡ฉ", "chad", 8], - ["๐Ÿ‡จ๐Ÿ‡ฑ", "chile", 8], - ["๐Ÿ‡จ๐Ÿ‡ณ", "cn", 8], - ["๐Ÿ‡จ๐Ÿ‡ฝ", "christmas_island", 8], - ["๐Ÿ‡จ๐Ÿ‡จ", "cocos_islands", 8], - ["๐Ÿ‡จ๐Ÿ‡ด", "colombia", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฒ", "comoros", 8], - ["๐Ÿ‡จ๐Ÿ‡ฌ", "congo_brazzaville", 8], - ["๐Ÿ‡จ๐Ÿ‡ฉ", "congo_kinshasa", 8], - ["๐Ÿ‡จ๐Ÿ‡ฐ", "cook_islands", 8], - ["๐Ÿ‡จ๐Ÿ‡ท", "costa_rica", 8], - ["๐Ÿ‡ญ๐Ÿ‡ท", "croatia", 8], - ["๐Ÿ‡จ๐Ÿ‡บ", "cuba", 8], - ["๐Ÿ‡จ๐Ÿ‡ผ", "curacao", 8], - ["๐Ÿ‡จ๐Ÿ‡พ", "cyprus", 8], - ["๐Ÿ‡จ๐Ÿ‡ฟ", "czech_republic", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฐ", "denmark", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฏ", "djibouti", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ฒ", "dominica", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ด", "dominican_republic", 8], - ["๐Ÿ‡ช๐Ÿ‡จ", "ecuador", 8], - ["๐Ÿ‡ช๐Ÿ‡ฌ", "egypt", 8], - ["๐Ÿ‡ธ๐Ÿ‡ป", "el_salvador", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ถ", "equatorial_guinea", 8], - ["๐Ÿ‡ช๐Ÿ‡ท", "eritrea", 8], - ["๐Ÿ‡ช๐Ÿ‡ช", "estonia", 8], - ["๐Ÿ‡ช๐Ÿ‡น", "ethiopia", 8], - ["๐Ÿ‡ช๐Ÿ‡บ", "eu", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฐ", "falkland_islands", 8], - ["๐Ÿ‡ซ๐Ÿ‡ด", "faroe_islands", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฏ", "fiji", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฎ", "finland", 8], - ["๐Ÿ‡ซ๐Ÿ‡ท", "fr", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ซ", "french_guiana", 8], - ["๐Ÿ‡ต๐Ÿ‡ซ", "french_polynesia", 8], - ["๐Ÿ‡น๐Ÿ‡ซ", "french_southern_territories", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฆ", "gabon", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฒ", "gambia", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ช", "georgia", 8], - ["๐Ÿ‡ฉ๐Ÿ‡ช", "de", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ญ", "ghana", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฎ", "gibraltar", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ท", "greece", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฑ", "greenland", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฉ", "grenada", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ต", "guadeloupe", 8], - ["๐Ÿ‡ฌ๐Ÿ‡บ", "guam", 8], - ["๐Ÿ‡ฌ๐Ÿ‡น", "guatemala", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ฌ", "guernsey", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ณ", "guinea", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ผ", "guinea_bissau", 8], - ["๐Ÿ‡ฌ๐Ÿ‡พ", "guyana", 8], - ["๐Ÿ‡ญ๐Ÿ‡น", "haiti", 8], - ["๐Ÿ‡ญ๐Ÿ‡ณ", "honduras", 8], - ["๐Ÿ‡ญ๐Ÿ‡ฐ", "hong_kong", 8], - ["๐Ÿ‡ญ๐Ÿ‡บ", "hungary", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ธ", "iceland", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ณ", "india", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ฉ", "indonesia", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ท", "iran", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ถ", "iraq", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ช", "ireland", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ฒ", "isle_of_man", 8], - ["๐Ÿ‡ฎ๐Ÿ‡ฑ", "israel", 8], - ["๐Ÿ‡ฎ๐Ÿ‡น", "it", 8], - ["๐Ÿ‡จ๐Ÿ‡ฎ", "cote_divoire", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ฒ", "jamaica", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ต", "jp", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ช", "jersey", 8], - ["๐Ÿ‡ฏ๐Ÿ‡ด", "jordan", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฟ", "kazakhstan", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ช", "kenya", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฎ", "kiribati", 8], - ["๐Ÿ‡ฝ๐Ÿ‡ฐ", "kosovo", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ผ", "kuwait", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ฌ", "kyrgyzstan", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ฆ", "laos", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ป", "latvia", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ง", "lebanon", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ธ", "lesotho", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ท", "liberia", 8], - ["๐Ÿ‡ฑ๐Ÿ‡พ", "libya", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ฎ", "liechtenstein", 8], - ["๐Ÿ‡ฑ๐Ÿ‡น", "lithuania", 8], - ["๐Ÿ‡ฑ๐Ÿ‡บ", "luxembourg", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ด", "macau", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฐ", "macedonia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฌ", "madagascar", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ผ", "malawi", 8], - ["๐Ÿ‡ฒ๐Ÿ‡พ", "malaysia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ป", "maldives", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฑ", "mali", 8], - ["๐Ÿ‡ฒ๐Ÿ‡น", "malta", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ญ", "marshall_islands", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ถ", "martinique", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ท", "mauritania", 8], - ["๐Ÿ‡ฒ๐Ÿ‡บ", "mauritius", 8], - ["๐Ÿ‡พ๐Ÿ‡น", "mayotte", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฝ", "mexico", 8], - ["๐Ÿ‡ซ๐Ÿ‡ฒ", "micronesia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฉ", "moldova", 8], - ["๐Ÿ‡ฒ๐Ÿ‡จ", "monaco", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ณ", "mongolia", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ช", "montenegro", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ธ", "montserrat", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฆ", "morocco", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฟ", "mozambique", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ฒ", "myanmar", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฆ", "namibia", 8], - ["๐Ÿ‡ณ๐Ÿ‡ท", "nauru", 8], - ["๐Ÿ‡ณ๐Ÿ‡ต", "nepal", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฑ", "netherlands", 8], - ["๐Ÿ‡ณ๐Ÿ‡จ", "new_caledonia", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฟ", "new_zealand", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฎ", "nicaragua", 8], - ["๐Ÿ‡ณ๐Ÿ‡ช", "niger", 8], - ["๐Ÿ‡ณ๐Ÿ‡ฌ", "nigeria", 8], - ["๐Ÿ‡ณ๐Ÿ‡บ", "niue", 8], - ["๐Ÿ‡ณ๐Ÿ‡ซ", "norfolk_island", 8], - ["๐Ÿ‡ฒ๐Ÿ‡ต", "northern_mariana_islands", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ต", "north_korea", 8], - ["๐Ÿ‡ณ๐Ÿ‡ด", "norway", 8], - ["๐Ÿ‡ด๐Ÿ‡ฒ", "oman", 8], - ["๐Ÿ‡ต๐Ÿ‡ฐ", "pakistan", 8], - ["๐Ÿ‡ต๐Ÿ‡ผ", "palau", 8], - ["๐Ÿ‡ต๐Ÿ‡ธ", "palestinian_territories", 8], - ["๐Ÿ‡ต๐Ÿ‡ฆ", "panama", 8], - ["๐Ÿ‡ต๐Ÿ‡ฌ", "papua_new_guinea", 8], - ["๐Ÿ‡ต๐Ÿ‡พ", "paraguay", 8], - ["๐Ÿ‡ต๐Ÿ‡ช", "peru", 8], - ["๐Ÿ‡ต๐Ÿ‡ญ", "philippines", 8], - ["๐Ÿ‡ต๐Ÿ‡ณ", "pitcairn_islands", 8], - ["๐Ÿ‡ต๐Ÿ‡ฑ", "poland", 8], - ["๐Ÿ‡ต๐Ÿ‡น", "portugal", 8], - ["๐Ÿ‡ต๐Ÿ‡ท", "puerto_rico", 8], - ["๐Ÿ‡ถ๐Ÿ‡ฆ", "qatar", 8], - ["๐Ÿ‡ท๐Ÿ‡ช", "reunion", 8], - ["๐Ÿ‡ท๐Ÿ‡ด", "romania", 8], - ["๐Ÿ‡ท๐Ÿ‡บ", "ru", 8], - ["๐Ÿ‡ท๐Ÿ‡ผ", "rwanda", 8], - ["๐Ÿ‡ง๐Ÿ‡ฑ", "st_barthelemy", 8], - ["๐Ÿ‡ธ๐Ÿ‡ญ", "st_helena", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ณ", "st_kitts_nevis", 8], - ["๐Ÿ‡ฑ๐Ÿ‡จ", "st_lucia", 8], - ["๐Ÿ‡ต๐Ÿ‡ฒ", "st_pierre_miquelon", 8], - ["๐Ÿ‡ป๐Ÿ‡จ", "st_vincent_grenadines", 8], - ["๐Ÿ‡ผ๐Ÿ‡ธ", "samoa", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฒ", "san_marino", 8], - ["๐Ÿ‡ธ๐Ÿ‡น", "sao_tome_principe", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฆ", "saudi_arabia", 8], - ["๐Ÿ‡ธ๐Ÿ‡ณ", "senegal", 8], - ["๐Ÿ‡ท๐Ÿ‡ธ", "serbia", 8], - ["๐Ÿ‡ธ๐Ÿ‡จ", "seychelles", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฑ", "sierra_leone", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฌ", "singapore", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฝ", "sint_maarten", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฐ", "slovakia", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฎ", "slovenia", 8], - ["๐Ÿ‡ธ๐Ÿ‡ง", "solomon_islands", 8], - ["๐Ÿ‡ธ๐Ÿ‡ด", "somalia", 8], - ["๐Ÿ‡ฟ๐Ÿ‡ฆ", "south_africa", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ธ", "south_georgia_south_sandwich_islands", 8], - ["๐Ÿ‡ฐ๐Ÿ‡ท", "kr", 8], - ["๐Ÿ‡ธ๐Ÿ‡ธ", "south_sudan", 8], - ["๐Ÿ‡ช๐Ÿ‡ธ", "es", 8], - ["๐Ÿ‡ฑ๐Ÿ‡ฐ", "sri_lanka", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฉ", "sudan", 8], - ["๐Ÿ‡ธ๐Ÿ‡ท", "suriname", 8], - ["๐Ÿ‡ธ๐Ÿ‡ฟ", "swaziland", 8], - ["๐Ÿ‡ธ๐Ÿ‡ช", "sweden", 8], - ["๐Ÿ‡จ๐Ÿ‡ญ", "switzerland", 8], - ["๐Ÿ‡ธ๐Ÿ‡พ", "syria", 8], - ["๐Ÿ‡น๐Ÿ‡ผ", "taiwan", 8], - ["๐Ÿ‡น๐Ÿ‡ฏ", "tajikistan", 8], - ["๐Ÿ‡น๐Ÿ‡ฟ", "tanzania", 8], - ["๐Ÿ‡น๐Ÿ‡ญ", "thailand", 8], - ["๐Ÿ‡น๐Ÿ‡ฑ", "timor_leste", 8], - ["๐Ÿ‡น๐Ÿ‡ฌ", "togo", 8], - ["๐Ÿ‡น๐Ÿ‡ฐ", "tokelau", 8], - ["๐Ÿ‡น๐Ÿ‡ด", "tonga", 8], - ["๐Ÿ‡น๐Ÿ‡น", "trinidad_tobago", 8], - ["๐Ÿ‡น๐Ÿ‡ฆ", "tristan_da_cunha", 8], - ["๐Ÿ‡น๐Ÿ‡ณ", "tunisia", 8], - ["๐Ÿ‡น๐Ÿ‡ท", "tr", 8], - ["๐Ÿ‡น๐Ÿ‡ฒ", "turkmenistan", 8], - ["๐Ÿ‡น๐Ÿ‡จ", "turks_caicos_islands", 8], - ["๐Ÿ‡น๐Ÿ‡ป", "tuvalu", 8], - ["๐Ÿ‡บ๐Ÿ‡ฌ", "uganda", 8], - ["๐Ÿ‡บ๐Ÿ‡ฆ", "ukraine", 8], - ["๐Ÿ‡ฆ๐Ÿ‡ช", "united_arab_emirates", 8], - ["๐Ÿ‡ฌ๐Ÿ‡ง", "uk", 8], - ["๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ", "england", 8], - ["๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ", "scotland", 8], - ["๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ", "wales", 8], - ["๐Ÿ‡บ๐Ÿ‡ธ", "us", 8], - ["๐Ÿ‡ป๐Ÿ‡ฎ", "us_virgin_islands", 8], - ["๐Ÿ‡บ๐Ÿ‡พ", "uruguay", 8], - ["๐Ÿ‡บ๐Ÿ‡ฟ", "uzbekistan", 8], - ["๐Ÿ‡ป๐Ÿ‡บ", "vanuatu", 8], - ["๐Ÿ‡ป๐Ÿ‡ฆ", "vatican_city", 8], - ["๐Ÿ‡ป๐Ÿ‡ช", "venezuela", 8], - ["๐Ÿ‡ป๐Ÿ‡ณ", "vietnam", 8], - ["๐Ÿ‡ผ๐Ÿ‡ซ", "wallis_futuna", 8], - ["๐Ÿ‡ช๐Ÿ‡ญ", "western_sahara", 8], - ["๐Ÿ‡พ๐Ÿ‡ช", "yemen", 8], - ["๐Ÿ‡ฟ๐Ÿ‡ฒ", "zambia", 8], - ["๐Ÿ‡ฟ๐Ÿ‡ผ", "zimbabwe", 8], - ["๐Ÿ‡บ๐Ÿ‡ณ", "united_nations", 8], - ["๐Ÿดโ€โ˜ ๏ธ", "pirate_flag", 8] -] diff --git a/packages/frontend/src/pages/admin/instance-block.vue b/packages/frontend/src/pages/admin/instance-block.vue deleted file mode 100644 index e090616b26..0000000000 --- a/packages/frontend/src/pages/admin/instance-block.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - - - diff --git a/packages/frontend/src/pages/admin/proxy-account.vue b/packages/frontend/src/pages/admin/proxy-account.vue deleted file mode 100644 index e7f103af79..0000000000 --- a/packages/frontend/src/pages/admin/proxy-account.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/packages/frontend/src/pages/mfm-cheat-sheet.vue b/packages/frontend/src/pages/mfm-cheat-sheet.vue deleted file mode 100644 index 0c2bf39486..0000000000 --- a/packages/frontend/src/pages/mfm-cheat-sheet.vue +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - diff --git a/packages/frontend/src/scripts/array.ts b/packages/frontend/src/scripts/array.ts deleted file mode 100644 index f2feb29dfc..0000000000 --- a/packages/frontend/src/scripts/array.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -type EndoRelation = (a: T, b: T) => boolean; -type Predicate = (x: T) => boolean; - -/** - * Count the number of elements that satisfy the predicate - */ - -export function countIf(f: Predicate, xs: T[]): number { - return xs.filter(f).length; -} - -/** - * Count the number of elements that is equal to the element - */ -export function count(a: T, xs: T[]): number { - return countIf(x => x === a, xs); -} - -/** - * Concatenate an array of arrays - */ -export function concat(xss: T[][]): T[] { - return ([] as T[]).concat(...xss); -} - -/** - * Intersperse the element between the elements of the array - * @param sep The element to be interspersed - */ -export function intersperse(sep: T, xs: T[]): T[] { - return concat(xs.map(x => [sep, x])).slice(1); -} - -/** - * Returns the array of elements that is not equal to the element - */ -export function erase(a: T, xs: T[]): T[] { - return xs.filter(x => x !== a); -} - -/** - * Finds the array of all elements in the first array not contained in the second array. - * The order of result values are determined by the first array. - */ -export function difference(xs: T[], ys: T[]): T[] { - return xs.filter(x => !ys.includes(x)); -} - -/** - * Remove all but the first element from every group of equivalent elements - */ -export function unique(xs: T[]): T[] { - return [...new Set(xs)]; -} - -export function uniqueBy(values: TValue[], keySelector: (value: TValue) => TKey): TValue[] { - const map = new Map(); - - for (const value of values) { - const key = keySelector(value); - if (!map.has(key)) map.set(key, value); - } - - return [...map.values()]; -} - -export function sum(xs: number[]): number { - return xs.reduce((a, b) => a + b, 0); -} - -export function maximum(xs: number[]): number { - return Math.max(...xs); -} - -/** - * Compare two arrays by lexicographical order - */ -export function lessThan(xs: number[], ys: number[]): boolean { - for (let i = 0; i < Math.min(xs.length, ys.length); i++) { - if (xs[i] < ys[i]) return true; - if (xs[i] > ys[i]) return false; - } - return xs.length < ys.length; -} - -/** - * Returns the longest prefix of elements that satisfy the predicate - */ -export function takeWhile(f: Predicate, xs: T[]): T[] { - const ys: T[] = []; - for (const x of xs) { - if (f(x)) { - ys.push(x); - } else { - break; - } - } - return ys; -} - -export function cumulativeSum(xs: number[]): number[] { - const ys = Array.from(xs); // deep copy - for (let i = 1; i < ys.length; i++) ys[i] += ys[i - 1]; - return ys; -} - -export function toArray(x: T | T[] | undefined): T[] { - return Array.isArray(x) ? x : x != null ? [x] : []; -} - -export function toSingle(x: T | T[] | undefined): T | undefined { - return Array.isArray(x) ? x[0] : x; -} diff --git a/packages/frontend/src/scripts/collapsed.ts b/packages/frontend/src/scripts/collapsed.ts deleted file mode 100644 index e6feb67a54..0000000000 --- a/packages/frontend/src/scripts/collapsed.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -import * as Misskey from 'cherrypick-js'; - -export function shouldCollapsed(note: Misskey.entities.Note, urls: string[]): boolean { - return note.cw == null && ( - note.text != null && ( - (note.text.split('\n').length > 9) || - (note.text.length > 500) || - (urls.length >= 4) - ) || note.files.length >= 5 - ); -} - -export function shouldMfmCollapsed(note: Misskey.entities.Note): boolean { - return note.cw == null && note.text != null && ( - (note.text.includes('$[x2')) || - (note.text.includes('$[x3')) || - (note.text.includes('$[x4')) || - (note.text.includes('$[scale')) - ); -} - -export function shouldAnimatedMfm(note: Misskey.entities.Note): boolean { - return note.cw == null && note.text != null && ( - (note.text.includes('$[tada')) || - (note.text.includes('$[jelly')) || - (note.text.includes('$[twitch')) || - (note.text.includes('$[shake')) || - (note.text.includes('$[spin')) || - (note.text.includes('$[jump')) || - (note.text.includes('$[bounce')) || - (note.text.includes('$[rainbow')) || - (note.text.includes('$[sparkle')) || - (note.text.includes('$[fade')) - ); -} diff --git a/packages/frontend/src/scripts/emoji-base.ts b/packages/frontend/src/scripts/emoji-base.ts deleted file mode 100644 index a01540a3e4..0000000000 --- a/packages/frontend/src/scripts/emoji-base.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -const twemojiSvgBase = '/twemoji'; -const fluentEmojiPngBase = '/fluent-emoji'; - -export function char2twemojiFilePath(char: string): string { - let codes = Array.from(char, x => x.codePointAt(0)?.toString(16)); - if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f'); - codes = codes.filter(x => x && x.length); - const fileName = codes.join('-'); - return `${twemojiSvgBase}/${fileName}.svg`; -} - -export function char2fluentEmojiFilePath(char: string): string { - let codes = Array.from(char, x => x.codePointAt(0)?.toString(16)); - // Fluent Emojiใฏๅ›ฝๆ——้žๅฏพๅฟœ https://github.com/microsoft/fluentui-emoji/issues/25 - if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char); - if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f'); - codes = codes.filter(x => x && x.length); - const fileName = codes.map(x => x!.padStart(4, '0')).join('-'); - return `${fluentEmojiPngBase}/${fileName}.png`; -} diff --git a/packages/frontend/src/scripts/emojilist.ts b/packages/frontend/src/scripts/emojilist.ts deleted file mode 100644 index 6565feba97..0000000000 --- a/packages/frontend/src/scripts/emojilist.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -export const unicodeEmojiCategories = ['face', 'people', 'animals_and_nature', 'food_and_drink', 'activity', 'travel_and_places', 'objects', 'symbols', 'flags'] as const; - -export type UnicodeEmojiDef = { - name: string; - char: string; - category: typeof unicodeEmojiCategories[number]; -} - -// initial converted from https://github.com/muan/emojilib/commit/242fe68be86ed6536843b83f7e32f376468b38fb -import _emojilist from '../emojilist.json'; - -export const emojilist: UnicodeEmojiDef[] = _emojilist.map(x => ({ - name: x[1] as string, - char: x[0] as string, - category: unicodeEmojiCategories[x[2]], -})); - -const unicodeEmojisMap = new Map( - emojilist.map(x => [x.char, x]), -); - -const _indexByChar = new Map(); -const _charGroupByCategory = new Map(); -for (let i = 0; i < emojilist.length; i++) { - const emo = emojilist[i]; - _indexByChar.set(emo.char, i); - - if (_charGroupByCategory.has(emo.category)) { - _charGroupByCategory.get(emo.category)?.push(emo.char); - } else { - _charGroupByCategory.set(emo.category, [emo.char]); - } -} - -export const emojiCharByCategory = _charGroupByCategory; - -export function getUnicodeEmoji(char: string): UnicodeEmojiDef | string { - // Colorize it because emojilist.json assumes that - return unicodeEmojisMap.get(colorizeEmoji(char)) - // ใ‚ซใƒฉใƒผใ‚นใ‚ฟใ‚คใƒซ็ตตๆ–‡ๅญ—ใŒjsonใซ็„กใ„ๅ ดๅˆใฏใƒ†ใ‚ญใ‚นใƒˆใ‚นใ‚ฟใ‚คใƒซ็ตตๆ–‡ๅญ—ใซใƒ•ใ‚ฉใƒผใƒซใƒใƒƒใ‚ฏใ™ใ‚‹ - ?? unicodeEmojisMap.get(char) - // ใใ‚Œใงใ‚‚่ฆ‹ใคใ‹ใ‚‰ใชใ„ๅ ดๅˆใฏใใฎใพใพ่ฟ”ใ™๏ผˆ็ตตๆ–‡ๅญ—ๆƒ…ๅ ฑใŒjsonใซ็„กใ„ๅ ดๅˆใ€ใ“ใฎใƒ•ใ‚ฉใƒผใƒซใƒใƒƒใ‚ฏใŒ็„กใ„ใจใƒฌใƒณใƒ€ใƒชใƒณใ‚ฐใซๅคฑๆ•—ใ™ใ‚‹๏ผ‰ - ?? char; -} - -export function getEmojiName(char: string): string { - // Colorize it because emojilist.json assumes that - const idx = _indexByChar.get(colorizeEmoji(char)) ?? _indexByChar.get(char); - if (idx === undefined) { - // ็ตตๆ–‡ๅญ—ๆƒ…ๅ ฑใŒjsonใซ็„กใ„ๅ ดๅˆใฏๅๅ‰ใฎๅ–ๅพ—ใŒๅ‡บๆฅใชใ„ใฎใงใใฎใพใพ่ฟ”ใ™ใ—ใ‹็„กใ„ - return char; - } else { - return emojilist[idx].name; - } -} - -/** - * ใƒ†ใ‚ญใ‚นใƒˆใ‚นใ‚ฟใ‚คใƒซ็ตตๆ–‡ๅญ—๏ผˆU+260Eใชใฉใฎ1ๆ–‡ๅญ—ใง่กจ็พใ•ใ‚Œใ‚‹็ตตๆ–‡ๅญ—๏ผ‰ใ‚’ใ‚ซใƒฉใƒผใ‚นใ‚ฟใ‚คใƒซ็ตตๆ–‡ๅญ—ใซๅค‰ๆ›ใ—ใพใ™๏ผˆVS16:U+FE0Fใ‚’ไป˜ไธŽ๏ผ‰ใ€‚ - */ -export function colorizeEmoji(char: string) { - return char.length === 1 ? `${char}\uFE0F` : char; -} - -export interface CustomEmojiFolderTree { - value: string; - category: string; - children: CustomEmojiFolderTree[]; -} diff --git a/packages/frontend/src/scripts/extract-avg-color-from-blurhash.ts b/packages/frontend/src/scripts/extract-avg-color-from-blurhash.ts deleted file mode 100644 index 992f6e9a16..0000000000 --- a/packages/frontend/src/scripts/extract-avg-color-from-blurhash.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -export function extractAvgColorFromBlurhash(hash: string) { - return typeof hash === 'string' - ? '#' + [...hash.slice(2, 6)] - .map(x => '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~'.indexOf(x)) - .reduce((a, c) => a * 83 + c, 0) - .toString(16) - .padStart(6, '0') - : undefined; -} diff --git a/packages/frontend/src/scripts/i18n.ts b/packages/frontend/src/scripts/i18n.ts deleted file mode 100644 index c2f44a33cc..0000000000 --- a/packages/frontend/src/scripts/i18n.ts +++ /dev/null @@ -1,294 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ -import type { ILocale, ParameterizedString } from '../../../../locales/index.js'; - -type FlattenKeys = keyof { - [K in keyof T as T[K] extends ILocale - ? FlattenKeys extends infer C extends string - ? `${K & string}.${C}` - : never - : T[K] extends TPrediction - ? K - : never]: T[K]; -}; - -type ParametersOf> = TKey extends `${infer K}.${infer C}` - // @ts-expect-error -- C ใฏๆ˜Žใ‚‰ใ‹ใซ FlattenKeys ใซใชใ‚‹ใŒใ€ๅž‹ใ‚ทใ‚นใƒ†ใƒ ใฏใ“ใ“ใงใฏ TKey ใŒใƒ‰ใƒƒใƒˆๅŒบๅˆ‡ใ‚Šใงใ‚ใ‚‹ใ“ใจใฎใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใ‚’ๆŒใŸใชใ„ใฎใงใ€ๅž‹ใ‚ทใ‚นใƒ†ใƒ ใซๅˆๆณ•ใซใฆ็คบใ™ใ“ใจใฏใงใใชใ„ใ€‚ - ? ParametersOf - : TKey extends keyof T - ? T[TKey] extends ParameterizedString - ? P - : never - : never; - -type Tsx = { - readonly [K in keyof T as T[K] extends string ? never : K]: T[K] extends ParameterizedString - ? (arg: { readonly [_ in P]: string | number }) => string - // @ts-expect-error -- ่จผๆ˜Ž็œ็•ฅ - : Tsx; -}; - -export class I18n { - private tsxCache?: Tsx; - - constructor(public locale: T) { - //#region BIND - this.t = this.t.bind(this); - //#endregion - } - - public get ts(): T { - if (_DEV_) { - class Handler implements ProxyHandler { - get(target: TTarget, p: string | symbol): unknown { - const value = target[p as keyof TTarget]; - - if (typeof value === 'object') { - return new Proxy(value, new Handler()); - } - - if (typeof value === 'string') { - const parameters = Array.from(value.matchAll(/\{(\w+)\}/g), ([, parameter]) => parameter); - - if (parameters.length) { - console.error(`Missing locale parameters: ${parameters.join(', ')} at ${String(p)}`); - } - - return value; - } - - console.error(`Unexpected locale key: ${String(p)}`); - - return p; - } - } - - return new Proxy(this.locale, new Handler()); - } - - return this.locale; - } - - public get tsx(): Tsx { - if (_DEV_) { - if (this.tsxCache) { - return this.tsxCache; - } - - class Handler implements ProxyHandler { - get(target: TTarget, p: string | symbol): unknown { - const value = target[p as keyof TTarget]; - - if (typeof value === 'object') { - return new Proxy(value, new Handler()); - } - - if (typeof value === 'string') { - const quasis: string[] = []; - const expressions: string[] = []; - let cursor = 0; - - while (~cursor) { - const start = value.indexOf('{', cursor); - - if (!~start) { - quasis.push(value.slice(cursor)); - break; - } - - quasis.push(value.slice(cursor, start)); - - const end = value.indexOf('}', start); - - expressions.push(value.slice(start + 1, end)); - - cursor = end + 1; - } - - if (!expressions.length) { - console.error(`Unexpected locale key: ${String(p)}`); - - return () => value; - } - - return (arg) => { - let str = quasis[0]; - - for (let i = 0; i < expressions.length; i++) { - if (!Object.hasOwn(arg, expressions[i])) { - console.error(`Missing locale parameters: ${expressions[i]} at ${String(p)}`); - } - - str += arg[expressions[i]] + quasis[i + 1]; - } - - return str; - }; - } - - console.error(`Unexpected locale key: ${String(p)}`); - - return p; - } - } - - return this.tsxCache = new Proxy(this.locale, new Handler()) as unknown as Tsx; - } - - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (this.tsxCache) { - return this.tsxCache; - } - - function build(target: ILocale): Tsx { - const result = {} as Tsx; - - for (const k in target) { - if (!Object.hasOwn(target, k)) { - continue; - } - - const value = target[k as keyof typeof target]; - - if (typeof value === 'object') { - result[k] = build(value as ILocale); - } else if (typeof value === 'string') { - const quasis: string[] = []; - const expressions: string[] = []; - let cursor = 0; - - while (~cursor) { - const start = value.indexOf('{', cursor); - - if (!~start) { - quasis.push(value.slice(cursor)); - break; - } - - quasis.push(value.slice(cursor, start)); - - const end = value.indexOf('}', start); - - expressions.push(value.slice(start + 1, end)); - - cursor = end + 1; - } - - if (!expressions.length) { - continue; - } - - result[k] = (arg) => { - let str = quasis[0]; - - for (let i = 0; i < expressions.length; i++) { - str += arg[expressions[i]] + quasis[i + 1]; - } - - return str; - }; - } - } - return result; - } - - return this.tsxCache = build(this.locale); - } - - /** - * @deprecated ใชใ‚‹ในใใ“ใฎใƒกใ‚ฝใƒƒใƒ‰ไฝฟใ†ใ‚ˆใ‚Šใ‚‚ ts ็›ดๆŽฅๅ‚็…งใฎๆ–นใŒ vue ใฎใ‚ญใƒฃใƒƒใ‚ทใƒฅๅŠนใ„ใฆใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใŒ่‰ฏใ„ใ‹ใ‚‚ - */ - public t>(key: TKey): string; - /** - * @deprecated ใชใ‚‹ในใใ“ใฎใƒกใ‚ฝใƒƒใƒ‰ไฝฟใ†ใ‚ˆใ‚Šใ‚‚ tsx ็›ดๆŽฅๅ‚็…งใฎๆ–นใŒ vue ใฎใ‚ญใƒฃใƒƒใ‚ทใƒฅๅŠนใ„ใฆใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใŒ่‰ฏใ„ใ‹ใ‚‚ - */ - public t>(key: TKey, args: { readonly [_ in ParametersOf]: string | number }): string; - public t(key: string, args?: { readonly [_: string]: string | number }) { - let str: string | ParameterizedString | ILocale = this.locale; - - for (const k of key.split('.')) { - str = str[k]; - - if (_DEV_) { - if (typeof str === 'undefined') { - console.error(`Unexpected locale key: ${key}`); - return key; - } - } - } - - if (args) { - if (_DEV_) { - const missing = Array.from((str as string).matchAll(/\{(\w+)\}/g), ([, parameter]) => parameter).filter(parameter => !Object.hasOwn(args, parameter)); - - if (missing.length) { - console.error(`Missing locale parameters: ${missing.join(', ')} at ${key}`); - } - } - - for (const [k, v] of Object.entries(args)) { - const search = `{${k}}`; - - if (_DEV_) { - if (!(str as string).includes(search)) { - console.error(`Unexpected locale parameter: ${k} at ${key}`); - } - } - - str = (str as string).replace(search, v.toString()); - } - } - - return str; - } -} - -if (import.meta.vitest) { - const { describe, expect, it } = import.meta.vitest; - - describe('i18n', () => { - it('t', () => { - const i18n = new I18n({ - foo: 'foo', - bar: { - baz: 'baz', - qux: 'qux {0}' as unknown as ParameterizedString<'0'>, - quux: 'quux {0} {1}' as unknown as ParameterizedString<'0' | '1'>, - }, - }); - - expect(i18n.t('foo')).toBe('foo'); - expect(i18n.t('bar.baz')).toBe('baz'); - expect(i18n.tsx.bar.qux({ 0: 'hoge' })).toBe('qux hoge'); - expect(i18n.tsx.bar.quux({ 0: 'hoge', 1: 'fuga' })).toBe('quux hoge fuga'); - }); - it('ts', () => { - const i18n = new I18n({ - foo: 'foo', - bar: { - baz: 'baz', - qux: 'qux {0}' as unknown as ParameterizedString<'0'>, - quux: 'quux {0} {1}' as unknown as ParameterizedString<'0' | '1'>, - }, - }); - - expect(i18n.ts.foo).toBe('foo'); - expect(i18n.ts.bar.baz).toBe('baz'); - }); - it('tsx', () => { - const i18n = new I18n({ - foo: 'foo', - bar: { - baz: 'baz', - qux: 'qux {0}' as unknown as ParameterizedString<'0'>, - quux: 'quux {0} {1}' as unknown as ParameterizedString<'0' | '1'>, - }, - }); - - expect(i18n.tsx.bar.qux({ 0: 'hoge' })).toBe('qux hoge'); - expect(i18n.tsx.bar.quux({ 0: 'hoge', 1: 'fuga' })).toBe('quux hoge fuga'); - }); - }); -} diff --git a/packages/frontend/src/scripts/nyaize.ts b/packages/frontend/src/scripts/nyaize.ts deleted file mode 100644 index 35b7454a64..0000000000 --- a/packages/frontend/src/scripts/nyaize.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -const enRegex1 = /(?<=n)a/gi; -const enRegex2 = /(?<=morn)ing/gi; -const enRegex3 = /(?<=every)one/gi; -const enRegex4 = /non(?=[bcdfghjklmnpqrstvwxyz])/gi; -const koRegex1 = /[๋‚˜-๋‚ณ]/g; -const koRegex2 = /(๋‹ค$)|(๋‹ค(?=\.))|(๋‹ค(?= ))|(๋‹ค(?=!))|(๋‹ค(?=\?))/gm; -const koRegex3 = /(์•ผ(?=\?))|(์•ผ$)|(์•ผ(?= ))/gm; - -export function nyaize(text: string): string { - return text - // ja-JP - .replaceAll('ใช', 'ใซใ‚ƒ').replaceAll('ใƒŠ', 'ใƒ‹ใƒฃ').replaceAll('๏พ…', '๏พ†๏ฝฌ') - // en-US - .replace(enRegex1, x => x === 'A' ? 'YA' : 'ya') - .replace(enRegex2, x => x === 'ING' ? 'YAN' : 'yan') - .replace(enRegex3, x => x === 'ONE' ? 'NYAN' : 'nyan') - .replace(enRegex4, x => x === 'NON' ? 'NYAN' : 'nyan') - // ko-KR - .replace(koRegex1, match => String.fromCharCode( - match.charCodeAt(0)! + '๋ƒ'.charCodeAt(0) - '๋‚˜'.charCodeAt(0), - )) - .replace(koRegex2, '๋‹ค๋ƒฅ') - .replace(koRegex3, '๋ƒฅ') - // el-GR - .replaceAll('ฮฝฮฑ', 'ฮฝฮนฮฑ') - .replaceAll('ฮฮ‘', 'ฮฮ™ฮ‘') - .replaceAll('ฮฮฑ', 'ฮฮนฮฑ'); -} diff --git a/packages/frontend/src/scripts/safe-parse.ts b/packages/frontend/src/scripts/safe-parse.ts deleted file mode 100644 index 6bfcef6c36..0000000000 --- a/packages/frontend/src/scripts/safe-parse.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -export function safeParseFloat(str: unknown): number | null { - if (typeof str !== 'string' || str === '') return null; - const num = parseFloat(str); - if (isNaN(num)) return null; - return num; -} diff --git a/packages/frontend/src/scripts/safe-uri-decode.ts b/packages/frontend/src/scripts/safe-uri-decode.ts deleted file mode 100644 index 0edf4e9eba..0000000000 --- a/packages/frontend/src/scripts/safe-uri-decode.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -export function safeURIDecode(str: string): string { - try { - return decodeURIComponent(str); - } catch { - return str; - } -} diff --git a/packages/frontend/src/scripts/scroll.ts b/packages/frontend/src/scripts/scroll.ts deleted file mode 100644 index f0274034b5..0000000000 --- a/packages/frontend/src/scripts/scroll.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -type ScrollBehavior = 'auto' | 'smooth' | 'instant'; - -export function getScrollContainer(el: HTMLElement | null): HTMLElement | null { - if (el == null || el.tagName === 'HTML') return null; - const overflow = window.getComputedStyle(el).getPropertyValue('overflow-y'); - if (overflow === 'scroll' || overflow === 'auto') { - return el; - } else { - return getScrollContainer(el.parentElement); - } -} - -export function getStickyTop(el: HTMLElement, container: HTMLElement | null = null, top = 0) { - if (!el.parentElement) return top; - const data = el.dataset.stickyContainerHeaderHeight; - const newTop = data ? Number(data) + top : top; - if (el === container) return newTop; - return getStickyTop(el.parentElement, container, newTop); -} - -export function getStickyBottom(el: HTMLElement, container: HTMLElement | null = null, bottom = 0) { - if (!el.parentElement) return bottom; - const data = el.dataset.stickyContainerFooterHeight; - const newBottom = data ? Number(data) + bottom : bottom; - if (el === container) return newBottom; - return getStickyBottom(el.parentElement, container, newBottom); -} - -export function getScrollPosition(el: HTMLElement | null): number { - const container = getScrollContainer(el); - return container == null ? window.scrollY : container.scrollTop; -} - -export function onScrollTop(el: HTMLElement, cb: () => unknown, tolerance = 1, once = false) { - // ใจใ‚Šใ‚ใˆใš่ฉ•ไพกใ—ใฆใฟใ‚‹ - if (el.isConnected && isTopVisible(el)) { - cb(); - if (once) return null; - } - - const container = getScrollContainer(el) ?? window; - - const onScroll = ev => { - if (!document.body.contains(el)) return; - if (isTopVisible(el, tolerance)) { - cb(); - if (once) removeListener(); - } - }; - - function removeListener() { container.removeEventListener('scroll', onScroll); } - - container.addEventListener('scroll', onScroll, { passive: true }); - return removeListener; -} - -export function onScrollBottom(el: HTMLElement, cb: () => unknown, tolerance = 1, once = false) { - const container = getScrollContainer(el); - - // ใจใ‚Šใ‚ใˆใš่ฉ•ไพกใ—ใฆใฟใ‚‹ - if (el.isConnected && isBottomVisible(el, tolerance, container)) { - cb(); - if (once) return null; - } - - const containerOrWindow = container ?? window; - const onScroll = ev => { - if (!document.body.contains(el)) return; - if (isBottomVisible(el, 1, container)) { - cb(); - if (once) removeListener(); - } - }; - - function removeListener() { - containerOrWindow.removeEventListener('scroll', onScroll); - } - - containerOrWindow.addEventListener('scroll', onScroll, { passive: true }); - return removeListener; -} - -export function scroll(el: HTMLElement, options: ScrollToOptions | undefined) { - const container = getScrollContainer(el); - if (container == null) { - window.scroll(options); - } else { - container.scroll(options); - } -} - -/** - * Scroll to Top - * @param el Scroll container element - * @param options Scroll options - */ -export function scrollToTop(el: HTMLElement, options: { behavior?: ScrollBehavior; } = {}) { - scroll(el, { top: 0, ...options }); -} - -/** - * Scroll to Bottom - * @param el Content element - * @param options Scroll options - * @param container Scroll container element - */ -export function scrollToBottom( - el: HTMLElement, - options: ScrollToOptions = {}, - container = getScrollContainer(el), -) { - if (container) { - container.scroll({ top: el.scrollHeight - container.clientHeight + getStickyTop(el, container) || 0, ...options }); - } else { - window.scroll({ - top: (el.scrollHeight - window.innerHeight + getStickyTop(el, container) + (window.innerWidth <= 500 ? 96 : 0)) || 0, - ...options, - }); - } -} - -export function isTopVisible(el: HTMLElement, tolerance = 1): boolean { - const scrollTop = getScrollPosition(el); - return scrollTop <= tolerance; -} - -export function isBottomVisible(el: HTMLElement, tolerance = 1, container = getScrollContainer(el)) { - if (container) return el.scrollHeight <= container.clientHeight + Math.abs(container.scrollTop) + tolerance; - return el.scrollHeight <= window.innerHeight + window.scrollY + tolerance; -} - -// https://ja.javascript.info/size-and-scroll-window#ref-932 -export function getBodyScrollHeight() { - return Math.max( - document.body.scrollHeight, document.documentElement.scrollHeight, - document.body.offsetHeight, document.documentElement.offsetHeight, - document.body.clientHeight, document.documentElement.clientHeight, - ); -} diff --git a/packages/frontend/src/scripts/url.ts b/packages/frontend/src/scripts/url.ts deleted file mode 100644 index 5a8265af9e..0000000000 --- a/packages/frontend/src/scripts/url.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -/* objใ‚’ๆคœๆŸปใ—ใฆ - * 1. ้…ๅˆ—ใซไฝ•ใ‚‚ๅ…ฅใฃใฆใ„ใชใ„ๆ™‚ใฏใ‚ฏใ‚จใƒชใ‚’ไป˜ใ‘ใชใ„ - * 2. ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใŒundefinedใฎๆ™‚ใฏใ‚ฏใ‚จใƒชใ‚’ไป˜ใ‘ใชใ„ - * ๏ผˆnew URLSearchParams(obj)ใงใฏใใ“ใพใงไธๅฏงใชใ“ใจใ‚’ใ—ใฆใใ‚Œใชใ„๏ผ‰ - */ -export function query(obj: Record): string { - const params = Object.entries(obj) - .filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined) - .reduce((a, [k, v]) => (a[k] = v, a), {} as Record); - - return Object.entries(params) - .map((p) => `${p[0]}=${encodeURIComponent(p[1])}`) - .join('&'); -} - -export function appendQuery(url: string, query: string): string { - return `${url}${/\?/.test(url) ? url.endsWith('?') ? '' : '&' : '?'}${query}`; -} - -export function extractDomain(url: string) { - const match = url.match(/^(?:https?:)?(?:\/\/)?(?:[^@\n]+@)?([^:\/\n]+)/im); - return match ? match[1] : null; -} diff --git a/packages/frontend/src/scripts/use-document-visibility.ts b/packages/frontend/src/scripts/use-document-visibility.ts deleted file mode 100644 index a8f4d5e03a..0000000000 --- a/packages/frontend/src/scripts/use-document-visibility.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -import { onMounted, onUnmounted, ref, Ref } from 'vue'; - -export function useDocumentVisibility(): Ref { - const visibility = ref(document.visibilityState); - - const onChange = (): void => { - visibility.value = document.visibilityState; - }; - - onMounted(() => { - document.addEventListener('visibilitychange', onChange); - }); - - onUnmounted(() => { - document.removeEventListener('visibilitychange', onChange); - }); - - return visibility; -} diff --git a/packages/frontend/src/scripts/use-interval.ts b/packages/frontend/src/scripts/use-interval.ts deleted file mode 100644 index b50e78c3cc..0000000000 --- a/packages/frontend/src/scripts/use-interval.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -import { onActivated, onDeactivated, onMounted, onUnmounted } from 'vue'; - -export function useInterval(fn: () => void, interval: number, options: { - immediate: boolean; - afterMounted: boolean; -}): (() => void) | undefined { - if (Number.isNaN(interval)) return; - - let intervalId: number | null = null; - - if (options.afterMounted) { - onMounted(() => { - if (options.immediate) fn(); - intervalId = window.setInterval(fn, interval); - }); - } else { - if (options.immediate) fn(); - intervalId = window.setInterval(fn, interval); - } - - const clear = () => { - if (intervalId) window.clearInterval(intervalId); - intervalId = null; - }; - - onActivated(() => { - if (intervalId) return; - if (options.immediate) fn(); - intervalId = window.setInterval(fn, interval); - }); - - onDeactivated(() => { - clear(); - }); - - onUnmounted(() => { - clear(); - }); - - return clear; -} diff --git a/packages/frontend/src/scripts/worker-multi-dispatch.ts b/packages/frontend/src/scripts/worker-multi-dispatch.ts deleted file mode 100644 index 6b3fcd9383..0000000000 --- a/packages/frontend/src/scripts/worker-multi-dispatch.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -function defaultUseWorkerNumber(prev: number, totalWorkers: number) { - return prev + 1; -} - -export class WorkerMultiDispatch { - private symbol = Symbol('WorkerMultiDispatch'); - private workers: Worker[] = []; - private terminated = false; - private prevWorkerNumber = 0; - private getUseWorkerNumber = defaultUseWorkerNumber; - private finalizationRegistry: FinalizationRegistry; - - constructor(workerConstructor: () => Worker, concurrency: number, getUseWorkerNumber = defaultUseWorkerNumber) { - this.getUseWorkerNumber = getUseWorkerNumber; - for (let i = 0; i < concurrency; i++) { - this.workers.push(workerConstructor()); - } - - this.finalizationRegistry = new FinalizationRegistry(() => { - this.terminate(); - }); - this.finalizationRegistry.register(this, this.symbol); - - if (_DEV_) console.log('WorkerMultiDispatch: Created', this); - } - - public postMessage(message: POST, options?: Transferable[] | StructuredSerializeOptions, useWorkerNumber: typeof defaultUseWorkerNumber = this.getUseWorkerNumber) { - let workerNumber = useWorkerNumber(this.prevWorkerNumber, this.workers.length); - workerNumber = Math.abs(Math.round(workerNumber)) % this.workers.length; - if (_DEV_) console.log('WorkerMultiDispatch: Posting message to worker', workerNumber, useWorkerNumber); - this.prevWorkerNumber = workerNumber; - - // ไธๆฏ›ใ ใŒunionใ‚’overloadใซ็ชใฃ่พผใ‚ใชใ„ - // https://stackoverflow.com/questions/66507585/overload-signatures-union-types-and-no-overload-matches-this-call-error - // https://github.com/microsoft/TypeScript/issues/14107 - if (Array.isArray(options)) { - this.workers[workerNumber].postMessage(message, options); - } else { - this.workers[workerNumber].postMessage(message, options); - } - return workerNumber; - } - - public addListener(callback: (this: Worker, ev: MessageEvent) => any, options?: boolean | AddEventListenerOptions) { - this.workers.forEach(worker => { - worker.addEventListener('message', callback, options); - }); - } - - public removeListener(callback: (this: Worker, ev: MessageEvent) => any, options?: boolean | AddEventListenerOptions) { - this.workers.forEach(worker => { - worker.removeEventListener('message', callback, options); - }); - } - - public terminate() { - this.terminated = true; - if (_DEV_) console.log('WorkerMultiDispatch: Terminating', this); - this.workers.forEach(worker => { - worker.terminate(); - }); - this.workers = []; - this.finalizationRegistry.unregister(this); - } - - public isTerminated() { - return this.terminated; - } - - public getWorkers() { - return this.workers; - } - - public getSymbol() { - return this.symbol; - } -} diff --git a/packages/frontend/src/themes/_dark.json5 b/packages/frontend/src/themes/_dark.json5 deleted file mode 100644 index 4055daf207..0000000000 --- a/packages/frontend/src/themes/_dark.json5 +++ /dev/null @@ -1,110 +0,0 @@ -// ใƒ€ใƒผใ‚ฏใƒ†ใƒผใƒžใฎใƒ™ใƒผใ‚นใƒ†ใƒผใƒž -// ใ“ใฎใƒ†ใƒผใƒžใŒ็›ดๆŽฅไฝฟใ‚ใ‚Œใ‚‹ใ“ใจใฏ็„กใ„ -{ - id: 'dark', - - name: 'Dark', - author: 'noridev & syuilo', - desc: 'CherryPick default dark theme', - kind: 'dark', - - props: { - accent: '#86b300', - accentDarken: ':darken<10<@accent', - accentLighten: ':lighten<10<@accent', - accentedBg: ':alpha<0.15<@accent', - focus: ':alpha<0.3<@accent', - bg: '#000', - acrylicBg: ':alpha<0.5<@bg', - fg: '#dadada', - fgTransparentWeak: ':alpha<0.75<@fg', - fgTransparent: ':alpha<0.5<@fg', - fgHighlighted: ':lighten<3<@fg', - fgOnAccent: '#fff', - divider: 'rgba(255, 255, 255, 0.1)', - indicator: '@accent', - panel: ':lighten<3<@bg', - panelHighlight: ':lighten<3<@panel', - panelHeaderBg: ':lighten<3<@panel', - panelHeaderFg: '@fg', - panelHeaderDivider: 'rgba(0, 0, 0, 0)', - panelBorder: '" solid 1px var(--divider)', - acrylicPanel: ':alpha<0.5<@panel', - windowHeader: ':alpha<0.85<@panel', - popup: ':lighten<3<@panel', - shadow: 'rgba(0, 0, 0, 0.3)', - header: ':alpha<0.7<@panel', - navBg: '@panel', - navFg: '@fg', - navHoverFg: ':lighten<17<@fg', - navActive: '@accent', - navIndicator: '@indicator', - link: '#44a4c1', - hashtag: '#ff9156', - mention: '@accent', - mentionMe: '@mention', - renote: '#229e82', - renoteHover: ':lighten<5<@renote', - nameHover: ':darken<5<@fg', - modalBg: 'rgba(0, 0, 0, 0.5)', - modalBgX2: 'rgba(0, 0, 0, 0.9)', - scrollbarHandle: 'rgba(255, 255, 255, 0.2)', - scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)', - dateLabelFg: '@fg', - infoBg: '#253142', - infoFg: '#fff', - infoWarnBg: '#42321c', - infoWarnFg: '#ffbd3e', - switchBg: 'rgba(255, 255, 255, 0.15)', - buttonBg: 'rgba(255, 255, 255, 0.05)', - buttonHoverBg: 'rgba(255, 255, 255, 0.1)', - buttonGradateA: '@accent', - buttonGradateB: ':hue<20<@accent', - switchOffBg: 'rgba(255, 255, 255, 0.1)', - switchOffFg: ':alpha<0.8<@fg', - switchOnBg: '@accentedBg', - switchOnFg: '@accent', - inputBorder: 'rgba(255, 255, 255, 0.1)', - inputBorderHover: 'rgba(255, 255, 255, 0.2)', - listItemHoverBg: 'rgba(255, 255, 255, 0.03)', - driveFolderBg: ':alpha<0.3<@accent', - wallpaperOverlay: 'rgba(0, 0, 0, 0.5)', - badge: '#afd2ff', - patron: '#a3faff', - messageBg: '@bg', - success: '#86b300', - error: '#ec4137', - warn: '#ecb637', - codeString: '#ffb675', - codeNumber: '#cfff9e', - codeBoolean: '#c59eff', - deckBg: '#000', - htmlThemeColor: '@bg', - chatReadBg: ':lighten<1<@bg', - cherry: 'rgb(255, 207, 230)', - cherryX8: ':lighten<5<@cherry', - pick: 'rgb(185, 216, 255)', - pickLighten: ':lighten<10<@pick', - pickX8: ':lighten<5<@pick', - X2: ':darken<2<@panel', - X3: 'rgba(255, 255, 255, 0.05)', - X4: 'rgba(255, 255, 255, 0.1)', - X5: 'rgba(255, 255, 255, 0.05)', - X6: 'rgba(255, 255, 255, 0.15)', - X7: 'rgba(255, 255, 255, 0.05)', - X8: ':lighten<5<@accent', - X9: ':darken<5<@accent', - X10: ':alpha<0.4<@accent', - X11: 'rgba(0, 0, 0, 0.3)', - X12: 'rgba(255, 255, 255, 0.1)', - X13: 'rgba(255, 255, 255, 0.15)', - X14: ':alpha<0.5<@navBg', - X15: ':alpha<0<@panel', - X16: ':alpha<0.7<@panel', - X17: ':alpha<0.8<@bg', - }, - - codeHighlighter: { - base: 'one-dark-pro', - }, -} diff --git a/packages/frontend/src/themes/_light.json5 b/packages/frontend/src/themes/_light.json5 deleted file mode 100644 index ed7bf319d2..0000000000 --- a/packages/frontend/src/themes/_light.json5 +++ /dev/null @@ -1,110 +0,0 @@ -// ใƒฉใ‚คใƒˆใƒ†ใƒผใƒžใฎใƒ™ใƒผใ‚นใƒ†ใƒผใƒž -// ใ“ใฎใƒ†ใƒผใƒžใŒ็›ดๆŽฅไฝฟใ‚ใ‚Œใ‚‹ใ“ใจใฏ็„กใ„ -{ - id: 'light', - - name: 'Light', - author: 'noridev & syuilo', - desc: 'CherryPick default light theme', - kind: 'light', - - props: { - accent: '#86b300', - accentDarken: ':darken<10<@accent', - accentLighten: ':lighten<10<@accent', - accentedBg: ':alpha<0.15<@accent', - focus: ':alpha<0.3<@accent', - bg: '#fff', - acrylicBg: ':alpha<0.5<@bg', - fg: '#5f5f5f', - fgTransparentWeak: ':alpha<0.75<@fg', - fgTransparent: ':alpha<0.5<@fg', - fgHighlighted: ':darken<3<@fg', - fgOnAccent: '#fff', - divider: 'rgba(0, 0, 0, 0.1)', - indicator: '@accent', - panel: ':lighten<3<@bg', - panelHighlight: ':darken<3<@panel', - panelHeaderBg: ':lighten<3<@panel', - panelHeaderFg: '@fg', - panelHeaderDivider: 'rgba(0, 0, 0, 0)', - panelBorder: '" solid 1px var(--divider)', - acrylicPanel: ':alpha<0.5<@panel', - windowHeader: ':alpha<0.85<@panel', - popup: ':lighten<3<@panel', - shadow: 'rgba(0, 0, 0, 0.1)', - header: ':alpha<0.7<@panel', - navBg: '@panel', - navFg: '@fg', - navHoverFg: ':darken<17<@fg', - navActive: '@accent', - navIndicator: '@indicator', - link: '#44a4c1', - hashtag: '#ff9156', - mention: '@accent', - mentionMe: '@mention', - renote: '#229e82', - renoteHover: ':lighten<5<@renote', - nameHover: ':lighten<5<@fg', - modalBg: 'rgba(0, 0, 0, 0.3)', - modalBgX2: 'rgba(0, 0, 0, 0.9)', - scrollbarHandle: 'rgba(0, 0, 0, 0.2)', - scrollbarHandleHover: 'rgba(0, 0, 0, 0.4)', - dateLabelFg: '@fg', - infoBg: '#e5f5ff', - infoFg: '#72818a', - infoWarnBg: '#fff0db', - infoWarnFg: '#8f6e31', - switchBg: 'rgba(0, 0, 0, 0.15)', - buttonBg: 'rgba(0, 0, 0, 0.05)', - buttonHoverBg: 'rgba(0, 0, 0, 0.1)', - buttonGradateA: '@accent', - buttonGradateB: ':hue<20<@accent', - switchOffBg: 'rgba(0, 0, 0, 0.1)', - switchOffFg: '@panel', - switchOnBg: '@accent', - switchOnFg: '@fgOnAccent', - inputBorder: 'rgba(0, 0, 0, 0.1)', - inputBorderHover: 'rgba(0, 0, 0, 0.2)', - listItemHoverBg: 'rgba(0, 0, 0, 0.03)', - driveFolderBg: ':alpha<0.3<@accent', - wallpaperOverlay: 'rgba(255, 255, 255, 0.5)', - badge: '#ffbcdc', - patron: '#a3faff', - messageBg: '@bg', - success: '#86b300', - error: '#ec4137', - warn: '#ecb637', - codeString: '#b98710', - codeNumber: '#0fbbbb', - codeBoolean: '#62b70c', - deckBg: ':darken<3<@bg', - htmlThemeColor: '@bg', - chatReadBg: ':lighten<1<@bg', - cherry: 'rgb(255, 188, 220)', - cherryX8: ':lighten<5<@cherry', - pick: 'rgb(177, 211, 255)', - pickLighten: ':lighten<10<@pick', - pickX8: ':lighten<5<@pick', - X2: ':darken<2<@panel', - X3: 'rgba(0, 0, 0, 0.05)', - X4: 'rgba(0, 0, 0, 0.1)', - X5: 'rgba(0, 0, 0, 0.05)', - X6: 'rgba(0, 0, 0, 0.25)', - X7: 'rgba(0, 0, 0, 0.05)', - X8: ':lighten<5<@accent', - X9: ':darken<5<@accent', - X10: ':alpha<0.4<@accent', - X11: 'rgba(0, 0, 0, 0.1)', - X12: 'rgba(0, 0, 0, 0.1)', - X13: 'rgba(0, 0, 0, 0.15)', - X14: ':alpha<0.5<@navBg', - X15: ':alpha<0<@panel', - X16: ':alpha<0.7<@panel', - X17: ':alpha<0.8<@bg', - }, - - codeHighlighter: { - base: 'catppuccin-latte', - }, -} diff --git a/packages/frontend/src/themes/d-astro.json5 b/packages/frontend/src/themes/d-astro.json5 deleted file mode 100644 index 7bb1c708c4..0000000000 --- a/packages/frontend/src/themes/d-astro.json5 +++ /dev/null @@ -1,76 +0,0 @@ -{ - id: '080a01c5-377d-4fbb-88cc-6bb5d04977ea', - base: 'dark', - name: 'Mi Astro Dark', - author: 'syuilo', - props: { - bg: '#232125', - fg: '#efdab9', - link: '#78b0a0', - warn: '#ecb637', - badge: '#afd2ff', - error: '#ec4137', - focus: ':alpha<0.3<@accent', - navBg: '@panel', - navFg: '@fg', - panel: '#2a272b', - accent: '#81c08b', - header: ':alpha<0.7<@bg', - infoBg: '#253142', - infoFg: '#fff', - renote: '#659CC8', - shadow: 'rgba(0, 0, 0, 0.3)', - divider: 'rgba(255, 255, 255, 0.1)', - hashtag: '#ff9156', - mention: '#ffd152', - modalBg: 'rgba(0, 0, 0, 0.5)', - success: '#86b300', - buttonBg: 'rgba(255, 255, 255, 0.05)', - acrylicBg: ':alpha<0.5<@bg', - indicator: '@accent', - mentionMe: '#fb5d38', - messageBg: '@bg', - navActive: '@accent', - infoWarnBg: '#42321c', - infoWarnFg: '#ffbd3e', - navHoverFg: ':lighten<17<@fg', - dateLabelFg: '@fg', - inputBorder: 'rgba(255, 255, 255, 0.1)', - inputBorderHover: 'rgba(255, 255, 255, 0.2)', - panelBorder: '" solid 1px var(--divider)', - accentDarken: ':darken<10<@accent', - acrylicPanel: ':alpha<0.5<@panel', - navIndicator: '@accent', - accentLighten: ':lighten<10<@accent', - buttonHoverBg: 'rgba(255, 255, 255, 0.1)', - buttonGradateA: '@accent', - buttonGradateB: ':hue<-20<@accent', - driveFolderBg: ':alpha<0.3<@accent', - fgHighlighted: ':lighten<3<@fg', - panelHeaderBg: ':lighten<3<@panel', - panelHeaderFg: '@fg', - htmlThemeColor: '@bg', - fgOnWhite: '@accent', - panelHighlight: ':lighten<3<@panel', - listItemHoverBg: 'rgba(255, 255, 255, 0.03)', - scrollbarHandle: 'rgba(255, 255, 255, 0.2)', - wallpaperOverlay: 'rgba(0, 0, 0, 0.5)', - panelHeaderDivider: 'rgba(0, 0, 0, 0)', - scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)', - X2: ':darken<2<@panel', - X3: 'rgba(255, 255, 255, 0.05)', - X4: 'rgba(255, 255, 255, 0.1)', - X5: 'rgba(255, 255, 255, 0.05)', - X6: 'rgba(255, 255, 255, 0.15)', - X7: 'rgba(255, 255, 255, 0.05)', - X8: ':lighten<5<@accent', - X9: ':darken<5<@accent', - X10: ':alpha<0.4<@accent', - X11: 'rgba(0, 0, 0, 0.3)', - X12: 'rgba(255, 255, 255, 0.1)', - X13: 'rgba(255, 255, 255, 0.15)', - X14: ':alpha<0.5<@navBg', - X15: ':alpha<0<@panel', - X16: ':alpha<0.7<@panel', - }, -} diff --git a/packages/frontend/src/themes/d-birdsite.json5 b/packages/frontend/src/themes/d-birdsite.json5 deleted file mode 100644 index c36654667e..0000000000 --- a/packages/frontend/src/themes/d-birdsite.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - id: 'twitterpuredark', - base: 'dark', - desc: 'Birdsite Pure Dark mode color', - name: 'Birdsite Pure Dark', - props: { - accent: '#1d9bf0', - bg: '#000', - fgOnWhite: '@accent', - link: '#1d9bf0', - hashtag: '#1d9bf0', - renote: '#71767b', - buttonGradateA: '@accent', - buttonGradateB: '@accent', - error: '#f4212e', - infoWarnFg: '#f4212e', - }, - author:'@white@k.lapy.link', -} diff --git a/packages/frontend/src/themes/d-botanical.json5 b/packages/frontend/src/themes/d-botanical.json5 deleted file mode 100644 index 62208d2378..0000000000 --- a/packages/frontend/src/themes/d-botanical.json5 +++ /dev/null @@ -1,26 +0,0 @@ -{ - id: '504debaf-4912-6a4c-5059-1db08a76b737', - - name: 'Mi Botanical Dark', - author: 'syuilo', - - base: 'dark', - - props: { - accent: 'rgb(148, 179, 0)', - bg: 'rgb(37, 38, 36)', - fg: 'rgb(216, 212, 199)', - fgHighlighted: '#fff', - fgOnWhite: '@accent', - divider: 'rgba(255, 255, 255, 0.14)', - panel: 'rgb(47, 47, 44)', - panelHeaderDivider: 'rgba(0, 0, 0, 0)', - header: ':alpha<0.7<@panel', - navBg: '#363636', - renote: '@accent', - mention: 'rgb(212, 153, 76)', - mentionMe: 'rgb(212, 210, 76)', - hashtag: '#5bcbb0', - link: '@accent', - }, -} diff --git a/packages/frontend/src/themes/d-byeolvit-noctiluca.json5 b/packages/frontend/src/themes/d-byeolvit-noctiluca.json5 deleted file mode 100644 index e3d0e69d47..0000000000 --- a/packages/frontend/src/themes/d-byeolvit-noctiluca.json5 +++ /dev/null @@ -1,91 +0,0 @@ -{ - id: 'e2f17041-23e2-49d7-a86b-273284e0a440', - base: 'dark', - desc: 'ํ‘ธ๋ฅธ ๋ณ„๋น›์ด ์ž์•„๋‚ด๋Š” ์ž”ํ–ฅ, Byeolvit Noctiluca(๋ณ„๋น› ๋…นํ‹ธ๋ฃจ์นด)๋Š” Byeolvit์˜ ๊ธฐ๋ณธ ๋‹คํฌ ๋ชจ๋“œ ํ…Œ๋งˆ์ž…๋‹ˆ๋‹ค.', - name: 'Byeolvit Noctiluca Rev.1', - props: { - X2: ':darken<2<@panel', - X3: 'rgba(255, 255, 255, 0.05)', - X4: 'rgba(255, 255, 255, 0.1)', - X5: 'rgba(255, 255, 255, 0.05)', - X6: 'rgba(255, 255, 255, 0.15)', - X7: 'rgba(255, 255, 255, 0.05)', - X8: ':lighten<5<@accent', - X9: ':darken<5<@accent', - bg: '#121417', - fg: '#E4ECEA', - X10: ':alpha<0.4<@accent', - X11: 'rgba(0, 0, 0, 0.3)', - X12: 'rgba(255, 255, 255, 0.1)', - X13: 'rgba(255, 255, 255, 0.15)', - X14: ':alpha<0.5<@navBg', - X15: ':alpha<0<@panel', - X16: ':alpha<0.7<@panel', - X17: ':alpha<0.8<@bg', - link: ':lighten<15<@accent', - warn: '@infoWarnFg', - badge: '@infoFg', - error: ':lighten<10<@infoWarnFg', - focus: ':alpha<0.10<@accent', - navBg: '@panel', - navFg: '@fg', - panel: '#1A1E23', - popup: ':lighten<3<@panel', - accent: '#3FFFD1', - deckBg: ':darken<4<@bg', - header: ':alpha<0.7<@panel', - infoBg: ':alpha<0.05<@infoFg', - infoFg: '#A192FF', - renote: '#ACFCE9', - shadow: 'rgba(0, 0, 0, 0.3)', - divider: '#A8F0DE26', - hashtag: ':lighten<15<@accent', - mention: '@renote', - modalBg: 'rgba(0, 0, 0, 0.8)', - success: ':darken<10<@accent', - buttonBg: 'rgba(174, 219, 233, 0.1)', - switchBg: 'rgba(255, 255, 255, 0.15)', - MessageBg: '@bg', - acrylicBg: ':alpha<0.5<@bg', - fgOnWhite: '@bg', - indicator: '@fg', - mentionMe: '@mention', - navActive: '@accent', - accentedBg: ':alpha<0.08<@accent', - codeNumber: ':lighten<10 { - public ts: T; - - constructor(locale: T) { - this.ts = locale; - - //#region BIND - this.t = this.t.bind(this); - //#endregion - } - - // string ใซใ—ใฆใ„ใ‚‹ใฎใฏใ€ใƒ‰ใƒƒใƒˆๅŒบๅˆ‡ใ‚Šใงใฎใƒ‘ใ‚นๆŒ‡ๅฎšใ‚’่จฑๅฏใ™ใ‚‹ใŸใ‚ - // ใชใ‚‹ในใใ“ใฎใƒกใ‚ฝใƒƒใƒ‰ไฝฟใ†ใ‚ˆใ‚Šใ‚‚locale็›ดๆŽฅๅ‚็…งใฎๆ–นใŒvueใฎใ‚ญใƒฃใƒƒใ‚ทใƒฅๅŠนใ„ใฆใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใŒ่‰ฏใ„ใ‹ใ‚‚ - public t(key: string, args?: Record): string { - try { - let str = key.split('.').reduce((o, i) => o[i], this.ts); - if (typeof str !== 'string') throw new Error(); - - if (args) { - for (const [k, v] of Object.entries(args)) { - str = str.replace(`{${k}}`, v); - } - } - return str; - } catch (err) { - console.warn(`missing localization '${key}'`); - return key; - } - } -}