birdclaw 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +6 -2
- package/dist/cli/birdclaw.js +3267 -2991
- package/dist/client/assets/{SavedTimelineView-4QYaZ4CU.js → SavedTimelineView-CFgHR6di.js} +1 -1
- package/dist/client/assets/{TimelineRouteFrame-DJdUR7DX.js → TimelineRouteFrame-DcipwBqo.js} +1 -1
- package/dist/client/assets/{blocks-C84MpzHq.js → blocks-GWWj1dXr.js} +1 -1
- package/dist/client/assets/blocks-qrevFiNI.js +2 -0
- package/dist/client/assets/{bookmarks-Gy6MvAc9.js → bookmarks-BMf6Ytua.js} +1 -1
- package/dist/client/assets/{discuss-DKC6H1fN.js → discuss-BeFPn8mN.js} +2 -2
- package/dist/client/assets/{discuss-C0CUMn6v.js → discuss-ZvGdSAmA.js} +1 -1
- package/dist/client/assets/dms-CMp6bAR_.js +1 -0
- package/dist/client/assets/{dms-Q1a1kZ_P.js → dms-DBexFtGg.js} +2 -2
- package/dist/client/assets/{inbox-C9zFrQ76.js → inbox-CeGwsGo_.js} +1 -1
- package/dist/client/assets/{inbox-DjlVjj3K.js → inbox-DvSRkOiH.js} +2 -2
- package/dist/client/assets/{index-B8hO98gL.js → index-Bz8aYylW.js} +3 -3
- package/dist/client/assets/{likes-BXANVRCj.js → likes-BaljrAHC.js} +1 -1
- package/dist/client/assets/{links-6tWeHun_.js → links-CbC-fX7T.js} +2 -2
- package/dist/client/assets/{links-D3Ut-aUB.js → links-DMGuDd-B.js} +1 -1
- package/dist/client/assets/{mentions-BKO40XiK.js → mentions-TFNyR9F4.js} +1 -1
- package/dist/client/assets/{network-map-DUpppygD.js → network-map-1fXIqI3Y.js} +1 -1
- package/dist/client/assets/{network-map-2EPsbMIT.js → network-map-CKiXfloJ.js} +2 -2
- package/dist/client/assets/{routes-ARIEjgq-.js → routes-P7NzOusD.js} +1 -1
- package/dist/client/assets/{today-DNAg-wnA.js → today-DOUIqDPa.js} +2 -2
- package/dist/client/assets/{today-Q3xFx4cl.js → today-Dq8qoGhX.js} +1 -1
- package/dist/client/assets/{useTimelineRouteData-DYhYLZY4.js → useTimelineRouteData-2v9TVG9L.js} +1 -1
- package/dist/server/assets/{SavedTimelineView-Ern3q7LW.js → SavedTimelineView-lVz_ZZnh.js} +1 -1
- package/dist/server/assets/{TimelineRouteFrame-CYD-qMuy.js → TimelineRouteFrame-Dj1TeYrD.js} +1 -1
- package/dist/server/assets/{_tanstack-start-manifest_v-CHtuH75x.js → _tanstack-start-manifest_v-DQT-Q-zz.js} +28 -28
- package/dist/server/assets/{blocks-VXmcBqKD.js → blocks-BSvPOa_E.js} +2 -2
- package/dist/server/assets/{blocks-DWZAKPAX.js → blocks-Cv7I4iVs.js} +2 -2
- package/dist/server/assets/{bookmarks-DVCjWQPu.js → bookmarks-BcFpV8qD.js} +1 -1
- package/dist/server/assets/{discuss-4b2z14mT.js → discuss-BuLhalye.js} +2 -2
- package/dist/server/assets/{discuss-CJ_vThu8.js → discuss-D1q_L77A.js} +2 -2
- package/dist/server/assets/{dms-DbJk33XB.js → dms-C-s5l0cs.js} +3 -3
- package/dist/server/assets/{dms-Cr5heLhm.js → dms-OtbAd5nR.js} +2 -2
- package/dist/server/assets/{inbox-D607zrwZ.js → inbox-Wf8xGIjq.js} +2 -2
- package/dist/server/assets/{inbox-BJzEE8Aa.js → inbox-wLir608r.js} +1 -1
- package/dist/server/assets/{likes-C3EpsPbF.js → likes-BfFIyEbU.js} +1 -1
- package/dist/server/assets/{links-BU_FRxcz.js → links-BWt4ORY4.js} +2 -2
- package/dist/server/assets/{links-Dz-6bmkg.js → links-_ePW92kI.js} +2 -2
- package/dist/server/assets/{mentions-BHd6N_OL.js → mentions-oO4uv0Ju.js} +1 -1
- package/dist/server/assets/{router-BMfpBcBM.js → router-DY-ahyjD.js} +14588 -14521
- package/dist/server/assets/{routes-Cyokiwx1.js → routes-CYJ-dTi6.js} +1 -1
- package/dist/server/assets/start-CHdfdlfD.js +4 -0
- package/dist/server/assets/{today-CRa6Y-Tg.js → today-BLDqhLvT.js} +2 -2
- package/dist/server/assets/{today-CScZDxQx.js → today-D8zExFWH.js} +2 -2
- package/dist/server/server.js +4 -4
- package/package.json +89 -91
- package/dist/client/assets/blocks-BpjvGwYq.js +0 -2
- package/dist/client/assets/dms-DWA5tvJS.js +0 -1
- package/dist/server/assets/start-P4i55asu.js +0 -4
- package/dist/server/assets/{useTimelineRouteData-BWxx9yQl.js → useTimelineRouteData-wthflgOe.js} +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as TimelineRouteFrame } from "./TimelineRouteFrame-
|
|
1
|
+
import { t as TimelineRouteFrame } from "./TimelineRouteFrame-Dj1TeYrD.js";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/routes/index.tsx?tsr-split=component
|
|
4
4
|
function homeSubtitle(meta) {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
//#region node_modules/.pnpm/@tanstack+react-start@1.168.30_esbuild@0.28.1_react-dom@19.2.7_react@19.2.7__react@19.2_d1851e61953646bf8cb61f5961f308d5/node_modules/@tanstack/react-start/dist/plugin/default-entry/start.ts
|
|
2
|
+
var startInstance = void 0;
|
|
3
|
+
//#endregion
|
|
4
|
+
export { startInstance };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Jt as segmentedClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, m as cx, q as errorCopyClass, qt as segmentClass, wt as pageHeaderActionsClass } from "./ui-CL21-Ku0.js";
|
|
2
|
+
import { s as validateTodaySearch } from "./route-search-BUlQ5lGM.js";
|
|
2
3
|
import { a as useNdjsonRun, n as periodDigestStreamEventSchema, o as MarkdownViewer, t as isTerminalStreamEvent } from "./client-stream-contracts-DVzk8DzM.js";
|
|
3
4
|
import { n as normalizeProfileHydrationHandle, t as hydrateProfileHandles } from "./profile-hydration-client-GJ4kwJS8.js";
|
|
4
|
-
import {
|
|
5
|
-
import { t as Route$1 } from "./today-CScZDxQx.js";
|
|
5
|
+
import { t as Route$1 } from "./today-D8zExFWH.js";
|
|
6
6
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
7
7
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { CheckCircle2, FileDown, Loader2, RefreshCw, Sparkles } from "lucide-react";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import "./ui-CL21-Ku0.js";
|
|
2
|
+
import { s as validateTodaySearch } from "./route-search-BUlQ5lGM.js";
|
|
2
3
|
import "./client-stream-contracts-DVzk8DzM.js";
|
|
3
4
|
import "./profile-hydration-client-GJ4kwJS8.js";
|
|
4
|
-
import { s as validateTodaySearch } from "./route-search-BUlQ5lGM.js";
|
|
5
5
|
import "react";
|
|
6
6
|
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
7
7
|
import "react/jsx-runtime";
|
|
8
8
|
import "lucide-react";
|
|
9
9
|
import "@tanstack/react-query";
|
|
10
10
|
//#region src/routes/today.tsx
|
|
11
|
-
var $$splitComponentImporter = () => import("./today-
|
|
11
|
+
var $$splitComponentImporter = () => import("./today-BLDqhLvT.js");
|
|
12
12
|
var Route$1 = createFileRoute("/today")({
|
|
13
13
|
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
14
14
|
validateSearch: validateTodaySearch
|
package/dist/server/server.js
CHANGED
|
@@ -3516,7 +3516,7 @@ var defaultSerovalPlugins = [
|
|
|
3516
3516
|
* the dev styles URL for route-scoped CSS collection.
|
|
3517
3517
|
*/
|
|
3518
3518
|
async function getStartManifest(matchedRoutes) {
|
|
3519
|
-
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-
|
|
3519
|
+
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-DQT-Q-zz.js");
|
|
3520
3520
|
const startManifest = tsrStartManifest();
|
|
3521
3521
|
let routes = startManifest.routes;
|
|
3522
3522
|
routes[rootRouteId];
|
|
@@ -5231,8 +5231,8 @@ var getBaseManifest = getProdBaseManifest;
|
|
|
5231
5231
|
var createEarlyHintsForRequest = createEarlyHintsCollector;
|
|
5232
5232
|
async function loadEntries() {
|
|
5233
5233
|
const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
|
|
5234
|
-
import("./assets/router-
|
|
5235
|
-
import("./assets/start-
|
|
5234
|
+
import("./assets/router-DY-ahyjD.js"),
|
|
5235
|
+
import("./assets/start-CHdfdlfD.js"),
|
|
5236
5236
|
import("./assets/empty-plugin-adapters-YdH6Vqte.js")
|
|
5237
5237
|
]);
|
|
5238
5238
|
return {
|
|
@@ -5609,7 +5609,7 @@ async function handleServerRoutes({ getRouter, request, url, executeRouter, cont
|
|
|
5609
5609
|
return normalizeSsrResponse(response);
|
|
5610
5610
|
}
|
|
5611
5611
|
//#endregion
|
|
5612
|
-
//#region node_modules/.pnpm/@tanstack+react-start@1.168.
|
|
5612
|
+
//#region node_modules/.pnpm/@tanstack+react-start@1.168.30_esbuild@0.28.1_react-dom@19.2.7_react@19.2.7__react@19.2_d1851e61953646bf8cb61f5961f308d5/node_modules/@tanstack/react-start/dist/plugin/default-entry/server.ts
|
|
5613
5613
|
var fetch$1 = createStartHandler(defaultStreamHandler);
|
|
5614
5614
|
function createServerEntry(entry) {
|
|
5615
5615
|
return { async fetch(...args) {
|
package/package.json
CHANGED
|
@@ -1,92 +1,90 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
"packageManager": "pnpm@10.34.3"
|
|
92
|
-
}
|
|
2
|
+
"name": "birdclaw",
|
|
3
|
+
"version": "0.11.0",
|
|
4
|
+
"description": "Local Twitter memory in SQLite for archives, DMs, likes, bookmarks, and moderation",
|
|
5
|
+
"homepage": "https://github.com/steipete/birdclaw#readme",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/steipete/birdclaw.git"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"birdclaw": "bin/birdclaw.mjs"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"bin/",
|
|
16
|
+
"dist/cli/",
|
|
17
|
+
"dist/client/",
|
|
18
|
+
"dist/server/",
|
|
19
|
+
"CHANGELOG.md",
|
|
20
|
+
"LICENSE",
|
|
21
|
+
"README.md",
|
|
22
|
+
"package.json"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"imports": {
|
|
26
|
+
"#/*": "./src/*"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
33
|
+
"@tanstack/react-query": "^5.101.2",
|
|
34
|
+
"@tanstack/react-router": "1.170.18",
|
|
35
|
+
"commander": "^15.0.0",
|
|
36
|
+
"effect": "^3.22.0",
|
|
37
|
+
"lucide-react": "^1.25.0",
|
|
38
|
+
"mapbox-gl": "^3.26.0",
|
|
39
|
+
"react": "^19.2.7",
|
|
40
|
+
"react-dom": "^19.2.7",
|
|
41
|
+
"react-map-gl": "^8.1.1",
|
|
42
|
+
"supercluster": "^8.0.1",
|
|
43
|
+
"zod": "^4.4.3"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@playwright/test": "^1.61.1",
|
|
47
|
+
"@tailwindcss/typography": "^0.5.20",
|
|
48
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
49
|
+
"@tanstack/react-start": "1.168.30",
|
|
50
|
+
"@testing-library/dom": "^10.4.1",
|
|
51
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
52
|
+
"@testing-library/react": "^16.3.2",
|
|
53
|
+
"@types/geojson": "^7946.0.16",
|
|
54
|
+
"@types/node": "^26.1.1",
|
|
55
|
+
"@types/react": "^19.2.17",
|
|
56
|
+
"@types/react-dom": "^19.2.3",
|
|
57
|
+
"@types/supercluster": "^7.1.3",
|
|
58
|
+
"@vitejs/plugin-react": "^6.0.3",
|
|
59
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
60
|
+
"esbuild": "^0.28.1",
|
|
61
|
+
"jsdom": "^29.1.1",
|
|
62
|
+
"oxfmt": "^0.59.0",
|
|
63
|
+
"oxlint": "^1.74.0",
|
|
64
|
+
"tailwindcss": "^4.3.3",
|
|
65
|
+
"tsx": "^4.23.1",
|
|
66
|
+
"typescript": "^7.0.2",
|
|
67
|
+
"vite": "^8.1.5",
|
|
68
|
+
"vitest": "^4.1.10"
|
|
69
|
+
},
|
|
70
|
+
"engines": {
|
|
71
|
+
"node": ">=26.5.0 <27"
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"dev": "BIRDCLAW_LOCAL_WEB=1 vite dev --host 127.0.0.1 --port 3000",
|
|
75
|
+
"build": "vite build && node scripts/build-cli.mjs",
|
|
76
|
+
"preview": "node bin/birdclaw.mjs serve",
|
|
77
|
+
"test": "node ./scripts/run-vitest.mjs run",
|
|
78
|
+
"coverage": "node ./scripts/run-vitest.mjs run --coverage",
|
|
79
|
+
"e2e": "playwright test",
|
|
80
|
+
"typecheck": "tsc --noEmit",
|
|
81
|
+
"format": "oxfmt --write bin src scripts playwright vite.config.ts vitest.config.ts playwright.config.ts",
|
|
82
|
+
"format:check": "oxfmt --check bin src scripts playwright vite.config.ts vitest.config.ts playwright.config.ts",
|
|
83
|
+
"lint": "oxlint --import-plugin --node-plugin --vitest-plugin --deny-warnings -A require-mock-type-parameters -A no-control-regex bin src scripts playwright vite.config.ts vitest.config.ts playwright.config.ts",
|
|
84
|
+
"check": "pnpm run format:check && pnpm run lint && pnpm run typecheck",
|
|
85
|
+
"pack:smoke": "node scripts/package-smoke.mjs",
|
|
86
|
+
"perf:browser": "node ./scripts/browser-perf.mjs",
|
|
87
|
+
"cli": "tsx src/cli.ts",
|
|
88
|
+
"docs:site": "node scripts/build-docs-site.mjs"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/blocks-C84MpzHq.js","assets/rolldown-runtime-B-9mzPXz.js","assets/react-BwGzW7mM.js","assets/schemas-CMQMhQXI.js","assets/query-client-CA-do_IS.js","assets/useQuery-CL_NXLnc.js","assets/AvatarChip-DsHj3LT7.js","assets/route-search-CmZT7pGD.js","assets/useDebouncedValue-BJLRInUq.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import"./rolldown-runtime-B-9mzPXz.js";import{t as e}from"./react-BwGzW7mM.js";import{n as t,t as n}from"./lazyRouteComponent-CLLbUvMd.js";import{Rn as r}from"./schemas-CMQMhQXI.js";import"./query-client-CA-do_IS.js";import"./AvatarChip-DsHj3LT7.js";import{t as i}from"./route-search-CmZT7pGD.js";import{n as a,t as o}from"./preload-helper-MpqUbZCn.js";import"./useDebouncedValue-BJLRInUq.js";r(),e(),a();var s=t(`/blocks`)({component:n(()=>o(()=>import(`./blocks-C84MpzHq.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),`component`),validateSearch:i});export{s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-B-9mzPXz.js";import{t}from"./react-BwGzW7mM.js";import{Dn as n,Gt as r,Kt as i,M as a,Mn as o,On as s,Rn as c,Ut as l,Wt as u,an as d,dn as f,fn as p,kn as ee,on as te,sn as ne}from"./schemas-CMQMhQXI.js";import{t as re}from"./search-C_LqodNa.js";import{A as ie,a as ae,b as oe,d as m,n as h,r as g,s as _}from"./query-client-CA-do_IS.js";import{t as v}from"./useQuery-CL_NXLnc.js";import{i as y,r as se}from"./account-selection-h7m9xmzU.js";import{n as ce,r as le,t as ue}from"./FeedState-DhMv4zXD.js";import{r as de}from"./route-search-CmZT7pGD.js";import{n as b,t as x}from"./dms-Q1a1kZ_P.js";import{t as S}from"./SyncNowButton-DDYT2jQT.js";import{t as C}from"./useDebouncedValue-BJLRInUq.js";var w=e(t()),T=c(),E=[{value:`all`,label:`All`},{value:`unreplied`,label:`Unreplied`},{value:`replied`,label:`Replied`}],fe=[{value:`recent`,label:`Newest`},{value:`followers`,label:`Followers`}],pe=[{value:`all`,label:`All`},{value:`accepted`,label:`Accepted`},{value:`requests`,label:`Requests`}],D=`flex h-[46px] shrink-0 items-center gap-2 rounded-md border border-[var(--line)] bg-[var(--bg)] px-3 py-0 text-[14px] text-[var(--ink)] outline-none transition-colors duration-150 focus-within:border-[var(--accent)] focus-within:shadow-[0_0_0_1px_var(--accent)]`;function O(){let e=x.useSearch(),t=x.useNavigate();return(0,T.jsx)(k,{searchState:e,onSearchChange:(e,n)=>void t({search:e,replace:n?.replace})})}function k({searchState:e,onSearchChange:t}={}){let c=oe(),[x,O]=(0,w.useState)(()=>de({})),k=e??x,A=(e,n)=>t?t(e,n):O(e),j=k.inbox,M=k.reply,N=k.minFollowers,P=k.minInfluence,F=k.sort,I=k.q,L=k.conversation||void 0,[R,z]=(0,w.useState)(``),B=v({queryKey:h.status,queryFn:({signal:e})=>ae({signal:e})}).data??null,V=se(B?.accounts),H=C(I,180),U=[...h.dms,{inboxFilter:j,replyFilter:M,minFollowers:N,minInfluenceScore:P,sort:F,search:H,selectedAccountId:V??null,selectedConversationId:L??null}],W=v({queryKey:U,queryFn:({signal:e})=>{let t=new URL(`/api/query`,window.location.origin);return t.searchParams.set(`resource`,`dms`),t.searchParams.set(`inbox`,j),t.searchParams.set(`replyFilter`,M),t.searchParams.set(`sort`,F),N.trim()&&t.searchParams.set(`minFollowers`,N.trim()),P.trim()&&t.searchParams.set(`minInfluenceScore`,P.trim()),V&&j!==`requests`&&t.searchParams.set(`account`,V),L&&t.searchParams.set(`conversationId`,L),H.trim()&&t.searchParams.set(`search`,H.trim()),g(t,{signal:e},m,`Direct messages unavailable`)},placeholderData:ie,staleTime:5*6e4}),G=W.data,K=G?.resource===`dms`?G:null,q=K?.items??[],me=K?.selectedConversation?.messages??[],J=K?.selectedConversation?.conversation.id;(0,w.useEffect)(()=>{if(!W.data)return;let e=J??q[0]?.id,t=L&&q.some(e=>e.id===L)?L:e;t&&t!==L&&A({...k,conversation:t},{replace:!0})},[W.data,q,J]);let Y=q.find(e=>e.id===L)??null,he=!!(!W.isError&&L&&J&&L!==J),X=(0,w.useMemo)(()=>B?`${String(B.stats.dms)} conversations cached locally`:`Loading direct messages...`,[B]),Z=y({mutationFn:({conversationId:e,text:t})=>_({kind:`replyDm`,conversationId:e,text:t}),onMutate:async({conversationId:e,text:t})=>{await c.cancelQueries({queryKey:U});let n=c.getQueryData(U);if(!n||n.resource!==`dms`||!Y)return{previous:n};let r=new Date().toISOString(),i=B?.accounts.find(e=>e.id===Y.accountId),a=(i?.handle??Y.accountHandle).replace(/^@/,``),o={id:`optimistic-${r}`,conversationId:e,text:t,createdAt:r,direction:`outbound`,isReplied:!0,mediaCount:0,sender:{id:`local-${Y.accountId}`,handle:a,displayName:i?.name??a,bio:``,followersCount:0,avatarHue:18,createdAt:r}};return c.setQueryData(U,{...n,items:n.items.map(n=>n.id===e?{...n,lastMessageAt:r,lastMessagePreview:t,needsReply:!1,unreadCount:0}:n),selectedConversation:n.selectedConversation?{...n.selectedConversation,messages:[...n.selectedConversation.messages,o]}:n.selectedConversation}),{previous:n}},onError:(e,t,n)=>{n?.previous&&c.setQueryData(U,n.previous)},onSettled:()=>Promise.all([c.invalidateQueries({queryKey:h.dms}),c.invalidateQueries({queryKey:h.status})])});async function ge(e){let t=R.trim();if(!(!t||!Y)){z(``);try{await Z.mutateAsync({conversationId:e,text:t}),A({...k,conversation:e})}catch{z(t)}}}function _e(){Promise.all([c.invalidateQueries({queryKey:h.dms}),c.invalidateQueries({queryKey:h.status})])}let ve=W.isPending,Q=W.error?W.error instanceof Error?W.error.message:`Messages unavailable`:null,$=Z.error?Z.error instanceof Error?Z.error.message:`Reply failed`:null;return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(`header`,{className:l,children:[(0,T.jsxs)(`div`,{className:u,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,T.jsx)(`h1`,{className:i,children:`Messages`}),(0,T.jsx)(`p`,{className:r,children:X})]}),(0,T.jsx)(S,{accounts:B?.accounts,kind:`dms`,label:`Sync DMs`,onSynced:_e,syncOptions:{inbox:j,limit:j===`requests`?200:50,maxPages:j===`requests`?3:1}})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-4 pb-3`,children:[(0,T.jsx)(`div`,{className:p,"aria-label":`DM inbox`,children:pe.map(e=>(0,T.jsx)(`button`,{"aria-pressed":j===e.value,className:a(f,j===e.value&&`bg-[var(--bg-active)] text-[var(--ink)]`),onClick:()=>A({...k,inbox:e.value}),type:`button`,children:e.label},e.value))}),(0,T.jsxs)(`label`,{className:a(ne,`flex-1 min-w-[200px]`),children:[(0,T.jsx)(re,{className:d,strokeWidth:2}),(0,T.jsx)(`input`,{className:te,onChange:e=>A({...k,q:e.target.value},{replace:!0}),placeholder:`Search DMs`,value:I})]}),(0,T.jsxs)(`label`,{className:a(D,`w-[156px]`),children:[(0,T.jsx)(`span`,{className:`shrink-0 text-[12px] font-semibold text-[var(--ink-soft)]`,children:`Followers`}),(0,T.jsx)(`input`,{className:`min-w-0 flex-1 border-0 bg-transparent text-right text-[14px] text-[var(--ink)] outline-none placeholder:text-[var(--ink-soft)]`,inputMode:`numeric`,onChange:e=>A({...k,minFollowers:e.target.value},{replace:!0}),placeholder:`Any`,value:N})]}),(0,T.jsxs)(`label`,{className:a(D,`w-[132px]`),children:[(0,T.jsx)(`span`,{className:`shrink-0 text-[12px] font-semibold text-[var(--ink-soft)]`,children:`Score`}),(0,T.jsx)(`input`,{className:`min-w-0 flex-1 border-0 bg-transparent text-right text-[14px] text-[var(--ink)] outline-none placeholder:text-[var(--ink-soft)]`,inputMode:`numeric`,onChange:e=>A({...k,minInfluence:e.target.value},{replace:!0}),placeholder:`Any`,value:P})]}),(0,T.jsx)(`div`,{className:p,children:fe.map(e=>(0,T.jsx)(`button`,{className:a(f,e.value===F&&`bg-[var(--bg-active)] text-[var(--ink)]`),onClick:()=>A({...k,sort:e.value}),type:`button`,children:e.label},e.value))})]}),(0,T.jsx)(`div`,{className:ee,"aria-label":`DM reply filter`,children:E.map(e=>{let t=M===e.value;return(0,T.jsx)(`button`,{type:`button`,"aria-pressed":t,className:a(n,t&&`text-[var(--ink)] font-bold`),onClick:()=>A({...k,reply:e.value}),children:(0,T.jsxs)(`span`,{className:`relative inline-flex flex-col items-center justify-center py-1`,children:[e.value,t?(0,T.jsx)(`span`,{className:s}):null]})},e.value)})})]}),$?(0,T.jsx)(`p`,{className:a(o,`px-4 py-2 text-red-500`),children:$}):null,ve&&q.length===0||he?(0,T.jsx)(le,{detail:`Reading local conversations and reply state`,label:`Loading messages`}):Q?(0,T.jsx)(ce,{action:(0,T.jsx)(`button`,{className:`rounded-full bg-[var(--accent)] px-4 py-1.5 text-[14px] font-bold text-white`,onClick:()=>void W.refetch(),type:`button`,children:`Retry`}),message:Q,title:`Could not load messages`}):q.length===0?(0,T.jsx)(ue,{detail:`Sync DMs or broaden the filters to find a conversation.`,label:`No conversations in this view`}):(0,T.jsx)(b,{conversations:q,onReplyDraftChange:z,onReplySend:ge,onSelectConversation:e=>A({...k,conversation:e}),replyDraft:R,selectedConversation:Y,selectedMessages:me})]})}export{k as DmsRouteView,O as component};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
//#region node_modules/.pnpm/@tanstack+react-start@1.168.28_esbuild@0.28.1_react-dom@19.2.7_react@19.2.7__react@19.2_60d34fa2ee9fd8798a68612b96b5f9e4/node_modules/@tanstack/react-start/dist/plugin/default-entry/start.ts
|
|
2
|
-
var startInstance = void 0;
|
|
3
|
-
//#endregion
|
|
4
|
-
export { startInstance };
|
package/dist/server/assets/{useTimelineRouteData-BWxx9yQl.js → useTimelineRouteData-wthflgOe.js}
RENAMED
|
@@ -3,9 +3,9 @@ import { D as tweetConversationResponseSchema, a as fetchQueryEnvelope, d as run
|
|
|
3
3
|
import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-B5ASnpQ4.js";
|
|
4
4
|
import { r as useSelectedAccountId } from "./account-selection-CTdFGWRk.js";
|
|
5
5
|
import { a as TweetSkeletonRows, n as FeedError, o as BirdclawEmpty, r as FeedLoading, s as BirdclawLoading, t as FeedEmpty } from "./FeedState-YrMZ10Gf.js";
|
|
6
|
+
import { t as useDebouncedValue } from "./useDebouncedValue-DOnA6Xcy.js";
|
|
6
7
|
import { d as isTweetArticleUrlEntity, f as normalizeTweetUrlEntityRangeForText, s as safeHttpUrl, t as ProfilePreview } from "./ProfilePreview-Dk2CdOOS.js";
|
|
7
8
|
import { t as SmartTimestamp } from "./SmartTimestamp-sxGoy8Uj.js";
|
|
8
|
-
import { t as useDebouncedValue } from "./useDebouncedValue-DOnA6Xcy.js";
|
|
9
9
|
import { t as TweetRichText } from "./TweetRichText-BEo_OCEM.js";
|
|
10
10
|
import { createContext, createElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
11
11
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|