@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.
- package/README.md +37 -29
- package/bin/locus.js +10 -32
- package/index.ts +0 -22
- package/package.json +1 -1
- package/public/dashboard/404.html +1 -1
- package/public/dashboard/_next/static/{mgA6xTBePiCXP1IVRWWME → QcceI_B55xOsryXxwZfhA}/_buildManifest.js +1 -1
- package/public/dashboard/_next/static/chunks/138.b98511c56423f8bb.js +1 -0
- package/public/dashboard/_next/static/chunks/337-d3bb75304d130513.js +1 -0
- package/public/dashboard/_next/static/chunks/477.1a6ecfe53375bd9c.js +1 -0
- package/public/dashboard/_next/static/chunks/487-1808785ba665f784.js +1 -0
- package/public/dashboard/_next/static/chunks/544.e3db93036b5e0914.js +1 -0
- package/public/dashboard/_next/static/chunks/795-10b9cf2562a5999c.js +1 -0
- package/public/dashboard/_next/static/chunks/87c73c54-1f4741035a95c140.js +1 -0
- package/public/dashboard/_next/static/chunks/902-d6926825a9fe8784.js +1 -0
- package/public/dashboard/_next/static/chunks/955-c8f8f6235ae8f8c6.js +1 -0
- package/public/dashboard/_next/static/chunks/996.e0a334e6ae90900e.js +1 -0
- package/public/dashboard/_next/static/chunks/app/_not-found/page-44b1804abb44a34d.js +1 -0
- package/public/dashboard/_next/static/chunks/app/backlog/page-2ea07643f5b6e06b.js +1 -0
- package/public/dashboard/_next/static/chunks/app/docs/page-19686afe86f9756b.js +1 -0
- package/public/dashboard/_next/static/chunks/app/layout-70b5f0deb13c27ef.js +1 -0
- package/public/dashboard/_next/static/chunks/app/page-1682e21c1ab5320f.js +1 -0
- package/public/dashboard/_next/static/chunks/app/settings/page-84e16c9638d657e4.js +1 -0
- package/public/dashboard/_next/static/chunks/framework-152a1bc8c81c7458.js +1 -0
- package/public/dashboard/_next/static/chunks/main-6c877f3851a8d718.js +1 -0
- package/public/dashboard/_next/static/chunks/main-app-123e879c5a937a00.js +1 -0
- package/public/dashboard/_next/static/chunks/pages/_app-a050a8e6e4fb04cf.js +1 -0
- package/public/dashboard/_next/static/chunks/pages/_error-3e422ffd891594de.js +1 -0
- package/public/dashboard/_next/static/chunks/webpack-03b96ab0f7ba7feb.js +1 -0
- package/public/dashboard/_next/static/css/b301ab0424111664.css +1 -0
- package/public/dashboard/backlog.html +1 -1
- package/public/dashboard/backlog.txt +18 -15
- package/public/dashboard/docs.html +1 -1
- package/public/dashboard/docs.txt +19 -16
- package/public/dashboard/index.html +1 -1
- package/public/dashboard/index.txt +18 -15
- package/public/dashboard/settings.html +1 -1
- package/public/dashboard/settings.txt +18 -15
- package/src/constants.ts +1 -1
- package/src/generators/locus.ts +5 -22
- package/public/dashboard/_next/static/chunks/140.d5e67b269d70c096.js +0 -1
- package/public/dashboard/_next/static/chunks/142.82cd6bec804102b9.js +0 -1
- package/public/dashboard/_next/static/chunks/18.1e768729d24d723d.js +0 -1
- package/public/dashboard/_next/static/chunks/188.27288b5094867f29.js +0 -1
- package/public/dashboard/_next/static/chunks/273-95c2836f1a6dfb23.js +0 -1
- package/public/dashboard/_next/static/chunks/855-a193e1d785e334cf.js +0 -2
- package/public/dashboard/_next/static/chunks/87c73c54-18883d7ce69be0ce.js +0 -1
- package/public/dashboard/_next/static/chunks/892-70ddfae0f8c9ee9f.js +0 -1
- package/public/dashboard/_next/static/chunks/954-73b5906ca7819e42.js +0 -1
- package/public/dashboard/_next/static/chunks/972-efb0c31aeb3e1619.js +0 -1
- package/public/dashboard/_next/static/chunks/app/_not-found/page-3884acf5e0397003.js +0 -1
- package/public/dashboard/_next/static/chunks/app/backlog/page-ade60a21a3597509.js +0 -1
- package/public/dashboard/_next/static/chunks/app/docs/page-5f69fffac832d77c.js +0 -1
- package/public/dashboard/_next/static/chunks/app/layout-a0acefd9b75ec3b8.js +0 -1
- package/public/dashboard/_next/static/chunks/app/page-cb3aec9c8077eab1.js +0 -1
- package/public/dashboard/_next/static/chunks/app/settings/page-82693b6134aafc85.js +0 -1
- package/public/dashboard/_next/static/chunks/framework-fdd4ff226e9057cd.js +0 -1
- package/public/dashboard/_next/static/chunks/main-39090d49dd3cd8c7.js +0 -1
- package/public/dashboard/_next/static/chunks/main-app-bb0a6e7769aa4668.js +0 -1
- package/public/dashboard/_next/static/chunks/pages/_app-3e3e3e64529ea027.js +0 -1
- package/public/dashboard/_next/static/chunks/pages/_error-8cfbe37f68950a2b.js +0 -1
- package/public/dashboard/_next/static/chunks/webpack-a21f388d2a000173.js +0 -1
- package/public/dashboard/_next/static/css/a979e4e0673642a5.css +0 -1
- /package/public/dashboard/_next/static/{mgA6xTBePiCXP1IVRWWME → QcceI_B55xOsryXxwZfhA}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -1,45 +1,53 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
9
|
-
|
|
18
|
+
# Create a new Locus-managed project
|
|
19
|
+
npx @locusai/cli init --name my-app
|
|
10
20
|
|
|
11
|
-
# Or
|
|
12
|
-
npx
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
47
|
+
## Documentation
|
|
37
48
|
|
|
38
|
-
|
|
49
|
+
Visit [locusai.dev/docs](https://locusai.dev/docs) for full documentation.
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
# Update your MCP config or start Locus with:
|
|
42
|
-
locus start --project /path/to/my-app/.locus
|
|
43
|
-
```
|
|
51
|
+
## License
|
|
44
52
|
|
|
45
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
111
|
-
command: "
|
|
112
|
-
args: ["
|
|
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("
|
|
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.
|
|
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 :
|
|
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") :
|
|
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 ?
|
|
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 +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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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
|
+
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"})]})}}}]);
|