@snagset/server 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.js +37 -5
- package/dist/app.js.map +1 -1
- package/dist/db/scope.js +23 -0
- package/dist/db/scope.js.map +1 -0
- package/dist/mail/unsubscribe.js +5 -4
- package/dist/mail/unsubscribe.js.map +1 -1
- package/dist/orgs.js +87 -0
- package/dist/orgs.js.map +1 -0
- package/dist/plan.js +82 -0
- package/dist/plan.js.map +1 -0
- package/dist/projectCache.js +3 -2
- package/dist/projectCache.js.map +1 -1
- package/dist/reviewerCache.js +3 -2
- package/dist/reviewerCache.js.map +1 -1
- package/dist/routes/account.js +5 -4
- package/dist/routes/account.js.map +1 -1
- package/dist/routes/anchorReports.js +3 -2
- package/dist/routes/anchorReports.js.map +1 -1
- package/dist/routes/attachments.js +17 -6
- package/dist/routes/attachments.js.map +1 -1
- package/dist/routes/commentEdit.js +3 -2
- package/dist/routes/commentEdit.js.map +1 -1
- package/dist/routes/comments.js +7 -6
- package/dist/routes/comments.js.map +1 -1
- package/dist/routes/cors.js +5 -4
- package/dist/routes/cors.js.map +1 -1
- package/dist/routes/integrations.js +10 -5
- package/dist/routes/integrations.js.map +1 -1
- package/dist/routes/mcpAuth.js +5 -4
- package/dist/routes/mcpAuth.js.map +1 -1
- package/dist/routes/mcpToken.js +8 -7
- package/dist/routes/mcpToken.js.map +1 -1
- package/dist/routes/members.js +11 -0
- package/dist/routes/members.js.map +1 -1
- package/dist/routes/orgs.js +128 -0
- package/dist/routes/orgs.js.map +1 -0
- package/dist/routes/owner.js +34 -12
- package/dist/routes/owner.js.map +1 -1
- package/dist/routes/reviewLinks.js +11 -10
- package/dist/routes/reviewLinks.js.map +1 -1
- package/dist/routes/rounds.js +7 -6
- package/dist/routes/rounds.js.map +1 -1
- package/dist/routes/sessions.js +16 -15
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/sites.js +45 -26
- package/dist/routes/sites.js.map +1 -1
- package/dist/routes/threads.js +7 -11
- package/dist/routes/threads.js.map +1 -1
- package/dist/serverless.js +86 -120
- package/dist/serverless.js.map +1 -1
- package/dist/storage/settings.js +8 -7
- package/dist/storage/settings.js.map +1 -1
- package/package.json +1 -1
- package/static/dashboard/assets/{CompositeItem-BZSyTS4P.js → CompositeItem-B5AtyrD6.js} +1 -1
- package/static/dashboard/assets/ConfirmDialog-ClUMXHe1.js +1 -0
- package/static/dashboard/assets/{CopyButton-Bm-P_uCi.js → CopyButton-DCsj-LZV.js} +1 -1
- package/static/dashboard/assets/{FieldItemContext-C_WMV5Y1.js → FieldItemContext-DVEWRsEB.js} +1 -1
- package/static/dashboard/assets/{InstallTag-C12OFWxQ.js → InstallTag-B_qg9P2r.js} +1 -1
- package/static/dashboard/assets/SaveState-B-6cG0nU.js +1 -0
- package/static/dashboard/assets/_app-DKjbkrkj.js +56 -0
- package/static/dashboard/assets/{_app-Cd-jUoXa.js → _app-DQfqCcnn.js} +1 -1
- package/static/dashboard/assets/{activity-DrwA-DtK.js → activity-D8OAqMBy.js} +1 -1
- package/static/dashboard/assets/{arrow-left-Bh-dAOei.js → arrow-left-D2obUiWw.js} +1 -1
- package/static/dashboard/assets/{avatar-CHJ9xfvK.js → avatar-DlHbKa1H.js} +1 -1
- package/static/dashboard/assets/{badge-B0S2TuoH.js → badge-CQoGgFU8.js} +1 -1
- package/static/dashboard/assets/{card-ACZ3SoSc.js → card-YnwmM74t.js} +1 -1
- package/static/dashboard/assets/{check-Dqp329Qx.js → check-CLHnIgiu.js} +1 -1
- package/static/dashboard/assets/{chevron-right-Ce6AqGTW.js → chevron-right-BX_QQNXH.js} +1 -1
- package/static/dashboard/assets/{copy-DYe-rWru.js → copy-ZOZ0pLVD.js} +1 -1
- package/static/dashboard/assets/{dialog-DC5ijHd-.js → dialog-BO8bYmy1.js} +2 -2
- package/static/dashboard/assets/{dropdown-menu-DJHh2D48.js → dropdown-menu-NLHjhAUe.js} +3 -3
- package/static/dashboard/assets/{image-off-DcirqIBd.js → image-off-Dg9jTwH7.js} +1 -1
- package/static/dashboard/assets/index-B7_Oj3hr.js +169 -0
- package/static/dashboard/assets/{index-BRTBtV91.css → index-BR4Mnw-o.css} +1 -1
- package/static/dashboard/assets/label-Dpq7t35_.js +1 -0
- package/static/dashboard/assets/{layout-grid-DiZ4lLOr.js → layout-grid-Bf2WS_DV.js} +1 -1
- package/static/dashboard/assets/me-DoCJgtG9.js +1 -0
- package/static/dashboard/assets/{parts-DIo5a0tB.js → parts-C1QjM02Y.js} +1 -1
- package/static/dashboard/assets/{plus-BoLdzoOl.js → plus-D247LXUb.js} +1 -1
- package/static/dashboard/assets/s._site-BDWAQaIb.js +1 -0
- package/static/dashboard/assets/{s._site.comments-Dcz9VfMC.js → s._site.comments-DEzj9S7b.js} +9 -9
- package/static/dashboard/assets/s._site.reviewers-DZ5GqGMU.js +1 -0
- package/static/dashboard/assets/s._site.settings-BIjpyBsc.js +1 -0
- package/static/dashboard/assets/setup-ONHVc5kM.js +1 -0
- package/static/dashboard/assets/sign-in-H0jNzIrs.js +1 -0
- package/static/dashboard/assets/sign-up-DyiLEKht.js +1 -0
- package/static/dashboard/assets/sites-Dnmo-2Me.js +1 -0
- package/static/dashboard/assets/studio-DxOnhxuB.js +1 -0
- package/static/dashboard/assets/studio-enyabWEx.js +1 -0
- package/static/dashboard/assets/studio.index-nkeq6PME.js +1 -0
- package/static/dashboard/assets/studio.integrations-BWPo36fJ.js +1 -0
- package/static/dashboard/assets/studio.members-DXS5CJK_.js +1 -0
- package/static/dashboard/assets/{sun-hlSpGJcg.js → sun-BzkBukC4.js} +1 -1
- package/static/dashboard/assets/switch-ElcxbE6-.js +1 -0
- package/static/dashboard/assets/{table-5N0NRM82.js → table-DdjoxL3-.js} +1 -1
- package/static/dashboard/assets/useAriaLabelledBy-BNUj3f_d.js +1 -0
- package/static/dashboard/assets/{useBaseQuery-WjLRzhGh.js → useBaseQuery-yj7uWlSz.js} +1 -1
- package/static/dashboard/assets/useQuery-CBgK187B.js +1 -0
- package/static/dashboard/assets/useRender-BHlMpPxr.js +1 -0
- package/static/dashboard/assets/{useValueChanged-BV1ZHBzN.js → useValueChanged-DQ0Iea1L.js} +1 -1
- package/static/dashboard/assets/{users-YuUR-T2d.js → users-DDrXwrCG.js} +1 -1
- package/static/dashboard/assets/welcome-Dg1oA1uA.js +11 -0
- package/static/dashboard/assets/you-CP3bZ82A.js +1 -0
- package/static/dashboard/assets/{zod-B5yGKD8p.js → zod-BUdBrC5l.js} +1 -1
- package/static/dashboard/index.html +2 -2
- package/vercel.json +10 -5
- package/static/dashboard/assets/ConfirmDialog-Db4zsosS.js +0 -1
- package/static/dashboard/assets/SaveState-OUJN_boO.js +0 -6
- package/static/dashboard/assets/_app-Cp-iO2k6.js +0 -56
- package/static/dashboard/assets/createBaseUIEventDetails-BwtZlnCY.js +0 -1
- package/static/dashboard/assets/createLucideIcon-SQ1OtOty.js +0 -36
- package/static/dashboard/assets/index-CqjuloQH.js +0 -129
- package/static/dashboard/assets/label-CW_cMhiD.js +0 -1
- package/static/dashboard/assets/me-DdTyFOSS.js +0 -1
- package/static/dashboard/assets/s._site-OuoJaDQ3.js +0 -1
- package/static/dashboard/assets/s._site.reviewers-yucE-ON0.js +0 -1
- package/static/dashboard/assets/s._site.settings-BZufAPHa.js +0 -1
- package/static/dashboard/assets/setup-Pp1TuCU6.js +0 -1
- package/static/dashboard/assets/sign-in-7aKxoHSF.js +0 -1
- package/static/dashboard/assets/sites-5NKVOdPZ.js +0 -1
- package/static/dashboard/assets/studio-BdDHdd0o.js +0 -1
- package/static/dashboard/assets/studio-Bj_Tddf0.js +0 -1
- package/static/dashboard/assets/studio.index-X6GkAcy-.js +0 -1
- package/static/dashboard/assets/studio.integrations-UxtgfC_i.js +0 -1
- package/static/dashboard/assets/studio.members-DlYCEyja.js +0 -1
- package/static/dashboard/assets/switch-C-FKmkAi.js +0 -1
- package/static/dashboard/assets/useAriaLabelledBy-Bl7Pv-JK.js +0 -1
- package/static/dashboard/assets/useQuery-BEI9T-AQ.js +0 -1
- package/static/dashboard/assets/useRender-DW4lC-HO.js +0 -1
- package/static/dashboard/assets/welcome-DyI_SmA2.js +0 -11
- package/static/dashboard/assets/you-In9on4kb.js +0 -1
package/dist/serverless.js
CHANGED
|
@@ -4,129 +4,95 @@ import { loadConfig } from "./config.js";
|
|
|
4
4
|
import { applyPlatformDefaults } from "./platform.js";
|
|
5
5
|
import { createApp } from "./app.js";
|
|
6
6
|
import { resolveSecretKey } from "./boot.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*/
|
|
39
|
-
let cached = null;
|
|
40
|
-
function boot() {
|
|
41
|
-
if (cached)
|
|
7
|
+
export function createServerlessHandler(options = {}) {
|
|
8
|
+
let cached = null;
|
|
9
|
+
function boot() {
|
|
10
|
+
if (cached)
|
|
11
|
+
return cached;
|
|
12
|
+
applyPlatformDefaults(process.env); // D105 — Vercel names its own deployment
|
|
13
|
+
const cfg = loadConfig(process.env);
|
|
14
|
+
if (!cfg.get("SNAGSET_SECRET_KEY") && !cfg.get("SNAGSET_SECRET_KEY_FILE")) {
|
|
15
|
+
throw new Error("SNAGSET_SECRET_KEY is required on serverless. The filesystem here is ephemeral, so " +
|
|
16
|
+
"the bin's generate-a-key-on-first-boot path cannot work: each instance would invent " +
|
|
17
|
+
"a different key, and a session or an encrypted credential written by one would fail " +
|
|
18
|
+
"to decrypt on the next. Generate 32 random bytes, base64url them, and set it in the " +
|
|
19
|
+
"deploy's environment (08 §4.2).");
|
|
20
|
+
}
|
|
21
|
+
const sql = connect(cfg.required("DATABASE_URL"), { max: cfg.int("SNAGSET_DATABASE_POOL_MAX") });
|
|
22
|
+
const app = createApp({
|
|
23
|
+
sql,
|
|
24
|
+
cfg,
|
|
25
|
+
secretKey: resolveSecretKey(cfg, null, () => { }),
|
|
26
|
+
// A function instance cannot run the boot state machine — that reads and
|
|
27
|
+
// writes the claim token and would race across instances. The state is
|
|
28
|
+
// derived per request from the database instead, which is what `createApp`
|
|
29
|
+
// does when it is told nothing.
|
|
30
|
+
state: "READY",
|
|
31
|
+
version: options.version ?? process.env["SNAGSET_VERSION"] ?? "0.0.0",
|
|
32
|
+
commit: process.env["VERCEL_GIT_COMMIT_SHA"] ?? "unknown",
|
|
33
|
+
sourceUrl: options.sourceUrl ?? "https://github.com/snagset/snagset",
|
|
34
|
+
modified: false,
|
|
35
|
+
...(options.planResolver ? { planResolver: options.planResolver } : {}),
|
|
36
|
+
});
|
|
37
|
+
cached = { app, sql };
|
|
42
38
|
return cached;
|
|
43
|
-
applyPlatformDefaults(process.env); // D105 — Vercel names its own deployment
|
|
44
|
-
const cfg = loadConfig(process.env);
|
|
45
|
-
if (!cfg.get("SNAGSET_SECRET_KEY") && !cfg.get("SNAGSET_SECRET_KEY_FILE")) {
|
|
46
|
-
throw new Error("SNAGSET_SECRET_KEY is required on serverless. The filesystem here is ephemeral, so " +
|
|
47
|
-
"the bin's generate-a-key-on-first-boot path cannot work: each instance would invent " +
|
|
48
|
-
"a different key, and a session or an encrypted credential written by one would fail " +
|
|
49
|
-
"to decrypt on the next. Generate 32 random bytes, base64url them, and set it in the " +
|
|
50
|
-
"deploy's environment (08 §4.2).");
|
|
51
39
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
* function logs the operator may not know exist. On the deploy we bless, on
|
|
85
|
-
* the very first request, for the most ordinary mistake there is.
|
|
86
|
-
*
|
|
87
|
-
* The bin has had `explain()` for this since it shipped: an unreachable
|
|
88
|
-
* database prints "✗ no Postgres answered at host:port. Start one, or point
|
|
89
|
-
* DATABASE_URL at a database that is running." Serverless had nothing, so the
|
|
90
|
-
* same operator got a sentence on the bin and a shrug on Vercel.
|
|
91
|
-
*
|
|
92
|
-
* NAMES ONLY, never values — this response is public, and the whole point of
|
|
93
|
-
* the variable being missing is that somebody is about to paste a secret into
|
|
94
|
-
* a dashboard. `503` rather than `500`: the instance is not broken, it is not
|
|
95
|
-
* configured, and a proxy should feel free to retry once it is.
|
|
96
|
-
*/
|
|
97
|
-
function configFailure(e) {
|
|
98
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
99
|
-
return new Response(`Snagset is deployed but not configured.\n\n${message}\n\n` +
|
|
100
|
-
`Set it in your platform's environment settings and redeploy.\n` +
|
|
101
|
-
`\`snagset env\` lists every variable this build accepts.\n`, { status: 503, headers: { "content-type": "text/plain; charset=utf-8", "cache-control": "no-store" } });
|
|
102
|
-
}
|
|
103
|
-
function serve(request) {
|
|
104
|
-
let app;
|
|
105
|
-
try {
|
|
106
|
-
app = boot().app;
|
|
40
|
+
/**
|
|
41
|
+
* The Web-standard handler every serverless target accepts.
|
|
42
|
+
*
|
|
43
|
+
* A `fetch(Request) => Response` rather than a Vercel-shaped adapter, because
|
|
44
|
+
* that is the same signature Cloudflare Workers, Deno and Bun take — D24 makes
|
|
45
|
+
* Workers the next hosting milestone on this same app factory, and an entry
|
|
46
|
+
* point written to one vendor's helper is one that has to be rewritten for it.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* A CONFIGURATION FAILURE SHOULD SAY SO, not crash.
|
|
50
|
+
*
|
|
51
|
+
* `boot()` throws when a required variable is missing, and until 2026-09-01
|
|
52
|
+
* that throw reached the platform — which renders "This Serverless Function
|
|
53
|
+
* has crashed. FUNCTION_INVOCATION_FAILED" and puts the real message in
|
|
54
|
+
* function logs the operator may not know exist. On the deploy we bless, on
|
|
55
|
+
* the very first request, for the most ordinary mistake there is.
|
|
56
|
+
*
|
|
57
|
+
* The bin has had `explain()` for this since it shipped: an unreachable
|
|
58
|
+
* database prints "✗ no Postgres answered at host:port. Start one, or point
|
|
59
|
+
* DATABASE_URL at a database that is running." Serverless had nothing, so the
|
|
60
|
+
* same operator got a sentence on the bin and a shrug on Vercel.
|
|
61
|
+
*
|
|
62
|
+
* NAMES ONLY, never values — this response is public, and the whole point of
|
|
63
|
+
* the variable being missing is that somebody is about to paste a secret into
|
|
64
|
+
* a dashboard. `503` rather than `500`: the instance is not broken, it is not
|
|
65
|
+
* configured, and a proxy should feel free to retry once it is.
|
|
66
|
+
*/
|
|
67
|
+
function configFailure(e) {
|
|
68
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
69
|
+
return new Response(`Snagset is deployed but not configured.\n\n${message}\n\n` +
|
|
70
|
+
`Set it in your platform's environment settings and redeploy.\n` +
|
|
71
|
+
`\`snagset env\` lists every variable this build accepts.\n`, { status: 503, headers: { "content-type": "text/plain; charset=utf-8", "cache-control": "no-store" } });
|
|
107
72
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
73
|
+
function serve(request) {
|
|
74
|
+
let app;
|
|
75
|
+
try {
|
|
76
|
+
app = boot().app;
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
// Nothing is cached on this path, so the NEXT request boots again — set
|
|
80
|
+
// the variable and the instance recovers without a redeploy.
|
|
81
|
+
return configFailure(e);
|
|
82
|
+
}
|
|
83
|
+
return app.fetch(request);
|
|
112
84
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
* down by the platform and never calls this.
|
|
121
|
-
*
|
|
122
|
-
* It exists because the cache above is module scope, which is exactly what
|
|
123
|
-
* makes a warm instance cheap and what makes a test process hang: without it
|
|
124
|
-
* node's runner waits forever on a pool nothing will close.
|
|
125
|
-
*/
|
|
126
|
-
export async function closeForTests() {
|
|
127
|
-
const held = cached;
|
|
128
|
-
cached = null;
|
|
129
|
-
if (held)
|
|
130
|
-
await held.sql.end({ timeout: 5 });
|
|
85
|
+
async function closeForTests() {
|
|
86
|
+
const held = cached;
|
|
87
|
+
cached = null;
|
|
88
|
+
if (held)
|
|
89
|
+
await held.sql.end({ timeout: 5 });
|
|
90
|
+
}
|
|
91
|
+
return { fetch: serve, closeForTests };
|
|
131
92
|
}
|
|
93
|
+
/** The blessed deploy: the engine as it is, no resolver, unlimited — every self-host's serverless entry. */
|
|
94
|
+
const standard = createServerlessHandler();
|
|
95
|
+
export default { fetch: standard.fetch };
|
|
96
|
+
export const handler = standard.fetch;
|
|
97
|
+
export const closeForTests = standard.closeForTests;
|
|
132
98
|
//# sourceMappingURL=serverless.js.map
|
package/dist/serverless.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverless.js","sourceRoot":"","sources":["../src/serverless.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,SAAS,EAAY,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serverless.js","sourceRoot":"","sources":["../src/serverless.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/settings.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { open, seal } from "../crypto.js";
|
|
2
2
|
import { createBucket } from "./bucket.js";
|
|
3
|
+
import { maintenance } from "../db/scope.js";
|
|
3
4
|
/**
|
|
4
5
|
* The bucket, from the environment — D60, and the PRIMARY path.
|
|
5
6
|
*
|
|
@@ -47,10 +48,10 @@ export function envBucketConfig(env) {
|
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
50
|
const orgRow = async (sql) => {
|
|
50
|
-
const rows = await sql `
|
|
51
|
+
const rows = await maintenance(sql, (tx) => tx `
|
|
51
52
|
SELECT id, storage_config, storage_credentials, storage_credentials_iv, storage_connected_at
|
|
52
53
|
FROM orgs WHERE deleted_at IS NULL ORDER BY created_at LIMIT 1
|
|
53
|
-
|
|
54
|
+
`);
|
|
54
55
|
return rows[0] ?? null;
|
|
55
56
|
};
|
|
56
57
|
export async function storageStatus(sql, keys, env = process.env) {
|
|
@@ -102,15 +103,15 @@ export async function connectBucket(sql, keys, config, creds) {
|
|
|
102
103
|
if (!org)
|
|
103
104
|
return { ok: false, step: "instance", detail: "this instance is not claimed yet" };
|
|
104
105
|
const sealed = seal(keys, JSON.stringify(creds));
|
|
105
|
-
await sql `
|
|
106
|
+
await maintenance(sql, (tx) => tx `
|
|
106
107
|
UPDATE orgs
|
|
107
|
-
SET storage_config = ${
|
|
108
|
+
SET storage_config = ${tx.json({ ...config })},
|
|
108
109
|
storage_credentials = ${sealed.ciphertext},
|
|
109
110
|
storage_credentials_iv = ${sealed.iv},
|
|
110
111
|
storage_connected_at = now(),
|
|
111
112
|
updated_at = now()
|
|
112
113
|
WHERE id = ${org.id}
|
|
113
|
-
|
|
114
|
+
`);
|
|
114
115
|
return { ok: true };
|
|
115
116
|
}
|
|
116
117
|
/**
|
|
@@ -122,11 +123,11 @@ export async function connectBucket(sql, keys, config, creds) {
|
|
|
122
123
|
* costing money and recoverable by nobody.
|
|
123
124
|
*/
|
|
124
125
|
export async function disconnectBucket(sql) {
|
|
125
|
-
await sql `
|
|
126
|
+
await maintenance(sql, (tx) => tx `
|
|
126
127
|
UPDATE orgs
|
|
127
128
|
SET storage_connected_at = NULL, storage_credentials = NULL,
|
|
128
129
|
storage_credentials_iv = NULL, updated_at = now()
|
|
129
130
|
WHERE deleted_at IS NULL
|
|
130
|
-
|
|
131
|
+
`);
|
|
131
132
|
}
|
|
132
133
|
//# sourceMappingURL=settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/storage/settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAA0D,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/storage/settings.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,
|
|
1
|
+
import{r as l,d as O,e as M,V as w,j as T,aq as Y,Y as _,E as j,ap as S,i as k}from"./index-B7_Oj3hr.js";const H=l.createContext(void 0);function K(){return l.useContext(H)?.direction??"ltr"}const y=l.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function B(){return l.useContext(y)}function F(s={}){const{guess:o,label:e,metadata:r,textRef:f,index:t}=s,{register:i,unregister:u,subscribeMapChange:d,nextIndexRef:h}=B(),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 Q(s){const{children:o,elementsRef:e,labelsRef:r,onMapChange:f}=s,t=M(f),[,i]=l.useState(!1),u=w(V).current,d=w(U).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(!z(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=q(n[m-1],n[m]);I&&a.add(I)}a.forEach(m=>x.observe(m,{childList:!0}))}const N=M(()=>{const[n,x]=W(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 U(){return new Map}function V(){return new Set}function W(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 q(s,o){let e=s.parentElement;for(;e&&!e.contains(o);)e=e.parentElement;return e}function z(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 G(s={}){const{highlightItemOnHover:o,highlightedIndex:e,onHighlightedIndexChange:r}=Y(),{ref:f,index:t}=F(s),i=e===t,u=l.useRef(null),d=_(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 X(s){const{render:o,className:e,style:r,state:f=j,props:t=S,refs:i=S,metadata:u,stateAttributesMapping:d,tag:h="div",...c}=s,{compositeProps:g,compositeRef:C}=G({metadata:u});return k(h,s,{state:f,ref:[C,...i],props:[g,...t,c],stateAttributesMapping:d})}export{Q as C,F as a,X as b,K as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as i,j as e,B as x}from"./index-B7_Oj3hr.js";import{E as u,G as g,I as C,H as D,J as v,K as b}from"./dialog-BO8bYmy1.js";import{L as E,I}from"./label-Dpq7t35_.js";function T({open:t,onOpenChange:o,title:m,description:r,children:h,confirmLabel:j,confirmWord:l,busy:s=!1,onConfirm:p}){const[n,c]=i.useState(""),d=i.useId();i.useEffect(()=>{t&&c("")},[t]);const f=!l||n.trim()===l;return e.jsx(u,{open:t,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,l&&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:l})," 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",loading:s,disabled:!f,children:s?"Working…":j})]})]})})})}export{T as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as t,B as c}from"./index-
|
|
1
|
+
import{r as n,j as t,B as c}from"./index-B7_Oj3hr.js";import{C}from"./check-CLHnIgiu.js";import{C as m}from"./copy-ZOZ0pLVD.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};
|
package/static/dashboard/assets/{FieldItemContext-C_WMV5Y1.js → FieldItemContext-DVEWRsEB.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as t}from"./index-
|
|
1
|
+
import{r as t}from"./index-B7_Oj3hr.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,
|
|
1
|
+
import{r as o,j as e,B as i,aA as n}from"./index-B7_Oj3hr.js";import{C as c}from"./check-CLHnIgiu.js";import{C as l}from"./copy-ZOZ0pLVD.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r,j as e,az as o}from"./index-B7_Oj3hr.js";function l({saving:s,savedAt:t}){const[i,a]=r.useState(!1);return r.useEffect(()=>{if(!t)return;a(!0);const n=setTimeout(()=>a(!1),1800);return()=>clearTimeout(n)},[t]),s?e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-[12.5px] text-muted-foreground","aria-live":"polite",children:[e.jsx(o,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Saving"]}):e.jsx("span",{className:"text-[12.5px] text-muted-foreground","aria-live":"polite",children:i?"Saved":""})}export{l as S};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import{u as pt,a as gt,b as ft,c as D,r as o,d as z,e as le,g as ht,j as e,B as J,f as w,h as se,m as be,E as xt,i as ve,k as ge,l as mt,n as bt,o as ne,p as Z,q as vt,L as _,s as jt,t as _e,M as yt,v as St,w as wt,x as Ct,y as kt,O as Nt}from"./index-B7_Oj3hr.js";import{u as He}from"./useQuery-CBgK187B.js";import{T as Tt,i as ze,a as Pt,D as Rt,b as Mt,c as Et,X as Ot,d as It,e as Dt,f as At,g as _t,R as Ht,p as zt,h as Lt,j as $t,k as Bt,P as Ft,l as Ut,u as qt,m as Gt,n as Vt,o as Kt,q as Yt,r as Wt,s as Xt,t as Qt,v as Jt,w as Zt,x as es,y as ts,z as ss,A as ns,F as as,B as rs,C as os,E as Le,G as $e,H as Be,I as is,J as ls,K as ds}from"./dialog-BO8bYmy1.js";import{c as B,n as Fe,g as cs,a as fe,t as us,d as ps,i as gs,u as fs,b as de,L as hs,I as xs}from"./label-Dpq7t35_.js";import{g as he,u as ms,a as bs,b as vs,s as js,c as ys,d as Ss,e as ws,f as Cs,h as ks,S as Ue,E as Q,D as ae,i as re,j as oe,k as je,l as ee,m as I,n as V,o as Ns,p as ce}from"./dropdown-menu-NLHjhAUe.js";import{u as qe}from"./useRender-BHlMpPxr.js";import{A as Ts,a as Ps}from"./avatar-DlHbKa1H.js";import{S as Rs,i as Ms,a as Es}from"./labels--UUyt9uB.js";import{u as Ge}from"./me-DoCJgtG9.js";import{L as te}from"./layout-grid-Bf2WS_DV.js";import{U as xe}from"./users-DDrXwrCG.js";import{c as Os}from"./update-duXzIzFS.js";import{P as Ve}from"./plus-D247LXUb.js";import{M as Is,S as Ds,a as As}from"./sun-BzkBukC4.js";import"./useBaseQuery-yj7uWlSz.js";import"./check-CLHnIgiu.js";import"./CompositeItem-B5AtyrD6.js";import"./useValueChanged-DQ0Iea1L.js";function _s(t){const s=pt({warn:t?.router===void 0}),n=t?.router||s;return gt(n.stores.__store,ft(t,n))}/**
|
|
2
|
+
* @license lucide-react v1.39.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const Hs=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],Ke=D("activity",Hs);/**
|
|
7
|
+
* @license lucide-react v1.39.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const zs=[["path",{d:"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2",key:"1ah6g2"}],["rect",{x:"14",y:"2",width:"8",height:"8",rx:"1",key:"88lufb"}]],Ye=D("blocks",zs);/**
|
|
12
|
+
* @license lucide-react v1.39.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/const Ls=[["path",{d:"M12 5v16",key:"1f6ucr"}],["path",{d:"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z",key:"1fyvmf"}]],We=D("book-open",Ls);/**
|
|
17
|
+
* @license lucide-react v1.39.0 - ISC
|
|
18
|
+
*
|
|
19
|
+
* This source code is licensed under the ISC license.
|
|
20
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
+
*/const $s=[["path",{d:"M10 12h4",key:"a56b0p"}],["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M14 21v-3a2 2 0 0 0-4 0v3",key:"1rgiei"}],["path",{d:"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",key:"secmi2"}],["path",{d:"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",key:"16ra0t"}]],ye=D("building-2",$s);/**
|
|
22
|
+
* @license lucide-react v1.39.0 - ISC
|
|
23
|
+
*
|
|
24
|
+
* This source code is licensed under the ISC license.
|
|
25
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
+
*/const Bs=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],Se=D("chevrons-up-down",Bs);/**
|
|
27
|
+
* @license lucide-react v1.39.0 - ISC
|
|
28
|
+
*
|
|
29
|
+
* This source code is licensed under the ISC license.
|
|
30
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
+
*/const Fs=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Us=D("circle-question-mark",Fs);/**
|
|
32
|
+
* @license lucide-react v1.39.0 - ISC
|
|
33
|
+
*
|
|
34
|
+
* This source code is licensed under the ISC license.
|
|
35
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
36
|
+
*/const qs=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],Gs=D("log-out",qs);/**
|
|
37
|
+
* @license lucide-react v1.39.0 - ISC
|
|
38
|
+
*
|
|
39
|
+
* This source code is licensed under the ISC license.
|
|
40
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
41
|
+
*/const Vs=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],me=D("message-square",Vs);/**
|
|
42
|
+
* @license lucide-react v1.39.0 - ISC
|
|
43
|
+
*
|
|
44
|
+
* This source code is licensed under the ISC license.
|
|
45
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
46
|
+
*/const Ks=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],Ys=D("panel-left",Ks);/**
|
|
47
|
+
* @license lucide-react v1.39.0 - ISC
|
|
48
|
+
*
|
|
49
|
+
* This source code is licensed under the ISC license.
|
|
50
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
51
|
+
*/const Ws=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],Xe=D("sliders-horizontal",Ws);/**
|
|
52
|
+
* @license lucide-react v1.39.0 - ISC
|
|
53
|
+
*
|
|
54
|
+
* This source code is licensed under the ISC license.
|
|
55
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
56
|
+
*/const Xs=[["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"}]],Qe=D("user",Xs),ue=768;function Qs(){const[t,s]=o.useState(void 0);return o.useEffect(()=>{const n=window.matchMedia(`(max-width: ${ue-1}px)`),a=()=>{s(window.innerWidth<ue)};return n.addEventListener("change",a),s(window.innerWidth<ue),()=>n.removeEventListener("change",a)},[]),!!t}const Js=o.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new Tt,currentIdRef:{current:null},currentContextRef:{current:null}});function Zs(t,s){t.current=s.current}function en(t,s={open:!1}){const{open:n}=s,a="rootStore"in t?t.rootStore:t,r=a.useState("floatingId"),f=o.useContext(Js),{currentIdRef:d,delayRef:i,timeoutMs:h,initialDelayRef:c,currentContextRef:g,hasProvider:j,timeout:x}=f,[m,p]=o.useState(!1),S=o.useRef(n);return z(()=>{S.current=n},[n]),z(()=>{function u(){g.current?.setIsInstantPhase(!1),d.current=null,g.current=null,i.current=c.current,x.clear()}if(d.current&&!n&&d.current===r){if(p(!1),h){const b=r;return x.start(h,()=>{a.select("open")||d.current&&d.current!==b||u()}),()=>{(S.current||d.current!==b)&&x.clear()}}u()}},[n,r,d,i,h,c,g,x,a]),z(()=>{if(!n)return;const u=g.current,b=d.current;x.clear(),g.current={onOpenChange:a.setOpen,setIsInstantPhase:p},d.current=r,i.current={open:0,close:he(c.current,"close")},b!==null&&b!==r?(p(!0),u?.setIsInstantPhase(!0),u?.onOpenChange(!1,B(Fe))):(p(!1),u?.setIsInstantPhase(!1))},[n,r,a,d,i,c,g,x]),z(()=>()=>{if(d.current===r){if(g.current=null,!S.current)return;d.current=null,Zs(i,c),x.clear()}},[g,d,i,r,c,x]),o.useMemo(()=>({hasProvider:j,delayRef:i,isInstantPhase:m}),[j,i,m])}function tn(t,s){let n=null,a=null,r=!1;return{contextElement:t||void 0,getBoundingClientRect(){const f=t?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},d=s.axis==="x"||s.axis==="both",i=s.axis==="y"||s.axis==="both",h=["mouseenter","mousemove"].includes(s.dataRef.current.openEvent?.type||"")&&s.pointerType!=="touch";let c=f.width,g=f.height,j=f.x,x=f.y;return n==null&&s.x&&d&&(n=f.x-s.x),a==null&&s.y&&i&&(a=f.y-s.y),j-=n||0,x-=a||0,c=0,g=0,!r||h?(c=s.axis==="y"?f.width:0,g=s.axis==="x"?f.height:0,j=d&&s.x!=null?s.x:j,x=i&&s.y!=null?s.y:x):r&&!h&&(g=s.axis==="x"?f.height:g,c=s.axis==="y"?f.width:c),r=!0,{width:c,height:g,x:j,y:x,top:x,right:j+c,bottom:x+g,left:j}}}}function Ee(t){return t!=null&&t.clientX!=null}function sn(t,s={}){const{enabled:n=!0,axis:a="both"}=s,r="rootStore"in t?t.rootStore:t,f=r.useState("open"),d=r.useState("floatingElement"),i=r.useState("domReferenceElement"),h=r.context.dataRef,c=o.useRef(!1),g=o.useRef(null),[j,x]=o.useState(),[m,p]=o.useState([]),S=le(v=>{r.set("positionReference",v)}),u=le((v,y,P)=>{c.current||h.current.openEvent&&!Ee(h.current.openEvent)||r.set("positionReference",tn(P??i,{x:v,y,axis:a,dataRef:h,pointerType:j}))}),b=le(v=>{f?g.current||(u(v.clientX,v.clientY,v.currentTarget),p([])):u(v.clientX,v.clientY,v.currentTarget)}),k=ze(j)?d:f;o.useEffect(()=>{if(!n){S(i);return}if(!k)return;function v(){g.current?.(),g.current=null}const y=ht(d);function P(l){const N=cs(l);fe(d,N)?v():u(l.clientX,l.clientY)}return!h.current.openEvent||Ee(h.current.openEvent)?g.current=Pt(y,"mousemove",P):S(i),v},[k,n,d,h,i,r,u,S,m]),o.useEffect(()=>()=>{r.set("positionReference",null)},[r]),o.useEffect(()=>{n&&!d&&(c.current=!1)},[n,d]),o.useEffect(()=>{!n&&f&&(c.current=!0)},[n,f]);const C=o.useMemo(()=>{function v(y){x(y.pointerType)}return{onPointerDown:v,onPointerEnter:v,onMouseMove:b,onMouseEnter:b}},[b]);return o.useMemo(()=>n?{reference:C,trigger:C}:{},[n,C])}function nn({...t}){return e.jsx(Rt,{"data-slot":"sheet",...t})}function an({...t}){return e.jsx(At,{"data-slot":"sheet-portal",...t})}function rn({className:t,...s}){return e.jsx(_t,{"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 on({className:t,children:s,side:n="right",showCloseButton:a=!0,...r}){return e.jsxs(an,{children:[e.jsx(rn,{}),e.jsxs(Mt,{"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),...r,children:[s,a&&e.jsxs(Et,{"data-slot":"sheet-close",render:e.jsx(J,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[e.jsx(Ot,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function ln({className:t,...s}){return e.jsx("div",{"data-slot":"sheet-header",className:w("flex flex-col gap-0.5 p-4",t),...s})}function dn({className:t,...s}){return e.jsx(It,{"data-slot":"sheet-title",className:w("font-heading text-base font-medium text-foreground",t),...s})}function cn({className:t,...s}){return e.jsx(Dt,{"data-slot":"sheet-description",className:w("text-sm text-muted-foreground",t),...s})}const Je=o.createContext(void 0);function K(t){const s=o.useContext(Je);if(s===void 0&&!t)throw new Error(se(72));return s}const un={...zt,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 pn extends Ht{constructor(s,n,a){const r=new Ft;super(gn(s,r,n,a),fn(r),un)}setOpen=(s,n)=>{Lt(this,s,n,{extraState:{openChangeReason:n.reason}})};cancelPendingOpen(s){this.state.floatingRootContext.dispatchOpenChange(!1,B(us,s))}}function gn(t,s,n,a=!1){const r={...$t(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...t};return r.floatingRootContext=Bt(s,n,a),r}function fn(t){return{popupRef:o.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:t}}const hn=Ut(function(s){const{disabled:n=!1,defaultOpen:a=!1,open:r,disableHoverablePopup:f=!1,trackCursorAxis:d="none",actionsRef:i,onOpenChange:h,onOpenChangeComplete:c,handle:g,triggerId:j,defaultTriggerId:x=null,children:m}=s,p=qt(($,F)=>new pn({open:a,openProp:r,activeTriggerId:x,triggerIdProp:j},$,F));p.useControlledProp("openProp",r),p.useControlledProp("triggerIdProp",j),p.useContextCallback("onOpenChange",h),p.useContextCallback("onOpenChangeComplete",c);const S=p.useState("open"),u=!n&&S,b=p.useState("activeTriggerId"),k=p.useState("mounted"),C=p.useState("payload");p.useSyncedValues({trackCursorAxis:d,disableHoverablePopup:f,disabled:n}),Gt(p,{closeOnActiveTriggerUnmount:!0});const{forceUnmount:v,transitionStatus:y}=Vt(u,p),P=p.useState("isInstantPhase"),l=p.useState("instantType"),N=p.useState("lastOpenChangeReason"),R=o.useRef(null);z(()=>{S&&n&&p.setOpen(!1,B(ps))},[S,n,p]),z(()=>{y==="ending"&&N===Fe||y!=="ending"&&P?(l!=="delay"&&(R.current=l),p.set("instantType","delay")):R.current!==null&&(p.set("instantType",R.current),R.current=null)},[y,P,N,l,p]),z(()=>{u&&b==null&&p.set("payload",void 0)},[p,b,u]),o.useImperativeHandle(i,()=>({unmount:v,close:()=>p.setOpen(!1,B(gs))}),[v,p]);const L=u||k||!n&&d!=="none";return e.jsxs(Je.Provider,{value:p,children:[g&&e.jsx(Kt,{handle:g,store:p}),L&&e.jsx(xn,{store:p,disabled:n,trackCursorAxis:d}),typeof m=="function"?m({payload:C}):m]})});function xn({store:t,disabled:s,trackCursorAxis:n}){const a=t.useState("floatingRootContext"),r=Yt(a,{enabled:!s,referencePress:()=>t.select("closeOnClick")}),f=sn(a,{enabled:!s&&n!=="none",axis:n==="none"?void 0:n}),d=o.useMemo(()=>be(f.reference,r.reference),[f.reference,r.reference]);return Wt(t,{activeTriggerProps:d,inactiveTriggerProps:d,popupProps:r.floating??xt}),null}const mn=o.createContext(void 0);function bn(){return o.useContext(mn)}const Oe=600,Ze="data-base-ui-tooltip-trigger";function Ie(t){if("composedPath"in t){const n=t.composedPath();for(let a=0;a<n.length;a+=1){const r=n[a];if(ge(r))return r}}const s=t.target;return ge(s)?s:null}function vn(t){let s=t;for(;s;){const n=s.closest(`[${Ze}]`);if(n)return n;const a=s.getRootNode();s="host"in a&&ge(a.host)?a.host:null}return null}const jn=Xt(function(s,n){const{render:a,className:r,style:f,handle:d,payload:i,disabled:h,delay:c,closeOnClick:g=!0,closeDelay:j,id:x,...m}=s,p=K(!0),u=ms(d)??p;if(!u)throw new Error(se(82));const b=fs(x),k=u.useState("isTriggerActive",b),C=u.useState("isOpenedByTrigger",b),v=u.useState("floatingRootContext"),y=o.useRef(null),P=c??Oe,l=j??0,{registerTrigger:N,isMountedByThisTrigger:R}=Qt(b,y,u,{payload:i,closeOnClick:g,closeDelay:l}),L=bn(),{delayRef:$,isInstantPhase:F,hasProvider:M}=en(v,{open:C}),U=bs(v);u.useSyncedValue("isInstantPhase",F);const ie=u.useState("disabled"),q=h??ie,Ce=Jt(q),ke=u.useState("trackCursorAxis"),rt=u.useState("disableHoverablePopup"),G=o.useRef(!1),Y=Zt(),W=o.useRef(void 0);function Ne(){return M?he($.current,"open")===0?0:c??L??Oe:P}function Te(T){const A=y.current;if(!A||!T)return!1;const H=vn(T);return H!==null&&H!==A&&fe(A,H)}function ot(T){const A=Te(T);return G.current=A,A&&(U.openChangeTimeout.clear(),U.restTimeout.clear(),U.restTimeoutPending=!1,Y.clear()),A}const it=vs(v,{enabled:!q,mouseOnly:!0,move:!1,handleClose:!rt&&ke!=="both"?js():null,restMs:Ne,delay(){return j==null&&M?{close:he($.current,"close")}:{close:l}},triggerElementRef:y,isActiveTrigger:k,isClosing:()=>u.select("transitionStatus")==="ending",shouldOpen(){return!G.current}}),lt=ys(v,{enabled:!q}).reference,dt=T=>{const A=G.current,H=Ie(T),Pe=ot(H),X=y.current,ut=X&&H&&fe(X,H);if(Pe&&u.select("open")&&u.select("lastOpenChangeReason")===de){u.setOpen(!1,B(de,T));return}if(A&&!Pe&&ut&&!Ce.current&&!u.select("open")&&X&&ze(W.current)){const Re=()=>{!G.current&&!Ce.current&&!u.select("open")&&u.setOpen(!0,B(de,T,X))},Me=Ne();Me===0?(Y.clear(),Re()):Y.start(Me,Re)}},ct=u.useState("triggerProps",R);return ve("button",s,{state:{open:C},ref:[n,N,y],props:[it,lt,R||ke!=="none"?ct:void 0,{onMouseOver(T){dt(T.nativeEvent)},onFocus(T){Te(Ie(T.nativeEvent))&&T.preventBaseUIHandler()},onMouseLeave(){G.current=!1,Y.clear(),W.current=void 0},onPointerEnter(T){W.current=T.pointerType},onPointerDown(T){W.current=T.pointerType,u.set("closeOnClick",g),g&&!u.select("open")&&u.cancelPendingOpen(T.nativeEvent)},onClick(T){g&&!u.select("open")&&u.cancelPendingOpen(T.nativeEvent)},id:b,"data-trigger-disabled":q?"":void 0,[Ze]:q?void 0:""},m],stateAttributesMapping:es})}),et=o.createContext(void 0);function yn(){const t=o.useContext(et);if(t===void 0)throw new Error(se(70));return t}const Sn=o.forwardRef(function(s,n){const{children:a,container:r,className:f,render:d,style:i,...h}=s,{node:c,subtree:g}=ts({container:r,ref:n,componentProps:s,elementProps:h});return!g&&!c?null:e.jsxs(o.Fragment,{children:[g,c&&mt.createPortal(a,c)]})}),wn=o.forwardRef(function(s,n){const{keepMounted:a=!1,...r}=s;return K().useState("mounted")||a?e.jsx(et.Provider,{value:a,children:e.jsx(Sn,{ref:n,...r})}):null}),tt=o.createContext(void 0);function st(){const t=o.useContext(tt);if(t===void 0)throw new Error(se(71));return t}const Cn=o.forwardRef(function(s,n){const{render:a,className:r,anchor:f,positionMethod:d="absolute",side:i="top",align:h="center",sideOffset:c=0,alignOffset:g=0,collisionBoundary:j="clipping-ancestors",collisionPadding:x=5,arrowPadding:m=5,sticky:p=!1,disableAnchorTracking:S=!1,collisionAvoidance:u=ss,style:b,...k}=s,C=K(),v=yn(),y=C.useState("open"),P=C.useState("mounted"),l=C.useState("trackCursorAxis"),N=C.useState("disableHoverablePopup"),R=C.useState("floatingRootContext"),L=C.useState("instantType"),$=C.useState("transitionStatus"),F=C.useState("adaptiveOrigin"),M=Ss({anchor:f,positionMethod:d,floatingRootContext:R,mounted:P,side:i,sideOffset:c,align:h,alignOffset:g,collisionBoundary:j,collisionPadding:x,sticky:p,arrowPadding:m,disableAnchorTracking:S,keepMounted:v,collisionAvoidance:u,adaptiveOrigin:F}),U=o.useMemo(()=>({open:y,side:M.side,align:M.align,anchorHidden:M.anchorHidden,instant:l!=="none"?"tracking-cursor":L}),[y,M.side,M.align,M.anchorHidden,l,L]),ie=ws(s,U,{styles:M.positionerStyles,transitionStatus:$,props:k,refs:[n,C.useStateSetter("positionerElement")],hidden:!P,inert:!y||l==="both"||N});return e.jsx(tt.Provider,{value:M,children:ie})}),kn=o.forwardRef(function(s,n){const{render:a,className:r,style:f,...d}=s,i=K(),{side:h,align:c}=st(),g=i.useState("open"),j=i.useState("instantType"),x=i.useState("transitionStatus"),m=i.useState("popupProps"),p=i.useState("floatingRootContext"),S=i.useState("disabled"),u=i.useState("closeDelay");ns({open:g,ref:i.context.popupRef,onComplete(){g&&i.context.onOpenChangeComplete?.(!0)}}),Cs(p,{enabled:!S,closeDelay:u});const b=i.useStateSetter("popupElement");return ve("div",s,{state:{open:g,side:h,align:c,instant:j,transitionStatus:x},ref:[n,i.context.popupRef,b],props:[as,m,ks(x),d],stateAttributesMapping:rs})}),Nn=o.forwardRef(function(s,n){const{render:a,className:r,style:f,...d}=s,i=K(),{arrowRef:h,side:c,align:g,arrowUncentered:j,arrowStyles:x}=st(),m=i.useState("open"),p=i.useState("instantType");return ve("div",s,{state:{open:m,side:c,align:g,uncentered:j,instant:p},ref:[n,h],props:[{style:x,"aria-hidden":!0},d],stateAttributesMapping:os})});function Tn({...t}){return e.jsx(hn,{"data-slot":"tooltip",...t})}function Pn({...t}){return e.jsx(jn,{"data-slot":"tooltip-trigger",...t})}function Rn({className:t,side:s="top",sideOffset:n=4,align:a="center",alignOffset:r=0,children:f,...d}){return e.jsx(wn,{children:e.jsx(Cn,{align:a,alignOffset:r,side:s,sideOffset:n,className:"isolate z-50",children:e.jsxs(kn,{"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:[f,e.jsx(Nn,{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 Mn="sidebar_state",En=3600*24*7,On="16rem",In="18rem",Dn="3rem",An="b",nt=o.createContext(null);function we(){const t=o.useContext(nt);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function _n({defaultOpen:t=!0,open:s,onOpenChange:n,className:a,style:r,children:f,...d}){const i=Qs(),[h,c]=o.useState(!1),[g,j]=o.useState(t),x=s??g,m=o.useCallback(b=>{const k=typeof b=="function"?b(x):b;n?n(k):j(k),document.cookie=`${Mn}=${k}; path=/; max-age=${En}`},[n,x]),p=o.useCallback(()=>i?c(b=>!b):m(b=>!b),[i,m,c]);o.useEffect(()=>{const b=k=>{k.key===An&&(k.metaKey||k.ctrlKey)&&(k.preventDefault(),p())};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[p]);const S=x?"expanded":"collapsed",u=o.useMemo(()=>({state:S,open:x,setOpen:m,isMobile:i,openMobile:h,setOpenMobile:c,toggleSidebar:p}),[S,x,m,i,h,c,p]);return e.jsx(nt.Provider,{value:u,children:e.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":On,"--sidebar-width-icon":Dn,...r},className:w("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",a),...d,children:f})})}function Hn({side:t="left",variant:s="sidebar",collapsible:n="offcanvas",className:a,children:r,dir:f,...d}){const{isMobile:i,state:h,openMobile:c,setOpenMobile:g}=we();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:r}):i?e.jsx(nn,{open:c,onOpenChange:g,...d,children:e.jsxs(on,{dir:f,"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":In},side:t,children:[e.jsxs(ln,{className:"sr-only",children:[e.jsx(dn,{children:"Sidebar"}),e.jsx(cn,{children:"Displays the mobile sidebar."})]}),e.jsx("div",{className:"flex h-full w-full flex-col",children:r})]})}):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:r})})]})}function zn({className:t,onClick:s,...n}){const{toggleSidebar:a}=we();return e.jsxs(J,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:w(t),onClick:r=>{s?.(r),a()},...n,children:[e.jsx(Ys,{}),e.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function Ln({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 $n({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 Bn({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 Fn({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 De({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 Un({className:t,render:s,...n}){return qe({defaultTagName:"div",props:be({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 Ae({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 pe({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 qn=bt("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:r,className:f,...d}){const{isMobile:i,state:h}=we(),c=qe({defaultTagName:"button",props:be({className:w(qn({variant:n,size:a}),f)},d),render:r?e.jsx(Pn,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:a,active:s}});return r?(typeof r=="string"&&(r={children:r}),e.jsxs(Tn,{children:[c,e.jsx(Rn,{side:"right",align:"center",hidden:h!=="collapsed"||i,...r})]})):c}function Gn({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 Vn({open:t,onOpenChange:s}){const n=Ge(),a=ne(),[r,f]=o.useState(""),[d,i]=o.useState(0),h=o.useRef(null),c=r.trim(),[g,j]=o.useState("");o.useEffect(()=>{const l=setTimeout(()=>j(c),180);return()=>clearTimeout(l)},[c]);const x=He({queryKey:["activity","search",g],queryFn:()=>Z.activity({q:g,status:"all",limit:8}),enabled:t&&g.length>=2,staleTime:3e4});o.useEffect(()=>{t||(f(""),i(0))},[t]);const m=o.useMemo(()=>[{id:"s:sites",label:"Sites",icon:e.jsx(te,{className:"size-4"}),go:()=>void a({to:"/sites"})},{id:"s:activity",label:"Activity",hint:"every site, newest first",icon:e.jsx(Ke,{className:"size-4"}),go:()=>void a({to:"/activity"})},{id:"s:members",label:"Members",icon:e.jsx(xe,{className:"size-4"}),go:()=>void a({to:"/studio/members"})},{id:"s:integrations",label:"Integrations",icon:e.jsx(Ye,{className:"size-4"}),go:()=>void a({to:"/studio/integrations"})},{id:"s:studio",label:"Studio settings",icon:e.jsx(ye,{className:"size-4"}),go:()=>void a({to:"/studio"})},{id:"s:you",label:"You",icon:e.jsx(Qe,{className:"size-4"}),go:()=>void a({to:"/you"})}],[a]),p=o.useMemo(()=>n.projects.map(l=>({id:`p:${l.uid}`,label:l.name,hint:l.unresolved>0?`${l.unresolved} open`:"nothing open",icon:e.jsx(me,{className:"size-4"}),go:()=>void a({to:"/s/$site/comments",params:{site:l.uid}})})),[n.projects,a]),S=l=>!c||l.toLowerCase().includes(c.toLowerCase()),u=[],b=p.filter(l=>S(l.label)),k=m.filter(l=>S(l.label));b.length&&u.push({title:"Sites",items:b}),k.length&&u.push({title:"Go to",items:k});const C=(x.data?.data??[]).map(l=>({id:`t:${l.id}`,label:l.latest?.body?.trim()||l.route,hint:`${l.site.name} · ${Ms(l.status)?Rs[l.status]:l.status} · ${l.key}`,icon:e.jsx(me,{className:"size-4"}),go:()=>void a({to:"/s/$site/comments",params:{site:l.site.uid},search:{thread:l.key}})}));C.length&&u.push({title:"Comments",items:C});const v=u.flatMap(l=>l.items),y=Math.min(d,Math.max(0,v.length-1)),P=l=>{l&&(s(!1),l.go())};return o.useEffect(()=>{h.current?.querySelector(`[data-at="${y}"]`)?.scrollIntoView({block:"nearest"})},[y]),e.jsx(Le,{open:t,onOpenChange:s,children:e.jsxs($e,{showCloseButton:!1,className:"top-[15%] max-h-[70dvh] translate-y-0 gap-0 overflow-hidden p-0 sm:max-w-lg",children:[e.jsx(Be,{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(Ue,{className:"size-4 shrink-0 text-muted-foreground"}),e.jsx("input",{autoFocus:!0,value:r,onChange:l=>{f(l.target.value),i(0)},onKeyDown:l=>{l.key==="ArrowDown"?(l.preventDefault(),i(N=>Math.min(N+1,v.length-1))):l.key==="ArrowUp"?(l.preventDefault(),i(N=>Math.max(N-1,0))):l.key==="Enter"&&(l.preventDefault(),P(v[y]))},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:[v.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(l=>e.jsxs("div",{children:[e.jsx("div",{className:"px-3 py-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:l.title}),l.items.map(N=>{const R=v.indexOf(N);return e.jsxs("button",{type:"button","data-at":R,onMouseMove:()=>i(R),onClick:()=>P(N),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===y&&"bg-muted"),children:[e.jsx("span",{className:"shrink-0 text-muted-foreground",children:N.icon}),e.jsx("span",{className:"min-w-0 flex-1 truncate",children:N.label}),N.hint&&e.jsx("span",{className:"shrink-0 text-[12px] text-muted-foreground",children:N.hint})]},N.id)})]},l.title)),x.isFetching&&v.length>0&&e.jsx("p",{className:"m-0 px-3 py-1.5 text-[12px] text-muted-foreground",children:"Searching every site…"})]})]})})}function Kn(){const[t,s]=o.useState(!1);return o.useEffect(()=>{const n=a=>{a.key.toLowerCase()!=="k"||!(a.metaKey||a.ctrlKey)||(a.preventDefault(),s(r=>!r))};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[]),[t,s]}const at="https://snagset.com/docs/",Yn="https://www.npmjs.com/package/@snagset/server?activeTab=versions",Wn="https://snagset.com/docs/self-hosting/#upgrade";function Xn({children:t}){const s=Ge(),n=vt(s),[a,r]=Kn();return e.jsxs(_n,{children:[e.jsx(Qn,{me:s,site:n}),e.jsxs(Ln,{className:"min-w-0",children:[e.jsx(sa,{onSearch:()=>r(!0)}),e.jsx("div",{className:"min-h-0 flex-1",children:t})]}),e.jsx(Vn,{open:a,onOpenChange:r})]})}function Qn({me:t,site:s}){const n=_s({select:r=>r.location.pathname}),a=r=>n===r||n.startsWith(r+"/");return e.jsxs(Hn,{children:[e.jsx($n,{className:"px-3 pb-1 pt-3",children:e.jsx(Jn,{me:t})}),e.jsxs(Fn,{children:[e.jsxs(De,{children:[e.jsx(Zn,{me:t,site:s}),s&&e.jsx(Ae,{children:e.jsxs(pe,{children:[e.jsxs(E,{children:[e.jsxs(O,{isActive:a(`/s/${s.uid}/comments`),render:e.jsx(_,{to:"/s/$site/comments",params:{site:s.uid}}),children:[e.jsx(me,{}),e.jsx("span",{children:"Comments"})]}),s.unresolved>0&&e.jsx(Gn,{children:s.unresolved})]}),e.jsx(E,{children:e.jsxs(O,{isActive:a(`/s/${s.uid}/reviewers`),render:e.jsx(_,{to:"/s/$site/reviewers",params:{site:s.uid}}),children:[e.jsx(xe,{}),e.jsx("span",{children:"Reviewers"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a(`/s/${s.uid}/settings`),render:e.jsx(_,{to:"/s/$site/settings",params:{site:s.uid}}),children:[e.jsx(Xe,{}),e.jsx("span",{children:"Settings"})]})})]})})]}),e.jsxs(De,{children:[e.jsx(Un,{children:"Studio"}),e.jsx(Ae,{children:e.jsxs(pe,{children:[e.jsx(E,{children:e.jsxs(O,{isActive:a("/sites"),render:e.jsx(_,{to:"/sites"}),children:[e.jsx(te,{}),e.jsx("span",{children:"Sites"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/activity"),render:e.jsx(_,{to:"/activity"}),children:[e.jsx(Ke,{}),e.jsx("span",{children:"Activity"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/studio/members"),render:e.jsx(_,{to:"/studio/members"}),children:[e.jsx(xe,{}),e.jsx("span",{children:"Members"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:a("/studio/integrations"),render:e.jsx(_,{to:"/studio/integrations"}),children:[e.jsx(Ye,{}),e.jsx("span",{children:"Integrations"})]})}),e.jsx(E,{children:e.jsxs(O,{isActive:n==="/studio",render:e.jsx(_,{to:"/studio"}),children:[e.jsx(ye,{}),e.jsx("span",{children:"General"})]})})]})})]})]}),e.jsx(Bn,{children:e.jsxs(pe,{children:[e.jsx(E,{children:e.jsxs(O,{render:e.jsx("a",{href:at,target:"_blank",rel:"noreferrer"}),children:[e.jsx(We,{}),e.jsx("span",{children:"Docs"}),e.jsx(Q,{className:"ml-auto size-3.5 text-muted-foreground"})]})}),e.jsx(E,{children:e.jsx(ea,{})}),e.jsx(E,{children:e.jsx(ta,{me:t})})]})})]})}function Jn({me:t}){const s=ne(),n=_e(),[a,r]=o.useState(!1),[f,d]=o.useState(""),[i,h]=o.useState(""),[c,g]=o.useState(!1),j=e.jsxs(e.Fragment,{children:[e.jsx(yt,{size:20}),e.jsxs("span",{className:"min-w-0 flex-1 text-left",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})]})]});if(t.orgs.length<=1&&!t.signupOpen)return e.jsx(_,{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:j});const x=async m=>{g(!0),h("");try{await m(),n.clear(),r(!1),d(""),s({to:"/sites",replace:!0})}catch(p){h(p instanceof Error?p.message:"Something went wrong. Try again.")}finally{g(!1)}};return e.jsxs(e.Fragment,{children:[e.jsxs(ae,{children:[e.jsxs(re,{render:e.jsx("button",{type:"button",className:"flex w-full items-center gap-2.5 rounded-md px-1 py-0.5 text-foreground hover:bg-sidebar-accent","aria-label":"Switch studio"}),children:[j,e.jsx(Se,{className:"size-3.5 shrink-0 text-muted-foreground"})]}),e.jsxs(oe,{align:"start",className:"w-[240px]",children:[e.jsxs(je,{children:[e.jsx(ee,{children:"Studios"}),t.orgs.map(m=>e.jsxs(I,{disabled:m.current,onClick:()=>void x(()=>Z.switchOrg(m.slug)),children:[e.jsx(ye,{}),e.jsx("span",{className:"truncate",children:m.name}),m.current&&e.jsx("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"current"})]},m.slug))]}),e.jsx(V,{}),e.jsxs(I,{onClick:()=>void s({to:"/studio"}),children:[e.jsx(Xe,{}),"Studio settings"]}),t.signupOpen&&e.jsxs(I,{onClick:()=>r(!0),children:[e.jsx(Ve,{}),"New studio…"]})]})]}),e.jsx(Le,{open:a,onOpenChange:m=>!c&&r(m),children:e.jsx($e,{className:"sm:max-w-[420px]",children:e.jsxs("form",{className:"flex flex-col gap-4",onSubmit:m=>{m.preventDefault(),x(()=>Z.createOrg(f.trim()||"My studio"))},children:[e.jsxs(is,{children:[e.jsx(Be,{children:"New studio"}),e.jsx(ls,{children:"Its own sites, members and settings. You are its owner, and you move to it now — this one stays in the menu."})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(hs,{htmlFor:"new-studio-name",children:"Studio name"}),e.jsx(xs,{id:"new-studio-name",value:f,onChange:m=>d(m.target.value),placeholder:"My studio",autoFocus:!0})]}),i&&e.jsx("p",{className:"m-0 text-[12px] text-destructive",children:i}),e.jsxs(ds,{children:[e.jsx(J,{type:"button",variant:"outline",onClick:()=>r(!1),disabled:c,children:"Cancel"}),e.jsx(J,{type:"submit",loading:c,children:c?"Creating…":"Create studio"})]})]})})})]})}function Zn({me:t,site:s}){const n=ne();return e.jsxs(ae,{children:[e.jsxs(re,{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(Se,{className:"size-3.5 text-muted-foreground"})]}),e.jsxs(oe,{align:"start",className:"w-[240px]",children:[e.jsxs(je,{children:[e.jsx(ee,{children:"Sites"}),t.projects.map(a=>e.jsxs(I,{onClick:()=>void n({to:"/s/$site/comments",params:{site:a.uid}}),children:[e.jsx(te,{}),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(V,{}),e.jsxs(I,{onClick:()=>void n({to:"/sites",search:{add:!0}}),children:[e.jsx(Ve,{}),"Add a site"]}),e.jsxs(I,{onClick:()=>void n({to:"/sites"}),children:[e.jsx(te,{}),"All sites"]})]})]})}function ea(){const t=He(kt.meta()),s=t.data?.version??"",[n,a]=o.useState({state:"idle"}),r=async()=>{a({state:"checking"});try{a({state:"done",result:await Os(s)})}catch{a({state:"failed"})}};return e.jsxs(ae,{children:[e.jsxs(re,{render:e.jsx(O,{}),children:[e.jsx(Us,{}),e.jsx("span",{children:"Help"})]}),e.jsxs(oe,{align:"start",side:"top",className:"w-[240px]",children:[e.jsxs(I,{render:e.jsx("a",{href:at,target:"_blank",rel:"noreferrer"}),children:[e.jsx(We,{}),"Docs",e.jsx(Q,{className:"ml-auto size-3 text-muted-foreground"})]}),e.jsxs(I,{render:e.jsx("a",{href:Yn,target:"_blank",rel:"noreferrer"}),children:["Changelog",e.jsx(Q,{className:"ml-auto size-3 text-muted-foreground"})]}),t.data?.sourceUrl&&e.jsxs(I,{render:e.jsx("a",{href:t.data.sourceUrl,target:"_blank",rel:"noreferrer"}),children:["Source · AGPL",e.jsx(Q,{className:"ml-auto size-3 text-muted-foreground"})]}),e.jsx(V,{}),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 r(),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:Wn,target:"_blank",rel:"noreferrer",className:"text-brand hover:underline",children:[n.result.latest," is out — how to upgrade"]}):"up to date"]})]})]})]})}function ta({me:t}){const s=ne(),n=_e(),[a,r]=o.useState(St),f=t.user.name||t.user.email,d=t.user.name?t.user.email:t.user.role,i=async()=>{await Z.logout().catch(()=>{}),Ct("out"),n.clear(),s({to:"/sign-in",replace:!0})};return e.jsxs(ae,{children:[e.jsxs(re,{render:e.jsx(O,{size:"lg"}),children:[e.jsx(Ts,{className:"size-8 rounded-full",children:e.jsx(Ps,{className:"bg-primary text-[12px] font-semibold text-primary-foreground",children:Es(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:f}),e.jsx("div",{className:"truncate text-[11.5px] text-muted-foreground",children:d})]}),e.jsx(Se,{className:"size-3.5 text-muted-foreground"})]}),e.jsxs(oe,{align:"start",side:"top",className:"w-[250px]",children:[e.jsx(je,{children:e.jsxs(ee,{className:"flex flex-col",children:[e.jsx("span",{className:"text-[13px] font-semibold",children:f}),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(V,{}),e.jsxs(Ns,{value:a,onValueChange:h=>{const c=h;wt(c),r(c)},children:[e.jsx(ee,{children:"Theme"}),e.jsxs(ce,{value:"system",children:[e.jsx(Is,{}),"System"]}),e.jsxs(ce,{value:"light",children:[e.jsx(Ds,{}),"Light"]}),e.jsxs(ce,{value:"dark",children:[e.jsx(As,{}),"Dark"]})]}),e.jsx(V,{}),e.jsxs(I,{onClick:()=>void s({to:"/you"}),children:[e.jsx(Qe,{}),"You"]}),e.jsxs(I,{onClick:()=>void i(),children:[e.jsx(Gs,{}),"Sign out"]})]})]})}function sa({onSearch:t}){const n=jt().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(zn,{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,r)=>e.jsxs("span",{className:"flex items-center gap-2",children:[r>0&&e.jsx("span",{className:"text-line-strong",children:"/"}),e.jsx("span",{className:r===n.length-1?"text-foreground":void 0,children:a})]},r))}),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(Ue,{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 Ca=()=>e.jsx(Xn,{children:e.jsx(Nt,{})});export{Ca as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e,u as n,G as a,B as r}from"./index-
|
|
1
|
+
import{j as e,u as n,G as a,B as r}from"./index-B7_Oj3hr.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 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{I as g,J as f,K as p,o as v,j as e,B as m,L as N,p as P}from"./index-B7_Oj3hr.js";import{Q as j,u as y}from"./useBaseQuery-yj7uWlSz.js";import{P as b,S as w}from"./parts-C1QjM02Y.js";import{b as S,c as R,S as E}from"./labels--UUyt9uB.js";import{u as F}from"./me-DoCJgtG9.js";import"./card-YnwmM74t.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};
|