From 467f6ff566842e2feee411ae8cb4673759ebfeb1 Mon Sep 17 00:00:00 2001 From: Owais Jamil Date: Sat, 1 Aug 2026 15:20:02 -0500 Subject: [PATCH] feat: actor/profile activity & repo overview * move ts mods into lib dir --- .gitignore | 4 +- ROADMAP.md | 18 +- TODO.md | 20 +- src/App.vue | 2 +- src/components/AppMenu.vue | 2 +- src/components/CoverageNotice.vue | 2 +- src/components/MobileTabBar.vue | 2 +- src/components/RecordHeader.vue | 2 +- src/components/RequestState.vue | 4 +- src/content/links.ts | 2 +- src/features/activity/actor.ts | 35 ++ src/features/profiles/OwnedRepositories.vue | 6 +- src/features/profiles/PinnedRepositories.vue | 4 +- src/features/profiles/RepositoryCard.vue | 13 +- src/{ => lib}/activity/recent.ts | 2 +- src/{ => lib}/api/cache.ts | 0 src/{ => lib}/api/client-provider.ts | 2 +- src/{ => lib}/api/client.ts | 274 +++++++++- src/{ => lib}/api/contracts.ts | 0 src/{ => lib}/api/errors.ts | 0 src/{ => lib}/api/index.ts | 0 src/{ => lib}/requests/index.ts | 0 src/{ => lib}/requests/presentation.ts | 2 +- src/{ => lib}/requests/useRouteRequest.ts | 2 +- src/{ => lib}/router/index.ts | 20 +- src/{ => lib}/router/links.ts | 0 src/{ => lib}/settings/service.ts | 4 +- src/{ => lib}/theme/base16.ts | 0 src/{ => lib}/theme/index.ts | 0 src/{ => lib}/theme/schemes.ts | 0 src/{ => lib}/theme/store.ts | 5 +- src/{ => lib}/theme/variables.css | 0 src/main.ts | 10 +- src/views/ActorActivityPage.vue | 402 +++++++++++++++ src/views/DomainPage.vue | 2 +- src/views/HomePage.vue | 6 +- src/views/LandingPage.vue | 12 +- src/views/NotFoundPage.vue | 2 +- src/views/ProfilePage.vue | 23 +- src/views/ProfilesPage.vue | 2 +- src/views/RepositoryPage.vue | 483 ++++++++++++++++++ src/views/SearchPage.vue | 8 +- src/views/SettingsPage.vue | 6 +- tests/e2e/specs/foundation.cy.ts | 3 +- tests/e2e/tsconfig.json | 5 + tests/unit/activity/recent.spec.ts | 2 +- tests/unit/actor-activity-page.spec.ts | 110 ++++ tests/unit/api/cache.spec.ts | 2 +- tests/unit/api/client.spec.ts | 163 ++++-- tests/unit/api/errors.spec.ts | 2 +- tests/unit/content/markdown.spec.ts | 2 +- tests/unit/profile-page.spec.ts | 10 +- tests/unit/repository-page.spec.ts | 134 +++++ tests/unit/request-components.spec.ts | 2 +- tests/unit/requests/use-route-request.spec.ts | 9 +- tests/unit/router.spec.ts | 4 +- tests/unit/search-page.spec.ts | 4 +- tests/unit/settings/service.spec.ts | 6 +- tests/unit/theme/base16.spec.ts | 2 +- tests/unit/tsconfig.json | 5 + tsconfig.json | 2 +- vite.config.ts | 1 + 62 files changed, 1714 insertions(+), 137 deletions(-) create mode 100644 src/features/activity/actor.ts rename src/{ => lib}/activity/recent.ts (99%) rename src/{ => lib}/api/cache.ts (100%) rename src/{ => lib}/api/client-provider.ts (93%) rename src/{ => lib}/api/client.ts (54%) rename src/{ => lib}/api/contracts.ts (100%) rename src/{ => lib}/api/errors.ts (100%) rename src/{ => lib}/api/index.ts (100%) rename src/{ => lib}/requests/index.ts (100%) rename src/{ => lib}/requests/presentation.ts (96%) rename src/{ => lib}/requests/useRouteRequest.ts (98%) rename src/{ => lib}/router/index.ts (92%) rename src/{ => lib}/router/links.ts (100%) rename src/{ => lib}/settings/service.ts (92%) rename src/{ => lib}/theme/base16.ts (100%) rename src/{ => lib}/theme/index.ts (100%) rename src/{ => lib}/theme/schemes.ts (100%) rename src/{ => lib}/theme/store.ts (97%) rename src/{ => lib}/theme/variables.css (100%) create mode 100644 src/views/ActorActivityPage.vue create mode 100644 src/views/RepositoryPage.vue create mode 100644 tests/e2e/tsconfig.json create mode 100644 tests/unit/actor-activity-page.spec.ts create mode 100644 tests/unit/repository-page.spec.ts create mode 100644 tests/unit/tsconfig.json diff --git a/.gitignore b/.gitignore index 2fc2afd..6a768a7 100644 --- a/.gitignore +++ b/.gitignore @@ -22,10 +22,10 @@ npm-debug.log* /.sass-cache /.sourcemaps /.versions -/.vscode/* -!/.vscode/extensions.json +/.vscode/ /coverage /dist +*.tsbuildinfo /node_modules /platforms /plugins diff --git a/ROADMAP.md b/ROADMAP.md index 07eaa77..694627a 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -56,12 +56,18 @@ accepts public links and identifiers, exposes every Bobbin filter, preserves result order across cursor pages, and validates every result before display. Profile pages resolve handles and DIDs, show safe profile details and links, retain the configured order of pinned repositories, and paginate owned -repositories without coupling section failures. The public landing page and -shared messages speak to readers rather than exposing implementation details. -Shared content components sanitize Markdown and route supported record links to -local views. Every planned domain has a stable deep link; later tickets replace -the remaining compact availability notices with complete views. Capacitor has a -starter app identifier and no checked-in Android or iOS project. +repositories without coupling section failures. People can browse each kind of +public activity separately, filter issues and pull requests, follow related +records, and keep using the other sections when one source is unavailable. +Repository overviews show identity, topics, links, hosts, languages, README +content, labels, totals, collaborators, and recent code updates. They also make +the repository record and repository DID easy to distinguish and copy. The +public landing page and shared messages speak to readers rather than exposing +implementation details. Shared content components sanitize Markdown and route +supported record links to local views. Every planned domain has a stable deep +link; later tickets replace the remaining compact availability notices with +complete views. Capacitor has a starter app identifier and no checked-in +Android or iOS project. The API contract is documented in [docs/api.md](docs/api.md). Bobbin is a new, read-only XRPC AppView whose hosted instance is `https://api.tangled.org`. diff --git a/TODO.md b/TODO.md index d8582e9..36e15d6 100644 --- a/TODO.md +++ b/TODO.md @@ -179,6 +179,8 @@ repositories, owned repositories, links, and independently loading sections. ### T10 - Build actor activity dashboards +**Status:** Complete + **What to build:** Expose every actor-oriented `*By` query as typed, paginated activity sections linked to their subject records. @@ -186,15 +188,17 @@ activity sections linked to their subject records. **Acceptance criteria:** -- [ ] Comments, reactions, stars, issues, pulls, states, statuses, and ref updates are covered. -- [ ] Collaborator, label, pipeline, artifact, knot, and spindle authorings are covered. -- [ ] Filters supported by issue and pull `*By` endpoints are available. -- [ ] One section's failure does not block other activity sections. +- [x] Comments, reactions, stars, issues, pulls, states, statuses, and ref updates are covered. +- [x] Collaborator, label, pipeline, artifact, knot, and spindle authorings are covered. +- [x] Filters supported by issue and pull `*By` endpoints are available. +- [x] One section's failure does not block other activity sections. **Verification:** `bun run test:unit --run && bun run build` ### T11 - Build repository overview pages +**Status:** Complete + **What to build:** Render repository identity, topics, links, knot, spindle, languages, README, labels, counts, collaborators, and recent ref activity. @@ -202,10 +206,10 @@ languages, README, labels, counts, collaborators, and recent ref activity. **Acceptance criteria:** -- [ ] Repo record AT-URI and repo DID remain visibly distinct and copyable. -- [ ] README Markdown is sanitized and absent README data has a compact empty state. -- [ ] Overview sections load independently and link to their full views. -- [ ] Canonical Tangled and clone/download actions are unambiguous and read-only. +- [x] Repo record AT-URI and repo DID remain visibly distinct and copyable. +- [x] README Markdown is sanitized and absent README data has a compact empty state. +- [x] Overview sections load independently and link to their full views. +- [x] Canonical Tangled and clone/download actions are unambiguous and read-only. **Verification:** `bun run test:unit --run && bun run build` diff --git a/src/App.vue b/src/App.vue index 6a7ff02..d9c7328 100644 --- a/src/App.vue +++ b/src/App.vue @@ -17,7 +17,7 @@ import { computed, onBeforeUnmount, onMounted } from 'vue' import { useRoute, useRouter } from 'vue-router' import AppMenu from './components/AppMenu.vue' import MobileTabBar from './components/MobileTabBar.vue' -import { links } from './router/links' +import { links } from './lib/router/links' const router = useRouter() const route = useRoute() diff --git a/src/components/AppMenu.vue b/src/components/AppMenu.vue index b5683d0..91b0828 100644 --- a/src/components/AppMenu.vue +++ b/src/components/AppMenu.vue @@ -36,7 +36,7 @@ diff --git a/src/views/DomainPage.vue b/src/views/DomainPage.vue index af3a687..a322697 100644 --- a/src/views/DomainPage.vue +++ b/src/views/DomainPage.vue @@ -35,7 +35,7 @@ + + diff --git a/src/views/SearchPage.vue b/src/views/SearchPage.vue index 7e73061..86d549f 100644 --- a/src/views/SearchPage.vue +++ b/src/views/SearchPage.vue @@ -87,16 +87,16 @@