import('vuedraggable').then(x => x.default));
const props = defineProps<{
- modelValue: any[];
+ modelValue: Misskey.entities.DriveFile[];
detachMediaFn?: (id: string) => void;
}>();
const mock = inject('mock', false);
const emit = defineEmits<{
- (ev: 'update:modelValue', value: any[]): void;
+ (ev: 'update:modelValue', value: Misskey.entities.DriveFile[]): void;
(ev: 'detach', id: string): void;
(ev: 'changeSensitive', file: Misskey.entities.DriveFile, isSensitive: boolean): void;
(ev: 'changeName', file: Misskey.entities.DriveFile, newName: string): void;
@@ -113,7 +113,7 @@ async function rename(file) {
});
}
-async function describe(file) {
+async function describe(file: Misskey.entities.DriveFile) {
if (mock) return;
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkFileCaptionEditWindow.vue')), {
diff --git a/packages/frontend/src/components/MkPostFormDialog.vue b/packages/frontend/src/components/MkPostFormDialog.vue
index bc5295b0d4..9181b06372 100644
--- a/packages/frontend/src/components/MkPostFormDialog.vue
+++ b/packages/frontend/src/components/MkPostFormDialog.vue
@@ -12,22 +12,11 @@ SPDX-License-Identifier: AGPL-3.0-only
+
@@ -160,7 +190,7 @@ defineProps<{
}
> span {
- display: initial;
+ display: contents;
> .icon {
display: grid;
diff --git a/packages/frontend/src/components/MkTimeline.vue b/packages/frontend/src/components/MkTimeline.vue
index c0df8e144a..2e096d9639 100644
--- a/packages/frontend/src/components/MkTimeline.vue
+++ b/packages/frontend/src/components/MkTimeline.vue
@@ -40,11 +40,13 @@ const props = withDefaults(defineProps<{
sound?: boolean;
withRenotes?: boolean;
withReplies?: boolean;
+ withSensitive?: boolean;
onlyFiles?: boolean;
onlyCats?: boolean;
}>(), {
withRenotes: true,
withReplies: false,
+ withSensitive: true,
onlyFiles: false,
onlyCats: false,
});
@@ -55,6 +57,7 @@ const emit = defineEmits<{
}>();
provide('inTimeline', true);
+provide('tl_withSensitive', computed(() => props.withSensitive));
provide('inChannel', computed(() => props.src === 'channel'));
type TimelineQueryType = {
@@ -132,6 +135,12 @@ function connectChannel() {
withFiles: props.onlyFiles ? true : undefined,
withCats: props.onlyCats,
});
+ } else if (props.src === 'bubble') {
+ connection = stream.useChannel('bubbleTimeline', {
+ withRenotes: props.withRenotes,
+ withFiles: props.onlyFiles ? true : undefined,
+ withCats: props.onlyCats,
+ });
} else if (props.src === 'mentions') {
connection = stream.useChannel('main');
connection.on('mention', prepend);
@@ -209,6 +218,13 @@ function updatePaginationQuery() {
withFiles: props.onlyFiles ? true : undefined,
withCats: props.onlyCats,
};
+ } else if (props.src === 'bubble') {
+ endpoint = 'notes/bubble-timeline';
+ query = {
+ withRenotes: props.withRenotes,
+ withFiles: props.onlyFiles ? true : undefined,
+ withCats: props.onlyCats,
+ };
} else if (props.src === 'mentions') {
endpoint = 'notes/mentions';
query = null;
@@ -264,6 +280,9 @@ function refreshEndpointAndChannel() {
// IDが切り替わったら切り替え先のTLを表示させたい
watch(() => [props.list, props.antenna, props.channel, props.role, props.withRenotes], refreshEndpointAndChannel);
+// withSensitiveはクライアントで完結する処理のため、単にリロードするだけでOK
+watch(() => props.withSensitive, reloadTimeline);
+
// 初回表示用
refreshEndpointAndChannel();
diff --git a/packages/frontend/src/components/MkTokenGenerateWindow.vue b/packages/frontend/src/components/MkTokenGenerateWindow.vue
index e229e3643b..bf30772e2d 100644
--- a/packages/frontend/src/components/MkTokenGenerateWindow.vue
+++ b/packages/frontend/src/components/MkTokenGenerateWindow.vue
@@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
:okButtonDisabled="false"
:canClose="false"
@close="dialog?.close()"
- @closed="$emit('closed')"
+ @closed="emit('closed')"
@ok="ok()"
>
{{ title || i18n.ts.generateAccessToken }}
diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue
index f229dc4a17..fd855b0879 100644
--- a/packages/frontend/src/components/MkUrlPreview.vue
+++ b/packages/frontend/src/components/MkUrlPreview.vue
@@ -26,19 +26,32 @@ SPDX-License-Identifier: AGPL-3.0-only
-