-
-
-
-
-
-
-
- {{ status.account.display_name }}
-
-
-
- @{{ status.account.acct }}
-
-
-
-
-
-
-
-
- {{ t(statusScopeKey(status)) }}
-
-
- {humanizeDuration(time)}
-
-
+
+
+
+
diff --git a/src/components/status/VulStatusButtons.vue b/src/components/status/VulStatusButtons.vue
new file mode 100644
index 0000000..731b54a
--- /dev/null
+++ b/src/components/status/VulStatusButtons.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+ -
+ {{ status.replies_count }}
+
+
+ -
+ {{ status.reblogs_count }}
+
+
+ -
+
+
+ -
+ {{ status.favourites_count }}
+
+
+ -
+
+
+ -
+
+
+
+
+
diff --git a/src/components/status/VulStatusContent.vue b/src/components/status/VulStatusContent.vue
new file mode 100644
index 0000000..d7686b3
--- /dev/null
+++ b/src/components/status/VulStatusContent.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ (isCollapsed = !isCollapsed)">
+ {{
+ isCollapsed
+ ? t("status.showContent", { count: status.content?.length || 0 })
+ : t("status.hideContent", { count: status.content?.length || 0 })
+ }}
+
+
+
+
+
+
diff --git a/src/components/status/VulStatusInfo.vue b/src/components/status/VulStatusInfo.vue
new file mode 100644
index 0000000..5a4ce32
--- /dev/null
+++ b/src/components/status/VulStatusInfo.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ status.account.display_name }}
+
+
+
+ @{{ status.account.acct }}
+
+
+
+
+
+
+
+
+ {{ t(statusScopeKey(status)) }}
+
+ {humanizeDuration(time)}
+
+
+
diff --git a/src/lib/api/entities/activity.ts b/src/lib/api/entities/activity.ts
index 13a3ce5..c76ddef 100644
--- a/src/lib/api/entities/activity.ts
+++ b/src/lib/api/entities/activity.ts
@@ -1,4 +1,5 @@
import type { Account } from "./account";
+import type { CustomEmoji } from "./custom_emoji";
export default interface Activity {
id: string;
@@ -9,6 +10,9 @@ export default interface Activity {
content: string | null;
spoiler_text: string | null;
visibility: "public" | "unlisted" | "private" | "direct";
+ mentions: Mention[];
+ tags: Tag[];
+ emojis: CustomEmoji[];
reblogs_count: number;
favourites_count: number;
@@ -23,3 +27,15 @@ export interface ActivityAkkomaSource {
content: string;
mediaType: string;
}
+
+export interface Mention {
+ id: string;
+ username: string;
+ url: string;
+ acct: string;
+}
+
+export interface Tag {
+ name: string;
+ url: string;
+}
diff --git a/src/locale/en.pirate.yaml b/src/locale/en.pirate.yaml
index 9a529fb..6321247 100644
--- a/src/locale/en.pirate.yaml
+++ b/src/locale/en.pirate.yaml
@@ -1,8 +1,8 @@
status:
avatar: "{name}'s mugshot"
characterCount: "{count} character | {count} characters"
- showContent: "Show treasure ({@:status.characterCount})"
- hideContent: "Hide treasure ({@:status.characterCount})"
+ showContent: "Show treasure (@:status.characterCount)"
+ hideContent: "Hide treasure (@:status.characterCount)"
visibility:
directMessage: Direct bottle
followersOnly: Only shown to their mateys
diff --git a/src/locale/en.yaml b/src/locale/en.yaml
index 2de6b0d..04cb3ec 100644
--- a/src/locale/en.yaml
+++ b/src/locale/en.yaml
@@ -1,8 +1,8 @@
status:
avatar: "{name}'s avatar"
characterCount: "{count} character | {count} characters"
- showContent: "Show content ({@:status.characterCount})"
- hideContent: "Hide content ({@:status.characterCount})"
+ showContent: "Show content (@:status.characterCount)"
+ hideContent: "Hide content (@:status.characterCount)"
visibility:
directMessage: Direct message
followersOnly: Followers only
diff --git a/tailwind.config.js b/tailwind.config.js
index 65f48d4..86ee67d 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,3 +1,5 @@
+import { theme } from "tailwindcss/defaultConfig";
+
/** @type {import('tailwindcss').Config} */
export default {
darkMode: "class",
@@ -8,7 +10,11 @@ export default {
"node_modules/flowbite/**/*.{js,jsx,ts,tsx}",
],
theme: {
- extend: {},
+ extend: {
+ fontFamily: {
+ sans: ['"Fira Sans"', ...theme.fontFamily.sans],
+ },
+ },
},
plugins: [import("flowbite/plugin")],
};
diff --git a/tsconfig.app.json b/tsconfig.app.json
index ab66e99..89922a4 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -5,6 +5,7 @@
"compilerOptions": {
"composite": true,
"noEmit": true,
+ "jsxImportSource": "vue",
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
diff --git a/tsconfig.node.json b/tsconfig.node.json
index c588947..1d8af75 100644
--- a/tsconfig.node.json
+++ b/tsconfig.node.json
@@ -1,12 +1,6 @@
{
"extends": "@tsconfig/node18/tsconfig.json",
- "include": [
- "vite.config.*",
- "vitest.config.*",
- "cypress.config.*",
- "nightwatch.conf.*",
- "playwright.config.*"
- ],
+ "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "nightwatch.conf.*", "playwright.config.*"],
"compilerOptions": {
"composite": true,
"noEmit": true,
diff --git a/vite.config.ts b/vite.config.ts
index 1dfc22f..08756ca 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -2,6 +2,7 @@ import { fileURLToPath, URL } from "node:url";
import { loadEnv, defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
+import vueJsx from "@vitejs/plugin-vue-jsx";
import yaml from "@modyfi/vite-plugin-yaml";
// https://vitejs.dev/config/
@@ -9,7 +10,7 @@ export default defineConfig(({ mode }) => {
const { INSTANCE } = loadEnv(mode, process.cwd(), "");
return {
- plugins: [vue(), yaml()],
+ plugins: [vue(), vueJsx(), yaml()],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),