birdclaw 0.8.5 → 0.9.1
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 +34 -0
- package/README.md +23 -3
- package/dist/cli/birdclaw.js +1344 -190
- package/dist/client/assets/{AvatarChip-DLoqM5xD.js → AvatarChip-BN3b4MhM.js} +1 -1
- package/dist/client/assets/{ProfilePreview-DQX6_xc3.js → ProfilePreview-CHbT0U9a.js} +1 -1
- package/dist/client/assets/{SavedTimelineView-BhSiVyR1.js → SavedTimelineView-mGXE9EYJ.js} +1 -1
- package/dist/client/assets/{SmartTimestamp-BR0-9se2.js → SmartTimestamp-DG8XJKUz.js} +1 -1
- package/dist/client/assets/TimelineRouteFrame-BmMC7qLj.js +1 -0
- package/dist/client/assets/blocks-CawnB0mN.js +1 -0
- package/dist/client/assets/{bookmarks-LbYOsoKf.js → bookmarks-DZIMTKEp.js} +1 -1
- package/dist/client/assets/client-stream-contracts-DcKcyZhg.js +5 -0
- package/dist/client/assets/{data-sources-euTr6T_L.js → data-sources-BJUT2qaO.js} +1 -1
- package/dist/client/assets/{discuss-BWKu_p7B.js → discuss-DMPJVaRk.js} +1 -1
- package/dist/client/assets/dms-BfPFG4Qr.js +1 -0
- package/dist/client/assets/{inbox-BybSI5Vf.js → inbox-DmeYJ7tt.js} +1 -1
- package/dist/client/assets/{index-DZVisyna.js → index-Bqmo4MbK.js} +6 -6
- package/dist/client/assets/likes-BxVL-j_C.js +1 -0
- package/dist/client/assets/{links-CIwqK_dX.js → links-BeA1Wt8F.js} +1 -1
- package/dist/client/assets/{mapbox-B4zqX7r0.js → mapbox-BTSMNSry.js} +2 -2
- package/dist/client/assets/{mapbox-gl-DYNcLcll.js → mapbox-gl-CPemBIlO.js} +1 -1
- package/dist/client/assets/{mentions-BoVVAIT7.js → mentions-DBrY-UPg.js} +1 -1
- package/dist/client/assets/{network-map-zRysIY_b.js → network-map-MqbE164r.js} +2 -2
- package/dist/client/assets/{profile-analyze-C_yDeX6-.js → profile-analyze-DEA75Reh.js} +1 -1
- package/dist/client/assets/{profile-hydration-client-YEtJsNTv.js → profile-hydration-client-BNe0sUmK.js} +1 -1
- package/dist/client/assets/{profiles._handle-DdIVPqU-.js → profiles._handle-K34ofz9U.js} +1 -1
- package/dist/client/assets/{query-client-fYu2rzRC.js → query-client-DUP1ZzP7.js} +1 -1
- package/dist/client/assets/{rate-limits-BWPmPOSh.js → rate-limits-B8Wmpt9r.js} +1 -1
- package/dist/client/assets/{routes-CiLuYpZr.js → routes-Bl-Lw2hN.js} +1 -1
- package/dist/client/assets/schemas-CaALBBpc.js +64 -0
- package/dist/client/assets/styles-zihNNCGg.css +2 -0
- package/dist/client/assets/today-DFvZ0Ys5.js +1 -0
- package/dist/client/assets/{useTimelineRouteData-BaO3Rna1.js → useTimelineRouteData-Cpf-Jqsx.js} +1 -1
- package/dist/server/assets/{AvatarChip-zUDAEmjL.js → AvatarChip-DWag3IzT.js} +1 -1
- package/dist/server/assets/{FeedState-ntW0Q2GB.js → FeedState-CwzcvP-p.js} +1 -1
- package/dist/server/assets/{ProfileAnalysisStream-L7bs6IHH.js → ProfileAnalysisStream-CLjrYzEx.js} +2 -2
- package/dist/server/assets/{ProfilePreview-Cg-AOHBE.js → ProfilePreview-Bq-DSUM2.js} +2 -2
- package/dist/server/assets/{SavedTimelineView-BtCq1dHk.js → SavedTimelineView-Bk9nfnb-.js} +2 -2
- package/dist/server/assets/{SmartTimestamp-DfwE1NGf.js → SmartTimestamp-C06w_f9J.js} +1 -1
- package/dist/server/assets/SyncNowButton-CKuXKYcd.js +259 -0
- package/dist/server/assets/{TimelineRouteFrame-CjMIh63G.js → TimelineRouteFrame-Bg3e7X_N.js} +5 -3
- package/dist/server/assets/{TweetRichText-DDywESRF.js → TweetRichText-wzUAtbPS.js} +2 -2
- package/dist/server/assets/{_tanstack-start-manifest_v-aLWUdbAc.js → _tanstack-start-manifest_v-CVfs07C8.js} +24 -24
- package/dist/server/assets/{blocks-DSgQghqP.js → blocks-CaP_u3mY.js} +3 -3
- package/dist/server/assets/{blocks-C1mgGTB3.js → blocks-DKy4yTF-.js} +3 -3
- package/dist/server/assets/{bookmarks-D_YkmCK3.js → bookmarks-CPFq3JVX.js} +1 -1
- package/dist/server/assets/{client-stream-contracts-Bq6kMmhh.js → client-stream-contracts-gtXEreFY.js} +72 -8
- package/dist/server/assets/{data-sources-BnA1Q94p.js → data-sources-DWwmQqcO.js} +1 -1
- package/dist/server/assets/{discuss-DAq6ehL9.js → discuss-BB8wFy4L.js} +3 -3
- package/dist/server/assets/{discuss-C1QMBBSk.js → discuss-CVGB4_I0.js} +3 -3
- package/dist/server/assets/{dms-DAyQrVM2.js → dms-7NzdyQZQ.js} +6 -6
- package/dist/server/assets/{dms-BuLj4bp8.js → dms-vbEumuuO.js} +4 -4
- package/dist/server/assets/{inbox-CkGOaW1q.js → inbox-CBeZctFd.js} +2 -2
- package/dist/server/assets/{inbox-DpWd1EzC.js → inbox-UpHhXODd.js} +4 -4
- package/dist/server/assets/{likes-BMm2JWYI.js → likes-CDAjYyTm.js} +1 -1
- package/dist/server/assets/{links-dqXb35YM.js → links-DU-TIHtg.js} +6 -6
- package/dist/server/assets/{links-Da4tjWtI.js → links-sQ3q2jvO.js} +6 -6
- package/dist/server/assets/{mentions-CEyEcOFw.js → mentions-DdndGSRw.js} +1 -1
- package/dist/server/assets/{network-map-D3CzRcC4.js → network-map-B9iOapuB.js} +2 -2
- package/dist/server/assets/{network-map-D5DoLOwR.js → network-map-CcOz-T9O.js} +2 -2
- package/dist/server/assets/{profile-analyze-DH1TSBkT.js → profile-analyze-BmDeTif5.js} +1 -1
- package/dist/server/assets/{profile-analyze-CGCj4VFd.js → profile-analyze-CUfXmXEH.js} +3 -3
- package/dist/server/assets/{profiles._handle-B5V-huoo.js → profiles._handle-8snagiR1.js} +4 -4
- package/dist/server/assets/{profiles._handle-CJ6rgzt8.js → profiles._handle-BAqnghwo.js} +5 -5
- package/dist/server/assets/{rate-limits-VAr2qzYD.js → rate-limits-BY2-aQPT.js} +1 -1
- package/dist/server/assets/{router-C4cz9ypd.js → router-CAvZOdfA.js} +437 -108
- package/dist/server/assets/{routes-B9aikOdB.js → routes-D9226vKz.js} +1 -1
- package/dist/server/assets/{today-JkxZXdBt.js → today-BmvIMJzI.js} +3 -3
- package/dist/server/assets/{today-B_TA16QG.js → today-DKWphGrC.js} +112 -57
- package/dist/server/assets/{ui-qbmcMSSX.js → ui-rDHeS-cc.js} +2 -1
- package/dist/server/assets/{useTimelineRouteData-BLXvMGb2.js → useTimelineRouteData-BmDbGvQ8.js} +7 -7
- package/dist/server/server.js +2 -2
- package/package.json +13 -13
- package/dist/client/assets/TimelineRouteFrame-9NDLnXzH.js +0 -1
- package/dist/client/assets/blocks-CFp_njvG.js +0 -1
- package/dist/client/assets/client-stream-contracts-sR4xMQxY.js +0 -5
- package/dist/client/assets/dms-SLXMtC4v.js +0 -1
- package/dist/client/assets/likes-dyh9p8y_.js +0 -1
- package/dist/client/assets/schemas-I9r6F6ya.js +0 -64
- package/dist/client/assets/styles-B8s3tt3r.css +0 -2
- package/dist/client/assets/today-BoO64YoY.js +0 -1
- package/dist/server/assets/SyncNowButton-BOn_IBXS.js +0 -76
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as TimelineRouteFrame } from "./TimelineRouteFrame-
|
|
1
|
+
import { t as TimelineRouteFrame } from "./TimelineRouteFrame-Bg3e7X_N.js";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/routes/index.tsx?tsr-split=component
|
|
4
4
|
function homeSubtitle(meta) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./ui-
|
|
2
|
-
import "./client-stream-contracts-
|
|
1
|
+
import "./ui-rDHeS-cc.js";
|
|
2
|
+
import "./client-stream-contracts-gtXEreFY.js";
|
|
3
3
|
import "./profile-hydration-client-GJ4kwJS8.js";
|
|
4
4
|
import { s as validateTodaySearch } from "./route-search-BUlQ5lGM.js";
|
|
5
5
|
import "react";
|
|
@@ -8,7 +8,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-DKWphGrC.js");
|
|
12
12
|
var Route$1 = createFileRoute("/today")({
|
|
13
13
|
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
14
14
|
validateSearch: validateTodaySearch
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Dt as pageSubtitleClass, Et as pageHeaderRowClass,
|
|
2
|
-
import { a as useNdjsonRun, n as periodDigestStreamEventSchema, o as MarkdownViewer, t as isTerminalStreamEvent } from "./client-stream-contracts-
|
|
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-rDHeS-cc.js";
|
|
2
|
+
import { a as useNdjsonRun, n as periodDigestStreamEventSchema, o as MarkdownViewer, t as isTerminalStreamEvent } from "./client-stream-contracts-gtXEreFY.js";
|
|
3
3
|
import { n as normalizeProfileHydrationHandle, t as hydrateProfileHandles } from "./profile-hydration-client-GJ4kwJS8.js";
|
|
4
4
|
import { s as validateTodaySearch } from "./route-search-BUlQ5lGM.js";
|
|
5
|
-
import { t as Route$1 } from "./today-
|
|
5
|
+
import { t as Route$1 } from "./today-BmvIMJzI.js";
|
|
6
6
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
7
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
import { CheckCircle2, Loader2, RefreshCw, Sparkles } from "lucide-react";
|
|
7
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { CheckCircle2, FileDown, Loader2, RefreshCw, Sparkles } from "lucide-react";
|
|
9
9
|
import { useQueryClient } from "@tanstack/react-query";
|
|
10
10
|
//#region src/routes/today.tsx?tsr-split=component
|
|
11
11
|
var PROFILE_HYDRATION_LIMIT = 12;
|
|
@@ -29,6 +29,23 @@ var periods = [
|
|
|
29
29
|
label: "Week"
|
|
30
30
|
}
|
|
31
31
|
];
|
|
32
|
+
function periodLabel(period) {
|
|
33
|
+
return periods.find((item) => item.value === period)?.label ?? "Digest";
|
|
34
|
+
}
|
|
35
|
+
function exportCurrentDigestPdf(title) {
|
|
36
|
+
const previousTitle = document.title;
|
|
37
|
+
let cleanedUp = false;
|
|
38
|
+
const cleanup = () => {
|
|
39
|
+
if (cleanedUp) return;
|
|
40
|
+
cleanedUp = true;
|
|
41
|
+
document.title = previousTitle;
|
|
42
|
+
window.removeEventListener("afterprint", cleanup);
|
|
43
|
+
};
|
|
44
|
+
document.title = title;
|
|
45
|
+
window.addEventListener("afterprint", cleanup, { once: true });
|
|
46
|
+
window.setTimeout(cleanup, 3e3);
|
|
47
|
+
window.print();
|
|
48
|
+
}
|
|
32
49
|
function digestUrl(period, includeDms, refresh) {
|
|
33
50
|
const url = new URL("/api/period-digest", window.location.origin);
|
|
34
51
|
url.searchParams.set("period", period);
|
|
@@ -206,62 +223,100 @@ function TodayRouteView({ searchState: controlledSearch, onSearchChange } = {})
|
|
|
206
223
|
const updateSearch = (next, options) => onSearchChange ? onSearchChange(next, options) : setLocalSearch(next);
|
|
207
224
|
const { period, includeDms } = searchState;
|
|
208
225
|
const { context, error, loading, markdown, result, run, status } = useDigestStream(period, includeDms);
|
|
226
|
+
useEffect(() => {
|
|
227
|
+
const root = document.documentElement;
|
|
228
|
+
root.classList.add("today-pdf-route");
|
|
229
|
+
return () => root.classList.remove("today-pdf-route");
|
|
230
|
+
}, []);
|
|
209
231
|
const sourceLabel = useMemo(() => formatCounts(result?.context ?? context), [context, result]);
|
|
232
|
+
const digestLabel = result?.context.window.label ?? context?.window.label ?? periodLabel(period);
|
|
233
|
+
const canExportPdf = Boolean(result?.markdown.trim()) && !loading;
|
|
234
|
+
const exportTitle = `BirdClaw ${digestLabel} digest`;
|
|
235
|
+
const exportUpdatedAt = result ? new Date(result.updatedAt).toLocaleString(void 0, {
|
|
236
|
+
dateStyle: "medium",
|
|
237
|
+
timeStyle: "short"
|
|
238
|
+
}) : null;
|
|
239
|
+
const handleExportPdf = useCallback(() => {
|
|
240
|
+
if (!canExportPdf) return;
|
|
241
|
+
exportCurrentDigestPdf(exportTitle);
|
|
242
|
+
}, [canExportPdf, exportTitle]);
|
|
210
243
|
return /* @__PURE__ */ jsxs("div", {
|
|
211
|
-
className: "flex min-h-screen flex-col",
|
|
244
|
+
className: "today-pdf-root flex min-h-screen flex-col",
|
|
212
245
|
children: [
|
|
213
246
|
/* @__PURE__ */ jsxs("header", {
|
|
214
|
-
className: pageHeaderClass,
|
|
215
|
-
children: [
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
247
|
+
className: cx("today-pdf-header", pageHeaderClass),
|
|
248
|
+
children: [
|
|
249
|
+
/* @__PURE__ */ jsxs("div", {
|
|
250
|
+
className: pageHeaderRowClass,
|
|
251
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
252
|
+
className: "min-w-0",
|
|
253
|
+
children: [/* @__PURE__ */ jsx("h1", {
|
|
254
|
+
className: pageTitleClass,
|
|
255
|
+
children: "What happened"
|
|
256
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
257
|
+
className: pageSubtitleClass,
|
|
258
|
+
children: sourceLabel
|
|
259
|
+
})]
|
|
260
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
261
|
+
className: cx("today-screen-only", pageHeaderActionsClass),
|
|
262
|
+
children: [canExportPdf ? /* @__PURE__ */ jsxs("button", {
|
|
263
|
+
type: "button",
|
|
264
|
+
className: secondaryButtonClass,
|
|
265
|
+
onClick: handleExportPdf,
|
|
266
|
+
children: [/* @__PURE__ */ jsx(FileDown, {
|
|
267
|
+
className: "size-4",
|
|
268
|
+
"aria-hidden": "true"
|
|
269
|
+
}), "Export PDF"]
|
|
270
|
+
}) : null, /* @__PURE__ */ jsxs("button", {
|
|
271
|
+
type: "button",
|
|
272
|
+
className: secondaryButtonClass,
|
|
273
|
+
onClick: () => run(true),
|
|
274
|
+
disabled: loading,
|
|
275
|
+
children: [/* @__PURE__ */ jsx(RefreshCw, {
|
|
276
|
+
className: cx("size-4", loading && "animate-spin"),
|
|
277
|
+
"aria-hidden": "true"
|
|
278
|
+
}), "Refresh"]
|
|
279
|
+
})]
|
|
225
280
|
})]
|
|
226
|
-
}),
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
},
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
})
|
|
262
|
-
})
|
|
263
|
-
})
|
|
264
|
-
|
|
281
|
+
}),
|
|
282
|
+
/* @__PURE__ */ jsxs("div", {
|
|
283
|
+
className: "today-pdf-meta",
|
|
284
|
+
"aria-hidden": "true",
|
|
285
|
+
children: [
|
|
286
|
+
/* @__PURE__ */ jsx("span", { children: digestLabel }),
|
|
287
|
+
/* @__PURE__ */ jsx("span", { children: "·" }),
|
|
288
|
+
/* @__PURE__ */ jsxs("span", { children: ["Sources: ", sourceLabel] }),
|
|
289
|
+
exportUpdatedAt ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", { children: "·" }), /* @__PURE__ */ jsxs("span", { children: ["Generated ", exportUpdatedAt] })] }) : null
|
|
290
|
+
]
|
|
291
|
+
}),
|
|
292
|
+
/* @__PURE__ */ jsxs("div", {
|
|
293
|
+
className: "today-screen-only flex flex-wrap items-center gap-2 px-4 pb-3",
|
|
294
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
295
|
+
className: segmentedClass,
|
|
296
|
+
"aria-label": "Digest period",
|
|
297
|
+
children: periods.map((item) => /* @__PURE__ */ jsx("button", {
|
|
298
|
+
type: "button",
|
|
299
|
+
"aria-pressed": period === item.value,
|
|
300
|
+
className: cx(segmentClass, period === item.value && "bg-[var(--accent-soft)]! text-[var(--accent)]! shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--accent)_36%,transparent)]"),
|
|
301
|
+
onClick: () => updateSearch({
|
|
302
|
+
...searchState,
|
|
303
|
+
period: item.value
|
|
304
|
+
}),
|
|
305
|
+
children: item.label
|
|
306
|
+
}, item.value))
|
|
307
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
308
|
+
className: "inline-flex items-center gap-2 rounded-full border border-[var(--line)] px-3 py-1 text-[13px] font-medium text-[var(--ink-soft)]",
|
|
309
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
310
|
+
type: "checkbox",
|
|
311
|
+
checked: includeDms,
|
|
312
|
+
onChange: (event) => updateSearch({
|
|
313
|
+
...searchState,
|
|
314
|
+
includeDms: event.currentTarget.checked
|
|
315
|
+
})
|
|
316
|
+
}), "DMs"]
|
|
317
|
+
})]
|
|
318
|
+
})
|
|
319
|
+
]
|
|
265
320
|
}),
|
|
266
321
|
error ? /* @__PURE__ */ jsxs("div", {
|
|
267
322
|
className: cx(errorCopyClass, "flex items-center justify-between gap-3"),
|
|
@@ -274,7 +329,7 @@ function TodayRouteView({ searchState: controlledSearch, onSearchChange } = {})
|
|
|
274
329
|
})]
|
|
275
330
|
}) : null,
|
|
276
331
|
/* @__PURE__ */ jsx("div", {
|
|
277
|
-
className: "border-b border-[var(--line)] px-4 py-2 text-[13px] text-[var(--ink-soft)]",
|
|
332
|
+
className: "today-screen-only border-b border-[var(--line)] px-4 py-2 text-[13px] text-[var(--ink-soft)]",
|
|
278
333
|
children: /* @__PURE__ */ jsxs("span", {
|
|
279
334
|
className: "inline-flex items-center gap-1",
|
|
280
335
|
children: [loading ? /* @__PURE__ */ jsx(Loader2, {
|
|
@@ -59,6 +59,7 @@ var dangerButtonClass = "inline-flex items-center justify-center gap-1.5 rounded
|
|
|
59
59
|
var segmentedClass = "inline-flex shrink-0 items-center gap-1 rounded-full border border-[var(--line)] bg-[var(--bg)] p-1";
|
|
60
60
|
var segmentClass = "rounded-full border-0 bg-transparent px-3 py-1 text-[13px] font-medium text-[var(--ink-soft)] capitalize transition-colors duration-150";
|
|
61
61
|
var segmentActiveClass = "bg-[var(--bg-active)] text-[var(--ink)]";
|
|
62
|
+
var segmentAccentActiveClass = "bg-[var(--accent-soft)]! text-[var(--accent)]! shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--accent)_36%,transparent)]";
|
|
62
63
|
var composerShellClass = "mt-2 flex flex-col gap-2 border-t border-[var(--line)] pt-3";
|
|
63
64
|
var composerInputClass = "min-h-[88px] w-full resize-y rounded-md border border-[var(--line)] bg-[var(--bg)] px-3 py-2.5 text-[15px] text-[var(--ink)] outline-none transition-colors duration-150 placeholder:text-[var(--ink-soft)] focus:border-[var(--accent)] focus:shadow-[0_0_0_1px_var(--accent)]";
|
|
64
65
|
var composerBarClass = "flex items-center justify-between gap-3";
|
|
@@ -134,4 +135,4 @@ var contextStatRowClass = "grid grid-cols-[minmax(0,1fr)_auto] items-center gap-
|
|
|
134
135
|
var contextStatTermClass = "min-w-0 text-[13px] text-[var(--ink-soft)]";
|
|
135
136
|
var contextStatValueClass = "shrink-0 whitespace-nowrap text-right text-[14px] font-bold text-[var(--ink)]";
|
|
136
137
|
//#endregion
|
|
137
|
-
export { feedRowBodyClass as $,
|
|
138
|
+
export { feedRowBodyClass as $, sidebarBrandMarkClass as $t, dmMessageRowClass as A, pillClass as At, embeddedCardClass as B, profilePreviewTriggerClass as Bt, dmListNameClass as C, navLinkLabelCompactClass as Ct, dmMessageBubbleInboundClass as D, pageSubtitleClass as Dt, dmMessageBubbleClass as E, pageHeaderRowClass as Et, dmThreadHeaderClass as F, profilePreviewClass as Ft, embeddedCardNameClass as G, segmentAccentActiveClass as Gt, embeddedCardHandleClass as H, searchFieldInputClass as Ht, dmThreadNameClass as I, profilePreviewHandleClass as It, feedActionButtonClass as J, segmentedClass as Jt, emptyStateClass as K, segmentActiveClass as Kt, dmThreadSubtitleClass as L, profilePreviewHeaderClass as Lt, dmMessagesClass as M, primaryButtonClass as Mt, dmShellClass as N, profilePreviewBioClass as Nt, dmMessageBubbleOutboundClass as O, pageTitleClass as Ot, dmThreadClass as P, profilePreviewCardClass as Pt, feedRowActionsClass as Q, sidebarBrandCopyCompactClass as Qt, dmThreadTitleClass as R, profilePreviewMetaClass as Rt, dmListItemClass as S, navLinkLabelClass as St, dmListTimestampClass as T, pageHeaderClass as Tt, embeddedCardHeaderClass as U, searchFieldShellClass as Ut, embeddedCardCopyClass as V, searchFieldIconClass as Vt, embeddedCardLabelClass as W, secondaryButtonClass as Wt, feedActionIconWrapClass as X, sidebarBrandClass as Xt, feedActionIconClass as Y, selectFieldClass as Yt, feedClass as Z, sidebarBrandCopyClass as Zt, dmListBodyClass as _, tweetMediaGridClass as _n, mutedDotClass as _t, blockRowClass as a, sidebarShellCompactClass as an, feedRowStatePillActiveClass as at, dmListHeaderClass as b, navLinkCompactClass as bt, composerBarClass as c, tabButtonActiveClass as cn, feedRowTextClass as ct, contextStatRowClass as d, tabStripClass as dn, linkPreviewCardClass as dt, sidebarBrandTaglineClass as en, feedRowClass as et, contextStatTermClass as f, textFieldClass as fn, linkPreviewDescClass as ft, dmComposerShellClass as g, tweetLinkClass as gn, mainColumnDmClass as gt, dangerButtonClass as h, tweetHashtagClass as hn, mainColumnClass as ht, blockRowBodyClass as i, sidebarShellClass as in, feedRowNameClass as it, dmMessageRowOutboundClass as j, pillSoftClass as jt, dmMessageMetaClass as k, pillAlertClass as kt, composerInputClass as l, tabButtonClass as ln, feedRowTimestampClass as lt, cx as m, timestampClass as mn, linkPreviewTitleClass as mt, avatarChipLargeClass as n, sidebarFooterClass as nn, feedRowHandleClass as nt, bodyClass as o, siteShellClass as on, feedRowStatePillClass as ot, contextStatValueClass as p, textFieldShortClass as pn, linkPreviewHostClass as pt, errorCopyClass as q, segmentClass as qt, avatarChipSmallClass as r, sidebarNavClass as rn, feedRowHeaderClass as rt, bodyCopyClass as s, statusCopyClass as sn, feedRowStatePillOpenClass as st, avatarChipClass as t, sidebarBrandTitleClass as tn, feedRowDotClass as tt, composerShellClass as u, tabButtonIndicatorClass as un, inboxAnalysisClass as ut, dmListClass as v, tweetMediaTileClass as vn, navLinkActiveClass as vt, dmListPreviewClass as w, pageHeaderActionsClass as wt, dmListItemActiveClass as x, navLinkIconClass as xt, dmListHandleClass as y, tweetMentionClass as yn, navLinkClass as yt, embeddedCardBodyClass as z, profilePreviewNameClass as zt };
|
package/dist/server/assets/{useTimelineRouteData-BLXvMGb2.js → useTimelineRouteData-BmDbGvQ8.js}
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { $ as feedRowBodyClass, B as embeddedCardClass, Dt as pageSubtitleClass, Et as pageHeaderRowClass, G as embeddedCardNameClass, H as embeddedCardHandleClass, Ht as searchFieldInputClass, J as feedActionButtonClass, Ot as pageTitleClass, Q as feedRowActionsClass, Tt as pageHeaderClass, U as embeddedCardHeaderClass, Ut as searchFieldShellClass, V as embeddedCardCopyClass, Vt as searchFieldIconClass, W as embeddedCardLabelClass, X as feedActionIconWrapClass, Y as feedActionIconClass, Z as feedClass, _n as
|
|
1
|
+
import { $ as feedRowBodyClass, B as embeddedCardClass, Dt as pageSubtitleClass, Et as pageHeaderRowClass, G as embeddedCardNameClass, H as embeddedCardHandleClass, Ht as searchFieldInputClass, J as feedActionButtonClass, Ot as pageTitleClass, Q as feedRowActionsClass, Tt as pageHeaderClass, U as embeddedCardHeaderClass, Ut as searchFieldShellClass, V as embeddedCardCopyClass, Vt as searchFieldIconClass, W as embeddedCardLabelClass, X as feedActionIconWrapClass, Y as feedActionIconClass, Z as feedClass, _n as tweetMediaGridClass, at as feedRowStatePillActiveClass, ct as feedRowTextClass, dt as linkPreviewCardClass, et as feedRowClass, ft as linkPreviewDescClass, it as feedRowNameClass, lt as feedRowTimestampClass, m as cx, mt as linkPreviewTitleClass, nt as feedRowHandleClass, ot as feedRowStatePillClass, pt as linkPreviewHostClass, rt as feedRowHeaderClass, st as feedRowStatePillOpenClass, tt as feedRowDotClass, vn as tweetMediaTileClass, z as embeddedCardBodyClass } from "./ui-rDHeS-cc.js";
|
|
2
2
|
import { D as tweetConversationResponseSchema, a as fetchQueryEnvelope, d as runEffectPromise, i as fetchJsonEffect, n as queryKeys, o as fetchQueryResponse, r as fetchJson, s as postAction, x as linkPreviewResponseSchema } from "./query-client-BdauHBgd.js";
|
|
3
|
-
import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-
|
|
3
|
+
import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-DWag3IzT.js";
|
|
4
4
|
import { r as useSelectedAccountId } from "./account-selection-CTdFGWRk.js";
|
|
5
|
-
import { a as TweetSkeletonRows, n as FeedError, o as BirdclawEmpty, r as FeedLoading, s as BirdclawLoading, t as FeedEmpty } from "./FeedState-
|
|
6
|
-
import { d as isTweetArticleUrlEntity, f as normalizeTweetUrlEntityRangeForText, s as safeHttpUrl, t as ProfilePreview } from "./ProfilePreview-
|
|
7
|
-
import { t as SmartTimestamp } from "./SmartTimestamp-
|
|
5
|
+
import { a as TweetSkeletonRows, n as FeedError, o as BirdclawEmpty, r as FeedLoading, s as BirdclawLoading, t as FeedEmpty } from "./FeedState-CwzcvP-p.js";
|
|
6
|
+
import { d as isTweetArticleUrlEntity, f as normalizeTweetUrlEntityRangeForText, s as safeHttpUrl, t as ProfilePreview } from "./ProfilePreview-Bq-DSUM2.js";
|
|
7
|
+
import { t as SmartTimestamp } from "./SmartTimestamp-C06w_f9J.js";
|
|
8
8
|
import { t as useDebouncedValue } from "./useDebouncedValue-DOnA6Xcy.js";
|
|
9
|
-
import { t as TweetRichText } from "./TweetRichText-
|
|
9
|
+
import { t as TweetRichText } from "./TweetRichText-wzUAtbPS.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";
|
|
12
12
|
import { BookOpen, BookmarkCheck, CheckCircle2, Circle, ExternalLink, Heart, Image, MessageCircle, Repeat2, Search, UserSearch, X } from "lucide-react";
|
|
@@ -911,7 +911,7 @@ function TimelineFeedHeader({ title, subtitles, action, controls }) {
|
|
|
911
911
|
return /* @__PURE__ */ jsxs("header", {
|
|
912
912
|
className: pageHeaderClass,
|
|
913
913
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
914
|
-
className: pageHeaderRowClass
|
|
914
|
+
className: `${pageHeaderRowClass} flex-wrap`,
|
|
915
915
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
916
916
|
className: "flex min-w-0 flex-col",
|
|
917
917
|
children: [/* @__PURE__ */ jsx("h1", {
|
package/dist/server/server.js
CHANGED
|
@@ -3415,7 +3415,7 @@ var defaultSerovalPlugins = [
|
|
|
3415
3415
|
* the dev styles URL for route-scoped CSS collection.
|
|
3416
3416
|
*/
|
|
3417
3417
|
async function getStartManifest(matchedRoutes) {
|
|
3418
|
-
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-
|
|
3418
|
+
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-CVfs07C8.js");
|
|
3419
3419
|
const startManifest = tsrStartManifest();
|
|
3420
3420
|
let routes = startManifest.routes;
|
|
3421
3421
|
routes[rootRouteId];
|
|
@@ -5130,7 +5130,7 @@ var getBaseManifest = getProdBaseManifest;
|
|
|
5130
5130
|
var createEarlyHintsForRequest = createEarlyHintsCollector;
|
|
5131
5131
|
async function loadEntries() {
|
|
5132
5132
|
const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
|
|
5133
|
-
import("./assets/router-
|
|
5133
|
+
import("./assets/router-CAvZOdfA.js"),
|
|
5134
5134
|
import("./assets/start-FaDOTmto.js"),
|
|
5135
5135
|
import("./assets/empty-plugin-adapters-DzrEkdBF.js")
|
|
5136
5136
|
]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "birdclaw",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Local Twitter memory in SQLite for archives, DMs, likes, bookmarks, and moderation",
|
|
5
5
|
"homepage": "https://github.com/steipete/birdclaw#readme",
|
|
6
6
|
"license": "MIT",
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"docs:site": "node scripts/build-docs-site.mjs"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@tanstack/react-query": "^5.101.
|
|
50
|
+
"@tanstack/react-query": "^5.101.2",
|
|
51
51
|
"@tanstack/react-router": "1.170.16",
|
|
52
52
|
"commander": "^15.0.0",
|
|
53
|
-
"effect": "^3.21.
|
|
54
|
-
"lucide-react": "^1.
|
|
53
|
+
"effect": "^3.21.4",
|
|
54
|
+
"lucide-react": "^1.22.0",
|
|
55
55
|
"mapbox-gl": "^3.25.0",
|
|
56
56
|
"react": "^19.2.7",
|
|
57
57
|
"react-dom": "^19.2.7",
|
|
@@ -60,29 +60,29 @@
|
|
|
60
60
|
"zod": "^4.4.3"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@playwright/test": "^1.61.
|
|
63
|
+
"@playwright/test": "^1.61.1",
|
|
64
64
|
"@tailwindcss/typography": "^0.5.20",
|
|
65
|
-
"@tailwindcss/vite": "^4.3.
|
|
65
|
+
"@tailwindcss/vite": "^4.3.2",
|
|
66
66
|
"@tanstack/react-start": "1.168.26",
|
|
67
67
|
"@testing-library/dom": "^10.4.1",
|
|
68
68
|
"@testing-library/jest-dom": "^6.9.1",
|
|
69
69
|
"@testing-library/react": "^16.3.2",
|
|
70
70
|
"@types/geojson": "^7946.0.16",
|
|
71
|
-
"@types/node": "^
|
|
71
|
+
"@types/node": "^26.1.0",
|
|
72
72
|
"@types/react": "^19.2.17",
|
|
73
73
|
"@types/react-dom": "^19.2.3",
|
|
74
74
|
"@types/supercluster": "^7.1.3",
|
|
75
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
76
|
-
"@vitejs/plugin-react": "^6.0.
|
|
75
|
+
"@typescript/native-preview": "7.0.0-dev.20260701.1",
|
|
76
|
+
"@vitejs/plugin-react": "^6.0.3",
|
|
77
77
|
"@vitest/coverage-v8": "^4.1.9",
|
|
78
78
|
"esbuild": "^0.28.1",
|
|
79
79
|
"jsdom": "^29.1.1",
|
|
80
|
-
"oxfmt": "^0.
|
|
81
|
-
"oxlint": "^1.
|
|
82
|
-
"tailwindcss": "^4.3.
|
|
80
|
+
"oxfmt": "^0.57.0",
|
|
81
|
+
"oxlint": "^1.72.0",
|
|
82
|
+
"tailwindcss": "^4.3.2",
|
|
83
83
|
"tsx": "^4.22.4",
|
|
84
84
|
"typescript": "^6.0.3",
|
|
85
|
-
"vite": "^8.
|
|
85
|
+
"vite": "^8.1.2",
|
|
86
86
|
"vitest": "^4.1.9"
|
|
87
87
|
},
|
|
88
88
|
"engines": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-C0phanGV.js";import{t}from"./react-nBylq1U5.js";import{Dn as n,En as r,Ln as i,M as a,On as o,jn as s}from"./schemas-I9r6F6ya.js";import{a as c,i as l,n as u,o as d,r as f,t as p}from"./useTimelineRouteData-BaO3Rna1.js";import{f as m}from"./index-DZVisyna.js";var h=e(t(),1),g=i(),_=[{value:`all`,label:`All`},{value:`unreplied`,label:`Unreplied`},{value:`replied`,label:`Replied`}];function v({title:e,resource:t,initialReplyFilter:i,searchPlaceholder:v,syncKind:y,syncLabel:b,loadingLabel:x,loadingDetail:S,errorTitle:C,errorFallback:w,emptyLabel:T,emptyDetail:E,subtitle:D}){let[O,k]=(0,h.useState)(i),[A,j]=(0,h.useState)(``),{meta:M,items:N,loading:P,error:F,replyError:I,retry:L,refreshLocalView:R,replyToTweet:z,hasMore:B,loadingMore:V,loadMore:H}=p({resource:t,replyFilter:O,search:A,errorFallback:w});return(0,g.jsx)(f,{header:(0,g.jsx)(u,{title:e,subtitles:(0,g.jsx)(l,{children:(0,h.useMemo)(()=>D(M),[M,D])}),action:(0,g.jsx)(m,{accounts:M?.accounts,kind:y,label:b,onSynced:R,showAccountPicker:!0}),controls:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(c,{onChange:j,placeholder:v,value:A}),(0,g.jsx)(`div`,{className:o,children:_.map(e=>{let t=O===e.value;return(0,g.jsx)(`button`,{type:`button`,"aria-pressed":t,className:a(r,t&&`text-[var(--ink)] font-bold`),onClick:()=>k(e.value),children:(0,g.jsxs)(`span`,{className:`relative inline-flex flex-col items-center justify-center py-1`,children:[e.label,t?(0,g.jsx)(`span`,{className:n}):null]})},e.value)})})]})}),notice:I?(0,g.jsx)(`p`,{className:a(s,`px-4 py-2 text-red-500`),children:I}):null,loading:P,loadingLabel:x,loadingDetail:S,error:F,errorTitle:C,onRetry:L,empty:N.length===0,emptyLabel:T,emptyDetail:E,hasMore:B,loadingMore:V,onLoadMore:H,children:N.map(e=>(0,g.jsx)(d,{item:e,onReply:z},e.id))})}export{v as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-C0phanGV.js";import{t}from"./react-nBylq1U5.js";import{An as n,C as r,Ft as i,Gt as a,Kt as o,Ln as s,M as c,N as l,S as u,Ut as d,Wt as f,Xt as p,cn as m,dt as ee,fn as h,jn as g,kn as _,ut as te,wn as ne}from"./schemas-I9r6F6ya.js";import{A as re,a as v,b as y,n as b,r as ie,s as x,u as ae}from"./query-client-fYu2rzRC.js";import{r as S,t as C}from"./AvatarChip-DLoqM5xD.js";import{Z as w,c as T,ct as E,d as D}from"./index-DZVisyna.js";var O=e(t()),k=s();function A(){let e=T.useSearch(),t=T.useNavigate();return(0,k.jsx)(j,{searchState:e,onSearchChange:(e,n)=>void t({search:e,replace:n?.replace})})}function j({searchState:e,onSearchChange:t}={}){let s=y(),[T,A]=(0,O.useState)(()=>w({})),j=e??T,M=(e,n)=>t?t(e,n):A(e),N=j.account,P=j.q,[F,I]=(0,O.useState)(!1),[L,R]=(0,O.useState)(``),[z,B]=(0,O.useState)(``),V=E({queryKey:b.status,queryFn:({signal:e})=>v({signal:e})}),H=V.data??null,U=D(P,180),W=N.trim().length>0,G=!!H,K=E({queryKey:[...b.blocks,{accountId:N,search:U}],enabled:W,queryFn:async({signal:e})=>{let t=new URLSearchParams({account:N,limit:`12`});return U.trim()&&t.set(`search`,U.trim()),ie(`/api/blocks?${t.toString()}`,{signal:e},ae,`Blocklist request failed`)},placeholderData:re,staleTime:5*6e4}),q=K.data?.items??[],J=K.data?.matches??[],Y=E({queryKey:[...b.blockSync,N],enabled:W,retry:!1,queryFn:async()=>{let e=await x({kind:`syncBlocks`,accountId:N});if(e.ok===!1||e.transport?.ok===!1)throw Error(e.transport?.output??`Block sync failed`);return await s.invalidateQueries({queryKey:b.blocks}),e},staleTime:5*6e4}),X=Y.isFetching,Z=V.error??K.error??Y.error??null,Q=z||(Z instanceof Error?Z.message:Z?`Unable to load blocklist`:``);(0,O.useEffect)(()=>{H?.accounts.length&&(H.accounts.some(e=>e.id===N)||M({...j,account:H.accounts[0]?.id??`acct_primary`},{replace:!0}))},[N,H]),(0,O.useEffect)(()=>{let e=Y.data;!e||e.transport?.output?.includes(`disabled`)||R(e.transport?.output??`Synced ${String(e.syncedCount??0)} remote blocks`)},[Y.data]);let oe=(0,O.useMemo)(()=>H?X?`Syncing remote blocklist · ${H.transport.statusText}`:`${String(q.length)} blocked profiles · ${H.transport.statusText}`:q.length>0?`${String(q.length)} blocked profiles · loading transport...`:`Loading local blocklist...`,[X,q.length,H]);async function $(e,t){let n=t.trim();if(n){I(!0),B(``),R(``);try{let t=await x({kind:e,accountId:N,query:n});if(t.ok===!1||t.transport?.ok===!1){B(t.transport?.output??`Blocklist action failed`);return}R(`${e===`blockProfile`?`Blocked`:`Unblocked`} @${t.profile?.handle??n.replace(/^@/,``)} · ${t.transport?.output??`local`}`),await s.invalidateQueries({queryKey:b.blocks})}catch(e){B(e instanceof Error?e.message:`Blocklist action failed`)}finally{I(!1)}}}return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`header`,{className:d,children:[(0,k.jsx)(`div`,{className:f,children:(0,k.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,k.jsx)(`h1`,{className:o,children:`Blocks`}),(0,k.jsx)(`h2`,{className:c(a,`text-[14px]`),children:`Maintain a clean blocklist locally.`}),(0,k.jsx)(`p`,{className:a,children:oe})]})}),(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-4 pb-3`,children:[(0,k.jsx)(`select`,{className:c(h,n),disabled:!G,onChange:e=>M({...j,account:e.target.value}),value:N,children:H?.accounts.map(e=>(0,k.jsx)(`option`,{value:e.id,children:e.handle},e.id))}),(0,k.jsx)(`input`,{className:c(_,`flex-1 min-w-[200px]`),disabled:!W,onChange:e=>M({...j,q:e.target.value},{replace:!0}),placeholder:`Handle, name, bio, or Twitter URL`,value:P}),(0,k.jsx)(`button`,{className:p,disabled:!W||F||!P.trim(),onClick:()=>void $(`blockProfile`,P),type:`button`,children:F?`Working...`:`Block`})]})]}),L?(0,k.jsx)(`p`,{className:ne,children:L}):null,Q?(0,k.jsx)(`p`,{className:ee,children:Q}):null,J.length>0?(0,k.jsxs)(`section`,{className:`flex flex-col`,children:[(0,k.jsx)(`h2`,{className:`px-4 pt-3 pb-1 text-[13px] font-semibold uppercase tracking-wide text-[var(--ink-soft)]`,children:`Search matches`}),J.map(e=>(0,k.jsxs)(`article`,{className:r,children:[(0,k.jsx)(C,{avatarUrl:e.profile.avatarUrl,hue:e.profile.avatarHue,name:e.profile.displayName,profileId:e.profile.id}),(0,k.jsxs)(`div`,{className:u,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,k.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,k.jsx)(`strong`,{className:`truncate text-[15px] text-[var(--ink)]`,children:e.profile.displayName}),(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 text-[13px] text-[var(--ink-soft)]`,children:[(0,k.jsxs)(`span`,{children:[`@`,e.profile.handle]}),(0,k.jsx)(`span`,{className:i}),(0,k.jsxs)(`span`,{children:[S(e.profile.followersCount),` `,`followers`]})]})]}),(0,k.jsx)(`button`,{className:e.isBlocked?m:l,onClick:()=>void $(e.isBlocked?`unblockProfile`:`blockProfile`,e.profile.id),type:`button`,children:e.isBlocked?`Unblock`:`Block`})]}),(0,k.jsx)(`p`,{className:`text-[14px] leading-[1.4] text-[var(--ink)]`,children:e.profile.bio})]})]},e.profile.id))]}):null,(0,k.jsxs)(`section`,{className:`flex flex-col`,children:[q.length===0&&J.length===0?(0,k.jsx)(`div`,{className:te,children:`No blocks in this account.`}):null,q.map(e=>(0,k.jsxs)(`article`,{className:r,children:[(0,k.jsx)(C,{avatarUrl:e.profile.avatarUrl,hue:e.profile.avatarHue,name:e.profile.displayName,profileId:e.profile.id}),(0,k.jsxs)(`div`,{className:u,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,k.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,k.jsx)(`strong`,{className:`truncate text-[15px] text-[var(--ink)]`,children:e.profile.displayName}),(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 text-[13px] text-[var(--ink-soft)]`,children:[(0,k.jsxs)(`span`,{children:[`@`,e.profile.handle]}),(0,k.jsx)(`span`,{className:i}),(0,k.jsx)(`span`,{children:e.accountHandle}),(0,k.jsx)(`span`,{className:i}),(0,k.jsxs)(`span`,{children:[S(e.profile.followersCount),` `,`followers`]})]})]}),(0,k.jsx)(`button`,{className:m,onClick:()=>void $(`unblockProfile`,e.profile.id),type:`button`,children:`Unblock`})]}),e.profile.bio?(0,k.jsx)(`p`,{className:`text-[14px] leading-[1.4] text-[var(--ink)]`,children:e.profile.bio}):null,(0,k.jsxs)(`p`,{className:g,children:[`Blocked `,new Date(e.blockedAt).toLocaleString(),` ·`,` `,e.source]})]})]},e.accountId+e.profile.id))]})]})}export{j as BlocksRouteView,A as component};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-C0phanGV.js";import{t}from"./react-nBylq1U5.js";import{In as n,Ln as r,M as i,Nn as a,_ as o,a as s,c,d as l,i as u,l as d,m as f,s as p,u as m}from"./schemas-I9r6F6ya.js";import{t as h}from"./createLucideIcon-JV8isFFR.js";import{r as g,t as _}from"./AvatarChip-DLoqM5xD.js";import{i as v,n as y,r as b,t as x,u as ee}from"./ProfilePreview-DQX6_xc3.js";import{t as S}from"./SmartTimestamp-BR0-9se2.js";var te=h(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),C=e(t(),1),w=r();function T(e){return e.trim().replace(/^\(/,``).replace(/\)$/,``).replace(/^tweet_/,``)}function E(e){return/^\d{12,25}$/.test(T(e))}function D(e){return Array.from(e.matchAll(/\b(?:tweet_)?[A-Za-z0-9_:-]{3,}\b/g)).map(e=>e[0]).filter(e=>e.startsWith(`tweet_`)||/^\d{12,25}$/.test(e))}function ne(e,t){let n=[],r=t;for(;r<e.length;){let t=/^\s+\((?:\s*(?:tweet_[A-Za-z0-9_:-]+|\d{12,25})\s*,?)+\)/.exec(e.slice(r));if(!t)break;n.push(...D(t[0])),r+=t[0].length}return{references:n,cursor:r}}function O(e,t={}){let n=0;for(let t of[`. `,`? `,`! `,`; `,`: `]){let r=e.lastIndexOf(t);r>=0&&(n=Math.max(n,r+t.length))}let r=e.length;for(;n<r&&/\s/.test(e[n]??``);)n+=1;for(;r>n&&/\s/.test(e[r-1]??``);)--r;let i=n;for(let t of[`, with `,`, while `,`, and `]){let a=e.lastIndexOf(t,r);if(a>=n){i=a+2;break}}if(t.preferClause!==!1&&(i>n||r-n>140)){for(;i<r&&/\s/.test(e[i]??``);)i+=1;r>i&&(n=i)}return r>n?{start:n,end:r}:null}function re(e){return e.replace(/^[-*]\s+/,``)}function k(e,t){let n=/^((?:\s+source\b)+)(?=\s*(?:[.,;:!?)]|$))/i.exec(e.slice(t));return n?t+n[0].length:t}function A(e){return e.url||`https://x.com/${e.author}/status/${e.id}`}function j(e){return`https://x.com/i/status/${T(e)}`}function M({children:e,href:t,onClick:n,describedBy:r}){return(0,w.jsx)(`a`,{"aria-describedby":r,className:`rounded-sm px-0.5 text-[var(--accent)] hover:bg-[var(--accent-soft)] hover:no-underline`,href:t,onClick:n,rel:`noreferrer`,target:`_blank`,children:e})}function N({tweet:e,children:t}){let n=y();b(n.referenceRef,e.authorProfile.id,e.authorProfile.avatarUrl);let r=e.entities?.article,i=ee(e.text,e.entities??{}),a=r?[r.title,r.previewText].filter((e,t,n)=>!!e&&n.indexOf(e)===t).join(`
|
|
2
|
-
|
|
3
|
-
`):i;return(0,w.jsxs)(`span`,{ref:n.referenceRef,className:`inline align-baseline`,...n.referenceProps,children:[(0,w.jsx)(M,{describedBy:n.open?n.floatingId:void 0,href:A(e),onClick:e=>{n.closePreview(),e.currentTarget.blur()},children:t}),n.open?(0,w.jsx)(`span`,{id:n.floatingId,ref:n.floatingRef,className:`fixed z-40 w-[360px] overflow-y-auto rounded-2xl border border-[var(--line)] bg-[var(--bg-elevated)] p-3 text-left text-[14px] leading-[1.4] text-[var(--ink)] shadow-[0_14px_40px_var(--shadow-strong)]`,role:`tooltip`,style:n.floatingStyle,...n.floatingProps,children:(0,w.jsxs)(`span`,{className:`block`,"data-floating-preview-content":!0,children:[(0,w.jsxs)(`span`,{className:`mb-2 flex items-center gap-2`,children:[(0,w.jsx)(_,{avatarUrl:e.authorProfile.avatarUrl,hue:e.authorProfile.avatarHue,name:e.name,profileId:e.authorProfile.id,size:`small`}),(0,w.jsxs)(`span`,{className:`min-w-0`,children:[(0,w.jsx)(`span`,{className:`block truncate font-bold`,children:e.name}),(0,w.jsxs)(`span`,{className:`block truncate text-[12px] text-[var(--ink-soft)]`,children:[`@`,e.author,` · `,(0,w.jsx)(S,{value:e.createdAt})]})]})]}),(0,w.jsx)(`span`,{className:`line-clamp-6 whitespace-pre-wrap [overflow-wrap:anywhere]`,children:a}),(0,w.jsxs)(`span`,{className:`mt-2 flex gap-3 text-[12px] text-[var(--ink-soft)]`,children:[(0,w.jsx)(`span`,{children:e.source}),e.likeCount>0?(0,w.jsxs)(`span`,{children:[g(e.likeCount),` likes`]}):null,e.needsReply?(0,w.jsx)(`span`,{children:`reply open`}):null]})]})}):null]})}function P(e,t){return e.slice(1).flatMap((e,n)=>[n===0?` `:`, `,(0,w.jsx)(M,{href:j(e),children:`source ${String(n+2)}`},`${t}-direct-source-${String(n+2)}`)])}function F(e,t){if(t<2)return null;let n=Array.from(e.matchAll(/,\s+and\s+|,\s+or\s+|;\s+|,\s+|\s+and\s+|\s+or\s+/g));if(n.length<t-1)return null;let r=n.slice(-(t-1)),i=[],a=0;for(let t of r){let n=t.index;if(n===void 0)return null;let r=e.slice(a,n);if(!r.trim())return null;i.push({text:r,separatorAfter:t[0]}),a=n+t[0].length}let o=e.slice(a);return o.trim()?(i.push({text:o,separatorAfter:``}),i.length===t?i:null):null}function ie(e,t,n){let r=F(e,t.length);if(!r){let r=t[0];return r?[(0,w.jsx)(N,{tweet:r,children:e},n),...I(t,n)]:[]}return r.flatMap((e,r)=>{let i=t[r];return i?[(0,w.jsx)(N,{tweet:i,children:e.text},`${n}-part-${String(r)}`),e.separatorAfter]:[]})}function ae(e,t,n){let r=F(e,t.length);if(!r){let r=t[0];return r?[(0,w.jsx)(M,{href:j(r),children:e},n),...P(t,n)]:[]}return r.flatMap((e,r)=>{let i=t[r];return i?[(0,w.jsx)(M,{href:j(i),children:e.text},`${n}-direct-part-${String(r)}`),e.separatorAfter]:[]})}function I(e,t){return e.slice(1).flatMap((e,n)=>[n===0?` `:`, `,(0,w.jsx)(N,{tweet:e,children:`source ${String(n+2)}`},`${t}-source-${String(n+2)}`)])}function oe(e,t){return e.flatMap((n,r)=>[r===0?``:`, `,(0,w.jsx)(N,{tweet:n,children:e.length===1?`source`:`source ${String(r+1)}`},`${t}-fallback-${String(r+1)}`)])}function se(e,t,n){let r=t[0];if(!r)return!1;let i=e.at(-1);if(typeof i!=`string`)return!1;let a=/(["“][^"”]+["”])(\s*)$/.exec(i);if(a){let o=a[1],s=a[2]??``,c=i.slice(0,a.index);return e[e.length-1]=c,e.push((0,w.jsx)(N,{tweet:r,children:o},n),...I(t,n),/^\s*$/.test(s)?``:s),!0}let o=O(i,{preferClause:t.length===1});if(!o)return!1;let s=i.slice(0,o.start),c=i.slice(o.start,o.end),l=i.slice(o.end);return e[e.length-1]=s,e.push(...ie(c,t,n),/^\s*$/.test(l)?``:l),!0}function L(e,t,n){if(!t[0])return!1;let r=e.at(-1);if(typeof r!=`string`)return!1;let i=O(r,{preferClause:t.length===1});if(!i)return!1;let a=r.slice(0,i.start),o=r.slice(i.start,i.end),s=r.slice(i.end);return e[e.length-1]=a,e.push(...ae(o,t,n),/^\s*$/.test(s)?``:s),!0}function R(e,t){let r=/(\[[^\]\n]+\]\s*\(https?:\/\/[^\s)]+\)|\*\*[^*]+\*\*|@[A-Za-z0-9_]{1,20}|\((?:\s*(?:tweet_[A-Za-z0-9_:-]+|\d{12,25})\s*,?)+\)|\btweet_[A-Za-z0-9_:-]+\b|\b\d{12,25}\b)/g,i=[],o=0,s;for(;s=r.exec(e);){let c=s[0],l=`${c}-${String(s.index)}`;if(s.index>o&&i.push(e.slice(o,s.index)),o=s.index+c.length,c.startsWith(`**`)&&c.endsWith(`**`)){i.push((0,w.jsx)(`strong`,{children:c.slice(2,-2)},l));continue}let u=/^\[([^\]\n]+)\]\s*\((https?:\/\/[^\s)]+)\)$/.exec(c);if(u){let e=v(u[2]);i.push(e?(0,w.jsx)(`a`,{className:a,href:e,rel:`noreferrer`,target:`_blank`,children:u[1]},l):u[1]);continue}if(c.startsWith(`@`)){let e=t.profilesByHandle.get(c.slice(1).toLowerCase());i.push(e?(0,w.jsx)(x,{profile:e,children:(0,w.jsx)(`span`,{className:n,children:c})},l):(0,w.jsx)(`a`,{className:n,href:`/profiles/${encodeURIComponent(c.slice(1))}`,children:c},l));continue}let d=c.startsWith(`(`)&&c.endsWith(`)`),f=D(c);if(d){let t=ne(e,o),n=[...f,...t.references];t.references.length>0&&n.every(E)&&(f=n,o=t.cursor,r.lastIndex=o)}let p=f.map(e=>t.tweetsById.get(T(e))),m=f.length>0&&p.every(Boolean),h=p.filter(e=>!!e),g=h[0];if(d&&f.length>1&&!m){if(f.every(E)){let t=k(e,o);if(L(i,f,l)){o=t;continue}i.push(...f.flatMap((e,t)=>[t===0?``:`, `,(0,w.jsx)(M,{href:j(e),children:`source ${String(t+1)}`},`${l}-direct-${String(t)}`)])),o=t;continue}i.push(c);continue}if(g&&d&&m&&se(i,h,l)){o=k(e,o);continue}if(g&&d&&m){i.push(...oe(h,l)),o=k(e,o);continue}if(g)i.push((0,w.jsx)(N,{tweet:g,children:d?`source`:c},l));else if(d&&f.length===1&&E(f[0]??``)){let t=k(e,o);if(L(i,f,l)){o=t;continue}i.push((0,w.jsx)(M,{href:j(f[0]),children:`source`},`${l}-direct`)),o=t;continue}else i.push(c)}return o<e.length&&i.push(e.slice(o)),i.map((e,t)=>(0,w.jsx)(C.Fragment,{children:e},typeof e==`string`?`${e}-${String(t)}`:t))}function z(e){return`conversations`in e&&`profile`in e}function B(e,t,n){let r=T(n.id);e.set(r,n),e.set(`tweet_${r}`,n),t.set(n.author.toLowerCase(),n.authorProfile)}function V(e){return{id:e.profileId,handle:e.author,displayName:e.name||e.author,bio:e.bio,followersCount:e.followersCount,avatarHue:210,avatarUrl:e.avatarUrl,createdAt:e.createdAt}}function H(e,t){return{id:e.id,url:e.url,source:`authored`,author:t.handle,name:t.displayName,authorProfile:t,createdAt:e.createdAt,text:e.text,entities:e.entities,likeCount:e.likeCount,liked:!1,bookmarked:!1,needsReply:!1}}function U(e){let t=V(e);return{id:e.id,url:e.url,source:`mentions`,author:e.author,name:e.name||e.author,authorProfile:t,createdAt:e.createdAt,text:e.text,entities:e.entities,likeCount:e.likeCount,liked:!1,bookmarked:!1,needsReply:!1}}function W(e){let t=new Map,n=new Map;if(!e)return{tweetsById:t,profilesByHandle:n};if(z(e)){n.set(e.profile.handle.toLowerCase(),e.profile);for(let t of e.profiles??[])n.set(t.handle.toLowerCase(),t);for(let r of e.tweets)B(t,n,H(r,e.profile));for(let r of e.conversations)B(t,n,U(r));return{tweetsById:t,profilesByHandle:n}}for(let r of e.tweets)B(t,n,r);return{tweetsById:t,profilesByHandle:n}}function G({markdown:e,context:t,className:n}){let r=W(t),a=e.replace(/\]\s*\r?\n\s*\((https?:\/\/[^\s)]+)\)/g,`]($1)`).split(/\r?\n/),o=[],s=[],c=()=>{s.length!==0&&(o.push((0,w.jsx)(`ul`,{className:`my-2.5 flex list-disc flex-col gap-1.5 pl-5 first:mt-0 marker:text-[var(--ink-soft)]`,children:s.map((e,t)=>(0,w.jsx)(`li`,{children:e},String(t)))},`list-${String(o.length)}`)),s=[])};for(let e of a){let t=e.trim();if(!t){c();continue}if(t.startsWith(`### `)){c(),o.push((0,w.jsx)(`h3`,{className:`mt-5 mb-1.5 text-[14px] font-bold uppercase tracking-wide text-[var(--ink-soft)] first:mt-0`,children:R(t.slice(4),r)},`h3-${String(o.length)}`));continue}if(t.startsWith(`## `)){c(),o.push((0,w.jsx)(`h2`,{className:`mt-6 mb-2 text-[18px] font-bold text-[var(--ink)] first:mt-0`,children:R(t.slice(3),r)},`h2-${String(o.length)}`));continue}if(t.startsWith(`# `)){c(),o.push((0,w.jsx)(`h1`,{className:`mt-0 mb-2.5 text-[20px] font-bold text-[var(--ink)]`,children:R(t.slice(2),r)},`h1-${String(o.length)}`));continue}if(/^[-*]\s+/.test(t)){s.push(R(re(t),r));continue}c(),o.push((0,w.jsx)(`p`,{className:`my-2.5 whitespace-pre-wrap first:mt-0 [overflow-wrap:anywhere]`,children:R(t,r)},`p-${String(o.length)}`))}return c(),(0,w.jsx)(`article`,{className:i(`max-w-none px-4 py-3 text-[15px] leading-[1.55] text-[var(--ink)]`,n),children:o})}async function ce(e,{label:t,statusMessages:n}){let r=n?.[e.status];if(r)return Error(r);let i=`${String(e.status)}${e.statusText?` ${e.statusText}`:``}`,a=``;try{if((e.headers.get(`content-type`)??``).includes(`application/json`)){let t=await e.json();if(t&&typeof t==`object`){let e=t;typeof e.message==`string`?a=e.message:typeof e.error==`string`&&(a=e.error)}}else a=(await e.text()).trim()}catch{a=``}return Error(a?`${t} (${i}): ${a}`:`${t} (${i})`)}function K(e){return e.reason instanceof Error?e.reason:new DOMException(`The operation was aborted`,`AbortError`)}async function le(e,t){if(!t)return e.read();if(t.aborted)throw K(t);return new Promise((n,r)=>{let i=()=>{e.cancel(t.reason).catch(()=>void 0),r(K(t))};t.addEventListener(`abort`,i,{once:!0}),e.read().then(n,r).finally(()=>{t.removeEventListener(`abort`,i)})})}async function ue({body:e,schema:t,onEvent:n,isTerminal:r=()=>!1,signal:i,prematureEofError:a=()=>Error(`Stream closed before a terminal event was received`)}){let o=e.getReader(),s=new TextDecoder,c=``,l=!1,u=async e=>{let i=e.trim();if(!i)return;let a=t.parse(JSON.parse(i));await n(a),r(a)&&(l=!0)};try{for(;;){let{done:e,value:t}=await le(o,i);if(e)break;c+=s.decode(t,{stream:!0});let n=c.indexOf(`
|
|
4
|
-
`);for(;n>=0;)await u(c.slice(0,n)),c=c.slice(n+1),n=c.indexOf(`
|
|
5
|
-
`)}if(c+=s.decode(),await u(c),!l)throw a()}finally{o.releaseLock()}}function de(e){return e instanceof Error?e.message:String(e)}function fe({schema:e,request:t,onStart:n,onEvent:r,onError:i,isTerminal:a,errorLabel:o,emptyBodyMessage:s,prematureEofError:c,formatError:l=de,statusMessages:u}){let[d,f]=(0,C.useState)(null),[p,m]=(0,C.useState)(!1),h=(0,C.useRef)(null),g=(0,C.useRef)(0),_=(0,C.useCallback)((...d)=>{h.current?.abort();let p=new AbortController,_=g.current+1;g.current=_,h.current=p;let v=()=>h.current===p&&g.current===_&&!p.signal.aborted,y={signal:p.signal,isActive:v};f(null),m(!0),n?.(y,...d),t(p.signal,...d).then(async t=>{if(v()){if(!t.ok)throw await ce(t,{label:o,statusMessages:u});if(!t.body)throw Error(s);await ue({body:t.body,schema:e,signal:p.signal,isTerminal:a,prematureEofError:c,onEvent:async e=>{v()&&await r(e,y)}})}}).catch(e=>{v()&&(i?.(e),f(l(e)))}).finally(()=>{v()&&m(!1)})},[s,o,l,a,r,i,n,c,t,e,u]);return(0,C.useEffect)(()=>()=>h.current?.abort(),[]),{error:d,loading:p,run:_,setError:f}}var q=l({type:c(`status`),label:f(),detail:f().optional()}),J=l({type:c(`delta`),delta:f()}),Y=l({type:c(`error`),error:f()}),X=d({includeDms:s(),counts:d({home:m(),mentions:m(),links:m(),dms:m()}),tweets:u(o())}),Z=d({includeDms:s(),counts:d({search:m(),home:m(),mentions:m(),authored:m(),likes:m(),bookmarks:m(),dms:m()}),tweets:u(o())}),Q=d({handle:f(),profile:d({handle:f()}),profiles:u(o()).optional(),tweets:u(o()),conversations:u(o()),counts:d({tweets:m(),conversationTweets:m(),conversationsScanned:m()})}),$=e=>d({context:e,markdown:f(),cached:s()}),pe=p(`type`,[q,l({type:c(`start`),context:X,cached:s()}),J,l({type:c(`done`),result:$(X)}),Y]),me=p(`type`,[l({type:c(`start`),context:Z,cached:s()}),J,l({type:c(`done`),result:$(Z)}),Y]),he=p(`type`,[q,l({type:c(`start`),context:Q,cached:s()}),J,l({type:c(`done`),result:$(Q)}),Y]);function ge(e){return e.type===`done`||e.type===`error`}export{fe as a,me as i,pe as n,G as o,he as r,te as s,ge as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-C0phanGV.js";import{t}from"./react-nBylq1U5.js";import{Dn as n,En as r,Gt as i,Kt as a,Ln as o,M as s,On as c,Ut as l,Wt as u,an as d,dn as f,jn as ee,on as te,sn as ne,un as p}from"./schemas-I9r6F6ya.js";import{t as re}from"./search-Dq5kYsxA.js";import{A as ie,a as ae,b as m,d as h,n as g,r as _,s as v}from"./query-client-fYu2rzRC.js";import{$ as y,A as b,O as x,ct as S,d as oe,f as se,k as ce,ot as C,p as w,st as le,u as T}from"./index-DZVisyna.js";var E=e(t()),D=o(),ue=[{value:`all`,label:`All`},{value:`unreplied`,label:`Unreplied`},{value:`replied`,label:`Replied`}],de=[{value:`recent`,label:`Newest`},{value:`followers`,label:`Followers`}],fe=[{value:`all`,label:`All`},{value:`accepted`,label:`Accepted`},{value:`requests`,label:`Requests`}],O=`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 k(){let e=T.useSearch(),t=T.useNavigate();return(0,D.jsx)(A,{searchState:e,onSearchChange:(e,n)=>void t({search:e,replace:n?.replace})})}function A({searchState:e,onSearchChange:t}={}){let o=m(),[T,k]=(0,E.useState)(()=>y({})),A=e??T,j=(e,n)=>t?t(e,n):k(e),M=A.inbox,N=A.reply,P=A.minFollowers,F=A.minInfluence,I=A.sort,L=A.q,R=A.conversation||void 0,[z,B]=(0,E.useState)(``),V=S({queryKey:g.status,queryFn:({signal:e})=>ae({signal:e})}).data??null,H=C(V?.accounts),U=oe(L,180),W=[...g.dms,{inboxFilter:M,replyFilter:N,minFollowers:P,minInfluenceScore:F,sort:I,search:U,selectedAccountId:H??null,selectedConversationId:R??null}],G=S({queryKey:W,queryFn:({signal:e})=>{let t=new URL(`/api/query`,window.location.origin);return t.searchParams.set(`resource`,`dms`),t.searchParams.set(`inbox`,M),t.searchParams.set(`replyFilter`,N),t.searchParams.set(`sort`,I),P.trim()&&t.searchParams.set(`minFollowers`,P.trim()),F.trim()&&t.searchParams.set(`minInfluenceScore`,F.trim()),H&&M!==`requests`&&t.searchParams.set(`account`,H),R&&t.searchParams.set(`conversationId`,R),U.trim()&&t.searchParams.set(`search`,U.trim()),_(t,{signal:e},h,`Direct messages unavailable`)},placeholderData:ie,staleTime:5*6e4}),K=G.data,q=K?.resource===`dms`?K:null,J=q?.items??[],pe=q?.selectedConversation?.messages??[],Y=q?.selectedConversation?.conversation.id;(0,E.useEffect)(()=>{if(!G.data)return;let e=Y??J[0]?.id,t=R&&J.some(e=>e.id===R)?R:e;t&&t!==R&&j({...A,conversation:t},{replace:!0})},[G.data,J,Y]);let X=J.find(e=>e.id===R)??null,me=!!(!G.isError&&R&&Y&&R!==Y),he=(0,E.useMemo)(()=>V?`${String(V.stats.dms)} conversations cached locally`:`Loading direct messages...`,[V]),Z=le({mutationFn:({conversationId:e,text:t})=>v({kind:`replyDm`,conversationId:e,text:t}),onMutate:async({conversationId:e,text:t})=>{await o.cancelQueries({queryKey:W});let n=o.getQueryData(W);if(!n||n.resource!==`dms`||!X)return{previous:n};let r=new Date().toISOString(),i=V?.accounts.find(e=>e.id===X.accountId),a=(i?.handle??X.accountHandle).replace(/^@/,``),s={id:`optimistic-${r}`,conversationId:e,text:t,createdAt:r,direction:`outbound`,isReplied:!0,mediaCount:0,sender:{id:`local-${X.accountId}`,handle:a,displayName:i?.name??a,bio:``,followersCount:0,avatarHue:18,createdAt:r}};return o.setQueryData(W,{...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,s]}:n.selectedConversation}),{previous:n}},onError:(e,t,n)=>{n?.previous&&o.setQueryData(W,n.previous)},onSettled:()=>Promise.all([o.invalidateQueries({queryKey:g.dms}),o.invalidateQueries({queryKey:g.status})])});async function ge(e){let t=z.trim();if(!(!t||!X)){B(``);try{await Z.mutateAsync({conversationId:e,text:t}),j({...A,conversation:e})}catch{B(t)}}}function _e(){Promise.all([o.invalidateQueries({queryKey:g.dms}),o.invalidateQueries({queryKey:g.status})])}let ve=G.isPending,Q=G.error?G.error instanceof Error?G.error.message:`Messages unavailable`:null,$=Z.error?Z.error instanceof Error?Z.error.message:`Reply failed`:null;return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`header`,{className:l,children:[(0,D.jsxs)(`div`,{className:u,children:[(0,D.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,D.jsx)(`h1`,{className:a,children:`Messages`}),(0,D.jsx)(`p`,{className:i,children:he})]}),(0,D.jsx)(se,{accounts:V?.accounts,kind:`dms`,label:`Sync DMs`,onSynced:_e,syncOptions:{inbox:M,limit:M===`requests`?200:50,maxPages:M===`requests`?3:1}})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-4 pb-3`,children:[(0,D.jsx)(`div`,{className:f,"aria-label":`DM inbox`,children:fe.map(e=>(0,D.jsx)(`button`,{"aria-pressed":M===e.value,className:s(p,M===e.value&&`bg-[var(--bg-active)] text-[var(--ink)]`),onClick:()=>j({...A,inbox:e.value}),type:`button`,children:e.label},e.value))}),(0,D.jsxs)(`label`,{className:s(ne,`flex-1 min-w-[200px]`),children:[(0,D.jsx)(re,{className:d,strokeWidth:2}),(0,D.jsx)(`input`,{className:te,onChange:e=>j({...A,q:e.target.value},{replace:!0}),placeholder:`Search DMs`,value:L})]}),(0,D.jsxs)(`label`,{className:s(O,`w-[156px]`),children:[(0,D.jsx)(`span`,{className:`shrink-0 text-[12px] font-semibold text-[var(--ink-soft)]`,children:`Followers`}),(0,D.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=>j({...A,minFollowers:e.target.value},{replace:!0}),placeholder:`Any`,value:P})]}),(0,D.jsxs)(`label`,{className:s(O,`w-[132px]`),children:[(0,D.jsx)(`span`,{className:`shrink-0 text-[12px] font-semibold text-[var(--ink-soft)]`,children:`Score`}),(0,D.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=>j({...A,minInfluence:e.target.value},{replace:!0}),placeholder:`Any`,value:F})]}),(0,D.jsx)(`div`,{className:f,children:de.map(e=>(0,D.jsx)(`button`,{className:s(p,e.value===I&&`bg-[var(--bg-active)] text-[var(--ink)]`),onClick:()=>j({...A,sort:e.value}),type:`button`,children:e.label},e.value))})]}),(0,D.jsx)(`div`,{className:c,"aria-label":`DM reply filter`,children:ue.map(e=>{let t=N===e.value;return(0,D.jsx)(`button`,{type:`button`,"aria-pressed":t,className:s(r,t&&`text-[var(--ink)] font-bold`),onClick:()=>j({...A,reply:e.value}),children:(0,D.jsxs)(`span`,{className:`relative inline-flex flex-col items-center justify-center py-1`,children:[e.value,t?(0,D.jsx)(`span`,{className:n}):null]})},e.value)})})]}),$?(0,D.jsx)(`p`,{className:s(ee,`px-4 py-2 text-red-500`),children:$}):null,ve&&J.length===0||me?(0,D.jsx)(b,{detail:`Reading local conversations and reply state`,label:`Loading messages`}):Q?(0,D.jsx)(ce,{action:(0,D.jsx)(`button`,{className:`rounded-full bg-[var(--accent)] px-4 py-1.5 text-[14px] font-bold text-white`,onClick:()=>void G.refetch(),type:`button`,children:`Retry`}),message:Q,title:`Could not load messages`}):J.length===0?(0,D.jsx)(x,{detail:`Sync DMs or broaden the filters to find a conversation.`,label:`No conversations in this view`}):(0,D.jsx)(w,{conversations:J,onReplyDraftChange:B,onReplySend:ge,onSelectConversation:e=>j({...A,conversation:e}),replyDraft:z,selectedConversation:X,selectedMessages:pe})]})}export{A as DmsRouteView,k as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ln as e}from"./schemas-I9r6F6ya.js";import{t}from"./SavedTimelineView-BhSiVyR1.js";var n=e();function r(){return(0,n.jsx)(t,{eyebrow:`liked posts`,filter:`liked`,loadingLabel:`Loading liked posts...`,searchPlaceholder:`Search likes`,title:`Things worth keeping in the orbit.`})}export{r as component};
|