kanban-lite 1.0.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/.editorconfig +9 -0
- package/.github/workflows/ci.yml +59 -0
- package/.github/workflows/release.yml +75 -0
- package/.prettierignore +6 -0
- package/.prettierrc.yaml +4 -0
- package/.vscode/extensions.json +3 -0
- package/.vscode/launch.json +17 -0
- package/.vscode/settings.json +21 -0
- package/.vscode/tasks.json +22 -0
- package/.vscodeignore +11 -0
- package/CHANGELOG.md +184 -0
- package/CLAUDE.md +58 -0
- package/CONTRIBUTING.md +114 -0
- package/LICENSE +22 -0
- package/README.md +482 -0
- package/SKILL.md +237 -0
- package/dist/cli.js +8716 -0
- package/dist/extension.js +8463 -0
- package/dist/mcp-server.js +1327 -0
- package/dist/standalone-webview/icons-Dx9MGYqN.js +180 -0
- package/dist/standalone-webview/icons-Dx9MGYqN.js.map +1 -0
- package/dist/standalone-webview/index.js +85 -0
- package/dist/standalone-webview/index.js.map +1 -0
- package/dist/standalone-webview/react-vendor-DkYdDBET.js +25 -0
- package/dist/standalone-webview/react-vendor-DkYdDBET.js.map +1 -0
- package/dist/standalone-webview/style.css +1 -0
- package/dist/standalone.js +7513 -0
- package/dist/webview/icons-Dx9MGYqN.js +180 -0
- package/dist/webview/icons-Dx9MGYqN.js.map +1 -0
- package/dist/webview/index.js +85 -0
- package/dist/webview/index.js.map +1 -0
- package/dist/webview/react-vendor-DkYdDBET.js +25 -0
- package/dist/webview/react-vendor-DkYdDBET.js.map +1 -0
- package/dist/webview/style.css +1 -0
- package/docs/images/board-overview.png +0 -0
- package/docs/images/editor-view.png +0 -0
- package/docs/plans/2026-02-20-kanban-json-config-design.md +74 -0
- package/docs/plans/2026-02-20-kanban-json-config.md +690 -0
- package/eslint.config.mjs +31 -0
- package/package.json +161 -0
- package/postcss.config.js +6 -0
- package/resources/icon-light.png +0 -0
- package/resources/icon-light.svg +105 -0
- package/resources/icon.png +0 -0
- package/resources/icon.svg +105 -0
- package/resources/kanban-dark.svg +21 -0
- package/resources/kanban-light.svg +21 -0
- package/resources/kanban.svg +21 -0
- package/src/cli/index.ts +846 -0
- package/src/extension/FeatureHeaderProvider.ts +370 -0
- package/src/extension/KanbanPanel.ts +973 -0
- package/src/extension/SidebarViewProvider.ts +507 -0
- package/src/extension/featureFileUtils.ts +82 -0
- package/src/extension/index.ts +234 -0
- package/src/mcp-server/index.ts +632 -0
- package/src/sdk/KanbanSDK.ts +349 -0
- package/src/sdk/__tests__/KanbanSDK.test.ts +468 -0
- package/src/sdk/__tests__/parser.test.ts +170 -0
- package/src/sdk/fileUtils.ts +76 -0
- package/src/sdk/index.ts +6 -0
- package/src/sdk/parser.ts +70 -0
- package/src/sdk/types.ts +15 -0
- package/src/shared/config.ts +113 -0
- package/src/shared/editorTypes.ts +14 -0
- package/src/shared/types.ts +120 -0
- package/src/standalone/__tests__/server.integration.test.ts +1916 -0
- package/src/standalone/__tests__/webhooks.test.ts +357 -0
- package/src/standalone/fileUtils.ts +70 -0
- package/src/standalone/index.ts +71 -0
- package/src/standalone/server.ts +1046 -0
- package/src/standalone/webhooks.ts +135 -0
- package/src/webview/App.tsx +469 -0
- package/src/webview/assets/main.css +329 -0
- package/src/webview/assets/standalone-theme.css +130 -0
- package/src/webview/components/ColumnDialog.tsx +119 -0
- package/src/webview/components/CreateFeatureDialog.tsx +524 -0
- package/src/webview/components/DatePicker.tsx +185 -0
- package/src/webview/components/FeatureCard.tsx +186 -0
- package/src/webview/components/FeatureEditor.tsx +623 -0
- package/src/webview/components/KanbanBoard.tsx +144 -0
- package/src/webview/components/KanbanColumn.tsx +159 -0
- package/src/webview/components/MarkdownEditor.tsx +291 -0
- package/src/webview/components/PrioritySelect.tsx +39 -0
- package/src/webview/components/QuickAddInput.tsx +72 -0
- package/src/webview/components/SettingsPanel.tsx +284 -0
- package/src/webview/components/Toolbar.tsx +175 -0
- package/src/webview/components/UndoToast.tsx +70 -0
- package/src/webview/index.html +12 -0
- package/src/webview/lib/utils.ts +6 -0
- package/src/webview/main.tsx +11 -0
- package/src/webview/standalone-main.tsx +13 -0
- package/src/webview/standalone-shim.ts +132 -0
- package/src/webview/standalone.html +12 -0
- package/src/webview/store/index.ts +241 -0
- package/tailwind.config.js +53 -0
- package/tsconfig.json +22 -0
- package/vite.config.ts +36 -0
- package/vite.standalone.config.ts +62 -0
- package/vitest.config.ts +15 -0
package/package.json
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kanban-lite",
|
|
3
|
+
"displayName": "Kanban Lite",
|
|
4
|
+
"description": "A kanban board for your codebase. Features stored as markdown.",
|
|
5
|
+
"version": "1.0.4",
|
|
6
|
+
"publisher": "borgius",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/borgius/kanban-lite"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/borgius/kanban-lite/issues"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/borgius/kanban-lite#readme",
|
|
16
|
+
"icon": "resources/icon.png",
|
|
17
|
+
"galleryBanner": {
|
|
18
|
+
"color": "#1e1e1e",
|
|
19
|
+
"theme": "dark"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"vscode": "^1.85.0"
|
|
23
|
+
},
|
|
24
|
+
"categories": [
|
|
25
|
+
"Other",
|
|
26
|
+
"Visualization"
|
|
27
|
+
],
|
|
28
|
+
"keywords": [
|
|
29
|
+
"kanban",
|
|
30
|
+
"markdown",
|
|
31
|
+
"project management",
|
|
32
|
+
"task management",
|
|
33
|
+
"board"
|
|
34
|
+
],
|
|
35
|
+
"activationEvents": [
|
|
36
|
+
"onWebviewPanel:kanban-lite.panel",
|
|
37
|
+
"onView:kanban-lite.boardView"
|
|
38
|
+
],
|
|
39
|
+
"main": "./dist/extension.js",
|
|
40
|
+
"contributes": {
|
|
41
|
+
"viewsContainers": {
|
|
42
|
+
"activitybar": [
|
|
43
|
+
{
|
|
44
|
+
"id": "kanban-lite",
|
|
45
|
+
"title": "Kanban Lite",
|
|
46
|
+
"icon": "resources/kanban.svg"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"views": {
|
|
51
|
+
"kanban-lite": [
|
|
52
|
+
{
|
|
53
|
+
"id": "kanban-lite.boardView",
|
|
54
|
+
"name": "Board",
|
|
55
|
+
"type": "webview"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
"commands": [
|
|
60
|
+
{
|
|
61
|
+
"command": "kanban-lite.open",
|
|
62
|
+
"title": "Open Kanban Board",
|
|
63
|
+
"category": "Kanban Lite",
|
|
64
|
+
"icon": {
|
|
65
|
+
"light": "resources/kanban-light.svg",
|
|
66
|
+
"dark": "resources/kanban-dark.svg"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"command": "kanban-lite.addFeature",
|
|
71
|
+
"title": "Add Feature",
|
|
72
|
+
"category": "Kanban Lite"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"menus": {
|
|
76
|
+
"editor/title/run": [
|
|
77
|
+
{
|
|
78
|
+
"command": "kanban-lite.open",
|
|
79
|
+
"when": "resourceLangId == markdown"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"bin": {
|
|
85
|
+
"kanban-md": "./dist/standalone.js",
|
|
86
|
+
"kanban-lite": "./dist/cli.js",
|
|
87
|
+
"kl": "./dist/cli.js",
|
|
88
|
+
"kanban-mcp": "./dist/mcp-server.js"
|
|
89
|
+
},
|
|
90
|
+
"scripts": {
|
|
91
|
+
"publish:all": "vsce publish && ovsx publish",
|
|
92
|
+
"vscode:prepublish": "npm run build",
|
|
93
|
+
"build": "npm run build:extension && npm run build:webview && npm run build:standalone-webview && npm run build:cli && npm run build:mcp",
|
|
94
|
+
"build:cli": "esbuild src/cli/index.ts --bundle --outfile=dist/cli.js --format=cjs --platform=node --banner:js=\"#!/usr/bin/env node\"",
|
|
95
|
+
"build:mcp": "esbuild src/mcp-server/index.ts --bundle --outfile=dist/mcp-server.js --format=cjs --platform=node --external:@modelcontextprotocol/sdk --external:zod --banner:js=\"#!/usr/bin/env node\"",
|
|
96
|
+
"build:extension": "esbuild src/extension/index.ts --bundle --outfile=dist/extension.js --external:vscode --format=cjs --platform=node",
|
|
97
|
+
"build:webview": "vite build",
|
|
98
|
+
"build:standalone": "npm run build:standalone-server && npm run build:standalone-webview",
|
|
99
|
+
"build:standalone-server": "esbuild src/standalone/index.ts --bundle --outfile=dist/standalone.js --format=cjs --platform=node --banner:js=\"#!/usr/bin/env node\"",
|
|
100
|
+
"build:standalone-webview": "vite build --config vite.standalone.config.ts",
|
|
101
|
+
"standalone": "npm run build:standalone && node dist/standalone.js",
|
|
102
|
+
"watch": "concurrently \"npm run watch:extension\" \"npm run watch:webview\"",
|
|
103
|
+
"watch:extension": "esbuild src/extension/index.ts --bundle --outfile=dist/extension.js --external:vscode --format=cjs --platform=node --watch",
|
|
104
|
+
"watch:webview": "vite build --watch",
|
|
105
|
+
"watch:standalone-server": "esbuild src/standalone/index.ts --bundle --outfile=dist/standalone.js --format=cjs --platform=node --banner:js=\"#!/usr/bin/env node\" --watch",
|
|
106
|
+
"dev:standalone-server": "node --watch-path=dist/standalone.js dist/standalone.js --port 3001 --no-browser",
|
|
107
|
+
"dev:standalone-vite": "vite dev --config vite.standalone.config.ts",
|
|
108
|
+
"dev": "npm run build:standalone-server && concurrently \"npm run watch:extension\" \"npm run watch:webview\" \"npm run watch:standalone-server\" \"npm run dev:standalone-server\" \"npm run dev:standalone-vite\"",
|
|
109
|
+
"test": "vitest run",
|
|
110
|
+
"test:watch": "vitest",
|
|
111
|
+
"lint": "eslint src",
|
|
112
|
+
"typecheck": "tsc --noEmit",
|
|
113
|
+
"package": "vsce package --no-dependencies -o releases/",
|
|
114
|
+
"release": "npm version patch && npm run build && npm publish",
|
|
115
|
+
"release:minor": "npm version minor && npm run build && npm publish",
|
|
116
|
+
"release:major": "npm version major && npm run build && npm publish"
|
|
117
|
+
},
|
|
118
|
+
"devDependencies": {
|
|
119
|
+
"@eslint/js": "^9.39.2",
|
|
120
|
+
"@tailwindcss/typography": "^0.5.19",
|
|
121
|
+
"@types/node": "^20.10.0",
|
|
122
|
+
"@types/react": "^18.2.0",
|
|
123
|
+
"@types/react-dom": "^18.2.0",
|
|
124
|
+
"@types/vscode": "^1.85.0",
|
|
125
|
+
"@types/ws": "^8.5.0",
|
|
126
|
+
"@vitejs/plugin-react": "^4.2.0",
|
|
127
|
+
"@vscode/vsce": "^3.7.1",
|
|
128
|
+
"autoprefixer": "^10.4.16",
|
|
129
|
+
"concurrently": "^9.2.1",
|
|
130
|
+
"esbuild": "^0.19.0",
|
|
131
|
+
"eslint": "^9.39.2",
|
|
132
|
+
"eslint-plugin-react": "^7.37.5",
|
|
133
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
134
|
+
"ovsx": "^0.10.8",
|
|
135
|
+
"postcss": "^8.4.32",
|
|
136
|
+
"tailwindcss": "^3.4.0",
|
|
137
|
+
"typescript": "^5.3.0",
|
|
138
|
+
"typescript-eslint": "^8.53.0",
|
|
139
|
+
"vite": "^5.0.0",
|
|
140
|
+
"vitest": "^4.0.18"
|
|
141
|
+
},
|
|
142
|
+
"dependencies": {
|
|
143
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
144
|
+
"@tiptap/extension-placeholder": "^3.15.3",
|
|
145
|
+
"@tiptap/pm": "^3.15.3",
|
|
146
|
+
"@tiptap/react": "^3.15.3",
|
|
147
|
+
"@tiptap/starter-kit": "^3.15.3",
|
|
148
|
+
"chokidar": "^4.0.0",
|
|
149
|
+
"clsx": "^2.1.1",
|
|
150
|
+
"fractional-indexing": "^3.2.0",
|
|
151
|
+
"lucide-react": "^0.562.0",
|
|
152
|
+
"marked": "^17.0.3",
|
|
153
|
+
"open": "^10.1.0",
|
|
154
|
+
"react": "^18.2.0",
|
|
155
|
+
"react-dom": "^18.2.0",
|
|
156
|
+
"tailwind-merge": "^2.2.0",
|
|
157
|
+
"tiptap-markdown": "^0.9.0",
|
|
158
|
+
"ws": "^8.18.0",
|
|
159
|
+
"zustand": "^5.0.10"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" stop-color="#f8fafc"/>
|
|
5
|
+
<stop offset="50%" stop-color="#f1f5f9"/>
|
|
6
|
+
<stop offset="100%" stop-color="#e2e8f0"/>
|
|
7
|
+
</linearGradient>
|
|
8
|
+
<linearGradient id="col1" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
9
|
+
<stop offset="0%" stop-color="#10b981"/>
|
|
10
|
+
<stop offset="100%" stop-color="#059669"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
<linearGradient id="col2" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
13
|
+
<stop offset="0%" stop-color="#f59e0b"/>
|
|
14
|
+
<stop offset="100%" stop-color="#d97706"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
<linearGradient id="col3" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
17
|
+
<stop offset="0%" stop-color="#ec4899"/>
|
|
18
|
+
<stop offset="100%" stop-color="#db2777"/>
|
|
19
|
+
</linearGradient>
|
|
20
|
+
<linearGradient id="card1" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
21
|
+
<stop offset="0%" stop-color="#d1fae5"/>
|
|
22
|
+
<stop offset="100%" stop-color="#a7f3d0"/>
|
|
23
|
+
</linearGradient>
|
|
24
|
+
<linearGradient id="card2" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
25
|
+
<stop offset="0%" stop-color="#fef3c7"/>
|
|
26
|
+
<stop offset="100%" stop-color="#fde68a"/>
|
|
27
|
+
</linearGradient>
|
|
28
|
+
<linearGradient id="card3" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
29
|
+
<stop offset="0%" stop-color="#fce7f3"/>
|
|
30
|
+
<stop offset="100%" stop-color="#fbcfe8"/>
|
|
31
|
+
</linearGradient>
|
|
32
|
+
<filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
|
|
33
|
+
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#64748b" flood-opacity="0.15"/>
|
|
34
|
+
</filter>
|
|
35
|
+
<clipPath id="squircle-clip">
|
|
36
|
+
<rect x="4" y="4" width="248" height="248" rx="48" ry="48"/>
|
|
37
|
+
</clipPath>
|
|
38
|
+
</defs>
|
|
39
|
+
|
|
40
|
+
<!-- Background squircle -->
|
|
41
|
+
<rect x="4" y="4" width="248" height="248" rx="48" ry="48" fill="url(#bg)"/>
|
|
42
|
+
<!-- Subtle border -->
|
|
43
|
+
<rect x="4" y="4" width="248" height="248" rx="48" ry="48" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.25"/>
|
|
44
|
+
|
|
45
|
+
<g clip-path="url(#squircle-clip)">
|
|
46
|
+
<!-- Subtle grid dots for texture -->
|
|
47
|
+
<g opacity="0.06" fill="#64748b">
|
|
48
|
+
<circle cx="40" cy="40" r="1"/><circle cx="72" cy="40" r="1"/><circle cx="104" cy="40" r="1"/><circle cx="136" cy="40" r="1"/><circle cx="168" cy="40" r="1"/><circle cx="200" cy="40" r="1"/><circle cx="232" cy="40" r="1"/>
|
|
49
|
+
<circle cx="40" cy="72" r="1"/><circle cx="72" cy="72" r="1"/><circle cx="104" cy="72" r="1"/><circle cx="136" cy="72" r="1"/><circle cx="168" cy="72" r="1"/><circle cx="200" cy="72" r="1"/><circle cx="232" cy="72" r="1"/>
|
|
50
|
+
<circle cx="40" cy="104" r="1"/><circle cx="72" cy="104" r="1"/><circle cx="104" cy="104" r="1"/><circle cx="136" cy="104" r="1"/><circle cx="168" cy="104" r="1"/><circle cx="200" cy="104" r="1"/><circle cx="232" cy="104" r="1"/>
|
|
51
|
+
<circle cx="40" cy="136" r="1"/><circle cx="72" cy="136" r="1"/><circle cx="104" cy="136" r="1"/><circle cx="136" cy="136" r="1"/><circle cx="168" cy="136" r="1"/><circle cx="200" cy="136" r="1"/><circle cx="232" cy="136" r="1"/>
|
|
52
|
+
<circle cx="40" cy="168" r="1"/><circle cx="72" cy="168" r="1"/><circle cx="104" cy="168" r="1"/><circle cx="136" cy="168" r="1"/><circle cx="168" cy="168" r="1"/><circle cx="200" cy="168" r="1"/><circle cx="232" cy="168" r="1"/>
|
|
53
|
+
<circle cx="40" cy="200" r="1"/><circle cx="72" cy="200" r="1"/><circle cx="104" cy="200" r="1"/><circle cx="136" cy="200" r="1"/><circle cx="168" cy="200" r="1"/><circle cx="200" cy="200" r="1"/><circle cx="232" cy="200" r="1"/>
|
|
54
|
+
</g>
|
|
55
|
+
|
|
56
|
+
<!-- Column 1: To Do (green) -->
|
|
57
|
+
<g filter="url(#shadow)">
|
|
58
|
+
<rect x="28" y="44" width="60" height="172" rx="10" fill="white" opacity="0.7"/>
|
|
59
|
+
<rect x="34" y="50" width="48" height="5" rx="2.5" fill="url(#col1)"/>
|
|
60
|
+
<rect x="34" y="64" width="48" height="28" rx="6" fill="url(#card1)"/>
|
|
61
|
+
<rect x="40" y="72" width="24" height="3" rx="1.5" fill="#059669" opacity="0.4"/>
|
|
62
|
+
<rect x="40" y="78" width="16" height="3" rx="1.5" fill="#059669" opacity="0.25"/>
|
|
63
|
+
<rect x="34" y="98" width="48" height="28" rx="6" fill="url(#card1)" opacity="0.8"/>
|
|
64
|
+
<rect x="40" y="106" width="20" height="3" rx="1.5" fill="#059669" opacity="0.35"/>
|
|
65
|
+
<rect x="40" y="112" width="28" height="3" rx="1.5" fill="#059669" opacity="0.2"/>
|
|
66
|
+
<rect x="34" y="132" width="48" height="28" rx="6" fill="url(#card1)" opacity="0.6"/>
|
|
67
|
+
<rect x="40" y="140" width="30" height="3" rx="1.5" fill="#059669" opacity="0.3"/>
|
|
68
|
+
<rect x="40" y="146" width="18" height="3" rx="1.5" fill="#059669" opacity="0.18"/>
|
|
69
|
+
</g>
|
|
70
|
+
|
|
71
|
+
<!-- Column 2: In Progress (amber) -->
|
|
72
|
+
<g filter="url(#shadow)">
|
|
73
|
+
<rect x="98" y="36" width="60" height="184" rx="10" fill="white" opacity="0.7"/>
|
|
74
|
+
<rect x="104" y="42" width="48" height="5" rx="2.5" fill="url(#col2)"/>
|
|
75
|
+
<rect x="104" y="56" width="48" height="32" rx="6" fill="url(#card2)"/>
|
|
76
|
+
<rect x="110" y="64" width="28" height="3" rx="1.5" fill="#d97706" opacity="0.4"/>
|
|
77
|
+
<rect x="110" y="70" width="20" height="3" rx="1.5" fill="#d97706" opacity="0.25"/>
|
|
78
|
+
<rect x="110" y="76" width="14" height="3" rx="1.5" fill="#d97706" opacity="0.18"/>
|
|
79
|
+
<rect x="104" y="94" width="48" height="28" rx="6" fill="url(#card2)" opacity="0.8"/>
|
|
80
|
+
<rect x="110" y="102" width="22" height="3" rx="1.5" fill="#d97706" opacity="0.35"/>
|
|
81
|
+
<rect x="110" y="108" width="32" height="3" rx="1.5" fill="#d97706" opacity="0.2"/>
|
|
82
|
+
<g transform="rotate(-3, 128, 148)">
|
|
83
|
+
<rect x="102" y="130" width="52" height="30" rx="6" fill="url(#card2)" stroke="#d97706" stroke-width="1" stroke-opacity="0.2"/>
|
|
84
|
+
<rect x="108" y="138" width="26" height="3" rx="1.5" fill="#d97706" opacity="0.5"/>
|
|
85
|
+
<rect x="108" y="144" width="18" height="3" rx="1.5" fill="#d97706" opacity="0.3"/>
|
|
86
|
+
</g>
|
|
87
|
+
</g>
|
|
88
|
+
|
|
89
|
+
<!-- Column 3: Done (pink) -->
|
|
90
|
+
<g filter="url(#shadow)">
|
|
91
|
+
<rect x="168" y="44" width="60" height="172" rx="10" fill="white" opacity="0.7"/>
|
|
92
|
+
<rect x="174" y="50" width="48" height="5" rx="2.5" fill="url(#col3)"/>
|
|
93
|
+
<rect x="174" y="64" width="48" height="28" rx="6" fill="url(#card3)"/>
|
|
94
|
+
<rect x="180" y="72" width="22" height="3" rx="1.5" fill="#db2777" opacity="0.4"/>
|
|
95
|
+
<rect x="180" y="78" width="30" height="3" rx="1.5" fill="#db2777" opacity="0.25"/>
|
|
96
|
+
<circle cx="211" cy="72" r="5" fill="#db2777" opacity="0.15"/>
|
|
97
|
+
<path d="M208,72 L210,74.5 L214.5,69.5" fill="none" stroke="#db2777" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" opacity="0.6"/>
|
|
98
|
+
<rect x="174" y="98" width="48" height="28" rx="6" fill="url(#card3)" opacity="0.8"/>
|
|
99
|
+
<rect x="180" y="106" width="26" height="3" rx="1.5" fill="#db2777" opacity="0.35"/>
|
|
100
|
+
<rect x="180" y="112" width="16" height="3" rx="1.5" fill="#db2777" opacity="0.2"/>
|
|
101
|
+
<circle cx="211" cy="106" r="5" fill="#db2777" opacity="0.12"/>
|
|
102
|
+
<path d="M208,106 L210,108.5 L214.5,103.5" fill="none" stroke="#db2777" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" opacity="0.4"/>
|
|
103
|
+
</g>
|
|
104
|
+
</g>
|
|
105
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" stop-color="#1e1b4b"/>
|
|
5
|
+
<stop offset="50%" stop-color="#0f172a"/>
|
|
6
|
+
<stop offset="100%" stop-color="#020617"/>
|
|
7
|
+
</linearGradient>
|
|
8
|
+
<linearGradient id="col1" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
9
|
+
<stop offset="0%" stop-color="#34d399"/>
|
|
10
|
+
<stop offset="100%" stop-color="#059669"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
<linearGradient id="col2" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
13
|
+
<stop offset="0%" stop-color="#fbbf24"/>
|
|
14
|
+
<stop offset="100%" stop-color="#d97706"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
<linearGradient id="col3" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
17
|
+
<stop offset="0%" stop-color="#f472b6"/>
|
|
18
|
+
<stop offset="100%" stop-color="#db2777"/>
|
|
19
|
+
</linearGradient>
|
|
20
|
+
<linearGradient id="card1" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
21
|
+
<stop offset="0%" stop-color="#6ee7b7"/>
|
|
22
|
+
<stop offset="100%" stop-color="#34d399"/>
|
|
23
|
+
</linearGradient>
|
|
24
|
+
<linearGradient id="card2" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
25
|
+
<stop offset="0%" stop-color="#fde68a"/>
|
|
26
|
+
<stop offset="100%" stop-color="#fbbf24"/>
|
|
27
|
+
</linearGradient>
|
|
28
|
+
<linearGradient id="card3" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
29
|
+
<stop offset="0%" stop-color="#f9a8d4"/>
|
|
30
|
+
<stop offset="100%" stop-color="#f472b6"/>
|
|
31
|
+
</linearGradient>
|
|
32
|
+
<filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
|
|
33
|
+
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#000" flood-opacity="0.3"/>
|
|
34
|
+
</filter>
|
|
35
|
+
<clipPath id="squircle-clip">
|
|
36
|
+
<rect x="4" y="4" width="248" height="248" rx="48" ry="48"/>
|
|
37
|
+
</clipPath>
|
|
38
|
+
</defs>
|
|
39
|
+
|
|
40
|
+
<!-- Background squircle -->
|
|
41
|
+
<rect x="4" y="4" width="248" height="248" rx="48" ry="48" fill="url(#bg)"/>
|
|
42
|
+
<!-- Subtle border -->
|
|
43
|
+
<rect x="4" y="4" width="248" height="248" rx="48" ry="48" fill="none" stroke="white" stroke-width="1" opacity="0.08"/>
|
|
44
|
+
|
|
45
|
+
<g clip-path="url(#squircle-clip)">
|
|
46
|
+
<!-- Subtle grid dots for texture -->
|
|
47
|
+
<g opacity="0.04" fill="white">
|
|
48
|
+
<circle cx="40" cy="40" r="1"/><circle cx="72" cy="40" r="1"/><circle cx="104" cy="40" r="1"/><circle cx="136" cy="40" r="1"/><circle cx="168" cy="40" r="1"/><circle cx="200" cy="40" r="1"/><circle cx="232" cy="40" r="1"/>
|
|
49
|
+
<circle cx="40" cy="72" r="1"/><circle cx="72" cy="72" r="1"/><circle cx="104" cy="72" r="1"/><circle cx="136" cy="72" r="1"/><circle cx="168" cy="72" r="1"/><circle cx="200" cy="72" r="1"/><circle cx="232" cy="72" r="1"/>
|
|
50
|
+
<circle cx="40" cy="104" r="1"/><circle cx="72" cy="104" r="1"/><circle cx="104" cy="104" r="1"/><circle cx="136" cy="104" r="1"/><circle cx="168" cy="104" r="1"/><circle cx="200" cy="104" r="1"/><circle cx="232" cy="104" r="1"/>
|
|
51
|
+
<circle cx="40" cy="136" r="1"/><circle cx="72" cy="136" r="1"/><circle cx="104" cy="136" r="1"/><circle cx="136" cy="136" r="1"/><circle cx="168" cy="136" r="1"/><circle cx="200" cy="136" r="1"/><circle cx="232" cy="136" r="1"/>
|
|
52
|
+
<circle cx="40" cy="168" r="1"/><circle cx="72" cy="168" r="1"/><circle cx="104" cy="168" r="1"/><circle cx="136" cy="168" r="1"/><circle cx="168" cy="168" r="1"/><circle cx="200" cy="168" r="1"/><circle cx="232" cy="168" r="1"/>
|
|
53
|
+
<circle cx="40" cy="200" r="1"/><circle cx="72" cy="200" r="1"/><circle cx="104" cy="200" r="1"/><circle cx="136" cy="200" r="1"/><circle cx="168" cy="200" r="1"/><circle cx="200" cy="200" r="1"/><circle cx="232" cy="200" r="1"/>
|
|
54
|
+
</g>
|
|
55
|
+
|
|
56
|
+
<!-- Column 1: To Do (green) -->
|
|
57
|
+
<g filter="url(#shadow)">
|
|
58
|
+
<rect x="28" y="44" width="60" height="172" rx="10" fill="white" opacity="0.06"/>
|
|
59
|
+
<rect x="34" y="50" width="48" height="5" rx="2.5" fill="url(#col1)" opacity="0.9"/>
|
|
60
|
+
<rect x="34" y="64" width="48" height="28" rx="6" fill="url(#card1)" opacity="0.85"/>
|
|
61
|
+
<rect x="40" y="72" width="24" height="3" rx="1.5" fill="white" opacity="0.6"/>
|
|
62
|
+
<rect x="40" y="78" width="16" height="3" rx="1.5" fill="white" opacity="0.35"/>
|
|
63
|
+
<rect x="34" y="98" width="48" height="28" rx="6" fill="url(#card1)" opacity="0.65"/>
|
|
64
|
+
<rect x="40" y="106" width="20" height="3" rx="1.5" fill="white" opacity="0.5"/>
|
|
65
|
+
<rect x="40" y="112" width="28" height="3" rx="1.5" fill="white" opacity="0.3"/>
|
|
66
|
+
<rect x="34" y="132" width="48" height="28" rx="6" fill="url(#card1)" opacity="0.45"/>
|
|
67
|
+
<rect x="40" y="140" width="30" height="3" rx="1.5" fill="white" opacity="0.4"/>
|
|
68
|
+
<rect x="40" y="146" width="18" height="3" rx="1.5" fill="white" opacity="0.25"/>
|
|
69
|
+
</g>
|
|
70
|
+
|
|
71
|
+
<!-- Column 2: In Progress (amber) -->
|
|
72
|
+
<g filter="url(#shadow)">
|
|
73
|
+
<rect x="98" y="36" width="60" height="184" rx="10" fill="white" opacity="0.06"/>
|
|
74
|
+
<rect x="104" y="42" width="48" height="5" rx="2.5" fill="url(#col2)" opacity="0.9"/>
|
|
75
|
+
<rect x="104" y="56" width="48" height="32" rx="6" fill="url(#card2)" opacity="0.85"/>
|
|
76
|
+
<rect x="110" y="64" width="28" height="3" rx="1.5" fill="white" opacity="0.6"/>
|
|
77
|
+
<rect x="110" y="70" width="20" height="3" rx="1.5" fill="white" opacity="0.35"/>
|
|
78
|
+
<rect x="110" y="76" width="14" height="3" rx="1.5" fill="white" opacity="0.25"/>
|
|
79
|
+
<rect x="104" y="94" width="48" height="28" rx="6" fill="url(#card2)" opacity="0.65"/>
|
|
80
|
+
<rect x="110" y="102" width="22" height="3" rx="1.5" fill="white" opacity="0.5"/>
|
|
81
|
+
<rect x="110" y="108" width="32" height="3" rx="1.5" fill="white" opacity="0.3"/>
|
|
82
|
+
<g transform="rotate(-3, 128, 148)">
|
|
83
|
+
<rect x="102" y="130" width="52" height="30" rx="6" fill="url(#card2)" opacity="0.9" stroke="white" stroke-width="1" stroke-opacity="0.2"/>
|
|
84
|
+
<rect x="108" y="138" width="26" height="3" rx="1.5" fill="white" opacity="0.7"/>
|
|
85
|
+
<rect x="108" y="144" width="18" height="3" rx="1.5" fill="white" opacity="0.4"/>
|
|
86
|
+
</g>
|
|
87
|
+
</g>
|
|
88
|
+
|
|
89
|
+
<!-- Column 3: Done (pink) -->
|
|
90
|
+
<g filter="url(#shadow)">
|
|
91
|
+
<rect x="168" y="44" width="60" height="172" rx="10" fill="white" opacity="0.06"/>
|
|
92
|
+
<rect x="174" y="50" width="48" height="5" rx="2.5" fill="url(#col3)" opacity="0.9"/>
|
|
93
|
+
<rect x="174" y="64" width="48" height="28" rx="6" fill="url(#card3)" opacity="0.85"/>
|
|
94
|
+
<rect x="180" y="72" width="22" height="3" rx="1.5" fill="white" opacity="0.6"/>
|
|
95
|
+
<rect x="180" y="78" width="30" height="3" rx="1.5" fill="white" opacity="0.35"/>
|
|
96
|
+
<circle cx="211" cy="72" r="5" fill="white" opacity="0.25"/>
|
|
97
|
+
<path d="M208,72 L210,74.5 L214.5,69.5" fill="none" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" opacity="0.7"/>
|
|
98
|
+
<rect x="174" y="98" width="48" height="28" rx="6" fill="url(#card3)" opacity="0.65"/>
|
|
99
|
+
<rect x="180" y="106" width="26" height="3" rx="1.5" fill="white" opacity="0.5"/>
|
|
100
|
+
<rect x="180" y="112" width="16" height="3" rx="1.5" fill="white" opacity="0.3"/>
|
|
101
|
+
<circle cx="211" cy="106" r="5" fill="white" opacity="0.2"/>
|
|
102
|
+
<path d="M208,106 L210,108.5 L214.5,103.5" fill="none" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" opacity="0.5"/>
|
|
103
|
+
</g>
|
|
104
|
+
</g>
|
|
105
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
|
|
2
|
+
<!-- Column 1 (green) -->
|
|
3
|
+
<rect x="2" y="3" width="5.5" height="16" rx="1.2" fill="white" opacity="0.08"/>
|
|
4
|
+
<rect x="2.8" y="3.8" width="3.9" height="0.8" rx="0.4" fill="#34d399"/>
|
|
5
|
+
<rect x="2.8" y="5.5" width="3.9" height="2.8" rx="0.8" fill="#34d399" opacity="0.7"/>
|
|
6
|
+
<rect x="2.8" y="9" width="3.9" height="2.8" rx="0.8" fill="#34d399" opacity="0.5"/>
|
|
7
|
+
<rect x="2.8" y="12.5" width="3.9" height="2.8" rx="0.8" fill="#34d399" opacity="0.35"/>
|
|
8
|
+
<!-- Column 2 (amber) -->
|
|
9
|
+
<rect x="9.25" y="2" width="5.5" height="18" rx="1.2" fill="white" opacity="0.08"/>
|
|
10
|
+
<rect x="10.05" y="2.8" width="3.9" height="0.8" rx="0.4" fill="#fbbf24"/>
|
|
11
|
+
<rect x="10.05" y="4.5" width="3.9" height="3.2" rx="0.8" fill="#fbbf24" opacity="0.7"/>
|
|
12
|
+
<rect x="10.05" y="8.4" width="3.9" height="2.8" rx="0.8" fill="#fbbf24" opacity="0.5"/>
|
|
13
|
+
<g transform="rotate(-3, 12, 14)">
|
|
14
|
+
<rect x="9.85" y="12" width="4.3" height="2.8" rx="0.8" fill="#fbbf24" opacity="0.8" stroke="white" stroke-width="0.3" stroke-opacity="0.3"/>
|
|
15
|
+
</g>
|
|
16
|
+
<!-- Column 3 (pink) -->
|
|
17
|
+
<rect x="16.5" y="3" width="5.5" height="16" rx="1.2" fill="white" opacity="0.08"/>
|
|
18
|
+
<rect x="17.3" y="3.8" width="3.9" height="0.8" rx="0.4" fill="#f472b6"/>
|
|
19
|
+
<rect x="17.3" y="5.5" width="3.9" height="2.8" rx="0.8" fill="#f472b6" opacity="0.7"/>
|
|
20
|
+
<rect x="17.3" y="9" width="3.9" height="2.8" rx="0.8" fill="#f472b6" opacity="0.5"/>
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
|
|
2
|
+
<!-- Column 1 (green) -->
|
|
3
|
+
<rect x="2" y="3" width="5.5" height="16" rx="1.2" fill="#64748b" opacity="0.08"/>
|
|
4
|
+
<rect x="2.8" y="3.8" width="3.9" height="0.8" rx="0.4" fill="#059669"/>
|
|
5
|
+
<rect x="2.8" y="5.5" width="3.9" height="2.8" rx="0.8" fill="#059669" opacity="0.6"/>
|
|
6
|
+
<rect x="2.8" y="9" width="3.9" height="2.8" rx="0.8" fill="#059669" opacity="0.4"/>
|
|
7
|
+
<rect x="2.8" y="12.5" width="3.9" height="2.8" rx="0.8" fill="#059669" opacity="0.25"/>
|
|
8
|
+
<!-- Column 2 (amber) -->
|
|
9
|
+
<rect x="9.25" y="2" width="5.5" height="18" rx="1.2" fill="#64748b" opacity="0.08"/>
|
|
10
|
+
<rect x="10.05" y="2.8" width="3.9" height="0.8" rx="0.4" fill="#d97706"/>
|
|
11
|
+
<rect x="10.05" y="4.5" width="3.9" height="3.2" rx="0.8" fill="#d97706" opacity="0.6"/>
|
|
12
|
+
<rect x="10.05" y="8.4" width="3.9" height="2.8" rx="0.8" fill="#d97706" opacity="0.4"/>
|
|
13
|
+
<g transform="rotate(-3, 12, 14)">
|
|
14
|
+
<rect x="9.85" y="12" width="4.3" height="2.8" rx="0.8" fill="#d97706" opacity="0.7" stroke="#d97706" stroke-width="0.3" stroke-opacity="0.3"/>
|
|
15
|
+
</g>
|
|
16
|
+
<!-- Column 3 (pink) -->
|
|
17
|
+
<rect x="16.5" y="3" width="5.5" height="16" rx="1.2" fill="#64748b" opacity="0.08"/>
|
|
18
|
+
<rect x="17.3" y="3.8" width="3.9" height="0.8" rx="0.4" fill="#db2777"/>
|
|
19
|
+
<rect x="17.3" y="5.5" width="3.9" height="2.8" rx="0.8" fill="#db2777" opacity="0.6"/>
|
|
20
|
+
<rect x="17.3" y="9" width="3.9" height="2.8" rx="0.8" fill="#db2777" opacity="0.4"/>
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
|
|
2
|
+
<!-- Column 1 -->
|
|
3
|
+
<rect x="2" y="3" width="5.5" height="16" rx="1.2" opacity="0.08"/>
|
|
4
|
+
<rect x="2.8" y="3.8" width="3.9" height="0.8" rx="0.4" opacity="0.9"/>
|
|
5
|
+
<rect x="2.8" y="5.5" width="3.9" height="2.8" rx="0.8" opacity="0.6"/>
|
|
6
|
+
<rect x="2.8" y="9" width="3.9" height="2.8" rx="0.8" opacity="0.4"/>
|
|
7
|
+
<rect x="2.8" y="12.5" width="3.9" height="2.8" rx="0.8" opacity="0.25"/>
|
|
8
|
+
<!-- Column 2 -->
|
|
9
|
+
<rect x="9.25" y="2" width="5.5" height="18" rx="1.2" opacity="0.08"/>
|
|
10
|
+
<rect x="10.05" y="2.8" width="3.9" height="0.8" rx="0.4" opacity="0.9"/>
|
|
11
|
+
<rect x="10.05" y="4.5" width="3.9" height="3.2" rx="0.8" opacity="0.6"/>
|
|
12
|
+
<rect x="10.05" y="8.4" width="3.9" height="2.8" rx="0.8" opacity="0.4"/>
|
|
13
|
+
<g transform="rotate(-3, 12, 14)">
|
|
14
|
+
<rect x="9.85" y="12" width="4.3" height="2.8" rx="0.8" opacity="0.7"/>
|
|
15
|
+
</g>
|
|
16
|
+
<!-- Column 3 -->
|
|
17
|
+
<rect x="16.5" y="3" width="5.5" height="16" rx="1.2" opacity="0.08"/>
|
|
18
|
+
<rect x="17.3" y="3.8" width="3.9" height="0.8" rx="0.4" opacity="0.9"/>
|
|
19
|
+
<rect x="17.3" y="5.5" width="3.9" height="2.8" rx="0.8" opacity="0.6"/>
|
|
20
|
+
<rect x="17.3" y="9" width="3.9" height="2.8" rx="0.8" opacity="0.4"/>
|
|
21
|
+
</svg>
|