@snagset/server 0.1.1 → 0.1.3

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 (98) hide show
  1. package/dist/app.js +22 -4
  2. package/dist/app.js.map +1 -1
  3. package/dist/bin.js +4 -3
  4. package/dist/bin.js.map +1 -1
  5. package/dist/instance/address.js +74 -0
  6. package/dist/instance/address.js.map +1 -0
  7. package/dist/instance/mcpHttp.js +42 -0
  8. package/dist/instance/mcpHttp.js.map +1 -0
  9. package/dist/integrations/outbox.js +15 -14
  10. package/dist/integrations/outbox.js.map +1 -1
  11. package/dist/mail/notify.js +3 -1
  12. package/dist/mail/notify.js.map +1 -1
  13. package/dist/routes/instance.js +58 -0
  14. package/dist/routes/instance.js.map +1 -1
  15. package/dist/routes/integrations.js +5 -5
  16. package/dist/routes/integrations.js.map +1 -1
  17. package/dist/routes/jobs.js +3 -2
  18. package/dist/routes/jobs.js.map +1 -1
  19. package/dist/routes/mcp.js +45 -0
  20. package/dist/routes/mcp.js.map +1 -0
  21. package/dist/routes/mcpAuth.js +56 -1
  22. package/dist/routes/mcpAuth.js.map +1 -1
  23. package/dist/routes/mcpToken.js +2 -2
  24. package/dist/routes/mcpToken.js.map +1 -1
  25. package/dist/routes/mcpTokens.js +10 -3
  26. package/dist/routes/mcpTokens.js.map +1 -1
  27. package/dist/routes/threads.js +2 -2
  28. package/dist/routes/threads.js.map +1 -1
  29. package/dist/vendor/mcp/bin.js +72 -0
  30. package/dist/vendor/mcp/client.js +107 -0
  31. package/dist/vendor/mcp/server.js +242 -0
  32. package/dist/vendor/mcp/source.js +284 -0
  33. package/dist/vendor/mcp/view.js +199 -0
  34. package/dist/vendor/types/names.js +1 -0
  35. package/package.json +4 -2
  36. package/static/dashboard/assets/CompositeItem-BZSyTS4P.js +1 -0
  37. package/static/dashboard/assets/{ConfirmDialog-CCAJDc_P.js → ConfirmDialog-Db4zsosS.js} +1 -1
  38. package/static/dashboard/assets/{CopyButton-exuJDdXj.js → CopyButton-Bm-P_uCi.js} +1 -1
  39. package/static/dashboard/assets/FieldItemContext-C_WMV5Y1.js +1 -0
  40. package/static/dashboard/assets/{InstallTag-CkeGLk1a.js → InstallTag-C12OFWxQ.js} +1 -1
  41. package/static/dashboard/assets/{SaveState-BsrfwjoH.js → SaveState-OUJN_boO.js} +1 -1
  42. package/static/dashboard/assets/{_app-CiDKmy_a.js → _app-Cd-jUoXa.js} +1 -1
  43. package/static/dashboard/assets/{_app-xxJ7UG34.js → _app-Cp-iO2k6.js} +2 -2
  44. package/static/dashboard/assets/{activity-mwHb7ir7.js → activity-DrwA-DtK.js} +1 -1
  45. package/static/dashboard/assets/{arrow-left-D08BSlJU.js → arrow-left-Bh-dAOei.js} +1 -1
  46. package/static/dashboard/assets/{avatar-BITl2vTh.js → avatar-CHJ9xfvK.js} +1 -1
  47. package/static/dashboard/assets/{badge-CGEswzew.js → badge-B0S2TuoH.js} +1 -1
  48. package/static/dashboard/assets/{card-8T0wnIiU.js → card-ACZ3SoSc.js} +1 -1
  49. package/static/dashboard/assets/{check-CiLHTeII.js → check-Dqp329Qx.js} +1 -1
  50. package/static/dashboard/assets/{chevron-right-BokKbPOn.js → chevron-right-Ce6AqGTW.js} +1 -1
  51. package/static/dashboard/assets/{copy-CKgsZbj1.js → copy-DYe-rWru.js} +1 -1
  52. package/static/dashboard/assets/{createBaseUIEventDetails-CEmaecLi.js → createBaseUIEventDetails-BwtZlnCY.js} +1 -1
  53. package/static/dashboard/assets/{createLucideIcon-llnWWh0E.js → createLucideIcon-SQ1OtOty.js} +1 -1
  54. package/static/dashboard/assets/{dialog-DrrnCoT5.js → dialog-DC5ijHd-.js} +1 -1
  55. package/static/dashboard/assets/{dropdown-menu-DIE2xmL5.js → dropdown-menu-DJHh2D48.js} +3 -3
  56. package/static/dashboard/assets/{image-off-CgUC8krg.js → image-off-DcirqIBd.js} +1 -1
  57. package/static/dashboard/assets/{index-C87aqO18.js → index-CqjuloQH.js} +7 -7
  58. package/static/dashboard/assets/{label-BfMHjFA7.js → label-CW_cMhiD.js} +1 -1
  59. package/static/dashboard/assets/{layout-grid-B7mn7n3K.js → layout-grid-DiZ4lLOr.js} +1 -1
  60. package/static/dashboard/assets/me-DdTyFOSS.js +1 -0
  61. package/static/dashboard/assets/{parts-B-HQayFH.js → parts-DIo5a0tB.js} +1 -1
  62. package/static/dashboard/assets/{plus-CuMhvZUZ.js → plus-BoLdzoOl.js} +1 -1
  63. package/static/dashboard/assets/s._site-OuoJaDQ3.js +1 -0
  64. package/static/dashboard/assets/{s._site.comments-nJZLYDQh.js → s._site.comments-Dcz9VfMC.js} +2 -2
  65. package/static/dashboard/assets/{s._site.reviewers-BmRPiC0a.js → s._site.reviewers-yucE-ON0.js} +1 -1
  66. package/static/dashboard/assets/s._site.settings-BZufAPHa.js +1 -0
  67. package/static/dashboard/assets/setup-Pp1TuCU6.js +1 -0
  68. package/static/dashboard/assets/{sign-in-sWUNd3Lp.js → sign-in-7aKxoHSF.js} +1 -1
  69. package/static/dashboard/assets/{sites-CSzUAHV6.js → sites-5NKVOdPZ.js} +1 -1
  70. package/static/dashboard/assets/studio-BdDHdd0o.js +1 -0
  71. package/static/dashboard/assets/{studio-DVFn025O.js → studio-Bj_Tddf0.js} +1 -1
  72. package/static/dashboard/assets/studio.index-X6GkAcy-.js +1 -0
  73. package/static/dashboard/assets/studio.integrations-UxtgfC_i.js +1 -0
  74. package/static/dashboard/assets/{studio.members-CVu-eP6p.js → studio.members-DlYCEyja.js} +1 -1
  75. package/static/dashboard/assets/{sun-DTI4O-GM.js → sun-hlSpGJcg.js} +1 -1
  76. package/static/dashboard/assets/switch-C-FKmkAi.js +1 -0
  77. package/static/dashboard/assets/{table-DkqScFZb.js → table-5N0NRM82.js} +1 -1
  78. package/static/dashboard/assets/useAriaLabelledBy-Bl7Pv-JK.js +1 -0
  79. package/static/dashboard/assets/{useBaseQuery-0OqUJMfc.js → useBaseQuery-WjLRzhGh.js} +1 -1
  80. package/static/dashboard/assets/useQuery-BEI9T-AQ.js +1 -0
  81. package/static/dashboard/assets/useRender-DW4lC-HO.js +1 -0
  82. package/static/dashboard/assets/useValueChanged-BV1ZHBzN.js +1 -0
  83. package/static/dashboard/assets/{users-O11swHBQ.js → users-YuUR-T2d.js} +1 -1
  84. package/static/dashboard/assets/{welcome-CT6oH0I8.js → welcome-DyI_SmA2.js} +1 -1
  85. package/static/dashboard/assets/{you-_yIPqa_9.js → you-In9on4kb.js} +1 -1
  86. package/static/dashboard/assets/{zod-iC-UhR5u.js → zod-B5yGKD8p.js} +1 -1
  87. package/static/dashboard/index.html +1 -1
  88. package/static/dashboard/assets/CompositeItem-DnLNS57f.js +0 -1
  89. package/static/dashboard/assets/FieldItemContext-jf0Is3j7.js +0 -1
  90. package/static/dashboard/assets/me-D1prnPpY.js +0 -1
  91. package/static/dashboard/assets/s._site-Ccc7pzT-.js +0 -1
  92. package/static/dashboard/assets/s._site.settings-DNv5ovrJ.js +0 -1
  93. package/static/dashboard/assets/setup-B_VsIyK2.js +0 -1
  94. package/static/dashboard/assets/studio-DzBapfQK.js +0 -1
  95. package/static/dashboard/assets/studio.index-Cp7lBb8S.js +0 -1
  96. package/static/dashboard/assets/studio.integrations-DD2EWaL-.js +0 -1
  97. package/static/dashboard/assets/useQuery-COJ09EkU.js +0 -1
  98. package/static/dashboard/assets/useRender-dtgBGlgC.js +0 -1
@@ -0,0 +1,199 @@
1
+ import { fenced, DATA_BOUNDARY } from "../adapters/outbound/fence.js";
2
+ import { sanitise, trusted } from "../adapters/outbound/sanitise.js";
3
+ import { briefMarkdown } from "../types/brief.js";
4
+ /**
5
+ * The view an agent sees — 07 §8.3, and the four §8.6 mitigations that live in
6
+ * a projection rather than in a policy.
7
+ *
8
+ * `ThreadSummary` and `ThreadDetail` are projections of
9
+ * `OutboundThreadView<'plain'>`, *"not of `Thread`. That is deliberate and load
10
+ * bearing: the MCP server gets the same sanitiser, the same clamps and the same
11
+ * fixture corpus as every provider."* So every string that a reviewer could
12
+ * have typed goes through `@snagset/adapters` on the way to a model, and this
13
+ * package holds no scrubbing logic of its own.
14
+ *
15
+ * ── WHAT IS DELIBERATELY MISSING ──
16
+ *
17
+ * §8.3, on orphans, states the general rule this file follows everywhere:
18
+ * *"a payload that promises fields the release does not have is worse than a
19
+ * short one."* `OutboundThreadView` lists `branch`, `labels`, `assigneeName`,
20
+ * `viewport`, `browser`, `platform` and `prefersColorScheme`; the L1 API does
21
+ * not serve most of them yet. They are absent here rather than emitted empty,
22
+ * because an agent that reads `labels: []` concludes the thread has no labels.
23
+ *
24
+ * ── THE FENCE ──
25
+ *
26
+ * Every Class R and Class P string is WRAPPED, not merely escaped:
27
+ * `<untrusted-content kind="…">…</untrusted-content>` (§8.6 mitigation 3).
28
+ * `author` is fenced too — the review found it emitted bare while §8.6 already
29
+ * listed `Reviewer.name` among the untrusted strings reaching the model, *"the
30
+ * kind of contradiction that survives because the two facts sat four pages
31
+ * apart."*
32
+ */
33
+ /** 00 §5. The third place the token becomes irreversible (§8.3). */
34
+ export const SCHEMA_VERSION = "snagset.v1";
35
+ /** §8.3's clamp: comments capped at 50, oldest first. */
36
+ export const MAX_COMMENTS = 50;
37
+ /** §8.3: `limit` ≤ 50 on `list_threads`. */
38
+ export const MAX_THREADS = 50;
39
+ /**
40
+ * Clamps on the fenced strings themselves.
41
+ *
42
+ * A comment body is capped at 10 000 characters server-side, and fifty of them
43
+ * is half a megabyte of a model's context spent on one tool call. 4 000 is the
44
+ * length at which a snag's text stops being a snag and starts being a document
45
+ * somebody pasted *(calibration, like every number in §8)*.
46
+ */
47
+ const CLAMP = { body: 4_000, name: 200, label: 400, selector: 600 };
48
+ /**
49
+ * The anchor's human-readable half, fenced.
50
+ *
51
+ * `sourceRef` is NOT read here and that is §2.6.3: source locations never leave
52
+ * the machine. It is the one field the local MCP server *may* read — but only
53
+ * in `map_thread_to_source`, where it never leaves either.
54
+ */
55
+ function element(anchor) {
56
+ if (!anchor || typeof anchor !== "object")
57
+ return {};
58
+ const out = {};
59
+ const el = (anchor["element"] ?? anchor);
60
+ const put = (key, kind, max) => {
61
+ const v = el[key];
62
+ if (typeof v === "string" && v)
63
+ out[key] = fenced(kind, v, max);
64
+ };
65
+ put("role", "label", CLAMP.label);
66
+ put("accessibleName", "label", CLAMP.label);
67
+ put("testId", "label", CLAMP.label);
68
+ put("selector", "selector", CLAMP.selector);
69
+ return out;
70
+ }
71
+ /** `Thread` → what `list_threads` returns per row. */
72
+ export function summary(t) {
73
+ return {
74
+ id: t.id,
75
+ key: t.key,
76
+ status: t.status,
77
+ anchorState: t.anchorState ?? "unknown",
78
+ // Class S — ids, enums and timestamps we minted. `trusted()` is greppable
79
+ // on purpose: the review question is "is this genuinely ours?" rather than
80
+ // "what does this do?".
81
+ createdAt: trusted(t.createdAt),
82
+ updatedAt: trusted(t.updatedAt),
83
+ ...(t.environment ? { environment: t.environment } : {}),
84
+ ...(t.round !== undefined ? { round: t.round } : {}),
85
+ ...(t.route ? { route: fenced("label", t.route, CLAMP.label) } : {}),
86
+ commentCount: t.commentCount ?? 0,
87
+ ...(t.createdBy?.name ? { author: fenced("name", t.createdBy.name, CLAMP.name) } : {}),
88
+ // The first comment IS the snag (05 §6.2 writes them in one transaction),
89
+ // so a summary without it is a list of keys. Clamped harder than the
90
+ // detail's: this one appears fifty times in a single result.
91
+ ...(t.comments?.[0] ? { firstComment: fenced("body", t.comments[0].body, 500) } : {}),
92
+ element: element(t.anchor),
93
+ };
94
+ }
95
+ /** `get_thread` — the same row plus its conversation. */
96
+ export function detail(t) {
97
+ const comments = (t.comments ?? []).slice(0, MAX_COMMENTS).map((c) => ({
98
+ id: c.id,
99
+ createdAt: trusted(c.createdAt),
100
+ author: fenced("name", c.author?.name ?? "Someone", CLAMP.name),
101
+ authorKind: c.author?.kind ?? "guest",
102
+ body: fenced("body", c.body ?? "", CLAMP.body),
103
+ }));
104
+ return {
105
+ ...summary(t),
106
+ // Replaced rather than merged: the summary's excerpt would be a second,
107
+ // shorter copy of `comments[0]` sitting beside the real thing.
108
+ firstComment: undefined,
109
+ comments,
110
+ ...(t.comments && t.comments.length > MAX_COMMENTS
111
+ ? {
112
+ // Said out loud. §8's own rule about silent caps: an agent that reads
113
+ // 50 of 200 comments and is not told will answer as if it read them
114
+ // all.
115
+ commentsTruncated: `showing the oldest ${MAX_COMMENTS} of ${t.comments.length} comments`,
116
+ }
117
+ : {}),
118
+ ...(t.attachments?.length
119
+ ? {
120
+ attachments: t.attachments.map((a) => ({
121
+ id: a.id,
122
+ kind: a.kind,
123
+ // A path on the instance, never a bucket URL. There is no tool that
124
+ // fetches it: §8.6 mitigation 4 — no arbitrary-fetch tool.
125
+ url: a.url,
126
+ ...(a.width ? { width: a.width, height: a.height } : {}),
127
+ })),
128
+ }
129
+ : {}),
130
+ };
131
+ }
132
+ /**
133
+ * `get_thread_context` — `context:read`, the personal-data-bearing half.
134
+ *
135
+ * §8.3: `CaptureContext` minus `sourceRef`, plus breadcrumbs and
136
+ * `capture.reasons[]` / `capture.blindSpots[]`. Breadcrumb messages are Class R
137
+ * — a console log on somebody else's site is text an attacker can write — so
138
+ * every one is fenced.
139
+ */
140
+ export function context(t) {
141
+ const ctx = (t.context ?? {});
142
+ const crumbs = Array.isArray(ctx["breadcrumbs"]) ? ctx["breadcrumbs"] : [];
143
+ const { sourceRef: _dropped, ...rest } = ctx;
144
+ return {
145
+ // Everything except the breadcrumbs, which are re-emitted fenced below.
146
+ ...Object.fromEntries(Object.entries(rest).filter(([k]) => k !== "breadcrumbs")),
147
+ breadcrumbs: crumbs.slice(-50).map((b) => ({
148
+ t: b["t"],
149
+ type: b["type"],
150
+ ...(b["level"] ? { level: b["level"] } : {}),
151
+ message: fenced("breadcrumb", String(b["message"] ?? ""), CLAMP.body),
152
+ })),
153
+ };
154
+ }
155
+ /**
156
+ * Wrap a result for the model — mitigation 1's preamble, then the data.
157
+ *
158
+ * Text and not a JSON content block, deliberately: the preamble has to be the
159
+ * FIRST thing read, and a structured result puts the boundary statement
160
+ * somewhere inside an object where it reads as one more field.
161
+ */
162
+ export function envelope(payload) {
163
+ return `${DATA_BOUNDARY}\n\n${JSON.stringify({ schemaVersion: SCHEMA_VERSION, ...payload }, null, 2)}`;
164
+ }
165
+ /**
166
+ * A tool's failure, in words an agent can relay.
167
+ *
168
+ * Sanitised, because the string may carry a server message that quoted the
169
+ * caller's own input back — an error path is exactly where an unfenced string
170
+ * gets emitted by accident.
171
+ */
172
+ export function failure(message) {
173
+ return `${DATA_BOUNDARY}\n\n${sanitise(message, "plain", { max: 1_000 })}`;
174
+ }
175
+ /**
176
+ * `get_thread`'s default answer since D88/D93 — the BRIEF, as markdown: where
177
+ * to look, what's wrong, the screenshot. The same formatter the dashboard's
178
+ * Copy button and the server's `…/threads/:id.md` use, with two differences
179
+ * that belong to this package:
180
+ *
181
+ * · every string a reviewer could have typed is FENCED (§8.6 mitigation 3),
182
+ * through the same clamps the JSON view applies;
183
+ * · the capture CONTEXT is left out. It is the personal-data-bearing half
184
+ * (`context:read`, `get_thread_context`), and a token is not given that
185
+ * scope by default — so the brief says where it is rather than printing it.
186
+ */
187
+ export function brief(t, site) {
188
+ const clamp = {
189
+ body: CLAMP.body,
190
+ name: CLAMP.name,
191
+ label: CLAMP.label,
192
+ selector: CLAMP.selector,
193
+ breadcrumb: CLAMP.body,
194
+ };
195
+ const md = briefMarkdown({ ...t, context: null }, site, {
196
+ fence: (kind, value) => fenced(kind, value, clamp[kind]),
197
+ });
198
+ return `${DATA_BOUNDARY}\n\n${md}\n_Environment, breadcrumbs and capture reasons: get_thread_context (needs context:read)._\n`;
199
+ }
@@ -243,6 +243,7 @@ export const HTTP_HEADER = {
243
243
  configVersion: "x-snagset-config-version",
244
244
  idempotentReplay: "x-snagset-idempotent-replay",
245
245
  requestId: "x-snagset-request-id",
246
+ mcpTransport: "x-snagset-mcp-transport",
246
247
  };
247
248
  /** Host-authored `<meta name>` keys we READ and never mint (§2.11). 03 §5.3: `route` is the only one. */
248
249
  export const META_NAME = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snagset/server",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "The Snagset server: API, dashboard and widget in one package. Node and Postgres, or Vercel.",
@@ -29,11 +29,13 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@hono/node-server": "2.1.1",
32
+ "@modelcontextprotocol/sdk": "1.30.0",
32
33
  "aws4fetch": "1.0.20",
33
34
  "drizzle-orm": "0.45.2",
34
35
  "hono": "4.13.2",
35
36
  "jose": "6.2.8",
36
- "postgres": "3.4.9"
37
+ "postgres": "3.4.9",
38
+ "zod": "4.4.3"
37
39
  },
38
40
  "main": "./dist/app.js",
39
41
  "exports": {
@@ -0,0 +1 @@
1
+ import{r as l,c as O,d as M,U as w,j as T,ap as _,X as j,E as k,ao as S,h as H}from"./index-CqjuloQH.js";const U=l.createContext(void 0);function q(){return l.useContext(U)?.direction??"ltr"}const y=l.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function Y(){return l.useContext(y)}function B(s={}){const{guess:o,label:e,metadata:r,textRef:f,index:t}=s,{register:i,unregister:u,subscribeMapChange:d,nextIndexRef:h}=Y(),c=l.useRef(-1),[g,C]=l.useState(t==null&&o?()=>{if(c.current===-1){const p=h.current;h.current+=1,c.current=p}return c.current}:-1),v=t??g,R=l.useRef(null),E=l.useCallback(p=>{const b=R.current;b&&u(b),R.current=p,p&&i(p,{metadata:r??null,index:t??null,label:e,textRef:f})},[t,i,u,r,e,f]);return O(()=>{if(t==null)return d(p=>{const b=R.current?p.get(R.current)?.index:null;b!=null&&C(b)})},[t,d]),{ref:E,index:v}}function K(s){const{children:o,elementsRef:e,labelsRef:r,onMapChange:f}=s,t=M(f),[,i]=l.useState(!1),u=w(W).current,d=w(F).current,h=l.useRef(0),c=l.useRef(!0),g=l.useRef([]),C=l.useRef(null),v=M(()=>{c.current||(c.current=!0,i(n=>!n))}),R=M((n,x)=>{d.set(n,x),v()}),E=M(n=>{d.delete(n),v()}),p=M(n=>{const x=new Map;return e.current.length=0,r&&(r.current.length=0),n.forEach(a=>{x.set(a.element,{...a.registration.metadata??{},index:a.index}),e.current[a.index]=a.element,r&&(r.current[a.index]=a.registration.label!==void 0?a.registration.label:a.registration.textRef?.current?.textContent??a.element.textContent)}),h.current=e.current.length,x});function b(n){if(C.current?.disconnect(),C.current=null,typeof MutationObserver!="function"||n.length<2)return;const x=new MutationObserver(m=>{if(!J(m))return;let I=null;for(const L of n)if(L.isConnected){if(I&&D(I,L)>0){x.disconnect(),v();return}I=L}});C.current=x;const a=new Set;for(let m=1;m<n.length;m+=1){const I=G(n[m-1],n[m]);I&&a.add(I)}a.forEach(m=>x.observe(m,{childList:!0}))}const N=M(()=>{const[n,x]=z(d),a=p(n);b(x),g.current=n,c.current=!1,u.forEach(m=>m(a)),t(a)});O(()=>(c.current||p(g.current),()=>{e.current=[],r&&(r.current=[])}),[e,r,p]),O(()=>{c.current&&N()}),O(()=>()=>{C.current?.disconnect(),c.current=!0},[]);const P=M(n=>(u.add(n),()=>{u.delete(n)})),A=l.useMemo(()=>({register:R,unregister:E,subscribeMapChange:P,nextIndexRef:h}),[R,E,P,h]);return T.jsx(y.Provider,{value:A,children:o})}function F(){return new Map}function W(){return new Set}function z(s){const o=new Set,e=[],r=[];s.forEach((t,i)=>{if(!i.isConnected)return;const u=t.index,d={index:u??-1,element:i,registration:t};u===null?r.push(d):u>=0&&(o.add(u),e.push(d))});let f=0;return r.sort((t,i)=>D(t.element,i.element)),r.forEach(t=>{for(;o.has(f);)f+=1;t.index=f,e.push(t),f+=1}),o.size>0&&e.sort((t,i)=>t.index-i.index),[e,r.map(t=>t.element)]}function G(s,o){let e=s.parentElement;for(;e&&!e.contains(o);)e=e.parentElement;return e}function J(s){for(const o of s)for(let e=0;e<o.removedNodes.length;e+=1)if(o.removedNodes[e].isConnected)return!0;return!1}function D(s,o){return s.compareDocumentPosition(o)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}function V(s={}){const{highlightItemOnHover:o,highlightedIndex:e,onHighlightedIndexChange:r}=_(),{ref:f,index:t}=B(s),i=e===t,u=l.useRef(null),d=j(f,u);return{compositeProps:{tabIndex:i?0:-1,onFocus(){r(t)},onMouseMove(){const c=u.current;if(!o||!c)return;const g=c.hasAttribute("disabled")||c.ariaDisabled==="true";!i&&!g&&c.focus()}},compositeRef:d,index:t}}function Q(s){const{render:o,className:e,style:r,state:f=k,props:t=S,refs:i=S,metadata:u,stateAttributesMapping:d,tag:h="div",...c}=s,{compositeProps:g,compositeRef:C}=V({metadata:u});return H(h,s,{state:f,ref:[C,...i],props:[g,...t,c],stateAttributesMapping:d})}export{K as C,B as a,Q as b,q as u};
@@ -1 +1 @@
1
- import{r as i,j as e,B as x}from"./index-C87aqO18.js";import{E as u,G as g,I as C,H as D,J as v,K as b}from"./dialog-DrrnCoT5.js";import{L as E,I}from"./label-BfMHjFA7.js";function T({open:l,onOpenChange:o,title:m,description:r,children:h,confirmLabel:j,confirmWord:t,busy:s=!1,onConfirm:p}){const[n,c]=i.useState(""),d=i.useId();i.useEffect(()=>{l&&c("")},[l]);const f=!t||n.trim()===t;return e.jsx(u,{open:l,onOpenChange:a=>{!a&&s||o(a)},children:e.jsx(g,{showCloseButton:!1,children:e.jsxs("form",{className:"flex flex-col gap-4",onSubmit:a=>{a.preventDefault(),f&&!s&&p()},children:[e.jsxs(C,{children:[e.jsx(D,{children:m}),r&&e.jsx(v,{children:r})]}),h,t&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsxs(E,{htmlFor:d,children:["Type ",e.jsx("b",{className:"font-semibold text-foreground",children:t})," to confirm"]}),e.jsx(I,{id:d,value:n,autoComplete:"off",spellCheck:!1,disabled:s,onChange:a=>c(a.target.value)})]}),e.jsxs(b,{children:[e.jsx(x,{type:"button",variant:"outline",disabled:s,onClick:()=>o(!1),children:"Cancel"}),e.jsx(x,{type:"submit",variant:"destructive",disabled:!f||s,children:s?"Working…":j})]})]})})})}export{T as C};
1
+ import{r as i,j as e,B as x}from"./index-CqjuloQH.js";import{E as u,G as g,I as C,H as D,J as v,K as b}from"./dialog-DC5ijHd-.js";import{L as E,I}from"./label-CW_cMhiD.js";function T({open:l,onOpenChange:o,title:m,description:r,children:h,confirmLabel:j,confirmWord:t,busy:s=!1,onConfirm:p}){const[n,c]=i.useState(""),d=i.useId();i.useEffect(()=>{l&&c("")},[l]);const f=!t||n.trim()===t;return e.jsx(u,{open:l,onOpenChange:a=>{!a&&s||o(a)},children:e.jsx(g,{showCloseButton:!1,children:e.jsxs("form",{className:"flex flex-col gap-4",onSubmit:a=>{a.preventDefault(),f&&!s&&p()},children:[e.jsxs(C,{children:[e.jsx(D,{children:m}),r&&e.jsx(v,{children:r})]}),h,t&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsxs(E,{htmlFor:d,children:["Type ",e.jsx("b",{className:"font-semibold text-foreground",children:t})," to confirm"]}),e.jsx(I,{id:d,value:n,autoComplete:"off",spellCheck:!1,disabled:s,onChange:a=>c(a.target.value)})]}),e.jsxs(b,{children:[e.jsx(x,{type:"button",variant:"outline",disabled:s,onClick:()=>o(!1),children:"Cancel"}),e.jsx(x,{type:"submit",variant:"destructive",disabled:!f||s,children:s?"Working…":j})]})]})})})}export{T as C};
@@ -1 +1 @@
1
- import{r as n,j as t,B as c}from"./index-C87aqO18.js";import{C}from"./check-CiLHTeII.js";import{C as m}from"./copy-CKgsZbj1.js";function l({text:r,label:e="Copy",withText:s=!1,size:a="icon-sm",className:p}){const[o,i]=n.useState(!1);return t.jsxs(c,{type:"button",variant:"outline",size:s?"sm":a,className:p,"aria-label":o?"Copied":e,onClick:()=>{navigator.clipboard?.writeText(r).catch(()=>{}),i(!0),setTimeout(()=>i(!1),1500)},children:[o?t.jsx(C,{}):t.jsx(m,{}),s&&(o?"Copied":e)]})}export{l as C};
1
+ import{r as n,j as t,B as c}from"./index-CqjuloQH.js";import{C}from"./check-Dqp329Qx.js";import{C as m}from"./copy-DYe-rWru.js";function l({text:r,label:e="Copy",withText:s=!1,size:a="icon-sm",className:p}){const[o,i]=n.useState(!1);return t.jsxs(c,{type:"button",variant:"outline",size:s?"sm":a,className:p,"aria-label":o?"Copied":e,onClick:()=>{navigator.clipboard?.writeText(r).catch(()=>{}),i(!0),setTimeout(()=>i(!1),1500)},children:[o?t.jsx(C,{}):t.jsx(m,{}),s&&(o?"Copied":e)]})}export{l as C};
@@ -0,0 +1 @@
1
+ import{r as t}from"./index-CqjuloQH.js";const e=t.createContext({disabled:!1});function r(){return t.useContext(e)}export{r as u};
@@ -1 +1 @@
1
- import{r as o,j as e,B as i,ay as n}from"./index-C87aqO18.js";import{C as c}from"./check-CiLHTeII.js";import{C as l}from"./copy-CKgsZbj1.js";function p(t){return`<script src="${location.origin}/snag.js" ${n("site")}="${t}" defer><\/script>`}function g({uid:t}){const[r,a]=o.useState(!1),s=p(t);return e.jsxs("div",{className:"relative rounded-md border border-border bg-background px-3 py-2.5 pr-11 font-mono text-[12.5px] leading-relaxed",children:[e.jsx("code",{className:"whitespace-pre-wrap break-all",children:s}),e.jsx(i,{variant:"ghost",size:"icon-sm",className:"absolute right-1.5 top-1.5","aria-label":r?"Copied":"Copy the tag",onClick:()=>{navigator.clipboard?.writeText(s),a(!0),setTimeout(()=>a(!1),1500)},children:r?e.jsx(c,{}):e.jsx(l,{})})]})}export{g as I};
1
+ import{r as o,j as e,B as i,ay as n}from"./index-CqjuloQH.js";import{C as c}from"./check-Dqp329Qx.js";import{C as l}from"./copy-DYe-rWru.js";function p(t){return`<script src="${location.origin}/snag.js" ${n("site")}="${t}" defer><\/script>`}function g({uid:t}){const[r,a]=o.useState(!1),s=p(t);return e.jsxs("div",{className:"relative rounded-md border border-border bg-background px-3 py-2.5 pr-11 font-mono text-[12.5px] leading-relaxed",children:[e.jsx("code",{className:"whitespace-pre-wrap break-all",children:s}),e.jsx(i,{variant:"ghost",size:"icon-sm",className:"absolute right-1.5 top-1.5","aria-label":r?"Copied":"Copy the tag",onClick:()=>{navigator.clipboard?.writeText(s),a(!0),setTimeout(()=>a(!1),1500)},children:r?e.jsx(c,{}):e.jsx(l,{})})]})}export{g as I};
@@ -1,4 +1,4 @@
1
- import{r,j as e}from"./index-C87aqO18.js";import{c as n}from"./createLucideIcon-llnWWh0E.js";/**
1
+ import{r,j as e}from"./index-CqjuloQH.js";import{c as n}from"./createLucideIcon-SQ1OtOty.js";/**
2
2
  * @license lucide-react v1.39.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{j as e,u as n,G as a,B as r}from"./index-C87aqO18.js";function i({error:s}){const t=n(),o=s instanceof Error?s.message:"Something went wrong.";return e.jsx(a,{children:e.jsxs("div",{className:"flex flex-col items-start gap-3",children:[e.jsx("h1",{className:"m-0 text-lg font-semibold",children:"Could not load the dashboard"}),e.jsx("p",{className:"m-0 text-muted-foreground",children:o}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>void t.invalidate(),children:"Try again"})]})})}const m=({error:s})=>e.jsx(i,{error:s});export{m as errorComponent};
1
+ import{j as e,u as n,G as a,B as r}from"./index-CqjuloQH.js";function i({error:s}){const t=n(),o=s instanceof Error?s.message:"Something went wrong.";return e.jsx(a,{children:e.jsxs("div",{className:"flex flex-col items-start gap-3",children:[e.jsx("h1",{className:"m-0 text-lg font-semibold",children:"Could not load the dashboard"}),e.jsx("p",{className:"m-0 text-muted-foreground",children:o}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>void t.invalidate(),children:"Try again"})]})})}const m=({error:s})=>e.jsx(i,{error:s});export{m as errorComponent};
@@ -1,4 +1,4 @@
1
- import{u as rt,a as it,b as lt,r,c as z,d as te,g as dt,j as e,B as Ee,e as w,f as Z,m as pe,E as ct,h as fe,i as re,k as ut,l as pt,n as ge,o as Oe,p as ft,L as A,M as gt,q as ht,s as xt,t as mt,v as bt,w as vt,x as jt,O as yt}from"./index-C87aqO18.js";import{u as Ie}from"./useQuery-COJ09EkU.js";import{T as St,i as De,a as wt,D as Ct,b as kt,c as Tt,X as Nt,d as Pt,e as Rt,f as Mt,g as Et,R as Ot,p as It,h as Dt,j as At,k as _t,P as Ht,l as zt,u as Lt,m as $t,n as Bt,o as Ut,q as Ft,r as qt,s as Gt,t as Vt,v as Kt,w as Yt,x as Wt,y as Xt,z as Qt,A as Jt,F as Zt,B as es,C as ts,E as ss,G as ns,H as as}from"./dialog-DrrnCoT5.js";import{c as B,n as Ae,g as os,a as ie,t as rs,d as is,i as ls,u as ds,b as se}from"./createBaseUIEventDetails-CEmaecLi.js";import{g as le,u as cs,a as us,b as ps,s as fs,c as gs,d as hs,e as xs,f as ms,h as bs,S as _e,E as X,D as he,i as xe,j as me,k as He,l as de,m as _,n as Q,o as vs,p as ne}from"./dropdown-menu-DIE2xmL5.js";import{u as ze}from"./useRender-dtgBGlgC.js";import{c as I}from"./createLucideIcon-llnWWh0E.js";import{A as js,a as ys}from"./avatar-BITl2vTh.js";import{S as Ss,i as ws,a as Cs}from"./labels--UUyt9uB.js";import{u as Le}from"./me-D1prnPpY.js";import{L as J}from"./layout-grid-B7mn7n3K.js";import{U as ce}from"./users-O11swHBQ.js";import{c as ks}from"./update-duXzIzFS.js";import{P as Ts}from"./plus-CuMhvZUZ.js";import{M as Ns,S as Ps,a as Rs}from"./sun-DTI4O-GM.js";import"./useBaseQuery-0OqUJMfc.js";import"./check-CiLHTeII.js";import"./CompositeItem-DnLNS57f.js";function Ms(t){const s=rt({warn:t?.router===void 0}),n=t?.router||s;return it(n.stores.__store,lt(t,n))}/**
1
+ import{u as rt,a as it,b as lt,r,c as z,d as te,g as dt,j as e,B as Ee,e as w,f as Z,m as pe,E as ct,h as fe,i as re,k as ut,l as pt,n as ge,o as Oe,p as ft,L as A,M as gt,q as ht,s as xt,t as mt,v as bt,w as vt,x as jt,O as yt}from"./index-CqjuloQH.js";import{u as Ie}from"./useQuery-BEI9T-AQ.js";import{T as St,i as De,a as wt,D as Ct,b as kt,c as Tt,X as Nt,d as Pt,e as Rt,f as Mt,g as Et,R as Ot,p as It,h as Dt,j as At,k as _t,P as Ht,l as zt,u as Lt,m as $t,n as Bt,o as Ut,q as Ft,r as qt,s as Gt,t as Vt,v as Kt,w as Yt,x as Wt,y as Xt,z as Qt,A as Jt,F as Zt,B as es,C as ts,E as ss,G as ns,H as as}from"./dialog-DC5ijHd-.js";import{c as B,n as Ae,g as os,a as ie,t as rs,d as is,i as ls,u as ds,b as se}from"./createBaseUIEventDetails-BwtZlnCY.js";import{g as le,u as cs,a as us,b as ps,s as fs,c as gs,d as hs,e as xs,f as ms,h as bs,S as _e,E as X,D as he,i as xe,j as me,k as He,l as de,m as _,n as Q,o as vs,p as ne}from"./dropdown-menu-DJHh2D48.js";import{u as ze}from"./useRender-DW4lC-HO.js";import{c as I}from"./createLucideIcon-SQ1OtOty.js";import{A as js,a as ys}from"./avatar-CHJ9xfvK.js";import{S as Ss,i as ws,a as Cs}from"./labels--UUyt9uB.js";import{u as Le}from"./me-DdTyFOSS.js";import{L as J}from"./layout-grid-DiZ4lLOr.js";import{U as ce}from"./users-YuUR-T2d.js";import{c as ks}from"./update-duXzIzFS.js";import{P as Ts}from"./plus-BoLdzoOl.js";import{M as Ns,S as Ps,a as Rs}from"./sun-hlSpGJcg.js";import"./useBaseQuery-WjLRzhGh.js";import"./check-Dqp329Qx.js";import"./CompositeItem-BZSyTS4P.js";import"./useValueChanged-BV1ZHBzN.js";function Ms(t){const s=rt({warn:t?.router===void 0}),n=t?.router||s;return it(n.stores.__store,lt(t,n))}/**
2
2
  * @license lucide-react v1.39.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -53,4 +53,4 @@ import{u as rt,a as it,b as lt,r,c as z,d as te,g as dt,j as e,B as Ee,e as w,f
53
53
  *
54
54
  * This source code is licensed under the ISC license.
55
55
  * See the LICENSE file in the root directory of this source tree.
56
- */const Gs=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Ge=I("user",Gs),ae=768;function Vs(){const[t,s]=r.useState(void 0);return r.useEffect(()=>{const n=window.matchMedia(`(max-width: ${ae-1}px)`),a=()=>{s(window.innerWidth<ae)};return n.addEventListener("change",a),s(window.innerWidth<ae),()=>n.removeEventListener("change",a)},[]),!!t}const Ks=r.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new St,currentIdRef:{current:null},currentContextRef:{current:null}});function Ys(t,s){t.current=s.current}function Ws(t,s={open:!1}){const{open:n}=s,a="rootStore"in t?t.rootStore:t,o=a.useState("floatingId"),g=r.useContext(Ks),{currentIdRef:d,delayRef:l,timeoutMs:h,initialDelayRef:c,currentContextRef:f,hasProvider:v,timeout:x}=g,[y,p]=r.useState(!1),S=r.useRef(n);return z(()=>{S.current=n},[n]),z(()=>{function u(){f.current?.setIsInstantPhase(!1),d.current=null,f.current=null,l.current=c.current,x.clear()}if(d.current&&!n&&d.current===o){if(p(!1),h){const m=o;return x.start(h,()=>{a.select("open")||d.current&&d.current!==m||u()}),()=>{(S.current||d.current!==m)&&x.clear()}}u()}},[n,o,d,l,h,c,f,x,a]),z(()=>{if(!n)return;const u=f.current,m=d.current;x.clear(),f.current={onOpenChange:a.setOpen,setIsInstantPhase:p},d.current=o,l.current={open:0,close:le(c.current,"close")},m!==null&&m!==o?(p(!0),u?.setIsInstantPhase(!0),u?.onOpenChange(!1,B(Ae))):(p(!1),u?.setIsInstantPhase(!1))},[n,o,a,d,l,c,f,x]),z(()=>()=>{if(d.current===o){if(f.current=null,!S.current)return;d.current=null,Ys(l,c),x.clear()}},[f,d,l,o,c,x]),r.useMemo(()=>({hasProvider:v,delayRef:l,isInstantPhase:y}),[v,l,y])}function Xs(t,s){let n=null,a=null,o=!1;return{contextElement:t||void 0,getBoundingClientRect(){const g=t?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},d=s.axis==="x"||s.axis==="both",l=s.axis==="y"||s.axis==="both",h=["mouseenter","mousemove"].includes(s.dataRef.current.openEvent?.type||"")&&s.pointerType!=="touch";let c=g.width,f=g.height,v=g.x,x=g.y;return n==null&&s.x&&d&&(n=g.x-s.x),a==null&&s.y&&l&&(a=g.y-s.y),v-=n||0,x-=a||0,c=0,f=0,!o||h?(c=s.axis==="y"?g.width:0,f=s.axis==="x"?g.height:0,v=d&&s.x!=null?s.x:v,x=l&&s.y!=null?s.y:x):o&&!h&&(f=s.axis==="x"?g.height:f,c=s.axis==="y"?g.width:c),o=!0,{width:c,height:f,x:v,y:x,top:x,right:v+c,bottom:x+f,left:v}}}}function Te(t){return t!=null&&t.clientX!=null}function Qs(t,s={}){const{enabled:n=!0,axis:a="both"}=s,o="rootStore"in t?t.rootStore:t,g=o.useState("open"),d=o.useState("floatingElement"),l=o.useState("domReferenceElement"),h=o.context.dataRef,c=r.useRef(!1),f=r.useRef(null),[v,x]=r.useState(),[y,p]=r.useState([]),S=te(b=>{o.set("positionReference",b)}),u=te((b,j,P)=>{c.current||h.current.openEvent&&!Te(h.current.openEvent)||o.set("positionReference",Xs(P??l,{x:b,y:j,axis:a,dataRef:h,pointerType:v}))}),m=te(b=>{g?f.current||(u(b.clientX,b.clientY,b.currentTarget),p([])):u(b.clientX,b.clientY,b.currentTarget)}),k=De(v)?d:g;r.useEffect(()=>{if(!n){S(l);return}if(!k)return;function b(){f.current?.(),f.current=null}const j=dt(d);function P(i){const T=os(i);ie(d,T)?b():u(i.clientX,i.clientY)}return!h.current.openEvent||Te(h.current.openEvent)?f.current=wt(j,"mousemove",P):S(l),b},[k,n,d,h,l,o,u,S,y]),r.useEffect(()=>()=>{o.set("positionReference",null)},[o]),r.useEffect(()=>{n&&!d&&(c.current=!1)},[n,d]),r.useEffect(()=>{!n&&g&&(c.current=!0)},[n,g]);const C=r.useMemo(()=>{function b(j){x(j.pointerType)}return{onPointerDown:b,onPointerEnter:b,onMouseMove:m,onMouseEnter:m}},[m]);return r.useMemo(()=>n?{reference:C,trigger:C}:{},[n,C])}function Js({...t}){return e.jsx(Ct,{"data-slot":"sheet",...t})}function Zs({...t}){return e.jsx(Mt,{"data-slot":"sheet-portal",...t})}function en({className:t,...s}){return e.jsx(Et,{"data-slot":"sheet-overlay",className:w("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",t),...s})}function tn({className:t,children:s,side:n="right",showCloseButton:a=!0,...o}){return e.jsxs(Zs,{children:[e.jsx(en,{}),e.jsxs(kt,{"data-slot":"sheet-content","data-side":n,className:w("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",t),...o,children:[s,a&&e.jsxs(Tt,{"data-slot":"sheet-close",render:e.jsx(Ee,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[e.jsx(Nt,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function sn({className:t,...s}){return e.jsx("div",{"data-slot":"sheet-header",className:w("flex flex-col gap-0.5 p-4",t),...s})}function nn({className:t,...s}){return e.jsx(Pt,{"data-slot":"sheet-title",className:w("font-heading text-base font-medium text-foreground",t),...s})}function an({className:t,...s}){return e.jsx(Rt,{"data-slot":"sheet-description",className:w("text-sm text-muted-foreground",t),...s})}const Ve=r.createContext(void 0);function V(t){const s=r.useContext(Ve);if(s===void 0&&!t)throw new Error(Z(72));return s}const on={...It,disabled:t=>t.disabled,instantType:t=>t.instantType,isInstantPhase:t=>t.isInstantPhase,trackCursorAxis:t=>t.trackCursorAxis,disableHoverablePopup:t=>t.disableHoverablePopup,lastOpenChangeReason:t=>t.openChangeReason,closeOnClick:t=>t.closeOnClick,closeDelay:t=>t.closeDelay,adaptiveOrigin:t=>t.adaptiveOrigin};class rn extends Ot{constructor(s,n,a){const o=new Ht;super(ln(s,o,n,a),dn(o),on)}setOpen=(s,n)=>{Dt(this,s,n,{extraState:{openChangeReason:n.reason}})};cancelPendingOpen(s){this.state.floatingRootContext.dispatchOpenChange(!1,B(rs,s))}}function ln(t,s,n,a=!1){const o={...At(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...t};return o.floatingRootContext=_t(s,n,a),o}function dn(t){return{popupRef:r.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:t}}const cn=zt(function(s){const{disabled:n=!1,defaultOpen:a=!1,open:o,disableHoverablePopup:g=!1,trackCursorAxis:d="none",actionsRef:l,onOpenChange:h,onOpenChangeComplete:c,handle:f,triggerId:v,defaultTriggerId:x=null,children:y}=s,p=Lt(($,U)=>new rn({open:a,openProp:o,activeTriggerId:x,triggerIdProp:v},$,U));p.useControlledProp("openProp",o),p.useControlledProp("triggerIdProp",v),p.useContextCallback("onOpenChange",h),p.useContextCallback("onOpenChangeComplete",c);const S=p.useState("open"),u=!n&&S,m=p.useState("activeTriggerId"),k=p.useState("mounted"),C=p.useState("payload");p.useSyncedValues({trackCursorAxis:d,disableHoverablePopup:g,disabled:n}),$t(p,{closeOnActiveTriggerUnmount:!0});const{forceUnmount:b,transitionStatus:j}=Bt(u,p),P=p.useState("isInstantPhase"),i=p.useState("instantType"),T=p.useState("lastOpenChangeReason"),R=r.useRef(null);z(()=>{S&&n&&p.setOpen(!1,B(is))},[S,n,p]),z(()=>{j==="ending"&&T===Ae||j!=="ending"&&P?(i!=="delay"&&(R.current=i),p.set("instantType","delay")):R.current!==null&&(p.set("instantType",R.current),R.current=null)},[j,P,T,i,p]),z(()=>{u&&m==null&&p.set("payload",void 0)},[p,m,u]),r.useImperativeHandle(l,()=>({unmount:b,close:()=>p.setOpen(!1,B(ls))}),[b,p]);const L=u||k||!n&&d!=="none";return e.jsxs(Ve.Provider,{value:p,children:[f&&e.jsx(Ut,{handle:f,store:p}),L&&e.jsx(un,{store:p,disabled:n,trackCursorAxis:d}),typeof y=="function"?y({payload:C}):y]})});function un({store:t,disabled:s,trackCursorAxis:n}){const a=t.useState("floatingRootContext"),o=Ft(a,{enabled:!s,referencePress:()=>t.select("closeOnClick")}),g=Qs(a,{enabled:!s&&n!=="none",axis:n==="none"?void 0:n}),d=r.useMemo(()=>pe(g.reference,o.reference),[g.reference,o.reference]);return qt(t,{activeTriggerProps:d,inactiveTriggerProps:d,popupProps:o.floating??ct}),null}const pn=r.createContext(void 0);function fn(){return r.useContext(pn)}const Ne=600,Ke="data-base-ui-tooltip-trigger";function Pe(t){if("composedPath"in t){const n=t.composedPath();for(let a=0;a<n.length;a+=1){const o=n[a];if(re(o))return o}}const s=t.target;return re(s)?s:null}function gn(t){let s=t;for(;s;){const n=s.closest(`[${Ke}]`);if(n)return n;const a=s.getRootNode();s="host"in a&&re(a.host)?a.host:null}return null}const hn=Gt(function(s,n){const{render:a,className:o,style:g,handle:d,payload:l,disabled:h,delay:c,closeOnClick:f=!0,closeDelay:v,id:x,...y}=s,p=V(!0),u=cs(d)??p;if(!u)throw new Error(Z(82));const m=ds(x),k=u.useState("isTriggerActive",m),C=u.useState("isOpenedByTrigger",m),b=u.useState("floatingRootContext"),j=r.useRef(null),P=c??Ne,i=v??0,{registerTrigger:T,isMountedByThisTrigger:R}=Vt(m,j,u,{payload:l,closeOnClick:f,closeDelay:i}),L=fn(),{delayRef:$,isInstantPhase:U,hasProvider:M}=Ws(b,{open:C}),F=us(b);u.useSyncedValue("isInstantPhase",U);const ee=u.useState("disabled"),q=h??ee,ve=Kt(q),je=u.useState("trackCursorAxis"),Ze=u.useState("disableHoverablePopup"),G=r.useRef(!1),K=Yt(),Y=r.useRef(void 0);function ye(){return M?le($.current,"open")===0?0:c??L??Ne:P}function Se(N){const D=j.current;if(!D||!N)return!1;const H=gn(N);return H!==null&&H!==D&&ie(D,H)}function et(N){const D=Se(N);return G.current=D,D&&(F.openChangeTimeout.clear(),F.restTimeout.clear(),F.restTimeoutPending=!1,K.clear()),D}const tt=ps(b,{enabled:!q,mouseOnly:!0,move:!1,handleClose:!Ze&&je!=="both"?fs():null,restMs:ye,delay(){return v==null&&M?{close:le($.current,"close")}:{close:i}},triggerElementRef:j,isActiveTrigger:k,isClosing:()=>u.select("transitionStatus")==="ending",shouldOpen(){return!G.current}}),st=gs(b,{enabled:!q}).reference,nt=N=>{const D=G.current,H=Pe(N),we=et(H),W=j.current,ot=W&&H&&ie(W,H);if(we&&u.select("open")&&u.select("lastOpenChangeReason")===se){u.setOpen(!1,B(se,N));return}if(D&&!we&&ot&&!ve.current&&!u.select("open")&&W&&De(Y.current)){const Ce=()=>{!G.current&&!ve.current&&!u.select("open")&&u.setOpen(!0,B(se,N,W))},ke=ye();ke===0?(K.clear(),Ce()):K.start(ke,Ce)}},at=u.useState("triggerProps",R);return fe("button",s,{state:{open:C},ref:[n,T,j],props:[tt,st,R||je!=="none"?at:void 0,{onMouseOver(N){nt(N.nativeEvent)},onFocus(N){Se(Pe(N.nativeEvent))&&N.preventBaseUIHandler()},onMouseLeave(){G.current=!1,K.clear(),Y.current=void 0},onPointerEnter(N){Y.current=N.pointerType},onPointerDown(N){Y.current=N.pointerType,u.set("closeOnClick",f),f&&!u.select("open")&&u.cancelPendingOpen(N.nativeEvent)},onClick(N){f&&!u.select("open")&&u.cancelPendingOpen(N.nativeEvent)},id:m,"data-trigger-disabled":q?"":void 0,[Ke]:q?void 0:""},y],stateAttributesMapping:Wt})}),Ye=r.createContext(void 0);function xn(){const t=r.useContext(Ye);if(t===void 0)throw new Error(Z(70));return t}const mn=r.forwardRef(function(s,n){const{children:a,container:o,className:g,render:d,style:l,...h}=s,{node:c,subtree:f}=Xt({container:o,ref:n,componentProps:s,elementProps:h});return!f&&!c?null:e.jsxs(r.Fragment,{children:[f,c&&ut.createPortal(a,c)]})}),bn=r.forwardRef(function(s,n){const{keepMounted:a=!1,...o}=s;return V().useState("mounted")||a?e.jsx(Ye.Provider,{value:a,children:e.jsx(mn,{ref:n,...o})}):null}),We=r.createContext(void 0);function Xe(){const t=r.useContext(We);if(t===void 0)throw new Error(Z(71));return t}const vn=r.forwardRef(function(s,n){const{render:a,className:o,anchor:g,positionMethod:d="absolute",side:l="top",align:h="center",sideOffset:c=0,alignOffset:f=0,collisionBoundary:v="clipping-ancestors",collisionPadding:x=5,arrowPadding:y=5,sticky:p=!1,disableAnchorTracking:S=!1,collisionAvoidance:u=Qt,style:m,...k}=s,C=V(),b=xn(),j=C.useState("open"),P=C.useState("mounted"),i=C.useState("trackCursorAxis"),T=C.useState("disableHoverablePopup"),R=C.useState("floatingRootContext"),L=C.useState("instantType"),$=C.useState("transitionStatus"),U=C.useState("adaptiveOrigin"),M=hs({anchor:g,positionMethod:d,floatingRootContext:R,mounted:P,side:l,sideOffset:c,align:h,alignOffset:f,collisionBoundary:v,collisionPadding:x,sticky:p,arrowPadding:y,disableAnchorTracking:S,keepMounted:b,collisionAvoidance:u,adaptiveOrigin:U}),F=r.useMemo(()=>({open:j,side:M.side,align:M.align,anchorHidden:M.anchorHidden,instant:i!=="none"?"tracking-cursor":L}),[j,M.side,M.align,M.anchorHidden,i,L]),ee=xs(s,F,{styles:M.positionerStyles,transitionStatus:$,props:k,refs:[n,C.useStateSetter("positionerElement")],hidden:!P,inert:!j||i==="both"||T});return e.jsx(We.Provider,{value:M,children:ee})}),jn=r.forwardRef(function(s,n){const{render:a,className:o,style:g,...d}=s,l=V(),{side:h,align:c}=Xe(),f=l.useState("open"),v=l.useState("instantType"),x=l.useState("transitionStatus"),y=l.useState("popupProps"),p=l.useState("floatingRootContext"),S=l.useState("disabled"),u=l.useState("closeDelay");Jt({open:f,ref:l.context.popupRef,onComplete(){f&&l.context.onOpenChangeComplete?.(!0)}}),ms(p,{enabled:!S,closeDelay:u});const m=l.useStateSetter("popupElement");return fe("div",s,{state:{open:f,side:h,align:c,instant:v,transitionStatus:x},ref:[n,l.context.popupRef,m],props:[Zt,y,bs(x),d],stateAttributesMapping:es})}),yn=r.forwardRef(function(s,n){const{render:a,className:o,style:g,...d}=s,l=V(),{arrowRef:h,side:c,align:f,arrowUncentered:v,arrowStyles:x}=Xe(),y=l.useState("open"),p=l.useState("instantType");return fe("div",s,{state:{open:y,side:c,align:f,uncentered:v,instant:p},ref:[n,h],props:[{style:x,"aria-hidden":!0},d],stateAttributesMapping:ts})});function Sn({...t}){return e.jsx(cn,{"data-slot":"tooltip",...t})}function wn({...t}){return e.jsx(hn,{"data-slot":"tooltip-trigger",...t})}function Cn({className:t,side:s="top",sideOffset:n=4,align:a="center",alignOffset:o=0,children:g,...d}){return e.jsx(bn,{children:e.jsx(vn,{align:a,alignOffset:o,side:s,sideOffset:n,className:"isolate z-50",children:e.jsxs(jn,{"data-slot":"tooltip-content",className:w("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...d,children:[g,e.jsx(yn,{className:"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}const kn="sidebar_state",Tn=3600*24*7,Nn="16rem",Pn="18rem",Rn="3rem",Mn="b",Qe=r.createContext(null);function be(){const t=r.useContext(Qe);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function En({defaultOpen:t=!0,open:s,onOpenChange:n,className:a,style:o,children:g,...d}){const l=Vs(),[h,c]=r.useState(!1),[f,v]=r.useState(t),x=s??f,y=r.useCallback(m=>{const k=typeof m=="function"?m(x):m;n?n(k):v(k),document.cookie=`${kn}=${k}; path=/; max-age=${Tn}`},[n,x]),p=r.useCallback(()=>l?c(m=>!m):y(m=>!m),[l,y,c]);r.useEffect(()=>{const m=k=>{k.key===Mn&&(k.metaKey||k.ctrlKey)&&(k.preventDefault(),p())};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[p]);const S=x?"expanded":"collapsed",u=r.useMemo(()=>({state:S,open:x,setOpen:y,isMobile:l,openMobile:h,setOpenMobile:c,toggleSidebar:p}),[S,x,y,l,h,c,p]);return e.jsx(Qe.Provider,{value:u,children:e.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":Nn,"--sidebar-width-icon":Rn,...o},className:w("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",a),...d,children:g})})}function On({side:t="left",variant:s="sidebar",collapsible:n="offcanvas",className:a,children:o,dir:g,...d}){const{isMobile:l,state:h,openMobile:c,setOpenMobile:f}=be();return n==="none"?e.jsx("div",{"data-slot":"sidebar",className:w("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",a),...d,children:o}):l?e.jsx(Js,{open:c,onOpenChange:f,...d,children:e.jsxs(tn,{dir:g,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":Pn},side:t,children:[e.jsxs(sn,{className:"sr-only",children:[e.jsx(nn,{children:"Sidebar"}),e.jsx(an,{children:"Displays the mobile sidebar."})]}),e.jsx("div",{className:"flex h-full w-full flex-col",children:o})]})}):e.jsxs("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":h,"data-collapsible":h==="collapsed"?n:"","data-variant":s,"data-side":t,"data-slot":"sidebar",children:[e.jsx("div",{"data-slot":"sidebar-gap",className:w("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",s==="floating"||s==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),e.jsx("div",{"data-slot":"sidebar-container","data-side":t,className:w("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",s==="floating"||s==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",a),...d,children:e.jsx("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",children:o})})]})}function In({className:t,onClick:s,...n}){const{toggleSidebar:a}=be();return e.jsxs(Ee,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:w(t),onClick:o=>{s?.(o),a()},...n,children:[e.jsx(Us,{}),e.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function Dn({className:t,...s}){return e.jsx("main",{"data-slot":"sidebar-inset",className:w("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",t),...s})}function An({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:w("flex flex-col gap-2 p-2",t),...s})}function _n({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:w("flex flex-col gap-2 p-2",t),...s})}function Hn({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:w("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden",t),...s})}function Re({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:w("relative flex w-full min-w-0 flex-col p-2",t),...s})}function zn({className:t,render:s,...n}){return ze({defaultTagName:"div",props:pe({className:w("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",t)},n),render:s,state:{slot:"sidebar-group-label",sidebar:"group-label"}})}function Me({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:w("w-full text-sm",t),...s})}function oe({className:t,...s}){return e.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:w("flex w-full min-w-0 flex-col gap-0",t),...s})}function E({className:t,...s}){return e.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:w("group/menu-item relative",t),...s})}const Ln=pt("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function O({render:t,isActive:s=!1,variant:n="default",size:a="default",tooltip:o,className:g,...d}){const{isMobile:l,state:h}=be(),c=ze({defaultTagName:"button",props:pe({className:w(Ln({variant:n,size:a}),g)},d),render:o?e.jsx(wn,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:a,active:s}});return o?(typeof o=="string"&&(o={children:o}),e.jsxs(Sn,{children:[c,e.jsx(Cn,{side:"right",align:"center",hidden:h!=="collapsed"||l,...o})]})):c}function $n({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-menu-badge","data-sidebar":"menu-badge",className:w("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground",t),...s})}function Bn({open:t,onOpenChange:s}){const n=Le(),a=ge(),[o,g]=r.useState(""),[d,l]=r.useState(0),h=r.useRef(null),c=o.trim(),[f,v]=r.useState("");r.useEffect(()=>{const i=setTimeout(()=>v(c),180);return()=>clearTimeout(i)},[c]);const x=Ie({queryKey:["activity","search",f],queryFn:()=>Oe.activity({q:f,status:"all",limit:8}),enabled:t&&f.length>=2,staleTime:3e4});r.useEffect(()=>{t||(g(""),l(0))},[t]);const y=r.useMemo(()=>[{id:"s:sites",label:"Sites",icon:e.jsx(J,{className:"size-4"}),go:()=>void a({to:"/sites"})},{id:"s:activity",label:"Activity",hint:"every site, newest first",icon:e.jsx($e,{className:"size-4"}),go:()=>void a({to:"/activity"})},{id:"s:members",label:"Members",icon:e.jsx(ce,{className:"size-4"}),go:()=>void a({to:"/studio/members"})},{id:"s:integrations",label:"Integrations",icon:e.jsx(Be,{className:"size-4"}),go:()=>void a({to:"/studio/integrations"})},{id:"s:studio",label:"Studio settings",icon:e.jsx(Fe,{className:"size-4"}),go:()=>void a({to:"/studio"})},{id:"s:you",label:"You",icon:e.jsx(Ge,{className:"size-4"}),go:()=>void a({to:"/you"})}],[a]),p=r.useMemo(()=>n.projects.map(i=>({id:`p:${i.uid}`,label:i.name,hint:i.unresolved>0?`${i.unresolved} open`:"nothing open",icon:e.jsx(ue,{className:"size-4"}),go:()=>void a({to:"/s/$site/comments",params:{site:i.uid}})})),[n.projects,a]),S=i=>!c||i.toLowerCase().includes(c.toLowerCase()),u=[],m=p.filter(i=>S(i.label)),k=y.filter(i=>S(i.label));m.length&&u.push({title:"Sites",items:m}),k.length&&u.push({title:"Go to",items:k});const C=(x.data?.data??[]).map(i=>({id:`t:${i.id}`,label:i.latest?.body?.trim()||i.route,hint:`${i.site.name} · ${ws(i.status)?Ss[i.status]:i.status} · ${i.key}`,icon:e.jsx(ue,{className:"size-4"}),go:()=>void a({to:"/s/$site/comments",params:{site:i.site.uid},search:{thread:i.key}})}));C.length&&u.push({title:"Comments",items:C});const b=u.flatMap(i=>i.items),j=Math.min(d,Math.max(0,b.length-1)),P=i=>{i&&(s(!1),i.go())};return r.useEffect(()=>{h.current?.querySelector(`[data-at="${j}"]`)?.scrollIntoView({block:"nearest"})},[j]),e.jsx(ss,{open:t,onOpenChange:s,children:e.jsxs(ns,{showCloseButton:!1,className:"top-[15%] max-h-[70dvh] translate-y-0 gap-0 overflow-hidden p-0 sm:max-w-lg",children:[e.jsx(as,{className:"sr-only",children:"Search and go"}),e.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-3",children:[e.jsx(_e,{className:"size-4 shrink-0 text-muted-foreground"}),e.jsx("input",{autoFocus:!0,value:o,onChange:i=>{g(i.target.value),l(0)},onKeyDown:i=>{i.key==="ArrowDown"?(i.preventDefault(),l(T=>Math.min(T+1,b.length-1))):i.key==="ArrowUp"?(i.preventDefault(),l(T=>Math.max(T-1,0))):i.key==="Enter"&&(i.preventDefault(),P(b[j]))},placeholder:"Go to a site or a screen, or search every comment…","aria-label":"Search and go",className:"h-11 w-full bg-transparent text-[14px] outline-none placeholder:text-muted-foreground"})]}),e.jsxs("div",{ref:h,className:"min-h-0 flex-1 overflow-auto py-1.5",children:[b.length===0&&e.jsx("p",{className:"m-0 px-3 py-6 text-center text-[13px] text-muted-foreground",children:x.isFetching?"Looking…":c?`Nothing matches “${c}”.`:"Nothing here."}),u.map(i=>e.jsxs("div",{children:[e.jsx("div",{className:"px-3 py-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:i.title}),i.items.map(T=>{const R=b.indexOf(T);return e.jsxs("button",{type:"button","data-at":R,onMouseMove:()=>l(R),onClick:()=>P(T),className:w("flex w-full items-center gap-2.5 border-0 bg-transparent px-3 py-2 text-left text-[13px] text-foreground",R===j&&"bg-muted"),children:[e.jsx("span",{className:"shrink-0 text-muted-foreground",children:T.icon}),e.jsx("span",{className:"min-w-0 flex-1 truncate",children:T.label}),T.hint&&e.jsx("span",{className:"shrink-0 text-[12px] text-muted-foreground",children:T.hint})]},T.id)})]},i.title)),x.isFetching&&b.length>0&&e.jsx("p",{className:"m-0 px-3 py-1.5 text-[12px] text-muted-foreground",children:"Searching every site…"})]})]})})}function Un(){const[t,s]=r.useState(!1);return r.useEffect(()=>{const n=a=>{a.key.toLowerCase()!=="k"||!(a.metaKey||a.ctrlKey)||(a.preventDefault(),s(o=>!o))};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[]),[t,s]}const Je="https://snagset.com/docs/",Fn="https://www.npmjs.com/package/@snagset/server?activeTab=versions",qn="https://snagset.com/docs/self-hosting/#upgrade";function Gn({children:t}){const s=Le(),n=ft(s),[a,o]=Un();return e.jsxs(En,{children:[e.jsx(Vn,{me:s,site:n}),e.jsxs(Dn,{className:"min-w-0",children:[e.jsx(Xn,{onSearch:()=>o(!0)}),e.jsx("div",{className:"min-h-0 flex-1",children:t})]}),e.jsx(Bn,{open:a,onOpenChange:o})]})}function Vn({me:t,site:s}){const n=Ms({select:o=>o.location.pathname}),a=o=>n===o||n.startsWith(o+"/");return e.jsxs(On,{children:[e.jsx(An,{className:"px-3 pb-1 pt-3",children:e.jsxs(A,{to:"/studio",className:"flex items-center gap-2.5 rounded-md px-1 py-0.5 text-foreground hover:bg-sidebar-accent","aria-label":`${t.org.name} — studio settings`,children:[e.jsx(gt,{size:20}),e.jsxs("span",{className:"min-w-0",children:[e.jsx("span",{className:"block truncate text-[14px] font-semibold leading-tight tracking-tight",children:t.org.name}),e.jsx("span",{className:"block truncate text-[11.5px] text-muted-foreground",children:location.host})]})]})}),e.jsxs(Hn,{children:[e.jsxs(Re,{children:[e.jsx(Kn,{me:t,site:s}),s&&e.jsx(Me,{children:e.jsxs(oe,{children:[e.jsxs(E,{children:[e.jsxs(O,{isActive:a(`/s/${s.uid}/comments`),render:e.jsx(A,{to:"/s/$site/comments",params:{site:s.uid}}),children:[e.jsx(ue,{}),e.jsx("span",{children:"Comments"})]}),s.unresolved>0&&e.jsx($n,{children:s.unresolved})]}),e.jsx(E,{children:e.jsxs(O,{isActive:a(`/s/${s.uid}/reviewers`),render:e.jsx(A,{to:"/s/$site/reviewers",params:{site:s.uid}}),children:[e.jsx(ce,{}),e.jsx("span",{children:"Reviewers"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a(`/s/${s.uid}/settings`),render:e.jsx(A,{to:"/s/$site/settings",params:{site:s.uid}}),children:[e.jsx(qs,{}),e.jsx("span",{children:"Settings"})]})})]})})]}),e.jsxs(Re,{children:[e.jsx(zn,{children:"Studio"}),e.jsx(Me,{children:e.jsxs(oe,{children:[e.jsx(E,{children:e.jsxs(O,{isActive:a("/sites"),render:e.jsx(A,{to:"/sites"}),children:[e.jsx(J,{}),e.jsx("span",{children:"Sites"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/activity"),render:e.jsx(A,{to:"/activity"}),children:[e.jsx($e,{}),e.jsx("span",{children:"Activity"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/studio/members"),render:e.jsx(A,{to:"/studio/members"}),children:[e.jsx(ce,{}),e.jsx("span",{children:"Members"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/studio/integrations"),render:e.jsx(A,{to:"/studio/integrations"}),children:[e.jsx(Be,{}),e.jsx("span",{children:"Integrations"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:n==="/studio",render:e.jsx(A,{to:"/studio"}),children:[e.jsx(Fe,{}),e.jsx("span",{children:"General"})]})})]})})]})]}),e.jsx(_n,{children:e.jsxs(oe,{children:[e.jsx(E,{children:e.jsxs(O,{render:e.jsx("a",{href:Je,target:"_blank",rel:"noreferrer"}),children:[e.jsx(Ue,{}),e.jsx("span",{children:"Docs"}),e.jsx(X,{className:"ml-auto size-3.5 text-muted-foreground"})]})}),e.jsx(E,{children:e.jsx(Yn,{})}),e.jsx(E,{children:e.jsx(Wn,{me:t})})]})})]})}function Kn({me:t,site:s}){const n=ge();return e.jsxs(he,{children:[e.jsxs(xe,{render:e.jsx("button",{type:"button",className:"mb-1 flex h-[34px] w-full items-center justify-between rounded-md border border-border bg-card px-2.5 text-[13px] font-semibold text-foreground","aria-label":"Switch site"}),children:[e.jsx("span",{className:"truncate",children:s?.name??"No sites yet"}),e.jsx(qe,{className:"size-3.5 text-muted-foreground"})]}),e.jsxs(me,{align:"start",className:"w-[240px]",children:[e.jsxs(He,{children:[e.jsx(de,{children:"Sites"}),t.projects.map(a=>e.jsxs(_,{onClick:()=>void n({to:"/s/$site/comments",params:{site:a.uid}}),children:[e.jsx(J,{}),e.jsx("span",{className:"truncate",children:a.name}),a.uid===s?.uid&&e.jsx("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"current"})]},a.uid))]}),e.jsx(Q,{}),e.jsxs(_,{onClick:()=>void n({to:"/sites",search:{add:!0}}),children:[e.jsx(Ts,{}),"Add a site"]}),e.jsxs(_,{onClick:()=>void n({to:"/sites"}),children:[e.jsx(J,{}),"All sites"]})]})]})}function Yn(){const t=Ie(jt.meta()),s=t.data?.version??"",[n,a]=r.useState({state:"idle"}),o=async()=>{a({state:"checking"});try{a({state:"done",result:await ks(s)})}catch{a({state:"failed"})}};return e.jsxs(he,{children:[e.jsxs(xe,{render:e.jsx(O,{}),children:[e.jsx(Hs,{}),e.jsx("span",{children:"Help"})]}),e.jsxs(me,{align:"start",side:"top",className:"w-[240px]",children:[e.jsxs(_,{render:e.jsx("a",{href:Je,target:"_blank",rel:"noreferrer"}),children:[e.jsx(Ue,{}),"Docs",e.jsx(X,{className:"ml-auto size-3 text-muted-foreground"})]}),e.jsxs(_,{render:e.jsx("a",{href:Fn,target:"_blank",rel:"noreferrer"}),children:["Changelog",e.jsx(X,{className:"ml-auto size-3 text-muted-foreground"})]}),t.data?.sourceUrl&&e.jsxs(_,{render:e.jsx("a",{href:t.data.sourceUrl,target:"_blank",rel:"noreferrer"}),children:["Source · AGPL",e.jsx(X,{className:"ml-auto size-3 text-muted-foreground"})]}),e.jsx(Q,{}),e.jsxs("div",{className:"px-2 py-1.5 text-[12px] text-muted-foreground",children:["Snagset ",s||"—",n.state==="idle"&&e.jsxs(e.Fragment,{children:[" · ",e.jsx("button",{type:"button",className:"text-brand hover:underline",onClick:()=>void o(),children:"Check for updates"})]}),n.state==="checking"&&" · checking…",n.state==="failed"&&" · could not reach npm",n.state==="done"&&n.result&&e.jsxs(e.Fragment,{children:[" · ",n.result.newer?e.jsxs("a",{href:qn,target:"_blank",rel:"noreferrer",className:"text-brand hover:underline",children:[n.result.latest," is out — how to upgrade"]}):"up to date"]})]})]})]})}function Wn({me:t}){const s=ge(),n=xt(),[a,o]=r.useState(mt),g=t.user.name||t.user.email,d=t.user.name?t.user.email:t.user.role,l=async()=>{await Oe.logout().catch(()=>{}),vt("out"),n.clear(),s({to:"/sign-in",replace:!0})};return e.jsxs(he,{children:[e.jsxs(xe,{render:e.jsx(O,{size:"lg"}),children:[e.jsx(js,{className:"size-8 rounded-full",children:e.jsx(ys,{className:"bg-primary text-[12px] font-semibold text-primary-foreground",children:Cs(t.user.name,t.user.email)})}),e.jsxs("div",{className:"min-w-0 flex-1 text-left leading-tight",children:[e.jsx("div",{className:"truncate text-[13px] font-semibold",children:g}),e.jsx("div",{className:"truncate text-[11.5px] text-muted-foreground",children:d})]}),e.jsx(qe,{className:"size-3.5 text-muted-foreground"})]}),e.jsxs(me,{align:"start",side:"top",className:"w-[250px]",children:[e.jsx(He,{children:e.jsxs(de,{className:"flex flex-col",children:[e.jsx("span",{className:"text-[13px] font-semibold",children:g}),e.jsx("span",{className:"text-[11.5px] font-normal text-muted-foreground",children:t.user.name?`${t.user.email} · ${t.user.role}`:t.user.role})]})}),e.jsx(Q,{}),e.jsxs(vs,{value:a,onValueChange:h=>{const c=h;bt(c),o(c)},children:[e.jsx(de,{children:"Theme"}),e.jsxs(ne,{value:"system",children:[e.jsx(Ns,{}),"System"]}),e.jsxs(ne,{value:"light",children:[e.jsx(Ps,{}),"Light"]}),e.jsxs(ne,{value:"dark",children:[e.jsx(Rs,{}),"Dark"]})]}),e.jsx(Q,{}),e.jsxs(_,{onClick:()=>void s({to:"/you"}),children:[e.jsx(Ge,{}),"You"]}),e.jsxs(_,{onClick:()=>void l(),children:[e.jsx(Ls,{}),"Sign out"]})]})]})}function Xn({onSearch:t}){const n=ht().map(a=>a.loaderData?.crumb).filter(a=>typeof a=="string"&&a.length>0);return e.jsxs("div",{className:"flex h-12 shrink-0 items-center gap-2.5 border-b border-border/60 px-4",children:[e.jsx(In,{className:"-ml-1"}),e.jsx("nav",{"aria-label":"Breadcrumb",className:"flex items-center gap-2 text-[13.5px] font-medium text-muted-foreground",children:n.map((a,o)=>e.jsxs("span",{className:"flex items-center gap-2",children:[o>0&&e.jsx("span",{className:"text-line-strong",children:"/"}),e.jsx("span",{className:o===n.length-1?"text-foreground":void 0,children:a})]},o))}),e.jsx("div",{className:"flex-1"}),e.jsxs("button",{type:"button",onClick:t,"aria-label":"Search and go",className:"flex h-7 items-center gap-2 rounded-md border border-border bg-card px-2 text-[12.5px] text-muted-foreground",children:[e.jsx(_e,{className:"size-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:"Search"}),e.jsx("kbd",{className:"hidden rounded border border-border px-1 font-mono text-[11px] sm:inline",children:"⌘K"})]})]})}const ba=()=>e.jsx(Gn,{children:e.jsx(yt,{})});export{ba as component};
56
+ */const Gs=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Ge=I("user",Gs),ae=768;function Vs(){const[t,s]=r.useState(void 0);return r.useEffect(()=>{const n=window.matchMedia(`(max-width: ${ae-1}px)`),a=()=>{s(window.innerWidth<ae)};return n.addEventListener("change",a),s(window.innerWidth<ae),()=>n.removeEventListener("change",a)},[]),!!t}const Ks=r.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new St,currentIdRef:{current:null},currentContextRef:{current:null}});function Ys(t,s){t.current=s.current}function Ws(t,s={open:!1}){const{open:n}=s,a="rootStore"in t?t.rootStore:t,o=a.useState("floatingId"),g=r.useContext(Ks),{currentIdRef:d,delayRef:l,timeoutMs:h,initialDelayRef:c,currentContextRef:f,hasProvider:v,timeout:x}=g,[y,p]=r.useState(!1),S=r.useRef(n);return z(()=>{S.current=n},[n]),z(()=>{function u(){f.current?.setIsInstantPhase(!1),d.current=null,f.current=null,l.current=c.current,x.clear()}if(d.current&&!n&&d.current===o){if(p(!1),h){const m=o;return x.start(h,()=>{a.select("open")||d.current&&d.current!==m||u()}),()=>{(S.current||d.current!==m)&&x.clear()}}u()}},[n,o,d,l,h,c,f,x,a]),z(()=>{if(!n)return;const u=f.current,m=d.current;x.clear(),f.current={onOpenChange:a.setOpen,setIsInstantPhase:p},d.current=o,l.current={open:0,close:le(c.current,"close")},m!==null&&m!==o?(p(!0),u?.setIsInstantPhase(!0),u?.onOpenChange(!1,B(Ae))):(p(!1),u?.setIsInstantPhase(!1))},[n,o,a,d,l,c,f,x]),z(()=>()=>{if(d.current===o){if(f.current=null,!S.current)return;d.current=null,Ys(l,c),x.clear()}},[f,d,l,o,c,x]),r.useMemo(()=>({hasProvider:v,delayRef:l,isInstantPhase:y}),[v,l,y])}function Xs(t,s){let n=null,a=null,o=!1;return{contextElement:t||void 0,getBoundingClientRect(){const g=t?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},d=s.axis==="x"||s.axis==="both",l=s.axis==="y"||s.axis==="both",h=["mouseenter","mousemove"].includes(s.dataRef.current.openEvent?.type||"")&&s.pointerType!=="touch";let c=g.width,f=g.height,v=g.x,x=g.y;return n==null&&s.x&&d&&(n=g.x-s.x),a==null&&s.y&&l&&(a=g.y-s.y),v-=n||0,x-=a||0,c=0,f=0,!o||h?(c=s.axis==="y"?g.width:0,f=s.axis==="x"?g.height:0,v=d&&s.x!=null?s.x:v,x=l&&s.y!=null?s.y:x):o&&!h&&(f=s.axis==="x"?g.height:f,c=s.axis==="y"?g.width:c),o=!0,{width:c,height:f,x:v,y:x,top:x,right:v+c,bottom:x+f,left:v}}}}function Te(t){return t!=null&&t.clientX!=null}function Qs(t,s={}){const{enabled:n=!0,axis:a="both"}=s,o="rootStore"in t?t.rootStore:t,g=o.useState("open"),d=o.useState("floatingElement"),l=o.useState("domReferenceElement"),h=o.context.dataRef,c=r.useRef(!1),f=r.useRef(null),[v,x]=r.useState(),[y,p]=r.useState([]),S=te(b=>{o.set("positionReference",b)}),u=te((b,j,P)=>{c.current||h.current.openEvent&&!Te(h.current.openEvent)||o.set("positionReference",Xs(P??l,{x:b,y:j,axis:a,dataRef:h,pointerType:v}))}),m=te(b=>{g?f.current||(u(b.clientX,b.clientY,b.currentTarget),p([])):u(b.clientX,b.clientY,b.currentTarget)}),k=De(v)?d:g;r.useEffect(()=>{if(!n){S(l);return}if(!k)return;function b(){f.current?.(),f.current=null}const j=dt(d);function P(i){const T=os(i);ie(d,T)?b():u(i.clientX,i.clientY)}return!h.current.openEvent||Te(h.current.openEvent)?f.current=wt(j,"mousemove",P):S(l),b},[k,n,d,h,l,o,u,S,y]),r.useEffect(()=>()=>{o.set("positionReference",null)},[o]),r.useEffect(()=>{n&&!d&&(c.current=!1)},[n,d]),r.useEffect(()=>{!n&&g&&(c.current=!0)},[n,g]);const C=r.useMemo(()=>{function b(j){x(j.pointerType)}return{onPointerDown:b,onPointerEnter:b,onMouseMove:m,onMouseEnter:m}},[m]);return r.useMemo(()=>n?{reference:C,trigger:C}:{},[n,C])}function Js({...t}){return e.jsx(Ct,{"data-slot":"sheet",...t})}function Zs({...t}){return e.jsx(Mt,{"data-slot":"sheet-portal",...t})}function en({className:t,...s}){return e.jsx(Et,{"data-slot":"sheet-overlay",className:w("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",t),...s})}function tn({className:t,children:s,side:n="right",showCloseButton:a=!0,...o}){return e.jsxs(Zs,{children:[e.jsx(en,{}),e.jsxs(kt,{"data-slot":"sheet-content","data-side":n,className:w("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",t),...o,children:[s,a&&e.jsxs(Tt,{"data-slot":"sheet-close",render:e.jsx(Ee,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[e.jsx(Nt,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function sn({className:t,...s}){return e.jsx("div",{"data-slot":"sheet-header",className:w("flex flex-col gap-0.5 p-4",t),...s})}function nn({className:t,...s}){return e.jsx(Pt,{"data-slot":"sheet-title",className:w("font-heading text-base font-medium text-foreground",t),...s})}function an({className:t,...s}){return e.jsx(Rt,{"data-slot":"sheet-description",className:w("text-sm text-muted-foreground",t),...s})}const Ve=r.createContext(void 0);function V(t){const s=r.useContext(Ve);if(s===void 0&&!t)throw new Error(Z(72));return s}const on={...It,disabled:t=>t.disabled,instantType:t=>t.instantType,isInstantPhase:t=>t.isInstantPhase,trackCursorAxis:t=>t.trackCursorAxis,disableHoverablePopup:t=>t.disableHoverablePopup,lastOpenChangeReason:t=>t.openChangeReason,closeOnClick:t=>t.closeOnClick,closeDelay:t=>t.closeDelay,adaptiveOrigin:t=>t.adaptiveOrigin};class rn extends Ot{constructor(s,n,a){const o=new Ht;super(ln(s,o,n,a),dn(o),on)}setOpen=(s,n)=>{Dt(this,s,n,{extraState:{openChangeReason:n.reason}})};cancelPendingOpen(s){this.state.floatingRootContext.dispatchOpenChange(!1,B(rs,s))}}function ln(t,s,n,a=!1){const o={...At(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...t};return o.floatingRootContext=_t(s,n,a),o}function dn(t){return{popupRef:r.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:t}}const cn=zt(function(s){const{disabled:n=!1,defaultOpen:a=!1,open:o,disableHoverablePopup:g=!1,trackCursorAxis:d="none",actionsRef:l,onOpenChange:h,onOpenChangeComplete:c,handle:f,triggerId:v,defaultTriggerId:x=null,children:y}=s,p=Lt(($,U)=>new rn({open:a,openProp:o,activeTriggerId:x,triggerIdProp:v},$,U));p.useControlledProp("openProp",o),p.useControlledProp("triggerIdProp",v),p.useContextCallback("onOpenChange",h),p.useContextCallback("onOpenChangeComplete",c);const S=p.useState("open"),u=!n&&S,m=p.useState("activeTriggerId"),k=p.useState("mounted"),C=p.useState("payload");p.useSyncedValues({trackCursorAxis:d,disableHoverablePopup:g,disabled:n}),$t(p,{closeOnActiveTriggerUnmount:!0});const{forceUnmount:b,transitionStatus:j}=Bt(u,p),P=p.useState("isInstantPhase"),i=p.useState("instantType"),T=p.useState("lastOpenChangeReason"),R=r.useRef(null);z(()=>{S&&n&&p.setOpen(!1,B(is))},[S,n,p]),z(()=>{j==="ending"&&T===Ae||j!=="ending"&&P?(i!=="delay"&&(R.current=i),p.set("instantType","delay")):R.current!==null&&(p.set("instantType",R.current),R.current=null)},[j,P,T,i,p]),z(()=>{u&&m==null&&p.set("payload",void 0)},[p,m,u]),r.useImperativeHandle(l,()=>({unmount:b,close:()=>p.setOpen(!1,B(ls))}),[b,p]);const L=u||k||!n&&d!=="none";return e.jsxs(Ve.Provider,{value:p,children:[f&&e.jsx(Ut,{handle:f,store:p}),L&&e.jsx(un,{store:p,disabled:n,trackCursorAxis:d}),typeof y=="function"?y({payload:C}):y]})});function un({store:t,disabled:s,trackCursorAxis:n}){const a=t.useState("floatingRootContext"),o=Ft(a,{enabled:!s,referencePress:()=>t.select("closeOnClick")}),g=Qs(a,{enabled:!s&&n!=="none",axis:n==="none"?void 0:n}),d=r.useMemo(()=>pe(g.reference,o.reference),[g.reference,o.reference]);return qt(t,{activeTriggerProps:d,inactiveTriggerProps:d,popupProps:o.floating??ct}),null}const pn=r.createContext(void 0);function fn(){return r.useContext(pn)}const Ne=600,Ke="data-base-ui-tooltip-trigger";function Pe(t){if("composedPath"in t){const n=t.composedPath();for(let a=0;a<n.length;a+=1){const o=n[a];if(re(o))return o}}const s=t.target;return re(s)?s:null}function gn(t){let s=t;for(;s;){const n=s.closest(`[${Ke}]`);if(n)return n;const a=s.getRootNode();s="host"in a&&re(a.host)?a.host:null}return null}const hn=Gt(function(s,n){const{render:a,className:o,style:g,handle:d,payload:l,disabled:h,delay:c,closeOnClick:f=!0,closeDelay:v,id:x,...y}=s,p=V(!0),u=cs(d)??p;if(!u)throw new Error(Z(82));const m=ds(x),k=u.useState("isTriggerActive",m),C=u.useState("isOpenedByTrigger",m),b=u.useState("floatingRootContext"),j=r.useRef(null),P=c??Ne,i=v??0,{registerTrigger:T,isMountedByThisTrigger:R}=Vt(m,j,u,{payload:l,closeOnClick:f,closeDelay:i}),L=fn(),{delayRef:$,isInstantPhase:U,hasProvider:M}=Ws(b,{open:C}),F=us(b);u.useSyncedValue("isInstantPhase",U);const ee=u.useState("disabled"),q=h??ee,ve=Kt(q),je=u.useState("trackCursorAxis"),Ze=u.useState("disableHoverablePopup"),G=r.useRef(!1),K=Yt(),Y=r.useRef(void 0);function ye(){return M?le($.current,"open")===0?0:c??L??Ne:P}function Se(N){const D=j.current;if(!D||!N)return!1;const H=gn(N);return H!==null&&H!==D&&ie(D,H)}function et(N){const D=Se(N);return G.current=D,D&&(F.openChangeTimeout.clear(),F.restTimeout.clear(),F.restTimeoutPending=!1,K.clear()),D}const tt=ps(b,{enabled:!q,mouseOnly:!0,move:!1,handleClose:!Ze&&je!=="both"?fs():null,restMs:ye,delay(){return v==null&&M?{close:le($.current,"close")}:{close:i}},triggerElementRef:j,isActiveTrigger:k,isClosing:()=>u.select("transitionStatus")==="ending",shouldOpen(){return!G.current}}),st=gs(b,{enabled:!q}).reference,nt=N=>{const D=G.current,H=Pe(N),we=et(H),W=j.current,ot=W&&H&&ie(W,H);if(we&&u.select("open")&&u.select("lastOpenChangeReason")===se){u.setOpen(!1,B(se,N));return}if(D&&!we&&ot&&!ve.current&&!u.select("open")&&W&&De(Y.current)){const Ce=()=>{!G.current&&!ve.current&&!u.select("open")&&u.setOpen(!0,B(se,N,W))},ke=ye();ke===0?(K.clear(),Ce()):K.start(ke,Ce)}},at=u.useState("triggerProps",R);return fe("button",s,{state:{open:C},ref:[n,T,j],props:[tt,st,R||je!=="none"?at:void 0,{onMouseOver(N){nt(N.nativeEvent)},onFocus(N){Se(Pe(N.nativeEvent))&&N.preventBaseUIHandler()},onMouseLeave(){G.current=!1,K.clear(),Y.current=void 0},onPointerEnter(N){Y.current=N.pointerType},onPointerDown(N){Y.current=N.pointerType,u.set("closeOnClick",f),f&&!u.select("open")&&u.cancelPendingOpen(N.nativeEvent)},onClick(N){f&&!u.select("open")&&u.cancelPendingOpen(N.nativeEvent)},id:m,"data-trigger-disabled":q?"":void 0,[Ke]:q?void 0:""},y],stateAttributesMapping:Wt})}),Ye=r.createContext(void 0);function xn(){const t=r.useContext(Ye);if(t===void 0)throw new Error(Z(70));return t}const mn=r.forwardRef(function(s,n){const{children:a,container:o,className:g,render:d,style:l,...h}=s,{node:c,subtree:f}=Xt({container:o,ref:n,componentProps:s,elementProps:h});return!f&&!c?null:e.jsxs(r.Fragment,{children:[f,c&&ut.createPortal(a,c)]})}),bn=r.forwardRef(function(s,n){const{keepMounted:a=!1,...o}=s;return V().useState("mounted")||a?e.jsx(Ye.Provider,{value:a,children:e.jsx(mn,{ref:n,...o})}):null}),We=r.createContext(void 0);function Xe(){const t=r.useContext(We);if(t===void 0)throw new Error(Z(71));return t}const vn=r.forwardRef(function(s,n){const{render:a,className:o,anchor:g,positionMethod:d="absolute",side:l="top",align:h="center",sideOffset:c=0,alignOffset:f=0,collisionBoundary:v="clipping-ancestors",collisionPadding:x=5,arrowPadding:y=5,sticky:p=!1,disableAnchorTracking:S=!1,collisionAvoidance:u=Qt,style:m,...k}=s,C=V(),b=xn(),j=C.useState("open"),P=C.useState("mounted"),i=C.useState("trackCursorAxis"),T=C.useState("disableHoverablePopup"),R=C.useState("floatingRootContext"),L=C.useState("instantType"),$=C.useState("transitionStatus"),U=C.useState("adaptiveOrigin"),M=hs({anchor:g,positionMethod:d,floatingRootContext:R,mounted:P,side:l,sideOffset:c,align:h,alignOffset:f,collisionBoundary:v,collisionPadding:x,sticky:p,arrowPadding:y,disableAnchorTracking:S,keepMounted:b,collisionAvoidance:u,adaptiveOrigin:U}),F=r.useMemo(()=>({open:j,side:M.side,align:M.align,anchorHidden:M.anchorHidden,instant:i!=="none"?"tracking-cursor":L}),[j,M.side,M.align,M.anchorHidden,i,L]),ee=xs(s,F,{styles:M.positionerStyles,transitionStatus:$,props:k,refs:[n,C.useStateSetter("positionerElement")],hidden:!P,inert:!j||i==="both"||T});return e.jsx(We.Provider,{value:M,children:ee})}),jn=r.forwardRef(function(s,n){const{render:a,className:o,style:g,...d}=s,l=V(),{side:h,align:c}=Xe(),f=l.useState("open"),v=l.useState("instantType"),x=l.useState("transitionStatus"),y=l.useState("popupProps"),p=l.useState("floatingRootContext"),S=l.useState("disabled"),u=l.useState("closeDelay");Jt({open:f,ref:l.context.popupRef,onComplete(){f&&l.context.onOpenChangeComplete?.(!0)}}),ms(p,{enabled:!S,closeDelay:u});const m=l.useStateSetter("popupElement");return fe("div",s,{state:{open:f,side:h,align:c,instant:v,transitionStatus:x},ref:[n,l.context.popupRef,m],props:[Zt,y,bs(x),d],stateAttributesMapping:es})}),yn=r.forwardRef(function(s,n){const{render:a,className:o,style:g,...d}=s,l=V(),{arrowRef:h,side:c,align:f,arrowUncentered:v,arrowStyles:x}=Xe(),y=l.useState("open"),p=l.useState("instantType");return fe("div",s,{state:{open:y,side:c,align:f,uncentered:v,instant:p},ref:[n,h],props:[{style:x,"aria-hidden":!0},d],stateAttributesMapping:ts})});function Sn({...t}){return e.jsx(cn,{"data-slot":"tooltip",...t})}function wn({...t}){return e.jsx(hn,{"data-slot":"tooltip-trigger",...t})}function Cn({className:t,side:s="top",sideOffset:n=4,align:a="center",alignOffset:o=0,children:g,...d}){return e.jsx(bn,{children:e.jsx(vn,{align:a,alignOffset:o,side:s,sideOffset:n,className:"isolate z-50",children:e.jsxs(jn,{"data-slot":"tooltip-content",className:w("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...d,children:[g,e.jsx(yn,{className:"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}const kn="sidebar_state",Tn=3600*24*7,Nn="16rem",Pn="18rem",Rn="3rem",Mn="b",Qe=r.createContext(null);function be(){const t=r.useContext(Qe);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function En({defaultOpen:t=!0,open:s,onOpenChange:n,className:a,style:o,children:g,...d}){const l=Vs(),[h,c]=r.useState(!1),[f,v]=r.useState(t),x=s??f,y=r.useCallback(m=>{const k=typeof m=="function"?m(x):m;n?n(k):v(k),document.cookie=`${kn}=${k}; path=/; max-age=${Tn}`},[n,x]),p=r.useCallback(()=>l?c(m=>!m):y(m=>!m),[l,y,c]);r.useEffect(()=>{const m=k=>{k.key===Mn&&(k.metaKey||k.ctrlKey)&&(k.preventDefault(),p())};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[p]);const S=x?"expanded":"collapsed",u=r.useMemo(()=>({state:S,open:x,setOpen:y,isMobile:l,openMobile:h,setOpenMobile:c,toggleSidebar:p}),[S,x,y,l,h,c,p]);return e.jsx(Qe.Provider,{value:u,children:e.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":Nn,"--sidebar-width-icon":Rn,...o},className:w("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",a),...d,children:g})})}function On({side:t="left",variant:s="sidebar",collapsible:n="offcanvas",className:a,children:o,dir:g,...d}){const{isMobile:l,state:h,openMobile:c,setOpenMobile:f}=be();return n==="none"?e.jsx("div",{"data-slot":"sidebar",className:w("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",a),...d,children:o}):l?e.jsx(Js,{open:c,onOpenChange:f,...d,children:e.jsxs(tn,{dir:g,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":Pn},side:t,children:[e.jsxs(sn,{className:"sr-only",children:[e.jsx(nn,{children:"Sidebar"}),e.jsx(an,{children:"Displays the mobile sidebar."})]}),e.jsx("div",{className:"flex h-full w-full flex-col",children:o})]})}):e.jsxs("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":h,"data-collapsible":h==="collapsed"?n:"","data-variant":s,"data-side":t,"data-slot":"sidebar",children:[e.jsx("div",{"data-slot":"sidebar-gap",className:w("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",s==="floating"||s==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),e.jsx("div",{"data-slot":"sidebar-container","data-side":t,className:w("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",s==="floating"||s==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",a),...d,children:e.jsx("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",children:o})})]})}function In({className:t,onClick:s,...n}){const{toggleSidebar:a}=be();return e.jsxs(Ee,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:w(t),onClick:o=>{s?.(o),a()},...n,children:[e.jsx(Us,{}),e.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function Dn({className:t,...s}){return e.jsx("main",{"data-slot":"sidebar-inset",className:w("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",t),...s})}function An({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:w("flex flex-col gap-2 p-2",t),...s})}function _n({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:w("flex flex-col gap-2 p-2",t),...s})}function Hn({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:w("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden",t),...s})}function Re({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:w("relative flex w-full min-w-0 flex-col p-2",t),...s})}function zn({className:t,render:s,...n}){return ze({defaultTagName:"div",props:pe({className:w("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",t)},n),render:s,state:{slot:"sidebar-group-label",sidebar:"group-label"}})}function Me({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:w("w-full text-sm",t),...s})}function oe({className:t,...s}){return e.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:w("flex w-full min-w-0 flex-col gap-0",t),...s})}function E({className:t,...s}){return e.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:w("group/menu-item relative",t),...s})}const Ln=pt("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function O({render:t,isActive:s=!1,variant:n="default",size:a="default",tooltip:o,className:g,...d}){const{isMobile:l,state:h}=be(),c=ze({defaultTagName:"button",props:pe({className:w(Ln({variant:n,size:a}),g)},d),render:o?e.jsx(wn,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:a,active:s}});return o?(typeof o=="string"&&(o={children:o}),e.jsxs(Sn,{children:[c,e.jsx(Cn,{side:"right",align:"center",hidden:h!=="collapsed"||l,...o})]})):c}function $n({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-menu-badge","data-sidebar":"menu-badge",className:w("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground",t),...s})}function Bn({open:t,onOpenChange:s}){const n=Le(),a=ge(),[o,g]=r.useState(""),[d,l]=r.useState(0),h=r.useRef(null),c=o.trim(),[f,v]=r.useState("");r.useEffect(()=>{const i=setTimeout(()=>v(c),180);return()=>clearTimeout(i)},[c]);const x=Ie({queryKey:["activity","search",f],queryFn:()=>Oe.activity({q:f,status:"all",limit:8}),enabled:t&&f.length>=2,staleTime:3e4});r.useEffect(()=>{t||(g(""),l(0))},[t]);const y=r.useMemo(()=>[{id:"s:sites",label:"Sites",icon:e.jsx(J,{className:"size-4"}),go:()=>void a({to:"/sites"})},{id:"s:activity",label:"Activity",hint:"every site, newest first",icon:e.jsx($e,{className:"size-4"}),go:()=>void a({to:"/activity"})},{id:"s:members",label:"Members",icon:e.jsx(ce,{className:"size-4"}),go:()=>void a({to:"/studio/members"})},{id:"s:integrations",label:"Integrations",icon:e.jsx(Be,{className:"size-4"}),go:()=>void a({to:"/studio/integrations"})},{id:"s:studio",label:"Studio settings",icon:e.jsx(Fe,{className:"size-4"}),go:()=>void a({to:"/studio"})},{id:"s:you",label:"You",icon:e.jsx(Ge,{className:"size-4"}),go:()=>void a({to:"/you"})}],[a]),p=r.useMemo(()=>n.projects.map(i=>({id:`p:${i.uid}`,label:i.name,hint:i.unresolved>0?`${i.unresolved} open`:"nothing open",icon:e.jsx(ue,{className:"size-4"}),go:()=>void a({to:"/s/$site/comments",params:{site:i.uid}})})),[n.projects,a]),S=i=>!c||i.toLowerCase().includes(c.toLowerCase()),u=[],m=p.filter(i=>S(i.label)),k=y.filter(i=>S(i.label));m.length&&u.push({title:"Sites",items:m}),k.length&&u.push({title:"Go to",items:k});const C=(x.data?.data??[]).map(i=>({id:`t:${i.id}`,label:i.latest?.body?.trim()||i.route,hint:`${i.site.name} · ${ws(i.status)?Ss[i.status]:i.status} · ${i.key}`,icon:e.jsx(ue,{className:"size-4"}),go:()=>void a({to:"/s/$site/comments",params:{site:i.site.uid},search:{thread:i.key}})}));C.length&&u.push({title:"Comments",items:C});const b=u.flatMap(i=>i.items),j=Math.min(d,Math.max(0,b.length-1)),P=i=>{i&&(s(!1),i.go())};return r.useEffect(()=>{h.current?.querySelector(`[data-at="${j}"]`)?.scrollIntoView({block:"nearest"})},[j]),e.jsx(ss,{open:t,onOpenChange:s,children:e.jsxs(ns,{showCloseButton:!1,className:"top-[15%] max-h-[70dvh] translate-y-0 gap-0 overflow-hidden p-0 sm:max-w-lg",children:[e.jsx(as,{className:"sr-only",children:"Search and go"}),e.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-3",children:[e.jsx(_e,{className:"size-4 shrink-0 text-muted-foreground"}),e.jsx("input",{autoFocus:!0,value:o,onChange:i=>{g(i.target.value),l(0)},onKeyDown:i=>{i.key==="ArrowDown"?(i.preventDefault(),l(T=>Math.min(T+1,b.length-1))):i.key==="ArrowUp"?(i.preventDefault(),l(T=>Math.max(T-1,0))):i.key==="Enter"&&(i.preventDefault(),P(b[j]))},placeholder:"Go to a site or a screen, or search every comment…","aria-label":"Search and go",className:"h-11 w-full bg-transparent text-[14px] outline-none placeholder:text-muted-foreground"})]}),e.jsxs("div",{ref:h,className:"min-h-0 flex-1 overflow-auto py-1.5",children:[b.length===0&&e.jsx("p",{className:"m-0 px-3 py-6 text-center text-[13px] text-muted-foreground",children:x.isFetching?"Looking…":c?`Nothing matches “${c}”.`:"Nothing here."}),u.map(i=>e.jsxs("div",{children:[e.jsx("div",{className:"px-3 py-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:i.title}),i.items.map(T=>{const R=b.indexOf(T);return e.jsxs("button",{type:"button","data-at":R,onMouseMove:()=>l(R),onClick:()=>P(T),className:w("flex w-full items-center gap-2.5 border-0 bg-transparent px-3 py-2 text-left text-[13px] text-foreground",R===j&&"bg-muted"),children:[e.jsx("span",{className:"shrink-0 text-muted-foreground",children:T.icon}),e.jsx("span",{className:"min-w-0 flex-1 truncate",children:T.label}),T.hint&&e.jsx("span",{className:"shrink-0 text-[12px] text-muted-foreground",children:T.hint})]},T.id)})]},i.title)),x.isFetching&&b.length>0&&e.jsx("p",{className:"m-0 px-3 py-1.5 text-[12px] text-muted-foreground",children:"Searching every site…"})]})]})})}function Un(){const[t,s]=r.useState(!1);return r.useEffect(()=>{const n=a=>{a.key.toLowerCase()!=="k"||!(a.metaKey||a.ctrlKey)||(a.preventDefault(),s(o=>!o))};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[]),[t,s]}const Je="https://snagset.com/docs/",Fn="https://www.npmjs.com/package/@snagset/server?activeTab=versions",qn="https://snagset.com/docs/self-hosting/#upgrade";function Gn({children:t}){const s=Le(),n=ft(s),[a,o]=Un();return e.jsxs(En,{children:[e.jsx(Vn,{me:s,site:n}),e.jsxs(Dn,{className:"min-w-0",children:[e.jsx(Xn,{onSearch:()=>o(!0)}),e.jsx("div",{className:"min-h-0 flex-1",children:t})]}),e.jsx(Bn,{open:a,onOpenChange:o})]})}function Vn({me:t,site:s}){const n=Ms({select:o=>o.location.pathname}),a=o=>n===o||n.startsWith(o+"/");return e.jsxs(On,{children:[e.jsx(An,{className:"px-3 pb-1 pt-3",children:e.jsxs(A,{to:"/studio",className:"flex items-center gap-2.5 rounded-md px-1 py-0.5 text-foreground hover:bg-sidebar-accent","aria-label":`${t.org.name} — studio settings`,children:[e.jsx(gt,{size:20}),e.jsxs("span",{className:"min-w-0",children:[e.jsx("span",{className:"block truncate text-[14px] font-semibold leading-tight tracking-tight",children:t.org.name}),e.jsx("span",{className:"block truncate text-[11.5px] text-muted-foreground",children:location.host})]})]})}),e.jsxs(Hn,{children:[e.jsxs(Re,{children:[e.jsx(Kn,{me:t,site:s}),s&&e.jsx(Me,{children:e.jsxs(oe,{children:[e.jsxs(E,{children:[e.jsxs(O,{isActive:a(`/s/${s.uid}/comments`),render:e.jsx(A,{to:"/s/$site/comments",params:{site:s.uid}}),children:[e.jsx(ue,{}),e.jsx("span",{children:"Comments"})]}),s.unresolved>0&&e.jsx($n,{children:s.unresolved})]}),e.jsx(E,{children:e.jsxs(O,{isActive:a(`/s/${s.uid}/reviewers`),render:e.jsx(A,{to:"/s/$site/reviewers",params:{site:s.uid}}),children:[e.jsx(ce,{}),e.jsx("span",{children:"Reviewers"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a(`/s/${s.uid}/settings`),render:e.jsx(A,{to:"/s/$site/settings",params:{site:s.uid}}),children:[e.jsx(qs,{}),e.jsx("span",{children:"Settings"})]})})]})})]}),e.jsxs(Re,{children:[e.jsx(zn,{children:"Studio"}),e.jsx(Me,{children:e.jsxs(oe,{children:[e.jsx(E,{children:e.jsxs(O,{isActive:a("/sites"),render:e.jsx(A,{to:"/sites"}),children:[e.jsx(J,{}),e.jsx("span",{children:"Sites"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/activity"),render:e.jsx(A,{to:"/activity"}),children:[e.jsx($e,{}),e.jsx("span",{children:"Activity"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/studio/members"),render:e.jsx(A,{to:"/studio/members"}),children:[e.jsx(ce,{}),e.jsx("span",{children:"Members"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/studio/integrations"),render:e.jsx(A,{to:"/studio/integrations"}),children:[e.jsx(Be,{}),e.jsx("span",{children:"Integrations"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:n==="/studio",render:e.jsx(A,{to:"/studio"}),children:[e.jsx(Fe,{}),e.jsx("span",{children:"General"})]})})]})})]})]}),e.jsx(_n,{children:e.jsxs(oe,{children:[e.jsx(E,{children:e.jsxs(O,{render:e.jsx("a",{href:Je,target:"_blank",rel:"noreferrer"}),children:[e.jsx(Ue,{}),e.jsx("span",{children:"Docs"}),e.jsx(X,{className:"ml-auto size-3.5 text-muted-foreground"})]})}),e.jsx(E,{children:e.jsx(Yn,{})}),e.jsx(E,{children:e.jsx(Wn,{me:t})})]})})]})}function Kn({me:t,site:s}){const n=ge();return e.jsxs(he,{children:[e.jsxs(xe,{render:e.jsx("button",{type:"button",className:"mb-1 flex h-[34px] w-full items-center justify-between rounded-md border border-border bg-card px-2.5 text-[13px] font-semibold text-foreground","aria-label":"Switch site"}),children:[e.jsx("span",{className:"truncate",children:s?.name??"No sites yet"}),e.jsx(qe,{className:"size-3.5 text-muted-foreground"})]}),e.jsxs(me,{align:"start",className:"w-[240px]",children:[e.jsxs(He,{children:[e.jsx(de,{children:"Sites"}),t.projects.map(a=>e.jsxs(_,{onClick:()=>void n({to:"/s/$site/comments",params:{site:a.uid}}),children:[e.jsx(J,{}),e.jsx("span",{className:"truncate",children:a.name}),a.uid===s?.uid&&e.jsx("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"current"})]},a.uid))]}),e.jsx(Q,{}),e.jsxs(_,{onClick:()=>void n({to:"/sites",search:{add:!0}}),children:[e.jsx(Ts,{}),"Add a site"]}),e.jsxs(_,{onClick:()=>void n({to:"/sites"}),children:[e.jsx(J,{}),"All sites"]})]})]})}function Yn(){const t=Ie(jt.meta()),s=t.data?.version??"",[n,a]=r.useState({state:"idle"}),o=async()=>{a({state:"checking"});try{a({state:"done",result:await ks(s)})}catch{a({state:"failed"})}};return e.jsxs(he,{children:[e.jsxs(xe,{render:e.jsx(O,{}),children:[e.jsx(Hs,{}),e.jsx("span",{children:"Help"})]}),e.jsxs(me,{align:"start",side:"top",className:"w-[240px]",children:[e.jsxs(_,{render:e.jsx("a",{href:Je,target:"_blank",rel:"noreferrer"}),children:[e.jsx(Ue,{}),"Docs",e.jsx(X,{className:"ml-auto size-3 text-muted-foreground"})]}),e.jsxs(_,{render:e.jsx("a",{href:Fn,target:"_blank",rel:"noreferrer"}),children:["Changelog",e.jsx(X,{className:"ml-auto size-3 text-muted-foreground"})]}),t.data?.sourceUrl&&e.jsxs(_,{render:e.jsx("a",{href:t.data.sourceUrl,target:"_blank",rel:"noreferrer"}),children:["Source · AGPL",e.jsx(X,{className:"ml-auto size-3 text-muted-foreground"})]}),e.jsx(Q,{}),e.jsxs("div",{className:"px-2 py-1.5 text-[12px] text-muted-foreground",children:["Snagset ",s||"—",n.state==="idle"&&e.jsxs(e.Fragment,{children:[" · ",e.jsx("button",{type:"button",className:"text-brand hover:underline",onClick:()=>void o(),children:"Check for updates"})]}),n.state==="checking"&&" · checking…",n.state==="failed"&&" · could not reach npm",n.state==="done"&&n.result&&e.jsxs(e.Fragment,{children:[" · ",n.result.newer?e.jsxs("a",{href:qn,target:"_blank",rel:"noreferrer",className:"text-brand hover:underline",children:[n.result.latest," is out — how to upgrade"]}):"up to date"]})]})]})]})}function Wn({me:t}){const s=ge(),n=xt(),[a,o]=r.useState(mt),g=t.user.name||t.user.email,d=t.user.name?t.user.email:t.user.role,l=async()=>{await Oe.logout().catch(()=>{}),vt("out"),n.clear(),s({to:"/sign-in",replace:!0})};return e.jsxs(he,{children:[e.jsxs(xe,{render:e.jsx(O,{size:"lg"}),children:[e.jsx(js,{className:"size-8 rounded-full",children:e.jsx(ys,{className:"bg-primary text-[12px] font-semibold text-primary-foreground",children:Cs(t.user.name,t.user.email)})}),e.jsxs("div",{className:"min-w-0 flex-1 text-left leading-tight",children:[e.jsx("div",{className:"truncate text-[13px] font-semibold",children:g}),e.jsx("div",{className:"truncate text-[11.5px] text-muted-foreground",children:d})]}),e.jsx(qe,{className:"size-3.5 text-muted-foreground"})]}),e.jsxs(me,{align:"start",side:"top",className:"w-[250px]",children:[e.jsx(He,{children:e.jsxs(de,{className:"flex flex-col",children:[e.jsx("span",{className:"text-[13px] font-semibold",children:g}),e.jsx("span",{className:"text-[11.5px] font-normal text-muted-foreground",children:t.user.name?`${t.user.email} · ${t.user.role}`:t.user.role})]})}),e.jsx(Q,{}),e.jsxs(vs,{value:a,onValueChange:h=>{const c=h;bt(c),o(c)},children:[e.jsx(de,{children:"Theme"}),e.jsxs(ne,{value:"system",children:[e.jsx(Ns,{}),"System"]}),e.jsxs(ne,{value:"light",children:[e.jsx(Ps,{}),"Light"]}),e.jsxs(ne,{value:"dark",children:[e.jsx(Rs,{}),"Dark"]})]}),e.jsx(Q,{}),e.jsxs(_,{onClick:()=>void s({to:"/you"}),children:[e.jsx(Ge,{}),"You"]}),e.jsxs(_,{onClick:()=>void l(),children:[e.jsx(Ls,{}),"Sign out"]})]})]})}function Xn({onSearch:t}){const n=ht().map(a=>a.loaderData?.crumb).filter(a=>typeof a=="string"&&a.length>0);return e.jsxs("div",{className:"flex h-12 shrink-0 items-center gap-2.5 border-b border-border/60 px-4",children:[e.jsx(In,{className:"-ml-1"}),e.jsx("nav",{"aria-label":"Breadcrumb",className:"flex items-center gap-2 text-[13.5px] font-medium text-muted-foreground",children:n.map((a,o)=>e.jsxs("span",{className:"flex items-center gap-2",children:[o>0&&e.jsx("span",{className:"text-line-strong",children:"/"}),e.jsx("span",{className:o===n.length-1?"text-foreground":void 0,children:a})]},o))}),e.jsx("div",{className:"flex-1"}),e.jsxs("button",{type:"button",onClick:t,"aria-label":"Search and go",className:"flex h-7 items-center gap-2 rounded-md border border-border bg-card px-2 text-[12.5px] text-muted-foreground",children:[e.jsx(_e,{className:"size-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:"Search"}),e.jsx("kbd",{className:"hidden rounded border border-border px-1 font-mono text-[11px] sm:inline",children:"⌘K"})]})]})}const va=()=>e.jsx(Gn,{children:e.jsx(yt,{})});export{va as component};
@@ -1 +1 @@
1
- import{H as g,I as f,J as p,n as v,j as e,B as m,L as N,o as P}from"./index-C87aqO18.js";import{Q as j,u as y}from"./useBaseQuery-0OqUJMfc.js";import{P as b,S as w}from"./parts-B-HQayFH.js";import{b as S,c as R,S as E}from"./labels--UUyt9uB.js";import{u as F}from"./me-D1prnPpY.js";import"./card-8T0wnIiU.js";var k=class extends j{constructor(s,n){super(s,n)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(s){s._type="infinite",super.setOptions(s)}getOptimisticResult(s){return s._type="infinite",super.getOptimisticResult(s)}fetchNextPage(s){return this.fetch({...s,meta:{fetchMore:{direction:"forward"}}})}fetchPreviousPage(s){return this.fetch({...s,meta:{fetchMore:{direction:"backward"}}})}createResult(s,n){const{state:i}=s,l=super.createResult(s,n),{isFetching:o,isRefetching:r,isError:u,isRefetchError:d}=l,t=i.fetchMeta?.fetchMore?.direction,c=u&&t==="forward",a=o&&t==="forward",x=u&&t==="backward",h=o&&t==="backward";return{...l,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:f(n,i.data),hasPreviousPage:g(n,i.data),isFetchNextPageError:c,isFetchingNextPage:a,isFetchPreviousPageError:x,isFetchingPreviousPage:h,isRefetchError:d&&!c&&!x,isRefetching:r&&!a&&!h}}};function M(s,n){return y(s,k)}const A=[{value:"unresolved",label:"Needs attention"},...R.map(s=>({value:s,label:E[s]})),{value:"all",label:"Everything"}];function C(s,n=new Date){const i=new Date(s),l=r=>new Date(r.getFullYear(),r.getMonth(),r.getDate()).getTime(),o=Math.round((l(n)-l(i))/864e5);return o<=0?"Today":o===1?"Yesterday":o<7?i.toLocaleDateString(void 0,{weekday:"long"}):i.toLocaleDateString(void 0,{day:"numeric",month:"long"})}function I(){const s=F(),{status:n="unresolved",site:i}=p.useSearch(),l=v({from:"/activity"}),o=t=>void l({search:c=>({...c,...t}),replace:!0}),r=M({queryKey:["activity",n,i??null],queryFn:({pageParam:t})=>P.activity({status:n,...i?{site:i}:{},...t?{cursor:t}:{}}),initialPageParam:"",getNextPageParam:t=>t.nextCursor??void 0,refetchOnWindowFocus:!0}),u=r.data?.pages.flatMap(t=>t.data)??[],d=[];for(const t of u){const c=C(t.updatedAt),a=d[d.length-1];a?.day===c?a.rows.push(t):d.push({day:c,rows:[t]})}return e.jsxs("div",{className:"flex flex-col gap-5 p-7",children:[e.jsx(b,{title:"Activity",sub:`Every site, newest first${i?"":" — all of them"}`}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[A.map(t=>e.jsx(m,{size:"sm",variant:n===t.value?"default":"outline",onClick:()=>o({status:t.value}),children:t.label},t.value)),e.jsx("div",{className:"flex-1"}),e.jsxs("label",{className:"flex items-center gap-2 text-[13px] text-muted-foreground",children:["Site",e.jsxs("select",{"aria-label":"Site",value:i??"",onChange:t=>o({site:t.target.value||void 0}),className:"h-8 rounded-md border border-input bg-background px-2.5 text-[13px] text-foreground",children:[e.jsx("option",{value:"",children:"All sites"}),s.projects.map(t=>e.jsx("option",{value:t.uid,children:t.name},t.uid))]})]})]}),r.isPending&&e.jsx("p",{className:"m-0 text-[13px] text-muted-foreground",children:"Reading…"}),r.isError&&e.jsx("p",{className:"m-0 text-[13px] text-destructive",children:"Could not read the feed. Reload to try again."}),r.isSuccess&&u.length===0&&e.jsx("p",{className:"m-0 text-[13px] text-muted-foreground",children:n==="resolved"?"Nothing has been resolved yet — this is where finished comments go.":n==="unresolved"?"Nothing needs attention. Every comment on every site is resolved.":"No comments yet on any site."}),d.map(({day:t,rows:c})=>e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"m-0 text-[12px] font-medium uppercase tracking-wide text-muted-foreground",children:t}),e.jsx("ul",{className:"m-0 flex list-none flex-col gap-1.5 p-0",children:c.map(a=>e.jsx("li",{children:e.jsxs(N,{to:"/s/$site/comments",params:{site:a.site.uid},search:{thread:a.key},className:"flex flex-col gap-1 rounded-md border border-border px-3 py-2.5 no-underline transition-colors hover:bg-muted/60",children:[e.jsxs("span",{className:"flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[13px]",children:[e.jsx(w,{status:a.status}),e.jsx("span",{className:"font-medium text-foreground",children:a.site.name}),e.jsx("code",{className:"font-mono text-[12px] text-muted-foreground",children:a.route}),e.jsx("span",{className:"flex-1"}),e.jsx("span",{className:"text-[12px] text-muted-foreground",children:S(a.updatedAt)})]}),a.latest?.body&&e.jsxs("span",{className:"line-clamp-2 text-[13px] text-foreground",children:[e.jsxs("span",{className:"text-muted-foreground",children:[a.latest.author??a.createdBy.name,": "]}),a.latest.body]}),e.jsxs("span",{className:"flex flex-wrap items-center gap-x-2 text-[12px] text-muted-foreground",children:[e.jsx("span",{className:"font-mono",children:a.key}),e.jsx("span",{children:"·"}),e.jsxs("span",{children:[a.commentCount," ",a.commentCount===1?"comment":"comments"]}),a.assignee&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:a.assignee})]})]})]})},a.id))})]},t)),r.hasNextPage&&e.jsx("div",{children:e.jsx(m,{variant:"outline",size:"sm",disabled:r.isFetchingNextPage,onClick:()=>void r.fetchNextPage(),children:r.isFetchingNextPage?"Reading…":"Show older"})})]})}export{I as component};
1
+ import{H as g,I as f,J as p,n as v,j as e,B as m,L as N,o as P}from"./index-CqjuloQH.js";import{Q as j,u as y}from"./useBaseQuery-WjLRzhGh.js";import{P as b,S as w}from"./parts-DIo5a0tB.js";import{b as S,c as R,S as E}from"./labels--UUyt9uB.js";import{u as F}from"./me-DdTyFOSS.js";import"./card-ACZ3SoSc.js";var k=class extends j{constructor(s,n){super(s,n)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(s){s._type="infinite",super.setOptions(s)}getOptimisticResult(s){return s._type="infinite",super.getOptimisticResult(s)}fetchNextPage(s){return this.fetch({...s,meta:{fetchMore:{direction:"forward"}}})}fetchPreviousPage(s){return this.fetch({...s,meta:{fetchMore:{direction:"backward"}}})}createResult(s,n){const{state:i}=s,l=super.createResult(s,n),{isFetching:o,isRefetching:r,isError:u,isRefetchError:d}=l,t=i.fetchMeta?.fetchMore?.direction,c=u&&t==="forward",a=o&&t==="forward",x=u&&t==="backward",h=o&&t==="backward";return{...l,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:f(n,i.data),hasPreviousPage:g(n,i.data),isFetchNextPageError:c,isFetchingNextPage:a,isFetchPreviousPageError:x,isFetchingPreviousPage:h,isRefetchError:d&&!c&&!x,isRefetching:r&&!a&&!h}}};function M(s,n){return y(s,k)}const A=[{value:"unresolved",label:"Needs attention"},...R.map(s=>({value:s,label:E[s]})),{value:"all",label:"Everything"}];function C(s,n=new Date){const i=new Date(s),l=r=>new Date(r.getFullYear(),r.getMonth(),r.getDate()).getTime(),o=Math.round((l(n)-l(i))/864e5);return o<=0?"Today":o===1?"Yesterday":o<7?i.toLocaleDateString(void 0,{weekday:"long"}):i.toLocaleDateString(void 0,{day:"numeric",month:"long"})}function I(){const s=F(),{status:n="unresolved",site:i}=p.useSearch(),l=v({from:"/activity"}),o=t=>void l({search:c=>({...c,...t}),replace:!0}),r=M({queryKey:["activity",n,i??null],queryFn:({pageParam:t})=>P.activity({status:n,...i?{site:i}:{},...t?{cursor:t}:{}}),initialPageParam:"",getNextPageParam:t=>t.nextCursor??void 0,refetchOnWindowFocus:!0}),u=r.data?.pages.flatMap(t=>t.data)??[],d=[];for(const t of u){const c=C(t.updatedAt),a=d[d.length-1];a?.day===c?a.rows.push(t):d.push({day:c,rows:[t]})}return e.jsxs("div",{className:"flex flex-col gap-5 p-7",children:[e.jsx(b,{title:"Activity",sub:`Every site, newest first${i?"":" — all of them"}`}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[A.map(t=>e.jsx(m,{size:"sm",variant:n===t.value?"default":"outline",onClick:()=>o({status:t.value}),children:t.label},t.value)),e.jsx("div",{className:"flex-1"}),e.jsxs("label",{className:"flex items-center gap-2 text-[13px] text-muted-foreground",children:["Site",e.jsxs("select",{"aria-label":"Site",value:i??"",onChange:t=>o({site:t.target.value||void 0}),className:"h-8 rounded-md border border-input bg-background px-2.5 text-[13px] text-foreground",children:[e.jsx("option",{value:"",children:"All sites"}),s.projects.map(t=>e.jsx("option",{value:t.uid,children:t.name},t.uid))]})]})]}),r.isPending&&e.jsx("p",{className:"m-0 text-[13px] text-muted-foreground",children:"Reading…"}),r.isError&&e.jsx("p",{className:"m-0 text-[13px] text-destructive",children:"Could not read the feed. Reload to try again."}),r.isSuccess&&u.length===0&&e.jsx("p",{className:"m-0 text-[13px] text-muted-foreground",children:n==="resolved"?"Nothing has been resolved yet — this is where finished comments go.":n==="unresolved"?"Nothing needs attention. Every comment on every site is resolved.":"No comments yet on any site."}),d.map(({day:t,rows:c})=>e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"m-0 text-[12px] font-medium uppercase tracking-wide text-muted-foreground",children:t}),e.jsx("ul",{className:"m-0 flex list-none flex-col gap-1.5 p-0",children:c.map(a=>e.jsx("li",{children:e.jsxs(N,{to:"/s/$site/comments",params:{site:a.site.uid},search:{thread:a.key},className:"flex flex-col gap-1 rounded-md border border-border px-3 py-2.5 no-underline transition-colors hover:bg-muted/60",children:[e.jsxs("span",{className:"flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[13px]",children:[e.jsx(w,{status:a.status}),e.jsx("span",{className:"font-medium text-foreground",children:a.site.name}),e.jsx("code",{className:"font-mono text-[12px] text-muted-foreground",children:a.route}),e.jsx("span",{className:"flex-1"}),e.jsx("span",{className:"text-[12px] text-muted-foreground",children:S(a.updatedAt)})]}),a.latest?.body&&e.jsxs("span",{className:"line-clamp-2 text-[13px] text-foreground",children:[e.jsxs("span",{className:"text-muted-foreground",children:[a.latest.author??a.createdBy.name,": "]}),a.latest.body]}),e.jsxs("span",{className:"flex flex-wrap items-center gap-x-2 text-[12px] text-muted-foreground",children:[e.jsx("span",{className:"font-mono",children:a.key}),e.jsx("span",{children:"·"}),e.jsxs("span",{children:[a.commentCount," ",a.commentCount===1?"comment":"comments"]}),a.assignee&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:a.assignee})]})]})]})},a.id))})]},t)),r.hasNextPage&&e.jsx("div",{children:e.jsx(m,{variant:"outline",size:"sm",disabled:r.isFetchingNextPage,onClick:()=>void r.fetchNextPage(),children:r.isFetchingNextPage?"Reading…":"Show older"})})]})}export{I as component};
@@ -1,4 +1,4 @@
1
- import{c as o}from"./createLucideIcon-llnWWh0E.js";/**
1
+ import{c as o}from"./createLucideIcon-SQ1OtOty.js";/**
2
2
  * @license lucide-react v1.39.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{r as a,f as b,h as f,j as d,e as m}from"./index-C87aqO18.js";import{w as A}from"./dialog-DrrnCoT5.js";const x=a.createContext(void 0);function z(){const e=a.useContext(x);if(e===void 0)throw new Error(b(13));return e}const g={imageLoadingStatus:()=>null},R=a.forwardRef(function(t,r){const{className:v,render:p,style:s,...c}=t,[n,o]=a.useState("idle"),i={imageLoadingStatus:n},u=a.useMemo(()=>({imageLoadingStatus:n,setImageLoadingStatus:o}),[n,o]),l=f("span",t,{state:i,ref:r,props:c,stateAttributesMapping:g});return d.jsx(x.Provider,{value:u,children:l})}),k=a.forwardRef(function(t,r){const{className:v,render:p,delay:s=0,style:c,...n}=t,{imageLoadingStatus:o}=z(),[i,u]=a.useState(s===0),l=A();return a.useEffect(()=>(s>0?l.start(s,()=>u(!0)):u(!0),l.clear),[l,s]),f("span",t,{state:{imageLoadingStatus:o},ref:r,props:n,stateAttributesMapping:g,enabled:o!=="loaded"&&(s===0||i)})});function h({className:e,size:t="default",...r}){return d.jsx(R,{"data-slot":"avatar","data-size":t,className:m("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",e),...r})}function w({className:e,...t}){return d.jsx(k,{"data-slot":"avatar-fallback",className:m("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",e),...t})}export{h as A,w as a};
1
+ import{r as a,f as b,h as f,j as d,e as m}from"./index-CqjuloQH.js";import{w as A}from"./dialog-DC5ijHd-.js";const x=a.createContext(void 0);function z(){const e=a.useContext(x);if(e===void 0)throw new Error(b(13));return e}const g={imageLoadingStatus:()=>null},R=a.forwardRef(function(t,r){const{className:v,render:p,style:s,...c}=t,[n,o]=a.useState("idle"),i={imageLoadingStatus:n},u=a.useMemo(()=>({imageLoadingStatus:n,setImageLoadingStatus:o}),[n,o]),l=f("span",t,{state:i,ref:r,props:c,stateAttributesMapping:g});return d.jsx(x.Provider,{value:u,children:l})}),k=a.forwardRef(function(t,r){const{className:v,render:p,delay:s=0,style:c,...n}=t,{imageLoadingStatus:o}=z(),[i,u]=a.useState(s===0),l=A();return a.useEffect(()=>(s>0?l.start(s,()=>u(!0)):u(!0),l.clear),[l,s]),f("span",t,{state:{imageLoadingStatus:o},ref:r,props:n,stateAttributesMapping:g,enabled:o!=="loaded"&&(s===0||i)})});function h({className:e,size:t="default",...r}){return d.jsx(R,{"data-slot":"avatar","data-size":t,className:m("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",e),...r})}function w({className:e,...t}){return d.jsx(k,{"data-slot":"avatar-fallback",className:m("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",e),...t})}export{h as A,w as a};
@@ -1 +1 @@
1
- import{m as a,e as n,l as o}from"./index-C87aqO18.js";import{u as d}from"./useRender-dtgBGlgC.js";const s=o("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function v({className:r,variant:e="default",render:t,...i}){return d({defaultTagName:"span",props:a({className:n(s({variant:e}),r)},i),render:t,state:{slot:"badge",variant:e}})}export{v as B};
1
+ import{m as a,e as n,l as o}from"./index-CqjuloQH.js";import{u as d}from"./useRender-DW4lC-HO.js";const s=o("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function v({className:r,variant:e="default",render:t,...i}){return d({defaultTagName:"span",props:a({className:n(s({variant:e}),r)},i),render:t,state:{slot:"badge",variant:e}})}export{v as B};
@@ -1 +1 @@
1
- import{j as s,e as t}from"./index-C87aqO18.js";function c({className:a,size:d="default",...r}){return s.jsx("div",{"data-slot":"card","data-size":d,className:t("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...r})}export{c as C};
1
+ import{j as s,e as t}from"./index-CqjuloQH.js";function c({className:a,size:d="default",...r}){return s.jsx("div",{"data-slot":"card","data-size":d,className:t("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...r})}export{c as C};
@@ -1,4 +1,4 @@
1
- import{c}from"./createLucideIcon-llnWWh0E.js";/**
1
+ import{c}from"./createLucideIcon-SQ1OtOty.js";/**
2
2
  * @license lucide-react v1.39.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./createLucideIcon-llnWWh0E.js";/**
1
+ import{c as o}from"./createLucideIcon-SQ1OtOty.js";/**
2
2
  * @license lucide-react v1.39.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./createLucideIcon-llnWWh0E.js";/**
1
+ import{c}from"./createLucideIcon-SQ1OtOty.js";/**
2
2
  * @license lucide-react v1.39.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{aE as g,r as a,az as m,E as p}from"./index-C87aqO18.js";function w(e){return e?.ownerDocument||document}let i=0;function v(e,t="mui"){const[s,n]=a.useState(e),o=e||s;return a.useEffect(()=>{s==null&&(i+=1,n(`${t}-${i}`))},[s,t]),o}const l=g.useId;function E(e,t){if(l!==void 0){const s=l();return e??(t?`${t}-${s}`:s)}return v(e,t)}function I(e){return E(e,"base-ui")}function P(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function h(e,t){if(!e||!t)return!1;const s=t.getRootNode?.();if(e.contains(t))return!0;if(s&&m(s)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function R(e){return"composedPath"in e?e.composedPath()[0]:e.target}function C({controlled:e,default:t,name:s,state:n="value"}){const{current:o}=a.useRef(e!==void 0),[r,c]=a.useState(t),u=o?e:r,f=a.useCallback(d=>{o||c(d)},[]);return[u,f]}const S="none",D="trigger-press",N="trigger-hover",$="trigger-focus",k="outside-press",y="item-press",T="close-press",U="focus-out",A="escape-key",B="list-navigation",O="cancel-open",V="sibling-open",j="disabled",q="imperative-action";function z(e,t,s,n){let o=!1,r=!1;const c=n??p;return{reason:e,event:t??new Event("base-ui"),cancel(){o=!0},allowPropagation(){r=!0},get isCanceled(){return o},get isPropagationAllowed(){return r},trigger:s,...c}}export{h as a,N as b,z as c,j as d,C as e,P as f,R as g,$ as h,q as i,A as j,U as k,B as l,y as m,S as n,w as o,k as p,E as q,O as r,V as s,D as t,I as u,T as v};
1
+ import{aE as g,r as a,az as m,E as p}from"./index-CqjuloQH.js";function w(e){return e?.ownerDocument||document}let i=0;function v(e,t="mui"){const[s,n]=a.useState(e),o=e||s;return a.useEffect(()=>{s==null&&(i+=1,n(`${t}-${i}`))},[s,t]),o}const l=g.useId;function E(e,t){if(l!==void 0){const s=l();return e??(t?`${t}-${s}`:s)}return v(e,t)}function I(e){return E(e,"base-ui")}function P(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function h(e,t){if(!e||!t)return!1;const s=t.getRootNode?.();if(e.contains(t))return!0;if(s&&m(s)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function R(e){return"composedPath"in e?e.composedPath()[0]:e.target}function C({controlled:e,default:t,name:s,state:n="value"}){const{current:o}=a.useRef(e!==void 0),[r,c]=a.useState(t),u=o?e:r,f=a.useCallback(d=>{o||c(d)},[]);return[u,f]}const S="none",D="trigger-press",N="trigger-hover",$="trigger-focus",k="outside-press",y="item-press",T="close-press",U="focus-out",A="escape-key",B="list-navigation",O="cancel-open",V="sibling-open",j="disabled",q="imperative-action";function z(e,t,s,n){let o=!1,r=!1;const c=n??p;return{reason:e,event:t??new Event("base-ui"),cancel(){o=!0},allowPropagation(){r=!0},get isCanceled(){return o},get isPropagationAllowed(){return r},trigger:s,...c}}export{h as a,N as b,z as c,j as d,C as e,P as f,R as g,$ as h,q as i,A as j,U as k,B as l,y as m,S as n,w as o,k as p,E as q,O as r,V as s,D as t,I as u,T as v};