diff --git a/packages/client/src/components/MkDrive.file.vue b/packages/client/src/components/MkDrive.file.vue
index 80a428adc3..6d348a33e7 100644
--- a/packages/client/src/components/MkDrive.file.vue
+++ b/packages/client/src/components/MkDrive.file.vue
@@ -182,8 +182,8 @@ function describe() {
},
{
done: (result: {
- canceled: boolean,
- result?: string | null,
+ canceled: boolean;
+ result?: string | null;
}) => {
if (!result || result.canceled) return;
const comment = result.result;
diff --git a/packages/client/src/components/MkLaunchPad.vue b/packages/client/src/components/MkLaunchPad.vue
index 084283c270..b3ca7bd34d 100644
--- a/packages/client/src/components/MkLaunchPad.vue
+++ b/packages/client/src/components/MkLaunchPad.vue
@@ -73,7 +73,7 @@ import { deviceKind } from "@/scripts/device-kind";
const props = withDefaults(
defineProps<{
src?: HTMLElement;
- anchor?: {
+ anchor?: {
x: "left" | "center" | "right";
y: "top" | "center" | "bottom";
};
diff --git a/packages/client/src/components/MkModal.vue b/packages/client/src/components/MkModal.vue
index 57ecc1b0d8..2bed9f8295 100644
--- a/packages/client/src/components/MkModal.vue
+++ b/packages/client/src/components/MkModal.vue
@@ -108,7 +108,7 @@ type ModalTypes = "popup" | "dialog" | "dialog:top" | "drawer";
const props = withDefaults(
defineProps<{
manualShowing?: boolean | null;
- anchor?: {
+ anchor?: {
x: "left" | "center" | "right";
y: "top" | "center" | "bottom";
};
diff --git a/packages/client/src/components/MkModalPageWindow.vue b/packages/client/src/components/MkModalPageWindow.vue
index e9c8136ae4..a4dea9ee32 100644
--- a/packages/client/src/components/MkModalPageWindow.vue
+++ b/packages/client/src/components/MkModalPageWindow.vue
@@ -29,7 +29,7 @@
@@ -65,6 +65,7 @@ import type { PageMetadata } from "@/scripts/page-metadata";
import { provideMetadataReceiver } from "@/scripts/page-metadata";
import { Router } from "@/nirax";
import icon from "@/scripts/icon";
+import type { MenuItem } from "@/types/menu";
const props = defineProps<{
initialPath: string;
@@ -81,11 +82,11 @@ router.addListener("push", (ctx) => {});
const pageMetadata = ref>();
const rootEl = ref();
-const modal = ref>();
+const modal = ref | null>(null);
const path = ref(props.initialPath);
const width = ref(860);
const height = ref(660);
-const history = [];
+const history: string[] = [];
provide("router", router);
provideMetadataReceiver((info) => {
@@ -95,7 +96,7 @@ provide("shouldOmitHeaderTitle", true);
provide("shouldHeaderThin", true);
const pageUrl = computed(() => url + path.value);
-const contextmenu = computed(() => {
+const contextmenu = computed((): MenuItem[] => {
return [
{
type: "label",
@@ -117,7 +118,7 @@ const contextmenu = computed(() => {
text: i18n.ts.openInNewTab,
action: () => {
window.open(pageUrl.value, "_blank");
- modal.value.close();
+ modal.value!.close();
},
},
{
@@ -130,23 +131,26 @@ const contextmenu = computed(() => {
];
});
-function navigate(path, record = true) {
+function navigate(path: string, record = true) {
if (record) history.push(router.getCurrentPath());
router.push(path);
}
function back() {
- navigate(history.pop(), false);
+ const backTo = history.pop();
+ if (backTo) {
+ navigate(backTo, false);
+ }
}
function expand() {
mainRouter.push(path.value);
- modal.value.close();
+ modal.value!.close();
}
function popout() {
_popout(path.value, rootEl.value);
- modal.value.close();
+ modal.value!.close();
}
function onContextmenu(ev: MouseEvent) {
diff --git a/packages/client/src/nirax.ts b/packages/client/src/nirax.ts
index f214060762..da162338b6 100644
--- a/packages/client/src/nirax.ts
+++ b/packages/client/src/nirax.ts
@@ -6,7 +6,7 @@ import { shallowRef } from "vue";
import { safeURIDecode } from "@/scripts/safe-uri-decode";
import { pleaseLogin } from "@/scripts/please-login";
-interface RouteDef {
+export interface RouteDef {
path: string;
component: Component;
query?: Record;
diff --git a/packages/client/src/os.ts b/packages/client/src/os.ts
index 32d84396ef..49d03b76cc 100644
--- a/packages/client/src/os.ts
+++ b/packages/client/src/os.ts
@@ -3,10 +3,7 @@
import { EventEmitter } from "eventemitter3";
import { type entities, api as firefishApi } from "firefish-js";
import insertTextAtCursor from "insert-text-at-cursor";
-import type {
- Component,
- Ref,
-} from "vue";
+import type { Component, Ref } from "vue";
import { defineAsyncComponent, markRaw, ref } from "vue";
import { i18n } from "./i18n";
import MkDialog from "@/components/MkDialog.vue";
@@ -177,11 +174,13 @@ export function promiseDialog(
}
let popupIdCount = 0;
-export const popups = ref<{
- id: number;
- component: Component;
- props: Record;
-}[]>([]);
+export const popups = ref<
+ {
+ id: number;
+ component: Component;
+ props: Record;
+ }[]
+>([]);
const zIndexes = {
low: 1000000,
diff --git a/packages/client/src/router.ts b/packages/client/src/router.ts
index a21df2981e..7273919261 100644
--- a/packages/client/src/router.ts
+++ b/packages/client/src/router.ts
@@ -1,18 +1,18 @@
import type { AsyncComponentLoader } from "vue";
import { defineAsyncComponent, inject } from "vue";
import { isEmojiMod, isModerator, me } from "@/me";
-import { Router } from "@/nirax";
+import { type RouteDef, Router } from "@/nirax";
import MkError from "@/pages/_error_.vue";
import MkLoading from "@/pages/_loading_.vue";
-const page = (loader: AsyncComponentLoader) =>
+const page = (loader: AsyncComponentLoader) =>
defineAsyncComponent({
loader,
loadingComponent: MkLoading,
errorComponent: MkError,
});
-export const routes = [
+export const routes: RouteDef[] = [
{
path: "/@:initUser/pages/:initPageName/view-source",
component: page(() => import("./pages/page-editor/page-editor.vue")),
diff --git a/packages/client/src/scripts/page-metadata.ts b/packages/client/src/scripts/page-metadata.ts
index e2f470d0bb..cf8d7938a7 100644
--- a/packages/client/src/scripts/page-metadata.ts
+++ b/packages/client/src/scripts/page-metadata.ts
@@ -12,6 +12,7 @@ export interface PageMetadata {
avatar?: entities.UserDetailed | null;
userName?: entities.User | null;
bg?: string;
+ hideHeader?: boolean;
}
export function definePageMetadata(
diff --git a/packages/firefish-js/src/api.types.ts b/packages/firefish-js/src/api.types.ts
index 73e9fca69f..890e6bcd48 100644
--- a/packages/firefish-js/src/api.types.ts
+++ b/packages/firefish-js/src/api.types.ts
@@ -281,9 +281,9 @@ export type Endpoints = {
"drive/files/attached-notes": { req: TODO; res: Note[] };
"drive/files/caption-image": {
req: {
- url: string,
- }
- res: string,
+ url: string;
+ };
+ res: string;
};
"drive/files/check-existence": { req: TODO; res: TODO };
"drive/files/create": { req: TODO; res: TODO };