studiograph 1.3.3-next.10 → 1.3.3-next.11

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 (25) hide show
  1. package/dist/server/routes/auth-api.d.ts +6 -0
  2. package/dist/server/routes/auth-api.js +40 -0
  3. package/dist/server/routes/auth-api.js.map +1 -1
  4. package/dist/server/routes/git-http.d.ts +1 -1
  5. package/dist/server/routes/git-http.js +28 -12
  6. package/dist/server/routes/git-http.js.map +1 -1
  7. package/dist/web/_app/immutable/chunks/{DJO0wVMY.js → BougPSdK.js} +1 -1
  8. package/dist/web/_app/immutable/chunks/{yEjjrv_c.js → BzYarS0r.js} +1 -1
  9. package/dist/web/_app/immutable/chunks/{Dj2efhG6.js → C-nAbf0r.js} +1 -1
  10. package/dist/web/_app/immutable/chunks/{BUuoVpOJ.js → CSdc6XPm.js} +1 -1
  11. package/dist/web/_app/immutable/entry/{app.BNN66g6y.js → app.BYB9f9fE.js} +2 -2
  12. package/dist/web/_app/immutable/entry/start._1KNjFSn.js +1 -0
  13. package/dist/web/_app/immutable/nodes/{0.DthLeuCh.js → 0.CdQEtdgD.js} +1 -1
  14. package/dist/web/_app/immutable/nodes/{1.ZBkeuxO_.js → 1.C_wp4L6u.js} +1 -1
  15. package/dist/web/_app/immutable/nodes/{2.CioLRnGy.js → 2.Cdp16CA7.js} +1 -1
  16. package/dist/web/_app/immutable/nodes/{3.Df3ut4ji.js → 3.DStHxuMN.js} +1 -1
  17. package/dist/web/_app/immutable/nodes/{4.HFzA-u2O.js → 4.K7XhnFc3.js} +1 -1
  18. package/dist/web/_app/immutable/nodes/{5.h31NMedP.js → 5.DHD4ROlm.js} +1 -1
  19. package/dist/web/_app/immutable/nodes/{6.MktCIoXa.js → 6.D6Jsb1xM.js} +1 -1
  20. package/dist/web/_app/immutable/nodes/{7.CZ7lC_rb.js → 7.DjV8inY6.js} +1 -1
  21. package/dist/web/_app/immutable/nodes/{8.CRf2WFmY.js → 8.oDI3U_9K.js} +1 -1
  22. package/dist/web/_app/version.json +1 -1
  23. package/dist/web/index.html +6 -6
  24. package/package.json +1 -1
  25. package/dist/web/_app/immutable/entry/start.CbKqTiwM.js +0 -1
@@ -5,4 +5,10 @@
5
5
  */
6
6
  import type { FastifyInstance } from 'fastify';
7
7
  import type { AuthService } from '../../services/auth-service.js';
8
+ /** Check if an email is currently locked out. Returns seconds remaining, or 0 if not locked. */
9
+ export declare function checkRateLimit(email: string): number;
10
+ /** Record a failed login attempt. */
11
+ export declare function recordFailedAttempt(email: string): void;
12
+ /** Clear failed attempts on successful login. */
13
+ export declare function clearAttempts(email: string): void;
8
14
  export declare function registerAuthApiRoutes(fastify: FastifyInstance, authService: AuthService): Promise<void>;
@@ -3,6 +3,38 @@
3
3
  *
4
4
  * Login, logout, session verification, and auth status endpoints.
5
5
  */
6
+ // ── Login rate limiting ──
7
+ const MAX_ATTEMPTS = 5;
8
+ const LOCKOUT_MS = 15 * 60 * 1000; // 15 minutes
9
+ const loginAttempts = new Map();
10
+ /** Check if an email is currently locked out. Returns seconds remaining, or 0 if not locked. */
11
+ export function checkRateLimit(email) {
12
+ const key = email.toLowerCase();
13
+ const attempt = loginAttempts.get(key);
14
+ if (!attempt || attempt.count < MAX_ATTEMPTS)
15
+ return 0;
16
+ const elapsed = Date.now() - attempt.firstAttempt;
17
+ if (elapsed > LOCKOUT_MS) {
18
+ loginAttempts.delete(key);
19
+ return 0;
20
+ }
21
+ return Math.ceil((LOCKOUT_MS - elapsed) / 1000);
22
+ }
23
+ /** Record a failed login attempt. */
24
+ export function recordFailedAttempt(email) {
25
+ const key = email.toLowerCase();
26
+ const attempt = loginAttempts.get(key);
27
+ if (!attempt || Date.now() - attempt.firstAttempt > LOCKOUT_MS) {
28
+ loginAttempts.set(key, { count: 1, firstAttempt: Date.now() });
29
+ }
30
+ else {
31
+ attempt.count++;
32
+ }
33
+ }
34
+ /** Clear failed attempts on successful login. */
35
+ export function clearAttempts(email) {
36
+ loginAttempts.delete(email.toLowerCase());
37
+ }
6
38
  function requireAdmin(req, authService) {
7
39
  const token = req.cookies?.['__sg_token'];
8
40
  if (!token)
@@ -87,10 +119,18 @@ export async function registerAuthApiRoutes(fastify, authService) {
87
119
  if (!email || !password) {
88
120
  return reply.status(400).send({ error: 'Email and password are required' });
89
121
  }
122
+ // Rate limit check
123
+ const retryAfter = checkRateLimit(email);
124
+ if (retryAfter > 0) {
125
+ reply.header('Retry-After', String(retryAfter));
126
+ return reply.status(429).send({ error: 'Too many login attempts. Try again later.', retryAfter });
127
+ }
90
128
  const result = authService.authenticate(email, password);
91
129
  if (!result) {
130
+ recordFailedAttempt(email);
92
131
  return reply.status(401).send({ error: 'Invalid credentials' });
93
132
  }
133
+ clearAttempts(email);
94
134
  const secure = req.headers['x-forwarded-proto'] === 'https';
95
135
  reply.setCookie('__sg_token', result.token, {
96
136
  path: '/',
@@ -1 +1 @@
1
- {"version":3,"file":"auth-api.js","sourceRoot":"","sources":["../../../src/server/routes/auth-api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,SAAS,YAAY,CAAC,GAAQ,EAAE,WAAwB;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAwB,EAAE,WAAwB;IAC5F,8BAA8B;IAE9B,oDAAoD;IACpD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAC9E,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAE9E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAKlD,CAAC;QAEF,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAC,CAAC;YAC3G,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4FAA4F;IAC5F,OAAO,CAAC,MAAM,CAA6B,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACrF,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC/E,IAAI,KAAK,CAAC,EAAE,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAE5F,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAExE,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACjF,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,OAAO,CAAC,KAAK,CAA6B,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7F,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAE/E,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAA6B,CAAC;QACvD,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAEhF,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAExE,IAAI,CAAC;YACH,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAC7D,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAA6C,CAAC;QAE9E,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC;QAC5D,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE;YAC1C,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,QAAQ;YAClB,MAAM;YACN,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,SAAS;SACpC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACrD,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE;YAChC,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;YACnC,SAAS,EAAE,WAAW,CAAC,YAAY,EAAE;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,yFAAyF;IACzF,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnD,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,IAI5C,CAAC;QAEF,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAClG,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC;YAC5D,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE;gBAC1C,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,QAAQ;gBAClB,MAAM;gBACN,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;aACzB,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"auth-api.js","sourceRoot":"","sources":["../../../src/server/routes/auth-api.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * - No users configured (open mode) → full access
15
15
  * - Admin → all collections
16
16
  * - Member → only granted collections
17
- * - Private repos → excluded entirely
17
+ * - Private repos → owner only
18
18
  */
19
19
  import type { FastifyInstance } from 'fastify';
20
20
  import type { WsHub } from '../ws-hub.js';
@@ -14,10 +14,11 @@
14
14
  * - No users configured (open mode) → full access
15
15
  * - Admin → all collections
16
16
  * - Member → only granted collections
17
- * - Private repos → excluded entirely
17
+ * - Private repos → owner only
18
18
  */
19
19
  import { spawn } from 'child_process';
20
20
  import { join } from 'path';
21
+ import { checkRateLimit, recordFailedAttempt, clearAttempts } from './auth-api.js';
21
22
  /**
22
23
  * Resolve Basic Auth header to an AuthUser, or null if open mode.
23
24
  * Returns { user } on success, or { error, statusCode } on failure.
@@ -37,30 +38,45 @@ function authenticateBasic(authHeader, authService) {
37
38
  }
38
39
  const email = decoded.slice(0, colonIdx);
39
40
  const password = decoded.slice(colonIdx + 1);
41
+ // Rate limit check
42
+ if (checkRateLimit(email) > 0) {
43
+ return { error: 'Too many login attempts', statusCode: 429 };
44
+ }
40
45
  const result = authService.authenticate(email, password);
41
46
  if (!result) {
47
+ recordFailedAttempt(email);
42
48
  return { error: 'Invalid credentials', statusCode: 401 };
43
49
  }
50
+ clearAttempts(email);
44
51
  return { user: result.user };
45
52
  }
46
53
  /**
47
54
  * Check whether a user can access the named collection.
48
55
  */
49
- function canAccessCollection(user, repoName, authService) {
56
+ function canAccessCollection(user, repoName, authService, workspaceManager) {
50
57
  if (!user)
51
58
  return true; // open mode / API key
52
59
  if (user.role === 'admin')
53
60
  return true;
61
+ // Owner of a private repo has implicit access
62
+ const config = workspaceManager.getRepoConfig(repoName);
63
+ if (config?.private && config.owner_id === user.id)
64
+ return true;
54
65
  return authService.getUserCollections(user.id).includes(repoName);
55
66
  }
56
67
  /**
57
68
  * Resolve a repo name to its absolute path on disk.
58
- * Returns null if the repo doesn't exist or is private.
69
+ * Returns null if the repo doesn't exist, or is private and the user isn't the owner.
59
70
  */
60
- function resolveRepoPath(repoName, workspaceManager, workspacePath) {
71
+ function resolveRepoPath(repoName, workspaceManager, workspacePath, user) {
61
72
  const config = workspaceManager.getRepoConfig(repoName);
62
- if (!config || config.private)
73
+ if (!config)
63
74
  return null;
75
+ if (config.private) {
76
+ // Owner can access their own private repo; everyone else gets 404
77
+ if (!user || !config.owner_id || user.id !== config.owner_id)
78
+ return null;
79
+ }
64
80
  return join(workspacePath, config.path);
65
81
  }
66
82
  export async function registerGitHttpRoutes(fastify, workspaceManager, authService, workspacePath, wsHub) {
@@ -78,16 +94,16 @@ export async function registerGitHttpRoutes(fastify, workspaceManager, authServi
78
94
  return reply.status(auth.statusCode).send(auth.error);
79
95
  }
80
96
  // Resolve repo
81
- const repoPath = resolveRepoPath(repo, workspaceManager, workspacePath);
97
+ const repoPath = resolveRepoPath(repo, workspaceManager, workspacePath, auth.user);
82
98
  if (!repoPath) {
83
99
  return reply.status(404).send('Repository not found');
84
100
  }
85
101
  // Check collection access
86
- if (!canAccessCollection(auth.user, repo, authService)) {
102
+ if (!canAccessCollection(auth.user, repo, authService, workspaceManager)) {
87
103
  return reply.status(404).send('Repository not found');
88
104
  }
89
105
  // Push requires collection access (admin → all, member → granted only)
90
- if (service === 'git-receive-pack' && !canAccessCollection(auth.user, repo, authService)) {
106
+ if (service === 'git-receive-pack' && !canAccessCollection(auth.user, repo, authService, workspaceManager)) {
91
107
  return reply.status(403).send('Push access denied');
92
108
  }
93
109
  // Spawn git to advertise refs
@@ -129,11 +145,11 @@ export async function registerGitHttpRoutes(fastify, workspaceManager, authServi
129
145
  reply.header('WWW-Authenticate', 'Basic realm="Studiograph Git"');
130
146
  return reply.status(auth.statusCode).send(auth.error);
131
147
  }
132
- const repoPath = resolveRepoPath(repo, workspaceManager, workspacePath);
148
+ const repoPath = resolveRepoPath(repo, workspaceManager, workspacePath, auth.user);
133
149
  if (!repoPath) {
134
150
  return reply.status(404).send('Repository not found');
135
151
  }
136
- if (!canAccessCollection(auth.user, repo, authService)) {
152
+ if (!canAccessCollection(auth.user, repo, authService, workspaceManager)) {
137
153
  return reply.status(404).send('Repository not found');
138
154
  }
139
155
  reply.raw.writeHead(200, {
@@ -169,12 +185,12 @@ export async function registerGitHttpRoutes(fastify, workspaceManager, authServi
169
185
  reply.header('WWW-Authenticate', 'Basic realm="Studiograph Git"');
170
186
  return reply.status(auth.statusCode).send(auth.error);
171
187
  }
172
- const repoPath = resolveRepoPath(repo, workspaceManager, workspacePath);
188
+ const repoPath = resolveRepoPath(repo, workspaceManager, workspacePath, auth.user);
173
189
  if (!repoPath) {
174
190
  return reply.status(404).send('Repository not found');
175
191
  }
176
192
  // Push requires collection access (admin → all, member → granted only)
177
- if (!canAccessCollection(auth.user, repo, authService)) {
193
+ if (!canAccessCollection(auth.user, repo, authService, workspaceManager)) {
178
194
  return reply.status(403).send('Push access denied');
179
195
  }
180
196
  reply.raw.writeHead(200, {
@@ -1 +1 @@
1
- {"version":3,"file":"git-http.js","sourceRoot":"","sources":["../../../src/server/routes/git-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-http.js","sourceRoot":"","sources":["../../../src/server/routes/git-http.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./DtVH--hH.js","./DnlgZ_Tk.js","./Dh_H7Owr.js","./4QY4j-jX.js","./CUzqHQY_.js","./aosHekRC.js"])))=>i.map(i=>d[i]);
2
- import{d as ri,b as wt,e as Re,a as A,c as L,s as ht,f as K,p as ii,q as lt,m as bo,u as xo,r as gn}from"./DeY0oOW3.js";import{bg as So,h as Ao,a as Eo,br as Oo,b as To,j as Po,u as tn,z as ut,f as B,p as qt,a3 as vt,x as oi,D,F as nt,I as M,g as c,i as m,B as dt,ai as R,J as yt,ak as _,bs as Or,L as Co,ar as _e,bt as _o,A as Ln,ap as ko,a2 as Mo,bp as pt,bu as Fo,bv as si,ao as ai,aj as Do,G as Pn,M as qe,bq as Ro}from"./Cs6vwwZC.js";import{B as Io,i as at}from"./BuHHk4nP.js";import{e as Yt,i as te,a as st,I as ve,s as pe,T as No,P as Tr}from"./CiIF45lL.js";import{c as ae}from"./CQo_whF8.js";import{r as Bn,s as Qe,w as Yn,t as Cn,h as ue,e as Lo,j as _n,b as Bo,u as Pr,v as Wo}from"./BFD-PG4k.js";import{b as ci}from"./CH-raHh7.js";import{b as Gn}from"./-lhxaNNQ.js";import{p as x,s as Mt,r as ie,l as me}from"./C0iyiXwO.js";import{g as zo}from"./BUuoVpOJ.js";import"./BKhAbhZ4.js";import{C as Vo,g as Cr}from"./yEjjrv_c.js";import{_ as be}from"./PPVm8Dsz.js";function Ko(){return Symbol(So)}const Ho=Symbol("NaN");function Uo(e,t,n){Ao&&Eo();var r=new Io(e),i=!Oo();To(()=>{var s=t();s!==s&&(s=Ho),i&&s!==null&&typeof s=="object"&&(s={}),r.ensure(s,n)})}function jo(e,t,n){Po(()=>{var r=tn(()=>t(e,n?.())||{});if(r?.destroy)return()=>r.destroy()})}var Yo=K('<span class="chip svelte-84vb17"> <button class="chip-remove svelte-84vb17">&times;</button></span>'),Go=K('<div><span class="entity-title svelte-84vb17"> </span> <span class="entity-meta svelte-84vb17"><span class="entity-type-badge svelte-84vb17"> </span> <span class="entity-repo svelte-84vb17"> </span></span></div>'),qo=K('<div class="dropdown svelte-84vb17"></div>'),Xo=K('<div class="autocomplete svelte-84vb17"><div class="input-row svelte-84vb17"><!> <input class="ac-input svelte-84vb17" type="text" placeholder="Search entities..."/></div> <!></div>');function Zo(e,t){ut(t,!0);let n=x(t,"multi",3,!1),r=B(""),i=B(0),s;const o=_(()=>Yn.repos.flatMap(O=>O.entities.map(k=>({id:k.id,title:k.title,entityType:k.entityType,repo:O.name})))),a=_(()=>()=>{const O=c(r).toLowerCase().trim();return O?c(o).filter(k=>k.title.toLowerCase().includes(O)||k.id.toLowerCase().includes(O)).slice(0,20):c(o).slice(0,20)}),l=Array.isArray(t.value)?[...t.value]:t.value?[t.value]:[];let u=B(qt(l));vt(()=>{oi().then(()=>s?.focus())});function f(O){n()?(c(u).includes(O)||m(u,[...c(u),O],!0),m(r,""),m(i,0),s?.focus()):t.onselect(O)}function d(O){m(u,c(u).filter(k=>k!==O),!0)}function g(){c(u).length===l.length&&c(u).every((k,j)=>k===l[j])?t.oncancel():t.onselect(c(u))}function v(O){const k=c(a)();O.key==="ArrowDown"?(O.preventDefault(),m(i,Math.min(c(i)+1,k.length-1),!0)):O.key==="ArrowUp"?(O.preventDefault(),m(i,Math.max(c(i)-1,0),!0)):O.key==="Enter"?(O.preventDefault(),k.length>0?f(k[c(i)].id):n()&&g()):O.key==="Escape"?n()&&c(u).length>0?g():t.oncancel():O.key==="Backspace"&&!c(r)&&n()&&c(u).length>0&&m(u,c(u).slice(0,-1),!0)}var p=Xo(),h=D(p),y=D(h);{var b=O=>{var k=L(),j=R(k);Yt(j,17,()=>c(u),te,(W,F)=>{var I=Yo(),H=D(I),q=nt(H);M(I),yt(()=>ht(H,`${c(F)??""} `)),wt("click",q,()=>d(c(F))),A(W,I)}),A(O,k)};at(y,O=>{n()&&O(b)})}var E=nt(y,2);Bn(E),Gn(E,O=>s=O,()=>s),M(h);var C=nt(h,2);{var S=O=>{var k=qo();Yt(k,21,()=>c(a)(),te,(j,W,F)=>{var I=Go();let H;var q=D(I),X=D(q,!0);M(q);var J=nt(q,2),z=D(J),G=D(z,!0);M(z);var Z=nt(z,2),At=D(Z,!0);M(Z),M(J),M(I),yt(()=>{H=Qe(I,1,"dropdown-item svelte-84vb17",null,H,{highlighted:F===c(i)}),ht(X,c(W).title),ht(G,c(W).entityType),ht(At,c(W).repo)}),wt("mousedown",I,Te=>{Te.preventDefault(),f(c(W).id)}),Re("mouseenter",I,()=>m(i,F,!0)),A(j,I)}),M(k),A(O,k)},N=_(()=>c(a)().length>0);at(C,O=>{c(N)&&O(S)})}M(p),wt("keydown",E,v),Re("blur",E,()=>{setTimeout(()=>{n()&&c(u).length>0?g():n()||t.oncancel()},150)}),ci(E,()=>c(r),O=>m(r,O)),A(e,p),dt()}ri(["click","keydown","mousedown"]);function Jo(e){return typeof e=="function"}function Be(e){return e!==null&&typeof e=="object"}const Qo=["string","number","bigint","boolean"];function Wn(e){return e==null||Qo.includes(typeof e)?!0:Array.isArray(e)?e.every(t=>Wn(t)):typeof e=="object"?Object.getPrototypeOf(e)===Object.prototype:!1}const Se=Symbol("box"),vn=Symbol("is-writable");function T(e,t){const n=_(e);return t?{[Se]:!0,[vn]:!0,get current(){return c(n)},set current(r){t(r)}}:{[Se]:!0,get current(){return e()}}}function We(e){return Be(e)&&Se in e}function qn(e){return We(e)&&vn in e}function li(e){return We(e)?e:Jo(e)?T(e):Wt(e)}function $o(e){return Object.entries(e).reduce((t,[n,r])=>We(r)?(qn(r)?Object.defineProperty(t,n,{get(){return r.current},set(i){r.current=i}}):Object.defineProperty(t,n,{get(){return r.current}}),t):Object.assign(t,{[n]:r}),{})}function ts(e){return qn(e)?{[Se]:!0,get current(){return e.current}}:e}function Wt(e){let t=B(qt(e));return{[Se]:!0,[vn]:!0,get current(){return c(t)},set current(n){m(t,n,!0)}}}function ye(e){let t=B(qt(e));return{[Se]:!0,[vn]:!0,get current(){return c(t)},set current(n){m(t,n,!0)}}}ye.from=li;ye.with=T;ye.flatten=$o;ye.readonly=ts;ye.isBox=We;ye.isWritableBox=qn;function ui(...e){return function(t){for(const n of e)if(n){if(t.defaultPrevented)return;typeof n=="function"?n.call(this,t):n.current?.call(this,t)}}}var _r=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,es=/\n/g,ns=/^\s*/,rs=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,is=/^:\s*/,os=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,ss=/^[;\s]*/,as=/^\s+|\s+$/g,cs=`
2
+ import{d as ri,b as wt,e as Re,a as A,c as L,s as ht,f as K,p as ii,q as lt,m as bo,u as xo,r as gn}from"./DeY0oOW3.js";import{bg as So,h as Ao,a as Eo,br as Oo,b as To,j as Po,u as tn,z as ut,f as B,p as qt,a3 as vt,x as oi,D,F as nt,I as M,g as c,i as m,B as dt,ai as R,J as yt,ak as _,bs as Or,L as Co,ar as _e,bt as _o,A as Ln,ap as ko,a2 as Mo,bp as pt,bu as Fo,bv as si,ao as ai,aj as Do,G as Pn,M as qe,bq as Ro}from"./Cs6vwwZC.js";import{B as Io,i as at}from"./BuHHk4nP.js";import{e as Yt,i as te,a as st,I as ve,s as pe,T as No,P as Tr}from"./CiIF45lL.js";import{c as ae}from"./CQo_whF8.js";import{r as Bn,s as Qe,w as Yn,t as Cn,h as ue,e as Lo,j as _n,b as Bo,u as Pr,v as Wo}from"./BFD-PG4k.js";import{b as ci}from"./CH-raHh7.js";import{b as Gn}from"./-lhxaNNQ.js";import{p as x,s as Mt,r as ie,l as me}from"./C0iyiXwO.js";import{g as zo}from"./CSdc6XPm.js";import"./BKhAbhZ4.js";import{C as Vo,g as Cr}from"./BzYarS0r.js";import{_ as be}from"./PPVm8Dsz.js";function Ko(){return Symbol(So)}const Ho=Symbol("NaN");function Uo(e,t,n){Ao&&Eo();var r=new Io(e),i=!Oo();To(()=>{var s=t();s!==s&&(s=Ho),i&&s!==null&&typeof s=="object"&&(s={}),r.ensure(s,n)})}function jo(e,t,n){Po(()=>{var r=tn(()=>t(e,n?.())||{});if(r?.destroy)return()=>r.destroy()})}var Yo=K('<span class="chip svelte-84vb17"> <button class="chip-remove svelte-84vb17">&times;</button></span>'),Go=K('<div><span class="entity-title svelte-84vb17"> </span> <span class="entity-meta svelte-84vb17"><span class="entity-type-badge svelte-84vb17"> </span> <span class="entity-repo svelte-84vb17"> </span></span></div>'),qo=K('<div class="dropdown svelte-84vb17"></div>'),Xo=K('<div class="autocomplete svelte-84vb17"><div class="input-row svelte-84vb17"><!> <input class="ac-input svelte-84vb17" type="text" placeholder="Search entities..."/></div> <!></div>');function Zo(e,t){ut(t,!0);let n=x(t,"multi",3,!1),r=B(""),i=B(0),s;const o=_(()=>Yn.repos.flatMap(O=>O.entities.map(k=>({id:k.id,title:k.title,entityType:k.entityType,repo:O.name})))),a=_(()=>()=>{const O=c(r).toLowerCase().trim();return O?c(o).filter(k=>k.title.toLowerCase().includes(O)||k.id.toLowerCase().includes(O)).slice(0,20):c(o).slice(0,20)}),l=Array.isArray(t.value)?[...t.value]:t.value?[t.value]:[];let u=B(qt(l));vt(()=>{oi().then(()=>s?.focus())});function f(O){n()?(c(u).includes(O)||m(u,[...c(u),O],!0),m(r,""),m(i,0),s?.focus()):t.onselect(O)}function d(O){m(u,c(u).filter(k=>k!==O),!0)}function g(){c(u).length===l.length&&c(u).every((k,j)=>k===l[j])?t.oncancel():t.onselect(c(u))}function v(O){const k=c(a)();O.key==="ArrowDown"?(O.preventDefault(),m(i,Math.min(c(i)+1,k.length-1),!0)):O.key==="ArrowUp"?(O.preventDefault(),m(i,Math.max(c(i)-1,0),!0)):O.key==="Enter"?(O.preventDefault(),k.length>0?f(k[c(i)].id):n()&&g()):O.key==="Escape"?n()&&c(u).length>0?g():t.oncancel():O.key==="Backspace"&&!c(r)&&n()&&c(u).length>0&&m(u,c(u).slice(0,-1),!0)}var p=Xo(),h=D(p),y=D(h);{var b=O=>{var k=L(),j=R(k);Yt(j,17,()=>c(u),te,(W,F)=>{var I=Yo(),H=D(I),q=nt(H);M(I),yt(()=>ht(H,`${c(F)??""} `)),wt("click",q,()=>d(c(F))),A(W,I)}),A(O,k)};at(y,O=>{n()&&O(b)})}var E=nt(y,2);Bn(E),Gn(E,O=>s=O,()=>s),M(h);var C=nt(h,2);{var S=O=>{var k=qo();Yt(k,21,()=>c(a)(),te,(j,W,F)=>{var I=Go();let H;var q=D(I),X=D(q,!0);M(q);var J=nt(q,2),z=D(J),G=D(z,!0);M(z);var Z=nt(z,2),At=D(Z,!0);M(Z),M(J),M(I),yt(()=>{H=Qe(I,1,"dropdown-item svelte-84vb17",null,H,{highlighted:F===c(i)}),ht(X,c(W).title),ht(G,c(W).entityType),ht(At,c(W).repo)}),wt("mousedown",I,Te=>{Te.preventDefault(),f(c(W).id)}),Re("mouseenter",I,()=>m(i,F,!0)),A(j,I)}),M(k),A(O,k)},N=_(()=>c(a)().length>0);at(C,O=>{c(N)&&O(S)})}M(p),wt("keydown",E,v),Re("blur",E,()=>{setTimeout(()=>{n()&&c(u).length>0?g():n()||t.oncancel()},150)}),ci(E,()=>c(r),O=>m(r,O)),A(e,p),dt()}ri(["click","keydown","mousedown"]);function Jo(e){return typeof e=="function"}function Be(e){return e!==null&&typeof e=="object"}const Qo=["string","number","bigint","boolean"];function Wn(e){return e==null||Qo.includes(typeof e)?!0:Array.isArray(e)?e.every(t=>Wn(t)):typeof e=="object"?Object.getPrototypeOf(e)===Object.prototype:!1}const Se=Symbol("box"),vn=Symbol("is-writable");function T(e,t){const n=_(e);return t?{[Se]:!0,[vn]:!0,get current(){return c(n)},set current(r){t(r)}}:{[Se]:!0,get current(){return e()}}}function We(e){return Be(e)&&Se in e}function qn(e){return We(e)&&vn in e}function li(e){return We(e)?e:Jo(e)?T(e):Wt(e)}function $o(e){return Object.entries(e).reduce((t,[n,r])=>We(r)?(qn(r)?Object.defineProperty(t,n,{get(){return r.current},set(i){r.current=i}}):Object.defineProperty(t,n,{get(){return r.current}}),t):Object.assign(t,{[n]:r}),{})}function ts(e){return qn(e)?{[Se]:!0,get current(){return e.current}}:e}function Wt(e){let t=B(qt(e));return{[Se]:!0,[vn]:!0,get current(){return c(t)},set current(n){m(t,n,!0)}}}function ye(e){let t=B(qt(e));return{[Se]:!0,[vn]:!0,get current(){return c(t)},set current(n){m(t,n,!0)}}}ye.from=li;ye.with=T;ye.flatten=$o;ye.readonly=ts;ye.isBox=We;ye.isWritableBox=qn;function ui(...e){return function(t){for(const n of e)if(n){if(t.defaultPrevented)return;typeof n=="function"?n.call(this,t):n.current?.call(this,t)}}}var _r=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,es=/\n/g,ns=/^\s*/,rs=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,is=/^:\s*/,os=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,ss=/^[;\s]*/,as=/^\s+|\s+$/g,cs=`
3
3
  `,kr="/",Mr="*",le="",ls="comment",us="declaration";function ds(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,r=1;function i(p){var h=p.match(es);h&&(n+=h.length);var y=p.lastIndexOf(cs);r=~y?p.length-y:r+p.length}function s(){var p={line:n,column:r};return function(h){return h.position=new o(p),u(),h}}function o(p){this.start=p,this.end={line:n,column:r},this.source=t.source}o.prototype.content=e;function a(p){var h=new Error(t.source+":"+n+":"+r+": "+p);if(h.reason=p,h.filename=t.source,h.line=n,h.column=r,h.source=e,!t.silent)throw h}function l(p){var h=p.exec(e);if(h){var y=h[0];return i(y),e=e.slice(y.length),h}}function u(){l(ns)}function f(p){var h;for(p=p||[];h=d();)h!==!1&&p.push(h);return p}function d(){var p=s();if(!(kr!=e.charAt(0)||Mr!=e.charAt(1))){for(var h=2;le!=e.charAt(h)&&(Mr!=e.charAt(h)||kr!=e.charAt(h+1));)++h;if(h+=2,le===e.charAt(h-1))return a("End of comment missing");var y=e.slice(2,h-2);return r+=2,i(y),e=e.slice(h),r+=2,p({type:ls,comment:y})}}function g(){var p=s(),h=l(rs);if(h){if(d(),!l(is))return a("property missing ':'");var y=l(os),b=p({type:us,property:Fr(h[0].replace(_r,le)),value:y?Fr(y[0].replace(_r,le)):le});return l(ss),b}}function v(){var p=[];f(p);for(var h;h=g();)h!==!1&&(p.push(h),f(p));return p}return u(),v()}function Fr(e){return e?e.replace(as,le):le}function fs(e,t){let n=null;if(!e||typeof e!="string")return n;const r=ds(e),i=typeof t=="function";return r.forEach(s=>{if(s.type!=="declaration")return;const{property:o,value:a}=s;i?t(o,a,s):a&&(n=n||{},n[o]=a)}),n}const hs=/\d/,gs=["-","_","/","."];function vs(e=""){if(!hs.test(e))return e!==e.toLowerCase()}function ps(e){const t=[];let n="",r,i;for(const s of e){const o=gs.includes(s);if(o===!0){t.push(n),n="",r=void 0;continue}const a=vs(s);if(i===!1){if(r===!1&&a===!0){t.push(n),n=s,r=a;continue}if(r===!0&&a===!1&&n.length>1){const l=n.at(-1);t.push(n.slice(0,Math.max(0,n.length-1))),n=l+s,r=a;continue}}n+=s,r=a,i=o}return t.push(n),t}function di(e){return e?ps(e).map(t=>ys(t)).join(""):""}function ms(e){return ws(di(e||""))}function ys(e){return e?e[0].toUpperCase()+e.slice(1):""}function ws(e){return e?e[0].toLowerCase()+e.slice(1):""}function De(e){if(!e)return{};const t={};function n(r,i){if(r.startsWith("-moz-")||r.startsWith("-webkit-")||r.startsWith("-ms-")||r.startsWith("-o-")){t[di(r)]=i;return}if(r.startsWith("--")){t[r]=i;return}t[ms(r)]=i}return fs(e,n),t}function de(...e){return(...t)=>{for(const n of e)typeof n=="function"&&n(...t)}}function bs(e,t){const n=RegExp(e,"g");return r=>{if(typeof r!="string")throw new TypeError(`expected an argument of type string, but got ${typeof r}`);return r.match(n)?r.replace(n,t):r}}const xs=bs(/[A-Z]/,e=>`-${e.toLowerCase()}`);function Ss(e){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError(`expected an argument of type object, but got ${typeof e}`);return Object.keys(e).map(t=>`${xs(t)}: ${e[t]};`).join(`
4
4
  `)}function fi(e={}){return Ss(e).replace(`
5
5
  `," ")}const As=["onabort","onanimationcancel","onanimationend","onanimationiteration","onanimationstart","onauxclick","onbeforeinput","onbeforetoggle","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncompositionend","oncompositionstart","oncompositionupdate","oncontextlost","oncontextmenu","oncontextrestored","oncopy","oncuechange","oncut","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","onfocusin","onfocusout","onformdata","ongotpointercapture","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onlostpointercapture","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onpaste","onpause","onplay","onplaying","onpointercancel","onpointerdown","onpointerenter","onpointerleave","onpointermove","onpointerout","onpointerover","onpointerup","onprogress","onratechange","onreset","onresize","onscroll","onscrollend","onsecuritypolicyviolation","onseeked","onseeking","onselect","onselectionchange","onselectstart","onslotchange","onstalled","onsubmit","onsuspend","ontimeupdate","ontoggle","ontouchcancel","ontouchend","ontouchmove","ontouchstart","ontransitioncancel","ontransitionend","ontransitionrun","ontransitionstart","onvolumechange","onwaiting","onwebkitanimationend","onwebkitanimationiteration","onwebkitanimationstart","onwebkittransitionend","onwheel"],Es=new Set(As);function Os(e){return Es.has(e)}function Xt(...e){const t={...e[0]};for(let n=1;n<e.length;n++){const r=e[n];if(r){for(const i of Object.keys(r)){const s=t[i],o=r[i],a=typeof s=="function",l=typeof o=="function";if(a&&Os(i)){const u=s,f=o;t[i]=ui(u,f)}else if(a&&l)t[i]=de(s,o);else if(i==="class"){const u=Wn(s),f=Wn(o);u&&f?t[i]=Cn(s,o):u?t[i]=Cn(s):f&&(t[i]=Cn(o))}else if(i==="style"){const u=typeof s=="object",f=typeof o=="object",d=typeof s=="string",g=typeof o=="string";if(u&&f)t[i]={...s,...o};else if(u&&g){const v=De(o);t[i]={...s,...v}}else if(d&&f){const v=De(s);t[i]={...v,...o}}else if(d&&g){const v=De(s),p=De(o);t[i]={...v,...p}}else u?t[i]=s:f?t[i]=o:d?t[i]=s:g&&(t[i]=o)}else t[i]=o!==void 0?o:s}for(const i of Object.getOwnPropertySymbols(r)){const s=t[i],o=r[i];t[i]=o!==void 0?o:s}}}return typeof t.style=="object"&&(t.style=fi(t.style).replaceAll(`
@@ -1,4 +1,4 @@
1
- import{c as Y,a as l,d as Ea,e as Ye,s as C,b,f as v,t as Aa}from"./DeY0oOW3.js";import{ai as N,f as k,p as na,g as e,i as r,M as ka,ak as S,z as la,aj as Ca,B as ia,D as n,I as a,F as i,J as E,a3 as Qa,G as zt,ao as _s,bp as Yt,a8 as Fs}from"./Cs6vwwZC.js";import{i as h}from"./BuHHk4nP.js";import{I as He,s as Ge,e as Ie,i as Ke,X as Ja,T as $a,P as qa,n as Je,a as Rs}from"./CiIF45lL.js";import{l as Xe,s as Ze,p as oa}from"./C0iyiXwO.js";import{i as yt,s as vt,j as Ae,l as us,r as Ht,b as Dt,a as Ft,k as Ls,m as Is,n as Ks,o as Os,w as p,p as Us,q as Vs,e as Bs}from"./BFD-PG4k.js";import{b as ra}from"./CH-raHh7.js";import{b as Ma}from"./-lhxaNNQ.js";import{g as At}from"./BUuoVpOJ.js";import"./BKhAbhZ4.js";function hs(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];He(f,Ze({name:"search"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function za(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m9 18 6-6-6-6"}]];He(f,Ze({name:"chevron-right"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function xa(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m6 9 6 6 6-6"}]];He(f,Ze({name:"chevron-down"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function Ws(){return yt("/api/status")}function ms(f){return yt("/api/commit",{method:"POST",body:JSON.stringify({message:f})})}function fs(){return yt("/api/push",{method:"POST",body:"{}"})}function js(){return yt("/api/pull",{method:"POST",body:"{}"})}function Qs(){return yt("/api/revert",{method:"POST",body:"{}"})}function Js(){return yt("/api/sync-status")}function Ys(){let f=k(na([])),c=k(!1),y=k(!1),w=k(!1),g=k(!1),F=k(!1),m=k(0),z=k(0),de=k(0);const X=S(()=>e(f).reduce((R,B)=>R+B.changes.length,0));async function U(){r(c,!0);try{r(f,await Ws(),!0)}catch(R){console.error("Failed to fetch git status:",R)}finally{r(c,!1),q()}}async function te(){try{const R=await Js();r(z,R.ahead,!0),r(de,R.behind,!0)}catch(R){console.error("Failed to fetch sync status:",R)}}async function A(){await Promise.all([U(),te()])}function q(){typeof window<"u"&&window.dispatchEvent(new CustomEvent("studiograph:git-refresh"))}async function K(R){r(y,!0);try{await ms(R),await A()}finally{r(y,!1)}}async function M(){r(w,!0);try{await fs(),await te()}finally{r(w,!1)}}async function ae(R){r(y,!0);try{await ms(R)}finally{r(y,!1)}r(w,!0);try{await fs()}finally{r(w,!1)}await A()}async function se(){r(g,!0);try{await js(),await A()}finally{r(g,!1)}}async function W(){r(F,!0);try{const R=await Qs();return ka(m),await A(),R}finally{r(F,!1)}}return{get repoStatuses(){return e(f)},get totalChanges(){return e(X)},get loading(){return e(c)},get committing(){return e(y)},get pushing(){return e(w)},get pulling(){return e(g)},get reverting(){return e(F)},get revertCount(){return e(m)},get ahead(){return e(z)},get behind(){return e(de)},refresh:U,refreshSyncStatus:te,refreshAll:A,commit:K,push:M,commitAndPush:ae,pull:se,revert:W}}const Wa=Ys();function Hs(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m16 17 5-5-5-5"}],["path",{d:"M21 12H9"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}]];He(f,Ze({name:"log-out"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}const Gs={project:"#6e6ee8",organization:"#00c2b2",person:"#f0c246",meeting:"#ff7a00",deal:"#3ecf8e",deliverable:"#ff3864",decision:"#00a8ff",dataset:"#be00ff",process:"#f5c800",deck:"#6e6ee8",doc:"#00a8ff",document:"#a855f7",note:"#94a3b8",publication:"#ec4899",reference:"#14b8a6",task:"#f97316",role:"#ff7a00","practice-area":"#8b5cf6","case-study":"#06b6d4",standard:"#ff2aa8"};function Mt(f){return f?Gs[f]??"#5c5c66":"#5c5c66"}const Xs={person:"people","practice-area":"practice-areas","case-study":"case-studies",process:"processes"};function Zs(f){return Xs[f]??f+"s"}function en(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"}],["circle",{cx:"12",cy:"12",r:"3"}]];He(f,Ze({name:"eye"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function ja(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"}],["path",{d:"m2 2 20 20"}]];He(f,Ze({name:"eye-off"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function tn(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"}],["circle",{cx:"12",cy:"12",r:"3"}]];He(f,Ze({name:"settings"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function an(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M20 8h-5"}],["path",{d:"M15 10V6.5a2.5 2.5 0 0 1 5 0V10"}],["path",{d:"M15 14h5l-5 6h5"}]];He(f,Ze({name:"arrow-down-a-z"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function sn(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M11 4h10"}],["path",{d:"M11 8h7"}],["path",{d:"M11 12h4"}]];He(f,Ze({name:"arrow-down-wide-narrow"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}var nn=v('<div class="confirm-backdrop svelte-193t4hn"><div class="confirm-modal svelte-193t4hn"><div class="confirm-header svelte-193t4hn"><h2 class="confirm-title svelte-193t4hn"> </h2></div> <div class="confirm-body svelte-193t4hn"><p class="confirm-message svelte-193t4hn"> </p></div> <div class="confirm-footer svelte-193t4hn"><button class="footer-btn ghost svelte-193t4hn"> </button> <button> </button></div></div></div>');function ps(f,c){la(c,!0);let y=oa(c,"confirmLabel",3,"Confirm"),w=oa(c,"cancelLabel",3,"Cancel"),g=oa(c,"destructive",3,!1);function F(U){U.target.classList.contains("confirm-backdrop")&&c.oncancel()}function m(U){U.key==="Escape"&&c.oncancel(),U.key==="Enter"&&c.onconfirm()}var z=Y();Ye("keydown",Ca,function(...U){(c.open?m:void 0)?.apply(this,U)});var de=N(z);{var X=U=>{var te=nn(),A=n(te),q=n(A),K=n(q),M=n(K,!0);a(K),a(q);var ae=i(q,2),se=n(ae),W=n(se,!0);a(se),a(ae);var R=i(ae,2),B=n(R),Z=n(B,!0);a(B);var ne=i(B,2);let ze;var ie=n(ne,!0);a(ne),a(R),a(A),a(te),E(()=>{C(M,c.title),C(W,c.message),C(Z,w()),ze=vt(ne,1,"footer-btn svelte-193t4hn",null,ze,{destructive:g(),accent:!g()}),C(ie,y())}),b("click",te,F),b("click",B,function(...ve){c.oncancel?.apply(this,ve)}),b("click",ne,function(...ve){c.onconfirm?.apply(this,ve)}),l(U,te)};h(de,U=>{c.open&&U(X)})}l(f,z),ia()}Ea(["click"]);var rn=v('<button class="type-card svelte-ak7t5k" type="button"><span class="type-dot svelte-ak7t5k"></span> <div class="type-info svelte-ak7t5k"><span class="type-name svelte-ak7t5k"> </span> <span class="type-desc svelte-ak7t5k"> </span></div></button>'),on=v('<div class="type-section svelte-ak7t5k"><div class="type-section-label svelte-ak7t5k"> </div> <div class="type-grid svelte-ak7t5k"></div></div>'),ln=v('<div class="entity-dialog-backdrop svelte-ak7t5k"><div class="entity-dialog svelte-ak7t5k"><div class="entity-dialog-header svelte-ak7t5k"><h2 class="entity-dialog-title svelte-ak7t5k">New Entity</h2> <button class="dialog-close svelte-ak7t5k" type="button">&times;</button></div> <div class="entity-dialog-body svelte-ak7t5k"></div></div></div>');function cn(f,c){la(c,!0);let y=oa(c,"appEntityTypes",19,()=>[]);const w={deck:"Presentation slides",doc:"Professional documents",project:"Client engagements and initiatives",meeting:"Conversations and check-ins",decision:"Choices made and their rationale",task:"Action items and to-dos",deliverable:"Outputs and work products",note:"Freeform thinking and scratch",process:"Repeatable methods and workflows",standard:"Guidelines and best practices","case-study":"Past work and lessons learned",document:"Long-form structured content",dataset:"Structured data and tables",reference:"Articles, tools, and resources",publication:"Published works and reports",person:"People you work with",organization:"Companies and institutions",role:"Job functions and responsibilities","practice-area":"Disciplines and specialties",deal:"Opportunities and proposals"},g=[{group:"Project",types:["project","meeting","decision","task","deliverable","note"]},{group:"Knowledge",types:["process","standard","case-study","document","dataset","reference","publication"]},{group:"Business",types:["person","organization","role","practice-area","deal"]}],F=S(()=>y().length>0?[{group:"Apps",types:y()},...g]:g);function m(A){return A.replace(/-/g," ").replace(/\b\w/g,q=>q.toUpperCase())}function z(A){A.target.classList.contains("entity-dialog-backdrop")&&c.oncancel()}function de(A){A.key==="Escape"&&c.oncancel()}var X=Y();Ye("keydown",Ca,function(...A){(c.open?de:void 0)?.apply(this,A)});var U=N(X);{var te=A=>{var q=ln(),K=n(q),M=n(K),ae=i(n(M),2);a(M);var se=i(M,2);Ie(se,21,()=>e(F),Ke,(W,R)=>{var B=on(),Z=n(B),ne=n(Z,!0);a(Z);var ze=i(Z,2);Ie(ze,21,()=>e(R).types,Ke,(ie,ve)=>{var ue=rn(),xe=n(ue);let Oe;var $e=i(xe,2),et=n($e),xt=n(et,!0);a(et);var tt=i(et,2),ot=n(tt,!0);a(tt),a($e),a(ue),E((Me,$t)=>{Oe=Ae(xe,"",Oe,Me),C(xt,$t),C(ot,w[e(ve)])},[()=>({background:Mt(e(ve))}),()=>m(e(ve))]),b("click",ue,()=>c.onselect(e(ve))),l(ie,ue)}),a(ze),a(B),E(()=>C(ne,e(R).group)),l(W,B)}),a(se),a(K),a(q),b("click",q,z),b("click",K,W=>W.stopPropagation()),b("click",ae,function(...W){c.oncancel?.apply(this,W)}),l(A,q)};h(U,A=>{c.open&&A(te)})}l(f,X),ia()}Ea(["click"]);function dn(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor"}]];He(f,Ze({name:"key-round"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function vn(){return yt("/api/permissions/collections")}function un(f,c){return yt("/api/permissions/grant",{method:"POST",body:JSON.stringify({userId:f,collection:c})})}function mn(f,c){return yt("/api/permissions/revoke",{method:"POST",body:JSON.stringify({userId:f,collection:c})})}var fn=v('<div class="status-msg error svelte-1qsmvmm"> </div>'),pn=v('<div class="loading-text svelte-1qsmvmm">Loading users...</div>'),_n=v('<div class="access-row confirm-row svelte-1qsmvmm"><span class="confirm-text svelte-1qsmvmm"> </span> <button class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button class="confirm-btn revoke svelte-1qsmvmm">Delete</button></div>'),hn=v('<div class="status-msg error svelte-1qsmvmm" style="padding-left: 0;"> </div>'),yn=v('<form class="inline-reset-row svelte-1qsmvmm"><input type="password" required="" minlength="8" autocomplete="new-password" class="form-input svelte-1qsmvmm"/> <button type="button" class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button type="submit" class="confirm-btn reset svelte-1qsmvmm">Reset</button></form> <!>',1),gn=v('<span class="perm-badge admin-badge svelte-1qsmvmm">Admin</span>'),bn=v('<button class="icon-btn svelte-1qsmvmm" title="Reset password"><!></button> <button class="icon-btn danger svelte-1qsmvmm" title="Delete user"><!></button>',1),wn=v('<span class="icon-spacer svelte-1qsmvmm"></span>'),kn=v('<div class="access-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <!> <span class="access-email svelte-1qsmvmm"> </span></span> <!></div>'),zn=v('<div class="status-msg error svelte-1qsmvmm"> </div>'),xn=v('<form class="inline-add-rows svelte-1qsmvmm"><div class="form-row svelte-1qsmvmm"><input type="text" placeholder="Name" autocomplete="off" class="form-input svelte-1qsmvmm"/> <input type="email" placeholder="Email" required="" autocomplete="off" class="form-input svelte-1qsmvmm"/></div> <div class="form-row svelte-1qsmvmm"><input type="password" placeholder="Password (8+ chars)" required="" minlength="8" autocomplete="new-password" class="form-input svelte-1qsmvmm"/> <select class="form-input svelte-1qsmvmm"><option>Member</option><option>Admin</option></select></div> <!> <div class="form-row form-actions svelte-1qsmvmm"><button type="button" class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button type="submit" class="confirm-btn reset svelte-1qsmvmm">Add</button></div></form>'),$n=v('<button class="add-trigger svelte-1qsmvmm"><span class="add-trigger-icon svelte-1qsmvmm"><!></span> <span>Add User</span></button>'),qn=v('<div class="collection-list user-list svelte-1qsmvmm"></div> <!>',1),En=v('<div class="loading-text svelte-1qsmvmm">Loading collections...</div>'),Cn=v('<div class="access-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <span class="perm-badge admin-badge svelte-1qsmvmm">Admin</span> <span class="access-email svelte-1qsmvmm"> </span></span> <span class="icon-spacer svelte-1qsmvmm"></span></div>'),Sn=v('<div class="access-row confirm-row svelte-1qsmvmm"><span class="confirm-text svelte-1qsmvmm"> </span> <button class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button class="confirm-btn revoke svelte-1qsmvmm">Remove</button></div>'),Tn=v('<div class="access-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <span class="access-email svelte-1qsmvmm"> </span></span> <button class="icon-btn danger svelte-1qsmvmm" title="Remove access"><!></button></div>'),Nn=v('<div class="access-row candidate-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <span class="access-email svelte-1qsmvmm"> </span></span> <button class="icon-btn grant-btn svelte-1qsmvmm" title="Grant access"><!></button></div>'),Pn=v('<!> <button class="add-trigger svelte-1qsmvmm"><span>Done</span></button>',1),Dn=v('<button class="add-trigger svelte-1qsmvmm"><span class="add-trigger-icon svelte-1qsmvmm"><!></span> <span>Add User</span></button>'),An=v("<!> <!> <!>",1),Mn=v('<div class="collection-section svelte-1qsmvmm"><button class="collection-header svelte-1qsmvmm"><span class="collection-chevron svelte-1qsmvmm"><!></span> <span class="collection-text svelte-1qsmvmm"><span class="collection-name svelte-1qsmvmm"> </span> <span class="collection-count svelte-1qsmvmm"> </span></span></button> <!></div>'),Fn=v('<div class="collection-list svelte-1qsmvmm"></div>'),Rn=v('<div class="perm-backdrop svelte-1qsmvmm"><div class="perm-modal svelte-1qsmvmm"><div class="perm-header svelte-1qsmvmm"><h2 class="perm-title svelte-1qsmvmm">Workspace Settings</h2> <button class="close-btn svelte-1qsmvmm"><!></button></div> <div class="tab-bar svelte-1qsmvmm"><button>Users</button> <button>Collections</button></div> <div class="perm-body svelte-1qsmvmm"><!> <!></div></div></div>');function Ln(f,c){la(c,!0);let y=k("users"),w=k(na([])),g=k(!1),F=k(na([])),m=k(!1),z=k(""),de=k(!1),X=k(""),U=k(""),te=k(""),A=k("member"),q=k(!1),K=k(""),M=k(null),ae=k(!1),se=k(null),W=k(""),R=k(!1),B=k(""),Z=na({}),ne=na({}),ze=k(null),ie=k(null),ve=k(!1);function ue(P){Z[P]=!(Z[P]??!1)}function xe(P){return Z[P]??!1}Qa(()=>{c.open&&(e(y)==="users"&&e(w).length===0&&Oe(),e(y)==="collections"&&e(F).length===0&&$e())});async function Oe(){r(g,!0),r(z,"");try{const P=await us();r(w,P.users,!0)}catch(P){r(z,P.message,!0)}finally{r(g,!1)}}async function $e(){r(m,!0),r(z,"");try{if(e(w).length===0){const P=await us();r(w,P.users,!0)}r(F,await vn(),!0)}catch(P){r(z,P.message,!0)}finally{r(m,!1)}}async function et(P){P.preventDefault(),r(K,""),r(q,!0);try{await Os(e(U),e(te),e(X)||e(U).split("@")[0],e(A)),r(X,""),r(U,""),r(te,""),r(A,"member"),r(de,!1),await Oe()}catch(Ue){r(K,Ue.message||"Failed to create user",!0)}finally{r(q,!1)}}async function xt(){if(e(M)){r(ae,!0);try{await Ls(e(M).id),r(M,null),await Oe(),e(F).length>0&&$e()}catch(P){r(z,P.message,!0),r(M,null)}finally{r(ae,!1)}}}async function tt(){if(!(!e(se)||!e(W))){r(R,!0),r(B,"");try{await Is(e(se).id,e(W)),r(se,null),r(W,"")}catch(P){r(B,P.message||"Failed to reset password",!0)}finally{r(R,!1)}}}function ot(){return e(w).filter(P=>P.role==="admin")}function Me(P){const Ue=new Set(P.users.map(Ve=>Ve.id));return e(w).filter(Ve=>Ve.role==="member"&&!Ue.has(Ve.id))}async function $t(P,Ue){r(ze,P,!0);try{await un(Ue,P),ne[P]=!1,await $e()}catch(Ve){r(z,Ve.message,!0)}finally{r(ze,null)}}async function qe(){if(e(ie)){r(ve,!0);try{await mn(e(ie).user.id,e(ie).collection),r(ie,null),await $e()}catch(P){r(z,P.message,!0),r(ie,null)}finally{r(ve,!1)}}}function j(P){P.target.classList.contains("perm-backdrop")&&c.onclose()}function gt(P){P.key==="Escape"&&c.onclose()}var bt=Y();Ye("keydown",Ca,gt);var ut=N(bt);{var ca=P=>{var Ue=Rn(),Ve=n(Ue),at=n(Ve),Be=i(n(at),2),Fa=n(Be);Ja(Fa,{size:16}),a(Be),a(at);var da=i(at,2),va=n(da);let mt;var Gt=i(va,2);let ua;a(da);var Sa=i(da,2),Xt=n(Sa);{var Ra=me=>{var We=fn(),qt=n(We,!0);a(We),E(()=>C(qt,e(z))),l(me,We)};h(Xt,me=>{e(z)&&me(Ra)})}var Ta=i(Xt,2);{var La=me=>{var We=Y(),qt=N(We);{var Rt=Ee=>{var st=pn();l(Ee,st)},Lt=Ee=>{var st=qn(),It=N(st);Ie(It,21,()=>e(w),Ke,(je,O)=>{var Ce=Y(),lt=N(Ce);{var nt=fe=>{var he=_n(),G=n(he),Se=n(G);a(G);var we=i(G,2),Fe=i(we,2);a(he),E(()=>{C(Se,`Delete ${e(O).displayName??""}?`),we.disabled=e(ae),Fe.disabled=e(ae)}),b("click",we,()=>{r(M,null)}),b("click",Fe,xt),l(fe,he)},ft=fe=>{var he=yn(),G=N(he),Se=n(G);Ht(Se);var we=i(Se,2),Fe=i(we,2);a(G);var ce=i(G,2);{var it=Q=>{var Te=hn(),_t=n(Te,!0);a(Te),E(()=>C(_t,e(B))),l(Q,Te)};h(ce,Q=>{e(B)&&Q(it)})}E(()=>{Dt(Se,"placeholder",`New password for ${e(O).displayName??""}`),we.disabled=e(R),Fe.disabled=e(R)||!e(W)}),Ye("submit",G,Q=>{Q.preventDefault(),tt()}),ra(Se,()=>e(W),Q=>r(W,Q)),b("click",we,()=>{r(se,null),r(W,""),r(B,"")}),l(fe,he)},pt=fe=>{var he=kn(),G=n(he),Se=n(G,!0);a(G);var we=i(G,2),Fe=n(we),ce=n(Fe,!0);a(Fe);var it=i(Fe,2);{var Q=H=>{var V=gn();l(H,V)};h(it,H=>{e(O).role==="admin"&&H(Q)})}var Te=i(it,2),_t=n(Te,!0);a(Te),a(we);var ma=i(we,2);{var fa=H=>{var V=bn(),pe=N(V),t=n(pe);dn(t,{size:13}),a(pe);var s=i(pe,2),o=n(s);$a(o,{size:13}),a(s),b("click",pe,()=>{r(se,e(O),!0),r(W,""),r(B,"")}),b("click",s,()=>{r(M,e(O),!0)}),l(H,V)},Zt=H=>{var V=wn();l(H,V)};h(ma,H=>{Ft.user&&e(O).id!==Ft.user.id?H(fa):H(Zt,!1)})}a(he),E(H=>{C(Se,H),C(ce,e(O).displayName),C(_t,e(O).email)},[()=>(e(O).displayName||e(O).email)[0].toUpperCase()]),l(fe,he)};h(lt,fe=>{e(M)?.id===e(O).id?fe(nt):e(se)?.id===e(O).id?fe(ft,1):fe(pt,!1)})}l(je,Ce)}),a(It);var be=i(It,2);{var Et=je=>{var O=xn(),Ce=n(O),lt=n(Ce);Ht(lt);var nt=i(lt,2);Ht(nt),a(Ce);var ft=i(Ce,2),pt=n(ft);Ht(pt);var fe=i(pt,2),he=n(fe);he.value=he.__value="member";var G=i(he);G.value=G.__value="admin",a(fe),a(ft);var Se=i(ft,2);{var we=Q=>{var Te=zn(),_t=n(Te,!0);a(Te),E(()=>C(_t,e(K))),l(Q,Te)};h(Se,Q=>{e(K)&&Q(we)})}var Fe=i(Se,2),ce=n(Fe),it=i(ce,2);a(Fe),a(O),E(()=>it.disabled=e(q)),Ye("submit",O,et),ra(lt,()=>e(X),Q=>r(X,Q)),ra(nt,()=>e(U),Q=>r(U,Q)),ra(pt,()=>e(te),Q=>r(te,Q)),Ks(fe,()=>e(A),Q=>r(A,Q)),b("click",ce,()=>{r(de,!1),r(K,"")}),l(je,O)},Ct=je=>{var O=$n(),Ce=n(O),lt=n(Ce);qa(lt,{size:14}),a(Ce),zt(2),a(O),b("click",O,()=>{r(de,!0)}),l(je,O)};h(be,je=>{e(de)?je(Et):je(Ct,!1)})}l(Ee,st)};h(qt,Ee=>{e(g)?Ee(Rt):Ee(Lt,!1)})}l(me,We)},Na=me=>{var We=Y(),qt=N(We);{var Rt=Ee=>{var st=En();l(Ee,st)},Lt=Ee=>{var st=Fn();Ie(st,21,()=>e(F),Ke,(It,be)=>{const Et=S(()=>xe(e(be).collection)),Ct=S(ot);var je=Mn(),O=n(je),Ce=n(O),lt=n(Ce);{var nt=ce=>{xa(ce,{size:14})},ft=ce=>{za(ce,{size:14})};h(lt,ce=>{e(Et)?ce(nt):ce(ft,!1)})}a(Ce);var pt=i(Ce,2),fe=n(pt),he=n(fe,!0);a(fe);var G=i(fe,2),Se=n(G,!0);a(G),a(pt),a(O);var we=i(O,2);{var Fe=ce=>{const it=S(()=>Me(e(be)));var Q=An(),Te=N(Q);Ie(Te,17,()=>e(Ct),Ke,(H,V)=>{var pe=Cn(),t=n(pe),s=n(t,!0);a(t);var o=i(t,2),d=n(o),$=n(d,!0);a(d);var _=i(d,4),u=n(_,!0);a(_),a(o),zt(2),a(pe),E(L=>{C(s,L),C($,e(V).displayName),C(u,e(V).email)},[()=>(e(V).displayName||e(V).email)[0].toUpperCase()]),l(H,pe)});var _t=i(Te,2);Ie(_t,17,()=>e(be).users,Ke,(H,V)=>{var pe=Y(),t=N(pe);{var s=d=>{var $=Sn(),_=n($),u=n(_);a(_);var L=i(_,2),J=i(L,2);a($),E(()=>{C(u,`Remove ${e(V).displayName??""}?`),L.disabled=e(ve),J.disabled=e(ve)}),b("click",L,()=>{r(ie,null)}),b("click",J,qe),l(d,$)},o=d=>{var $=Tn(),_=n($),u=n(_,!0);a(_);var L=i(_,2),J=n(L),I=n(J,!0);a(J);var D=i(J,2),re=n(D,!0);a(D),a(L);var _e=i(L,2),ke=n(_e);$a(ke,{size:13}),a(_e),a($),E(rt=>{C(u,rt),C(I,e(V).displayName),C(re,e(V).email)},[()=>(e(V).displayName||e(V).email)[0].toUpperCase()]),b("click",_e,()=>{r(ie,{collection:e(be).collection,user:e(V)},!0)}),l(d,$)};h(t,d=>{e(ie)?.collection===e(be).collection&&e(ie)?.user.id===e(V).id?d(s):d(o,!1)})}l(H,pe)});var ma=i(_t,2);{var fa=H=>{var V=Pn(),pe=N(V);Ie(pe,17,()=>e(it),Ke,(s,o)=>{var d=Nn(),$=n(d),_=n($,!0);a($);var u=i($,2),L=n(u),J=n(L,!0);a(L);var I=i(L,2),D=n(I,!0);a(I),a(u);var re=i(u,2),_e=n(re);qa(_e,{size:18}),a(re),a(d),E(ke=>{C(_,ke),C(J,e(o).displayName),C(D,e(o).email),re.disabled=e(ze)===e(be).collection},[()=>(e(o).displayName||e(o).email)[0].toUpperCase()]),b("click",re,()=>$t(e(be).collection,e(o).id)),l(s,d)});var t=i(pe,2);b("click",t,()=>{ne[e(be).collection]=!1}),l(H,V)},Zt=H=>{var V=Dn(),pe=n(V),t=n(pe);qa(t,{size:14}),a(pe),zt(2),a(V),b("click",V,()=>{ne[e(be).collection]=!0}),l(H,V)};h(ma,H=>{ne[e(be).collection]?H(fa):e(it).length>0&&H(Zt,1)})}l(ce,Q)};h(we,ce=>{e(Et)&&ce(Fe)})}a(je),E(()=>{C(he,e(be).collection),C(Se,e(Ct).length+e(be).users.length)}),b("click",O,()=>ue(e(be).collection)),l(It,je)}),a(st),l(Ee,st)};h(qt,Ee=>{e(m)?Ee(Rt):Ee(Lt,!1)})}l(me,We)};h(Ta,me=>{e(y)==="users"?me(La):e(y)==="collections"&&me(Na,1)})}a(Sa),a(Ve),a(Ue),E(()=>{mt=vt(va,1,"tab-btn svelte-1qsmvmm",null,mt,{active:e(y)==="users"}),ua=vt(Gt,1,"tab-btn svelte-1qsmvmm",null,ua,{active:e(y)==="collections"})}),b("click",Ue,j),b("click",Be,function(...me){c.onclose?.apply(this,me)}),b("click",va,()=>{r(y,"users"),r(M,null),r(se,null),r(ie,null)}),b("click",Gt,()=>{r(y,"collections"),r(M,null),r(se,null),r(ie,null)}),l(P,Ue)};h(ut,P=>{c.open&&P(ca)})}l(f,bt),ia()}Ea(["click"]);var In=v('<span class="row-chevron svelte-6dohdz"><!></span>'),Kn=v('<span class="item-count svelte-6dohdz"> </span>'),On=v('<div class="indent-group svelte-6dohdz"><!></div>'),Un=v('<button><!> <span class="row-label svelte-6dohdz"> </span> <!></button> <!>',1),Vn=v('<span class="repo-type-icon svelte-6dohdz"><!></span>'),Bn=v('<input class="repo-rename-input svelte-6dohdz" type="text"/>'),Wn=v('<span class="repo-name svelte-6dohdz"> </span>'),jn=v('<span class="item-count svelte-6dohdz"> </span>'),Qn=v('<span class="repo-dirty-dot svelte-6dohdz"></span>'),Jn=v('<button class="repo-delete-btn svelte-6dohdz" title="Delete collection"><!></button>'),Yn=v('<div class="loading-row svelte-6dohdz">Loading...</div>'),Hn=v('<span class="row-chevron svelte-6dohdz"><!></span>'),Gn=v('<mark class="filter-match svelte-6dohdz"> </mark>'),Xn=v('<div class="loading-row svelte-6dohdz">Loading...</div>'),Zn=v('<div class="indent-group svelte-6dohdz"><!></div>'),er=v('<div class="entity-row-wrapper svelte-6dohdz"><button><!> <span class="row-label svelte-6dohdz"><!></span> <span class="dirty-dot svelte-6dohdz"></span></button> <button class="entity-delete-btn svelte-6dohdz" title="Delete entity"><!></button></div> <!>',1),tr=v('<div class="indent-group svelte-6dohdz"></div>'),ar=v('<button><span class="row-chevron svelte-6dohdz"><!></span> <span class="row-label svelte-6dohdz"> </span> <span class="item-count svelte-6dohdz"> </span> <span class="dirty-dot svelte-6dohdz"></span></button> <!>',1),sr=v('<!> <button class="tree-row new-entity-row svelte-6dohdz"><span class="row-chevron svelte-6dohdz"><!></span> <span class="row-label svelte-6dohdz">New Entity</span></button>',1),nr=v('<div class="indent-group svelte-6dohdz"><!></div>'),rr=v('<div class="tree-group svelte-6dohdz"><div class="repo-row-wrapper svelte-6dohdz"><button><span class="row-chevron svelte-6dohdz"><!></span> <!> <!> <!> <!></button> <!></div> <!></div>'),or=v('<button class="home-btn svelte-6dohdz" title="Home"><div class="workspace-icon svelte-6dohdz"> </div> <span class="workspace-name svelte-6dohdz"> </span></button>'),lr=v('<button class="settings-btn svelte-6dohdz" title="Workspace Settings"><!></button>'),ir=v('<button class="filter-clear svelte-6dohdz" title="Clear filter"><!></button>'),cr=v('<mark class="filter-match svelte-6dohdz"> </mark>'),dr=v('<span class="recent-time svelte-6dohdz"> </span>'),vr=v('<div class="entity-row-wrapper svelte-6dohdz"><button><span class="entity-type-dot svelte-6dohdz"></span> <span class="row-label svelte-6dohdz"><!></span> <!> <span class="dirty-dot svelte-6dohdz"></span></button> <button class="entity-delete-btn svelte-6dohdz" title="Delete entity"><!></button></div>'),ur=v('<div class="no-results svelte-6dohdz">No matching entities</div>'),mr=v("<!> <!>",1),fr=v('<div class="no-results svelte-6dohdz">No matching entities</div>'),pr=v("<!> <!>",1),_r=v('<button class="new-collection-clear svelte-6dohdz" title="Clear"><!></button>'),hr=v("<button><!></button>"),yr=v('<div class="new-collection-row svelte-6dohdz"><input type="text" placeholder="collection-name" class="svelte-6dohdz"/> <!> <!></div>'),gr=v('<span class="confirm-text svelte-6dohdz">Sign out?</span> <button class="confirm-btn cancel svelte-6dohdz">Cancel</button> <button class="confirm-btn danger svelte-6dohdz">Sign Out</button>',1),br=v('<span class="user-email svelte-6dohdz"> </span> <button class="footer-icon-btn svelte-6dohdz" title="Sign out"><!></button>',1),wr=v('<div class="sidebar-footer svelte-6dohdz"><!></div>'),kr=v('<aside class="sidebar svelte-6dohdz"><div class="sidebar-header svelte-6dohdz"><!> <!></div> <div class="filter-bar svelte-6dohdz"><span class="filter-icon svelte-6dohdz"><!></span> <input class="filter-input svelte-6dohdz" type="text" placeholder="Search"/> <!> <button><!></button></div> <nav class="tree svelte-6dohdz"><!> <!> <button class="repo-row new-collection-btn svelte-6dohdz" title="New collection"><span class="row-chevron svelte-6dohdz"><!></span> <span class="repo-name svelte-6dohdz">New Collection</span></button></nav> <!></aside> <!> <!> <!> <!>',1);function zr(f,c){la(c,!0);const y=(t,s=Yt,o=Yt,d=Yt,$=Yt,_=Yt,u=Yt)=>{var L=Y(),J=N(L);Ie(J,17,s,Ke,(I,D)=>{const re=S(()=>_()?`${_()}/${e(D).name}`:e(D).name),_e=S(()=>`${o()}/${d()}/${$()}/${e(re)}`),ke=S(()=>e(D).type==="directory"),rt=S(()=>p.isFolderExpanded(e(_e))),Ne=S(()=>!e(ke)&&e(xe)===$()&&e(Oe)===e(re));var Kt=Un(),ct=N(Kt);let ea,St;var ta=n(ct);{var pa=oe=>{var x=In(),T=n(x);{var ee=ht=>{xa(ht,{size:14})},dt=ht=>{za(ht,{size:14})};h(T,ht=>{e(rt)?ht(ee):ht(dt,!1)})}a(x),l(oe,x)};h(ta,oe=>{e(ke)&&oe(pa)})}var Tt=i(ta,2),Ot=n(Tt,!0);a(Tt);var _a=i(Tt,2);{var ye=oe=>{var x=Kn(),T=n(x,!0);a(x),E(()=>C(T,e(D).count)),l(oe,x)};h(_a,oe=>{e(ke)&&e(D).count!=null&&oe(ye)})}a(ct);var Re=i(ct,2);{var wt=oe=>{var x=On();let T;var ee=n(x);y(ee,()=>e(D).children,o,d,$,()=>e(re),()=>u()+1),a(x),E(dt=>T=Ae(x,"",T,dt),[()=>({"--guide-left":We(u())})]),l(oe,x)};h(Re,oe=>{e(ke)&&e(rt)&&e(D).children&&e(D).children.length>0&&oe(wt)})}E(oe=>{ea=vt(ct,1,"tree-row svelte-6dohdz",null,ea,{selected:e(Ne),focused:e(gt)===e(_e)}),Dt(ct,"data-tree-key",e(_e)),St=Ae(ct,"",St,oe),C(Ot,e(D).name)},[()=>({"padding-left":me(u(),e(ke))})]),b("click",ct,()=>{e(ke)?p.toggleFolder(e(_e)):At(`/${o()}/${d()}/${$()}/${e(re)}`)}),l(I,Kt)}),l(t,L)},w=(t,s=Yt)=>{const o=S(()=>e(at)?.repo===s().name),d=S(()=>`repo:${s().name}`);var $=rr(),_=n($),u=n(_);let L,J;var I=n(u),D=n(I);{var re=x=>{xa(x,{size:14})},_e=S(()=>p.isExpanded(s().name)),ke=x=>{za(x,{size:14})};h(D,x=>{e(_e)?x(re):x(ke,!1)})}a(I);var rt=i(I,2);{var Ne=x=>{var T=Vn(),ee=n(T);ja(ee,{size:12}),a(T),l(x,T)};h(rt,x=>{s().private&&x(Ne)})}var Kt=i(rt,2);{var ct=x=>{var T=Bn();Ht(T),Ma(T,ee=>r(K,ee),()=>e(K)),b("keydown",T,se),Ye("blur",T,ae),b("click",T,ee=>ee.stopPropagation()),ra(T,()=>e(q),ee=>r(q,ee)),l(x,T)},ea=x=>{var T=Wn(),ee=n(T,!0);a(T),E(()=>C(ee,s().name)),b("dblclick",T,dt=>{s().type!=="private"&&M(s().name,dt)}),l(x,T)};h(Kt,x=>{e(A)===s().name?x(ct):x(ea,!1)})}var St=i(Kt,2);{var ta=x=>{var T=jn(),ee=n(T,!0);a(T),E(()=>C(ee,s().count)),l(x,T)};h(St,x=>{s().count!=null&&e(A)!==s().name&&x(ta)})}var pa=i(St,2);{var Tt=x=>{var T=Qn();l(x,T)},Ot=S(()=>e(xt).has(s().name));h(pa,x=>{e(Ot)&&x(Tt)})}a(u);var _a=i(u,2);{var ye=x=>{var T=Jn(),ee=n(T);$a(ee,{size:12}),a(T),b("click",T,dt=>z(s().name,dt)),l(x,T)};h(_a,x=>{e(A)!==s().name&&x(ye)})}a(_);var Re=i(_,2);{var wt=x=>{var T=nr();let ee;var dt=n(T);{var ht=Le=>{var Ut=Yn();let ha;E(aa=>ha=Ae(Ut,"",ha,aa),[()=>({"padding-left":me(1,!1)})]),l(Le,Ut)},Nt=Le=>{var Ut=sr(),ha=N(Ut);Ie(ha,17,()=>La(s().entities),Ke,(ya,Vt)=>{const Ia=S(()=>`type:${s().name}/${e(Vt).type}`),Ga=S(()=>!p.isFolderCollapsed(e(Ia))),gs=S(()=>e(Vt).entities.some(Pe=>e(et).has(`${s().name}/${Pe.id}`))),Xa=S(()=>s().name===e(ue)&&e(Vt).entities.some(Pe=>Pe.id===e(xe)));var Za=ar(),Bt=N(Za);let es,ts;var Ka=n(Bt),bs=n(Ka);{var ws=Pe=>{xa(Pe,{size:14})},ks=Pe=>{za(Pe,{size:14})};h(bs,Pe=>{e(Ga)?Pe(ws):Pe(ks,!1)})}a(Ka);var Oa=i(Ka,2),zs=n(Oa,!0);a(Oa);var as=i(Oa,2),xs=n(as,!0);a(as),zt(2),a(Bt);var $s=i(Bt,2);{var qs=Pe=>{var Pa=tr();let ss;Ie(Pa,21,()=>e(Vt).entities,Ke,(Ua,le)=>{const ns=S(()=>e(le).id===e(xe)&&s().name===e(ue)&&!e(Oe)),rs=S(()=>e(le).hasSubContent&&p.isEntityExpanded(s().name,e(le).entityType,e(le).id)),Da=S(()=>e(le).hasSubContent?p.getEntityContents(s().name,e(le).entityType,e(le).id):null),os=S(()=>`entity:${s().name}/${e(le).entityType}/${e(le).id}`);var ls=er(),ga=N(ls),Wt=n(ga);let is,cs;var ds=n(Wt);{var Es=ge=>{var Qe=Hn(),jt=n(Qe);{var ba=De=>{xa(De,{size:14})},Qt=De=>{za(De,{size:14})};h(jt,De=>{e(rs)?De(ba):De(Qt,!1)})}a(Qe),l(ge,Qe)};h(ds,ge=>{e(le).hasSubContent&&ge(Es)})}var Va=i(ds,2),Cs=n(Va);{var Ss=ge=>{var Qe=Y(),jt=N(Qe);Ie(jt,17,()=>Ta(e(le).title),Ke,(ba,Qt)=>{var De=Y(),kt=N(De);{var Jt=Pt=>{var sa=Gn(),Ms=n(sa,!0);a(sa),E(()=>C(Ms,e(Qt).text)),l(Pt,sa)},wa=Pt=>{var sa=Aa();E(()=>C(sa,e(Qt).text)),l(Pt,sa)};h(kt,Pt=>{e(Qt).match?Pt(Jt):Pt(wa,!1)})}l(ba,De)}),l(ge,Qe)},Ts=ge=>{var Qe=Aa();E(()=>C(Qe,e(le).title)),l(ge,Qe)};h(Cs,ge=>{e($e)?ge(Ss):ge(Ts,!1)})}a(Va);var Ns=i(Va,2);let vs;a(Wt);var Ba=i(Wt,2),Ps=n(Ba);$a(Ps,{size:12}),a(Ba),a(ga);var Ds=i(ga,2);{var As=ge=>{var Qe=Y(),jt=N(Qe);{var ba=De=>{var kt=Xn();let Jt;E(wa=>Jt=Ae(kt,"",Jt,wa),[()=>({"padding-left":me(3,!1)})]),l(De,kt)},Qt=De=>{var kt=Zn();let Jt;var wa=n(kt);y(wa,()=>e(Da).entries,()=>s().name,()=>e(le).entityType,()=>e(le).id,()=>"",()=>3),a(kt),E(Pt=>Jt=Ae(kt,"",Jt,Pt),[()=>({"--guide-left":We(2)})]),l(De,kt)};h(jt,De=>{e(Da).loading?De(ba):e(Da).entries.length>0&&De(Qt,1)})}l(ge,Qe)};h(Ds,ge=>{e(rs)&&e(Da)&&ge(As)})}E((ge,Qe,jt)=>{is=vt(Wt,1,"tree-row svelte-6dohdz",null,is,ge),Dt(Wt,"data-tree-key",e(os)),cs=Ae(Wt,"",cs,Qe),vs=Ae(Ns,"",vs,jt)},[()=>({selected:e(ns),dirty:e(et).has(`${s().name}/${e(le).id}`),focused:e(gt)===e(os)}),()=>({"padding-left":me(2,e(le).hasSubContent),"--active-color":e(ns)?Mt(e(le).entityType):void 0}),()=>({background:Mt(e(le).entityType)})]),Ye("mouseenter",ga,()=>{Je.hoveredEntityId=e(le).id}),Ye("mouseleave",ga,()=>{Je.hoveredEntityId=null}),b("click",Wt,()=>Xt(e(le),s().name)),b("click",Ba,ge=>U(s().name,e(le),ge)),l(Ua,ls)}),a(Pa),E(Ua=>ss=Ae(Pa,"",ss,Ua),[()=>({"--guide-left":We(1)})]),l(Pe,Pa)};h($s,Pe=>{e(Ga)&&Pe(qs)})}E(Pe=>{es=vt(Bt,1,"tree-row type-header-row svelte-6dohdz",null,es,{dirty:e(gs),"type-active":e(Xa)}),Dt(Bt,"data-tree-key",e(Ia)),ts=Ae(Bt,"",ts,Pe),C(zs,e(Vt).label),C(xs,e(Vt).entities.length)},[()=>({"padding-left":me(1,!0),"border-left-color":e(Xa)?Mt(e(Vt).type):"transparent"})]),b("click",Bt,()=>p.toggleFolder(e(Ia))),l(ya,Za)});var aa=i(ha,2);let Ya;var Ha=n(aa),ys=n(Ha);qa(ys,{size:14}),a(Ha),zt(2),a(aa),E(ya=>Ya=Ae(aa,"",Ya,ya),[()=>({"padding-left":me(1,!0)})]),b("click",aa,ya=>{ya.stopPropagation(),r(mt,s().name,!0)}),l(Le,Ut)};h(dt,Le=>{s().loading?Le(ht):Le(Nt,!1)})}a(T),E(Le=>ee=Ae(T,"",ee,Le),[()=>({"--guide-left":We(0)})]),l(x,T)},oe=S(()=>p.isExpanded(s().name));h(Re,x=>{e(oe)&&x(wt)})}a($),E(()=>{L=vt(u,1,"repo-row svelte-6dohdz",null,L,{"repo-active":e(o),focused:e(gt)===e(d)}),Dt(u,"data-tree-key",e(d)),J=Ae(u,"",J,{"--active-color":e(o)?e(at)?.color:void 0})}),b("click",u,()=>da(s().name)),l(t,$)};let g=k(!1),F=k(!1),m=k(null);function z(t,s){s.stopPropagation(),r(m,t,!0)}async function de(){if(!e(m))return;const t=e(m);r(m,null);try{await p.removeCollection(t)}catch(s){console.error("Failed to delete collection:",s.message)}}let X=k(null);function U(t,s,o){o.stopPropagation(),r(X,{repo:t,type:s.entityType,id:s.id,title:s.title},!0)}async function te(){if(!e(X))return;const{repo:t,type:s,id:o}=e(X);r(X,null);try{await Us(t,s,o),await p.refreshEntities(t),await Wa.refresh(),Je.selectedRepo===t&&Je.selectedId===o&&At("/")}catch(d){console.error("Failed to delete entity:",d.message)}}let A=k(null),q=k(""),K=k(void 0);function M(t,s){s.stopPropagation(),r(A,t,!0),r(q,t,!0),setTimeout(()=>e(K)?.select(),0)}async function ae(){if(!e(A))return;const t=e(A),s=e(q).trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");if(r(A,null),!(!s||s===t))try{await p.renameCollectionTo(t,s)}catch(o){console.error("Failed to rename collection:",o.message)}}function se(t){t.key==="Enter"?(t.preventDefault(),ae()):t.key==="Escape"&&r(A,null)}const W=S(()=>!Ft.authEnabled||Ft.user?.role==="admin");let R=k(!1),B=k(""),Z=k(!1),ne=k(void 0),ze=k(!1);async function ie(){const t=e(B).trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");if(t){r(ze,!0);try{await p.addCollection(t,void 0,e(Z)||void 0),r(R,!1),r(B,""),r(Z,!1)}catch{r(ze,!1),await new Promise(o=>requestAnimationFrame(o)),e(ne)?.classList.remove("shake"),e(ne)?.offsetWidth,e(ne)?.classList.add("shake"),e(ne)?.focus();return}finally{r(ze,!1)}}}function ve(t){t.key==="Enter"?(t.preventDefault(),ie()):t.key==="Escape"&&(r(R,!1),r(B,""),r(Z,!1))}const ue=S(()=>Je.selectedRepo),xe=S(()=>Je.selectedId),Oe=S(()=>Je.selectedSubPath),$e=S(()=>p.filterQuery),et=S(()=>{const t=new Set;for(const s of Wa.repoStatuses){const o=p.repos.find(d=>d.name===s.repo);if(o)for(const d of s.changes){const $=d.path;for(const _ of o.entities)if($.includes(_.id))t.add(`${s.repo}/${_.id}`);else if($.endsWith("/")){const u=$.replace(/\/$/,"");(u===_.entityType||u===_.entityType+"s"||u===_.entityType+"es")&&t.add(`${s.repo}/${_.id}`)}}}return t}),xt=S(()=>new Set(Wa.repoStatuses.filter(t=>t.changes.length>0).map(t=>t.repo)));let tt=k(void 0);function ot(t){const s=t.target.value;p.setFilterQuery(s)}function Me(){p.setFilterQuery(""),e(tt)&&(e(tt).value="")}function $t(t,s,o,d,$,_){for(const u of t){const L=$?`${$}/${u.name}`:u.name,J=`${s}/${o}/${d}/${L}`;u.type==="directory"?(_.push({key:J,kind:"content-dir",repo:s,folderKey:J}),p.isFolderExpanded(J)&&u.children?.length&&$t(u.children,s,o,d,L,_)):_.push({key:J,kind:"content-file",repo:s,gotoPath:`/${s}/${o}/${d}/${L}`})}}const qe=S(()=>{const t=[],s=p.sortedRepos;for(const o of s)if(t.push({key:`repo:${o.name}`,kind:"repo",repo:o.name}),p.isExpanded(o.name)&&!o.loading){for(const d of o.entities)if(t.push({key:`entity:${o.name}/${d.entityType}/${d.id}`,kind:"entity",repo:o.name,entity:d}),d.hasSubContent&&p.isEntityExpanded(o.name,d.entityType,d.id)){const _=p.getEntityContents(o.name,d.entityType,d.id);!_.loading&&_.entries.length>0&&$t(_.entries,o.name,d.entityType,d.id,"",t)}}return t});let j=k(-1);const gt=S(()=>e(j)>=0&&e(j)<e(qe).length?e(qe)[e(j)].key:null);let bt="";Qa(()=>{const t=p.filterQuery;t!==bt&&(bt=t,r(j,-1))});function ut(){requestAnimationFrame(()=>{if(!e(Be)||e(j)<0)return;const t=e(qe)[e(j)]?.key;if(!t)return;const s=e(Be).querySelector(`[data-tree-key="${CSS.escape(t)}"]`);s&&s.scrollIntoView({block:"nearest"})})}function ca(){if(e(j)<0)return;const t=e(qe)[e(j)];if(t)switch(t.kind){case"repo":p.toggleRepo(t.repo);break;case"entity":t.entity&&Xt(t.entity,t.repo);break;case"content-dir":t.folderKey&&p.toggleFolder(t.folderKey);break;case"content-file":t.gotoPath&&At(t.gotoPath);break}}function P(){if(e(j)<0)return;const t=e(qe)[e(j)];t&&(t.kind==="repo"&&!p.isExpanded(t.repo)?p.toggleRepo(t.repo):t.kind==="entity"&&t.entity?.hasSubContent&&!p.isEntityExpanded(t.repo,t.entity.entityType,t.entity.id)?p.toggleEntity(t.repo,t.entity.entityType,t.entity.id):t.kind==="content-dir"&&t.folderKey&&!p.isFolderExpanded(t.folderKey)?p.toggleFolder(t.folderKey):e(j)<e(qe).length-1&&(ka(j),ut()))}function Ue(){if(e(j)<0)return;const t=e(qe)[e(j)];t&&(t.kind==="repo"&&p.isExpanded(t.repo)?p.toggleRepo(t.repo):t.kind==="entity"&&t.entity?.hasSubContent&&p.isEntityExpanded(t.repo,t.entity.entityType,t.entity.id)?p.toggleEntity(t.repo,t.entity.entityType,t.entity.id):t.kind==="content-dir"&&t.folderKey&&p.isFolderExpanded(t.folderKey)?p.toggleFolder(t.folderKey):e(j)>0&&(ka(j,-1),ut()))}function Ve(t){if(t.key==="Escape"){Me(),e(tt)?.blur(),r(j,-1);return}if(t.key==="ArrowDown"){t.preventDefault(),e(j)<e(qe).length-1&&ka(j),ut();return}if(t.key==="ArrowUp"){t.preventDefault(),e(j)>0?ka(j,-1):e(j)===0&&r(j,-1),ut();return}if(t.key==="Enter"){t.preventDefault(),ca();return}if(t.key==="ArrowRight"){t.preventDefault(),P();return}if(t.key==="ArrowLeft"){t.preventDefault(),Ue();return}}const at=S(()=>{if(!e(xe)||!e(ue))return null;const t=p.repos.find(o=>o.name===e(ue));if(!t)return null;const s=t.entities.find(o=>o.id===e(xe));return s?{repo:t.name,entityType:s.entityType,color:Mt(s.entityType)}:null});Qa(()=>{const t=e(ue)&&e(xe)?`${e(ue)}/${e(xe)}`:null;t&&t!==p.lastAutoExpandedFor&&e(at)&&(p.lastAutoExpandedFor=t,p.isExpanded(e(at).repo)||p.toggleRepo(e(at).repo))});let Be=k(void 0);_s(()=>{e(Be)&&p.sidebarScrollTop>0&&(e(Be).scrollTop=p.sidebarScrollTop)});function Fa(){e(Be)&&(p.sidebarScrollTop=e(Be).scrollTop)}function da(t){p.toggleRepo(t)}function va(t,s,o){At(`/${t}/${s}/${o}`)}let mt=k(null),Gt=k(!1);function ua(t){return t.replace(/-/g," ").replace(/\b\w/g,s=>s.toUpperCase())}async function Sa(t,s){if(!e(Gt)){r(Gt,!0),r(mt,null);try{const o=`${s}-${Date.now()}`,d=`Untitled ${ua(s)}`,$=new Date().toISOString(),_=$.split("T")[0],u=s==="deck"?`<!-- slide: cover -->
1
+ import{c as Y,a as l,d as Ea,e as Ye,s as C,b,f as v,t as Aa}from"./DeY0oOW3.js";import{ai as N,f as k,p as na,g as e,i as r,M as ka,ak as S,z as la,aj as Ca,B as ia,D as n,I as a,F as i,J as E,a3 as Qa,G as zt,ao as _s,bp as Yt,a8 as Fs}from"./Cs6vwwZC.js";import{i as h}from"./BuHHk4nP.js";import{I as He,s as Ge,e as Ie,i as Ke,X as Ja,T as $a,P as qa,n as Je,a as Rs}from"./CiIF45lL.js";import{l as Xe,s as Ze,p as oa}from"./C0iyiXwO.js";import{i as yt,s as vt,j as Ae,l as us,r as Ht,b as Dt,a as Ft,k as Ls,m as Is,n as Ks,o as Os,w as p,p as Us,q as Vs,e as Bs}from"./BFD-PG4k.js";import{b as ra}from"./CH-raHh7.js";import{b as Ma}from"./-lhxaNNQ.js";import{g as At}from"./CSdc6XPm.js";import"./BKhAbhZ4.js";function hs(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];He(f,Ze({name:"search"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function za(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m9 18 6-6-6-6"}]];He(f,Ze({name:"chevron-right"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function xa(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m6 9 6 6 6-6"}]];He(f,Ze({name:"chevron-down"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function Ws(){return yt("/api/status")}function ms(f){return yt("/api/commit",{method:"POST",body:JSON.stringify({message:f})})}function fs(){return yt("/api/push",{method:"POST",body:"{}"})}function js(){return yt("/api/pull",{method:"POST",body:"{}"})}function Qs(){return yt("/api/revert",{method:"POST",body:"{}"})}function Js(){return yt("/api/sync-status")}function Ys(){let f=k(na([])),c=k(!1),y=k(!1),w=k(!1),g=k(!1),F=k(!1),m=k(0),z=k(0),de=k(0);const X=S(()=>e(f).reduce((R,B)=>R+B.changes.length,0));async function U(){r(c,!0);try{r(f,await Ws(),!0)}catch(R){console.error("Failed to fetch git status:",R)}finally{r(c,!1),q()}}async function te(){try{const R=await Js();r(z,R.ahead,!0),r(de,R.behind,!0)}catch(R){console.error("Failed to fetch sync status:",R)}}async function A(){await Promise.all([U(),te()])}function q(){typeof window<"u"&&window.dispatchEvent(new CustomEvent("studiograph:git-refresh"))}async function K(R){r(y,!0);try{await ms(R),await A()}finally{r(y,!1)}}async function M(){r(w,!0);try{await fs(),await te()}finally{r(w,!1)}}async function ae(R){r(y,!0);try{await ms(R)}finally{r(y,!1)}r(w,!0);try{await fs()}finally{r(w,!1)}await A()}async function se(){r(g,!0);try{await js(),await A()}finally{r(g,!1)}}async function W(){r(F,!0);try{const R=await Qs();return ka(m),await A(),R}finally{r(F,!1)}}return{get repoStatuses(){return e(f)},get totalChanges(){return e(X)},get loading(){return e(c)},get committing(){return e(y)},get pushing(){return e(w)},get pulling(){return e(g)},get reverting(){return e(F)},get revertCount(){return e(m)},get ahead(){return e(z)},get behind(){return e(de)},refresh:U,refreshSyncStatus:te,refreshAll:A,commit:K,push:M,commitAndPush:ae,pull:se,revert:W}}const Wa=Ys();function Hs(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m16 17 5-5-5-5"}],["path",{d:"M21 12H9"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}]];He(f,Ze({name:"log-out"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}const Gs={project:"#6e6ee8",organization:"#00c2b2",person:"#f0c246",meeting:"#ff7a00",deal:"#3ecf8e",deliverable:"#ff3864",decision:"#00a8ff",dataset:"#be00ff",process:"#f5c800",deck:"#6e6ee8",doc:"#00a8ff",document:"#a855f7",note:"#94a3b8",publication:"#ec4899",reference:"#14b8a6",task:"#f97316",role:"#ff7a00","practice-area":"#8b5cf6","case-study":"#06b6d4",standard:"#ff2aa8"};function Mt(f){return f?Gs[f]??"#5c5c66":"#5c5c66"}const Xs={person:"people","practice-area":"practice-areas","case-study":"case-studies",process:"processes"};function Zs(f){return Xs[f]??f+"s"}function en(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"}],["circle",{cx:"12",cy:"12",r:"3"}]];He(f,Ze({name:"eye"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function ja(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"}],["path",{d:"m2 2 20 20"}]];He(f,Ze({name:"eye-off"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function tn(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"}],["circle",{cx:"12",cy:"12",r:"3"}]];He(f,Ze({name:"settings"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function an(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M20 8h-5"}],["path",{d:"M15 10V6.5a2.5 2.5 0 0 1 5 0V10"}],["path",{d:"M15 14h5l-5 6h5"}]];He(f,Ze({name:"arrow-down-a-z"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function sn(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M11 4h10"}],["path",{d:"M11 8h7"}],["path",{d:"M11 12h4"}]];He(f,Ze({name:"arrow-down-wide-narrow"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}var nn=v('<div class="confirm-backdrop svelte-193t4hn"><div class="confirm-modal svelte-193t4hn"><div class="confirm-header svelte-193t4hn"><h2 class="confirm-title svelte-193t4hn"> </h2></div> <div class="confirm-body svelte-193t4hn"><p class="confirm-message svelte-193t4hn"> </p></div> <div class="confirm-footer svelte-193t4hn"><button class="footer-btn ghost svelte-193t4hn"> </button> <button> </button></div></div></div>');function ps(f,c){la(c,!0);let y=oa(c,"confirmLabel",3,"Confirm"),w=oa(c,"cancelLabel",3,"Cancel"),g=oa(c,"destructive",3,!1);function F(U){U.target.classList.contains("confirm-backdrop")&&c.oncancel()}function m(U){U.key==="Escape"&&c.oncancel(),U.key==="Enter"&&c.onconfirm()}var z=Y();Ye("keydown",Ca,function(...U){(c.open?m:void 0)?.apply(this,U)});var de=N(z);{var X=U=>{var te=nn(),A=n(te),q=n(A),K=n(q),M=n(K,!0);a(K),a(q);var ae=i(q,2),se=n(ae),W=n(se,!0);a(se),a(ae);var R=i(ae,2),B=n(R),Z=n(B,!0);a(B);var ne=i(B,2);let ze;var ie=n(ne,!0);a(ne),a(R),a(A),a(te),E(()=>{C(M,c.title),C(W,c.message),C(Z,w()),ze=vt(ne,1,"footer-btn svelte-193t4hn",null,ze,{destructive:g(),accent:!g()}),C(ie,y())}),b("click",te,F),b("click",B,function(...ve){c.oncancel?.apply(this,ve)}),b("click",ne,function(...ve){c.onconfirm?.apply(this,ve)}),l(U,te)};h(de,U=>{c.open&&U(X)})}l(f,z),ia()}Ea(["click"]);var rn=v('<button class="type-card svelte-ak7t5k" type="button"><span class="type-dot svelte-ak7t5k"></span> <div class="type-info svelte-ak7t5k"><span class="type-name svelte-ak7t5k"> </span> <span class="type-desc svelte-ak7t5k"> </span></div></button>'),on=v('<div class="type-section svelte-ak7t5k"><div class="type-section-label svelte-ak7t5k"> </div> <div class="type-grid svelte-ak7t5k"></div></div>'),ln=v('<div class="entity-dialog-backdrop svelte-ak7t5k"><div class="entity-dialog svelte-ak7t5k"><div class="entity-dialog-header svelte-ak7t5k"><h2 class="entity-dialog-title svelte-ak7t5k">New Entity</h2> <button class="dialog-close svelte-ak7t5k" type="button">&times;</button></div> <div class="entity-dialog-body svelte-ak7t5k"></div></div></div>');function cn(f,c){la(c,!0);let y=oa(c,"appEntityTypes",19,()=>[]);const w={deck:"Presentation slides",doc:"Professional documents",project:"Client engagements and initiatives",meeting:"Conversations and check-ins",decision:"Choices made and their rationale",task:"Action items and to-dos",deliverable:"Outputs and work products",note:"Freeform thinking and scratch",process:"Repeatable methods and workflows",standard:"Guidelines and best practices","case-study":"Past work and lessons learned",document:"Long-form structured content",dataset:"Structured data and tables",reference:"Articles, tools, and resources",publication:"Published works and reports",person:"People you work with",organization:"Companies and institutions",role:"Job functions and responsibilities","practice-area":"Disciplines and specialties",deal:"Opportunities and proposals"},g=[{group:"Project",types:["project","meeting","decision","task","deliverable","note"]},{group:"Knowledge",types:["process","standard","case-study","document","dataset","reference","publication"]},{group:"Business",types:["person","organization","role","practice-area","deal"]}],F=S(()=>y().length>0?[{group:"Apps",types:y()},...g]:g);function m(A){return A.replace(/-/g," ").replace(/\b\w/g,q=>q.toUpperCase())}function z(A){A.target.classList.contains("entity-dialog-backdrop")&&c.oncancel()}function de(A){A.key==="Escape"&&c.oncancel()}var X=Y();Ye("keydown",Ca,function(...A){(c.open?de:void 0)?.apply(this,A)});var U=N(X);{var te=A=>{var q=ln(),K=n(q),M=n(K),ae=i(n(M),2);a(M);var se=i(M,2);Ie(se,21,()=>e(F),Ke,(W,R)=>{var B=on(),Z=n(B),ne=n(Z,!0);a(Z);var ze=i(Z,2);Ie(ze,21,()=>e(R).types,Ke,(ie,ve)=>{var ue=rn(),xe=n(ue);let Oe;var $e=i(xe,2),et=n($e),xt=n(et,!0);a(et);var tt=i(et,2),ot=n(tt,!0);a(tt),a($e),a(ue),E((Me,$t)=>{Oe=Ae(xe,"",Oe,Me),C(xt,$t),C(ot,w[e(ve)])},[()=>({background:Mt(e(ve))}),()=>m(e(ve))]),b("click",ue,()=>c.onselect(e(ve))),l(ie,ue)}),a(ze),a(B),E(()=>C(ne,e(R).group)),l(W,B)}),a(se),a(K),a(q),b("click",q,z),b("click",K,W=>W.stopPropagation()),b("click",ae,function(...W){c.oncancel?.apply(this,W)}),l(A,q)};h(U,A=>{c.open&&A(te)})}l(f,X),ia()}Ea(["click"]);function dn(f,c){const y=Xe(c,["children","$$slots","$$events","$$legacy"]);const w=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor"}]];He(f,Ze({name:"key-round"},()=>y,{get iconNode(){return w},children:(g,F)=>{var m=Y(),z=N(m);Ge(z,c,"default",{}),l(g,m)},$$slots:{default:!0}}))}function vn(){return yt("/api/permissions/collections")}function un(f,c){return yt("/api/permissions/grant",{method:"POST",body:JSON.stringify({userId:f,collection:c})})}function mn(f,c){return yt("/api/permissions/revoke",{method:"POST",body:JSON.stringify({userId:f,collection:c})})}var fn=v('<div class="status-msg error svelte-1qsmvmm"> </div>'),pn=v('<div class="loading-text svelte-1qsmvmm">Loading users...</div>'),_n=v('<div class="access-row confirm-row svelte-1qsmvmm"><span class="confirm-text svelte-1qsmvmm"> </span> <button class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button class="confirm-btn revoke svelte-1qsmvmm">Delete</button></div>'),hn=v('<div class="status-msg error svelte-1qsmvmm" style="padding-left: 0;"> </div>'),yn=v('<form class="inline-reset-row svelte-1qsmvmm"><input type="password" required="" minlength="8" autocomplete="new-password" class="form-input svelte-1qsmvmm"/> <button type="button" class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button type="submit" class="confirm-btn reset svelte-1qsmvmm">Reset</button></form> <!>',1),gn=v('<span class="perm-badge admin-badge svelte-1qsmvmm">Admin</span>'),bn=v('<button class="icon-btn svelte-1qsmvmm" title="Reset password"><!></button> <button class="icon-btn danger svelte-1qsmvmm" title="Delete user"><!></button>',1),wn=v('<span class="icon-spacer svelte-1qsmvmm"></span>'),kn=v('<div class="access-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <!> <span class="access-email svelte-1qsmvmm"> </span></span> <!></div>'),zn=v('<div class="status-msg error svelte-1qsmvmm"> </div>'),xn=v('<form class="inline-add-rows svelte-1qsmvmm"><div class="form-row svelte-1qsmvmm"><input type="text" placeholder="Name" autocomplete="off" class="form-input svelte-1qsmvmm"/> <input type="email" placeholder="Email" required="" autocomplete="off" class="form-input svelte-1qsmvmm"/></div> <div class="form-row svelte-1qsmvmm"><input type="password" placeholder="Password (8+ chars)" required="" minlength="8" autocomplete="new-password" class="form-input svelte-1qsmvmm"/> <select class="form-input svelte-1qsmvmm"><option>Member</option><option>Admin</option></select></div> <!> <div class="form-row form-actions svelte-1qsmvmm"><button type="button" class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button type="submit" class="confirm-btn reset svelte-1qsmvmm">Add</button></div></form>'),$n=v('<button class="add-trigger svelte-1qsmvmm"><span class="add-trigger-icon svelte-1qsmvmm"><!></span> <span>Add User</span></button>'),qn=v('<div class="collection-list user-list svelte-1qsmvmm"></div> <!>',1),En=v('<div class="loading-text svelte-1qsmvmm">Loading collections...</div>'),Cn=v('<div class="access-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <span class="perm-badge admin-badge svelte-1qsmvmm">Admin</span> <span class="access-email svelte-1qsmvmm"> </span></span> <span class="icon-spacer svelte-1qsmvmm"></span></div>'),Sn=v('<div class="access-row confirm-row svelte-1qsmvmm"><span class="confirm-text svelte-1qsmvmm"> </span> <button class="confirm-btn cancel svelte-1qsmvmm">Cancel</button> <button class="confirm-btn revoke svelte-1qsmvmm">Remove</button></div>'),Tn=v('<div class="access-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <span class="access-email svelte-1qsmvmm"> </span></span> <button class="icon-btn danger svelte-1qsmvmm" title="Remove access"><!></button></div>'),Nn=v('<div class="access-row candidate-row svelte-1qsmvmm"><div class="avatar placeholder svelte-1qsmvmm"> </div> <span class="access-text svelte-1qsmvmm"><span class="access-label svelte-1qsmvmm"> </span> <span class="access-email svelte-1qsmvmm"> </span></span> <button class="icon-btn grant-btn svelte-1qsmvmm" title="Grant access"><!></button></div>'),Pn=v('<!> <button class="add-trigger svelte-1qsmvmm"><span>Done</span></button>',1),Dn=v('<button class="add-trigger svelte-1qsmvmm"><span class="add-trigger-icon svelte-1qsmvmm"><!></span> <span>Add User</span></button>'),An=v("<!> <!> <!>",1),Mn=v('<div class="collection-section svelte-1qsmvmm"><button class="collection-header svelte-1qsmvmm"><span class="collection-chevron svelte-1qsmvmm"><!></span> <span class="collection-text svelte-1qsmvmm"><span class="collection-name svelte-1qsmvmm"> </span> <span class="collection-count svelte-1qsmvmm"> </span></span></button> <!></div>'),Fn=v('<div class="collection-list svelte-1qsmvmm"></div>'),Rn=v('<div class="perm-backdrop svelte-1qsmvmm"><div class="perm-modal svelte-1qsmvmm"><div class="perm-header svelte-1qsmvmm"><h2 class="perm-title svelte-1qsmvmm">Workspace Settings</h2> <button class="close-btn svelte-1qsmvmm"><!></button></div> <div class="tab-bar svelte-1qsmvmm"><button>Users</button> <button>Collections</button></div> <div class="perm-body svelte-1qsmvmm"><!> <!></div></div></div>');function Ln(f,c){la(c,!0);let y=k("users"),w=k(na([])),g=k(!1),F=k(na([])),m=k(!1),z=k(""),de=k(!1),X=k(""),U=k(""),te=k(""),A=k("member"),q=k(!1),K=k(""),M=k(null),ae=k(!1),se=k(null),W=k(""),R=k(!1),B=k(""),Z=na({}),ne=na({}),ze=k(null),ie=k(null),ve=k(!1);function ue(P){Z[P]=!(Z[P]??!1)}function xe(P){return Z[P]??!1}Qa(()=>{c.open&&(e(y)==="users"&&e(w).length===0&&Oe(),e(y)==="collections"&&e(F).length===0&&$e())});async function Oe(){r(g,!0),r(z,"");try{const P=await us();r(w,P.users,!0)}catch(P){r(z,P.message,!0)}finally{r(g,!1)}}async function $e(){r(m,!0),r(z,"");try{if(e(w).length===0){const P=await us();r(w,P.users,!0)}r(F,await vn(),!0)}catch(P){r(z,P.message,!0)}finally{r(m,!1)}}async function et(P){P.preventDefault(),r(K,""),r(q,!0);try{await Os(e(U),e(te),e(X)||e(U).split("@")[0],e(A)),r(X,""),r(U,""),r(te,""),r(A,"member"),r(de,!1),await Oe()}catch(Ue){r(K,Ue.message||"Failed to create user",!0)}finally{r(q,!1)}}async function xt(){if(e(M)){r(ae,!0);try{await Ls(e(M).id),r(M,null),await Oe(),e(F).length>0&&$e()}catch(P){r(z,P.message,!0),r(M,null)}finally{r(ae,!1)}}}async function tt(){if(!(!e(se)||!e(W))){r(R,!0),r(B,"");try{await Is(e(se).id,e(W)),r(se,null),r(W,"")}catch(P){r(B,P.message||"Failed to reset password",!0)}finally{r(R,!1)}}}function ot(){return e(w).filter(P=>P.role==="admin")}function Me(P){const Ue=new Set(P.users.map(Ve=>Ve.id));return e(w).filter(Ve=>Ve.role==="member"&&!Ue.has(Ve.id))}async function $t(P,Ue){r(ze,P,!0);try{await un(Ue,P),ne[P]=!1,await $e()}catch(Ve){r(z,Ve.message,!0)}finally{r(ze,null)}}async function qe(){if(e(ie)){r(ve,!0);try{await mn(e(ie).user.id,e(ie).collection),r(ie,null),await $e()}catch(P){r(z,P.message,!0),r(ie,null)}finally{r(ve,!1)}}}function j(P){P.target.classList.contains("perm-backdrop")&&c.onclose()}function gt(P){P.key==="Escape"&&c.onclose()}var bt=Y();Ye("keydown",Ca,gt);var ut=N(bt);{var ca=P=>{var Ue=Rn(),Ve=n(Ue),at=n(Ve),Be=i(n(at),2),Fa=n(Be);Ja(Fa,{size:16}),a(Be),a(at);var da=i(at,2),va=n(da);let mt;var Gt=i(va,2);let ua;a(da);var Sa=i(da,2),Xt=n(Sa);{var Ra=me=>{var We=fn(),qt=n(We,!0);a(We),E(()=>C(qt,e(z))),l(me,We)};h(Xt,me=>{e(z)&&me(Ra)})}var Ta=i(Xt,2);{var La=me=>{var We=Y(),qt=N(We);{var Rt=Ee=>{var st=pn();l(Ee,st)},Lt=Ee=>{var st=qn(),It=N(st);Ie(It,21,()=>e(w),Ke,(je,O)=>{var Ce=Y(),lt=N(Ce);{var nt=fe=>{var he=_n(),G=n(he),Se=n(G);a(G);var we=i(G,2),Fe=i(we,2);a(he),E(()=>{C(Se,`Delete ${e(O).displayName??""}?`),we.disabled=e(ae),Fe.disabled=e(ae)}),b("click",we,()=>{r(M,null)}),b("click",Fe,xt),l(fe,he)},ft=fe=>{var he=yn(),G=N(he),Se=n(G);Ht(Se);var we=i(Se,2),Fe=i(we,2);a(G);var ce=i(G,2);{var it=Q=>{var Te=hn(),_t=n(Te,!0);a(Te),E(()=>C(_t,e(B))),l(Q,Te)};h(ce,Q=>{e(B)&&Q(it)})}E(()=>{Dt(Se,"placeholder",`New password for ${e(O).displayName??""}`),we.disabled=e(R),Fe.disabled=e(R)||!e(W)}),Ye("submit",G,Q=>{Q.preventDefault(),tt()}),ra(Se,()=>e(W),Q=>r(W,Q)),b("click",we,()=>{r(se,null),r(W,""),r(B,"")}),l(fe,he)},pt=fe=>{var he=kn(),G=n(he),Se=n(G,!0);a(G);var we=i(G,2),Fe=n(we),ce=n(Fe,!0);a(Fe);var it=i(Fe,2);{var Q=H=>{var V=gn();l(H,V)};h(it,H=>{e(O).role==="admin"&&H(Q)})}var Te=i(it,2),_t=n(Te,!0);a(Te),a(we);var ma=i(we,2);{var fa=H=>{var V=bn(),pe=N(V),t=n(pe);dn(t,{size:13}),a(pe);var s=i(pe,2),o=n(s);$a(o,{size:13}),a(s),b("click",pe,()=>{r(se,e(O),!0),r(W,""),r(B,"")}),b("click",s,()=>{r(M,e(O),!0)}),l(H,V)},Zt=H=>{var V=wn();l(H,V)};h(ma,H=>{Ft.user&&e(O).id!==Ft.user.id?H(fa):H(Zt,!1)})}a(he),E(H=>{C(Se,H),C(ce,e(O).displayName),C(_t,e(O).email)},[()=>(e(O).displayName||e(O).email)[0].toUpperCase()]),l(fe,he)};h(lt,fe=>{e(M)?.id===e(O).id?fe(nt):e(se)?.id===e(O).id?fe(ft,1):fe(pt,!1)})}l(je,Ce)}),a(It);var be=i(It,2);{var Et=je=>{var O=xn(),Ce=n(O),lt=n(Ce);Ht(lt);var nt=i(lt,2);Ht(nt),a(Ce);var ft=i(Ce,2),pt=n(ft);Ht(pt);var fe=i(pt,2),he=n(fe);he.value=he.__value="member";var G=i(he);G.value=G.__value="admin",a(fe),a(ft);var Se=i(ft,2);{var we=Q=>{var Te=zn(),_t=n(Te,!0);a(Te),E(()=>C(_t,e(K))),l(Q,Te)};h(Se,Q=>{e(K)&&Q(we)})}var Fe=i(Se,2),ce=n(Fe),it=i(ce,2);a(Fe),a(O),E(()=>it.disabled=e(q)),Ye("submit",O,et),ra(lt,()=>e(X),Q=>r(X,Q)),ra(nt,()=>e(U),Q=>r(U,Q)),ra(pt,()=>e(te),Q=>r(te,Q)),Ks(fe,()=>e(A),Q=>r(A,Q)),b("click",ce,()=>{r(de,!1),r(K,"")}),l(je,O)},Ct=je=>{var O=$n(),Ce=n(O),lt=n(Ce);qa(lt,{size:14}),a(Ce),zt(2),a(O),b("click",O,()=>{r(de,!0)}),l(je,O)};h(be,je=>{e(de)?je(Et):je(Ct,!1)})}l(Ee,st)};h(qt,Ee=>{e(g)?Ee(Rt):Ee(Lt,!1)})}l(me,We)},Na=me=>{var We=Y(),qt=N(We);{var Rt=Ee=>{var st=En();l(Ee,st)},Lt=Ee=>{var st=Fn();Ie(st,21,()=>e(F),Ke,(It,be)=>{const Et=S(()=>xe(e(be).collection)),Ct=S(ot);var je=Mn(),O=n(je),Ce=n(O),lt=n(Ce);{var nt=ce=>{xa(ce,{size:14})},ft=ce=>{za(ce,{size:14})};h(lt,ce=>{e(Et)?ce(nt):ce(ft,!1)})}a(Ce);var pt=i(Ce,2),fe=n(pt),he=n(fe,!0);a(fe);var G=i(fe,2),Se=n(G,!0);a(G),a(pt),a(O);var we=i(O,2);{var Fe=ce=>{const it=S(()=>Me(e(be)));var Q=An(),Te=N(Q);Ie(Te,17,()=>e(Ct),Ke,(H,V)=>{var pe=Cn(),t=n(pe),s=n(t,!0);a(t);var o=i(t,2),d=n(o),$=n(d,!0);a(d);var _=i(d,4),u=n(_,!0);a(_),a(o),zt(2),a(pe),E(L=>{C(s,L),C($,e(V).displayName),C(u,e(V).email)},[()=>(e(V).displayName||e(V).email)[0].toUpperCase()]),l(H,pe)});var _t=i(Te,2);Ie(_t,17,()=>e(be).users,Ke,(H,V)=>{var pe=Y(),t=N(pe);{var s=d=>{var $=Sn(),_=n($),u=n(_);a(_);var L=i(_,2),J=i(L,2);a($),E(()=>{C(u,`Remove ${e(V).displayName??""}?`),L.disabled=e(ve),J.disabled=e(ve)}),b("click",L,()=>{r(ie,null)}),b("click",J,qe),l(d,$)},o=d=>{var $=Tn(),_=n($),u=n(_,!0);a(_);var L=i(_,2),J=n(L),I=n(J,!0);a(J);var D=i(J,2),re=n(D,!0);a(D),a(L);var _e=i(L,2),ke=n(_e);$a(ke,{size:13}),a(_e),a($),E(rt=>{C(u,rt),C(I,e(V).displayName),C(re,e(V).email)},[()=>(e(V).displayName||e(V).email)[0].toUpperCase()]),b("click",_e,()=>{r(ie,{collection:e(be).collection,user:e(V)},!0)}),l(d,$)};h(t,d=>{e(ie)?.collection===e(be).collection&&e(ie)?.user.id===e(V).id?d(s):d(o,!1)})}l(H,pe)});var ma=i(_t,2);{var fa=H=>{var V=Pn(),pe=N(V);Ie(pe,17,()=>e(it),Ke,(s,o)=>{var d=Nn(),$=n(d),_=n($,!0);a($);var u=i($,2),L=n(u),J=n(L,!0);a(L);var I=i(L,2),D=n(I,!0);a(I),a(u);var re=i(u,2),_e=n(re);qa(_e,{size:18}),a(re),a(d),E(ke=>{C(_,ke),C(J,e(o).displayName),C(D,e(o).email),re.disabled=e(ze)===e(be).collection},[()=>(e(o).displayName||e(o).email)[0].toUpperCase()]),b("click",re,()=>$t(e(be).collection,e(o).id)),l(s,d)});var t=i(pe,2);b("click",t,()=>{ne[e(be).collection]=!1}),l(H,V)},Zt=H=>{var V=Dn(),pe=n(V),t=n(pe);qa(t,{size:14}),a(pe),zt(2),a(V),b("click",V,()=>{ne[e(be).collection]=!0}),l(H,V)};h(ma,H=>{ne[e(be).collection]?H(fa):e(it).length>0&&H(Zt,1)})}l(ce,Q)};h(we,ce=>{e(Et)&&ce(Fe)})}a(je),E(()=>{C(he,e(be).collection),C(Se,e(Ct).length+e(be).users.length)}),b("click",O,()=>ue(e(be).collection)),l(It,je)}),a(st),l(Ee,st)};h(qt,Ee=>{e(m)?Ee(Rt):Ee(Lt,!1)})}l(me,We)};h(Ta,me=>{e(y)==="users"?me(La):e(y)==="collections"&&me(Na,1)})}a(Sa),a(Ve),a(Ue),E(()=>{mt=vt(va,1,"tab-btn svelte-1qsmvmm",null,mt,{active:e(y)==="users"}),ua=vt(Gt,1,"tab-btn svelte-1qsmvmm",null,ua,{active:e(y)==="collections"})}),b("click",Ue,j),b("click",Be,function(...me){c.onclose?.apply(this,me)}),b("click",va,()=>{r(y,"users"),r(M,null),r(se,null),r(ie,null)}),b("click",Gt,()=>{r(y,"collections"),r(M,null),r(se,null),r(ie,null)}),l(P,Ue)};h(ut,P=>{c.open&&P(ca)})}l(f,bt),ia()}Ea(["click"]);var In=v('<span class="row-chevron svelte-6dohdz"><!></span>'),Kn=v('<span class="item-count svelte-6dohdz"> </span>'),On=v('<div class="indent-group svelte-6dohdz"><!></div>'),Un=v('<button><!> <span class="row-label svelte-6dohdz"> </span> <!></button> <!>',1),Vn=v('<span class="repo-type-icon svelte-6dohdz"><!></span>'),Bn=v('<input class="repo-rename-input svelte-6dohdz" type="text"/>'),Wn=v('<span class="repo-name svelte-6dohdz"> </span>'),jn=v('<span class="item-count svelte-6dohdz"> </span>'),Qn=v('<span class="repo-dirty-dot svelte-6dohdz"></span>'),Jn=v('<button class="repo-delete-btn svelte-6dohdz" title="Delete collection"><!></button>'),Yn=v('<div class="loading-row svelte-6dohdz">Loading...</div>'),Hn=v('<span class="row-chevron svelte-6dohdz"><!></span>'),Gn=v('<mark class="filter-match svelte-6dohdz"> </mark>'),Xn=v('<div class="loading-row svelte-6dohdz">Loading...</div>'),Zn=v('<div class="indent-group svelte-6dohdz"><!></div>'),er=v('<div class="entity-row-wrapper svelte-6dohdz"><button><!> <span class="row-label svelte-6dohdz"><!></span> <span class="dirty-dot svelte-6dohdz"></span></button> <button class="entity-delete-btn svelte-6dohdz" title="Delete entity"><!></button></div> <!>',1),tr=v('<div class="indent-group svelte-6dohdz"></div>'),ar=v('<button><span class="row-chevron svelte-6dohdz"><!></span> <span class="row-label svelte-6dohdz"> </span> <span class="item-count svelte-6dohdz"> </span> <span class="dirty-dot svelte-6dohdz"></span></button> <!>',1),sr=v('<!> <button class="tree-row new-entity-row svelte-6dohdz"><span class="row-chevron svelte-6dohdz"><!></span> <span class="row-label svelte-6dohdz">New Entity</span></button>',1),nr=v('<div class="indent-group svelte-6dohdz"><!></div>'),rr=v('<div class="tree-group svelte-6dohdz"><div class="repo-row-wrapper svelte-6dohdz"><button><span class="row-chevron svelte-6dohdz"><!></span> <!> <!> <!> <!></button> <!></div> <!></div>'),or=v('<button class="home-btn svelte-6dohdz" title="Home"><div class="workspace-icon svelte-6dohdz"> </div> <span class="workspace-name svelte-6dohdz"> </span></button>'),lr=v('<button class="settings-btn svelte-6dohdz" title="Workspace Settings"><!></button>'),ir=v('<button class="filter-clear svelte-6dohdz" title="Clear filter"><!></button>'),cr=v('<mark class="filter-match svelte-6dohdz"> </mark>'),dr=v('<span class="recent-time svelte-6dohdz"> </span>'),vr=v('<div class="entity-row-wrapper svelte-6dohdz"><button><span class="entity-type-dot svelte-6dohdz"></span> <span class="row-label svelte-6dohdz"><!></span> <!> <span class="dirty-dot svelte-6dohdz"></span></button> <button class="entity-delete-btn svelte-6dohdz" title="Delete entity"><!></button></div>'),ur=v('<div class="no-results svelte-6dohdz">No matching entities</div>'),mr=v("<!> <!>",1),fr=v('<div class="no-results svelte-6dohdz">No matching entities</div>'),pr=v("<!> <!>",1),_r=v('<button class="new-collection-clear svelte-6dohdz" title="Clear"><!></button>'),hr=v("<button><!></button>"),yr=v('<div class="new-collection-row svelte-6dohdz"><input type="text" placeholder="collection-name" class="svelte-6dohdz"/> <!> <!></div>'),gr=v('<span class="confirm-text svelte-6dohdz">Sign out?</span> <button class="confirm-btn cancel svelte-6dohdz">Cancel</button> <button class="confirm-btn danger svelte-6dohdz">Sign Out</button>',1),br=v('<span class="user-email svelte-6dohdz"> </span> <button class="footer-icon-btn svelte-6dohdz" title="Sign out"><!></button>',1),wr=v('<div class="sidebar-footer svelte-6dohdz"><!></div>'),kr=v('<aside class="sidebar svelte-6dohdz"><div class="sidebar-header svelte-6dohdz"><!> <!></div> <div class="filter-bar svelte-6dohdz"><span class="filter-icon svelte-6dohdz"><!></span> <input class="filter-input svelte-6dohdz" type="text" placeholder="Search"/> <!> <button><!></button></div> <nav class="tree svelte-6dohdz"><!> <!> <button class="repo-row new-collection-btn svelte-6dohdz" title="New collection"><span class="row-chevron svelte-6dohdz"><!></span> <span class="repo-name svelte-6dohdz">New Collection</span></button></nav> <!></aside> <!> <!> <!> <!>',1);function zr(f,c){la(c,!0);const y=(t,s=Yt,o=Yt,d=Yt,$=Yt,_=Yt,u=Yt)=>{var L=Y(),J=N(L);Ie(J,17,s,Ke,(I,D)=>{const re=S(()=>_()?`${_()}/${e(D).name}`:e(D).name),_e=S(()=>`${o()}/${d()}/${$()}/${e(re)}`),ke=S(()=>e(D).type==="directory"),rt=S(()=>p.isFolderExpanded(e(_e))),Ne=S(()=>!e(ke)&&e(xe)===$()&&e(Oe)===e(re));var Kt=Un(),ct=N(Kt);let ea,St;var ta=n(ct);{var pa=oe=>{var x=In(),T=n(x);{var ee=ht=>{xa(ht,{size:14})},dt=ht=>{za(ht,{size:14})};h(T,ht=>{e(rt)?ht(ee):ht(dt,!1)})}a(x),l(oe,x)};h(ta,oe=>{e(ke)&&oe(pa)})}var Tt=i(ta,2),Ot=n(Tt,!0);a(Tt);var _a=i(Tt,2);{var ye=oe=>{var x=Kn(),T=n(x,!0);a(x),E(()=>C(T,e(D).count)),l(oe,x)};h(_a,oe=>{e(ke)&&e(D).count!=null&&oe(ye)})}a(ct);var Re=i(ct,2);{var wt=oe=>{var x=On();let T;var ee=n(x);y(ee,()=>e(D).children,o,d,$,()=>e(re),()=>u()+1),a(x),E(dt=>T=Ae(x,"",T,dt),[()=>({"--guide-left":We(u())})]),l(oe,x)};h(Re,oe=>{e(ke)&&e(rt)&&e(D).children&&e(D).children.length>0&&oe(wt)})}E(oe=>{ea=vt(ct,1,"tree-row svelte-6dohdz",null,ea,{selected:e(Ne),focused:e(gt)===e(_e)}),Dt(ct,"data-tree-key",e(_e)),St=Ae(ct,"",St,oe),C(Ot,e(D).name)},[()=>({"padding-left":me(u(),e(ke))})]),b("click",ct,()=>{e(ke)?p.toggleFolder(e(_e)):At(`/${o()}/${d()}/${$()}/${e(re)}`)}),l(I,Kt)}),l(t,L)},w=(t,s=Yt)=>{const o=S(()=>e(at)?.repo===s().name),d=S(()=>`repo:${s().name}`);var $=rr(),_=n($),u=n(_);let L,J;var I=n(u),D=n(I);{var re=x=>{xa(x,{size:14})},_e=S(()=>p.isExpanded(s().name)),ke=x=>{za(x,{size:14})};h(D,x=>{e(_e)?x(re):x(ke,!1)})}a(I);var rt=i(I,2);{var Ne=x=>{var T=Vn(),ee=n(T);ja(ee,{size:12}),a(T),l(x,T)};h(rt,x=>{s().private&&x(Ne)})}var Kt=i(rt,2);{var ct=x=>{var T=Bn();Ht(T),Ma(T,ee=>r(K,ee),()=>e(K)),b("keydown",T,se),Ye("blur",T,ae),b("click",T,ee=>ee.stopPropagation()),ra(T,()=>e(q),ee=>r(q,ee)),l(x,T)},ea=x=>{var T=Wn(),ee=n(T,!0);a(T),E(()=>C(ee,s().name)),b("dblclick",T,dt=>{s().type!=="private"&&M(s().name,dt)}),l(x,T)};h(Kt,x=>{e(A)===s().name?x(ct):x(ea,!1)})}var St=i(Kt,2);{var ta=x=>{var T=jn(),ee=n(T,!0);a(T),E(()=>C(ee,s().count)),l(x,T)};h(St,x=>{s().count!=null&&e(A)!==s().name&&x(ta)})}var pa=i(St,2);{var Tt=x=>{var T=Qn();l(x,T)},Ot=S(()=>e(xt).has(s().name));h(pa,x=>{e(Ot)&&x(Tt)})}a(u);var _a=i(u,2);{var ye=x=>{var T=Jn(),ee=n(T);$a(ee,{size:12}),a(T),b("click",T,dt=>z(s().name,dt)),l(x,T)};h(_a,x=>{e(A)!==s().name&&x(ye)})}a(_);var Re=i(_,2);{var wt=x=>{var T=nr();let ee;var dt=n(T);{var ht=Le=>{var Ut=Yn();let ha;E(aa=>ha=Ae(Ut,"",ha,aa),[()=>({"padding-left":me(1,!1)})]),l(Le,Ut)},Nt=Le=>{var Ut=sr(),ha=N(Ut);Ie(ha,17,()=>La(s().entities),Ke,(ya,Vt)=>{const Ia=S(()=>`type:${s().name}/${e(Vt).type}`),Ga=S(()=>!p.isFolderCollapsed(e(Ia))),gs=S(()=>e(Vt).entities.some(Pe=>e(et).has(`${s().name}/${Pe.id}`))),Xa=S(()=>s().name===e(ue)&&e(Vt).entities.some(Pe=>Pe.id===e(xe)));var Za=ar(),Bt=N(Za);let es,ts;var Ka=n(Bt),bs=n(Ka);{var ws=Pe=>{xa(Pe,{size:14})},ks=Pe=>{za(Pe,{size:14})};h(bs,Pe=>{e(Ga)?Pe(ws):Pe(ks,!1)})}a(Ka);var Oa=i(Ka,2),zs=n(Oa,!0);a(Oa);var as=i(Oa,2),xs=n(as,!0);a(as),zt(2),a(Bt);var $s=i(Bt,2);{var qs=Pe=>{var Pa=tr();let ss;Ie(Pa,21,()=>e(Vt).entities,Ke,(Ua,le)=>{const ns=S(()=>e(le).id===e(xe)&&s().name===e(ue)&&!e(Oe)),rs=S(()=>e(le).hasSubContent&&p.isEntityExpanded(s().name,e(le).entityType,e(le).id)),Da=S(()=>e(le).hasSubContent?p.getEntityContents(s().name,e(le).entityType,e(le).id):null),os=S(()=>`entity:${s().name}/${e(le).entityType}/${e(le).id}`);var ls=er(),ga=N(ls),Wt=n(ga);let is,cs;var ds=n(Wt);{var Es=ge=>{var Qe=Hn(),jt=n(Qe);{var ba=De=>{xa(De,{size:14})},Qt=De=>{za(De,{size:14})};h(jt,De=>{e(rs)?De(ba):De(Qt,!1)})}a(Qe),l(ge,Qe)};h(ds,ge=>{e(le).hasSubContent&&ge(Es)})}var Va=i(ds,2),Cs=n(Va);{var Ss=ge=>{var Qe=Y(),jt=N(Qe);Ie(jt,17,()=>Ta(e(le).title),Ke,(ba,Qt)=>{var De=Y(),kt=N(De);{var Jt=Pt=>{var sa=Gn(),Ms=n(sa,!0);a(sa),E(()=>C(Ms,e(Qt).text)),l(Pt,sa)},wa=Pt=>{var sa=Aa();E(()=>C(sa,e(Qt).text)),l(Pt,sa)};h(kt,Pt=>{e(Qt).match?Pt(Jt):Pt(wa,!1)})}l(ba,De)}),l(ge,Qe)},Ts=ge=>{var Qe=Aa();E(()=>C(Qe,e(le).title)),l(ge,Qe)};h(Cs,ge=>{e($e)?ge(Ss):ge(Ts,!1)})}a(Va);var Ns=i(Va,2);let vs;a(Wt);var Ba=i(Wt,2),Ps=n(Ba);$a(Ps,{size:12}),a(Ba),a(ga);var Ds=i(ga,2);{var As=ge=>{var Qe=Y(),jt=N(Qe);{var ba=De=>{var kt=Xn();let Jt;E(wa=>Jt=Ae(kt,"",Jt,wa),[()=>({"padding-left":me(3,!1)})]),l(De,kt)},Qt=De=>{var kt=Zn();let Jt;var wa=n(kt);y(wa,()=>e(Da).entries,()=>s().name,()=>e(le).entityType,()=>e(le).id,()=>"",()=>3),a(kt),E(Pt=>Jt=Ae(kt,"",Jt,Pt),[()=>({"--guide-left":We(2)})]),l(De,kt)};h(jt,De=>{e(Da).loading?De(ba):e(Da).entries.length>0&&De(Qt,1)})}l(ge,Qe)};h(Ds,ge=>{e(rs)&&e(Da)&&ge(As)})}E((ge,Qe,jt)=>{is=vt(Wt,1,"tree-row svelte-6dohdz",null,is,ge),Dt(Wt,"data-tree-key",e(os)),cs=Ae(Wt,"",cs,Qe),vs=Ae(Ns,"",vs,jt)},[()=>({selected:e(ns),dirty:e(et).has(`${s().name}/${e(le).id}`),focused:e(gt)===e(os)}),()=>({"padding-left":me(2,e(le).hasSubContent),"--active-color":e(ns)?Mt(e(le).entityType):void 0}),()=>({background:Mt(e(le).entityType)})]),Ye("mouseenter",ga,()=>{Je.hoveredEntityId=e(le).id}),Ye("mouseleave",ga,()=>{Je.hoveredEntityId=null}),b("click",Wt,()=>Xt(e(le),s().name)),b("click",Ba,ge=>U(s().name,e(le),ge)),l(Ua,ls)}),a(Pa),E(Ua=>ss=Ae(Pa,"",ss,Ua),[()=>({"--guide-left":We(1)})]),l(Pe,Pa)};h($s,Pe=>{e(Ga)&&Pe(qs)})}E(Pe=>{es=vt(Bt,1,"tree-row type-header-row svelte-6dohdz",null,es,{dirty:e(gs),"type-active":e(Xa)}),Dt(Bt,"data-tree-key",e(Ia)),ts=Ae(Bt,"",ts,Pe),C(zs,e(Vt).label),C(xs,e(Vt).entities.length)},[()=>({"padding-left":me(1,!0),"border-left-color":e(Xa)?Mt(e(Vt).type):"transparent"})]),b("click",Bt,()=>p.toggleFolder(e(Ia))),l(ya,Za)});var aa=i(ha,2);let Ya;var Ha=n(aa),ys=n(Ha);qa(ys,{size:14}),a(Ha),zt(2),a(aa),E(ya=>Ya=Ae(aa,"",Ya,ya),[()=>({"padding-left":me(1,!0)})]),b("click",aa,ya=>{ya.stopPropagation(),r(mt,s().name,!0)}),l(Le,Ut)};h(dt,Le=>{s().loading?Le(ht):Le(Nt,!1)})}a(T),E(Le=>ee=Ae(T,"",ee,Le),[()=>({"--guide-left":We(0)})]),l(x,T)},oe=S(()=>p.isExpanded(s().name));h(Re,x=>{e(oe)&&x(wt)})}a($),E(()=>{L=vt(u,1,"repo-row svelte-6dohdz",null,L,{"repo-active":e(o),focused:e(gt)===e(d)}),Dt(u,"data-tree-key",e(d)),J=Ae(u,"",J,{"--active-color":e(o)?e(at)?.color:void 0})}),b("click",u,()=>da(s().name)),l(t,$)};let g=k(!1),F=k(!1),m=k(null);function z(t,s){s.stopPropagation(),r(m,t,!0)}async function de(){if(!e(m))return;const t=e(m);r(m,null);try{await p.removeCollection(t)}catch(s){console.error("Failed to delete collection:",s.message)}}let X=k(null);function U(t,s,o){o.stopPropagation(),r(X,{repo:t,type:s.entityType,id:s.id,title:s.title},!0)}async function te(){if(!e(X))return;const{repo:t,type:s,id:o}=e(X);r(X,null);try{await Us(t,s,o),await p.refreshEntities(t),await Wa.refresh(),Je.selectedRepo===t&&Je.selectedId===o&&At("/")}catch(d){console.error("Failed to delete entity:",d.message)}}let A=k(null),q=k(""),K=k(void 0);function M(t,s){s.stopPropagation(),r(A,t,!0),r(q,t,!0),setTimeout(()=>e(K)?.select(),0)}async function ae(){if(!e(A))return;const t=e(A),s=e(q).trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");if(r(A,null),!(!s||s===t))try{await p.renameCollectionTo(t,s)}catch(o){console.error("Failed to rename collection:",o.message)}}function se(t){t.key==="Enter"?(t.preventDefault(),ae()):t.key==="Escape"&&r(A,null)}const W=S(()=>!Ft.authEnabled||Ft.user?.role==="admin");let R=k(!1),B=k(""),Z=k(!1),ne=k(void 0),ze=k(!1);async function ie(){const t=e(B).trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");if(t){r(ze,!0);try{await p.addCollection(t,void 0,e(Z)||void 0),r(R,!1),r(B,""),r(Z,!1)}catch{r(ze,!1),await new Promise(o=>requestAnimationFrame(o)),e(ne)?.classList.remove("shake"),e(ne)?.offsetWidth,e(ne)?.classList.add("shake"),e(ne)?.focus();return}finally{r(ze,!1)}}}function ve(t){t.key==="Enter"?(t.preventDefault(),ie()):t.key==="Escape"&&(r(R,!1),r(B,""),r(Z,!1))}const ue=S(()=>Je.selectedRepo),xe=S(()=>Je.selectedId),Oe=S(()=>Je.selectedSubPath),$e=S(()=>p.filterQuery),et=S(()=>{const t=new Set;for(const s of Wa.repoStatuses){const o=p.repos.find(d=>d.name===s.repo);if(o)for(const d of s.changes){const $=d.path;for(const _ of o.entities)if($.includes(_.id))t.add(`${s.repo}/${_.id}`);else if($.endsWith("/")){const u=$.replace(/\/$/,"");(u===_.entityType||u===_.entityType+"s"||u===_.entityType+"es")&&t.add(`${s.repo}/${_.id}`)}}}return t}),xt=S(()=>new Set(Wa.repoStatuses.filter(t=>t.changes.length>0).map(t=>t.repo)));let tt=k(void 0);function ot(t){const s=t.target.value;p.setFilterQuery(s)}function Me(){p.setFilterQuery(""),e(tt)&&(e(tt).value="")}function $t(t,s,o,d,$,_){for(const u of t){const L=$?`${$}/${u.name}`:u.name,J=`${s}/${o}/${d}/${L}`;u.type==="directory"?(_.push({key:J,kind:"content-dir",repo:s,folderKey:J}),p.isFolderExpanded(J)&&u.children?.length&&$t(u.children,s,o,d,L,_)):_.push({key:J,kind:"content-file",repo:s,gotoPath:`/${s}/${o}/${d}/${L}`})}}const qe=S(()=>{const t=[],s=p.sortedRepos;for(const o of s)if(t.push({key:`repo:${o.name}`,kind:"repo",repo:o.name}),p.isExpanded(o.name)&&!o.loading){for(const d of o.entities)if(t.push({key:`entity:${o.name}/${d.entityType}/${d.id}`,kind:"entity",repo:o.name,entity:d}),d.hasSubContent&&p.isEntityExpanded(o.name,d.entityType,d.id)){const _=p.getEntityContents(o.name,d.entityType,d.id);!_.loading&&_.entries.length>0&&$t(_.entries,o.name,d.entityType,d.id,"",t)}}return t});let j=k(-1);const gt=S(()=>e(j)>=0&&e(j)<e(qe).length?e(qe)[e(j)].key:null);let bt="";Qa(()=>{const t=p.filterQuery;t!==bt&&(bt=t,r(j,-1))});function ut(){requestAnimationFrame(()=>{if(!e(Be)||e(j)<0)return;const t=e(qe)[e(j)]?.key;if(!t)return;const s=e(Be).querySelector(`[data-tree-key="${CSS.escape(t)}"]`);s&&s.scrollIntoView({block:"nearest"})})}function ca(){if(e(j)<0)return;const t=e(qe)[e(j)];if(t)switch(t.kind){case"repo":p.toggleRepo(t.repo);break;case"entity":t.entity&&Xt(t.entity,t.repo);break;case"content-dir":t.folderKey&&p.toggleFolder(t.folderKey);break;case"content-file":t.gotoPath&&At(t.gotoPath);break}}function P(){if(e(j)<0)return;const t=e(qe)[e(j)];t&&(t.kind==="repo"&&!p.isExpanded(t.repo)?p.toggleRepo(t.repo):t.kind==="entity"&&t.entity?.hasSubContent&&!p.isEntityExpanded(t.repo,t.entity.entityType,t.entity.id)?p.toggleEntity(t.repo,t.entity.entityType,t.entity.id):t.kind==="content-dir"&&t.folderKey&&!p.isFolderExpanded(t.folderKey)?p.toggleFolder(t.folderKey):e(j)<e(qe).length-1&&(ka(j),ut()))}function Ue(){if(e(j)<0)return;const t=e(qe)[e(j)];t&&(t.kind==="repo"&&p.isExpanded(t.repo)?p.toggleRepo(t.repo):t.kind==="entity"&&t.entity?.hasSubContent&&p.isEntityExpanded(t.repo,t.entity.entityType,t.entity.id)?p.toggleEntity(t.repo,t.entity.entityType,t.entity.id):t.kind==="content-dir"&&t.folderKey&&p.isFolderExpanded(t.folderKey)?p.toggleFolder(t.folderKey):e(j)>0&&(ka(j,-1),ut()))}function Ve(t){if(t.key==="Escape"){Me(),e(tt)?.blur(),r(j,-1);return}if(t.key==="ArrowDown"){t.preventDefault(),e(j)<e(qe).length-1&&ka(j),ut();return}if(t.key==="ArrowUp"){t.preventDefault(),e(j)>0?ka(j,-1):e(j)===0&&r(j,-1),ut();return}if(t.key==="Enter"){t.preventDefault(),ca();return}if(t.key==="ArrowRight"){t.preventDefault(),P();return}if(t.key==="ArrowLeft"){t.preventDefault(),Ue();return}}const at=S(()=>{if(!e(xe)||!e(ue))return null;const t=p.repos.find(o=>o.name===e(ue));if(!t)return null;const s=t.entities.find(o=>o.id===e(xe));return s?{repo:t.name,entityType:s.entityType,color:Mt(s.entityType)}:null});Qa(()=>{const t=e(ue)&&e(xe)?`${e(ue)}/${e(xe)}`:null;t&&t!==p.lastAutoExpandedFor&&e(at)&&(p.lastAutoExpandedFor=t,p.isExpanded(e(at).repo)||p.toggleRepo(e(at).repo))});let Be=k(void 0);_s(()=>{e(Be)&&p.sidebarScrollTop>0&&(e(Be).scrollTop=p.sidebarScrollTop)});function Fa(){e(Be)&&(p.sidebarScrollTop=e(Be).scrollTop)}function da(t){p.toggleRepo(t)}function va(t,s,o){At(`/${t}/${s}/${o}`)}let mt=k(null),Gt=k(!1);function ua(t){return t.replace(/-/g," ").replace(/\b\w/g,s=>s.toUpperCase())}async function Sa(t,s){if(!e(Gt)){r(Gt,!0),r(mt,null);try{const o=`${s}-${Date.now()}`,d=`Untitled ${ua(s)}`,$=new Date().toISOString(),_=$.split("T")[0],u=s==="deck"?`<!-- slide: cover -->
2
2
  <!-- theme: light -->
3
3
 
4
4
  # ${d}