diff --git a/packages/frontend/src/boot/main-boot.ts b/packages/frontend/src/boot/main-boot.ts index d327016317..6e8a5127af 100644 --- a/packages/frontend/src/boot/main-boot.ts +++ b/packages/frontend/src/boot/main-boot.ts @@ -110,6 +110,8 @@ export async function mainBoot() { announcement, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); } @@ -120,6 +122,8 @@ export async function mainBoot() { announcement, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); } }); diff --git a/packages/frontend/src/components/MkClickerGame.vue b/packages/frontend/src/components/MkClickerGame.vue index 00506fb735..d9a32a8840 100644 --- a/packages/frontend/src/components/MkClickerGame.vue +++ b/packages/frontend/src/components/MkClickerGame.vue @@ -37,6 +37,8 @@ function onClick(ev: MouseEvent) { const y = ev.clientY; const { dispose } = os.popup(MkPlusOneEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); saveData.value!.cookies++; diff --git a/packages/frontend/src/components/MkDrive.folder.vue b/packages/frontend/src/components/MkDrive.folder.vue index 1790e57c24..d5561adf07 100644 --- a/packages/frontend/src/components/MkDrive.folder.vue +++ b/packages/frontend/src/components/MkDrive.folder.vue @@ -261,6 +261,8 @@ function onContextmenu(ev: MouseEvent) { initialFolder: props.folder, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }, }, { type: 'divider' }, { diff --git a/packages/frontend/src/components/MkEmojiPicker.vue b/packages/frontend/src/components/MkEmojiPicker.vue index 4a3ed69f47..2226c6d62e 100644 --- a/packages/frontend/src/components/MkEmojiPicker.vue +++ b/packages/frontend/src/components/MkEmojiPicker.vue @@ -417,6 +417,8 @@ function chosen(emoji: any, ev?: MouseEvent) { const y = rect.top + (el.offsetHeight / 2); const { dispose } = os.popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } diff --git a/packages/frontend/src/components/MkLink.vue b/packages/frontend/src/components/MkLink.vue index e842ec2d6e..86e814df4b 100644 --- a/packages/frontend/src/components/MkLink.vue +++ b/packages/frontend/src/components/MkLink.vue @@ -43,6 +43,8 @@ if (isEnabledUrlPreview.value) { source: el.value instanceof HTMLElement ? el.value : el.value?.$el, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }); } diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 420ff2c651..71daef2bb7 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -382,6 +382,8 @@ if (!props.mock) { targetElement: renoteButton.value, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }); @@ -405,6 +407,8 @@ if (!props.mock) { targetElement: reactButton.value!, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }); } @@ -454,6 +458,8 @@ function react(): void { const y = rect.top + (el.offsetHeight / 2); const { dispose } = os.popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } } else { diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index a8fed56c39..ff31a89b2b 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -368,6 +368,8 @@ useTooltip(renoteButton, async (showing) => { targetElement: renoteButton.value, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }); @@ -391,6 +393,8 @@ if (appearNote.value.reactionAcceptance === 'likeOnly') { targetElement: reactButton.value!, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }); } @@ -431,6 +435,8 @@ function react(): void { const y = rect.top + (el.offsetHeight / 2); const { dispose } = os.popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } } else { diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index d057d197ec..0e0d811e75 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -735,6 +735,8 @@ async function post(ev?: MouseEvent) { const y = rect.top + (el.offsetHeight / 2); const { dispose } = os.popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } } diff --git a/packages/frontend/src/components/MkReactionIcon.vue b/packages/frontend/src/components/MkReactionIcon.vue index c0cbd8a65d..8986657261 100644 --- a/packages/frontend/src/components/MkReactionIcon.vue +++ b/packages/frontend/src/components/MkReactionIcon.vue @@ -30,6 +30,8 @@ if (props.withTooltip) { targetElement: elRef.value.$el, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }); } diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue index 26223364ab..45b98ffe84 100644 --- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue +++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue @@ -133,6 +133,8 @@ function anime() { const y = rect.top + (buttonEl.value.offsetHeight / 2); const { dispose } = os.popup(MkReactionEffect, { reaction: props.reaction, x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue index 8df5e0fe40..f6ff63f88b 100644 --- a/packages/frontend/src/components/MkUrlPreview.vue +++ b/packages/frontend/src/components/MkUrlPreview.vue @@ -193,6 +193,8 @@ function openPlayer(): void { url: requestUrl.href, }, { // TODO + }, { + allowMultiple: true, }); } diff --git a/packages/frontend/src/components/global/MkUrl.vue b/packages/frontend/src/components/global/MkUrl.vue index d2ddd4aa85..dfddee3298 100644 --- a/packages/frontend/src/components/global/MkUrl.vue +++ b/packages/frontend/src/components/global/MkUrl.vue @@ -56,6 +56,8 @@ if (props.showUrlPreview && isEnabledUrlPreview.value) { source: el.value instanceof HTMLElement ? el.value : el.value?.$el, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); }); } diff --git a/packages/frontend/src/directives/ripple.ts b/packages/frontend/src/directives/ripple.ts index a043ff212d..43211affbf 100644 --- a/packages/frontend/src/directives/ripple.ts +++ b/packages/frontend/src/directives/ripple.ts @@ -19,6 +19,8 @@ export default { const { dispose } = popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); }); }, diff --git a/packages/frontend/src/directives/tooltip.ts b/packages/frontend/src/directives/tooltip.ts index 251ce5675f..4e416e2d2d 100644 --- a/packages/frontend/src/directives/tooltip.ts +++ b/packages/frontend/src/directives/tooltip.ts @@ -59,6 +59,8 @@ export default { targetElement: el, }, { closed: () => dispose(), + }, { + allowMultiple: true, }); self._close = () => { diff --git a/packages/frontend/src/directives/user-preview.ts b/packages/frontend/src/directives/user-preview.ts index 278d842d09..bd959233bd 100644 --- a/packages/frontend/src/directives/user-preview.ts +++ b/packages/frontend/src/directives/user-preview.ts @@ -48,6 +48,8 @@ export class UserPreview { this.hideTimer = window.setTimeout(this.close, 500); }, closed: () => dispose(), + }, { + allowMultiple: true, }); this.promise = { diff --git a/packages/frontend/src/pages/drop-and-fusion.game.vue b/packages/frontend/src/pages/drop-and-fusion.game.vue index 10bcfa6d4e..7797b24b2f 100644 --- a/packages/frontend/src/pages/drop-and-fusion.game.vue +++ b/packages/frontend/src/pages/drop-and-fusion.game.vue @@ -1012,12 +1012,16 @@ function attachGameEvents() { { const { dispose } = os.popup(MkRippleEffect, { x: domX, y: domY }, { end: () => dispose(), + }, { + allowMultiple: true, }); } { const { dispose } = os.popup(MkPlusOneEffect, { x: domX, y: domY, value: scoreDelta + (scoreUnit === 'pt' ? '' : scoreUnit) }, { end: () => dispose(), + }, { + allowMultiple: true, }); } diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts index 418b6abc88..96345710f3 100644 --- a/packages/frontend/src/scripts/get-note-menu.ts +++ b/packages/frontend/src/scripts/get-note-menu.ts @@ -534,6 +534,8 @@ export function getRenoteMenu(props: { const y = rect.top + (el.offsetHeight / 2); const { dispose } = os.popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } @@ -572,6 +574,8 @@ export function getRenoteMenu(props: { const y = rect.top + (el.offsetHeight / 2); const { dispose } = os.popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } @@ -623,6 +627,8 @@ export function getRenoteMenu(props: { const y = rect.top + (el.offsetHeight / 2); const { dispose } = os.popup(MkRippleEffect, { x, y }, { end: () => dispose(), + }, { + allowMultiple: true, }); } diff --git a/packages/frontend/src/scripts/use-chart-tooltip.ts b/packages/frontend/src/scripts/use-chart-tooltip.ts index bba64fc6ee..5b27b9c88a 100644 --- a/packages/frontend/src/scripts/use-chart-tooltip.ts +++ b/packages/frontend/src/scripts/use-chart-tooltip.ts @@ -23,7 +23,9 @@ export function useChartTooltip(opts: { position: 'top' | 'middle' } = { positio y: tooltipY, title: tooltipTitle, series: tooltipSeries, - }, {}); + }, {}, { + allowMultiple: true, + }); onUnmounted(() => { disposeTooltipComponent();