-
-
-
{{ i18n.ts.preview }}
-
-
-
-
-
-
-
+
+
+
+
+
{{ i18n.ts.preview }}
+
+
-
-
-
-
-
-
{{ i18n.ts._imageEffector.addEffect }}
+
+
+
-
-
+
+
+
+
+
+
+ {{ i18n.ts._imageEffector.addEffect }}
+
+
+
@@ -56,15 +55,12 @@ import type { ImageEffectorLayer } from '@/utility/image-effector/ImageEffector.
import { i18n } from '@/i18n.js';
import { ImageEffector } from '@/utility/image-effector/ImageEffector.js';
import MkModalWindow from '@/components/MkModalWindow.vue';
-import MkSelect from '@/components/MkSelect.vue';
+import MkPreviewWithControls from '@/components/MkPreviewWithControls.vue';
import MkButton from '@/components/MkButton.vue';
-import MkInput from '@/components/MkInput.vue';
import XLayer from '@/components/MkImageEffectorDialog.Layer.vue';
import * as os from '@/os.js';
-import { deepClone } from '@/utility/clone.js';
import { FXS } from '@/utility/image-effector/fxs.js';
import { genId } from '@/utility/id.js';
-import { prefer } from '@/preferences.js';
const props = defineProps<{
image: File;
@@ -367,33 +363,6 @@ function onImagePointerdown(ev: PointerEvent) {
--
cgit v1.2.3-freya
From 41592eafb363e3c62ab2d3e5f41b38d7d083d3fb Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Fri, 9 Jan 2026 22:06:40 +0900
Subject: refactor: make noImplicitAny true (#17083)
* wip
* Update emojis.emoji.vue
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update manager.ts
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update analytics.ts
---
packages/backend/src/models/json-schema/user.ts | 3 +
.../api/endpoints/admin/announcements/list.ts | 4 +-
.../api/endpoints/admin/emoji/list-remote.ts | 34 +-----
.../frontend-embed/src/components/EmMediaImage.vue | 2 +-
packages/frontend-embed/src/components/EmMfm.ts | 2 +-
packages/frontend-embed/src/pages/clip.vue | 2 +-
packages/frontend-embed/src/pages/tag.vue | 8 +-
.../frontend-embed/src/pages/user-timeline.vue | 6 +-
packages/frontend-embed/tsconfig.json | 2 +-
packages/frontend/.storybook/charts.ts | 2 +-
packages/frontend/package.json | 4 +-
packages/frontend/src/accounts.ts | 6 +-
packages/frontend/src/aiscript/ui.ts | 4 +-
packages/frontend/src/analytics.ts | 1 +
packages/frontend/src/components/MkAbuseReport.vue | 4 +-
.../frontend/src/components/MkAchievements.vue | 7 +-
packages/frontend/src/components/MkAsUi.vue | 4 +-
packages/frontend/src/components/MkAuthConfirm.vue | 2 +-
.../src/components/MkAutocomplete.stories.impl.ts | 7 +-
.../frontend/src/components/MkAutocomplete.vue | 6 +-
packages/frontend/src/components/MkButton.vue | 6 +-
packages/frontend/src/components/MkCaptcha.vue | 4 +-
packages/frontend/src/components/MkChannelList.vue | 2 +-
packages/frontend/src/components/MkChart.vue | 10 +-
packages/frontend/src/components/MkClickerGame.vue | 4 +-
packages/frontend/src/components/MkCodeEditor.vue | 22 ++--
.../src/components/MkContextMenu.stories.impl.ts | 6 +-
packages/frontend/src/components/MkContextMenu.vue | 8 +-
packages/frontend/src/components/MkDrive.file.vue | 2 +-
.../frontend/src/components/MkDrive.folder.vue | 4 +-
packages/frontend/src/components/MkDrive.vue | 12 +-
.../src/components/MkEmojiPicker.section.vue | 8 +-
packages/frontend/src/components/MkEmojiPicker.vue | 4 +-
.../src/components/MkExtensionInstaller.vue | 2 +-
packages/frontend/src/components/MkFolder.vue | 2 +-
packages/frontend/src/components/MkForm.file.vue | 2 +-
packages/frontend/src/components/MkHeatmap.vue | 5 +-
.../src/components/MkImageEffectorDialog.vue | 4 +-
packages/frontend/src/components/MkInput.vue | 7 +-
.../frontend/src/components/MkInstanceCardMini.vue | 2 +-
.../frontend/src/components/MkInstanceStats.vue | 32 +++---
packages/frontend/src/components/MkLaunchPad.vue | 4 +-
packages/frontend/src/components/MkMediaImage.vue | 4 +-
packages/frontend/src/components/MkMediaVideo.vue | 2 +-
packages/frontend/src/components/MkMenu.vue | 6 +-
packages/frontend/src/components/MkModal.vue | 4 +-
packages/frontend/src/components/MkNote.vue | 2 +-
.../frontend/src/components/MkNoteDetailed.vue | 12 +-
.../frontend/src/components/MkNotification.vue | 2 +-
.../frontend/src/components/MkObjectView.value.vue | 2 +-
packages/frontend/src/components/MkPagination.vue | 2 +-
packages/frontend/src/components/MkPollEditor.vue | 4 +-
packages/frontend/src/components/MkPostForm.vue | 121 +++++++++++++--------
.../frontend/src/components/MkPostFormAttaches.vue | 6 +-
.../src/components/MkPreferenceContainer.vue | 2 +-
packages/frontend/src/components/MkPreview.vue | 2 +-
.../src/components/MkReactionsViewer.reaction.vue | 2 +-
.../frontend/src/components/MkReactionsViewer.vue | 6 +-
.../frontend/src/components/MkRetentionHeatmap.vue | 4 +-
.../frontend/src/components/MkRoleSelectDialog.vue | 6 +-
.../src/components/MkServerSetupWizardDialog.vue | 2 +-
.../frontend/src/components/MkSignin.input.vue | 2 +-
.../frontend/src/components/MkSortOrderEditor.vue | 6 +-
packages/frontend/src/components/MkSpot.vue | 4 +-
.../src/components/MkStreamingNotesTimeline.vue | 7 +-
.../MkStreamingNotificationsTimeline.vue | 4 +-
packages/frontend/src/components/MkSuperMenu.vue | 2 +-
.../src/components/MkSystemWebhookEditor.vue | 2 +-
packages/frontend/src/components/MkTabs.vue | 6 +-
packages/frontend/src/components/MkTagItem.vue | 4 +-
packages/frontend/src/components/MkTextarea.vue | 20 ++--
.../src/components/MkTokenGenerateWindow.vue | 16 +--
packages/frontend/src/components/MkTooltip.vue | 4 +-
.../src/components/MkTutorialDialog.Note.vue | 4 +-
.../frontend/src/components/MkUploaderDialog.vue | 6 +-
.../frontend/src/components/MkUploaderItems.vue | 8 +-
packages/frontend/src/components/MkUserList.vue | 2 +-
packages/frontend/src/components/MkUserPopup.vue | 2 +-
.../src/components/MkUserSetupDialog.Profile.vue | 2 +-
.../MkVisitorDashboard.ActiveUsersChart.vue | 2 +-
.../frontend/src/components/MkVisitorDashboard.vue | 2 +-
.../frontend/src/components/MkWaitingDialog.vue | 4 +-
.../components/MkWatermarkEditorDialog.Layer.vue | 2 +-
.../src/components/MkWatermarkEditorDialog.vue | 2 +-
.../src/components/MkWidgetSettingsDialog.vue | 2 +-
packages/frontend/src/components/MkWidgets.vue | 36 +++---
packages/frontend/src/components/MkWindow.vue | 24 ++--
packages/frontend/src/components/global/I18n.vue | 2 +-
packages/frontend/src/components/global/MkA.vue | 4 +-
.../frontend/src/components/global/MkAvatar.vue | 4 +-
.../src/components/global/MkCondensedLine.vue | 12 +-
.../src/components/global/MkCustomEmoji.vue | 2 +-
.../frontend/src/components/global/MkEmoji.vue | 2 +-
packages/frontend/src/components/global/MkMfm.ts | 2 +-
.../src/components/global/MkPageHeader.tabs.vue | 8 +-
.../src/components/global/MkPageHeader.vue | 5 +-
packages/frontend/src/components/global/MkTip.vue | 2 +-
.../frontend/src/components/grid/MkDataCell.vue | 2 +-
packages/frontend/src/components/grid/MkGrid.vue | 2 +-
.../frontend/src/composables/use-chart-tooltip.ts | 7 +-
packages/frontend/src/composables/use-form.ts | 2 +-
.../frontend/src/composables/use-note-capture.ts | 22 ++--
packages/frontend/src/composables/use-tooltip.ts | 8 +-
packages/frontend/src/composables/use-uploader.ts | 2 +-
packages/frontend/src/custom-emojis.ts | 4 +-
packages/frontend/src/deck.ts | 4 +-
packages/frontend/src/filters/bytes.ts | 2 +-
packages/frontend/src/filters/kmg.ts | 2 +-
packages/frontend/src/filters/note.ts | 2 +-
packages/frontend/src/instance.ts | 2 +-
packages/frontend/src/lib/nirax.ts | 10 +-
packages/frontend/src/navbar.ts | 15 ++-
packages/frontend/src/os.ts | 2 +-
packages/frontend/src/pages/about.federation.vue | 2 +-
packages/frontend/src/pages/admin-user.vue | 12 +-
.../src/pages/admin/RolesEditorFormula.vue | 70 +++++++-----
packages/frontend/src/pages/admin/abuses.vue | 2 +-
.../frontend/src/pages/admin/announcements.vue | 49 ++++++---
.../admin/custom-emojis-manager.local.list.vue | 9 +-
.../pages/admin/custom-emojis-manager.register.vue | 3 +-
.../pages/admin/custom-emojis-manager.remote.vue | 2 +-
.../admin/federation-job-queue.chart.chart.vue | 4 +-
packages/frontend/src/pages/admin/index.vue | 2 +-
.../src/pages/admin/overview.active-users.vue | 2 +-
packages/frontend/src/pages/admin/overview.vue | 2 +-
packages/frontend/src/pages/admin/roles.edit.vue | 15 ++-
packages/frontend/src/pages/admin/roles.editor.vue | 15 ++-
packages/frontend/src/pages/admin/roles.role.vue | 27 ++---
packages/frontend/src/pages/admin/users.vue | 3 +-
packages/frontend/src/pages/announcements.vue | 9 +-
packages/frontend/src/pages/api-console.vue | 2 +-
packages/frontend/src/pages/auth.form.vue | 2 +-
packages/frontend/src/pages/auth.vue | 2 +-
.../src/pages/avatar-decoration-edit-dialog.vue | 6 +-
packages/frontend/src/pages/avatar-decorations.vue | 4 +-
packages/frontend/src/pages/channel-editor.vue | 2 +-
packages/frontend/src/pages/chat/XMessage.vue | 6 +-
packages/frontend/src/pages/chat/home.home.vue | 6 +-
packages/frontend/src/pages/chat/room.form.vue | 2 +-
packages/frontend/src/pages/chat/room.vue | 2 +-
packages/frontend/src/pages/clip.vue | 9 +-
.../frontend/src/pages/custom-emojis-manager.vue | 28 +++--
.../frontend/src/pages/drop-and-fusion.game.vue | 2 +-
packages/frontend/src/pages/emoji-edit-dialog.vue | 6 +-
packages/frontend/src/pages/emojis.emoji.vue | 22 ++--
packages/frontend/src/pages/flash/flash-edit.vue | 2 +-
packages/frontend/src/pages/flash/flash.vue | 8 +-
packages/frontend/src/pages/follow-requests.vue | 2 +-
packages/frontend/src/pages/gallery/edit.root.vue | 4 +-
packages/frontend/src/pages/gallery/post.vue | 4 +-
packages/frontend/src/pages/my-lists/list.vue | 4 +-
packages/frontend/src/pages/notifications.vue | 7 +-
.../src/pages/page-editor/page-editor.blocks.vue | 6 +-
.../frontend/src/pages/page-editor/page-editor.vue | 4 +-
packages/frontend/src/pages/page.vue | 8 +-
packages/frontend/src/pages/reversi/game.board.vue | 9 +-
.../frontend/src/pages/reversi/game.setting.vue | 9 +-
packages/frontend/src/pages/reversi/index.vue | 6 +-
packages/frontend/src/pages/scratchpad.vue | 2 +-
packages/frontend/src/pages/settings/2fa.vue | 5 +-
.../frontend/src/pages/settings/account-data.vue | 12 +-
packages/frontend/src/pages/settings/accounts.vue | 4 +-
packages/frontend/src/pages/settings/apps.vue | 4 +-
packages/frontend/src/pages/settings/deck.vue | 2 +-
.../frontend/src/pages/settings/drive-cleaner.vue | 4 +-
.../src/pages/settings/drive.ImageFrameItem.vue | 2 +-
.../src/pages/settings/drive.WatermarkItem.vue | 2 +-
packages/frontend/src/pages/settings/email.vue | 4 +-
.../src/pages/settings/emoji-palette.palette.vue | 8 +-
.../frontend/src/pages/settings/emoji-palette.vue | 4 +-
packages/frontend/src/pages/settings/index.vue | 2 +-
.../src/pages/settings/mute-block.emoji-mute.vue | 6 +-
.../frontend/src/pages/settings/mute-block.vue | 7 +-
.../src/pages/settings/mute-block.word-mute.vue | 8 +-
.../frontend/src/pages/settings/notifications.vue | 22 ++--
packages/frontend/src/pages/settings/other.vue | 2 +-
packages/frontend/src/pages/settings/plugin.vue | 4 +-
.../frontend/src/pages/settings/preferences.vue | 4 +-
packages/frontend/src/pages/settings/profile.vue | 9 +-
packages/frontend/src/pages/settings/profiles.vue | 9 +-
.../frontend/src/pages/settings/sounds.sound.vue | 4 +-
packages/frontend/src/pages/settings/sounds.vue | 11 +-
packages/frontend/src/pages/settings/theme.vue | 2 +-
packages/frontend/src/pages/tag.vue | 5 +-
packages/frontend/src/pages/theme-editor.vue | 4 +-
packages/frontend/src/pages/timeline.vue | 13 ++-
.../frontend/src/pages/user/activity.following.vue | 2 +-
.../frontend/src/pages/user/activity.notes.vue | 2 +-
packages/frontend/src/pages/user/activity.pv.vue | 2 +-
packages/frontend/src/pages/user/home.vue | 2 +-
.../frontend/src/pages/user/index.activity.vue | 2 +-
packages/frontend/src/pages/welcome.setup.vue | 8 +-
packages/frontend/src/pref-migrate.ts | 15 +--
packages/frontend/src/preferences/manager.ts | 21 ++--
packages/frontend/src/store.ts | 86 ---------------
packages/frontend/src/theme.ts | 6 +-
packages/frontend/src/tips.ts | 2 +-
packages/frontend/src/types/menu.ts | 2 +-
packages/frontend/src/types/page-header.ts | 3 +-
packages/frontend/src/ui/_common_/common.ts | 4 +-
packages/frontend/src/ui/_common_/navbar-h.vue | 12 +-
packages/frontend/src/ui/_common_/navbar.vue | 10 +-
.../src/ui/_common_/statusbar-federation.vue | 2 +-
packages/frontend/src/ui/_common_/widgets.vue | 28 +++--
packages/frontend/src/ui/deck.vue | 8 +-
packages/frontend/src/ui/deck/column.vue | 18 +--
packages/frontend/src/ui/deck/main-column.vue | 4 +-
packages/frontend/src/ui/deck/widgets-column.vue | 13 ++-
packages/frontend/src/ui/universal.vue | 8 +-
packages/frontend/src/utility/admin-lookup.ts | 8 +-
packages/frontend/src/utility/autocomplete.ts | 2 +-
packages/frontend/src/utility/chart-vline.ts | 2 +-
packages/frontend/src/utility/collect-page-vars.ts | 73 -------------
packages/frontend/src/utility/contains.ts | 14 ---
packages/frontend/src/utility/deep-equal.ts | 2 +-
packages/frontend/src/utility/element-contains.ts | 15 +++
packages/frontend/src/utility/form.ts | 36 +++---
packages/frontend/src/utility/get-embed-code.ts | 13 ++-
.../frontend/src/utility/get-user-environment.ts | 2 +-
packages/frontend/src/utility/snowfall-effect.ts | 22 ++--
.../frontend/src/widgets/WidgetActivity.chart.vue | 25 +++--
packages/frontend/src/widgets/WidgetFederation.vue | 8 +-
.../frontend/src/widgets/WidgetInstanceCloud.vue | 4 +-
packages/frontend/src/widgets/WidgetJobQueue.vue | 25 +++--
packages/frontend/src/widgets/WidgetMemo.vue | 4 +-
packages/frontend/src/widgets/WidgetPhotos.vue | 4 +-
packages/frontend/src/widgets/WidgetTimeline.vue | 6 +-
packages/frontend/src/widgets/index.ts | 4 +-
packages/frontend/src/widgets/widget.ts | 11 +-
packages/frontend/tsconfig.json | 2 +-
packages/misskey-js/etc/misskey-js.api.md | 11 +-
packages/misskey-js/src/autogen/types.ts | 44 ++++++--
packages/misskey-js/src/streaming.types.ts | 12 +-
pnpm-lock.yaml | 16 +++
234 files changed, 977 insertions(+), 974 deletions(-)
delete mode 100644 packages/frontend/src/utility/collect-page-vars.ts
delete mode 100644 packages/frontend/src/utility/contains.ts
create mode 100644 packages/frontend/src/utility/element-contains.ts
(limited to 'packages/frontend/src/components/MkImageEffectorDialog.vue')
diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts
index b5fd38a7d7..f71ec1d023 100644
--- a/packages/backend/src/models/json-schema/user.ts
+++ b/packages/backend/src/models/json-schema/user.ts
@@ -618,6 +618,9 @@ export const packedMeDetailedOnlySchema = {
achievementEarned: { optional: true, ...notificationRecieveConfig },
app: { optional: true, ...notificationRecieveConfig },
test: { optional: true, ...notificationRecieveConfig },
+ login: { optional: true, ...notificationRecieveConfig },
+ createToken: { optional: true, ...notificationRecieveConfig },
+ exportCompleted: { optional: true, ...notificationRecieveConfig },
},
},
emailNotificationTypes: {
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
index 804bd5d9b9..aeebceed5a 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
@@ -51,11 +51,13 @@ export const meta = {
},
icon: {
type: 'string',
- optional: false, nullable: true,
+ optional: false, nullable: false,
+ enum: ['info', 'warning', 'error', 'success'],
},
display: {
type: 'string',
optional: false, nullable: false,
+ enum: ['normal', 'banner', 'dialog'],
},
isActive: {
type: 'boolean',
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
index 660aa55bf8..b9448b4bc2 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
@@ -24,39 +24,7 @@ export const meta = {
optional: false, nullable: false,
items: {
type: 'object',
- optional: false, nullable: false,
- properties: {
- id: {
- type: 'string',
- optional: false, nullable: false,
- format: 'id',
- },
- aliases: {
- type: 'array',
- optional: false, nullable: false,
- items: {
- type: 'string',
- optional: false, nullable: false,
- },
- },
- name: {
- type: 'string',
- optional: false, nullable: false,
- },
- category: {
- type: 'string',
- optional: false, nullable: true,
- },
- host: {
- type: 'string',
- optional: false, nullable: true,
- description: 'The local host is represented with `null`.',
- },
- url: {
- type: 'string',
- optional: false, nullable: false,
- },
- },
+ ref: 'EmojiDetailed',
},
},
} as const;
diff --git a/packages/frontend-embed/src/components/EmMediaImage.vue b/packages/frontend-embed/src/components/EmMediaImage.vue
index 94f0268da4..8cb90247fc 100644
--- a/packages/frontend-embed/src/components/EmMediaImage.vue
+++ b/packages/frontend-embed/src/components/EmMediaImage.vue
@@ -64,7 +64,7 @@ const url = computed(() => (props.raw)
: props.image.thumbnailUrl,
);
-async function onclick(ev: MouseEvent) {
+async function onclick(ev: PointerEvent) {
if (hide.value) {
ev.stopPropagation();
hide.value = false;
diff --git a/packages/frontend-embed/src/components/EmMfm.ts b/packages/frontend-embed/src/components/EmMfm.ts
index 1f9ce9d4f4..5b9a53bbc2 100644
--- a/packages/frontend-embed/src/components/EmMfm.ts
+++ b/packages/frontend-embed/src/components/EmMfm.ts
@@ -299,7 +299,7 @@ export default function (props: MfmProps, { emit }: { emit: SetupContext
({
const notesEl = useTemplateRef('notesEl');
-function top(ev: MouseEvent) {
+function top(ev: PointerEvent) {
const target = ev.target as HTMLElement | null;
if (target && isLink(target)) return;
diff --git a/packages/frontend-embed/src/pages/tag.vue b/packages/frontend-embed/src/pages/tag.vue
index 4b00ae7c2d..8c6cd32bab 100644
--- a/packages/frontend-embed/src/pages/tag.vue
+++ b/packages/frontend-embed/src/pages/tag.vue
@@ -40,15 +40,15 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkChart.vue b/packages/frontend/src/components/MkChart.vue
index c54081ad42..e418e729ca 100644
--- a/packages/frontend/src/components/MkChart.vue
+++ b/packages/frontend/src/components/MkChart.vue
@@ -94,8 +94,8 @@ const props = withDefaults(defineProps<{
const legendEl = useTemplateRef('legendEl');
-const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b));
-const negate = arr => arr.map(x => -x);
+const sum = (...arr: number[][]) => arr.reduce((r, a) => r.map((b, i) => a[i] + b));
+const negate = (arr: number[]) => arr.map((x) => -x);
const colors = {
blue: '#008FFB',
@@ -108,7 +108,7 @@ const colors = {
cyan: '#00e0e0',
};
const colorSets = [colors.blue, colors.green, colors.yellow, colors.red, colors.purple];
-const getColor = (i) => {
+const getColor = (i: number) => {
return colorSets[i % colorSets.length];
};
@@ -142,7 +142,7 @@ const getDate = (ago: number) => {
return props.span === 'day' ? new Date(y, m, d - ago) : new Date(y, m, d, h - ago);
};
-const format = (arr) => {
+const format = (arr: number[]) => {
return arr.map((v, i) => ({
x: getDate(i).getTime(),
y: v,
@@ -371,7 +371,7 @@ const fetchApRequestChart = async (): Promise => {
};
};
-const fetchNotesChart = async (type: string): Promise => {
+const fetchNotesChart = async (type: 'local' | 'remote' | 'combined'): Promise => {
const raw = await misskeyApiGet('charts/notes', { limit: props.limit, span: props.span });
return {
series: [{
diff --git a/packages/frontend/src/components/MkClickerGame.vue b/packages/frontend/src/components/MkClickerGame.vue
index 775964af50..0c856c57eb 100644
--- a/packages/frontend/src/components/MkClickerGame.vue
+++ b/packages/frontend/src/components/MkClickerGame.vue
@@ -20,9 +20,9 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkDrive.file.vue b/packages/frontend/src/components/MkDrive.file.vue
index 0eca85b3a6..e2858084c0 100644
--- a/packages/frontend/src/components/MkDrive.file.vue
+++ b/packages/frontend/src/components/MkDrive.file.vue
@@ -64,7 +64,7 @@ const isDragging = ref(false);
const title = computed(() => `${props.file.name}\n${props.file.type} ${bytes(props.file.size)}`);
-function onContextmenu(ev: MouseEvent) {
+function onContextmenu(ev: PointerEvent) {
os.contextMenu(getDriveFileMenu(props.file, props.folder), ev);
}
diff --git a/packages/frontend/src/components/MkDrive.folder.vue b/packages/frontend/src/components/MkDrive.folder.vue
index 8b2609852c..6d93dfc0d4 100644
--- a/packages/frontend/src/components/MkDrive.folder.vue
+++ b/packages/frontend/src/components/MkDrive.folder.vue
@@ -57,7 +57,7 @@ const props = withDefaults(defineProps<{
const emit = defineEmits<{
(ev: 'chosen', v: Misskey.entities.DriveFolder): void;
(ev: 'unchose', v: Misskey.entities.DriveFolder): void;
- (ev: 'upload', files: File[], folder: Misskey.entities.DriveFolder);
+ (ev: 'upload', files: File[], folder: Misskey.entities.DriveFolder): void;
(ev: 'dragstart'): void;
(ev: 'dragend'): void;
}>();
@@ -277,7 +277,7 @@ function setAsUploadFolder() {
prefer.commit('uploadFolder', props.folder.id);
}
-function onContextmenu(ev: MouseEvent) {
+function onContextmenu(ev: PointerEvent) {
let menu: MenuItem[];
menu = [{
text: i18n.ts.openInWindow,
diff --git a/packages/frontend/src/components/MkDrive.vue b/packages/frontend/src/components/MkDrive.vue
index 6e286f4882..2961bc5032 100644
--- a/packages/frontend/src/components/MkDrive.vue
+++ b/packages/frontend/src/components/MkDrive.vue
@@ -139,7 +139,9 @@ SPDX-License-Identifier: AGPL-3.0-only
primary
rounded
@click="fetchMoreFiles"
- >{{ i18n.ts.loadMore }}
+ >
+ {{ i18n.ts.loadMore }}
+
{{ i18n.ts.dropHereToUpload }}
@@ -491,7 +493,7 @@ function deleteFolder(folderToDelete: Misskey.entities.DriveFolder) {
});
}
-function onFileClick(ev: MouseEvent, file: Misskey.entities.DriveFile) {
+function onFileClick(ev: PointerEvent, file: Misskey.entities.DriveFile) {
if (ev.shiftKey) {
isEditMode.value = true;
}
@@ -563,7 +565,7 @@ function cd(target?: Misskey.entities.DriveFolder | Misskey.entities.DriveFolder
folder.value = folderToMove;
hierarchyFolders.value = [];
- const dive = folderToDive => {
+ const dive = (folderToDive: Misskey.entities.DriveFolder) => {
hierarchyFolders.value.unshift(folderToDive);
if (folderToDive.parent) dive(folderToDive.parent);
};
@@ -689,11 +691,11 @@ function getMenu() {
return menu;
}
-function showMenu(ev: MouseEvent) {
+function showMenu(ev: PointerEvent) {
os.popupMenu(getMenu(), (ev.currentTarget ?? ev.target ?? undefined) as HTMLElement | undefined);
}
-function onContextmenu(ev: MouseEvent) {
+function onContextmenu(ev: PointerEvent) {
os.contextMenu(getMenu(), ev);
}
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.vue b/packages/frontend/src/components/MkEmojiPicker.section.vue
index ef515e471f..3ee32710e5 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.vue
+++ b/packages/frontend/src/components/MkEmojiPicker.section.vue
@@ -62,8 +62,8 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkEmojiPicker.vue b/packages/frontend/src/components/MkEmojiPicker.vue
index 33e9137c2f..bf0f9d0130 100644
--- a/packages/frontend/src/components/MkEmojiPicker.vue
+++ b/packages/frontend/src/components/MkEmojiPicker.vue
@@ -412,13 +412,13 @@ function getDef(emoji: string): string | Misskey.entities.EmojiSimple | UnicodeE
}
/** @see MkEmojiPicker.section.vue */
-function computeButtonTitle(ev: MouseEvent): void {
+function computeButtonTitle(ev: PointerEvent): void {
const elm = ev.target as HTMLElement;
const emoji = elm.dataset.emoji as string;
elm.title = getEmojiName(emoji);
}
-function chosen(emoji: string | Misskey.entities.EmojiSimple | UnicodeEmojiDef, ev?: MouseEvent) {
+function chosen(emoji: string | Misskey.entities.EmojiSimple | UnicodeEmojiDef, ev?: PointerEvent) {
const el = ev && (ev.currentTarget ?? ev.target) as HTMLElement | null | undefined;
if (el && prefer.s.animation) {
const rect = el.getBoundingClientRect();
diff --git a/packages/frontend/src/components/MkExtensionInstaller.vue b/packages/frontend/src/components/MkExtensionInstaller.vue
index c9d18ee731..9c0cce7689 100644
--- a/packages/frontend/src/components/MkExtensionInstaller.vue
+++ b/packages/frontend/src/components/MkExtensionInstaller.vue
@@ -45,7 +45,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.permission }}
- - {{ i18n.ts._permissions[permission] }}
+ - {{ (i18n.ts._permissions as any)[permission] ?? permission }}
{{ i18n.ts.none }}
diff --git a/packages/frontend/src/components/MkFolder.vue b/packages/frontend/src/components/MkFolder.vue
index 94fdf6da36..864f53d09c 100644
--- a/packages/frontend/src/components/MkFolder.vue
+++ b/packages/frontend/src/components/MkFolder.vue
@@ -169,7 +169,7 @@ function afterLeave(el: Element) {
let pageId = pageFolderTeleportCount.value;
pageFolderTeleportCount.value += 1000;
-async function toggle(ev: MouseEvent) {
+async function toggle(ev: PointerEvent) {
if (asPage && !opened.value) {
pageId++;
const { dispose } = await popup(MkFolderPage, {
diff --git a/packages/frontend/src/components/MkForm.file.vue b/packages/frontend/src/components/MkForm.file.vue
index 182ff3ccf5..d233467e8b 100644
--- a/packages/frontend/src/components/MkForm.file.vue
+++ b/packages/frontend/src/components/MkForm.file.vue
@@ -50,7 +50,7 @@ if (props.fileId) {
});
}
-function selectButton(ev: MouseEvent) {
+function selectButton(ev: PointerEvent) {
selectFile({
anchorElement: ev.currentTarget ?? ev.target,
multiple: false,
diff --git a/packages/frontend/src/components/MkHeatmap.vue b/packages/frontend/src/components/MkHeatmap.vue
index abbf86004b..03780bf3ba 100644
--- a/packages/frontend/src/components/MkHeatmap.vue
+++ b/packages/frontend/src/components/MkHeatmap.vue
@@ -125,8 +125,7 @@ async function renderChart() {
data: format(values) as any,
borderWidth: 0,
borderRadius: 3,
- backgroundColor(c) {
- // @ts-expect-error TS(2339)
+ backgroundColor(c: any) {
const value = c.dataset.data[c.dataIndex].v as number;
let a = (value - min) / max;
if (value !== 0) { // 0でない限りは完全に不可視にはしない
@@ -195,7 +194,7 @@ async function renderChart() {
font: {
size: 9,
},
- callback: (value, index, values) => ['', 'Mon', '', 'Wed', '', 'Fri', ''][value],
+ callback: (value, index, values) => ['', 'Mon', '', 'Wed', '', 'Fri', ''][value as any],
},
},
},
diff --git a/packages/frontend/src/components/MkImageEffectorDialog.vue b/packages/frontend/src/components/MkImageEffectorDialog.vue
index 01df7d7496..f740002088 100644
--- a/packages/frontend/src/components/MkImageEffectorDialog.vue
+++ b/packages/frontend/src/components/MkImageEffectorDialog.vue
@@ -95,7 +95,7 @@ watch(layers, async () => {
}
}, { deep: true });
-function addEffect(ev: MouseEvent) {
+function addEffect(ev: PointerEvent) {
os.popupMenu(Object.entries(FXS).map(([id, fx]) => ({
text: fx.uiDefinition.name,
action: () => {
@@ -219,7 +219,7 @@ watch(enabled, () => {
const penMode = ref<'fill' | 'blur' | 'pixelate' | null>(null);
-function showPenMenu(ev: MouseEvent) {
+function showPenMenu(ev: PointerEvent) {
os.popupMenu([{
text: i18n.ts._imageEffector._fxs.fill,
action: () => {
diff --git a/packages/frontend/src/components/MkInput.vue b/packages/frontend/src/components/MkInput.vue
index 7f052dff94..4f6ca083a3 100644
--- a/packages/frontend/src/components/MkInput.vue
+++ b/packages/frontend/src/components/MkInput.vue
@@ -88,7 +88,7 @@ const props = defineProps<{
}>();
const emit = defineEmits<{
- (ev: 'change', _ev: KeyboardEvent): void;
+ (ev: 'change', _ev: InputEvent): void;
(ev: 'keydown', _ev: KeyboardEvent): void;
(ev: 'enter', _ev: KeyboardEvent): void;
(ev: 'update:modelValue', value: ModelValueType
): void;
@@ -111,10 +111,9 @@ const height =
let autocompleteWorker: Autocomplete | null = null;
const focus = () => inputEl.value?.focus();
-const onInput = (event: Event) => {
- const ev = event as KeyboardEvent;
+const onInput = (event: InputEvent) => {
changed.value = true;
- emit('change', ev);
+ emit('change', event);
};
const onKeydown = (ev: KeyboardEvent) => {
if (ev.isComposing || ev.key === 'Process' || ev.keyCode === 229) return;
diff --git a/packages/frontend/src/components/MkInstanceCardMini.vue b/packages/frontend/src/components/MkInstanceCardMini.vue
index 7902151921..130a0e9986 100644
--- a/packages/frontend/src/components/MkInstanceCardMini.vue
+++ b/packages/frontend/src/components/MkInstanceCardMini.vue
@@ -33,7 +33,7 @@ misskeyApiGet('charts/instance', { host: props.instance.host, limit: 16 + 1, spa
chartValues.value = res.requests.received;
});
-function getInstanceIcon(instance): string {
+function getInstanceIcon(instance: Misskey.entities.FederationInstance): string {
return getProxiedImageUrlNullable(instance.iconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? '/client-assets/dummy.png';
}
diff --git a/packages/frontend/src/components/MkInstanceStats.vue b/packages/frontend/src/components/MkInstanceStats.vue
index 13048a2e1b..368fa5be27 100644
--- a/packages/frontend/src/components/MkInstanceStats.vue
+++ b/packages/frontend/src/components/MkInstanceStats.vue
@@ -57,10 +57,10 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkLaunchPad.vue b/packages/frontend/src/components/MkLaunchPad.vue
index d8725ade0b..0c73df4e2d 100644
--- a/packages/frontend/src/components/MkLaunchPad.vue
+++ b/packages/frontend/src/components/MkLaunchPad.vue
@@ -8,13 +8,13 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-
+
@@ -111,7 +111,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -233,7 +232,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkStreamingNotesTimeline.vue b/packages/frontend/src/components/MkStreamingNotesTimeline.vue
index bc6ebf0918..9784d8e017 100644
--- a/packages/frontend/src/components/MkStreamingNotesTimeline.vue
+++ b/packages/frontend/src/components/MkStreamingNotesTimeline.vue
@@ -350,13 +350,12 @@ function connectChannel() {
connections.main = stream.useChannel('main');
connections.main.on('mention', prepend);
} else if (props.src === 'directs') {
- const onNote = note => {
+ connections.main = stream.useChannel('main');
+ connections.main.on('mention', note => {
if (note.visibility === 'specified') {
prepend(note);
}
- };
- connections.main = stream.useChannel('main');
- connections.main.on('mention', onNote);
+ });
} else if (props.src === 'list') {
if (props.list == null) return;
connections.userList = stream.useChannel('userList', {
diff --git a/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue b/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue
index 6ee2e347a5..91f071fe63 100644
--- a/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue
+++ b/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue
@@ -137,8 +137,8 @@ watch(visibility, () => {
}
});
-function onNotification(notification) {
- const isMuted = props.excludeTypes ? props.excludeTypes.includes(notification.type) : false;
+function onNotification(notification: Misskey.entities.Notification) {
+ const isMuted = props.excludeTypes ? props.excludeTypes.includes(notification.type as typeof notificationTypes[number]) : false;
if (isMuted || window.document.visibilityState === 'visible') {
if (store.s.realtimeMode) {
useStream().send('readNotification');
diff --git a/packages/frontend/src/components/MkSuperMenu.vue b/packages/frontend/src/components/MkSuperMenu.vue
index 236afa127c..585a628a96 100644
--- a/packages/frontend/src/components/MkSuperMenu.vue
+++ b/packages/frontend/src/components/MkSuperMenu.vue
@@ -82,7 +82,7 @@ export type SuperMenuDef = {
text: string;
danger?: boolean;
active?: boolean;
- action: (ev: MouseEvent) => Awaitable;
+ action: (ev: PointerEvent) => Awaitable;
} | {
type?: 'link';
to: string;
diff --git a/packages/frontend/src/components/MkSystemWebhookEditor.vue b/packages/frontend/src/components/MkSystemWebhookEditor.vue
index cd72204fce..1536b14455 100644
--- a/packages/frontend/src/components/MkSystemWebhookEditor.vue
+++ b/packages/frontend/src/components/MkSystemWebhookEditor.vue
@@ -245,7 +245,7 @@ onMounted(async () => {
secret.value = res.secret;
isActive.value = res.isActive;
for (const ev of Object.keys(events.value)) {
- events.value[ev] = res.on.includes(ev as SystemWebhookEventType);
+ events.value[ev as SystemWebhookEventType] = res.on.includes(ev as SystemWebhookEventType);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (ex: any) {
diff --git a/packages/frontend/src/components/MkTabs.vue b/packages/frontend/src/components/MkTabs.vue
index 9798e2c3b3..a6342ec2e1 100644
--- a/packages/frontend/src/components/MkTabs.vue
+++ b/packages/frontend/src/components/MkTabs.vue
@@ -50,7 +50,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkTutorialDialog.Note.vue b/packages/frontend/src/components/MkTutorialDialog.Note.vue
index b77e67e9c6..3ab2c5f0d4 100644
--- a/packages/frontend/src/components/MkTutorialDialog.Note.vue
+++ b/packages/frontend/src/components/MkTutorialDialog.Note.vue
@@ -74,7 +74,7 @@ const exampleNote = reactive({
});
const onceReacted = ref(false);
-function addReaction(emoji) {
+function addReaction(emoji: string) {
onceReacted.value = true;
emit('reacted');
doNotification(emoji);
@@ -96,7 +96,7 @@ function doNotification(emoji: string): void {
globalEvents.emit('clientNotification', notification);
}
-function removeReaction(emoji) {
+function removeReaction(emoji: string) {
delete exampleNote.reactions[emoji];
exampleNote.myReaction = undefined;
}
diff --git a/packages/frontend/src/components/MkUploaderDialog.vue b/packages/frontend/src/components/MkUploaderDialog.vue
index 8849fa447d..69de56d45c 100644
--- a/packages/frontend/src/components/MkUploaderDialog.vue
+++ b/packages/frontend/src/components/MkUploaderDialog.vue
@@ -166,17 +166,17 @@ async function done() {
dialog.value?.close();
}
-async function chooseFile(ev: MouseEvent) {
+async function chooseFile(ev: PointerEvent) {
const newFiles = await os.chooseFileFromPc({ multiple: true });
uploader.addFiles(newFiles);
}
-function showPerItemMenu(item: UploaderItem, ev: MouseEvent) {
+function showPerItemMenu(item: UploaderItem, ev: PointerEvent) {
const menu = uploader.getMenu(item);
os.popupMenu(menu, ev.currentTarget ?? ev.target);
}
-function showPerItemMenuViaContextmenu(item: UploaderItem, ev: MouseEvent) {
+function showPerItemMenuViaContextmenu(item: UploaderItem, ev: PointerEvent) {
const menu = uploader.getMenu(item);
os.contextMenu(menu, ev);
}
diff --git a/packages/frontend/src/components/MkUploaderItems.vue b/packages/frontend/src/components/MkUploaderItems.vue
index f31c717ad5..51f7ac2d09 100644
--- a/packages/frontend/src/components/MkUploaderItems.vue
+++ b/packages/frontend/src/components/MkUploaderItems.vue
@@ -57,18 +57,18 @@ const props = defineProps<{
}>();
const emit = defineEmits<{
- (ev: 'showMenu', item: UploaderItem, event: MouseEvent): void;
- (ev: 'showMenuViaContextmenu', item: UploaderItem, event: MouseEvent): void;
+ (ev: 'showMenu', item: UploaderItem, event: PointerEvent): void;
+ (ev: 'showMenuViaContextmenu', item: UploaderItem, event: PointerEvent): void;
}>();
-function onContextmenu(item: UploaderItem, ev: MouseEvent) {
+function onContextmenu(item: UploaderItem, ev: PointerEvent) {
if (ev.target && isLink(ev.target as HTMLElement)) return;
if (window.getSelection()?.toString() !== '') return;
emit('showMenuViaContextmenu', item, ev);
}
-function onThumbnailClick(item: UploaderItem, ev: MouseEvent) {
+function onThumbnailClick(item: UploaderItem, ev: PointerEvent) {
// TODO: preview when item is image
}
diff --git a/packages/frontend/src/components/MkUserList.vue b/packages/frontend/src/components/MkUserList.vue
index f47d9b56dc..8ce929fff3 100644
--- a/packages/frontend/src/components/MkUserList.vue
+++ b/packages/frontend/src/components/MkUserList.vue
@@ -27,7 +27,7 @@ const props = withDefaults(defineProps<{
noGap?: boolean;
extractor?: ExtractorFunction;
}>(), {
- extractor: (item) => item,
+ extractor: (item: any) => item as Misskey.entities.UserDetailed,
});
diff --git a/packages/frontend/src/components/MkUserPopup.vue b/packages/frontend/src/components/MkUserPopup.vue
index f794899281..9f196ac2c1 100644
--- a/packages/frontend/src/components/MkUserPopup.vue
+++ b/packages/frontend/src/components/MkUserPopup.vue
@@ -90,7 +90,7 @@ const top = ref(0);
const left = ref(0);
const error = ref(false);
-function showMenu(ev: MouseEvent) {
+function showMenu(ev: PointerEvent) {
if (user.value == null) return;
const { menu, cleanup } = getUserMenu(user.value);
os.popupMenu(menu, ev.currentTarget ?? ev.target).finally(cleanup);
diff --git a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue
index 4e96eff82e..95449dd0eb 100644
--- a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue
+++ b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue
@@ -66,7 +66,7 @@ watch(description, () => {
});
});
-async function setAvatar(ev) {
+async function setAvatar(ev: PointerEvent) {
const files = await os.chooseFileFromPc({ multiple: false });
const file = files[0];
diff --git a/packages/frontend/src/components/MkVisitorDashboard.ActiveUsersChart.vue b/packages/frontend/src/components/MkVisitorDashboard.ActiveUsersChart.vue
index 6aaee76565..6513ca385d 100644
--- a/packages/frontend/src/components/MkVisitorDashboard.ActiveUsersChart.vue
+++ b/packages/frontend/src/components/MkVisitorDashboard.ActiveUsersChart.vue
@@ -46,7 +46,7 @@ async function renderChart() {
return new Date(y, m, d - ago);
};
- const format = (arr) => {
+ const format = (arr: number[]) => {
return arr.map((v, i) => ({
x: getDate(i).getTime(),
y: v,
diff --git a/packages/frontend/src/components/MkVisitorDashboard.vue b/packages/frontend/src/components/MkVisitorDashboard.vue
index 8bef225de5..2ce1912b86 100644
--- a/packages/frontend/src/components/MkVisitorDashboard.vue
+++ b/packages/frontend/src/components/MkVisitorDashboard.vue
@@ -94,7 +94,7 @@ function signup() {
});
}
-function showMenu(ev: MouseEvent) {
+function showMenu(ev: PointerEvent) {
openInstanceMenu(ev);
}
diff --git a/packages/frontend/src/components/MkWaitingDialog.vue b/packages/frontend/src/components/MkWaitingDialog.vue
index 820cf05e1f..18f2b3e189 100644
--- a/packages/frontend/src/components/MkWaitingDialog.vue
+++ b/packages/frontend/src/components/MkWaitingDialog.vue
@@ -26,8 +26,8 @@ const props = defineProps<{
}>();
const emit = defineEmits<{
- (ev: 'done');
- (ev: 'closed');
+ (ev: 'done'): void;
+ (ev: 'closed'): void;
}>();
function done() {
diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.Layer.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.Layer.vue
index 154b3ffc27..8e5bb6221d 100644
--- a/packages/frontend/src/components/MkWatermarkEditorDialog.Layer.vue
+++ b/packages/frontend/src/components/MkWatermarkEditorDialog.Layer.vue
@@ -387,7 +387,7 @@ onMounted(async () => {
}
});
-function chooseFile(ev: MouseEvent) {
+function chooseFile(ev: PointerEvent) {
selectFile({
anchorElement: ev.currentTarget ?? ev.target,
multiple: false,
diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue
index 7fe497e455..cadf9ba522 100644
--- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue
+++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue
@@ -350,7 +350,7 @@ async function save() {
}
}
-function addLayer(ev: MouseEvent) {
+function addLayer(ev: PointerEvent) {
os.popupMenu([{
text: i18n.ts._watermarkEditor.text,
action: () => {
diff --git a/packages/frontend/src/components/MkWidgetSettingsDialog.vue b/packages/frontend/src/components/MkWidgetSettingsDialog.vue
index 951ac88465..63f294770c 100644
--- a/packages/frontend/src/components/MkWidgetSettingsDialog.vue
+++ b/packages/frontend/src/components/MkWidgetSettingsDialog.vue
@@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
@ok="save()"
@closed="emit('closed')"
>
- {{ i18n.ts._widgets[widgetName] ?? widgetName }}
+ {{ (i18n.ts._widgets as any)[widgetName] ?? widgetName }}
diff --git a/packages/frontend/src/components/MkWidgets.vue b/packages/frontend/src/components/MkWidgets.vue
index e7712e8aae..a27613c24c 100644
--- a/packages/frontend/src/components/MkWidgets.vue
+++ b/packages/frontend/src/components/MkWidgets.vue
@@ -24,12 +24,12 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
-
+
@@ -47,6 +47,7 @@ export type DefaultStoredWidget = {
diff --git a/packages/frontend/src/components/global/MkA.vue b/packages/frontend/src/components/global/MkA.vue
index 99693a4c00..7d2908d4be 100644
--- a/packages/frontend/src/components/global/MkA.vue
+++ b/packages/frontend/src/components/global/MkA.vue
@@ -48,7 +48,7 @@ const active = computed(() => {
return resolved.route.name === router.currentRoute.value.name;
});
-function onContextmenu(ev) {
+function onContextmenu(ev: PointerEvent) {
const selection = window.getSelection();
if (selection && selection.toString() !== '') return;
os.contextMenu([{
@@ -85,7 +85,7 @@ function openWindow() {
os.pageWindow(props.to);
}
-function nav(ev: MouseEvent) {
+function nav(ev: PointerEvent) {
// 制御キーとの組み合わせは無視(shiftを除く)
if (ev.metaKey || ev.altKey || ev.ctrlKey) return;
diff --git a/packages/frontend/src/components/global/MkAvatar.vue b/packages/frontend/src/components/global/MkAvatar.vue
index e7208ed574..fd1d0c2b63 100644
--- a/packages/frontend/src/components/global/MkAvatar.vue
+++ b/packages/frontend/src/components/global/MkAvatar.vue
@@ -77,7 +77,7 @@ const props = withDefaults(defineProps<{
});
const emit = defineEmits<{
- (ev: 'click', v: MouseEvent): void;
+ (ev: 'click', v: PointerEvent): void;
}>();
const showDecoration = props.forceShowDecoration || prefer.s.showAvatarDecorations;
@@ -91,7 +91,7 @@ const url = computed(() => {
return props.user.avatarUrl;
});
-function onClick(ev: MouseEvent): void {
+function onClick(ev: PointerEvent): void {
if (props.link) return;
emit('click', ev);
}
diff --git a/packages/frontend/src/components/global/MkCondensedLine.vue b/packages/frontend/src/components/global/MkCondensedLine.vue
index 473d444c16..e1fbec4b6f 100644
--- a/packages/frontend/src/components/global/MkCondensedLine.vue
+++ b/packages/frontend/src/components/global/MkCondensedLine.vue
@@ -23,8 +23,8 @@ const observer = new ResizeObserver((entries) => {
transform: string;
}[] = [];
for (const entry of entries) {
- const content = (entry.target[contentSymbol] ? entry.target : entry.target.firstElementChild) as HTMLSpanElement;
- const props: Required