@potenlab/ui 0.1.2 → 0.2.1
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 +18 -1
- package/dist/cli.js +756 -0
- package/package.json +8 -3
- package/template/admin/README.md +36 -0
- package/template/admin/_gitignore +41 -0
- package/template/admin/components.json +23 -0
- package/template/admin/docs/changes.json +295 -0
- package/template/admin/docs/dev-plan.md +822 -0
- package/template/admin/docs/frontend-plan.md +874 -0
- package/template/admin/docs/prd.md +408 -0
- package/template/admin/docs/progress.json +777 -0
- package/template/admin/docs/test-plan.md +790 -0
- package/template/admin/docs/ui-ux-plan.md +1664 -0
- package/template/admin/eslint.config.mjs +18 -0
- package/template/admin/next.config.ts +7 -0
- package/template/admin/package.json +43 -0
- package/template/admin/postcss.config.mjs +7 -0
- package/template/admin/public/avatars/user1.svg +4 -0
- package/template/admin/public/avatars/user2.svg +4 -0
- package/template/admin/public/avatars/user3.svg +4 -0
- package/template/admin/public/avatars/user4.svg +4 -0
- package/template/admin/public/avatars/user5.svg +4 -0
- package/template/admin/public/file.svg +1 -0
- package/template/admin/public/globe.svg +1 -0
- package/template/admin/public/next.svg +1 -0
- package/template/admin/public/profile/img1.svg +7 -0
- package/template/admin/public/profile/img2.svg +7 -0
- package/template/admin/public/profile/img3.svg +7 -0
- package/template/admin/public/vercel.svg +1 -0
- package/template/admin/public/window.svg +1 -0
- package/template/admin/src/app/favicon.ico +0 -0
- package/template/admin/src/app/layout.tsx +38 -0
- package/template/admin/src/app/page.tsx +5 -0
- package/template/admin/src/app/users/[id]/page.tsx +10 -0
- package/template/admin/src/components/layouts/app-sidebar.tsx +152 -0
- package/template/admin/src/components/user-management/profile-images.tsx +69 -0
- package/template/admin/src/components/user-management/user-detail-form.tsx +143 -0
- package/template/admin/src/features/user-management/components/user-columns.tsx +101 -0
- package/template/admin/src/features/user-management/components/user-detail.tsx +79 -0
- package/template/admin/src/features/user-management/components/user-list.tsx +74 -0
- package/template/admin/src/features/user-management/types/index.ts +113 -0
- package/template/admin/src/features/user-management/utils/format.ts +2 -0
- package/template/admin/src/lib/mock-data.ts +131 -0
- package/template/admin/src/styles/globals.css +26 -0
- package/template/admin/tsconfig.json +34 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@potenlab/ui",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Potenlab shared UI component library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -22,9 +22,13 @@
|
|
|
22
22
|
"sideEffects": [
|
|
23
23
|
"**/*.css"
|
|
24
24
|
],
|
|
25
|
+
"bin": {
|
|
26
|
+
"potenlab-ui": "./dist/cli.js"
|
|
27
|
+
},
|
|
25
28
|
"files": [
|
|
26
29
|
"dist",
|
|
27
|
-
"src/styles"
|
|
30
|
+
"src/styles",
|
|
31
|
+
"template"
|
|
28
32
|
],
|
|
29
33
|
"publishConfig": {
|
|
30
34
|
"access": "public"
|
|
@@ -93,7 +97,7 @@
|
|
|
93
97
|
"./styles/globals.css": "./dist/styles/globals.css"
|
|
94
98
|
},
|
|
95
99
|
"scripts": {
|
|
96
|
-
"build": "tsup && mkdir -p dist/styles && cp src/styles/globals.css dist/styles/globals.css",
|
|
100
|
+
"build": "tsup && tsup --config tsup.cli.config.ts && mkdir -p dist/styles && cp src/styles/globals.css dist/styles/globals.css && chmod +x dist/cli.js",
|
|
97
101
|
"dev": "tsup --watch",
|
|
98
102
|
"typecheck": "tsc --noEmit",
|
|
99
103
|
"storybook": "storybook dev -p 6006",
|
|
@@ -116,6 +120,7 @@
|
|
|
116
120
|
}
|
|
117
121
|
},
|
|
118
122
|
"dependencies": {
|
|
123
|
+
"@clack/prompts": "^0.10.1",
|
|
119
124
|
"class-variance-authority": "^0.7.1",
|
|
120
125
|
"clsx": "^2.1.1",
|
|
121
126
|
"lucide-react": "^0.576.0",
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
|
|
2
|
+
|
|
3
|
+
## Getting Started
|
|
4
|
+
|
|
5
|
+
First, run the development server:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm run dev
|
|
9
|
+
# or
|
|
10
|
+
yarn dev
|
|
11
|
+
# or
|
|
12
|
+
pnpm dev
|
|
13
|
+
# or
|
|
14
|
+
bun dev
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
18
|
+
|
|
19
|
+
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
|
20
|
+
|
|
21
|
+
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
|
22
|
+
|
|
23
|
+
## Learn More
|
|
24
|
+
|
|
25
|
+
To learn more about Next.js, take a look at the following resources:
|
|
26
|
+
|
|
27
|
+
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
|
28
|
+
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
|
29
|
+
|
|
30
|
+
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
|
31
|
+
|
|
32
|
+
## Deploy on Vercel
|
|
33
|
+
|
|
34
|
+
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
|
35
|
+
|
|
36
|
+
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
2
|
+
|
|
3
|
+
# dependencies
|
|
4
|
+
/node_modules
|
|
5
|
+
/.pnp
|
|
6
|
+
.pnp.*
|
|
7
|
+
.yarn/*
|
|
8
|
+
!.yarn/patches
|
|
9
|
+
!.yarn/plugins
|
|
10
|
+
!.yarn/releases
|
|
11
|
+
!.yarn/versions
|
|
12
|
+
|
|
13
|
+
# testing
|
|
14
|
+
/coverage
|
|
15
|
+
|
|
16
|
+
# next.js
|
|
17
|
+
/.next/
|
|
18
|
+
/out/
|
|
19
|
+
|
|
20
|
+
# production
|
|
21
|
+
/build
|
|
22
|
+
|
|
23
|
+
# misc
|
|
24
|
+
.DS_Store
|
|
25
|
+
*.pem
|
|
26
|
+
|
|
27
|
+
# debug
|
|
28
|
+
npm-debug.log*
|
|
29
|
+
yarn-debug.log*
|
|
30
|
+
yarn-error.log*
|
|
31
|
+
.pnpm-debug.log*
|
|
32
|
+
|
|
33
|
+
# env files (can opt-in for committing if needed)
|
|
34
|
+
.env*
|
|
35
|
+
|
|
36
|
+
# vercel
|
|
37
|
+
.vercel
|
|
38
|
+
|
|
39
|
+
# typescript
|
|
40
|
+
*.tsbuildinfo
|
|
41
|
+
next-env.d.ts
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "new-york",
|
|
4
|
+
"rsc": true,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "src/styles/globals.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"iconLibrary": "lucide",
|
|
14
|
+
"rtl": false,
|
|
15
|
+
"aliases": {
|
|
16
|
+
"components": "@/components",
|
|
17
|
+
"utils": "@/lib/utils",
|
|
18
|
+
"ui": "@/components/ui",
|
|
19
|
+
"lib": "@/lib",
|
|
20
|
+
"hooks": "@/hooks"
|
|
21
|
+
},
|
|
22
|
+
"registries": {}
|
|
23
|
+
}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
{
|
|
2
|
+
"projectName": "Admin User Management UI",
|
|
3
|
+
"generatedAt": "2026-03-04T00:00:00Z",
|
|
4
|
+
"updatedAt": "2026-03-04T00:20:00Z",
|
|
5
|
+
"summary": {
|
|
6
|
+
"totalBatches": 9,
|
|
7
|
+
"totalTasks": 12,
|
|
8
|
+
"completedTasks": 12,
|
|
9
|
+
"remainingTasks": 0
|
|
10
|
+
},
|
|
11
|
+
"batches": [
|
|
12
|
+
{
|
|
13
|
+
"id": "C1",
|
|
14
|
+
"description": "Localize all views to match Figma design (Korean text, layout fixes, pixel-perfect styling)",
|
|
15
|
+
"createdAt": "2026-03-04T00:00:00Z",
|
|
16
|
+
"progress": {
|
|
17
|
+
"total": 4,
|
|
18
|
+
"completed": 4,
|
|
19
|
+
"blocked": 0,
|
|
20
|
+
"pending": 0
|
|
21
|
+
},
|
|
22
|
+
"tasks": [
|
|
23
|
+
{
|
|
24
|
+
"id": "C1.1",
|
|
25
|
+
"title": "Localize types, constants, and mock data to Korean",
|
|
26
|
+
"description": "Update USER_TABLE_COLUMNS labels, BASIC_INFO_ROW labels, form field options, and mock user data to Korean matching the Figma design exactly.",
|
|
27
|
+
"status": "completed",
|
|
28
|
+
"complexity": "low",
|
|
29
|
+
"agent": "potenlab-small-coder",
|
|
30
|
+
"files": [
|
|
31
|
+
"template/src/features/user-management/types/index.ts",
|
|
32
|
+
"template/src/lib/mock-data.ts"
|
|
33
|
+
],
|
|
34
|
+
"blocked_by": []
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "C1.2",
|
|
38
|
+
"title": "Localize sidebar component to Korean and match Figma",
|
|
39
|
+
"description": "Change all sidebar navigation labels, admin subtitle, and logout text to Korean. Match Figma sidebar layout exactly.",
|
|
40
|
+
"status": "completed",
|
|
41
|
+
"complexity": "low",
|
|
42
|
+
"agent": "potenlab-small-coder",
|
|
43
|
+
"files": [
|
|
44
|
+
"template/src/components/layouts/app-sidebar.tsx"
|
|
45
|
+
],
|
|
46
|
+
"blocked_by": []
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "C1.3",
|
|
50
|
+
"title": "Localize dashboard page components to Korean and fix layout",
|
|
51
|
+
"description": "Update page-header, tab-navigation, search-bar, pagination-controls, badge, and page.tsx to Korean. Fix pagination button layout to match Figma (all 4 nav buttons together, then page indicator).",
|
|
52
|
+
"status": "completed",
|
|
53
|
+
"complexity": "high",
|
|
54
|
+
"agent": "potenlab-high-coder",
|
|
55
|
+
"files": [
|
|
56
|
+
"template/src/components/common/page-header.tsx",
|
|
57
|
+
"template/src/components/user-management/tab-navigation.tsx",
|
|
58
|
+
"template/src/components/user-management/search-bar.tsx",
|
|
59
|
+
"template/src/components/user-management/pagination-controls.tsx",
|
|
60
|
+
"template/src/components/user-management/user-table.tsx",
|
|
61
|
+
"template/src/app/page.tsx",
|
|
62
|
+
"template/src/components/ui/badge.tsx"
|
|
63
|
+
],
|
|
64
|
+
"blocked_by": []
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "C1.4",
|
|
68
|
+
"title": "Localize user detail page to Korean and match Figma",
|
|
69
|
+
"description": "Update user-detail-form section labels, toggle labels, and detail page header props to Korean.",
|
|
70
|
+
"status": "completed",
|
|
71
|
+
"complexity": "low",
|
|
72
|
+
"agent": "potenlab-small-coder",
|
|
73
|
+
"files": [
|
|
74
|
+
"template/src/components/user-management/user-detail-form.tsx",
|
|
75
|
+
"template/src/app/users/[id]/page.tsx"
|
|
76
|
+
],
|
|
77
|
+
"blocked_by": []
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "C2",
|
|
83
|
+
"description": "Fix sidebar to match Figma design — remove parent icons, add sub-item icons, fix selected state styling",
|
|
84
|
+
"createdAt": "2026-03-04T00:02:00Z",
|
|
85
|
+
"progress": {
|
|
86
|
+
"total": 1,
|
|
87
|
+
"completed": 1,
|
|
88
|
+
"blocked": 0,
|
|
89
|
+
"pending": 0
|
|
90
|
+
},
|
|
91
|
+
"tasks": [
|
|
92
|
+
{
|
|
93
|
+
"id": "C2.1",
|
|
94
|
+
"title": "Fix sidebar icons and selected state to match Figma design",
|
|
95
|
+
"description": "1) Update SidebarSubItem type in types/index.ts to include optional icon field (LucideIcon). Make SidebarNavItem.icon optional. 2) In app-sidebar.tsx: remove icons from parent accordion triggers (사용자, 매치, 관리자) — only 홈 keeps its Home icon. 3) Add icons to each sub-item: 사용자관리→UserRound, 매치 관리→LayoutGrid, 공지사항 관리→Megaphone, 신고 관리→ShieldAlert, 약관 관리→ScrollText. 4) Fix selected sub-item state: replace dot indicator + bg-sidebar-selected with bg-[#EEF2F6] rounded-[4px] text-black. Non-selected sub-items use text-[#5A5E6A]. 5) Sub-items should be wrapped in px-[8px] container with inner px-[14px] py-[8px] gap-[10px] and h-[44px]. 6) Accordion trigger text should be text-[#5A5E6A] with font-inter text-[16px]. 7) The accordion chevron should be on the right, size-6 (24px). 8) Footer logout should be centered with border-t, py-[20px].",
|
|
96
|
+
"status": "completed",
|
|
97
|
+
"complexity": "high",
|
|
98
|
+
"agent": "potenlab-high-coder",
|
|
99
|
+
"files": [
|
|
100
|
+
"template/src/types/index.ts",
|
|
101
|
+
"template/src/components/layouts/app-sidebar.tsx"
|
|
102
|
+
],
|
|
103
|
+
"blocked_by": []
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "C3",
|
|
109
|
+
"description": "Fix sidebar layout — add full-width header/footer dividers matching Figma screenshot exactly",
|
|
110
|
+
"createdAt": "2026-03-04T00:04:00Z",
|
|
111
|
+
"progress": {
|
|
112
|
+
"total": 1,
|
|
113
|
+
"completed": 1,
|
|
114
|
+
"blocked": 0,
|
|
115
|
+
"pending": 0
|
|
116
|
+
},
|
|
117
|
+
"tasks": [
|
|
118
|
+
{
|
|
119
|
+
"id": "C3.1",
|
|
120
|
+
"title": "Restructure sidebar layout for full-width dividers",
|
|
121
|
+
"description": "Restructure app-sidebar.tsx layout from single <nav> with p-6 to 3 separate sections so dividers span full width. Header: own div with border-b border-[#E2E8F0] py-[20px] px-[16px]. Navigation: flex-1 overflow-y-auto with inner padding. Footer: own div with border-t border-[#E2E8F0] py-[20px]. The border-bottom on header and border-top on footer must be full-width (edge to edge) matching the Figma screenshot.",
|
|
122
|
+
"status": "completed",
|
|
123
|
+
"complexity": "low",
|
|
124
|
+
"agent": "potenlab-small-coder",
|
|
125
|
+
"files": [
|
|
126
|
+
"template/src/components/layouts/app-sidebar.tsx"
|
|
127
|
+
],
|
|
128
|
+
"blocked_by": []
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "C4",
|
|
134
|
+
"description": "Replace all font-inter with font-pretendard across all component files",
|
|
135
|
+
"createdAt": "2026-03-04T00:06:00Z",
|
|
136
|
+
"progress": {
|
|
137
|
+
"total": 1,
|
|
138
|
+
"completed": 1,
|
|
139
|
+
"blocked": 0,
|
|
140
|
+
"pending": 0
|
|
141
|
+
},
|
|
142
|
+
"tasks": [
|
|
143
|
+
{
|
|
144
|
+
"id": "C4.1",
|
|
145
|
+
"title": "Replace font-inter with font-pretendard in all components",
|
|
146
|
+
"description": "Replace every occurrence of 'font-inter' with 'font-pretendard' in these files: 1) template/src/components/layouts/app-sidebar.tsx (4 occurrences), 2) template/src/components/ui/accordion.tsx (1 occurrence), 3) template/src/components/ui/button.tsx (2 occurrences), 4) template/src/components/ui/input.tsx (1 occurrence), 5) template/src/components/ui/select.tsx (1 occurrence), 6) template/src/components/ui/badge.tsx (1 occurrence). Use replace_all on each file to change 'font-inter' to 'font-pretendard'.",
|
|
147
|
+
"status": "completed",
|
|
148
|
+
"complexity": "high",
|
|
149
|
+
"agent": "potenlab-high-coder",
|
|
150
|
+
"files": [
|
|
151
|
+
"template/src/components/layouts/app-sidebar.tsx",
|
|
152
|
+
"template/src/components/ui/accordion.tsx",
|
|
153
|
+
"template/src/components/ui/button.tsx",
|
|
154
|
+
"template/src/components/ui/input.tsx",
|
|
155
|
+
"template/src/components/ui/select.tsx",
|
|
156
|
+
"template/src/components/ui/badge.tsx"
|
|
157
|
+
],
|
|
158
|
+
"blocked_by": []
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "C5",
|
|
164
|
+
"description": "Extract DashboardLayout component from app/layout.tsx into components/layouts/",
|
|
165
|
+
"createdAt": "2026-03-04T00:10:00Z",
|
|
166
|
+
"progress": {
|
|
167
|
+
"total": 1,
|
|
168
|
+
"completed": 1,
|
|
169
|
+
"blocked": 0,
|
|
170
|
+
"pending": 0
|
|
171
|
+
},
|
|
172
|
+
"tasks": [
|
|
173
|
+
{
|
|
174
|
+
"id": "C5.1",
|
|
175
|
+
"title": "Create DashboardLayout component and simplify app/layout.tsx",
|
|
176
|
+
"description": "1) CREATE template/src/components/layouts/dashboard-layout.tsx — a client-free server component that composes AppSidebar + ContentLayout. It accepts { children: React.ReactNode } and renders: <><AppSidebar /><main id='main-content'><ContentLayout>{children}</ContentLayout></main></>. Include the skip-to-content <a> link. 2) MODIFY template/src/app/layout.tsx — remove AppSidebar, ContentLayout, and skip-link imports. Import DashboardLayout from @/components/layouts/dashboard-layout. Render <DashboardLayout>{children}</DashboardLayout> inside <body>. Keep metadata, font config, and <html>/<head>/<body> tags in layout.tsx.",
|
|
177
|
+
"status": "completed",
|
|
178
|
+
"complexity": "low",
|
|
179
|
+
"agent": "potenlab-small-coder",
|
|
180
|
+
"files": [
|
|
181
|
+
"template/src/components/layouts/dashboard-layout.tsx",
|
|
182
|
+
"template/src/app/layout.tsx"
|
|
183
|
+
],
|
|
184
|
+
"blocked_by": []
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": "C6",
|
|
190
|
+
"description": "Extract reusable FormField and LabeledSwitch components from user-detail-form into components/common/",
|
|
191
|
+
"createdAt": "2026-03-04T00:14:00Z",
|
|
192
|
+
"progress": {
|
|
193
|
+
"total": 1,
|
|
194
|
+
"completed": 1,
|
|
195
|
+
"blocked": 0,
|
|
196
|
+
"pending": 0
|
|
197
|
+
},
|
|
198
|
+
"tasks": [
|
|
199
|
+
{
|
|
200
|
+
"id": "C6.1",
|
|
201
|
+
"title": "Create reusable FormField and LabeledSwitch components, refactor user-detail-form to use them",
|
|
202
|
+
"description": "1) CREATE template/src/components/common/form-field.tsx — generic reusable form field. 2) CREATE template/src/components/common/labeled-switch.tsx — reusable labeled toggle. 3) MODIFY template/src/components/user-management/user-detail-form.tsx to use these new components. See detailed spec in agent prompt.",
|
|
203
|
+
"status": "completed",
|
|
204
|
+
"complexity": "high",
|
|
205
|
+
"agent": "potenlab-high-coder",
|
|
206
|
+
"files": [
|
|
207
|
+
"template/src/components/common/form-field.tsx",
|
|
208
|
+
"template/src/components/common/labeled-switch.tsx",
|
|
209
|
+
"template/src/components/user-management/user-detail-form.tsx"
|
|
210
|
+
],
|
|
211
|
+
"blocked_by": []
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"id": "C7",
|
|
217
|
+
"description": "Fix FormField select trigger padding — balance left/right padding for proper justify-between",
|
|
218
|
+
"createdAt": "2026-03-04T00:16:00Z",
|
|
219
|
+
"progress": {
|
|
220
|
+
"total": 1,
|
|
221
|
+
"completed": 1,
|
|
222
|
+
"blocked": 0,
|
|
223
|
+
"pending": 0
|
|
224
|
+
},
|
|
225
|
+
"tasks": [
|
|
226
|
+
{
|
|
227
|
+
"id": "C7.1",
|
|
228
|
+
"title": "Fix SelectTrigger right padding in FormField component",
|
|
229
|
+
"description": "The base SelectTrigger has px-4 pr-12 (16px left, 48px right), creating unbalanced padding. Override with pr-4 on the SelectTrigger className in form-field.tsx so left and right padding match at 16px. twMerge in cn() handles the override.",
|
|
230
|
+
"status": "completed",
|
|
231
|
+
"complexity": "low",
|
|
232
|
+
"agent": "potenlab-small-coder",
|
|
233
|
+
"files": [
|
|
234
|
+
"template/src/components/common/form-field.tsx"
|
|
235
|
+
],
|
|
236
|
+
"blocked_by": []
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"id": "C8",
|
|
242
|
+
"description": "Add default upload state to ProfileImages with file input support",
|
|
243
|
+
"createdAt": "2026-03-04T00:18:00Z",
|
|
244
|
+
"progress": {
|
|
245
|
+
"total": 1,
|
|
246
|
+
"completed": 1,
|
|
247
|
+
"blocked": 0,
|
|
248
|
+
"pending": 0
|
|
249
|
+
},
|
|
250
|
+
"tasks": [
|
|
251
|
+
{
|
|
252
|
+
"id": "C8.1",
|
|
253
|
+
"title": "Add default upload state to ProfileImages with file input support",
|
|
254
|
+
"description": "Add maxImages, editable, and onImageUpload props to ProfileImages. Render empty placeholder slots with dashed border and ImagePlus icon when editable. Wire up file input, preview URL generation, and state management through UserDetailForm and UserDetail.",
|
|
255
|
+
"status": "completed",
|
|
256
|
+
"complexity": "high",
|
|
257
|
+
"agent": "potenlab-high-coder",
|
|
258
|
+
"files": [
|
|
259
|
+
"template/src/components/user-management/profile-images.tsx",
|
|
260
|
+
"template/src/components/user-management/user-detail-form.tsx",
|
|
261
|
+
"template/src/features/user-management/components/user-detail.tsx"
|
|
262
|
+
],
|
|
263
|
+
"blocked_by": []
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"id": "C9",
|
|
269
|
+
"description": "Refactor UserDetailForm to use react-hook-form — useForm in parent, Controller in form component",
|
|
270
|
+
"createdAt": "2026-03-04T00:20:00Z",
|
|
271
|
+
"progress": {
|
|
272
|
+
"total": 1,
|
|
273
|
+
"completed": 1,
|
|
274
|
+
"blocked": 0,
|
|
275
|
+
"pending": 0
|
|
276
|
+
},
|
|
277
|
+
"tasks": [
|
|
278
|
+
{
|
|
279
|
+
"id": "C9.1",
|
|
280
|
+
"title": "Refactor user detail form to use react-hook-form with useForm in parent component",
|
|
281
|
+
"description": "Integrate react-hook-form (already installed) into the user detail page. 1) Add UserDetailFormValues type in types/index.ts. 2) Replace useState-based form state in user-detail.tsx with useForm(). 3) Refactor user-detail-form.tsx to accept form methods and use Controller.",
|
|
282
|
+
"status": "completed",
|
|
283
|
+
"complexity": "high",
|
|
284
|
+
"agent": "potenlab-high-coder",
|
|
285
|
+
"files": [
|
|
286
|
+
"template/src/features/user-management/types/index.ts",
|
|
287
|
+
"template/src/features/user-management/components/user-detail.tsx",
|
|
288
|
+
"template/src/components/user-management/user-detail-form.tsx"
|
|
289
|
+
],
|
|
290
|
+
"blocked_by": []
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
}
|