birdclaw 0.8.4 → 0.9.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.
Files changed (116) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +22 -2
  3. package/dist/cli/birdclaw.js +1233 -192
  4. package/dist/client/assets/AvatarChip-C8zELEVt.js +1 -0
  5. package/dist/client/assets/ProfilePreview-CsiLpFrb.js +1 -0
  6. package/dist/client/assets/SavedTimelineView-DE4CXK-h.js +1 -0
  7. package/dist/client/assets/SmartTimestamp-BypN4KPq.js +1 -0
  8. package/dist/client/assets/TimelineRouteFrame-D6djyMAT.js +1 -0
  9. package/dist/client/assets/blocks-h27nF3TL.js +1 -0
  10. package/dist/client/assets/{bookmarks-CbBkMvXk.js → bookmarks-Cprrli-V.js} +1 -1
  11. package/dist/client/assets/circle-check-BCK_qvXt.js +1 -0
  12. package/dist/client/assets/client-stream-contracts-D1QUdWfh.js +5 -0
  13. package/dist/client/assets/createLucideIcon-CMLcIxOz.js +1 -0
  14. package/dist/client/assets/data-sources-Beb3JZkl.js +1 -0
  15. package/dist/client/assets/discuss-ciwVz7Fo.js +1 -0
  16. package/dist/client/assets/dms-BZ3GUPey.js +1 -0
  17. package/dist/client/assets/inbox-Dajdut79.js +1 -0
  18. package/dist/client/assets/index-a1ZAcWSa.js +31 -0
  19. package/dist/client/assets/likes-CxZZqiZC.js +1 -0
  20. package/dist/client/assets/links-CsWS9uKL.js +1 -0
  21. package/dist/client/assets/mapbox-dx7h2mOm.js +2 -0
  22. package/dist/client/assets/{mapbox-gl-dgf_hX3a.js → mapbox-gl-WUhsQcSS.js} +1 -1
  23. package/dist/client/assets/{mentions-CxKCgzIf.js → mentions-C3JYXV2K.js} +1 -1
  24. package/dist/client/assets/network-map-D4XA7TTO.js +2 -0
  25. package/dist/client/assets/profile-analyze-QAznTMjZ.js +1 -0
  26. package/dist/client/assets/{profile-hydration-client-YEtJsNTv.js → profile-hydration-client-BQyC5--e.js} +1 -1
  27. package/dist/client/assets/profiles._handle-qntfbCE1.js +1 -0
  28. package/dist/client/assets/query-client-DZ5C7UNo.js +17 -0
  29. package/dist/client/assets/rate-limits-eHs_5dDB.js +1 -0
  30. package/dist/client/assets/react-BwGzW7mM.js +1 -0
  31. package/dist/client/assets/react-dom-DEMAB80t.js +1 -0
  32. package/dist/client/assets/{repeat-2-xCwHM9hD.js → repeat-2-CQ0lek01.js} +1 -1
  33. package/dist/client/assets/rolldown-runtime-B-9mzPXz.js +1 -0
  34. package/dist/client/assets/{routes-q7ZaW4En.js → routes-CeIv5bkV.js} +1 -1
  35. package/dist/client/assets/schemas-CntsNLmN.js +64 -0
  36. package/dist/client/assets/search-C_LqodNa.js +1 -0
  37. package/dist/client/assets/{sparkles-CQVlvHsZ.js → sparkles-Gx_BHkDX.js} +1 -1
  38. package/dist/client/assets/styles-DTMajAmk.css +2 -0
  39. package/dist/client/assets/today-DxppbQGF.js +1 -0
  40. package/dist/client/assets/{triangle-alert-CBL7s2pf.js → triangle-alert-DJPCW6jQ.js} +1 -1
  41. package/dist/client/assets/useTimelineRouteData-CWvBmHLE.js +1 -0
  42. package/dist/client/assets/{users-CHbKlqUr.js → users-DI3w8Mol.js} +1 -1
  43. package/dist/server/assets/{AvatarChip-zUDAEmjL.js → AvatarChip-DWag3IzT.js} +1 -1
  44. package/dist/server/assets/{FeedState-ntW0Q2GB.js → FeedState-CwzcvP-p.js} +1 -1
  45. package/dist/server/assets/{ProfileAnalysisStream-BFvhVdhn.js → ProfileAnalysisStream-CLjrYzEx.js} +2 -2
  46. package/dist/server/assets/{ProfilePreview-C6gAor_j.js → ProfilePreview-Bq-DSUM2.js} +7 -8
  47. package/dist/server/assets/{SavedTimelineView-BG1jnBp1.js → SavedTimelineView-Bk9nfnb-.js} +2 -2
  48. package/dist/server/assets/{SmartTimestamp-DfwE1NGf.js → SmartTimestamp-C06w_f9J.js} +1 -1
  49. package/dist/server/assets/SyncNowButton-CKuXKYcd.js +259 -0
  50. package/dist/server/assets/{TimelineRouteFrame-CU7ilM7U.js → TimelineRouteFrame-Bg3e7X_N.js} +5 -3
  51. package/dist/server/assets/{TweetRichText-DhCVv1-6.js → TweetRichText-wzUAtbPS.js} +2 -2
  52. package/dist/server/assets/{_tanstack-start-manifest_v-C-ZRnG_n.js → _tanstack-start-manifest_v-CjYYXQ8Z.js} +35 -35
  53. package/dist/server/assets/{blocks-DSgQghqP.js → blocks-CaP_u3mY.js} +3 -3
  54. package/dist/server/assets/{blocks-C1mgGTB3.js → blocks-DKy4yTF-.js} +3 -3
  55. package/dist/server/assets/{bookmarks-BJN8tykY.js → bookmarks-CPFq3JVX.js} +1 -1
  56. package/dist/server/assets/{client-stream-contracts-C2xbWVjm.js → client-stream-contracts-gtXEreFY.js} +72 -8
  57. package/dist/server/assets/{data-sources-BnA1Q94p.js → data-sources-DWwmQqcO.js} +1 -1
  58. package/dist/server/assets/{discuss-CJ1dau1j.js → discuss-BB8wFy4L.js} +3 -3
  59. package/dist/server/assets/{discuss-QTo08NCN.js → discuss-CVGB4_I0.js} +3 -3
  60. package/dist/server/assets/{dms-DAyQrVM2.js → dms-7NzdyQZQ.js} +6 -6
  61. package/dist/server/assets/{dms-BuLj4bp8.js → dms-vbEumuuO.js} +4 -4
  62. package/dist/server/assets/{empty-plugin-adapters-DzrEkdBF.js → empty-plugin-adapters-D9UWiqvJ.js} +1 -1
  63. package/dist/server/assets/{inbox-CkGOaW1q.js → inbox-CBeZctFd.js} +2 -2
  64. package/dist/server/assets/{inbox-DpWd1EzC.js → inbox-UpHhXODd.js} +4 -4
  65. package/dist/server/assets/{likes-DBOAtsJU.js → likes-CDAjYyTm.js} +1 -1
  66. package/dist/server/assets/{links-DAhSjynu.js → links-DU-TIHtg.js} +6 -6
  67. package/dist/server/assets/{links-DmH5lxHO.js → links-sQ3q2jvO.js} +6 -6
  68. package/dist/server/assets/{mentions-BH2MzKtB.js → mentions-DdndGSRw.js} +1 -1
  69. package/dist/server/assets/{network-map-D3CzRcC4.js → network-map-B9iOapuB.js} +2 -2
  70. package/dist/server/assets/{network-map-D5DoLOwR.js → network-map-CcOz-T9O.js} +2 -2
  71. package/dist/server/assets/{profile-analyze-C1NoM0tV.js → profile-analyze-BmDeTif5.js} +1 -1
  72. package/dist/server/assets/{profile-analyze-BP65PED0.js → profile-analyze-CUfXmXEH.js} +3 -3
  73. package/dist/server/assets/{profiles._handle-DsLNj2Ca.js → profiles._handle-8snagiR1.js} +4 -4
  74. package/dist/server/assets/{profiles._handle-DjwlN_ac.js → profiles._handle-BAqnghwo.js} +5 -5
  75. package/dist/server/assets/{rate-limits-VAr2qzYD.js → rate-limits-BY2-aQPT.js} +1 -1
  76. package/dist/server/assets/{router-DqkwSPiM.js → router-DP7iZD-q.js} +424 -128
  77. package/dist/server/assets/{routes-A9c9ZhwN.js → routes-D9226vKz.js} +1 -1
  78. package/dist/server/assets/start-5Z2QO8AU.js +4 -0
  79. package/dist/server/assets/{today-B5hVM57Z.js → today-BmvIMJzI.js} +3 -3
  80. package/dist/server/assets/{today-fvGiZ7ud.js → today-DKWphGrC.js} +112 -57
  81. package/dist/server/assets/{ui-qbmcMSSX.js → ui-rDHeS-cc.js} +2 -1
  82. package/dist/server/assets/{useTimelineRouteData-27cxynxa.js → useTimelineRouteData-BmDbGvQ8.js} +7 -7
  83. package/dist/server/server.js +50 -3413
  84. package/package.json +13 -13
  85. package/dist/client/assets/AvatarChip-DLoqM5xD.js +0 -1
  86. package/dist/client/assets/ProfilePreview-BejAuYsJ.js +0 -1
  87. package/dist/client/assets/SavedTimelineView-BIS7HKpp.js +0 -1
  88. package/dist/client/assets/SmartTimestamp-BR0-9se2.js +0 -1
  89. package/dist/client/assets/TimelineRouteFrame-CyGPj0eM.js +0 -1
  90. package/dist/client/assets/blocks-7UDKQp8H.js +0 -1
  91. package/dist/client/assets/chunk-C0phanGV.js +0 -1
  92. package/dist/client/assets/circle-check-C_Vq3ElD.js +0 -1
  93. package/dist/client/assets/client-stream-contracts-ys3XhWG4.js +0 -5
  94. package/dist/client/assets/createLucideIcon-JV8isFFR.js +0 -1
  95. package/dist/client/assets/data-sources-Cm2bpNvg.js +0 -1
  96. package/dist/client/assets/discuss-DTjaOugw.js +0 -1
  97. package/dist/client/assets/dms-CGd6Eogq.js +0 -1
  98. package/dist/client/assets/inbox-BHlGuOy2.js +0 -1
  99. package/dist/client/assets/index-CEIG7S6s.js +0 -31
  100. package/dist/client/assets/likes-cLrcAQem.js +0 -1
  101. package/dist/client/assets/links-CM9QO1LC.js +0 -1
  102. package/dist/client/assets/mapbox-BxTlqXt9.js +0 -2
  103. package/dist/client/assets/network-map-B5a3whqj.js +0 -2
  104. package/dist/client/assets/profile-analyze-CRtNEwlb.js +0 -1
  105. package/dist/client/assets/profiles._handle-C82_HoKX.js +0 -1
  106. package/dist/client/assets/query-client-fYu2rzRC.js +0 -17
  107. package/dist/client/assets/rate-limits-ScaEwdVK.js +0 -1
  108. package/dist/client/assets/react-dom-DHl6Ug7F.js +0 -1
  109. package/dist/client/assets/react-nBylq1U5.js +0 -1
  110. package/dist/client/assets/schemas-I9r6F6ya.js +0 -64
  111. package/dist/client/assets/search-Dq5kYsxA.js +0 -1
  112. package/dist/client/assets/styles-B8s3tt3r.css +0 -2
  113. package/dist/client/assets/today-CeG1O7Py.js +0 -1
  114. package/dist/client/assets/useTimelineRouteData-1HsqgvUi.js +0 -1
  115. package/dist/server/assets/SyncNowButton-BOn_IBXS.js +0 -76
  116. package/dist/server/assets/start-FaDOTmto.js +0 -4
@@ -1,4 +1,4 @@
1
- import { t as TimelineRouteFrame } from "./TimelineRouteFrame-CU7ilM7U.js";
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) {
@@ -0,0 +1,4 @@
1
+ //#region node_modules/@tanstack/react-start/dist/plugin/default-entry/start.ts
2
+ var startInstance = void 0;
3
+ //#endregion
4
+ export { startInstance };
@@ -1,5 +1,5 @@
1
- import "./ui-qbmcMSSX.js";
2
- import "./client-stream-contracts-C2xbWVjm.js";
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-fvGiZ7ud.js");
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, Kt as segmentClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, m as cx, q as errorCopyClass, qt as segmentedClass, wt as pageHeaderActionsClass } from "./ui-qbmcMSSX.js";
2
- import { a as useNdjsonRun, n as periodDigestStreamEventSchema, o as MarkdownViewer, t as isTerminalStreamEvent } from "./client-stream-contracts-C2xbWVjm.js";
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-B5hVM57Z.js";
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: [/* @__PURE__ */ jsxs("div", {
216
- className: pageHeaderRowClass,
217
- children: [/* @__PURE__ */ jsxs("div", {
218
- className: "min-w-0",
219
- children: [/* @__PURE__ */ jsx("h1", {
220
- className: pageTitleClass,
221
- children: "What happened"
222
- }), /* @__PURE__ */ jsx("p", {
223
- className: pageSubtitleClass,
224
- children: sourceLabel
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
- }), /* @__PURE__ */ jsx("div", {
227
- className: pageHeaderActionsClass,
228
- children: /* @__PURE__ */ jsxs("button", {
229
- type: "button",
230
- className: secondaryButtonClass,
231
- onClick: () => run(true),
232
- disabled: loading,
233
- children: [/* @__PURE__ */ jsx(RefreshCw, {
234
- className: cx("size-4", loading && "animate-spin"),
235
- "aria-hidden": "true"
236
- }), "Refresh"]
237
- })
238
- })]
239
- }), /* @__PURE__ */ jsxs("div", {
240
- className: "flex flex-wrap items-center gap-2 px-4 pb-3",
241
- children: [/* @__PURE__ */ jsx("div", {
242
- className: segmentedClass,
243
- "aria-label": "Digest period",
244
- children: periods.map((item) => /* @__PURE__ */ jsx("button", {
245
- type: "button",
246
- className: cx(segmentClass, period === item.value && "bg-[var(--bg-active)] text-[var(--ink)]"),
247
- onClick: () => updateSearch({
248
- ...searchState,
249
- period: item.value
250
- }),
251
- children: item.label
252
- }, item.value))
253
- }), /* @__PURE__ */ jsxs("label", {
254
- 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)]",
255
- children: [/* @__PURE__ */ jsx("input", {
256
- type: "checkbox",
257
- checked: includeDms,
258
- onChange: (event) => updateSearch({
259
- ...searchState,
260
- includeDms: event.currentTarget.checked
261
- })
262
- }), "DMs"]
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 $, sidebarBrandTaglineClass 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, segmentActiveClass as Gt, embeddedCardHandleClass as H, searchFieldInputClass as Ht, dmThreadNameClass as I, profilePreviewHandleClass as It, feedActionButtonClass as J, selectFieldClass as Jt, emptyStateClass as K, segmentClass 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, sidebarBrandMarkClass 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, sidebarBrandCopyClass as Xt, feedActionIconClass as Y, sidebarBrandClass as Yt, feedClass as Z, sidebarBrandCopyCompactClass as Zt, dmListBodyClass as _, tweetMediaTileClass as _n, mutedDotClass as _t, blockRowClass as a, siteShellClass as an, feedRowStatePillActiveClass as at, dmListHeaderClass as b, navLinkCompactClass as bt, composerBarClass as c, tabButtonClass as cn, feedRowTextClass as ct, contextStatRowClass as d, textFieldClass as dn, linkPreviewCardClass as dt, sidebarBrandTitleClass as en, feedRowClass as et, contextStatTermClass as f, textFieldShortClass as fn, linkPreviewDescClass as ft, dmComposerShellClass as g, tweetMediaGridClass as gn, mainColumnDmClass as gt, dangerButtonClass as h, tweetLinkClass as hn, mainColumnClass as ht, blockRowBodyClass as i, sidebarShellCompactClass as in, feedRowNameClass as it, dmMessageRowOutboundClass as j, pillSoftClass as jt, dmMessageMetaClass as k, pillAlertClass as kt, composerInputClass as l, tabButtonIndicatorClass as ln, feedRowTimestampClass as lt, cx as m, tweetHashtagClass as mn, linkPreviewTitleClass as mt, avatarChipLargeClass as n, sidebarNavClass as nn, feedRowHandleClass as nt, bodyClass as o, statusCopyClass as on, feedRowStatePillClass as ot, contextStatValueClass as p, timestampClass as pn, linkPreviewHostClass as pt, errorCopyClass as q, segmentedClass as qt, avatarChipSmallClass as r, sidebarShellClass as rn, feedRowHeaderClass as rt, bodyCopyClass as s, tabButtonActiveClass as sn, feedRowStatePillOpenClass as st, avatarChipClass as t, sidebarFooterClass as tn, feedRowDotClass as tt, composerShellClass as u, tabStripClass as un, inboxAnalysisClass as ut, dmListClass as v, tweetMentionClass as vn, navLinkActiveClass as vt, dmListPreviewClass as w, pageHeaderActionsClass as wt, dmListItemActiveClass as x, navLinkIconClass as xt, dmListHandleClass as y, navLinkClass as yt, embeddedCardBodyClass as z, profilePreviewNameClass as zt };
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 };
@@ -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 tweetMediaTileClass, at as feedRowStatePillActiveClass, ct as feedRowTextClass, dt as linkPreviewCardClass, et as feedRowClass, ft as linkPreviewDescClass, gn as tweetMediaGridClass, 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, z as embeddedCardBodyClass } from "./ui-qbmcMSSX.js";
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-zUDAEmjL.js";
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-ntW0Q2GB.js";
6
- import { d as isTweetArticleUrlEntity, f as normalizeTweetUrlEntityRangeForText, s as safeHttpUrl, t as ProfilePreview } from "./ProfilePreview-C6gAor_j.js";
7
- import { t as SmartTimestamp } from "./SmartTimestamp-DfwE1NGf.js";
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-DhCVv1-6.js";
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", {