@locusai/cli 0.1.2 → 0.1.4

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 (63) hide show
  1. package/README.md +37 -29
  2. package/bin/locus.js +10 -32
  3. package/index.ts +0 -22
  4. package/package.json +1 -1
  5. package/public/dashboard/404.html +1 -1
  6. package/public/dashboard/_next/static/{mgA6xTBePiCXP1IVRWWME → QcceI_B55xOsryXxwZfhA}/_buildManifest.js +1 -1
  7. package/public/dashboard/_next/static/chunks/138.b98511c56423f8bb.js +1 -0
  8. package/public/dashboard/_next/static/chunks/337-d3bb75304d130513.js +1 -0
  9. package/public/dashboard/_next/static/chunks/477.1a6ecfe53375bd9c.js +1 -0
  10. package/public/dashboard/_next/static/chunks/487-1808785ba665f784.js +1 -0
  11. package/public/dashboard/_next/static/chunks/544.e3db93036b5e0914.js +1 -0
  12. package/public/dashboard/_next/static/chunks/795-10b9cf2562a5999c.js +1 -0
  13. package/public/dashboard/_next/static/chunks/87c73c54-1f4741035a95c140.js +1 -0
  14. package/public/dashboard/_next/static/chunks/902-d6926825a9fe8784.js +1 -0
  15. package/public/dashboard/_next/static/chunks/955-c8f8f6235ae8f8c6.js +1 -0
  16. package/public/dashboard/_next/static/chunks/996.e0a334e6ae90900e.js +1 -0
  17. package/public/dashboard/_next/static/chunks/app/_not-found/page-44b1804abb44a34d.js +1 -0
  18. package/public/dashboard/_next/static/chunks/app/backlog/page-2ea07643f5b6e06b.js +1 -0
  19. package/public/dashboard/_next/static/chunks/app/docs/page-19686afe86f9756b.js +1 -0
  20. package/public/dashboard/_next/static/chunks/app/layout-70b5f0deb13c27ef.js +1 -0
  21. package/public/dashboard/_next/static/chunks/app/page-1682e21c1ab5320f.js +1 -0
  22. package/public/dashboard/_next/static/chunks/app/settings/page-84e16c9638d657e4.js +1 -0
  23. package/public/dashboard/_next/static/chunks/framework-152a1bc8c81c7458.js +1 -0
  24. package/public/dashboard/_next/static/chunks/main-6c877f3851a8d718.js +1 -0
  25. package/public/dashboard/_next/static/chunks/main-app-123e879c5a937a00.js +1 -0
  26. package/public/dashboard/_next/static/chunks/pages/_app-a050a8e6e4fb04cf.js +1 -0
  27. package/public/dashboard/_next/static/chunks/pages/_error-3e422ffd891594de.js +1 -0
  28. package/public/dashboard/_next/static/chunks/webpack-03b96ab0f7ba7feb.js +1 -0
  29. package/public/dashboard/_next/static/css/b301ab0424111664.css +1 -0
  30. package/public/dashboard/backlog.html +1 -1
  31. package/public/dashboard/backlog.txt +18 -15
  32. package/public/dashboard/docs.html +1 -1
  33. package/public/dashboard/docs.txt +19 -16
  34. package/public/dashboard/index.html +1 -1
  35. package/public/dashboard/index.txt +18 -15
  36. package/public/dashboard/settings.html +1 -1
  37. package/public/dashboard/settings.txt +18 -15
  38. package/src/constants.ts +1 -1
  39. package/src/generators/locus.ts +5 -22
  40. package/public/dashboard/_next/static/chunks/140.d5e67b269d70c096.js +0 -1
  41. package/public/dashboard/_next/static/chunks/142.82cd6bec804102b9.js +0 -1
  42. package/public/dashboard/_next/static/chunks/18.1e768729d24d723d.js +0 -1
  43. package/public/dashboard/_next/static/chunks/188.27288b5094867f29.js +0 -1
  44. package/public/dashboard/_next/static/chunks/273-95c2836f1a6dfb23.js +0 -1
  45. package/public/dashboard/_next/static/chunks/855-a193e1d785e334cf.js +0 -2
  46. package/public/dashboard/_next/static/chunks/87c73c54-18883d7ce69be0ce.js +0 -1
  47. package/public/dashboard/_next/static/chunks/892-70ddfae0f8c9ee9f.js +0 -1
  48. package/public/dashboard/_next/static/chunks/954-73b5906ca7819e42.js +0 -1
  49. package/public/dashboard/_next/static/chunks/972-efb0c31aeb3e1619.js +0 -1
  50. package/public/dashboard/_next/static/chunks/app/_not-found/page-3884acf5e0397003.js +0 -1
  51. package/public/dashboard/_next/static/chunks/app/backlog/page-ade60a21a3597509.js +0 -1
  52. package/public/dashboard/_next/static/chunks/app/docs/page-5f69fffac832d77c.js +0 -1
  53. package/public/dashboard/_next/static/chunks/app/layout-a0acefd9b75ec3b8.js +0 -1
  54. package/public/dashboard/_next/static/chunks/app/page-cb3aec9c8077eab1.js +0 -1
  55. package/public/dashboard/_next/static/chunks/app/settings/page-82693b6134aafc85.js +0 -1
  56. package/public/dashboard/_next/static/chunks/framework-fdd4ff226e9057cd.js +0 -1
  57. package/public/dashboard/_next/static/chunks/main-39090d49dd3cd8c7.js +0 -1
  58. package/public/dashboard/_next/static/chunks/main-app-bb0a6e7769aa4668.js +0 -1
  59. package/public/dashboard/_next/static/chunks/pages/_app-3e3e3e64529ea027.js +0 -1
  60. package/public/dashboard/_next/static/chunks/pages/_error-8cfbe37f68950a2b.js +0 -1
  61. package/public/dashboard/_next/static/chunks/webpack-a21f388d2a000173.js +0 -1
  62. package/public/dashboard/_next/static/css/a979e4e0673642a5.css +0 -1
  63. /package/public/dashboard/_next/static/{mgA6xTBePiCXP1IVRWWME → QcceI_B55xOsryXxwZfhA}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -1,45 +1,53 @@
1
- # create-locus-project
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/asgarovf/locusai/refs/heads/master/assets/logo.png" alt="Locus" width="150" />
3
+ </p>
2
4
 
3
- CLI tool to scaffold new Locus-managed projects.
5
+ <p align="center">
6
+ <a href="https://www.npmjs.com/package/@locusai/cli"><img src="https://img.shields.io/npm/v/@locusai/cli?color=blue" alt="npm version" /></a>
7
+ <a href="https://github.com/asgarovf/locusai/blob/master/LICENSE"><img src="https://img.shields.io/github/license/asgarovf/locusai?color=blue" alt="License" /></a>
8
+ <a href="https://github.com/asgarovf/locusai"><img src="https://img.shields.io/github/stars/asgarovf/locusai?style=flat&color=blue" alt="GitHub Stars" /></a>
9
+ </p>
4
10
 
5
- ## Usage
11
+ # @locusai/cli
12
+
13
+ The unified CLI for **Locus** — a local-first AI development platform that combines task management, documentation, and CI coordination to help AI agents build your projects.
14
+
15
+ ## Quick Start
6
16
 
7
17
  ```bash
8
- # Using bun create
9
- bun create locus-project --name my-app
18
+ # Create a new Locus-managed project
19
+ npx @locusai/cli init --name my-app
10
20
 
11
- # Or with npx (when published)
12
- npx create-locus-project --name my-app
21
+ # Or initialize in an existing repo
22
+ npx @locusai/cli init
23
+
24
+ # Start the development server
25
+ npx @locusai/cli dev
13
26
  ```
14
27
 
15
- ## What it creates
28
+ ## Commands
29
+
30
+ | Command | Description |
31
+ |---------|-------------|
32
+ | `init --name <name>` | Create a new Locus-managed monorepo project |
33
+ | `init` | Initialize Locus in an existing repository |
34
+ | `dev` | Start the Locus dashboard and MCP server |
16
35
 
17
- - **Monorepo structure**: `apps/`, `packages/`, `docs/`
36
+ ## What It Creates
37
+
38
+ When creating a new project (`init --name`):
39
+ - **Monorepo structure**: `apps/`, `packages/`
18
40
  - **Locus workspace**: `.locus/` directory with database and config
19
41
  - **Starter configuration**: TypeScript, Biome, Git
20
42
  - **Example task**: Getting started task in the backlog
21
- - **Documentation**: Basic getting started guide
22
-
23
- ## Options
24
-
25
- - `--name <project-name>` (required) - Name of your project
26
- - `--path <directory>` (optional) - Parent directory (defaults to current directory)
27
43
 
28
- ## After creation
29
-
30
- ```bash
31
- cd my-app
32
- bun install
33
- bun run dev
34
- ```
44
+ When initializing existing repo (`init`):
45
+ - **Locus workspace**: `.locus/` directory with database and config
35
46
 
36
- ## Managing with Locus
47
+ ## Documentation
37
48
 
38
- Point Locus to your project:
49
+ Visit [locusai.dev/docs](https://locusai.dev/docs) for full documentation.
39
50
 
40
- ```bash
41
- # Update your MCP config or start Locus with:
42
- locus start --project /path/to/my-app/.locus
43
- ```
51
+ ## License
44
52
 
45
- Then use the Locus UI, MCP server, or CLI to manage tasks, docs, and CI.
53
+ [MIT](https://github.com/asgarovf/locusai/blob/master/LICENSE)
package/bin/locus.js CHANGED
@@ -4,14 +4,14 @@
4
4
  // packages/cli/index.ts
5
5
  import { existsSync as existsSync2 } from "fs";
6
6
  import { homedir } from "os";
7
- import { isAbsolute, join as join6, resolve as resolve2 } from "path";
7
+ import { isAbsolute, join as join6, resolve } from "path";
8
8
  import { parseArgs } from "util";
9
9
 
10
10
  // packages/cli/src/generators/locus.ts
11
11
  import { Database } from "bun:sqlite";
12
12
  import { existsSync } from "fs";
13
13
  import { writeFile as writeFile2 } from "fs/promises";
14
- import { join, resolve } from "path";
14
+ import { join } from "path";
15
15
 
16
16
  // packages/cli/src/utils.ts
17
17
  import { mkdir, writeFile } from "fs/promises";
@@ -99,18 +99,11 @@ Managed by Locus.
99
99
  }
100
100
  async function logMcpConfig(config) {
101
101
  const { projectPath, projectName } = config;
102
- const scriptDir = import.meta.dir;
103
- const isBundled = scriptDir.endsWith("/bin") || scriptDir.endsWith("\\bin");
104
- const locusRoot = isBundled ? resolve(scriptDir, "../") : resolve(scriptDir, "../../../../");
105
- const mcpSourcePath = join(locusRoot, "apps/mcp/src/index.ts");
106
- const mcpBundledPath = isBundled ? join(scriptDir, "mcp.js") : join(locusRoot, "packages/cli/bin/mcp.js");
107
- const mcpExecPath = existsSync(mcpSourcePath) ? mcpSourcePath : mcpBundledPath;
108
102
  const mcpConfig = {
109
103
  mcpServers: {
110
- [projectName]: {
111
- command: "bun",
112
- args: ["run", mcpExecPath, "--project", join(projectPath, ".locus")],
113
- env: {}
104
+ locus: {
105
+ command: "npx",
106
+ args: ["@locusai/cli", "mcp", "--project", projectPath]
114
107
  }
115
108
  }
116
109
  };
@@ -120,7 +113,7 @@ Project created successfully!`);
120
113
  Next steps:`);
121
114
  console.log(` cd ${projectName}`);
122
115
  console.log(" bun install");
123
- console.log(" bun run dev");
116
+ console.log(" npx @locusai/cli dev");
124
117
  console.log(`
125
118
  MCP Configuration (add to your IDE or Claude Desktop config):`);
126
119
  console.log(JSON.stringify(mcpConfig, null, 2));
@@ -140,7 +133,7 @@ var VERSIONS = {
140
133
  typescript: "5.8.3",
141
134
  react: "^19.0.0",
142
135
  reactDom: "^19.0.0",
143
- next: "15.1.11",
136
+ next: "15.4.10",
144
137
  nestjs: "^11.0.0",
145
138
  zod: "^3.23.8",
146
139
  lucide: "^0.453.0",
@@ -1010,7 +1003,7 @@ async function init(args) {
1010
1003
  let basePath = process.cwd();
1011
1004
  if (userPathInput) {
1012
1005
  const userPath = userPathInput.startsWith("~") ? join6(homedir(), userPathInput.slice(1)) : userPathInput;
1013
- basePath = isAbsolute(userPath) ? userPath : resolve2(process.cwd(), userPath);
1006
+ basePath = isAbsolute(userPath) ? userPath : resolve(process.cwd(), userPath);
1014
1007
  }
1015
1008
  projectPath = join6(basePath, projectName);
1016
1009
  } else {
@@ -1035,21 +1028,6 @@ async function init(args) {
1035
1028
  await generateAppServer(config);
1036
1029
  }
1037
1030
  await initializeLocus(config);
1038
- if (isNewProject) {
1039
- if (!existsSync2(join6(projectPath, ".git"))) {
1040
- console.log("Initializing git repository...");
1041
- await Bun.spawn(["git", "init"], { cwd: projectPath, stdout: "ignore" }).exited;
1042
- }
1043
- console.log("Formatting project...");
1044
- try {
1045
- await Bun.spawn(["bun", "run", "format"], {
1046
- cwd: projectPath,
1047
- stdout: "ignore"
1048
- }).exited;
1049
- } catch {
1050
- console.log("Note: Formatting skipped (biome not found). Run 'bun install' first.");
1051
- }
1052
- }
1053
1031
  await logMcpConfig(config);
1054
1032
  } catch (error) {
1055
1033
  console.error("Error creating project:", error);
@@ -1065,7 +1043,7 @@ async function dev(args) {
1065
1043
  strict: false
1066
1044
  });
1067
1045
  const projectPath = values.project || process.cwd();
1068
- const locusDir = isAbsolute(projectPath) ? join6(projectPath, ".locus") : resolve2(process.cwd(), projectPath, ".locus");
1046
+ const locusDir = isAbsolute(projectPath) ? join6(projectPath, ".locus") : resolve(process.cwd(), projectPath, ".locus");
1069
1047
  if (!existsSync2(locusDir)) {
1070
1048
  console.error(`Error: .locus directory not found at ${locusDir}`);
1071
1049
  console.log("Are you in a Locus project?");
@@ -1073,7 +1051,7 @@ async function dev(args) {
1073
1051
  }
1074
1052
  const cliDir = import.meta.dir;
1075
1053
  const isBundled = cliDir.endsWith("/bin") || cliDir.endsWith("\\bin");
1076
- const locusRoot = isBundled ? resolve2(cliDir, "../") : resolve2(cliDir, "../../");
1054
+ const locusRoot = isBundled ? resolve(cliDir, "../") : resolve(cliDir, "../../");
1077
1055
  const serverSourcePath = join6(locusRoot, "apps/server/src/index.ts");
1078
1056
  const serverBundledPath = isBundled ? join6(cliDir, "server.js") : join6(locusRoot, "packages/cli/bin/server.js");
1079
1057
  const serverExecPath = existsSync2(serverSourcePath) ? serverSourcePath : serverBundledPath;
package/index.ts CHANGED
@@ -67,28 +67,6 @@ async function init(args: string[]) {
67
67
  }
68
68
 
69
69
  await initializeLocus(config);
70
-
71
- if (isNewProject) {
72
- if (!existsSync(join(projectPath, ".git"))) {
73
- console.log("Initializing git repository...");
74
- await Bun.spawn(["git", "init"], { cwd: projectPath, stdout: "ignore" })
75
- .exited;
76
- }
77
-
78
- console.log("Formatting project...");
79
- // Fallback if biome is not in path
80
- try {
81
- await Bun.spawn(["bun", "run", "format"], {
82
- cwd: projectPath,
83
- stdout: "ignore",
84
- }).exited;
85
- } catch {
86
- console.log(
87
- "Note: Formatting skipped (biome not found). Run 'bun install' first."
88
- );
89
- }
90
- }
91
-
92
70
  await logMcpConfig(config);
93
71
  } catch (error) {
94
72
  console.error("Error creating project:", error);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@locusai/cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Local-first AI development platform & engineering workspace",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/47cbc4e2adbc5db9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/8aea088cdc4338f0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c2c06e0e7e056d3e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-a21f388d2a000173.js"/><script src="/_next/static/chunks/87c73c54-18883d7ce69be0ce.js" async=""></script><script src="/_next/static/chunks/855-a193e1d785e334cf.js" async=""></script><script src="/_next/static/chunks/main-app-bb0a6e7769aa4668.js" async=""></script><script src="/_next/static/chunks/954-73b5906ca7819e42.js" async=""></script><script src="/_next/static/chunks/273-95c2836f1a6dfb23.js" async=""></script><script src="/_next/static/chunks/app/layout-a0acefd9b75ec3b8.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Locus | Engineering Workspace</title><meta name="description" content="Modernized task management and documentation for engineering teams."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_6a21cc antialiased"><div class="flex h-screen overflow-hidden bg-background"><aside class="w-[260px] flex flex-col border-r border-border/50 bg-card/50 backdrop-blur-sm h-full"><div class="flex items-center gap-3 p-5 border-b border-border/50"><div class="bg-linear-to-br from-primary to-primary/70 text-primary-foreground p-2 rounded-xl shadow-lg shadow-primary/20"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg></div><div><h2 class="text-lg font-bold tracking-tight text-foreground">Locus</h2><p class="text-[10px] text-muted-foreground font-medium">Engineering Workspace</p></div></div><div class="flex-1 p-4"><div class="text-[10px] uppercase font-bold tracking-widest text-muted-foreground/70 mb-3 px-3">Navigation</div><nav class="space-y-1"><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard group-hover:scale-110 transition-transform"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><div class="flex-1"><span class="block">Board</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/backlog"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list group-hover:scale-110 transition-transform"><path d="M3 12h.01"></path><path d="M3 18h.01"></path><path d="M3 6h.01"></path><path d="M8 12h13"></path><path d="M8 18h13"></path><path d="M8 6h13"></path></svg><div class="flex-1"><span class="block">Backlog</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/docs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text group-hover:scale-110 transition-transform"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg><div class="flex-1"><span class="block">Library</span></div></a></nav></div><div class="p-4 border-t border-border/50"><a class="flex items-center gap-3 w-full px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary/60 hover:text-foreground" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>Settings</span></a></div></aside><main class="flex-1 overflow-auto bg-background p-8"><div class="max-w-[1440px] mx-auto"><header class="flex items-center mb-6 py-3"><div class="relative flex-1 max-w-md group"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search absolute left-3.5 top-1/2 -translate-y-1/2 text-muted-foreground group-focus-within:text-primary transition-colors"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg><input type="text" placeholder="Search tasks, docs... (⌘K)" class="w-full bg-secondary/40 border border-border/50 rounded-lg pl-10 pr-4 py-2.5 text-sm text-foreground placeholder:text-muted-foreground/70 outline-none transition-all focus:border-primary/50 focus:ring-2 focus:ring-primary/20 focus:bg-background hover:bg-secondary/60"/></div></header><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div></div></main></div><script src="/_next/static/chunks/webpack-a21f388d2a000173.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3619,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-95c2836f1a6dfb23.js\",\"177\",\"static/chunks/app/layout-a0acefd9b75ec3b8.js\"],\"Providers\"]\n3:I[4211,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-95c2836f1a6dfb23.js\",\"177\",\"static/chunks/app/layout-a0acefd9b75ec3b8.js\"],\"Sidebar\"]\n4:I[8714,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-95c2836f1a6dfb23.js\",\"177\",\"static/chunks/app/layout-a0acefd9b75ec3b8.js\"],\"Header\"]\n5:I[9507,[],\"\"]\n6:I[2639,[],\"\"]\n7:I[1432,[],\"OutletBoundary\"]\n9:I[1432,[],\"MetadataBoundary\"]\nb:I[1432,[],\"ViewportBoundary\"]\nd:I[9398,[],\"\"]\n:HL[\"/_next/static/media/47cbc4e2adbc5db9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/8aea088cdc4338f0.css\",\"style\"]\n:HL[\"/_next/static/css/c2c06e0e7e056d3e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"mgA6xTBePiCXP1IVRWWME\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8aea088cdc4338f0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c2c06e0e7e056d3e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__className_6a21cc antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-screen overflow-hidden bg-background\",\"children\":[[\"$\",\"$L3\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-auto bg-background p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1440px] mx-auto\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[],[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$1\",\"8V3ZDiNmdnEshdpnhFeDT\",{\"children\":[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\na:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"1\",{\"children\":\"Locus | Engineering Workspace\"}],[\"$\",\"meta\",\"2\",{\"name\":\"description\",\"content\":\"Modernized task management and documentation for engineering teams.\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\n"])</script></body></html>
1
+ <!DOCTYPE html><!--QcceI_B55xOsryXxwZfhA--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/47cbc4e2adbc5db9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/8aea088cdc4338f0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c2c06e0e7e056d3e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-03b96ab0f7ba7feb.js"/><script src="/_next/static/chunks/87c73c54-1f4741035a95c140.js" async=""></script><script src="/_next/static/chunks/902-d6926825a9fe8784.js" async=""></script><script src="/_next/static/chunks/main-app-123e879c5a937a00.js" async=""></script><script src="/_next/static/chunks/337-d3bb75304d130513.js" async=""></script><script src="/_next/static/chunks/795-10b9cf2562a5999c.js" async=""></script><script src="/_next/static/chunks/app/layout-70b5f0deb13c27ef.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Locus | Engineering Workspace</title><meta name="description" content="Modernized task management and documentation for engineering teams."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_6a21cc antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen overflow-hidden bg-background"><aside class="w-[260px] flex flex-col border-r border-border/50 bg-card/50 backdrop-blur-sm h-full"><div class="flex items-center gap-3 p-5 border-b border-border/50"><div class="bg-linear-to-br from-primary to-primary/70 text-primary-foreground p-2 rounded-xl shadow-lg shadow-primary/20"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg></div><div><h2 class="text-lg font-bold tracking-tight text-foreground">Locus</h2><p class="text-[10px] text-muted-foreground font-medium">Engineering Workspace</p></div></div><div class="flex-1 p-4"><div class="text-[10px] uppercase font-bold tracking-widest text-muted-foreground/70 mb-3 px-3">Navigation</div><nav class="space-y-1"><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard group-hover:scale-110 transition-transform"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><div class="flex-1"><span class="block">Board</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/backlog"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list group-hover:scale-110 transition-transform"><path d="M3 12h.01"></path><path d="M3 18h.01"></path><path d="M3 6h.01"></path><path d="M8 12h13"></path><path d="M8 18h13"></path><path d="M8 6h13"></path></svg><div class="flex-1"><span class="block">Backlog</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/docs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text group-hover:scale-110 transition-transform"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg><div class="flex-1"><span class="block">Library</span></div></a></nav></div><div class="p-4 border-t border-border/50"><a class="flex items-center gap-3 w-full px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary/60 hover:text-foreground" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>Settings</span></a></div></aside><main class="flex-1 overflow-auto bg-background p-8"><div class="max-w-[1440px] mx-auto"><header class="flex items-center mb-6 py-3"><div class="relative flex-1 max-w-md group"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search absolute left-3.5 top-1/2 -translate-y-1/2 text-muted-foreground group-focus-within:text-primary transition-colors"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg><input type="text" placeholder="Search tasks, docs... (⌘K)" class="w-full bg-secondary/40 border border-border/50 rounded-lg pl-10 pr-4 py-2.5 text-sm text-foreground placeholder:text-muted-foreground/70 outline-none transition-all focus:border-primary/50 focus:ring-2 focus:ring-primary/20 focus:bg-background hover:bg-secondary/60"/></div></header><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></div></main></div><script src="/_next/static/chunks/webpack-03b96ab0f7ba7feb.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[6096,[\"337\",\"static/chunks/337-d3bb75304d130513.js\",\"795\",\"static/chunks/795-10b9cf2562a5999c.js\",\"177\",\"static/chunks/app/layout-70b5f0deb13c27ef.js\"],\"Providers\"]\n3:I[9798,[\"337\",\"static/chunks/337-d3bb75304d130513.js\",\"795\",\"static/chunks/795-10b9cf2562a5999c.js\",\"177\",\"static/chunks/app/layout-70b5f0deb13c27ef.js\"],\"Sidebar\"]\n4:I[493,[\"337\",\"static/chunks/337-d3bb75304d130513.js\",\"795\",\"static/chunks/795-10b9cf2562a5999c.js\",\"177\",\"static/chunks/app/layout-70b5f0deb13c27ef.js\"],\"Header\"]\n5:I[7132,[],\"\"]\n6:I[5082,[],\"\"]\n7:I[700,[],\"OutletBoundary\"]\n9:I[7748,[],\"AsyncMetadataOutlet\"]\nb:I[700,[],\"ViewportBoundary\"]\nd:I[700,[],\"MetadataBoundary\"]\ne:\"$Sreact.suspense\"\n10:I[1256,[],\"\"]\n:HL[\"/_next/static/media/47cbc4e2adbc5db9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/8aea088cdc4338f0.css\",\"style\"]\n:HL[\"/_next/static/css/c2c06e0e7e056d3e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"QcceI_B55xOsryXxwZfhA\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8aea088cdc4338f0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c2c06e0e7e056d3e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__className_6a21cc antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-screen overflow-hidden bg-background\",\"children\":[[\"$\",\"$L3\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-auto bg-background p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1440px] mx-auto\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$L8\",[\"$\",\"$L9\",null,{\"promise\":\"$@a\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$e\",null,{\"fallback\":null,\"children\":\"$Lf\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\n"])</script><script>self.__next_f.push([1,"a:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Locus | Engineering Workspace\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Modernized task management and documentation for engineering teams.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:\"$a:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:5,errorRate:1e-4,numBits:96,numHashes:14,bitArray:[1,0,0,1,1,e,e,0,r,r,r,e,e,r,r,r,e,e,r,e,r,r,e,e,e,e,e,e,e,r,r,e,e,r,r,r,e,e,e,e,e,r,e,r,r,r,r,e,r,r,r,r,r,r,e,e,e,e,e,e,e,e,r,e,e,e,e,e,r,e,r,e,r,r,e,e,r,r,e,r,r,e,e,r,e,r,r,e,e,r,r,r,r,e,e,e]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-8cfbe37f68950a2b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
1
+ self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:5,errorRate:1e-4,numBits:96,numHashes:14,bitArray:[1,0,0,1,e,e,e,r,r,r,r,e,e,r,r,r,e,e,r,e,r,r,e,e,e,e,e,e,e,r,r,e,e,r,r,r,e,e,e,e,e,r,e,r,r,r,r,e,r,r,r,r,r,r,e,e,e,e,e,e,e,e,r,e,e,e,e,e,r,e,r,e,r,r,e,e,r,r,e,r,r,e,e,r,e,r,r,e,e,r,r,r,r,e,e,e]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-3e422ffd891594de.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[138],{3138:(e,s,t)=>{t.r(s),t.d(s,{Backlog:()=>P});var a=t(4568),r=t(3096),i=t(7606),n=t(3297),d=t(6258),l=t(9241),o=t(1355),c=t(5256),x=t(8889);let m=(0,x.A)("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]),u=(0,x.A)("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);var p=t(4529),h=t(5191);let g=(0,x.A)("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);var y=t(7911);let v=(0,x.A)("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);var j=t(8864);let f=(0,x.A)("Archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);var b=t(8262);let N=(0,x.A)("GripVertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);var k=t(7620),w=t(4532),C=t(3544),A=t(5322),S=t(3928),z=t(1077),M=t(8688);function P(){let e=(0,i.jE)(),[s,t]=(0,k.useState)(null),[x,N]=(0,k.useState)(!1),[S,P]=(0,k.useState)(""),[T,q]=(0,k.useState)(!1),[I,K]=(0,k.useState)(!1),[L,J]=(0,k.useState)(new Set),[Q,$]=(0,k.useState)(!0),{data:F=[]}=(0,n.I)({queryKey:["sprints"],queryFn:z.K.getAll}),{data:O=[]}=(0,n.I)({queryKey:["tasks"],queryFn:M.p.getAll}),B=(0,d.n)({mutationFn:z.K.create,onSuccess:()=>{e.invalidateQueries({queryKey:["sprints"]}),N(!1),P("")}}),V=(0,d.n)({mutationFn:e=>{let{id:s,updates:t}=e;return M.p.update(s,t)},onSuccess:()=>e.invalidateQueries({queryKey:["tasks"]})}),W=(0,d.n)({mutationFn:e=>{let{id:s,updates:t}=e;return z.K.update(s,t)},onSuccess:()=>e.invalidateQueries({queryKey:["sprints"]})}),_=(0,d.n)({mutationFn:e=>z.K.delete(e),onSuccess:()=>{e.invalidateQueries({queryKey:["sprints"]}),e.invalidateQueries({queryKey:["tasks"]})}}),G=()=>{S.trim()&&B.mutate({name:S})},H=e=>{J(s=>{let t=new Set(s);return t.has(e)?t.delete(e):t.add(e),t})},R=O.filter(e=>!e.sprintId),Z=F.filter(e=>e.status===r.J3.ACTIVE),U=F.filter(e=>e.status===r.J3.PLANNED),Y=F.filter(e=>e.status===r.J3.COMPLETED),X=e=>O.filter(s=>s.sprintId===e);return(0,a.jsxs)("div",{className:"h-full flex flex-col bg-linear-to-br from-background via-background to-secondary/5",children:[(0,a.jsxs)("header",{className:"px-8 py-6 border-b border-border/30 bg-background/80 backdrop-blur-xl sticky top-0 z-20",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsx)("div",{className:"p-2.5 rounded-xl bg-linear-to-br from-primary/20 to-primary/5 border border-primary/20",children:(0,a.jsx)(m,{className:"w-5 h-5 text-primary"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-xl font-bold text-foreground",children:"Product Backlog"}),(0,a.jsxs)("p",{className:"text-sm text-muted-foreground",children:[O.length," items \xb7 ",F.length," sprints"]})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsxs)(A.$n,{variant:"secondary",onClick:()=>N(!0),disabled:x,className:"gap-2",children:[(0,a.jsx)(u,{size:16}),"New Sprint"]}),(0,a.jsxs)(A.$n,{onClick:()=>q(!0),className:"gap-2 shadow-lg shadow-primary/20",children:[(0,a.jsx)(p.A,{size:16}),"Create Issue"]})]})]}),(0,a.jsx)(o.N,{children:x&&(0,a.jsx)(c.P.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},className:"overflow-hidden",children:(0,a.jsxs)("div",{className:"flex gap-3 mt-4 pt-4 border-t border-border/30 max-w-lg",children:[(0,a.jsx)(A.pd,{value:S,onChange:e=>P(e.target.value),placeholder:"Sprint name (e.g. Sprint 24)",autoFocus:!0,onKeyDown:e=>"Enter"===e.key&&G(),className:"flex-1"}),(0,a.jsx)(A.$n,{onClick:G,disabled:!S.trim(),size:"sm",children:"Create"}),(0,a.jsx)(A.$n,{variant:"ghost",size:"sm",onClick:()=>{N(!1),P("")},children:"Cancel"})]})})})]}),(0,a.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,a.jsxs)("div",{className:"max-w-5xl mx-auto px-8 py-6 space-y-4",children:[Z.map(e=>(0,a.jsx)(D,{sprint:e,tasks:X(e.id),isExpanded:L.has(e.id),onToggle:()=>H(e.id),onTaskClick:t,onMoveTask:(e,s)=>V.mutate({id:e,updates:{sprintId:s}}),availableSprints:F,variant:"active",onAction:()=>{W.mutate({id:e.id,updates:{status:r.J3.COMPLETED,endDate:Date.now()}})},actionLabel:"Complete",actionIcon:(0,a.jsx)(h.A,{size:14})},e.id)),U.map(e=>(0,a.jsx)(D,{sprint:e,tasks:X(e.id),isExpanded:L.has(e.id),onToggle:()=>H(e.id),onTaskClick:t,onMoveTask:(e,s)=>V.mutate({id:e,updates:{sprintId:s}}),availableSprints:F,variant:"planned",onAction:()=>{W.mutate({id:e.id,updates:{status:r.J3.ACTIVE,startDate:Date.now()}})},actionLabel:"Start Sprint",actionIcon:(0,a.jsx)(g,{size:14})},e.id)),(0,a.jsxs)(c.P.div,{layout:!0,className:"rounded-2xl border border-border/40 bg-card/30 backdrop-blur-sm overflow-hidden",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between p-4 hover:bg-secondary/30 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 flex-1 cursor-pointer",onClick:()=>$(!Q),children:[(0,a.jsx)(c.P.div,{animate:{rotate:90*!!Q},transition:{duration:.2},children:(0,a.jsx)(y.A,{size:18,className:"text-muted-foreground"})}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(v,{size:16,className:"text-amber-500"}),(0,a.jsx)("span",{className:"font-semibold text-foreground",children:"Backlog"})]}),(0,a.jsx)("span",{className:"px-2 py-0.5 rounded-full bg-secondary text-[11px] font-bold text-muted-foreground",children:R.length})]}),(0,a.jsxs)(A.$n,{variant:"ghost",size:"sm",className:"text-xs gap-1.5 text-muted-foreground hover:text-primary",onClick:()=>q(!0),children:[(0,a.jsx)(p.A,{size:14}),"Add"]})]}),(0,a.jsx)(o.N,{children:Q&&(0,a.jsx)(c.P.div,{initial:{height:0},animate:{height:"auto"},exit:{height:0},className:"overflow-hidden",children:(0,a.jsx)("div",{className:"border-t border-border/30",children:0===R.length?(0,a.jsxs)("div",{className:"py-12 text-center",children:[(0,a.jsx)("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-full bg-secondary/50 mb-3",children:(0,a.jsx)(j.A,{className:"w-5 h-5 text-muted-foreground/50"})}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"No items in backlog"}),(0,a.jsx)(A.$n,{variant:"ghost",size:"sm",className:"mt-2 text-primary",onClick:()=>q(!0),children:"Create your first issue"})]}):(0,a.jsx)("div",{className:"divide-y divide-border/20",children:R.map(e=>(0,a.jsx)(E,{task:e,onClick:()=>t(e.id),onMoveTask:s=>V.mutate({id:e.id,updates:{sprintId:s}}),availableSprints:F.filter(e=>e.status!==r.J3.COMPLETED),currentSprintId:null},e.id))})})})})]}),Y.length>0&&(0,a.jsxs)(c.P.div,{layout:!0,className:"rounded-2xl border border-border/30 bg-background/50 overflow-hidden",children:[(0,a.jsx)("button",{onClick:()=>K(!I),className:"w-full flex items-center justify-between p-4 hover:bg-secondary/20 transition-colors",children:(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(c.P.div,{animate:{rotate:90*!!I},transition:{duration:.2},children:(0,a.jsx)(y.A,{size:18,className:"text-muted-foreground/50"})}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(f,{size:16,className:"text-muted-foreground/50"}),(0,a.jsx)("span",{className:"font-medium text-muted-foreground",children:"Completed Sprints"})]}),(0,a.jsx)("span",{className:"px-2 py-0.5 rounded-full bg-secondary/50 text-[11px] font-bold text-muted-foreground/60",children:Y.length})]})}),(0,a.jsx)(o.N,{children:I&&(0,a.jsx)(c.P.div,{initial:{height:0},animate:{height:"auto"},exit:{height:0},className:"overflow-hidden",children:(0,a.jsx)("div",{className:"border-t border-border/30 divide-y divide-border/20",children:Y.map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 hover:bg-secondary/10 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(h.A,{size:14,className:"text-emerald-500/60"}),(0,a.jsx)("span",{className:"text-sm font-medium text-muted-foreground",children:e.name}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground/50 font-mono",children:[X(e.id).length," tasks"]}),e.endDate&&(0,a.jsxs)("span",{className:"text-xs text-muted-foreground/40",suppressHydrationWarning:!0,children:["Completed"," ",(0,l.GP)(e.endDate,"MMM d, yyyy")]})]}),(0,a.jsxs)(A.$n,{variant:"ghost",size:"sm",className:"text-xs text-muted-foreground hover:text-destructive hover:bg-destructive/10",onClick:()=>{confirm('Delete "'.concat(e.name,'" and all its tasks? This cannot be undone.'))&&_.mutate(e.id)},children:[(0,a.jsx)(b.A,{size:14,className:"mr-1"}),"Delete"]})]},e.id))})})})]})]})}),(0,a.jsx)(w.l,{isOpen:T,onClose:()=>q(!1),onCreated:()=>{e.invalidateQueries({queryKey:["tasks"]}),q(!1)}}),(0,a.jsx)(o.N,{children:s&&(0,a.jsx)(C.W,{taskId:s,onClose:()=>t(null),onDeleted:()=>{t(null),e.invalidateQueries({queryKey:["tasks"]})},onUpdated:()=>e.invalidateQueries({queryKey:["tasks"]})})})]})}function D(e){let{sprint:s,tasks:t,isExpanded:i,onToggle:n,onTaskClick:d,onMoveTask:x,availableSprints:m,variant:u,onAction:p,actionLabel:h,actionIcon:g}=e,v="active"===u;return(0,a.jsxs)(c.P.div,{layout:!0,className:(0,S.cn)("rounded-2xl border overflow-hidden transition-all",v?"border-primary/30 bg-primary/2 shadow-lg shadow-primary/5":"border-border/40 bg-card/30"),children:[(0,a.jsxs)("div",{onClick:n,className:(0,S.cn)("w-full flex items-center justify-between p-4 transition-colors",v?"hover:bg-primary/5":"hover:bg-secondary/30"),children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(c.P.div,{animate:{rotate:90*!!i},transition:{duration:.2},children:(0,a.jsx)(y.A,{size:18,className:v?"text-primary":"text-muted-foreground"})}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[v&&(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)("div",{className:"w-2 h-2 rounded-full bg-primary animate-pulse"}),(0,a.jsx)("div",{className:"absolute inset-0 w-2 h-2 rounded-full bg-primary animate-ping"})]}),(0,a.jsx)("span",{className:(0,S.cn)("font-semibold",v?"text-primary":"text-foreground"),children:s.name}),(0,a.jsxs)("span",{className:"px-2 py-0.5 rounded-full bg-secondary text-[11px] font-bold text-muted-foreground",children:[t.length," issues"]}),s.startDate&&v&&(0,a.jsxs)("span",{className:"text-xs text-muted-foreground font-mono",suppressHydrationWarning:!0,children:["Started ",(0,l.GP)(s.startDate,"MMM d")]})]})]}),(0,a.jsxs)(A.$n,{variant:v?"secondary":"ghost",size:"sm",className:(0,S.cn)("gap-1.5 text-xs",v?"hover:bg-emerald-500/10 hover:text-emerald-600":"hover:bg-primary/10 hover:text-primary"),onClick:e=>{e.stopPropagation(),p()},children:[g,h]})]}),(0,a.jsx)(o.N,{children:i&&(0,a.jsx)(c.P.div,{initial:{height:0},animate:{height:"auto"},exit:{height:0},className:"overflow-hidden",children:(0,a.jsx)("div",{className:"border-t border-border/30",children:0===t.length?(0,a.jsx)("div",{className:"py-8 text-center text-sm text-muted-foreground/60",children:"Drag issues here or move from backlog"}):(0,a.jsx)("div",{className:"divide-y divide-border/20",children:t.map(e=>(0,a.jsx)(E,{task:e,onClick:()=>d(e.id),onMoveTask:s=>x(e.id,s),availableSprints:m.filter(e=>e.id!==s.id&&e.status!==r.J3.COMPLETED),currentSprintId:s.id},e.id))})})})})]})}function E(e){let{task:s,onClick:t,onMoveTask:r,availableSprints:i,currentSprintId:n}=e;return(0,a.jsxs)(c.P.div,{layout:!0,className:"group flex items-center gap-3 px-4 py-3 hover:bg-secondary/20 transition-all cursor-pointer",onClick:t,children:[(0,a.jsx)("div",{className:"opacity-0 group-hover:opacity-40 transition-opacity cursor-grab",children:(0,a.jsx)(N,{size:14})}),(0,a.jsx)(A.YJ,{priority:s.priority}),(0,a.jsx)("div",{className:"flex-1 min-w-0",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"text-xs font-mono text-muted-foreground/60 group-hover:text-primary transition-colors",children:["LCS-",s.id]}),(0,a.jsx)("span",{className:"text-sm font-medium text-foreground/90 truncate group-hover:text-foreground transition-colors",children:s.title})]})}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(A.Wh,{status:s.status}),s.assigneeRole&&(0,a.jsx)("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-bold bg-secondary border border-border/50 text-muted-foreground",children:s.assigneeRole})]}),(0,a.jsx)("div",{className:"opacity-0 group-hover:opacity-100 transition-opacity",onClick:e=>e.stopPropagation(),children:(0,a.jsxs)("select",{className:"appearance-none bg-secondary/50 hover:bg-secondary text-xs font-medium text-muted-foreground px-2 py-1 rounded-md border border-border/50 cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary/20",value:"",onChange:e=>{let s=e.target.value;"backlog"===s?r(null):s&&r(Number(s))},children:[(0,a.jsx)("option",{value:"",disabled:!0,children:"Move →"}),null!==n&&(0,a.jsx)("option",{value:"backlog",children:"→ Backlog"}),i.map(e=>(0,a.jsxs)("option",{value:e.id,children:["→ ",e.name]},e.id))]})})]})}},8864:(e,s,t)=>{t.d(s,{A:()=>a});let a=(0,t(8889).A)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]])}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[337],{607:(e,r,o)=>{o.d(r,{QP:()=>ei});let t=(e=new Map,r=null,o)=>({nextPart:e,validators:r,classGroupId:o}),l=[],a=(e,r,o)=>{if(0==e.length-r)return o.classGroupId;let t=e[r],l=o.nextPart.get(t);if(l){let o=a(e,r+1,l);if(o)return o}let n=o.validators;if(null===n)return;let s=0===r?e.join("-"):e.slice(r).join("-"),i=n.length;for(let e=0;e<i;e++){let r=n[e];if(r.validator(s))return r.classGroupId}},n=(e,r)=>{let o=t();for(let t in e)s(e[t],o,t,r);return o},s=(e,r,o,t)=>{let l=e.length;for(let a=0;a<l;a++)i(e[a],r,o,t)},i=(e,r,o,t)=>"string"==typeof e?void d(e,r,o):"function"==typeof e?void c(e,r,o,t):void m(e,r,o,t),d=(e,r,o)=>{(""===e?r:p(r,e)).classGroupId=o},c=(e,r,o,t)=>{if(u(e))return void s(e(t),r,o,t);null===r.validators&&(r.validators=[]),r.validators.push({classGroupId:o,validator:e})},m=(e,r,o,t)=>{let l=Object.entries(e),a=l.length;for(let e=0;e<a;e++){let[a,n]=l[e];s(n,p(r,a),o,t)}},p=(e,r)=>{let o=e,l=r.split("-"),a=l.length;for(let e=0;e<a;e++){let r=l[e],a=o.nextPart.get(r);a||(a=t(),o.nextPart.set(r,a)),o=a}return o},u=e=>"isThemeGetter"in e&&!0===e.isThemeGetter,b=[],f=(e,r,o,t,l)=>({modifiers:e,hasImportantModifier:r,baseClassName:o,maybePostfixModifierPosition:t,isExternal:l}),g=/\s+/,h=e=>{let r;if("string"==typeof e)return e;let o="";for(let t=0;t<e.length;t++)e[t]&&(r=h(e[t]))&&(o&&(o+=" "),o+=r);return o},k=[],w=e=>{let r=r=>r[e]||k;return r.isThemeGetter=!0,r},x=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,y=/^\((?:(\w[\w-]*):)?(.+)\)$/i,v=/^\d+\/\d+$/,z=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,j=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,N=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,C=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,G=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,$=e=>v.test(e),A=e=>!!e&&!Number.isNaN(Number(e)),O=e=>!!e&&Number.isInteger(Number(e)),W=e=>e.endsWith("%")&&A(e.slice(0,-1)),I=e=>z.test(e),E=()=>!0,M=e=>j.test(e)&&!N.test(e),S=()=>!1,_=e=>C.test(e),P=e=>G.test(e),T=e=>!q(e)&&!F(e),L=e=>Y(e,et,S),q=e=>x.test(e),R=e=>Y(e,el,M),B=e=>Y(e,ea,A),Q=e=>Y(e,er,S),Z=e=>Y(e,eo,P),D=e=>Y(e,es,_),F=e=>y.test(e),H=e=>ee(e,el),J=e=>ee(e,en),K=e=>ee(e,er),U=e=>ee(e,et),V=e=>ee(e,eo),X=e=>ee(e,es,!0),Y=(e,r,o)=>{let t=x.exec(e);return!!t&&(t[1]?r(t[1]):o(t[2]))},ee=(e,r,o=!1)=>{let t=y.exec(e);return!!t&&(t[1]?r(t[1]):o)},er=e=>"position"===e||"percentage"===e,eo=e=>"image"===e||"url"===e,et=e=>"length"===e||"size"===e||"bg-size"===e,el=e=>"length"===e,ea=e=>"number"===e,en=e=>"family-name"===e,es=e=>"shadow"===e;Symbol.toStringTag;let ei=((e,...r)=>{let o,t,s,i,d=e=>{let r=t(e);if(r)return r;let l=((e,r)=>{let{parseClassName:o,getClassGroupId:t,getConflictingClassGroupIds:l,sortModifiers:a}=r,n=[],s=e.trim().split(g),i="";for(let e=s.length-1;e>=0;e-=1){let r=s[e],{isExternal:d,modifiers:c,hasImportantModifier:m,baseClassName:p,maybePostfixModifierPosition:u}=o(r);if(d){i=r+(i.length>0?" "+i:i);continue}let b=!!u,f=t(b?p.substring(0,u):p);if(!f){if(!b||!(f=t(p))){i=r+(i.length>0?" "+i:i);continue}b=!1}let g=0===c.length?"":1===c.length?c[0]:a(c).join(":"),h=m?g+"!":g,k=h+f;if(n.indexOf(k)>-1)continue;n.push(k);let w=l(f,b);for(let e=0;e<w.length;++e){let r=w[e];n.push(h+r)}i=r+(i.length>0?" "+i:i)}return i})(e,o);return s(e,l),l};return i=c=>(t=(o=(e=>({cache:(e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let r=0,o=Object.create(null),t=Object.create(null),l=(l,a)=>{o[l]=a,++r>e&&(r=0,t=o,o=Object.create(null))};return{get(e){let r=o[e];return void 0!==r?r:void 0!==(r=t[e])?(l(e,r),r):void 0},set(e,r){e in o?o[e]=r:l(e,r)}}})(e.cacheSize),parseClassName:(e=>{let{prefix:r,experimentalParseClassName:o}=e,t=e=>{let r,o=[],t=0,l=0,a=0,n=e.length;for(let s=0;s<n;s++){let n=e[s];if(0===t&&0===l){if(":"===n){o.push(e.slice(a,s)),a=s+1;continue}if("/"===n){r=s;continue}}"["===n?t++:"]"===n?t--:"("===n?l++:")"===n&&l--}let s=0===o.length?e:e.slice(a),i=s,d=!1;return s.endsWith("!")?(i=s.slice(0,-1),d=!0):s.startsWith("!")&&(i=s.slice(1),d=!0),f(o,d,i,r&&r>a?r-a:void 0)};if(r){let e=r+":",o=t;t=r=>r.startsWith(e)?o(r.slice(e.length)):f(b,!1,r,void 0,!0)}if(o){let e=t;t=r=>o({className:r,parseClassName:e})}return t})(e),sortModifiers:(e=>{let r=new Map;return e.orderSensitiveModifiers.forEach((e,o)=>{r.set(e,1e6+o)}),e=>{let o=[],t=[];for(let l=0;l<e.length;l++){let a=e[l],n="["===a[0],s=r.has(a);n||s?(t.length>0&&(t.sort(),o.push(...t),t=[]),o.push(a)):t.push(a)}return t.length>0&&(t.sort(),o.push(...t)),o}})(e),...(e=>{let r=(e=>{let{theme:r,classGroups:o}=e;return n(o,r)})(e),{conflictingClassGroups:o,conflictingClassGroupModifiers:t}=e;return{getClassGroupId:e=>{if(e.startsWith("[")&&e.endsWith("]"))return(e=>-1===e.slice(1,-1).indexOf(":")?void 0:(()=>{let r=e.slice(1,-1),o=r.indexOf(":"),t=r.slice(0,o);return t?"arbitrary.."+t:void 0})())(e);let o=e.split("-"),t=+(""===o[0]&&o.length>1);return a(o,t,r)},getConflictingClassGroupIds:(e,r)=>{if(r){let r=t[e],a=o[e];return r?a?((e,r)=>{let o=Array(e.length+r.length);for(let r=0;r<e.length;r++)o[r]=e[r];for(let t=0;t<r.length;t++)o[e.length+t]=r[t];return o})(a,r):r:a||l}return o[e]||l}}})(e)}))(r.reduce((e,r)=>r(e),e()))).cache.get,s=o.cache.set,i=d,d(c)),(...e)=>i(((...e)=>{let r,o,t=0,l="";for(;t<e.length;)(r=e[t++])&&(o=h(r))&&(l&&(l+=" "),l+=o);return l})(...e))})(()=>{let e=w("color"),r=w("font"),o=w("text"),t=w("font-weight"),l=w("tracking"),a=w("leading"),n=w("breakpoint"),s=w("container"),i=w("spacing"),d=w("radius"),c=w("shadow"),m=w("inset-shadow"),p=w("text-shadow"),u=w("drop-shadow"),b=w("blur"),f=w("perspective"),g=w("aspect"),h=w("ease"),k=w("animate"),x=()=>["auto","avoid","all","avoid-page","page","left","right","column"],y=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],v=()=>[...y(),F,q],z=()=>["auto","hidden","clip","visible","scroll"],j=()=>["auto","contain","none"],N=()=>[F,q,i],C=()=>[$,"full","auto",...N()],G=()=>[O,"none","subgrid",F,q],M=()=>["auto",{span:["full",O,F,q]},O,F,q],S=()=>[O,"auto",F,q],_=()=>["auto","min","max","fr",F,q],P=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],Y=()=>["start","end","center","stretch","center-safe","end-safe"],ee=()=>["auto",...N()],er=()=>[$,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...N()],eo=()=>[e,F,q],et=()=>[...y(),K,Q,{position:[F,q]}],el=()=>["no-repeat",{repeat:["","x","y","space","round"]}],ea=()=>["auto","cover","contain",U,L,{size:[F,q]}],en=()=>[W,H,R],es=()=>["","none","full",d,F,q],ei=()=>["",A,H,R],ed=()=>["solid","dashed","dotted","double"],ec=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],em=()=>[A,W,K,Q],ep=()=>["","none",b,F,q],eu=()=>["none",A,F,q],eb=()=>["none",A,F,q],ef=()=>[A,F,q],eg=()=>[$,"full",...N()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[I],breakpoint:[I],color:[E],container:[I],"drop-shadow":[I],ease:["in","out","in-out"],font:[T],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[I],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[I],shadow:[I],spacing:["px",A],text:[I],"text-shadow":[I],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",$,q,F,g]}],container:["container"],columns:[{columns:[A,q,F,s]}],"break-after":[{"break-after":x()}],"break-before":[{"break-before":x()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:v()}],overflow:[{overflow:z()}],"overflow-x":[{"overflow-x":z()}],"overflow-y":[{"overflow-y":z()}],overscroll:[{overscroll:j()}],"overscroll-x":[{"overscroll-x":j()}],"overscroll-y":[{"overscroll-y":j()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:C()}],"inset-x":[{"inset-x":C()}],"inset-y":[{"inset-y":C()}],start:[{start:C()}],end:[{end:C()}],top:[{top:C()}],right:[{right:C()}],bottom:[{bottom:C()}],left:[{left:C()}],visibility:["visible","invisible","collapse"],z:[{z:[O,"auto",F,q]}],basis:[{basis:[$,"full","auto",s,...N()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[A,$,"auto","initial","none",q]}],grow:[{grow:["",A,F,q]}],shrink:[{shrink:["",A,F,q]}],order:[{order:[O,"first","last","none",F,q]}],"grid-cols":[{"grid-cols":G()}],"col-start-end":[{col:M()}],"col-start":[{"col-start":S()}],"col-end":[{"col-end":S()}],"grid-rows":[{"grid-rows":G()}],"row-start-end":[{row:M()}],"row-start":[{"row-start":S()}],"row-end":[{"row-end":S()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":_()}],"auto-rows":[{"auto-rows":_()}],gap:[{gap:N()}],"gap-x":[{"gap-x":N()}],"gap-y":[{"gap-y":N()}],"justify-content":[{justify:[...P(),"normal"]}],"justify-items":[{"justify-items":[...Y(),"normal"]}],"justify-self":[{"justify-self":["auto",...Y()]}],"align-content":[{content:["normal",...P()]}],"align-items":[{items:[...Y(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...Y(),{baseline:["","last"]}]}],"place-content":[{"place-content":P()}],"place-items":[{"place-items":[...Y(),"baseline"]}],"place-self":[{"place-self":["auto",...Y()]}],p:[{p:N()}],px:[{px:N()}],py:[{py:N()}],ps:[{ps:N()}],pe:[{pe:N()}],pt:[{pt:N()}],pr:[{pr:N()}],pb:[{pb:N()}],pl:[{pl:N()}],m:[{m:ee()}],mx:[{mx:ee()}],my:[{my:ee()}],ms:[{ms:ee()}],me:[{me:ee()}],mt:[{mt:ee()}],mr:[{mr:ee()}],mb:[{mb:ee()}],ml:[{ml:ee()}],"space-x":[{"space-x":N()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":N()}],"space-y-reverse":["space-y-reverse"],size:[{size:er()}],w:[{w:[s,"screen",...er()]}],"min-w":[{"min-w":[s,"screen","none",...er()]}],"max-w":[{"max-w":[s,"screen","none","prose",{screen:[n]},...er()]}],h:[{h:["screen","lh",...er()]}],"min-h":[{"min-h":["screen","lh","none",...er()]}],"max-h":[{"max-h":["screen","lh",...er()]}],"font-size":[{text:["base",o,H,R]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[t,F,B]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",W,q]}],"font-family":[{font:[J,q,r]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[l,F,q]}],"line-clamp":[{"line-clamp":[A,"none",F,B]}],leading:[{leading:[a,...N()]}],"list-image":[{"list-image":["none",F,q]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",F,q]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:eo()}],"text-color":[{text:eo()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...ed(),"wavy"]}],"text-decoration-thickness":[{decoration:[A,"from-font","auto",F,R]}],"text-decoration-color":[{decoration:eo()}],"underline-offset":[{"underline-offset":[A,"auto",F,q]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:N()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",F,q]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",F,q]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:et()}],"bg-repeat":[{bg:el()}],"bg-size":[{bg:ea()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},O,F,q],radial:["",F,q],conic:[O,F,q]},V,Z]}],"bg-color":[{bg:eo()}],"gradient-from-pos":[{from:en()}],"gradient-via-pos":[{via:en()}],"gradient-to-pos":[{to:en()}],"gradient-from":[{from:eo()}],"gradient-via":[{via:eo()}],"gradient-to":[{to:eo()}],rounded:[{rounded:es()}],"rounded-s":[{"rounded-s":es()}],"rounded-e":[{"rounded-e":es()}],"rounded-t":[{"rounded-t":es()}],"rounded-r":[{"rounded-r":es()}],"rounded-b":[{"rounded-b":es()}],"rounded-l":[{"rounded-l":es()}],"rounded-ss":[{"rounded-ss":es()}],"rounded-se":[{"rounded-se":es()}],"rounded-ee":[{"rounded-ee":es()}],"rounded-es":[{"rounded-es":es()}],"rounded-tl":[{"rounded-tl":es()}],"rounded-tr":[{"rounded-tr":es()}],"rounded-br":[{"rounded-br":es()}],"rounded-bl":[{"rounded-bl":es()}],"border-w":[{border:ei()}],"border-w-x":[{"border-x":ei()}],"border-w-y":[{"border-y":ei()}],"border-w-s":[{"border-s":ei()}],"border-w-e":[{"border-e":ei()}],"border-w-t":[{"border-t":ei()}],"border-w-r":[{"border-r":ei()}],"border-w-b":[{"border-b":ei()}],"border-w-l":[{"border-l":ei()}],"divide-x":[{"divide-x":ei()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ei()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...ed(),"hidden","none"]}],"divide-style":[{divide:[...ed(),"hidden","none"]}],"border-color":[{border:eo()}],"border-color-x":[{"border-x":eo()}],"border-color-y":[{"border-y":eo()}],"border-color-s":[{"border-s":eo()}],"border-color-e":[{"border-e":eo()}],"border-color-t":[{"border-t":eo()}],"border-color-r":[{"border-r":eo()}],"border-color-b":[{"border-b":eo()}],"border-color-l":[{"border-l":eo()}],"divide-color":[{divide:eo()}],"outline-style":[{outline:[...ed(),"none","hidden"]}],"outline-offset":[{"outline-offset":[A,F,q]}],"outline-w":[{outline:["",A,H,R]}],"outline-color":[{outline:eo()}],shadow:[{shadow:["","none",c,X,D]}],"shadow-color":[{shadow:eo()}],"inset-shadow":[{"inset-shadow":["none",m,X,D]}],"inset-shadow-color":[{"inset-shadow":eo()}],"ring-w":[{ring:ei()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:eo()}],"ring-offset-w":[{"ring-offset":[A,R]}],"ring-offset-color":[{"ring-offset":eo()}],"inset-ring-w":[{"inset-ring":ei()}],"inset-ring-color":[{"inset-ring":eo()}],"text-shadow":[{"text-shadow":["none",p,X,D]}],"text-shadow-color":[{"text-shadow":eo()}],opacity:[{opacity:[A,F,q]}],"mix-blend":[{"mix-blend":[...ec(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ec()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[A]}],"mask-image-linear-from-pos":[{"mask-linear-from":em()}],"mask-image-linear-to-pos":[{"mask-linear-to":em()}],"mask-image-linear-from-color":[{"mask-linear-from":eo()}],"mask-image-linear-to-color":[{"mask-linear-to":eo()}],"mask-image-t-from-pos":[{"mask-t-from":em()}],"mask-image-t-to-pos":[{"mask-t-to":em()}],"mask-image-t-from-color":[{"mask-t-from":eo()}],"mask-image-t-to-color":[{"mask-t-to":eo()}],"mask-image-r-from-pos":[{"mask-r-from":em()}],"mask-image-r-to-pos":[{"mask-r-to":em()}],"mask-image-r-from-color":[{"mask-r-from":eo()}],"mask-image-r-to-color":[{"mask-r-to":eo()}],"mask-image-b-from-pos":[{"mask-b-from":em()}],"mask-image-b-to-pos":[{"mask-b-to":em()}],"mask-image-b-from-color":[{"mask-b-from":eo()}],"mask-image-b-to-color":[{"mask-b-to":eo()}],"mask-image-l-from-pos":[{"mask-l-from":em()}],"mask-image-l-to-pos":[{"mask-l-to":em()}],"mask-image-l-from-color":[{"mask-l-from":eo()}],"mask-image-l-to-color":[{"mask-l-to":eo()}],"mask-image-x-from-pos":[{"mask-x-from":em()}],"mask-image-x-to-pos":[{"mask-x-to":em()}],"mask-image-x-from-color":[{"mask-x-from":eo()}],"mask-image-x-to-color":[{"mask-x-to":eo()}],"mask-image-y-from-pos":[{"mask-y-from":em()}],"mask-image-y-to-pos":[{"mask-y-to":em()}],"mask-image-y-from-color":[{"mask-y-from":eo()}],"mask-image-y-to-color":[{"mask-y-to":eo()}],"mask-image-radial":[{"mask-radial":[F,q]}],"mask-image-radial-from-pos":[{"mask-radial-from":em()}],"mask-image-radial-to-pos":[{"mask-radial-to":em()}],"mask-image-radial-from-color":[{"mask-radial-from":eo()}],"mask-image-radial-to-color":[{"mask-radial-to":eo()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":y()}],"mask-image-conic-pos":[{"mask-conic":[A]}],"mask-image-conic-from-pos":[{"mask-conic-from":em()}],"mask-image-conic-to-pos":[{"mask-conic-to":em()}],"mask-image-conic-from-color":[{"mask-conic-from":eo()}],"mask-image-conic-to-color":[{"mask-conic-to":eo()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:et()}],"mask-repeat":[{mask:el()}],"mask-size":[{mask:ea()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",F,q]}],filter:[{filter:["","none",F,q]}],blur:[{blur:ep()}],brightness:[{brightness:[A,F,q]}],contrast:[{contrast:[A,F,q]}],"drop-shadow":[{"drop-shadow":["","none",u,X,D]}],"drop-shadow-color":[{"drop-shadow":eo()}],grayscale:[{grayscale:["",A,F,q]}],"hue-rotate":[{"hue-rotate":[A,F,q]}],invert:[{invert:["",A,F,q]}],saturate:[{saturate:[A,F,q]}],sepia:[{sepia:["",A,F,q]}],"backdrop-filter":[{"backdrop-filter":["","none",F,q]}],"backdrop-blur":[{"backdrop-blur":ep()}],"backdrop-brightness":[{"backdrop-brightness":[A,F,q]}],"backdrop-contrast":[{"backdrop-contrast":[A,F,q]}],"backdrop-grayscale":[{"backdrop-grayscale":["",A,F,q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[A,F,q]}],"backdrop-invert":[{"backdrop-invert":["",A,F,q]}],"backdrop-opacity":[{"backdrop-opacity":[A,F,q]}],"backdrop-saturate":[{"backdrop-saturate":[A,F,q]}],"backdrop-sepia":[{"backdrop-sepia":["",A,F,q]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":N()}],"border-spacing-x":[{"border-spacing-x":N()}],"border-spacing-y":[{"border-spacing-y":N()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",F,q]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[A,"initial",F,q]}],ease:[{ease:["linear","initial",h,F,q]}],delay:[{delay:[A,F,q]}],animate:[{animate:["none",k,F,q]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[f,F,q]}],"perspective-origin":[{"perspective-origin":v()}],rotate:[{rotate:eu()}],"rotate-x":[{"rotate-x":eu()}],"rotate-y":[{"rotate-y":eu()}],"rotate-z":[{"rotate-z":eu()}],scale:[{scale:eb()}],"scale-x":[{"scale-x":eb()}],"scale-y":[{"scale-y":eb()}],"scale-z":[{"scale-z":eb()}],"scale-3d":["scale-3d"],skew:[{skew:ef()}],"skew-x":[{"skew-x":ef()}],"skew-y":[{"skew-y":ef()}],transform:[{transform:[F,q,"","none","gpu","cpu"]}],"transform-origin":[{origin:v()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:eg()}],"translate-x":[{"translate-x":eg()}],"translate-y":[{"translate-y":eg()}],"translate-z":[{"translate-z":eg()}],"translate-none":["translate-none"],accent:[{accent:eo()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:eo()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",F,q]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":N()}],"scroll-mx":[{"scroll-mx":N()}],"scroll-my":[{"scroll-my":N()}],"scroll-ms":[{"scroll-ms":N()}],"scroll-me":[{"scroll-me":N()}],"scroll-mt":[{"scroll-mt":N()}],"scroll-mr":[{"scroll-mr":N()}],"scroll-mb":[{"scroll-mb":N()}],"scroll-ml":[{"scroll-ml":N()}],"scroll-p":[{"scroll-p":N()}],"scroll-px":[{"scroll-px":N()}],"scroll-py":[{"scroll-py":N()}],"scroll-ps":[{"scroll-ps":N()}],"scroll-pe":[{"scroll-pe":N()}],"scroll-pt":[{"scroll-pt":N()}],"scroll-pr":[{"scroll-pr":N()}],"scroll-pb":[{"scroll-pb":N()}],"scroll-pl":[{"scroll-pl":N()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",F,q]}],fill:[{fill:["none",...eo()]}],"stroke-w":[{stroke:[A,H,R,B]}],stroke:[{stroke:["none",...eo()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}})},2987:(e,r,o)=>{o.d(r,{$:()=>t});function t(){for(var e,r,o=0,t="",l=arguments.length;o<l;o++)(e=arguments[o])&&(r=function e(r){var o,t,l="";if("string"==typeof r||"number"==typeof r)l+=r;else if("object"==typeof r)if(Array.isArray(r)){var a=r.length;for(o=0;o<a;o++)r[o]&&(t=e(r[o]))&&(l&&(l+=" "),l+=t)}else for(t in r)r[t]&&(l&&(l+=" "),l+=t);return l}(e))&&(t&&(t+=" "),t+=r);return t}},8889:(e,r,o)=>{o.d(r,{A:()=>s});var t=o(7620);let l=function(){for(var e=arguments.length,r=Array(e),o=0;o<e;o++)r[o]=arguments[o];return r.filter((e,r,o)=>!!e&&o.indexOf(e)===r).join(" ")};var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let n=(0,t.forwardRef)((e,r)=>{let{color:o="currentColor",size:n=24,strokeWidth:s=2,absoluteStrokeWidth:i,className:d="",children:c,iconNode:m,...p}=e;return(0,t.createElement)("svg",{ref:r,...a,width:n,height:n,stroke:o,strokeWidth:i?24*Number(s)/Number(n):s,className:l("lucide",d),...p},[...m.map(e=>{let[r,o]=e;return(0,t.createElement)(r,o)}),...Array.isArray(c)?c:[c]])}),s=(e,r)=>{let o=(0,t.forwardRef)((o,a)=>{let{className:s,...i}=o;return(0,t.createElement)(n,{ref:a,iconNode:r,className:l("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),s),...i})});return o.displayName="".concat(e),o}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[477],{3477:(e,t,r)=>{r.r(t),r.d(t,{Board:()=>j});var s=r(4568),a=r(3096),n=r(3297),l=r(1355),o=r(4529),i=r(1690),d=r(2942),c=r(7620),u=r(1368),x=r(4147),m=r(4532),p=r(3544),f=r(9080),g=r(7606),h=r(6258),b=r(9321),v=r(3928);let y=[a.e1.BACKLOG,a.e1.IN_PROGRESS,a.e1.REVIEW,a.e1.VERIFICATION,a.e1.DONE,a.e1.BLOCKED],k={[a.e1.BACKLOG]:{label:"Backlog",color:"var(--status-backlog)",indicator:"bg-slate-500"},[a.e1.IN_PROGRESS]:{label:"In Progress",color:"var(--status-progress)",indicator:"bg-amber-500"},[a.e1.REVIEW]:{label:"Review",color:"var(--status-review)",indicator:"bg-purple-500"},[a.e1.VERIFICATION]:{label:"Verification",color:"var(--accent)",indicator:"bg-cyan-500"},[a.e1.DONE]:{label:"Done",color:"var(--status-done)",indicator:"bg-emerald-500"},[a.e1.BLOCKED]:{label:"Blocked",color:"var(--status-blocked)",indicator:"bg-rose-500"}};function j(){let e=(0,d.useRouter)(),{searchQuery:t,setSearchQuery:r,priorityFilter:j,setPriorityFilter:N,assigneeFilter:L,setAssigneeFilter:C,hasActiveFilters:A,clearFilters:w,getTasksByStatus:E,updateTaskStatus:I,deleteTask:S,refreshTasks:D}=function(){let e=(0,g.jE)(),{data:t=[],isLoading:r,error:s,refetch:a}=(0,n.I)({queryKey:["tasks"],queryFn:()=>b.pv.getAll(),refetchInterval:15e3}),l=s?s.message:null,[o,i]=(0,c.useState)(""),[d,u]=(0,c.useState)("ALL"),[x,m]=(0,c.useState)("ALL"),p=(0,c.useMemo)(()=>""!==o||"ALL"!==d||"ALL"!==x,[o,d,x]),f=(0,h.n)({mutationFn:e=>{let{taskId:t,status:r}=e;return b.pv.update(t,{status:r})},onSuccess:()=>{e.invalidateQueries({queryKey:["tasks"]})}}),v=(0,h.n)({mutationFn:e=>b.pv.delete(e),onSuccess:()=>{e.invalidateQueries({queryKey:["tasks"]})}}),y=(0,c.useCallback)(()=>{i(""),u("ALL"),m("ALL")},[]),k=(0,c.useMemo)(()=>t.filter(e=>{if(o){let t=o.toLowerCase();if(!e.title.toLowerCase().includes(t))return!1}return("ALL"===d||e.priority===d)&&("ALL"===x||e.assigneeRole===x)}),[t,o,d,x]),j=(0,c.useCallback)(e=>k.filter(t=>t.status===e),[k]);return{tasks:t,loading:r,error:l,searchQuery:o,setSearchQuery:i,priorityFilter:d,setPriorityFilter:u,assigneeFilter:x,setAssigneeFilter:m,hasActiveFilters:p,clearFilters:y,getTasksByStatus:j,updateTaskStatus:(0,c.useCallback)(async(e,t)=>{await f.mutateAsync({taskId:e,status:t})},[f]),deleteTask:(0,c.useCallback)(async e=>{await v.mutateAsync(e)},[v]),refreshTasks:a}}(),{data:O=[]}=(0,n.I)({queryKey:["sprints"],queryFn:b.KS.getAll}),K=O.find(e=>e.status===a.J3.ACTIVE),[B,T]=(0,c.useState)(!1),[R,F]=(0,c.useState)(a.e1.BACKLOG),[V,G]=(0,c.useState)(null),[q,M]=(0,c.useState)(null),_=(0,c.useCallback)(e=>{F(e),T(!0)},[]);(0,c.useEffect)(()=>{let e=e=>{if(!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)){if(("n"===e.key||"N"===e.key)&&(e.preventDefault(),_(a.e1.BACKLOG)),"/"===e.key&&!e.metaKey&&!e.ctrlKey){e.preventDefault();let t=document.querySelector(".search-input");null==t||t.focus()}"Escape"===e.key&&V&&G(null)}};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[V,_]);let H=async(e,t)=>{t.preventDefault(),M(null);let r=t.dataTransfer.getData("taskId");r&&await I(Number(r),e)},P=()=>{M(null)};return K?(0,s.jsxs)("div",{className:"flex-1 overflow-auto bg-background",children:[(0,s.jsx)("div",{className:"mb-6",children:(0,s.jsxs)("div",{className:"flex justify-between items-center",children:[(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold tracking-tight text-foreground",children:K.name}),(0,s.jsx)("span",{className:"px-2 py-0.5 rounded-full bg-primary/10 text-primary text-[10px] font-black uppercase tracking-wider",children:"Active"})]}),(0,s.jsxs)("p",{className:"text-muted-foreground text-sm mt-1 flex items-center gap-3",children:["Track and manage engineering tasks",(0,s.jsxs)("span",{className:"hidden md:inline-flex items-center gap-1.5 px-2 py-0.5 rounded-md bg-secondary/60 text-[10px] font-semibold text-muted-foreground",children:[(0,s.jsx)("kbd",{className:"bg-background/80 px-1.5 py-0.5 rounded text-[9px] font-bold border",children:"N"}),"New task"]})]})]}),(0,s.jsxs)(f.$,{onClick:()=>_(a.e1.BACKLOG),className:"shadow-lg shadow-primary/20",children:[(0,s.jsx)(o.A,{size:16,className:"mr-1.5"}),"New Task"]})]})}),(0,s.jsx)(u.J,{searchQuery:t,onSearchChange:r,priorityFilter:j,onPriorityChange:N,assigneeFilter:L,onAssigneeChange:C,onClearFilters:w,hasActiveFilters:A}),(0,s.jsx)("div",{className:"flex gap-4 min-h-[600px] pb-4",children:y.map(e=>{let t=E(e).filter(e=>e.sprintId===K.id),r=q===e;return(0,s.jsxs)("div",{className:(0,v.cn)("flex flex-col w-[280px] shrink-0 rounded-xl transition-all border",r?"bg-primary/5 border-primary/40 ring-1 ring-primary/20":"bg-card/50 border-border/50"),onDrop:t=>H(e,t),onDragOver:t=>{t.preventDefault(),t.dataTransfer.dropEffect="move",M(e)},onDragLeave:P,children:[(0,s.jsxs)("div",{className:"flex items-center justify-between p-3 border-b border-border/50",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,s.jsx)("div",{className:(0,v.cn)("h-2.5 w-2.5 rounded-full",k[e].indicator)}),(0,s.jsx)("span",{className:"text-xs font-semibold text-foreground",children:k[e].label}),(0,s.jsx)("span",{className:"flex items-center justify-center h-5 min-w-[20px] px-1.5 bg-secondary/80 text-[10px] font-bold rounded-md text-muted-foreground",children:t.length})]}),(0,s.jsx)("button",{className:"p-1.5 rounded-lg hover:bg-secondary text-muted-foreground transition-colors",children:(0,s.jsx)(i.A,{size:14})})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-2.5 p-2.5 flex-1 overflow-y-auto",children:[t.map(e=>(0,s.jsx)(x.y,{task:e,onClick:()=>G(e.id),onDelete:S},e.id)),(0,s.jsxs)(f.$,{variant:"ghost",className:"w-full justify-center text-xs font-medium text-muted-foreground/60 hover:text-foreground hover:bg-secondary/40 h-8 border border-dashed border-border/50 hover:border-border rounded-lg",onClick:()=>_(e),children:[(0,s.jsx)(o.A,{size:14,className:"mr-1.5"}),"Add"]})]})]},e)})}),(0,s.jsx)(m.l,{isOpen:B,onClose:()=>T(!1),onCreated:D,initialStatus:R,sprintId:null==K?void 0:K.id}),(0,s.jsx)(l.N,{children:V&&(0,s.jsx)(p.W,{taskId:V,onClose:()=>G(null),onDeleted:D,onUpdated:D},"task-panel")})]}):(0,s.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center p-8 text-center space-y-4",children:[(0,s.jsx)("div",{className:"bg-primary/5 p-4 rounded-full",children:(0,s.jsxs)("svg",{className:"w-12 h-12 text-primary/40",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[(0,s.jsx)("title",{children:"Icon"}),(0,s.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"})]})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-xl font-bold",children:"No Active Sprint"}),(0,s.jsx)("p",{className:"text-muted-foreground mt-2 max-w-sm mx-auto",children:"You need to start a sprint from the Backlog to see tasks on the board."})]}),(0,s.jsx)(f.$,{onClick:()=>e.push("/backlog"),variant:"secondary",children:"Go to Backlog"})]})}}}]);