diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d2c98ad2a..925a6f5057 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,12 +6,16 @@ ### Client - Feat: 新しいゲームを追加 +- Feat: 音声・映像プレイヤーを追加 +- Feat: 絵文字の詳細ダイアログを追加 +- Feat: 枠線をつけるMFM`$[border.width=1,style=solid,color=fff,radius=0 ...]`を追加 - Enhance: ハッシュタグ入力時に、本文の末尾の行に何も書かれていない場合は新たにスペースを追加しないように - Enhance: チャンネルノートのピン留めをノートのメニューからできるように - Enhance: 管理者の場合はAPI tokenの発行画面で管理機能に関する権限を付与できるように - Enhance: AiScriptを0.17.0に更新 [CHANGELOG](https://github.com/aiscript-dev/aiscript/blob/bb89d132b633a622d3cb0eff0d0cc7e476c0cfdd/CHANGELOG.md) - 配列の範囲外・非整数のインデックスへの代入が完全禁止になるので注意 - Enhance: 絵文字ピッカー・オートコンプリートで、完全一致した絵文字を優先的に表示するように +- Enhance: Playの説明欄にMFMを使えるように - Fix: ネイティブモードの絵文字がモノクロにならないように - Fix: v2023.12.0で追加された「モデレーターがユーザーのアイコンもしくはバナー画像を未設定状態にできる機能」が管理画面上で正しく表示されていない問題を修正 - Fix: AiScriptの`readline`関数が不正な値を返すことがある問題のv2023.12.0時点での修正がPlay以外に適用されていないのを修正 @@ -21,7 +25,12 @@ - Enhance: 連合先のレートリミットに引っかかった際にリトライするようになりました - Enhance: ActivityPub Deliver queueでBodyを事前処理するように (#12916) - Enhance: クリップをエクスポートできるように +- Enhance: `/files`のファイルに対してHTTP Rangeリクエストを行えるように +- Enhance: `api.json`のOpenAPI Specificationを3.1.0に更新 - Fix: `drive/files/update`でファイル名のバリデーションが機能していない問題を修正 +- Fix: `notes/create`で、`text`が空白文字のみで構成されているか`null`であって、かつ`text`だけであるリクエストに対するレスポンスが400になるように変更 +- Fix: `notes/create`で、`text`が空白文字のみで構成されていてかつリノート、ファイルまたは投票を含んでいるリクエストに対するレスポンスの`text`が`""`から`null`になるように変更 +- Fix: ipv4とipv6の両方が利用可能な環境でallowedPrivateNetworksが設定されていた場合プライベートipの検証ができていなかった問題を修正 ## 2023.12.2 diff --git a/locales/index.d.ts b/locales/index.d.ts index e36ff19838..0afd93a204 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1096,6 +1096,8 @@ export interface Locale { "noteIdOrUrl": string; "video": string; "videos": string; + "audio": string; + "audioFiles": string; "dataSaver": string; "accountMigration": string; "accountMoved": string; @@ -1243,6 +1245,8 @@ export interface Locale { "replay": string; "replaying": string; "ranking": string; + "lastNDays": string; + "backToTitle": string; "_bubbleGame": { "howToPlay": string; "_howToPlay": { diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 5609cacb25..6cffb81951 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1093,6 +1093,8 @@ limitWidthOfReaction: "リアクションの最大横幅を制限し、縮小し noteIdOrUrl: "ノートIDまたはURL" video: "動画" videos: "動画" +audio: "音声" +audioFiles: "音声" dataSaver: "データセーバー" accountMigration: "アカウントの移行" accountMoved: "このユーザーは新しいアカウントに移行しました:" @@ -1240,6 +1242,8 @@ showReplay: "リプレイを見る" replay: "リプレイ" replaying: "リプレイ中" ranking: "ランキング" +lastNDays: "直近{n}日" +backToTitle: "タイトルへ" _bubbleGame: howToPlay: "遊び方" diff --git a/packages/backend/migration/1705222772858-optimize-note-index-for-array-column.js b/packages/backend/migration/1705222772858-optimize-note-index-for-array-column.js new file mode 100644 index 0000000000..571bd8e8f3 --- /dev/null +++ b/packages/backend/migration/1705222772858-optimize-note-index-for-array-column.js @@ -0,0 +1,24 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class OptimizeNoteIndexForArrayColumns1705222772858 { + name = 'OptimizeNoteIndexForArrayColumns1705222772858' + + async up(queryRunner) { + await queryRunner.query(`DROP INDEX "public"."IDX_796a8c03959361f97dc2be1d5c"`); + await queryRunner.query(`DROP INDEX "public"."IDX_54ebcb6d27222913b908d56fd8"`); + await queryRunner.query(`DROP INDEX "public"."IDX_88937d94d7443d9a99a76fa5c0"`); + await queryRunner.query(`DROP INDEX "public"."IDX_51c063b6a133a9cb87145450f5"`); + await queryRunner.query(`CREATE INDEX "IDX_NOTE_FILE_IDS" ON "note" using gin ("fileIds")`) + } + + async down(queryRunner) { + await queryRunner.query(`DROP INDEX "IDX_NOTE_FILE_IDS"`) + await queryRunner.query(`CREATE INDEX "IDX_51c063b6a133a9cb87145450f5" ON "note" ("fileIds") `); + await queryRunner.query(`CREATE INDEX "IDX_88937d94d7443d9a99a76fa5c0" ON "note" ("tags") `); + await queryRunner.query(`CREATE INDEX "IDX_54ebcb6d27222913b908d56fd8" ON "note" ("mentions") `); + await queryRunner.query(`CREATE INDEX "IDX_796a8c03959361f97dc2be1d5c" ON "note" ("visibleUserIds") `); + } +} diff --git a/packages/backend/src/core/DownloadService.ts b/packages/backend/src/core/DownloadService.ts index 5474272b00..5e196e83dd 100644 --- a/packages/backend/src/core/DownloadService.ts +++ b/packages/backend/src/core/DownloadService.ts @@ -145,7 +145,8 @@ export class DownloadService { const parsedIp = ipaddr.parse(ip); for (const net of this.config.allowedPrivateNetworks ?? []) { - if (parsedIp.match(ipaddr.parseCIDR(net))) { + const cidr = ipaddr.parseCIDR(net); + if (cidr[0].kind() === parsedIp.kind() && parsedIp.match(ipaddr.parseCIDR(net))) { return false; } } diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 58f3d3559b..345367f052 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -494,6 +494,9 @@ export class NoteCreateService implements OnApplicationShutdown { data.text = data.text.slice(0, DB_MAX_NOTE_TEXT_LENGTH); } data.text = data.text.trim(); + if (data.text === '') { + data.text = null; + } } else { data.text = null; } diff --git a/packages/backend/src/core/QueryService.ts b/packages/backend/src/core/QueryService.ts index f006ed4944..13d8a67597 100644 --- a/packages/backend/src/core/QueryService.ts +++ b/packages/backend/src/core/QueryService.ts @@ -212,8 +212,8 @@ export class QueryService { // または 自分自身 .orWhere('note.userId = :meId') // または 自分宛て - .orWhere(':meId = ANY(note.visibleUserIds)') - .orWhere(':meId = ANY(note.mentions)') + .orWhere(':meIdAsList <@ note.visibleUserIds') + .orWhere(':meIdAsList <@ note.mentions') .orWhere(new Brackets(qb => { qb // または フォロワー宛ての投稿であり、 @@ -228,7 +228,7 @@ export class QueryService { })); })); - q.setParameters({ meId: me.id }); + q.setParameters({ meId: me.id, meIdAsList: [me.id] }); } } diff --git a/packages/backend/src/models/Note.ts b/packages/backend/src/models/Note.ts index 2705282880..13b6b1ce97 100644 --- a/packages/backend/src/models/Note.ts +++ b/packages/backend/src/models/Note.ts @@ -11,9 +11,6 @@ import { MiChannel } from './Channel.js'; import type { MiDriveFile } from './DriveFile.js'; @Entity('note') -@Index('IDX_NOTE_TAGS', { synchronize: false }) -@Index('IDX_NOTE_MENTIONS', { synchronize: false }) -@Index('IDX_NOTE_VISIBLE_USER_IDS', { synchronize: false }) export class MiNote { @PrimaryColumn(id()) public id: string; @@ -139,7 +136,7 @@ export class MiNote { }) public url: string | null; - @Index() + @Index('IDX_NOTE_FILE_IDS', { synchronize: false }) @Column({ ...id(), array: true, default: '{}', @@ -151,14 +148,14 @@ export class MiNote { }) public attachedFileTypes: string[]; - @Index() + @Index('IDX_NOTE_VISIBLE_USER_IDS', { synchronize: false }) @Column({ ...id(), array: true, default: '{}', }) public visibleUserIds: MiUser['id'][]; - @Index() + @Index('IDX_NOTE_MENTIONS', { synchronize: false }) @Column({ ...id(), array: true, default: '{}', @@ -180,7 +177,7 @@ export class MiNote { }) public emojis: string[]; - @Index() + @Index('IDX_NOTE_TAGS', { synchronize: false }) @Column('varchar', { length: 128, array: true, default: '{}', }) diff --git a/packages/backend/src/server/FileServerService.ts b/packages/backend/src/server/FileServerService.ts index 61e8e8c841..e8de8b7a5c 100644 --- a/packages/backend/src/server/FileServerService.ts +++ b/packages/backend/src/server/FileServerService.ts @@ -166,11 +166,35 @@ export class FileServerService { } if (!image) { - image = { - data: fs.createReadStream(file.path), - ext: file.ext, - type: file.mime, - }; + if (request.headers.range && file.file.size > 0) { + const range = request.headers.range as string; + const parts = range.replace(/bytes=/, '').split('-'); + const start = parseInt(parts[0], 10); + let end = parts[1] ? parseInt(parts[1], 10) : file.file.size - 1; + if (end > file.file.size) { + end = file.file.size - 1; + } + const chunksize = end - start + 1; + + image = { + data: fs.createReadStream(file.path, { + start, + end, + }), + ext: file.ext, + type: file.mime, + }; + + reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); + reply.header('Accept-Ranges', 'bytes'); + reply.header('Content-Length', chunksize); + } else { + image = { + data: fs.createReadStream(file.path), + ext: file.ext, + type: file.mime, + }; + } } if ('pipe' in image.data && typeof image.data.pipe === 'function') { @@ -201,11 +225,54 @@ export class FileServerService { reply.header('Content-Type', FILE_TYPE_BROWSERSAFE.includes(file.mime) ? file.mime : 'application/octet-stream'); reply.header('Cache-Control', 'max-age=31536000, immutable'); reply.header('Content-Disposition', contentDisposition('inline', filename)); + + if (request.headers.range && file.file.size > 0) { + const range = request.headers.range as string; + const parts = range.replace(/bytes=/, '').split('-'); + const start = parseInt(parts[0], 10); + let end = parts[1] ? parseInt(parts[1], 10) : file.file.size - 1; + if (end > file.file.size) { + end = file.file.size - 1; + } + const chunksize = end - start + 1; + const fileStream = fs.createReadStream(file.path, { + start, + end, + }); + reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); + reply.header('Accept-Ranges', 'bytes'); + reply.header('Content-Length', chunksize); + reply.code(206); + return fileStream; + } + return fs.createReadStream(file.path); } else { reply.header('Content-Type', FILE_TYPE_BROWSERSAFE.includes(file.file.type) ? file.file.type : 'application/octet-stream'); reply.header('Cache-Control', 'max-age=31536000, immutable'); reply.header('Content-Disposition', contentDisposition('inline', file.filename)); + + if (request.headers.range && file.file.size > 0) { + const range = request.headers.range as string; + const parts = range.replace(/bytes=/, '').split('-'); + const start = parseInt(parts[0], 10); + let end = parts[1] ? parseInt(parts[1], 10) : file.file.size - 1; + console.log(end); + if (end > file.file.size) { + end = file.file.size - 1; + } + const chunksize = end - start + 1; + const fileStream = fs.createReadStream(file.path, { + start, + end, + }); + reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); + reply.header('Accept-Ranges', 'bytes'); + reply.header('Content-Length', chunksize); + reply.code(206); + return fileStream; + } + return fs.createReadStream(file.path); } } catch (e) { @@ -338,11 +405,35 @@ export class FileServerService { } if (!image) { - image = { - data: fs.createReadStream(file.path), - ext: file.ext, - type: file.mime, - }; + if (request.headers.range && file.file && file.file.size > 0) { + const range = request.headers.range as string; + const parts = range.replace(/bytes=/, '').split('-'); + const start = parseInt(parts[0], 10); + let end = parts[1] ? parseInt(parts[1], 10) : file.file.size - 1; + if (end > file.file.size) { + end = file.file.size - 1; + } + const chunksize = end - start + 1; + + image = { + data: fs.createReadStream(file.path, { + start, + end, + }), + ext: file.ext, + type: file.mime, + }; + + reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); + reply.header('Accept-Ranges', 'bytes'); + reply.header('Content-Length', chunksize); + } else { + image = { + data: fs.createReadStream(file.path), + ext: file.ext, + type: file.mime, + }; + } } if ('cleanup' in file) { diff --git a/packages/backend/src/server/api/endpoints/bubble-game/ranking.ts b/packages/backend/src/server/api/endpoints/bubble-game/ranking.ts index 0cba129a09..9c057760ca 100644 --- a/packages/backend/src/server/api/endpoints/bubble-game/ranking.ts +++ b/packages/backend/src/server/api/endpoints/bubble-game/ranking.ts @@ -11,8 +11,6 @@ import { DI } from '@/di-symbols.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; export const meta = { - tags: [], - allowGet: true, cacheSec: 60, diff --git a/packages/backend/src/server/api/endpoints/bubble-game/register.ts b/packages/backend/src/server/api/endpoints/bubble-game/register.ts index af0f69e4ad..f092d16a70 100644 --- a/packages/backend/src/server/api/endpoints/bubble-game/register.ts +++ b/packages/backend/src/server/api/endpoints/bubble-game/register.ts @@ -12,8 +12,6 @@ import { DI } from '@/di-symbols.js'; import { ApiError } from '../../error.js'; export const meta = { - tags: [], - requireCredential: true, kind: 'write:account', diff --git a/packages/backend/src/server/api/endpoints/drive/files.ts b/packages/backend/src/server/api/endpoints/drive/files.ts index b7e9d12e94..0ca31dc993 100644 --- a/packages/backend/src/server/api/endpoints/drive/files.ts +++ b/packages/backend/src/server/api/endpoints/drive/files.ts @@ -36,7 +36,7 @@ export const paramDef = { untilId: { type: 'string', format: 'misskey:id' }, folderId: { type: 'string', format: 'misskey:id', nullable: true, default: null }, type: { type: 'string', nullable: true, pattern: /^[a-zA-Z\/\-*]+$/.toString().slice(1, -1) }, - sort: { type: 'string', nullable: true, enum: ['+createdAt', '-createdAt', '+name', '-name', '+size', '-size'] }, + sort: { type: 'string', nullable: true, enum: ['+createdAt', '-createdAt', '+name', '-name', '+size', '-size', null] }, }, required: [], } as const; diff --git a/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts b/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts index 14a13b09c9..7a0b8b4417 100644 --- a/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts +++ b/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts @@ -74,7 +74,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- } const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId); - query.andWhere(':file = ANY(note.fileIds)', { file: file.id }); + query.andWhere(':file <@ note.fileIds', { file: [file.id] }); const notes = await query.limit(ps.limit).getMany(); diff --git a/packages/backend/src/server/api/endpoints/federation/instances.ts b/packages/backend/src/server/api/endpoints/federation/instances.ts index fcb4fc565d..6d8ae7c02d 100644 --- a/packages/backend/src/server/api/endpoints/federation/instances.ts +++ b/packages/backend/src/server/api/endpoints/federation/instances.ts @@ -62,6 +62,7 @@ export const paramDef = { '-firstRetrievedAt', '+latestRequestReceivedAt', '-latestRequestReceivedAt', + null, ], }, }, diff --git a/packages/backend/src/server/api/endpoints/hashtags/users.ts b/packages/backend/src/server/api/endpoints/hashtags/users.ts index 50aea79943..8302d2380f 100644 --- a/packages/backend/src/server/api/endpoints/hashtags/users.ts +++ b/packages/backend/src/server/api/endpoints/hashtags/users.ts @@ -6,6 +6,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { Endpoint } from '@/server/api/endpoint-base.js'; import type { UsersRepository } from '@/models/_.js'; +import { safeForSql } from "@/misc/safe-for-sql.js"; import { normalizeForSearch } from '@/misc/normalize-for-search.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { DI } from '@/di-symbols.js'; @@ -47,8 +48,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- private userEntityService: UserEntityService, ) { super(meta, paramDef, async (ps, me) => { + if (!safeForSql(normalizeForSearch(ps.tag))) throw new Error('Injection'); const query = this.usersRepository.createQueryBuilder('user') - .where(':tag = ANY(user.tags)', { tag: normalizeForSearch(ps.tag) }) + .where(':tag <@ user.tags', { tag: [normalizeForSearch(ps.tag)] }) .andWhere('user.isSuspended = FALSE'); const recent = new Date(Date.now() - (1000 * 60 * 60 * 24 * 5)); diff --git a/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts b/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts index 325d54d196..7c4665857e 100644 --- a/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts +++ b/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts @@ -104,13 +104,13 @@ export const meta = { items: { type: 'string', enum: [ - "ble", - "cable", - "hybrid", - "internal", - "nfc", - "smart-card", - "usb", + 'ble', + 'cable', + 'hybrid', + 'internal', + 'nfc', + 'smart-card', + 'usb', ], }, }, @@ -124,8 +124,8 @@ export const meta = { authenticatorAttachment: { type: 'string', enum: [ - "cross-platform", - "platform", + 'cross-platform', + 'platform', ], }, requireResidentKey: { @@ -134,9 +134,9 @@ export const meta = { userVerification: { type: 'string', enum: [ - "discouraged", - "preferred", - "required", + 'discouraged', + 'preferred', + 'required', ], }, }, @@ -145,10 +145,11 @@ export const meta = { type: 'string', nullable: true, enum: [ - "direct", - "enterprise", - "indirect", - "none", + 'direct', + 'enterprise', + 'indirect', + 'none', + null, ], }, extensions: { diff --git a/packages/backend/src/server/api/endpoints/notes/create.test.ts b/packages/backend/src/server/api/endpoints/notes/create.test.ts index 0de5a14a93..c204f4af92 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.test.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.test.ts @@ -34,11 +34,10 @@ describe('api:notes/create', () => { .toBe(VALID); }); - // TODO - //test('null post', () => { - // expect(v({ text: null })) - // .toBe(INVALID); - //}); + test('null post', () => { + expect(v({ text: null })) + .toBe(INVALID); + }); test('0 characters post', () => { expect(v({ text: '' })) @@ -49,6 +48,11 @@ describe('api:notes/create', () => { expect(v({ text: await tooLong })) .toBe(INVALID); }); + + test('whitespace-only post', () => { + expect(v({ text: ' ' })) + .toBe(INVALID); + }); }); describe('cw', () => { diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index 3fef0e6aa2..44ca1b9c16 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -177,13 +177,32 @@ export const paramDef = { }, }, // (re)note with text, files and poll are optional - anyOf: [ - { required: ['text'] }, - { required: ['renoteId'] }, - { required: ['fileIds'] }, - { required: ['mediaIds'] }, - { required: ['poll'] }, - ], + if: { + properties: { + renoteId: { + type: 'null', + }, + fileIds: { + type: 'null', + }, + mediaIds: { + type: 'null', + }, + poll: { + type: 'null', + }, + }, + }, + then: { + properties: { + text: { + type: 'string', + minLength: 1, + pattern: '[^\\s]+', + }, + }, + required: ['text'], + }, } as const; @Injectable() diff --git a/packages/backend/src/server/api/endpoints/notes/mentions.ts b/packages/backend/src/server/api/endpoints/notes/mentions.ts index 2317f8f7b2..323c6c946b 100644 --- a/packages/backend/src/server/api/endpoints/notes/mentions.ts +++ b/packages/backend/src/server/api/endpoints/notes/mentions.ts @@ -61,9 +61,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId) .andWhere(new Brackets(qb => { - qb - .where(`'{"${me.id}"}' <@ note.mentions`) - .orWhere(`'{"${me.id}"}' <@ note.visibleUserIds`); + qb // このmeIdAsListパラメータはqueryServiceのgenerateVisibilityQueryでセットされる + .where(':meIdAsList <@ note.mentions') + .orWhere(':meIdAsList <@ note.visibleUserIds'); })) // Avoid scanning primary key index .orderBy('CONCAT(note.id)', 'DESC') diff --git a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts index 89e05fd57e..53544149e2 100644 --- a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts +++ b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts @@ -104,14 +104,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- try { if (ps.tag) { if (!safeForSql(normalizeForSearch(ps.tag))) throw new Error('Injection'); - query.andWhere(`'{"${normalizeForSearch(ps.tag)}"}' <@ note.tags`); + query.andWhere(':tag <@ note.tags', { tag: [normalizeForSearch(ps.tag)] }); } else { query.andWhere(new Brackets(qb => { for (const tags of ps.query!) { qb.orWhere(new Brackets(qb => { for (const tag of tags) { if (!safeForSql(normalizeForSearch(tag))) throw new Error('Injection'); - qb.andWhere(`'{"${normalizeForSearch(tag)}"}' <@ note.tags`); + qb.andWhere(':tag <@ note.tags', { tag: [normalizeForSearch(tag)] }); } })); } diff --git a/packages/backend/src/server/api/openapi/gen-spec.ts b/packages/backend/src/server/api/openapi/gen-spec.ts index 0e71510b48..971a6116bf 100644 --- a/packages/backend/src/server/api/openapi/gen-spec.ts +++ b/packages/backend/src/server/api/openapi/gen-spec.ts @@ -10,7 +10,7 @@ import { schemas, convertSchemaToOpenApiSchema } from './schemas.js'; export function genOpenapiSpec(config: Config) { const spec = { - openapi: '3.0.0', + openapi: '3.1.0', info: { version: config.version, @@ -56,7 +56,7 @@ export function genOpenapiSpec(config: Config) { } } - const resSchema = endpoint.meta.res ? convertSchemaToOpenApiSchema(endpoint.meta.res) : {}; + const resSchema = endpoint.meta.res ? convertSchemaToOpenApiSchema(endpoint.meta.res, 'res') : {}; let desc = (endpoint.meta.description ? endpoint.meta.description : 'No description provided.') + '\n\n'; @@ -71,7 +71,7 @@ export function genOpenapiSpec(config: Config) { } const requestType = endpoint.meta.requireFile ? 'multipart/form-data' : 'application/json'; - const schema = { ...endpoint.params }; + const schema = { ...convertSchemaToOpenApiSchema(endpoint.params, 'param') }; if (endpoint.meta.requireFile) { schema.properties = { @@ -210,7 +210,9 @@ export function genOpenapiSpec(config: Config) { }; spec.paths['/' + endpoint.name] = { - ...(endpoint.meta.allowGet ? { get: info } : {}), + ...(endpoint.meta.allowGet ? { + get: info, + } : {}), post: info, }; } diff --git a/packages/backend/src/server/api/openapi/schemas.ts b/packages/backend/src/server/api/openapi/schemas.ts index 2716f5f162..a862a7b742 100644 --- a/packages/backend/src/server/api/openapi/schemas.ts +++ b/packages/backend/src/server/api/openapi/schemas.ts @@ -6,32 +6,35 @@ import type { Schema } from '@/misc/json-schema.js'; import { refs } from '@/misc/json-schema.js'; -export function convertSchemaToOpenApiSchema(schema: Schema) { - // optional, refはスキーマ定義に含まれないので分離しておく +export function convertSchemaToOpenApiSchema(schema: Schema, type: 'param' | 'res') { + // optional, nullable, refはスキーマ定義に含まれないので分離しておく // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { optional, ref, ...res }: any = schema; + const { optional, nullable, ref, ...res }: any = schema; if (schema.type === 'object' && schema.properties) { - const required = Object.entries(schema.properties).filter(([k, v]) => !v.optional).map(([k]) => k); - if (required.length > 0) { + if (type === 'res') { + const required = Object.entries(schema.properties).filter(([k, v]) => !v.optional).map(([k]) => k); + if (required.length > 0) { // 空配列は許可されない - res.required = required; + res.required = required; + } } for (const k of Object.keys(schema.properties)) { - res.properties[k] = convertSchemaToOpenApiSchema(schema.properties[k]); + res.properties[k] = convertSchemaToOpenApiSchema(schema.properties[k], type); } } if (schema.type === 'array' && schema.items) { - res.items = convertSchemaToOpenApiSchema(schema.items); + res.items = convertSchemaToOpenApiSchema(schema.items, type); } - if (schema.anyOf) res.anyOf = schema.anyOf.map(convertSchemaToOpenApiSchema); - if (schema.oneOf) res.oneOf = schema.oneOf.map(convertSchemaToOpenApiSchema); - if (schema.allOf) res.allOf = schema.allOf.map(convertSchemaToOpenApiSchema); + for (const o of ['anyOf', 'oneOf', 'allOf'] as const) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if (o in schema) res[o] = schema[o]!.map(schema => convertSchemaToOpenApiSchema(schema, type)); + } - if (schema.ref) { + if (type === 'res' && schema.ref) { const $ref = `#/components/schemas/${schema.ref}`; if (schema.nullable || schema.optional) { res.allOf = [{ $ref }]; @@ -40,6 +43,14 @@ export function convertSchemaToOpenApiSchema(schema: Schema) { } } + if (schema.nullable) { + if (Array.isArray(schema.type) && !schema.type.includes('null')) { + res.type.push('null'); + } else if (typeof schema.type === 'string') { + res.type = [res.type, 'null']; + } + } + return res; } @@ -72,6 +83,6 @@ export const schemas = { }, ...Object.fromEntries( - Object.entries(refs).map(([key, schema]) => [key, convertSchemaToOpenApiSchema(schema)]), + Object.entries(refs).map(([key, schema]) => [key, convertSchemaToOpenApiSchema(schema, 'res')]), ), }; diff --git a/packages/backend/test/e2e/drive.ts b/packages/backend/test/e2e/drive.ts new file mode 100644 index 0000000000..3a84961fc7 --- /dev/null +++ b/packages/backend/test/e2e/drive.ts @@ -0,0 +1,95 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +process.env.NODE_ENV = 'test'; + +import * as assert from 'assert'; +import { MiNote } from '@/models/Note.js'; +import { api, initTestDb, makeStreamCatcher, post, signup, uploadFile } from '../utils.js'; +import type * as misskey from 'misskey-js'; +import type{ Repository } from 'typeorm' +import type { Packed } from '@/misc/json-schema.js'; + + +describe('Drive', () => { + let Notes: Repository<MiNote>; + + let alice: misskey.entities.SignupResponse; + let bob: misskey.entities.SignupResponse; + + beforeAll(async () => { + const connection = await initTestDb(true); + Notes = connection.getRepository(MiNote); + alice = await signup({ username: 'alice' }); + bob = await signup({ username: 'bob' }); + }, 1000 * 60 * 2); + + test('ファイルURLからアップロードできる', async () => { + // utils.js uploadUrl の処理だがAPIレスポンスも見るためここで同様の処理を書いている + + const marker = Math.random().toString(); + + const url = 'https://raw.githubusercontent.com/misskey-dev/misskey/develop/packages/backend/test/resources/Lenna.jpg' + + const catcher = makeStreamCatcher( + alice, + 'main', + (msg) => msg.type === 'urlUploadFinished' && msg.body.marker === marker, + (msg) => msg.body.file as Packed<'DriveFile'>, + 10 * 1000); + + const res = await api('drive/files/upload-from-url', { + url, + marker, + force: true, + }, alice); + + const file = await catcher; + + assert.strictEqual(res.status, 204); + assert.strictEqual(file.name, 'Lenna.jpg'); + assert.strictEqual(file.type, 'image/jpeg'); + }) + + test('ローカルからアップロードできる', async () => { + // APIレスポンスを直接使用するので utils.js uploadFile が通過することで成功とする + + const res = await uploadFile(alice, { path: 'Lenna.jpg', name: 'テスト画像' }); + + assert.strictEqual(res.body?.name, 'テスト画像.jpg'); + assert.strictEqual(res.body?.type, 'image/jpeg'); + }) + + test('添付ノート一覧を取得できる', async () => { + const ids = (await Promise.all([uploadFile(alice), uploadFile(alice), uploadFile(alice)])).map(elm => elm.body!.id) + + const note0 = await post(alice, { fileIds: [ids[0]] }); + const note1 = await post(alice, { fileIds: [ids[0], ids[1]] }); + + const attached0 = await api('drive/files/attached-notes', { fileId: ids[0] }, alice); + assert.strictEqual(attached0.body.length, 2); + assert.strictEqual(attached0.body[0].id, note1.id) + assert.strictEqual(attached0.body[1].id, note0.id) + + const attached1 = await api('drive/files/attached-notes', { fileId: ids[1] }, alice); + assert.strictEqual(attached1.body.length, 1); + assert.strictEqual(attached1.body[0].id, note1.id) + + const attached2 = await api('drive/files/attached-notes', { fileId: ids[2] }, alice); + assert.strictEqual(attached2.body.length, 0) + }) + + test('添付ノート一覧は他の人から見えない', async () => { + const file = await uploadFile(alice); + + await post(alice, { fileIds: [file.body!.id] }); + + const res = await api('drive/files/attached-notes', { fileId: file.body!.id }, bob); + assert.strictEqual(res.status, 400); + assert.strictEqual('error' in res.body, true); + + }) +}); + diff --git a/packages/backend/test/e2e/note.ts b/packages/backend/test/e2e/note.ts index 0f2e08e675..0280b051f5 100644 --- a/packages/backend/test/e2e/note.ts +++ b/packages/backend/test/e2e/note.ts @@ -136,6 +136,19 @@ describe('Note', () => { assert.strictEqual(res.body.createdNote.renote.text, bobPost.text); }); + test('引用renoteで空白文字のみで構成されたtextにするとレスポンスがtext: nullになる', async () => { + const bobPost = await post(bob, { + text: 'test', + }); + const res = await api('/notes/create', { + text: ' ', + renoteId: bobPost.id, + }, alice); + + assert.strictEqual(res.status, 200); + assert.strictEqual(res.body.createdNote.text, null); + }); + test('visibility: followersでrenoteできる', async () => { const createRes = await api('/notes/create', { text: 'test', diff --git a/packages/backend/test/utils.ts b/packages/backend/test/utils.ts index 2b232a0a5d..a41002cc8c 100644 --- a/packages/backend/test/utils.ts +++ b/packages/backend/test/utils.ts @@ -16,6 +16,7 @@ import { DEFAULT_POLICIES } from '@/core/RoleService.js'; import { entities } from '../src/postgres.js'; import { loadConfig } from '../src/config.js'; import type * as misskey from 'misskey-js'; +import { Packed } from '@/misc/json-schema.js'; export { server as startServer, jobQueue as startJobQueue } from '@/boot/common.js'; @@ -114,6 +115,20 @@ export function randomString(chars = 'abcdefghijklmnopqrstuvwxyz0123456789', len return randomString; } +/** + * @brief プロミスにタイムアウト追加 + * @param p 待ち対象プロミス + * @param timeout 待機ミリ秒 + */ +function timeoutPromise<T>(p: Promise<T>, timeout: number): Promise<T> { + return Promise.race([ + p, + new Promise((reject) =>{ + setTimeout(() => { reject(new Error('timed out')); }, timeout) + }) as never + ]); +} + export const signup = async (params?: Partial<misskey.Endpoints['signup']['req']>): Promise<NonNullable<misskey.Endpoints['signup']['res']>> => { const q = Object.assign({ username: randomString(), @@ -320,17 +335,16 @@ export const uploadFile = async (user?: UserToken, { path, name, blob }: UploadO }; }; -export const uploadUrl = async (user: UserToken, url: string) => { - let resolve: unknown; - const file = new Promise(ok => resolve = ok); +export const uploadUrl = async (user: UserToken, url: string): Promise<Packed<'DriveFile'>> => { const marker = Math.random().toString(); - const ws = await connectStream(user, 'main', (msg) => { - if (msg.type === 'urlUploadFinished' && msg.body.marker === marker) { - ws.close(); - resolve(msg.body.file); - } - }); + const catcher = makeStreamCatcher( + user, + 'main', + (msg) => msg.type === 'urlUploadFinished' && msg.body.marker === marker, + (msg) => msg.body.file as Packed<'DriveFile'>, + 60 * 1000 + ); await api('drive/files/upload-from-url', { url, @@ -338,7 +352,7 @@ export const uploadUrl = async (user: UserToken, url: string) => { force: true, }, user); - return file; + return catcher; }; export function connectStream(user: UserToken, channel: string, listener: (message: Record<string, any>) => any, params?: any): Promise<WebSocket> { @@ -410,6 +424,35 @@ export const waitFire = async (user: UserToken, channel: string, trgr: () => any }); }; +/** + * @brief WebSocketストリームから特定条件の通知を拾うプロミスを生成 + * @param user ユーザー認証情報 + * @param channel チャンネル + * @param cond 条件 + * @param extractor 取り出し処理 + * @param timeout ミリ秒タイムアウト + * @returns 時間内に正常に処理できた場合に通知からextractorを通した値を得る + */ +export function makeStreamCatcher<T>( + user: UserToken, + channel: string, + cond: (message: Record<string, any>) => boolean, + extractor: (message: Record<string, any>) => T, + timeout = 60 * 1000): Promise<T> { + let ws: WebSocket + const p = new Promise<T>(async (resolve) => { + ws = await connectStream(user, channel, (msg) => { + if (cond(msg)) { + resolve(extractor(msg)) + } + }); + }).finally(() => { + ws?.close(); + }); + + return timeoutPromise(p, timeout); +} + export type SimpleGetResponse = { status: number, body: any | JSDOM | null, diff --git a/packages/frontend/assets/drop-and-fusion/poi1.mp3 b/packages/frontend/assets/drop-and-fusion/collision.mp3 similarity index 100% rename from packages/frontend/assets/drop-and-fusion/poi1.mp3 rename to packages/frontend/assets/drop-and-fusion/collision.mp3 diff --git a/packages/frontend/assets/drop-and-fusion/collision_yen.mp3 b/packages/frontend/assets/drop-and-fusion/collision_yen.mp3 new file mode 100644 index 0000000000..6737357f62 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/collision_yen.mp3 differ diff --git a/packages/frontend/assets/drop-and-fusion/poi2.mp3 b/packages/frontend/assets/drop-and-fusion/drop.mp3 similarity index 100% rename from packages/frontend/assets/drop-and-fusion/poi2.mp3 rename to packages/frontend/assets/drop-and-fusion/drop.mp3 diff --git a/packages/frontend/assets/drop-and-fusion/drop_yen.mp3 b/packages/frontend/assets/drop-and-fusion/drop_yen.mp3 new file mode 100644 index 0000000000..bbf385f15a Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/drop_yen.mp3 differ diff --git a/packages/frontend/assets/drop-and-fusion/bubble2.mp3 b/packages/frontend/assets/drop-and-fusion/fusion.mp3 similarity index 100% rename from packages/frontend/assets/drop-and-fusion/bubble2.mp3 rename to packages/frontend/assets/drop-and-fusion/fusion.mp3 diff --git a/packages/frontend/assets/drop-and-fusion/fusion_yen.mp3 b/packages/frontend/assets/drop-and-fusion/fusion_yen.mp3 new file mode 100644 index 0000000000..e8d203fb5d Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/fusion_yen.mp3 differ diff --git a/packages/frontend/assets/drop-and-fusion/gameover_yen.mp3 b/packages/frontend/assets/drop-and-fusion/gameover_yen.mp3 new file mode 100644 index 0000000000..c7fdcb5c8f Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/gameover_yen.mp3 differ diff --git a/packages/frontend/assets/drop-and-fusion/go.png b/packages/frontend/assets/drop-and-fusion/go.png new file mode 100644 index 0000000000..37468f1395 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/go.png differ diff --git a/packages/frontend/assets/drop-and-fusion/cold_face.png b/packages/frontend/assets/drop-and-fusion/normal_monos/cold_face.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/cold_face.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/cold_face.png diff --git a/packages/frontend/assets/drop-and-fusion/exploding_head.png b/packages/frontend/assets/drop-and-fusion/normal_monos/exploding_head.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/exploding_head.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/exploding_head.png diff --git a/packages/frontend/assets/drop-and-fusion/face_with_open_mouth.png b/packages/frontend/assets/drop-and-fusion/normal_monos/face_with_open_mouth.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/face_with_open_mouth.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/face_with_open_mouth.png diff --git a/packages/frontend/assets/drop-and-fusion/face_with_symbols_on_mouth.png b/packages/frontend/assets/drop-and-fusion/normal_monos/face_with_symbols_on_mouth.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/face_with_symbols_on_mouth.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/face_with_symbols_on_mouth.png diff --git a/packages/frontend/assets/drop-and-fusion/grinning_squinting_face.png b/packages/frontend/assets/drop-and-fusion/normal_monos/grinning_squinting_face.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/grinning_squinting_face.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/grinning_squinting_face.png diff --git a/packages/frontend/assets/drop-and-fusion/heart_suit.png b/packages/frontend/assets/drop-and-fusion/normal_monos/heart_suit.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/heart_suit.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/heart_suit.png diff --git a/packages/frontend/assets/drop-and-fusion/pleading_face.png b/packages/frontend/assets/drop-and-fusion/normal_monos/pleading_face.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/pleading_face.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/pleading_face.png diff --git a/packages/frontend/assets/drop-and-fusion/smiling_face_with_hearts.png b/packages/frontend/assets/drop-and-fusion/normal_monos/smiling_face_with_hearts.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/smiling_face_with_hearts.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/smiling_face_with_hearts.png diff --git a/packages/frontend/assets/drop-and-fusion/smiling_face_with_sunglasses.png b/packages/frontend/assets/drop-and-fusion/normal_monos/smiling_face_with_sunglasses.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/smiling_face_with_sunglasses.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/smiling_face_with_sunglasses.png diff --git a/packages/frontend/assets/drop-and-fusion/zany_face.png b/packages/frontend/assets/drop-and-fusion/normal_monos/zany_face.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/zany_face.png rename to packages/frontend/assets/drop-and-fusion/normal_monos/zany_face.png diff --git a/packages/frontend/assets/drop-and-fusion/ready.png b/packages/frontend/assets/drop-and-fusion/ready.png new file mode 100644 index 0000000000..10a87fcf58 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/ready.png differ diff --git a/packages/frontend/assets/drop-and-fusion/keycap_1.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_1.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_1.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_1.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_10.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_10.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_10.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_10.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_2.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_2.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_2.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_2.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_3.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_3.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_3.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_3.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_4.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_4.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_4.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_4.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_5.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_5.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_5.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_5.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_6.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_6.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_6.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_6.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_7.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_7.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_7.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_7.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_8.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_8.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_8.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_8.png diff --git a/packages/frontend/assets/drop-and-fusion/keycap_9.png b/packages/frontend/assets/drop-and-fusion/square_monos/keycap_9.png similarity index 100% rename from packages/frontend/assets/drop-and-fusion/keycap_9.png rename to packages/frontend/assets/drop-and-fusion/square_monos/keycap_9.png diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/candy_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/candy_color.svg new file mode 100644 index 0000000000..6eab3ca49b --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/candy_color.svg @@ -0,0 +1,86 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13 3.99998C13 2.89998 12.2135 2.08134 11.0625 1.9375C9.875 1.78909 9.10938 2.49997 8.51562 3.57811C8.20282 4.14611 7.69531 4.34368 7.13281 4.15621C6.07292 3.80295 5.07886 3.24214 4.07812 4.38277C3.35156 5.21089 3.46006 6.16444 4.07812 7.07811C4.4375 7.60936 4.46599 8.50491 3.85938 8.85154C2.98438 9.35154 2.01562 9.89998 2.01562 11C2.01562 12.5937 3.22812 13.375 4.32812 13.375L13 13V3.99998Z" fill="url(#paint0_linear_18_32303)"/> +<path d="M13 3.99998C13 2.89998 12.2135 2.08134 11.0625 1.9375C9.875 1.78909 9.10938 2.49997 8.51562 3.57811C8.20282 4.14611 7.69531 4.34368 7.13281 4.15621C6.07292 3.80295 5.07886 3.24214 4.07812 4.38277C3.35156 5.21089 3.46006 6.16444 4.07812 7.07811C4.4375 7.60936 4.46599 8.50491 3.85938 8.85154C2.98438 9.35154 2.01562 9.89998 2.01562 11C2.01562 12.5937 3.22812 13.375 4.32812 13.375L13 13V3.99998Z" fill="url(#paint1_radial_18_32303)"/> +<path d="M13 3.99998C13 2.89998 12.2135 2.08134 11.0625 1.9375C9.875 1.78909 9.10938 2.49997 8.51562 3.57811C8.20282 4.14611 7.69531 4.34368 7.13281 4.15621C6.07292 3.80295 5.07886 3.24214 4.07812 4.38277C3.35156 5.21089 3.46006 6.16444 4.07812 7.07811C4.4375 7.60936 4.46599 8.50491 3.85938 8.85154C2.98438 9.35154 2.01562 9.89998 2.01562 11C2.01562 12.5937 3.22812 13.375 4.32812 13.375L13 13V3.99998Z" fill="url(#paint2_radial_18_32303)"/> +<path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" fill="url(#paint3_radial_18_32303)"/> +<path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" fill="url(#paint4_radial_18_32303)"/> +<path d="M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z" fill="url(#paint5_radial_18_32303)"/> +<path d="M13.2344 13.0156C16.5007 9.6733 23.0156 8.23438 25.625 13.2695C25.3867 12.4766 24.7656 10.5391 23.0156 8.87496C19.5156 5.98433 13.8416 7.95125 10.5937 11.5937C8.46307 13.9833 5.57031 19.7031 9.61719 23.6992C10.4609 24.3555 11.8437 25.4844 14.1719 25.8281C6.98438 22.6875 10.3465 15.9707 13.2344 13.0156Z" fill="url(#paint6_linear_18_32303)"/> +<path d="M19.1094 24.1719C15.2031 24 15.2701 20.2321 17.2812 17.9766C20.6387 14.211 24.2891 16.0156 24.2187 19.0703H25.1808C26.4349 14.6766 23.3913 12.9922 20.9375 12.9922C17.3586 12.9922 14.1562 16.1094 13.2266 19.4609C12.4375 22.6406 14.2266 26.375 19.1094 25.125V24.1719Z" fill="#C62561"/> +<path d="M19.1094 24.1719C15.2031 24 15.2701 20.2321 17.2812 17.9766C20.6387 14.211 24.2891 16.0156 24.2187 19.0703H25.1808C26.4349 14.6766 23.3913 12.9922 20.9375 12.9922C17.3586 12.9922 14.1562 16.1094 13.2266 19.4609C12.4375 22.6406 14.2266 26.375 19.1094 25.125V24.1719Z" fill="url(#paint7_radial_18_32303)"/> +<path d="M19 28C19 29.1 19.9 30 21 30C22.1 30 23 29.1 23 28C23 27.2 23.97 26.8 24.54 27.36L24.59 27.41C25.37 28.19 26.64 28.19 27.42 27.41C28.2 26.63 28.2 25.36 27.42 24.58L27.37 24.53C26.8 23.97 27.2 23 28 23C29.1 23 30 22.1 30 21C30 19.9 29.1 19 28 19H22.5C20.57 19 19 20.57 19 22.5V28Z" fill="url(#paint8_linear_18_32303)"/> +<path d="M8.85156 9.00391C6.21406 11.6414 5.88281 14.8047 6.03906 16.8672C6.03906 16.8672 5.95968 12.9153 9.29687 9.57814C12.6341 6.24095 16.4219 6.01561 16.4219 6.01561C14.3125 5.89846 11.4891 6.36641 8.85156 9.00391Z" fill="#A72D36"/> +<g filter="url(#filter0_f_18_32303)"> +<path d="M26.6641 24.0547C27.1367 24.0039 26.6094 23.2812 27.211 22.1406C26.4844 22.6484 26.1914 24.1055 26.6641 24.0547Z" fill="#E75372"/> +</g> +<g filter="url(#filter1_f_18_32303)"> +<path d="M27.7196 25.3724C27.9826 25.8229 27.9149 26.8411 26.9618 27.263C25.7243 27.6943 26.9514 26.1823 27.7196 25.3724Z" fill="url(#paint9_radial_18_32303)"/> +</g> +<g filter="url(#filter2_f_18_32303)"> +<path d="M29.5156 19.9688C29.8385 20.4434 30.125 21.5352 28.75 22.1618C27.925 22.5377 28.6927 20.9656 29.5156 19.9688Z" fill="url(#paint10_radial_18_32303)"/> +</g> +<defs> +<filter id="filter0_f_18_32303" x="26.0343" y="21.7406" width="1.57663" height="2.71534" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.2" result="effect1_foregroundBlur_18_32303"/> +</filter> +<filter id="filter1_f_18_32303" x="26.1843" y="25.1224" width="1.91805" height="2.46649" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_32303"/> +</filter> +<filter id="filter2_f_18_32303" x="27.996" y="19.5687" width="2.18687" height="3.04994" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.2" result="effect1_foregroundBlur_18_32303"/> +</filter> +<linearGradient id="paint0_linear_18_32303" x1="2.01562" y1="7.64644" x2="13" y2="7.64644" gradientUnits="userSpaceOnUse"> +<stop stop-color="#AA1C3D"/> +<stop offset="1" stop-color="#C31D45"/> +</linearGradient> +<radialGradient id="paint1_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(8 11.1875) rotate(123.69) scale(5.18298 4.96914)"> +<stop stop-color="#951731"/> +<stop offset="1" stop-color="#9D1934" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint2_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.2187 4.40625) rotate(90) scale(5.0625 1.3908)"> +<stop stop-color="#EC516B"/> +<stop offset="1" stop-color="#EB506C" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint3_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21.8125 11.8125) rotate(161.633) scale(16.6613)"> +<stop stop-color="#FFD95A"/> +<stop offset="0.423359" stop-color="#EEB53D"/> +<stop offset="0.787547" stop-color="#CA8631"/> +<stop offset="1" stop-color="#B28341"/> +</radialGradient> +<radialGradient id="paint4_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.625 26.6875) rotate(104.903) scale(8.01975 13.7205)"> +<stop stop-color="#CD7677"/> +<stop offset="1" stop-color="#CE7A85" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint5_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(20.0625 22.0625) rotate(151.844) scale(5.03309 3.80247)"> +<stop stop-color="#CF771E"/> +<stop offset="1" stop-color="#C96D2E" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint6_linear_18_32303" x1="24.0625" y1="9.8125" x2="9.6875" y2="23.875" gradientUnits="userSpaceOnUse"> +<stop stop-color="#F54353"/> +<stop offset="0.485245" stop-color="#C01C47"/> +<stop offset="1" stop-color="#C2355A"/> +</linearGradient> +<radialGradient id="paint7_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21.625 12.5625) rotate(73.1132) scale(7.31544 7.34222)"> +<stop offset="0.341752" stop-color="#F25271"/> +<stop offset="1" stop-color="#F15372" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint8_linear_18_32303" x1="20.3125" y1="20.3125" x2="27.5" y2="27.75" gradientUnits="userSpaceOnUse"> +<stop stop-color="#BF242E"/> +<stop offset="1" stop-color="#CF1E51"/> +</linearGradient> +<radialGradient id="paint9_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(27.8524 26.1536) rotate(118.896) scale(1.8218 1.06121)"> +<stop stop-color="#ED5372"/> +<stop offset="1" stop-color="#ED5372" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint10_radial_18_32303" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(29.7828 21.2031) rotate(120.115) scale(1.71599 0.933717)"> +<stop stop-color="#ED5372"/> +<stop offset="1" stop-color="#ED5372" stop-opacity="0"/> +</radialGradient> +</defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/chocolate_bar_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/chocolate_bar_color.svg new file mode 100644 index 0000000000..eea5fec186 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/chocolate_bar_color.svg @@ -0,0 +1,316 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M10.9844 22.625L2.875 14.4531C1.5547 13.1328 2.04687 11.8125 2.62501 11.2344L11.1875 2.71876C12.211 1.69532 13.375 1.89065 14.3125 2.82815L22.375 10.8281L10.9844 22.625Z" fill="#8A584C"/> +<path d="M10.9844 22.625L2.875 14.4531C1.5547 13.1328 2.04687 11.8125 2.62501 11.2344L11.1875 2.71876C12.211 1.69532 13.375 1.89065 14.3125 2.82815L22.375 10.8281L10.9844 22.625Z" fill="url(#paint0_radial_18_32062)"/> +<path d="M10.9844 22.625L2.875 14.4531C1.5547 13.1328 2.04687 11.8125 2.62501 11.2344L11.1875 2.71876C12.211 1.69532 13.375 1.89065 14.3125 2.82815L22.375 10.8281L10.9844 22.625Z" fill="url(#paint1_radial_18_32062)"/> +<path d="M10.9844 22.625L2.875 14.4531C1.5547 13.1328 2.04687 11.8125 2.62501 11.2344L11.1875 2.71876C12.211 1.69532 13.375 1.89065 14.3125 2.82815L22.375 10.8281L10.9844 22.625Z" fill="url(#paint2_radial_18_32062)"/> +<g filter="url(#filter0_f_18_32062)"> +<path d="M6.46309 9.72343C6.47658 9.71056 6.49039 9.6979 6.50466 9.6859C7.03753 9.23812 7.71518 9.24807 8.23887 9.69368C8.24699 9.70059 8.25463 9.70742 8.26249 9.71463C8.36319 9.80688 9.10895 10.4917 9.67969 11.0625C10.2582 11.641 10.9331 12.3785 11.0077 12.4602C11.0125 12.4654 11.0169 12.4703 11.0215 12.4756C11.4733 12.9952 11.5049 13.6871 11.0259 14.2228C11.0184 14.2312 11.0113 14.2392 11.0039 14.2477C10.9204 14.3435 10.357 14.9867 9.67969 15.664C9.02564 16.3181 8.40257 16.8978 8.2741 17.0168C8.25775 17.0319 8.24131 17.0464 8.22388 17.0602C7.64411 17.5221 7.00112 17.4542 6.48458 17C6.48373 16.9993 6.48346 16.999 6.48261 16.9983C6.45576 16.9747 5.65368 16.2708 5.04688 15.664C4.44065 15.0578 3.74501 14.2642 3.72049 14.2362C3.71971 14.2353 3.71942 14.235 3.71865 14.2341C3.25359 13.6982 3.26579 12.9793 3.70954 12.4791C3.71632 12.4715 3.72307 12.4642 3.73012 12.4568C3.82368 12.3587 4.53588 11.6125 5.08595 11.0625C5.62082 10.5276 6.33466 9.84586 6.46309 9.72343Z" fill="#824534"/> +<path d="M6.46309 9.72343C6.47658 9.71056 6.49039 9.6979 6.50466 9.6859C7.03753 9.23812 7.71518 9.24807 8.23887 9.69368C8.24699 9.70059 8.25463 9.70742 8.26249 9.71463C8.36319 9.80688 9.10895 10.4917 9.67969 11.0625C10.2582 11.641 10.9331 12.3785 11.0077 12.4602C11.0125 12.4654 11.0169 12.4703 11.0215 12.4756C11.4733 12.9952 11.5049 13.6871 11.0259 14.2228C11.0184 14.2312 11.0113 14.2392 11.0039 14.2477C10.9204 14.3435 10.357 14.9867 9.67969 15.664C9.02564 16.3181 8.40257 16.8978 8.2741 17.0168C8.25775 17.0319 8.24131 17.0464 8.22388 17.0602C7.64411 17.5221 7.00112 17.4542 6.48458 17C6.48373 16.9993 6.48346 16.999 6.48261 16.9983C6.45576 16.9747 5.65368 16.2708 5.04688 15.664C4.44065 15.0578 3.74501 14.2642 3.72049 14.2362C3.71971 14.2353 3.71942 14.235 3.71865 14.2341C3.25359 13.6982 3.26579 12.9793 3.70954 12.4791C3.71632 12.4715 3.72307 12.4642 3.73012 12.4568C3.82368 12.3587 4.53588 11.6125 5.08595 11.0625C5.62082 10.5276 6.33466 9.84586 6.46309 9.72343Z" fill="url(#paint3_linear_18_32062)"/> +<path d="M6.46309 9.72343C6.47658 9.71056 6.49039 9.6979 6.50466 9.6859C7.03753 9.23812 7.71518 9.24807 8.23887 9.69368C8.24699 9.70059 8.25463 9.70742 8.26249 9.71463C8.36319 9.80688 9.10895 10.4917 9.67969 11.0625C10.2582 11.641 10.9331 12.3785 11.0077 12.4602C11.0125 12.4654 11.0169 12.4703 11.0215 12.4756C11.4733 12.9952 11.5049 13.6871 11.0259 14.2228C11.0184 14.2312 11.0113 14.2392 11.0039 14.2477C10.9204 14.3435 10.357 14.9867 9.67969 15.664C9.02564 16.3181 8.40257 16.8978 8.2741 17.0168C8.25775 17.0319 8.24131 17.0464 8.22388 17.0602C7.64411 17.5221 7.00112 17.4542 6.48458 17C6.48373 16.9993 6.48346 16.999 6.48261 16.9983C6.45576 16.9747 5.65368 16.2708 5.04688 15.664C4.44065 15.0578 3.74501 14.2642 3.72049 14.2362C3.71971 14.2353 3.71942 14.235 3.71865 14.2341C3.25359 13.6982 3.26579 12.9793 3.70954 12.4791C3.71632 12.4715 3.72307 12.4642 3.73012 12.4568C3.82368 12.3587 4.53588 11.6125 5.08595 11.0625C5.62082 10.5276 6.33466 9.84586 6.46309 9.72343Z" fill="#7B3E41"/> +</g> +<path d="M6.77559 9.16093C6.78908 9.14806 6.80289 9.1354 6.81716 9.1234C7.35003 8.67562 8.02768 8.68557 8.55137 9.13118C8.55949 9.13809 8.56713 9.14492 8.57499 9.15213C8.67569 9.24438 9.42145 9.92923 9.99219 10.5C10.5707 11.0785 11.2456 11.816 11.3202 11.8977C11.325 11.9029 11.3294 11.9078 11.334 11.9131C11.7858 12.4327 11.8174 13.1246 11.3384 13.6603C11.3309 13.6687 11.3238 13.6767 11.3164 13.6852C11.2329 13.781 10.6695 14.4242 9.99219 15.1015C9.33814 15.7556 8.71507 16.3353 8.5866 16.4543C8.57025 16.4694 8.55381 16.4839 8.53638 16.4977C7.95661 16.9596 7.31362 16.8917 6.79708 16.4375C6.79623 16.4368 6.79596 16.4365 6.79511 16.4358C6.76826 16.4122 5.96618 15.7083 5.35938 15.1015C4.75315 14.4953 4.05751 13.7017 4.03299 13.6737C4.03221 13.6728 4.03192 13.6725 4.03115 13.6716C3.56609 13.1357 3.57829 12.4168 4.02204 11.9166C4.02882 11.909 4.03557 11.9017 4.04262 11.8943C4.13618 11.7962 4.84838 11.05 5.39845 10.5C5.93332 9.96511 6.64716 9.28336 6.77559 9.16093Z" fill="#824534"/> +<path d="M6.77559 9.16093C6.78908 9.14806 6.80289 9.1354 6.81716 9.1234C7.35003 8.67562 8.02768 8.68557 8.55137 9.13118C8.55949 9.13809 8.56713 9.14492 8.57499 9.15213C8.67569 9.24438 9.42145 9.92923 9.99219 10.5C10.5707 11.0785 11.2456 11.816 11.3202 11.8977C11.325 11.9029 11.3294 11.9078 11.334 11.9131C11.7858 12.4327 11.8174 13.1246 11.3384 13.6603C11.3309 13.6687 11.3238 13.6767 11.3164 13.6852C11.2329 13.781 10.6695 14.4242 9.99219 15.1015C9.33814 15.7556 8.71507 16.3353 8.5866 16.4543C8.57025 16.4694 8.55381 16.4839 8.53638 16.4977C7.95661 16.9596 7.31362 16.8917 6.79708 16.4375C6.79623 16.4368 6.79596 16.4365 6.79511 16.4358C6.76826 16.4122 5.96618 15.7083 5.35938 15.1015C4.75315 14.4953 4.05751 13.7017 4.03299 13.6737C4.03221 13.6728 4.03192 13.6725 4.03115 13.6716C3.56609 13.1357 3.57829 12.4168 4.02204 11.9166C4.02882 11.909 4.03557 11.9017 4.04262 11.8943C4.13618 11.7962 4.84838 11.05 5.39845 10.5C5.93332 9.96511 6.64716 9.28336 6.77559 9.16093Z" fill="url(#paint4_linear_18_32062)"/> +<path d="M6.77559 9.16093C6.78908 9.14806 6.80289 9.1354 6.81716 9.1234C7.35003 8.67562 8.02768 8.68557 8.55137 9.13118C8.55949 9.13809 8.56713 9.14492 8.57499 9.15213C8.67569 9.24438 9.42145 9.92923 9.99219 10.5C10.5707 11.0785 11.2456 11.816 11.3202 11.8977C11.325 11.9029 11.3294 11.9078 11.334 11.9131C11.7858 12.4327 11.8174 13.1246 11.3384 13.6603C11.3309 13.6687 11.3238 13.6767 11.3164 13.6852C11.2329 13.781 10.6695 14.4242 9.99219 15.1015C9.33814 15.7556 8.71507 16.3353 8.5866 16.4543C8.57025 16.4694 8.55381 16.4839 8.53638 16.4977C7.95661 16.9596 7.31362 16.8917 6.79708 16.4375C6.79623 16.4368 6.79596 16.4365 6.79511 16.4358C6.76826 16.4122 5.96618 15.7083 5.35938 15.1015C4.75315 14.4953 4.05751 13.7017 4.03299 13.6737C4.03221 13.6728 4.03192 13.6725 4.03115 13.6716C3.56609 13.1357 3.57829 12.4168 4.02204 11.9166C4.02882 11.909 4.03557 11.9017 4.04262 11.8943C4.13618 11.7962 4.84838 11.05 5.39845 10.5C5.93332 9.96511 6.64716 9.28336 6.77559 9.16093Z" fill="url(#paint5_linear_18_32062)"/> +<path d="M6.77559 9.16093C6.78908 9.14806 6.80289 9.1354 6.81716 9.1234C7.35003 8.67562 8.02768 8.68557 8.55137 9.13118C8.55949 9.13809 8.56713 9.14492 8.57499 9.15213C8.67569 9.24438 9.42145 9.92923 9.99219 10.5C10.5707 11.0785 11.2456 11.816 11.3202 11.8977C11.325 11.9029 11.3294 11.9078 11.334 11.9131C11.7858 12.4327 11.8174 13.1246 11.3384 13.6603C11.3309 13.6687 11.3238 13.6767 11.3164 13.6852C11.2329 13.781 10.6695 14.4242 9.99219 15.1015C9.33814 15.7556 8.71507 16.3353 8.5866 16.4543C8.57025 16.4694 8.55381 16.4839 8.53638 16.4977C7.95661 16.9596 7.31362 16.8917 6.79708 16.4375C6.79623 16.4368 6.79596 16.4365 6.79511 16.4358C6.76826 16.4122 5.96618 15.7083 5.35938 15.1015C4.75315 14.4953 4.05751 13.7017 4.03299 13.6737C4.03221 13.6728 4.03192 13.6725 4.03115 13.6716C3.56609 13.1357 3.57829 12.4168 4.02204 11.9166C4.02882 11.909 4.03557 11.9017 4.04262 11.8943C4.13618 11.7962 4.84838 11.05 5.39845 10.5C5.93332 9.96511 6.64716 9.28336 6.77559 9.16093Z" fill="url(#paint6_linear_18_32062)"/> +<path d="M6.77559 9.16093C6.78908 9.14806 6.80289 9.1354 6.81716 9.1234C7.35003 8.67562 8.02768 8.68557 8.55137 9.13118C8.55949 9.13809 8.56713 9.14492 8.57499 9.15213C8.67569 9.24438 9.42145 9.92923 9.99219 10.5C10.5707 11.0785 11.2456 11.816 11.3202 11.8977C11.325 11.9029 11.3294 11.9078 11.334 11.9131C11.7858 12.4327 11.8174 13.1246 11.3384 13.6603C11.3309 13.6687 11.3238 13.6767 11.3164 13.6852C11.2329 13.781 10.6695 14.4242 9.99219 15.1015C9.33814 15.7556 8.71507 16.3353 8.5866 16.4543C8.57025 16.4694 8.55381 16.4839 8.53638 16.4977C7.95661 16.9596 7.31362 16.8917 6.79708 16.4375C6.79623 16.4368 6.79596 16.4365 6.79511 16.4358C6.76826 16.4122 5.96618 15.7083 5.35938 15.1015C4.75315 14.4953 4.05751 13.7017 4.03299 13.6737C4.03221 13.6728 4.03192 13.6725 4.03115 13.6716C3.56609 13.1357 3.57829 12.4168 4.02204 11.9166C4.02882 11.909 4.03557 11.9017 4.04262 11.8943C4.13618 11.7962 4.84838 11.05 5.39845 10.5C5.93332 9.96511 6.64716 9.28336 6.77559 9.16093Z" fill="url(#paint7_linear_18_32062)"/> +<g filter="url(#filter1_f_18_32062)"> +<path d="M4.39003 13.1845C4.2339 13.0047 4.22852 12.7406 4.38087 12.5576C4.67465 12.2047 5.19322 11.6037 5.80061 10.9963C6.40743 10.3895 7.00484 9.87436 7.35569 9.58263C7.53818 9.43089 7.80117 9.43597 7.98065 9.59126C8.38765 9.94341 9.10397 10.5727 9.55267 11.0214C9.99768 11.4664 10.6204 12.1747 10.9741 12.5834C11.1334 12.7674 11.1344 13.0384 10.9761 13.2233C10.6339 13.6226 10.0351 14.3086 9.57032 14.7734C9.1059 15.2379 8.42064 15.836 8.02119 16.1783C7.8359 16.3371 7.56387 16.3355 7.37965 16.1754C6.96194 15.8126 6.23492 15.1724 5.8183 14.7558C5.39836 14.3359 4.7513 13.6006 4.39003 13.1845Z" fill="url(#paint8_linear_18_32062)"/> +<path d="M4.39003 13.1845C4.2339 13.0047 4.22852 12.7406 4.38087 12.5576C4.67465 12.2047 5.19322 11.6037 5.80061 10.9963C6.40743 10.3895 7.00484 9.87436 7.35569 9.58263C7.53818 9.43089 7.80117 9.43597 7.98065 9.59126C8.38765 9.94341 9.10397 10.5727 9.55267 11.0214C9.99768 11.4664 10.6204 12.1747 10.9741 12.5834C11.1334 12.7674 11.1344 13.0384 10.9761 13.2233C10.6339 13.6226 10.0351 14.3086 9.57032 14.7734C9.1059 15.2379 8.42064 15.836 8.02119 16.1783C7.8359 16.3371 7.56387 16.3355 7.37965 16.1754C6.96194 15.8126 6.23492 15.1724 5.8183 14.7558C5.39836 14.3359 4.7513 13.6006 4.39003 13.1845Z" fill="url(#paint9_linear_18_32062)"/> +<path d="M4.39003 13.1845C4.2339 13.0047 4.22852 12.7406 4.38087 12.5576C4.67465 12.2047 5.19322 11.6037 5.80061 10.9963C6.40743 10.3895 7.00484 9.87436 7.35569 9.58263C7.53818 9.43089 7.80117 9.43597 7.98065 9.59126C8.38765 9.94341 9.10397 10.5727 9.55267 11.0214C9.99768 11.4664 10.6204 12.1747 10.9741 12.5834C11.1334 12.7674 11.1344 13.0384 10.9761 13.2233C10.6339 13.6226 10.0351 14.3086 9.57032 14.7734C9.1059 15.2379 8.42064 15.836 8.02119 16.1783C7.8359 16.3371 7.56387 16.3355 7.37965 16.1754C6.96194 15.8126 6.23492 15.1724 5.8183 14.7558C5.39836 14.3359 4.7513 13.6006 4.39003 13.1845Z" fill="url(#paint10_linear_18_32062)"/> +</g> +<path d="M11.9631 4.00468C11.9766 3.99181 11.9904 3.97915 12.0047 3.96715C12.5375 3.51937 13.2152 3.52932 13.7389 3.97493C13.747 3.98184 13.7546 3.98867 13.7625 3.99588C13.8632 4.08813 14.6089 4.77298 15.1797 5.34373C15.7582 5.92224 16.4331 6.6597 16.5077 6.74144C16.5125 6.74663 16.5169 6.75157 16.5215 6.75687C16.9733 7.27646 17.0049 7.96838 16.5259 8.50405C16.5184 8.51244 16.5113 8.52045 16.5039 8.52893C16.4204 8.62477 15.857 9.26797 15.1797 9.94529C14.5256 10.5993 13.9026 11.179 13.7741 11.298C13.7577 11.3132 13.7413 11.3276 13.7239 11.3415C13.1441 11.8034 12.5011 11.7354 11.9846 11.2813C11.9837 11.2805 11.9835 11.2803 11.9826 11.2795C11.9558 11.256 11.1537 10.5521 10.5469 9.94529C9.94065 9.33906 9.24501 8.54543 9.22049 8.51743C9.21971 8.51654 9.21942 8.51621 9.21865 8.51531C8.75359 7.97944 8.76579 7.26059 9.20954 6.76036C9.21632 6.75271 9.22307 6.74549 9.23012 6.73809C9.32368 6.63994 10.0359 5.89379 10.5859 5.34373C11.1208 4.80886 11.8347 4.12711 11.9631 4.00468Z" fill="#824534"/> +<path d="M11.9631 4.00468C11.9766 3.99181 11.9904 3.97915 12.0047 3.96715C12.5375 3.51937 13.2152 3.52932 13.7389 3.97493C13.747 3.98184 13.7546 3.98867 13.7625 3.99588C13.8632 4.08813 14.6089 4.77298 15.1797 5.34373C15.7582 5.92224 16.4331 6.6597 16.5077 6.74144C16.5125 6.74663 16.5169 6.75157 16.5215 6.75687C16.9733 7.27646 17.0049 7.96838 16.5259 8.50405C16.5184 8.51244 16.5113 8.52045 16.5039 8.52893C16.4204 8.62477 15.857 9.26797 15.1797 9.94529C14.5256 10.5993 13.9026 11.179 13.7741 11.298C13.7577 11.3132 13.7413 11.3276 13.7239 11.3415C13.1441 11.8034 12.5011 11.7354 11.9846 11.2813C11.9837 11.2805 11.9835 11.2803 11.9826 11.2795C11.9558 11.256 11.1537 10.5521 10.5469 9.94529C9.94065 9.33906 9.24501 8.54543 9.22049 8.51743C9.21971 8.51654 9.21942 8.51621 9.21865 8.51531C8.75359 7.97944 8.76579 7.26059 9.20954 6.76036C9.21632 6.75271 9.22307 6.74549 9.23012 6.73809C9.32368 6.63994 10.0359 5.89379 10.5859 5.34373C11.1208 4.80886 11.8347 4.12711 11.9631 4.00468Z" fill="url(#paint11_linear_18_32062)"/> +<path d="M11.9631 4.00468C11.9766 3.99181 11.9904 3.97915 12.0047 3.96715C12.5375 3.51937 13.2152 3.52932 13.7389 3.97493C13.747 3.98184 13.7546 3.98867 13.7625 3.99588C13.8632 4.08813 14.6089 4.77298 15.1797 5.34373C15.7582 5.92224 16.4331 6.6597 16.5077 6.74144C16.5125 6.74663 16.5169 6.75157 16.5215 6.75687C16.9733 7.27646 17.0049 7.96838 16.5259 8.50405C16.5184 8.51244 16.5113 8.52045 16.5039 8.52893C16.4204 8.62477 15.857 9.26797 15.1797 9.94529C14.5256 10.5993 13.9026 11.179 13.7741 11.298C13.7577 11.3132 13.7413 11.3276 13.7239 11.3415C13.1441 11.8034 12.5011 11.7354 11.9846 11.2813C11.9837 11.2805 11.9835 11.2803 11.9826 11.2795C11.9558 11.256 11.1537 10.5521 10.5469 9.94529C9.94065 9.33906 9.24501 8.54543 9.22049 8.51743C9.21971 8.51654 9.21942 8.51621 9.21865 8.51531C8.75359 7.97944 8.76579 7.26059 9.20954 6.76036C9.21632 6.75271 9.22307 6.74549 9.23012 6.73809C9.32368 6.63994 10.0359 5.89379 10.5859 5.34373C11.1208 4.80886 11.8347 4.12711 11.9631 4.00468Z" fill="url(#paint12_linear_18_32062)"/> +<path d="M11.9631 4.00468C11.9766 3.99181 11.9904 3.97915 12.0047 3.96715C12.5375 3.51937 13.2152 3.52932 13.7389 3.97493C13.747 3.98184 13.7546 3.98867 13.7625 3.99588C13.8632 4.08813 14.6089 4.77298 15.1797 5.34373C15.7582 5.92224 16.4331 6.6597 16.5077 6.74144C16.5125 6.74663 16.5169 6.75157 16.5215 6.75687C16.9733 7.27646 17.0049 7.96838 16.5259 8.50405C16.5184 8.51244 16.5113 8.52045 16.5039 8.52893C16.4204 8.62477 15.857 9.26797 15.1797 9.94529C14.5256 10.5993 13.9026 11.179 13.7741 11.298C13.7577 11.3132 13.7413 11.3276 13.7239 11.3415C13.1441 11.8034 12.5011 11.7354 11.9846 11.2813C11.9837 11.2805 11.9835 11.2803 11.9826 11.2795C11.9558 11.256 11.1537 10.5521 10.5469 9.94529C9.94065 9.33906 9.24501 8.54543 9.22049 8.51743C9.21971 8.51654 9.21942 8.51621 9.21865 8.51531C8.75359 7.97944 8.76579 7.26059 9.20954 6.76036C9.21632 6.75271 9.22307 6.74549 9.23012 6.73809C9.32368 6.63994 10.0359 5.89379 10.5859 5.34373C11.1208 4.80886 11.8347 4.12711 11.9631 4.00468Z" fill="url(#paint13_linear_18_32062)"/> +<path d="M11.9631 4.00468C11.9766 3.99181 11.9904 3.97915 12.0047 3.96715C12.5375 3.51937 13.2152 3.52932 13.7389 3.97493C13.747 3.98184 13.7546 3.98867 13.7625 3.99588C13.8632 4.08813 14.6089 4.77298 15.1797 5.34373C15.7582 5.92224 16.4331 6.6597 16.5077 6.74144C16.5125 6.74663 16.5169 6.75157 16.5215 6.75687C16.9733 7.27646 17.0049 7.96838 16.5259 8.50405C16.5184 8.51244 16.5113 8.52045 16.5039 8.52893C16.4204 8.62477 15.857 9.26797 15.1797 9.94529C14.5256 10.5993 13.9026 11.179 13.7741 11.298C13.7577 11.3132 13.7413 11.3276 13.7239 11.3415C13.1441 11.8034 12.5011 11.7354 11.9846 11.2813C11.9837 11.2805 11.9835 11.2803 11.9826 11.2795C11.9558 11.256 11.1537 10.5521 10.5469 9.94529C9.94065 9.33906 9.24501 8.54543 9.22049 8.51743C9.21971 8.51654 9.21942 8.51621 9.21865 8.51531C8.75359 7.97944 8.76579 7.26059 9.20954 6.76036C9.21632 6.75271 9.22307 6.74549 9.23012 6.73809C9.32368 6.63994 10.0359 5.89379 10.5859 5.34373C11.1208 4.80886 11.8347 4.12711 11.9631 4.00468Z" fill="url(#paint14_linear_18_32062)"/> +<g filter="url(#filter2_f_18_32062)"> +<path d="M9.58023 8.02622C9.42436 7.84587 9.41986 7.5814 9.5728 7.39856C9.87588 7.03625 10.4173 6.41088 11.0507 5.7774C11.6836 5.1445 12.3052 4.60674 12.6654 4.30578C12.8477 4.15346 13.1111 4.15764 13.2911 4.31264C13.699 4.66392 14.4166 5.29158 14.8652 5.74017C15.3102 6.18519 15.9315 6.89491 16.2843 7.30448C16.4432 7.48892 16.4434 7.76006 16.2846 7.94456C15.9316 8.35465 15.3048 9.0702 14.8203 9.55468C14.3362 10.0388 13.6215 10.6649 13.2112 11.018C13.0263 11.1772 12.7541 11.1764 12.5695 11.0168C12.1509 10.6549 11.4224 10.0161 11.0058 9.59953C10.586 9.17972 9.94063 8.44325 9.58023 8.02622Z" fill="url(#paint15_linear_18_32062)"/> +<path d="M9.58023 8.02622C9.42436 7.84587 9.41986 7.5814 9.5728 7.39856C9.87588 7.03625 10.4173 6.41088 11.0507 5.7774C11.6836 5.1445 12.3052 4.60674 12.6654 4.30578C12.8477 4.15346 13.1111 4.15764 13.2911 4.31264C13.699 4.66392 14.4166 5.29158 14.8652 5.74017C15.3102 6.18519 15.9315 6.89491 16.2843 7.30448C16.4432 7.48892 16.4434 7.76006 16.2846 7.94456C15.9316 8.35465 15.3048 9.0702 14.8203 9.55468C14.3362 10.0388 13.6215 10.6649 13.2112 11.018C13.0263 11.1772 12.7541 11.1764 12.5695 11.0168C12.1509 10.6549 11.4224 10.0161 11.0058 9.59953C10.586 9.17972 9.94063 8.44325 9.58023 8.02622Z" fill="url(#paint16_linear_18_32062)"/> +<path d="M9.58023 8.02622C9.42436 7.84587 9.41986 7.5814 9.5728 7.39856C9.87588 7.03625 10.4173 6.41088 11.0507 5.7774C11.6836 5.1445 12.3052 4.60674 12.6654 4.30578C12.8477 4.15346 13.1111 4.15764 13.2911 4.31264C13.699 4.66392 14.4166 5.29158 14.8652 5.74017C15.3102 6.18519 15.9315 6.89491 16.2843 7.30448C16.4432 7.48892 16.4434 7.76006 16.2846 7.94456C15.9316 8.35465 15.3048 9.0702 14.8203 9.55468C14.3362 10.0388 13.6215 10.6649 13.2112 11.018C13.0263 11.1772 12.7541 11.1764 12.5695 11.0168C12.1509 10.6549 11.4224 10.0161 11.0058 9.59953C10.586 9.17972 9.94063 8.44325 9.58023 8.02622Z" fill="url(#paint17_linear_18_32062)"/> +</g> +<g filter="url(#filter3_f_18_32062)"> +<path d="M17.0902 9.92832C17.1037 9.91546 17.1175 9.90279 17.1318 9.8908C17.6646 9.44301 18.3423 9.45297 18.866 9.89858C18.8741 9.90549 18.8818 9.91232 18.8896 9.91952C18.9903 10.0118 19.7361 10.6966 20.3068 11.2674C20.8853 11.8459 21.5602 12.5833 21.6349 12.6651C21.6396 12.6703 21.644 12.6752 21.6486 12.6805C22.1004 13.2001 22.132 13.892 21.6531 14.4277C21.6456 14.4361 21.6384 14.4441 21.631 14.4526C21.5476 14.5484 20.9841 15.1916 20.3068 15.8689C19.6528 16.523 19.0297 17.1027 18.9012 17.2217C18.8849 17.2368 18.8684 17.2513 18.851 17.2651C18.2712 17.727 17.6282 17.6591 17.1117 17.2049C17.1109 17.2042 17.1106 17.2039 17.1097 17.2032C17.0829 17.1796 16.2808 16.4757 15.674 15.8689C15.0678 15.2627 14.3721 14.4691 14.3476 14.4411C14.3468 14.4402 14.3465 14.4399 14.3458 14.439C13.8807 13.9031 13.8929 13.1842 14.3367 12.684C14.3434 12.6764 14.3502 12.6691 14.3572 12.6617C14.4508 12.5636 15.163 11.8174 15.7131 11.2674C16.2479 10.7325 16.9618 10.0508 17.0902 9.92832Z" fill="#824534"/> +<path d="M17.0902 9.92832C17.1037 9.91546 17.1175 9.90279 17.1318 9.8908C17.6646 9.44301 18.3423 9.45297 18.866 9.89858C18.8741 9.90549 18.8818 9.91232 18.8896 9.91952C18.9903 10.0118 19.7361 10.6966 20.3068 11.2674C20.8853 11.8459 21.5602 12.5833 21.6349 12.6651C21.6396 12.6703 21.644 12.6752 21.6486 12.6805C22.1004 13.2001 22.132 13.892 21.6531 14.4277C21.6456 14.4361 21.6384 14.4441 21.631 14.4526C21.5476 14.5484 20.9841 15.1916 20.3068 15.8689C19.6528 16.523 19.0297 17.1027 18.9012 17.2217C18.8849 17.2368 18.8684 17.2513 18.851 17.2651C18.2712 17.727 17.6282 17.6591 17.1117 17.2049C17.1109 17.2042 17.1106 17.2039 17.1097 17.2032C17.0829 17.1796 16.2808 16.4757 15.674 15.8689C15.0678 15.2627 14.3721 14.4691 14.3476 14.4411C14.3468 14.4402 14.3465 14.4399 14.3458 14.439C13.8807 13.9031 13.8929 13.1842 14.3367 12.684C14.3434 12.6764 14.3502 12.6691 14.3572 12.6617C14.4508 12.5636 15.163 11.8174 15.7131 11.2674C16.2479 10.7325 16.9618 10.0508 17.0902 9.92832Z" fill="url(#paint18_linear_18_32062)"/> +<path d="M17.0902 9.92832C17.1037 9.91546 17.1175 9.90279 17.1318 9.8908C17.6646 9.44301 18.3423 9.45297 18.866 9.89858C18.8741 9.90549 18.8818 9.91232 18.8896 9.91952C18.9903 10.0118 19.7361 10.6966 20.3068 11.2674C20.8853 11.8459 21.5602 12.5833 21.6349 12.6651C21.6396 12.6703 21.644 12.6752 21.6486 12.6805C22.1004 13.2001 22.132 13.892 21.6531 14.4277C21.6456 14.4361 21.6384 14.4441 21.631 14.4526C21.5476 14.5484 20.9841 15.1916 20.3068 15.8689C19.6528 16.523 19.0297 17.1027 18.9012 17.2217C18.8849 17.2368 18.8684 17.2513 18.851 17.2651C18.2712 17.727 17.6282 17.6591 17.1117 17.2049C17.1109 17.2042 17.1106 17.2039 17.1097 17.2032C17.0829 17.1796 16.2808 16.4757 15.674 15.8689C15.0678 15.2627 14.3721 14.4691 14.3476 14.4411C14.3468 14.4402 14.3465 14.4399 14.3458 14.439C13.8807 13.9031 13.8929 13.1842 14.3367 12.684C14.3434 12.6764 14.3502 12.6691 14.3572 12.6617C14.4508 12.5636 15.163 11.8174 15.7131 11.2674C16.2479 10.7325 16.9618 10.0508 17.0902 9.92832Z" fill="url(#paint19_linear_18_32062)"/> +<path d="M17.0902 9.92832C17.1037 9.91546 17.1175 9.90279 17.1318 9.8908C17.6646 9.44301 18.3423 9.45297 18.866 9.89858C18.8741 9.90549 18.8818 9.91232 18.8896 9.91952C18.9903 10.0118 19.7361 10.6966 20.3068 11.2674C20.8853 11.8459 21.5602 12.5833 21.6349 12.6651C21.6396 12.6703 21.644 12.6752 21.6486 12.6805C22.1004 13.2001 22.132 13.892 21.6531 14.4277C21.6456 14.4361 21.6384 14.4441 21.631 14.4526C21.5476 14.5484 20.9841 15.1916 20.3068 15.8689C19.6528 16.523 19.0297 17.1027 18.9012 17.2217C18.8849 17.2368 18.8684 17.2513 18.851 17.2651C18.2712 17.727 17.6282 17.6591 17.1117 17.2049C17.1109 17.2042 17.1106 17.2039 17.1097 17.2032C17.0829 17.1796 16.2808 16.4757 15.674 15.8689C15.0678 15.2627 14.3721 14.4691 14.3476 14.4411C14.3468 14.4402 14.3465 14.4399 14.3458 14.439C13.8807 13.9031 13.8929 13.1842 14.3367 12.684C14.3434 12.6764 14.3502 12.6691 14.3572 12.6617C14.4508 12.5636 15.163 11.8174 15.7131 11.2674C16.2479 10.7325 16.9618 10.0508 17.0902 9.92832Z" fill="url(#paint20_linear_18_32062)"/> +<path d="M17.0902 9.92832C17.1037 9.91546 17.1175 9.90279 17.1318 9.8908C17.6646 9.44301 18.3423 9.45297 18.866 9.89858C18.8741 9.90549 18.8818 9.91232 18.8896 9.91952C18.9903 10.0118 19.7361 10.6966 20.3068 11.2674C20.8853 11.8459 21.5602 12.5833 21.6349 12.6651C21.6396 12.6703 21.644 12.6752 21.6486 12.6805C22.1004 13.2001 22.132 13.892 21.6531 14.4277C21.6456 14.4361 21.6384 14.4441 21.631 14.4526C21.5476 14.5484 20.9841 15.1916 20.3068 15.8689C19.6528 16.523 19.0297 17.1027 18.9012 17.2217C18.8849 17.2368 18.8684 17.2513 18.851 17.2651C18.2712 17.727 17.6282 17.6591 17.1117 17.2049C17.1109 17.2042 17.1106 17.2039 17.1097 17.2032C17.0829 17.1796 16.2808 16.4757 15.674 15.8689C15.0678 15.2627 14.3721 14.4691 14.3476 14.4411C14.3468 14.4402 14.3465 14.4399 14.3458 14.439C13.8807 13.9031 13.8929 13.1842 14.3367 12.684C14.3434 12.6764 14.3502 12.6691 14.3572 12.6617C14.4508 12.5636 15.163 11.8174 15.7131 11.2674C16.2479 10.7325 16.9618 10.0508 17.0902 9.92832Z" fill="#613534"/> +</g> +<path d="M17.4943 9.47343C17.5078 9.46056 17.5216 9.4479 17.5359 9.4359C18.0688 8.98812 18.7464 8.99807 19.2701 9.44368C19.2782 9.45059 19.2859 9.45742 19.2937 9.46463C19.3944 9.55688 20.1402 10.2417 20.7109 10.8125C21.2895 11.391 21.9643 12.1285 22.039 12.2102C22.0437 12.2154 22.0482 12.2203 22.0528 12.2256C22.5046 12.7452 22.5361 13.4371 22.0572 13.9728C22.0497 13.9812 22.0425 13.9892 22.0351 13.9977C21.9517 14.0935 21.3883 14.7367 20.7109 15.414C20.0569 16.0681 19.4338 16.6478 19.3053 16.7668C19.289 16.7819 19.2726 16.7964 19.2551 16.8102C18.6754 17.2721 18.0324 17.2042 17.5158 16.75C17.515 16.7493 17.5147 16.749 17.5139 16.7483C17.487 16.7247 16.6849 16.0208 16.0781 15.414C15.4719 14.8078 14.7763 14.0142 14.7517 13.9862C14.751 13.9853 14.7507 13.985 14.7499 13.9841C14.2848 13.4482 14.297 12.7293 14.7408 12.2291C14.7476 12.2215 14.7543 12.2142 14.7614 12.2068C14.8549 12.1087 15.5671 11.3625 16.1172 10.8125C16.6521 10.2776 17.3659 9.59586 17.4943 9.47343Z" fill="#824534"/> +<path d="M17.4943 9.47343C17.5078 9.46056 17.5216 9.4479 17.5359 9.4359C18.0688 8.98812 18.7464 8.99807 19.2701 9.44368C19.2782 9.45059 19.2859 9.45742 19.2937 9.46463C19.3944 9.55688 20.1402 10.2417 20.7109 10.8125C21.2895 11.391 21.9643 12.1285 22.039 12.2102C22.0437 12.2154 22.0482 12.2203 22.0528 12.2256C22.5046 12.7452 22.5361 13.4371 22.0572 13.9728C22.0497 13.9812 22.0425 13.9892 22.0351 13.9977C21.9517 14.0935 21.3883 14.7367 20.7109 15.414C20.0569 16.0681 19.4338 16.6478 19.3053 16.7668C19.289 16.7819 19.2726 16.7964 19.2551 16.8102C18.6754 17.2721 18.0324 17.2042 17.5158 16.75C17.515 16.7493 17.5147 16.749 17.5139 16.7483C17.487 16.7247 16.6849 16.0208 16.0781 15.414C15.4719 14.8078 14.7763 14.0142 14.7517 13.9862C14.751 13.9853 14.7507 13.985 14.7499 13.9841C14.2848 13.4482 14.297 12.7293 14.7408 12.2291C14.7476 12.2215 14.7543 12.2142 14.7614 12.2068C14.8549 12.1087 15.5671 11.3625 16.1172 10.8125C16.6521 10.2776 17.3659 9.59586 17.4943 9.47343Z" fill="url(#paint21_linear_18_32062)"/> +<path d="M17.4943 9.47343C17.5078 9.46056 17.5216 9.4479 17.5359 9.4359C18.0688 8.98812 18.7464 8.99807 19.2701 9.44368C19.2782 9.45059 19.2859 9.45742 19.2937 9.46463C19.3944 9.55688 20.1402 10.2417 20.7109 10.8125C21.2895 11.391 21.9643 12.1285 22.039 12.2102C22.0437 12.2154 22.0482 12.2203 22.0528 12.2256C22.5046 12.7452 22.5361 13.4371 22.0572 13.9728C22.0497 13.9812 22.0425 13.9892 22.0351 13.9977C21.9517 14.0935 21.3883 14.7367 20.7109 15.414C20.0569 16.0681 19.4338 16.6478 19.3053 16.7668C19.289 16.7819 19.2726 16.7964 19.2551 16.8102C18.6754 17.2721 18.0324 17.2042 17.5158 16.75C17.515 16.7493 17.5147 16.749 17.5139 16.7483C17.487 16.7247 16.6849 16.0208 16.0781 15.414C15.4719 14.8078 14.7763 14.0142 14.7517 13.9862C14.751 13.9853 14.7507 13.985 14.7499 13.9841C14.2848 13.4482 14.297 12.7293 14.7408 12.2291C14.7476 12.2215 14.7543 12.2142 14.7614 12.2068C14.8549 12.1087 15.5671 11.3625 16.1172 10.8125C16.6521 10.2776 17.3659 9.59586 17.4943 9.47343Z" fill="url(#paint22_linear_18_32062)"/> +<path d="M17.4943 9.47343C17.5078 9.46056 17.5216 9.4479 17.5359 9.4359C18.0688 8.98812 18.7464 8.99807 19.2701 9.44368C19.2782 9.45059 19.2859 9.45742 19.2937 9.46463C19.3944 9.55688 20.1402 10.2417 20.7109 10.8125C21.2895 11.391 21.9643 12.1285 22.039 12.2102C22.0437 12.2154 22.0482 12.2203 22.0528 12.2256C22.5046 12.7452 22.5361 13.4371 22.0572 13.9728C22.0497 13.9812 22.0425 13.9892 22.0351 13.9977C21.9517 14.0935 21.3883 14.7367 20.7109 15.414C20.0569 16.0681 19.4338 16.6478 19.3053 16.7668C19.289 16.7819 19.2726 16.7964 19.2551 16.8102C18.6754 17.2721 18.0324 17.2042 17.5158 16.75C17.515 16.7493 17.5147 16.749 17.5139 16.7483C17.487 16.7247 16.6849 16.0208 16.0781 15.414C15.4719 14.8078 14.7763 14.0142 14.7517 13.9862C14.751 13.9853 14.7507 13.985 14.7499 13.9841C14.2848 13.4482 14.297 12.7293 14.7408 12.2291C14.7476 12.2215 14.7543 12.2142 14.7614 12.2068C14.8549 12.1087 15.5671 11.3625 16.1172 10.8125C16.6521 10.2776 17.3659 9.59586 17.4943 9.47343Z" fill="url(#paint23_linear_18_32062)"/> +<path d="M17.4943 9.47343C17.5078 9.46056 17.5216 9.4479 17.5359 9.4359C18.0688 8.98812 18.7464 8.99807 19.2701 9.44368C19.2782 9.45059 19.2859 9.45742 19.2937 9.46463C19.3944 9.55688 20.1402 10.2417 20.7109 10.8125C21.2895 11.391 21.9643 12.1285 22.039 12.2102C22.0437 12.2154 22.0482 12.2203 22.0528 12.2256C22.5046 12.7452 22.5361 13.4371 22.0572 13.9728C22.0497 13.9812 22.0425 13.9892 22.0351 13.9977C21.9517 14.0935 21.3883 14.7367 20.7109 15.414C20.0569 16.0681 19.4338 16.6478 19.3053 16.7668C19.289 16.7819 19.2726 16.7964 19.2551 16.8102C18.6754 17.2721 18.0324 17.2042 17.5158 16.75C17.515 16.7493 17.5147 16.749 17.5139 16.7483C17.487 16.7247 16.6849 16.0208 16.0781 15.414C15.4719 14.8078 14.7763 14.0142 14.7517 13.9862C14.751 13.9853 14.7507 13.985 14.7499 13.9841C14.2848 13.4482 14.297 12.7293 14.7408 12.2291C14.7476 12.2215 14.7543 12.2142 14.7614 12.2068C14.8549 12.1087 15.5671 11.3625 16.1172 10.8125C16.6521 10.2776 17.3659 9.59586 17.4943 9.47343Z" fill="url(#paint24_linear_18_32062)"/> +<g filter="url(#filter4_f_18_32062)"> +<path d="M15.1088 13.497C14.9527 13.3172 14.9473 13.0531 15.0996 12.8701C15.3934 12.5172 15.912 11.9162 16.5194 11.3088C17.1262 10.702 17.7236 10.1869 18.0744 9.89513C18.2569 9.74339 18.5199 9.74847 18.6994 9.90376C19.1064 10.2559 19.8227 10.8852 20.2714 11.3339C20.7164 11.7789 21.3391 12.4872 21.6929 12.8959C21.8522 13.0799 21.8532 13.3509 21.6948 13.5358C21.3526 13.9351 20.7539 14.6211 20.2891 15.0859C19.8246 15.5504 19.1394 16.1485 18.7399 16.4908C18.5546 16.6496 18.2826 16.648 18.0984 16.4879C17.6807 16.1251 16.9537 15.4849 16.537 15.0683C16.1171 14.6484 15.4701 13.9131 15.1088 13.497Z" fill="url(#paint25_linear_18_32062)"/> +<path d="M15.1088 13.497C14.9527 13.3172 14.9473 13.0531 15.0996 12.8701C15.3934 12.5172 15.912 11.9162 16.5194 11.3088C17.1262 10.702 17.7236 10.1869 18.0744 9.89513C18.2569 9.74339 18.5199 9.74847 18.6994 9.90376C19.1064 10.2559 19.8227 10.8852 20.2714 11.3339C20.7164 11.7789 21.3391 12.4872 21.6929 12.8959C21.8522 13.0799 21.8532 13.3509 21.6948 13.5358C21.3526 13.9351 20.7539 14.6211 20.2891 15.0859C19.8246 15.5504 19.1394 16.1485 18.7399 16.4908C18.5546 16.6496 18.2826 16.648 18.0984 16.4879C17.6807 16.1251 16.9537 15.4849 16.537 15.0683C16.1171 14.6484 15.4701 13.9131 15.1088 13.497Z" fill="url(#paint26_linear_18_32062)"/> +<path d="M15.1088 13.497C14.9527 13.3172 14.9473 13.0531 15.0996 12.8701C15.3934 12.5172 15.912 11.9162 16.5194 11.3088C17.1262 10.702 17.7236 10.1869 18.0744 9.89513C18.2569 9.74339 18.5199 9.74847 18.6994 9.90376C19.1064 10.2559 19.8227 10.8852 20.2714 11.3339C20.7164 11.7789 21.3391 12.4872 21.6929 12.8959C21.8522 13.0799 21.8532 13.3509 21.6948 13.5358C21.3526 13.9351 20.7539 14.6211 20.2891 15.0859C19.8246 15.5504 19.1394 16.1485 18.7399 16.4908C18.5546 16.6496 18.2826 16.648 18.0984 16.4879C17.6807 16.1251 16.9537 15.4849 16.537 15.0683C16.1171 14.6484 15.4701 13.9131 15.1088 13.497Z" fill="url(#paint27_linear_18_32062)"/> +</g> +<g filter="url(#filter5_f_18_32062)"> +<path d="M11.9631 15.1578C11.9766 15.1449 11.9904 15.1322 12.0047 15.1202C12.5375 14.6724 13.2152 14.6824 13.7389 15.128C13.747 15.1349 13.7546 15.1418 13.7625 15.149C13.8632 15.2412 14.6089 15.9261 15.1797 16.4968C15.7582 17.0753 16.4331 17.8128 16.5077 17.8945C16.5125 17.8997 16.5169 17.9046 16.5215 17.91C16.9733 18.4295 17.0049 19.1215 16.5259 19.6571C16.5184 19.6655 16.5113 19.6735 16.5039 19.682C16.4204 19.7779 15.857 20.421 15.1797 21.0984C14.5256 21.7524 13.9026 22.3321 13.7741 22.4511C13.7577 22.4662 13.7413 22.4807 13.7239 22.4946C13.1441 22.9565 12.5011 22.8885 11.9846 22.4344C11.9837 22.4336 11.9835 22.4334 11.9826 22.4326C11.9558 22.4091 11.1537 21.7052 10.5469 21.0984C9.94065 20.4921 9.24501 19.6985 9.22049 19.6705C9.21971 19.6696 9.21942 19.6693 9.21865 19.6684C8.75359 19.1325 8.76579 18.4137 9.20954 17.9134C9.21632 17.9058 9.22307 17.8986 9.23012 17.8912C9.32368 17.793 10.0359 17.0469 10.5859 16.4968C11.1208 15.9619 11.8347 15.2802 11.9631 15.1578Z" fill="url(#paint28_linear_18_32062)"/> +</g> +<path d="M12.3225 14.6766C12.336 14.6637 12.3498 14.651 12.364 14.639C12.8969 14.1912 13.5746 14.2012 14.0982 14.6468C14.1064 14.6537 14.114 14.6605 14.1219 14.6678C14.2226 14.76 14.9683 15.4449 15.5391 16.0156C16.1176 16.5941 16.7925 17.3316 16.8671 17.4133C16.8719 17.4185 16.8763 17.4234 16.8809 17.4287C17.3327 17.9483 17.3642 18.6403 16.8853 19.1759C16.8778 19.1843 16.8707 19.1923 16.8633 19.2008C16.7798 19.2966 16.2164 19.9398 15.5391 20.6172C14.885 21.2712 14.2619 21.8509 14.1335 21.9699C14.1171 21.985 14.1007 21.9995 14.0833 22.0134C13.5035 22.4753 12.8605 22.4073 12.344 21.9531C12.3431 21.9524 12.3428 21.9522 12.342 21.9514C12.3151 21.9279 11.5131 21.224 10.9063 20.6172C10.3 20.0109 9.60438 19.2173 9.57986 19.1893C9.57908 19.1884 9.5788 19.1881 9.57802 19.1872C9.11297 18.6513 9.12517 17.9325 9.56892 17.4322C9.5757 17.4246 9.58244 17.4174 9.58949 17.41C9.68306 17.3118 10.3953 16.5657 10.9453 16.0156C11.4802 15.4807 12.194 14.799 12.3225 14.6766Z" fill="#824534"/> +<path d="M12.3225 14.6766C12.336 14.6637 12.3498 14.651 12.364 14.639C12.8969 14.1912 13.5746 14.2012 14.0982 14.6468C14.1064 14.6537 14.114 14.6605 14.1219 14.6678C14.2226 14.76 14.9683 15.4449 15.5391 16.0156C16.1176 16.5941 16.7925 17.3316 16.8671 17.4133C16.8719 17.4185 16.8763 17.4234 16.8809 17.4287C17.3327 17.9483 17.3642 18.6403 16.8853 19.1759C16.8778 19.1843 16.8707 19.1923 16.8633 19.2008C16.7798 19.2966 16.2164 19.9398 15.5391 20.6172C14.885 21.2712 14.2619 21.8509 14.1335 21.9699C14.1171 21.985 14.1007 21.9995 14.0833 22.0134C13.5035 22.4753 12.8605 22.4073 12.344 21.9531C12.3431 21.9524 12.3428 21.9522 12.342 21.9514C12.3151 21.9279 11.5131 21.224 10.9063 20.6172C10.3 20.0109 9.60438 19.2173 9.57986 19.1893C9.57908 19.1884 9.5788 19.1881 9.57802 19.1872C9.11297 18.6513 9.12517 17.9325 9.56892 17.4322C9.5757 17.4246 9.58244 17.4174 9.58949 17.41C9.68306 17.3118 10.3953 16.5657 10.9453 16.0156C11.4802 15.4807 12.194 14.799 12.3225 14.6766Z" fill="url(#paint29_linear_18_32062)"/> +<path d="M12.3225 14.6766C12.336 14.6637 12.3498 14.651 12.364 14.639C12.8969 14.1912 13.5746 14.2012 14.0982 14.6468C14.1064 14.6537 14.114 14.6605 14.1219 14.6678C14.2226 14.76 14.9683 15.4449 15.5391 16.0156C16.1176 16.5941 16.7925 17.3316 16.8671 17.4133C16.8719 17.4185 16.8763 17.4234 16.8809 17.4287C17.3327 17.9483 17.3642 18.6403 16.8853 19.1759C16.8778 19.1843 16.8707 19.1923 16.8633 19.2008C16.7798 19.2966 16.2164 19.9398 15.5391 20.6172C14.885 21.2712 14.2619 21.8509 14.1335 21.9699C14.1171 21.985 14.1007 21.9995 14.0833 22.0134C13.5035 22.4753 12.8605 22.4073 12.344 21.9531C12.3431 21.9524 12.3428 21.9522 12.342 21.9514C12.3151 21.9279 11.5131 21.224 10.9063 20.6172C10.3 20.0109 9.60438 19.2173 9.57986 19.1893C9.57908 19.1884 9.5788 19.1881 9.57802 19.1872C9.11297 18.6513 9.12517 17.9325 9.56892 17.4322C9.5757 17.4246 9.58244 17.4174 9.58949 17.41C9.68306 17.3118 10.3953 16.5657 10.9453 16.0156C11.4802 15.4807 12.194 14.799 12.3225 14.6766Z" fill="url(#paint30_linear_18_32062)"/> +<path d="M12.3225 14.6766C12.336 14.6637 12.3498 14.651 12.364 14.639C12.8969 14.1912 13.5746 14.2012 14.0982 14.6468C14.1064 14.6537 14.114 14.6605 14.1219 14.6678C14.2226 14.76 14.9683 15.4449 15.5391 16.0156C16.1176 16.5941 16.7925 17.3316 16.8671 17.4133C16.8719 17.4185 16.8763 17.4234 16.8809 17.4287C17.3327 17.9483 17.3642 18.6403 16.8853 19.1759C16.8778 19.1843 16.8707 19.1923 16.8633 19.2008C16.7798 19.2966 16.2164 19.9398 15.5391 20.6172C14.885 21.2712 14.2619 21.8509 14.1335 21.9699C14.1171 21.985 14.1007 21.9995 14.0833 22.0134C13.5035 22.4753 12.8605 22.4073 12.344 21.9531C12.3431 21.9524 12.3428 21.9522 12.342 21.9514C12.3151 21.9279 11.5131 21.224 10.9063 20.6172C10.3 20.0109 9.60438 19.2173 9.57986 19.1893C9.57908 19.1884 9.5788 19.1881 9.57802 19.1872C9.11297 18.6513 9.12517 17.9325 9.56892 17.4322C9.5757 17.4246 9.58244 17.4174 9.58949 17.41C9.68306 17.3118 10.3953 16.5657 10.9453 16.0156C11.4802 15.4807 12.194 14.799 12.3225 14.6766Z" fill="url(#paint31_linear_18_32062)"/> +<path d="M12.3225 14.6766C12.336 14.6637 12.3498 14.651 12.364 14.639C12.8969 14.1912 13.5746 14.2012 14.0982 14.6468C14.1064 14.6537 14.114 14.6605 14.1219 14.6678C14.2226 14.76 14.9683 15.4449 15.5391 16.0156C16.1176 16.5941 16.7925 17.3316 16.8671 17.4133C16.8719 17.4185 16.8763 17.4234 16.8809 17.4287C17.3327 17.9483 17.3642 18.6403 16.8853 19.1759C16.8778 19.1843 16.8707 19.1923 16.8633 19.2008C16.7798 19.2966 16.2164 19.9398 15.5391 20.6172C14.885 21.2712 14.2619 21.8509 14.1335 21.9699C14.1171 21.985 14.1007 21.9995 14.0833 22.0134C13.5035 22.4753 12.8605 22.4073 12.344 21.9531C12.3431 21.9524 12.3428 21.9522 12.342 21.9514C12.3151 21.9279 11.5131 21.224 10.9063 20.6172C10.3 20.0109 9.60438 19.2173 9.57986 19.1893C9.57908 19.1884 9.5788 19.1881 9.57802 19.1872C9.11297 18.6513 9.12517 17.9325 9.56892 17.4322C9.5757 17.4246 9.58244 17.4174 9.58949 17.41C9.68306 17.3118 10.3953 16.5657 10.9453 16.0156C11.4802 15.4807 12.194 14.799 12.3225 14.6766Z" fill="url(#paint32_linear_18_32062)"/> +<g filter="url(#filter6_f_18_32062)"> +<path d="M9.93691 18.7001C9.78078 18.5203 9.77539 18.2563 9.92775 18.0732C10.2215 17.7203 10.7401 17.1193 11.3475 16.5119C11.9543 15.9051 12.5517 15.39 12.9026 15.0983C13.0851 14.9465 13.348 14.9516 13.5275 15.1069C13.9345 15.459 14.6508 16.0883 15.0995 16.537C15.5446 16.9821 16.1672 17.6903 16.521 18.099C16.6803 18.283 16.6813 18.5541 16.5229 18.7389C16.1808 19.1382 15.582 19.8242 15.1172 20.2891C14.6528 20.7535 13.9675 21.3516 13.5681 21.6939C13.3828 21.8527 13.1107 21.8511 12.9265 21.6911C12.5088 21.3282 11.7818 20.688 11.3652 20.2714C10.9452 19.8515 10.2982 19.1162 9.93691 18.7001Z" fill="url(#paint33_linear_18_32062)"/> +<path d="M9.93691 18.7001C9.78078 18.5203 9.77539 18.2563 9.92775 18.0732C10.2215 17.7203 10.7401 17.1193 11.3475 16.5119C11.9543 15.9051 12.5517 15.39 12.9026 15.0983C13.0851 14.9465 13.348 14.9516 13.5275 15.1069C13.9345 15.459 14.6508 16.0883 15.0995 16.537C15.5446 16.9821 16.1672 17.6903 16.521 18.099C16.6803 18.283 16.6813 18.5541 16.5229 18.7389C16.1808 19.1382 15.582 19.8242 15.1172 20.2891C14.6528 20.7535 13.9675 21.3516 13.5681 21.6939C13.3828 21.8527 13.1107 21.8511 12.9265 21.6911C12.5088 21.3282 11.7818 20.688 11.3652 20.2714C10.9452 19.8515 10.2982 19.1162 9.93691 18.7001Z" fill="url(#paint34_linear_18_32062)"/> +<path d="M9.93691 18.7001C9.78078 18.5203 9.77539 18.2563 9.92775 18.0732C10.2215 17.7203 10.7401 17.1193 11.3475 16.5119C11.9543 15.9051 12.5517 15.39 12.9026 15.0983C13.0851 14.9465 13.348 14.9516 13.5275 15.1069C13.9345 15.459 14.6508 16.0883 15.0995 16.537C15.5446 16.9821 16.1672 17.6903 16.521 18.099C16.6803 18.283 16.6813 18.5541 16.5229 18.7389C16.1808 19.1382 15.582 19.8242 15.1172 20.2891C14.6528 20.7535 13.9675 21.3516 13.5681 21.6939C13.3828 21.8527 13.1107 21.8511 12.9265 21.6911C12.5088 21.3282 11.7818 20.688 11.3652 20.2714C10.9452 19.8515 10.2982 19.1162 9.93691 18.7001Z" fill="url(#paint35_linear_18_32062)"/> +</g> +<path d="M10.2578 21.7831C10.2578 21.7831 16.5546 28.3456 17.664 29.33C18.7734 30.3144 19.9921 30.1269 20.9453 29.33C21.8984 28.5331 28.3203 22.0956 29.3359 21.0331C30.3515 19.9706 30.0703 18.5488 29.1796 17.6581C28.289 16.7675 21.7109 10.2519 21.7109 10.2519L10.2578 21.7831Z" fill="url(#paint36_linear_18_32062)"/> +<path d="M10.2578 21.7831C10.2578 21.7831 16.5546 28.3456 17.664 29.33C18.7734 30.3144 19.9921 30.1269 20.9453 29.33C21.8984 28.5331 28.3203 22.0956 29.3359 21.0331C30.3515 19.9706 30.0703 18.5488 29.1796 17.6581C28.289 16.7675 21.7109 10.2519 21.7109 10.2519L10.2578 21.7831Z" fill="url(#paint37_linear_18_32062)"/> +<g filter="url(#filter7_f_18_32062)"> +<path d="M12.1329 21.5234C12.1329 21.5234 16.8586 26.498 17.8978 27.4201C18.937 28.3421 19.376 28.869 20.2688 28.1226C21.1616 27.3762 27.1771 21.3461 28.1284 20.3508C29.0798 19.3556 28.6577 18.7408 27.8235 17.9066C26.9892 17.0723 22 12.1416 22 12.1416L12.1329 21.5234Z" fill="#D3245A"/> +<path d="M12.1329 21.5234C12.1329 21.5234 16.8586 26.498 17.8978 27.4201C18.937 28.3421 19.376 28.869 20.2688 28.1226C21.1616 27.3762 27.1771 21.3461 28.1284 20.3508C29.0798 19.3556 28.6577 18.7408 27.8235 17.9066C26.9892 17.0723 22 12.1416 22 12.1416L12.1329 21.5234Z" fill="url(#paint38_linear_18_32062)"/> +<path d="M12.1329 21.5234C12.1329 21.5234 16.8586 26.498 17.8978 27.4201C18.937 28.3421 19.376 28.869 20.2688 28.1226C21.1616 27.3762 27.1771 21.3461 28.1284 20.3508C29.0798 19.3556 28.6577 18.7408 27.8235 17.9066C26.9892 17.0723 22 12.1416 22 12.1416L12.1329 21.5234Z" fill="url(#paint39_linear_18_32062)"/> +</g> +<g filter="url(#filter8_f_18_32062)"> +<path d="M22.4907 12.0862C22.4907 12.0862 14.132 23.4293 13.8188 23.7425C13.5057 24.0557 13.2494 24.1126 12.8223 23.8422C12.3952 23.5717 11.0855 22.0342 10.872 21.7922C10.6584 21.5501 10.6653 21.2495 10.9466 20.987C11.2279 20.7244 21.1525 10.8406 21.1525 10.8406C21.3127 10.6804 21.6015 10.7222 21.7291 10.8406C21.7291 10.8406 22.3128 11.3388 22.4907 11.5168C22.6687 11.6948 22.5818 11.9587 22.4907 12.0862Z" fill="#572916"/> +</g> +<path d="M23.2266 11.5469C23.2266 11.5469 13.7188 24.4531 13.375 24.7969C13.0312 25.1406 12.75 25.2031 12.2812 24.9063C11.8125 24.6094 10.375 22.9219 10.1406 22.6563C9.90625 22.3906 9.91374 22.0606 10.2225 21.7725C10.5312 21.4844 21.7578 10.1797 21.7578 10.1797C21.9336 10.0039 22.2506 10.0497 22.3906 10.1797C22.3906 10.1797 23.0312 10.7266 23.2266 10.9219C23.4219 11.1172 23.3266 11.4069 23.2266 11.5469Z" fill="url(#paint40_linear_18_32062)"/> +<g filter="url(#filter9_f_18_32062)"> +<path d="M22.875 11.2812C22.875 10.8281 22.375 10.3438 21.9219 10.5C21.4688 10.6562 16.5 16.2812 16.5 16.2812L18.0781 17.5468C19.6615 15.651 22.875 11.7422 22.875 11.2812Z" fill="url(#paint41_linear_18_32062)"/> +</g> +<defs> +<filter id="filter0_f_18_32062" x="2.37329" y="8.35474" width="9.99959" height="10.0206" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter1_f_18_32062" x="4.0197" y="9.22174" width="7.32452" height="7.32471" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter2_f_18_32062" x="9.21066" y="3.94391" width="7.44289" height="7.44305" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter3_f_18_32062" x="13.0004" y="8.55963" width="9.99959" height="10.0206" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter4_f_18_32062" x="14.7384" y="9.53424" width="7.32452" height="7.32471" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter5_f_18_32062" x="7.87329" y="13.7891" width="9.99959" height="10.0206" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter6_f_18_32062" x="9.56657" y="14.7374" width="7.32452" height="7.32471" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter7_f_18_32062" x="11.1329" y="11.1417" width="18.5395" height="18.3354" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter8_f_18_32062" x="9.72244" y="9.73553" width="13.8717" height="15.2796" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_32062"/> +</filter> +<filter id="filter9_f_18_32062" x="16" y="9.97003" width="7.375" height="8.07678" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_32062"/> +</filter> +<radialGradient id="paint0_radial_18_32062" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(6.375 5.875) rotate(135) scale(12.3302 6.13734)"> +<stop stop-color="#735040"/> +<stop offset="1" stop-color="#724A3A" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint1_radial_18_32062" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(4.03125 18.9062) rotate(45) scale(11.5596 8.97142)"> +<stop stop-color="#834D4F"/> +<stop offset="1" stop-color="#834B4D" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint2_radial_18_32062" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(17.5 6.6875) rotate(45) scale(10.1647 3.13779)"> +<stop stop-color="#AC7A64"/> +<stop offset="1" stop-color="#AC7A63" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint3_linear_18_32062" x1="6.59375" y1="14.8125" x2="5.3125" y2="16.0937" gradientUnits="userSpaceOnUse"> +<stop stop-color="#835355" stop-opacity="0"/> +<stop offset="0.542683" stop-color="#825254"/> +</linearGradient> +<linearGradient id="paint4_linear_18_32062" x1="6.90625" y1="14.25" x2="5.625" y2="15.5312" gradientUnits="userSpaceOnUse"> +<stop stop-color="#835355" stop-opacity="0"/> +<stop offset="0.542683" stop-color="#825254"/> +</linearGradient> +<linearGradient id="paint5_linear_18_32062" x1="9.55469" y1="11.6016" x2="10.375" y2="10.7813" gradientUnits="userSpaceOnUse"> +<stop stop-color="#91634B" stop-opacity="0"/> +<stop offset="0.257143" stop-color="#8E5E45"/> +<stop offset="0.971429" stop-color="#79452B"/> +</linearGradient> +<linearGradient id="paint6_linear_18_32062" x1="5.3125" y1="10.5625" x2="6.25781" y2="11.5078" gradientUnits="userSpaceOnUse"> +<stop stop-color="#754A38"/> +<stop offset="0.198347" stop-color="#764B38"/> +<stop offset="1" stop-color="#8A5648" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint7_linear_18_32062" x1="10.4375" y1="15.0313" x2="9.54687" y2="14.1406" gradientUnits="userSpaceOnUse"> +<stop offset="0.192983" stop-color="#7F4131"/> +<stop offset="0.508772" stop-color="#884B3F"/> +<stop offset="1" stop-color="#905452" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint8_linear_18_32062" x1="4.71562" y1="13.599" x2="10.6952" y2="13.5756" gradientUnits="userSpaceOnUse"> +<stop stop-color="#865345"/> +<stop offset="1" stop-color="#945C4E"/> +</linearGradient> +<linearGradient id="paint9_linear_18_32062" x1="5.9333" y1="14.7546" x2="9.4925" y2="11.2617" gradientUnits="userSpaceOnUse"> +<stop offset="0.0276698" stop-color="#7F4A40"/> +<stop offset="0.183829" stop-color="#844A45" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint10_linear_18_32062" x1="9.61" y1="11.1453" x2="6.4587" y2="14.2966" gradientUnits="userSpaceOnUse"> +<stop offset="0.0194806" stop-color="#9B705C"/> +<stop offset="0.204546" stop-color="#9B705C" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint11_linear_18_32062" x1="12.0937" y1="9.09375" x2="10.8125" y2="10.375" gradientUnits="userSpaceOnUse"> +<stop offset="0.402439" stop-color="#7A3C35" stop-opacity="0"/> +<stop offset="0.865854" stop-color="#783930"/> +<stop offset="1" stop-color="#713126"/> +</linearGradient> +<linearGradient id="paint12_linear_18_32062" x1="14.6562" y1="6.46875" x2="15.5625" y2="5.625" gradientUnits="userSpaceOnUse"> +<stop stop-color="#A87760" stop-opacity="0"/> +<stop offset="0.342675" stop-color="#A8775F"/> +<stop offset="1" stop-color="#A3735A"/> +</linearGradient> +<linearGradient id="paint13_linear_18_32062" x1="10.5" y1="5.40625" x2="11.4453" y2="6.35156" gradientUnits="userSpaceOnUse"> +<stop stop-color="#754A38"/> +<stop offset="0.198347" stop-color="#764B38"/> +<stop offset="1" stop-color="#8A5648" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint14_linear_18_32062" x1="15.625" y1="9.875" x2="14.7344" y2="8.98438" gradientUnits="userSpaceOnUse"> +<stop offset="0.192983" stop-color="#7F4131"/> +<stop offset="0.508772" stop-color="#884B3F"/> +<stop offset="1" stop-color="#905452" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint15_linear_18_32062" x1="9.90402" y1="8.44186" x2="15.9816" y2="8.5181" gradientUnits="userSpaceOnUse"> +<stop stop-color="#8B5A4A"/> +<stop offset="1" stop-color="#9B6351"/> +</linearGradient> +<linearGradient id="paint16_linear_18_32062" x1="11.1227" y1="9.59642" x2="13.8559" y2="6.86243" gradientUnits="userSpaceOnUse"> +<stop offset="0.0276698" stop-color="#804643"/> +<stop offset="0.183829" stop-color="#874B4F" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint17_linear_18_32062" x1="14.9214" y1="5.86515" x2="12.6745" y2="8.00623" gradientUnits="userSpaceOnUse"> +<stop offset="0.0194806" stop-color="#9B705C"/> +<stop offset="0.204546" stop-color="#9B705C" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint18_linear_18_32062" x1="17.2209" y1="15.0174" x2="15.9396" y2="16.2986" gradientUnits="userSpaceOnUse"> +<stop offset="0.109756" stop-color="#6D3F3D" stop-opacity="0"/> +<stop offset="0.670732" stop-color="#643026"/> +<stop offset="1" stop-color="#5D2A1F"/> +</linearGradient> +<linearGradient id="paint19_linear_18_32062" x1="19.8693" y1="12.369" x2="20.6896" y2="11.5486" gradientUnits="userSpaceOnUse"> +<stop stop-color="#91634B" stop-opacity="0"/> +<stop offset="0.257143" stop-color="#8E5E45"/> +<stop offset="0.971429" stop-color="#79452B"/> +</linearGradient> +<linearGradient id="paint20_linear_18_32062" x1="15.6271" y1="11.3299" x2="16.5724" y2="12.2752" gradientUnits="userSpaceOnUse"> +<stop stop-color="#733821"/> +<stop offset="0.198347" stop-color="#773D25"/> +<stop offset="1" stop-color="#7F4B35" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint21_linear_18_32062" x1="17.625" y1="14.5625" x2="16.3437" y2="15.8437" gradientUnits="userSpaceOnUse"> +<stop offset="0.109756" stop-color="#6D3F3D" stop-opacity="0"/> +<stop offset="0.670732" stop-color="#643026"/> +<stop offset="1" stop-color="#5D2A1F"/> +</linearGradient> +<linearGradient id="paint22_linear_18_32062" x1="20.2734" y1="11.9141" x2="21.0938" y2="11.0938" gradientUnits="userSpaceOnUse"> +<stop stop-color="#91634B" stop-opacity="0"/> +<stop offset="0.257143" stop-color="#8E5E45"/> +<stop offset="0.971429" stop-color="#79452B"/> +</linearGradient> +<linearGradient id="paint23_linear_18_32062" x1="16.0312" y1="10.875" x2="16.9766" y2="11.8203" gradientUnits="userSpaceOnUse"> +<stop stop-color="#733821"/> +<stop offset="0.198347" stop-color="#773D25"/> +<stop offset="1" stop-color="#7F4B35" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint24_linear_18_32062" x1="21.1562" y1="15.3438" x2="20.2656" y2="14.4531" gradientUnits="userSpaceOnUse"> +<stop offset="0.192983" stop-color="#7F4131"/> +<stop offset="0.508772" stop-color="#884B3F"/> +<stop offset="1" stop-color="#905452" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint25_linear_18_32062" x1="15.4344" y1="13.9115" x2="21.414" y2="13.8881" gradientUnits="userSpaceOnUse"> +<stop stop-color="#865345"/> +<stop offset="1" stop-color="#945C4E"/> +</linearGradient> +<linearGradient id="paint26_linear_18_32062" x1="16.652" y1="15.0671" x2="20.2113" y2="11.5742" gradientUnits="userSpaceOnUse"> +<stop offset="0.0276698" stop-color="#7F4A40"/> +<stop offset="0.183829" stop-color="#844A45" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint27_linear_18_32062" x1="20.3288" y1="11.4578" x2="17.1775" y2="14.6091" gradientUnits="userSpaceOnUse"> +<stop offset="0.0194806" stop-color="#9B705C"/> +<stop offset="0.204546" stop-color="#9B705C" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint28_linear_18_32062" x1="11.375" y1="21.375" x2="9.21875" y2="19.2188" gradientUnits="userSpaceOnUse"> +<stop stop-color="#64342F"/> +<stop offset="1" stop-color="#773C41"/> +</linearGradient> +<linearGradient id="paint29_linear_18_32062" x1="12.4531" y1="19.7656" x2="11.1719" y2="21.0469" gradientUnits="userSpaceOnUse"> +<stop stop-color="#835355" stop-opacity="0"/> +<stop offset="0.542683" stop-color="#825254"/> +</linearGradient> +<linearGradient id="paint30_linear_18_32062" x1="15.1016" y1="17.1172" x2="15.9219" y2="16.2969" gradientUnits="userSpaceOnUse"> +<stop stop-color="#91634B" stop-opacity="0"/> +<stop offset="0.257143" stop-color="#8E5E45"/> +<stop offset="0.971429" stop-color="#79452B"/> +</linearGradient> +<linearGradient id="paint31_linear_18_32062" x1="10.8594" y1="16.0781" x2="11.8047" y2="17.0234" gradientUnits="userSpaceOnUse"> +<stop stop-color="#733821"/> +<stop offset="0.198347" stop-color="#783F28"/> +<stop offset="1" stop-color="#7E4934" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint32_linear_18_32062" x1="15.9844" y1="20.5469" x2="15.0937" y2="19.6563" gradientUnits="userSpaceOnUse"> +<stop offset="0.192983" stop-color="#7F4131"/> +<stop offset="0.508772" stop-color="#884B3F"/> +<stop offset="1" stop-color="#905452" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint33_linear_18_32062" x1="10.2625" y1="19.1146" x2="16.2421" y2="19.0912" gradientUnits="userSpaceOnUse"> +<stop stop-color="#865345"/> +<stop offset="1" stop-color="#945C4E"/> +</linearGradient> +<linearGradient id="paint34_linear_18_32062" x1="11.4802" y1="20.2702" x2="15.0394" y2="16.7774" gradientUnits="userSpaceOnUse"> +<stop offset="0.0276698" stop-color="#7F4A40"/> +<stop offset="0.183829" stop-color="#844A45" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint35_linear_18_32062" x1="15.1569" y1="16.6609" x2="12.0056" y2="19.8122" gradientUnits="userSpaceOnUse"> +<stop offset="0.0194806" stop-color="#9B705C"/> +<stop offset="0.204546" stop-color="#9B705C" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint36_linear_18_32062" x1="26.9375" y1="16.3125" x2="15.75" y2="27.5" gradientUnits="userSpaceOnUse"> +<stop stop-color="#ED4253"/> +<stop offset="1" stop-color="#C41959"/> +</linearGradient> +<linearGradient id="paint37_linear_18_32062" x1="25.9375" y1="25.125" x2="22.6875" y2="21.875" gradientUnits="userSpaceOnUse"> +<stop stop-color="#D61E58"/> +<stop offset="0.932692" stop-color="#D71D59" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint38_linear_18_32062" x1="25.75" y1="15.125" x2="22.8437" y2="18.0312" gradientUnits="userSpaceOnUse"> +<stop offset="0.0860215" stop-color="#EA4B6C"/> +<stop offset="0.693548" stop-color="#EC4B6C" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint39_linear_18_32062" x1="17.4375" y1="18.5" x2="18.8438" y2="19.5313" gradientUnits="userSpaceOnUse"> +<stop offset="0.384393" stop-color="#B3154F"/> +<stop offset="0.766859" stop-color="#B71550" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint40_linear_18_32062" x1="23.3401" y1="11.4724" x2="11.25" y2="23.625" gradientUnits="userSpaceOnUse"> +<stop stop-color="#C1C1C2"/> +<stop offset="0.0875295" stop-color="#ADABB2"/> +<stop offset="0.198407" stop-color="#B1A4C2"/> +<stop offset="0.757899" stop-color="#B3A5C6"/> +<stop offset="0.879116" stop-color="#A892C1"/> +<stop offset="1" stop-color="#A485C3"/> +</linearGradient> +<linearGradient id="paint41_linear_18_32062" x1="22.25" y1="10.7831" x2="16.5" y2="16.5331" gradientUnits="userSpaceOnUse"> +<stop stop-color="#D4D1DB"/> +<stop offset="1" stop-color="#B3A6C5" stop-opacity="0"/> +</linearGradient> +</defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/cookie_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/cookie_color.svg new file mode 100644 index 0000000000..42b628cca1 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/cookie_color.svg @@ -0,0 +1,116 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M2 16C2 25.29 8.27 30 16 30C23.73 30 30 25.26 30 16C30 6.57 23.73 2 16 2C8.27 2 2 6.43 2 16Z" fill="#DDB78F"/> +<path d="M2 16C2 25.29 8.27 30 16 30C23.73 30 30 25.26 30 16C30 6.57 23.73 2 16 2C8.27 2 2 6.43 2 16Z" fill="url(#paint0_radial_18_31720)"/> +<path d="M2 16C2 25.29 8.27 30 16 30C23.73 30 30 25.26 30 16C30 6.57 23.73 2 16 2C8.27 2 2 6.43 2 16Z" fill="url(#paint1_radial_18_31720)"/> +<path d="M2 16C2 25.29 8.27 30 16 30C23.73 30 30 25.26 30 16C30 6.57 23.73 2 16 2C8.27 2 2 6.43 2 16Z" fill="url(#paint2_radial_18_31720)"/> +<path d="M26.92 14.61L26.96 13.99C27 13.42 26.52 12.94 25.95 12.98L25.34 13.02C25.1 13.03 24.85 13.11 24.63 13.24C24.01 13.63 23.76 14.42 24.04 15.09C24.38 15.89 25.32 16.23 26.09 15.85C26.59 15.62 26.88 15.13 26.92 14.61Z" fill="#6F434A"/> +<g filter="url(#filter0_f_18_31720)"> +<path d="M26.7344 13.875C26.7688 13.3847 26.4531 13.25 26.0156 13.25C25.5781 13.25 25.1653 13.4633 24.8125 13.6718C24.2792 14.0073 23.9955 14.43 24.2364 15.0063C24.5288 15.6944 25.0877 15.7019 25.75 15.375C26.3626 15.0932 26.5801 14.4399 26.7344 13.875Z" fill="url(#paint3_radial_18_31720)"/> +</g> +<path d="M19.89 8.32001L20.51 8.36001C21.08 8.40001 21.56 7.92001 21.52 7.35001L21.48 6.74001C21.47 6.50001 21.39 6.25001 21.26 6.03001C20.87 5.41001 20.08 5.16001 19.41 5.44001C18.61 5.78001 18.27 6.72001 18.65 7.49001C18.88 7.99001 19.37 8.28001 19.89 8.32001Z" fill="#6F434A"/> +<g filter="url(#filter1_f_18_31720)"> +<path d="M20.0001 7.68832L20.4808 7.71707C20.9227 7.74582 21.2948 7.40083 21.2638 6.99115L21.2328 6.55273C21.2251 6.38023 21.163 6.20055 21.0622 6.04243C20.7599 5.59681 20.1474 5.41713 19.6279 5.61837C19.0077 5.86274 18.7441 6.53835 19.0387 7.09178C19.217 7.45114 19.5969 7.65957 20.0001 7.68832Z" fill="url(#paint4_radial_18_31720)"/> +</g> +<path d="M10.67 23.75L10.62 24.52C10.57 25.23 11.16 25.82 11.87 25.77L12.63 25.72C12.93 25.7 13.23 25.61 13.51 25.44C14.28 24.96 14.59 23.98 14.24 23.14C13.82 22.14 12.65 21.72 11.7 22.2C11.08 22.51 10.71 23.11 10.67 23.75Z" fill="#6F434A"/> +<g filter="url(#filter2_f_18_31720)"> +<path d="M10.9819 23.765L10.9402 24.4071C10.8985 24.9991 11.3905 25.4911 11.9825 25.4494L12.6162 25.4077C12.8664 25.3911 13.1165 25.316 13.35 25.1743C13.9921 24.774 14.2506 23.9568 13.9587 23.2564C13.6085 22.4225 12.6329 22.0723 11.8407 22.4726C11.3238 22.7311 11.0152 23.2314 10.9819 23.765Z" fill="url(#paint5_radial_18_31720)"/> +</g> +<path d="M20.4 15.19L20.43 14.73C20.53 13.22 19.28 11.97 17.76 12.06L17.31 12.09C16.86 12.11 16.41 12.24 15.99 12.49C14.75 13.22 14.22 14.78 14.77 16.11C15.42 17.7 17.27 18.37 18.78 17.62C19.76 17.15 20.34 16.2 20.4 15.19Z" fill="#6F434A"/> +<g filter="url(#filter3_f_18_31720)"> +<path d="M20.024 14.9836L20.0483 14.6099C20.1296 13.3833 19.1142 12.368 17.8795 12.4411L17.514 12.4655C17.1485 12.4817 16.7829 12.5873 16.4418 12.7904C15.4345 13.3833 15.004 14.6505 15.4508 15.7309C15.9788 17.0224 17.4815 17.5666 18.7081 16.9574C19.5041 16.5756 19.9752 15.804 20.024 14.9836Z" fill="url(#paint6_radial_18_31720)"/> +</g> +<path d="M7.68 9.41994L7.65 8.99994C7.57 7.62994 8.7 6.48994 10.07 6.57994L10.48 6.60994C10.89 6.62994 11.3 6.74994 11.68 6.96994C12.81 7.62994 13.28 9.04994 12.79 10.2599C12.2 11.6999 10.52 12.3099 9.15 11.6299C8.27 11.1899 7.74 10.3299 7.68 9.41994Z" fill="url(#paint7_radial_18_31720)"/> +<g filter="url(#filter4_f_18_31720)"> +<path d="M8.15663 9.38764L8.13206 9.04363C8.06654 7.92149 8.99209 6.98774 10.1142 7.06146L10.45 7.08603C10.7859 7.10241 11.2825 7.0698 11.5938 7.25C12.5193 7.79059 12.8076 8.94642 12.4062 9.9375C11.923 11.117 10.4828 11.7548 9.36068 11.1978C8.63989 10.8374 8.20578 10.133 8.15663 9.38764Z" fill="url(#paint8_radial_18_31720)"/> +</g> +<path d="M24.26 22.82L24.28 23.18C24.36 24.35 23.38 25.33 22.21 25.25L21.86 25.23C21.51 25.21 21.16 25.11 20.83 24.92C19.86 24.35 19.46 23.14 19.88 22.11C20.39 20.88 21.82 20.35 23 20.94C23.76 21.3 24.21 22.03 24.26 22.82Z" fill="#6F434A"/> +<g filter="url(#filter5_f_18_31720)"> +<path d="M24.0262 22.7197L24.043 23.0224C24.1103 24.0064 23.2861 24.8306 22.3021 24.7633L22.0078 24.7465C21.7134 24.7297 21.4191 24.6456 21.1415 24.4858C20.3258 24.0064 19.9893 22.9888 20.3426 22.1226C20.7715 21.0881 21.9741 20.6424 22.9665 21.1386C23.6057 21.4413 23.9842 22.0553 24.0262 22.7197Z" fill="url(#paint9_radial_18_31720)"/> +</g> +<path d="M5.90999 17.54L5.86999 16.92C5.82999 16.35 6.30999 15.87 6.87999 15.91L7.48999 15.95C7.72999 15.96 7.97999 16.04 8.19999 16.17C8.81999 16.56 9.06999 17.35 8.78999 18.02C8.44999 18.82 7.50999 19.16 6.73999 18.78C6.23999 18.55 5.93999 18.06 5.90999 17.54Z" fill="#6F434A"/> +<g filter="url(#filter6_f_18_31720)"> +<path d="M6.21167 17.5158L6.17985 17.0226C6.14803 16.5691 6.52991 16.1872 6.9834 16.219L7.46872 16.2508C7.65966 16.2588 7.85856 16.3224 8.03359 16.4259C8.52686 16.7362 8.72576 17.3647 8.50299 17.8977C8.23249 18.5342 7.48463 18.8047 6.87202 18.5024C6.47422 18.3194 6.23554 17.9296 6.21167 17.5158Z" fill="url(#paint10_radial_18_31720)"/> +</g> +<defs> +<filter id="filter0_f_18_31720" x="23.6498" y="12.75" width="3.58717" height="3.33459" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_31720"/> +</filter> +<filter id="filter1_f_18_31720" x="18.4181" y="5.03638" width="3.34752" height="3.18237" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_31720"/> +</filter> +<filter id="filter2_f_18_31720" x="10.4377" y="21.807" width="4.14041" height="4.1449" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_31720"/> +</filter> +<filter id="filter3_f_18_31720" x="14.7748" y="11.9374" width="5.77806" height="5.76941" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_31720"/> +</filter> +<filter id="filter4_f_18_31720" x="7.62878" y="6.55737" width="5.45396" height="5.34436" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_31720"/> +</filter> +<filter id="filter5_f_18_31720" x="19.7031" y="20.4355" width="4.84375" height="4.83167" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_31720"/> +</filter> +<filter id="filter6_f_18_31720" x="5.67799" y="15.7172" width="3.41576" height="3.40894" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_31720"/> +</filter> +<radialGradient id="paint0_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(23.4375 7.8125) rotate(119.554) scale(20.9077)"> +<stop stop-color="#FFDAAE"/> +<stop offset="1" stop-color="#D59077" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint1_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(17.375 16) rotate(83.2902) scale(17.1172 16.2696)"> +<stop offset="0.772068" stop-color="#BF9E7A" stop-opacity="0"/> +<stop offset="1" stop-color="#C4A47E"/> +</radialGradient> +<radialGradient id="paint2_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(19.375 6.5) rotate(92.6808) scale(37.4159)"> +<stop offset="0.324983" stop-color="#E9AB8B" stop-opacity="0"/> +<stop offset="0.505034" stop-color="#DE9A80"/> +<stop offset="0.656015" stop-color="#D07067"/> +</radialGradient> +<radialGradient id="paint3_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26.6119 13.3594) rotate(140.104) scale(2.75277 2.61177)"> +<stop offset="0.175443" stop-color="#886562"/> +<stop offset="1" stop-color="#8E6C67" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint4_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21.2656 7.41039) rotate(-149.903) scale(2.90043 2.79159)"> +<stop offset="0.175443" stop-color="#886562"/> +<stop offset="1" stop-color="#8E6C67" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint5_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.1292 25.2582) rotate(-41.0159) scale(3.90831 4.00044)"> +<stop offset="0.469854" stop-color="#896764" stop-opacity="0"/> +<stop offset="0.935135" stop-color="#896763"/> +</radialGradient> +<radialGradient id="paint6_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.2748 16) rotate(-21.7768) scale(5.55942 5.69235)"> +<stop offset="0.388269" stop-color="#896764" stop-opacity="0"/> +<stop offset="0.935135" stop-color="#896763"/> +</radialGradient> +<radialGradient id="paint7_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.125 8.875) rotate(123.403) scale(3.63294 3.63565)"> +<stop stop-color="#7D5755"/> +<stop offset="1" stop-color="#60383B"/> +</radialGradient> +<radialGradient id="paint8_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(8.12878 9.5625) rotate(-3.96087) scale(4.82023 4.82383)"> +<stop offset="0.596528" stop-color="#896764" stop-opacity="0"/> +<stop offset="0.935135" stop-color="#896763"/> +</radialGradient> +<radialGradient id="paint9_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(20.4375 24.5313) rotate(-40.886) scale(4.77422 4.88362)"> +<stop offset="0.469854" stop-color="#896764" stop-opacity="0"/> +<stop offset="0.935135" stop-color="#896763"/> +</radialGradient> +<radialGradient id="paint10_radial_18_31720" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(6.3253 18.4778) rotate(-40.8959) scale(3.00101 3.06992)"> +<stop offset="0.469854" stop-color="#896764" stop-opacity="0"/> +<stop offset="0.935135" stop-color="#896763"/> +</radialGradient> +</defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/custard_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/custard_color.svg new file mode 100644 index 0000000000..d967fec7fe --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/custard_color.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <g transform="matrix(1,0,0,1,0,-6.5)"> + <path d="M7.97,16.47L5.61,26L26.38,26L24.08,16.48C23.88,15.61 23.1,15 22.21,15L9.84,15C8.96,15 8.18,15.61 7.97,16.47Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/> + <path d="M9.84,15C8.96,15 8.18,15.61 7.97,16.47L7.34,19L24.7,19L24.09,16.48C23.88,15.61 23.1,15 22.21,15L9.84,15Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/> + <path d="M4,28C5.28,29.28 7.02,30 8.83,30L23.17,30C24.98,30 26.72,29.28 28,28L4,28Z" style="fill:url(#_Linear3);fill-rule:nonzero;"/> + <path d="M4,28C5.28,29.28 7.02,30 8.83,30L23.17,30C24.98,30 26.72,29.28 28,28L4,28Z" style="fill:url(#_Linear4);fill-rule:nonzero;"/> + <path d="M29,28L3,28C2.45,28 2,27.55 2,27C2,26.45 2.45,26 3,26L29,26C29.55,26 30,26.45 30,27C30,27.55 29.55,28 29,28Z" style="fill:url(#_Linear5);fill-rule:nonzero;"/> + <path d="M29,28L3,28C2.45,28 2,27.55 2,27C2,26.45 2.45,26 3,26L29,26C29.55,26 30,26.45 30,27C30,27.55 29.55,28 29,28Z" style="fill:url(#_Radial6);fill-rule:nonzero;"/> + <path d="M29,28L3,28C2.45,28 2,27.55 2,27C2,26.45 2.45,26 3,26L29,26C29.55,26 30,26.45 30,27C30,27.55 29.55,28 29,28Z" style="fill:url(#_Radial7);fill-rule:nonzero;"/> + </g> + <defs> + <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(20.77,0,0,20.77,5.61,26)"><stop offset="0" style="stop-color:rgb(148,107,83);stop-opacity:1"/><stop offset="0.25" style="stop-color:rgb(166,108,58);stop-opacity:1"/><stop offset="0.54" style="stop-color:rgb(204,139,83);stop-opacity:1"/><stop offset="0.75" style="stop-color:rgb(224,165,108);stop-opacity:1"/><stop offset="0.86" style="stop-color:rgb(230,165,103);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(204,153,104);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(16.8875,0,0,16.8875,7.8125,17.3125)"><stop offset="0" style="stop-color:rgb(113,76,64);stop-opacity:1"/><stop offset="0.25" style="stop-color:rgb(122,74,57);stop-opacity:1"/><stop offset="0.49" style="stop-color:rgb(149,95,75);stop-opacity:1"/><stop offset="0.78" style="stop-color:rgb(180,128,107);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(172,121,98);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(23.625,0,0,23.625,4.375,30)"><stop offset="0" style="stop-color:rgb(173,153,193);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(173,150,195);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.0313,1.9219,-1.9219,-0.0313,16.2813,26.5469)"><stop offset="0" style="stop-color:rgb(152,131,172);stop-opacity:1"/><stop offset="0.73" style="stop-color:rgb(152,131,172);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(156,132,180);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(28.3125,0,0,28.3125,2,27)"><stop offset="0" style="stop-color:rgb(134,133,137);stop-opacity:1"/><stop offset="0.51" style="stop-color:rgb(172,170,172);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(188,185,194);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial6" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.99107e-16,0.78125,-14.5,-5.55142e-15,26.1875,26.7187)"><stop offset="0" style="stop-color:rgb(221,218,228);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(222,219,228);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial7" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.98214e-16,1.5625,-60.1813,-2.30408e-14,11.1875,28)"><stop offset="0" style="stop-color:rgb(175,152,197);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(174,152,197);stop-opacity:0"/></radialGradient> + </defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/doughnut_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/doughnut_color.svg new file mode 100644 index 0000000000..e8e225bc0a --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/doughnut_color.svg @@ -0,0 +1,272 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M27.32 14C25.67 9.34 21.22 6 16 6C10.78 6 6.33 9.34 4.68 14H4V18C4 24.63 9.37 30 16 30C22.63 30 28 24.63 28 18V14H27.32ZM20.5 17.64C20.5 19.85 18.71 21.64 16.5 21.64H15.5C13.29 21.64 11.5 19.85 11.5 17.64C11.5 15.43 13.29 14 15.5 14H16.5C18.71 14 20.5 15.43 20.5 17.64Z" fill="url(#paint0_linear_18_31224)"/> +<path d="M27.32 14C25.67 9.34 21.22 6 16 6C10.78 6 6.33 9.34 4.68 14H4V18C4 24.63 9.37 30 16 30C22.63 30 28 24.63 28 18V14H27.32ZM20.5 17.64C20.5 19.85 18.71 21.64 16.5 21.64H15.5C13.29 21.64 11.5 19.85 11.5 17.64C11.5 15.43 13.29 14 15.5 14H16.5C18.71 14 20.5 15.43 20.5 17.64Z" fill="url(#paint1_radial_18_31224)"/> +<path d="M27.32 14C25.67 9.34 21.22 6 16 6C10.78 6 6.33 9.34 4.68 14H4V18C4 24.63 9.37 30 16 30C22.63 30 28 24.63 28 18V14H27.32ZM20.5 17.64C20.5 19.85 18.71 21.64 16.5 21.64H15.5C13.29 21.64 11.5 19.85 11.5 17.64C11.5 15.43 13.29 14 15.5 14H16.5C18.71 14 20.5 15.43 20.5 17.64Z" fill="url(#paint2_radial_18_31224)"/> +<path d="M16 2C9.37 2 3.8125 7.37 3.8125 14C3.8125 20.63 8.96875 26.3438 16 26.3438C23.0312 26.3438 28.25 20.63 28.25 14C28.25 7.37 22.63 2 16 2ZM20.5 14C20.5 16.21 18.71 18 16.5 18H15.5C13.29 18 11.5 16.21 11.5 14C11.5 12 13.29 10.2812 15.5 10.2812H16.5C18.71 10.2812 20.5 11.9688 20.5 14Z" fill="url(#paint3_radial_18_31224)"/> +<path d="M16 2C9.37 2 3.8125 7.37 3.8125 14C3.8125 20.63 8.96875 26.3438 16 26.3438C23.0312 26.3438 28.25 20.63 28.25 14C28.25 7.37 22.63 2 16 2ZM20.5 14C20.5 16.21 18.71 18 16.5 18H15.5C13.29 18 11.5 16.21 11.5 14C11.5 12 13.29 10.2812 15.5 10.2812H16.5C18.71 10.2812 20.5 11.9688 20.5 14Z" fill="url(#paint4_radial_18_31224)"/> +<path d="M16 2C9.37 2 3.8125 7.37 3.8125 14C3.8125 20.63 8.96875 26.3438 16 26.3438C23.0312 26.3438 28.25 20.63 28.25 14C28.25 7.37 22.63 2 16 2ZM20.5 14C20.5 16.21 18.71 18 16.5 18H15.5C13.29 18 11.5 16.21 11.5 14C11.5 12 13.29 10.2812 15.5 10.2812H16.5C18.71 10.2812 20.5 11.9688 20.5 14Z" fill="url(#paint5_radial_18_31224)"/> +<g filter="url(#filter0_f_18_31224)"> +<path d="M24.4825 11.3693C24.6825 11.1693 24.6825 10.8293 24.4825 10.6293L23.7025 9.84934C23.5025 9.64934 23.1625 9.64934 22.9625 9.84934C22.7625 10.0493 22.7625 10.3893 22.9625 10.5893L23.7425 11.3693C23.9425 11.5793 24.2825 11.5793 24.4825 11.3693Z" fill="#783C43"/> +</g> +<g filter="url(#filter1_f_18_31224)"> +<path d="M23.0563 16.19C22.8563 15.99 22.8563 15.65 23.0563 15.45L23.8363 14.67C24.0363 14.47 24.3763 14.47 24.5763 14.67C24.7763 14.87 24.7763 15.21 24.5763 15.41L23.7963 16.19C23.5963 16.4 23.2563 16.4 23.0563 16.19Z" fill="#733D42"/> +</g> +<g filter="url(#filter2_f_18_31224)"> +<path d="M21.7019 20.335C21.9019 20.135 21.9019 19.795 21.7019 19.595L20.9219 18.815C20.7219 18.615 20.3819 18.615 20.1819 18.815C19.9819 19.015 19.9819 19.355 20.1819 19.555L20.9619 20.335C21.1619 20.545 21.5019 20.545 21.7019 20.335Z" fill="#7E3B46"/> +</g> +<g filter="url(#filter3_f_18_31224)"> +<path d="M14.0331 23.2882C13.8331 23.0882 13.8331 22.7482 14.0331 22.5482L14.8131 21.7682C15.0131 21.5682 15.3531 21.5682 15.5531 21.7682C15.7531 21.9682 15.7531 22.3082 15.5531 22.5082L14.7731 23.2882C14.5731 23.4982 14.2331 23.4982 14.0331 23.2882Z" fill="#823C46"/> +</g> +<path d="M24.7525 11.2912C24.5525 11.4912 24.2125 11.4912 24.0125 11.2912L23.2325 10.5112C23.0325 10.3112 23.0325 9.97122 23.2325 9.77122C23.4325 9.57122 23.7725 9.57122 23.9725 9.77122L24.7525 10.5512C24.9625 10.7512 24.9625 11.0912 24.7525 11.2912Z" fill="url(#paint6_linear_18_31224)"/> +<path d="M24.7525 11.2912C24.5525 11.4912 24.2125 11.4912 24.0125 11.2912L23.2325 10.5112C23.0325 10.3112 23.0325 9.97122 23.2325 9.77122C23.4325 9.57122 23.7725 9.57122 23.9725 9.77122L24.7525 10.5512C24.9625 10.7512 24.9625 11.0912 24.7525 11.2912Z" fill="url(#paint7_radial_18_31224)"/> +<g filter="url(#filter4_f_18_31224)"> +<path d="M15.9156 6.40181C15.7156 6.20181 15.7156 5.86181 15.9156 5.66181L16.6956 4.88181C16.8956 4.68181 17.2356 4.68181 17.4356 4.88181C17.6356 5.08181 17.6356 5.42181 17.4356 5.62181L16.6556 6.40181C16.4556 6.61181 16.1156 6.61181 15.9156 6.40181Z" fill="#67383D"/> +</g> +<g filter="url(#filter5_f_18_31224)"> +<path d="M20.9781 8.42061C20.7781 8.22061 20.7781 7.88061 20.9781 7.68061L21.7581 6.90061C21.9581 6.70061 22.2981 6.70061 22.4981 6.90061C22.6981 7.10061 22.6981 7.44061 22.4981 7.64061L21.7181 8.42061C21.5181 8.63061 21.1781 8.63061 20.9781 8.42061Z" fill="#6B3C40"/> +</g> +<path d="M16.15 6.27999C15.95 6.07999 15.95 5.73999 16.15 5.53999L16.93 4.75999C17.13 4.55999 17.47 4.55999 17.67 4.75999C17.87 4.95999 17.87 5.29999 17.67 5.49999L16.89 6.27999C16.69 6.48999 16.35 6.48999 16.15 6.27999Z" fill="url(#paint8_linear_18_31224)"/> +<path d="M16.15 6.27999C15.95 6.07999 15.95 5.73999 16.15 5.53999L16.93 4.75999C17.13 4.55999 17.47 4.55999 17.67 4.75999C17.87 4.95999 17.87 5.29999 17.67 5.49999L16.89 6.27999C16.69 6.48999 16.35 6.48999 16.15 6.27999Z" fill="url(#paint9_radial_18_31224)"/> +<g filter="url(#filter6_f_18_31224)"> +<path d="M8.06003 9.36556C7.86003 9.16556 7.86003 8.82556 8.06003 8.62556L8.84003 7.84556C9.04003 7.64556 9.38003 7.64556 9.58003 7.84556C9.78003 8.04556 9.78003 8.38556 9.58003 8.58556L8.80003 9.36556C8.60003 9.56556 8.26003 9.56556 8.06003 9.36556Z" fill="#62393D"/> +</g> +<path d="M8.33378 9.25618C8.13378 9.05618 8.13378 8.71618 8.33378 8.51618L9.11378 7.73618C9.31378 7.53618 9.65378 7.53618 9.85378 7.73618C10.0538 7.93618 10.0538 8.27618 9.85378 8.47618L9.07378 9.25618C8.87378 9.45618 8.53378 9.45618 8.33378 9.25618Z" fill="url(#paint10_linear_18_31224)"/> +<path d="M8.33378 9.25618C8.13378 9.05618 8.13378 8.71618 8.33378 8.51618L9.11378 7.73618C9.31378 7.53618 9.65378 7.53618 9.85378 7.73618C10.0538 7.93618 10.0538 8.27618 9.85378 8.47618L9.07378 9.25618C8.87378 9.45618 8.53378 9.45618 8.33378 9.25618Z" fill="url(#paint11_radial_18_31224)"/> +<path d="M14.33 23.1975C14.13 22.9975 14.13 22.6575 14.33 22.4575L15.11 21.6775C15.31 21.4775 15.65 21.4775 15.85 21.6775C16.05 21.8775 16.05 22.2175 15.85 22.4175L15.07 23.1975C14.87 23.4075 14.53 23.4075 14.33 23.1975Z" fill="url(#paint12_linear_18_31224)"/> +<path d="M14.33 23.1975C14.13 22.9975 14.13 22.6575 14.33 22.4575L15.11 21.6775C15.31 21.4775 15.65 21.4775 15.85 21.6775C16.05 21.8775 16.05 22.2175 15.85 22.4175L15.07 23.1975C14.87 23.4075 14.53 23.4075 14.33 23.1975Z" fill="url(#paint13_radial_18_31224)"/> +<path d="M21.8425 20.1624C21.6425 20.3624 21.3025 20.3624 21.1025 20.1624L20.3225 19.3824C20.1225 19.1824 20.1225 18.8424 20.3225 18.6424C20.5225 18.4424 20.8625 18.4424 21.0625 18.6424L21.8425 19.4224C22.0525 19.6224 22.0525 19.9624 21.8425 20.1624Z" fill="url(#paint14_linear_18_31224)"/> +<path d="M21.8425 20.1624C21.6425 20.3624 21.3025 20.3624 21.1025 20.1624L20.3225 19.3824C20.1225 19.1824 20.1225 18.8424 20.3225 18.6424C20.5225 18.4424 20.8625 18.4424 21.0625 18.6424L21.8425 19.4224C22.0525 19.6224 22.0525 19.9624 21.8425 20.1624Z" fill="url(#paint15_radial_18_31224)"/> +<path d="M23.24 16.1037C23.04 15.9037 23.04 15.5637 23.24 15.3637L24.02 14.5837C24.22 14.3837 24.56 14.3837 24.76 14.5837C24.96 14.7837 24.96 15.1237 24.76 15.3237L23.98 16.1037C23.78 16.3137 23.44 16.3137 23.24 16.1037Z" fill="url(#paint16_linear_18_31224)"/> +<path d="M23.24 16.1037C23.04 15.9037 23.04 15.5637 23.24 15.3637L24.02 14.5837C24.22 14.3837 24.56 14.3837 24.76 14.5837C24.96 14.7837 24.96 15.1237 24.76 15.3237L23.98 16.1037C23.78 16.3137 23.44 16.3137 23.24 16.1037Z" fill="url(#paint17_radial_18_31224)"/> +<g filter="url(#filter7_f_18_31224)"> +<path d="M11.618 21.2525C11.418 21.4525 11.078 21.4525 10.878 21.2525L10.098 20.4725C9.89801 20.2725 9.89801 19.9325 10.098 19.7325C10.298 19.5325 10.638 19.5325 10.838 19.7325L11.618 20.5125C11.828 20.7125 11.828 21.0525 11.618 21.2525Z" fill="#693D49"/> +</g> +<path d="M11.8375 21.0725C11.6375 21.2725 11.2975 21.2725 11.0975 21.0725L10.3175 20.2925C10.1175 20.0925 10.1175 19.7525 10.3175 19.5525C10.5175 19.3525 10.8575 19.3525 11.0575 19.5525L11.8375 20.3325C12.0475 20.5325 12.0475 20.8725 11.8375 21.0725Z" fill="url(#paint18_linear_18_31224)"/> +<path d="M11.8375 21.0725C11.6375 21.2725 11.2975 21.2725 11.0975 21.0725L10.3175 20.2925C10.1175 20.0925 10.1175 19.7525 10.3175 19.5525C10.5175 19.3525 10.8575 19.3525 11.0575 19.5525L11.8375 20.3325C12.0475 20.5325 12.0475 20.8725 11.8375 21.0725Z" fill="url(#paint19_radial_18_31224)"/> +<g filter="url(#filter8_f_18_31224)"> +<path d="M6.05543 14.1662C5.85543 13.9662 5.85543 13.6262 6.05543 13.4262L6.83543 12.6462C7.03543 12.4462 7.37543 12.4462 7.57543 12.6462C7.77543 12.8462 7.77543 13.1862 7.57543 13.3862L6.79543 14.1662C6.59543 14.3762 6.25543 14.3762 6.05543 14.1662Z" fill="#5A3840"/> +</g> +<g filter="url(#filter9_f_18_31224)"> +<path d="M12.5852 7.31929C12.3852 7.51929 12.0452 7.51929 11.8452 7.31929L11.0552 6.53929C10.8552 6.33929 10.8552 5.99929 11.0552 5.79929C11.2552 5.59929 11.5952 5.59929 11.7952 5.79929L12.5752 6.57929C12.7852 6.77929 12.7852 7.11929 12.5852 7.31929Z" fill="#5A3840"/> +</g> +<path d="M12.7613 7.19747C12.5613 7.39747 12.2213 7.39747 12.0213 7.19747L11.2313 6.41747C11.0313 6.21747 11.0313 5.87747 11.2313 5.67747C11.4313 5.47747 11.7713 5.47747 11.9713 5.67747L12.7513 6.45747C12.9613 6.65747 12.9613 6.99747 12.7613 7.19747Z" fill="url(#paint20_linear_18_31224)"/> +<path d="M12.7613 7.19747C12.5613 7.39747 12.2213 7.39747 12.0213 7.19747L11.2313 6.41747C11.0313 6.21747 11.0313 5.87747 11.2313 5.67747C11.4313 5.47747 11.7713 5.47747 11.9713 5.67747L12.7513 6.45747C12.9613 6.65747 12.9613 6.99747 12.7613 7.19747Z" fill="url(#paint21_radial_18_31224)"/> +<path d="M6.33379 14.0725C6.13379 13.8725 6.13379 13.5325 6.33379 13.3325L7.11379 12.5525C7.31379 12.3525 7.65379 12.3525 7.85379 12.5525C8.05379 12.7525 8.05379 13.0925 7.85379 13.2925L7.07379 14.0725C6.87379 14.2825 6.53379 14.2825 6.33379 14.0725Z" fill="url(#paint22_linear_18_31224)"/> +<path d="M6.33379 14.0725C6.13379 13.8725 6.13379 13.5325 6.33379 13.3325L7.11379 12.5525C7.31379 12.3525 7.65379 12.3525 7.85379 12.5525C8.05379 12.7525 8.05379 13.0925 7.85379 13.2925L7.07379 14.0725C6.87379 14.2825 6.53379 14.2825 6.33379 14.0725Z" fill="url(#paint23_radial_18_31224)"/> +<path d="M21.2363 8.3387C21.0363 8.1387 21.0363 7.7987 21.2363 7.5987L22.0163 6.8187C22.2163 6.6187 22.5563 6.6187 22.7563 6.8187C22.9563 7.0187 22.9563 7.3587 22.7563 7.5587L21.9763 8.3387C21.7763 8.5487 21.4363 8.5487 21.2363 8.3387Z" fill="url(#paint24_linear_18_31224)"/> +<path d="M21.2363 8.3387C21.0363 8.1387 21.0363 7.7987 21.2363 7.5987L22.0163 6.8187C22.2163 6.6187 22.5563 6.6187 22.7563 6.8187C22.9563 7.0187 22.9563 7.3587 22.7563 7.5587L21.9763 8.3387C21.7763 8.5487 21.4363 8.5487 21.2363 8.3387Z" fill="url(#paint25_radial_18_31224)"/> +<g filter="url(#filter10_f_18_31224)"> +<path d="M10.5019 17.4825C10.3019 17.6825 9.96191 17.6825 9.76191 17.4825L8.98191 16.7025C8.78191 16.5025 8.78191 16.1625 8.98191 15.9625C9.18191 15.7625 9.52191 15.7625 9.72191 15.9625L10.5019 16.7425C10.7119 16.9425 10.7119 17.2725 10.5019 17.4825Z" fill="#6F3A43"/> +</g> +<path d="M10.76 17.2638C10.56 17.4638 10.22 17.4638 10.02 17.2638L9.24003 16.4837C9.04003 16.2837 9.04003 15.9438 9.24003 15.7438C9.44003 15.5438 9.78003 15.5438 9.98003 15.7438L10.76 16.5237C10.97 16.7237 10.97 17.0538 10.76 17.2638Z" fill="url(#paint26_linear_18_31224)"/> +<path d="M10.76 17.2638C10.56 17.4638 10.22 17.4638 10.02 17.2638L9.24003 16.4837C9.04003 16.2837 9.04003 15.9438 9.24003 15.7438C9.44003 15.5438 9.78003 15.5438 9.98003 15.7438L10.76 16.5237C10.97 16.7237 10.97 17.0538 10.76 17.2638Z" fill="url(#paint27_radial_18_31224)"/> +<g filter="url(#filter11_f_18_31224)"> +<path d="M10.5781 10.4844C8.93209 13.1078 11.0312 15.5938 11.0312 15.5938C10.5298 14.3629 10.6853 12.5943 11.2031 11.5156C12.1052 9.63666 13.4219 8.45318 16.3125 8.25C13.5781 7.85943 11.7593 8.60176 10.5781 10.4844Z" fill="url(#paint28_radial_18_31224)"/> +</g> +<g filter="url(#filter12_f_18_31224)"> +<path d="M25.375 20.1875C20.625 25.75 12.6875 23.6874 12.6875 23.6874C19.2953 23.6874 22.2286 22.608 24.75 19.1249C27.2714 15.6417 26.9375 9.6874 24.125 5.65623C27.375 8.99994 28.6902 16.3051 25.375 20.1875Z" fill="url(#paint29_radial_18_31224)"/> +</g> +<defs> +<filter id="filter0_f_18_31224" x="22.5625" y="9.44934" width="2.32001" height="2.32751" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter1_f_18_31224" x="22.6563" y="14.27" width="2.32001" height="2.32751" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter2_f_18_31224" x="19.7819" y="18.415" width="2.32001" height="2.32751" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter3_f_18_31224" x="13.6331" y="21.3682" width="2.32001" height="2.32751" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter4_f_18_31224" x="15.5156" y="4.48181" width="2.32001" height="2.32751" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter5_f_18_31224" x="20.5781" y="6.50061" width="2.32001" height="2.32751" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter6_f_18_31224" x="7.66003" y="7.44556" width="2.32001" height="2.31995" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter7_f_18_31224" x="9.69801" y="19.3325" width="2.3275" height="2.31995" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter8_f_18_31224" x="5.65543" y="12.2462" width="2.32001" height="2.32751" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter9_f_18_31224" x="10.6552" y="5.39929" width="2.32877" height="2.31995" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter10_f_18_31224" x="8.58191" y="15.5625" width="2.3275" height="2.31995" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter11_f_18_31224" x="8.94801" y="7.14905" width="8.36449" height="9.4447" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_31224"/> +</filter> +<filter id="filter12_f_18_31224" x="11.6875" y="4.65625" width="16.6161" height="20.4052" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_31224"/> +</filter> +<linearGradient id="paint0_linear_18_31224" x1="3.5625" y1="20.5625" x2="28.375" y2="20.5625" gradientUnits="userSpaceOnUse"> +<stop stop-color="#BE8A63"/> +<stop offset="0.183879" stop-color="#DF8777"/> +<stop offset="0.463476" stop-color="#F28886"/> +<stop offset="0.803526" stop-color="#F0AE9C"/> +<stop offset="1" stop-color="#EAC891"/> +</linearGradient> +<radialGradient id="paint1_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(16.75 11.6875) rotate(97.5709) scale(9.96184 9.16466)"> +<stop offset="0.405405" stop-color="#F48F75"/> +<stop offset="0.598905" stop-color="#FFA85B"/> +<stop offset="0.954955" stop-color="#FFA85B" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint2_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.6875 16.6875) rotate(90) scale(5.1875 5.88997)"> +<stop offset="0.53012" stop-color="#CD777A"/> +<stop offset="1" stop-color="#D47A70" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint3_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(23.875 20.125) rotate(-135.234) scale(21.6553 18.6519)"> +<stop offset="0.393247" stop-color="#AB6B59"/> +<stop offset="0.912271" stop-color="#7E4C42"/> +<stop offset="1" stop-color="#664946"/> +</radialGradient> +<radialGradient id="paint4_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(16.875 13) rotate(88.698) scale(5.50142 5.67515)"> +<stop offset="0.686112" stop-color="#854D42"/> +<stop offset="1" stop-color="#844C43" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint5_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(16.3125 9.75) rotate(90) scale(17.9375 19.5)"> +<stop offset="0.790941" stop-color="#A15B79" stop-opacity="0"/> +<stop offset="0.9144" stop-color="#A15B75"/> +</radialGradient> +<linearGradient id="paint6_linear_18_31224" x1="23.5634" y1="10.9375" x2="24.3447" y2="10.1568" gradientUnits="userSpaceOnUse"> +<stop stop-color="#D256BC"/> +<stop offset="0.501103" stop-color="#FF73E1"/> +<stop offset="1" stop-color="#FF82E8"/> +</linearGradient> +<radialGradient id="paint7_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(24.7111 10.8047) rotate(138.898) scale(0.404057 0.258873)"> +<stop stop-color="#FF94FF"/> +<stop offset="1" stop-color="#FF94FF" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint8_linear_18_31224" x1="16.5937" y1="5.125" x2="17.2812" y2="5.90625" gradientUnits="userSpaceOnUse"> +<stop stop-color="#F66EC9"/> +<stop offset="0.498647" stop-color="#FF8AF5"/> +<stop offset="1" stop-color="#FF72DB"/> +</linearGradient> +<radialGradient id="paint9_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(17.3281 5.03125) rotate(135) scale(1.5026 0.85995)"> +<stop offset="0.636927" stop-color="#E55DC8" stop-opacity="0"/> +<stop offset="1" stop-color="#DB5BC1"/> +</radialGradient> +<linearGradient id="paint10_linear_18_31224" x1="8.77753" y1="8.09908" x2="9.46184" y2="8.87992" gradientUnits="userSpaceOnUse"> +<stop stop-color="#F66EC9"/> +<stop offset="0.498647" stop-color="#FF8AF5"/> +<stop offset="1" stop-color="#FF72DB"/> +</linearGradient> +<radialGradient id="paint11_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(9.5119 8.00572) rotate(135.118) scale(1.49952 0.85818)"> +<stop offset="0.636927" stop-color="#E55DC8" stop-opacity="0"/> +<stop offset="1" stop-color="#DB5BC1"/> +</radialGradient> +<linearGradient id="paint12_linear_18_31224" x1="14.7737" y1="22.0425" x2="15.4612" y2="22.8237" gradientUnits="userSpaceOnUse"> +<stop stop-color="#F66EC9"/> +<stop offset="0.498647" stop-color="#FF8AF5"/> +<stop offset="1" stop-color="#FF72DB"/> +</linearGradient> +<radialGradient id="paint13_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.5081 21.9487) rotate(135) scale(1.5026 0.85995)"> +<stop offset="0.636927" stop-color="#E55DC8" stop-opacity="0"/> +<stop offset="1" stop-color="#DB5BC1"/> +</radialGradient> +<linearGradient id="paint14_linear_18_31224" x1="20.6534" y1="19.8087" x2="21.4347" y2="19.028" gradientUnits="userSpaceOnUse"> +<stop stop-color="#D256BC"/> +<stop offset="0.501103" stop-color="#FF73E1"/> +<stop offset="1" stop-color="#FF82E8"/> +</linearGradient> +<radialGradient id="paint15_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21.8011 19.6759) rotate(138.898) scale(0.404057 0.258873)"> +<stop stop-color="#FF94FF"/> +<stop offset="1" stop-color="#FF94FF" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint16_linear_18_31224" x1="23.6838" y1="14.9487" x2="24.3713" y2="15.73" gradientUnits="userSpaceOnUse"> +<stop stop-color="#22A4FA"/> +<stop offset="0.498647" stop-color="#49C0FF"/> +<stop offset="1" stop-color="#2AB1FF"/> +</linearGradient> +<radialGradient id="paint17_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(24.4182 14.855) rotate(133.986) scale(1.69913 1.74052)"> +<stop offset="0.658529" stop-color="#2A77DD" stop-opacity="0"/> +<stop offset="1" stop-color="#2B73DA"/> +</radialGradient> +<linearGradient id="paint18_linear_18_31224" x1="10.6484" y1="20.7187" x2="11.4297" y2="19.938" gradientUnits="userSpaceOnUse"> +<stop stop-color="#2A61B8"/> +<stop offset="0.501103" stop-color="#25A1FF"/> +<stop offset="1" stop-color="#2DBFFF"/> +</linearGradient> +<radialGradient id="paint19_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.796 20.5859) rotate(138.898) scale(0.404057 0.258873)"> +<stop stop-color="#4FC9FF"/> +<stop offset="1" stop-color="#50CBFF" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint20_linear_18_31224" x1="11.5625" y1="6.84375" x2="12.3438" y2="6.0625" gradientUnits="userSpaceOnUse"> +<stop stop-color="#2A61B8"/> +<stop offset="0.501103" stop-color="#25A1FF"/> +<stop offset="1" stop-color="#2DBFFF"/> +</linearGradient> +<radialGradient id="paint21_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(12.7109 6.71094) rotate(138.918) scale(0.404217 0.258951)"> +<stop stop-color="#4FC9FF"/> +<stop offset="1" stop-color="#50CBFF" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint22_linear_18_31224" x1="6.77754" y1="12.9175" x2="7.46504" y2="13.6987" gradientUnits="userSpaceOnUse"> +<stop stop-color="#22A4FA"/> +<stop offset="0.498647" stop-color="#49C0FF"/> +<stop offset="1" stop-color="#2AB1FF"/> +</linearGradient> +<radialGradient id="paint23_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(7.51192 12.8237) rotate(133.986) scale(1.69913 1.74052)"> +<stop offset="0.658529" stop-color="#2A77DD" stop-opacity="0"/> +<stop offset="1" stop-color="#2B73DA"/> +</radialGradient> +<linearGradient id="paint24_linear_18_31224" x1="21.68" y1="7.18372" x2="22.3675" y2="7.96497" gradientUnits="userSpaceOnUse"> +<stop stop-color="#22A4FA"/> +<stop offset="0.498647" stop-color="#49C0FF"/> +<stop offset="1" stop-color="#2AB1FF"/> +</linearGradient> +<radialGradient id="paint25_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(22.4144 7.08997) rotate(133.986) scale(1.69913 1.74052)"> +<stop offset="0.658529" stop-color="#2A77DD" stop-opacity="0"/> +<stop offset="1" stop-color="#2B73DA"/> +</radialGradient> +<linearGradient id="paint26_linear_18_31224" x1="9.57092" y1="16.91" x2="10.3522" y2="16.1293" gradientUnits="userSpaceOnUse"> +<stop stop-color="#D256BC"/> +<stop offset="0.501103" stop-color="#FF73E1"/> +<stop offset="1" stop-color="#FF82E8"/> +</linearGradient> +<radialGradient id="paint27_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(10.7186 16.7772) rotate(138.898) scale(0.404057 0.258873)"> +<stop stop-color="#FF94FF"/> +<stop offset="1" stop-color="#FF94FF" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint28_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(12.1875 10.4375) rotate(47.0901) scale(6.05863 29.5218)"> +<stop stop-color="#C79A91"/> +<stop offset="1" stop-color="#C79A91" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint29_radial_18_31224" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.25 19.0625) rotate(-157.529) scale(15.083 71.364)"> +<stop stop-color="#CF9689"/> +<stop offset="1" stop-color="#D1988A" stop-opacity="0"/> +</radialGradient> +</defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/lollipop_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/lollipop_color.svg new file mode 100644 index 0000000000..ad90ac6f52 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/lollipop_color.svg @@ -0,0 +1,112 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M28.25 28.25L16.5 17" stroke="url(#paint0_linear_18_29825)" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/> +<mask id="mask0_18_29825" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="14" y="15" width="16" height="15"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M15.236 15.7898C15.9044 15.0916 17.0121 15.0676 17.7103 15.736L29.4603 26.986C30.1584 27.6544 30.1824 28.7621 29.514 29.4603C28.8456 30.1584 27.7379 30.1824 27.0398 29.514L15.2898 18.264C14.5916 17.5956 14.5676 16.4879 15.236 15.7898Z" fill="#212121"/> +</mask> +<g mask="url(#mask0_18_29825)"> +<g filter="url(#filter0_f_18_29825)"> +<path d="M29 27.5L17.25 16.25" stroke="#FFE5C1" stroke-linecap="round" stroke-linejoin="round"/> +</g> +</g> +<path fill-rule="evenodd" clip-rule="evenodd" d="M15.236 15.7898C15.9044 15.0916 17.0121 15.0676 17.7103 15.736L29.4603 26.986C30.1584 27.6544 30.1824 28.7621 29.514 29.4603C28.8456 30.1584 27.7379 30.1824 27.0398 29.514L15.2898 18.264C14.5916 17.5956 14.5676 16.4879 15.236 15.7898Z" fill="url(#paint1_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M3.38559 6.91832C4.28822 5.39149 5.58521 4.12544 7.13636 3.26038C13.3511 6.72017 12 12 12 12C9.95937 8.79099 8.01466 7.26385 3.38559 6.91832Z" fill="url(#paint2_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M2.00043 11.9068C2.01725 10.0646 2.53218 8.34146 3.41704 6.86548C10.2965 6.96669 12 12 12 12C8.66694 10.2518 6.29 9.90635 2.00043 11.9068Z" fill="url(#paint3_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M3.29277 16.9213C2.4698 15.4683 2 13.789 2 12C2 11.9479 2.0004 11.8959 2.00119 11.844C8.00872 8.49337 12 12 12 12C8.21727 12.0949 5.9829 13.1457 3.29277 16.9213Z" fill="url(#paint4_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M6.92097 20.6159C5.39375 19.7137 4.12726 18.417 3.26172 16.866C6.78909 10.9586 12 12 12 12C8.7792 13.9043 7.41959 16.0271 6.92097 20.6159Z" fill="url(#paint5_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M6.86548 20.583C6.96669 13.7035 12 12 12 12C10.173 15.2975 9.97217 17.7746 11.9074 21.9996C10.065 21.9829 8.34163 21.4679 6.86548 20.583Z" fill="url(#paint6_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M11.844 21.9988C8.49337 15.9913 12 12 12 12C12.1732 15.8368 13.1795 18.105 16.9204 20.7077C15.4676 21.5304 13.7887 22 12 22C11.9479 22 11.8959 21.9996 11.844 21.9988Z" fill="url(#paint7_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M16.8661 20.7383C10.9586 17.2109 12 12 12 12C14.0949 15.3202 15.9729 16.7474 20.6143 17.0819C19.7121 18.6078 18.4161 19.8733 16.8661 20.7383Z" fill="url(#paint8_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M20.583 17.1345C13.7035 17.0333 12 12 12 12C15.3417 13.8027 17.8524 14.0929 21.9996 12.0944C21.9825 13.9361 21.4676 15.6589 20.583 17.1345Z" fill="url(#paint9_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M21.9988 12.156C21.9996 12.1041 22 12.0521 22 12C22 10.2115 21.5305 8.53271 20.708 7.08008C18.0379 10.9644 15.7923 11.8814 12 12C12 12 15.9913 15.5066 21.9988 12.156Z" fill="url(#paint10_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M17.0816 3.3855C18.6076 4.28766 19.8732 5.58378 20.7383 7.13389C17.2109 13.0414 12 12 12 12C15.1071 10.0716 16.7119 8.22757 17.0816 3.3855Z" fill="url(#paint11_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M17.1345 3.41708C15.6593 2.53265 13.9371 2.0178 12.096 2.00049C14.2371 6.27017 13.7353 8.83597 12 12C12 12 17.0333 10.2965 17.1345 3.41708Z" fill="url(#paint12_linear_18_29825)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M12.156 2.00119C12.1041 2.0004 12.0521 2 12 2C10.213 2 8.53548 2.46873 7.08368 3.28996C11.2283 5.87922 12.1157 8.21834 12 12C12 12 15.5066 8.00872 12.156 2.00119Z" fill="url(#paint13_linear_18_29825)"/> +<mask id="mask1_18_29825" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="20" height="20"> +<circle cx="12" cy="12" r="10" fill="black"/> +</mask> +<g mask="url(#mask1_18_29825)"> +<g filter="url(#filter1_f_18_29825)"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM2.125 12C2.125 6.54619 6.54619 2.125 12 2.125C17.4538 2.125 21.875 6.54619 21.875 12C21.875 17.4538 17.4538 21.875 12 21.875C6.54619 21.875 2.125 17.4538 2.125 12Z" fill="black" fill-opacity="0.32"/> +</g> +</g> +<defs> +<filter id="filter0_f_18_29825" x="15.75" y="14.75" width="14.75" height="14.25" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_29825"/> +</filter> +<filter id="filter1_f_18_29825" x="1.5" y="1.5" width="21" height="21" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_29825"/> +</filter> +<linearGradient id="paint0_linear_18_29825" x1="25.0221" y1="22.7615" x2="22.5" y2="25.5" gradientUnits="userSpaceOnUse"> +<stop stop-color="#FDDAB2"/> +<stop offset="0.442708" stop-color="#EA9BB3"/> +<stop offset="0.677083" stop-color="#E37DC3"/> +<stop offset="1" stop-color="#C969AB"/> +</linearGradient> +<linearGradient id="paint1_linear_18_29825" x1="14.5" y1="15.5" x2="22.5" y2="23.5" gradientUnits="userSpaceOnUse"> +<stop stop-color="#B05C92"/> +<stop offset="0.765625" stop-color="#B05C92" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint2_linear_18_29825" x1="5.5" y1="4.50003" x2="12" y2="12" gradientUnits="userSpaceOnUse"> +<stop stop-color="#5E9BEB"/> +<stop offset="0.526042" stop-color="#6FA0F3"/> +<stop offset="1" stop-color="#7EA4F4"/> +</linearGradient> +<linearGradient id="paint3_linear_18_29825" x1="12" y1="12" x2="2.5" y2="9" gradientUnits="userSpaceOnUse"> +<stop stop-color="#7DC3A2"/> +<stop offset="0.515625" stop-color="#71C398"/> +<stop offset="1" stop-color="#74D099"/> +</linearGradient> +<linearGradient id="paint4_linear_18_29825" x1="12" y1="12" x2="2" y2="14" gradientUnits="userSpaceOnUse"> +<stop stop-color="#EAC27C"/> +<stop offset="0.489583" stop-color="#EBC16A"/> +<stop offset="1" stop-color="#FFE885"/> +</linearGradient> +<linearGradient id="paint5_linear_18_29825" x1="12" y1="12" x2="4.5" y2="18.5" gradientUnits="userSpaceOnUse"> +<stop stop-color="#ED8876"/> +<stop offset="0.442708" stop-color="#FE8765"/> +<stop offset="1" stop-color="#FF916D"/> +</linearGradient> +<linearGradient id="paint6_linear_18_29825" x1="12" y1="12" x2="9" y2="21.5" gradientUnits="userSpaceOnUse"> +<stop stop-color="#BD4C97"/> +<stop offset="0.515625" stop-color="#B93A90"/> +<stop offset="1" stop-color="#B83A8B"/> +</linearGradient> +<linearGradient id="paint7_linear_18_29825" x1="12" y1="12" x2="13.6573" y2="22" gradientUnits="userSpaceOnUse"> +<stop stop-color="#B976DB"/> +<stop offset="0.510417" stop-color="#AF64D6"/> +<stop offset="1" stop-color="#9B4BC5"/> +</linearGradient> +<linearGradient id="paint8_linear_18_29825" x1="19" y1="19.5" x2="12" y2="12" gradientUnits="userSpaceOnUse"> +<stop stop-color="#5E92F8"/> +<stop offset="0.5" stop-color="#6D95F1"/> +<stop offset="1" stop-color="#7CA0F2"/> +</linearGradient> +<linearGradient id="paint9_linear_18_29825" x1="21.5" y1="15" x2="12" y2="12" gradientUnits="userSpaceOnUse"> +<stop stop-color="#90F7BA"/> +<stop offset="0.526042" stop-color="#76C5A0"/> +<stop offset="1" stop-color="#7EC1A4"/> +</linearGradient> +<linearGradient id="paint10_linear_18_29825" x1="21.5" y1="10" x2="12" y2="12" gradientUnits="userSpaceOnUse"> +<stop stop-color="#FFFF90"/> +<stop offset="0.515625" stop-color="#FFD677"/> +<stop offset="1" stop-color="#EDC47E"/> +</linearGradient> +<linearGradient id="paint11_linear_18_29825" x1="19.5" y1="5.49997" x2="12" y2="12" gradientUnits="userSpaceOnUse"> +<stop stop-color="#FFB281"/> +<stop offset="0.5" stop-color="#FF9372"/> +<stop offset="1" stop-color="#F18C79"/> +</linearGradient> +<linearGradient id="paint12_linear_18_29825" x1="15" y1="2.50003" x2="12" y2="12" gradientUnits="userSpaceOnUse"> +<stop stop-color="#FC70BD"/> +<stop offset="1" stop-color="#C2509A"/> +</linearGradient> +<linearGradient id="paint13_linear_18_29825" x1="9.5" y1="2.5" x2="12" y2="12" gradientUnits="userSpaceOnUse"> +<stop stop-color="#DB8BFB"/> +<stop offset="1" stop-color="#BC79DD"/> +</linearGradient> +</defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/pancakes_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/pancakes_color.svg new file mode 100644 index 0000000000..94b2ab69b5 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/pancakes_color.svg @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;"> + <g transform="matrix(1,0,0,1,0,0.3089)"> + <path d="M21.357,12.066L10.653,12.066C5.871,12.066 2,15.947 2,20.729C2,25.511 5.871,29.382 10.653,29.382L21.347,29.382C26.129,29.382 30,25.511 30,20.729C30.01,15.947 26.139,12.066 21.357,12.066Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/> + <g> + <path d="M21.283,12.484L10.758,12.484C6.057,12.484 2.25,16.155 2.25,20.677C2.25,25.198 6.057,28.859 10.758,28.859L21.273,28.859C25.975,28.859 29.781,25.198 29.781,20.677C29.791,16.155 25.985,12.484 21.283,12.484Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/> + </g> + <g> + <path d="M21.417,14.823L10.593,14.823L4.011,16.714L4.011,19.275C4.011,22.916 6.962,25.857 10.593,25.857L21.407,25.857C25.048,25.857 27.989,22.906 27.989,19.275L27.989,16.714L21.417,14.823Z" style="fill:url(#_Linear3);fill-rule:nonzero;"/> + </g> + <path d="M21.417,14.287L10.593,14.287L4.011,16.177L4.011,18.738C4.011,22.38 6.962,25.321 10.593,25.321L21.407,25.321C25.048,25.321 27.989,22.37 27.989,18.738L27.989,16.177L21.417,14.287Z" style="fill:url(#_Linear4);fill-rule:nonzero;"/> + <path d="M21.417,9.195L10.593,9.195C6.952,9.195 4.011,12.146 4.011,15.777C4.011,19.419 6.962,22.36 10.593,22.36L21.407,22.36C25.048,22.36 27.989,19.409 27.989,15.777C27.999,12.136 25.048,9.195 21.417,9.195Z" style="fill:url(#_Linear5);fill-rule:nonzero;"/> + <path d="M21.417,9.195L10.593,9.195C6.952,9.195 4.011,12.146 4.011,15.777C4.011,19.419 6.962,22.36 10.593,22.36L21.407,22.36C25.048,22.36 27.989,19.409 27.989,15.777C27.999,12.136 25.048,9.195 21.417,9.195Z" style="fill:url(#_Radial6);fill-rule:nonzero;"/> + <path d="M21.417,9.195L10.593,9.195C6.952,9.195 4.011,12.146 4.011,15.777C4.011,19.419 6.962,22.36 10.593,22.36L21.407,22.36C25.048,22.36 27.989,19.409 27.989,15.777C27.999,12.136 25.048,9.195 21.417,9.195Z" style="fill:url(#_Radial7);fill-rule:nonzero;"/> + <path d="M21.417,8.515L10.593,8.515L4.011,10.416L4.011,12.977C4.011,16.618 6.962,19.559 10.593,19.559L21.407,19.559C25.048,19.559 27.989,16.608 27.989,12.977L27.989,10.416L21.417,8.515Z" style="fill:url(#_Linear8);fill-rule:nonzero;"/> + <path d="M21.416,3.422L10.592,3.422C6.951,3.422 4.01,6.374 4.01,10.005C4.01,13.646 6.961,16.587 10.592,16.587L21.406,16.587C25.048,16.587 27.989,13.636 27.989,10.005C27.999,6.374 25.048,3.422 21.416,3.422Z" style="fill:url(#_Linear9);fill-rule:nonzero;"/> + <g> + <path d="M18.375,3.579L10.687,3.579C7.109,3.579 4.219,6.53 4.219,10.161C4.219,13.802 7.119,16.743 10.687,16.743L18.375,16.743L18.375,3.579Z" style="fill:url(#_Linear10);fill-rule:nonzero;"/> + <path d="M18.375,3.579L10.687,3.579C7.109,3.579 4.219,6.53 4.219,10.161C4.219,13.802 7.119,16.743 10.687,16.743L18.375,16.743L18.375,3.579Z" style="fill:url(#_Radial11);fill-rule:nonzero;"/> + <path d="M18.375,3.579L10.687,3.579C7.109,3.579 4.219,6.53 4.219,10.161C4.219,13.802 7.119,16.743 10.687,16.743L18.375,16.743L18.375,3.579Z" style="fill:url(#_Radial12);fill-rule:nonzero;"/> + </g> + <path d="M19.436,6.204L12.564,6.204C10.523,6.204 8.872,7.855 8.872,9.895C8.872,11.566 9.983,12.986 11.513,13.437C11.974,13.577 12.284,14.007 12.284,14.487L12.284,20.299C12.284,21.009 12.834,21.61 13.544,21.63C14.264,21.64 14.855,21.059 14.855,20.349L14.855,14.677C14.855,14.077 15.335,13.597 15.935,13.597C16.535,13.597 17.015,14.077 17.015,14.677L17.015,16.328C17.015,17.038 17.566,17.638 18.276,17.658C18.996,17.668 19.586,17.088 19.586,16.378L19.586,14.537C19.586,14.047 19.906,13.607 20.387,13.477C21.977,13.066 23.148,11.616 23.148,9.905C23.138,7.855 21.477,6.204 19.436,6.204Z" style="fill:url(#_Radial13);fill-rule:nonzero;"/> + <path d="M19.436,6.204L12.564,6.204C10.523,6.204 8.872,7.855 8.872,9.895C8.872,11.566 9.983,12.986 11.513,13.437C11.974,13.577 12.284,14.007 12.284,14.487L12.284,20.299C12.284,21.009 12.834,21.61 13.544,21.63C14.264,21.64 14.855,21.059 14.855,20.349L14.855,14.677C14.855,14.077 15.335,13.597 15.935,13.597C16.535,13.597 17.015,14.077 17.015,14.677L17.015,16.328C17.015,17.038 17.566,17.638 18.276,17.658C18.996,17.668 19.586,17.088 19.586,16.378L19.586,14.537C19.586,14.047 19.906,13.607 20.387,13.477C21.977,13.066 23.148,11.616 23.148,9.905C23.138,7.855 21.477,6.204 19.436,6.204Z" style="fill:rgb(136,71,52);fill-rule:nonzero;"/> + <path d="M19.436,6.204L12.564,6.204C10.523,6.204 8.872,7.855 8.872,9.895C8.872,11.566 9.983,12.986 11.513,13.437C11.974,13.577 12.284,14.007 12.284,14.487L12.284,20.299C12.284,21.009 12.834,21.61 13.544,21.63C14.264,21.64 14.855,21.059 14.855,20.349L14.855,14.677C14.855,14.077 15.335,13.597 15.935,13.597C16.535,13.597 17.015,14.077 17.015,14.677L17.015,16.328C17.015,17.038 17.566,17.638 18.276,17.658C18.996,17.668 19.586,17.088 19.586,16.378L19.586,14.537C19.586,14.047 19.906,13.607 20.387,13.477C21.977,13.066 23.148,11.616 23.148,9.905C23.138,7.855 21.477,6.204 19.436,6.204Z" style="fill:url(#_Linear14);fill-rule:nonzero;"/> + <g> + <path d="M8.953,9.805C8.953,11.4 10.107,12.552 11.606,12.982C12.057,13.115 12.361,13.526 12.361,13.985L12.361,19.964C12.361,20.642 12.9,21.2 13.595,21.219C14.3,21.228 14.75,20.85 14.75,20.172L14.75,14.079C14.75,13.505 15.349,13.047 15.937,13.047C16.524,13.047 17.156,13.505 17.156,14.079L17.156,16.219C17.156,16.897 17.533,17.497 18.229,17.516C18.934,17.525 19.512,16.897 19.512,16.219L19.512,14.059C19.512,13.591 19.826,13.171 20.296,13.047C21.854,12.655 23.094,11.439 23.094,9.805C23.094,3.859 8.953,3.947 8.953,9.805Z" style="fill:url(#_Radial15);fill-rule:nonzero;"/> + <path d="M8.953,9.805C8.953,11.4 10.107,12.552 11.606,12.982C12.057,13.115 12.361,13.526 12.361,13.985L12.361,19.964C12.361,20.642 12.9,21.2 13.595,21.219C14.3,21.228 14.75,20.85 14.75,20.172L14.75,14.079C14.75,13.505 15.349,13.047 15.937,13.047C16.524,13.047 17.156,13.505 17.156,14.079L17.156,16.219C17.156,16.897 17.533,17.497 18.229,17.516C18.934,17.525 19.512,16.897 19.512,16.219L19.512,14.059C19.512,13.591 19.826,13.171 20.296,13.047C21.854,12.655 23.094,11.439 23.094,9.805C23.094,3.859 8.953,3.947 8.953,9.805Z" style="fill:url(#_Radial16);fill-rule:nonzero;"/> + <path d="M8.953,9.805C8.953,11.4 10.107,12.552 11.606,12.982C12.057,13.115 12.361,13.526 12.361,13.985L12.361,19.964C12.361,20.642 12.9,21.2 13.595,21.219C14.3,21.228 14.75,20.85 14.75,20.172L14.75,14.079C14.75,13.505 15.349,13.047 15.937,13.047C16.524,13.047 17.156,13.505 17.156,14.079L17.156,16.219C17.156,16.897 17.533,17.497 18.229,17.516C18.934,17.525 19.512,16.897 19.512,16.219L19.512,14.059C19.512,13.591 19.826,13.171 20.296,13.047C21.854,12.655 23.094,11.439 23.094,9.805C23.094,3.859 8.953,3.947 8.953,9.805Z" style="fill:url(#_Radial17);fill-rule:nonzero;"/> + <path d="M8.953,9.805C8.953,11.4 10.107,12.552 11.606,12.982C12.057,13.115 12.361,13.526 12.361,13.985L12.361,19.964C12.361,20.642 12.9,21.2 13.595,21.219C14.3,21.228 14.75,20.85 14.75,20.172L14.75,14.079C14.75,13.505 15.349,13.047 15.937,13.047C16.524,13.047 17.156,13.505 17.156,14.079L17.156,16.219C17.156,16.897 17.533,17.497 18.229,17.516C18.934,17.525 19.512,16.897 19.512,16.219L19.512,14.059C19.512,13.591 19.826,13.171 20.296,13.047C21.854,12.655 23.094,11.439 23.094,9.805C23.094,3.859 8.953,3.947 8.953,9.805Z" style="fill:url(#_Radial18);fill-rule:nonzero;"/> + <path d="M8.953,9.805C8.953,11.4 10.107,12.552 11.606,12.982C12.057,13.115 12.361,13.526 12.361,13.985L12.361,19.964C12.361,20.642 12.9,21.2 13.595,21.219C14.3,21.228 14.75,20.85 14.75,20.172L14.75,14.079C14.75,13.505 15.349,13.047 15.937,13.047C16.524,13.047 17.156,13.505 17.156,14.079L17.156,16.219C17.156,16.897 17.533,17.497 18.229,17.516C18.934,17.525 19.512,16.897 19.512,16.219L19.512,14.059C19.512,13.591 19.826,13.171 20.296,13.047C21.854,12.655 23.094,11.439 23.094,9.805C23.094,3.859 8.953,3.947 8.953,9.805Z" style="fill:url(#_Radial19);fill-rule:nonzero;"/> + <path d="M8.953,9.805C8.953,11.4 10.107,12.552 11.606,12.982C12.057,13.115 12.361,13.526 12.361,13.985L12.361,19.964C12.361,20.642 12.9,21.2 13.595,21.219C14.3,21.228 14.75,20.85 14.75,20.172L14.75,14.079C14.75,13.505 15.349,13.047 15.937,13.047C16.524,13.047 17.156,13.505 17.156,14.079L17.156,16.219C17.156,16.897 17.533,17.497 18.229,17.516C18.934,17.525 19.512,16.897 19.512,16.219L19.512,14.059C19.512,13.591 19.826,13.171 20.296,13.047C21.854,12.655 23.094,11.439 23.094,9.805C23.094,3.859 8.953,3.947 8.953,9.805Z" style="fill:url(#_Radial20);fill-rule:nonzero;"/> + <path d="M8.953,9.805C8.953,11.4 10.107,12.552 11.606,12.982C12.057,13.115 12.361,13.526 12.361,13.985L12.361,19.964C12.361,20.642 12.9,21.2 13.595,21.219C14.3,21.228 14.75,20.85 14.75,20.172L14.75,14.079C14.75,13.505 15.349,13.047 15.937,13.047C16.524,13.047 17.156,13.505 17.156,14.079L17.156,16.219C17.156,16.897 17.533,17.497 18.229,17.516C18.934,17.525 19.512,16.897 19.512,16.219L19.512,14.059C19.512,13.591 19.826,13.171 20.296,13.047C21.854,12.655 23.094,11.439 23.094,9.805C23.094,3.859 8.953,3.947 8.953,9.805Z" style="fill:url(#_Radial21);fill-rule:nonzero;"/> + </g> + <g> + <path d="M11.479,7.266L11.479,7.641C11.479,8.062 11.671,8.484 12.055,8.721L15.092,10.511C15.659,10.871 16.361,10.871 16.918,10.511L19.955,8.721C20.339,8.474 20.531,8.052 20.531,7.641L20.531,7.266L11.479,7.266Z" style="fill:rgb(115,57,25);fill-rule:nonzero;"/> + </g> + <path d="M17.406,5.113L16.955,4.843C16.365,4.492 15.635,4.492 15.055,4.843L14.605,5.113L11.293,5.113L11.293,7.213C11.293,7.624 11.493,8.034 11.894,8.264L15.055,10.134C15.645,10.485 16.375,10.485 16.955,10.134L20.116,8.264C20.517,8.024 20.717,7.614 20.717,7.213L20.717,5.113L17.406,5.113Z" style="fill:url(#_Linear22);fill-rule:nonzero;"/> + <path d="M17.406,5.113L16.955,4.843C16.365,4.492 15.635,4.492 15.055,4.843L14.605,5.113L11.293,5.113L11.293,7.213C11.293,7.624 11.493,8.034 11.894,8.264L15.055,10.134C15.645,10.485 16.375,10.485 16.955,10.134L20.116,8.264C20.517,8.024 20.717,7.614 20.717,7.213L20.717,5.113L17.406,5.113Z" style="fill:url(#_Radial23);fill-rule:nonzero;"/> + <path d="M15.055,2.263L11.894,4.133C11.093,4.603 11.093,5.764 11.894,6.244L15.055,8.115C15.645,8.465 16.375,8.465 16.955,8.115L20.116,6.244C20.917,5.774 20.917,4.613 20.116,4.133L16.955,2.263C16.365,1.912 15.645,1.912 15.055,2.263Z" style="fill:url(#_Linear24);fill-rule:nonzero;"/> + <circle cx="22.492" cy="26.922" r="1.492" style="fill:url(#_Radial25);"/> + <circle cx="24.52" cy="25.857" r="0.536" style="fill:url(#_Radial26);"/> + <g> + <path d="M19.516,13.375C20.234,12.75 22.984,11.922 22.75,9.375C22.125,11.156 21.731,11.677 20.125,12.031C18.922,12.297 18.844,13.234 18.844,13.719L18.953,16.766L19.281,16.766C19.369,16.237 19.18,13.667 19.516,13.375Z" style="fill:url(#_Radial27);fill-rule:nonzero;"/> + </g> + <g> + <path d="M13.828,17.047C13.828,17.185 13.94,17.297 14.078,17.297C14.216,17.297 14.328,17.185 14.328,17.047L13.828,17.047ZM17.283,14.283C17.283,14.421 17.395,14.533 17.533,14.533C17.671,14.533 17.783,14.421 17.783,14.283L17.283,14.283ZM14.328,17.047L14.328,14.283L13.828,14.283L13.828,17.047L14.328,17.047ZM14.328,14.283C14.328,13.975 14.487,13.586 14.769,13.271C15.048,12.958 15.418,12.75 15.813,12.75L15.813,12.25C15.238,12.25 14.741,12.551 14.396,12.938C14.052,13.322 13.828,13.825 13.828,14.283L14.328,14.283ZM15.813,12.75C16.201,12.75 16.568,12.968 16.847,13.291C17.128,13.617 17.283,14.007 17.283,14.283L17.783,14.283C17.783,13.855 17.561,13.354 17.225,12.964C16.886,12.572 16.393,12.25 15.813,12.25L15.813,12.75Z" style="fill:url(#_Linear28);fill-rule:nonzero;"/> + </g> + <g> + <path d="M21.359,16.438C23.75,16.438 27.094,14.859 27.75,11.453" style="fill:none;fill-rule:nonzero;stroke:url(#_Radial29);stroke-width:0.3px;"/> + </g> + <g> + <path d="M23.782,28.281C26,27.688 28.781,25.406 29.625,21.469" style="fill:none;fill-rule:nonzero;stroke:url(#_Radial30);stroke-width:0.3px;"/> + </g> + <g> + <path d="M20.695,5.273C20.695,5.555 20.506,5.938 20.156,6.188C19.806,6.438 17.74,7.563 16.594,8.219C16.345,8.361 15.773,8.453 15.258,8.094" style="fill:none;fill-rule:nonzero;stroke:url(#_Radial31);stroke-width:0.3px;"/> + </g> + </g> + <defs> + <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(28,0,0,28,2,21.125)"><stop offset="0" style="stop-color:rgb(187,183,188);stop-opacity:1"/><stop offset="0.1" style="stop-color:rgb(173,149,194);stop-opacity:1"/><stop offset="0.23" style="stop-color:rgb(195,160,226);stop-opacity:1"/><stop offset="0.8" style="stop-color:rgb(201,166,231);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(216,208,223);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(27.3125,0,0,27.3125,2.8125,20.125)"><stop offset="0" style="stop-color:rgb(190,180,182);stop-opacity:1"/><stop offset="0.16" style="stop-color:rgb(219,206,213);stop-opacity:1"/><stop offset="0.49" style="stop-color:rgb(223,205,210);stop-opacity:1"/><stop offset="0.82" style="stop-color:rgb(223,209,214);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(227,216,205);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.18837e-16,11.7395,-11.7395,7.18837e-16,16,14.823)"><stop offset="0" style="stop-color:rgb(180,157,159);stop-opacity:1"/><stop offset="0.89" style="stop-color:rgb(180,157,159);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(180,157,159);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(23.9786,0,0,23.9786,4.01074,19.1875)"><stop offset="0" style="stop-color:rgb(184,140,67);stop-opacity:1"/><stop offset="0.16" style="stop-color:rgb(198,144,57);stop-opacity:1"/><stop offset="0.33" style="stop-color:rgb(217,159,63);stop-opacity:1"/><stop offset="0.76" style="stop-color:rgb(217,167,52);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(236,211,76);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(23.4268,0,0,23.4268,4.5625,17.875)"><stop offset="0" style="stop-color:rgb(169,110,68);stop-opacity:1"/><stop offset="0.15" style="stop-color:rgb(184,120,76);stop-opacity:1"/><stop offset="0.34" style="stop-color:rgb(186,119,75);stop-opacity:1"/><stop offset="0.59" style="stop-color:rgb(214,140,86);stop-opacity:1"/><stop offset="0.82" style="stop-color:rgb(227,152,93);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(234,173,116);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial6" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.04736e-15,5.34759,-13.25,-5.07285e-15,16,15.7774)"><stop offset="0" style="stop-color:rgb(153,81,44);stop-opacity:1"/><stop offset="0.66" style="stop-color:rgb(153,81,44);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(166,87,47);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial7" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.875,0,0,2.85976,12.25,19.5)"><stop offset="0" style="stop-color:rgb(147,74,40);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(147,74,40);stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(23.4268,0,0,23.4268,4.5625,13.625)"><stop offset="0" style="stop-color:rgb(178,140,76);stop-opacity:1"/><stop offset="0.13" style="stop-color:rgb(185,127,51);stop-opacity:1"/><stop offset="0.28" style="stop-color:rgb(189,118,40);stop-opacity:1"/><stop offset="0.49" style="stop-color:rgb(195,124,40);stop-opacity:1"/><stop offset="0.59" style="stop-color:rgb(208,135,38);stop-opacity:1"/><stop offset="0.7" style="stop-color:rgb(214,146,45);stop-opacity:1"/><stop offset="0.82" style="stop-color:rgb(222,169,51);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(229,206,83);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear9" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(23.3636,0,0,23.3636,4.625,8.8125)"><stop offset="0" style="stop-color:rgb(204,162,117);stop-opacity:1"/><stop offset="0.14" style="stop-color:rgb(214,168,122);stop-opacity:1"/><stop offset="0.72" style="stop-color:rgb(225,177,124);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(230,178,125);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear10" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(19.3405,0,0,19.3405,7.22204,7.96546)"><stop offset="0" style="stop-color:rgb(212,167,120);stop-opacity:1"/><stop offset="0.06" style="stop-color:rgb(212,167,120);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(231,178,125);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial11" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.5,4.3125,-3.88579,4.05475,9.875,9.8125)"><stop offset="0" style="stop-color:rgb(179,130,88);stop-opacity:1"/><stop offset="0.77" style="stop-color:rgb(187,143,101);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(187,143,101);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial12" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.375,0,0,4.25084,12.8125,15.4375)"><stop offset="0" style="stop-color:rgb(175,119,78);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(175,119,78);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial13" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-12.4374,5.12507,-4.74283,-11.5098,20.5,10.0625)"><stop offset="0" style="stop-color:rgb(157,98,60);stop-opacity:1"/><stop offset="0.03" style="stop-color:rgb(157,98,60);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(130,82,62);stop-opacity:1"/></radialGradient> + <linearGradient id="_Linear14" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(13.5225,0,0,13.5225,9.625,11.875)"><stop offset="0" style="stop-color:rgb(128,75,51);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(159,94,62);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial15" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-12.1805,4.89355,-4.44716,-11.0694,20.4072,9.95537)"><stop offset="0" style="stop-color:rgb(157,98,60);stop-opacity:1"/><stop offset="0.03" style="stop-color:rgb(157,98,60);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(130,82,62);stop-opacity:1"/></radialGradient> + <radialGradient id="_Radial16" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.45827,1.87983,-1.00439,1.84774,13.6437,9.00053)"><stop offset="0" style="stop-color:rgb(118,67,38);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(115,62,33);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial17" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-3.62501,4.18749,-4.06664,-3.5204,10.75,6.75)"><stop offset="0" style="stop-color:rgb(114,77,61);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(114,76,59);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial18" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.37499,-0.625018,0.413551,-1.57144,18.6563,17.6875)"><stop offset="0" style="stop-color:rgb(138,70,84);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(140,71,86);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial19" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.29214e-15,-3.375,1.27037,-4.8637e-16,13.1562,19.875)"><stop offset="0" style="stop-color:rgb(136,75,79);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(134,68,83);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial20" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.1875,1.09374,-0.673499,-0.115457,13.9063,16.0625)"><stop offset="0" style="stop-color:rgb(163,118,101);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(165,120,103);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.281246,0.937501,-0.651233,-0.195367,18.8906,15.7344)"><stop offset="0" style="stop-color:rgb(166,121,104);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(168,123,104);stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear22" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(9.2792,0,0,9.2792,11.4375,7.48849)"><stop offset="0" style="stop-color:rgb(199,162,43);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(232,193,46);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial23" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.14857e-15,3,-3.44251,-1.31799e-15,16.005,10.9375)"><stop offset="0" style="stop-color:rgb(219,165,41);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(217,163,43);stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear24" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.1641,5.02344,-5.02344,3.1641,14.3984,2.60156)"><stop offset="0" style="stop-color:rgb(207,186,58);stop-opacity:1"/><stop offset="0.01" style="stop-color:rgb(207,186,58);stop-opacity:1"/><stop offset="0.09" style="stop-color:rgb(213,193,55);stop-opacity:1"/><stop offset="0.93" style="stop-color:rgb(231,206,55);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(231,206,55);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial25" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.98437,2.28517e-15,-2.16435e-15,-2.82658,23.5774,26.9224)"><stop offset="0" style="stop-color:rgb(160,103,64);stop-opacity:1"/><stop offset="0.71" style="stop-color:rgb(142,81,46);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(142,81,46);stop-opacity:1"/></radialGradient> + <radialGradient id="_Radial26" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.07227,8.21052e-16,-7.77636e-16,-1.01557,24.9104,25.8569)"><stop offset="0" style="stop-color:rgb(160,103,64);stop-opacity:1"/><stop offset="0.71" style="stop-color:rgb(142,81,46);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(142,81,46);stop-opacity:1"/></radialGradient> + <radialGradient id="_Radial27" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.98808e-15,7.80469,-4.14003,-1.58504e-15,20.8039,13.0703)"><stop offset="0" style="stop-color:rgb(173,124,104);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(172,123,101);stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear28" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.7188,0,0,3.7188,14.0312,13.5027)"><stop offset="0" style="stop-color:rgb(162,119,100);stop-opacity:1"/><stop offset="0.46" style="stop-color:rgb(156,111,94);stop-opacity:1"/><stop offset="0.62" style="stop-color:rgb(111,63,46);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(111,63,46);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial29" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.53125,-2.40625,1.27457,1.34078,25.7188,14.5)"><stop offset="0" style="stop-color:rgb(239,185,146);stop-opacity:1"/><stop offset="0.45" style="stop-color:rgb(241,189,146);stop-opacity:1"/><stop offset="0.99" style="stop-color:rgb(240,188,143);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(240,188,143);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.50413,-4.40625,2.33395,1.8561,26.9687,25.875)"><stop offset="0" style="stop-color:rgb(235,225,240);stop-opacity:1"/><stop offset="0.45" style="stop-color:rgb(235,226,240);stop-opacity:1"/><stop offset="0.99" style="stop-color:rgb(232,223,236);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(232,223,236);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial31" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.88719,-1.6592,0.823999,1.43385,18.1875,7.3125)"><stop offset="0" style="stop-color:rgb(240,209,81);stop-opacity:1"/><stop offset="0.45" style="stop-color:rgb(242,211,89);stop-opacity:1"/><stop offset="0.99" style="stop-color:rgb(243,211,87);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(243,211,87);stop-opacity:0"/></radialGradient> + </defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/shaved_ice_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/shaved_ice_color.svg new file mode 100644 index 0000000000..64dfef8e05 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/shaved_ice_color.svg @@ -0,0 +1,161 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M16 22C21.5228 22 26 17.5228 26 12C26 6.47715 21.5228 2 16 2C10.4772 2 6 6.47715 6 12C6 17.5228 10.4772 22 16 22Z" fill="#CDA3AF"/> +<path d="M16 22C21.5228 22 26 17.5228 26 12C26 6.47715 21.5228 2 16 2C10.4772 2 6 6.47715 6 12C6 17.5228 10.4772 22 16 22Z" fill="url(#paint0_radial_18_28637)"/> +<g filter="url(#filter0_f_18_28637)"> +<path d="M8.80999 13.595C9.03999 12.855 9.72999 12.375 10.49 12.375C11.25 12.375 12.3325 12.865 12.5625 13.585C13.0725 15.205 14.19 15.7188 15.98 15.7188C17.77 15.7188 18.9275 15.205 19.4375 13.595C19.6675 12.865 20.71 12.385 21.47 12.385H21.51C22.27 12.385 23.2387 12.4987 23.4688 13.2188C23.8088 14.2888 24.0838 14.6337 25.0938 15.0938C23.5238 2.90129 7.99999 6.46882 8.80999 13.595Z" fill="#E17CA3"/> +<path d="M8.80999 13.595C9.03999 12.855 9.72999 12.375 10.49 12.375C11.25 12.375 12.3325 12.865 12.5625 13.585C13.0725 15.205 14.19 15.7188 15.98 15.7188C17.77 15.7188 18.9275 15.205 19.4375 13.595C19.6675 12.865 20.71 12.385 21.47 12.385H21.51C22.27 12.385 23.2387 12.4987 23.4688 13.2188C23.8088 14.2888 24.0838 14.6337 25.0938 15.0938C23.5238 2.90129 7.99999 6.46882 8.80999 13.595Z" fill="url(#paint1_radial_18_28637)"/> +<path d="M8.80999 13.595C9.03999 12.855 9.72999 12.375 10.49 12.375C11.25 12.375 12.3325 12.865 12.5625 13.585C13.0725 15.205 14.19 15.7188 15.98 15.7188C17.77 15.7188 18.9275 15.205 19.4375 13.595C19.6675 12.865 20.71 12.385 21.47 12.385H21.51C22.27 12.385 23.2387 12.4987 23.4688 13.2188C23.8088 14.2888 24.0838 14.6337 25.0938 15.0938C23.5238 2.90129 7.99999 6.46882 8.80999 13.595Z" fill="url(#paint2_linear_18_28637)"/> +<path d="M8.80999 13.595C9.03999 12.855 9.72999 12.375 10.49 12.375C11.25 12.375 12.3325 12.865 12.5625 13.585C13.0725 15.205 14.19 15.7188 15.98 15.7188C17.77 15.7188 18.9275 15.205 19.4375 13.595C19.6675 12.865 20.71 12.385 21.47 12.385H21.51C22.27 12.385 23.2387 12.4987 23.4688 13.2188C23.8088 14.2888 24.0838 14.6337 25.0938 15.0938C23.5238 2.90129 7.99999 6.46882 8.80999 13.595Z" fill="url(#paint3_radial_18_28637)"/> +<path d="M8.80999 13.595C9.03999 12.855 9.72999 12.375 10.49 12.375C11.25 12.375 12.3325 12.865 12.5625 13.585C13.0725 15.205 14.19 15.7188 15.98 15.7188C17.77 15.7188 18.9275 15.205 19.4375 13.595C19.6675 12.865 20.71 12.385 21.47 12.385H21.51C22.27 12.385 23.2387 12.4987 23.4688 13.2188C23.8088 14.2888 24.0838 14.6337 25.0938 15.0938C23.5238 2.90129 7.99999 6.46882 8.80999 13.595Z" fill="url(#paint4_radial_18_28637)"/> +<path d="M8.80999 13.595C9.03999 12.855 9.72999 12.375 10.49 12.375C11.25 12.375 12.3325 12.865 12.5625 13.585C13.0725 15.205 14.19 15.7188 15.98 15.7188C17.77 15.7188 18.9275 15.205 19.4375 13.595C19.6675 12.865 20.71 12.385 21.47 12.385H21.51C22.27 12.385 23.2387 12.4987 23.4688 13.2188C23.8088 14.2888 24.0838 14.6337 25.0938 15.0938C23.5238 2.90129 7.99999 6.46882 8.80999 13.595Z" fill="url(#paint5_linear_18_28637)"/> +</g> +<path d="M16 2C10.48 2 6 6.48 6 12C6 13.28 6.24 14.5 6.68 15.63C7.69 15.16 8.47 14.29 8.81 13.22C9.04 12.48 9.73 12 10.49 12C11.25 12 11.94 12.49 12.17 13.21C12.68 14.83 14.19 16 15.98 16C17.77 16 19.28 14.83 19.79 13.22C20.02 12.49 20.71 12.01 21.47 12.01H21.51C22.27 12.01 22.96 12.5 23.19 13.22C23.53 14.29 24.31 15.17 25.32 15.63C25.76 14.5 26 13.28 26 12C25.99 6.48 21.52 2 16 2Z" fill="#E17CA3"/> +<path d="M16 2C10.48 2 6 6.48 6 12C6 13.28 6.24 14.5 6.68 15.63C7.69 15.16 8.47 14.29 8.81 13.22C9.04 12.48 9.73 12 10.49 12C11.25 12 11.94 12.49 12.17 13.21C12.68 14.83 14.19 16 15.98 16C17.77 16 19.28 14.83 19.79 13.22C20.02 12.49 20.71 12.01 21.47 12.01H21.51C22.27 12.01 22.96 12.5 23.19 13.22C23.53 14.29 24.31 15.17 25.32 15.63C25.76 14.5 26 13.28 26 12C25.99 6.48 21.52 2 16 2Z" fill="url(#paint6_radial_18_28637)"/> +<path d="M16 2C10.48 2 6 6.48 6 12C6 13.28 6.24 14.5 6.68 15.63C7.69 15.16 8.47 14.29 8.81 13.22C9.04 12.48 9.73 12 10.49 12C11.25 12 11.94 12.49 12.17 13.21C12.68 14.83 14.19 16 15.98 16C17.77 16 19.28 14.83 19.79 13.22C20.02 12.49 20.71 12.01 21.47 12.01H21.51C22.27 12.01 22.96 12.5 23.19 13.22C23.53 14.29 24.31 15.17 25.32 15.63C25.76 14.5 26 13.28 26 12C25.99 6.48 21.52 2 16 2Z" fill="url(#paint7_linear_18_28637)"/> +<path d="M16 2C10.48 2 6 6.48 6 12C6 13.28 6.24 14.5 6.68 15.63C7.69 15.16 8.47 14.29 8.81 13.22C9.04 12.48 9.73 12 10.49 12C11.25 12 11.94 12.49 12.17 13.21C12.68 14.83 14.19 16 15.98 16C17.77 16 19.28 14.83 19.79 13.22C20.02 12.49 20.71 12.01 21.47 12.01H21.51C22.27 12.01 22.96 12.5 23.19 13.22C23.53 14.29 24.31 15.17 25.32 15.63C25.76 14.5 26 13.28 26 12C25.99 6.48 21.52 2 16 2Z" fill="url(#paint8_radial_18_28637)"/> +<path d="M16 2C10.48 2 6 6.48 6 12C6 13.28 6.24 14.5 6.68 15.63C7.69 15.16 8.47 14.29 8.81 13.22C9.04 12.48 9.73 12 10.49 12C11.25 12 11.94 12.49 12.17 13.21C12.68 14.83 14.19 16 15.98 16C17.77 16 19.28 14.83 19.79 13.22C20.02 12.49 20.71 12.01 21.47 12.01H21.51C22.27 12.01 22.96 12.5 23.19 13.22C23.53 14.29 24.31 15.17 25.32 15.63C25.76 14.5 26 13.28 26 12C25.99 6.48 21.52 2 16 2Z" fill="url(#paint9_radial_18_28637)"/> +<path d="M16 2C10.48 2 6 6.48 6 12C6 13.28 6.24 14.5 6.68 15.63C7.69 15.16 8.47 14.29 8.81 13.22C9.04 12.48 9.73 12 10.49 12C11.25 12 11.94 12.49 12.17 13.21C12.68 14.83 14.19 16 15.98 16C17.77 16 19.28 14.83 19.79 13.22C20.02 12.49 20.71 12.01 21.47 12.01H21.51C22.27 12.01 22.96 12.5 23.19 13.22C23.53 14.29 24.31 15.17 25.32 15.63C25.76 14.5 26 13.28 26 12C25.99 6.48 21.52 2 16 2Z" fill="url(#paint10_radial_18_28637)"/> +<path d="M25.1 8C25.76 8 26.19 8.69 25.9 9.28L21.65 18H19.67L24.3 8.5C24.45 8.19 24.77 8 25.1 8Z" fill="url(#paint11_linear_18_28637)"/> +<g filter="url(#filter1_f_18_28637)"> +<path d="M20.5625 18.4688L25.2812 8.90625" stroke="url(#paint12_linear_18_28637)" stroke-width="0.75" stroke-linecap="round"/> +</g> +<path d="M8 18L15.41 29.68C15.68 30.11 16.32 30.11 16.59 29.68L24 18H8Z" fill="url(#paint13_radial_18_28637)"/> +<path d="M8 18L15.41 29.68C15.68 30.11 16.32 30.11 16.59 29.68L24 18H8Z" fill="url(#paint14_linear_18_28637)"/> +<g filter="url(#filter2_f_18_28637)"> +<path d="M13.2962 6.15625C13.591 6.15625 13.83 5.97477 13.83 5.67999C13.83 5.38521 13.591 5.07812 13.2962 5.07812C13.0015 5.07812 12.4219 5.59584 12.4219 5.89062C12.4219 6.18541 13.0015 6.15625 13.2962 6.15625Z" fill="url(#paint15_radial_18_28637)"/> +</g> +<g filter="url(#filter3_f_18_28637)"> +<path d="M11.2962 7.23523C11.591 7.23523 11.83 7.05375 11.83 6.75897C11.83 6.46419 11.591 6.1571 11.2962 6.1571C11.0015 6.1571 10.4219 6.67482 10.4219 6.9696C10.4219 7.26438 11.0015 7.23523 11.2962 7.23523Z" fill="url(#paint16_radial_18_28637)"/> +</g> +<g filter="url(#filter4_f_18_28637)"> +<path d="M13.2962 8.2179C13.591 8.2179 13.83 8.03641 13.83 7.74163C13.83 7.44685 13.591 7.13977 13.2962 7.13977C13.0015 7.13977 12.4219 7.65749 12.4219 7.95227C12.4219 8.24705 13.0015 8.2179 13.2962 8.2179Z" fill="url(#paint17_radial_18_28637)"/> +</g> +<path d="M13.4837 6.05748C13.7785 6.05748 14.0175 5.81852 14.0175 5.52374C14.0175 5.22896 13.7785 4.98999 13.4837 4.98999C13.189 4.98999 12.95 5.22896 12.95 5.52374C12.95 5.81852 13.189 6.05748 13.4837 6.05748Z" fill="url(#paint18_radial_18_28637)"/> +<path d="M11.4994 7.04186C11.7941 7.04186 12.0331 6.80289 12.0331 6.50811C12.0331 6.21333 11.7941 5.97437 11.4994 5.97437C11.2046 5.97437 10.9656 6.21333 10.9656 6.50811C10.9656 6.80289 11.2046 7.04186 11.4994 7.04186Z" fill="#E5D6EB"/> +<path d="M11.4994 7.04186C11.7941 7.04186 12.0331 6.80289 12.0331 6.50811C12.0331 6.21333 11.7941 5.97437 11.4994 5.97437C11.2046 5.97437 10.9656 6.21333 10.9656 6.50811C10.9656 6.80289 11.2046 7.04186 11.4994 7.04186Z" fill="url(#paint19_radial_18_28637)"/> +<path d="M13.4837 8.10936C13.7785 8.10936 14.0175 7.8704 14.0175 7.57562C14.0175 7.28084 13.7785 7.04187 13.4837 7.04187C13.189 7.04187 12.95 7.28084 12.95 7.57562C12.95 7.8704 13.189 8.10936 13.4837 8.10936Z" fill="url(#paint20_radial_18_28637)"/> +<g filter="url(#filter5_f_18_28637)"> +<ellipse cx="25.4492" cy="8.65625" rx="0.324167" ry="0.34375" fill="#74D8FF"/> +</g> +<defs> +<filter id="filter0_f_18_28637" x="7.77939" y="6.07935" width="18.3144" height="10.6394" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_28637"/> +</filter> +<filter id="filter1_f_18_28637" x="19.4374" y="7.78113" width="6.9689" height="11.8127" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.375" result="effect1_foregroundBlur_18_28637"/> +</filter> +<filter id="filter2_f_18_28637" x="12.1719" y="4.82812" width="1.90811" height="1.57898" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_28637"/> +</filter> +<filter id="filter3_f_18_28637" x="10.1719" y="5.9071" width="1.90811" height="1.57898" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_28637"/> +</filter> +<filter id="filter4_f_18_28637" x="12.1719" y="6.88977" width="1.90811" height="1.57898" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_28637"/> +</filter> +<filter id="filter5_f_18_28637" x="24.625" y="7.8125" width="1.64833" height="1.6875" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.25" result="effect1_foregroundBlur_18_28637"/> +</filter> +<radialGradient id="paint0_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21 12) rotate(119.358) scale(11.4735)"> +<stop stop-color="#FFEDE4"/> +<stop offset="0.451632" stop-color="#FFDBDF"/> +<stop offset="1" stop-color="#D8AEBD" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint1_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21 7.75) rotate(129.523) scale(12.9639 14.3163)"> +<stop stop-color="#FFBAEA"/> +<stop offset="0.451156" stop-color="#FF97E4"/> +<stop offset="1" stop-color="#FF83E1" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint2_linear_18_28637" x1="16" y1="2.375" x2="10" y2="17.125" gradientUnits="userSpaceOnUse"> +<stop offset="0.399003" stop-color="#FF80E1" stop-opacity="0"/> +<stop offset="0.953305" stop-color="#E153BB"/> +</linearGradient> +<radialGradient id="paint3_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.25 14.5) rotate(140.793) scale(6.1301 2.87771)"> +<stop stop-color="#FF74DE"/> +<stop offset="1" stop-color="#FF73DB" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint4_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(10.5 16.375) scale(5.5 8.8125)"> +<stop offset="0.465909" stop-color="#DB62C1"/> +<stop offset="0.545455" stop-color="#DE60C3" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint5_linear_18_28637" x1="22" y1="13.1875" x2="8.77939" y2="13.1875" gradientUnits="userSpaceOnUse"> +<stop stop-color="#E9B4AF"/> +<stop offset="0.888764" stop-color="#C9939B"/> +</linearGradient> +<radialGradient id="paint6_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21 7.375) rotate(129.523) scale(12.9639 14.3163)"> +<stop stop-color="#FFBAEA"/> +<stop offset="0.451156" stop-color="#FF97E4"/> +<stop offset="1" stop-color="#FF83E1" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint7_linear_18_28637" x1="16" y1="2" x2="10" y2="16.75" gradientUnits="userSpaceOnUse"> +<stop offset="0.399003" stop-color="#FF80E1" stop-opacity="0"/> +<stop offset="0.953305" stop-color="#E153BB"/> +</linearGradient> +<radialGradient id="paint8_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.25 14.125) rotate(140.793) scale(6.1301 2.87771)"> +<stop stop-color="#FF74DE"/> +<stop offset="1" stop-color="#FF73DB" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint9_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(10.5 16) scale(5.5 8.8125)"> +<stop offset="0.465909" stop-color="#DB62C1"/> +<stop offset="0.545455" stop-color="#DE60C3" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint10_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(21.6875 15.5625) scale(4.9375 8.07417)"> +<stop offset="0.414524" stop-color="#FF67CC"/> +<stop offset="0.50886" stop-color="#DE60C3" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint11_linear_18_28637" x1="20.0625" y1="18" x2="24.875" y2="8" gradientUnits="userSpaceOnUse"> +<stop stop-color="#2E9CF8"/> +<stop offset="1" stop-color="#42B6F8"/> +</linearGradient> +<linearGradient id="paint12_linear_18_28637" x1="25.1875" y1="9.4375" x2="20.4063" y2="18.5" gradientUnits="userSpaceOnUse"> +<stop stop-color="#5AC6FF"/> +<stop offset="1" stop-color="#3FACFF"/> +</linearGradient> +<radialGradient id="paint13_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(10.875 25.25) rotate(-31.6755) scale(13.8067 26.8563)"> +<stop offset="0.137131" stop-color="#518EF4"/> +<stop offset="0.415574" stop-color="#60BCFF"/> +<stop offset="0.680287" stop-color="#62D2FF"/> +<stop offset="1" stop-color="#5FD4FF"/> +</radialGradient> +<linearGradient id="paint14_linear_18_28637" x1="20.8125" y1="23.3125" x2="19.875" y2="22.6875" gradientUnits="userSpaceOnUse"> +<stop offset="0.138462" stop-color="#64BDFF"/> +<stop offset="1" stop-color="#64B6FF" stop-opacity="0"/> +</linearGradient> +<radialGradient id="paint15_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.2031 5.61759) rotate(153.418) scale(1.20556 1.11753)"> +<stop stop-color="#CD7BA2"/> +<stop offset="1" stop-color="#CD7BA2" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint16_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.2031 6.69656) rotate(153.418) scale(1.20556 1.11753)"> +<stop stop-color="#CD7BA2"/> +<stop offset="1" stop-color="#CD7BA2" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint17_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.2031 7.67923) rotate(153.418) scale(1.20556 1.11753)"> +<stop offset="0.0843161" stop-color="#CB71AE"/> +<stop offset="1" stop-color="#CD7BA2" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint18_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.7188 5.29688) rotate(123.32) scale(0.910235)"> +<stop offset="0.159787" stop-color="#FBEDFD"/> +<stop offset="0.854934" stop-color="#E2C9E5"/> +</radialGradient> +<radialGradient id="paint19_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.7344 6.28125) rotate(123.32) scale(0.910235)"> +<stop offset="0.159787" stop-color="#FBEDFD"/> +<stop offset="0.854934" stop-color="#E2C9E5"/> +</radialGradient> +<radialGradient id="paint20_radial_18_28637" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.7188 7.34875) rotate(123.32) scale(0.910235)"> +<stop offset="0.159787" stop-color="#FBEDFD"/> +<stop offset="0.854934" stop-color="#E2C9E5"/> +</radialGradient> +</defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/shortcake_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/shortcake_color.svg new file mode 100644 index 0000000000..66e8f91f19 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/shortcake_color.svg @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <g transform="matrix(1,0,0,1,0,0.528489)"> + <path d="M3.627,29.819L28.256,22.752L29.044,22.028L29.044,7.978L28.022,5.999L2.073,13.343L2.073,28.287C2.073,29.512 2.568,30.072 3.627,29.819Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/> + <path d="M3.627,29.819L28.256,22.752L29.044,22.028L29.044,7.978L28.022,5.999L2.073,13.343L2.073,28.287C2.073,29.512 2.568,30.072 3.627,29.819Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/> + <path d="M3.627,29.819L28.256,22.752L29.044,22.028L29.044,7.978L28.022,5.999L2.073,13.343L2.073,28.287C2.073,29.512 2.568,30.072 3.627,29.819Z" style="fill:url(#_Linear3);fill-rule:nonzero;"/> + <path d="M3.627,29.819L28.256,22.752L29.044,22.028L29.044,7.978L28.022,5.999L2.073,13.343L2.073,28.287C2.073,29.512 2.568,30.072 3.627,29.819Z" style="fill:url(#_Linear4);fill-rule:nonzero;"/> + <path d="M3.627,29.819L28.256,22.752L29.044,22.028L29.044,7.978L28.022,5.999L2.073,13.343L2.073,28.287C2.073,29.512 2.568,30.072 3.627,29.819Z" style="fill:url(#_Linear5);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Linear6);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Linear7);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Linear8);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Linear9);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Radial10);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Linear11);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Linear12);fill-rule:nonzero;"/> + <path d="M13.034,2.508L3.064,11.731C1.118,13.393 2.129,14.542 3.998,14.13L27.024,7.524C27.616,7.383 27.99,7.338 27.99,8.023L27.99,12.042C27.99,12.73 28.054,13.088 27.616,13.226C27.616,13.226 5.411,19.92 4.933,20.05C4.455,20.18 3.393,20.378 3.064,20.33C2.734,20.282 2.316,20.05 2.129,20.05C1.942,20.05 1.942,20.158 1.942,20.673L1.942,22.84C1.942,23.003 2.083,23.108 2.083,23.108C2.61,23.445 3.335,23.59 3.998,23.415L27.243,16.685C27.616,16.591 27.99,16.841 27.99,17.308L27.99,22.606C27.99,22.928 28.185,22.945 28.322,22.928C29.314,22.642 30,22.055 30,21.047L30,8.023C30,7.17 29.383,5.745 27.99,5.312L16.96,2.726C15.913,2.508 13.888,1.847 13.034,2.508Z" style="fill:url(#_Radial13);fill-rule:nonzero;"/> + <g> + <path d="M12.664,7.578C12.024,7.578 11.803,7.217 11.891,6.554C12.556,-2.951 20.734,7.578 14.627,7.578L12.664,7.578Z" style="fill:rgb(213,45,38);fill-rule:nonzero;"/> + <path d="M12.664,7.578C12.024,7.578 11.803,7.217 11.891,6.554C12.556,-2.951 20.734,7.578 14.627,7.578L12.664,7.578Z" style="fill:rgb(162,56,40);fill-rule:nonzero;"/> + </g> + <path d="M12.024,4.517C12.15,3.889 12.359,2.115 14.54,1.681L16.896,2.888L17.754,5.463C16.95,7.624 15.291,7.47 14.627,7.47L12.664,7.47C12.024,7.47 11.66,7.106 11.748,6.437L12.024,4.517Z" style="fill:rgb(213,45,38);fill-rule:nonzero;"/> + <path d="M12.024,4.517C12.15,3.889 12.359,2.115 14.54,1.681L16.896,2.888L17.754,5.463C16.95,7.624 15.291,7.47 14.627,7.47L12.664,7.47C12.024,7.47 11.66,7.106 11.748,6.437L12.024,4.517Z" style="fill:url(#_Radial14);fill-rule:nonzero;"/> + <g> + <path d="M16.898,4.469C16.459,3.974 16.542,3.199 16.542,3.199C16.542,3.199 15.848,3.183 15.5,2.805C13.208,0.515 16.006,2.044 16.727,2.687C17.664,3.523 17.828,4.992 17.828,4.992C17.751,5.087 17.984,5.484 17.734,5.344C17.484,5.203 16.898,4.469 16.898,4.469Z" style="fill:rgb(141,197,39);fill-rule:nonzero;"/> + <path d="M16.898,4.469C16.459,3.974 16.542,3.199 16.542,3.199C16.542,3.199 15.848,3.183 15.5,2.805C13.208,0.515 16.006,2.044 16.727,2.687C17.664,3.523 17.828,4.992 17.828,4.992C17.751,5.087 17.984,5.484 17.734,5.344C17.484,5.203 16.898,4.469 16.898,4.469Z" style="fill:rgb(103,42,23);fill-rule:nonzero;"/> + </g> + <path d="M16.94,4.372C16.5,3.877 16.62,3.121 16.62,3.121C16.62,3.121 15.906,3.121 15.558,2.743L14.365,1.507C14.301,1.419 14.365,1.323 14.453,1.259C14.453,1.259 15.154,0.728 16.242,1.419C16.844,1.863 17.988,3.281 18.278,3.877C18.805,4.777 18.132,5.55 18.132,5.55C18.055,5.645 17.965,5.672 17.856,5.55L16.94,4.372Z" style="fill:rgb(141,197,39);fill-rule:nonzero;"/> + <path d="M16.94,4.372C16.5,3.877 16.62,3.121 16.62,3.121C16.62,3.121 15.906,3.121 15.558,2.743L14.365,1.507C14.301,1.419 14.365,1.323 14.453,1.259C14.453,1.259 15.154,0.728 16.242,1.419C16.844,1.863 17.988,3.281 18.278,3.877C18.805,4.777 18.132,5.55 18.132,5.55C18.055,5.645 17.965,5.672 17.856,5.55L16.94,4.372Z" style="fill:url(#_Radial15);fill-rule:nonzero;"/> + </g> + <defs> + <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(24.25,-0.0312,0.0312,24.25,1.6875,18.4687)"><stop offset="0" style="stop-color:rgb(202,149,127);stop-opacity:1"/><stop offset="0.01" style="stop-color:rgb(202,149,127);stop-opacity:1"/><stop offset="0.05" style="stop-color:rgb(255,180,164);stop-opacity:1"/><stop offset="0.08" style="stop-color:rgb(255,214,176);stop-opacity:1"/><stop offset="0.14" style="stop-color:rgb(255,217,176);stop-opacity:1"/><stop offset="0.52" style="stop-color:rgb(255,193,138);stop-opacity:1"/><stop offset="0.92" style="stop-color:rgb(255,157,80);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,157,80);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.5583,5.125,-5.125,1.5583,14,21.6875)"><stop offset="0" style="stop-color:rgb(255,179,123);stop-opacity:0"/><stop offset="0.78" style="stop-color:rgb(255,179,123);stop-opacity:0"/><stop offset="0.89" style="stop-color:rgb(255,156,129);stop-opacity:1"/><stop offset="0.93" style="stop-color:rgb(246,127,157);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(246,127,157);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.125,4.0625,-4.0625,1.125,19.875,15.1875)"><stop offset="0" style="stop-color:rgb(240,132,86);stop-opacity:0"/><stop offset="0.26" style="stop-color:rgb(240,132,86);stop-opacity:0"/><stop offset="0.76" style="stop-color:rgb(228,121,75);stop-opacity:1"/><stop offset="0.92" style="stop-color:rgb(228,121,75);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(228,121,75);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.8792,3.125,-3.125,0.8792,15.5583,8.0625)"><stop offset="0" style="stop-color:rgb(240,132,86);stop-opacity:0"/><stop offset="0.26" style="stop-color:rgb(240,132,86);stop-opacity:0"/><stop offset="0.76" style="stop-color:rgb(228,121,75);stop-opacity:1"/><stop offset="0.92" style="stop-color:rgb(228,121,75);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(228,121,75);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.92737,0,0,1.92737,2.07263,20.5)"><stop offset="0" style="stop-color:rgb(194,150,119);stop-opacity:1"/><stop offset="0.58" style="stop-color:rgb(254,179,163);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,206,177);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.6562,22.5312,-22.5312,6.6562,10.9688,3.46875)"><stop offset="0" style="stop-color:rgb(243,207,162);stop-opacity:1"/><stop offset="0.26" style="stop-color:rgb(243,207,162);stop-opacity:1"/><stop offset="0.3" style="stop-color:rgb(255,240,203);stop-opacity:1"/><stop offset="0.32" style="stop-color:rgb(255,213,206);stop-opacity:1"/><stop offset="0.55" style="stop-color:rgb(255,214,207);stop-opacity:1"/><stop offset="0.6" style="stop-color:rgb(255,254,226);stop-opacity:1"/><stop offset="0.62" style="stop-color:rgb(255,228,229);stop-opacity:1"/><stop offset="0.97" style="stop-color:rgb(255,227,227);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(249,170,224);stop-opacity:1"/></linearGradient> + <linearGradient id="_Linear7" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.74547,0,0,1.74547,1.94203,21.625)"><stop offset="0" style="stop-color:rgb(198,156,155);stop-opacity:1"/><stop offset="0.14" style="stop-color:rgb(221,164,181);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(248,182,211);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.45313,0.48438,-0.48438,0.45313,8.5,6.54687)"><stop offset="0" style="stop-color:rgb(183,162,135);stop-opacity:1"/><stop offset="0.82" style="stop-color:rgb(207,177,140);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(207,177,140);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear9" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.0782,0.35156,-0.35156,-0.0782,21.2969,3.67188)"><stop offset="0" style="stop-color:rgb(183,162,135);stop-opacity:1"/><stop offset="0.82" style="stop-color:rgb(207,177,140);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(207,177,140);stop-opacity:0"/></linearGradient> + <radialGradient id="_Radial10" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.53191e-15,6.61319,-3.0625,-1.1725e-15,28.9375,12.8556)"><stop offset="0" style="stop-color:rgb(255,222,211);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,222,213);stop-opacity:0"/></radialGradient> + <linearGradient id="_Linear11" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.4375,2.98508e-16,-2.98508e-16,-2.4375,30,12.8556)"><stop offset="0" style="stop-color:rgb(214,192,170);stop-opacity:1"/><stop offset="0.04" style="stop-color:rgb(246,212,188);stop-opacity:1"/><stop offset="0.19" style="stop-color:rgb(255,222,212);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,222,211);stop-opacity:0"/></linearGradient> + <linearGradient id="_Linear12" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9218,2.2343,-2.2343,0.9218,27.6094,20.9844)"><stop offset="0" style="stop-color:rgb(255,214,227);stop-opacity:0"/><stop offset="0.29" style="stop-color:rgb(255,214,227);stop-opacity:0"/><stop offset="0.59" style="stop-color:rgb(244,168,220);stop-opacity:0"/><stop offset="0.95" style="stop-color:rgb(229,150,221);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(229,150,221);stop-opacity:1"/></linearGradient> + <radialGradient id="_Radial13" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.0624985,1.78125,-4.40342,0.154502,13.8281,6.6875)"><stop offset="0" style="stop-color:rgb(178,129,98);stop-opacity:1"/><stop offset="0.52" style="stop-color:rgb(178,129,98);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(194,154,121);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial14" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.81247,4.09702,-4.25876,-1.88402,16.1875,3.375)"><stop offset="0" style="stop-color:rgb(255,106,131);stop-opacity:1"/><stop offset="0.14" style="stop-color:rgb(255,106,131);stop-opacity:1"/><stop offset="0.52" style="stop-color:rgb(238,45,71);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(243,47,89);stop-opacity:0"/></radialGradient> + <radialGradient id="_Radial15" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-8.743e-16,2.28362,-2.07009,-7.92548e-16,16.4093,3.34783)"><stop offset="0" style="stop-color:rgb(177,235,103);stop-opacity:1"/><stop offset="0.9" style="stop-color:rgb(175,234,99);stop-opacity:0"/><stop offset="1" style="stop-color:rgb(175,234,99);stop-opacity:0"/></radialGradient> + </defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/soft_ice_cream_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/soft_ice_cream_color.svg new file mode 100644 index 0000000000..37be9c0cb3 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/soft_ice_cream_color.svg @@ -0,0 +1,140 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M14.8021 18.0831H14.0721H12.0221H11.2921V20.1093C11.2921 20.1093 11.7321 20.0387 11.9421 20.2907C12.0521 20.4218 12.0321 20.7444 12.0321 20.7444C12.0321 21.3189 12.4921 21.7726 13.0521 21.7726C13.6121 21.7726 14.0721 21.3089 14.0721 20.7444C14.0721 20.7444 14.0621 20.3411 14.1821 20.1395C14.3321 19.8774 14.6121 19.8674 14.6121 19.8674L14.8021 18.0831Z" fill="url(#paint0_radial_18_28477)"/> +<path d="M15.7121 22.6293H10.7021L11.5221 29.2319C11.5721 29.6654 11.9421 29.988 12.3721 29.988H15.7221H19.9821C20.4121 29.988 20.7721 29.6654 20.8321 29.2319L21.6521 22.6293H15.7121Z" fill="url(#paint1_linear_18_28477)"/> +<path d="M15.7121 22.6293H10.7021L11.5221 29.2319C11.5721 29.6654 11.9421 29.988 12.3721 29.988H15.7221H19.9821C20.4121 29.988 20.7721 29.6654 20.8321 29.2319L21.6521 22.6293H15.7121Z" fill="url(#paint2_linear_18_28477)"/> +<g opacity="0.5"> +<path d="M19.8421 22.6293H18.4421L16.2321 24.857L14.0221 22.6293H12.6221L10.9021 24.3631L11.2221 26.9739L12.6721 28.4356L11.5921 29.5243C11.7321 29.7964 12.0221 29.988 12.3521 29.988H12.4221L13.3121 29.0908L14.2021 29.988H15.4921L13.9821 28.4356L16.2421 26.1574L18.5021 28.4356L16.9621 29.988H18.2521L19.1421 29.0908L20.0321 29.988C20.3721 29.9678 20.6521 29.746 20.7721 29.4335L19.7821 28.4356L21.0821 27.1251L21.2621 25.6433L19.1321 27.7904L16.8721 25.5123L19.1321 23.2341L21.2921 25.4115L21.4321 24.2522L19.8421 22.6293ZM13.3321 27.7804L11.0721 25.5022L13.3321 23.224L15.5921 25.5022L13.3321 27.7804Z" fill="url(#paint3_linear_18_28477)"/> +<path d="M19.8421 22.6293H18.4421L16.2321 24.857L14.0221 22.6293H12.6221L10.9021 24.3631L11.2221 26.9739L12.6721 28.4356L11.5921 29.5243C11.7321 29.7964 12.0221 29.988 12.3521 29.988H12.4221L13.3121 29.0908L14.2021 29.988H15.4921L13.9821 28.4356L16.2421 26.1574L18.5021 28.4356L16.9621 29.988H18.2521L19.1421 29.0908L20.0321 29.988C20.3721 29.9678 20.6521 29.746 20.7721 29.4335L19.7821 28.4356L21.0821 27.1251L21.2621 25.6433L19.1321 27.7904L16.8721 25.5123L19.1321 23.2341L21.2921 25.4115L21.4321 24.2522L19.8421 22.6293ZM13.3321 27.7804L11.0721 25.5022L13.3321 23.224L15.5921 25.5022L13.3321 27.7804Z" fill="url(#paint4_linear_18_28477)"/> +</g> +<path d="M21.8359 7.40625C21.8359 6.46094 20.5156 5.81254 19.7969 5.81254H18.6719C18.5019 5.82262 18 5.69535 18 5.31254C18 5.31254 17.9531 4.30926 17.9531 3.78129C17.9531 3.25331 17.6791 2.46623 16.7891 2.54688C16.0391 2.61744 15.7821 3.31528 15.7221 3.6177C15.6621 3.95035 15.4288 4.43069 14.9688 4.77342C14.0188 5.47905 11.1641 6.59373 11.1641 6.59373C10.3227 6.87643 9.64311 7.8143 9.71094 8.70311C9.71094 9.14752 10.0234 9.55505 10.0234 9.87498C10.0234 10.1949 9.41406 10.3672 9.41406 10.3672L22.0156 9.35938C22.0156 9.35938 21.5547 9.07812 21.5547 8.74219C21.5547 8.46094 21.8359 8.17188 21.8359 7.40625Z" fill="url(#paint5_linear_18_28477)"/> +<path d="M21.8359 7.40625C21.8359 6.46094 20.5156 5.81254 19.7969 5.81254H18.6719C18.5019 5.82262 18 5.69535 18 5.31254C18 5.31254 17.9531 4.30926 17.9531 3.78129C17.9531 3.25331 17.6791 2.46623 16.7891 2.54688C16.0391 2.61744 15.7821 3.31528 15.7221 3.6177C15.6621 3.95035 15.4288 4.43069 14.9688 4.77342C14.0188 5.47905 11.1641 6.59373 11.1641 6.59373C10.3227 6.87643 9.64311 7.8143 9.71094 8.70311C9.71094 9.14752 10.0234 9.55505 10.0234 9.87498C10.0234 10.1949 9.41406 10.3672 9.41406 10.3672L22.0156 9.35938C22.0156 9.35938 21.5547 9.07812 21.5547 8.74219C21.5547 8.46094 21.8359 8.17188 21.8359 7.40625Z" fill="url(#paint6_radial_18_28477)"/> +<path d="M21.8359 7.40625C21.8359 6.46094 20.5156 5.81254 19.7969 5.81254H18.6719C18.5019 5.82262 18 5.69535 18 5.31254C18 5.31254 17.9531 4.30926 17.9531 3.78129C17.9531 3.25331 17.6791 2.46623 16.7891 2.54688C16.0391 2.61744 15.7821 3.31528 15.7221 3.6177C15.6621 3.95035 15.4288 4.43069 14.9688 4.77342C14.0188 5.47905 11.1641 6.59373 11.1641 6.59373C10.3227 6.87643 9.64311 7.8143 9.71094 8.70311C9.71094 9.14752 10.0234 9.55505 10.0234 9.87498C10.0234 10.1949 9.41406 10.3672 9.41406 10.3672L22.0156 9.35938C22.0156 9.35938 21.5547 9.07812 21.5547 8.74219C21.5547 8.46094 21.8359 8.17188 21.8359 7.40625Z" fill="url(#paint7_radial_18_28477)"/> +<path d="M21.8359 7.40625C21.8359 6.46094 20.5156 5.81254 19.7969 5.81254H18.6719C18.5019 5.82262 18 5.69535 18 5.31254C18 5.31254 17.9531 4.30926 17.9531 3.78129C17.9531 3.25331 17.6791 2.46623 16.7891 2.54688C16.0391 2.61744 15.7821 3.31528 15.7221 3.6177C15.6621 3.95035 15.4288 4.43069 14.9688 4.77342C14.0188 5.47905 11.1641 6.59373 11.1641 6.59373C10.3227 6.87643 9.64311 7.8143 9.71094 8.70311C9.71094 9.14752 10.0234 9.55505 10.0234 9.87498C10.0234 10.1949 9.41406 10.3672 9.41406 10.3672L22.0156 9.35938C22.0156 9.35938 21.5547 9.07812 21.5547 8.74219C21.5547 8.46094 21.8359 8.17188 21.8359 7.40625Z" fill="url(#paint8_radial_18_28477)"/> +<path d="M21.3021 9.24249C19.7917 9.36788 9.8621 10.2505 9.8621 10.2505C8.5021 10.3715 7.59375 11.5468 7.59375 12.6484C7.59375 13.4453 7.99999 13.6406 7.99999 14.1171C7.99999 14.5937 7.59375 14.7265 7.59375 14.7265L24.1953 13.6406C24.1953 13.6406 23.7882 13.375 23.7882 12.7696C23.7882 12.3984 24.0625 12.2656 24.0625 11.5469C24.0625 10.2734 22.8125 9.11711 21.3021 9.24249Z" fill="url(#paint9_linear_18_28477)"/> +<path d="M21.3021 9.24249C19.7917 9.36788 9.8621 10.2505 9.8621 10.2505C8.5021 10.3715 7.59375 11.5468 7.59375 12.6484C7.59375 13.4453 7.99999 13.6406 7.99999 14.1171C7.99999 14.5937 7.59375 14.7265 7.59375 14.7265L24.1953 13.6406C24.1953 13.6406 23.7882 13.375 23.7882 12.7696C23.7882 12.3984 24.0625 12.2656 24.0625 11.5469C24.0625 10.2734 22.8125 9.11711 21.3021 9.24249Z" fill="url(#paint10_radial_18_28477)"/> +<path d="M21.3021 9.24249C19.7917 9.36788 9.8621 10.2505 9.8621 10.2505C8.5021 10.3715 7.59375 11.5468 7.59375 12.6484C7.59375 13.4453 7.99999 13.6406 7.99999 14.1171C7.99999 14.5937 7.59375 14.7265 7.59375 14.7265L24.1953 13.6406C24.1953 13.6406 23.7882 13.375 23.7882 12.7696C23.7882 12.3984 24.0625 12.2656 24.0625 11.5469C24.0625 10.2734 22.8125 9.11711 21.3021 9.24249Z" fill="url(#paint11_radial_18_28477)"/> +<path d="M25.7721 15.956C25.6221 14.2827 24.1621 13.0428 22.5021 13.1839L8.54211 14.4137C6.88211 14.5649 5.65211 16.0367 5.79211 17.71C5.94211 19.3834 7.40211 20.6233 9.06211 20.4821L17.1021 19.7765C17.3721 19.7563 20.5221 19.4741 20.7621 19.4539L23.0221 19.2523C24.6821 19.1011 25.9121 17.6294 25.7721 15.956Z" fill="url(#paint12_radial_18_28477)"/> +<path d="M22.2221 22.6294H10.2521C9.7821 22.6294 9.39211 22.2463 9.39211 21.7624V20.2605L23.0721 19.202V21.7624C23.0821 22.2463 22.6921 22.6294 22.2221 22.6294Z" fill="url(#paint13_linear_18_28477)"/> +<path d="M22.2221 22.6294H10.2521C9.7821 22.6294 9.39211 22.2463 9.39211 21.7624V20.2605L23.0721 19.202V21.7624C23.0821 22.2463 22.6921 22.6294 22.2221 22.6294Z" fill="url(#paint14_linear_18_28477)"/> +<g filter="url(#filter0_f_18_28477)"> +<path d="M22.5021 13.7943C19.496 14.0591 12.4038 17.4238 10.1094 19.4374C9.64133 19.8482 10.8122 20.1392 11.4175 20.4009C11.7187 20.5312 11.768 20.9875 11.8125 21.1249C11.9463 21.5384 12.3125 21.8749 12.8125 21.8749C13.3125 21.8749 13.8047 21.3327 13.8047 21.039C13.8047 20.8374 13.7109 20.4791 14.8437 20.4009C15.9766 20.3228 16.8518 20.2724 20.8125 19.9634C24.7732 19.6545 22.8858 16.4166 22.5021 13.7943Z" fill="url(#paint15_linear_18_28477)"/> +<path d="M22.5021 13.7943C19.496 14.0591 12.4038 17.4238 10.1094 19.4374C9.64133 19.8482 10.8122 20.1392 11.4175 20.4009C11.7187 20.5312 11.768 20.9875 11.8125 21.1249C11.9463 21.5384 12.3125 21.8749 12.8125 21.8749C13.3125 21.8749 13.8047 21.3327 13.8047 21.039C13.8047 20.8374 13.7109 20.4791 14.8437 20.4009C15.9766 20.3228 16.8518 20.2724 20.8125 19.9634C24.7732 19.6545 22.8858 16.4166 22.5021 13.7943Z" fill="url(#paint16_radial_18_28477)"/> +<path d="M22.5021 13.7943C19.496 14.0591 12.4038 17.4238 10.1094 19.4374C9.64133 19.8482 10.8122 20.1392 11.4175 20.4009C11.7187 20.5312 11.768 20.9875 11.8125 21.1249C11.9463 21.5384 12.3125 21.8749 12.8125 21.8749C13.3125 21.8749 13.8047 21.3327 13.8047 21.039C13.8047 20.8374 13.7109 20.4791 14.8437 20.4009C15.9766 20.3228 16.8518 20.2724 20.8125 19.9634C24.7732 19.6545 22.8858 16.4166 22.5021 13.7943Z" fill="#C67B4D"/> +</g> +<path d="M25.7721 15.956C25.6221 14.2827 24.1621 13.0428 22.5021 13.1839L8.54211 14.4137C6.88211 14.5649 5.65211 16.0367 5.79211 17.71C5.94211 19.3834 7.40211 20.6233 9.06211 20.4821L11.3921 20.2805C11.6121 20.2604 11.8021 20.4418 11.8021 20.6636L11.8321 20.8551C11.8321 21.3591 12.2421 21.7724 12.7421 21.7724C13.2421 21.7724 13.6521 21.3591 13.6521 20.8551L13.6221 20.4317C13.6221 20.2301 13.7721 20.0688 13.9721 20.0487L17.0921 19.7765C17.3621 19.7563 20.5121 19.4741 20.7521 19.4539L23.0121 19.2523C24.6821 19.1011 25.9121 17.6294 25.7721 15.956Z" fill="url(#paint17_linear_18_28477)"/> +<path d="M25.7721 15.956C25.6221 14.2827 24.1621 13.0428 22.5021 13.1839L8.54211 14.4137C6.88211 14.5649 5.65211 16.0367 5.79211 17.71C5.94211 19.3834 7.40211 20.6233 9.06211 20.4821L11.3921 20.2805C11.6121 20.2604 11.8021 20.4418 11.8021 20.6636L11.8321 20.8551C11.8321 21.3591 12.2421 21.7724 12.7421 21.7724C13.2421 21.7724 13.6521 21.3591 13.6521 20.8551L13.6221 20.4317C13.6221 20.2301 13.7721 20.0688 13.9721 20.0487L17.0921 19.7765C17.3621 19.7563 20.5121 19.4741 20.7521 19.4539L23.0121 19.2523C24.6821 19.1011 25.9121 17.6294 25.7721 15.956Z" fill="url(#paint18_radial_18_28477)"/> +<path d="M25.7721 15.956C25.6221 14.2827 24.1621 13.0428 22.5021 13.1839L8.54211 14.4137C6.88211 14.5649 5.65211 16.0367 5.79211 17.71C5.94211 19.3834 7.40211 20.6233 9.06211 20.4821L11.3921 20.2805C11.6121 20.2604 11.8021 20.4418 11.8021 20.6636L11.8321 20.8551C11.8321 21.3591 12.2421 21.7724 12.7421 21.7724C13.2421 21.7724 13.6521 21.3591 13.6521 20.8551L13.6221 20.4317C13.6221 20.2301 13.7721 20.0688 13.9721 20.0487L17.0921 19.7765C17.3621 19.7563 20.5121 19.4741 20.7521 19.4539L23.0121 19.2523C24.6821 19.1011 25.9121 17.6294 25.7721 15.956Z" fill="url(#paint19_radial_18_28477)"/> +<path d="M25.7721 15.956C25.6221 14.2827 24.1621 13.0428 22.5021 13.1839L8.54211 14.4137C6.88211 14.5649 5.65211 16.0367 5.79211 17.71C5.94211 19.3834 7.40211 20.6233 9.06211 20.4821L11.3921 20.2805C11.6121 20.2604 11.8021 20.4418 11.8021 20.6636L11.8321 20.8551C11.8321 21.3591 12.2421 21.7724 12.7421 21.7724C13.2421 21.7724 13.6521 21.3591 13.6521 20.8551L13.6221 20.4317C13.6221 20.2301 13.7721 20.0688 13.9721 20.0487L17.0921 19.7765C17.3621 19.7563 20.5121 19.4741 20.7521 19.4539L23.0121 19.2523C24.6821 19.1011 25.9121 17.6294 25.7721 15.956Z" fill="url(#paint20_radial_18_28477)"/> +<defs> +<filter id="filter0_f_18_28477" x="9.00156" y="12.7943" width="15.2857" height="10.0806" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feGaussianBlur stdDeviation="0.5" result="effect1_foregroundBlur_18_28477"/> +</filter> +<radialGradient id="paint0_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.046 19.9264) scale(1.7953 1.80973)"> +<stop stop-color="#FFE0A8"/> +<stop offset="1" stop-color="#FFDEA3"/> +</radialGradient> +<linearGradient id="paint1_linear_18_28477" x1="11.125" y1="26.75" x2="21.25" y2="26.75" gradientUnits="userSpaceOnUse"> +<stop stop-color="#C5987C"/> +<stop offset="0.216049" stop-color="#CC8953"/> +<stop offset="0.567901" stop-color="#EAA36E"/> +<stop offset="1" stop-color="#FCBD73"/> +</linearGradient> +<linearGradient id="paint2_linear_18_28477" x1="16.1771" y1="22.6293" x2="16.1771" y2="29.988" gradientUnits="userSpaceOnUse"> +<stop offset="0.882728" stop-color="#C8746A" stop-opacity="0"/> +<stop offset="1" stop-color="#BE6D82"/> +</linearGradient> +<linearGradient id="paint3_linear_18_28477" x1="10.9021" y1="25.75" x2="21.4321" y2="25.75" gradientUnits="userSpaceOnUse"> +<stop stop-color="#D4A789"/> +<stop offset="0.424775" stop-color="#FAB88D"/> +<stop offset="0.757159" stop-color="#FFF0C9"/> +<stop offset="1" stop-color="#F9CF9A"/> +</linearGradient> +<linearGradient id="paint4_linear_18_28477" x1="16.1671" y1="22.6293" x2="16.1671" y2="29.988" gradientUnits="userSpaceOnUse"> +<stop offset="0.916702" stop-color="#E09A80" stop-opacity="0"/> +<stop offset="1" stop-color="#CA7D95"/> +</linearGradient> +<linearGradient id="paint5_linear_18_28477" x1="16.25" y1="9.84375" x2="15.5977" y2="3.19204" gradientUnits="userSpaceOnUse"> +<stop offset="0.0275603" stop-color="#FFE4A8"/> +<stop offset="0.143815" stop-color="#FFD59B"/> +<stop offset="0.250725" stop-color="#FEDCAB"/> +</linearGradient> +<radialGradient id="paint6_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(20.9375 6.875) rotate(115.278) scale(2.48825 4.09612)"> +<stop stop-color="#FFF6BA"/> +<stop offset="1" stop-color="#FFE5B1" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint7_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(17.1875 8.0625) rotate(82.6476) scale(5.86069 10.89)"> +<stop offset="0.45355" stop-color="#E0BB89" stop-opacity="0"/> +<stop offset="0.662231" stop-color="#E6BE8D"/> +</radialGradient> +<radialGradient id="paint8_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(17.9063 4.46875) rotate(177.089) scale(3.69226 9.43834)"> +<stop offset="0.128265" stop-color="#FFF8BA"/> +<stop offset="0.347135" stop-color="#FFE0AF"/> +<stop offset="0.645989" stop-color="#FAD8A6" stop-opacity="0"/> +</radialGradient> +<linearGradient id="paint9_linear_18_28477" x1="16.9054" y1="13.754" x2="16.5214" y2="9.54913" gradientUnits="userSpaceOnUse"> +<stop offset="0.0571005" stop-color="#FFE4A8"/> +<stop offset="0.157977" stop-color="#FFD59B"/> +<stop offset="0.356286" stop-color="#FFDEA7"/> +<stop offset="0.846352" stop-color="#FFE1A8"/> +<stop offset="0.968133" stop-color="#FDD594"/> +</linearGradient> +<radialGradient id="paint10_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(20.4375 10.9375) rotate(174.189) scale(14.198 7.83563)"> +<stop offset="0.685205" stop-color="#FED29C" stop-opacity="0"/> +<stop offset="0.780293" stop-color="#F9C994"/> +<stop offset="0.880128" stop-color="#E4B783"/> +</radialGradient> +<radialGradient id="paint11_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(22.875 10.5625) rotate(123.275) scale(2.39221 3.65631)"> +<stop stop-color="#FFF8BD"/> +<stop offset="1" stop-color="#FFE7B1" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint12_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.7821 16.8319) scale(7.523 7.58349)"> +<stop offset="0.00558659" stop-color="#FFF5D4"/> +<stop offset="1" stop-color="#FFDEA3"/> +</radialGradient> +<linearGradient id="paint13_linear_18_28477" x1="9.39211" y1="21.625" x2="22.625" y2="21.625" gradientUnits="userSpaceOnUse"> +<stop stop-color="#D2AD8C"/> +<stop offset="0.0884459" stop-color="#D19870"/> +<stop offset="0.319877" stop-color="#EAA26B"/> +<stop offset="0.744954" stop-color="#F8BA81"/> +<stop offset="1" stop-color="#F8C589"/> +</linearGradient> +<linearGradient id="paint14_linear_18_28477" x1="16.2322" y1="19.202" x2="16.2322" y2="22.6294" gradientUnits="userSpaceOnUse"> +<stop offset="0.798134" stop-color="#DB9176" stop-opacity="0"/> +<stop offset="0.89843" stop-color="#E19978"/> +<stop offset="1" stop-color="#C97758"/> +</linearGradient> +<linearGradient id="paint15_linear_18_28477" x1="17" y1="20.9855" x2="16.5625" y2="14.2355" gradientUnits="userSpaceOnUse"> +<stop offset="0.029796" stop-color="#D89387"/> +<stop offset="0.312982" stop-color="#F8C6A3"/> +<stop offset="0.577315" stop-color="#FFDBA7"/> +<stop offset="0.840851" stop-color="#FFE0A6"/> +<stop offset="0.978024" stop-color="#FDD594"/> +</linearGradient> +<radialGradient id="paint16_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(18.5625 16.048) rotate(83.3255) scale(5.91509 13.7581)"> +<stop offset="0.720443" stop-color="#E1AE83" stop-opacity="0"/> +<stop offset="1" stop-color="#E7B286"/> +</radialGradient> +<linearGradient id="paint17_linear_18_28477" x1="17" y1="20.375" x2="16.5625" y2="13.625" gradientUnits="userSpaceOnUse"> +<stop offset="0.029796" stop-color="#D89387"/> +<stop offset="0.312982" stop-color="#F8C6A3"/> +<stop offset="0.577315" stop-color="#FFDBA7"/> +<stop offset="0.840851" stop-color="#FFE0A6"/> +<stop offset="0.978024" stop-color="#FDD594"/> +</linearGradient> +<radialGradient id="paint18_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(18.5625 15.4375) rotate(83.3255) scale(5.91509 13.7581)"> +<stop offset="0.720443" stop-color="#E1AE83" stop-opacity="0"/> +<stop offset="0.925198" stop-color="#E7B286"/> +</radialGradient> +<radialGradient id="paint19_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(24.3125 14.9375) rotate(113.929) scale(2.7736 3.64835)"> +<stop stop-color="#FFF8BD"/> +<stop offset="1" stop-color="#FFEEB6" stop-opacity="0"/> +</radialGradient> +<radialGradient id="paint20_radial_18_28477" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.3125 20.8437) rotate(-5.0796) scale(1.41179 2.5081)"> +<stop offset="0.197452" stop-color="#FFD4A8"/> +<stop offset="0.407382" stop-color="#FDC59F"/> +<stop offset="0.831214" stop-color="#FBC49E" stop-opacity="0"/> +</radialGradient> +</defs> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/candy_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/candy_color.svg new file mode 100644 index 0000000000..e673f430f5 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/candy_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M12,1.918L4,4L2.016,12L6,13.375L6,18L8,22L12,25.372L16.008,26L19,25.372L20,30L28,27L30,20L25.473,19L26,15L24,10L20,7L16.008,6L13,6L12,1.918Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/chocolate_bar_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/chocolate_bar_color.svg new file mode 100644 index 0000000000..5cd39cc9e3 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/chocolate_bar_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M12,2.034L2.035,12L2.035,14L18,30L20,30L29.982,20L29.982,18L14,2.034L12,2.034Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/custard_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/custard_color.svg new file mode 100644 index 0000000000..dd4870dd7d --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/custard_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M9,15L23,15L30,27L25.7,30L6.34,30L2,27L9,15Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/doughnut_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/doughnut_color.svg new file mode 100644 index 0000000000..a8d5557f5c --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/doughnut_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M15,2L11,3L8,5L7,6L5,9L4,12L4,20L5,23L7,26L11,29L14,30L18,30L21,29L25,26L27,23L28,20L28,12L27,9L25,6L24,5L21,3L17,2L15,2Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/lollipop_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/lollipop_color.svg new file mode 100644 index 0000000000..d3778737a9 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/lollipop_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M12,2L7,3L3,7L2,12L3,16L5,19L8,21L12,22L18,21L27,30L30,30L30,27L21,18L22,14.25L22,11L21,8L19,5L16.5,3L12,2Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/pancakes_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/pancakes_color.svg new file mode 100644 index 0000000000..b1a1a322e0 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/pancakes_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M15,2L14,3L8,4L6,5L4,8L4.011,15L2,19L2,22.36L3,25L5,28L10,30L22,30L27,28L29,25L30,22L30,19L27.989,15L27.989,8L26,5L24,4L18,3L17,2L15,2Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shaved_ice_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shaved_ice_color.svg new file mode 100644 index 0000000000..00872c7a0c --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shaved_ice_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M15,2L11,3L8,6L7,8L6,11L6,13L7,16L8,18L15,30L17,30L24,18L25,16L26,13L26,11L25,8L24,6L21,3L17,2L15,2Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shortcake_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shortcake_color.svg new file mode 100644 index 0000000000..e6ed1fbbf9 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shortcake_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M14,2L2,13L2,31L30,23L30,7L29,6L20,4L17,3L16,2L14,2Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/soft_ice_cream_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/soft_ice_cream_color.svg new file mode 100644 index 0000000000..b77e0c3655 --- /dev/null +++ b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/soft_ice_cream_color.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="32px" height="32px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="M17,2.541L14.078,5.402L10,7L10,10.367L8,11L8,14L5.781,16.265L6.594,19.627L9.414,20.916L12,29.988L21,29.988L22.016,22.629L23.072,21.772L23.072,19.202L25.783,17.473L25.783,14.727L24,13.173L24,10.367L22,9.233L22.016,6.454L18,5L17,2.541Z"/> +</svg> diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/10000yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/10000yen.png new file mode 100644 index 0000000000..bda777719d Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/10000yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/1000yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/1000yen.png new file mode 100644 index 0000000000..4c462fb1f6 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/1000yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/100yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/100yen.png new file mode 100644 index 0000000000..8911543af9 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/100yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/10yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/10yen.png new file mode 100644 index 0000000000..041f773891 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/10yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/1yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/1yen.png new file mode 100644 index 0000000000..cc6dcfd740 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/1yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/2000yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/2000yen.png new file mode 100644 index 0000000000..6048b7c996 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/2000yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/5000yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/5000yen.png new file mode 100644 index 0000000000..b0fe26db11 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/5000yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/500yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/500yen.png new file mode 100644 index 0000000000..9e3d2b766b Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/500yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/50yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/50yen.png new file mode 100644 index 0000000000..c8ef089972 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/50yen.png differ diff --git a/packages/frontend/assets/drop-and-fusion/yen_monos/5yen.png b/packages/frontend/assets/drop-and-fusion/yen_monos/5yen.png new file mode 100644 index 0000000000..b120bdca36 Binary files /dev/null and b/packages/frontend/assets/drop-and-fusion/yen_monos/5yen.png differ diff --git a/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue b/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue new file mode 100644 index 0000000000..c53bbca37c --- /dev/null +++ b/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue @@ -0,0 +1,102 @@ +<!-- +SPDX-FileCopyrightText: syuilo and other misskey contributors +SPDX-License-Identifier: AGPL-3.0-only +--> + +<template> + <MkModalWindow ref="dialogEl" @close="cancel()" @closed="$emit('closed')"> + <template #header>:{{ emoji.name }}:</template> + <template #default> + <MkSpacer> + <div style="display: flex; flex-direction: column; gap: 1em;"> + <div :class="$style.emojiImgWrapper"> + <MkCustomEmoji :name="emoji.name" :normal="true" style="height: 100%;"></MkCustomEmoji> + </div> + <MkKeyValue> + <template #key>{{ i18n.ts.name }}</template> + <template #value>{{ emoji.name }}</template> + </MkKeyValue> + <MkKeyValue> + <template #key>{{ i18n.ts.tags }}</template> + <template #value> + <div v-if="emoji.aliases.length === 0">{{ i18n.ts.none }}</div> + <div v-else :class="$style.aliases"> + <span v-for="alias in emoji.aliases" :key="alias" :class="$style.alias"> + {{ alias }} + </span> + </div> + </template> + </MkKeyValue> + <MkKeyValue> + <template #key>{{ i18n.ts.category }}</template> + <template #value>{{ emoji.category ?? i18n.ts.none }}</template> + </MkKeyValue> + <MkKeyValue> + <template #key>{{ i18n.ts.sensitive }}</template> + <template #value>{{ emoji.isSensitive ? i18n.ts.yes : i18n.ts.no }}</template> + </MkKeyValue> + <MkKeyValue> + <template #key>{{ i18n.ts.localOnly }}</template> + <template #value>{{ emoji.localOnly ? i18n.ts.yes : i18n.ts.no }}</template> + </MkKeyValue> + <MkKeyValue> + <template #key>{{ i18n.ts.license }}</template> + <template #value>{{ emoji.license ?? i18n.ts.none }}</template> + </MkKeyValue> + <MkKeyValue :copy="emoji.url"> + <template #key>{{ i18n.ts.emojiUrl }}</template> + <template #value> + <a :href="emoji.url" target="_blank">{{ emoji.url }}</a> + </template> + </MkKeyValue> + </div> + </MkSpacer> + </template> + </MkModalWindow> +</template> + +<script lang="ts" setup> +import * as Misskey from 'misskey-js'; +import { defineProps, shallowRef } from 'vue'; +import { i18n } from '@/i18n.js'; +import MkModalWindow from '@/components/MkModalWindow.vue'; +import MkKeyValue from '@/components/MkKeyValue.vue'; +const props = defineProps<{ + emoji: Misskey.entities.EmojiDetailed, +}>(); +const emit = defineEmits<{ + (ev: 'ok', cropped: Misskey.entities.DriveFile): void; + (ev: 'cancel'): void; + (ev: 'closed'): void; +}>(); +const dialogEl = shallowRef<InstanceType<typeof MkModalWindow>>(); +const cancel = () => { + emit('cancel'); + dialogEl.value!.close(); +}; +</script> + +<style lang="scss" module> +.emojiImgWrapper { + max-width: 100%; + height: 40cqh; + background-image: repeating-linear-gradient(45deg, transparent, transparent 8px, var(--X5) 8px, var(--X5) 14px); + border-radius: var(--radius); + margin: auto; + overflow-y: hidden; +} + +.aliases { + display: flex; + flex-wrap: wrap; + gap: 3px; +} + +.alias { + display: inline-block; + padding: 3px 10px; + background-color: var(--X5); + border: solid 1px var(--divider); + border-radius: var(--radius); +} +</style> diff --git a/packages/frontend/src/components/MkFlashPreview.vue b/packages/frontend/src/components/MkFlashPreview.vue index ab435585d9..1be8a6d8f7 100644 --- a/packages/frontend/src/components/MkFlashPreview.vue +++ b/packages/frontend/src/components/MkFlashPreview.vue @@ -9,7 +9,9 @@ SPDX-License-Identifier: AGPL-3.0-only <header> <h1 :title="flash.title">{{ flash.title }}</h1> </header> - <p v-if="flash.summary" :title="flash.summary">{{ flash.summary.length > 85 ? flash.summary.slice(0, 85) + '…' : flash.summary }}</p> + <p v-if="flash.summary" :title="flash.summary"> + <Mfm class="summaryMfm" :text="flash.summary" :plain="true" :nowrap="true"/> + </p> <footer> <img class="icon" :src="flash.user.avatarUrl"/> <p>{{ userName(flash.user) }}</p> @@ -54,6 +56,12 @@ const props = defineProps<{ margin: 0; color: var(--urlPreviewText); font-size: 0.8em; + overflow: clip; + + > .summaryMfm { + display: block; + width: 100%; + } } > footer { diff --git a/packages/frontend/src/components/MkHeatmap.vue b/packages/frontend/src/components/MkHeatmap.vue index f47b680f83..a77f3627f9 100644 --- a/packages/frontend/src/components/MkHeatmap.vue +++ b/packages/frontend/src/components/MkHeatmap.vue @@ -15,6 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, nextTick, watch, shallowRef, ref } from 'vue'; import { Chart } from 'chart.js'; +import * as Misskey from 'misskey-js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { defaultStore } from '@/store.js'; import { useChartTooltip } from '@/scripts/use-chart-tooltip.js'; @@ -23,9 +24,16 @@ import { initChart } from '@/scripts/init-chart.js'; initChart(); -const props = defineProps<{ - src: string; -}>(); +export type HeatmapSource = 'active-users' | 'notes' | 'ap-requests-inbox-received' | 'ap-requests-deliver-succeeded' | 'ap-requests-deliver-failed'; + +const props = withDefaults(defineProps<{ + src: HeatmapSource; + user?: Misskey.entities.User; + label?: string; +}>(), { + user: undefined, + label: '', +}); const rootEl = shallowRef<HTMLDivElement>(null); const chartEl = shallowRef<HTMLCanvasElement>(null); @@ -75,8 +83,13 @@ async function renderChart() { const raw = await misskeyApi('charts/active-users', { limit: chartLimit, span: 'day' }); values = raw.readWrite; } else if (props.src === 'notes') { - const raw = await misskeyApi('charts/notes', { limit: chartLimit, span: 'day' }); - values = raw.local.inc; + if (props.user) { + const raw = await misskeyApi('charts/user/notes', { userId: props.user.id, limit: chartLimit, span: 'day' }); + values = raw.inc; + } else { + const raw = await misskeyApi('charts/notes', { limit: chartLimit, span: 'day' }); + values = raw.local.inc; + } } else if (props.src === 'ap-requests-inbox-received') { const raw = await misskeyApi('charts/ap-request', { limit: chartLimit, span: 'day' }); values = raw.inboxReceived; @@ -105,7 +118,7 @@ async function renderChart() { type: 'matrix', data: { datasets: [{ - label: 'Read & Write', + label: props.label, data: format(values), pointRadius: 0, borderWidth: 0, @@ -128,6 +141,9 @@ async function renderChart() { const a = c.chart.chartArea ?? {}; return (a.bottom - a.top) / 7 - marginEachCell; }, + /* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107> + }] satisfies ChartData[], + */ }], }, options: { @@ -195,7 +211,7 @@ async function renderChart() { }, label(context) { const v = context.dataset.data[context.dataIndex]; - return ['Active: ' + v.v]; + return [v.v]; }, }, //mode: 'index', diff --git a/packages/frontend/src/components/MkInstanceStats.vue b/packages/frontend/src/components/MkInstanceStats.vue index 1576089657..00f5e96286 100644 --- a/packages/frontend/src/components/MkInstanceStats.vue +++ b/packages/frontend/src/components/MkInstanceStats.vue @@ -51,7 +51,7 @@ SPDX-License-Identifier: AGPL-3.0-only <option value="ap-requests-deliver-failed">AP Requests: deliverFailed</option> </MkSelect> <div class="_panel" :class="$style.heatmap"> - <MkHeatmap :src="heatmapSrc"/> + <MkHeatmap :src="heatmapSrc" :label="'Read & Write'"/> </div> </MkFoldableSection> @@ -92,7 +92,7 @@ import { useChartTooltip } from '@/scripts/use-chart-tooltip.js'; import * as os from '@/os.js'; import { misskeyApiGet } from '@/scripts/misskey-api.js'; import { i18n } from '@/i18n.js'; -import MkHeatmap from '@/components/MkHeatmap.vue'; +import MkHeatmap, { type HeatmapSource } from '@/components/MkHeatmap.vue'; import MkFoldableSection from '@/components/MkFoldableSection.vue'; import MkRetentionHeatmap from '@/components/MkRetentionHeatmap.vue'; import MkRetentionLineChart from '@/components/MkRetentionLineChart.vue'; @@ -103,7 +103,7 @@ initChart(); const chartLimit = 500; const chartSpan = ref<'hour' | 'day'>('hour'); const chartSrc = ref('active-users'); -const heatmapSrc = ref('active-users'); +const heatmapSrc = ref<HeatmapSource>('active-users'); const subDoughnutEl = shallowRef<HTMLCanvasElement>(); const pubDoughnutEl = shallowRef<HTMLCanvasElement>(); diff --git a/packages/frontend/src/components/MkMediaAudio.vue b/packages/frontend/src/components/MkMediaAudio.vue new file mode 100644 index 0000000000..75b31b9a49 --- /dev/null +++ b/packages/frontend/src/components/MkMediaAudio.vue @@ -0,0 +1,363 @@ +<!-- +SPDX-FileCopyrightText: syuilo and other misskey contributors +SPDX-License-Identifier: AGPL-3.0-only +--> + +<template> +<div + :class="[ + $style.audioContainer, + (audio.isSensitive && defaultStore.state.highlightSensitiveMedia) && $style.sensitive, + ]" + @contextmenu.stop +> + <button v-if="hide" :class="$style.hidden" @click="hide = false"> + <div :class="$style.hiddenTextWrapper"> + <b v-if="audio.isSensitive" style="display: block;"><i class="ti ti-eye-exclamation"></i> {{ i18n.ts.sensitive }}{{ defaultStore.state.dataSaver.media ? ` (${i18n.ts.audio}${audio.size ? ' ' + bytes(audio.size) : ''})` : '' }}</b> + <b v-else style="display: block;"><i class="ti ti-music"></i> {{ defaultStore.state.dataSaver.media && audio.size ? bytes(audio.size) : i18n.ts.audio }}</b> + <span style="display: block;">{{ i18n.ts.clickToShow }}</span> + </div> + </button> + <div v-else :class="$style.audioControls"> + <audio + ref="audioEl" + preload="metadata" + :class="$style.audio" + > + <source :src="audio.url"> + </audio> + <div :class="[$style.controlsChild, $style.controlsLeft]"> + <button class="_button" :class="$style.controlButton" @click="togglePlayPause"> + <i v-if="isPlaying" class="ti ti-player-pause-filled"></i> + <i v-else class="ti ti-player-play-filled"></i> + </button> + </div> + <div :class="[$style.controlsChild, $style.controlsRight]"> + <button class="_button" :class="$style.controlButton" @click="showMenu"> + <i class="ti ti-settings"></i> + </button> + </div> + <div :class="[$style.controlsChild, $style.controlsTime]">{{ hms(elapsedTimeMs) }}</div> + <div :class="[$style.controlsChild, $style.controlsVolume]"> + <button class="_button" :class="$style.controlButton" @click="toggleMute"> + <i v-if="volume === 0" class="ti ti-volume-3"></i> + <i v-else class="ti ti-volume"></i> + </button> + <MkMediaRange + v-model="volume" + :class="$style.volumeSeekbar" + /> + </div> + <MkMediaRange + v-model="rangePercent" + :class="$style.seekbarRoot" + :buffer="bufferedDataRatio" + /> + </div> +</div> +</template> + +<script lang="ts" setup> +import { shallowRef, watch, computed, ref, onDeactivated, onActivated, onMounted } from 'vue'; +import * as Misskey from 'misskey-js'; +import type { MenuItem } from '@/types/menu.js'; +import { defaultStore } from '@/store.js'; +import { i18n } from '@/i18n.js'; +import * as os from '@/os.js'; +import bytes from '@/filters/bytes.js'; +import { hms } from '@/filters/hms.js'; +import MkMediaRange from '@/components/MkMediaRange.vue'; +import { iAmModerator } from '@/account.js'; + +const props = defineProps<{ + audio: Misskey.entities.DriveFile; +}>(); + +const audioEl = shallowRef<HTMLAudioElement>(); + +// eslint-disable-next-line vue/no-setup-props-destructure +const hide = ref((defaultStore.state.nsfw === 'force' || defaultStore.state.dataSaver.media) ? true : (props.audio.isSensitive && defaultStore.state.nsfw !== 'ignore')); + +// Menu +const menuShowing = ref(false); + +function showMenu(ev: MouseEvent) { + let menu: MenuItem[] = []; + + menu = [ + // TODO: 再生キューに追加 + { + text: i18n.ts.hide, + icon: 'ti ti-eye-off', + action: () => { + hide.value = true; + }, + }, + ]; + + if (iAmModerator) { + menu.push({ + type: 'divider', + }, { + text: props.audio.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive, + icon: props.audio.isSensitive ? 'ti ti-eye' : 'ti ti-eye-exclamation', + danger: true, + action: () => toggleSensitive(props.audio), + }); + } + + menuShowing.value = true; + os.popupMenu(menu, ev.currentTarget ?? ev.target, { + align: 'right', + onClosing: () => { + menuShowing.value = false; + }, + }); +} + +function toggleSensitive(file: Misskey.entities.DriveFile) { + os.apiWithDialog('drive/files/update', { + fileId: file.id, + isSensitive: !file.isSensitive, + }); +} + +// MediaControl: Common State +const oncePlayed = ref(false); +const isReady = ref(false); +const isPlaying = ref(false); +const isActuallyPlaying = ref(false); +const elapsedTimeMs = ref(0); +const durationMs = ref(0); +const rangePercent = computed({ + get: () => { + return (elapsedTimeMs.value / durationMs.value) || 0; + }, + set: (to) => { + if (!audioEl.value) return; + audioEl.value.currentTime = to * durationMs.value / 1000; + }, +}); +const volume = ref(.5); +const bufferedEnd = ref(0); +const bufferedDataRatio = computed(() => { + if (!audioEl.value) return 0; + return bufferedEnd.value / audioEl.value.duration; +}); + +// MediaControl Events +function togglePlayPause() { + if (!isReady.value || !audioEl.value) return; + + if (isPlaying.value) { + audioEl.value.pause(); + isPlaying.value = false; + } else { + audioEl.value.play(); + isPlaying.value = true; + oncePlayed.value = true; + } +} + +function toggleMute() { + if (volume.value === 0) { + volume.value = .5; + } else { + volume.value = 0; + } +} + +let onceInit = false; +let stopAudioElWatch: () => void; + +function init() { + if (onceInit) return; + onceInit = true; + + stopAudioElWatch = watch(audioEl, () => { + if (audioEl.value) { + isReady.value = true; + + function updateMediaTick() { + if (audioEl.value) { + try { + bufferedEnd.value = audioEl.value.buffered.end(0); + } catch (err) { + bufferedEnd.value = 0; + } + + elapsedTimeMs.value = audioEl.value.currentTime * 1000; + } + window.requestAnimationFrame(updateMediaTick); + } + + updateMediaTick(); + + audioEl.value.addEventListener('play', () => { + isActuallyPlaying.value = true; + }); + + audioEl.value.addEventListener('pause', () => { + isActuallyPlaying.value = false; + isPlaying.value = false; + }); + + audioEl.value.addEventListener('ended', () => { + oncePlayed.value = false; + isActuallyPlaying.value = false; + isPlaying.value = false; + }); + + durationMs.value = audioEl.value.duration * 1000; + audioEl.value.addEventListener('durationchange', () => { + if (audioEl.value) { + durationMs.value = audioEl.value.duration * 1000; + } + }); + + audioEl.value.volume = volume.value; + } + }, { + immediate: true, + }); +} + +watch(volume, (to) => { + if (audioEl.value) audioEl.value.volume = to; +}); + +onMounted(() => { + init(); +}); + +onActivated(() => { + init(); +}); + +onDeactivated(() => { + isReady.value = false; + isPlaying.value = false; + isActuallyPlaying.value = false; + elapsedTimeMs.value = 0; + durationMs.value = 0; + bufferedEnd.value = 0; + hide.value = (defaultStore.state.nsfw === 'force' || defaultStore.state.dataSaver.media) ? true : (props.audio.isSensitive && defaultStore.state.nsfw !== 'ignore'); + stopAudioElWatch(); + onceInit = false; +}); +</script> + +<style lang="scss" module> +.audioContainer { + container-type: inline-size; + position: relative; + border: .5px solid var(--divider); + border-radius: var(--radius); + overflow: clip; +} + +.sensitive { + position: relative; + + &::after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + border-radius: inherit; + box-shadow: inset 0 0 0 4px var(--warn); + } +} + +.hidden { + width: 100%; + background: none; + border: none; + outline: none; + font: inherit; + color: inherit; + cursor: pointer; + padding: 12px 0; + display: flex; + align-items: center; + justify-content: center; + background: #000; +} + +.hiddenTextWrapper { + text-align: center; + font-size: 0.8em; + color: #fff; +} + +.audioControls { + display: grid; + grid-template-areas: + "left time . volume right" + "seekbar seekbar seekbar seekbar seekbar"; + grid-template-columns: auto auto 1fr auto auto; + align-items: center; + gap: 4px 8px; + padding: 10px; +} + +.controlsChild { + display: flex; + align-items: center; + gap: 4px; + + .controlButton { + padding: 6px; + border-radius: calc(var(--radius) / 2); + font-size: 1.05rem; + + &:hover { + color: var(--accent); + background-color: var(--accentedBg); + } + } +} + +.controlsLeft { + grid-area: left; +} + +.controlsRight { + grid-area: right; +} + +.controlsTime { + grid-area: time; + font-size: .9rem; +} + +.controlsVolume { + grid-area: volume; + + .volumeSeekbar { + display: none; + } +} + +.seekbarRoot { + grid-area: seekbar; +} + +@container (min-width: 500px) { + .audioControls { + grid-template-areas: "left seekbar time volume right"; + grid-template-columns: auto 1fr auto auto auto; + } + + .controlsVolume { + .volumeSeekbar { + max-width: 90px; + display: block; + flex-grow: 1; + } + } +} +</style> diff --git a/packages/frontend/src/components/MkMediaBanner.vue b/packages/frontend/src/components/MkMediaBanner.vue index 7b0387cefe..6f76016bea 100644 --- a/packages/frontend/src/components/MkMediaBanner.vue +++ b/packages/frontend/src/components/MkMediaBanner.vue @@ -10,15 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only <b>{{ i18n.ts.sensitive }}</b> <span>{{ i18n.ts.clickToShow }}</span> </div> - <div v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'" :class="$style.audio"> - <audio - ref="audioEl" - :src="media.url" - :title="media.comment ?? undefined" - controls - preload="metadata" - /> - </div> + <MkMediaAudio v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'" :audio="media"/> <a v-else :class="$style.download" :href="media.url" @@ -35,6 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only import { shallowRef, watch, ref } from 'vue'; import * as Misskey from 'misskey-js'; import { i18n } from '@/i18n.js'; +import MkMediaAudio from '@/components/MkMediaAudio.vue'; const props = withDefaults(defineProps<{ media: Misskey.entities.DriveFile; diff --git a/packages/frontend/src/components/MkMediaRange.vue b/packages/frontend/src/components/MkMediaRange.vue new file mode 100644 index 0000000000..e6303a5c41 --- /dev/null +++ b/packages/frontend/src/components/MkMediaRange.vue @@ -0,0 +1,150 @@ +<!-- +SPDX-FileCopyrightText: syuilo and other misskey contributors +SPDX-License-Identifier: AGPL-3.0-only +--> + +<!-- Media系専用のinput range --> +<template> +<div :class="$style.controlsSeekbar" :style="sliderBgWhite ? '--sliderBg: rgba(255,255,255,.25);' : '--sliderBg: var(--scrollbarHandle);'"> + <progress v-if="buffer !== undefined" :class="$style.buffer" :value="isNaN(buffer) ? 0 : buffer" min="0" max="1">{{ Math.round(buffer * 100) }}% buffered</progress> + <input v-model="model" :class="$style.seek" :style="`--value: ${modelValue * 100}%;`" type="range" min="0" max="1" step="any" @change="emit('dragEnded', modelValue)"/> +</div> +</template> + +<script setup lang="ts"> +import { computed, ModelRef } from 'vue'; + +withDefaults(defineProps<{ + buffer?: number; + sliderBgWhite?: boolean; +}>(), { + buffer: undefined, + sliderBgWhite: false, +}); + +const emit = defineEmits<{ + (ev: 'dragEnded', value: number): void; +}>(); + +// eslint-disable-next-line no-undef +const model = defineModel({ required: true }) as ModelRef<string | number>; +const modelValue = computed({ + get: () => typeof model.value === 'number' ? model.value : parseFloat(model.value), + set: v => { model.value = v; }, +}); +</script> + +<style lang="scss" module> +.controlsSeekbar { + position: relative; +} + +.seek { + position: relative; + -webkit-appearance: none; + appearance: none; + background: transparent; + border: 0; + border-radius: 26px; + color: var(--accent); + display: block; + height: 19px; + margin: 0; + min-width: 0; + padding: 0; + transition: box-shadow .3s ease; + width: 100%; + + &::-webkit-slider-runnable-track { + background-color: var(--sliderBg); + background-image: linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0)); + border: 0; + border-radius: 99rem; + height: 5px; + transition: box-shadow .3s ease; + user-select: none; + } + + &::-moz-range-track { + background: transparent; + border: 0; + border-radius: 99rem; + height: 5px; + transition: box-shadow .3s ease; + user-select: none; + background-color: var(--sliderBg); + } + + &::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + background: #fff; + border: 0; + border-radius: 100%; + box-shadow: 0 1px 1px rgba(35, 40, 47, .15),0 0 0 1px rgba(35, 40, 47, .2); + height: 13px; + margin-top: -4px; + position: relative; + transition: all .2s ease; + width: 13px; + + &:active { + box-shadow: 0 1px 1px rgba(35, 40, 47, .15), 0 0 0 1px rgba(35, 40, 47, .15), 0 0 0 3px rgba(255, 255, 255, .5); + } + } + + &::-moz-range-thumb { + background: #fff; + border: 0; + border-radius: 100%; + box-shadow: 0 1px 1px rgba(35, 40, 47, .15),0 0 0 1px rgba(35, 40, 47, .2); + height: 13px; + position: relative; + transition: all .2s ease; + width: 13px; + + &:active { + box-shadow: 0 1px 1px rgba(35, 40, 47, .15), 0 0 0 1px rgba(35, 40, 47, .15), 0 0 0 3px rgba(255, 255, 255, .5); + } + } + + &::-moz-range-progress { + background: currentColor; + border-radius: 99rem; + height: 5px; + } +} + +.buffer { + appearance: none; + background: transparent; + color: var(--sliderBg); + border: 0; + border-radius: 99rem; + height: 5px; + left: 0; + margin-top: -2.5px; + padding: 0; + position: absolute; + top: 50%; + width: 100%; + + &::-webkit-progress-bar { + background: transparent; + } + + &::-webkit-progress-value { + background: currentColor; + border-radius: 100px; + min-width: 5px; + transition: width .2s ease; + } + + &::-moz-progress-bar { + background: currentColor; + border-radius: 100px; + min-width: 5px; + transition: width .2s ease; + } +} +</style> diff --git a/packages/frontend/src/components/MkMediaVideo.vue b/packages/frontend/src/components/MkMediaVideo.vue index a1950b110a..cdb810e99c 100644 --- a/packages/frontend/src/components/MkMediaVideo.vue +++ b/packages/frontend/src/components/MkMediaVideo.vue @@ -4,68 +4,345 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<div v-if="hide" :class="[$style.hidden, (video.isSensitive && defaultStore.state.highlightSensitiveMedia) && $style.sensitiveContainer]" @click="hide = false"> - <!-- 【注意】dataSaverMode が有効になっている際には、hide が false になるまでサムネイルや動画を読み込まないようにすること --> - <div :class="$style.sensitive"> - <b v-if="video.isSensitive" style="display: block;"><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts.sensitive }}{{ defaultStore.state.dataSaver.media ? ` (${i18n.ts.video}${video.size ? ' ' + bytes(video.size) : ''})` : '' }}</b> - <b v-else style="display: block;"><i class="ph-film-strip ph-bold ph-lg"></i> {{ defaultStore.state.dataSaver.media && video.size ? bytes(video.size) : i18n.ts.video }}</b> - <span>{{ i18n.ts.clickToShow }}</span> - </div> -</div> -<div v-else :class="[$style.visible, (video.isSensitive && defaultStore.state.highlightSensitiveMedia) && $style.sensitiveContainer]"> - <video - ref="videoEl" - :class="$style.video" - :poster="video.thumbnailUrl" - :title="video.comment ?? undefined" - :alt="video.comment" - preload="none" - controls - @contextmenu.stop - > - <source - :src="video.url" +<div + ref="playerEl" + :class="[ + $style.videoContainer, + controlsShowing && $style.active, + (video.isSensitive && defaultStore.state.highlightSensitiveMedia) && $style.sensitive, + ]" + @mouseover="onMouseOver" + @mouseleave="onMouseLeave" + @contextmenu.stop +> + <button v-if="hide" :class="$style.hidden" @click="hide = false"> + <div :class="$style.hiddenTextWrapper"> + <b v-if="video.isSensitive" style="display: block;"><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts.sensitive }}{{ defaultStore.state.dataSaver.media ? ` (${i18n.ts.video}${video.size ? ' ' + bytes(video.size) : ''})` : '' }}</b> + <b v-else style="display: block;"><i class="ph-film-strip ph-bold ph-lg"></i> {{ defaultStore.state.dataSaver.media && video.size ? bytes(video.size) : i18n.ts.video }}</b> + <span style="display: block;">{{ i18n.ts.clickToShow }}</span> + </div> + </button> + <div v-else :class="$style.videoRoot" @click.self="togglePlayPause"> + <video + ref="videoEl" + :class="$style.video" + :poster="video.thumbnailUrl ?? undefined" + :title="video.comment ?? undefined" + :alt="video.comment" + preload="metadata" + playsinline > - </video> - <i class="ph-eye-slash ph-bold ph-lg" :class="$style.hide" @click="hide = true"></i> + <source :src="video.url"> + </video> + <button v-if="isReady && !isPlaying" class="_button" :class="$style.videoOverlayPlayButton" @click="togglePlayPause"><i class="ph-play ph-bold ph-lg"></i></button> + <div v-else-if="!isActuallyPlaying" :class="$style.videoLoading"> + <MkLoading/> + </div> + <i class="ti ti-eye-off" :class="$style.hide" @click="hide = true"></i> + <div :class="$style.indicators"> + <div v-if="video.comment" :class="$style.indicator">ALT</div> + <div v-if="video.isSensitive" :class="$style.indicator" style="color: var(--warn);" :title="i18n.ts.sensitive"><i class="ph-warning ph-bold ph-lg"></i></div> + </div> + <div :class="$style.videoControls" @click.self="togglePlayPause"> + <div :class="[$style.controlsChild, $style.controlsLeft]"> + <button class="_button" :class="$style.controlButton" @click="togglePlayPause"> + <i v-if="isPlaying" class="ph-pause ph-bold ph-lg"></i> + <i v-else class="ph-play ph-bold ph-lg"></i> + </button> + </div> + <div :class="[$style.controlsChild, $style.controlsRight]"> + <button class="_button" :class="$style.controlButton" @click="showMenu"> + <i class="ph-settings ph-bold ph-lg"></i> + </button> + <button class="_button" :class="$style.controlButton" @click="toggleFullscreen"> + <i v-if="isFullscreen" class="ph-arrows-in ph-bold ph-lg"></i> + <i v-else class="ph-arrows-out ph-bold ph-lg"></i> + </button> + </div> + <div :class="[$style.controlsChild, $style.controlsTime]">{{ hms(elapsedTimeMs) }}</div> + <div :class="[$style.controlsChild, $style.controlsVolume]"> + <button class="_button" :class="$style.controlButton" @click="toggleMute"> + <i v-if="volume === 0" class="ph-speaker-x ph-bold ph-lg"></i> + <i v-else class="ph-speaker-high ph-bold ph-lg"></i> + </button> + <MkMediaRange + v-model="volume" + :sliderBgWhite="true" + :class="$style.volumeSeekbar" + /> + </div> + <MkMediaRange + v-model="rangePercent" + :sliderBgWhite="true" + :class="$style.seekbarRoot" + :buffer="bufferedDataRatio" + /> + </div> + </div> </div> </template> <script lang="ts" setup> -import { ref, shallowRef, watch } from 'vue'; +import { ref, shallowRef, computed, watch, onDeactivated, onActivated, onMounted } from 'vue'; import * as Misskey from 'misskey-js'; +import type { MenuItem } from '@/types/menu.js'; import bytes from '@/filters/bytes.js'; +import { hms } from '@/filters/hms.js'; import { defaultStore } from '@/store.js'; import { i18n } from '@/i18n.js'; +import * as os from '@/os.js'; +import { isFullscreenNotSupported } from '@/scripts/device-kind.js'; import hasAudio from '@/scripts/media-has-audio.js'; +import MkMediaRange from '@/components/MkMediaRange.vue'; +import { iAmModerator } from '@/account.js'; const props = defineProps<{ video: Misskey.entities.DriveFile; }>(); +// eslint-disable-next-line vue/no-setup-props-destructure const hide = ref((defaultStore.state.nsfw === 'force' || defaultStore.state.dataSaver.media) ? true : (props.video.isSensitive && defaultStore.state.nsfw !== 'ignore')); -const videoEl = shallowRef<HTMLVideoElement>(); +// Menu +const menuShowing = ref(false); -watch(videoEl, () => { - if (videoEl.value) { - videoEl.value.volume = 0.3; - hasAudio(videoEl.value).then(had => { - if (!had) { - videoEl.value.loop = videoEl.value.muted = true; - videoEl.value.play(); - } +function showMenu(ev: MouseEvent) { + let menu: MenuItem[] = []; + + menu = [ + // TODO: 再生キューに追加 + { + text: i18n.ts.hide, + icon: 'ti ti-eye-off', + action: () => { + hide.value = true; + }, + }, + ]; + + if (iAmModerator) { + menu.push({ + type: 'divider', + }, { + text: props.video.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive, + icon: props.video.isSensitive ? 'ti ti-eye' : 'ti ti-eye-exclamation', + danger: true, + action: () => toggleSensitive(props.video), }); } + + menuShowing.value = true; + os.popupMenu(menu, ev.currentTarget ?? ev.target, { + align: 'right', + onClosing: () => { + menuShowing.value = false; + }, + }); +} + +function toggleSensitive(file: Misskey.entities.DriveFile) { + os.apiWithDialog('drive/files/update', { + fileId: file.id, + isSensitive: !file.isSensitive, + }); +} + +// MediaControl: Video State +const videoEl = shallowRef<HTMLVideoElement>(); +const playerEl = shallowRef<HTMLDivElement>(); +const isHoverring = ref(false); +const controlsShowing = computed(() => { + if (!oncePlayed.value) return true; + if (isHoverring.value) return true; + if (menuShowing.value) return true; + return false; +}); +const isFullscreen = ref(false); +let controlStateTimer: string | number; + +// MediaControl: Common State +const oncePlayed = ref(false); +const isReady = ref(false); +const isPlaying = ref(false); +const isActuallyPlaying = ref(false); +const elapsedTimeMs = ref(0); +const durationMs = ref(0); +const rangePercent = computed({ + get: () => { + return (elapsedTimeMs.value / durationMs.value) || 0; + }, + set: (to) => { + if (!videoEl.value) return; + videoEl.value.currentTime = to * durationMs.value / 1000; + }, +}); +const volume = ref(.5); +const bufferedEnd = ref(0); +const bufferedDataRatio = computed(() => { + if (!videoEl.value) return 0; + return bufferedEnd.value / videoEl.value.duration; +}); + +// MediaControl Events +function onMouseOver() { + if (controlStateTimer) { + clearTimeout(controlStateTimer); + } + isHoverring.value = true; +} + +function onMouseLeave() { + controlStateTimer = window.setTimeout(() => { + isHoverring.value = false; + }, 100); +} + +function togglePlayPause() { + if (!isReady.value || !videoEl.value) return; + + if (isPlaying.value) { + videoEl.value.pause(); + isPlaying.value = false; + } else { + videoEl.value.play(); + isPlaying.value = true; + oncePlayed.value = true; + } +} + +function toggleFullscreen() { + if (isFullscreenNotSupported && videoEl.value) { + if (isFullscreen.value) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + videoEl.value.webkitExitFullscreen(); + isFullscreen.value = false; + } else { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + videoEl.value.webkitEnterFullscreen(); + isFullscreen.value = true; + } + } else if (playerEl.value) { + if (isFullscreen.value) { + document.exitFullscreen(); + isFullscreen.value = false; + } else { + playerEl.value.requestFullscreen({ navigationUI: 'hide' }); + isFullscreen.value = true; + } + } +} + +function toggleMute() { + if (volume.value === 0) { + volume.value = .5; + } else { + volume.value = 0; + } +} + +let onceInit = false; +let stopVideoElWatch: () => void; + +function init() { + if (onceInit) return; + onceInit = true; + + stopVideoElWatch = watch(videoEl, () => { + if (videoEl.value) { + isReady.value = true; + + function updateMediaTick() { + if (videoEl.value) { + try { + bufferedEnd.value = videoEl.value.buffered.end(0); + } catch (err) { + bufferedEnd.value = 0; + } + + elapsedTimeMs.value = videoEl.value.currentTime * 1000; + } + window.requestAnimationFrame(updateMediaTick); + } + + updateMediaTick(); + + videoEl.value.addEventListener('play', () => { + isActuallyPlaying.value = true; + }); + + videoEl.value.addEventListener('pause', () => { + isActuallyPlaying.value = false; + isPlaying.value = false; + }); + + videoEl.value.addEventListener('ended', () => { + oncePlayed.value = false; + isActuallyPlaying.value = false; + isPlaying.value = false; + }); + + durationMs.value = videoEl.value.duration * 1000; + videoEl.value.addEventListener('durationchange', () => { + if (videoEl.value) { + durationMs.value = videoEl.value.duration * 1000; + } + }); + + videoEl.value.volume = volume.value; + hasAudio(videoEl.value).then(had => { + if (!had && videoEl.value) { + videoEl.value.loop = videoEl.value.muted = true; + videoEl.value.play(); + } + }); + } + }, { + immediate: true, + }); +} + +watch(volume, (to) => { + if (videoEl.value) videoEl.value.volume = to; +}); + +watch(hide, (to) => { + if (to && isFullscreen.value) { + document.exitFullscreen(); + isFullscreen.value = false; + } +}); + +onMounted(() => { + init(); +}); + +onActivated(() => { + init(); +}); + +onDeactivated(() => { + isReady.value = false; + isPlaying.value = false; + isActuallyPlaying.value = false; + elapsedTimeMs.value = 0; + durationMs.value = 0; + bufferedEnd.value = 0; + hide.value = (defaultStore.state.nsfw === 'force' || defaultStore.state.dataSaver.media) ? true : (props.video.isSensitive && defaultStore.state.nsfw !== 'ignore'); + stopVideoElWatch(); + onceInit = false; }); </script> <style lang="scss" module> -.visible { +.videoContainer { + container-type: inline-size; position: relative; + overflow: clip; } -.sensitiveContainer { +.sensitive { position: relative; &::after { @@ -81,45 +358,198 @@ watch(videoEl, () => { } } +.indicators { + display: inline-flex; + position: absolute; + top: 10px; + left: 10px; + pointer-events: none; + opacity: .5; + gap: 6px; +} + +.indicator { + /* Hardcode to black because either --bg or --fg makes it hard to read in dark/light mode */ + background-color: black; + border-radius: 6px; + color: var(--accentLighten); + display: inline-block; + font-weight: bold; + font-size: 0.8em; + padding: 2px 5px; +} + .hide { display: block; position: absolute; border-radius: var(--radius-sm); background-color: black; color: var(--accentLighten); - font-size: 14px; + font-size: 12px; opacity: .5; - padding: 3px 6px; + padding: 5px 8px; text-align: center; cursor: pointer; top: 12px; right: 12px; } -.video { - display: flex; - justify-content: center; - align-items: center; - font-size: 3.5em; - overflow: hidden; - background-position: center; - background-size: cover; +.hidden { width: 100%; - height: 100%; + background: none; + border: none; + outline: none; + font: inherit; + color: inherit; + cursor: pointer; + padding: 120px 0; + display: flex; + align-items: center; + justify-content: center; + background: #000; } -.hidden { - display: flex; - justify-content: center; - align-items: center; - background: #111; +.hiddenTextWrapper { + text-align: center; + font-size: 0.8em; color: #fff; } -.sensitive { - display: table-cell; - text-align: center; - font-size: 12px; +.videoRoot { + background: #000; + position: relative; + width: 100%; + height: 100%; + object-fit: contain; +} + +.video { + display: block; + height: 100%; + width: 100%; + pointer-events: none; +} + +.videoOverlayPlayButton { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + + opacity: 0; + transition: opacity .4s ease-in-out; + + background: var(--accent); + color: #fff; + padding: 1rem; + border-radius: 99rem; + + font-size: 1.1rem; +} + +.videoLoading { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +.videoControls { + display: grid; + grid-template-areas: + "left time . volume right" + "seekbar seekbar seekbar seekbar seekbar"; + grid-template-columns: auto auto 1fr auto auto; + align-items: center; + gap: 4px 8px; + pointer-events: none; + + padding: 35px 10px 10px 10px; + background: linear-gradient(rgba(0, 0, 0, 0),rgba(0, 0, 0, .75)); + + position: absolute; + left: 0; + right: 0; + bottom: 0; + + transform: translateY(100%); + pointer-events: none; + opacity: 0; + transition: opacity .4s ease-in-out, transform .4s ease-in-out; +} + +.active { + .videoControls { + transform: translateY(0); + opacity: 1; + pointer-events: auto; + } + + .videoOverlayPlayButton { + opacity: 1; + } +} + +.controlsChild { + display: flex; + align-items: center; + gap: 4px; + color: #fff; + + .controlButton { + padding: 6px; + border-radius: calc(var(--radius) / 2); + transition: background-color .2s ease-in-out; + font-size: 1.05rem; + + &:hover { + background-color: var(--accent); + } + } +} + +.controlsLeft { + grid-area: left; +} + +.controlsRight { + grid-area: right; +} + +.controlsTime { + grid-area: time; + font-size: .9rem; +} + +.controlsVolume { + grid-area: volume; + + .volumeSeekbar { + display: none; + } +} + +.seekbarRoot { + grid-area: seekbar; +} + +@container (min-width: 500px) { + .videoControls { + grid-template-areas: "left seekbar time volume right"; + grid-template-columns: auto 1fr auto auto auto; + } + + .controlsVolume { + .volumeSeekbar { + max-width: 90px; + display: block; + flex-grow: 1; + } + } } .indicators { display: inline-flex; diff --git a/packages/frontend/src/components/MkPlusOneEffect.vue b/packages/frontend/src/components/MkPlusOneEffect.vue index e5e5a9edf4..06b966dbcd 100644 --- a/packages/frontend/src/components/MkPlusOneEffect.vue +++ b/packages/frontend/src/components/MkPlusOneEffect.vue @@ -16,7 +16,7 @@ import * as os from '@/os.js'; const props = withDefaults(defineProps<{ x: number; y: number; - value?: number; + value?: number | string; }>(), { value: 1, }); diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue index c8c8d0f910..3dd8259e05 100644 --- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue +++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue @@ -10,6 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only class="_button" :class="[$style.root, { [$style.reacted]: note.myReaction == reaction, [$style.canToggle]: canToggle, [$style.small]: defaultStore.state.reactionsDisplaySize === 'small', [$style.large]: defaultStore.state.reactionsDisplaySize === 'large' }]" @click="toggleReaction()" + @contextmenu.prevent.stop="menu" > <MkReactionIcon :class="defaultStore.state.limitWidthOfReaction ? $style.limitWidth : ''" :reaction="reaction" :emojiUrl="note.reactionEmojis[reaction.substring(1, reaction.length - 1)]" @click="toggleReaction()" @click.stop/> <span :class="$style.count">{{ count }}</span> @@ -21,6 +22,7 @@ import { computed, inject, onMounted, shallowRef, watch } from 'vue'; import * as Misskey from 'misskey-js'; import XDetails from '@/components/MkReactionsViewer.details.vue'; import MkReactionIcon from '@/components/MkReactionIcon.vue'; +import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue'; import * as os from '@/os.js'; import { misskeyApi, misskeyApiGet } from '@/scripts/misskey-api.js'; import { useTooltip } from '@/scripts/use-tooltip.js'; @@ -98,6 +100,22 @@ async function toggleReaction() { } } +async function menu(ev) { + if (!canToggle.value) return; + if (!props.reaction.includes(":")) return; + os.popupMenu([{ + text: i18n.ts.info, + icon: 'ti ti-info-circle', + action: async () => { + os.popup(MkCustomEmojiDetailedDialog, { + emoji: await misskeyApiGet('emoji', { + name: props.reaction.replace(/:/g, '').replace(/@\./, ''), + }), + }); + }, + }], ev.currentTarget ?? ev.target); +} + function anime() { if (document.hidden) return; if (!defaultStore.state.animation) return; diff --git a/packages/frontend/src/components/global/MkCustomEmoji.vue b/packages/frontend/src/components/global/MkCustomEmoji.vue index 18fdcd4ffb..2a4d02a7be 100644 --- a/packages/frontend/src/components/global/MkCustomEmoji.vue +++ b/packages/frontend/src/components/global/MkCustomEmoji.vue @@ -24,9 +24,11 @@ import { getProxiedImageUrl, getStaticImageUrl } from '@/scripts/media-proxy.js' import { defaultStore } from '@/store.js'; import { customEmojisMap } from '@/custom-emojis.js'; import * as os from '@/os.js'; +import { misskeyApiGet } from '@/scripts/misskey-api.js'; import copyToClipboard from '@/scripts/copy-to-clipboard.js'; import * as sound from '@/scripts/sound.js'; import { i18n } from '@/i18n.js'; +import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue'; const props = defineProps<{ name: string; @@ -93,7 +95,19 @@ function onClick(ev: MouseEvent) { react(`:${props.name}:`); sound.playMisskeySfx('reaction'); }, - }] : [])], ev.currentTarget ?? ev.target); + }] : []), { + text: i18n.ts.info, + icon: 'ti ti-info-circle', + action: async () => { + os.popup(MkCustomEmojiDetailedDialog, { + emoji: await misskeyApiGet('emoji', { + name: customEmojiName.value, + }), + }, { + anchor: ev.target, + }); + }, + }], ev.currentTarget ?? ev.target); } } </script> diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts index 25118a9cbc..cd55362923 100644 --- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts +++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts @@ -48,10 +48,6 @@ type MfmEvents = { clickEv(id: string): void; }; -type MfmEvents = { - clickEv(id: string): void; -}; - // eslint-disable-next-line import/no-default-export export default function(props: MfmProps, context: SetupContext<MfmEvents>) { const isNote = props.isNote ?? true; @@ -69,6 +65,11 @@ export default function(props: MfmProps, context: SetupContext<MfmEvents>) { const useAnim = defaultStore.state.advancedMfm && defaultStore.state.animatedMfm ? true : props.isAnim ? true : false; + const validColor = (c: string | null | undefined): string | null => { + if (c == null) return null; + return c.match(/^[0-9a-f]{3,6}$/i) ? c : null; + }; + const MkFormula = defineAsyncComponent(() => import('@/components/MkFormula.vue')); /** @@ -247,17 +248,30 @@ export default function(props: MfmProps, context: SetupContext<MfmEvents>) { break; } case 'fg': { - let color = token.props.args.color; - if (!/^[0-9a-f]{3,6}$/i.test(color)) color = 'f00'; + let color = validColor(token.props.args.color); + color = color ?? 'f00'; style = `color: #${color}; overflow-wrap: anywhere;`; break; } case 'bg': { - let color = token.props.args.color; - if (!/^[0-9a-f]{3,6}$/i.test(color)) color = 'f00'; + 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 ( + !['hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset'] + .includes(b_style) + ) b_style = 'solid'; + const width = parseFloat(token.props.args.width ?? '1'); + const radius = parseFloat(token.props.args.radius ?? '0'); + style = `border: ${width}px ${b_style} ${color}; border-radius: ${radius}px`; + break; + } case 'ruby': { if (token.children.length === 1) { const child = token.children[0]; diff --git a/packages/frontend/src/const.ts b/packages/frontend/src/const.ts index cdd6731269..630e3a2a92 100644 --- a/packages/frontend/src/const.ts +++ b/packages/frontend/src/const.ts @@ -161,4 +161,4 @@ export const DEFAULT_SERVER_ERROR_IMAGE_URL = 'https://launcher.moe/error.png'; export const DEFAULT_NOT_FOUND_IMAGE_URL = 'https://launcher.moe/missingpage.webp'; export const DEFAULT_INFO_IMAGE_URL = 'https://launcher.moe/nothinghere.png'; -export const MFM_TAGS = ['tada', 'jelly', 'twitch', 'shake', 'spin', 'jump', 'bounce', 'flip', 'x2', 'x3', 'x4', 'scale', 'position', 'fg', 'bg', 'font', 'blur', 'rainbow', 'sparkle', 'rotate', 'ruby', 'unixtime']; +export const MFM_TAGS = ['tada', 'jelly', 'twitch', 'shake', 'spin', 'jump', 'bounce', 'flip', 'x2', 'x3', 'x4', 'scale', 'position', 'fg', 'bg', 'border', 'font', 'blur', 'rainbow', 'sparkle', 'rotate', 'ruby', 'unixtime']; diff --git a/packages/frontend/src/filters/hms.ts b/packages/frontend/src/filters/hms.ts new file mode 100644 index 0000000000..7b5da965ff --- /dev/null +++ b/packages/frontend/src/filters/hms.ts @@ -0,0 +1,65 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { i18n } from '@/i18n.js'; + +export function hms(ms: number, options: { + textFormat?: 'colon' | 'locale'; + enableSeconds?: boolean; + enableMs?: boolean; +}) { + const _options = { + textFormat: 'colon', + enableSeconds: true, + enableMs: false, + ...options, + }; + + const res: { + h?: string; + m?: string; + s?: string; + ms?: string; + } = {}; + + // ミリ秒を秒に変換 + let seconds = Math.floor(ms / 1000); + + // 小数点以下の値(2位まで) + const mili = ms - seconds * 1000; + + // 時間を計算 + const hours = Math.floor(seconds / 3600); + res.h = format(hours); + seconds %= 3600; + + // 分を計算 + const minutes = Math.floor(seconds / 60); + res.m = format(minutes); + seconds %= 60; + + // 残った秒数を取得 + seconds = seconds % 60; + res.s = format(seconds); + + // ミリ秒を取得 + res.ms = format(Math.floor(mili / 10)); + + // 結果を返す + if (_options.textFormat === 'locale') { + res.h += i18n.ts._time.hour; + res.m += i18n.ts._time.minute; + res.s += i18n.ts._time.second; + } + return [ + res.h.startsWith('00') ? undefined : res.h, + res.m, + (_options.enableSeconds ? res.s : undefined), + ].filter(v => v !== undefined).join(_options.textFormat === 'colon' ? ':' : ' ') + (_options.enableMs ? _options.textFormat === 'colon' ? `.${res.ms}` : ` ${res.ms}` : ''); +} + +function format(n: number) { + return n.toString().padStart(2, '0'); +} diff --git a/packages/frontend/src/global/router/definition.ts b/packages/frontend/src/global/router/definition.ts index 7637ed684f..1ba6fba55a 100644 --- a/packages/frontend/src/global/router/definition.ts +++ b/packages/frontend/src/global/router/definition.ts @@ -527,6 +527,10 @@ const routes = [{ path: '/timeline/antenna/:antennaId', component: page(() => import('@/pages/antenna-timeline.vue')), loginRequired: true, +}, { + path: '/games', + component: page(() => import('@/pages/games.vue')), + loginRequired: true, }, { path: '/clicker', component: page(() => import('@/pages/clicker.vue')), diff --git a/packages/frontend/src/navbar.ts b/packages/frontend/src/navbar.ts index d615c751ee..cd121f896a 100644 --- a/packages/frontend/src/navbar.ts +++ b/packages/frontend/src/navbar.ts @@ -118,6 +118,11 @@ export const navbarItemDef = reactive({ show: computed(() => $i != null && instance.enableAchievements), to: '/my/achievements', }, + games: { + title: 'Sharkey Games', + icon: 'ph-gane-controller ph-bold ph-lg', + to: '/games', + }, ui: { title: i18n.ts.switchUi, icon: 'ph-devices ph-bold ph-lg', diff --git a/packages/frontend/src/pages/drop-and-fusion.game.vue b/packages/frontend/src/pages/drop-and-fusion.game.vue index c222fdeb40..a8fa953c38 100644 --- a/packages/frontend/src/pages/drop-and-fusion.game.vue +++ b/packages/frontend/src/pages/drop-and-fusion.game.vue @@ -4,19 +4,33 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<div :class="$style.root"> - <div v-if="!gameLoaded" :class="$style.loadingScreen"> - Loading... - </div> - <Transition - :enterActiveClass="$style.transition_zoom_enterActive" - :leaveActiveClass="$style.transition_zoom_leaveActive" - :enterFromClass="$style.transition_zoom_enterFrom" - :leaveToClass="$style.transition_zoom_leaveTo" - :moveClass="$style.transition_zoom_move" - mode="out-in" - > +<MkSpacer :contentMax="800"> + <div :class="$style.root"> + <div v-if="!gameLoaded" :class="$style.loadingScreen"> + <div> + Loading... + </div> + </div> + <!-- ↓に対してTransitionコンポーネントを使うと何故かkeyを指定していてもキャッシュが効かず様々なコンポーネントが都度再評価されてパフォーマンスが低下する --> <div v-show="gameLoaded" class="_gaps_s"> + <div v-if="readyGo === 'ready'" :class="$style.readyGo_bg"> + </div> + <Transition + :enterActiveClass="$style.transition_zoom_enterActive" + :leaveActiveClass="$style.transition_zoom_leaveActive" + :enterFromClass="$style.transition_zoom_enterFrom" + :leaveToClass="$style.transition_zoom_leaveTo" + :moveClass="$style.transition_zoom_move" + mode="default" + > + <div v-if="readyGo === 'ready'" :class="$style.readyGo_ready"> + <img src="/client-assets/drop-and-fusion/ready.png" :class="$style.readyGo_img"/> + </div> + <div v-else-if="readyGo === 'go'" :class="$style.readyGo_go"> + <img src="/client-assets/drop-and-fusion/go.png" :class="$style.readyGo_img"/> + </div> + </Transition> + <div :class="$style.header"> <div :class="[$style.frame, $style.headerTitle]"> <div :class="$style.frameInner"> @@ -42,6 +56,7 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </div> </div> + <div ref="containerEl" :class="[$style.gameContainer, { [$style.gameOver]: isGameOver && !replaying }]" @contextmenu.stop.prevent @click.stop.prevent="onClick" @touchmove.stop.prevent="onTouchmove" @touchend="onTouchend" @mousemove="onMousemove"> <img v-if="defaultStore.state.darkMode" src="/client-assets/drop-and-fusion/frame-dark.svg" :class="$style.mainFrameImg"/> <img v-else src="/client-assets/drop-and-fusion/frame-light.svg" :class="$style.mainFrameImg"/> @@ -55,7 +70,7 @@ SPDX-License-Identifier: AGPL-3.0-only > <div v-show="combo > 1" :class="$style.combo" :style="{ fontSize: `${100 + ((comboPrev - 2) * 15)}%` }">{{ comboPrev }} Chain!</div> </Transition> - <div v-if="!isGameOver && !replaying" :class="$style.dropperContainer" :style="{ left: dropperX + 'px' }"> + <div v-if="!isGameOver && !replaying && readyGo !== 'ready'" :class="$style.dropperContainer" :style="{ left: dropperX + 'px' }"> <!--<img v-if="currentPick" src="/client-assets/drop-and-fusion/dropper.png" :class="$style.dropper" :style="{ left: dropperX + 'px' }"/>--> <Transition :enterActiveClass="$style.transition_picked_enterActive" @@ -65,7 +80,7 @@ SPDX-License-Identifier: AGPL-3.0-only :moveClass="$style.transition_picked_move" mode="out-in" > - <img v-if="currentPick" :key="currentPick.id" :src="getTextureImageUrl(currentPick.mono)" :class="$style.currentMono" :style="{ marginBottom: -((currentPick?.mono.size * viewScale) / 2) + 'px', left: -((currentPick?.mono.size * viewScale) / 2) + 'px', width: `${currentPick?.mono.size * viewScale}px` }"/> + <img v-if="currentPick" :key="currentPick.id" :src="getTextureImageUrl(currentPick.mono)" :class="$style.currentMono" :style="{ marginBottom: -((currentPick?.mono.sizeY * viewScale) / 2) + 'px', left: -((currentPick?.mono.sizeX * viewScale) / 2) + 'px', width: `${currentPick?.mono.sizeX * viewScale}px` }"/> </Transition> <template v-if="dropReady && currentPick"> <img src="/client-assets/drop-and-fusion/drop-arrow.svg" :class="$style.currentMonoArrow"/> @@ -75,12 +90,15 @@ SPDX-License-Identifier: AGPL-3.0-only <div v-if="isGameOver && !replaying" :class="$style.gameOverLabel"> <div class="_gaps_s"> <img src="/client-assets/drop-and-fusion/gameover.png" style="width: 200px; max-width: 100%; display: block; margin: auto; margin-bottom: -5px;"/> - <div>SCORE: <MkNumber :value="score"/></div> + <div>SCORE: <MkNumber :value="score"/>{{ getScoreUnit(gameMode) }}</div> <div>MAX CHAIN: <MkNumber :value="maxCombo"/></div> + <div v-if="gameMode === 'yen'">TOTAL EARNINGS: <b><MkNumber :value="yenTotal ?? score"/>円</b></div> + <div v-if="gameMode === 'sweets'"><b>おにぎり<MkNumber :value="score / 130"/>個分</b></div> </div> </div> <div v-if="replaying" :class="$style.replayIndicator"><span :class="$style.replayIndicatorText"><i class="ti ti-player-play"></i> {{ i18n.ts.replaying }}</span></div> </div> + <div v-if="replaying" :class="$style.frame"> <div :class="$style.frameInner"> <div style="background: #0004;"> @@ -90,26 +108,29 @@ SPDX-License-Identifier: AGPL-3.0-only <div :class="$style.frameInner"> <div class="_buttonsCenter"> <MkButton @click="endReplay"><i class="ti ti-player-stop"></i> END</MkButton> - <MkButton :primary="replayPlaybackRate === 2" @click="replayPlaybackRate = replayPlaybackRate === 2 ? 1 : 2"><i class="ti ti-player-track-next"></i> x2</MkButton> <MkButton :primary="replayPlaybackRate === 4" @click="replayPlaybackRate = replayPlaybackRate === 4 ? 1 : 4"><i class="ti ti-player-track-next"></i> x4</MkButton> + <MkButton :primary="replayPlaybackRate === 16" @click="replayPlaybackRate = replayPlaybackRate === 16 ? 1 : 16"><i class="ti ti-player-track-next"></i> x16</MkButton> </div> </div> </div> + <div v-if="isGameOver" :class="$style.frame"> <div :class="$style.frameInner"> <div class="_buttonsCenter"> - <MkButton primary rounded @click="backToTitle">{{ i18n.ts.done }}</MkButton> + <MkButton primary rounded @click="backToTitle">{{ i18n.ts.backToTitle }}</MkButton> <MkButton primary rounded @click="replay">{{ i18n.ts.showReplay }}</MkButton> <MkButton primary rounded @click="share">{{ i18n.ts.share }}</MkButton> <MkButton rounded @click="exportLog">Copy replay data</MkButton> </div> </div> </div> + <div style="display: flex;"> <div :class="$style.frame" style="flex: 1; margin-right: 10px;"> <div :class="$style.frameInner"> - <div>SCORE: <b><MkNumber :value="score"/></b> (MAX CHAIN: <b><MkNumber :value="maxCombo"/></b>)</div> - <div>HIGH SCORE: <b v-if="highScore"><MkNumber :value="highScore"/></b><b v-else>-</b></div> + <div>SCORE: <b><MkNumber :value="score"/>{{ getScoreUnit(gameMode) }}</b></div> + <div>HIGH SCORE: <b v-if="highScore"><MkNumber :value="highScore"/>{{ getScoreUnit(gameMode) }}</b><b v-else>-</b></div> + <div v-if="gameMode === 'yen'">TOTAL EARNINGS: <b v-if="yenTotal"><MkNumber :value="yenTotal"/>円</b><b v-else>-</b></div> </div> </div> <div :class="[$style.frame]" style="margin-left: auto;"> @@ -118,6 +139,7 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </div> </div> + <div v-if="showConfig" :class="$style.frame"> <div :class="$style.frameInner"> <div class="_gaps"> @@ -130,6 +152,19 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </div> </div> + + <div :class="$style.frame"> + <div :class="$style.frameInner"> + <div>FUSION RECIPE</div> + <div> + <div v-for="(mono, i) in game.monoDefinitions.sort((a, b) => a.level - b.level)" :key="mono.id" style="display: inline-block;"> + <img :src="getTextureImageUrl(mono)" style="width: 32px; vertical-align: bottom;"/> + <div v-if="i < game.monoDefinitions.length - 1" style="display: inline-block; margin-left: 4px; vertical-align: bottom;"><i class="ti ti-arrow-big-right"></i></div> + </div> + </div> + </div> + </div> + <div :class="$style.frame"> <div :class="$style.frameInner"> <MkButton v-if="!isGameOver && !replaying" full danger @click="surrender">Surrender</MkButton> @@ -137,12 +172,12 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </div> </div> - </Transition> -</div> + </div> +</MkSpacer> </template> <script lang="ts" setup> -import { onDeactivated, onMounted, onUnmounted, ref, shallowRef, watch } from 'vue'; +import { computed, onDeactivated, onMounted, onUnmounted, ref, shallowRef, watch } from 'vue'; import * as Matter from 'matter-js'; import * as Misskey from 'misskey-js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; @@ -163,234 +198,305 @@ import * as sound from '@/scripts/sound.js'; import MkRange from '@/components/MkRange.vue'; import copyToClipboard from '@/scripts/copy-to-clipboard.js'; -const NORMAL_BASE_SIZE = 30; -const NORAML_MONOS: Mono[] = [{ +type FrontendMonoDefinition = { + id: string; + img: string; + imgSizeX: number; + imgSizeY: number; + spriteScale: number; + sfxPitch: number; +}; + +const NORAML_MONOS: FrontendMonoDefinition[] = [{ id: '9377076d-c980-4d83-bdaf-175bc58275b7', - level: 10, - size: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 512, - dropCandidate: false, sfxPitch: 0.25, - img: '/client-assets/drop-and-fusion/exploding_head.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/exploding_head.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: 'be9f38d2-b267-4b1a-b420-904e22e80568', - level: 9, - size: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 256, - dropCandidate: false, sfxPitch: 0.5, - img: '/client-assets/drop-and-fusion/face_with_symbols_on_mouth.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/face_with_symbols_on_mouth.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: 'beb30459-b064-4888-926b-f572e4e72e0c', - level: 8, - size: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 128, - dropCandidate: false, sfxPitch: 0.75, - img: '/client-assets/drop-and-fusion/cold_face.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/cold_face.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: 'feab6426-d9d8-49ae-849c-048cdbb6cdf0', - level: 7, - size: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 64, - dropCandidate: false, sfxPitch: 1, - img: '/client-assets/drop-and-fusion/zany_face.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/zany_face.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: 'd6d8fed6-6d18-4726-81a1-6cf2c974df8a', - level: 6, - size: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 32, - dropCandidate: false, sfxPitch: 1.5, - img: '/client-assets/drop-and-fusion/pleading_face.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/pleading_face.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '249c728e-230f-4332-bbbf-281c271c75b2', - level: 5, - size: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 16, - dropCandidate: true, sfxPitch: 2, - img: '/client-assets/drop-and-fusion/face_with_open_mouth.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/face_with_open_mouth.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '23d67613-d484-4a93-b71e-3e81b19d6186', - level: 4, - size: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 8, - dropCandidate: true, sfxPitch: 2.5, - img: '/client-assets/drop-and-fusion/smiling_face_with_sunglasses.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/smiling_face_with_sunglasses.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '3cbd0add-ad7d-4685-bad0-29f6dddc0b99', - level: 3, - size: NORMAL_BASE_SIZE * 1.25 * 1.25, - shape: 'circle', - score: 4, - dropCandidate: true, sfxPitch: 3, - img: '/client-assets/drop-and-fusion/grinning_squinting_face.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/grinning_squinting_face.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '8f86d4f4-ee02-41bf-ad38-1ce0ae457fb5', - level: 2, - size: NORMAL_BASE_SIZE * 1.25, - shape: 'circle', - score: 2, - dropCandidate: true, sfxPitch: 3.5, - img: '/client-assets/drop-and-fusion/smiling_face_with_hearts.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/smiling_face_with_hearts.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '64ec4add-ce39-42b4-96cb-33908f3f118d', - level: 1, - size: NORMAL_BASE_SIZE, - shape: 'circle', - score: 1, - dropCandidate: true, sfxPitch: 4, - img: '/client-assets/drop-and-fusion/heart_suit.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/normal_monos/heart_suit.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }]; -const SQUARE_BASE_SIZE = 28; -const SQUARE_MONOS: Mono[] = [{ - id: 'f75fd0ba-d3d4-40a4-9712-b470e45b0525', - level: 10, - size: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'rectangle', - score: 512, - dropCandidate: false, +const YEN_MONOS: FrontendMonoDefinition[] = [{ + id: '880f9bd9-802f-4135-a7e1-fd0e0331f726', sfxPitch: 0.25, - img: '/client-assets/drop-and-fusion/keycap_10.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/yen_monos/10000yen.png', + imgSizeX: 512, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: 'e807beb6-374a-4314-9cc2-aa5f17d96b6b', + sfxPitch: 0.5, + img: '/client-assets/drop-and-fusion/yen_monos/5000yen.png', + imgSizeX: 512, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: '033445b7-8f90-4fc9-beca-71a9e87cb530', + sfxPitch: 0.75, + img: '/client-assets/drop-and-fusion/yen_monos/2000yen.png', + imgSizeX: 512, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: '410a09ec-5f7f-46f6-b26f-cbca4ccbd091', + sfxPitch: 1, + img: '/client-assets/drop-and-fusion/yen_monos/1000yen.png', + imgSizeX: 512, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: '2aae82bc-3fa4-49ad-a6b5-94d888e809f5', + sfxPitch: 1.5, + img: '/client-assets/drop-and-fusion/yen_monos/500yen.png', + imgSizeX: 256, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: 'a619bd67-d08f-4cc0-8c7e-c8072a4950cd', + sfxPitch: 2, + img: '/client-assets/drop-and-fusion/yen_monos/100yen.png', + imgSizeX: 256, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: 'c1c5d8e4-17d6-4455-befd-12154d731faa', + sfxPitch: 2.5, + img: '/client-assets/drop-and-fusion/yen_monos/50yen.png', + imgSizeX: 256, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: '7082648c-e428-44c4-887a-25c07a8ebdd5', + sfxPitch: 3, + img: '/client-assets/drop-and-fusion/yen_monos/10yen.png', + imgSizeX: 256, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: '0d8d40d5-e6e0-4d26-8a95-b8d842363379', + sfxPitch: 3.5, + img: '/client-assets/drop-and-fusion/yen_monos/5yen.png', + imgSizeX: 256, + imgSizeY: 256, + spriteScale: 0.97, +}, { + id: '9dec1b38-d99d-40de-8288-37367b983d0d', + sfxPitch: 4, + img: '/client-assets/drop-and-fusion/yen_monos/1yen.png', + imgSizeX: 256, + imgSizeY: 256, + spriteScale: 0.97, +}]; + +const SQUARE_MONOS: FrontendMonoDefinition[] = [{ + id: 'f75fd0ba-d3d4-40a4-9712-b470e45b0525', + sfxPitch: 0.25, + img: '/client-assets/drop-and-fusion/square_monos/keycap_10.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '7b70f4af-1c01-45fd-af72-61b1f01e03d1', - level: 9, - size: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'rectangle', - score: 256, - dropCandidate: false, sfxPitch: 0.5, - img: '/client-assets/drop-and-fusion/keycap_9.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_9.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '41607ef3-b6d6-4829-95b6-3737bf8bb956', - level: 8, - size: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'rectangle', - score: 128, - dropCandidate: false, sfxPitch: 0.75, - img: '/client-assets/drop-and-fusion/keycap_8.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_8.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '8a8310d2-0374-460f-bb50-ca9cd3ee3416', - level: 7, - size: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'rectangle', - score: 64, - dropCandidate: false, sfxPitch: 1, - img: '/client-assets/drop-and-fusion/keycap_7.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_7.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '1092e069-fe1a-450b-be97-b5d477ec398c', - level: 6, - size: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'rectangle', - score: 32, - dropCandidate: false, sfxPitch: 1.5, - img: '/client-assets/drop-and-fusion/keycap_6.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_6.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '2294734d-7bb8-4781-bb7b-ef3820abf3d0', - level: 5, - size: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'rectangle', - score: 16, - dropCandidate: true, sfxPitch: 2, - img: '/client-assets/drop-and-fusion/keycap_5.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_5.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: 'ea8a61af-e350-45f7-ba6a-366fcd65692a', - level: 4, - size: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25, - shape: 'rectangle', - score: 8, - dropCandidate: true, sfxPitch: 2.5, - img: '/client-assets/drop-and-fusion/keycap_4.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_4.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: 'd0c74815-fc1c-4fbe-9953-c92e4b20f919', - level: 3, - size: SQUARE_BASE_SIZE * 1.25 * 1.25, - shape: 'rectangle', - score: 4, - dropCandidate: true, sfxPitch: 3, - img: '/client-assets/drop-and-fusion/keycap_3.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_3.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: 'd8fbd70e-611d-402d-87da-1a7fd8cd2c8d', - level: 2, - size: SQUARE_BASE_SIZE * 1.25, - shape: 'rectangle', - score: 2, - dropCandidate: true, sfxPitch: 3.5, - img: '/client-assets/drop-and-fusion/keycap_2.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_2.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }, { id: '35e476ee-44bd-4711-ad42-87be245d3efd', - level: 1, - size: SQUARE_BASE_SIZE, - shape: 'rectangle', - score: 1, - dropCandidate: true, sfxPitch: 4, - img: '/client-assets/drop-and-fusion/keycap_1.png', - imgSize: 256, + img: '/client-assets/drop-and-fusion/square_monos/keycap_1.png', + imgSizeX: 256, + imgSizeY: 256, spriteScale: 1.12, }]; +const SWEETS_MONOS: FrontendMonoDefinition[] = [{ + id: '77f724c0-88be-4aeb-8e1a-a00ed18e3844', + sfxPitch: 0.25, + img: '/client-assets/drop-and-fusion/sweets_monos/shortcake_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: 'f3468ef4-2e1e-4906-8795-f147f39f7e1f', + sfxPitch: 0.5, + img: '/client-assets/drop-and-fusion/sweets_monos/pancakes_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: 'bcb41129-6f2d-44ee-89d3-86eb2df564ba', + sfxPitch: 0.75, + img: '/client-assets/drop-and-fusion/sweets_monos/shaved_ice_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: 'f058e1ad-1981-409b-b3a7-302de0a43744', + sfxPitch: 1, + img: '/client-assets/drop-and-fusion/sweets_monos/soft_ice_cream_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: 'd22cfe38-5a3b-4b9c-a1a6-907930a3d732', + sfxPitch: 1.5, + img: '/client-assets/drop-and-fusion/sweets_monos/doughnut_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: '79867083-a073-427e-ae82-07a70d9f3b4f', + sfxPitch: 2, + img: '/client-assets/drop-and-fusion/sweets_monos/custard_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: '2e152a12-a567-4100-b4d4-d15d81ba47b1', + sfxPitch: 2.5, + img: '/client-assets/drop-and-fusion/sweets_monos/chocolate_bar_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: '12250376-2258-4716-8eec-b3a7239461fc', + sfxPitch: 3, + img: '/client-assets/drop-and-fusion/sweets_monos/lollipop_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: '4d4f2668-4be7-44a3-aa3a-856df6e25aa6', + sfxPitch: 3.5, + img: '/client-assets/drop-and-fusion/sweets_monos/candy_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}, { + id: 'c9984b40-4045-44c3-b260-d47b7b4625b2', + sfxPitch: 4, + img: '/client-assets/drop-and-fusion/sweets_monos/cookie_color.svg', + imgSizeX: 32, + imgSizeY: 32, + spriteScale: 1, +}]; + const props = defineProps<{ - gameMode: 'normal' | 'square'; + gameMode: 'normal' | 'square' | 'yen' | 'sweets'; mute: boolean; }>(); @@ -398,7 +504,34 @@ const emit = defineEmits<{ (ev: 'end'): void; }>(); -const monoDefinitions = props.gameMode === 'normal' ? NORAML_MONOS : SQUARE_MONOS; +const monoDefinitions = computed(() => { + return props.gameMode === 'normal' ? NORAML_MONOS : + props.gameMode === 'square' ? SQUARE_MONOS : + props.gameMode === 'yen' ? YEN_MONOS : + props.gameMode === 'sweets' ? SWEETS_MONOS : + [] as never; +}); + +function getScoreUnit(gameMode: string) { + return gameMode === 'normal' ? 'pt' : + gameMode === 'square' ? 'pt' : + gameMode === 'yen' ? '円' : + gameMode === 'sweets' ? 'kcal' : + '' as never; +} + +function getMonoRenderOptions(mono: Mono) { + const def = monoDefinitions.value.find(x => x.id === mono.id)!; + return { + + sprite: { + texture: def.img, + xScale: (mono.sizeX / def.imgSizeX) * def.spriteScale, + yScale: (mono.sizeY / def.imgSizeY) * def.spriteScale, + }, + + }; +} let viewScale = 1; let seed: string = Date.now().toString(); @@ -412,7 +545,8 @@ let monoTextureUrls: Record<string, string> = {}; let tickRaf: number | null = null; let game = new DropAndFusionGame({ seed: seed, - monoDefinitions, + gameMode: props.gameMode, + getMonoRenderOptions, }); attachGameEvents(); @@ -429,7 +563,9 @@ const maxCombo = ref(0); const dropReady = ref(true); const isGameOver = ref(false); const gameLoaded = ref(false); +const readyGo = ref<'ready' | 'go' | null>('ready'); const highScore = ref<number | null>(null); +const yenTotal = ref<number | null>(null); const showConfig = ref(false); const replaying = ref(false); const replayPlaybackRate = ref(1); @@ -464,7 +600,7 @@ function createRendererInstance(game: DropAndFusionGame) { } function loadMonoTextures() { - async function loadSingleMonoTexture(mono: Mono) { + async function loadSingleMonoTexture(mono: FrontendMonoDefinition) { if (renderer == null) return; // Matter-js内にキャッシュがある場合はスキップ @@ -491,22 +627,24 @@ function loadMonoTextures() { renderer.textures[mono.img] = image; } - return Promise.all(monoDefinitions.map(x => loadSingleMonoTexture(x))); + return Promise.all(monoDefinitions.value.map(x => loadSingleMonoTexture(x))); } function getTextureImageUrl(mono: Mono) { + const def = monoDefinitions.value.find(x => x.id === mono.id)!; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (monoTextureUrls[mono.img]) { - return monoTextureUrls[mono.img]; + if (monoTextureUrls[def.img]) { + return monoTextureUrls[def.img]; // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - } else if (monoTextures[mono.img]) { + } else if (monoTextures[def.img]) { // Gameクラス内にキャッシュがある場合はそれを使う - const out = URL.createObjectURL(monoTextures[mono.img]); - monoTextureUrls[mono.img] = out; + const out = URL.createObjectURL(monoTextures[def.img]); + monoTextureUrls[def.img] = out; return out; } else { - return mono.img; + return def.img; } } @@ -555,8 +693,8 @@ function tickReplay() { } async function start() { - await loadMonoTextures(); renderer = createRendererInstance(game); + await loadMonoTextures(); Matter.Render.lookAt(renderer, { min: { x: 0, y: 0 }, max: { x: game.GAME_WIDTH, y: game.GAME_HEIGHT }, @@ -566,6 +704,13 @@ async function start() { window.requestAnimationFrame(tick); gameLoaded.value = true; + + window.setTimeout(() => { + readyGo.value = 'go'; + window.setTimeout(() => { + readyGo.value = null; + }, 1000); + }, 1500); } function onClick(ev: MouseEvent) { @@ -615,7 +760,8 @@ async function restart() { reset(); game = new DropAndFusionGame({ seed: seed, - monoDefinitions, + gameMode: props.gameMode, + getMonoRenderOptions, }); attachGameEvents(); await start(); @@ -636,11 +782,12 @@ function reset() { comboPrev.value = 0; maxCombo.value = 0; gameLoaded.value = false; + readyGo.value = null; } function dispose() { game.dispose(); - Matter.Render.stop(renderer); + if (renderer) Matter.Render.stop(renderer); if (tickRaf) { window.cancelAnimationFrame(tickRaf); } @@ -655,8 +802,8 @@ function replay() { dispose(); game = new DropAndFusionGame({ seed: seed, - monoDefinitions, - replaying: true, + gameMode: props.gameMode, + getMonoRenderOptions, }); attachGameEvents(); os.promiseDialog(loadMonoTextures(), async () => { @@ -732,7 +879,7 @@ function getGameImageDriveFile() { ctx.fillStyle = '#000'; ctx.font = '16px bold sans-serif'; ctx.textBaseline = 'top'; - ctx.fillText(`SCORE: ${score.value.toLocaleString()}`, 10, 10); + ctx.fillText(`SCORE: ${score.value.toLocaleString()}${getScoreUnit(props.gameMode)}`, 10, 10); ctx.globalAlpha = 0.7; ctx.drawImage(logo, game.GAME_WIDTH * 0.55, 6, game.GAME_WIDTH * 0.45, game.GAME_WIDTH * 0.45 * (logo.height / logo.width)); @@ -772,9 +919,8 @@ async function share() { const file = await uploading; if (!file) return; os.post({ - initialText: `#BubbleGame -MODE: ${props.gameMode} -SCORE: ${score.value.toLocaleString()} (MAX CHAIN: ${maxCombo.value})`, + initialText: `#BubbleGame (${props.gameMode}) +SCORE: ${score.value.toLocaleString()}${getScoreUnit(props.gameMode)}`, initialFiles: [file], instant: true, }); @@ -803,20 +949,33 @@ function attachGameEvents() { game.addListener('changeHolding', value => { holdingStock.value = value; - sound.playUrl('/client-assets/drop-and-fusion/hold.mp3', { - volume: 0.5 * sfxVolume.value, - }); + if (!props.mute) { + sound.playUrl('/client-assets/drop-and-fusion/hold.mp3', { + volume: 0.5 * sfxVolume.value, + playbackRate: replayPlaybackRate.value, + }); + } }); game.addListener('dropped', (x) => { - const panV = x - game.PLAYAREA_MARGIN; - const panW = game.GAME_WIDTH - game.PLAYAREA_MARGIN - game.PLAYAREA_MARGIN; - const pan = ((panV / panW) - 0.5) * 2; - sound.playUrl('/client-assets/drop-and-fusion/poi2.mp3', { - volume: sfxVolume.value, - pan, - playbackRate: replayPlaybackRate.value, - }); + if (!props.mute) { + const panV = x - game.PLAYAREA_MARGIN; + const panW = game.GAME_WIDTH - game.PLAYAREA_MARGIN - game.PLAYAREA_MARGIN; + const pan = ((panV / panW) - 0.5) * 2; + if (props.gameMode === 'yen') { + sound.playUrl('/client-assets/drop-and-fusion/drop_yen.mp3', { + volume: sfxVolume.value, + pan, + playbackRate: replayPlaybackRate.value, + }); + } else { + sound.playUrl('/client-assets/drop-and-fusion/drop.mp3', { + volume: sfxVolume.value, + pan, + playbackRate: replayPlaybackRate.value, + }); + } + } if (replaying.value) return; @@ -825,17 +984,77 @@ function attachGameEvents() { if (!isGameOver.value) { dropReady.value = true; } - }, game.DROP_INTERVAL); + }, game.frameToMs(game.DROP_COOLTIME)); }); - game.addListener('fusioned', (x, y, scoreDelta) => { + game.addListener('fusioned', (x, y, nextMono, scoreDelta) => { if (!canvasEl.value) return; const rect = canvasEl.value.getBoundingClientRect(); const domX = rect.left + (x * viewScale); const domY = rect.top + (y * viewScale); + const scoreUnit = getScoreUnit(props.gameMode); os.popup(MkRippleEffect, { x: domX, y: domY }, {}, 'end'); - os.popup(MkPlusOneEffect, { x: domX, y: domY, value: scoreDelta }, {}, 'end'); + os.popup(MkPlusOneEffect, { x: domX, y: domY, value: scoreDelta + (scoreUnit === 'pt' ? '' : scoreUnit) }, {}, 'end'); + + if (nextMono) { + const def = monoDefinitions.value.find(x => x.id === nextMono.id)!; + if (!props.mute) { + const panV = x - game.PLAYAREA_MARGIN; + const panW = game.GAME_WIDTH - game.PLAYAREA_MARGIN - game.PLAYAREA_MARGIN; + const pan = ((panV / panW) - 0.5) * 2; + const pitch = def.sfxPitch; + if (props.gameMode === 'yen') { + sound.playUrl('/client-assets/drop-and-fusion/fusion_yen.mp3', { + volume: 0.25 * sfxVolume.value, + pan: pan, + playbackRate: (pitch / 4) * replayPlaybackRate.value, + }); + } else { + sound.playUrl('/client-assets/drop-and-fusion/fusion.mp3', { + volume: sfxVolume.value, + pan: pan, + playbackRate: pitch * replayPlaybackRate.value, + }); + } + } + } else { + if (!props.mute) { + // TODO: 融合後のモノがない場合でも何らかの効果音を再生 + } + } + }); + + const minCollisionEnergyForSound = 2.5; + const maxCollisionEnergyForSound = 9; + const soundPitchMax = 4; + const soundPitchMin = 0.5; + + game.addListener('collision', (energy, bodyA, bodyB) => { + if (!props.mute && (energy > minCollisionEnergyForSound)) { + const volume = (Math.min(maxCollisionEnergyForSound, energy - minCollisionEnergyForSound) / maxCollisionEnergyForSound) / 4; + const panV = + bodyA.label === '_wall_' ? bodyB.position.x - game.PLAYAREA_MARGIN : + bodyB.label === '_wall_' ? bodyA.position.x - game.PLAYAREA_MARGIN : + ((bodyA.position.x + bodyB.position.x) / 2) - game.PLAYAREA_MARGIN; + const panW = game.GAME_WIDTH - game.PLAYAREA_MARGIN - game.PLAYAREA_MARGIN; + const pan = ((panV / panW) - 0.5) * 2; + const pitch = soundPitchMin + ((soundPitchMax - soundPitchMin) * (1 - (Math.min(10, energy) / 10))); + + if (props.gameMode === 'yen') { + sound.playUrl('/client-assets/drop-and-fusion/collision_yen.mp3', { + volume: volume * sfxVolume.value, + pan: pan, + playbackRate: Math.max(1, pitch) * replayPlaybackRate.value, + }); + } else { + sound.playUrl('/client-assets/drop-and-fusion/collision.mp3', { + volume: volume * sfxVolume.value, + pan: pan, + playbackRate: pitch * replayPlaybackRate.value, + }); + } + } }); game.addListener('monoAdded', (mono) => { @@ -853,9 +1072,17 @@ function attachGameEvents() { }); game.addListener('gameOver', () => { - sound.playUrl('/client-assets/drop-and-fusion/gameover.mp3', { - volume: sfxVolume.value, - }); + if (!props.mute) { + if (props.gameMode === 'yen') { + sound.playUrl('/client-assets/drop-and-fusion/gameover_yen.mp3', { + volume: 0.5 * sfxVolume.value, + }); + } else { + sound.playUrl('/client-assets/drop-and-fusion/gameover.mp3', { + volume: sfxVolume.value, + }); + } + } if (replaying.value) { endReplay(); @@ -876,6 +1103,15 @@ function attachGameEvents() { logs: DropAndFusionGame.serializeLogs(logs), }); + if (props.gameMode === 'yen') { + yenTotal.value = (yenTotal.value ?? 0) + score.value; + misskeyApi('i/registry/set', { + scope: ['dropAndFusionGame'], + key: 'yenTotal', + value: yenTotal.value, + }); + } + if (score.value > (highScore.value ?? 0)) { highScore.value = score.value; @@ -886,21 +1122,6 @@ function attachGameEvents() { }); } }); - - game.addListener('sfx', (type, params) => { - if (props.mute) return; - - const soundUrl = - type === 'fusion' ? '/client-assets/drop-and-fusion/bubble2.mp3' : - type === 'collision' ? '/client-assets/drop-and-fusion/poi1.mp3' : - null as never; - - sound.playUrl(soundUrl, { - volume: params.volume * sfxVolume.value, - pan: params.pan, - playbackRate: params.pitch * replayPlaybackRate.value, - }); - }); } useInterval(() => { @@ -921,6 +1142,46 @@ onMounted(async () => { highScore.value = null; } + if (props.gameMode === 'yen') { + try { + yenTotal.value = await misskeyApi('i/registry/get', { + scope: ['dropAndFusionGame'], + key: 'yenTotal', + }); + } catch (err: any) { + if (err.code === 'NO_SUCH_KEY') { + // nop + } else { + os.alert({ + type: 'error', + text: i18n.ts.cannotLoad, + }); + return; + } + } + } + + /* + const getVerticesFromSvg = async (path: string) => { + const svgDoc = await fetch(path) + .then((response) => response.text()) + .then((svgString) => { + const parser = new DOMParser(); + return parser.parseFromString(svgString, 'image/svg+xml'); + }); + const pathDatas = svgDoc.querySelectorAll('path'); + if (!pathDatas) return; + const vertices = Array.from(pathDatas).map((pathData) => { + return Matter.Svg.pathToVertices(pathData); + }); + return vertices; + }; + + getVerticesFromSvg('/client-assets/drop-and-fusion/sweets_monos/verts/doughnut_color.svg').then((vertices) => { + console.log('doughnut_color', vertices); + }); + */ + await start(); const bgmBuffer = await sound.loadAudio('/client-assets/drop-and-fusion/bgm_1.mp3'); @@ -1022,6 +1283,36 @@ definePageMetadata({ padding: 32px; } +.readyGo_bg { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 100; + backdrop-filter: blur(4px); +} + +.readyGo_ready, +.readyGo_go { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + z-index: 101; + pointer-events: none; +} + +.readyGo_img { + display: block; + width: 250px; + max-width: 100%; +} + .frame { padding: 7px; background: #8C4F26; @@ -1173,10 +1464,15 @@ definePageMetadata({ position: absolute; z-index: 10; top: 50%; - width: 100%; + left: 0; + right: 0; + margin: auto; + width: calc(100% - 50px); + max-width: 320px; padding: 16px; box-sizing: border-box; background: #0007; + border-radius: 16px; color: #fff; text-align: center; font-weight: bold; diff --git a/packages/frontend/src/pages/drop-and-fusion.vue b/packages/frontend/src/pages/drop-and-fusion.vue index 0938ca6a87..18d3f56ca2 100644 --- a/packages/frontend/src/pages/drop-and-fusion.vue +++ b/packages/frontend/src/pages/drop-and-fusion.vue @@ -4,16 +4,16 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<MkSpacer :contentMax="800"> - <Transition - :enterActiveClass="$style.transition_zoom_enterActive" - :leaveActiveClass="$style.transition_zoom_leaveActive" - :enterFromClass="$style.transition_zoom_enterFrom" - :leaveToClass="$style.transition_zoom_leaveTo" - :moveClass="$style.transition_zoom_move" - mode="out-in" - > - <div v-if="!gameStarted" :class="$style.root"> +<Transition + :enterActiveClass="$style.transition_zoom_enterActive" + :leaveActiveClass="$style.transition_zoom_leaveActive" + :enterFromClass="$style.transition_zoom_enterFrom" + :leaveToClass="$style.transition_zoom_leaveTo" + :moveClass="$style.transition_zoom_move" + mode="out-in" +> + <MkSpacer v-if="!gameStarted" :contentMax="800"> + <div :class="$style.root"> <div class="_gaps"> <div :class="$style.frame" style="text-align: center;"> <div :class="$style.frameInner"> @@ -26,6 +26,8 @@ SPDX-License-Identifier: AGPL-3.0-only <MkSelect v-model="gameMode"> <option value="normal">NORMAL</option> <option value="square">SQUARE</option> + <option value="yen">YEN</option> + <option value="sweets">SWEETS</option> </MkSelect> <MkButton primary gradate large rounded inline @click="start">{{ i18n.ts.start }}</MkButton> </div> @@ -42,12 +44,12 @@ SPDX-License-Identifier: AGPL-3.0-only <div :class="$style.frame"> <div :class="$style.frameInner"> <div class="_gaps_s" style="padding: 16px;"> - <div><b>{{ i18n.ts.ranking }}</b> ({{ gameMode }})</div> + <div><b>{{ i18n.t('lastNDays', { n: 7 }) }} {{ i18n.ts.ranking }}</b> ({{ gameMode }})</div> <div v-if="ranking" class="_gaps_s"> <div v-for="r in ranking" :key="r.id" :class="$style.rankingRecord"> <MkAvatar :link="true" style="width: 24px; height: 24px; margin-right: 4px;" :user="r.user"/> <MkUserName :user="r.user" :nowrap="true"/> - <b style="margin-left: auto;">{{ r.score.toLocaleString() }} pt</b> + <b style="margin-left: auto;">{{ r.score.toLocaleString() }} {{ getScoreUnit(gameMode) }}</b> </div> </div> <div v-else>{{ i18n.ts.loading }}</div> @@ -77,15 +79,13 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </div> </div> - <div v-else> - <XGame :gameMode="gameMode" :mute="mute" @end="onGameEnd"/> - </div> - </Transition> -</MkSpacer> + </MkSpacer> + <XGame v-else :gameMode="gameMode" :mute="mute" @end="onGameEnd"/> +</Transition> </template> <script lang="ts" setup> -import { ref, watch } from 'vue'; +import { computed, ref, watch } from 'vue'; import XGame from './drop-and-fusion.game.vue'; import { definePageMetadata } from '@/scripts/page-metadata.js'; import MkButton from '@/components/MkButton.vue'; @@ -94,7 +94,7 @@ import MkSelect from '@/components/MkSelect.vue'; import MkSwitch from '@/components/MkSwitch.vue'; import { misskeyApiGet } from '@/scripts/misskey-api.js'; -const gameMode = ref<'normal' | 'square'>('normal'); +const gameMode = ref<'normal' | 'square' | 'yen' | 'sweets'>('normal'); const gameStarted = ref(false); const mute = ref(false); const ranking = ref(null); @@ -103,6 +103,14 @@ watch(gameMode, async () => { ranking.value = await misskeyApiGet('bubble-game/ranking', { gameMode: gameMode.value }); }, { immediate: true }); +function getScoreUnit(gameMode: string) { + return gameMode === 'normal' ? 'pt' : + gameMode === 'square' ? 'pt' : + gameMode === 'yen' ? '円' : + gameMode === 'sweets' ? 'kcal' : + '' as never; +} + async function start() { gameStarted.value = true; } diff --git a/packages/frontend/src/pages/emojis.emoji.vue b/packages/frontend/src/pages/emojis.emoji.vue index 6d97784947..6a6116068b 100644 --- a/packages/frontend/src/pages/emojis.emoji.vue +++ b/packages/frontend/src/pages/emojis.emoji.vue @@ -14,19 +14,15 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import { } from 'vue'; import * as os from '@/os.js'; +import * as Misskey from 'misskey-js'; import { misskeyApiGet } from '@/scripts/misskey-api.js'; import copyToClipboard from '@/scripts/copy-to-clipboard.js'; import { i18n } from '@/i18n.js'; +import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue'; const props = defineProps<{ - emoji: { - name: string; - aliases: string[]; - category: string; - url: string; - }; + emoji: Misskey.entities.EmojiSimple; }>(); function menu(ev) { @@ -43,12 +39,13 @@ function menu(ev) { }, { text: i18n.ts.info, icon: 'ph-info ph-bold ph-lg', - action: () => { - misskeyApiGet('emoji', { name: props.emoji.name }).then(res => { - os.alert({ - type: 'info', - text: `Name: ${res.name}\nAliases: ${res.aliases.join(' ')}\nCategory: ${res.category}\nisSensitive: ${res.isSensitive}\nlocalOnly: ${res.localOnly}\nLicense: ${res.license}\nURL: ${res.url}`, - }); + action: async () => { + os.popup(MkCustomEmojiDetailedDialog, { + emoji: await misskeyApiGet('emoji', { + name: props.emoji.name, + }) + }, { + anchor: ev.target, }); }, }], ev.currentTarget ?? ev.target); diff --git a/packages/frontend/src/pages/flash/flash-edit.vue b/packages/frontend/src/pages/flash/flash-edit.vue index 73ed4945d2..d00ebb6241 100644 --- a/packages/frontend/src/pages/flash/flash-edit.vue +++ b/packages/frontend/src/pages/flash/flash-edit.vue @@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only <MkInput v-model="title"> <template #label>{{ i18n.ts._play.title }}</template> </MkInput> - <MkTextarea v-model="summary"> + <MkTextarea v-model="summary" :mfmAutocomplete="true" :mfmPreview="true"> <template #label>{{ i18n.ts._play.summary }}</template> </MkTextarea> <MkButton primary @click="selectPreset">{{ i18n.ts.selectFromPresets }}<i class="ph-caret-down ph-bold ph-lg"></i></MkButton> diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index 63478edd19..9542ebc51c 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only <div v-else :class="$style.ready"> <div class="_panel main"> <div class="title">{{ flash.title }}</div> - <div class="summary">{{ flash.summary }}</div> + <div class="summary"><Mfm :text="flash.summary"/></div> <MkButton class="start" gradate rounded large @click="start">Play</MkButton> <div class="info"> <span v-tooltip="i18n.ts.numberOfLikes"><i class="ph-heart ph-bold ph-lg"></i> {{ flash.likedCount }}</span> diff --git a/packages/frontend/src/pages/games.vue b/packages/frontend/src/pages/games.vue new file mode 100644 index 0000000000..5d2482ded1 --- /dev/null +++ b/packages/frontend/src/pages/games.vue @@ -0,0 +1,27 @@ +<!-- +SPDX-FileCopyrightText: syuilo and other misskey contributors +SPDX-License-Identifier: AGPL-3.0-only +--> + +<template> +<MkStickyContainer> + <template #header><MkPageHeader/></template> + <MkSpacer :contentMax="800"> + <div class="_panel"> + <MkA to="/bubble-game"> + <img src="/client-assets/drop-and-fusion/logo.png" style="display: block; max-width: 100%; max-height: 200px; margin: auto;"/> + </MkA> + </div> + </MkSpacer> +</MkStickyContainer> +</template> + +<script lang="ts" setup> +import { i18n } from '@/i18n.js'; +import { definePageMetadata } from '@/scripts/page-metadata.js'; + +definePageMetadata({ + title: 'Misskey Games', + icon: 'ti ti-device-gamepad', +}); +</script> diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index b4e3680216..ca2c7214d5 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -247,9 +247,11 @@ SPDX-License-Identifier: AGPL-3.0-only <div class="_gaps"> <MkFolder> <template #label>{{ i18n.ts.additionalEmojiDictionary }}</template> - <div v-for="lang in emojiIndexLangs" class="_buttons"> - <MkButton @click="downloadEmojiIndex(lang)"><i class="ph-download ph-bold ph-lg"></i> {{ lang }}{{ defaultStore.reactiveState.additionalUnicodeEmojiIndexes.value[lang] ? ` (${ i18n.ts.installed })` : '' }}</MkButton> - <MkButton v-if="defaultStore.reactiveState.additionalUnicodeEmojiIndexes.value[lang]" danger @click="removeEmojiIndex(lang)"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.remove }}</MkButton> + <div class="_buttons"> + <template v-for="lang in emojiIndexLangs" :key="lang"> + <MkButton v-if="defaultStore.reactiveState.additionalUnicodeEmojiIndexes.value[lang]" danger @click="removeEmojiIndex(lang)"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.remove }} ({{ getEmojiIndexLangName(lang) }})</MkButton> + <MkButton v-else @click="downloadEmojiIndex(lang)"><i class="ph-download ph-bold ph-lg"></i> {{ getEmojiIndexLangName(lang) }}{{ defaultStore.reactiveState.additionalUnicodeEmojiIndexes.value[lang] ? ` (${ i18n.ts.installed })` : '' }}</MkButton> + </template> </div> </MkFolder> <FormLink to="/settings/deck">{{ i18n.ts.deck }}</FormLink> @@ -408,15 +410,29 @@ watch([ await reloadAsk(); }); -const emojiIndexLangs = ['en-US']; +const emojiIndexLangs = ['en-US', 'ja-JP', 'ja-JP_hira'] as const; -function downloadEmojiIndex(lang: string) { +function getEmojiIndexLangName(targetLang: typeof emojiIndexLangs[number]) { + if (langs.find(x => x[0] === targetLang)) { + return langs.find(x => x[0] === targetLang)![1]; + } else { + // 絵文字辞書限定の言語定義 + switch (targetLang) { + case 'ja-JP_hira': return 'ひらがな'; + default: return targetLang; + } + } +} + +function downloadEmojiIndex(lang: typeof emojiIndexLangs[number]) { async function main() { const currentIndexes = defaultStore.state.additionalUnicodeEmojiIndexes; function download() { switch (lang) { case 'en-US': return import('../../unicode-emoji-indexes/en-US.json').then(x => x.default); + case 'ja-JP': return import('../../unicode-emoji-indexes/ja-JP.json').then(x => x.default); + case 'ja-JP_hira': return import('../../unicode-emoji-indexes/ja-JP_hira.json').then(x => x.default); default: throw new Error('unrecognized lang: ' + lang); } } diff --git a/packages/frontend/src/pages/user/activity.heatmap.vue b/packages/frontend/src/pages/user/activity.heatmap.vue deleted file mode 100644 index ea3276a890..0000000000 --- a/packages/frontend/src/pages/user/activity.heatmap.vue +++ /dev/null @@ -1,219 +0,0 @@ -<!-- -SPDX-FileCopyrightText: syuilo and other misskey contributors -SPDX-License-Identifier: AGPL-3.0-only ---> - -<template> -<div ref="rootEl"> - <MkLoading v-if="fetching"/> - <div v-else :class="$style.root" class="_panel"> - <canvas ref="chartEl"></canvas> - </div> -</div> -</template> - -<script lang="ts" setup> -import { onMounted, nextTick, watch, shallowRef, ref } from 'vue'; -import { Chart } from 'chart.js'; -import * as Misskey from 'misskey-js'; -import { misskeyApi } from '@/scripts/misskey-api.js'; -import { defaultStore } from '@/store.js'; -import { useChartTooltip } from '@/scripts/use-chart-tooltip.js'; -import { alpha } from '@/scripts/color.js'; -import { initChart } from '@/scripts/init-chart.js'; - -initChart(); - -const props = defineProps<{ - src: string; - user: Misskey.entities.User; -}>(); - -const rootEl = shallowRef<HTMLDivElement>(null); -const chartEl = shallowRef<HTMLCanvasElement>(null); -const now = new Date(); -let chartInstance: Chart = null; -const fetching = ref(true); - -const { handler: externalTooltipHandler } = useChartTooltip({ - position: 'middle', -}); - -async function renderChart() { - if (chartInstance) { - chartInstance.destroy(); - } - - const wide = rootEl.value.offsetWidth > 700; - const narrow = rootEl.value.offsetWidth < 400; - - const weeks = wide ? 50 : narrow ? 10 : 25; - const chartLimit = 7 * weeks; - - const getDate = (ago: number) => { - const y = now.getFullYear(); - const m = now.getMonth(); - const d = now.getDate(); - - return new Date(y, m, d - ago); - }; - - const format = (arr) => { - return arr.map((v, i) => { - const dt = getDate(i); - const iso = `${dt.getFullYear()}-${(dt.getMonth() + 1).toString().padStart(2, '0')}-${dt.getDate().toString().padStart(2, '0')}`; - return { - x: iso, - y: dt.getDay(), - d: iso, - v, - }; - }); - }; - - let values; - - if (props.src === 'notes') { - const raw = await misskeyApi('charts/user/notes', { userId: props.user.id, limit: chartLimit, span: 'day' }); - values = raw.inc; - } - - fetching.value = false; - - await nextTick(); - - const color = defaultStore.state.darkMode ? '#b4e900' : '#86b300'; - - // 視覚上の分かりやすさのため上から最も大きい3つの値の平均を最大値とする - const max = values.slice().sort((a, b) => b - a).slice(0, 3).reduce((a, b) => a + b, 0) / 3; - - const min = Math.max(0, Math.min(...values) - 1); - - const marginEachCell = 4; - - chartInstance = new Chart(chartEl.value, { - type: 'matrix', - data: { - datasets: [{ - label: '', - data: format(values), - pointRadius: 0, - borderWidth: 0, - borderJoinStyle: 'round', - borderRadius: 3, - backgroundColor(c) { - const value = c.dataset.data[c.dataIndex].v; - let a = (value - min) / max; - if (value !== 0) { // 0でない限りは完全に不可視にはしない - a = Math.max(a, 0.05); - } - return alpha(color, a); - }, - fill: true, - width(c) { - const a = c.chart.chartArea ?? {}; - return (a.right - a.left) / weeks - marginEachCell; - }, - height(c) { - const a = c.chart.chartArea ?? {}; - return (a.bottom - a.top) / 7 - marginEachCell; - }, - /* @see <https://github.com/misskey-dev/misskey/pull/10365#discussion_r1155511107> - }] satisfies ChartData[], - */ - }], - }, - options: { - aspectRatio: wide ? 6 : narrow ? 1.8 : 3.2, - layout: { - padding: { - left: 8, - right: 0, - top: 0, - bottom: 0, - }, - }, - scales: { - x: { - type: 'time', - offset: true, - position: 'bottom', - time: { - unit: 'week', - round: 'week', - isoWeekday: 0, - displayFormats: { - day: 'M/d', - month: 'Y/M', - week: 'M/d', - }, - }, - grid: { - display: false, - }, - ticks: { - display: true, - maxRotation: 0, - autoSkipPadding: 8, - }, - }, - y: { - offset: true, - reverse: true, - position: 'right', - grid: { - display: false, - }, - ticks: { - maxRotation: 0, - autoSkip: true, - padding: 1, - font: { - size: 9, - }, - callback: (value, index, values) => ['', 'Mon', '', 'Wed', '', 'Fri', ''][value], - }, - }, - }, - plugins: { - legend: { - display: false, - }, - tooltip: { - enabled: false, - callbacks: { - title(context) { - const v = context[0].dataset.data[context[0].dataIndex]; - return v.d; - }, - label(context) { - const v = context.dataset.data[context.dataIndex]; - return [v.v]; - }, - }, - //mode: 'index', - animation: { - duration: 0, - }, - external: externalTooltipHandler, - }, - }, - }, - }); -} - -watch(() => props.src, () => { - fetching.value = true; - renderChart(); -}); - -onMounted(async () => { - renderChart(); -}); -</script> - -<style lang="scss" module> -.root { - padding: 20px; -} -</style> diff --git a/packages/frontend/src/pages/user/activity.vue b/packages/frontend/src/pages/user/activity.vue index 42035cc619..5867918962 100644 --- a/packages/frontend/src/pages/user/activity.vue +++ b/packages/frontend/src/pages/user/activity.vue @@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only <div class="_gaps"> <MkFoldableSection class="item"> <template #header><i class="ph-pulse ph-bold ph-lg"></i> Heatmap</template> - <XHeatmap :user="user" :src="'notes'"/> + <MkHeatmap :user="user" :src="'notes'"/> </MkFoldableSection> <MkFoldableSection class="item"> <template #header><i class="ph-pencil ph-bold ph-lg"></i> Notes</template> @@ -28,11 +28,11 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import * as Misskey from 'misskey-js'; -import XHeatmap from './activity.heatmap.vue'; import XPv from './activity.pv.vue'; import XNotes from './activity.notes.vue'; import XFollowing from './activity.following.vue'; import MkFoldableSection from '@/components/MkFoldableSection.vue'; +import MkHeatmap from '@/components/MkHeatmap.vue'; const props = defineProps<{ user: Misskey.entities.User; diff --git a/packages/frontend/src/scripts/device-kind.ts b/packages/frontend/src/scripts/device-kind.ts index 3843052a24..218eb718b1 100644 --- a/packages/frontend/src/scripts/device-kind.ts +++ b/packages/frontend/src/scripts/device-kind.ts @@ -11,6 +11,13 @@ const ua = navigator.userAgent.toLowerCase(); const isTablet = /ipad/.test(ua) || (/mobile|iphone|android/.test(ua) && window.innerWidth > 700); const isSmartphone = !isTablet && /mobile|iphone|android/.test(ua); +const isIPhone = /iphone|ipod/gi.test(ua) && navigator.maxTouchPoints > 1; +// navigator.platform may be deprecated but this check is still required +const isIPadOS = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; +const isIos = /ipad|iphone|ipod/gi.test(ua) && navigator.maxTouchPoints > 1; + +export const isFullscreenNotSupported = isIPhone || isIos; + export const deviceKind: 'smartphone' | 'tablet' | 'desktop' = defaultStore.state.overridedDeviceKind ? defaultStore.state.overridedDeviceKind : isSmartphone ? 'smartphone' : isTablet ? 'tablet' diff --git a/packages/frontend/src/scripts/drop-and-fusion-engine.ts b/packages/frontend/src/scripts/drop-and-fusion-engine.ts index 41af9cb7a4..7c75822a20 100644 --- a/packages/frontend/src/scripts/drop-and-fusion-engine.ts +++ b/packages/frontend/src/scripts/drop-and-fusion-engine.ts @@ -10,14 +10,13 @@ import seedrandom from 'seedrandom'; export type Mono = { id: string; level: number; - size: number; - shape: 'circle' | 'rectangle'; + sizeX: number; + sizeY: number; + shape: 'circle' | 'rectangle' | 'custom'; + vertices?: Matter.Vector[][]; + verticesSize?: number; score: number; dropCandidate: boolean; - sfxPitch: number; - img: string; - imgSize: number; - spriteScale: number; }; type Log = { @@ -32,23 +31,969 @@ type Log = { operation: 'surrender'; }; +const NORMAL_BASE_SIZE = 30; +const NORAML_MONOS: Mono[] = [{ + id: '9377076d-c980-4d83-bdaf-175bc58275b7', + level: 10, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 512, + dropCandidate: false, +}, { + id: 'be9f38d2-b267-4b1a-b420-904e22e80568', + level: 9, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 256, + dropCandidate: false, +}, { + id: 'beb30459-b064-4888-926b-f572e4e72e0c', + level: 8, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 128, + dropCandidate: false, +}, { + id: 'feab6426-d9d8-49ae-849c-048cdbb6cdf0', + level: 7, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 64, + dropCandidate: false, +}, { + id: 'd6d8fed6-6d18-4726-81a1-6cf2c974df8a', + level: 6, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 32, + dropCandidate: false, +}, { + id: '249c728e-230f-4332-bbbf-281c271c75b2', + level: 5, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 16, + dropCandidate: true, +}, { + id: '23d67613-d484-4a93-b71e-3e81b19d6186', + level: 4, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 8, + dropCandidate: true, +}, { + id: '3cbd0add-ad7d-4685-bad0-29f6dddc0b99', + level: 3, + sizeX: NORMAL_BASE_SIZE * 1.25 * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25 * 1.25, + shape: 'circle', + score: 4, + dropCandidate: true, +}, { + id: '8f86d4f4-ee02-41bf-ad38-1ce0ae457fb5', + level: 2, + sizeX: NORMAL_BASE_SIZE * 1.25, + sizeY: NORMAL_BASE_SIZE * 1.25, + shape: 'circle', + score: 2, + dropCandidate: true, +}, { + id: '64ec4add-ce39-42b4-96cb-33908f3f118d', + level: 1, + sizeX: NORMAL_BASE_SIZE, + sizeY: NORMAL_BASE_SIZE, + shape: 'circle', + score: 1, + dropCandidate: true, +}]; + +const YEN_BASE_SIZE = 30; +const YEN_SATSU_BASE_SIZE = 70; +const YEN_MONOS: Mono[] = [{ + id: '880f9bd9-802f-4135-a7e1-fd0e0331f726', + level: 10, + sizeX: (YEN_SATSU_BASE_SIZE * 2) * 1.25 * 1.25 * 1.25, + sizeY: YEN_SATSU_BASE_SIZE * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 10000, + dropCandidate: false, +}, { + id: 'e807beb6-374a-4314-9cc2-aa5f17d96b6b', + level: 9, + sizeX: (YEN_SATSU_BASE_SIZE * 2) * 1.25 * 1.25, + sizeY: YEN_SATSU_BASE_SIZE * 1.25 * 1.25, + shape: 'rectangle', + score: 5000, + dropCandidate: false, +}, { + id: '033445b7-8f90-4fc9-beca-71a9e87cb530', + level: 8, + sizeX: (YEN_SATSU_BASE_SIZE * 2) * 1.25, + sizeY: YEN_SATSU_BASE_SIZE * 1.25, + shape: 'rectangle', + score: 2000, + dropCandidate: false, +}, { + id: '410a09ec-5f7f-46f6-b26f-cbca4ccbd091', + level: 7, + sizeX: YEN_SATSU_BASE_SIZE * 2, + sizeY: YEN_SATSU_BASE_SIZE, + shape: 'rectangle', + score: 1000, + dropCandidate: false, +}, { + id: '2aae82bc-3fa4-49ad-a6b5-94d888e809f5', + level: 6, + sizeX: YEN_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: YEN_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 500, + dropCandidate: false, +}, { + id: 'a619bd67-d08f-4cc0-8c7e-c8072a4950cd', + level: 5, + sizeX: YEN_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: YEN_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 100, + dropCandidate: true, +}, { + id: 'c1c5d8e4-17d6-4455-befd-12154d731faa', + level: 4, + sizeX: YEN_BASE_SIZE * 1.25 * 1.25 * 1.25, + sizeY: YEN_BASE_SIZE * 1.25 * 1.25 * 1.25, + shape: 'circle', + score: 50, + dropCandidate: true, +}, { + id: '7082648c-e428-44c4-887a-25c07a8ebdd5', + level: 3, + sizeX: YEN_BASE_SIZE * 1.25 * 1.25, + sizeY: YEN_BASE_SIZE * 1.25 * 1.25, + shape: 'circle', + score: 10, + dropCandidate: true, +}, { + id: '0d8d40d5-e6e0-4d26-8a95-b8d842363379', + level: 2, + sizeX: YEN_BASE_SIZE * 1.25, + sizeY: YEN_BASE_SIZE * 1.25, + shape: 'circle', + score: 5, + dropCandidate: true, +}, { + id: '9dec1b38-d99d-40de-8288-37367b983d0d', + level: 1, + sizeX: YEN_BASE_SIZE, + sizeY: YEN_BASE_SIZE, + shape: 'circle', + score: 1, + dropCandidate: true, +}]; + +const SQUARE_BASE_SIZE = 28; +const SQUARE_MONOS: Mono[] = [{ + id: 'f75fd0ba-d3d4-40a4-9712-b470e45b0525', + level: 10, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 512, + dropCandidate: false, +}, { + id: '7b70f4af-1c01-45fd-af72-61b1f01e03d1', + level: 9, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 256, + dropCandidate: false, +}, { + id: '41607ef3-b6d6-4829-95b6-3737bf8bb956', + level: 8, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 128, + dropCandidate: false, +}, { + id: '8a8310d2-0374-460f-bb50-ca9cd3ee3416', + level: 7, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 64, + dropCandidate: false, +}, { + id: '1092e069-fe1a-450b-be97-b5d477ec398c', + level: 6, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 32, + dropCandidate: false, +}, { + id: '2294734d-7bb8-4781-bb7b-ef3820abf3d0', + level: 5, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 16, + dropCandidate: true, +}, { + id: 'ea8a61af-e350-45f7-ba6a-366fcd65692a', + level: 4, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25 * 1.25, + shape: 'rectangle', + score: 8, + dropCandidate: true, +}, { + id: 'd0c74815-fc1c-4fbe-9953-c92e4b20f919', + level: 3, + sizeX: SQUARE_BASE_SIZE * 1.25 * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25 * 1.25, + shape: 'rectangle', + score: 4, + dropCandidate: true, +}, { + id: 'd8fbd70e-611d-402d-87da-1a7fd8cd2c8d', + level: 2, + sizeX: SQUARE_BASE_SIZE * 1.25, + sizeY: SQUARE_BASE_SIZE * 1.25, + shape: 'rectangle', + score: 2, + dropCandidate: true, +}, { + id: '35e476ee-44bd-4711-ad42-87be245d3efd', + level: 1, + sizeX: SQUARE_BASE_SIZE, + sizeY: SQUARE_BASE_SIZE, + shape: 'rectangle', + score: 1, + dropCandidate: true, +}]; + +const SWEETS_BASE_SIZE = 40; +const SWEETS_MONOS: Mono[] = [{ + id: '77f724c0-88be-4aeb-8e1a-a00ed18e3844', + level: 10, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 14, + 'y': 2, + }, + { + 'x': 2, + 'y': 13, + }, + { + 'x': 2, + 'y': 31, + }, + { + 'x': 30, + 'y': 23, + }, + { + 'x': 30, + 'y': 7, + }, + { + 'x': 29, + 'y': 6, + }, + { + 'x': 20, + 'y': 4, + }, + { + 'x': 17, + 'y': 3, + }, + { + 'x': 16, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 400, + dropCandidate: false, +}, { + id: 'f3468ef4-2e1e-4906-8795-f147f39f7e1f', + level: 9, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 15, + 'y': 2, + }, + { + 'x': 14, + 'y': 3, + }, + { + 'x': 8, + 'y': 4, + }, + { + 'x': 6, + 'y': 5, + }, + { + 'x': 4, + 'y': 8, + }, + { + 'x': 4, + 'y': 15, + }, + { + 'x': 2, + 'y': 19, + }, + { + 'x': 2, + 'y': 22.36, + }, + { + 'x': 3, + 'y': 25, + }, + { + 'x': 5, + 'y': 28, + }, + { + 'x': 10, + 'y': 30, + }, + { + 'x': 22, + 'y': 30, + }, + { + 'x': 27, + 'y': 28, + }, + { + 'x': 29, + 'y': 25, + }, + { + 'x': 30, + 'y': 22, + }, + { + 'x': 30, + 'y': 19, + }, + { + 'x': 28, + 'y': 15, + }, + { + 'x': 28, + 'y': 8, + }, + { + 'x': 26, + 'y': 5, + }, + { + 'x': 24, + 'y': 4, + }, + { + 'x': 18, + 'y': 3, + }, + { + 'x': 17, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 380, + dropCandidate: false, +}, { + id: 'bcb41129-6f2d-44ee-89d3-86eb2df564ba', + level: 8, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 15, + 'y': 2, + }, + { + 'x': 11, + 'y': 3, + }, + { + 'x': 8, + 'y': 6, + }, + { + 'x': 7, + 'y': 8, + }, + { + 'x': 6, + 'y': 11, + }, + { + 'x': 6, + 'y': 13, + }, + { + 'x': 7, + 'y': 16, + }, + { + 'x': 8, + 'y': 18, + }, + { + 'x': 15, + 'y': 30, + }, + { + 'x': 17, + 'y': 30, + }, + { + 'x': 24, + 'y': 18, + }, + { + 'x': 25, + 'y': 16, + }, + { + 'x': 26, + 'y': 13, + }, + { + 'x': 26, + 'y': 11, + }, + { + 'x': 25, + 'y': 8, + }, + { + 'x': 24, + 'y': 6, + }, + { + 'x': 21, + 'y': 3, + }, + { + 'x': 17, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 300, + dropCandidate: false, +}, { + id: 'f058e1ad-1981-409b-b3a7-302de0a43744', + level: 7, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 17, + 'y': 2.541, + }, + { + 'x': 14, + 'y': 5.402, + }, + { + 'x': 10, + 'y': 7, + }, + { + 'x': 10, + 'y': 10.367, + }, + { + 'x': 8, + 'y': 11, + }, + { + 'x': 8, + 'y': 14, + }, + { + 'x': 5.781, + 'y': 16.265, + }, + { + 'x': 6.594, + 'y': 19.627, + }, + { + 'x': 9.414, + 'y': 21, + }, + { + 'x': 12, + 'y': 29.988, + }, + { + 'x': 21, + 'y': 29.988, + }, + { + 'x': 22.016, + 'y': 22.629, + }, + { + 'x': 23, + 'y': 21.772, + }, + { + 'x': 23, + 'y': 19.202, + }, + { + 'x': 25.783, + 'y': 17.473, + }, + { + 'x': 25.783, + 'y': 14.727, + }, + { + 'x': 24, + 'y': 13.173, + }, + { + 'x': 24, + 'y': 10.367, + }, + { + 'x': 22, + 'y': 9.233, + }, + { + 'x': 22, + 'y': 6.454, + }, + { + 'x': 18, + 'y': 5, + }, + ], + ], + verticesSize: 32, + score: 300, + dropCandidate: false, +}, { + id: 'd22cfe38-5a3b-4b9c-a1a6-907930a3d732', + level: 6, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 15, + 'y': 2, + }, + { + 'x': 11, + 'y': 3, + }, + { + 'x': 8, + 'y': 5, + }, + { + 'x': 7, + 'y': 6, + }, + { + 'x': 5, + 'y': 9, + }, + { + 'x': 4, + 'y': 12, + }, + { + 'x': 4, + 'y': 20, + }, + { + 'x': 5, + 'y': 23, + }, + { + 'x': 7, + 'y': 26, + }, + { + 'x': 11, + 'y': 29, + }, + { + 'x': 14, + 'y': 30, + }, + { + 'x': 18, + 'y': 30, + }, + { + 'x': 21, + 'y': 29, + }, + { + 'x': 25, + 'y': 26, + }, + { + 'x': 27, + 'y': 23, + }, + { + 'x': 28, + 'y': 20, + }, + { + 'x': 28, + 'y': 12, + }, + { + 'x': 27, + 'y': 9, + }, + { + 'x': 25, + 'y': 6, + }, + { + 'x': 24, + 'y': 5, + }, + { + 'x': 21, + 'y': 3, + }, + { + 'x': 17, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 250, + dropCandidate: false, +}, { + id: '79867083-a073-427e-ae82-07a70d9f3b4f', + level: 5, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 9, + 'y': 15, + }, + { + 'x': 23, + 'y': 15, + }, + { + 'x': 30, + 'y': 27, + }, + { + 'x': 25.7, + 'y': 30, + }, + { + 'x': 6.34, + 'y': 30, + }, + { + 'x': 2, + 'y': 27, + }, + ], + ], + verticesSize: 32, + score: 200, + dropCandidate: true, +}, { + id: '2e152a12-a567-4100-b4d4-d15d81ba47b1', + level: 4, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 12, + 'y': 2, + }, + { + 'x': 2, + 'y': 12, + }, + { + 'x': 2, + 'y': 14, + }, + { + 'x': 18, + 'y': 30, + }, + { + 'x': 20, + 'y': 30, + }, + { + 'x': 30, + 'y': 20, + }, + { + 'x': 30, + 'y': 18, + }, + { + 'x': 14, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 200, + dropCandidate: true, +}, { + id: '12250376-2258-4716-8eec-b3a7239461fc', + level: 3, + sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 12, + 'y': 2, + }, + { + 'x': 7, + 'y': 3, + }, + { + 'x': 3, + 'y': 7, + }, + { + 'x': 2, + 'y': 12, + }, + { + 'x': 3, + 'y': 16, + }, + { + 'x': 5, + 'y': 19, + }, + { + 'x': 8, + 'y': 21, + }, + { + 'x': 12, + 'y': 22, + }, + { + 'x': 18, + 'y': 21, + }, + { + 'x': 27, + 'y': 30, + }, + { + 'x': 30, + 'y': 30, + }, + { + 'x': 30, + 'y': 27, + }, + { + 'x': 21, + 'y': 18, + }, + { + 'x': 22, + 'y': 14.25, + }, + { + 'x': 22, + 'y': 11, + }, + { + 'x': 21, + 'y': 8, + }, + { + 'x': 19, + 'y': 5, + }, + { + 'x': 16.5, + 'y': 3, + }, + ], + ], + verticesSize: 32, + score: 120, + dropCandidate: true, +}, { + id: '4d4f2668-4be7-44a3-aa3a-856df6e25aa6', + level: 2, + sizeX: SWEETS_BASE_SIZE * 1.25, + sizeY: SWEETS_BASE_SIZE * 1.25, + shape: 'custom', + vertices: [ + [ + { + 'x': 12, + 'y': 1.9, + }, + { + 'x': 4, + 'y': 4, + }, + { + 'x': 2, + 'y': 12, + }, + { + 'x': 6, + 'y': 13.375, + }, + { + 'x': 6, + 'y': 18, + }, + { + 'x': 8, + 'y': 22, + }, + { + 'x': 12, + 'y': 25.372, + }, + { + 'x': 16, + 'y': 26, + }, + { + 'x': 19, + 'y': 25.372, + }, + { + 'x': 20, + 'y': 30, + }, + { + 'x': 28, + 'y': 27, + }, + { + 'x': 30, + 'y': 20, + }, + { + 'x': 25.473, + 'y': 19, + }, + { + 'x': 26, + 'y': 15, + }, + { + 'x': 24, + 'y': 10, + }, + { + 'x': 20, + 'y': 7, + }, + { + 'x': 16, + 'y': 6, + }, + { + 'x': 13, + 'y': 6, + }, + ], + ], + verticesSize: 32, + score: 20, + dropCandidate: true, +}, { + id: 'c9984b40-4045-44c3-b260-d47b7b4625b2', + level: 1, + sizeX: SWEETS_BASE_SIZE, + sizeY: SWEETS_BASE_SIZE, + shape: 'circle', + score: 30, + dropCandidate: true, +}]; + export class DropAndFusionGame extends EventEmitter<{ changeScore: (newScore: number) => void; changeCombo: (newCombo: number) => void; changeStock: (newStock: { id: string; mono: Mono }[]) => void; changeHolding: (newHolding: { id: string; mono: Mono } | null) => void; dropped: (x: number) => void; - fusioned: (x: number, y: number, scoreDelta: number) => void; + fusioned: (x: number, y: number, nextMono: Mono | null, scoreDelta: number) => void; + collision: (energy: number, bodyA: Matter.Body, bodyB: Matter.Body) => void; monoAdded: (mono: Mono) => void; gameOver: () => void; - sfx(type: string, params: { volume: number; pan: number; pitch: number; }): void; }> { private PHYSICS_QUALITY_FACTOR = 16; // 低いほどパフォーマンスが高いがガタガタして安定しなくなる、逆に高すぎても何故か不安定になる private COMBO_INTERVAL = 60; // frame - public readonly GAME_VERSION = 1; + public readonly GAME_VERSION = 2; public readonly GAME_WIDTH = 450; public readonly GAME_HEIGHT = 600; - public readonly DROP_INTERVAL = 500; + public readonly DROP_COOLTIME = 30; // frame public readonly PLAYAREA_MARGIN = 25; private STOCK_MAX = 4; private TICK_DELTA = 1000 / 60; // 60fps @@ -58,15 +1003,16 @@ export class DropAndFusionGame extends EventEmitter<{ private tickCallbackQueue: { frame: number; callback: () => void; }[] = []; private overflowCollider: Matter.Body; private isGameOver = false; - private monoDefinitions: Mono[] = []; + private gameMode: 'normal' | 'yen' | 'square' | 'sweets'; private rng: () => number; private logs: Log[] = []; - private replaying = false; /** * フィールドに出ていて、かつ合体の対象となるアイテム */ - private activeBodyIds: Matter.Body['id'][] = []; + private fusionReadyBodyIds: Matter.Body['id'][] = []; + + private gameOverReadyBodyIds: Matter.Body['id'][] = []; /** * fusion予約アイテムのペア @@ -74,13 +1020,20 @@ export class DropAndFusionGame extends EventEmitter<{ */ private fusionReservedPairs: { bodyA: Matter.Body; bodyB: Matter.Body }[] = []; - private latestDroppedBodyId: Matter.Body['id'] | null = null; - - private latestDroppedAt = 0; + private latestDroppedAt = 0; // frame private latestFusionedAt = 0; // frame private stock: { id: string; mono: Mono }[] = []; private holding: { id: string; mono: Mono } | null = null; + public get monoDefinitions() { + switch (this.gameMode) { + case 'normal': return NORAML_MONOS; + case 'yen': return YEN_MONOS; + case 'square': return SQUARE_MONOS; + case 'sweets': return SWEETS_MONOS; + } + } + private _combo = 0; private get combo() { return this._combo; @@ -99,16 +1052,24 @@ export class DropAndFusionGame extends EventEmitter<{ this.emit('changeScore', value); } + private getMonoRenderOptions: null | ((mono: Mono) => Partial<Matter.IBodyRenderOptions>) = null; + public replayPlaybackRate = 1; - constructor(env: { monoDefinitions: Mono[]; seed: string; replaying?: boolean }) { + constructor(env: { + seed: string; + gameMode: DropAndFusionGame['gameMode']; + getMonoRenderOptions?: (mono: Mono) => Partial<Matter.IBodyRenderOptions>; + }) { super(); - this.replaying = !!env.replaying; - this.monoDefinitions = env.monoDefinitions; - this.rng = seedrandom(env.seed); - + //#region BIND this.tick = this.tick.bind(this); + //#endregion + + this.gameMode = env.gameMode; + this.getMonoRenderOptions = env.getMonoRenderOptions ?? null; + this.rng = seedrandom(env.seed); this.engine = Matter.Engine.create({ constraintIterations: 2 * this.PHYSICS_QUALITY_FACTOR, @@ -147,6 +1108,7 @@ export class DropAndFusionGame extends EventEmitter<{ //#endregion this.overflowCollider = Matter.Bodies.rectangle(this.GAME_WIDTH / 2, 0, this.GAME_WIDTH, 200, { + label: '_overflow_', isStatic: true, isSensor: true, render: { @@ -157,34 +1119,37 @@ export class DropAndFusionGame extends EventEmitter<{ Matter.Composite.add(this.engine.world, this.overflowCollider); } - private msToFrame(ms: number) { + public msToFrame(ms: number) { return Math.round(ms / this.TICK_DELTA); } + public frameToMs(frame: number) { + return frame * this.TICK_DELTA; + } + private createBody(mono: Mono, x: number, y: number) { const options: Matter.IBodyDefinition = { label: mono.id, //density: 0.0005, - density: mono.size / 1000, + density: ((mono.sizeX + mono.sizeY) / 2) / 1000, restitution: 0.2, frictionAir: 0.01, friction: 0.7, frictionStatic: 5, slop: 1.0, //mass: 0, - render: { - sprite: { - texture: mono.img, - xScale: (mono.size / mono.imgSize) * mono.spriteScale, - yScale: (mono.size / mono.imgSize) * mono.spriteScale, - }, - }, + render: this.getMonoRenderOptions ? this.getMonoRenderOptions(mono) : undefined, }; if (mono.shape === 'circle') { - return Matter.Bodies.circle(x, y, mono.size / 2, options); + return Matter.Bodies.circle(x, y, mono.sizeX / 2, options); // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition } else if (mono.shape === 'rectangle') { - return Matter.Bodies.rectangle(x, y, mono.size, mono.size, options); + return Matter.Bodies.rectangle(x, y, mono.sizeX, mono.sizeY, options); + } else if (mono.shape === 'custom') { + return Matter.Bodies.fromVertices(x, y, mono.vertices!.map(i => i.map(j => ({ + x: (j.x / mono.verticesSize!) * mono.sizeX, + y: (j.y / mono.verticesSize!) * mono.sizeY, + }))), options); } else { throw new Error('unrecognized shape'); } @@ -198,15 +1163,15 @@ export class DropAndFusionGame extends EventEmitter<{ } this.latestFusionedAt = this.frame; - // TODO: 単に位置だけでなくそれぞれの動きベクトルも融合する? const newX = (bodyA.position.x + bodyB.position.x) / 2; const newY = (bodyA.position.y + bodyB.position.y) / 2; + this.fusionReadyBodyIds = this.fusionReadyBodyIds.filter(x => x !== bodyA.id && x !== bodyB.id); + this.gameOverReadyBodyIds = this.gameOverReadyBodyIds.filter(x => x !== bodyA.id && x !== bodyB.id); Matter.Composite.remove(this.engine.world, [bodyA, bodyB]); - this.activeBodyIds = this.activeBodyIds.filter(x => x !== bodyA.id && x !== bodyB.id); const currentMono = this.monoDefinitions.find(y => y.id === bodyA.label)!; - const nextMono = this.monoDefinitions.find(x => x.level === currentMono.level + 1); + const nextMono = this.monoDefinitions.find(x => x.level === currentMono.level + 1) ?? null; if (nextMono) { const body = this.createBody(nextMono, newX, newY); @@ -216,43 +1181,25 @@ export class DropAndFusionGame extends EventEmitter<{ this.tickCallbackQueue.push({ frame: this.frame + this.msToFrame(100), callback: () => { - this.activeBodyIds.push(body.id); + this.fusionReadyBodyIds.push(body.id); }, }); - const comboBonus = 1 + ((this.combo - 1) / 5); - const additionalScore = Math.round(currentMono.score * comboBonus); - this.score += additionalScore; - this.emit('monoAdded', nextMono); - this.emit('fusioned', newX, newY, additionalScore); - - const panV = newX - this.PLAYAREA_MARGIN; - const panW = this.GAME_WIDTH - this.PLAYAREA_MARGIN - this.PLAYAREA_MARGIN; - const pan = ((panV / panW) - 0.5) * 2; - this.emit('sfx', 'fusion', { volume: 1, pan, pitch: nextMono.sfxPitch }); - } else { - // nop } + + const hasComboBonus = this.gameMode !== 'yen' && this.gameMode !== 'sweets'; + const comboBonus = hasComboBonus ? 1 + ((this.combo - 1) / 5) : 1; + const additionalScore = Math.round(currentMono.score * comboBonus); + this.score += additionalScore; + + this.emit('fusioned', newX, newY, nextMono, additionalScore); } private onCollision(event: Matter.IEventCollision<Matter.Engine>) { - const minCollisionEnergyForSound = 2.5; - const maxCollisionEnergyForSound = 9; - const soundPitchMax = 4; - const soundPitchMin = 0.5; - for (const pairs of event.pairs) { const { bodyA, bodyB } = pairs; - if (bodyA.id === this.overflowCollider.id || bodyB.id === this.overflowCollider.id) { - if (bodyA.id === this.latestDroppedBodyId || bodyB.id === this.latestDroppedBodyId) { - continue; - } - this.gameOver(); - break; - } - const shouldFusion = (bodyA.label === bodyB.label) && !this.fusionReservedPairs.some(x => x.bodyA.id === bodyA.id || @@ -261,7 +1208,7 @@ export class DropAndFusionGame extends EventEmitter<{ x.bodyB.id === bodyB.id); if (shouldFusion) { - if (this.activeBodyIds.includes(bodyA.id) && this.activeBodyIds.includes(bodyB.id)) { + if (this.fusionReadyBodyIds.includes(bodyA.id) && this.fusionReadyBodyIds.includes(bodyB.id)) { this.fusion(bodyA, bodyB); } else { this.fusionReservedPairs.push({ bodyA, bodyB }); @@ -275,17 +1222,30 @@ export class DropAndFusionGame extends EventEmitter<{ } } else { const energy = pairs.collision.depth; - if (energy > minCollisionEnergyForSound) { - const volume = (Math.min(maxCollisionEnergyForSound, energy - minCollisionEnergyForSound) / maxCollisionEnergyForSound) / 4; - const panV = - pairs.bodyA.label === '_wall_' ? bodyB.position.x - this.PLAYAREA_MARGIN : - pairs.bodyB.label === '_wall_' ? bodyA.position.x - this.PLAYAREA_MARGIN : - ((bodyA.position.x + bodyB.position.x) / 2) - this.PLAYAREA_MARGIN; - const panW = this.GAME_WIDTH - this.PLAYAREA_MARGIN - this.PLAYAREA_MARGIN; - const pan = ((panV / panW) - 0.5) * 2; - const pitch = soundPitchMin + ((soundPitchMax - soundPitchMin) * (1 - (Math.min(10, energy) / 10))); - this.emit('sfx', 'collision', { volume, pan, pitch }); + + if (bodyA.label === '_overflow_' || bodyB.label === '_overflow_') continue; + + if (bodyA.label !== '_wall_' && bodyB.label !== '_wall_') { + if (!this.gameOverReadyBodyIds.includes(bodyA.id)) this.gameOverReadyBodyIds.push(bodyA.id); + if (!this.gameOverReadyBodyIds.includes(bodyB.id)) this.gameOverReadyBodyIds.push(bodyB.id); } + + this.emit('collision', energy, bodyA, bodyB); + } + } + } + + private onCollisionActive(event: Matter.IEventCollision<Matter.Engine>) { + for (const pairs of event.pairs) { + const { bodyA, bodyB } = pairs; + + // ハコからあふれたかどうかの判定 + if (bodyA.id === this.overflowCollider.id || bodyB.id === this.overflowCollider.id) { + if (this.gameOverReadyBodyIds.includes(bodyA.id) || this.gameOverReadyBodyIds.includes(bodyB.id)) { + this.gameOver(); + break; + } + continue; } } } @@ -314,6 +1274,7 @@ export class DropAndFusionGame extends EventEmitter<{ this.emit('changeStock', this.stock); Matter.Events.on(this.engine, 'collisionStart', this.onCollision.bind(this)); + Matter.Events.on(this.engine, 'collisionActive', this.onCollisionActive.bind(this)); } public getLogs() { @@ -349,8 +1310,7 @@ export class DropAndFusionGame extends EventEmitter<{ public drop(_x: number) { if (this.isGameOver) return; - // TODO: フレームで計算するようにすればリプレイかどうかのチェックは不要になる - if (!this.replaying && (Date.now() - this.latestDroppedAt < this.DROP_INTERVAL)) return; + if (this.frame - this.latestDroppedAt < this.DROP_COOLTIME) return; const head = this.stock.shift()!; this.stock.push({ @@ -360,17 +1320,18 @@ export class DropAndFusionGame extends EventEmitter<{ this.emit('changeStock', this.stock); const inputX = Math.round(_x); - const x = Math.min(this.GAME_WIDTH - this.PLAYAREA_MARGIN - (head.mono.size / 2), Math.max(this.PLAYAREA_MARGIN + (head.mono.size / 2), inputX)); - const body = this.createBody(head.mono, x, 50 + head.mono.size / 2); + const x = Math.min(this.GAME_WIDTH - this.PLAYAREA_MARGIN - (head.mono.sizeX / 2), Math.max(this.PLAYAREA_MARGIN + (head.mono.sizeX / 2), inputX)); + const body = this.createBody(head.mono, x, 50 + head.mono.sizeY / 2); this.logs.push({ frame: this.frame, operation: 'drop', x: inputX, }); Matter.Composite.add(this.engine.world, body); - this.activeBodyIds.push(body.id); - this.latestDroppedBodyId = body.id; - this.latestDroppedAt = Date.now(); + + this.fusionReadyBodyIds.push(body.id); + this.latestDroppedAt = this.frame; + this.emit('dropped', x); this.emit('monoAdded', head.mono); } diff --git a/packages/frontend/src/ui/_common_/common.ts b/packages/frontend/src/ui/_common_/common.ts index 6e2f8b7e46..0c8e15a03b 100644 --- a/packages/frontend/src/ui/_common_/common.ts +++ b/packages/frontend/src/ui/_common_/common.ts @@ -27,11 +27,6 @@ function toolsMenuItems(): MenuItem[] { to: '/clicker', text: '🍪👈', icon: 'ph-cookie ph-bold ph-lg', - }, { - type: 'link', - to: '/bubble-game', - text: i18n.ts.bubbleGame, - icon: 'ph-orange-slice ph-bold ph-lg', }, ($i && ($i.isAdmin || $i.policies.canManageCustomEmojis)) ? { type: 'link', to: '/custom-emojis-manager', diff --git a/packages/frontend/src/unicode-emoji-indexes/ja-JP.json b/packages/frontend/src/unicode-emoji-indexes/ja-JP.json new file mode 100644 index 0000000000..908d92bf20 --- /dev/null +++ b/packages/frontend/src/unicode-emoji-indexes/ja-JP.json @@ -0,0 +1,1865 @@ +{ + "😀":["にやにやした顔","顔","にやにや","幸せ","しあわせ"], + "😃":["口を開けた笑顔","顔","口","開ける","笑顔","幸せ","しあわせ"], + "😄":["口を開けて目が笑っている笑顔","目","顔","口","開ける","笑顔","幸せ","しあわせ"], + "😁":["にやにやした顔","目","顔","にやにや","笑顔"], + "😆":["口を開けて笑っている顔","顔","笑い","口","開ける","満足","笑顔"], + "😅":["口を開けて冷や汗をかいた笑顔","ぞっとする","顔","口を開ける","笑顔","冷や汗"], + "😂":["嬉し泣き","顔","嬉しい","うれしい","笑う","泣く","涙"], + "🤣":["大爆笑","顔","床","笑い","大笑い","爆笑","ぐるぐる"], + "😇":["天使の笑顔","天使","顔","おとぎ話","ファンタジー","天使の輪","無邪気","笑顔"], + "😉":["ウインクした顔","顔","ウインク"], + "😊":["目が笑っている笑顔","赤面","目","顔","笑顔"], + "🙂":["微笑み","顔","笑顔","幸せ","しあわせ"], + "🙃":["逆さの顔","顔","逆さ","さかさ"], + "☺️":["笑顔","顔","輪郭","リラックス"], + "😋":["食べ物を味わう顔","美味しい","おいしい","顔","味わう","ふーむ","うまい"], + "😌":["ほっとした顔","顔","安心","ほっとする"], + "😍":["目がハートの笑顔","目","顔","ハート","愛","笑顔"], + "🥰":["笑顔とハート","顔","敬愛","べたぼれ","愛"], + "😘":["投げキッス","顔","ハート","キス"], + "😗":["キスをする顔","顔","キス"], + "😙":["笑顔でキス","目","顔","キス","笑顔"], + "😚":["目を閉じてキスをする顔","閉じた","目","顔","キス"], + "🥲":["涙の出ている笑顔","泣く","幸せ","感謝する","誇りに思う","安心する","笑う"], + "🤪":["おどけた顔","目","にやにや","変","興奮","ワイルド"], + "😜":["舌を出してウインクしている顔","目","顔","冗談","舌","ウインク"], + "😝":["舌を出して目を細めている顔","目","顔","怖い","恐い","こわい","味","舌"], + "😛":["舌を出している顔","顔","舌"], + "🤑":["強欲な顔","顔","お金","口"], + "😎":["サングラスをかけた顔","明るい","かっこいい","目","アイウエア","顔","眼鏡","メガネ","笑顔","太陽","サングラス","天気"], + "🤓":["オタク","顔","変な人"], + "🥸":["仮装した顔","仮装","メガネ","匿名の人","鼻"], + "🧐":["片メガネをかけた顔","退屈","裕福","豊か"], + "🤠":["カウボーイハットの顔","カウボーイ","カウガール","顔","帽子"], + "🥳":["パーティーフェイス","顔","祝典","帽子","角","パーティー"], + "🤡":["ピエロの顔","ピエロ","顔"], + "😏":["にやにやした顔","顔","にやにや"], + "😶":["口のない顔","顔","口","静かに","沈黙"], + "🫥":["点線の顔","落ち込んだ","消える","隠れる","内向的","目に見えない"], + "😐":["普通の顔","無表情","顔","平静"], + "🫤":["口が斜めになった顔","がっかり","無関心","疑い深い","不安"], + "😑":["無表情","顔","ポーカーフェイス","無感情"], + "😒":["面白くなさそうな顔","顔","つまらない","不幸"], + "🙄":["ぐるぐる目の顔","目","顔","ぐるぐる"], + "🤨":["眉が上がっている顔","不信","疑い深い","非難","疑念","やや驚き","懐疑的"], + "🤔":["考えている顔","顔","考え中"], + "🤫":["シッと言っている顔","シーッ","静か","黙る"], + "🤭":["口を手で覆った顔","目","笑顔","覆う","口","手"], + "🫢":["目を開いて口を手で覆った顔","驚嘆","畏敬","不信","狼狽","怖い","驚き"], + "🫡":["敬礼している顔","ok","敬礼","晴天","部隊","はい"], + "🤗":["両手を広げた笑顔","顔","ハグ","抱きしめる"], + "🫣":["のぞき見している顔","魅了","のぞき見","凝視","チラ見"], + "🤥":["嘘つき顔","顔","嘘","うそ","ピノキオ"], + "😳":["赤くなった顔","ぼーっとした","ぼうっとした","顔","赤面"], + "😞":["がっかりした顔","がっかり","顔"], + "😟":["不安な顔","顔","心配","不安"], + "😤":["勝ち誇った顔","顔","勝利","勝つ"], + "😠":["怒った顔","怒り","怒った","顔","激怒"], + "😡":["ふくれ顔","怒り","怒った","顔","激怒","ふくれっ面","ふくれっつら","憤怒","赤"], + "🤬":["口が記号で覆われた顔","呪い","ののしり","罵り"], + "😔":["悲しげな顔","がっかり","顔","悲しい"], + "😕":["困った顔","困った","こまった","顔"], + "🙁":["ご機嫌斜め","顔","しかめっ面","しかめっつら","悲しい","不幸"], + "☹️":["しかめっつら","顔","しかめっ面","悲しい","不幸"], + "😬":["しかめっ面","顔","しかめっつら"], + "🥺":["訴えかける顔","顔","物乞い","慈悲","子犬の目"], + "😣":["我慢している顔","顔","がんばる","頑張る"], + "😖":["うろたえた顔","戸惑い","とまどい","うろたえ","顔"], + "😫":["疲れた顔","顔","疲れた","つかれた"], + "😩":["うんざりしている顔","顔","疲れた","つかれた","うんざり"], + "🥱":["あくびしている顔","飽きた","疲れた","あくび"], + "😪":["眠い顔","顔","寝る","睡眠"], + "😮💨":["ため息の出ている顔","顔","ため息","息切れ","うめき","安心","ささやき","口笛"], + "😮":["口を開けた笑顔","顔","口","開ける","同情"], + "😱":["絶叫した顔","顔","恐怖","怖い","恐い","こわい","ムンク","怯え","絶叫"], + "😨":["ゾッとしている顔","顔","恐怖","恐い","怖い","こわい","怯え"], + "😰":["口を開けて冷や汗をかいた顔","青ざめる","ぞっとする","顔","口","開ける","急ぐ","冷や汗"], + "😥":["がっかりしたが安心した顔","がっかり","顔","安心","ほっとする","やれやれ"], + "😓":["冷や汗をかいている顔","ぞっとする","顔","冷や汗"], + "😯":["落ち着いた顔","顔","黙る","呆然","驚き"], + "😦":["心配そうな顔の絵文字","顔","しかめっ面","しかめっつら","口","開ける"], + "😧":["苦悩に満ちた顔","苦悩","顔"], + "🥹":["涙をこらえている顔","怒る","泣く","誇りに思う","逆らう","悲しむ"], + "😢":["泣き顔","泣く","顔","悲しい","涙"], + "😭":["号泣","泣く","顔","悲しい","涙"], + "🤤":["よだれを垂らした顔","よだれ","顔"], + "🤩":["スターに夢中","目","顔","にやにや","星","夢想的"], + "😵":["目がバツになった顔","めまい","顔","バツ","目"], + "😵💫":["目がぐるぐるしている顔","めまい","顔","目","うっとり","ぐるぐる","トラブル","おー"], + "🥴":["ぼんやしりた顔","顔","目まい","酩酊","ほろ酔い","まっすぐでない目","波状の口"], + "😲":["驚いた顔","驚き","びっくり","顔","ショック","驚愕"], + "🫨":["震える顔","地震","顔","震え","衝撃","振動"], + "🤯":["爆発した頭","顔","ショック","爆発","狂気","びっくり"], + "🫠":["ほろりとした顔","消える","溶解する","液体","溶ける"], + "🤐":["お口チャック","顔","口","チャック"], + "😷":["マスクをした顔","風邪","かぜ","医者","顔","マスク","薬","病気"], + "🤕":["怪我","包帯","顔","傷","キズ","けが"], + "🤒":["温度計をくわえた顔","顔","病気","風邪","かぜ","体温計"], + "🤮":["吐きそうな顔","病気","嘔吐","風邪","かぜ","吐く"], + "🤢":["吐きそうな顔","顔","吐き気","嘔吐"], + "🤧":["くしゃみをする顔","顔","くしゃみ","ハクション"], + "🥵":["ほてった顔","顔","熱っぽい","熱射病","ほてった","赤ら顔","汗をかいた"], + "🥶":["青ざめた顔","顔","ぞっとする","凍える","凍傷","つらら"], + "😶🌫️":["雲で覆われた顔","顔","おっちょこちょい","非現実的","夢","もや","雲で覆われた頭"], + "😴":["寝顔","顔","寝る","睡眠","スヤスヤ"], + "💤":["睡眠","マンガ","漫画","寝る","スヤスヤ"], + "😈":["角つき笑顔","顔","おとぎ話","ファンタジー","角","笑顔"], + "👿":["小悪魔","鬼","悪魔","顔","おとぎ話","ファンタジー"], + "👹":["鬼","妖怪","顔","昔話","ファンタジー","日本","モンスター"], + "👺":["天狗","妖怪","顔","昔話","ファンタジー","日本","モンスター"], + "💩":["うんち","マンガ","漫画","フン","顔","モンスター"], + "👻":["お化け","妖怪","顔","おとぎ話","ファンタジー","幽霊","モンスター","ハロウィーン"], + "💀":["ドクロ","体","死","顔","おとぎ話","モンスター","骸骨","ハロウィーン"], + "☠️":["ドクロマーク","体","交差した骨","死","顔","モンスター","骸骨","ハロウィーン"], + "👽":["宇宙人","怪獣","異星人","顔","おとぎ話","ファンタジー","モンスター","宇宙","UFO"], + "🤖":["ロボットの顔","顔","モンスター","ロボット"], + "🎃":["ジャック・オ・ランタン","イベント","お祝い","エンタメ","ハロウィン","ジャックオランタン","ランタン","かぼちゃ"], + "😺":["口を開けて笑う猫","猫","ネコ","顔","口","開ける","笑顔"], + "😸":["ニヤニヤ笑う猫","猫","ネコ","目","顔","ニヤニヤ","笑顔"], + "😹":["嬉し泣きしたネコの顔","猫","ネコ","顔","嬉しい","うれしい","涙"], + "😻":["ハートの目をした猫の笑顔","猫","ネコ","目","顔","ハート","愛","笑顔"], + "😼":["ニヤリと笑う猫の顔","猫","ネコ","顔","皮肉","笑顔","ニヤリ"], + "😽":["目を閉じてキスをする猫","猫","ネコ","目","顔","キス"], + "🙀":["疲れたネコの顔","猫","ネコ","顔","びっくり","驚く","うんざり"], + "😿":["泣いたネコの顔","猫","ネコ","泣く","顔","悲しい","涙"], + "😾":["怒ったネコの顔","猫","ネコ","顔","怒る","ふくれっ面","ふくれっつら"], + "🫶":["ハートポーズ","愛"], + "👐":["開いた手","体","手","広げる"], + "🤲":["上に向けた両手のひら","体","祈り","カップのように丸めた手"], + "🙌":["両手を上げる","体","お祝い","ジェスチャー","手","バンザイ","万歳","挙げる"], + "👏":["拍手","体","手を叩く","手"], + "🙏":["握った手","頼む","体","お辞儀","手を合わせる","ジェスチャー","手","お願い","祈る","ありがとう","感謝"], + "🤝":["握手","合意","手","手を結ぶ","会議"], + "👍":["イイね","体","上","手","指","サムズアップ","+1"], + "👎":["ダメ","体","下","手","指","サムズダウン","-1"], + "👊":["握りこぶし","体","握る","拳","こぶし","グー","手","パンチ","接近"], + "✊":["こぶし","体","握る","拳","グー","手","パンチ"], + "🤛":["左向きのこぶし","体","拳","左向き"], + "🤜":["右向きのこぶし","体","拳","右向き"], + "🤞":["交差させた指","体","交差","指","手","幸運"], + "✌️":["Vサイン","体","手","V","ブイ","勝つ","勝利","ピース"], + "🫰":["人差し指と親指を交差した手","高い","ハート","愛","お金","スナップ"], + "🤘":["コルナ","体","指","手","角","最高"], + "🤟":["愛してるのジェスチャー","体","愛してる","好き","手"], + "👌":["OKサイン","体","手","OK"], + "🤌":["つまんでいる指","指","手ぶり","尋問","つまむ","皮肉"], + "🤏":["つまんでいる手","体","手","小さい","小型","ちっちゃい"], + "👈":["左指差し","手の甲","体","指","手","人差し指","指さす"], + "🫳":["手のひらを下にした手","退ける","落とす","シッシ"], + "🫴":["手のひらを上にした手","手招き","捕獲","来る","申し出"], + "👉":["指差し","手の甲","体","指","手","人差し指","指さす"], + "👆":["指差し","手の甲","体","指","手","人差し指","指さす","上"], + "👇":["指差し","手の甲","体","下","指","手","人差し指","指さす"], + "☝️":["指差し","体","指","手","人差し指","指さす","上"], + "✋":["挙手","体","手"], + "🤚":["手の甲","体","挙げる"], + "🖐️":["広げた手のひら","体","指","手","広げる"], + "🖖":["長寿と繁栄を","体","指","手","スポック","バルカン"], + "👋":["バイバイ","体","手","振る","やっほー","ヤッホー","こんにちは"], + "🤙":["電話の形の手","体","電話","手"], + "🫲":["左手","手","左","ひだり"], + "🫱":["右手","手","右","みぎ"], + "🫷":["左を押している手","辞退","ハイタッチ","左方向","押し付ける","断る","停止","待つ"], + "🫸":["右を押している手","辞退","ハイタッチ","押し付ける","断る","右方向","停止","待つ"], + "💪":["曲げた上腕二頭筋","力こぶ","体","マンガ","漫画","運動","筋肉","力","マッスル","マッチョ"], + "🦾":["メカニカルアーム","アクセシビリティ","義手","人口装具","体"], + "🖕":["中指を立てた手","体","指","手","中指"], + "🫵":["見ている人を指している人差し指","指す","あなた","指"], + "✍️":["書いている手","体","手","書く"], + "🤳":["自撮り","カメラ","携帯","腕"], + "💅":["マニキュア","体","ケア","化粧品","コスメ","爪","ネイル"], + "🦵":["脚","体","キック","手足"], + "🦿":["機械の脚","アクセシビリティ","義足","人口装具","体"], + "🦶":["足","体","キック","踏みつける"], + "👄":["口","体","唇","クチビル"], + "🫦":["かんでいる唇","心配","怖い","浮気","神経質","不愉快","不安"], + "🦷":["歯","体","歯医者"], + "👅":["舌","体"], + "👂":["耳","体","鼻"], + "🦻":["補聴器を付けている耳","アクセシビリティ","補聴器","聞く","体","耳"], + "👃":["鼻","体"], + "👁️":["目","体"], + "👀":["目","体","顔"], + "🧠":["脳","体","臓器","知的","賢い"], + "🫀":["解剖学的な心臓","解剖学","心臓学","心臓","臓器","脈"], + "🫁":["肺","息","呼気","吸入","臓器","呼吸"], + "🦴":["骨","体","骨格"], + "👤":["上半身のシルエット","上半身","シルエット"], + "👥":["上半身のシルエット","上半身","シルエット"], + "🗣️":["喋る頭のシルエット","顔","頭","シルエット","しゃべる","話す"], + "🫂":["ハグしている人たち","さようなら","こんにちは","ハグ","ありがとう"], + "👶":["赤ちゃん"], + "👧":["女の子","少女","処女","おとめ座","星座","子供"], + "🧒":["子供","人","少年","少女"], + "👦":["男の子","少年","子供"], + "👩":["女性","女","おんな"], + "🧑":["成人向け","人","大人","男性","女性","女","男","おとこ","おんな"], + "👨":["男性","口ひげ","男","おとこ"], + "👩🦱":["女性,巻き毛","巻き毛","髪","女性","女","おんな"], + "🧑🦱":["人,巻き毛","巻き毛","髪"], + "👨🦱":["男性,巻き毛","巻き毛","髪","男性","男","おとこ"], + "👩🦰":["女性,赤毛","赤","髪","女性","女","おんな"], + "🧑🦰":["人,赤毛","赤","髪"], + "👨🦰":["男性,赤毛","赤","髪","男性","男","おとこ"], + "👱♀️":["女性,金髪","ブロンド","髪","女","おんな"], + "👱":["人,金髪","金髪","ブロンド","髪"], + "👱♂️":["男性,金髪","ブロンド","髪","男","男性","おとこ"], + "👩🦳":["女性,白髪","白","髪","女性","女","おんな"], + "🧑🦳":["人,白髪","白","髪"], + "👨🦳":["男性,白髪","白","髪","男性","男","おとこ"], + "👩🦲":["女性,禿","禿","女性","女","おんな"], + "🧑🦲":["人,禿","禿"], + "👨🦲":["男性,禿","禿","男性","男","おとこ"], + "🧔♀️":["ひげのある女性","あごひげ","ひげを生やした","女性","女","おんな"], + "🧔":["あごひげのある人","あごひげ","ひげを生やした"], + "🧔♂️":["ひげのある男性","あごひげ","ひげを生やした","男性","男","おとこ"], + "👵":["おばあさん","おばあちゃん","老人","女性","女","おんな"], + "🧓":["高齢者","人","男性","女性","女","男","おとこ","おんな"], + "👴":["おじいさん","おじいちゃん","老人","男","おとこ","男性"], + "👲":["スカルキャップをかぶっている人","中国帽","帽子"], + "👳♀️":["ターバンを巻いている女性","ターバン","女性","女","おんな"], + "👳":["ターバンを巻いている人","ターバン"], + "👳♂️":["ターバンを巻いている男性","ターバン","男","おとこ","男性"], + "🧕":["ヘッドスカーフをかぶった女性","ヘッドスカーフ","ヒジャブ","マンティラ","ティチェル","バンダナ","頭のスカーフ","女性","女","おんな"], + "👮♀️":["女性警察官","警察官","警官","警察","女性","女","おんな"], + "👮":["警察官","警官","警察"], + "👮♂️":["男性警察官","警察官","警官","警察","男","おとこ","男性"], + "👩🚒":["女性消防士","火","火事","消防","消防士","女性","女","おんな"], + "🧑🚒":["消防士","火事"], + "👨🚒":["男性消防士","火","火事","消防","消防士","男","おとこ","男性"], + "👷♀️":["女性の建設作業員","工事","建設","作業員","女性","女","おんな"], + "👷":["建設作業員","工事","建設","作業員"], + "👷♂️":["男性の建設作業員","建設","作業員","男性","男","おとこ"], + "👩🏭":["男性の工場作業員","工場","工業","作業員","女性","女","おんな"], + "🧑🏭":["工場作業員","工場","工業","溶接"], + "👨🏭":["男性の工場作業員","工場","工業","作業員","男","おとこ","男性"], + "👩🔧":["女性整備士","職人","配管工","電気技師","修理人","女性","女","おんな"], + "🧑🔧":["整備士","職人","配管工","電気技師","修理人"], + "👨🔧":["男性整備士","職人","配管工","電気技師","修理人","男","おとこ","男性"], + "👩🌾":["女性の農業従事者","農場労働者","牧場主","庭師","農家","女性","女","おんな"], + "🧑🌾":["農業従事者","農場労働者","牧場主","庭師","農家"], + "👨🌾":["男性の農業従事者","農場労働者","牧場主","庭師","農家","男","おとこ","男性"], + "👩🍳":["女性の料理人","食品","サービス","シェフ","コック","料理人","料理","女性","女","おんな"], + "🧑🍳":["料理人","食品","サービス","シェフ","コック","料理"], + "👨🍳":["男性の料理人","食品","サービス","シェフ","コック","料理人","料理","男","おとこ","男性"], + "👩🎤":["男性シンガー","音楽","ミュージシャン","ロック","ロッカー","ロックスター","芸能人","女性","女","おんな"], + "🧑🎤":["歌手","音楽","ミュージシャン","ロック","ロッカー","ロックスター","芸能人"], + "👨🎤":["男性シンガー","音楽","ミュージシャン","ロック","ロッカー","ロックスター","芸能人","男","おとこ","男性"], + "👩🎨":["女性アーティスト","芸術","アート","芸術家","アーティスト","絵画","画家","女性","女","おんな"], + "🧑🎨":["アーティスト","芸術","アート","芸術家","絵画","画家"], + "👨🎨":["男性アーティスト","芸術","アート","芸術家","アーティスト","絵画","画家","男","おとこ","男性"], + "👩🏫":["女性の教師","教育","先生","教授","教師","講師","女性","女","おんな"], + "🧑🏫":["教師","教育","先生","教授","講師"], + "👨🏫":["男性の教師","教育","先生","教授","教師","講師","男","おとこ","男性"], + "👩🎓":["女子生徒","学生","卒業生","教育","学校","女性","女","おんな"], + "🧑🎓":["生徒","学生","卒業生","教育","学校"], + "👨🎓":["男子生徒","学生","卒業生","教育","学校","男","おとこ","男性"], + "👩💼":["男性会社員","オフィス","会計士","銀行家","管理職","顧問","事務員","アナリスト","女性","女","おんな"], + "🧑💼":["会社員","オフィス","会計士","銀行家","管理職","顧問","事務員","アナリスト"], + "👨💼":["男性会社員","オフィス","会計士","銀行家","管理職","顧問","事務員","アナリスト","男","おとこ","男性"], + "👩💻":["女性技術者","テクノロジー","ソフトウェア","エンジニア","プログラマー","ラップトップ","ノートパソコン","女性","女","おんな"], + "🧑💻":["技術者","テクノロジー","ソフトウェア","エンジニア","プログラマー","ラップトップ","ノートパソコン"], + "👨💻":["男性技術者","テクノロジー","ソフトウェア","エンジニア","プログラマー","ラップトップ","ノートパソコン","男","おとこ","男性"], + "👩🔬":["女性科学者","科学者","化学者","技術者","数学者","物理学者","生物学者","検査技師","女性","女","おんな"], + "🧑🔬":["科学者","化学者","技術者","数学者","物理学者","生物学者","検査技師"], + "👨🔬":["男性科学者","科学者","化学者","技術者","数学者","物理学者","生物学者","検査技師","男","おとこ","男性"], + "👩🚀":["女性宇宙飛行士","宇宙","星","月","惑星","女性","女","おんな"], + "🧑🚀":["宇宙飛行士","宇宙","星","月","惑星"], + "👨🚀":["男性宇宙飛行士","宇宙","星","月","惑星","男","おとこ","男性"], + "👩⚕️":["女性医療関係者","医師","内科医","医学博士","看護師","歯科医","医療専門家","療法士","女性","女","おんな"], + "🧑⚕️":["医療関係者","医師","内科医","医学博士","看護師","歯科医","医療専門家","療法士"], + "👨⚕️":["男性医療関係者","医師","内科医","医学博士","看護師","歯科医","医療専門家","療法士","男","おとこ","男性"], + "👩⚖️":["女性裁判官","裁判官","法廷","裁判所","法律","女性","女","おんな"], + "🧑⚖️":["裁判官","法廷","裁判所","法律"], + "👨⚖️":["男性裁判官","裁判官","法廷","裁判所","法律","男","おとこ","男性"], + "👩✈️":["女性パイロット","パイロット","飛行機","操縦士","航空","女性","女","おんな"], + "🧑✈️":["パイロット","飛行機","操縦士","航空"], + "👨✈️":["男性パイロット","パイロット","飛行機","操縦士","航空","男","おとこ","男性"], + "💂♀️":["女性警備員","警備員","警備","女性","女","おんな"], + "💂":["警備員","警備"], + "💂♂️":["男性警備員","警備員","警備","男","おとこ","男性"], + "🥷":["忍者","戦士","隠された","ステルス"], + "🕵️♀️":["女性の探偵","探偵","刑事","スパイ","女性","女","おんな"], + "🕵️":["探偵","刑事","スパイ"], + "🕵️♂️":["男性の探偵","探偵","刑事","スパイ","男","おとこ","男性"], + "🤶":["ミセス・クロース","イベント","お祝い","クリスマス","母","サンタ","クロース","女性","女","おんな"], + "🧑🎄":["ミクスクロース","アクティビティ","お祝い","クリスマス","サンタ","クロース"], + "🎅":["サンタクロース","イベント","お祝い","クリスマス","父","サンタ","クロース","男","おとこ","男性"], + "👼":["天使の赤ちゃん","天使","赤ちゃん","顔","おとぎ話","ファンタジー"], + "👸":["お姫さま","おとぎ話","ファンタジー","女王","女性","女","おんな"], + "🫅":["王冠をかぶった人","おとぎ話","ファンタジー","国王","貴族","王","王族"], + "🤴":["王子様","おとぎ話","ファンタジー","王","男","おとこ","男性"], + "👰":["ベールを付けた女性","花嫁","ベール","結婚式","女性","女","おんな"], + "👰♀️":["ベールを付けた人","花嫁","ベール","結婚式"], + "👰♂️":["ベールを付けた男性","花嫁","ベール","ウェディング","男性","男","おとこ"], + "🤵♀️":["タキシードの女性","タキシード","ウェディング","女性","女","おんな"], + "🤵":["タキシードを着る人","花婿","タキシード","ウェディング"], + "🤵♂️":["タキシードの男性","花婿","タキシード","ウェディング","男性","男","おとこ"], + "🩷":["ピンクのハート","かわいい","ハート","好き","愛","ピンク"], + "🩵":["ライトブルーのハート","シアン","ハート","ライトブルー","コガモ"], + "🩶":["グレーのハート","グレー","ハート","シルバー","スレート"], + "🕴️♀️":["宙に浮いたスーツの女性","ビジネス","スーツ","女性","女","おんな"], + "🕴️":["宙に浮いたスーツの人","ビジネス","スーツ"], + "🕴️♂️":["宙に浮いたスーツの男性","ビジネス","スーツ","男","おとこ","男性"], + "🦸♀️":["女性のスーパーヒーロー","空想","善","ヒロイン","超大国","女性","女","おんな"], + "🦸":["スーパーヒーロー","空想","善","ヒーロー","ヒロイン","超大国"], + "🦸♂️":["男性のスーパーヒーロー","空想","善","ヒーロー","超大国","男性","男","おとこ"], + "🦹♀️":["女性の悪党","空想","悪","犯罪","悪事","超大国","悪役","女性","女","おんな"], + "🦹":["悪党","空想","悪","犯罪","悪事","超大国","悪役"], + "🦹♂️":["男性の悪党","空想","悪","犯罪","悪事","超大国","悪役","男性","男","おとこ"], + "🧙♀️":["女性の魔法使い","空想","魔女","女の魔法使い","女性","女","おんな"], + "🧙":["魔法使い","空想","魔術師","男の魔法使い"], + "🧙♂️":["男性の魔法使い","空想","魔術師","男の魔法使い","男性","男","おとこ"], + "🧝♀️":["女性の小人","空想","小人","先のとがった耳","女性","女","おんな"], + "🧝":["小人","空想","先のとがった耳"], + "🧝♂️":["男性の小人","空想","小人","先のとがった耳","男性","男","おとこ"], + "🧚♀️":["女性の妖精","空想","ティターニア","ウィングス","女性","女","おんな"], + "🧚":["妖精","空想","ティターニア","ウィングス"], + "🧚♂️":["男性の妖精","空想","オベロン","小妖精","男性","男","おとこ"], + "🧞♀️":["女性の精霊","空想","精霊","女性","女","おんな"], + "🧞":["精霊","空想"], + "🧞♂️":["男性の精霊","空想","精霊","男性","男","おとこ"], + "🧜♀️":["女性の人魚","空想","女性","女","おんな"], + "🧜":["人魚","空想"], + "🧜♂️":["男性の人魚","空想","人魚","男性","男","おとこ"], + "🧌":["釣り","おとぎ話","ファンタジ","モンスター"], + "🧛♀️":["女性の吸血鬼","空想","アンデッド","女性","女","おんな"], + "🧛":["吸血鬼","空想","ドラキュラ","アンデッド"], + "🧛♂️":["男性の吸血鬼","空想","ドラキュラ","アンデッド","男性","男","おとこ"], + "🧟♀️":["女性のゾンビ","空想","アンデッド","女性","女","おんな"], + "🧟":["ゾンビ","空想","アンデッド"], + "🧟♂️":["男性のゾンビ","空想","アンデッド","男性","男","おとこ"], + "🙇♀️":["深くお辞儀する女性","謝罪","お辞儀","ジェスチャー","ごめんなさい","女性","女","おんな"], + "🙇":["深くお辞儀した人","謝罪","お辞儀","ジェスチャー","ごめんなさい"], + "🙇♂️":["深くお辞儀する男性","謝罪","お辞儀","ジェスチャー","ごめんなさい","男","おとこ","男性"], + "💁♀️":["案内する女性","手","助け","情報","ずうずうしい","女性","女","おんな"], + "💁":["案内する人","手","助け","情報","ずうずうしい","女性","女","おんな"], + "💁♂️":["案内する男性","手","助け","情報","ずうずうしい","男","おとこ","男性"], + "🙅♀️":["NGサインの女性","禁じる","ジェスチャー","手","だめ","ダメ","禁止","女性","女","おんな"], + "🙅":["NGサインの人","禁じる","ジェスチャー","手","だめ","ダメ","禁止"], + "🙅♂️":["NGサインの男性","禁じる","ジェスチャー","手","だめ","ダメ","禁止","男","おとこ","男性"], + "🙆♀️":["OKサインの女性","ジェスチャー","手","ok","女性","女","おんな"], + "🙆":["OKサインの人","ジェスチャー","手","OK"], + "🙆♂️":["OKサインの男性","ジェスチャー","手","ok","男","おとこ","男性"], + "🤷♀️":["肩をすくめる女性","疑い","無知","無関心","肩をすくめる","女性","女","おんな"], + "🤷":["肩をすくめる人","疑い","無知","無関心","肩をすくめる"], + "🤷♂️":["肩をすくめる男性","疑い","無知","無関心","肩をすくめる","男","おとこ","男性"], + "🙋♀️":["片手を上げて喜ぶ女性","ジェスチャー","手","幸せ","しあわせ","挙げる","女性","女","おんな"], + "🙋":["片手を上げて喜ぶ人","ジェスチャー","手","幸せ","しあわせ","挙げる"], + "🙋♂️":["片手を上げて喜ぶ男性","ジェスチャー","手","幸せ","しあわせ","挙げる","男","おとこ","男性"], + "🤦♀️":["顔を押さえる女性","不信","憤慨","顔","手のひら","女性","女","おんな"], + "🤦":["手のひらを顔に当てる人","不信","憤慨","顔","手のひら"], + "🤦♂️":["顔を押さえる男性","不信","憤慨","顔","手のひら","男","おとこ","男性"], + "🧏♀️":["耳が不自由な女性","アクセシビリティ","耳が不自由","女性","女","おんな"], + "🧏":["耳が不自由な人","アクセシビリティ","耳が不自由"], + "🧏♂️":["耳が不自由な男性","アクセシビリティ","耳が不自由","男性","男","おとこ"], + "🙎♀️":["ふくれっ面の女性","ジェスチャー","ふくれっ面","ふくれっつら","女性","女","おんな"], + "🙎":["怒った顔の人","ジェスチャー","ふくれっ面","ふくれっつら"], + "🙎♂️":["ふくれっ面の男性","ジェスチャー","ふくれっ面","ふくれっつら","男","おとこ","男性"], + "🙍♀️":["顔をしかめた女性","しかめ面","ジェスチャー","悲しい","女性","女","おんな"], + "🙍":["不満な顔の人","しかめ面","ジェスチャー","悲しい"], + "🙍♂️":["顔をしかめた男性","しかめ面","ジェスチャー","悲しい","男性","男","おとこ"], + "💇♀️":["髪を切られている女性","理髪師","美容師","美容","散髪","ヘアカット","美容院","女性","女","おんな"], + "💇":["髪を切られている人","理髪師","美容師","美容","散髪","ヘアカット","美容院"], + "💇♂️":["髪を切られている男性","理髪師","美容師","美容","散髪","ヘアカット","美容院","男","おとこ","男性"], + "💆♀️":["フェイスマッサージを受ける女性","マッサージ","サロン","女性","女","おんな"], + "💆":["フェイスマッサージを受ける人","マッサージ","サロン"], + "💆♂️":["フェイスマッサージを受ける男性","マッサージ","サロン","男","おとこ","男性"], + "🤰":["妊婦","妊娠","赤ちゃん","女性","女","おんな","腹","ふくれた","ふっくらした"], + "🫄":["妊娠した人","腹","ふくれた","ふっくらした","妊娠","赤ちゃん"], + "🫃":["妊娠している男性","腹","ふくれた","ふっくらした","妊娠","赤ちゃん","男性","男","おとこ"], + "🤱":["母乳","胸","赤ちゃん","赤ん坊","乳児","幼児","母","子供","保育","ミルク","女性","女","おんな"], + "👩🍼":["赤ちゃんにご飯をあげる女性","赤ちゃん","乳児","子供","授乳","ミルク","ボトル","女性","女","おんな"], + "🧑🍼":["赤ちゃんにご飯をあげる人","赤ちゃん","乳児","子供","授乳","ミルク","ボトル"], + "👨🍼":["赤ちゃんにご飯をあげる男性","赤ちゃん","乳児","子供","授乳","ミルク","ボトル","男性","男","おとこ"], + "🧎♀️":["膝立ちしている女性","膝","膝立ち","女性","女","おんな"], + "🧎":["膝立ちしている人","膝","膝立ち"], + "🧎♂️":["膝立ちしている男性","膝","膝立ち","男性","男","おとこ"], + "🧍♀️":["立っている女性","立つ","スタンディング","女性","女","おんな"], + "🧍":["立っている人","立ち","スタンディング"], + "🧍♂️":["立っている男性","立つ","スタンディング","男性","男","おとこ"], + "🚶♀️":["歩く女性","ハイキング","歩行者","歩く","ウォーキング","女性","女","おんな"], + "🚶":["歩く人","ハイキング","歩行者","歩く","ウォーキング"], + "🚶♂️":["歩く男性","ハイキング","歩行者","歩く","ウォーキング","男","おとこ","男性"], + "👩🦯":["白杖を持った女性","アクセシビリティ","目が不自由","女性","女","おんな"], + "🧑🦯":["白杖を持った人","アクセシビリティ","目が不自由"], + "👨🦯":["白杖を持った男性","アクセシビリティ","目が不自由","男性","男","おとこ"], + "🏃♀️":["走る女性","マラソン","ランナー","ランニング","女性","女","おんな"], + "🏃":["走る人","マラソン","ランナー","ランニング"], + "🏃♂️":["走る男性","マラソン","ランナー","ランニング","男","おとこ","男性"], + "👩🦼":["電動車いすに座っている女性","アクセシビリティ","車いす","女性","女","おんな"], + "🧑🦼":["電動車いすに座っている人","アクセシビリティ","車いす"], + "👨🦼":["電動車いすに座っている男性","アクセシビリティ","車いす","男性","男","おとこ"], + "👩🦽":["手動車いすに座っている女性","アクセシビリティ","車いす","女性","女","おんな"], + "🧑🦽":["手動車いすに座っている人","アクセシビリティ","車いす"], + "👨🦽":["手動車いすに座っている男性","アクセシビリティ","車いす","男性","男","おとこ"], + "💃":["女性ダンサー","ダンス","踊る","ダンサー","女性","女","おんな"], + "🕺":["男性ダンサー","ダンス","踊る","ダンサー","男","おとこ","男性"], + "👯♀️":["バニーガール","うさぎ耳","ダンサー","女性","女","おんな"], + "👯":["うさぎ耳の人","うさぎ耳","ダンサー"], + "👯♂️":["うさぎ耳の男性","うさぎ耳","ダンサー","男","おとこ","男性"], + "👫":["手をつないだ男女","カップル","手","つなぐ","男","女","男女","おとこ","おんな"], + "👭":["手をつないだ女性","カップル","手","つなぐ","女性","女","おんな","プライド","lgbt","レズビアン"], + "👬":["手をつないだ男性","カップル","手","つなぐ","男性","男","おとこ","プライド","lgbt","ゲイ"], + "🧑🤝🧑":["手をつないだ人たち","カップル","手","握る"], + "👩❤️👨":["ハートのカップル (女性、男性)","カップル","ハート","愛","恋愛","男","女","男女","おとこ","おんな"], + "👩❤️👩":["ハートのカップル (女性、女性)","カップル","ハート","愛","恋愛","女性","女","おんな","プライド","lgbt","レズビアン"], + "💑":["ハートのカップル","カップル","ハート","愛","恋愛","男","女","男女","おとこ","おんな"], + "👨❤️👨":["ハートのカップル (男性、男性)","カップル","ハート","愛","恋愛","男性","男","おとこ","プライド","lgbt","ゲイ"], + "👩❤️💋👨":["キス (女性、男性)","カップル","キス","ハート","愛","恋愛","男","女","男女","おとこ","おんな"], + "👩❤️💋👩":["キス (女性、女性)","カップル","キス","ハート","愛","恋愛","女性","女","おんな","プライド","lgbt","ゲイ"], + "💏":["キス","カップル","キス","ハート","愛","恋愛","男","女","男女","おとこ","おんな"], + "👨❤️💋👨":["キス (男性、男性)","カップル","キス","ハート","愛","恋愛","男性","男","おとこ","プライド","lgbt","ゲイ"], + "👪":["家族","父親","母親","男","女","男女","おとこ","おんな","男の子","こども"], + "👨👩👧":["家族 (男性、女性、女の子)","父親","母親","男","女","男女","おとこ","おんな","女の子","こども"], + "👨👩👧👦":["家族 (男性、女性、女の子、男の子)","父親","母親","男","女","男女","おとこ","おんな","男の子","女の子","こども"], + "👨👩👦👦":["家族 (男性、女性、男の子、男の子)","父親","母親","男","女","男女","おとこ","おんな","男の子","こども"], + "👨👩👧👧":["家族 (男性、女性、女の子、女の子)","父親","母親","男","女","男女","おとこ","おんな","女の子","こども"], + "👩👩👦":["家族 (女性、女性、男の子)","家族","母親","女性","女","おんな","男の子","子供","プライド","lgbt","レズビアン"], + "👩👩👧":["家族 (女性、女性、女の子)","家族","母親","女性","女","おんな","女の子","子供","プライド","lgbt","レズビアン"], + "👩👩👧👦":["家族 (女性、女性、女の子、男の子)","家族","母親","女性","女","おんな","男の子","女の子","子供","プライド","lgbt","レズビアン"], + "👩👩👦👦":["家族 (女性、女性、男の子、男の子)","家族","母親","女性","女","おんな","男の子","子供","プライド","lgbt","レズビアン"], + "👩👩👧👧":["家族 (女性、女性、女の子、女の子)","家族","母親","女性","女","おんな","女の子","子供","プライド","lgbt","レズビアン"], + "👨👨👦":["家族 (男性、男性、男の子)","家族","父親","男性","男","おとこ","男の子","子供","プライド","lgbt","ゲイ"], + "👨👨👧":["家族 (男性、男性、女の子)","家族","父親","男性","男","おとこ","女の子","子供","プライド","lgbt","ゲイ"], + "👨👨👧👦":["家族 (男性、男性、女の子、男の子)","家族","父親","男性","男","おとこ","男の子","女の子","子供","プライド","lgbt","ゲイ"], + "👨👨👦👦":["家族 (男性、男性、男の子、男の子)","家族","父親","男性","男","おとこ","男の子","子供","プライド","lgbt","ゲイ"], + "👨👨👧👧":["家族 (男性、男性、女の子、女の子)","家族","父親","男性","男","おとこ","女の子","子供","プライド","lgbt","ゲイ"], + "👩👦":["家族(女性、男の子)","家族","母親","女性","女","おんな","男の子","こども"], + "👩👧":["家族(女性、女の子)","家族","母親","女性","女","おんな","女の子","こども"], + "👩👧👦":["家族(女性、女の子、男の子)","家族","母親","女性","女","男性","女の子","男の子","こども"], + "👩👦👦":["家族(女性、男の子、男の子)","家族","母親","女性","女","おんな","男の子","こども"], + "👩👧👧":["家族(女性、女の子、女の子)","家族","母親","女性","女","おんな","女の子","こども"], + "👨👦":["家族(男性、男の子)","父親","男","おとこ","男性","男の子","こども"], + "👨👧":["家族(男性、女の子)","父親","男","男女","女の子","こども"], + "👨👧👦":["家族(男性、女の子、男の子)","父親","男","おとこ","男性","男の子","女の子","こども"], + "👨👦👦":["家族(男性、男の子、男の子)","父親","男","おとこ","男性","男の子","こども"], + "👨👧👧":["家族(男性、女の子、女の子)","父親","男","男女","女の子","こども"], + "👚":["レディースウェア","服","女性","おんな"], + "👕":["Tシャツ","服","シャツ"], + "🥼":["白衣","服","医者","実験","科学者"], + "🦺":["安全ベスト","緊急","安全","ベスト"], + "🧥":["コート","服","ジャケット"], + "👖":["ジーンズ","服","パンツ","ズボン"], + "👔":["ネクタイ","服"], + "👗":["ドレス","服"], + "👘":["着物","服","和服"], + "🥻":["サリー","服","ドレス"], + "🩱":["ワンピース","服","水着","スイミングウェア","水泳"], + "👙":["ビキニ","服","水泳"], + "🩲":["ブリーフ","服","水着","スイミングウェア","水泳","下着"], + "🩳":["ショーツ","服","水着","スイミングウェア","水泳","下着"], + "💄":["口紅","化粧品","コスメ","化粧","メイク"], + "💋":["キスマーク","ハート","キス","唇","クチビル","マーク","恋愛","ロマンス"], + "👣":["足あと","体","服","足跡","あしあと"], + "🧦":["靴下","服","ソックス","一組"], + "🩴":["ゴム製サンダル","ビーチ","サンダル","草履"], + "👠":["ハイヒール","服","ヒール","靴","女性","おんな"], + "👡":["レディースサンダル","服","サンダル","靴","女性","おんな"], + "👢":["レディースブーツ","ブーツ","服","靴","女性","おんな"], + "🥿":["レディースフラットシューズ","服","バレエフラット","スリッポン","スリッパ"], + "👞":["メンズシューズ","服","男性","おとこ","靴"], + "👟":["運動靴","運動","服","シューズ","スニーカー"], + "🩰":["バレエシューズ","服","シューズ","バレエ","ダンス"], + "🥾":["ハイキングブーツ","服","バックパック","ブーツ","キャンプ","ハイキング"], + "🧢":["キャップ","服","野球","ハット","帽子"], + "👒":["レディースハット","服","帽子","女性","おんな"], + "🎩":["シルクハット","アクティビティ","服","エンターテインメント","娯楽","帽子","トップス"], + "🎓":["卒業式の角帽","アクティビティ","帽子","お祝い","服","卒業","ハット"], + "👑":["冠","服","王冠","王","女王"], + "⛑️":["白十字のヘルメット","救助","十字","顔","帽子","ヘルメット"], + "🪖":["軍隊のヘルメット","軍","ヘルメット","軍隊","軍人","兵士"], + "🎒":["ランドセル","アクティビティ","鞄","バッグ","学生鞄","学校"], + "👝":["ポーチ","鞄","バッグ","服"], + "👛":["財布","服","コイン"], + "👜":["ハンドバッグ","鞄","バッグ","服"], + "💼":["ブリーフケース"], + "👓":["眼鏡","服","目","メガネ","アイウェア"], + "🕶️":["サングラス","暗い","目","眼鏡","メガネ"], + "🥽":["ゴーグル","服","目の保護","水泳","溶接"], + "🧣":["スカーフ","服","首"], + "🧤":["手袋","服","手"], + "💍":["指輪","ダイヤモンド","恋愛","ロマンス"], + "🌂":["閉じた傘","服","雨","傘","天気"], + "☂️":["傘","服","雨","天気"], + "🐶":["イヌの顔","犬","イヌ","顔","ペット"], + "🐱":["ネコの顔","猫","ネコ","顔","ペット"], + "🐭":["ネズミの顔","顔","ネズミ"], + "🐹":["ハムスターの顔","顔","ハムスター","ペット"], + "🐰":["ウサギの顔","バニー","顔","ペット","ウサギ"], + "🐻":["クマの顔","熊","クマ","顔"], + "🧸":["テディベア","玩具","ビロード","ぬいぐるみ","おもちゃ"], + "🐼":["パンダの顔","顔","パンダ","熊"], + "🐻❄️":["シロクマ","顔","北極","熊","白"], + "🐨":["コアラ","熊","有袋類","オーストラリア"], + "🐯":["トラの顔","顔","虎","トラ"], + "🦁":["ライオンの顔","顔","しし座","ライオン","星座"], + "🐮":["ウシの顔","牛","ウシ","顔"], + "🐷":["ブタの顔","顔","豚","ブタ"], + "🐽":["ブタの鼻","顔","鼻","豚","ブタ"], + "🐸":["カエルの顔","顔","蛙","カエル"], + "🐵":["サルの顔","顔","猿","サル"], + "🙈":["見ざる","悪い","顔","禁じる","ジェスチャー","猿","サル","だめ","ダメ","禁止","見る"], + "🙉":["聞かざる","悪い","顔","禁じる","ジェスチャー","聞く","サル","ない","なし","禁止"], + "🙊":["言わざる","悪い","顔","禁じる","ジェスチャー","猿","サル","ない","なし","禁止","話す"], + "🐒":["サル","猿"], + "🦍":["ゴリラ"], + "🦧":["オランウータン","類人猿"], + "🐔":["ニワトリ"], + "🐧":["ペンギン"], + "🐦":["鳥"], + "🐦⬛":["黒い鳥","鳥","黒","カラス","ワタリガラス","ミヤマガラス"], + "🐤":["ヒヨコ","赤ちゃん","ひよこ"], + "🐣":["ひよこ","赤ちゃん","孵化"], + "🐥":["正面を向いたヒヨコ","赤ちゃん","ひよこ"], + "🐺":["オオカミの顔","顔","オオカミ"], + "🦊":["キツネの顔","顔","キツネ"], + "🦝":["アライグマ","顔","好奇心が強い","ずる賢い"], + "🐗":["イノシシ","豚"], + "🐴":["ウマの顔","顔","馬"], + "🦓":["シマウマ","顔"], + "🦒":["キリン","顔"], + "🦌":["シカ"], + "🫎":["ヘラジカ","動物","枝角","エルク","哺乳類"], + "🦘":["カンガルー","オーストラリア","ジャンプ","有袋類"], + "🦥":["怠惰","なまける","遅い"], + "🦦":["カワウソ","釣り","ふざける"], + "🦫":["ビーバー","ダム"], + "🦄":["ユニコーンの顔","顔","ユニコーン"], + "🐝":["ミツバチ","ハチ","昆虫"], + "🐛":["虫","昆虫"], + "🦋":["チョウ","蝶","昆虫","美しい"], + "🐌":["カタツムリ"], + "🪲":["甲虫","虫","昆虫"], + "🐞":["テントウムシ","カブトムシ","昆虫","てんとう虫"], + "🐜":["アリ","蟻","昆虫"], + "🦗":["クリケット","コオロギ","バッタ目","昆虫"], + "🪳":["ゴキブリ","昆虫","害虫"], + "🕷️":["クモ","昆虫","蜘蛛"], + "🕸️":["クモの巣","クモ","巣"], + "🦂":["サソリ","さそり座","さそり","星座"], + "🦟":["蚊","病気","熱","昆虫","マラリア","ウイルス"], + "🪰":["ハエ","害虫","昆虫","蛆虫"], + "🪱":["蠕虫","環形動物","ミミズ","寄生虫"], + "🦠":["微生物","アメーバ","バクテリア","ウイルス"], + "🐢":["カメ"], + "🐍":["ヘビ","運搬人","へびつかい座","蛇","星座"], + "🦎":["トカゲ","爬虫類"], + "🐙":["タコ","蛸"], + "🦑":["イカ","軟体動物","烏賊"], + "🪼":["クラゲ","焼く","無脊椎動物","ゼリー","海","痛い","刺毛"], + "🦞":["ロブスター","ビスク","爪","シーフード"], + "🦀":["カニ","かに座","蟹","星座"], + "🦐":["エビ","貝","小さい"], + "🦪":["カキ","真珠","ダイビング"], + "🐠":["熱帯魚","魚","熱帯"], + "🐟":["魚","うお座","星座"], + "🐡":["フグ","魚"], + "🐬":["イルカ","ひれ"], + "🦈":["サメ","魚"], + "🦭":["アザラシ","アシカ"], + "🐳":["潮吹きクジラ","顔","潮吹き","クジラ"], + "🐋":["クジラ"], + "🐊":["ワニ"], + "🐆":["ヒョウ"], + "🐅":["トラ","虎"], + "🐃":["スイギュウ","水牛","水"], + "🐂":["雄牛","牡牛","おうし座","星座"], + "🐄":["ウシ","牛"], + "🦬":["バイソン","バッファロー","群れ","ヴィセント"], + "🐪":["ヒトコブラクダ","ラクダ","こぶ"], + "🐫":["フタコブラクダ","フタコブ","ラクダ","こぶ"], + "🦙":["ラマ","アルパカ","グアナコ","ビクーニャ","ウール"], + "🐘":["ゾウ","象"], + "🦏":["サイ"], + "🦛":["カバ"], + "🦣":["マンモス","絶滅","大型","牙","毛に覆われた"], + "🐐":["ヤギ","やぎ座","星座"], + "🐏":["仔羊","おひつじ座","ヒツジ","星座"], + "🐑":["ヒツジ","雌羊"], + "🐎":["馬","競馬","レース"], + "🫏":["ロバ","動物","ブーロ","哺乳類","ラバ"], + "🐖":["ブタ","雌豚"], + "🦇":["コウモリ","吸血鬼"], + "🐓":["おんどり"], + "🦃":["七面鳥(鳥)","七面鳥","鳥"], + "🕊️":["平和の鳩","鳥","鳩","飛行","平和"], + "🦅":["ワシ","鳥"], + "🦆":["アヒル","鳥"], + "🪿":["ガチョウ","鳥","家禽","警笛の音"], + "🦢":["白鳥","鳥","白鳥の雄","醜いアヒルの子"], + "🦉":["フクロウ","鳥","賢い"], + "🦩":["フラミンゴ","熱帯","鮮やか"], + "🦚":["オスのクジャク","鳥","メスのクジャク"], + "🦜":["オウム","鳥","海賊"], + "🦤":["ドードー","鳥","絶滅"], + "🪽":["羽","天使","航空","鳥","飛行","神話"], + "🪶":["羽毛","鳥","軽い","羽"], + "🐕":["イヌ","犬","ペット"], + "🦮":["盲導犬","アクセシビリティ","目が不自由","犬","ガイド"], + "🐕🦺":["介助犬","アクセシビリティ","支援","犬","サービス"], + "🐩":["プードル","イヌ","犬"], + "🐈":["ネコ","猫","ペット"], + "🐈⬛":["黒猫","黒","猫","ペット","ハロウィーン"], + "🐇":["ウサギ","バニー","ペット"], + "🐀":["ネズミ"], + "🐁":["ネズミ"], + "🐿️":["シマリス"], + "🦨":["スカンク","悪臭","臭う"], + "🦡":["アナグマ","ラーテル","ねだる"], + "🦔":["ハリネズミ","顔"], + "🐾":["動物の足あと","足","跡"], + "🐉":["ドラゴン","おとぎ話"], + "🐲":["ドラゴンの顔","ドラゴン","顔","おとぎ話"], + "🦕":["竜脚類","ブラキオサウルス","ブロントサウルス","ディプロドクス","恐竜"], + "🦖":["ティラノサウルス","Tレックス","恐竜"], + "🌵":["サボテン","植物"], + "🎄":["クリスマスツリー","アクティビティ","お祝い","クリスマス","エンターテイメント","ツリー"], + "🌲":["常緑樹","常緑","植物","木"], + "🌳":["落葉樹","落葉性","植物","落葉","木"], + "🌴":["ヤシの木","ヤシ","植物","木"], + "🪴":["鉢植え","植物","観葉植物"], + "🌱":["苗木","植物","若い"], + "🌿":["ハーブ","葉","植物"], + "☘️":["クローバー","植物"], + "🍀":["四つ葉のクローバー","4","クローバー","四","葉","植物"], + "🎍":["門松","アクティビティ","竹","お祝い","日本","松","植物"], + "🎋":["七夕","アクティビティ","旗","お祝い","エンターテイメント","日本","木"], + "🍃":["風になびく葉","吹く","はためく","葉","植物","風"], + "🍂":["落ち葉","落下","葉","植物"], + "🍁":["カエデの葉","落下","葉","カエデ","植物"], + "🌾":["稲穂","稲束","穂","植物","米"], + "🪺":["卵のある巣","巣作り","鳥の巣","卵"], + "🪹":["空の巣","巣作り","鳥の巣"], + "🌺":["ハイビスカス","花","植物"], + "🌻":["ヒマワリ","花","植物","太陽","ひまわり"], + "🌹":["バラ","花","植物"], + "🥀":["しおれた花","花","しおれた"], + "🌷":["チューリップ","花","植物"], + "🌼":["花","植物"], + "🌸":["桜","花","植物"], + "🪷":["ハス","仏教","花","ヒンドゥー教","インド","清浄","ベトナム"], + "🪻":["ヒアシンス","ブルーボンネット","花","ラベンダー","ルピナス","ノウルーズ","紫","キンギョソウ"], + "💐":["花束","花","植物","ロマンス"], + "🍄":["キノコ","植物"], + "🐚":["巻き貝","貝"], + "🪸":["サンゴ","大洋","礁"], + "🌎":["アメリカ大陸","アメリカ","地球","世界"], + "🌍":["ヨーロッパとアフリカ地域","アフリカ","地球","ヨーロッパ","世界"], + "🌏":["アジアとオーストラリア","アジア","オーストラリア","地球","世界"], + "🌕":["満月","月","宇宙","天気"], + "🌖":["寝待月","十三夜","月","宇宙","欠け","天気"], + "🌗":["下弦の月","月","弦","宇宙","天気"], + "🌘":["欠けていく三日月","三日月","月","宇宙","欠け","天気"], + "🌑":["新月","晦","月","宇宙","天気"], + "🌒":["満ちていく三日月","三日月","月","宇宙","上弦","天気"], + "🌓":["上弦の月","月","弦","宇宙","天気"], + "🌔":["十三夜月","十三夜","月","宇宙","上弦","天気"], + "🌙":["三日月","月","宇宙","天気"], + "🌚":["顔つき新月","顔","月","宇宙","天気"], + "🌝":["顔つき満月","明るい","顔","満ちた","月","宇宙","天気"], + "🌛":["顔つき上弦の月","顔","月","弦","宇宙","天気"], + "🌜":["顔がある下弦の月","顔","月","弦","宇宙","天気"], + "⭐️":["中くらいの星","星"], + "🌟":["光る星","きらめき","赤い光","輝く","輝き","星"], + "💫":["くらくら","漫画","めまい","星"], + "✨":["キラキラ","エンターテイメント","輝き","星"], + "☄️":["彗星","宇宙"], + "🪐":["環のある惑星","宇宙","惑星","土星"], + "🌞":["顔つき太陽","明るい","顔","宇宙","太陽","天気"], + "☀️":["太陽の光","明るい","光線","宇宙","太陽","晴天","天気"], + "🌤️":["太陽と小さな雲","雲","太陽","天気"], + "⛅️":["晴れ時々曇り","雲","太陽","天気"], + "🌥️":["晴れのち曇り","雲","太陽","天気"], + "🌦️":["晴れのち曇り時々雨","雲","雨","太陽","天気"], + "☁️":["雲","天気"], + "🌧️":["雨雲","雲","雨","天気"], + "⛈️":["雷雨","雲","雨","雷","天気"], + "🌩️":["雷雲","雲","雷","天気"], + "⚡️":["高電圧記号","危険","電気","雷","電圧","ビリビリ"], + "🔥":["炎","火","道具"], + "💥":["衝突マーク","どかーん","衝突","漫画"], + "❄️":["雪の結晶","冷たい","雪","天気"], + "🌨️":["雪雲","雲","冷","雪","天気"], + "☃️":["雪だるま","冷","雪","天気"], + "⛄️":["雪だるま","冷","雪","天気"], + "🌬️":["風が吹いている","風が吹く","雲","顔","天気","風"], + "💨":["ダッシュ","漫画","走る"], + "🌪️":["竜巻雲","雲","竜巻","天気","旋風"], + "🌫️":["霧","雲","天気"], + "🌈":["虹","雨","レインボー","天気","プライド","lgbt"], + "☔️":["雨と傘","衣類","しずく","雨","傘","天気"], + "💧":["雫","ぞっとする","漫画","したたり","汗","天気"], + "💦":["汗マーク","漫画","濡れている","汗"], + "🌊":["波","海","水","天気"], + "🍏":["青りんご","リンゴ","フルーツ","果物","緑","植物"], + "🍎":["赤いリンゴ","リンゴ","フルーツ","果物","植物","赤"], + "🍐":["梨","フルーツ","果物","植物"], + "🍊":["みかん","フルーツ","果物","オレンジ","植物","赤橙色"], + "🍋":["レモン","柑橘類","フルーツ","果物","植物"], + "🍌":["バナナ","フルーツ","果物","植物"], + "🍉":["スイカ","フルーツ","果物","植物"], + "🍇":["ブドウ","フルーツ","果物","植物"], + "🍓":["イチゴ","ベリー","フルーツ","果物","植物"], + "🍈":["メロン","フルーツ","果物","植物"], + "🍒":["さくらんぼ","フルーツ","果物","植物"], + "🫐":["ブルーベリー","ベリー","ビルベリー","青","フルーツ"], + "🍑":["桃","フルーツ","果物","植物"], + "🥭":["マンゴー","熱帯","フルーツ"], + "🍍":["パイナップル","フルーツ","果物","植物"], + "🥥":["ココナッツ","フルーツ"], + "🥝":["キウイフルーツ","フルーツ","果物","キウイ"], + "🍅":["トマト","植物","野菜"], + "🥑":["アボカド","フルーツ","果物"], + "🫒":["オリーブ","フルーツ"], + "🍆":["ナス","茄子","植物","野菜"], + "🌶️":["トウガラシ","辛い","コショウ","植物"], + "🫑":["ピーマン","唐辛子","コショウ","植物","野菜"], + "🥒":["キュウリ","ピクルス","野菜"], + "🥬":["葉っぱの緑","チンゲン菜","キャベツ","ケール","レタス"], + "🥦":["ブロッコリー","野菜"], + "🫛":["エンドウ豆のさや","豆","枝豆","マメ科","エンドウ豆","さや","野菜"], + "🧄":["にんにく","野菜","植物","香味料"], + "🧅":["玉ねぎ","野菜","植物","香味料"], + "🌽":["トウモロコシ","コーン","植物"], + "🥕":["ニンジン","野菜"], + "🥗":["グリーンサラダ","緑","サラダ"], + "🥔":["ジャガイモ","野菜"], + "🍠":["焼き芋","ジャガイモ","焼き","スイーツ"], + "🌰":["栗","植物"], + "🥜":["ピーナッツ","ナッツ","野菜"], + "🫘":["豆","食べ物","腎臓","マメ"], + "🍯":["ハニーポット","はちみつ","ポット","スイーツ"], + "🍞":["パン","ローフ"], + "🥐":["クロワッサン","パン","三日月","ロール","フレンチ"], + "🥖":["フランスパン","パン","フレンチ"], + "🫓":["フラットブレッド","アレパ","ラヴァシュ","ナン","ピタ"], + "🥨":["プレッツェル","ソフトプレッツェル","プレッツェルツイスト","パン"], + "🥯":["ベーグル","パン","クリームチーズ","ひと塗り"], + "🥞":["パンケーキ","クレープ","ホットケーキ"], + "🧇":["ワッフル","ホットケーキ"], + "🧀":["チーズ"], + "🍗":["ターキー","骨","ニワトリ","脚","家禽"], + "🍖":["骨付き肉","骨","肉"], + "🥩":["一切れの肉","肉","切り身","ラムチョップ","豚","ステーキ"], + "🍤":["エビフライ","フライ","エビ","小エビ","てんぷら"], + "🥚":["卵"], + "🍳":["料理","卵","フライパン","鍋"], + "🥓":["ベーコン","肉"], + "🍔":["ハンバーガー","バーガー"], + "🍟":["フライドポテト","フライド","ポテト"], + "🌭":["ホットドッグ","フランクフルトソーセージ","ホットドッグソーセージ","ソーセージ","ウィンナー","レッドホット"], + "🍕":["ピザ","チーズ","1枚"], + "🍝":["スパゲッティ","パスタ"], + "🥪":["サンドウィッチ","パン","野菜","チーズ","肉","デリ"], + "🌮":["タコス","メキシコ"], + "🌯":["ブリトー","メキシコ"], + "🫔":["タマーレ","タマーリ","メキシカン","包まれた"], + "🥙":["フラットブレッドサンド","ファラフェル","フラットブレッド","ジャイロ","ケバブ","詰め物"], + "🧆":["ファラフェル","ひよこ豆"], + "🍜":["どんぶり","麺","ラーメン","蒸し加熱","スープ"], + "🥘":["パエリア","キャセロール","鍋","浅い"], + "🍲":["なべ","鍋","シチュー"], + "🫕":["フォンデュ","チーズ","チョコレート","フォデュ","溶けた","ポット","スイス"], + "🥫":["缶詰","かんづめ","保存用食品"], + "🫙":["瓶","香辛料","容器","空","ソース","貯蔵"], + "🧂":["塩","香辛料","シェーカー"], + "🧈":["バター","乳製品"], + "🫚":["ショウガ","ビール","根","スパイス"], + "🍥":["なると","固形の食べ物","魚","練り物"], + "🍣":["寿司"], + "🍱":["弁当箱","弁当","箱"], + "🍛":["カレーライス","カレー","ご飯"], + "🍙":["おにぎり","日本","米"], + "🍚":["ごはん","料理","米"], + "🍘":["せんべい","米"], + "🥟":["餃子","ギョウザ"], + "🍢":["おでん","シーフード","串","スティック"], + "🍡":["団子","デザート","日本","串","スティック","スイーツ"], + "🍧":["かき氷","デザート","氷","スイーツ"], + "🍨":["アイスクリーム","クリーム","デザート","氷","スイーツ"], + "🍦":["ソフトクリーム","クリーム","デザート","氷","アイスクリーム","ソフト","スイーツ"], + "🍰":["ショートケーキ","ケーキ","デザート","ペイストリー","スライス","スイーツ"], + "🎂":["バースデーケーキ","誕生日","ケーキ","お祝い","デザート","ペイストリー","スイーツ"], + "🧁":["カップケーキ","ベーカリー","スイーツ","デザート","ペイストリー"], + "🥧":["パイ","デザート","スイーツ"], + "🍮":["カスタード","デザート","プリン","スイーツ"], + "🍭":["ペロペロキャンディー","キャンディ","デザート","ロリポップキャンディ","スイーツ"], + "🍬":["アメ","デザート","スイーツ"], + "🍫":["チョコレート","バー","デザート","スイーツ"], + "🍿":["ポップコーン"], + "🍩":["ドーナツ","デザート","スイーツ"], + "🍪":["クッキー","デザート","甘い"], + "🥠":["おみくじ入りクッキー","フォーチュンクッキー"], + "🥮":["月餅","秋","祭"], + "☕️":["ホットドリンク","飲料","コーヒー","飲み物","温かい","蒸気","お茶"], + "🍵":["湯のみ","飲料","カップ","飲み物","お茶","湯飲み"], + "🫖":["ティーポット","ドリンク","ポット","ティー","ケトル"], + "🥣":["ボウルとスプーン","朝食","シリアル","お粥","オートミール","ポリッジ","食器"], + "🍼":["哺乳瓶","赤ちゃん","ボトル","ドリンク","ミルク"], + "🥤":["カップとストロー","ジュース","ソーダ","モルト","ソフトドリンク","水","食器"], + "🧋":["タピオカティー","バブル","ミルク","パール","ティー","ボバ","タピオカ","モミ"], + "🧃":["飲料ボックス","ジュース","飲料","ボックス","ドリンク","ストロー"], + "🧉":["マテ","ドリンク","ボンビリヤ","イエルバ"], + "🥛":["コップに入った牛乳","ドリンク","グラス","ミルク"], + "🫗":["流れ込む液体","飲み物","空","グラス","こぼれる"], + "🍺":["ビール","バー","飲む","マグカップ"], + "🍻":["乾杯","バー","ビール","カチン","飲み物","マグカップ"], + "🍷":["ワイングラス","バー","飲料","飲み物","グラス","ワイン"], + "🥂":["グラスで乾杯","祝う","カチン","飲み物","グラス"], + "🥃":["タンブラー","グラス","酒","ショット","ウイスキー","ウィスキー","バーボン"], + "🍸":["カクテルグラス","バー","カクテル","飲み物","グラス"], + "🍹":["トロピカルドリンク","バー","飲み物","トロピカル"], + "🍾":["瓶と飛び出す栓","バー","ボトル","シャンパン","シャンペン","シャンパーニュ","コルク","飲み物","飛び出す","パーティー"], + "🍶":["とっくりとおちょこ","バー","飲料","ボトル","カップ","飲み物","酒"], + "🧊":["角氷","氷","立方体","冷たい","氷山"], + "🥄":["スプーン","食器"], + "🍴":["フォークとナイフ","調理","フォーク","ナイフ","食器"], + "🍽️":["フォークとナイフとプレート","調理","フォーク","ナイフ","プレート","食器"], + "🥢":["箸","はし"], + "🥡":["テイクアウトボックス","テイクアウト","容器","お持ち帰り"], + "⚽️":["サッカーボール","ボール","サッカー"], + "🏀":["バスケットボール","ボール","バスケットリング"], + "🏈":["アメリカンフットボール","アメリカン","ボール","フットボール"], + "⚾️":["野球","ボール"], + "🥎":["ソフトボール","ボール","試合","スポーツ"], + "🎾":["テニスボール","ボール","ラケット","テニス"], + "🏐":["バレーボール","ボール","試合"], + "🏉":["ラグビー","ボール","フットボール"], + "🎱":["ビリヤード","8","エイトボール","ボール","エイト","ゲーム"], + "🥏":["空飛ぶ円盤","ディスク","アルティメット","ゴルフ","試合","スポーツ","フリスビー"], + "🪃":["ブーメラン","オーストラリア","逆戻り","跳ね返り"], + "🏓":["卓球のラケットとボール","ボール","バット","試合","パドル","卓球"], + "🏸":["バドミントンのラケットとシャトル","バドミントン","バーディー","試合","ラケット","シャトル"], + "🥅":["ゴールネット","ゴール","ネット"], + "🏒":["アイスホッケーのスティックとパック","試合","ホッケー","氷","パック","スティック"], + "🏑":["フィールドホッケーのスティックとボール","ボール","フィールド","試合","ホッケー","スティック"], + "🏏":["クリケットのバットとボール","ボール","フィールド","クリケット","試合"], + "🥍":["ラクロス","ボール","スティック","試合","スポーツ"], + "🥌":["カーリングストーン","カーリング","ストーン"], + "⛳️":["ゴルフのカップ","ピンフラッグ","ゴルフ","ホール"], + "🏹":["弓矢","射手","矢","弓","射手座","道具","星座"], + "🎣":["釣竿と魚","エンターテイメント","魚","棒"], + "🤿":["ダイビングマスク","ダイビング","スキューバ","シュノーケル"], + "🥊":["ボクシンググローブ","ボクシング","グローブ"], + "🥋":["道着","柔道","空手","武道","テコンドー","ユニフォーム"], + "⛸️":["アイススケート","氷"], + "🎿":["スキーとスキーブーツ","スキー","雪"], + "🛷":["そり","ソリ","ルージュ","トボガン"], + "⛷️":["スキー","雪"], + "🏂":["スノーボーダー","スキー","雪","スノーボード"], + "🏋️♀️":["ウエイトを持ち上げる女性","挙げ","重量","女性","女","おんな"], + "🏋️":["ウエイトを持ち上げる人","挙げ","重量"], + "🏋️♂️":["ウエイトを持ち上げる男性","挙げ","重量","男","おとこ","男性"], + "🤺":["フェンシングをする人","剣士","剣術","剣"], + "🤼♀️":["レスリングをする女性","レスリング","レスリング選手","女性","女","おんな"], + "🤼":["レスリングをする人たち","レスリング","レスリング選手"], + "🤼♂️":["レスリングをする男性","レスリング","レスリング選手","男","おとこ","男性"], + "🤸♀️":["側転をする女性","側方転回","体操","女性","女","おんな"], + "🤸":["側転をする人","側方転回","体操"], + "🤸♂️":["側転をする男性","側方転回","体操","男","おとこ","男性"], + "⛹️♀️":["ボールをバウンドさせる女性","ボール","女性","女","おんな"], + "⛹️":["ボールをバウンドさせる人","ボール"], + "⛹️♂️":["ボールをバウンドさせる男性","ボール","男","おとこ","男性"], + "🤾♀️":["ハンドボールをする女性","ボール","ハンドボール","女性","女","おんな"], + "🤾":["ハンドボールをする人","ボール","ハンドボール"], + "🤾♂️":["ハンドボールをする男性","ボール","ハンドボール","男","おとこ","男性"], + "🧗♀️":["クライミングしている女性","クライミング","ロック","女性","女","おんな"], + "🧗":["クライミングしている人","クライミング","ロック"], + "🧗♂️":["クライミングしている男性","クライミング","ロック","男性","男","おとこ"], + "🏌️♀️":["ゴルフをする女性","ボール","ゴルフ","ゴルファー","ゴルフする","女性","女","おんな"], + "🏌️":["ゴルフをする人","ボール","ゴルフ","ゴルファー","ゴルフする"], + "🏌️♂️":["ゴルフをする男性","ボール","ゴルフ","ゴルファー","ゴルフする","男","おとこ","男性"], + "🧘♀️":["蓮華座の女性","瞑想","ヨガ","静穏","女性","女","おんな"], + "🧘":["蓮華座の人","瞑想","ヨガ","静穏"], + "🧘♂️":["蓮華座の男性","瞑想","ヨガ","静穏","男性","男","おとこ"], + "🧖♀️":["スチームルームにいる女性","サウナ","スチームルーム","ハマム","スチームバス","女性","女","おんな"], + "🧖":["スチームルームにいる人","サウナ","スチームルーム","ハマム","スチームバス"], + "🧖♂️":["スチームルームにいる男性","サウナ","スチームルーム","ハマム","スチームバス","男性","男","おとこ"], + "🏄♀️":["サーフィンをする女性","サーファー","サーフィン","波乗り","女性","女","おんな"], + "🏄":["サーフィンをする人","サーファー","サーフィン","波乗り"], + "🏄♂️":["サーフィンをする男性","サーファー","サーフィン","波乗り","男","おとこ","男性"], + "🏊♀️":["泳ぐ女性","泳ぐ","水泳","女性","女","おんな"], + "🏊":["水泳をする人","泳ぐ","水泳"], + "🏊♂️":["泳ぐ男性","泳ぐ","水泳","男","おとこ","男性"], + "🤽♀️":["水球をする女性","ポロ","水","水球","女性","女","おんな"], + "🤽":["水球をする人","ポロ","水","水球"], + "🤽♂️":["水球をする男性","ポロ","水","水球","男","おとこ","男性"], + "🚣♀️":["ボートを漕ぐ女性","ボート","漕ぎ船","乗り物","漕艇","女性","女","おんな"], + "🚣":["ボートをこぐ人","ボート","漕ぎ船","乗り物","漕艇"], + "🚣♂️":["ボートを漕ぐ男性","ボート","漕ぎ船","乗り物","漕艇","男","おとこ","男性"], + "🏇":["競馬","馬","騎手","競走馬"], + "🚴♀️":["自転車に乗る女性","自転車","自転車乗り","自転車に乗る人","サイクリスト","女性","女","おんな"], + "🚴":["自転車に乗る人","自転車","自転車乗り","サイクリスト"], + "🚴♂️":["自転車に乗る男性","自転車","自転車乗り","自転車に乗る人","サイクリスト","男","おとこ","男性"], + "🚵♀️":["マウンテンバイクに乗る女性","マウンテンバイクライダー","クロスバイク","自転車","自転車乗り","自転車に乗る人","サイクリスト","山","女性","女","おんな"], + "🚵":["マウンテンバイクに乗る人","マウンテンバイクライダー","クロスバイク","自転車","自転車乗り","自転車に乗る人","山"], + "🚵♂️":["マウンテンバイクに乗る男性","マウンテンバイクライダー","クロスバイク","自転車","自転車乗り","自転車に乗る人","サイクリスト","山","男","おとこ","男性"], + "🎽":["ランニングシャツと襷","ランニング","襷","シャツ"], + "🎖️":["勲章","お祝い","メダル","軍事"], + "🏅":["スポーツのメダル","メダル"], + "🥇":["金メダル","1位","金","メダル","1","第1位"], + "🥈":["銀メダル","メダル","2位","銀","2","第2位"], + "🥉":["銅メダル","銅","メダル","3位","3","第3位"], + "🏆":["トロフィー","賞"], + "🏵️":["バラ飾り","植物"], + "🎗️":["リマインダーリボン","お祝い","リマインダー","リボン"], + "🎫":["きっぷ","アクティビティ","入場料","エンターテイメント","チケット"], + "🎟️":["入場券","入場料","エンターテイメント","チケット"], + "🎪":["サーカス小屋","アクティビティ","サーカス","エンターテイメント","テント"], + "🤹♀️":["ジャグリングをする女性","天秤","ジャグリング","女性","女","おんな"], + "🤹":["ジャグリングをする人","バランス","ジャグリング"], + "🤹♂️":["ジャグリングをする男性","天秤","ジャグリング","男性","男","おとこ"], + "🎭":["舞台芸術","アクティビティ","芸術","エンターテイメント","仮面","舞台","シアター"], + "🎨":["絵の具パレット","アクティビティ","アート","エンターテイメント","美術館","絵画","パレット"], + "🎬":["カチンコ","アクティビティ","エンターテイメント","映画"], + "🎤":["マイク","アクティビティ","エンターテイメント","カラオケ","マイクロフォン"], + "🎧":["ヘッドホン","アクティビティ","イヤホン","エンターテイメント","ヘッドフォン"], + "🎼":["楽譜","アクティビティ","エンターテイメント","音楽"], + "🎹":["鍵盤","アクティビティ","エンターテイメント","楽器","キーボード","音楽","ピアノ"], + "🪗":["アコーディオン","コンサーティーナ","スクイーズボックス"], + "🥁":["ドラム","ドラムスティック","音楽"], + "🪘":["長いドラム","ビート","コンガ","ドラム","リズム","ジャンベ"], + "🪇":["マラカス","祝う","楽器","音楽","騒音","打楽器","ガタガタ","リズム","シェイク"], + "🎷":["サックス","アクティビティ","エンターテイメント","楽器","音楽","サクソフォーン"], + "🎺":["トランペット","アクティビティ","エンターテイメント","楽器","音楽"], + "🪈":["フルート","竹","横笛奏者","フルート奏者","音楽","パイプ","リコーダー","吹く","木管楽器"], + "🎸":["ギター","アクティビティ","エンターテイメント","楽器","音楽"], + "🪕":["バンジョー","アクティビティ","エンターテイメント","楽器","音楽"], + "🎻":["バイオリン","アクティビティ","エンターテイメント","楽器","音楽"], + "🎲":["サイコロ","さい","エンターテイメント","ゲーム"], + "🧩":["パズルのピース","手がかり","噛み合う","ピース","パズル","ジグソー"], + "♟️":["チェスのポーン","チェス","駒","ゲーム","捨て駒"], + "🎯":["的中","アクティビティ","ブル","ブルズアイ","ダーツ","エンターテイメント","目","試合","ヒット","標的"], + "🎳":["ボウリング","ボール","試合"], + "🪀":["ヨーヨー","おもちゃ","上下"], + "🪁":["凧","おもちゃ","飛ぶ","舞う"], + "🛝":["滑り台","遊園地","遊び"], + "🎮":["テレビゲーム","コントローラー","エンターテイメント","ゲーム","ビデオゲーム"], + "👾":["エイリアン","宇宙人","怪獣","異星人","顔","おとぎ話","ファンタジー","モンスター","宇宙","UFO"], + "🎰":["スロットマシン","アクティビティ","ゲーム","スロット"], + "🚗":["自動車","車","乗り物"], + "🚙":["キャンピングカー","レクリエーション","RV","乗り物"], + "🚕":["タクシー","乗り物"], + "🛺":["オートリキシャ","人力車","トゥクトゥク"], + "🚌":["バス","乗り物"], + "🚎":["トロリーバス","バス","路面電車","市街電車","乗り物"], + "🏎️":["レーシングカー","車","競争"], + "🚓":["パトカー","車","パトロール","警察","乗り物"], + "🚑":["救急車","乗り物"], + "🚒":["消防車","エンジン","炎","トラック","乗り物"], + "🚐":["マイクロバス","バス","乗り物"], + "🛻":["ピックアップトラック","ピックアップ","トラック","乗り物"], + "🚚":["配達用トラック","配達","トラック","乗り物"], + "🚛":["トレーラー","大型トラック","セミ","トラック","乗り物"], + "🚜":["トラクター","乗り物"], + "🏍️":["レースバイク","オートバイ","レース"], + "🛵":["スクーター","モーター"], + "🚲":["自転車","バイク","乗り物"], + "🦼":["電動車いす","アクセシビリティ","車いす"], + "🦽":["手動車いす","アクセシビリティ","車いす"], + "🛴":["キックボード","キック","スクーター"], + "🛹":["スケボー","スケート","ボード"], + "🛼":["ローラースケート","ローラー","スケート"], + "🛞":["車輪","円","タイヤ","回転"], + "🚨":["パトライト","車","光","警察","回転","乗り物","サイレン","警告"], + "🚔":["パトカー","車","対向車","警察","乗り物"], + "🚍":["バス","対向車","乗り物"], + "🚘":["対向車","自動車","車","乗り物"], + "🚖":["タクシー","対向車","乗り物"], + "🚡":["ロープウェイ","空中","ケーブル","車","ゴンドラ","トラムウェイ","乗り物"], + "🚠":["ロープウェイ","ケーブル","ゴンドラ","山","乗り物"], + "🚟":["高架鉄道","鉄道","乗り物"], + "🚃":["鉄道車両","車","電気","鉄道","列車","路面","トロリーバス","乗り物"], + "🚋":["路面電車","車","路面","トロリーバス","乗り物"], + "🚝":["モノレール","乗り物"], + "🚄":["新幹線","鉄道","高速","列車","乗り物"], + "🚅":["新幹線","弾丸","鉄道","高速","列車","乗り物"], + "🚈":["ライトレール","鉄道","乗り物"], + "🚞":["山岳鉄道","車","山","鉄道","乗り物"], + "🚂":["蒸気機関車","エンジン","機関車","鉄道","蒸気","列車","乗り物"], + "🚆":["電車","線路","乗り物"], + "🚇":["地下鉄","メトロ","乗り物"], + "🚊":["路面電車","トロリーバス","乗り物"], + "🚉":["駅","線路","電車","乗り物"], + "🚁":["ヘリコプター","乗り物"], + "🛩️":["小型航空機","飛行機","乗り物"], + "✈️":["飛行機","乗り物"], + "🛫":["飛行機の離陸","飛行機","チェックイン","出発","乗り物"], + "🛬":["飛行機の着陸","飛行機","到着","着陸","乗り物"], + "🪂":["パラシュート","パラセール","スカイダイブ","ハンググライダー"], + "💺":["座席","椅子"], + "🛰️":["サテライト","衛星","宇宙","乗り物"], + "🚀":["ロケット","宇宙","乗り物"], + "🛸":["空飛ぶ円盤","UFO","宇宙人","異星人","宇宙","空想"], + "🛶":["カヌー","ボート"], + "⛵️":["ヨット","ボート","リゾート","海","乗り物"], + "🛥️":["モーターボート","ボート","乗り物"], + "🚤":["スピードボート","ボート","乗り物"], + "⛴️":["フェリー","ボート"], + "🛳️":["旅客船","旅客","船","乗り物"], + "🚢":["船","乗り物"], + "🛟":["救命浮き輪","浮き輪","ライフジャケット","ライフセーバー","救助","安全"], + "⚓️":["いかり","船","ツール"], + "⛽️":["ガソリンスタンド","燃料","ガソリン","給油機","サービスステーション"], + "🚧":["工事中","工事用フェンス","建設工事"], + "🚏":["バス停","バス","停止"], + "🚦":["縦向きの信号機","信号機","信号","交通"], + "🚥":["横向きの信号機","信号機","信号","交通"], + "🛑":["一時停止標識","八角形","標識","停止"], + "🎡":["観覧車","アクティビティ","遊園地","エンターテイメント","フェリス"], + "🎢":["ジェットコースター","アクティビティ","遊園地","コースター","エンターテイメント","ローラー"], + "🎠":["メリーゴーランド","アクティビティ","メリーゴーラウンド","エンターテイメント","馬"], + "🏗️":["建設中","建物","建設"], + "🌁":["霧","天気"], + "🗼":["東京タワー","東京","タワー"], + "🏭":["工場","建物"], + "⛲️":["噴水"], + "🎑":["お月見","アクティビティ","お祝い","授賞式","エンターテイメント","月"], + "⛰️":["山"], + "🏔️":["雪山","寒い","山","雪"], + "🗻":["富士山","山"], + "🌋":["火山","噴火","山","気象"], + "🗾":["日本列島","日本","地図"], + "🏕️":["キャンプ"], + "⛺️":["テント","キャンプ"], + "🏞️":["国立公園","公園"], + "🛣️":["高速道路","ハイウェイ","道路"], + "🛤️":["線路","鉄道","電車"], + "🌅":["日の出","朝","太陽","天候"], + "🌄":["山からの日の出","朝","山","太陽","日の出","天候"], + "🏜️":["砂漠"], + "🏖️":["ビーチと傘","ビーチ","傘","パラソル"], + "🏝️":["無人島","砂漠","島"], + "🌇":["ビルに沈む夕陽","建物","夕暮れ","太陽","夕日","天気"], + "🌆":["夕暮れの街並み","建物","街","夕暮れ","日暮れ","風景","太陽","夕日","天気"], + "🏙️":["街並み","建物","街"], + "🌃":["星空","夜","星","天気"], + "🌉":["夜の橋","橋","夜","天気"], + "🌌":["天の川","宇宙","天気"], + "🌠":["流れ星","アクティビティ","落下","流れる","宇宙","星"], + "🎇":["線香花火","アクティビティ","お祝い","エンターテイメント","花火","キラキラ"], + "🎆":["花火","アクティビティ","お祝い","エンターテイメント"], + "🛖":["小屋","家","扇形庫","パオ"], + "🏘️":["家","建物"], + "🏰":["西洋の城","建物","城","ヨーロッパ"], + "🏯":["日本の城","建物","城","日本"], + "🏟️":["スタジアム"], + "🗽":["自由の女神","自由","像"], + "🏠":["家","建物","自宅"], + "🏡":["庭付きの家","建物","庭","自宅","家"], + "🏚️":["廃墟","建物","廃屋","家"], + "🏢":["オフィスビル","建物"], + "🏬":["デパート","建物","店"], + "🏣":["日本の郵便局","建物","日本","ポスト"], + "🏤":["ヨーロッパの郵便局","建物","ヨーロッパ","ポスト"], + "🏥":["病院","建物","医師","薬"], + "🏦":["銀行","建物"], + "🏨":["ホテル","建物"], + "🏪":["コンビニエンスストア","建物","コンビニエンス","ストア"], + "🏫":["学校","建物"], + "🏩":["ラブホテル","建物","ホテル","ラブ"], + "💒":["結婚式","アクティビティ","チャペル","ロマンス"], + "🏛️":["歴史的な建物","建物","歴史的な"], + "⛪️":["教会","建物","クリスチャン","十字架","宗教"], + "🕌":["モスク","イスラム","ムスリム","宗教"], + "🛕":["ヒンドゥー教寺院","ヒンドゥー教","寺院","宗教"], + "🕍":["シナゴーグ","ユダヤ人","ユダヤ教","宗教","会堂"], + "🕋":["カアバ","イスラム","ムスリム","宗教"], + "⛩️":["神社","宗教","神道"], + "⌚️":["腕時計","時計"], + "📱":["携帯電話","携帯","コミュニケーション","モバイル","電話"], + "📲":["着信中","矢印","通話","携帯","コミュニケーション","モバイル","携帯電話","受信","電話"], + "💻":["パソコン","ノートパソコン","コンピューター","パーソナル"], + "⌨️":["キーボード","コンピューター"], + "🖥️":["デスクトップパソコン","コンピューター","デスクトップ"], + "🖨️":["プリンター","コンピューター"], + "🖱️":["3ボタンマウス","3","ボタン","コンピューター","マウス","三"], + "🖲️":["トラックボール","コンピューター"], + "🕹️":["ジョイスティック","エンターテイメント","ゲーム","ビデオゲーム"], + "🗜️":["圧縮","ツール","欠陥"], + "💽":["MD","パソコン","光ディスク","エンターテイメント","ミニディスク","光学"], + "💾":["フロッピーディスク","コンピューター","ディスク","フロッピー"], + "💿":["CDディスク","ブルーレイ","CD","コンピューター","ディスク","DVD","光学"], + "📀":["DVD","ブルーレイ","CD","コンピューター","ディスク","エンターテイメント","光学"], + "📼":["ビデオテープ","エンターテイメント","テープ","VHS","ビデオ","ビデオカセット"], + "📷":["カメラ","エンターテイメント","ビデオ"], + "📸":["フラッシュを焚いたカメラ","カメラ","フラッシュ","ビデオ"], + "📹":["ビデオカメラ","カメラ","エンターテイメント","ビデオ"], + "🎥":["ビデオカメラ","アクティビティ","カメラ","シネマ","エンターテイメント","映画"], + "📽️":["映写機","シネマ","娯楽","フィルム","映画","プロジェクター","ビデオ"], + "🎞️":["フィルムのフレーム","シネマ","エンターテイメント","フィルム","フレーム","映画"], + "📞":["受話器","コミュニケーション","電話","受信機"], + "☎️":["電話","携帯電話"], + "📟":["ポケットベル","コミュニケーション","ポケベル"], + "📠":["FAX","コミュニケーション; fAX"], + "📺":["テレビ","エンターテイメント","TV","ビデオ"], + "📻":["ラジオ","エンターテイメント","ビデオ"], + "🎙️":["スタジオマイク","マイク","音楽","スタジオ"], + "🎚️":["調節バー","調節","音楽","バー"], + "🎛️":["コントロールノブ","コントロール","つまみ","音楽"], + "⏱️":["ストップウォッチ","時計"], + "⏲️":["タイマー時計","時計","タイマー"], + "⏰":["目覚まし時計","アラーム","時計"], + "🕰️":["置き時計","時計"], + "⏳":["砂時計","砂","タイマー"], + "⌛️":["砂時計","砂","タイマー"], + "🧮":["そろばん","計算","カウント","集計表","数学"], + "📡":["衛星アンテナ","アンテナ","コミュニケーション","パラボラアンテナ","衛星"], + "🔋":["電池","バッテリー","電子","高エネルギー"], + "🪫":["バッテリー残量少","バッテリー","電子","低エネルギー"], + "🔌":["コンセント","電気","プラグ"], + "💡":["電球","漫画","電気","ひらめき","光"], + "🔦":["懐中電灯","電気","光","道具","たいまつ"], + "🕯️":["ろうそく","光"], + "🧯":["消火器","消火","火","消す"], + "🗑️":["ごみ箱","ゴミ箱","ごみ","ゴミ","缶","ビン"], + "🛢️":["ドラム缶","ドラム","オイル"], + "🛒":["ショッピングカート","カート","ショッピング","トロリー"], + "💸":["羽の生えたお札","銀行","紙幣","請求書","ドル","飛ぶ","お金","羽"], + "💵":["ドル札","銀行","紙幣","お札","通貨","ドル","お金"], + "💴":["円記号の入った小切手","銀行","紙幣","お札","通貨","お金","円"], + "💶":["ユーロ札","銀行","紙幣","お札","通貨","ユーロ","お金"], + "💷":["ポンド札","銀行","紙幣","お札","通貨","お金","ポンド"], + "💰":["ドル袋","バッグ","ドル","お金"], + "🪙":["コイン","金","金属","お金","銀","宝"], + "💳":["クレジットカード","銀行","カード","クレジット","お金"], + "🪪":["身分証明書","資格情報","ID","ライセンス","セキュリティ"], + "🧾":["領収書","会計","簿記","証拠","証明"], + "💎":["宝石","ダイアモンド","ジュエル","ロマンス"], + "⚖️":["はかり","天秤","公正","てんびん座","物差し","道具","重量","星座"], + "🦯":["白杖","アクセシビリティ","目が不自由"], + "🧰":["道具箱","胸","整備士","工具"], + "🔧":["レンチ","道具"], + "🪛":["ドライバー","ねじ","工具"], + "🔨":["ハンマー","道具"], + "⚒️":["ハンマーとつるはし","ハンマー","つるはし","道具"], + "🛠️":["ハンマーとレンチ","ハンマー","道具","レンチ"], + "⛏️":["つるはし","採掘","道具"], + "🪓":["斧","たたき切り","手斧","割る","木材","工具"], + "🪚":["木工用のこぎり","大工","材木","のこぎり","工具"], + "🔩":["ナットとボルト","ボルト","ナット","道具"], + "⚙️":["歯車","ギア","道具"], + "⛓️":["鎖"], + "🪝":["フック","わな","いかさま","ペテン","誘惑","フィッシング","ツール"], + "🪜":["はしご","登る","横木","段","工具"], + "🧱":["れんが","粘土","建設","モルタル","壁"], + "🪨":["ロック","岩","建造物","重い","固体","石"], + "🪵":["木材","建造物","丸太","材木","木"], + "🔫":["水鉄砲","水","ピストル","噴射器","銃"], + "🧨":["爆竹","ダイナマイト","火薬","花火"], + "💣":["爆弾"], + "🔪":["包丁","キッチンナイフ","調理","ナイフ"], + "🗡️":["短剣","ナイフ"], + "⚔️":["交差した剣","交差","剣"], + "🛡️":["盾"], + "🚬":["喫煙マーク","アクティビティ","喫煙"], + "⚰️":["棺","死"], + "🪦":["墓石","墓地","死","墓","墓場","ハロウィーン"], + "⚱️":["骨壷","死","葬儀"], + "🏺":["アンフォラ","みずがめ座","料理","飲み物","水差し","道具","星座"], + "🔮":["水晶玉","玉","水晶","おとぎ話","ファンタジー","占い","道具"], + "🪄":["魔法の杖","魔法","棒","魔女","魔法使い"], + "📿":["数珠状の祈りの用具","数珠","衣類","ネックレス","祈り","宗教"], + "🧿":["ナザールのお守り","数珠玉","お守り","邪視","ナザール","護符"], + "🪬":["ハムサ","お守り","ファティマ","手","メアリー","ミリアム","保護"], + "💈":["理髪店の看板柱","理髪店","床屋","散髪","看板柱"], + "🧲":["磁石","アトラクション","馬蹄"], + "⚗️":["蒸留器","化学","実験","道具"], + "🧪":["試験管","化学者","化学","実験","実験室","科学"], + "🧫":["ペトリ皿","バクテリア","生物学者","生物学","文化","実験室"], + "🧬":["DNA","生物学者","進化","遺伝子","遺伝子学","生命"], + "🔭":["望遠鏡","ツール"], + "🔬":["顕微鏡","ツール"], + "🕳️":["穴"], + "🩻":["X線","骨","医師","医療","骨格"], + "💊":["薬","医師","ピル","病気"], + "💉":["注射器","医師","薬","注射針","注射","病気","道具","ワクチン"], + "🩸":["血1滴","医師","薬","血液","生理"], + "🩹":["ガーゼ付きばんそうこう","医師","薬","バンドエイド","包帯","ばんそうこう"], + "🩺":["聴診器","医師","薬","心臓"], + "🌡️":["温度計","天気","温度"], + "🩼":["松葉杖","杖","障碍","怪我","移動補助","棒"], + "🏷️":["ラベル","荷札"], + "🔖":["ブックマーク","しおり","印"], + "🚽":["トイレ"], + "🪠":["プランジャー","フォースカップ","配管工","吸引","トイレ"], + "🚿":["シャワー","水"], + "🛁":["バスタブ","風呂","浴槽"], + "🛀":["風呂","浴槽"], + "🪮":["ヘアピック","アフロ","くし","髪","ピック"], + "🪥":["歯ブラシ","バスルーム","ブラシ","きれい","歯医者","衛生","歯"], + "🪒":["カミソリ","鋭い","髭剃り"], + "🧴":["ローションボトル","ローション","保湿剤","シャンプー","日焼け止め"], + "🧻":["ペーパーロール","ペーパータオル","トイレットペーパー"], + "🧼":["せっけん","棒","水浴び","クリーニング","泡","せっけん入れ"], + "🫧":["バブル","げっぷ","きれい","せっけん","水中"], + "🧽":["スポンジ","吸収","クリーニング","多孔性"], + "🧹":["ほうき","クリーニング","掃除","魔女"], + "🧺":["バスケット","農業","ランドリー","ピクニック"], + "🪣":["バケツ","たる","手桶","大だる"], + "🔑":["鍵","錠","パスワード"], + "🗝️":["古い鍵","かぎ","鍵","錠","古い"], + "🪤":["ネズミ捕り器","餌","ネズミ","齧歯動物","輪なわ","わな"], + "🛋️":["ソファーとランプ","ソファー","ホテル","ランプ"], + "🪑":["椅子","座席","座る"], + "🛌":["宿泊施設","寝る","ホテル","睡眠","ベッド"], + "🛏️":["ベッド","ホテル","睡眠"], + "🚪":["ドア","扉"], + "🪞":["鏡","反射","反射体","反射鏡"], + "🪟":["窓","枠","新鮮な空気","ガラス","開口部","透明","視界"], + "🧳":["手荷物","パッキング","旅行","スーツケース"], + "🛎️":["卓上ベル","ベル","ホテル"], + "🖼️":["額に入った写真","アート","額縁","美術館","絵画","写真"], + "🧭":["コンパス","磁石","ナビゲーション","オリエンテーリング"], + "🗺️":["世界地図","地図","世界"], + "⛱️":["立てられたパラソル","雨","晴れ","傘","天気"], + "🪭":["折り畳み扇子","冷却","遠慮がち","ダンス","ファン","フラッター","熱","熱い","内気","広がる"], + "🗿":["モヤイ像","モアイ像","顔","像"], + "🛍️":["買い物袋","鞄","ホテル","買い物"], + "🎈":["風船","アクティビティ","お祝い","エンターテイメント"], + "🎏":["こいのぼり","アクティビティ","鯉","お祝い","エンターテイメント","旗","吹流し"], + "🎀":["リボン","お祝い"], + "🧧":["赤い封筒","ギフト","幸運","紅包","利是","お金"], + "🎁":["プレゼント","箱","お祝い","エンターテイメント","贈り物","包装"], + "🎊":["くす玉","アクティビティ","お祝い","紙吹雪","エンターテイメント"], + "🎉":["クラッカー","アクティビティ","お祝い","エンターテイメント","パーティー","ジャーン"], + "🪅":["ピニャータ","お祝い","パーティー","ピナータ"], + "🪩":["ミラーボール","ダンス","ディスコ","輝き","パーティー"], + "🪆":["入れ子人形","人形","入れ子","ロシア"], + "🎎":["ひな祭り","アクティビティ","お祝い","人形","エンターテイメント","祭り","日本"], + "🎐":["風鈴","アクティビティ","鐘","お祝い","エンターテイメント","風"], + "🏮":["居酒屋の提灯","赤ちょうちん","居酒屋","日本","提灯","灯り","赤"], + "🪔":["ディヤランプ","ディヤ","ランプ","オイル"], + "✉️":["封筒","Eメール","電子メール"], + "📩":["メール受信中","矢印","コミュニケーション","下","Eメール","電子メール","封筒","手紙","メール","送る","送信"], + "📨":["メール受信","コミュニケーション","Eメール","電子メール","封筒","受け取る","手紙","メール","受信"], + "📧":["Eメール","コミュニケーション","電子メール","手紙","メール"], + "💌":["ラブレター","ハート","手紙","愛","メール","ロマンス"], + "📮":["ポスト","コミュニケーション","メール","郵便受け"], + "📪":["旗が下がっていて閉じている状態の郵便受け","閉じる","コミュニケーション","旗","下がった","メール","ポスト","郵便受け"], + "📫":["旗が上がっていて閉じている状態の郵便受け","閉じる","コミュニケーション","旗","メール","郵便受け","ポスト"], + "📬":["旗が上がっていて開いている状態の郵便受け","コミュニケーション","旗","メール","ポスト","開ける","郵便受け"], + "📭":["旗が下がっていて開いている郵便受け","コミュニケーション","旗","下げ","メール","メールボックス","開ける","郵便受け"], + "📦":["荷物","箱","コミュニケーション","パッケージ","小包"], + "📯":["郵便ラッパ","コミュニケーション","エンターテイメント","角","ポスト","郵便"], + "📥":["受信トレイ","箱","コミュニケーション","手紙","メール","受信","トレイ"], + "📤":["送信トレイ","箱","コミュニケーション","手紙","メール","送信","トレイ"], + "📜":["巻物","紙"], + "📃":["原稿","カール","ドキュメント","ページ"], + "📑":["ブックマークタブ","ブックマーク","マーク","マーカー","タブ"], + "📊":["棒グラフ","バー","チャート","グラフ"], + "📈":["上昇するグラフ","上昇チャート","チャート","グラフ","成長","トレンド","上向き"], + "📉":["下降するグラフ","下降チャート","チャート","下","グラフ","トレンド"], + "📄":["文書","ページ"], + "📅":["カレンダー","日付"], + "📆":["日めくりカレンダー","カレンダー"], + "🗓️":["リングカレンダー","カレンダー","パッド","らせん状"], + "📇":["名刺フォルダ","カード","索引","ローラデックス"], + "🗃️":["カードファイル","箱","カード","ファイル"], + "🗳️":["投票用紙と投票箱","投票用紙","箱","票","投票"], + "🗄️":["ファイル収納庫","収納","ファイル"], + "📋":["クリップボード"], + "🗒️":["リングノート","ノート","パッド","らせん状"], + "📁":["フォルダ","ファイル"], + "📂":["開いたフォルダ","ファイル","フォルダ","開いた"], + "🗂️":["仕切りカード","カード","仕切り","索引"], + "🗞️":["丸めた新聞","ニュース","新聞","紙","丸めた"], + "📰":["新聞","コミュニケーション","ニュース","紙"], + "🪧":["プラカード","デモ","柵","抗議","看板"], + "📓":["ノート"], + "📕":["閉じた本","本","閉じている"], + "📗":["緑色の本","本","緑"], + "📘":["青い本","青","本"], + "📙":["オレンジ色の本","本","オレンジ"], + "📔":["装飾カバーのノート","本","カバー","装飾","ノート"], + "📒":["帳簿","元帳","ノート"], + "📚":["書籍","本"], + "📖":["開いた本","本","開いた"], + "🔗":["リンク"], + "📎":["クリップ","ペーパークリップ"], + "🖇️":["繋がったペーパークリップ","コミュニケーション","リンク","ペーパークリップ"], + "✂️":["ハサミ","はさみ","道具"], + "📐":["三角定規","定規","配置","三角"], + "📏":["定規","直定規"], + "📌":["画鋲","ピン"], + "📍":["画鋲","ピン"], + "🧷":["安全ピン","おむつ","パンクロック"], + "🪡":["縫い針","刺しゅう","裁縫","縫い目","縫合","仕立て"], + "🧵":["スレッド","縫い編み","裁縫","糸巻","糸","手工芸"], + "🧶":["糸","ボール","かぎ針編み","ニット","手工芸"], + "🪢":["結び目","ロープ","絡んだ","ひも","より糸","ねじれ"], + "🔐":["コインロッカー","閉まっている","鍵","施錠","防犯"], + "🔒":["鍵","閉じられた","施錠"], + "🔓":["解錠","施錠","開ける"], + "🔏":["錠前とペン","インク","錠","ペン先","ペン","プライバシー"], + "🖊️":["左下向きのボールペン","ボールペン","コミュニケーション","ペン"], + "🖋️":["左下向きの万年筆","コミュニケーション","万年筆","ペン"], + "✒️":["ペン先","ペン"], + "📝":["メモ","コミュニケーション","鉛筆"], + "✏️":["鉛筆"], + "🖍️":["左下向きのクレヨン","コミュニケーション","クレヨン"], + "🖌️":["左下向きのブラシ","コミュニケーション","ペイントブラシ","絵"], + "🔍":["左向き虫眼鏡","眼鏡","拡大","検索","ツール"], + "🔎":["右向き虫眼鏡","眼鏡","拡大","検索","ツール"], + "❤️":["赤色のハート","ハート"], + "🧡":["オレンジ色のハート","ハート","オレンジ色"], + "💛":["黄色のハート","ハート","黄色"], + "💚":["緑のハート","ハート","緑"], + "💙":["青のハート","ハート","青"], + "💜":["紫のハート","ハート","紫"], + "🤎":["茶色のハート","ハート","茶色"], + "🖤":["黒いハート","ハート","黒","悪","悪者"], + "🤍":["白のハート","ハート","白"], + "💔":["割れたハート","ハート","壊れる","破局"], + "❣️":["ハートのビックリマーク","ハート","ビックリマーク","記号"], + "💕":["2つのハート","ハート","愛"], + "💞":["回転するハート","ハート","回転"], + "💓":["鼓動するハート","ハート","鼓動","ドキドキ"], + "💗":["光るハート","ハート","ワクワク","光る","鼓動","緊張"], + "💖":["きらめくハート","ハート","ワクワク","キラキラ"], + "💘":["射抜かれたハート","ハート","矢","キューピッド","ロマンス"], + "💝":["リボン付きのハート","ハート","リボン","バレンタイン"], + "❤️🔥":["燃えているハート","ハート","火","燃える","愛","熱情","神聖なハート"], + "❤️🩹":["手当しているハート","ハート","健康になる","改善している","手当している","回復している","病み上がり","元気"], + "💟":["ハートのデコレーション","ハート"], + "☮️":["ピースマーク","平和"], + "✝️":["ラテン十字","クリスチャン","十字架","宗教"], + "☪️":["星と三日月","イスラム","ムスリム","宗教"], + "🕉️":["オームマーク","ヒンドゥー教","オーム","宗教"], + "☸️":["法輪","仏教徒","ダーマ","宗教"], + "✡️":["ダビデの星","ダビデ","ユダヤ人","ユダヤ教","宗教","星"], + "🔯":["六芒星","占い","星"], + "🕎":["ハヌッキーヤー","燭台","メノーラー","宗教"], + "☯️":["陰陽","宗教","道","道家","陽","陰"], + "☦️":["八端十字架","クリスチャン","十字架","宗教"], + "🪯":["カンダ","宗教","シーク教徒"], + "🛐":["礼拝所","宗教","礼拝"], + "⛎":["へびつかい座","運搬人","蛇","ヘビ","星座"], + "♈️":["おひつじ座","仔羊","星座"], + "♉️":["おうし座","牡牛","雄牛","星座"], + "♊️":["ふたご座","ふたご","星座"], + "♋️":["ガン","かに座","カニ","蟹","星座"], + "♌️":["しし座","ライオン","星座"], + "♍️":["おとめ座","乙女","処女","星座"], + "♎️":["てんびん座","天秤","公正","はかり","星座"], + "♏️":["さそり座","さそり","サソリ","星座"], + "♐️":["いて座","射手","射手座","星座"], + "♑️":["やぎ座","ヤギ","星座"], + "♒️":["みずがめ座","運搬人","水","星座"], + "♓️":["うお座","魚","星座"], + "🆔":["四角囲みID","ID","識別"], + "⚛️":["元素記号","無神論者","原子"], + "⚕️":["アスクレピオスの杖","健康","世話","医師","薬","杖","ヘビ"], + "☢️":["放射能標識","放射能"], + "☣️":["バイオハザード標識","生物災害"], + "📴":["携帯電話電源オフ","携帯","コミュニケーション","モバイル","オフ","携帯電話","電話"], + "📳":["マナーモード","携帯","コミュニケーション","モバイル","モード","携帯電話","電話","バイブレーション"], + "🈶":["四角囲み有","日本語","あり"], + "🈚️":["四角囲み無","四角囲み否","日本語","なし"], + "🈸":["四角囲み申","四角囲み適","中国語","申請"], + "🈺":["四角囲み営","中国語","営業"], + "🈷️":["四角囲み月","日本語","月極"], + "✴️":["八稜星","星"], + "🆚":["四角囲みVS","対","VS"], + "🉑":["丸囲み許可","丸囲み可","中国語","可能"], + "💮":["白い花","花","たいへんよくできました"], + "🉐":["丸囲み得","日本語","得"], + "㊙️":["丸囲み秘","中国語","表意文字","秘"], + "㊗️":["丸囲み祝","中国語","おめでとう","しゅく"], + "🈴":["四角囲みの合","四角囲み合","中国語","合格","適合"], + "🈵":["四角囲み満","中国語","満室","満車","満タン"], + "🈹":["四角囲み割","四角囲みの割","日本語","割引"], + "🈲":["四角囲み禁","日本語","禁止"], + "🅰️":["黒四角囲みA","A","血液型"], + "🅱️":["黒四角囲みB","B","血液型"], + "🆎":["黒四角囲みAB","AB","血液型"], + "🆑":["四角囲みCL","CL"], + "🅾️":["黒四角囲みO","血液型","O"], + "🆘":["四角囲みSOS","ヘルプ","SOS"], + "⛔️":["立入禁止","立ち入り","禁止","だめ","できない","禁じる","交通"], + "📛":["名札","バッジ","名前"], + "🚫":["進入禁止","立ち入り","禁止","だめ","できない","禁じる"], + "❌":["バツ印","キャンセル","記号","掛け算","乗算","x"], + "⭕️":["太い大きな丸","丸","O"], + "💢":["怒りマーク","怒り","漫画","激怒"], + "♨️":["温泉","温かい","湧き出る","蒸気"], + "🚷":["歩行者立入禁止","禁止","だめ","ない","歩行者","禁じる"], + "🚯":["ポイ捨て禁止","禁止","ごみ","だめ","ない","禁止されている"], + "🚳":["自転車禁止","自転車","バイク","禁止","だめ","できない","禁じる","乗り物"], + "🚱":["飲用不可","非飲料水","飲料","禁止","だめ","ない","飲用","禁止されている","水"], + "🔞":["18歳未満禁止","18","年齢制限","十八","禁止","だめ","ない","禁止した","未成年者"], + "📵":["携帯電話禁止","携帯","通信","禁止","モバイル","だめ","できない","携帯電話","禁止されている","電話"], + "🚭":["禁煙","禁止","だめ","できない","禁止されている","喫煙"], + "❗️":["赤いビックリマーク","ビックリ","マーク","記号"], + "❕":["白いビックリマーク","ビックリ","マーク","囲み","記号"], + "❓":["赤いはてなマーク","マーク","記号","はてな"], + "❔":["白いはてなマーク","マーク","囲み","記号","はてな"], + "‼️":["!!マーク","バンバン","ビックリ","マーク","記号"], + "⁉️":["!?","ビックリ","インテロバング","マーク","記号","はてな"], + "💯":["100点","100","フル","百","スコア"], + "🔅":["低輝度","明るさ","薄暗い","低"], + "🔆":["高輝度","明るい","明るさ"], + "🔱":["トライデント","いかり","エンブレム","船","工具"], + "⚜️":["ユリの紋章"], + "〽️":["庵点","印","部分"], + "⚠️":["警告"], + "🚸":["交差点を渡る子供たち","子供","交差点","歩行者","交通"], + "🔰":["初心者マーク","初心者","マーク","緑","日本","若葉","道具","黄"], + "♻️":["リサイクルマーク","リサイクル"], + "🈯️":["四角囲み指","日本語"], + "💹":["上昇トレンドのチャートと円記号","上昇中円チャート","銀行","チャート","通貨","グラフ","成長","市場","お金","上昇","トレンド","上向き","円"], + "❇️":["キラキラ"], + "✳️":["アスタリスク (8本構成)","アスタリスク"], + "❎":["四角で囲まれたバツ印","マーク","四角"], + "✅":["白い太字のチェックマーク","チェック","マーク"], + "💠":["ドット模様のダイヤ","漫画","ダイヤモンド","幾何学","内部"], + "🌀":["サイクロン","低気圧","めまい","竜巻","台風","天気"], + "➿":["二重のカール状のループ","カール","ダブル","ループ"], + "🌐":["子午線・経線のある地球","地球","地球儀","経線","世界"], + "♾":["無限","永遠","普遍的"], + "Ⓜ️":["丸囲みM","円","M"], + "🏧":["ATM","ATM記号","自動","銀行","出納"], + "🚾":["トイレ","化粧室","お手洗い","水","WC"], + "♿️":["車いす","アクセス","車椅子"], + "🅿️":["黒四角囲みP","駐車場"], + "🈳":["四角囲み空","四角囲みの空","中国語","空室","空き","空車"], + "🈂️":["四角囲みサ","日本人","サービス"], + "🛂":["入国審査","パスポート"], + "🛃":["税関"], + "🛄":["手荷物受取所","手荷物","受け取り"], + "🛅":["手荷物預かり所","手荷物","ロッカー","携行品"], + "🚰":["飲料水","飲み物","水"], + "🛗":["エレベーター","アクセシビリティ","引き上げ","昇降機"], + "🚹":["男性の記号","男性用","トイレ","男","おとこ","男性"], + "♂️":["男性記号","男性","男","おとこ"], + "🚺":["女性の記号","女性用","トイレ","女","おんな","女性"], + "♀️":["女性記号","女性","女","おんな"], + "⚧️":["トランスジェンダーサイン","トランスジェンダー","プライド","lgbt"], + "🚼":["赤ちゃんマーク","赤ちゃん","おむつ替え"], + "🚻":["トイレ","化粧室","WC"], + "🚮":["ゴミ捨て場","ビンのゴミ捨て場","ゴミ","ゴミ箱"], + "🎦":["映画","アクティビティ","カメラ","エンターテイメント","フィルム","動画"], + "📶":["アンテナ","バー","携帯","コミュニケーション","モバイル","携帯電話","シグナル","電話"], + "🛜":["無線","コンピュータ","インターネット","ネットワーク","Wi-Fi","接続"], + "🈁":["四角囲みココ","日本人"], + "🆖":["四角囲みNG","NG"], + "🆗":["四角囲みOK","OK"], + "🆙":["四角囲みUP!","マーク","上"], + "🆒":["COOL","かっこいい","クール"], + "🆕":["四角囲みnew","新"], + "🆓":["四角囲みFREE","フリー","無料"], + "0⃣":["0キー","0","キー","ゼロ"], + "1⃣":["1キー","1","キー","一"], + "2⃣":["2キー","2","キー","ニ"], + "3⃣":["3キー","3","キー","三"], + "4⃣":["4キー","4","四","キー"], + "5⃣":["5キー","5","五","キー"], + "6⃣":["6キー","6","キー","六"], + "7⃣":["7キー","7","キー","七"], + "8⃣":["8キー","8","八","キー"], + "9⃣":["9キー","9","キー","九"], + "🔟":["10キー","10","キー","十"], + "🔢":["番号の入力記号","1234","入力","数字"], + "▶️":["右向き三角","再生ボタン","矢印","再生","右","三角形"], + "⏸️":["2本の垂直バー","一時停止ボタン","バー","2倍","一時停止","垂直"], + "⏯️":["右向きの三角形と二重垂直棒","再生または一時停止ボタン","矢印","一時停止","再生","右","三角形"], + "⏹️":["停止","停止ボタン","四角"], + "⏺️":["録画","録画ボタン","丸"], + "⏏️":["取り出しマーク","取り出しボタン"], + "⏭️":["右向きの二重三角形と垂直棒","「次の曲」ボタン","矢印","次の場面","次の曲","三角形"], + "⏮️":["左向きの二重三角形と垂直棒","「前の曲」ボタン","矢印","前の場面","前の曲","三角形"], + "⏩":["右向きの二重三角形","早送りボタン","矢印","2倍","高速","進む"], + "⏪":["左向きの二重三角形","早戻しボタン","矢印","2倍","巻き戻し"], + "🔀":["ねじり右向き矢印の絵文字","シャッフル","矢印","交差"], + "🔁":["リピート","リピートボタン","矢印","時計回り"], + "🔂":["1曲をリピート再生","リピートボタン","矢印","時計回り","一度"], + "◀️":["左向きの三角形","反転ボタン","矢印","左","反転","三角形"], + "🔼":["上向きの三角形","上ボタン","矢印","ボタン","上"], + "🔽":["下向きの三角形","下ボタン","矢印","ボタン","下"], + "⏫":["上向きの二重三角形","高速上昇ボタン","矢印","ダブル","上"], + "⏬":["下向きの二重三角形","高速ダウンボタン","矢印","ダブル","下"], + "➡️":["右向き矢印","右矢印","矢印","主要","方向","東"], + "⬅️":["左向き矢印","左矢印","矢印","主要","方向","西"], + "⬆️":["上向き矢印","上矢印","矢印","主要","方向","北"], + "⬇️":["下向き矢印","下矢印","矢印","主要","方向","下","南"], + "↗️":["右上矢印","矢印","方向","斜め","北東"], + "↘️":["右下矢印","矢印","方向","斜め","南東"], + "↙️":["左下矢印","矢印","方向","斜め","南西"], + "↖️":["左上矢印","矢印","方向","斜め","北西"], + "↕️":["上下矢印","矢印","方向","斜め","北西"], + "↔️":["左右矢印","矢印"], + "🔄":["うずまき矢印","反時計回り","矢印","左回り"], + "↪️":["右向き段付き矢印","右に曲がった矢印","矢印"], + "↩️":["左向き段付き矢印","左に曲がった矢印","矢印"], + "🔃":["ループ矢印","時計の針","矢印","時計回り","リロード"], + "⤴️":["右上へカーブする矢印","上へカーブする右矢印","矢印"], + "⤵️":["右下へカーブする矢印","下にカーブする右矢印","矢印","下"], + "#⃣":["#キー","ハッシュ","キー","ポンド"], + "*⃣":["アスタリスクキー","アスタリスク","キー","星"], + "ℹ️":["情報源","i","インフォメーション"], + "🔤":["アルファベット入力","abc","アルファベット","入力","ラテン","文字"], + "🔡":["アルファベット小文字入力","abcd","入力","ラテン","文字","小文字"], + "🔠":["アルファベット大文字入力","入力","ラテン","文字","大文字"], + "🔣":["記号入力","入力"], + "🎵":["音符","アクティビティ","エンターテイメント","音楽"], + "🎶":["複数の音符","アクティビティ","エンターテイメント","音楽","音符"], + "〰️":["波線","ダッシュ","記号","波"], + "➰":["カール状のループ","カール","ループ"], + "✔️":["太字のチェックマーク","チェック","マーク"], + "➕":["太字の+記号","数学","プラス"], + "➖":["太字のマイナス記号","数学","マイナス"], + "➗":["太字の÷記号","割り算","数学"], + "✖️":["太字の×印","キャンセル","乗算","かける","x"], + "🟰":["太い等号","等式","数学","等しい"], + "💲":["太字のドル記号","通貨","ドル","お金"], + "💱":["外貨両替","銀行","通貨","両替","お金"], + "©️":["コピーライトマーク","著作権"], + "®️":["登録商標マーク","登録済み","商標"], + "™️":["商標マーク","マーク","tm","商標"], + "🔚":["ENDと左矢印","矢印","端"], + "🔙":["BACKと左矢印","矢印","戻る"], + "🔛":["ON!と左右矢印","矢印","マーク","オン"], + "🔝":["TOPと上矢印","矢印","トップ","上"], + "🔜":["SOONと右矢印","矢印","まもなく"], + "☑️":["チェック入りチェックボックス","投票","ボックス","チェック"], + "🔘":["ラジオボタン","ボタン","幾何学","ラジオ"], + "🔴":["赤丸","円","幾何学","赤"], + "🟠":["オレンジ色の円","円","幾何学","オレンジ"], + "🟡":["黄色の丸","円","幾何学","茶色"], + "🟢":["緑丸","円","幾何学","緑"], + "🔵":["青丸","青","円","幾何学"], + "🟣":["紫の丸","円","幾何学","紫"], + "🟤":["茶色の丸","円","幾何学","茶色"], + "⚫️":["黒丸","円","幾何学"], + "⚪️":["白丸","円","幾何学"], + "🟥":["赤の正方形","正方形","幾何学","赤"], + "🟧":["オレンジ色の正方形","正方形","幾何学","オレンジ"], + "🟨":["黄色の正方形","正方形","幾何学","黄色"], + "🟩":["緑の正方形","正方形","幾何学","緑"], + "🟦":["青の正方形","正方形","幾何学","青"], + "🟪":["紫の正方形","正方形","幾何学","紫"], + "🟫":["茶色の正方形","正方形","幾何学","茶色"], + "⬛️":["黒い大きな四角","幾何学","正方形"], + "⬜️":["白い大きな四角","幾何学","正方形"], + "◼️":["黒い中くらいの四角","幾何学","正方形"], + "◻️":["白くて中くらいの四角","幾何学","正方形"], + "◾️":["黒くて中くらいの小さい四角","幾何学","正方形"], + "◽️":["白い中くらいの小さな四角","幾何学","正方形"], + "▪️":["黒い小さな四角","幾何学","正方形"], + "▫️":["白い小さな四角","幾何学","正方形"], + "🔸":["小さいオレンジのダイヤモンド","ダイヤモンド","幾何学","オレンジ"], + "🔹":["小さくて青いダイヤモンド","青","ダイヤモンド","幾何学"], + "🔶":["大きいオレンジのダイヤ","ダイヤモンド","幾何学","オレンジ"], + "🔷":["大きくて青いダイヤモンド","青","ダイヤモンド","幾何学"], + "🔺":["上向きの赤い三角形","上","幾何学","赤"], + "🔻":["下向きの三角形","ダウン","幾何学","赤"], + "🔲":["黒い四角ボタン","ボタン","幾何学","正方形"], + "🔳":["白い四角ボタン","ボタン","幾何学","囲み","四角"], + "🔈":["スピーカー","音量"], + "🔉":["音量小","電源が入ったスピーカー","低い","スピーカー","音量","波"], + "🔊":["音量大","大音量のスピーカー","3","エンターテイメント","高い","音の大きい","スピーカー","ボリューム"], + "🔇":["無音のスピーカー","スピーカー","オフ","ミュート","静音","無音","音量"], + "📣":["メガホン","応援","コミュニケーション","拡声器"], + "📢":["拡声器","コミュニケーション","大声","スピーカー","パブリックアドレス","メガホン"], + "🔔":["ベル"], + "🔕":["ミュート","スラッシュベル","鐘","禁じられた","だめ","ない","禁止","静か"], + "🃏":["トランプのジョーカー","カード","エンターテイメント","ゲーム","ジョーカー","プレイ"], + "🀄️":["麻雀牌の中","ゲーム","麻雀","赤"], + "♠️":["トランプのスペード","カード","ゲーム","スペード","スーツ"], + "♣️":["トランプのクラブ","カード","クラブ","ゲーム","スーツ"], + "♥️":["トランプのハート","カード","ゲーム","ハート","スーツ"], + "♦️":["トランプのダイヤ","カード","ダイヤ","ダイヤモンド","ゲーム","スーツ"], + "🎴":["花札","アクティビティ","カード","エンターテイメント","花","ゲーム","日本","プレイ"], + "👁🗨":["吹き出しの目","吹き出し","目","スピーチ","証人"], + "🗨️":["左向きの吹き出し","セリフ","スピーチ"], + "💭":["考え吹き出し","吹き出し","泡","漫画","考え"], + "🗯️":["右向きの怒りの吹き出し","怒り","吹き出し","泡","激怒"], + "💬":["吹き出し","泡","漫画","セリフ","スピーチ"], + "🕐":["1時","0分","1","時計","時","一"], + "🕑":["2時","0分","2","時計","時","二"], + "🕒":["3時","0分","3","時計","時","三"], + "🕓":["4時","0分","4","時計","四","時"], + "🕔":["5時","0分","5","時計","五","時"], + "🕕":["6時","0分","6","時計","時","六"], + "🕖":["7時","0分","7","時計","時","七"], + "🕗":["8時","0分","8","時計","八","時"], + "🕘":["9時","0分","9","時計","九","時"], + "🕙":["10時","0分","10","時計","時","十"], + "🕚":["11時","0分","11","時計","十一","時"], + "🕛":["12時","0分","12","時計","十二","時"], + "🕜":["1時半","1時","半","時刻","一","30"], + "🕝":["2時半","2時","半","時刻","30","二"], + "🕞":["3時半","3時","半","時刻","30","三"], + "🕟":["4時半","30","4時","時刻","四","半"], + "🕠":["5時半","30","5時","時刻","五","半"], + "🕡":["6時半","30","6時","時刻","六","半"], + "🕢":["7時半","30","7時","時刻","七","半"], + "🕣":["8時半","30","8時","時刻","八","半"], + "🕤":["9時半","30","9時","時刻","九","半"], + "🕥":["10時半","10時","半","時刻","十","30"], + "🕦":["11時半","11時","半","時刻","十一","30"], + "🕧":["12時半","12時","半","時刻","30","十二"], + "🏳️":["なびく白旗","旗","なびく"], + "🏴":["なびく黒旗","旗","なびく"], + "🏁":["チェッカーフラッグ","市松模様","旗","レース"], + "🚩":["三角旗","旗","ポスト"], + "🎌":["交差旗","アクティビティ","お祝い","交差","交差した","旗","日本"], + "🏴☠️":["海賊旗","旗","海賊"], + "🏳️🌈":["レインボーフラッグ","フラッグ","レインボー","プライド","lgbt"], + "🏳️⚧️":["トラスジェンダーフラッグ","フラッグ","トランスジェンダー","プライド","lgbt"], + "🇦🇨":["アセンション島の旗","アセンション","国旗","島"], + "🇦🇩":["アンドラ国旗","アンドラ","国旗"], + "🇦🇪":["アラブ首長国連邦国旗","首長国","国旗","アラブ首長国連邦","連邦"], + "🇦🇫":["アフガニスタン国旗","アフガニスタン","国旗"], + "🇦🇬":["アンティグア・バーブーダ国旗","アンティグア","バーブーダ","国旗"], + "🇦🇮":["アンギラ島の旗","アンギラ島","国旗"], + "🇦🇱":["アルバニア国旗","アルバニア","国旗"], + "🇦🇲":["アルメニア国旗","アルメニア","国旗"], + "🇦🇴":["アンゴラ国旗","アンゴラ","国旗"], + "🇦🇶":["南極大陸の旗","南極大陸","国旗"], + "🇦🇷":["アルゼンチン国旗","アルゼンチン","国旗"], + "🇦🇸":["アメリカ領サモアの旗","アメリカ領","国旗","サモア"], + "🇦🇹":["オーストリア国旗","オーストリア","国旗"], + "🇦🇺":["オーストラリア国旗","オーストラリア","国旗","ハード","マクドナルド"], + "🇦🇼":["アルバ国旗","アルバ","国旗"], + "🇦🇽":["オーランド諸島の旗","オーランド諸島","国旗"], + "🇦🇿":["アゼルバイジャン国旗","アゼルバイジャン","国旗"], + "🇧🇦":["ボスニア・ヘルツェゴビナ国旗","ボスニア","国旗","ヘルツェゴビナ"], + "🇧🇧":["バルバドス国旗","バルバドス","国旗"], + "🇧🇩":["バングラデシュ国旗","バングラデシュ","国旗"], + "🇧🇪":["ベルギー国旗","ベルギー","国旗"], + "🇧🇫":["ブルキナファソ国旗","ブルキナファソ","国旗"], + "🇧🇬":["ブルガリア国旗","ブルガリア","国旗"], + "🇧🇭":["バーレーン国旗","バーレーン","国旗"], + "🇧🇮":["ブルンジ国旗","ブルンジ","国旗"], + "🇧🇯":["ベナン国旗","ベナン","国旗"], + "🇧🇱":["サン・バルテルミー島の旗","バルテルミー","国旗","サン"], + "🇧🇲":["バミューダ諸島の旗","バミューダ諸島","国旗"], + "🇧🇳":["ブルネイ国旗","ブルネイ","ダルサラーム","国旗"], + "🇧🇴":["ボリビア国旗","ボリビア","国旗"], + "🇧🇶":["カリブ海のオランダ領島の旗","ボネール島","カリブ海","ユースタティウス","国旗","オランダ","サバ","シント"], + "🇧🇷":["ブラジル国旗","ブラジル","国旗"], + "🇧🇸":["バハマ国旗","バハマ","国旗"], + "🇧🇹":["ブータン国旗","ブータン","国旗"], + "🇧🇼":["ボツワナ国旗","ボツワナ","国旗"], + "🇧🇾":["ベラルーシ国旗","ベラルーシ","国旗"], + "🇧🇿":["ベリーズ国旗","ベリーズ","国旗"], + "🇨🇦":["カナダ国旗","カナダ","国旗"], + "🇨🇨":["ココス諸島の旗","ココス","国旗","諸島","キーリング"], + "🇨🇩":["コンゴ国旗 - キンシャサ","コンゴ","コンゴ - キンシャサ","コンゴ民主共和国","国旗","キンシャサ","共和国"], + "🇨🇫":["中央アフリカ国旗","中央アフリカ共和国","国旗","共和国"], + "🇨🇬":["コンゴの旗 - ブラザビル","ブラザビル","コンゴ","コンゴ共和国","コンゴ - ブラザビル","国旗","共和国"], + "🇨🇭":["スイス国旗","国旗","スイス"], + "🇨🇮":["コートジボワール国旗","コートジボワール","国旗"], + "🇨🇰":["クック諸島国旗","クック","国旗","諸島"], + "🇨🇱":["チリ国旗","チリ","国旗"], + "🇨🇲":["カメルーン国旗","カメルーン","国旗"], + "🇨🇳":["中国国旗","中国","国旗"], + "🇨🇴":["コロンビア国旗","コロンビア","国旗"], + "🇨🇷":["コスタリカ国旗","コスタリカ","国旗"], + "🇨🇺":["キューバ国旗","キューバ","国旗"], + "🇨🇻":["カーボベルデ国旗","カーボ","ケープ","国旗","ベルデ"], + "🇨🇼":["キュラソー島の旗","アンティル諸島","キュラソー","国旗"], + "🇨🇽":["クリスマス島の旗","クリスマス","国旗","島"], + "🇨🇾":["キプロス国旗","キプロス","国旗"], + "🇨🇿":["チェコ国旗","チェコ共和国","国旗"], + "🇩🇪":["ドイツ国旗","国旗","ドイツ"], + "🇩🇯":["ジブチ国旗","ジブチ","国旗"], + "🇩🇰":["デンマーク国旗","デンマーク","国旗"], + "🇩🇲":["ドミニカ国旗","ドミニカ","国旗"], + "🇩🇴":["ドミニカ共和国国旗","ドミニカ共和国","国旗"], + "🇩🇿":["アルジェリア国旗","アルジェリア","国旗"], + "🇪🇨":["エクアドル国旗","エクアドル","国旗"], + "🏴":["イングランドの旗","イングランド","旗"], + "🇪🇪":["エストニア国旗","エストニア","国旗"], + "🇪🇬":["エジプト国旗","エジプト","国旗"], + "🇪🇭":["西サハラの旗","国旗","サハラ","西","西サハラ"], + "🇪🇷":["エリトリア国旗","エリトリア","国旗"], + "🇪🇸":["スペイン国旗","国旗","スペイン","セウタ","メリリャ"], + "🇪🇹":["エチオピア国旗","エチオピア","国旗"], + "🇪🇺":["欧州旗","欧州連合","旗"], + "🇫🇮":["フィンランド国旗","フィンランド","国旗"], + "🇫🇯":["フィジー国旗","フィジー","国旗"], + "🇫🇰":["フォークランド諸島の旗","フォークランド","フォークランド諸島","国旗","諸島","マルビナス"], + "🇫🇲":["ミクロネシア国旗","国旗","ミクロネシア"], + "🇫🇴":["フェロー諸島の旗","フェロー","旗","諸島"], + "🇫🇷":["フランス国旗","国旗","フランス","クリッパートン島","セント・マーチン","サン・マルタン"], + "🇬🇦":["ガボン国旗","国旗","ガボン"], + "🇬🇧":["イギリス国旗","イギリス","イギリス領","コーンウォール","イングランド","国旗","グレートブリテン","アイルランド","北アイルランド","スコットランド","UK","ユニオンジャック","連合","連合王国","ウェールズ"], + "🇬🇩":["グレナダ国旗","国旗","グレナダ"], + "🇬🇪":["ジョージア国旗","国旗","ジョージア"], + "🇬🇫":["フランス領ギアナの旗","国旗","フランス領","ギアナ"], + "🇬🇬":["ガーンジー国旗","国旗","ガーンジー"], + "🇬🇭":["ガーナ国旗","国旗","ガーナ"], + "🇬🇮":["ジブラルタル国旗","国旗","ジブラルタル"], + "🇬🇱":["グリーンランド国旗","国旗","グリーンランド"], + "🇬🇲":["ガンビア国旗","国旗","ガンビア"], + "🇬🇳":["ギニア国旗","国旗","ギニア"], + "🇬🇵":["グアドループ国旗","国旗","グアドループ"], + "🇬🇶":["赤道ギニア国旗","赤道ギニア","国旗","ギニア"], + "🇬🇷":["ギリシャ国旗","国旗","ギリシャ"], + "🇬🇸":["サウスジョージア・サウスサンドウィッチ諸島国旗","国旗","ジョージア","諸島","サウス","サウスジョージア","サウスサンドウィッチ"], + "🇬🇹":["グアテマラ国旗","国旗","グアテマラ"], + "🇬🇺":["グアム旗","国旗","グアム"], + "🇬🇼":["ギニアビサウ国旗","ビサウ","国旗","ギニア"], + "🇬🇾":["ガイアナ国旗","国旗","ガイアナ"], + "🇭🇰":["香港の旗","中国","国旗","香港"], + "🇭🇳":["ホンジュラス国旗","国旗","ホンジュラス"], + "🇭🇷":["クロアチア国旗","クロアチア","国旗"], + "🇭🇹":["ハイチ国旗","国旗","ハイチ"], + "🇭🇺":["ハンガリー国旗","国旗","ハンガリー"], + "🇮🇨":["カナリア諸島の旗","カナリア","国旗","諸島"], + "🇮🇩":["インドネシア国旗","国旗","インドネシア"], + "🇮🇪":["アイルランド国旗","国旗","アイルランド"], + "🇮🇱":["イスラエル国旗","国旗","イスラエル"], + "🇮🇲":["マン島の旗","国旗","マン島"], + "🇮🇳":["インド国旗","国旗","インド"], + "🇮🇴":["イギリス領インド洋地域の旗","イギリス領","チャゴス","旗","インド洋","島","ディエゴガルシア"], + "🇮🇶":["イラク国旗","国旗","イラク"], + "🇮🇷":["イラン国旗","国旗","イラン"], + "🇮🇸":["アイスランド国旗","国旗","アイスランド"], + "🇮🇹":["イタリア国旗","国旗","イタリア"], + "🇯🇪":["ジャージー代官管轄区の旗","国旗","ジャージー代官管轄区"], + "🇯🇲":["ジャマイカ国旗","国旗","ジャマイカ"], + "🇯🇴":["ヨルダン国旗","国旗","ヨルダン"], + "🇯🇵":["日本国旗","国旗","日本"], + "🇰🇪":["ケニア国旗","国旗","ケニア"], + "🇰🇬":["キルギス国旗","国旗","キルギス"], + "🇰🇭":["カンボジア国旗","カンボジア","国旗"], + "🇰🇮":["キリバス国旗","国旗","キリバス"], + "🇰🇲":["コモロ国旗","コモロ","国旗"], + "🇰🇳":["セントクリストファー・ネイビス国旗","国旗","キッツ","ネイビス","セント"], + "🇰🇵":["北朝鮮国旗","国旗","朝鮮","北","北朝鮮"], + "🇰🇷":["韓国国旗","国旗","韓国","南","大韓民国"], + "🇰🇼":["クウェート国旗","国旗","クウェート"], + "🇰🇾":["ケイマン諸島の旗","ケイマン","国旗","諸島"], + "🇰🇿":["カザフスタン国旗","国旗","カザフスタン"], + "🇱🇦":["ラオス国旗","国旗","ラオス"], + "🇱🇧":["レバノン国旗","国旗","レバノン"], + "🇱🇨":["セントルシア国旗","国旗","セントルシア"], + "🇱🇮":["リヒテンシュタイン国旗","国旗","リヒテンシュタイン"], + "🇱🇰":["スリランカ国旗","国旗","スリランカ"], + "🇱🇷":["リベリア国旗","国旗","リベリア"], + "🇱🇸":["レソト国旗","国旗","レソト"], + "🇱🇹":["リトアニア国旗","国旗","リトアニア"], + "🇱🇺":["ルクセンブルク国旗","国旗","ルクセンブルク"], + "🇱🇻":["ラトビア国旗","国旗","ラトビア"], + "🇱🇾":["リビア国旗","国旗","リビア"], + "🇲🇦":["モロッコ国旗","国旗","モロッコ"], + "🇲🇨":["モナコ国旗","国旗","モナコ"], + "🇲🇩":["モルドバ国旗","国旗","モルドバ"], + "🇲🇪":["モンテネグロ国旗","国旗","モンテネグロ"], + "🇲🇬":["マダガスカル国旗","国旗","マダガスカル"], + "🇲🇭":["マーシャル諸島国旗","国旗","諸島","マーシャル"], + "🇲🇰":["マケドニア国旗","国旗","マケドニア"], + "🇲🇱":["マリ国旗","国旗","マリ"], + "🇲🇲":["ミャンマー国旗","ビルマ","国旗","ミャンマー"], + "🇲🇳":["モンゴル国旗","国旗","モンゴル"], + "🇲🇴":["マカオの旗","中国","国旗","マカオ"], + "🇲🇵":["北マリアナ諸島の旗","国旗","諸島","マリアナ","北","北マリアナ"], + "🇲🇶":["マルティニークの旗","旗","マルティニーク"], + "🇲🇷":["モーリタニア国旗","国旗","モーリタニア"], + "🇲🇸":["モントセラトの旗","旗","モントセラト"], + "🇲🇹":["マルタ国旗","国旗","マルタ"], + "🇲🇺":["モーリシャス国旗","国旗","モーリシャス"], + "🇲🇻":["モルディブ国旗","国旗","モルディブ"], + "🇲🇼":["マラウイ国旗","国旗","マラウイ"], + "🇲🇽":["メキシコ国旗","国旗","メキシコ"], + "🇲🇾":["マレーシア国旗","国旗","マレーシア"], + "🇲🇿":["モザンビーク国旗","国旗","モザンビーク"], + "🇳🇦":["ナミビア国旗","国旗","ナミビア"], + "🇳🇨":["ニューカレドニアの旗","国旗","ニュー","ニューカレドニア"], + "🇳🇪":["ニジェール国旗","国旗","ニジェール"], + "🇳🇫":["ノーフォーク島の旗","旗","島","ノーフォーク"], + "🇳🇬":["ナイジェリア国旗","国旗","ナイジェリア"], + "🇳🇮":["ニカラグア国旗","国旗","ニカラグア"], + "🇳🇱":["オランダ国旗","国旗","オランダ"], + "🇳🇴":["ノルウェー国旗","旗","ノルウェー","ブーべ","スヴァールバル","ヤンマイエン"], + "🇳🇵":["ネパール国旗","国旗","ネパール"], + "🇳🇷":["ナウル国旗","国旗","ナウル"], + "🇳🇺":["ニウエ国旗","国旗","ニウエ"], + "🇳🇿":["ニュージーランド国旗","国旗","ニュー","ニュージーランド"], + "🇴🇲":["オマーン国旗","国旗","オマーン"], + "🇵🇦":["パナマ国旗","国旗","パナマ"], + "🇵🇪":["ペルー国旗","国旗","ペルー"], + "🇵🇫":["フランス領ポリネシアの旗","国旗","フランス領","ポリネシア"], + "🇵🇬":["パプアニューギニア国旗","国旗","ギニア","ニュー","パプアニューギニア"], + "🇵🇭":["フィリピン国旗","国旗","フィリピン"], + "🇵🇰":["パキスタン国旗","国旗","パキスタン"], + "🇵🇱":["ポーランド国旗","国旗","ポーランド"], + "🇵🇲":["サンピエール島・ミクロン島の旗","旗","ミクロン","ピエール","サン"], + "🇵🇳":["ピトケアン諸島の旗","旗","諸島","ピトケアン"], + "🇵🇷":["プエルトリコの旗","国旗","プエルトリコ"], + "🇵🇸":["パレスチナ自治政府の旗","国旗","パレスチナ"], + "🇵🇹":["ポルトガル国旗","国旗","ポルトガル"], + "🇵🇼":["パラオ国旗","国旗","パラオ"], + "🇵🇾":["パラグアイ国旗","国旗","パラグアイ"], + "🇶🇦":["カタール国旗","国旗","カタール"], + "🇷🇪":["レユニオンの旗","旗","レユニオン"], + "🇷🇴":["ルーマニア国旗","国旗","ルーマニア"], + "🇷🇸":["セルビア国旗","国旗","セルビア"], + "🇷🇺":["ロシア国旗","国旗","ロシア"], + "🇷🇼":["ルワンダ国旗","国旗","ルワンダ"], + "🇸🇦":["サウジアラビア国旗","国旗","サウジアラビア"], + "🏴":["スコットランドの旗","スコットランド","旗"], + "🇸🇧":["ソロモン諸島国旗","旗","諸島","ソロモン"], + "🇸🇨":["セーシェル国旗","国旗","セーシェル"], + "🇸🇩":["スーダン国旗","国旗","スーダン"], + "🇸🇪":["スウェーデン国旗","国旗","スウェーデン"], + "🇸🇬":["シンガポール国旗","国旗","シンガポール"], + "🇸🇭":["セントヘレナ島の旗","旗","ヘレナ","セント"], + "🇸🇮":["スロベニア国旗","国旗","スロベニア"], + "🇸🇰":["スロバキア国旗","国旗","スロバキア"], + "🇸🇱":["シエラレオネ国旗","国旗","シエラレオネ"], + "🇸🇲":["サンマリノ国旗","国旗","サンマリノ"], + "🇸🇳":["セネガル国旗","国旗","セネガル"], + "🇸🇴":["ソマリア国旗","国旗","ソマリア"], + "🇸🇷":["スリナム国旗","国旗","スリナム"], + "🇸🇸":["南スーダン国旗","国旗","南","南スーダン","スーダン"], + "🇸🇹":["サントメ・プリンシペ国旗","国旗","プリンシペ","プリンシピ","サントメ","サォントメー"], + "🇸🇻":["エルサルバドル国旗","エルサルバドル","国旗"], + "🇸🇽":["セント・マーチン島の旗","旗","マーチン","セント"], + "🇸🇾":["シリア国旗","国旗","シリア"], + "🇸🇿":["スワジランド国旗","国旗","スワジランド"], + "🇹🇦":["トリスタンダクーニャの旗","旗","トリスタン・ダ・クーニャ"], + "🇹🇨":["タークス・カイコス諸島の旗","カイコス","旗","諸島","タークス"], + "🇹🇩":["チャド国旗","チャド","国旗"], + "🇹🇫":["フランス領南方・南極地域の旗","南極","国旗","フランス領"], + "🇹🇬":["トーゴ国旗","国旗","トーゴ"], + "🇹🇭":["タイ国旗","国旗","タイ"], + "🇹🇯":["タジキスタン国旗","国旗","タジキスタン"], + "🇹🇰":["トケラウ旗","国旗","トケラウ"], + "🇹🇱":["東ティモール国旗","東","東ティモール","国旗","ティモール・レステ"], + "🇹🇲":["トルクメニスタン国旗","国旗","トルクメニスタン"], + "🇹🇳":["チュニジア国旗","国旗","チュニジア"], + "🇹🇴":["トンガ国旗","国旗","トンガ"], + "🇹🇷":["トルコ国旗","国旗","トルコ"], + "🇹🇹":["トリニダード・トバゴ国旗","国旗","トバゴ","トリニダード"], + "🇹🇻":["ツバル国旗","国旗","ツバル"], + "🇹🇼":["台湾の旗","中国","国旗","台湾"], + "🇹🇿":["タンザニア国旗","国旗","タンザニア"], + "🇺🇦":["ウクライナ国旗","国旗","ウクライナ"], + "🇺🇬":["ウガンダ国旗","国旗","ウガンダ"], + "🇺🇳":["国連の旗","旗","国連","連合","国際"], + "🇺🇸":["アメリカ国旗","アメリカ","旗","合衆","合衆国","アメリカ合衆国","合衆国領有小離島"], + "🇺🇾":["ウルグアイ国旗","国旗","ウルグアイ"], + "🇺🇿":["ウズベキスタン国旗","国旗","ウズベキスタン"], + "🇻🇦":["バチカン市国旗","国旗","バチカン"], + "🇻🇨":["セントビンセント・グレナディーン国旗","国旗","グレナディーン諸島","セント","ビンセント"], + "🇻🇪":["ベネズエラ国旗","国旗","ベネズエラ"], + "🇻🇬":["イギリス領ヴァージン諸島の旗","イギリス領","国旗","島","ヴァージン"], + "🇻🇮":["アメリカ領ヴァージン諸島の旗","アメリカ","国旗","島","アメリカ合衆国","合衆国","ヴァージン"], + "🇻🇳":["ベトナム国旗","国旗","ベトナム","ヴェトナム"], + "🇻🇺":["バヌアツ国旗","国旗","バヌアツ"], + "🏴":["ウェールズの旗","ウェールズ","旗"], + "🇼🇫":["ウォリス・フツナの旗","国旗","フツナ","ウォリス"], + "🇼🇸":["サモア国旗","国旗","サモア"], + "🇽🇰":["コソボ国旗","国旗","コソボ"], + "🇾🇪":["イエメン国旗","国旗","イエメン"], + "🇾🇹":["マヨットの旗","国旗","マヨット"], + "🇿🇦":["南アフリカ国旗","国旗","南","南アフリカ"], + "🇿🇲":["ザンビア国旗","国旗","ザンビア"], + "🇿🇼":["ジンバブエ国旗","国旗","ジンバブエ"] +} diff --git a/packages/frontend/src/unicode-emoji-indexes/ja-JP_hira.json b/packages/frontend/src/unicode-emoji-indexes/ja-JP_hira.json new file mode 100644 index 0000000000..35e028627a --- /dev/null +++ b/packages/frontend/src/unicode-emoji-indexes/ja-JP_hira.json @@ -0,0 +1,1865 @@ +{ + "😀": ["にやにやしたかお","かお","にやにや","しあわせ"], + "😃": ["くちをあけたえがお","かお","くち","あける","えがお","しあわせ"], + "😄": ["くちをあけてめがわらっているえがお","め","かお","くち","あける","えがお","しあわせ"], + "😁": ["にやにやしたかお","め","かお","にやにや","えがお"], + "😆": ["くちをあけてわらっているかお","かお","わらい","くち","あける","まんぞく","えがお"], + "😅": ["くちをあけてひやあせをかいたえがお","ぞっとする","かお","くちをあける","えがお","ひやあせ"], + "😂": ["うれしなき","かお","うれしい","わらう","なく","なみだ"], + "🤣": ["だいばくしょう","かお","ゆか","わらい","おおわらい","ばくしょう","ぐるぐる"], + "😇": ["てんしのえがお","てんし","かお","おとぎばなし","ふぁんたじー","てんしのわ","むじゃき","えがお"], + "😉": ["ういんくしたかお","かお","ういんく"], + "😊": ["めがわらっているえがお","せきめん","め","かお","えがお"], + "🙂": ["ほほえみ","かお","えがお","しあわせ"], + "🙃": ["さかさのかお","かお","さかさ"], + "☺️": ["えがお","かお","りんかく","りらっくす"], + "😋": ["たべものをあじわうかお","おいしい","かお","あじわう","ふーむ","うまい"], + "😌": ["ほっとしたかお","かお","あんしん","ほっとする"], + "😍": ["めがはーとのえがお","め","かお","はーと","あい","えがお"], + "🥰": ["えがおとはーと","かお","けいあい","べたぼれ","あい"], + "😘": ["なげきっす","かお","はーと","きす"], + "😗": ["きすをするかお","かお","きす"], + "😙": ["えがおできす","め","かお","きす","えがお"], + "😚": ["めをとじてきすをするかお","とじた","め","かお","きす"], + "🥲": ["なみだのでているえがお","なく","しあわせ","かんしゃする","ほこりにおもう","あんしんする","わらう"], + "🤪": ["おどけたかお","め","にやにや","へん","こうふん","わいるど"], + "😜": ["したをだしてういんくしているかお","め","かお","じょうだん","した","ういんく"], + "😝": ["したをだしてめをほそめているかお","め","かお","こわい","あじ","した"], + "😛": ["したをだしているかお","かお","した"], + "🤑": ["ごうよくなかお","かお","おかね","くち"], + "😎": ["さんぐらすをかけたかお","あかるい","かっこいい","め","あいうぇあ","かお","めがね","えがお","たいよう","さんぐらす","てんき"], + "🤓": ["おたく","かお","へんなひと"], + "🥸": ["かそうしたかお","かそう","めがね","とくめいのひと","はな"], + "🧐": ["かためがねをかけたかお","たいくつ","ゆうふく","ゆたか"], + "🤠": ["かうぼーいはっとのかお","かうぼーい","かうがーる","かお","ぼうし"], + "🥳": ["ぱーてぃーふぇいす","かお","しゅくてん","ぼうし","つの","ぱーてぃー"], + "🤡": ["ぴえろのかお","ぴえろ","かお"], + "😏": ["にやにやしたかお","かお","にやにや"], + "😶": ["くちのないかお","かお","くち","しずかに","ちんもく"], + "🫥": ["てんせんのかお","おちこんだ","きえる","かくれる","ないこうてき","めにみえない"], + "😐": ["ふつうのかお","むひょうじょう","かお","へいせい"], + "🫤": ["くちがななめになったかお","がっかり","むかんしん","うたがいぶかい","ふあん"], + "😑": ["むひょうじょう","かお","ぽーかーふぇいす","むかんじょう"], + "😒": ["おもしろくなさそうなかお","かお","つまらない","ふこう"], + "🙄": ["ぐるぐるめのかお","め","かお","ぐるぐる"], + "🤨": ["まゆがあがっているかお","ふしん","うたがいぶかい","ひなん","ぎねん","ややおどろき","かいぎてき"], + "🤔": ["かんがえているかお","かお","かんがえちゅう"], + "🤫": ["しっといっているかお","しーっ","しずか","だまる"], + "🤭": ["くちをてでおおったかお","め","えがお","おおう","くち","て"], + "🫢": ["めをひらいてくちをてでおおったかお","きょうたん","いけい","ふしん","ろうばい","こわい","おどろき"], + "🫡": ["けいれいしているかお","ok","けいれい","せいてん","ぶたい","はい"], + "🤗": ["りょうてをひろげたえがお","かお","はぐ","だきしめる"], + "🫣": ["のぞきみしているかお","みりょう","のぞきみ","ぎょうし","ちらみ"], + "🤥": ["うそつきがお","かお","うそ","ぴのきお"], + "😳": ["あかくなったかお","ぼーっとした","ぼうっとした","かお","せきめん"], + "😞": ["がっかりしたかお","がっかり","かお"], + "😟": ["ふあんなかお","かお","しんぱい","ふあん"], + "😤": ["かちほこったかお","かお","しょうり","かつ"], + "😠": ["おこったかお","いかり","おこった","かお","げきど"], + "😡": ["ふくれがお","いかり","おこった","かお","げきど","ふくれっつら","ふんど","あか"], + "🤬": ["くちがきごうでおおわれたかお","のろい","ののしり"], + "😔": ["かなしげなかお","がっかり","かお","かなしい"], + "😕": ["こまったかお","こまった","かお"], + "🙁": ["ごきげんななめ","かお","しかめっつら","かなしい","ふこう"], + "☹️": ["しかめっつら","かお","かなしい","ふこう"], + "😬": ["しかめっつら","かお"], + "🥺": ["うったえかけるかお","かお","ものごい","じひ","こいぬのめ"], + "😣": ["がまんしているかお","かお","がんばる"], + "😖": ["うろたえたかお","とまどい","うろたえ","かお"], + "😫": ["つかれたかお","かお","つかれた"], + "😩": ["うんざりしているかお","かお","つかれた","うんざり"], + "🥱": ["あくびしているかお","あきた","つかれた","あくび"], + "😪": ["ねむいかお","かお","ねる","すいみん"], + "😮💨": ["ためいきのでているかお","かお","ためいき","いきぎれ","うめき","あんしん","ささやき","くちぶえ"], + "😮": ["くちをあけたえがお","かお","くち","あける","どうじょう"], + "😱": ["ぜっきょうしたかお","かお","きょうふ","こわい","むんく","おびえ","ぜっきょう"], + "😨": ["ぞっとしているかお","かお","きょうふ","こわい","おびえ"], + "😰": ["くちをあけてひやあせをかいたかお","あおざめる","ぞっとする","かお","くち","あける","いそぐ","ひやあせ"], + "😥": ["がっかりしたがあんしんしたかお","がっかり","かお","あんしん","ほっとする","やれやれ"], + "😓": ["ひやあせをかいているかお","ぞっとする","かお","ひやあせ"], + "😯": ["おちついたかお","かお","だまる","ぼうぜん","おどろき"], + "😦": ["しんぱいそうなかおのえもじ","かお","しかめっつら","くち","あける"], + "😧": ["くのうにみちたかお","くのう","かお"], + "🥹": ["なみだをこらえているかお","おこる","なく","ほこりにおもう","さからう","かなしむ"], + "😢": ["なきがお","なく","かお","かなしい","なみだ"], + "😭": ["ごうきゅう","なく","かお","かなしい","なみだ"], + "🤤": ["よだれをたらしたかお","よだれ","かお"], + "🤩": ["すたーにむちゅう","め","かお","にやにや","ほし","むそうてき"], + "😵": ["めがばつになったかお","めまい","かお","ばつ","め"], + "😵💫": ["めがぐるぐるしているかお","めまい","かお","め","うっとり","ぐるぐる","とらぶる","おー"], + "🥴": ["ぼんやしりたかお","かお","めまい","めいてい","ほろよい","まっすぐでないめ","はじょうのくち"], + "😲": ["おどろいたかお","おどろき","びっくり","かお","しょっく","きょうがく"], + "🫨": ["ふるえるかお","じしん","かお","ふるえ","しょうげき","しんどう"], + "🤯": ["ばくはつしたあたま","かお","しょっく","ばくはつ","きょうき","びっくり"], + "🫠": ["ほろりとしたかお","きえる","ようかいする","えきたい","とける"], + "🤐": ["おくちちゃっく","かお","くち","ちゃっく"], + "😷": ["ますくをしたかお","かぜ","いしゃ","かお","ますく","くすり","びょうき"], + "🤕": ["けが","ほうたい","かお","きず"], + "🤒": ["おんどけいをくわえたかお","かお","びょうき","かぜ","たいおんけい"], + "🤮": ["はきそうなかお","びょうき","おうと","かぜ","はく"], + "🤢": ["はきそうなかお","かお","はきけ","おうと"], + "🤧": ["くしゃみをするかお","かお","くしゃみ","はくしょん"], + "🥵": ["ほてったかお","かお","ねつっぽい","ねっしゃびょう","ほてった","あからがお","あせをかいた"], + "🥶": ["あおざめたかお","かお","ぞっとする","こごえる","とうしょう","つらら"], + "😶🌫️": ["くもでおおわれたかお","かお","おっちょこちょい","ひげんじつてき","ゆめ","もや","くもでおおわれたあたま"], + "😴": ["ねがお","かお","ねる","すいみん","すやすや"], + "💤": ["すいみん","まんが","ねる","すやすや"], + "😈": ["つのつきえがお","かお","おとぎばなし","ふぁんたじー","つの","えがお"], + "👿": ["しょうあくま","おに","あくま","かお","おとぎばなし","ふぁんたじー"], + "👹": ["おに","ようかい","かお","むかしばなし","ふぁんたじー","にっぽん","もんすたー"], + "👺": ["てんぐ","ようかい","かお","むかしばなし","ふぁんたじー","にっぽん","もんすたー"], + "💩": ["うんち","まんが","ふん","かお","もんすたー"], + "👻": ["おばけ","ようかい","かお","おとぎばなし","ふぁんたじー","ゆうれい","もんすたー","はろうぃーん"], + "💀": ["どくろ","からだ","し","かお","おとぎばなし","もんすたー","がいこつ","はろうぃーん"], + "☠️": ["どくろまーく","からだ","こうさしたほね","し","かお","もんすたー","がいこつ","はろうぃーん"], + "👽": ["うちゅうじん","かいじゅう","いせいじん","かお","おとぎばなし","ふぁんたじー","もんすたー","うちゅう","UFO"], + "🤖": ["ろぼっとのかお","かお","もんすたー","ろぼっと"], + "🎃": ["じゃっく・お・らんたん","いべんと","おいわい","えんため","はろうぃん","じゃっくおらんたん","らんたん","かぼちゃ"], + "😺": ["くちをあけてわらうねこ","ねこ","かお","くち","あける","えがお"], + "😸": ["にやにやわらうねこ","ねこ","め","かお","にやにや","えがお"], + "😹": ["うれしなきしたねこのかお","ねこ","かお","うれしい","なみだ"], + "😻": ["はーとのめをしたねこのえがお","ねこ","め","かお","はーと","あい","えがお"], + "😼": ["にやりとわらうねこのかお","ねこ","かお","ひにく","えがお","にやり"], + "😽": ["めをとじてきすをするねこ","ねこ","め","かお","きす"], + "🙀": ["つかれたねこのかお","ねこ","かお","びっくり","おどろく","うんざり"], + "😿": ["ないたねこのかお","ねこ","なく","かお","かなしい","なみだ"], + "😾": ["おこったねこのかお","ねこ","かお","おこる","ふくれっつら"], + "🫶": ["はーとぽーず","あい"], + "👐": ["ひらいたて","からだ","て","ひろげる"], + "🤲": ["うえにむけたりょうてのひら","からだ","いのり","かっぷのようにまるめたて"], + "🙌": ["りょうてをあげる","からだ","おいわい","じぇすちゃー","て","ばんざい","あげる"], + "👏": ["はくしゅ","からだ","てをたたく","て"], + "🙏": ["にぎったて","たのむ","からだ","おじぎ","てをあわせる","じぇすちゃー","て","おねがい","いのる","ありがとう","かんしゃ"], + "🤝": ["あくしゅ","ごうい","て","しゅをむすぶ","かいぎ"], + "👍": ["いいね","からだ","うえ","て","ゆび","さむずあっぷ","+1"], + "👎": ["だめ","からだ","した","て","ゆび","さむずだうん","-1"], + "👊": ["にぎりこぶし","からだ","にぎる","こぶし","ぐー","て","ぱんち","せっきん"], + "✊": ["こぶし","からだ","にぎる","ぐー","て","ぱんち"], + "🤛": ["ひだりむきのこぶし","からだ","こぶし","ひだりむき"], + "🤜": ["みぎむきのこぶし","からだ","こぶし","みぎむき"], + "🤞": ["こうささせたゆび","からだ","こうさ","ゆび","て","こううん"], + "✌️": ["Vさいん","からだ","て","V","ぶい","かつ","しょうり","ぴーす"], + "🫰": ["ひとさしゆびとおやゆびをこうさしたて","たかい","はーと","あい","おかね","すなっぷ"], + "🤘": ["こるな","からだ","ゆび","て","つの","さいこう"], + "🤟": ["あいしてるのじぇすちゃー","からだ","あいしてる","すき","て"], + "👌": ["OKさいん","からだ","て","OK"], + "🤌": ["つまんでいるゆび","ゆび","てぶり","じんもん","つまむ","ひにく"], + "🤏": ["つまんでいるて","からだ","て","ちいさい","こがた","ちっちゃい"], + "👈": ["ひだりゆびさし","てのこう","からだ","ゆび","て","ひとさしゆび","ゆびさす"], + "🫳": ["てのひらをしたにしたて","しりぞける","おとす","しっし"], + "🫴": ["てのひらをうえにしたて","てまねき","ほかく","くる","もうしで"], + "👉": ["ゆびさし","てのこう","からだ","ゆび","て","ひとさしゆび","ゆびさす"], + "👆": ["ゆびさし","てのこう","からだ","ゆび","て","ひとさしゆび","ゆびさす","うえ"], + "👇": ["ゆびさし","てのこう","からだ","した","ゆび","て","ひとさしゆび","ゆびさす"], + "☝️": ["ゆびさし","からだ","ゆび","て","ひとさしゆび","ゆびさす","うえ"], + "✋": ["きょしゅ","からだ","て"], + "🤚": ["てのこう","からだ","あげる"], + "🖐️": ["ひろげたてのひら","からだ","ゆび","て","ひろげる"], + "🖖": ["ちょうじゅとはんえいを","からだ","ゆび","て","すぽっく","ばるかん"], + "👋": ["ばいばい","からだ","て","ふる","やっほー","こんにちは"], + "🤙": ["でんわのかたちのて","からだ","でんわ","て"], + "🫲": ["ひだりて","て","ひだり"], + "🫱": ["みぎて","て","みぎ"], + "🫷": ["ひだりをおしているて","じたい","はいたっち","ひだりほうこう","おしつける","ことわる","ていし","まつ"], + "🫸": ["みぎをおしているて","じたい","はいたっち","おしつける","ことわる","みぎほうこう","ていし","まつ"], + "💪": ["まげたじょうわんにとうきん","ちからこぶ","からだ","まんが","うんどう","きんにく","ちから","まっする","まっちょ"], + "🦾": ["めかにかるあーむ","あくせしびりてぃ","ぎしゅ","じんこうそうぐ","からだ"], + "🖕": ["なかゆびをたてたて","からだ","ゆび","て","なかゆび"], + "🫵": ["みているひとをさしているひとさしゆび","さす","あなた","ゆび"], + "✍️": ["かいているて","からだ","て","かく"], + "🤳": ["じどり","かめら","けいたい","うで"], + "💅": ["まにきゅあ","からだ","けあ","けしょうひん","こすめ","つめ","ねいる"], + "🦵": ["あし","からだ","きっく","てあし"], + "🦿": ["きかいのあし","あくせしびりてぃ","ぎそく","じんこうそうぐ","からだ"], + "🦶": ["あし","からだ","きっく","ふみつける"], + "👄": ["くち","からだ","くちびる"], + "🫦": ["かんでいるくちびる","しんぱい","こわい","うわき","しんけいしつ","ふゆかい","ふあん"], + "🦷": ["は","からだ","はいしゃ"], + "👅": ["した","からだ"], + "👂": ["みみ","からだ","はな"], + "🦻": ["ほちょうきをつけているみみ","あくせしびりてぃ","ほちょうき","きく","からだ","みみ"], + "👃": ["はな","からだ"], + "👁️": ["め","からだ"], + "👀": ["め","からだ","かお"], + "🧠": ["のう","からだ","ぞうき","ちてき","かしこい"], + "🫀": ["かいぼうがくてきなしんぞう","かいぼうがく","しんぞうがく","しんぞう","ぞうき","みゃく"], + "🫁": ["はい","いき","こき","きゅうにゅう","ぞうき","こきゅう"], + "🦴": ["ほね","からだ","こっかく"], + "👤": ["じょうはんしんのしるえっと","じょうはんしん","しるえっと"], + "👥": ["じょうはんしんのしるえっと","じょうはんしん","しるえっと"], + "🗣️": ["しゃべるあたまのしるえっと","かお","あたま","しるえっと","しゃべる","はなす"], + "🫂": ["はぐしているひとたち","さようなら","こんにちは","はぐ","ありがとう"], + "👶": ["あかちゃん"], + "👧": ["おんなのこ","しょうじょ","しょじょ","おとめざ","せいざ","こども"], + "🧒": ["こども","ひと","しょうねん","しょうじょ"], + "👦": ["おとこのこ","しょうねん","こども"], + "👩": ["じょせい","おんな"], + "🧑": ["せいじんむけ","ひと","おとな","だんせい","じょせい","おんな","おとこ"], + "👨": ["だんせい","くちひげ","おとこ"], + "👩🦱": ["じょせい","まきげ","かみ","おんな"], + "🧑🦱": ["ひと","まきげ","かみ"], + "👨🦱": ["だんせい","まきげ","かみ","おとこ"], + "👩🦰": ["じょせい","あかげ","あか","かみ","おんな"], + "🧑🦰": ["ひと","あかげ","あか","かみ"], + "👨🦰": ["だんせい","あかげ","あか","かみ","おとこ"], + "👱♀️": ["じょせい","きんぱつ","ぶろんど","かみ","おんな"], + "👱": ["ひと","きんぱつ","ぶろんど","かみ"], + "👱♂️": ["だんせい","きんぱつ","ぶろんど","かみ","おとこ"], + "👩🦳": ["じょせい","はくはつ","しろ","かみ","おんな"], + "🧑🦳": ["ひと","はくはつ","しろ","かみ"], + "👨🦳": ["だんせい","はくはつ","しろ","かみ","おとこ"], + "👩🦲": ["じょせい","はげ","おんな"], + "🧑🦲": ["ひと","はげ"], + "👨🦲": ["だんせい","はげ","おとこ"], + "🧔♀️": ["ひげのあるじょせい","あごひげ","ひげをはやした","じょせい","おんな"], + "🧔": ["あごひげのあるひと","あごひげ","ひげをはやした"], + "🧔♂️": ["ひげのあるだんせい","あごひげ","ひげをはやした","だんせい","おとこ"], + "👵": ["おばあさん","おばあちゃん","ろうじん","じょせい","おんな"], + "🧓": ["こうれいしゃ","ひと","だんせい","じょせい","おんな","おとこ"], + "👴": ["おじいさん","おじいちゃん","ろうじん","おとこ","だんせい"], + "👲": ["すかるきゃっぷをかぶっているひと","ちゅうごくぼう","ぼうし"], + "👳♀️": ["たーばんをまいているじょせい","たーばん","じょせい","おんな"], + "👳": ["たーばんをまいているひと","たーばん"], + "👳♂️": ["たーばんをまいているだんせい","たーばん","おとこ","だんせい"], + "🧕": ["へっどすかーふをかぶったじょせい","へっどすかーふ","ひじゃぶ","まんてぃら","てぃちぇる","ばんだな","あたまのすかーふ","じょせい","おんな"], + "👮♀️": ["じょせいけいさつかん","けいさつかん","けいかん","けいさつ","じょせい","おんな"], + "👮": ["けいさつかん","けいかん","けいさつ"], + "👮♂️": ["だんせいけいさつかん","けいさつかん","けいかん","けいさつ","おとこ","だんせい"], + "👩🚒": ["じょせいしょうぼうし","ひ","かじ","しょうぼう","しょうぼうし","じょせい","おんな"], + "🧑🚒": ["しょうぼうし","かじ"], + "👨🚒": ["だんせいしょうぼうし","ひ","かじ","しょうぼう","しょうぼうし","おとこ","だんせい"], + "👷♀️": ["じょせいのけんせつさぎょういん","こうじ","けんせつ","さぎょういん","じょせい","おんな"], + "👷": ["けんせつさぎょういん","こうじ","けんせつ","さぎょういん"], + "👷♂️": ["だんせいのけんせつさぎょういん","けんせつ","さぎょういん","だんせい","おとこ"], + "👩🏭": ["だんせいのこうじょうさぎょういん","こうじょう","こうぎょう","さぎょういん","じょせい","おんな"], + "🧑🏭": ["こうじょうさぎょういん","こうじょう","こうぎょう","ようせつ"], + "👨🏭": ["だんせいのこうじょうさぎょういん","こうじょう","こうぎょう","さぎょういん","おとこ","だんせい"], + "👩🔧": ["じょせいせいびし","しょくにん","はいかんこう","でんきぎし","しゅうりにん","じょせい","おんな"], + "🧑🔧": ["せいびし","しょくにん","はいかんこう","でんきぎし","しゅうりじん"], + "👨🔧": ["だんせいせいびし","しょくにん","はいかんこう","でんきぎし","しゅうりじん","おとこ","だんせい"], + "👩🌾": ["じょせいののうぎょうじゅうじしゃ","のうじょうろうどうしゃ","ぼくじょうぬし","にわし","のうか","じょせい","おんな"], + "🧑🌾": ["のうぎょうじゅうじしゃ","のうじょうろうどうしゃ","ぼくじょうぬし","にわし","のうか"], + "👨🌾": ["だんせいののうぎょうじゅうじしゃ","のうじょうろうどうしゃ","ぼくじょうぬし","にわし","のうか","おとこ","だんせい"], + "👩🍳": ["じょせいのりょうりにん","しょくひん","さーびす","しぇふ","こっく","りょうりにん","りょうり","じょせい","おんな"], + "🧑🍳": ["りょうりにん","しょくひん","さーびす","しぇふ","こっく","りょうり"], + "👨🍳": ["だんせいのりょうりじん","しょくひん","さーびす","しぇふ","こっく","りょうりにん","りょうり","おとこ","だんせい"], + "👩🎤": ["だんせいしんがー","おんがく","みゅーじしゃん","ろっく","ろっかー","ろっくすたー","げいのうじん","じょせい","おんな"], + "🧑🎤": ["かしゅ","おんがく","みゅーじしゃん","ろっく","ろっかー","ろっくすたー","げいのうじん"], + "👨🎤": ["だんせいしんがー","おんがく","みゅーじしゃん","ろっく","ろっかー","ろっくすたー","げいのうじん","おとこ","だんせい"], + "👩🎨": ["じょせいあーてぃすと","げいじゅつ","あーと","げいじゅつか","あーてぃすと","かいが","がか","じょせい","おんな"], + "🧑🎨": ["あーてぃすと","げいじゅつ","あーと","げいじゅつか","かいが","がか"], + "👨🎨": ["だんせいあーてぃすと","げいじゅつ","あーと","げいじゅつか","あーてぃすと","かいが","がか","おとこ","だんせい"], + "👩🏫": ["じょせいのきょうし","きょういく","せんせい","きょうじゅ","きょうし","こうし","じょせい","おんな"], + "🧑🏫": ["きょうし","きょういく","せんせい","きょうじゅ","こうし"], + "👨🏫": ["だんせいのきょうし","きょういく","せんせい","きょうじゅ","きょうし","こうし","おとこ","だんせい"], + "👩🎓": ["じょしせいと","がくせい","そつぎょうせい","きょういく","がっこう","じょせい","おんな"], + "🧑🎓": ["せいと","がくせい","そつぎょうせい","きょういく","がっこう"], + "👨🎓": ["だんしせいと","がくせい","そつぎょうせい","きょういく","がっこう","おとこ","だんせい"], + "👩💼": ["だんせいかいしゃいん","おふぃす","かいけいし","ぎんこうか","かんりしょく","こもん","じむいん","あなりすと","じょせい","おんな"], + "🧑💼": ["かいしゃいん","おふぃす","かいけいし","ぎんこうか","かんりしょく","こもん","じむいん","あなりすと"], + "👨💼": ["だんせいかいしゃいん","おふぃす","かいけいし","ぎんこうか","かんりしょく","こもん","じむいん","あなりすと","おとこ","だんせい"], + "👩💻": ["じょせいぎじゅつしゃ","てくのろじー","そふとうぇあ","えんじにあ","ぷろぐらまー","らっぷとっぷ","のーとぱそこん","じょせい","おんな"], + "🧑💻": ["ぎじゅつしゃ","てくのろじー","そふとうぇあ","えんじにあ","ぷろぐらまー","らっぷとっぷ","のーとぱそこん"], + "👨💻": ["だんせいぎじゅつしゃ","てくのろじー","そふとうぇあ","えんじにあ","ぷろぐらまー","らっぷとっぷ","のーとぱそこん","おとこ","だんせい"], + "👩🔬": ["じょせいかがくしゃ","かがくしゃ","ぎじゅつしゃ","すうがくしゃ","ぶつりがくしゃ","せいぶつがくしゃ","けんさぎし","じょせい","おんな"], + "🧑🔬": ["かがくしゃ","ぎじゅつしゃ","すうがくしゃ","ぶつりがくしゃ","せいぶつがくしゃ","けんさぎし"], + "👨🔬": ["だんせいかがくしゃ","かがくしゃ","ぎじゅつしゃ","すうがくしゃ","ぶつりがくしゃ","せいぶつがくしゃ","けんさぎし","おとこ","だんせい"], + "👩🚀": ["じょせいうちゅうひこうし","うちゅう","ほし","つき","わくせい","じょせい","おんな"], + "🧑🚀": ["うちゅうひこうし","うちゅう","ほし","つき","わくせい"], + "👨🚀": ["だんせいうちゅうひこうし","うちゅう","ほし","つき","わくせい","おとこ","だんせい"], + "👩⚕️": ["じょせいいりょうかんけいしゃ","いし","ないかい","いがくはかせ","かんごし","しかい","いりょうせんもんか","りょうほうし","じょせい","おんな"], + "🧑⚕️": ["いりょうかんけいしゃ","いし","ないかい","いがくはかせ","かんごし","しかい","いりょうせんもんか","りょうほうし"], + "👨⚕️": ["だんせいいりょうかんけいしゃ","いし","ないかい","いがくはかせ","かんごし","しかい","いりょうせんもんか","りょうほうし","おとこ","だんせい"], + "👩⚖️": ["じょせいさいばんかん","さいばんかん","ほうてい","さいばんしょ","ほうりつ","じょせい","おんな"], + "🧑⚖️": ["さいばんかん","ほうてい","さいばんしょ","ほうりつ"], + "👨⚖️": ["だんせいさいばんかん","さいばんかん","ほうてい","さいばんしょ","ほうりつ","おとこ","だんせい"], + "👩✈️": ["じょせいぱいろっと","ぱいろっと","ひこうき","そうじゅうし","こうくう","じょせい","おんな"], + "🧑✈️": ["ぱいろっと","ひこうき","そうじゅうし","こうくう"], + "👨✈️": ["だんせいぱいろっと","ぱいろっと","ひこうき","そうじゅうし","こうくう","おとこ","だんせい"], + "💂♀️": ["じょせいけいびいん","けいびいん","けいび","じょせい","おんな"], + "💂": ["けいびいん","けいび"], + "💂♂️": ["だんせいけいびいん","けいびいん","けいび","おとこ","だんせい"], + "🥷": ["にんじゃ","せんし","かくされた","すてるす"], + "🕵️♀️": ["じょせいのたんてい","たんてい","けいじ","すぱい","じょせい","おんな"], + "🕵️": ["たんてい","けいじ","すぱい"], + "🕵️♂️": ["だんせいのたんてい","たんてい","けいじ","すぱい","おとこ","だんせい"], + "🤶": ["みせす・くろーす","いべんと","おいわい","くりすます","はは","さんた","くろーす","じょせい","おんな"], + "🧑🎄": ["みくすくろーす","あくてぃびてぃ","おいわい","くりすます","さんた","くろーす"], + "🎅": ["さんたくろーす","いべんと","おいわい","くりすます","ちち","さんた","くろーす","おとこ","だんせい"], + "👼": ["てんしのあかちゃん","てんし","あかちゃん","かお","おとぎばなし","ふぁんたじー"], + "👸": ["おひめさま","おとぎばなし","ふぁんたじー","じょおう","じょせい","おんな"], + "🫅": ["おうかんをかぶったひと","おとぎばなし","ふぁんたじー","こくおう","きぞく","おう","おうぞく"], + "🤴": ["おうじさま","おとぎばなし","ふぁんたじー","おう","おとこ","だんせい"], + "👰": ["べーるをつけたじょせい","はなよめ","べーる","けっこんしき","じょせい","おんな"], + "👰♀️": ["べーるをつけたひと","はなよめ","べーる","けっこんしき"], + "👰♂️": ["べーるをつけただんせい","はなよめ","べーる","うぇでぃんぐ","だんせい","おとこ"], + "🤵♀️": ["たきしーどのじょせい","たきしーど","うぇでぃんぐ","じょせい","おんな"], + "🤵": ["たきしーどをきるひと","はなむこ","たきしーど","うぇでぃんぐ"], + "🤵♂️": ["たきしーどのだんせい","はなむこ","たきしーど","うぇでぃんぐ","だんせい","おとこ"], + "🩷": ["ぴんくのはーと","かわいい","はーと","すき","あい","ぴんく"], + "🩵": ["らいとぶるーのはーと","しあん","はーと","らいとぶるー","こがも"], + "🩶": ["ぐれーのはーと","ぐれー","はーと","しるばー","すれーと"], + "🕴️♀️": ["ちゅうにういたすーつのじょせい","びじねす","すーつ","じょせい","おんな"], + "🕴️": ["ちゅうにういたすーつのひと","びじねす","すーつ"], + "🕴️♂️": ["ちゅうにういたすーつのだんせい","びじねす","すーつ","おとこ","だんせい"], + "🦸♀️": ["じょせいのすーぱーひーろー","くうそう","ぜん","ひろいん","ちょうたいこく","じょせい","おんな"], + "🦸": ["すーぱーひーろー","くうそう","ぜん","ひーろー","ひろいん","ちょうたいこく"], + "🦸♂️": ["だんせいのすーぱーひーろー","くうそう","ぜん","ひーろー","ちょうたいこく","だんせい","おとこ"], + "🦹♀️": ["じょせいのあくとう","くうそう","あく","はんざい","あくじ","ちょうたいこく","あくやく","じょせい","おんな"], + "🦹": ["あくとう","くうそう","あく","はんざい","あくじ","ちょうたいこく","あくやく"], + "🦹♂️": ["だんせいのあくとう","くうそう","あく","はんざい","あくじ","ちょうたいこく","あくやく","だんせい","おとこ"], + "🧙♀️": ["じょせいのまほうつかい","くうそう","まじょ","おんなのまほうつかい","じょせい","おんな"], + "🧙": ["まほうつかい","くうそう","まじゅつし","おとこのまほうつかい"], + "🧙♂️": ["だんせいのまほうつかい","くうそう","まじゅつし","おとこのまほうつかい","だんせい","おとこ"], + "🧝♀️": ["じょせいのこども","くうそう","こども","さきのとがったみみ","じょせい","おんな"], + "🧝": ["こども","くうそう","さきのとがったみみ"], + "🧝♂️": ["だんせいのこども","くうそう","こども","さきのとがったみみ","だんせい","おとこ"], + "🧚♀️": ["じょせいのようせい","くうそう","てぃたーにあ","うぃんぐす","じょせい","おんな"], + "🧚": ["ようせい","くうそう","てぃたーにあ","うぃんぐす"], + "🧚♂️": ["だんせいのようせい","くうそう","おべろん","しょうようせい","だんせい","おとこ"], + "🧞♀️": ["じょせいのせいれい","くうそう","せいれい","じょせい","おんな"], + "🧞": ["せいれい","くうそう"], + "🧞♂️": ["だんせいのせいれい","くうそう","せいれい","だんせい","おとこ"], + "🧜♀️": ["じょせいのにんぎょ","くうそう","じょせい","おんな"], + "🧜": ["にんぎょ","くうそう"], + "🧜♂️": ["だんせいのにんぎょ","くうそう","にんぎょ","だんせい","おとこ"], + "🧌": ["つり","おとぎばなし","ふぁんたじ","もんすたー"], + "🧛♀️": ["じょせいのきゅうけつき","くうそう","あんでっど","じょせい","おんな"], + "🧛": ["きゅうけつき","くうそう","どらきゅら","あんでっど"], + "🧛♂️": ["だんせいのきゅうけつき","くうそう","どらきゅら","あんでっど","だんせい","おとこ"], + "🧟♀️": ["じょせいのぞんび","くうそう","あんでっど","じょせい","おんな"], + "🧟": ["ぞんび","くうそう","あんでっど"], + "🧟♂️": ["だんせいのぞんび","くうそう","あんでっど","だんせい","おとこ"], + "🙇♀️": ["ふかくおじぎするじょせい","しゃざい","おじぎ","じぇすちゃー","ごめんなさい","じょせい","おんな"], + "🙇": ["ふかくおじぎしたひと","しゃざい","おじぎ","じぇすちゃー","ごめんなさい"], + "🙇♂️": ["ふかくおじぎするだんせい","しゃざい","おじぎ","じぇすちゃー","ごめんなさい","おとこ","だんせい"], + "💁♀️": ["あんないするじょせい","て","たすけ","じょうほう","ずうずうしい","じょせい","おんな"], + "💁": ["あんないするひと","て","たすけ","じょうほう","ずうずうしい","じょせい","おんな"], + "💁♂️": ["あんないするだんせい","て","たすけ","じょうほう","ずうずうしい","おとこ","だんせい"], + "🙅♀️": ["NGさいんのじょせい","きんじる","じぇすちゃー","て","だめ","きんし","じょせい","おんな"], + "🙅": ["NGさいんのひと","きんじる","じぇすちゃー","て","だめ","きんし"], + "🙅♂️": ["NGさいんのだんせい","きんじる","じぇすちゃー","て","だめ","きんし","おとこ","だんせい"], + "🙆♀️": ["OKさいんのじょせい","じぇすちゃー","て","ok","じょせい","おんな"], + "🙆": ["OKさいんのひと","じぇすちゃー","て","OK"], + "🙆♂️": ["OKさいんのだんせい","じぇすちゃー","て","ok","おとこ","だんせい"], + "🤷♀️": ["かたをすくめるじょせい","うたがい","むち","むかんしん","かたをすくめる","じょせい","おんな"], + "🤷": ["かたをすくめるひと","うたがい","むち","むかんしん","かたをすくめる"], + "🤷♂️": ["かたをすくめるだんせい","うたがい","むち","むかんしん","かたをすくめる","おとこ","だんせい"], + "🙋♀️": ["かたてをあげてよろこぶじょせい","じぇすちゃー","て","しあわせ","あげる","じょせい","おんな"], + "🙋": ["かたてをあげてよろこぶひと","じぇすちゃー","て","しあわせ","あげる"], + "🙋♂️": ["かたてをあげてよろこぶだんせい","じぇすちゃー","て","しあわせ","あげる","おとこ","だんせい"], + "🤦♀️": ["かおをおさえるじょせい","ふしん","ふんがい","かお","てのひら","じょせい","おんな"], + "🤦": ["てのひらをかおにあてるひと","ふしん","ふんがい","かお","てのひら"], + "🤦♂️": ["がおをおさえるだんせい","ふしん","ふんがい","かお","てのひら","おとこ","だんせい"], + "🧏♀️": ["みみがふじゆうなじょせい","あくせしびりてぃ","みみがふじゆう","じょせい","おんな"], + "🧏": ["みみがふじゆうなひと","あくせしびりてぃ","みみがふじゆう"], + "🧏♂️": ["みみがふじゆうなだんせい","あくせしびりてぃ","みみがふじゆう","だんせい","おとこ"], + "🙎♀️": ["ふくれっつらのじょせい","じぇすちゃー","ふくれっつら","じょせい","おんな"], + "🙎": ["おこったかおのひと","じぇすちゃー","ふくれっつら"], + "🙎♂️": ["ふくれっつらのだんせい","じぇすちゃー","ふくれっつら","おとこ","だんせい"], + "🙍♀️": ["がおをしかめたじょせい","しかめめん","じぇすちゃー","かなしい","じょせい","おんな"], + "🙍": ["ふまんなかおのひと","しかめめん","じぇすちゃー","かなしい"], + "🙍♂️": ["がおをしかめただんせい","しかめめん","じぇすちゃー","かなしい","だんせい","おとこ"], + "💇♀️": ["かみをきられているじょせい","りはつし","びようし","びよう","さんぱつ","へあかっと","びよういん","じょせい","おんな"], + "💇": ["かみをきられているひと","りはつし","びようし","びよう","さんぱつ","へあかっと","びよういん"], + "💇♂️": ["かみをきられているだんせい","りはつし","びようし","びよう","さんぱつ","へあかっと","びよういん","おとこ","だんせい"], + "💆♀️": ["ふぇいすまっさーじをうけるじょせい","まっさーじ","さろん","じょせい","おんな"], + "💆": ["ふぇいすまっさーじをうけるひと","まっさーじ","さろん"], + "💆♂️": ["ふぇいすまっさーじをうけるだんせい","まっさーじ","さろん","おとこ","だんせい"], + "🤰": ["にんぷ","にんしん","あかちゃん","じょせい","おんな","はら","ふくれた","ふっくらした"], + "🫄": ["にんしんしたひと","はら","ふくれた","ふっくらした","にんしん","あかちゃん"], + "🫃": ["にんしんしているだんせい","はら","ふくれた","ふっくらした","にんしん","あかちゃん","だんせい","おとこ"], + "🤱": ["ぼにゅう","むね","あかちゃん","あかんぼう","にゅうじ","ようじ","はは","こども","ほいく","みるく","じょせい","おんな"], + "👩🍼": ["あかちゃんにごはんをあげるじょせい","あかちゃん","にゅうじ","こども","じゅにゅう","みるく","ぼとる","じょせい","おんな"], + "🧑🍼": ["あかちゃんにごはんをあげるひと","あかちゃん","にゅうじ","こども","じゅにゅう","みるく","ぼとる"], + "👨🍼": ["あかちゃんにごはんをあげるだんせい","あかちゃん","にゅうじ","こども","じゅにゅう","みるく","ぼとる","だんせい","おとこ"], + "🧎♀️": ["ひざたちしているじょせい","ひざ","ひざたち","じょせい","おんな"], + "🧎": ["ひざたちしているひと","ひざ","ひざたち"], + "🧎♂️": ["ひざたちしているだんせい","ひざ","ひざたち","だんせい","おとこ"], + "🧍♀️": ["たっているじょせい","たつ","すたんでぃんぐ","じょせい","おんな"], + "🧍": ["たっているひと","たつ","すたんでぃんぐ"], + "🧍♂️": ["たっているだんせい","たつ","すたんでぃんぐ","だんせい","おとこ"], + "🚶♀️": ["あるくじょせい","はいきんぐ","ほこうしゃ","あるく","うぉーきんぐ","じょせい","おんな"], + "🚶": ["あるくひと","はいきんぐ","ほこうしゃ","あるく","うぉーきんぐ"], + "🚶♂️": ["あるくだんせい","はいきんぐ","ほこうしゃ","あるく","うぉーきんぐ","おとこ","だんせい"], + "👩🦯": ["しろつえをもったじょせい","あくせしびりてぃ","めがふじゆう","じょせい","おんな"], + "🧑🦯": ["しろつえをもったひと","あくせしびりてぃ","めがふじゆう"], + "👨🦯": ["しろつえをもっただんせい","あくせしびりてぃ","めがふじゆう","だんせい","おとこ"], + "🏃♀️": ["はしるじょせい","まらそん","らんなー","らんにんぐ","じょせい","おんな"], + "🏃": ["はしるひと","まらそん","らんなー","らんにんぐ"], + "🏃♂️": ["はしるだんせい","まらそん","らんなー","らんにんぐ","おとこ","だんせい"], + "👩🦼": ["でんどうくるまいすにすわっているじょせい","あくせしびりてぃ","くるまいす","じょせい","おんな"], + "🧑🦼": ["でんどうくるまいすにすわっているひと","あくせしびりてぃ","くるまいす"], + "👨🦼": ["でんどうくるまいすにすわっているだんせい","あくせしびりてぃ","くるまいす","だんせい","おとこ"], + "👩🦽": ["しゅどうくるまいすにすわっているじょせい","あくせしびりてぃ","くるまいす","じょせい","おんな"], + "🧑🦽": ["しゅどうくるまいすにすわっているひと","あくせしびりてぃ","くるまいす"], + "👨🦽": ["しゅどうくるまいすにすわっているだんせい","あくせしびりてぃ","くるまいす","だんせい","おとこ"], + "💃": ["じょせいだんさー","だんす","おどる","だんさー","じょせい","おんな"], + "🕺": ["だんせいだんさー","だんす","おどる","だんさー","おとこ","だんせい"], + "👯♀️": ["ばにーがーる","うさぎみみ","だんさー","じょせい","おんな"], + "👯": ["うさぎみみのひと","うさぎみみ","だんさー"], + "👯♂️": ["うさぎみみのだんせい","うさぎみみ","だんさー","おとこ","だんせい"], + "👫": ["しゅをつないだだんじょ","かっぷる","て","つなぐ","おとこ","おんな","だんじょ"], + "👭": ["しゅをつないだじょせい","かっぷる","て","つなぐ","じょせい","おんな","ぷらいど","lgbt","れずびあん"], + "👬": ["しゅをつないだだんせい","かっぷる","て","つなぐ","だんせい","おとこ","ぷらいど","lgbt","げい"], + "🧑🤝🧑": ["しゅをつないだひとたち","かっぷる","て","にぎる"], + "👩❤️👨": ["はーとのかっぷる (じょせい、だんせい)","かっぷる","はーと","あい","れんあい","おとこ","おんな","だんじょ"], + "👩❤️👩": ["はーとのかっぷる (じょせい、じょせい)","かっぷる","はーと","あい","れんあい","じょせい","おんな","ぷらいど","lgbt","れずびあん"], + "💑": ["はーとのかっぷる","かっぷる","はーと","あい","れんあい","おとこ","おんな","だんじょ"], + "👨❤️👨": ["はーとのかっぷる (だんせい、だんせい)","かっぷる","はーと","あい","れんあい","だんせい","おとこ","ぷらいど","lgbt","げい"], + "👩❤️💋👨": ["きす (じょせい、だんせい)","かっぷる","きす","はーと","あい","れんあい","おとこ","おんな","だんじょ"], + "👩❤️💋👩": ["きす (じょせい、じょせい)","かっぷる","きす","はーと","あい","れんあい","じょせい","おんな","ぷらいど","lgbt","げい"], + "💏": ["きす","かっぷる","はーと","あい","れんあい","おとこ","おんな","だんじょ"], + "👨❤️💋👨": ["きす (だんせい、だんせい)","かっぷる","きす","はーと","あい","れんあい","だんせい","おとこ","ぷらいど","lgbt","げい"], + "👪": ["かぞく","ちちおや","ははおや","おとこ","おんな","だんじょ","おとこのこ","こども"], + "👨👩👧": ["かぞく (だんせい、じょせい、おんなのこ)","ちちおや","ははおや","おとこ","おんな","だんじょ","おんなのこ","こども"], + "👨👩👧👦": ["かぞく (だんせい、じょせい、おんなのこ、おとこのこ)","ちちおや","ははおや","おとこ","おんな","だんじょ","おとこのこ","おんなのこ","こども"], + "👨👩👦👦": ["かぞく (だんせい、じょせい、おとこのこ、おとこのこ)","ちちおや","ははおや","おとこ","おんな","だんじょ","おとこのこ","こども"], + "👨👩👧👧": ["かぞく (だんせい、じょせい、おんなのこ、おんなのこ)","ちちおや","ははおや","おとこ","おんな","だんじょ","おんなのこ","こども"], + "👩👩👦": ["かぞく (じょせい、じょせい、おとこのこ)","かぞく","ははおや","じょせい","おんな","おとこのこ","こども","ぷらいど","lgbt","れずびあん"], + "👩👩👧": ["かぞく (じょせい、じょせい、おんなのこ)","かぞく","ははおや","じょせい","おんな","おんなのこ","こども","ぷらいど","lgbt","れずびあん"], + "👩👩👧👦": ["かぞく (じょせい、じょせい、おんなのこ、おとこのこ)","かぞく","ははおや","じょせい","おんな","おとこのこ","おんなのこ","こども","ぷらいど","lgbt","れずびあん"], + "👩👩👦👦": ["かぞく (じょせい、じょせい、おとこのこ、おとこのこ)","かぞく","ははおや","じょせい","おんな","おとこのこ","こども","ぷらいど","lgbt","れずびあん"], + "👩👩👧👧": ["かぞく (じょせい、じょせい、おんなのこ、おんなのこ)","かぞく","ははおや","じょせい","おんな","おんなのこ","こども","ぷらいど","lgbt","れずびあん"], + "👨👨👦": ["かぞく (だんせい、だんせい、おとこのこ)","かぞく","ちちおや","だんせい","おとこ","おとこのこ","こども","ぷらいど","lgbt","げい"], + "👨👨👧": ["かぞく (だんせい、だんせい、おんなのこ)","かぞく","ちちおや","だんせい","おとこ","おんなのこ","こども","ぷらいど","lgbt","げい"], + "👨👨👧👦": ["かぞく (だんせい、だんせい、おんなのこ、おとこのこ)","かぞく","ちちおや","だんせい","おとこ","おとこのこ","おんなのこ","こども","ぷらいど","lgbt","げい"], + "👨👨👦👦": ["かぞく (だんせい、だんせい、おとこのこ、おとこのこ)","かぞく","ちちおや","だんせい","おとこ","おとこのこ","こども","ぷらいど","lgbt","げい"], + "👨👨👧👧": ["かぞく (だんせい、だんせい、おんなのこ、おんなのこ)","かぞく","ちちおや","だんせい","おとこ","おんなのこ","こども","ぷらいど","lgbt","げい"], + "👩👦": ["かぞく(じょせい、おとこのこ)","かぞく","ははおや","じょせい","おんな","おとこのこ","こども"], + "👩👧": ["かぞく(じょせい、おんなのこ)","かぞく","ははおや","じょせい","おんな","おんなのこ","こども"], + "👩👧👦": ["かぞく(じょせい、おんなのこ、おとこのこ)","かぞく","ははおや","じょせい","おんな","だんせい","おんなのこ","おとこのこ","こども"], + "👩👦👦": ["かぞく(じょせい、おとこのこ、おとこのこ)","かぞく","ははおや","じょせい","おんな","おとこのこ","こども"], + "👩👧👧": ["かぞく(じょせい、おんなのこ、おんなのこ)","かぞく","ははおや","じょせい","おんな","おんなのこ","こども"], + "👨👦": ["かぞく(だんせい、おとこのこ)","ちちおや","おとこ","だんせい","おとこのこ","こども"], + "👨👧": ["かぞく(だんせい、おんなのこ)","ちちおや","おとこ","だんじょ","おんなのこ","こども"], + "👨👧👦": ["かぞく(だんせい、おんなのこ、おとこのこ)","ちちおや","おとこ","だんせい","おとこのこ","おんなのこ","こども"], + "👨👦👦": ["かぞく(だんせい、おとこのこ、おとこのこ)","ちちおや","おとこ","だんせい","おとこのこ","こども"], + "👨👧👧": ["かぞく(だんせい、おんなのこ、おんなのこ)","ちちおや","おとこ","だんじょ","おんなのこ","こども"], + "👚": ["れでぃーすうぇあ","ふく","じょせい","おんな"], + "👕": ["てぃーしゃつ","ふく","しゃつ"], + "🥼": ["はくい","ふく","いしゃ","じっけん","かがくしゃ"], + "🦺": ["あんぜんべすと","きんきゅう","あんぜん","べすと"], + "🧥": ["こーと","ふく","じゃけっと"], + "👖": ["じーんず","ふく","ぱんつ","ずぼん"], + "👔": ["ねくたい","ふく"], + "👗": ["どれす","ふく"], + "👘": ["きもの","ふく","わふく"], + "🥻": ["さりー","ふく","どれす"], + "🩱": ["わんぴーす","ふく","みずぎ","すいみんぐうぇあ","すいえい"], + "👙": ["びきに","ふく","すいえい"], + "🩲": ["ぶりーふ","ふく","みずぎ","すいみんぐうぇあ","すいえい","したぎ"], + "🩳": ["しょーつ","ふく","みずぎ","すいみんぐうぇあ","すいえい","したぎ"], + "💄": ["くちべに","けしょうひん","こすめ","けしょう","めいく"], + "💋": ["きすまーく","はーと","きす","くちびる","まーく","れんあい","ろまんす"], + "👣": ["あしあと","からだ","ふく"], + "🧦": ["くつした","ふく","そっくす","いちくみ"], + "🩴": ["ごむせいさんだる","びーち","さんだる","ぞうり"], + "👠": ["はいひーる","ふく","ひーる","くつ","じょせい","おんな"], + "👡": ["れでぃーすさんだる","ふく","さんだる","くつ","じょせい","おんな"], + "👢": ["れでぃーすぶーつ","ぶーつ","ふく","くつ","じょせい","おんな"], + "🥿": ["れでぃーすふらっとしゅーず","ふく","ばれえふらっと","すりっぽん","すりっぱ"], + "👞": ["めんずしゅーず","ふく","だんせい","おとこ","くつ"], + "👟": ["うんどうくつ","うんどう","ふく","しゅーず","すにーかー"], + "🩰": ["ばれえしゅーず","ふく","しゅーず","ばれえ","だんす"], + "🥾": ["はいきんぐぶーつ","ふく","ばっくぱっく","ぶーつ","きゃんぷ","はいきんぐ"], + "🧢": ["きゃっぷ","ふく","やきゅう","はっと","ぼうし"], + "👒": ["れでぃーすはっと","ふく","ぼうし","じょせい","おんな"], + "🎩": ["しるくはっと","あくてぃびてぃ","ふく","えんたーていんめんと","ごらく","ぼうし","とっぷす"], + "🎓": ["そつぎょうしきのかくぼう","あくてぃびてぃ","ぼうし","おいわい","ふく","そつぎょう","はっと"], + "👑": ["かんむり","ふく","おうかん","おう","じょおう"], + "⛑️": ["しろじゅうじのへるめっと","きゅうじょ","じゅうじ","かお","ぼうし","へるめっと"], + "🪖": ["ぐんたいのへるめっと","ぐん","へるめっと","ぐんたい","ぐんじん","へいし"], + "🎒": ["らんどせる","あくてぃびてぃ","かばん","ばっぐ","がくせいかばん","がっこう"], + "👝": ["ぽーち","かばん","ばっぐ","ふく"], + "👛": ["さいふ","ふく","こいん"], + "👜": ["はんどばっぐ","かばん","ばっぐ","ふく"], + "💼": ["ぶりーふけーす"], + "👓": ["めがね","ふく","め","あいうぇあ"], + "🕶️": ["さんぐらす","くらい","め","めがね"], + "🥽": ["ごーぐる","ふく","めのほご","すいえい","ようせつ"], + "🧣": ["すかーふ","ふく","くび"], + "🧤": ["てぶくろ","ふく","て"], + "💍": ["ゆびわ","だいやもんど","れんあい","ろまんす"], + "🌂": ["とじたかさ","ふく","あめ","かさ","てんき"], + "☂️": ["かさ","ふく","あめ","てんき"], + "🐶": ["いぬのかお","けん","いぬ","かお","ぺっと"], + "🐱": ["ねこのかお","ねこ","かお","ぺっと"], + "🐭": ["ねずみのかお","かお","ねずみ"], + "🐹": ["はむすたーのかお","かお","はむすたー","ぺっと"], + "🐰": ["うさぎのかお","ばにー","かお","ぺっと","うさぎ"], + "🐻": ["くまのかお","くま","かお"], + "🧸": ["てでぃべあ","おもちゃ","びろーど","ぬいぐるみ"], + "🐼": ["ぱんだのかお","かお","ぱんだ","くま"], + "🐻❄️": ["しろくま","かお","ほっきょく","くま","しろ"], + "🐨": ["こあら","くま","ゆうぶくろるい","おーすとらりあ"], + "🐯": ["とらのかお","かお","とら"], + "🦁": ["らいおんのかお","かお","ししざ","らいおん","せいざ"], + "🐮": ["うしのかお","うし","かお"], + "🐷": ["ぶたのかお","かお","ぶた"], + "🐽": ["ぶたのはな","かお","はな","ぶた"], + "🐸": ["かえるのかお","かお","かえる"], + "🐵": ["さるのかお","かお","さる"], + "🙈": ["みざる","わるい","かお","きんじる","じぇすちゃー","さる","だめ","きんし","みる"], + "🙉": ["きかざる","わるい","かお","きんじる","じぇすちゃー","きく","さる","ない","なし","きんし"], + "🙊": ["いわざる","わるい","かお","きんじる","じぇすちゃー","さる","ない","なし","きんし","はなす"], + "🐒": ["さる"], + "🦍": ["ごりら"], + "🦧": ["おらんうーたん","るいじんえん"], + "🐔": ["にわとり"], + "🐧": ["ぺんぎん"], + "🐦": ["とり"], + "🐦⬛": ["くろいとり","とり","くろ","からす","わたりがらす","みやまがらす"], + "🐤": ["ひよこ","あかちゃん"], + "🐣": ["ひよこ","あかちゃん","ふか"], + "🐥": ["しょうめんをむいたひよこ","あかちゃん","ひよこ"], + "🐺": ["おおかみのかお","かお","おおかみ"], + "🦊": ["きつねのかお","かお","きつね"], + "🦝": ["あらいぐま","かお","こうきしんがつよい","ずるかしこい"], + "🐗": ["いのしし","ぶた"], + "🐴": ["うまのかお","かお","うま"], + "🦓": ["しまうま","かお"], + "🦒": ["きりん","かお"], + "🦌": ["しか"], + "🫎": ["へらじか","どうぶつ","えだつの","えるく","ほにゅうるい"], + "🦘": ["かんがるー","おーすとらりあ","じゃんぷ","ゆうぶくろるい"], + "🦥": ["たいだ","なまける","おそい"], + "🦦": ["かわうそ","づり","ふざける"], + "🦫": ["びーばー","だむ"], + "🦄": ["ゆにこーんのかお","かお","ゆにこーん"], + "🐝": ["みつばち","はち","こんちゅう"], + "🐛": ["むし","こんちゅう"], + "🦋": ["ちょう","こんちゅう","うつくしい"], + "🐌": ["かたつむり"], + "🪲": ["かぶとむし","むし","こんちゅう"], + "🐞": ["てんとうむし","かぶとむし","こんちゅう","てんとうちゅう"], + "🐜": ["あり","こんちゅう"], + "🦗": ["くりけっと","こおろぎ","ばっため","こんちゅう"], + "🪳": ["ごきぶり","こんちゅう","がいちゅう"], + "🕷️": ["くも","こんちゅう"], + "🕸️": ["くものす","くも","す"], + "🦂": ["さそり","さそりざ","せいざ"], + "🦟": ["か","びょうき","ねつ","こんちゅう","まらりあ","ういるす"], + "🪰": ["はえ","がいちゅう","こんちゅう","うじむし"], + "🪱": ["ぜんちゅう","たまきがたどうぶつ","みみず","きせいちゅう"], + "🦠": ["びせいぶつ","あめーば","ばくてりあ","ういるす"], + "🐢": ["かめ"], + "🐍": ["へび","うんぱんにん","へびつかいざ","せいざ"], + "🦎": ["とかげ","はちゅうるい"], + "🐙": ["たこ"], + "🦑": ["いか","なんたいどうぶつ"], + "🪼": ["くらげ","くすり","むせきついどうぶつ","ぜりー","うみ","いたい","しもう"], + "🦞": ["ろぶすたー","びすく","つめ","しーふーど"], + "🦀": ["かに","かにざ","せいざ"], + "🦐": ["えび","かい","ちいさい"], + "🦪": ["かき","しんじゅ","だいびんぐ"], + "🐠": ["ねったいぎょ","さかな","ねったい"], + "🐟": ["さかな","うおざ","せいざ"], + "🐡": ["ふぐ","さかな"], + "🐬": ["いるか","ひれ"], + "🦈": ["さめ","さかな"], + "🦭": ["あざらし","あしか"], + "🐳": ["しおふきくじら","かお","しおふき","くじら"], + "🐋": ["くじら"], + "🐊": ["わに"], + "🐆": ["ひょう"], + "🐅": ["とら"], + "🐃": ["すいぎゅう","みず"], + "🐂": ["ゆううし","おすうし","おうしざ","せいざ"], + "🐄": ["うし"], + "🦬": ["ばいそん","ばっふぁろー","むれ","ヴぃせんと"], + "🐪": ["ひとこぶらくだ","らくだ","こぶ"], + "🐫": ["ふたこぶらくだ","ふたこぶ","らくだ","こぶ"], + "🦙": ["らま","あるぱか","ぐあなこ","びくーにゃ","うーる"], + "🐘": ["ぞう"], + "🦏": ["さい"], + "🦛": ["かば"], + "🦣": ["まんもす","ぜつめつ","おおがた","きば","けにおおわれた"], + "🐐": ["やぎ","やぎざ","せいざ"], + "🐏": ["こひつじ","おひつじざ","ひつじ","せいざ"], + "🐑": ["ひつじ","めすひつじ"], + "🐎": ["うま","けいば","れーす"], + "🫏": ["ろば","どうぶつ","ぶーろ","ほにゅうるい","らば"], + "🐖": ["ぶた","めすぶた"], + "🦇": ["こうもり","きゅうけつき"], + "🐓": ["おんどり"], + "🦃": ["しちめんちょう(とり)","しちめんちょう","とり"], + "🕊️": ["へいわのはと","とり","はと","ひこう","へいわ"], + "🦅": ["わし","とり"], + "🦆": ["あひる","とり"], + "🪿": ["がちょう","とり","かきん","けいてきのおと"], + "🦢": ["はくちょう","とり","はくちょうのお","みにくいあひるのこ"], + "🦉": ["ふくろう","とり","かしこい"], + "🦩": ["ふらみんご","ねったい","あざやか"], + "🦚": ["おすのくじゃく","とり","めすのくじゃく"], + "🦜": ["おうむ","とり","かいぞく"], + "🦤": ["どーどー","とり","ぜつめつ"], + "🪽": ["はね","てんし","こうくう","とり","ひこう","しんわ"], + "🪶": ["うもう","とり","かるい","はね"], + "🐕": ["いぬ","けん","ぺっと"], + "🦮": ["もうどうけん","あくせしびりてぃ","めがふじゆう","けん","がいど"], + "🐕🦺": ["かいじょいぬ","あくせしびりてぃ","しえん","けん","さーびす"], + "🐩": ["ぷーどる","いぬ","けん"], + "🐈": ["ねこ","ぺっと"], + "🐈⬛": ["くろねこ","くろ","ねこ","ぺっと","はろうぃーん"], + "🐇": ["うさぎ","ばにー","ぺっと"], + "🐀": ["ねずみ"], + "🐁": ["ねずみ"], + "🐿️": ["しまりす"], + "🦨": ["すかんく","あくしゅう","におう"], + "🦡": ["あなぐま","らーてる","ねだる"], + "🦔": ["はりねずみ","かお"], + "🐾": ["どうぶつのあしあと","あし","あと"], + "🐉": ["どらごん","おとぎばなし"], + "🐲": ["どらごんのかお","どらごん","かお","おとぎばなし"], + "🦕": ["りゅうあしるい","ぶらきおさうるす","ぶろんとさうるす","でぃぷろどくす","きょうりゅう"], + "🦖": ["てぃらのさうるす","Tれっくす","きょうりゅう"], + "🌵": ["さぼてん","しょくぶつ"], + "🎄": ["くりすますつりー","あくてぃびてぃ","おいわい","くりすます","えんたーていめんと","つりー"], + "🌲": ["じょうりょくじゅ","じょうりょく","しょくぶつ","はた"], + "🌳": ["らくようじゅ","らくようせい","しょくぶつ","らくよう","はた"], + "🌴": ["やしのき","やし","しょくぶつ","はた"], + "🪴": ["はちうえ","しょくぶつ","かんようしょくぶつ"], + "🌱": ["なえぎ","しょくぶつ","わかい"], + "🌿": ["はーぶ","は","しょくぶつ"], + "☘️": ["くろーばー","しょくぶつ"], + "🍀": ["よっつはのくろーばー","4","くろーばー","よん","は","しょくぶつ"], + "🎍": ["かどまつ","あくてぃびてぃ","たけ","おいわい","にっぽん","まつ","しょくぶつ"], + "🎋": ["ななゆう","あくてぃびてぃ","はた","おいわい","えんたーていめんと","にっぽん"], + "🍃": ["かぜになびくは","ふく","はためく","は","しょくぶつ","ふう"], + "🍂": ["おちば","らっか","は","しょくぶつ"], + "🍁": ["かえでのは","らっか","は","かえで","しょくぶつ"], + "🌾": ["いなほ","いねたば","ほ","しょくぶつ","こめ"], + "🪺": ["たまごのあるす","すづくり","とりのす","たまご"], + "🪹": ["そらのす","すづくり","とりのす"], + "🌺": ["はいびすかす","はな","しょくぶつ"], + "🌻": ["ひまわり","はな","しょくぶつ","たいよう"], + "🌹": ["ばら","はな","しょくぶつ"], + "🥀": ["しおれたはな","はな","しおれた"], + "🌷": ["ちゅーりっぷ","はな","しょくぶつ"], + "🌼": ["はな","しょくぶつ"], + "🌸": ["さくら","はな","しょくぶつ"], + "🪷": ["はす","ぶっきょう","はな","ひんどぅーきょう","いんど","せいじょう","べとなむ"], + "🪻": ["ひあしんす","ぶるーぼんねっと","はな","らべんだー","るぴなす","のうるーず","むらさき","きんぎょそう"], + "💐": ["はなたば","はな","しょくぶつ","ろまんす"], + "🍄": ["きのこ","しょくぶつ"], + "🐚": ["まきがい","かい"], + "🪸": ["さんご","たいよう","しょう"], + "🌎": ["あめりかたいりく","あめりか","ちきゅう","せかい"], + "🌍": ["よーろっぱとあふりかちいき","あふりか","ちきゅう","よーろっぱ","せかい"], + "🌏": ["あじあとおーすとらりあ","あじあ","おーすとらりあ","ちきゅう","せかい"], + "🌕": ["まんげつ","つき","うちゅう","てんき"], + "🌖": ["ねまちのつき","じゅうさんや","つき","うちゅう","かけ","てんき"], + "🌗": ["かげんのつき","つき","げん","うちゅう","てんき"], + "🌘": ["かけていくみかづき","さんじつげつ","つき","うちゅう","かけ","てんき"], + "🌑": ["しんげつ","かい","つき","うちゅう","てんき"], + "🌒": ["みちていくみかづき","さんじつげつ","つき","うちゅう","じょうげん","てんき"], + "🌓": ["じょうげんのつき","つき","げん","うちゅう","てんき"], + "🌔": ["じゅうさんやつき","じゅうさんや","つき","うちゅう","じょうげん","てんき"], + "🌙": ["さんじつげつ","つき","うちゅう","てんき"], + "🌚": ["かおつきしんげつ","かお","つき","うちゅう","てんき"], + "🌝": ["かおつきまんげつ","あかるい","かお","みちた","つき","うちゅう","てんき"], + "🌛": ["かおつきじょうげんのつき","かお","つき","げん","うちゅう","てんき"], + "🌜": ["がおがあるかげんのつき","かお","つき","げん","うちゅう","てんき"], + "⭐️": ["ちゅうくらいのほし","ほし"], + "🌟": ["ひかるほし","きらめき","あかいひかり","かがやく","かがやき","ほし"], + "💫": ["くらくら","まんが","めまい","ほし"], + "✨": ["きらきら","えんたーていめんと","かがやき","ほし"], + "☄️": ["すいせい","うちゅう"], + "🪐": ["たまきのあるわくせい","うちゅう","わくせい","どせい"], + "🌞": ["かおつきたいよう","あかるい","かお","うちゅう","たいよう","てんき"], + "☀️": ["たいようのひかり","あかるい","こうせん","うちゅう","たいよう","せいてん","てんき"], + "🌤️": ["たいようとちいさなくも","くも","たいよう","てんき"], + "⛅️": ["はれときどきくもり","くも","たいよう","てんき"], + "🌥️": ["はれのちくもり","くも","たいよう","てんき"], + "🌦️": ["はれのちくもりときどきあめ","くも","あめ","たいよう","てんき"], + "☁️": ["くも","てんき"], + "🌧️": ["あまぐも","くも","あめ","てんき"], + "⛈️": ["らいう","くも","あめ","かみなり","てんき"], + "🌩️": ["らいうん","くも","かみなり","てんき"], + "⚡️": ["だかでんあつきごう","きけん","でんき","かみなり","でんあつ","びりびり"], + "🔥": ["えん","ひ","どうぐ"], + "💥": ["しょうとつまーく","どかーん","しょうとつ","まんが"], + "❄️": ["せつのけっしょう","つめたい","ゆき","てんき"], + "🌨️": ["ゆきぐも","くも","れい","ゆき","てんき"], + "☃️": ["ゆきだるま","れい","ゆき","てんき"], + "⛄️": ["ゆきだるま","れい","ゆき","てんき"], + "🌬️": ["かぜがふいている","かぜがふく","くも","かお","てんき","ふう"], + "💨": ["だっしゅ","まんが","はしる"], + "🌪️": ["たつまきぐも","くも","たつまき","てんき","せんぷう"], + "🌫️": ["きり","くも","てんき"], + "🌈": ["にじ","あめ","れいんぼー","てんき","ぷらいど","lgbt"], + "☔️": ["うとかさ","いるい","しずく","あめ","かさ","てんき"], + "💧": ["しずく","ぞっとする","まんが","したたり","あせ","てんき"], + "💦": ["あせまーく","まんが","ぬれている","あせ"], + "🌊": ["なみ","うみ","みず","てんき"], + "🍏": ["あおりんご","りんご","ふるーつ","くだもの","みどり","しょくぶつ"], + "🍎": ["あかいりんご","りんご","ふるーつ","くだもの","しょくぶつ","あか"], + "🍐": ["なし","ふるーつ","くだもの","しょくぶつ"], + "🍊": ["みかん","ふるーつ","くだもの","おれんじ","しょくぶつ","あかだいだいいろ"], + "🍋": ["れもん","かんきつるい","ふるーつ","くだもの","しょくぶつ"], + "🍌": ["ばなな","ふるーつ","くだもの","しょくぶつ"], + "🍉": ["すいか","ふるーつ","くだもの","しょくぶつ"], + "🍇": ["ぶどう","ふるーつ","くだもの","しょくぶつ"], + "🍓": ["いちご","べりー","ふるーつ","くだもの","しょくぶつ"], + "🍈": ["めろん","ふるーつ","くだもの","しょくぶつ"], + "🍒": ["さくらんぼ","ふるーつ","くだもの","しょくぶつ"], + "🫐": ["ぶるーべりー","べりー","びるべりー","あお","ふるーつ"], + "🍑": ["もも","ふるーつ","くだもの","しょくぶつ"], + "🥭": ["まんごー","ねったい","ふるーつ"], + "🍍": ["ぱいなっぷる","ふるーつ","くだもの","しょくぶつ"], + "🥥": ["ここなっつ","ふるーつ"], + "🥝": ["きういふるーつ","ふるーつ","くだもの","きうい"], + "🍅": ["とまと","しょくぶつ","やさい"], + "🥑": ["あぼかど","ふるーつ","くだもの"], + "🫒": ["おりーぶ","ふるーつ"], + "🍆": ["なす","なすび","しょくぶつ","やさい"], + "🌶️": ["とうがらし","からい","こしょう","しょくぶつ"], + "🫑": ["ぴーまん","とうがらし","こしょう","しょくぶつ","やさい"], + "🥒": ["きゅうり","ぴくるす","やさい"], + "🥬": ["はっぱのみどり","ちんげんさい","きゃべつ","けーる","れたす"], + "🥦": ["ぶろっこりー","やさい"], + "🫛": ["えんどうまめのさや","まめ","えだまめ","まめか","えんどうまめ","さや","やさい"], + "🧄": ["にんにく","やさい","しょくぶつ","こうみりょう"], + "🧅": ["たまねぎ","やさい","しょくぶつ","こうみりょう"], + "🌽": ["とうもろこし","こーん","しょくぶつ"], + "🥕": ["にんじん","やさい"], + "🥗": ["ぐりーんさらだ","みどり","さらだ"], + "🥔": ["じゃがいも","やさい"], + "🍠": ["やきいも","じゃがいも","やき","すいーつ"], + "🌰": ["くり","しょくぶつ"], + "🥜": ["ぴーなっつ","なっつ","やさい"], + "🫘": ["まめ","たべもの","じんぞう"], + "🍯": ["はにーぽっと","はちみつ","ぽっと","すいーつ"], + "🍞": ["ぱん","ろーふ"], + "🥐": ["くろわっさん","ぱん","さんじつげつ","ろーる","ふれんち"], + "🥖": ["ふらんすぱん","ぱん","ふれんち"], + "🫓": ["ふらっとぶれっど","あれぱ","らヴぁしゅ","なん","ぴた"], + "🥨": ["ぷれっつぇる","そふとぷれっつぇる","ぷれっつぇるついすと","ぱん"], + "🥯": ["べーぐる","ぱん","くりーむちーず","ひとぬり"], + "🥞": ["ぱんけーき","くれーぷ","ほっとけーき"], + "🧇": ["わっふる","ほっとけーき"], + "🧀": ["ちーず"], + "🍗": ["たーきー","ほね","にわとり","あし","かきん"], + "🍖": ["ほねつきにく","ほね","にく"], + "🥩": ["いちきれのにく","にく","きりみ","らむちょっぷ","ぶた","すてーき"], + "🍤": ["えびふらい","ふらい","えび","こえび","てんぷら"], + "🥚": ["たまご"], + "🍳": ["りょうり","たまご","ふらいぱん","なべ"], + "🥓": ["べーこん","にく"], + "🍔": ["はんばーがー","ばーがー"], + "🍟": ["ふらいどぽてと","ふらいど","ぽてと"], + "🌭": ["ほっとどっぐ","ふらんくふるとそーせーじ","ほっとどっぐそーせーじ","そーせーじ","うぃんなー","れっどほっと"], + "🍕": ["ぴざ","ちーず","1まい"], + "🍝": ["すぱげってぃ","ぱすた"], + "🥪": ["さんどうぃっち","ぱん","やさい","ちーず","にく","でり"], + "🌮": ["たこす","めきしこ"], + "🌯": ["ぶりとー","めきしこ"], + "🫔": ["たまーれ","たまーり","めきしかん","つつまれた"], + "🥙": ["ふらっとぶれっどさんど","ふぁらふぇる","ふらっとぶれっど","じゃいろ","けばぶ","つめもの"], + "🧆": ["ふぁらふぇる","ひよこまめ"], + "🍜": ["どんぶり","めん","らーめん","むしかねつ","すーぷ"], + "🥘": ["ぱえりあ","きゃせろーる","なべ","あさい"], + "🍲": ["なべ","しちゅー"], + "🫕": ["ふぉんでゅ","ちーず","ちょこれーと","ふぉでゅ","とけた","ぽっと","すいす"], + "🥫": ["かんづめ","ほぞんようしょくひん"], + "🫙": ["びん","こうしんりょう","ようき","そら","そーす","ちょぞう"], + "🧂": ["しお","こうしんりょう","しぇーかー"], + "🧈": ["ばたー","にゅうせいひん"], + "🫚": ["しょうが","びーる","ね","すぱいす"], + "🍥": ["なると","こけいのたべもの","さかな","ねりもの"], + "🍣": ["すし"], + "🍱": ["べんとうばこ","べんとう","はこ"], + "🍛": ["かれーらいす","かれー","ごはん"], + "🍙": ["おにぎり","にっぽん","こめ"], + "🍚": ["ごはん","りょうり","こめ"], + "🍘": ["せんべい","こめ"], + "🥟": ["ぎょうざ"], + "🍢": ["おでん","しーふーど","くし","すてぃっく"], + "🍡": ["だんご","でざーと","にっぽん","くし","すてぃっく","すいーつ"], + "🍧": ["かきごおり","でざーと","こおり","すいーつ"], + "🍨": ["あいすくりーむ","くりーむ","でざーと","こおり","すいーつ"], + "🍦": ["そふとくりーむ","くりーむ","でざーと","こおり","あいすくりーむ","そふと","すいーつ"], + "🍰": ["しょーとけーき","けーき","でざーと","ぺいすとりー","すらいす","すいーつ"], + "🎂": ["ばーすでーけーき","たんじょうび","けーき","おいわい","でざーと","ぺいすとりー","すいーつ"], + "🧁": ["かっぷけーき","べーかりー","すいーつ","でざーと","ぺいすとりー"], + "🥧": ["ぱい","でざーと","すいーつ"], + "🍮": ["かすたーど","でざーと","ぷりん","すいーつ"], + "🍭": ["ぺろぺろきゃんでぃー","きゃんでぃ","でざーと","ろりぽっぷきゃんでぃ","すいーつ"], + "🍬": ["あめ","でざーと","すいーつ"], + "🍫": ["ちょこれーと","ばー","でざーと","すいーつ"], + "🍿": ["ぽっぷこーん"], + "🍩": ["どーなつ","でざーと","すいーつ"], + "🍪": ["くっきー","でざーと","あまい"], + "🥠": ["おみくじいりくっきー","ふぉーちゅんくっきー"], + "🥮": ["げっぺい","あき","まつり"], + "☕️": ["ほっとどりんく","いんりょう","こーひー","のみもの","あたたかい","じょうき","おちゃ"], + "🍵": ["ゆのみ","いんりょう","かっぷ","のみもの","おちゃ"], + "🫖": ["てぃーぽっと","どりんく","ぽっと","てぃー","けとる"], + "🥣": ["ぼうるとすぷーん","ちょうしょく","しりある","おかゆ","おーとみーる","ぽりっじ","しょっき"], + "🍼": ["ほにゅうびん","あかちゃん","ぼとる","どりんく","みるく"], + "🥤": ["かっぷとすとろー","じゅーす","そーだ","もると","そふとどりんく","みず","しょっき"], + "🧋": ["たぴおかてぃー","ばぶる","みるく","ぱーる","てぃー","ぼば","たぴおか","もみ"], + "🧃": ["いんりょうぼっくす","じゅーす","いんりょう","ぼっくす","どりんく","すとろー"], + "🧉": ["まて","どりんく","ぼんびりや","いえるば"], + "🥛": ["こっぷにはいったぎゅうにゅう","どりんく","ぐらす","みるく"], + "🫗": ["ながれこむえきたい","のみもの","そら","ぐらす","こぼれる"], + "🍺": ["びーる","ばー","のむ","まぐかっぷ"], + "🍻": ["かんぱい","ばー","びーる","かちん","のみもの","まぐかっぷ"], + "🍷": ["わいんぐらす","ばー","いんりょう","のみもの","ぐらす","わいん"], + "🥂": ["ぐらすでかんぱい","いわう","かちん","のみもの","ぐらす"], + "🥃": ["たんぶらー","ぐらす","て","しょっと","ういすきー","うぃすきー","ばーぼん"], + "🍸": ["かくてるぐらす","ばー","かくてる","のみもの","ぐらす"], + "🍹": ["とろぴかるどりんく","ばー","のみもの","とろぴかる"], + "🍾": ["びんととびだすせん","ばー","ぼとる","しゃんぱん","しゃんぺん","しゃんぱーにゅ","こるく","のみもの","とびだす","ぱーてぃー"], + "🍶": ["とっくりとおちょこ","ばー","いんりょう","ぼとる","かっぷ","のみもの","て"], + "🧊": ["かくこおり","こおり","りっぽうたい","つめたい","ひょうざん"], + "🥄": ["すぷーん","しょっき"], + "🍴": ["ふぉーくとないふ","ちょうり","ふぉーく","ないふ","しょっき"], + "🍽️": ["ふぉーくとないふとぷれーと","ちょうり","ふぉーく","ないふ","ぷれーと","しょっき"], + "🥢": ["はし"], + "🥡": ["ていくあうとぼっくす","ていくあうと","ようき","おもちかえり"], + "⚽️": ["さっかーぼーる","ぼーる","さっかー"], + "🏀": ["ばすけっとぼーる","ぼーる","ばすけっとりんぐ"], + "🏈": ["あめりかんふっとぼーる","あめりかん","ぼーる","ふっとぼーる"], + "⚾️": ["やきゅう","ぼーる"], + "🥎": ["そふとぼーる","ぼーる","しあい","すぽーつ"], + "🎾": ["てにすぼーる","ぼーる","らけっと","てにす"], + "🏐": ["ばれーぼーる","ぼーる","しあい"], + "🏉": ["らぐびー","ぼーる","ふっとぼーる"], + "🎱": ["びりやーど","8","えいとぼーる","ぼーる","えいと","げーむ"], + "🥏": ["そらとぶえんばん","でぃすく","あるてぃめっと","ごるふ","しあい","すぽーつ","ふりすびー"], + "🪃": ["ぶーめらん","おーすとらりあ","ぎゃくもどり","はねかえり"], + "🏓": ["たっきゅうのらけっととぼーる","ぼーる","ばっと","しあい","ぱどる","たっきゅう"], + "🏸": ["ばどみんとんのらけっととしゃとる","ばどみんとん","ばーでぃー","しあい","らけっと","しゃとる"], + "🥅": ["ごーるねっと","ごーる","ねっと"], + "🏒": ["あいすほっけーのすてぃっくとぱっく","しあい","ほっけー","こおり","ぱっく","すてぃっく"], + "🏑": ["ふぃーるどほっけーのすてぃっくとぼーる","ぼーる","ふぃーるど","しあい","ほっけー","すてぃっく"], + "🏏": ["くりけっとのばっととぼーる","ぼーる","ふぃーるど","くりけっと","しあい"], + "🥍": ["らくろす","ぼーる","すてぃっく","しあい","すぽーつ"], + "🥌": ["かーりんぐすとーん","かーりんぐ","すとーん"], + "⛳️": ["ごるふのかっぷ","ぴんふらっぐ","ごるふ","ほーる"], + "🏹": ["ゆみや","しゃしゅ","や","ゆみ","しゃしゅざ","どうぐ","せいざ"], + "🎣": ["つりざおとさかな","えんたーていめんと","さかな","ぼう"], + "🤿": ["だいびんぐますく","だいびんぐ","すきゅーば","しゅのーける"], + "🥊": ["ぼくしんぐぐろーぶ","ぼくしんぐ","ぐろーぶ"], + "🥋": ["どうぎ","じゅうどう","からて","ぶどう","てこんどー","ゆにふぉーむ"], + "⛸️": ["あいすすけーと","こおり"], + "🎿": ["すきーとすきーぶーつ","すきー","ゆき"], + "🛷": ["そり","るーじゅ","とぼがん"], + "⛷️": ["すきー","ゆき"], + "🏂": ["すのーぼーだー","すきー","ゆき","すのーぼーど"], + "🏋️♀️": ["うえいとをもちあげるじょせい","あげ","じゅうりょう","じょせい","おんな"], + "🏋️": ["うえいとをもちあげるひと","あげ","じゅうりょう"], + "🏋️♂️": ["うえいとをもちあげるだんせい","あげ","じゅうりょう","おとこ","だんせい"], + "🤺": ["ふぇんしんぐをするひと","けんし","けんじゅつ","けん"], + "🤼♀️": ["れすりんぐをするじょせい","れすりんぐ","れすりんぐせんしゅ","じょせい","おんな"], + "🤼": ["れすりんぐをするひとたち","れすりんぐ","れすりんぐせんしゅ"], + "🤼♂️": ["れすりんぐをするだんせい","れすりんぐ","れすりんぐせんしゅ","おとこ","だんせい"], + "🤸♀️": ["そくてんをするじょせい","そくほうてんかい","たいそう","じょせい","おんな"], + "🤸": ["そくてんをするひと","そくほうてんかい","たいそう"], + "🤸♂️": ["そくてんをするだんせい","そくほうてんかい","たいそう","おとこ","だんせい"], + "⛹️♀️": ["ぼーるをばうんどさせるじょせい","ぼーる","じょせい","おんな"], + "⛹️": ["ぼーるをばうんどさせるひと","ぼーる"], + "⛹️♂️": ["ぼーるをばうんどさせるだんせい","ぼーる","おとこ","だんせい"], + "🤾♀️": ["はんどぼーるをするじょせい","ぼーる","はんどぼーる","じょせい","おんな"], + "🤾": ["はんどぼーるをするひと","ぼーる","はんどぼーる"], + "🤾♂️": ["はんどぼーるをするだんせい","ぼーる","はんどぼーる","おとこ","だんせい"], + "🧗♀️": ["くらいみんぐしているじょせい","くらいみんぐ","ろっく","じょせい","おんな"], + "🧗": ["くらいみんぐしているひと","くらいみんぐ","ろっく"], + "🧗♂️": ["くらいみんぐしているだんせい","くらいみんぐ","ろっく","だんせい","おとこ"], + "🏌️♀️": ["ごるふをするじょせい","ぼーる","ごるふ","ごるふぁー","ごるふする","じょせい","おんな"], + "🏌️": ["ごるふをするひと","ぼーる","ごるふ","ごるふぁー","ごるふする"], + "🏌️♂️": ["ごるふをするだんせい","ぼーる","ごるふ","ごるふぁー","ごるふする","おとこ","だんせい"], + "🧘♀️": ["れんげざのじょせい","めいそう","よが","せいおん","じょせい","おんな"], + "🧘": ["れんげざのひと","めいそう","よが","せいおん"], + "🧘♂️": ["れんげざのだんせい","めいそう","よが","せいおん","だんせい","おとこ"], + "🧖♀️": ["すちーむるーむにいるじょせい","さうな","すちーむるーむ","はまむ","すちーむばす","じょせい","おんな"], + "🧖": ["すちーむるーむにいるひと","さうな","すちーむるーむ","はまむ","すちーむばす"], + "🧖♂️": ["すちーむるーむにいるだんせい","さうな","すちーむるーむ","はまむ","すちーむばす","だんせい","おとこ"], + "🏄♀️": ["さーふぃんをするじょせい","さーふぁー","さーふぃん","なみのり","じょせい","おんな"], + "🏄": ["さーふぃんをするひと","さーふぁー","さーふぃん","なみのり"], + "🏄♂️": ["さーふぃんをするだんせい","さーふぁー","さーふぃん","なみのり","おとこ","だんせい"], + "🏊♀️": ["およぐじょせい","およぐ","すいえい","じょせい","おんな"], + "🏊": ["すいえいをするひと","およぐ","すいえい"], + "🏊♂️": ["およぐだんせい","およぐ","すいえい","おとこ","だんせい"], + "🤽♀️": ["すいきゅうをするじょせい","ぽろ","みず","すいきゅう","じょせい","おんな"], + "🤽": ["すいきゅうをするひと","ぽろ","みず","すいきゅう"], + "🤽♂️": ["すいきゅうをするだんせい","ぽろ","みず","すいきゅう","おとこ","だんせい"], + "🚣♀️": ["ぼーとをこぐじょせい","ぼーと","こぎぶね","のりもの","そうてい","じょせい","おんな"], + "🚣": ["ぼーとをこぐひと","ぼーと","こぎぶね","のりもの","そうてい"], + "🚣♂️": ["ぼーとをこぐだんせい","ぼーと","こぎぶね","のりもの","そうてい","おとこ","だんせい"], + "🏇": ["けいば","うま","きしゅ","きょうそうば"], + "🚴♀️": ["じてんしゃにのるじょせい","じてんしゃ","じてんしゃのり","じてんしゃにのるひと","さいくりすと","じょせい","おんな"], + "🚴": ["じてんしゃにのるひと","じてんしゃ","じてんしゃのり","さいくりすと"], + "🚴♂️": ["じてんしゃにのるだんせい","じてんしゃ","じてんしゃのり","じてんしゃにのるひと","さいくりすと","おとこ","だんせい"], + "🚵♀️": ["まうんてんばいくにのるじょせい","まうんてんばいくらいだー","くろすばいく","じてんしゃ","じてんしゃのり","じてんしゃにのるひと","さいくりすと","やま","じょせい","おんな"], + "🚵": ["まうんてんばいくにのるひと","まうんてんばいくらいだー","くろすばいく","じてんしゃ","じてんしゃのり","じてんしゃにのるひと","やま"], + "🚵♂️": ["まうんてんばいくにのるだんせい","まうんてんばいくらいだー","くろすばいく","じてんしゃ","じてんしゃのり","じてんしゃにのるひと","さいくりすと","やま","おとこ","だんせい"], + "🎽": ["らんにんぐしゃつとたすき","らんにんぐ","たすき","しゃつ"], + "🎖️": ["くんしょう","おいわい","めだる","ぐんじ"], + "🏅": ["すぽーつのめだる","めだる"], + "🥇": ["きんめだる","1い","きん","めだる","1","だい1い"], + "🥈": ["ぎんめだる","めだる","2い","ぎん","2","だい2い"], + "🥉": ["どうめだる","どう","めだる","3い","3","だい3い"], + "🏆": ["とろふぃー","しょう"], + "🏵️": ["ばらかざり","しょくぶつ"], + "🎗️": ["りまいんだーりぼん","おいわい","りまいんだー","りぼん"], + "🎫": ["きっぷ","あくてぃびてぃ","にゅうじょうりょう","えんたーていめんと","ちけっと"], + "🎟️": ["にゅうじょうけん","にゅうじょうりょう","えんたーていめんと","ちけっと"], + "🎪": ["さーかすごや","あくてぃびてぃ","さーかす","えんたーていめんと","てんと"], + "🤹♀️": ["じゃぐりんぐをするじょせい","てんびん","じゃぐりんぐ","じょせい","おんな"], + "🤹": ["じゃぐりんぐをするひと","ばらんす","じゃぐりんぐ"], + "🤹♂️": ["じゃぐりんぐをするだんせい","てんびん","じゃぐりんぐ","だんせい","おとこ"], + "🎭": ["ぶたいげいじゅつ","あくてぃびてぃ","げいじゅつ","えんたーていめんと","かめん","ぶたい","しあたー"], + "🎨": ["えのぐぱれっと","あくてぃびてぃ","あーと","えんたーていめんと","びじゅつかん","かいが","ぱれっと"], + "🎬": ["かちんこ","あくてぃびてぃ","えんたーていめんと","えいが"], + "🎤": ["まいく","あくてぃびてぃ","えんたーていめんと","からおけ","まいくろふぉん"], + "🎧": ["へっどほん","あくてぃびてぃ","いやほん","えんたーていめんと","へっどふぉん"], + "🎼": ["がくふ","あくてぃびてぃ","えんたーていめんと","おんがく"], + "🎹": ["けんばん","あくてぃびてぃ","えんたーていめんと","がっき","きーぼーど","おんがく","ぴあの"], + "🪗": ["あこーでぃおん","こんさーてぃーな","すくいーずぼっくす"], + "🥁": ["どらむ","どらむすてぃっく","おんがく"], + "🪘": ["ながいどらむ","びーと","こんが","どらむ","りずむ","じゃんべ"], + "🪇": ["まらかす","いわう","がっき","おんがく","そうおん","だがっき","がたがた","りずむ","しぇいく"], + "🎷": ["さっくす","あくてぃびてぃ","えんたーていめんと","がっき","おんがく","さくそふぉーん"], + "🎺": ["とらんぺっと","あくてぃびてぃ","えんたーていめんと","がっき","おんがく"], + "🪈": ["ふるーと","たけ","よこぶえそうしゃ","ふるーとそうしゃ","おんがく","ぱいぷ","りこーだー","ふく","もっかんがっき"], + "🎸": ["ぎたー","あくてぃびてぃ","えんたーていめんと","がっき","おんがく"], + "🪕": ["ばんじょー","あくてぃびてぃ","えんたーていめんと","がっき","おんがく"], + "🎻": ["ばいおりん","あくてぃびてぃ","えんたーていめんと","がっき","おんがく"], + "🎲": ["さいころ","さい","えんたーていめんと","げーむ"], + "🧩": ["ぱずるのぴーす","てがかり","かみあう","ぴーす","ぱずる","じぐそー"], + "♟️": ["ちぇすのぽーん","ちぇす","こま","げーむ","すてこま"], + "🎯": ["てきちゅう","あくてぃびてぃ","ぶる","ぶるずあい","だーつ","えんたーていめんと","め","しあい","ひっと","ひょうてき"], + "🎳": ["ぼうりんぐ","ぼーる","しあい"], + "🪀": ["よーよー","おもちゃ","じょうげ"], + "🪁": ["たこ","おもちゃ","とぶ","まう"], + "🛝": ["すべりだい","ゆうえんち","あそび"], + "🎮": ["てれびげーむ","こんとろーらー","えんたーていめんと","げーむ","びでおげーむ"], + "👾": ["えいりあん","うちゅうじん","かいじゅう","いせいじん","かお","おとぎばなし","ふぁんたじー","もんすたー","うちゅう","UFO"], + "🎰": ["すろっとましん","あくてぃびてぃ","げーむ","すろっと"], + "🚗": ["じどうしゃ","くるま","のりもの"], + "🚙": ["きゃんぴんぐかー","れくりえーしょん","RV","のりもの"], + "🚕": ["たくしー","のりもの"], + "🛺": ["おーとりきしゃ","じんりきしゃ","とぅくとぅく"], + "🚌": ["ばす","のりもの"], + "🚎": ["とろりーばす","ばす","ろめんでんしゃ","しがいでんしゃ","のりもの"], + "🏎️": ["れーしんぐかー","くるま","きょうそう"], + "🚓": ["ぱとかー","くるま","ぱとろーる","けいさつ","のりもの"], + "🚑": ["きゅうきゅうしゃ","のりもの"], + "🚒": ["しょうぼうしゃ","えんじん","えん","とらっく","のりもの"], + "🚐": ["まいくろばす","ばす","のりもの"], + "🛻": ["ぴっくあっぷとらっく","ぴっくあっぷ","とらっく","のりもの"], + "🚚": ["はいたつようとらっく","はいたつ","とらっく","のりもの"], + "🚛": ["とれーらー","おおがたとらっく","せみ","とらっく","のりもの"], + "🚜": ["とらくたー","のりもの"], + "🏍️": ["れーすばいく","おーとばい","れーす"], + "🛵": ["すくーたー","もーたー"], + "🚲": ["じてんしゃ","ばいく","のりもの"], + "🦼": ["でんどうくるまいす","あくせしびりてぃ","くるまいす"], + "🦽": ["しゅどうくるまいす","あくせしびりてぃ","くるまいす"], + "🛴": ["きっくぼーど","きっく","すくーたー"], + "🛹": ["すけぼー","すけーと","ぼーど"], + "🛼": ["ろーらーすけーと","ろーらー","すけーと"], + "🛞": ["しゃりん","えん","たいや","かいてん"], + "🚨": ["ぱとらいと","くるま","ひかり","けいさつ","かいてん","のりもの","さいれん","けいこく"], + "🚔": ["ぱとかー","くるま","たいこうしゃ","けいさつ","のりもの"], + "🚍": ["ばす","たいこうしゃ","のりもの"], + "🚘": ["たいこうしゃ","じどうしゃ","くるま","のりもの"], + "🚖": ["たくしー","たいこうしゃ","のりもの"], + "🚡": ["ろーぷうぇい","くうちゅう","けーぶる","くるま","ごんどら","とらむうぇい","のりもの"], + "🚠": ["ろーぷうぇい","けーぶる","ごんどら","やま","のりもの"], + "🚟": ["こうかてつどう","てつどう","のりもの"], + "🚃": ["てつどうしゃりょう","くるま","でんき","てつどう","れっしゃ","ろめん","とろりーばす","のりもの"], + "🚋": ["ろめんでんしゃ","くるま","ろめん","とろりーばす","のりもの"], + "🚝": ["ものれーる","のりもの"], + "🚄": ["しんかんせん","てつどう","こうそく","れっしゃ","のりもの"], + "🚅": ["しんかんせん","だんがん","てつどう","こうそく","れっしゃ","のりもの"], + "🚈": ["らいとれーる","てつどう","のりもの"], + "🚞": ["さんがくてつどう","くるま","やま","てつどう","のりもの"], + "🚂": ["じょうききかんしゃ","えんじん","きかんしゃ","てつどう","じょうき","れっしゃ","のりもの"], + "🚆": ["でんしゃ","せんろ","のりもの"], + "🚇": ["ちかてつ","めとろ","のりもの"], + "🚊": ["ろめんでんしゃ","とろりーばす","のりもの"], + "🚉": ["えき","せんろ","でんしゃ","のりもの"], + "🚁": ["へりこぷたー","のりもの"], + "🛩️": ["こがたこうくうき","ひこうき","のりもの"], + "✈️": ["ひこうき","のりもの"], + "🛫": ["ひこうきのりりく","ひこうき","ちぇっくいん","しゅっぱつ","のりもの"], + "🛬": ["ひこうきのちゃくりく","ひこうき","とうちゃく","ちゃくりく","のりもの"], + "🪂": ["ぱらしゅーと","ぱらせーる","すかいだいぶ","はんぐぐらいだー"], + "💺": ["ざせき","いす"], + "🛰️": ["さてらいと","えいせい","うちゅう","のりもの"], + "🚀": ["ろけっと","うちゅう","のりもの"], + "🛸": ["そらとぶえんばん","UFO","うちゅうじん","いほしじん","うちゅう","くうそう"], + "🛶": ["かぬー","ぼーと"], + "⛵️": ["よっと","ぼーと","りぞーと","うみ","のりもの"], + "🛥️": ["もーたーぼーと","ぼーと","のりもの"], + "🚤": ["すぴーどぼーと","ぼーと","のりもの"], + "⛴️": ["ふぇりー","ぼーと"], + "🛳️": ["りょかくせん","りょかく","ふね","のりもの"], + "🚢": ["ふね","のりもの"], + "🛟": ["きゅうめいうきわ","うきわ","らいふじゃけっと","らいふせーばー","きゅうじょ","あんぜん"], + "⚓️": ["いかり","ふね","つーる"], + "⛽️": ["がそりんすたんど","ねんりょう","がそりん","きゅうゆき","さーびすすてーしょん"], + "🚧": ["こうじちゅう","こうじようふぇんす","けんせつこうじ"], + "🚏": ["ばすてい","ばす","ていし"], + "🚦": ["たてむきのしんごうき","しんごうき","しんごう","こうつう"], + "🚥": ["よこむきのしんごうき","しんごうき","しんごう","こうつう"], + "🛑": ["いちじていしひょうしき","はっかっけい","ひょうしき","ていし"], + "🎡": ["かんらんしゃ","あくてぃびてぃ","ゆうえんち","えんたーていめんと","ふぇりす"], + "🎢": ["じぇっとこーすたー","あくてぃびてぃ","ゆうえんち","こーすたー","えんたーていめんと","ろーらー"], + "🎠": ["めりーごーらんど","あくてぃびてぃ","めりーごーらうんど","えんたーていめんと","うま"], + "🏗️": ["けんせつちゅう","たてもの","けんせつ"], + "🌁": ["きり","てんき"], + "🗼": ["とうきょうたわー","とうきょう","たわー"], + "🏭": ["こうじょう","たてもの"], + "⛲️": ["ふんすい"], + "🎑": ["おつきみ","あくてぃびてぃ","おいわい","じゅしょうしき","えんたーていめんと","つき"], + "⛰️": ["やま"], + "🏔️": ["ゆきやま","さむい","やま","ゆき"], + "🗻": ["ふじさん","やま"], + "🌋": ["かざん","ふんか","やま","きしょう"], + "🗾": ["にっぽんれっとう","にっぽん","ちず"], + "🏕️": ["きゃんぷ"], + "⛺️": ["てんと","きゃんぷ"], + "🏞️": ["こくりつこうえん","こうえん"], + "🛣️": ["こうそくどうろ","はいうぇい","どうろ"], + "🛤️": ["せんろ","てつどう","でんしゃ"], + "🌅": ["ひので","あさ","たいよう","てんこう"], + "🌄": ["やまからのひので","あさ","やま","たいよう","ひので","てんこう"], + "🏜️": ["さばく"], + "🏖️": ["びーちとかさ","びーち","かさ","ぱらそる"], + "🏝️": ["むじんとう","さばく","しま"], + "🌇": ["びるにしずむゆうひ","たてもの","ゆうぐれ","たいよう","ゆうひ","てんき"], + "🌆": ["ゆうぐれのまちなみ","たてもの","まち","ゆうぐれ","ひぐれ","ふうけい","たいよう","ゆうひ","てんき"], + "🏙️": ["まちなみ","たてもの","まち"], + "🌃": ["ほしぞら","よる","ほし","てんき"], + "🌉": ["よるのはし","はし","よる","てんき"], + "🌌": ["あまのがわ","うちゅう","てんき"], + "🌠": ["ながれぼし","あくてぃびてぃ","らっか","ながれる","うちゅう","ほし"], + "🎇": ["せんこうはなび","あくてぃびてぃ","おいわい","えんたーていめんと","はなび","きらきら"], + "🎆": ["はなび","あくてぃびてぃ","おいわい","えんたーていめんと"], + "🛖": ["こや","いえ","せんけいこ","ぱお"], + "🏘️": ["いえ","たてもの"], + "🏰": ["せいようのしろ","たてもの","しろ","よーろっぱ"], + "🏯": ["にっぽんのしろ","たてもの","しろ","にっぽん"], + "🏟️": ["すたじあむ"], + "🗽": ["じゆうのめがみ","じゆう","ぞう"], + "🏠": ["いえ","たてもの","じたく"], + "🏡": ["にわつきのいえ","たてもの","にわ","じたく","いえ"], + "🏚️": ["はいきょ","たてもの","はいおく","いえ"], + "🏢": ["おふぃすびる","たてもの"], + "🏬": ["でぱーと","たてもの","てん"], + "🏣": ["にっぽんのゆうびんきょく","たてもの","にっぽん","ぽすと"], + "🏤": ["よーろっぱのゆうびんきょく","たてもの","よーろっぱ","ぽすと"], + "🏥": ["びょういん","たてもの","いし","くすり"], + "🏦": ["ぎんこう","たてもの"], + "🏨": ["ほてる","たてもの"], + "🏪": ["こんびにえんすすとあ","たてもの","こんびにえんす","すとあ"], + "🏫": ["がっこう","たてもの"], + "🏩": ["らぶほてる","たてもの","ほてる","らぶ"], + "💒": ["けっこんしき","あくてぃびてぃ","ちゃぺる","ろまんす"], + "🏛️": ["れきしてきなたてもの","たてもの","れきしてきな"], + "⛪️": ["きょうかい","たてもの","くりすちゃん","じゅうじか","しゅうきょう"], + "🕌": ["もすく","いすらむ","むすりむ","しゅうきょう"], + "🛕": ["ひんどぅーきょうじいん","ひんどぅーきょう","じいん","しゅうきょう"], + "🕍": ["しなごーぐ","ゆだやじん","ゆだやきょう","しゅうきょう","かいどう"], + "🕋": ["かあば","いすらむ","むすりむ","しゅうきょう"], + "⛩️": ["じんじゃ","しゅうきょう","しんとう"], + "⌚️": ["うでどけい","とけい"], + "📱": ["けいたいでんわ","けいたい","こみゅにけーしょん","もばいる","でんわ"], + "📲": ["ちゃくしんちゅう","やじるし","つうわ","けいたい","こみゅにけーしょん","もばいる","けいたいでんわ","じゅしん","でんわ"], + "💻": ["ぱそこん","のーとぱそこん","こんぴゅーたー","ぱーそなる"], + "⌨️": ["きーぼーど","こんぴゅーたー"], + "🖥️": ["ですくとっぷぱそこん","こんぴゅーたー","ですくとっぷ"], + "🖨️": ["ぷりんたー","こんぴゅーたー"], + "🖱️": ["3ぼたんまうす","3","ぼたん","こんぴゅーたー","まうす","さん"], + "🖲️": ["とらっくぼーる","こんぴゅーたー"], + "🕹️": ["じょいすてぃっく","えんたーていめんと","げーむ","びでおげーむ"], + "🗜️": ["あっしゅく","つーる","けっかん"], + "💽": ["MD","ぱそこん","ひかりでぃすく","えんたーていめんと","みにでぃすく","こうがく"], + "💾": ["ふろっぴーでぃすく","こんぴゅーたー","でぃすく","ふろっぴー"], + "💿": ["CDでぃすく","ぶるーれい","CD","こんぴゅーたー","でぃすく","DVD","こうがく"], + "📀": ["DVD","ぶるーれい","CD","こんぴゅーたー","でぃすく","えんたーていめんと","こうがく"], + "📼": ["びでおてーぷ","えんたーていめんと","てーぷ","VHS","びでお","びでおかせっと"], + "📷": ["かめら","えんたーていめんと","びでお"], + "📸": ["ふらっしゅをたいたかめら","かめら","ふらっしゅ","びでお"], + "📹": ["びでおかめら","かめら","えんたーていめんと","びでお"], + "🎥": ["びでおかめら","あくてぃびてぃ","かめら","しねま","えんたーていめんと","えいが"], + "📽️": ["えいしゃき","しねま","ごらく","ふぃるむ","えいが","ぷろじぇくたー","びでお"], + "🎞️": ["ふぃるむのふれーむ","しねま","えんたーていめんと","ふぃるむ","ふれーむ","えいが"], + "📞": ["じゅわき","こみゅにけーしょん","でんわ","じゅしんき"], + "☎️": ["でんわ","けいたいでんわ"], + "📟": ["ぽけっとべる","こみゅにけーしょん","ぽけべる"], + "📠": ["FAX","こみゅにけーしょん; fAX"], + "📺": ["てれび","えんたーていめんと","TV","びでお"], + "📻": ["らじお","えんたーていめんと","びでお"], + "🎙️": ["すたじおまいく","まいく","おんがく","すたじお"], + "🎚️": ["ちょうせつばー","ちょうせつ","おんがく","ばー"], + "🎛️": ["こんとろーるのぶ","こんとろーる","つまみ","おんがく"], + "⏱️": ["すとっぷうぉっち","とけい"], + "⏲️": ["たいまーとけい","とけい","たいまー"], + "⏰": ["めざましとけい","あらーむ","とけい"], + "🕰️": ["おきどけい","とけい"], + "⏳": ["すなどけい","すな","たいまー"], + "⌛️": ["すなどけい","すな","たいまー"], + "🧮": ["そろばん","けいさん","かうんと","しゅうけいひょう","すうがく"], + "📡": ["えいせいあんてな","あんてな","こみゅにけーしょん","ぱらぼらあんてな","えいせい"], + "🔋": ["でんち","ばってりー","でんし","だかえねるぎー"], + "🪫": ["ばってりーざんりょうしょう","ばってりー","でんし","ていえねるぎー"], + "🔌": ["こんせんと","でんき","ぷらぐ"], + "💡": ["でんきゅう","まんが","でんき","ひらめき","ひかり"], + "🔦": ["かいちゅうでんとう","でんき","ひかり","どうぐ","たいまつ"], + "🕯️": ["ろうそく","ひかり"], + "🧯": ["しょうかき","しょうか","ひ","けす"], + "🗑️": ["ごみばこ","ごみ","かん","びん"], + "🛢️": ["どらむかん","どらむ","おいる"], + "🛒": ["しょっぴんぐかーと","かーと","しょっぴんぐ","とろりー"], + "💸": ["はねのはえたおさつ","ぎんこう","しへい","せいきゅうしょ","どる","とぶ","おかね","はね"], + "💵": ["どるさつ","ぎんこう","しへい","おさつ","つうか","どる","おかね"], + "💴": ["えんきごうのはいったこぎって","ぎんこう","しへい","おさつ","つうか","おかね","えん"], + "💶": ["ゆーろさつ","ぎんこう","しへい","おさつ","つうか","ゆーろ","おかね"], + "💷": ["ぽんどさつ","ぎんこう","しへい","おさつ","つうか","おかね","ぽんど"], + "💰": ["どるぶくろ","ばっぐ","どる","おかね"], + "🪙": ["こいん","きん","きんぞく","おかね","ぎん","たから"], + "💳": ["くれじっとかーど","ぎんこう","かーど","くれじっと","おかね"], + "🪪": ["みぶんしょうめいしょ","しかくじょうほう","ID","らいせんす","せきゅりてぃ"], + "🧾": ["りょうしゅうしょ","かいけい","ぼき","しょうこ","しょうめい"], + "💎": ["ほうせき","だいあもんど","じゅえる","ろまんす"], + "⚖️": ["はかり","てんびん","こうせい","てんびんざ","ものさし","どうぐ","じゅうりょう","せいざ"], + "🦯": ["しろつえ","あくせしびりてぃ","めがふじゆう"], + "🧰": ["どうぐばこ","むね","せいびし","こうぐ"], + "🔧": ["れんち","どうぐ"], + "🪛": ["どらいばー","ねじ","こうぐ"], + "🔨": ["はんまー","どうぐ"], + "⚒️": ["はんまーとつるはし","はんまー","つるはし","どうぐ"], + "🛠️": ["はんまーとれんち","はんまー","どうぐ","れんち"], + "⛏️": ["つるはし","さいくつ","どうぐ"], + "🪓": ["おの","たたきぎり","ておの","われる","もくざい","こうぐ"], + "🪚": ["もっこうようのこぎり","だいく","ざいもく","のこぎり","こうぐ"], + "🔩": ["なっととぼると","ぼると","なっと","どうぐ"], + "⚙️": ["はぐるま","ぎあ","どうぐ"], + "⛓️": ["くさり"], + "🪝": ["ふっく","わな","いかさま","ぺてん","ゆうわく","ふぃっしんぐ","つーる"], + "🪜": ["はしご","のぼる","よこぎ","だん","こうぐ"], + "🧱": ["れんが","ねんど","けんせつ","もるたる","かべ"], + "🪨": ["ろっく","いわ","けんぞうぶつ","おもい","こたい","いし"], + "🪵": ["もくざい","けんぞうぶつ","まるた","ざいもく","はた"], + "🔫": ["みずでっぽう","みず","ぴすとる","ふんしゃき","じゅう"], + "🧨": ["ばくちく","だいなまいと","かやく","はなび"], + "💣": ["ばくだん"], + "🔪": ["ほうちょう","きっちんないふ","ちょうり","ないふ"], + "🗡️": ["たんけん","ないふ"], + "⚔️": ["こうさしたけん","こうさ","けん"], + "🛡️": ["たて"], + "🚬": ["きつえんまーく","あくてぃびてぃ","きつえん"], + "⚰️": ["かん","し"], + "🪦": ["はかいし","ぼち","し","ぼ","はかば","はろうぃーん"], + "⚱️": ["こつつぼ","し","そうぎ"], + "🏺": ["あんふぉら","みずがめざ","りょうり","のみもの","みずさし","どうぐ","せいざ"], + "🔮": ["すいしょうだま","たま","すいしょう","おとぎばなし","ふぁんたじー","うらない","どうぐ"], + "🪄": ["まほうのつえ","まほう","ぼう","まじょ","まほうつかい"], + "📿": ["じゅずじょうのいのりのようぐ","じゅず","いるい","ねっくれす","いのり","しゅうきょう"], + "🧿": ["なざーるのおまもり","じゅずだま","おまもり","よこしまし","なざーる","ごふ"], + "🪬": ["はむさ","おまもり","ふぁてぃま","て","めありー","みりあむ","ほご"], + "💈": ["りはつてんのかんばんばしら","りはつてん","とこや","さんぱつ","かんばんばしら"], + "🧲": ["じしゃく","あとらくしょん","ばてい"], + "⚗️": ["じょうりゅうき","かがく","じっけん","どうぐ"], + "🧪": ["しけんかん","かがくしゃ","かがく","じっけん","じっけんしつ"], + "🧫": ["ぺとりさら","ばくてりあ","せいぶつがくしゃ","せいぶつがく","ぶんか","じっけんしつ"], + "🧬": ["DNA","せいぶつがくしゃ","しんか","いでんし","いでんしがく","せいめい"], + "🔭": ["ぼうえんきょう","つーる"], + "🔬": ["けんびきょう","つーる"], + "🕳️": ["あな"], + "🩻": ["Xせん","ほね","いし","いりょう","こっかく"], + "💊": ["くすり","いし","ぴる","びょうき"], + "💉": ["ちゅうしゃき","いし","くすり","ちゅうしゃはり","ちゅうしゃ","びょうき","どうぐ","わくちん"], + "🩸": ["ち1てき","いし","くすり","けつえき","せいり"], + "🩹": ["がーぜつきばんそうこう","いし","くすり","ばんどえいど","ほうたい","ばんそうこう"], + "🩺": ["ちょうしんき","いし","くすり","しんぞう"], + "🌡️": ["おんどけい","てんき","おんど"], + "🩼": ["まつばづえ","つえ","しょうがい","けが","いどうほじょ","ぼう"], + "🏷️": ["らべる","にふだ"], + "🔖": ["ぶっくまーく","しおり","しるし"], + "🚽": ["といれ"], + "🪠": ["ぷらんじゃー","ふぉーすかっぷ","はいかんこう","きゅういん","といれ"], + "🚿": ["しゃわー","みず"], + "🛁": ["ばすたぶ","ふろ","よくそう"], + "🛀": ["ふろ","よくそう"], + "🪮": ["へあぴっく","あふろ","くし","かみ","ぴっく"], + "🪥": ["はぶらし","ばするーむ","ぶらし","きれい","はいしゃ","えいせい","は"], + "🪒": ["かみそり","するどい","ひげすり"], + "🧴": ["ろーしょんぼとる","ろーしょん","ほしめざい","しゃんぷー","ひやけとめ"], + "🧻": ["ぺーぱーろーる","ぺーぱーたおる","といれっとぺーぱー"], + "🧼": ["せっけん","ぼう","みずあび","くりーにんぐ","あわ","せっけんいれ"], + "🫧": ["ばぶる","げっぷ","きれい","せっけん","すいちゅう"], + "🧽": ["すぽんじ","きゅうしゅう","くりーにんぐ","たこうせい"], + "🧹": ["ほうき","くりーにんぐ","そうじ","まじょ"], + "🧺": ["ばすけっと","のうぎょう","らんどりー","ぴくにっく"], + "🪣": ["ばけつ","たる","ておけ","おおだる"], + "🔑": ["かぎ","じょう","ぱすわーど"], + "🗝️": ["ふるいかぎ","かぎ","じょう","ふるい"], + "🪤": ["ねずみとりき","えさ","ねずみ","かじはどうぶつ","わなわ","わな"], + "🛋️": ["そふぁーとらんぷ","そふぁー","ほてる","らんぷ"], + "🪑": ["いす","ざせき","すわる"], + "🛌": ["しゅくはくしせつ","ねる","ほてる","すいみん","べっど"], + "🛏️": ["べっど","ほてる","すいみん"], + "🚪": ["どあ","とびら"], + "🪞": ["かがみ","はんしゃ","はんしゃたい","はんしゃきょう"], + "🪟": ["まど","わく","しんせんなくうき","がらす","かいこうぶ","とうめい","しかい"], + "🧳": ["てにもつ","ぱっきんぐ","りょこう","すーつけーす"], + "🛎️": ["たくじょうべる","べる","ほてる"], + "🖼️": ["がくにはいったしゃしん","あーと","がくぶち","びじゅつかん","かいが","しゃしん"], + "🧭": ["こんぱす","じしゃく","なびげーしょん","おりえんてーりんぐ"], + "🗺️": ["せかいちず","ちず","せかい"], + "⛱️": ["たてられたぱらそる","あめ","はれ","かさ","てんき"], + "🪭": ["おりたたみせんす","れいきゃく","えんりょがち","だんす","ふぁん","ふらったー","ねつ","あつい","うちき","ひろがる"], + "🗿": ["もやいぞう","もあいぞう","かお","ぞう"], + "🛍️": ["かいものぶくろ","かばん","ほてる","かいもの"], + "🎈": ["ふうせん","あくてぃびてぃ","おいわい","えんたーていめんと"], + "🎏": ["こいのぼり","あくてぃびてぃ","こい","おいわい","えんたーていめんと","はた","ふきながし"], + "🎀": ["りぼん","おいわい"], + "🧧": ["あかいふうとう","ぎふと","こううん","ほんばお","らいしー","おかね"], + "🎁": ["ぷれぜんと","はこ","おいわい","えんたーていめんと","おくりもの","ほうそう"], + "🎊": ["くすだま","あくてぃびてぃ","おいわい","かみふぶき","えんたーていめんと"], + "🎉": ["くらっかー","あくてぃびてぃ","おいわい","えんたーていめんと","ぱーてぃー","じゃーん"], + "🪅": ["ぴにゃーた","おいわい","ぱーてぃー","ぴなーた"], + "🪩": ["みらーぼーる","だんす","でぃすこ","かがやき","ぱーてぃー"], + "🪆": ["いれこにんぎょう","にんぎょう","いれこ","ろしあ"], + "🎎": ["ひなまつり","あくてぃびてぃ","おいわい","にんぎょう","えんたーていめんと","まつり","にっぽん"], + "🎐": ["ふうりん","あくてぃびてぃ","かね","おいわい","えんたーていめんと","ふう"], + "🏮": ["いざかやのちょうちん","あかちょうちん","いざかや","にっぽん","ちょうちん","あかり","あか"], + "🪔": ["でぃやらんぷ","でぃや","らんぷ","おいる"], + "✉️": ["ふうとう","Eめーる","でんしめーる"], + "📩": ["めーるじゅしんちゅう","やじるし","こみゅにけーしょん","した","Eめーる","でんしめーる","ふうとう","てがみ","めーる","おくる","そうしん"], + "📨": ["めーるじゅしん","こみゅにけーしょん","Eめーる","でんしめーる","ふうとう","うけとる","てがみ","めーる","じゅしん"], + "📧": ["Eめーる","こみゅにけーしょん","でんしめーる","てがみ","めーる"], + "💌": ["らぶれたー","はーと","てがみ","あい","めーる","ろまんす"], + "📮": ["ぽすと","こみゅにけーしょん","めーる","ゆうびんうけ"], + "📪": ["はたがさがっていてとじているじょうたいのゆうびんうけ","とじる","こみゅにけーしょん","はた","さがった","めーる","ぽすと","ゆうびんうけ"], + "📫": ["はたがあがっていてとじているじょうたいのゆうびんうけ","とじる","こみゅにけーしょん","はた","めーる","ゆうびんうけ","ぽすと"], + "📬": ["はたがあがっていてひらいているじょうたいのゆうびんうけ","こみゅにけーしょん","はた","めーる","ぽすと","あける","ゆうびんうけ"], + "📭": ["はたがさがっていてひらいているゆうびんうけ","こみゅにけーしょん","はた","さげ","めーる","めーるぼっくす","あける","ゆうびんうけ"], + "📦": ["にもつ","はこ","こみゅにけーしょん","ぱっけーじ","こづつみ"], + "📯": ["ゆうびんらっぱ","こみゅにけーしょん","えんたーていめんと","かく","ぽすと","ゆうびん"], + "📥": ["じゅしんとれい","はこ","こみゅにけーしょん","てがみ","めーる","じゅしん","とれい"], + "📤": ["そうしんとれい","はこ","こみゅにけーしょん","てがみ","めーる","そうしん","とれい"], + "📜": ["まきもの","かみ"], + "📃": ["げんこう","かーる","どきゅめんと","ぺーじ"], + "📑": ["ぶっくまーくたぶ","ぶっくまーく","まーく","まーかー","たぶ"], + "📊": ["ぼうぐらふ","ばー","ちゃーと","ぐらふ"], + "📈": ["じょうしょうするぐらふ","じょうしょうちゃーと","ちゃーと","ぐらふ","せいちょう","とれんど","うわむき"], + "📉": ["かこうするぐらふ","かこうちゃーと","ちゃーと","うえ","ぐらふ","とれんど"], + "📄": ["ぶんしょ","ぺーじ"], + "📅": ["かれんだー","ひづけ"], + "📆": ["ひめくりかれんだー","かれんだー"], + "🗓️": ["りんぐかれんだー","かれんだー","ぱっど","らせんじょう"], + "📇": ["めいしふぉるだ","かーど","さくいん","ろーらでっくす"], + "🗃️": ["かーどふぁいる","はこ","かーど","ふぁいる"], + "🗳️": ["とうひょうようしととうひょうばこ","とうひょうようし","はこ","ひょう","とうひょう"], + "🗄️": ["ふぁいるしゅうのうこ","しゅうのう","ふぁいる"], + "📋": ["くりっぷぼーど"], + "🗒️": ["りんぐのーと","のーと","ぱっど","らせんじょう"], + "📁": ["ふぉるだ","ふぁいる"], + "📂": ["ひらいたふぉるだ","ふぁいる","ふぉるだ","ひらいた"], + "🗂️": ["しきりかーど","かーど","しきり","さくいん"], + "🗞️": ["まるめたしんぶん","にゅーす","しんぶん","かみ","まるめた"], + "📰": ["しんぶん","こみゅにけーしょん","にゅーす","かみ"], + "🪧": ["ぷらかーど","でも","しがらみ","こうぎ","かんばん"], + "📓": ["のーと"], + "📕": ["とじたほん","ほん","とじている"], + "📗": ["みどりいろのほん","ほん","みどり"], + "📘": ["あおいほん","あお","ほん"], + "📙": ["おれんじいろのほん","ほん","おれんじ"], + "📔": ["そうしょくかばーののーと","ほん","かばー","そうしょく","のーと"], + "📒": ["ちょうぼ","もとちょう","のーと"], + "📚": ["しょせき","ほん"], + "📖": ["ひらいたほん","ほん","ひらいた"], + "🔗": ["りんく"], + "📎": ["くりっぷ","ぺーぱーくりっぷ"], + "🖇️": ["つながったぺーぱーくりっぷ","こみゅにけーしょん","りんく","ぺーぱーくりっぷ"], + "✂️": ["はさみ","どうぐ"], + "📐": ["さんかくじょうぎ","じょうぎ","はいち","さんかく"], + "📏": ["じょうぎ","ちょくじょうぎ"], + "📌": ["がびょう","ぴん"], + "📍": ["がびょう","ぴん"], + "🧷": ["あんぜんぴん","おむつ","ぱんくろっく"], + "🪡": ["ぬいはり","ししゅう","さいほう","ぬいめ","ほうごう","したて"], + "🧵": ["すれっど","ぬいあみ","さいほう","いとまき","いと","しゅこうげい"], + "🧶": ["いと","ぼーる","かぎばりあみ","にっと","しゅこうげい"], + "🪢": ["むすびめ","ろーぷ","からんだ","ひも","よりいと","ねじれ"], + "🔐": ["こいんろっかー","しまっている","かぎ","せじょう","ぼうはん"], + "🔒": ["かぎ","とじられた","せじょう"], + "🔓": ["かいじょう","せじょう","あける"], + "🔏": ["じょうまえとぺん","いんく","じょう","ぺんさき","ぺん","ぷらいばしー"], + "🖊️": ["ひだりしたむきのぼーるぺん","ぼーるぺん","こみゅにけーしょん","ぺん"], + "🖋️": ["ひだりしたむきのまんねんひつ","こみゅにけーしょん","まんねんひつ","ぺん"], + "✒️": ["ぺんさき","ぺん"], + "📝": ["めも","こみゅにけーしょん","えんぴつ"], + "✏️": ["えんぴつ"], + "🖍️": ["ひだりしたむきのくれよん","こみゅにけーしょん","くれよん"], + "🖌️": ["ひだりしたむきのぶらし","こみゅにけーしょん","ぺいんとぶらし","え"], + "🔍": ["ひだりむきむしめがね","めがね","かくだい","けんさく","つーる"], + "🔎": ["みぎむきむしめがね","めがね","かくだい","けんさく","つーる"], + "❤️": ["あかいろのはーと","はーと"], + "🧡": ["おれんじいろのはーと","はーと","おれんじいろ"], + "💛": ["きいろのはーと","はーと","きいろ"], + "💚": ["みどりのはーと","はーと","みどり"], + "💙": ["あおのはーと","はーと","あお"], + "💜": ["むらさきのはーと","はーと","むらさき"], + "🤎": ["ちゃいろのはーと","はーと","ちゃいろ"], + "🖤": ["くろいはーと","はーと","くろ","あく","わるもの"], + "🤍": ["しろのはーと","はーと","しろ"], + "💔": ["われたはーと","はーと","こわれる","はきょく"], + "❣️": ["はーとのびっくりまーく","はーと","びっくりまーく","きごう"], + "💕": ["2つのはーと","はーと","あい"], + "💞": ["かいてんするはーと","はーと","かいてん"], + "💓": ["こどうするはーと","はーと","こどう","どきどき"], + "💗": ["ひかるはーと","はーと","わくわく","ひかる","こどう","きんちょう"], + "💖": ["きらめくはーと","はーと","わくわく","きらきら"], + "💘": ["いぬかれたはーと","はーと","や","きゅーぴっど","ろまんす"], + "💝": ["りぼんつきのはーと","はーと","りぼん","ばれんたいん"], + "❤️🔥": ["もえているはーと","はーと","ひ","もえる","あい","ねつじょう","しんせいなはーと"], + "❤️🩹": ["てあてしているはーと","はーと","けんこうになる","かいぜんしている","てあてしている","かいふくしている","やみあがり","げんき"], + "💟": ["はーとのでこれーしょん","はーと"], + "☮️": ["ぴーすまーく","へいわ"], + "✝️": ["らてんじゅうじ","くりすちゃん","じゅうじか","しゅうきょう"], + "☪️": ["ほしとみかづき","いすらむ","むすりむ","しゅうきょう"], + "🕉️": ["おーむまーく","ひんどぅーきょう","おーむ","しゅうきょう"], + "☸️": ["ほうりん","ぶっきょうと","だーま","しゅうきょう"], + "✡️": ["だびでのほし","だびで","ゆだやじん","ゆだやきょう","しゅうきょう","ほし"], + "🔯": ["ろくぼうせい","うらない","ほし"], + "🕎": ["はぬっきーやー","しょくだい","めのーらー","しゅうきょう"], + "☯️": ["いんよう","しゅうきょう","どう","どうか","ひ","かげ"], + "☦️": ["はったんじゅうじか","くりすちゃん","じゅうじか","しゅうきょう"], + "🪯": ["かんだ","しゅうきょう","しーくきょうと"], + "🛐": ["れいはいしょ","しゅうきょう","れいはい"], + "⛎": ["へびつかいざ","うんぱんにん","へび","せいざ"], + "♈️": ["おひつじざ","こひつじ","せいざ"], + "♉️": ["おうしざ","おすうし","ゆううし","せいざ"], + "♊️": ["ふたござ","ふたご","せいざ"], + "♋️": ["がん","かにざ","かに","せいざ"], + "♌️": ["ししざ","らいおん","せいざ"], + "♍️": ["おとめざ","おとめ","しょじょ","せいざ"], + "♎️": ["てんびんざ","てんびん","こうせい","はかり","せいざ"], + "♏️": ["さそりざ","さそり","せいざ"], + "♐️": ["いてざ","しゃしゅ","しゃしゅざ","せいざ"], + "♑️": ["やぎざ","やぎ","せいざ"], + "♒️": ["みずがめざ","うんぱんじん","みず","せいざ"], + "♓️": ["うおざ","さかな","せいざ"], + "🆔": ["しかくかこみID","ID","しきべつ"], + "⚛️": ["げんそきごう","むしんろんしゃ","げんし"], + "⚕️": ["あすくれぴおすのつえ","けんこう","せわ","いし","くすり","つえ","へび"], + "☢️": ["ほうしゃのうひょうしき","ほうしゃのう"], + "☣️": ["ばいおはざーどひょうしき","せいぶつさいがい"], + "📴": ["けいたいでんわでんげんおふ","けいたい","こみゅにけーしょん","もばいる","おふ","けいたいでんわ","でんわ"], + "📳": ["まなーもーど","けいたい","こみゅにけーしょん","もばいる","もーど","けいたいでんわ","でんわ","ばいぶれーしょん"], + "🈶": ["しかくかこみゆう","にほんご","あり"], + "🈚️": ["しかくかこみむ","しかくかこみいな","にほんご","なし"], + "🈸": ["しかくかこみしん","しかくかこみてき","ちゅうごくご","しんせい"], + "🈺": ["しかくかこみえい","ちゅうごくご","えいぎょう"], + "🈷️": ["しかくかこみつき","にほんご","つきぎめ"], + "✴️": ["はちりょうぼし","ほし"], + "🆚": ["しかくかこみVS","たい","VS"], + "🉑": ["まるかこみきょか","まるかこみか","ちゅうごくご","かのう"], + "💮": ["しろいはな","はな","たいへんよくできました"], + "🉐": ["まるかこみとく","にほんご","とく"], + "㊙️": ["まるかこみひ","ちゅうごくご","ひょういもじ","ひ"], + "㊗️": ["まるかこみしゅく","ちゅうごくご","おめでとう","しゅく"], + "🈴": ["しかくかこみのごう","しかくかこみごう","ちゅうごくご","ごうかく","てきごう"], + "🈵": ["しかくかこみまん","ちゅうごくご","まんしつ","まんしゃ","まんたん"], + "🈹": ["しかくかこみわり","しかくかこみのわり","にほんご","わりびき"], + "🈲": ["しかくかこみきん","にほんご","きんし"], + "🅰️": ["くろしかくかこみA","A","けつえきがた"], + "🅱️": ["くろしかくかこみB","B","けつえきがた"], + "🆎": ["くろしかくかこみAB","AB","けつえきがた"], + "🆑": ["しかくかこみCL","CL"], + "🅾️": ["くろしかくかこみO","けつえきがた","O"], + "🆘": ["しかくかこみSOS","へるぷ","SOS"], + "⛔️": ["たちいりきんし","たちいり","きんし","だめ","できない","きんじる","こうつう"], + "📛": ["なふだ","ばっじ","なまえ"], + "🚫": ["しんにゅうきんし","たちいり","きんし","だめ","できない","きんじる"], + "❌": ["ばつしるし","きゃんせる","きごう","かけざん","じょうざん","x"], + "⭕️": ["ふといおおきなまる","まる","O"], + "💢": ["いかりまーく","いかり","まんが","げきど"], + "♨️": ["おんせん","あたたかい","わきでる","じょうき"], + "🚷": ["ほこうしゃたちいりきんし","きんし","だめ","ない","ほこうしゃ","きんじる"], + "🚯": ["ぽいすてきんし","きんし","ごみ","だめ","ない","きんしされている"], + "🚳": ["じてんしゃきんし","じてんしゃ","ばいく","きんし","だめ","できない","きんじる","のりもの"], + "🚱": ["いんようふか","ひいんりょうすい","いんりょう","きんし","だめ","ない","いんよう","きんしされている","みず"], + "🔞": ["18さいみまんきんし","18","ねんれいせいげん","じゅうはち","きんし","だめ","ない","きんしした","みせいねんしゃ"], + "📵": ["けいたいでんわきんし","けいたい","つうしん","きんし","もばいる","だめ","できない","けいたいでんわ","きんしされている","でんわ"], + "🚭": ["きんえん","きんし","だめ","できない","きんしされている","きつえん"], + "❗️": ["あかいびっくりまーく","びっくり","まーく","きごう"], + "❕": ["しろいびっくりまーく","びっくり","まーく","かこみ","きごう"], + "❓": ["あかいはてなまーく","まーく","きごう","はてな"], + "❔": ["しろいはてなまーく","まーく","かこみ","きごう","はてな"], + "‼️": ["!!まーく","ばんばん","びっくり","まーく","きごう"], + "⁉️": ["!?","びっくり","いんてろばんぐ","まーく","きごう","はてな"], + "💯": ["100てん","100","ふる","ひゃく","すこあ"], + "🔅": ["ていきど","あかるさ","うすぐらい","てい"], + "🔆": ["こうきど","あかるい","あかるさ"], + "🔱": ["とらいでんと","いかり","えんぶれむ","ふね","こうぐ"], + "⚜️": ["ゆりのもんしょう"], + "〽️": ["いおりてん","しるし","ぶぶん"], + "⚠️": ["けいこく"], + "🚸": ["こうさてんをわたるこどもたち","こども","こうさてん","ほこうしゃ","こうつう"], + "🔰": ["しょしんしゃまーく","しょしんしゃ","まーく","みどり","にっぽん","わかば","どうぐ","き"], + "♻️": ["りさいくるまーく","りさいくる"], + "🈯️": ["しかくかこみゆび","にほんご"], + "💹": ["じょうしょうとれんどのちゃーととえんきごう","じょうしょうちゅうえんちゃーと","ぎんこう","ちゃーと","つうか","ぐらふ","せいちょう","しじょう","おかね","じょうしょう","とれんど","うわむき","えん"], + "❇️": ["きらきら"], + "✳️": ["あすたりすく (8ほんこうせい)","あすたりすく"], + "❎": ["しかくでかこまれたばつしるし","まーく","しかく"], + "✅": ["しろいふとじのちぇっくまーく","ちぇっく","まーく"], + "💠": ["どっともようのだいや","まんが","だいやもんど","きかがく","ないぶ"], + "🌀": ["さいくろん","ていきあつ","めまい","たつまき","たいふう","てんき"], + "➿": ["にじゅうのかーるじょうのるーぷ","かーる","だぶる","るーぷ"], + "🌐": ["しごせん・けいせんのあるちきゅう","ちきゅう","ちきゅうぎ","けいせん","せかい"], + "♾": ["むげん","えいえん","ふへんてき"], + "Ⓜ️": ["まるかこみM","えん","M"], + "🏧": ["ATM","ATMきごう","じどう","ぎんこう","すいとう"], + "🚾": ["といれ","けしょうしつ","おてあらい","みず","WC"], + "♿️": ["くるまいす","あくせす"], + "🅿️": ["くろしかくかこみP","ちゅうしゃじょう"], + "🈳": ["しかくかこみそら","しかくかこみのそら","ちゅうごくご","そらしつ","あき","くうしゃ"], + "🈂️": ["しかくかこみさ","にっぽんじん","さーびす"], + "🛂": ["にゅうこくしんさ","ぱすぽーと"], + "🛃": ["ぜいかん"], + "🛄": ["てにもつうけとりしょ","てにもつ","うけとり"], + "🛅": ["てにもつあずかりしょ","てにもつ","ろっかー","けいこうひん"], + "🚰": ["いんりょうすい","のみもの","みず"], + "🛗": ["えれべーたー","あくせしびりてぃ","ひきあげ","しょうこうき"], + "🚹": ["だんせいのきごう","だんせいよう","といれ","おとこ","だんせい"], + "♂️": ["だんせいきごう","だんせい","おとこ"], + "🚺": ["じょせいのきごう","じょせいよう","といれ","おんな","じょせい"], + "♀️": ["じょせいきごう","じょせい","おんな"], + "⚧️": ["とらんすじぇんだーさいん","とらんすじぇんだー","ぷらいど","lgbt"], + "🚼": ["あかちゃんまーく","あかちゃん","おむつかえ"], + "🚻": ["といれ","けしょうしつ","WC"], + "🚮": ["ごみすてじょう","びんのごみすてじょう","ごみ","ごみばこ"], + "🎦": ["えいが","あくてぃびてぃ","かめら","えんたーていめんと","ふぃるむ","どうが"], + "📶": ["あんてな","ばー","けいたい","こみゅにけーしょん","もばいる","けいたいでんわ","しぐなる","でんわ"], + "🛜": ["むせん","こんぴゅーた","いんたーねっと","ねっとわーく","Wi-Fi","せつぞく"], + "🈁": ["しかくかこみここ","にっぽんじん"], + "🆖": ["しかくかこみNG","NG"], + "🆗": ["しかくかこみOK","OK"], + "🆙": ["しかくかこみUP!","まーく","うえ"], + "🆒": ["COOL","かっこいい","くーる"], + "🆕": ["しかくかこみnew","しん"], + "🆓": ["しかくかこみFREE","ふりー","むりょう"], + "0⃣": ["0きー","0","きー","ぜろ"], + "1⃣": ["1きー","いち","きー"], + "2⃣": ["2きー","2","きー","に"], + "3⃣": ["3きー","3","きー","さん"], + "4⃣": ["4きー","4","よん","きー"], + "5⃣": ["5きー","5","ご","きー"], + "6⃣": ["6きー","6","きー","ろく"], + "7⃣": ["7きー","7","きー","なな"], + "8⃣": ["8きー","8","はち","きー"], + "9⃣": ["9きー","9","きー","きゅう"], + "🔟": ["10きー","10","きー","じゅう"], + "🔢": ["ばんごうのにゅうりょくきごう","1234","にゅうりょく","すうじ"], + "▶️": ["みぎむきさんかく","さいせいぼたん","やじるし","さいせい","みぎ","さんかっけい"], + "⏸️": ["2ほんのすいちょくばー","いちじていしぼたん","ばー","2ばい","いちじていし","すいちょく"], + "⏯️": ["みぎむきのさんかっけいとにじゅうすいちょくぼう","さいせいまたはいちじていしぼたん","やじるし","いちじていし","さいせい","みぎ","さんかっけい"], + "⏹️": ["ていし","ていしぼたん","しかく"], + "⏺️": ["ろくが","ろくがぼたん","まる"], + "⏏️": ["とりだしまーく","とりだしぼたん"], + "⏭️": ["みぎむきのにじゅうさんかっけいとすいちょくぼう","「つぎのきょく」ぼたん","やじるし","つぎのばめん","つぎのきょく","さんかっけい"], + "⏮️": ["ひだりむきのにじゅうさんかっけいとすいちょくぼう","「まえのきょく」ぼたん","やじるし","まえのばめん","まえのきょく","さんかっけい"], + "⏩": ["みぎむきのにじゅうさんかっけい","はやおくりぼたん","やじるし","2ばい","こうそく","すすむ"], + "⏪": ["ひだりむきのにじゅうさんかっけい","はやもどしぼたん","やじるし","2ばい","まきもどし"], + "🔀": ["ねじりみぎむきやじるしのえもじ","しゃっふる","やじるし","こうさ"], + "🔁": ["りぴーと","りぴーとぼたん","やじるし","とけいまわり"], + "🔂": ["1きょくをりぴーとさいせい","りぴーとぼたん","やじるし","とけいまわり","いちど"], + "◀️": ["ひだりむきのさんかっけい","はんてんぼたん","やじるし","ひだり","はんてん","さんかっけい"], + "🔼": ["うわむきのさんかっけい","うえぼたん","やじるし","ぼたん","うえ"], + "🔽": ["したむきのさんかっけい","したぼたん","やじるし","ぼたん","した"], + "⏫": ["うわむきのにじゅうさんかっけい","こうそくじょうしょうぼたん","やじるし","だぶる","うえ"], + "⏬": ["したむきのにじゅうさんかっけい","こうそくだうんぼたん","やじるし","だぶる","した"], + "➡️": ["みぎむきやじるし","みぎやじるし","やじるし","しゅよう","ほうこう","ひがし"], + "⬅️": ["ひだりむきやじるし","ひだりやじるし","やじるし","しゅよう","ほうこう","にし"], + "⬆️": ["うわむきやじるし","うえやじるし","やじるし","しゅよう","ほうこう","きた"], + "⬇️": ["したむきやじるし","したやじるし","やじるし","しゅよう","ほうこう","した","みなみ"], + "↗️": ["みぎうえやじるし","やじるし","ほうこう","ななめ","ほくとう"], + "↘️": ["みぎしたやじるし","やじるし","ほうこう","ななめ","なんとう"], + "↙️": ["ひだりしたやじるし","やじるし","ほうこう","ななめ","なんせい"], + "↖️": ["ひだりうえやじるし","やじるし","ほうこう","ななめ","ほくせい"], + "↕️": ["じょうげやじるし","やじるし","ほうこう","ななめ","ほくせい"], + "↔️": ["さゆうやじるし","やじるし"], + "🔄": ["うずまきやじるし","はんとけいまわり","やじるし","ひだりまわり"], + "↪️": ["みぎむきだんつきやじるし","みぎにまがったやじるし","やじるし"], + "↩️": ["ひだりむきだんつきやじるし","ひだりにまがったやじるし","やじるし"], + "🔃": ["るーぷやじるし","とけいのはり","やじるし","とけいまわり","りろーど"], + "⤴️": ["みぎうえへかーぶするやじるし","うえへかーぶするみぎやじるし","やじるし"], + "⤵️": ["みぎしたへかーぶするやじるし","したにかーぶするみぎやじるし","やじるし","した"], + "#⃣": ["#きー","はっしゅ","きー","ぽんど"], + "*⃣": ["あすたりすくきー","あすたりすく","きー","ほし"], + "ℹ️": ["じょうほうげん","i","いんふぉめーしょん"], + "🔤": ["あるふぁべっとにゅうりょく","abc","あるふぁべっと","にゅうりょく","らてん","もじ"], + "🔡": ["あるふぁべっとこもじにゅうりょく","abcd","にゅうりょく","らてん","もじ","こもじ"], + "🔠": ["あるふぁべっとおおもじにゅうりょく","にゅうりょく","らてん","もじ","おおもじ"], + "🔣": ["きごうにゅうりょく","にゅうりょく"], + "🎵": ["おんぷ","あくてぃびてぃ","えんたーていめんと","おんがく"], + "🎶": ["ふくすうのおんぷ","あくてぃびてぃ","えんたーていめんと","おんがく","おんぷ"], + "〰️": ["はせん","だっしゅ","きごう","なみ"], + "➰": ["かーるじょうのるーぷ","かーる","るーぷ"], + "✔️": ["ふとじのちぇっくまーく","ちぇっく","まーく"], + "➕": ["ふとじの+きごう","すうがく","ぷらす"], + "➖": ["ふとじのまいなすきごう","すうがく","まいなす"], + "➗": ["ふとじのわるきごう","わりざん","すうがく"], + "✖️": ["ふとじのかけるしるし","きゃんせる","じょうざん","かける","x"], + "🟰": ["ふといとうごう","とうしき","すうがく","ひとしい"], + "💲": ["ふとじのどるきごう","つうか","どる","おかね"], + "💱": ["がいかりょうがえ","ぎんこう","つうか","りょうがえ","おかね"], + "©️": ["こぴーらいとまーく","ちょさくけん"], + "®️": ["とうろくしょうひょうまーく","とうろくずみ","しょうひょう"], + "™️": ["しょうひょうまーく","まーく","tm","しょうひょう"], + "🔚": ["ENDとひだりやじるし","やじるし","はじ"], + "🔙": ["BACKとひだりやじるし","やじるし","もどる"], + "🔛": ["ON!とさゆうやじるし","やじるし","まーく","おん"], + "🔝": ["TOPとうえやじるし","やじるし","とっぷ","うえ"], + "🔜": ["SOONとみぎやじるし","やじるし","まもなく"], + "☑️": ["ちぇっくいりちぇっくぼっくす","とうひょう","ぼっくす","ちぇっく"], + "🔘": ["らじおぼたん","ぼたん","きかがく","らじお"], + "🔴": ["あかまる","えん","きかがく","あか"], + "🟠": ["おれんじいろのえん","えん","きかがく","おれんじ"], + "🟡": ["きいろのまる","えん","きかがく","ちゃいろ"], + "🟢": ["みどりまる","えん","きかがく","みどり"], + "🔵": ["あおまる","あお","えん","きかがく"], + "🟣": ["むらさきのまる","えん","きかがく","むらさき"], + "🟤": ["ちゃいろのまる","えん","きかがく","ちゃいろ"], + "⚫️": ["くろまる","えん","きかがく"], + "⚪️": ["しろまる","えん","きかがく"], + "🟥": ["あかのせいほうけい","せいほうけい","きかがく","あか"], + "🟧": ["おれんじしょくのせいほうけい","せいほうけい","きかがく","おれんじ"], + "🟨": ["きいろのせいほうけい","せいほうけい","きかがく","きいろ"], + "🟩": ["みどりのせいほうけい","せいほうけい","きかがく","みどり"], + "🟦": ["あおのせいほうけい","せいほうけい","きかがく","あお"], + "🟪": ["むらさきのせいほうけい","せいほうけい","きかがく","むらさき"], + "🟫": ["ちゃいろのせいほうけい","せいほうけい","きかがく","ちゃいろ"], + "⬛️": ["くろいおおきなしかく","きかがく","せいほうけい"], + "⬜️": ["しろいおおきなしかく","きかがく","せいほうけい"], + "◼️": ["くろいちゅうくらいのしかく","きかがく","せいほうけい"], + "◻️": ["しろくてちゅうくらいのしかく","きかがく","せいほうけい"], + "◾️": ["くろくてちゅうくらいのちいさいしかく","きかがく","せいほうけい"], + "◽️": ["しろいちゅうくらいのちいさなしかく","きかがく","せいほうけい"], + "▪️": ["くろいちいさなしかく","きかがく","せいほうけい"], + "▫️": ["しろいちいさなしかく","きかがく","せいほうけい"], + "🔸": ["ちいさいおれんじのだいやもんど","だいやもんど","きかがく","おれんじ"], + "🔹": ["ちいさくてあおいだいやもんど","あお","だいやもんど","きかがく"], + "🔶": ["おおきいおれんじのだいや","だいやもんど","きかがく","おれんじ"], + "🔷": ["おおきくてあおいだいやもんど","あお","だいやもんど","きかがく"], + "🔺": ["うわむきのあかいさんかっけい","うえ","きかがく","あか"], + "🔻": ["したむきのさんかっけい","だうん","きかがく","あか"], + "🔲": ["くろいしかくぼたん","ぼたん","きかがく","せいほうけい"], + "🔳": ["しろいしかくぼたん","ぼたん","きかがく","かこみ","しかく"], + "🔈": ["すぴーかー","おんりょう"], + "🔉": ["おんりょうしょう","でんげんがはいったすぴーかー","ひくい","すぴーかー","おんりょう","なみ"], + "🔊": ["おんりょうだい","だいおんりょうのすぴーかー","3","えんたーていめんと","たかい","おとのおおきい","すぴーかー","ぼりゅーむ"], + "🔇": ["むおんのすぴーかー","すぴーかー","おふ","みゅーと","せいおん","むおん","おんりょう"], + "📣": ["めがほん","おうえん","こみゅにけーしょん","かくせいき"], + "📢": ["かくせいき","こみゅにけーしょん","おおごえ","すぴーかー","ぱぶりっくあどれす","めがほん"], + "🔔": ["べる"], + "🔕": ["みゅーと","すらっしゅべる","かね","きんじられた","だめ","ない","きんし","しずか"], + "🃏": ["とらんぷのじょーかー","かーど","えんたーていめんと","げーむ","じょーかー","ぷれい"], + "🀄️": ["まーじゃんぱいのちゅう","げーむ","まーじゃん","あか"], + "♠️": ["とらんぷのすぺーど","かーど","げーむ","すぺーど","すーつ"], + "♣️": ["とらんぷのくらぶ","かーど","くらぶ","げーむ","すーつ"], + "♥️": ["とらんぷのはーと","かーど","げーむ","はーと","すーつ"], + "♦️": ["とらんぷのだいや","かーど","だいや","だいやもんど","げーむ","すーつ"], + "🎴": ["はなふだ","あくてぃびてぃ","かーど","えんたーていめんと","はな","げーむ","にっぽん","ぷれい"], + "👁🗨": ["ふきだしのめ","ふきだし","め","すぴーち","しょうにん"], + "🗨️": ["ひだりむきのふきだし","せりふ","すぴーち"], + "💭": ["かんがえふきだし","ふきだし","あわ","まんが","かんがえ"], + "🗯️": ["みぎむきのいかりのふきだし","いかり","ふきだし","あわ","げきど"], + "💬": ["ふきだし","あわ","まんが","せりふ","すぴーち"], + "🕐": ["1じ","0ふん","1","とけい","とき","いち"], + "🕑": ["2じ","0ふん","2","とけい","とき","に"], + "🕒": ["3じ","0ふん","3","とけい","とき","さん"], + "🕓": ["4じ","0ふん","4","とけい","よん","とき"], + "🕔": ["5じ","0ふん","5","とけい","ご","とき"], + "🕕": ["6じ","0ふん","6","とけい","とき","ろく"], + "🕖": ["7じ","0ふん","7","とけい","とき","なな"], + "🕗": ["8じ","0ふん","8","とけい","はち","とき"], + "🕘": ["9じ","0ふん","9","とけい","きゅう","とき"], + "🕙": ["10じ","0ふん","10","とけい","とき","じゅう"], + "🕚": ["11じ","0ふん","11","とけい","じゅういち","とき"], + "🕛": ["12じ","0ふん","12","とけい","じゅうに","とき"], + "🕜": ["1じはん","1じ","はん","じこく","いち","30"], + "🕝": ["2じはん","2じ","はん","じこく","30","に"], + "🕞": ["3じはん","3じ","はん","じこく","30","さん"], + "🕟": ["4じはん","30","4じ","じこく","よん","はん"], + "🕠": ["5じはん","30","5じ","じこく","ご","はん"], + "🕡": ["6じはん","30","6じ","じこく","ろく","はん"], + "🕢": ["7じはん","30","7じ","じこく","なな","はん"], + "🕣": ["8じはん","30","8じ","じこく","はち","はん"], + "🕤": ["9じはん","30","9じ","じこく","きゅう","はん"], + "🕥": ["10じはん","10じ","はん","じこく","じゅう","30"], + "🕦": ["11じはん","11じ","はん","じこく","じゅういち","30"], + "🕧": ["12じはん","12じ","はん","じこく","30","じゅうに"], + "🏳️": ["なびくしろはた","はた","なびく"], + "🏴": ["なびくくろはた","はた","なびく"], + "🏁": ["ちぇっかーふらっぐ","いちまつもよう","はた","れーす"], + "🚩": ["さんかくはた","はた","ぽすと"], + "🎌": ["こうさき","あくてぃびてぃ","おいわい","こうさ","こうさした","はた","にっぽん"], + "🏴☠️": ["かいぞくはた","はた","かいぞく"], + "🏳️🌈": ["れいんぼーふらっぐ","ふらっぐ","れいんぼー","ぷらいど","lgbt"], + "🏳️⚧️": ["とらすじぇんだーふらっぐ","ふらっぐ","とらんすじぇんだー","ぷらいど","lgbt"], + "🇦🇨": ["あせんしょんとうのはた","あせんしょん","こっき","しま"], + "🇦🇩": ["あんどらこっき","あんどら","こっき"], + "🇦🇪": ["あらぶしゅちょうこくれんぽうこっき","しゅちょうこく","こっき","あらぶしゅちょうこくれんぽう","れんぽう"], + "🇦🇫": ["あふがにすたんこっき","あふがにすたん","こっき"], + "🇦🇬": ["あんてぃぐあばーぶーだこっき","あんてぃぐあ","ばーぶーだ","こっき"], + "🇦🇮": ["あんぎらとうのはた","あんぎらとう","こっき"], + "🇦🇱": ["あるばにあこっき","あるばにあ","こっき"], + "🇦🇲": ["あるめにあこっき","あるめにあ","こっき"], + "🇦🇴": ["あんごらこっき","あんごら","こっき"], + "🇦🇶": ["なんきょくたいりくのはた","なんきょくたいりく","こっき"], + "🇦🇷": ["あるぜんちんこっき","あるぜんちん","こっき"], + "🇦🇸": ["あめりかりょうさもあのはた","あめりかりょう","こっき","さもあ"], + "🇦🇹": ["おーすとりあこっき","おーすとりあ","こっき"], + "🇦🇺": ["おーすとらりあこっき","おーすとらりあ","こっき","はーど","まくどなるど"], + "🇦🇼": ["あるばこっき","あるば","こっき"], + "🇦🇽": ["おーらんどしょとうのはた","おーらんどしょとう","こっき"], + "🇦🇿": ["あぜるばいじゃんこっき","あぜるばいじゃん","こっき"], + "🇧🇦": ["ぼすにあへるつぇごびなこっき","ぼすにあ","こっき","へるつぇごびな"], + "🇧🇧": ["ばるばどすこっき","ばるばどす","こっき"], + "🇧🇩": ["ばんぐらでしゅこっき","ばんぐらでしゅ","こっき"], + "🇧🇪": ["べるぎーこっき","べるぎー","こっき"], + "🇧🇫": ["ぶるきなふぁそこっき","ぶるきなふぁそ","こっき"], + "🇧🇬": ["ぶるがりあこっき","ぶるがりあ","こっき"], + "🇧🇭": ["ばーれーんこっき","ばーれーん","こっき"], + "🇧🇮": ["ぶるんじこっき","ぶるんじ","こっき"], + "🇧🇯": ["べなんこっき","べなん","こっき"], + "🇧🇱": ["さん・ばるてるみーとうのはた","ばるてるみー","こっき","さん"], + "🇧🇲": ["ばみゅーだしょとうのはた","ばみゅーだしょとう","こっき"], + "🇧🇳": ["ぶるねいこっき","ぶるねい","だるさらーむ","こっき"], + "🇧🇴": ["ぼりびあこっき","ぼりびあ","こっき"], + "🇧🇶": ["かりぶかいのおらんだりょうとうのはた","ぼねーるとう","かりぶかい","ゆーすたてぃうす","こっき","おらんだ","さば","しんと"], + "🇧🇷": ["ぶらじるこっき","ぶらじる","こっき"], + "🇧🇸": ["ばはまこっき","ばはま","こっき"], + "🇧🇹": ["ぶーたんこっき","ぶーたん","こっき"], + "🇧🇼": ["ぼつわなこっき","ぼつわな","こっき"], + "🇧🇾": ["べらるーしこっき","べらるーし","こっき"], + "🇧🇿": ["べりーずこっき","べりーず","こっき"], + "🇨🇦": ["かなだこっき","かなだ","こっき"], + "🇨🇨": ["ここすしょとうのはた","ここす","こっき","しょとう","きーりんぐ"], + "🇨🇩": ["こんごこっき - きんしゃさ","こんご","こんご - きんしゃさ","こんごみんしゅきょうわこく","こっき","きんしゃさ","きょうわこく"], + "🇨🇫": ["ちゅうおうあふりかこっき","ちゅうおうあふりかきょうわこく","こっき","きょうわこく"], + "🇨🇬": ["こんごのはた - ぶらざびる","ぶらざびる","こんご","こんごきょうわこく","こんご - ぶらざびる","こっき","きょうわこく"], + "🇨🇭": ["すいすこっき","こっき","すいす"], + "🇨🇮": ["こーとじぼわーるこっき","こーとじぼわーる","こっき"], + "🇨🇰": ["くっくしょとうこっき","くっく","こっき","しょとう"], + "🇨🇱": ["ちりこっき","ちり","こっき"], + "🇨🇲": ["かめるーんこっき","かめるーん","こっき"], + "🇨🇳": ["ちゅうごくこっき","ちゅうごく","こっき"], + "🇨🇴": ["ころんびあこっき","ころんびあ","こっき"], + "🇨🇷": ["こすたりかこっき","こすたりか","こっき"], + "🇨🇺": ["きゅーばこっき","きゅーば","こっき"], + "🇨🇻": ["かーぼべるでこっき","かーぼ","けーぷ","こっき","べるで"], + "🇨🇼": ["きゅらそーとうのはた","あんてぃるしょとう","きゅらそー","こっき"], + "🇨🇽": ["くりすますとうのはた","くりすます","こっき","しま"], + "🇨🇾": ["きぷろすこっき","きぷろす","こっき"], + "🇨🇿": ["ちぇここっき","ちぇこきょうわこく","こっき"], + "🇩🇪": ["どいつこっき","こっき","どいつ"], + "🇩🇯": ["じぶちこっき","じぶち","こっき"], + "🇩🇰": ["でんまーくこっき","でんまーく","こっき"], + "🇩🇲": ["どみにかこっき","どみにか","こっき"], + "🇩🇴": ["どみにかきょうわこくこっき","どみにかきょうわこく","こっき"], + "🇩🇿": ["あるじぇりあこっき","あるじぇりあ","こっき"], + "🇪🇨": ["えくあどるこっき","えくあどる","こっき"], + "🏴": ["いんぐらんどのはた","いんぐらんど","こっき"], + "🇪🇪": ["えすとにあこっき","えすとにあ","こっき"], + "🇪🇬": ["えじぷとこっき","えじぷと","こっき"], + "🇪🇭": ["にしさはらのはた","こっき","さはら","にし","にしさはら"], + "🇪🇷": ["えりとりあこっき","えりとりあ","こっき"], + "🇪🇸": ["すぺいんこっき","こっき","すぺいん","せうた","めりりゃ"], + "🇪🇹": ["えちおぴあこっき","えちおぴあ","こっき"], + "🇪🇺": ["おうしゅうはた","おうしゅうれんごう","こっき"], + "🇫🇮": ["ふぃんらんどこっき","ふぃんらんど","こっき"], + "🇫🇯": ["ふぃじーこっき","ふぃじー","こっき"], + "🇫🇰": ["ふぉーくらんどしょとうのはた","ふぉーくらんど","ふぉーくらんどしょとう","こっき","しょとう","まるびなす"], + "🇫🇲": ["みくろねしあこっき","こっき","みくろねしあ"], + "🇫🇴": ["ふぇろーしょとうのはた","ふぇろー","はた","しょとう"], + "🇫🇷": ["ふらんすこっき","こっき","ふらんす","くりっぱーとんとう","せんと・まーちん","さん・まるたん"], + "🇬🇦": ["がぼんこっき","こっき","がぼん"], + "🇬🇧": ["いぎりすこっき","いぎりす","いぎりすりょう","こーんうぉーる","いんぐらんど","こっき","ぐれーとぶりてん","あいるらんど","きたあいるらんど","すこっとらんど","UK","ゆにおんじゃっく","れんごう","れんごうおうこく","うぇーるず"], + "🇬🇩": ["ぐれなだこっき","こっき","ぐれなだ"], + "🇬🇪": ["じょーじあこっき","こっき","じょーじあ"], + "🇬🇫": ["ふらんすりょうぎあなのはた","こっき","ふらんすりょう","ぎあな"], + "🇬🇬": ["がーんじーこっき","こっき","がーんじー"], + "🇬🇭": ["がーなこっき","こっき","がーな"], + "🇬🇮": ["じぶらるたるこっき","こっき","じぶらるたる"], + "🇬🇱": ["ぐりーんらんどこっき","こっき","ぐりーんらんど"], + "🇬🇲": ["がんびあこっき","こっき","がんびあ"], + "🇬🇳": ["ぎにあこっき","こっき","ぎにあ"], + "🇬🇵": ["ぐあどるーぷこっき","こっき","ぐあどるーぷ"], + "🇬🇶": ["せきどうぎにあこっき","せきどうぎにあ","こっき","ぎにあ"], + "🇬🇷": ["ぎりしゃこっき","こっき","ぎりしゃ"], + "🇬🇸": ["さうすじょーじあ・さうすさんどうぃっちしょとうこっき","こっき","じょーじあ","しょとう","さうす","さうすじょーじあ","さうすさんどうぃっち"], + "🇬🇹": ["ぐあてまらこっき","こっき","ぐあてまら"], + "🇬🇺": ["ぐあむはた","こっき","ぐあむ"], + "🇬🇼": ["ぎにあびさうこっき","びさう","こっき","ぎにあ"], + "🇬🇾": ["がいあなこっき","こっき","がいあな"], + "🇭🇰": ["ほんこんのはた","ちゅうごく","こっき","ほんこん"], + "🇭🇳": ["ほんじゅらすこっき","こっき","ほんじゅらす"], + "🇭🇷": ["くろあちあこっき","くろあちあ","こっき"], + "🇭🇹": ["はいちこっき","こっき","はいち"], + "🇭🇺": ["はんがりーこっき","こっき","はんがりー"], + "🇮🇨": ["かなりあしょとうのはた","かなりあ","こっき","しょとう"], + "🇮🇩": ["いんどねしあこっき","こっき","いんどねしあ"], + "🇮🇪": ["あいるらんどこっき","こっき","あいるらんど"], + "🇮🇱": ["いすらえるこっき","こっき","いすらえる"], + "🇮🇲": ["まんとうのはた","こっき","まんとう"], + "🇮🇳": ["いんどこっき","こっき","いんど"], + "🇮🇴": ["いぎりすりょういんどようちいきのはた","いぎりすりょう","ちゃごす","はた","いんどよう","しま","でぃえごがるしあ"], + "🇮🇶": ["いらくこっき","こっき","いらく"], + "🇮🇷": ["いらんこっき","こっき","いらん"], + "🇮🇸": ["あいすらんどこっき","こっき","あいすらんど"], + "🇮🇹": ["いたりあこっき","こっき","いたりあ"], + "🇯🇪": ["じゃーじーだいかんかんかつくのはた","こっき","じゃーじーだいかんかんかつく"], + "🇯🇲": ["じゃまいかこっき","こっき","じゃまいか"], + "🇯🇴": ["よるだんこっき","こっき","よるだん"], + "🇯🇵": ["にっぽんこっき","こっき","にっぽん"], + "🇰🇪": ["けにあこっき","こっき","けにあ"], + "🇰🇬": ["きるぎすこっき","こっき","きるぎす"], + "🇰🇭": ["かんぼじあこっき","かんぼじあ","こっき"], + "🇰🇮": ["きりばすこっき","こっき","きりばす"], + "🇰🇲": ["こもろこっき","こもろ","こっき"], + "🇰🇳": ["せんとくりすとふぁーねいびすこっき","こっき","きっつ","ねいびす","せんと"], + "🇰🇵": ["きたちょうせんこっき","こっき","ちょうせん","きた","きたちょうせん"], + "🇰🇷": ["かんこくこっき","こっき","かんこく","みなみ","だいかんみんこく"], + "🇰🇼": ["くうぇーとこっき","こっき","くうぇーと"], + "🇰🇾": ["けいまんしょとうのはた","けいまん","こっき","しょとう"], + "🇰🇿": ["かざふすたんこっき","こっき","かざふすたん"], + "🇱🇦": ["らおすこっき","こっき","らおす"], + "🇱🇧": ["ればのんこっき","こっき","ればのん"], + "🇱🇨": ["せんとるしあこっき","こっき","せんとるしあ"], + "🇱🇮": ["りひてんしゅたいんこっき","こっき","りひてんしゅたいん"], + "🇱🇰": ["すりらんかこっき","こっき","すりらんか"], + "🇱🇷": ["りべりあこっき","こっき","りべりあ"], + "🇱🇸": ["れそとこっき","こっき","れそと"], + "🇱🇹": ["りとあにあこっき","こっき","りとあにあ"], + "🇱🇺": ["るくせんぶるくこっき","こっき","るくせんぶるく"], + "🇱🇻": ["らとびあこっき","こっき","らとびあ"], + "🇱🇾": ["りびあこっき","こっき","りびあ"], + "🇲🇦": ["もろっここっき","こっき","もろっこ"], + "🇲🇨": ["もなここっき","こっき","もなこ"], + "🇲🇩": ["もるどばこっき","こっき","もるどば"], + "🇲🇪": ["もんてねぐろこっき","こっき","もんてねぐろ"], + "🇲🇬": ["まだがすかるこっき","こっき","まだがすかる"], + "🇲🇭": ["まーしゃるしょとうこっき","こっき","しょとう","まーしゃる"], + "🇲🇰": ["まけどにあこっき","こっき","まけどにあ"], + "🇲🇱": ["まりこっき","こっき","まり"], + "🇲🇲": ["みゃんまーこっき","びるま","こっき","みゃんまー"], + "🇲🇳": ["もんごるこっき","こっき","もんごる"], + "🇲🇴": ["まかおのはた","ちゅうごく","こっき","まかお"], + "🇲🇵": ["きたまりあなしょとうのはた","こっき","しょとう","まりあな","きた","きたまりあな"], + "🇲🇶": ["まるてぃにーくのはた","はた","まるてぃにーく"], + "🇲🇷": ["もーりたにあこっき","こっき","もーりたにあ"], + "🇲🇸": ["もんとせらとのはた","はた","もんとせらと"], + "🇲🇹": ["まるたこっき","こっき","まるた"], + "🇲🇺": ["もーりしゃすこっき","こっき","もーりしゃす"], + "🇲🇻": ["もるでぃぶこっき","こっき","もるでぃぶ"], + "🇲🇼": ["まらういこっき","こっき","まらうい"], + "🇲🇽": ["めきしここっき","こっき","めきしこ"], + "🇲🇾": ["まれーしあこっき","こっき","まれーしあ"], + "🇲🇿": ["もざんびーくこっき","こっき","もざんびーく"], + "🇳🇦": ["なみびあこっき","こっき","なみびあ"], + "🇳🇨": ["にゅーかれどにあのはた","こっき","にゅー","にゅーかれどにあ"], + "🇳🇪": ["にじぇーるこっき","こっき","にじぇーる"], + "🇳🇫": ["のーふぉーくとうのはた","はた","しま","のーふぉーく"], + "🇳🇬": ["ないじぇりあこっき","こっき","ないじぇりあ"], + "🇳🇮": ["にからぐあこっき","こっき","にからぐあ"], + "🇳🇱": ["おらんだこっき","こっき","おらんだ"], + "🇳🇴": ["のるうぇーこっき","はた","のるうぇー","ぶーべ","すヴぁーるばる","やんまいえん"], + "🇳🇵": ["ねぱーるこっき","こっき","ねぱーる"], + "🇳🇷": ["なうるこっき","こっき","なうる"], + "🇳🇺": ["にうえこっき","こっき","にうえ"], + "🇳🇿": ["にゅーじーらんどこっき","こっき","にゅー","にゅーじーらんど"], + "🇴🇲": ["おまーんこっき","こっき","おまーん"], + "🇵🇦": ["ぱなまこっき","こっき","ぱなま"], + "🇵🇪": ["ぺるーこっき","こっき","ぺるー"], + "🇵🇫": ["ふらんすりょうぽりねしあのはた","こっき","ふらんすりょう","ぽりねしあ"], + "🇵🇬": ["ぱぷあにゅーぎにあこっき","こっき","ぎにあ","にゅー","ぱぷあにゅーぎにあ"], + "🇵🇭": ["ふぃりぴんこっき","こっき","ふぃりぴん"], + "🇵🇰": ["ぱきすたんこっき","こっき","ぱきすたん"], + "🇵🇱": ["ぽーらんどこっき","こっき","ぽーらんど"], + "🇵🇲": ["さんぴえーるとう・みくろんとうのはた","はた","みくろん","ぴえーる","さん"], + "🇵🇳": ["ぴとけあんしょとうのはた","はた","しょとう","ぴとけあん"], + "🇵🇷": ["ぷえるとりこのはた","こっき","ぷえるとりこ"], + "🇵🇸": ["ぱれすちなじちせいふのはた","こっき","ぱれすちな"], + "🇵🇹": ["ぽるとがるこっき","こっき","ぽるとがる"], + "🇵🇼": ["ぱらおこっき","こっき","ぱらお"], + "🇵🇾": ["ぱらぐあいこっき","こっき","ぱらぐあい"], + "🇶🇦": ["かたーるこっき","こっき","かたーる"], + "🇷🇪": ["れゆにおんのはた","はた","れゆにおん"], + "🇷🇴": ["るーまにあこっき","こっき","るーまにあ"], + "🇷🇸": ["せるびあこっき","こっき","せるびあ"], + "🇷🇺": ["ろしあこっき","こっき","ろしあ"], + "🇷🇼": ["るわんだこっき","こっき","るわんだ"], + "🇸🇦": ["さうじあらびあこっき","こっき","さうじあらびあ"], + "🏴": ["すこっとらんどのはた","すこっとらんど","はた"], + "🇸🇧": ["そろもんしょとうこっき","はた","しょとう","そろもん"], + "🇸🇨": ["せーしぇるこっき","こっき","せーしぇる"], + "🇸🇩": ["すーだんこっき","こっき","すーだん"], + "🇸🇪": ["すうぇーでんこっき","こっき","すうぇーでん"], + "🇸🇬": ["しんがぽーるこっき","こっき","しんがぽーる"], + "🇸🇭": ["せんとへれなとうのはた","はた","へれな","せんと"], + "🇸🇮": ["すろべにあこっき","こっき","すろべにあ"], + "🇸🇰": ["すろばきあこっき","こっき","すろばきあ"], + "🇸🇱": ["しえられおねこっき","こっき","しえられおね"], + "🇸🇲": ["さんまりのこっき","こっき","さんまりの"], + "🇸🇳": ["せねがるこっき","こっき","せねがる"], + "🇸🇴": ["そまりあこっき","こっき","そまりあ"], + "🇸🇷": ["すりなむこっき","こっき","すりなむ"], + "🇸🇸": ["みなみすーだんこっき","こっき","みなみ","みなみすーだん","すーだん"], + "🇸🇹": ["さんとめぷりんしぺこっき","こっき","ぷりんしぺ","ぷりんしぴ","さんとめ","さぉんとめー"], + "🇸🇻": ["えるさるばどるこっき","えるさるばどる","こっき"], + "🇸🇽": ["せんと・まーちんとうのはた","はた","まーちん","せんと"], + "🇸🇾": ["しりあこっき","こっき","しりあ"], + "🇸🇿": ["すわじらんどこっき","こっき","すわじらんど"], + "🇹🇦": ["とりすたんだくーにゃのはた","はた","とりすたん・だ・くーにゃ"], + "🇹🇨": ["たーくす・かいこすしょとうのはた","かいこす","はた","しょとう","たーくす"], + "🇹🇩": ["ちゃどこっき","ちゃど","こっき"], + "🇹🇫": ["ふらんすりょうなんぽう・なんきょくちいきのはた","なんきょく","こっき","ふらんすりょう"], + "🇹🇬": ["とーごこっき","こっき","とーご"], + "🇹🇭": ["たいこっき","こっき","たい"], + "🇹🇯": ["たじきすたんこっき","こっき","たじきすたん"], + "🇹🇰": ["とけらうはた","こっき","とけらう"], + "🇹🇱": ["ひがしてぃもーるこっき","ひがし","ひがしてぃもーる","こっき","てぃもーる・れすて"], + "🇹🇲": ["とるくめにすたんこっき","こっき","とるくめにすたん"], + "🇹🇳": ["ちゅにじあこっき","こっき","ちゅにじあ"], + "🇹🇴": ["とんがこっき","こっき","とんが"], + "🇹🇷": ["とるここっき","こっき","とるこ"], + "🇹🇹": ["とりにだーどとばごこっき","こっき","とばご","とりにだーど"], + "🇹🇻": ["つばるこっき","こっき","つばる"], + "🇹🇼": ["たいわんのはた","ちゅうごく","こっき","たいわん"], + "🇹🇿": ["たんざにあこっき","こっき","たんざにあ"], + "🇺🇦": ["うくらいなこっき","こっき","うくらいな"], + "🇺🇬": ["うがんだこっき","こっき","うがんだ"], + "🇺🇳": ["こくれんのはた","はた","こくれん","れんごう","こくさい"], + "🇺🇸": ["あめりかこっき","あめりか","はた","ごうしゅう","がっしゅうこく","あめりかがっしゅうこく","がっしゅうこくりょうゆうしょうりとう"], + "🇺🇾": ["うるぐあいこっき","こっき","うるぐあい"], + "🇺🇿": ["うずべきすたんこっき","こっき","うずべきすたん"], + "🇻🇦": ["ばちかんしこっき","こっき","ばちかん"], + "🇻🇨": ["せんとびんせんと・ぐれなでぃーんこっき","こっき","ぐれなでぃーんしょとう","せんと","びんせんと"], + "🇻🇪": ["べねずえらこっき","こっき","べねずえら"], + "🇻🇬": ["いぎりすりょうヴぁぁーじんしょとうのはた","いぎりすりょう","こっき","しま","ヴぁーじん"], + "🇻🇮": ["あめりかりょうヴぁーじんしょとうのはた","あめりか","こっき","しま","あめりかがっしゅうこく","がっしゅうこく","ヴぁーじん"], + "🇻🇳": ["べとなむこっき","こっき","べとなむ","ヴぇとなむ"], + "🇻🇺": ["ばぬあつこっき","こっき","ばぬあつ"], + "🏴": ["うぇーるずのはた","うぇーるず","はた"], + "🇼🇫": ["うぉりす・ふつなのはた","こっき","ふつな","うぉりす"], + "🇼🇸": ["さもあこっき","こっき","さもあ"], + "🇽🇰": ["こそぼこっき","こっき","こそぼ"], + "🇾🇪": ["いえめんこっき","こっき","いえめん"], + "🇾🇹": ["まよっとのはた","こっき","まよっと"], + "🇿🇦": ["みなみあふりかこっき","こっき","みなみ","みなみあふりか"], + "🇿🇲": ["ざんびあこっき","こっき","ざんびあ"], + "🇿🇼": ["じんばぶえこっき","こっき","じんばぶえ"] +} \ No newline at end of file diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index a79ea1b420..f955cc5cc1 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -473,6 +473,18 @@ type BlockingListRequest = operations['blocking/list']['requestBody']['content'] // @public (undocumented) type BlockingListResponse = operations['blocking/list']['responses']['200']['content']['application/json']; +// @public (undocumented) +type BubbleGameRankingRequest = operations['bubble-game/ranking']['requestBody']['content']['application/json']; + +// @public (undocumented) +type BubbleGameRankingResponse = operations['bubble-game/ranking']['responses']['200']['content']['application/json']; + +// @public (undocumented) +type BubbleGameRegisterRequest = operations['bubble-game/register']['requestBody']['content']['application/json']; + +// @public (undocumented) +type BubbleGameRegisterResponse = operations['bubble-game/register']['responses']['200']['content']['application/json']; + // @public (undocumented) type Channel = components['schemas']['Channel']; @@ -1607,6 +1619,10 @@ declare namespace entities { FetchExternalResourcesRequest, FetchExternalResourcesResponse, RetentionResponse, + BubbleGameRegisterRequest, + BubbleGameRegisterResponse, + BubbleGameRankingRequest, + BubbleGameRankingResponse, Error_2 as Error, UserLite, UserDetailedNotMeOnly, diff --git a/packages/misskey-js/generator/package.json b/packages/misskey-js/generator/package.json index 9c15965b12..a1c0f41cb2 100644 --- a/packages/misskey-js/generator/package.json +++ b/packages/misskey-js/generator/package.json @@ -7,14 +7,14 @@ "generate": "tsx src/generator.ts && eslint ./built/**/* --ext .ts --fix" }, "devDependencies": { - "@apidevtools/swagger-parser": "10.1.0", "@misskey-dev/eslint-plugin": "^1.0.0", + "@readme/openapi-parser": "2.5.0", "@types/node": "20.9.1", "@typescript-eslint/eslint-plugin": "6.11.0", "@typescript-eslint/parser": "6.11.0", "eslint": "8.53.0", "openapi-types": "12.1.3", - "openapi-typescript": "6.7.1", + "openapi-typescript": "6.7.3", "ts-case-convert": "2.0.2", "tsx": "4.4.0", "typescript": "5.3.3" diff --git a/packages/misskey-js/generator/src/generator.ts b/packages/misskey-js/generator/src/generator.ts index f12ed94513..7e72359167 100644 --- a/packages/misskey-js/generator/src/generator.ts +++ b/packages/misskey-js/generator/src/generator.ts @@ -1,10 +1,10 @@ import { mkdir, writeFile } from 'fs/promises'; -import { OpenAPIV3 } from 'openapi-types'; +import { OpenAPIV3_1 } from 'openapi-types'; import { toPascal } from 'ts-case-convert'; -import SwaggerParser from '@apidevtools/swagger-parser'; +import OpenAPIParser from '@readme/openapi-parser'; import openapiTS from 'openapi-typescript'; -function generateVersionHeaderComment(openApiDocs: OpenAPIV3.Document): string { +function generateVersionHeaderComment(openApiDocs: OpenAPIV3_1.Document): string { const contents = { version: openApiDocs.info.version, generatedAt: new Date().toISOString(), @@ -21,7 +21,7 @@ function generateVersionHeaderComment(openApiDocs: OpenAPIV3.Document): string { } async function generateBaseTypes( - openApiDocs: OpenAPIV3.Document, + openApiDocs: OpenAPIV3_1.Document, openApiJsonPath: string, typeFileName: string, ) { @@ -47,7 +47,7 @@ async function generateBaseTypes( } async function generateSchemaEntities( - openApiDocs: OpenAPIV3.Document, + openApiDocs: OpenAPIV3_1.Document, typeFileName: string, outputPath: string, ) { @@ -71,7 +71,7 @@ async function generateSchemaEntities( } async function generateEndpoints( - openApiDocs: OpenAPIV3.Document, + openApiDocs: OpenAPIV3_1.Document, typeFileName: string, entitiesOutputPath: string, endpointOutputPath: string, @@ -79,7 +79,7 @@ async function generateEndpoints( const endpoints: Endpoint[] = []; // misskey-jsはPOST固定で送っているので、こちらも決め打ちする。別メソッドに対応することがあればこちらも直す必要あり - const paths = openApiDocs.paths; + const paths = openApiDocs.paths ?? {}; const postPathItems = Object.keys(paths) .map(it => paths[it]?.post) .filter(filterUndefined); @@ -160,7 +160,7 @@ async function generateEndpoints( } async function generateApiClientJSDoc( - openApiDocs: OpenAPIV3.Document, + openApiDocs: OpenAPIV3_1.Document, apiClientFileName: string, endpointsFileName: string, warningsOutputPath: string, @@ -168,7 +168,7 @@ async function generateApiClientJSDoc( const endpoints: { operationId: string; description: string; }[] = []; // misskey-jsはPOST固定で送っているので、こちらも決め打ちする。別メソッドに対応することがあればこちらも直す必要あり - const paths = openApiDocs.paths; + const paths = openApiDocs.paths ?? {}; const postPathItems = Object.keys(paths) .map(it => paths[it]?.post) .filter(filterUndefined); @@ -221,21 +221,21 @@ async function generateApiClientJSDoc( await writeFile(warningsOutputPath, endpointOutputLine.join('\n')); } -function isRequestBodyObject(value: unknown): value is OpenAPIV3.RequestBodyObject { +function isRequestBodyObject(value: unknown): value is OpenAPIV3_1.RequestBodyObject { if (!value) { return false; } - const { content } = value as Record<keyof OpenAPIV3.RequestBodyObject, unknown>; + const { content } = value as Record<keyof OpenAPIV3_1.RequestBodyObject, unknown>; return content !== undefined; } -function isResponseObject(value: unknown): value is OpenAPIV3.ResponseObject { +function isResponseObject(value: unknown): value is OpenAPIV3_1.ResponseObject { if (!value) { return false; } - const { description } = value as Record<keyof OpenAPIV3.ResponseObject, unknown>; + const { description } = value as Record<keyof OpenAPIV3_1.ResponseObject, unknown>; return description !== undefined; } @@ -330,7 +330,7 @@ async function main() { await mkdir(generatePath, { recursive: true }); const openApiJsonPath = './api.json'; - const openApiDocs = await SwaggerParser.validate(openApiJsonPath) as OpenAPIV3.Document; + const openApiDocs = await OpenAPIParser.parse(openApiJsonPath) as OpenAPIV3_1.Document; const typeFileName = './built/autogen/types.ts'; await generateBaseTypes(openApiDocs, openApiJsonPath, typeFileName); diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index aed8e54fad..a5a3b49d18 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.2 - * generatedAt: 2024-01-07T15:22:15.630Z + * generatedAt: 2024-01-13T04:31:38.782Z */ import type { SwitchCaseResponseType } from '../api.js'; @@ -4053,5 +4053,26 @@ declare module '../api.js' { params: P, credential?: string | null, ): Promise<SwitchCaseResponseType<E, P>>; + + /** No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + request<E extends 'bubble-game/register', P extends Endpoints[E]['req']>( + endpoint: E, + params: P, + credential?: string | null, + ): Promise<SwitchCaseResponseType<E, P>>; + + /** + * No description provided. + * + * **Credential required**: *No* + */ + request<E extends 'bubble-game/ranking', P extends Endpoints[E]['req']>( + endpoint: E, + params: P, + credential?: string | null, + ): Promise<SwitchCaseResponseType<E, P>>; } } diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index d22a48b3da..f063809e16 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.2 - * generatedAt: 2024-01-07T15:22:15.626Z + * generatedAt: 2024-01-13T04:31:38.778Z */ import type { @@ -555,6 +555,10 @@ import type { FetchExternalResourcesResponse, RetentionResponse, SponsorsRequest, + BubbleGameRegisterRequest, + BubbleGameRegisterResponse, + BubbleGameRankingRequest, + BubbleGameRankingResponse, } from './entities.js'; export type Endpoints = { @@ -929,4 +933,6 @@ export type Endpoints = { 'fetch-external-resources': { req: FetchExternalResourcesRequest; res: FetchExternalResourcesResponse }; 'retention': { req: EmptyRequest; res: RetentionResponse }; 'sponsors': { req: SponsorsRequest; res: EmptyResponse }; + 'bubble-game/register': { req: BubbleGameRegisterRequest; res: BubbleGameRegisterResponse }; + 'bubble-game/ranking': { req: BubbleGameRankingRequest; res: BubbleGameRankingResponse }; } diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index b50bbe9042..26e2756acd 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.2 - * generatedAt: 2024-01-07T15:22:15.624Z + * generatedAt: 2024-01-13T04:31:38.775Z */ import { operations } from './types.js'; @@ -557,3 +557,7 @@ export type FetchExternalResourcesRequest = operations['fetch-external-resources export type FetchExternalResourcesResponse = operations['fetch-external-resources']['responses']['200']['content']['application/json']; export type RetentionResponse = operations['retention']['responses']['200']['content']['application/json']; export type SponsorsRequest = operations['sponsors']['requestBody']['content']['application/json']; +export type BubbleGameRegisterRequest = operations['bubble-game/register']['requestBody']['content']['application/json']; +export type BubbleGameRegisterResponse = operations['bubble-game/register']['responses']['200']['content']['application/json']; +export type BubbleGameRankingRequest = operations['bubble-game/ranking']['requestBody']['content']['application/json']; +export type BubbleGameRankingResponse = operations['bubble-game/ranking']['responses']['200']['content']['application/json']; diff --git a/packages/misskey-js/src/autogen/models.ts b/packages/misskey-js/src/autogen/models.ts index 90e2bf660b..5c6bebf2fd 100644 --- a/packages/misskey-js/src/autogen/models.ts +++ b/packages/misskey-js/src/autogen/models.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.2 - * generatedAt: 2024-01-07T15:22:15.623Z + * generatedAt: 2024-01-13T04:31:38.773Z */ import { components } from './types.js'; diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index f881c5db62..e4b411cca4 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -3,7 +3,7 @@ /* * version: 2023.12.2 - * generatedAt: 2024-01-07T15:22:15.494Z + * generatedAt: 2024-01-13T04:31:38.633Z */ /** @@ -3566,6 +3566,31 @@ export type paths = { */ post: operations['sponsors']; }; + '/bubble-game/register': { + /** + * bubble-game/register + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + post: operations['bubble-game/register']; + }; + '/bubble-game/ranking': { + /** + * bubble-game/ranking + * @description No description provided. + * + * **Credential required**: *No* + */ + get: operations['bubble-game/ranking']; + /** + * bubble-game/ranking + * @description No description provided. + * + * **Credential required**: *No* + */ + post: operations['bubble-game/ranking']; + }; }; export type webhooks = Record<string, never>; @@ -3923,7 +3948,7 @@ export type components = { fileIds?: string[]; files?: components['schemas']['DriveFile'][]; tags?: string[]; - poll?: Record<string, unknown> | null; + poll?: Record<string, never> | null; /** * Format: id * @example xxxxxxxxxx @@ -3946,7 +3971,7 @@ export type components = { url?: string; reactionAndUserPairCache?: string[]; clippedCount?: number; - myReaction?: Record<string, unknown> | null; + myReaction?: Record<string, never> | null; }; NoteReaction: { /** @@ -26282,6 +26307,96 @@ export type operations = { 204: { content: never; }; + }; + }; + /** bubble-game/register + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + 'bubble-game/register': { + requestBody: { + content: { + 'application/json': { + score: number; + seed: string; + logs: unknown[]; + gameMode: string; + gameVersion: number; + }; + }; + }; + responses: { + /** @description OK (with results) */ + 200: { + content: { + 'application/json': unknown; + }; + }; + /** @description Client error */ + 400: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Authentication error */ + 401: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Forbidden error */ + 403: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description I'm Ai */ + 418: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description To many requests */ + 429: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Internal server error */ + 500: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + }; + }; + /** + * bubble-game/ranking + * @description No description provided. + * + * **Credential required**: *No* + */ + 'bubble-game/ranking': { + requestBody: { + content: { + 'application/json': { + gameMode: string; + }; + }; + }; + responses: { + /** @description OK (with results) */ + 200: { + content: { + 'application/json': { + /** Format: misskey:id */ + id: string; + score: number; + user: components['schemas']['UserLite']; + }[]; + }; + }; /** @description Client error */ 400: { content: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 841f78adef..ee6b072fe0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1179,12 +1179,12 @@ importers: packages/misskey-js/generator: devDependencies: - '@apidevtools/swagger-parser': - specifier: 10.1.0 - version: 10.1.0(openapi-types@12.1.3) '@misskey-dev/eslint-plugin': specifier: ^1.0.0 version: 1.0.0(@typescript-eslint/eslint-plugin@6.11.0)(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.1)(eslint@8.53.0) + '@readme/openapi-parser': + specifier: 2.5.0 + version: 2.5.0(openapi-types@12.1.3) '@types/node': specifier: 20.9.1 version: 20.9.1 @@ -1201,8 +1201,8 @@ importers: specifier: 12.1.3 version: 12.1.3 openapi-typescript: - specifier: 6.7.1 - version: 6.7.1 + specifier: 6.7.3 + version: 6.7.3 ts-case-convert: specifier: 2.0.2 version: 2.0.2 @@ -1266,14 +1266,6 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@apidevtools/json-schema-ref-parser@9.0.6: - resolution: {integrity: sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==} - dependencies: - '@jsdevtools/ono': 7.1.3 - call-me-maybe: 1.0.2 - js-yaml: 3.14.1 - dev: true - /@apidevtools/openapi-schemas@2.1.0: resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} engines: {node: '>=10'} @@ -1283,21 +1275,6 @@ packages: resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} dev: true - /@apidevtools/swagger-parser@10.1.0(openapi-types@12.1.3): - resolution: {integrity: sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==} - peerDependencies: - openapi-types: '>=7' - dependencies: - '@apidevtools/json-schema-ref-parser': 9.0.6 - '@apidevtools/openapi-schemas': 2.1.0 - '@apidevtools/swagger-methods': 3.0.2 - '@jsdevtools/ono': 7.1.3 - ajv: 8.12.0 - ajv-draft-04: 1.0.0(ajv@8.12.0) - call-me-maybe: 1.0.2 - openapi-types: 12.1.3 - dev: true - /@aw-web-design/x-default-browser@1.4.126: resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} hasBin: true @@ -3270,7 +3247,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 - dev: false /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} @@ -4472,6 +4448,11 @@ packages: engines: {node: '>=12.22'} dev: true + /@humanwhocodes/momoa@2.0.4: + resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} + engines: {node: '>=10.10.0'} + dev: true + /@humanwhocodes/object-schema@2.0.1: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true @@ -5793,6 +5774,48 @@ packages: '@babel/runtime': 7.23.2 dev: true + /@readme/better-ajv-errors@1.6.0(ajv@8.12.0): + resolution: {integrity: sha512-9gO9rld84Jgu13kcbKRU+WHseNhaVt76wYMeRDGsUGYxwJtI3RmEJ9LY9dZCYQGI8eUZLuxb5qDja0nqklpFjQ==} + engines: {node: '>=14'} + peerDependencies: + ajv: 4.11.8 - 8 + dependencies: + '@babel/code-frame': 7.23.4 + '@babel/runtime': 7.23.4 + '@humanwhocodes/momoa': 2.0.4 + ajv: 8.12.0 + chalk: 4.1.2 + json-to-ast: 2.1.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + + /@readme/json-schema-ref-parser@1.2.0: + resolution: {integrity: sha512-Bt3QVovFSua4QmHa65EHUmh2xS0XJ3rgTEUPH998f4OW4VVJke3BuS16f+kM0ZLOGdvIrzrPRqwihuv5BAjtrA==} + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + call-me-maybe: 1.0.2 + js-yaml: 4.1.0 + dev: true + + /@readme/openapi-parser@2.5.0(openapi-types@12.1.3): + resolution: {integrity: sha512-IbymbOqRuUzoIgxfAAR7XJt2FWl6n2yqN09fF5adacGm7W03siA3bj1Emql0X9D2T+RpBYz3x9zDsMhuoMP62A==} + engines: {node: '>=14'} + peerDependencies: + openapi-types: '>=7' + dependencies: + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + '@readme/better-ajv-errors': 1.6.0(ajv@8.12.0) + '@readme/json-schema-ref-parser': 1.2.0 + ajv: 8.12.0 + ajv-draft-04: 1.0.0(ajv@8.12.0) + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + dev: true + /@rollup/plugin-json@6.1.0(rollup@4.9.1): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} @@ -10397,6 +10420,11 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true + /code-error-fragment@0.0.230: + resolution: {integrity: sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==} + engines: {node: '>= 4'} + dev: true + /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true @@ -13067,6 +13095,10 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + /grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true @@ -14628,6 +14660,14 @@ packages: /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + /json-to-ast@2.1.0: + resolution: {integrity: sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==} + engines: {node: '>= 4'} + dependencies: + code-error-fragment: 0.0.230 + grapheme-splitter: 1.0.4 + dev: true + /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -14675,6 +14715,11 @@ packages: - web-streams-polyfill dev: false + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + /jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} @@ -15950,8 +15995,8 @@ packages: /openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - /openapi-typescript@6.7.1: - resolution: {integrity: sha512-Q3Ltt0KUm2smcPrsaR8qKmSwQ1KM4yGDJVoQdpYa0yvKPeN8huDx5utMT7DvwvJastHHzUxajjivK3WN2+fobg==} + /openapi-typescript@6.7.3: + resolution: {integrity: sha512-es3mGcDXV6TKPo6n3aohzHm0qxhLyR39MhF6mkD1FwFGjhxnqMqfSIgM0eCpInZvqatve4CxmXcMZw3jnnsaXw==} hasBin: true dependencies: ansi-colors: 4.1.3 diff --git a/scripts/changelog-checker/.eslintrc.cjs b/scripts/changelog-checker/.eslintrc.cjs new file mode 100644 index 0000000000..6acf8b3e6e --- /dev/null +++ b/scripts/changelog-checker/.eslintrc.cjs @@ -0,0 +1,9 @@ +module.exports = { + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + extends: [ + '../../packages/shared/.eslintrc.js', + ], +}; diff --git a/scripts/changelog-checker/.gitignore b/scripts/changelog-checker/.gitignore new file mode 100644 index 0000000000..882936f9bd --- /dev/null +++ b/scripts/changelog-checker/.gitignore @@ -0,0 +1,3 @@ +node_modules +coverage +.idea \ No newline at end of file diff --git a/scripts/changelog-checker/package-lock.json b/scripts/changelog-checker/package-lock.json new file mode 100644 index 0000000000..ba51d94647 --- /dev/null +++ b/scripts/changelog-checker/package-lock.json @@ -0,0 +1,2769 @@ +{ + "name": "changelog-checker", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "changelog-checker", + "version": "1.0.0", + "devDependencies": { + "@types/mdast": "4.0.3", + "@types/node": "20.10.7", + "@vitest/coverage-v8": "1.1.3", + "mdast-util-to-string": "4.0.0", + "remark": "15.0.1", + "remark-parse": "11.0.0", + "typescript": "5.3.3", + "unified": "11.0.4", + "vite": "5.0.11", + "vite-node": "1.1.3", + "vitest": "1.1.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz", + "integrity": "sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz", + "integrity": "sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz", + "integrity": "sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz", + "integrity": "sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz", + "integrity": "sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz", + "integrity": "sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz", + "integrity": "sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz", + "integrity": "sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz", + "integrity": "sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz", + "integrity": "sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz", + "integrity": "sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz", + "integrity": "sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz", + "integrity": "sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz", + "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/@vitest/coverage-v8": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.1.3.tgz", + "integrity": "sha512-Uput7t3eIcbSTOTQBzGtS+0kah96bX+szW9qQrLeGe3UmgL2Akn8POnyC2lH7XsnREZOds9aCUTxgXf+4HX5RA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.2", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "^1.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.3.tgz", + "integrity": "sha512-MnJqsKc1Ko04lksF9XoRJza0bGGwTtqfbyrsYv5on4rcEkdo+QgUdITenBQBUltKzdxW7K3rWh+nXRULwsdaVg==", + "dev": true, + "dependencies": { + "@vitest/spy": "1.1.3", + "@vitest/utils": "1.1.3", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.3.tgz", + "integrity": "sha512-Va2XbWMnhSdDEh/OFxyUltgQuuDRxnarK1hW5QNN4URpQrqq6jtt8cfww/pQQ4i0LjoYxh/3bYWvDFlR9tU73g==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.1.3", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.3.tgz", + "integrity": "sha512-U0r8pRXsLAdxSVAyGNcqOU2H3Z4Y2dAAGGelL50O0QRMdi1WWeYHdrH/QWpN1e8juWfVKsb8B+pyJwTC+4Gy9w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.3.tgz", + "integrity": "sha512-Ec0qWyGS5LhATFQtldvChPTAHv08yHIOZfiNcjwRQbFPHpkih0md9KAbs7TfeIfL7OFKoe7B/6ukBTqByubXkQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.3.tgz", + "integrity": "sha512-Dyt3UMcdElTll2H75vhxfpZu03uFpXRCHxWnzcrFjZxT1kTbq8ALUYIeBgGolo1gldVdI0YSlQRacsqxTwNqwg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", + "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.0.tgz", + "integrity": "sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/esbuild": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/magicast": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.2.tgz", + "integrity": "sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "source-map-js": "^1.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", + "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/remark": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.4.tgz", + "integrity": "sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.4", + "@rollup/rollup-android-arm64": "4.9.4", + "@rollup/rollup-darwin-arm64": "4.9.4", + "@rollup/rollup-darwin-x64": "4.9.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.4", + "@rollup/rollup-linux-arm64-gnu": "4.9.4", + "@rollup/rollup-linux-arm64-musl": "4.9.4", + "@rollup/rollup-linux-riscv64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-musl": "4.9.4", + "@rollup/rollup-win32-arm64-msvc": "4.9.4", + "@rollup/rollup-win32-ia32-msvc": "4.9.4", + "@rollup/rollup-win32-x64-msvc": "4.9.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", + "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.3.tgz", + "integrity": "sha512-BLSO72YAkIUuNrOx+8uznYICJfTEbvBAmWClY3hpath5+h1mbPS5OMn42lrTxXuyCazVyZoDkSRnju78GiVCqA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.3.tgz", + "integrity": "sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ==", + "dev": true, + "dependencies": { + "@vitest/expect": "1.1.3", + "@vitest/runner": "1.1.3", + "@vitest/snapshot": "1.1.3", + "@vitest/spy": "1.1.3", + "@vitest/utils": "1.1.3", + "acorn-walk": "^8.3.1", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.1.3", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "^1.0.0", + "@vitest/ui": "^1.0.0", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/scripts/changelog-checker/package.json b/scripts/changelog-checker/package.json new file mode 100644 index 0000000000..8c9a49def1 --- /dev/null +++ b/scripts/changelog-checker/package.json @@ -0,0 +1,24 @@ +{ + "name": "changelog-checker", + "version": "1.0.0", + "description": "", + "type": "module", + "scripts": { + "run": "vite-node src/index.ts", + "test": "vitest run", + "test:coverage": "vitest run --coverage" + }, + "devDependencies": { + "@types/mdast": "4.0.3", + "@types/node": "20.10.7", + "@vitest/coverage-v8": "1.1.3", + "mdast-util-to-string": "4.0.0", + "remark": "15.0.1", + "remark-parse": "11.0.0", + "typescript": "5.3.3", + "unified": "11.0.4", + "vite": "5.0.11", + "vite-node": "1.1.3", + "vitest": "1.1.3" + } +} diff --git a/scripts/changelog-checker/src/checker.ts b/scripts/changelog-checker/src/checker.ts new file mode 100644 index 0000000000..bbd5b2270a --- /dev/null +++ b/scripts/changelog-checker/src/checker.ts @@ -0,0 +1,87 @@ +import { Release } from './parser.js'; + +export class Result { + public readonly success: boolean; + public readonly message?: string; + + private constructor(success: boolean, message?: string) { + this.success = success; + this.message = message; + } + + static ofSuccess(): Result { + return new Result(true); + } + + static ofFailed(message?: string): Result { + return new Result(false, message); + } +} + +/** + * develop -> masterまたはrelease -> masterを想定したパターン。 + * base側の先頭とhead側で追加された分のリリースより1つ前のバージョンが等価であるかチェックする。 + */ +export function checkNewRelease(base: Release[], head: Release[]): Result { + const releaseCountDiff = head.length - base.length; + if (releaseCountDiff <= 0) { + return Result.ofFailed('Invalid release count.'); + } + + const baseLatest = base[0]; + const headPrevious = head[releaseCountDiff]; + + if (baseLatest.releaseName !== headPrevious.releaseName) { + return Result.ofFailed('Contains unexpected releases.'); + } + + return Result.ofSuccess(); +} + +/** + * topic -> developまたはtopic -> masterを想定したパターン。 + * head側の最新リリース配下に書き加えられているかをチェックする。 + */ +export function checkNewTopic(base: Release[], head: Release[]): Result { + if (head.length !== base.length) { + return Result.ofFailed('Invalid release count.'); + } + + const headLatest = head[0]; + for (let relIdx = 0; relIdx < base.length; relIdx++) { + const baseItem = base[relIdx]; + const headItem = head[relIdx]; + if (baseItem.releaseName !== headItem.releaseName) { + // リリースの順番が変わってると成立しないのでエラーにする + return Result.ofFailed(`Release is different. base:${baseItem.releaseName}, head:${headItem.releaseName}`); + } + + if (baseItem.categories.length !== headItem.categories.length) { + // カテゴリごと書き加えられたパターン + if (headLatest.releaseName !== headItem.releaseName) { + // 最新リリース以外に追記されていた場合 + return Result.ofFailed(`There is an error in the update history. expected additions:${headLatest.releaseName}, actual additions:${headItem.releaseName}`); + } + } else { + // カテゴリ数の変動はないのでリスト項目の数をチェック + for (let catIdx = 0; catIdx < baseItem.categories.length; catIdx++) { + const baseCategory = baseItem.categories[catIdx]; + const headCategory = headItem.categories[catIdx]; + + if (baseCategory.categoryName !== headCategory.categoryName) { + // カテゴリの順番が変わっていると成立しないのでエラーにする + return Result.ofFailed(`Category is different. base:${baseCategory.categoryName}, head:${headCategory.categoryName}`); + } + + if (baseCategory.items.length !== headCategory.items.length) { + if (headLatest.releaseName !== headItem.releaseName) { + // 最新リリース以外に追記されていた場合 + return Result.ofFailed(`There is an error in the update history. expected additions:${headLatest.releaseName}, actual additions:${headItem.releaseName}`); + } + } + } + } + } + + return Result.ofSuccess(); +} diff --git a/scripts/changelog-checker/src/index.ts b/scripts/changelog-checker/src/index.ts new file mode 100644 index 0000000000..8cbeb297d9 --- /dev/null +++ b/scripts/changelog-checker/src/index.ts @@ -0,0 +1,33 @@ +import * as process from 'process'; +import * as fs from 'fs'; +import { parseChangeLog } from './parser.js'; +import { checkNewRelease, checkNewTopic } from './checker.js'; + +function abort(message?: string) { + if (message) { + console.error(message); + } + + process.exit(1); +} + +function main() { + if (!fs.existsSync('./CHANGELOG-base.md') || !fs.existsSync('./CHANGELOG-head.md')) { + console.error('CHANGELOG-base.md or CHANGELOG-head.md is missing.'); + return; + } + + const base = parseChangeLog('./CHANGELOG-base.md'); + const head = parseChangeLog('./CHANGELOG-head.md'); + + const result = (base.length < head.length) + ? checkNewRelease(base, head) + : checkNewTopic(base, head); + + if (!result.success) { + abort(result.message); + return; + } +} + +main(); diff --git a/scripts/changelog-checker/src/parser.ts b/scripts/changelog-checker/src/parser.ts new file mode 100644 index 0000000000..d6a9ddeda8 --- /dev/null +++ b/scripts/changelog-checker/src/parser.ts @@ -0,0 +1,62 @@ +import * as fs from 'node:fs'; +import { unified } from 'unified'; +import remarkParse from 'remark-parse'; +import { Heading, List, Node } from 'mdast'; +import { toString } from 'mdast-util-to-string'; + +export class Release { + public readonly releaseName: string; + public readonly categories: ReleaseCategory[]; + + constructor(releaseName: string, categories: ReleaseCategory[] = []) { + this.releaseName = releaseName; + this.categories = [...categories]; + } +} + +export class ReleaseCategory { + public readonly categoryName: string; + public readonly items: string[]; + + constructor(categoryName: string, items: string[] = []) { + this.categoryName = categoryName; + this.items = [...items]; + } +} + +function isHeading(node: Node): node is Heading { + return node.type === 'heading'; +} + +function isList(node: Node): node is List { + return node.type === 'list'; +} + +export function parseChangeLog(path: string): Release[] { + const input = fs.readFileSync(path, { encoding: 'utf8' }); + const processor = unified().use(remarkParse); + + const releases: Release[] = []; + const root = processor.parse(input); + + let release: Release | null = null; + let category: ReleaseCategory | null = null; + for (const it of root.children) { + if (isHeading(it) && it.depth === 2) { + // リリース + release = new Release(toString(it)); + releases.push(release); + } else if (isHeading(it) && it.depth === 3 && release) { + // リリース配下のカテゴリ + category = new ReleaseCategory(toString(it)); + release.categories.push(category); + } else if (isList(it) && category) { + for (const listItem of it.children) { + // カテゴリ配下のリスト項目 + category.items.push(toString(listItem)); + } + } + } + + return releases; +} diff --git a/scripts/changelog-checker/test/checker.test.ts b/scripts/changelog-checker/test/checker.test.ts new file mode 100644 index 0000000000..bc73e5622b --- /dev/null +++ b/scripts/changelog-checker/test/checker.test.ts @@ -0,0 +1,414 @@ +import {expect, suite, test} from "vitest"; +import {Release, ReleaseCategory} from "../src/parser"; +import {checkNewRelease, checkNewTopic} from "../src/checker"; + +suite('checkNewRelease', () => { + test('headに新しいリリースがある1', () => { + const base = [new Release('2024.12.0')] + const head = [new Release('2024.12.1'), new Release('2024.12.0')] + + const result = checkNewRelease(base, head) + + expect(result.success).toBe(true) + }) + + test('headに新しいリリースがある2', () => { + const base = [new Release('2024.12.0')] + const head = [new Release('2024.12.2'), new Release('2024.12.1'), new Release('2024.12.0')] + + const result = checkNewRelease(base, head) + + expect(result.success).toBe(true) + }) + + + test('リリースの数が同じ', () => { + const base = [new Release('2024.12.0')] + const head = [new Release('2024.12.0')] + + const result = checkNewRelease(base, head) + + console.log(result.message) + expect(result.success).toBe(false) + }) + + test('baseにあるリリースがheadにない', () => { + const base = [new Release('2024.12.0')] + const head = [new Release('2024.12.2'), new Release('2024.12.1')] + + const result = checkNewRelease(base, head) + + console.log(result.message) + expect(result.success).toBe(false) + }) +}) + +suite('checkNewTopic', () => { + test('追記なし', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]) + ] + + const result = checkNewTopic(base, head) + + expect(result.success).toBe(true) + }) + + test('最新バージョンにカテゴリを追加したときはエラーにならない', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]) + ] + + const result = checkNewTopic(base, head) + + expect(result.success).toBe(true) + }) + + test('最新バージョンからカテゴリを削除したときはエラーにならない', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat3', + 'feat4', + ]) + ]) + ] + + const result = checkNewTopic(base, head) + + expect(result.success).toBe(true) + }) + + test('最新バージョンに追記したときはエラーにならない', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + 'feat3', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const result = checkNewTopic(base, head) + + expect(result.success).toBe(true) + }) + + test('最新バージョンから削除したときはエラーにならない', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const result = checkNewTopic(base, head) + + expect(result.success).toBe(true) + }) + + test('古いバージョンにカテゴリを追加したときはエラーになる', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + new ReleaseCategory('Client', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const result = checkNewTopic(base, head) + + console.log(result.message) + expect(result.success).toBe(false) + }) + + test('古いバージョンからカテゴリを削除したときはエラーになる', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + ]) + ] + + const result = checkNewTopic(base, head) + + console.log(result.message) + expect(result.success).toBe(false) + }) + + test('古いバージョンに追記したときはエラーになる', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + 'feat3', + ]), + ]) + ] + + const result = checkNewTopic(base, head) + + console.log(result.message) + expect(result.success).toBe(false) + }) + + test('古いバージョンから削除したときはエラーになる', () => { + const base = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]) + ] + + const head = [ + new Release('2024.12.1', [ + new ReleaseCategory('Server', [ + 'feat1', + 'feat2', + ]), + ]), + new Release('2024.12.0', [ + new ReleaseCategory('Server', [ + 'feat1', + ]), + ]) + ] + + const result = checkNewTopic(base, head) + + console.log(result.message) + expect(result.success).toBe(false) + }) +}) \ No newline at end of file diff --git a/scripts/changelog-checker/tsconfig.json b/scripts/changelog-checker/tsconfig.json new file mode 100644 index 0000000000..32f1547eb8 --- /dev/null +++ b/scripts/changelog-checker/tsconfig.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "target": "ES2022", + "module": "nodenext", + "moduleResolution": "nodenext", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "removeComments": true, + "strict": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "experimentalDecorators": true, + "noImplicitReturns": true, + "esModuleInterop": true, + "typeRoots": [ + "./node_modules/@types" + ], + "lib": [ + "esnext" + ] + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "test/**/*" + ] +} diff --git a/scripts/changelog-checker/vite.config.ts b/scripts/changelog-checker/vite.config.ts new file mode 100644 index 0000000000..46db02c806 --- /dev/null +++ b/scripts/changelog-checker/vite.config.ts @@ -0,0 +1,6 @@ +import {defineConfig} from 'vite'; + + +const config = defineConfig({}); + +export default config;