kabanos 1.0.0
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/CHANGELOG.md +23 -0
- package/LICENSE +21 -0
- package/README.md +120 -0
- package/dist/adapters/express.d.ts +7 -0
- package/dist/adapters/express.js +22 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/fastify.d.ts +7 -0
- package/dist/adapters/fastify.js +19 -0
- package/dist/adapters/fastify.js.map +1 -0
- package/dist/adapters/next.d.ts +6 -0
- package/dist/adapters/next.js +8 -0
- package/dist/adapters/next.js.map +1 -0
- package/dist/adapters/node.d.ts +6 -0
- package/dist/adapters/node.js +19 -0
- package/dist/adapters/node.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +108 -0
- package/dist/cli.js.map +1 -0
- package/dist/core-C0gUmthe.d.ts +156 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.js +487 -0
- package/dist/index.js.map +1 -0
- package/dist/ui/assets/index-D8NlyaPz.js +17 -0
- package/dist/ui/assets/index-xHPXuuJE.css +1 -0
- package/dist/ui/index.html +7 -0
- package/package.json +119 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color-scheme:light;--canvas:#fff;--canvas-soft:#f6f5f4;--surface:#fff;--ink:#000;--ink-secondary:#31302e;--muted:#615d59;--faint:#8a8580;--hairline:#e6e6e6;--primary:#0075de;--primary-active:#005bab;--danger:#b42318;--shadow:0 .2px 1px rgba(0,0,0,.02),0 3px 12px rgba(0,0,0,.05)}:root[data-theme=dark]{color-scheme:dark;--canvas:#191919;--canvas-soft:#121212;--surface:#1f1f1f;--ink:#f3f3f1;--ink-secondary:#ddd;--muted:#aaa6a1;--faint:#9b9894;--hairline:rgba(255,255,255,.11);--primary:#3da1ff;--primary-active:#5cb2ff;--danger:#ff8a80;--shadow:0 4px 18px rgba(0,0,0,.25)}@media(prefers-color-scheme:dark){:root[data-theme=system]{color-scheme:dark;--canvas:#191919;--canvas-soft:#121212;--surface:#1f1f1f;--ink:#f3f3f1;--ink-secondary:#ddd;--muted:#aaa6a1;--faint:#9b9894;--hairline:rgba(255,255,255,.11);--primary:#3da1ff;--primary-active:#5cb2ff;--danger:#ff8a80;--shadow:0 4px 18px rgba(0,0,0,.25)}}*{box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}body{margin:0;background:var(--canvas-soft);color:var(--ink);font-size:15px}.app-shell{min-height:100vh}.topbar{height:64px;padding:0 24px;background:var(--canvas);border-bottom:1px solid var(--hairline);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.topbar>div,.topbar nav{display:flex;align-items:center;gap:12px}.topbar strong{font-size:16px}.mark{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--ink);color:var(--surface);font-weight:700}.subtitle{color:var(--muted);border-left:1px solid var(--hairline);padding-left:12px}.button,.icon-button,.close,.danger{font:inherit;cursor:pointer}.button{border:1px solid var(--hairline);border-radius:8px;padding:8px 14px;background:var(--surface);color:var(--ink);font-weight:500}.button:hover,.icon-button:hover{background:var(--canvas-soft)}.button:focus-visible,.icon-button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid color-mix(in srgb,var(--primary) 35%,transparent);outline-offset:2px}.button.primary{background:var(--primary);color:#fff;border-color:transparent;border-radius:999px;padding:10px 20px}.button.primary:active{background:var(--primary-active)}.icon-button{width:40px;height:40px;border:0;border-radius:8px;background:transparent;color:var(--ink)}.board{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(290px,1fr);gap:16px;padding:24px;overflow-x:auto;align-items:start}.column{background:color-mix(in srgb,var(--canvas-soft) 82%,var(--surface));border:1px solid transparent;border-radius:12px;min-height:180px;padding:12px;transition:.15s}.column.is-over{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 5%,var(--canvas-soft))}.column>header{display:flex;align-items:center;justify-content:space-between;padding:4px 4px 12px}.column h2{font-size:14px;margin:0;font-weight:600}.column header span{color:var(--muted);font-size:12px}.card-list{display:flex;flex-direction:column;gap:8px;min-height:100px}.card{background:var(--surface);border:1px solid var(--hairline);border-radius:12px;padding:16px;box-shadow:0 1px 1px #00000005;cursor:grab;touch-action:none}.card:hover{box-shadow:var(--shadow)}.card.dragging{width:290px;box-shadow:0 12px 32px #00000026;transform:rotate(2deg)}.card h3{font-size:15px;line-height:1.4;margin:10px 0;font-weight:600}.badges,.labels{display:flex;gap:6px;flex-wrap:wrap}.tag,.priority,.labels span{font-size:11px;line-height:1;padding:5px 7px;border-radius:999px;font-weight:600;background:var(--canvas-soft);color:var(--muted)}.tag.todo{color:#005bab;background:#e7f3ff}.tag.fixme{color:#9f2d20;background:#ffebe8}:root[data-theme=dark] .tag.todo{color:#8ac8ff;background:#18344d}:root[data-theme=dark] .tag.fixme{color:#ffaaa1;background:#4a211e}.source{font:12px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--faint);overflow-wrap:anywhere}.labels span{font-weight:400}.assignee{margin:10px 0 0;color:var(--muted);font-size:12px}.empty{text-align:center;color:var(--faint);padding:25px 0}.scrim{position:fixed;inset:0;background:#0000003d;z-index:30;display:flex;justify-content:flex-end}.drawer{height:100%;width:min(520px,100%);overflow-y:auto;background:var(--surface);padding:32px;box-shadow:-12px 0 52px #0000001f;position:relative}.drawer h2{font-size:26px;letter-spacing:-.625px;margin:12px 0}.close{position:absolute;right:20px;top:16px;width:40px;height:40px;border:0;border-radius:999px;background:transparent;color:var(--muted);font-size:28px}.drawer label{display:flex;flex-direction:column;gap:7px;margin:20px 0;color:var(--muted);font-size:13px;font-weight:600}.drawer input,.drawer textarea,.drawer select{width:100%;border:1px solid var(--hairline);border-radius:4px;padding:10px;background:var(--surface);color:var(--ink);font:400 14px/1.4 Inter,sans-serif}.code{background:var(--canvas-soft);border:1px solid var(--hairline);border-radius:8px;padding:12px;overflow:auto;font-size:12px;line-height:1.55}.code code{display:block}.code code span{display:inline-block;width:30px;color:var(--faint);-webkit-user-select:none;user-select:none}.eyebrow{text-transform:uppercase;color:var(--primary);font-size:12px;font-weight:600;letter-spacing:.125px}.settings fieldset{border:0;padding:0;margin:24px 0}.settings legend{font-size:13px;font-weight:600;color:var(--muted);margin-bottom:8px}.column-setting{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:8px;margin-bottom:8px}.column-setting .check{display:flex;flex-direction:row;align-items:center;margin:0;white-space:nowrap}.check input{width:auto}.danger{border:0;background:transparent;color:var(--danger);padding:8px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:60;background:var(--ink);color:var(--surface);padding:12px 18px;border-radius:12px;box-shadow:var(--shadow)}.loading{display:flex;align-items:center;justify-content:center;gap:10px;min-height:100vh;color:var(--muted)}.spinner{width:16px;height:16px;border:2px solid var(--hairline);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:700px){.subtitle{display:none}.topbar{padding:0 12px}.board{grid-auto-columns:minmax(270px,88vw);padding:16px}.drawer{padding:24px 18px}.column-setting{grid-template-columns:1fr auto}.column-setting .danger{grid-column:2}.utility{font-size:13px}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="light dark" /><title>Kabanos</title> <script type="module" crossorigin src="./assets/index-D8NlyaPz.js"></script>
|
|
4
|
+
<link rel="stylesheet" crossorigin href="./assets/index-xHPXuuJE.css">
|
|
5
|
+
</head>
|
|
6
|
+
<body><div id="root"></div></body>
|
|
7
|
+
</html>
|
package/package.json
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kabanos",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A read-only code-comment kanban board for Node.js applications",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"kanban",
|
|
7
|
+
"todo",
|
|
8
|
+
"fixme",
|
|
9
|
+
"code-comments",
|
|
10
|
+
"board",
|
|
11
|
+
"express",
|
|
12
|
+
"fastify",
|
|
13
|
+
"nextjs",
|
|
14
|
+
"technical-debt"
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://github.com/FP2003/kabanos#readme",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/FP2003/kabanos.git"
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"type": "module",
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=20"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE",
|
|
30
|
+
"CHANGELOG.md"
|
|
31
|
+
],
|
|
32
|
+
"bin": {
|
|
33
|
+
"kabanos": "./dist/cli.js"
|
|
34
|
+
},
|
|
35
|
+
"exports": {
|
|
36
|
+
".": {
|
|
37
|
+
"types": "./dist/index.d.ts",
|
|
38
|
+
"import": "./dist/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./express": {
|
|
41
|
+
"types": "./dist/adapters/express.d.ts",
|
|
42
|
+
"import": "./dist/adapters/express.js"
|
|
43
|
+
},
|
|
44
|
+
"./fastify": {
|
|
45
|
+
"types": "./dist/adapters/fastify.d.ts",
|
|
46
|
+
"import": "./dist/adapters/fastify.js"
|
|
47
|
+
},
|
|
48
|
+
"./next": {
|
|
49
|
+
"types": "./dist/adapters/next.d.ts",
|
|
50
|
+
"import": "./dist/adapters/next.js"
|
|
51
|
+
},
|
|
52
|
+
"./node": {
|
|
53
|
+
"types": "./dist/adapters/node.d.ts",
|
|
54
|
+
"import": "./dist/adapters/node.js"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"better-sqlite3": "^12.2.0",
|
|
59
|
+
"chokidar": "^4.0.3",
|
|
60
|
+
"fast-glob": "^3.3.3",
|
|
61
|
+
"ignore": "^7.0.5",
|
|
62
|
+
"kysely": "^0.28.5",
|
|
63
|
+
"picocolors": "^1.1.1",
|
|
64
|
+
"prompts": "^2.4.2",
|
|
65
|
+
"zod": "^4.1.5"
|
|
66
|
+
},
|
|
67
|
+
"optionalDependencies": {
|
|
68
|
+
"mysql2": "^3.14.4",
|
|
69
|
+
"pg": "^8.16.3"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"express": ">=4 <6",
|
|
73
|
+
"fastify": ">=4 <6"
|
|
74
|
+
},
|
|
75
|
+
"peerDependenciesMeta": {
|
|
76
|
+
"express": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
79
|
+
"fastify": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
"@axe-core/playwright": "^4.10.2",
|
|
85
|
+
"@dnd-kit/accessibility": "^3.1.1",
|
|
86
|
+
"@dnd-kit/core": "^6.3.1",
|
|
87
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
88
|
+
"@playwright/test": "^1.55.0",
|
|
89
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
90
|
+
"@types/express": "^5.0.3",
|
|
91
|
+
"@types/node": "^24.3.0",
|
|
92
|
+
"@types/pg": "^8.15.5",
|
|
93
|
+
"@types/prompts": "^2.4.9",
|
|
94
|
+
"@types/react": "^19.1.12",
|
|
95
|
+
"@types/react-dom": "^19.1.9",
|
|
96
|
+
"@vitejs/plugin-react": "^5.0.2",
|
|
97
|
+
"express": "^5.1.0",
|
|
98
|
+
"fastify": "^5.6.0",
|
|
99
|
+
"jsdom": "^26.1.0",
|
|
100
|
+
"react": "^19.1.1",
|
|
101
|
+
"react-dom": "^19.1.1",
|
|
102
|
+
"tsup": "^8.5.0",
|
|
103
|
+
"typescript": "^5.9.2",
|
|
104
|
+
"vite": "^7.1.3",
|
|
105
|
+
"vitest": "^3.2.4"
|
|
106
|
+
},
|
|
107
|
+
"scripts": {
|
|
108
|
+
"build": "node scripts/clean.mjs && vite build && tsup",
|
|
109
|
+
"demo": "npm run build && node demo/server.mjs",
|
|
110
|
+
"demo:reset": "node demo/reset.mjs",
|
|
111
|
+
"dev:ui": "vite",
|
|
112
|
+
"typecheck": "tsc --noEmit",
|
|
113
|
+
"test": "vitest run",
|
|
114
|
+
"test:databases": "KABANOS_TEST_POSTGRES=postgres://kabanos:kabanos@127.0.0.1:55432/kabanos KABANOS_TEST_MYSQL=mysql://kabanos:kabanos@127.0.0.1:53306/kabanos vitest run test/storage-conformance.test.ts",
|
|
115
|
+
"test:benchmark": "KABANOS_BENCHMARK=1 vitest run test/performance.test.ts",
|
|
116
|
+
"test:e2e": "playwright test",
|
|
117
|
+
"test:watch": "vitest"
|
|
118
|
+
}
|
|
119
|
+
}
|