pixelize-design-library 2.2.199 → 2.2.201
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/.cursor/TASK-SETUP.md +43 -0
- package/.cursor/agents/be-impl.md +37 -0
- package/.cursor/agents/fe-impl.md +39 -0
- package/.cursor/agents/task-plan.md +56 -0
- package/.cursor/agents/test-create.md +31 -0
- package/.cursor/agents/test-exec.md +26 -0
- package/.cursor/hooks/task-hint.env +1 -0
- package/.cursor/hooks/task-skill-nudge.sh +71 -0
- package/.cursor/hooks/task-slash-guard.sh +31 -0
- package/.cursor/hooks.json +13 -0
- package/.cursor/modules/buttons/MODULE.md +13 -0
- package/.cursor/modules/cards/MODULE.md +13 -0
- package/.cursor/modules/charts/MODULE.md +13 -0
- package/.cursor/modules/common/MODULE.md +13 -0
- package/.cursor/modules/contact-auth/MODULE.md +13 -0
- package/.cursor/modules/data-display/MODULE.md +13 -0
- package/.cursor/modules/feedback/MODULE.md +14 -0
- package/.cursor/modules/form/MODULE.md +13 -0
- package/.cursor/modules/inputs-basic/MODULE.md +13 -0
- package/.cursor/modules/inputs-date-file/MODULE.md +13 -0
- package/.cursor/modules/inputs-select/MODULE.md +13 -0
- package/.cursor/modules/inputs-toggle/MODULE.md +13 -0
- package/.cursor/modules/kanban/MODULE.md +14 -0
- package/.cursor/modules/layout-navigation/MODULE.md +14 -0
- package/.cursor/modules/overlays/MODULE.md +13 -0
- package/.cursor/modules/playground/MODULE.md +15 -0
- package/.cursor/modules/table/MODULE.md +15 -0
- package/.cursor/modules/theme/MODULE.md +15 -0
- package/.cursor/modules/types-exports/MODULE.md +17 -0
- package/.cursor/modules/utils-hooks/MODULE.md +13 -0
- package/.cursor/pixelize-task-statusline.sh +64 -0
- package/.cursor/plans/blocked/.gitkeep +0 -0
- package/.cursor/plans/current.md +0 -0
- package/.cursor/plans/done/.gitkeep +0 -0
- package/.cursor/rules +31 -0
- package/.cursor/skills/task/SKILL.md +167 -0
- package/CLAUDE.md +122 -0
- package/package.json +1 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Task pipeline — one-time developer setup
|
|
2
|
+
|
|
3
|
+
Hooks in this repo work automatically after clone.
|
|
4
|
+
|
|
5
|
+
## Recommended (global skills + status line)
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone git@github.com:pixelize-tech/pixelize-cursor-setup.git
|
|
9
|
+
cd pixelize-cursor-setup && ./install.sh
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Installs all cross-repo `/` skills (`crm-task`, `social-task`, …), status line, and `cli-config.json`. Restart Cursor.
|
|
13
|
+
|
|
14
|
+
Repo: https://github.com/pixelize-tech/pixelize-cursor-setup
|
|
15
|
+
|
|
16
|
+
## Manual status line only
|
|
17
|
+
|
|
18
|
+
1. Copy the script to your user Cursor folder:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cp .cursor/pixelize-task-statusline.sh ~/.cursor/pixelize-task-statusline.sh
|
|
22
|
+
chmod +x ~/.cursor/pixelize-task-statusline.sh
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
2. Add to `~/.cursor/cli-config.json` (merge if the file already exists):
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"statusLine": {
|
|
30
|
+
"type": "command",
|
|
31
|
+
"command": "~/.cursor/pixelize-task-statusline.sh",
|
|
32
|
+
"padding": 0
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
3. Restart Cursor or open a new Agent chat.
|
|
38
|
+
|
|
39
|
+
## Task skill (feature work)
|
|
40
|
+
|
|
41
|
+
- Pick **`task`** from the **`/`** menu, then describe your goal.
|
|
42
|
+
- Do **not** type `/task` in the message body — a hook will block it (zero tokens wasted).
|
|
43
|
+
- See repo `CLAUDE.md` for the cross-repo skill name if applicable.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: be-impl
|
|
3
|
+
description: >-
|
|
4
|
+
Handles build, exports, and publish pipeline changes. Use in @task phase 2
|
|
5
|
+
when plan includes index.ts, tsc build, or npm publish steps.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the lib-impl (build/export) agent for **Pixelize Design Library** (Micro-Components).
|
|
9
|
+
|
|
10
|
+
Note: This repo has no backend API. This agent covers build pipeline, not crm-service.
|
|
11
|
+
|
|
12
|
+
## When invoked
|
|
13
|
+
|
|
14
|
+
1. Read CLAUDE.md and .cursor/rules
|
|
15
|
+
2. Read the plan from .cursor/plans/current.md
|
|
16
|
+
3. Read `.cursor/modules/types-exports/MODULE.md`
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
1. Work only inside Micro-Components
|
|
21
|
+
2. Update `src/index.ts` exports
|
|
22
|
+
3. Verify `tsconfig.json` and build output in `dist/`
|
|
23
|
+
4. Run `npm run build` to validate
|
|
24
|
+
5. Update MODULE.md if export surface changes
|
|
25
|
+
6. Do not run `npm publish` unless user explicitly requests
|
|
26
|
+
|
|
27
|
+
## Output
|
|
28
|
+
|
|
29
|
+
- Done / Blocked lists
|
|
30
|
+
- Files changed
|
|
31
|
+
- Build result (pass/fail)
|
|
32
|
+
|
|
33
|
+
## Rules
|
|
34
|
+
|
|
35
|
+
- Never edit `dist/` directly — change `src/` and rebuild
|
|
36
|
+
- Never commit without user confirmation
|
|
37
|
+
- Never break existing exports without noting semver impact
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fe-impl
|
|
3
|
+
description: >-
|
|
4
|
+
Implements component changes from an approved plan. Use in @task phase 2
|
|
5
|
+
for UI components, theme, and playground pages.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the fe-impl (component implementation) agent for **Pixelize Design Library** (Micro-Components).
|
|
9
|
+
|
|
10
|
+
## When invoked
|
|
11
|
+
|
|
12
|
+
1. Read CLAUDE.md and .cursor/rules
|
|
13
|
+
2. Read the plan from .cursor/plans/current.md — do not replan
|
|
14
|
+
3. Read `.cursor/modules/<domain>/MODULE.md` for every domain you will touch
|
|
15
|
+
4. Read one existing similar component before starting
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. Work only inside Micro-Components
|
|
20
|
+
2. Implement in `src/Components/<Name>/`
|
|
21
|
+
3. Add/update demo in `src/Pages/` if needed for playground
|
|
22
|
+
4. Export from `src/index.ts` for public API
|
|
23
|
+
5. Use Chakra + theme tokens from `src/Theme/` — match existing patterns
|
|
24
|
+
6. Always handle null/undefined, loading, and error states
|
|
25
|
+
7. Update `.cursor/modules/<domain>/MODULE.md` after implementation
|
|
26
|
+
8. Keep changes minimal — no scope creep
|
|
27
|
+
|
|
28
|
+
## Output
|
|
29
|
+
|
|
30
|
+
- Done: bullet list of completed tasks
|
|
31
|
+
- Files changed: every file path with one-line description
|
|
32
|
+
- Blocked: anything not completed with exact reason
|
|
33
|
+
- Notes for test-create: what needs Jest coverage
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
|
|
37
|
+
- Never add app-specific CRM/API logic to library components
|
|
38
|
+
- Never commit
|
|
39
|
+
- No placeholder files or fake demo data
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-plan
|
|
3
|
+
description: >-
|
|
4
|
+
Creates implementation plans from user goals. Use in @task phase 1, or when
|
|
5
|
+
a structured plan is needed before coding.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the task-plan agent for **Pixelize Design Library** (Micro-Components). Produce a concrete actionable plan — do not write code.
|
|
9
|
+
|
|
10
|
+
## When invoked
|
|
11
|
+
|
|
12
|
+
1. Read CLAUDE.md and .cursor/rules
|
|
13
|
+
2. Read .cursor/plans/current.md if it exists — user may be resuming
|
|
14
|
+
3. Read `.cursor/modules/<domain>/MODULE.md` for every component domain touched
|
|
15
|
+
4. Ask a question only if the goal is genuinely ambiguous
|
|
16
|
+
5. Output a plan implementation agents can execute without replanning
|
|
17
|
+
|
|
18
|
+
## Plan format
|
|
19
|
+
|
|
20
|
+
# [Component / task title]
|
|
21
|
+
|
|
22
|
+
## Goal
|
|
23
|
+
|
|
24
|
+
One paragraph
|
|
25
|
+
|
|
26
|
+
## Type
|
|
27
|
+
|
|
28
|
+
feat / fix / refactor / chore
|
|
29
|
+
|
|
30
|
+
## Scope
|
|
31
|
+
|
|
32
|
+
- In scope: ...
|
|
33
|
+
- Out of scope: ...
|
|
34
|
+
- Agents needed: fe-impl / lib-impl (build-export) / both
|
|
35
|
+
|
|
36
|
+
## Tasks
|
|
37
|
+
|
|
38
|
+
### Component (fe-impl)
|
|
39
|
+
|
|
40
|
+
- [ ] Task with file paths under `src/Components/` and acceptance criteria
|
|
41
|
+
|
|
42
|
+
### Build / export (lib-impl)
|
|
43
|
+
|
|
44
|
+
- [ ] index.ts export, build, version bump if publishing
|
|
45
|
+
|
|
46
|
+
### Tests
|
|
47
|
+
|
|
48
|
+
- [ ] Jest test files and coverage targets
|
|
49
|
+
|
|
50
|
+
## Risks / assumptions
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
|
|
54
|
+
- Never write production code
|
|
55
|
+
- Save approved plan to .cursor/plans/current.md
|
|
56
|
+
- End with: Ready for implementation — list which agents run next
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-create
|
|
3
|
+
description: >-
|
|
4
|
+
Writes Jest tests for completed component work. Use in @task phase 3a
|
|
5
|
+
after fe-impl, before test-exec.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the test-create agent for **Pixelize Design Library** (Micro-Components).
|
|
9
|
+
|
|
10
|
+
## When invoked
|
|
11
|
+
|
|
12
|
+
1. Read the plan from .cursor/plans/current.md
|
|
13
|
+
2. Read fe-impl output summary
|
|
14
|
+
3. Read existing `*.test.tsx` files to match conventions
|
|
15
|
+
|
|
16
|
+
## Coverage required
|
|
17
|
+
|
|
18
|
+
- Happy path render
|
|
19
|
+
- Minimum 2 edge cases (empty, disabled, error props)
|
|
20
|
+
- 1 regression test per bugfix
|
|
21
|
+
|
|
22
|
+
## Output
|
|
23
|
+
|
|
24
|
+
- Tests added/updated: file paths and what each covers
|
|
25
|
+
- Run command: `npm test` from Micro-Components root
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
- Never change production code
|
|
30
|
+
- Never commit
|
|
31
|
+
- Follow existing Jest + Testing Library patterns
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-exec
|
|
3
|
+
description: >-
|
|
4
|
+
Runs Jest tests after test-create. Use in @task phase 3b.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are the test-exec agent for **Pixelize Design Library** (Micro-Components).
|
|
8
|
+
|
|
9
|
+
## When invoked
|
|
10
|
+
|
|
11
|
+
1. Read test-create output
|
|
12
|
+
2. Run `npm test` from Micro-Components root
|
|
13
|
+
3. Report pass/fail with relevant failure output
|
|
14
|
+
|
|
15
|
+
## Output
|
|
16
|
+
|
|
17
|
+
- Test run result: pass / fail
|
|
18
|
+
- Failed test names and error snippets if any
|
|
19
|
+
- Recommendation: proceed to review or fix
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- Never commit
|
|
24
|
+
- Never modify production code unless fixing test failures is in scope
|
|
25
|
+
- Never disable, skip, or comment out tests to make them pass
|
|
26
|
+
- Never change test assertions to match wrong behavior — fix the implementation
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
REPO_HINT="/ → task (this repo) or / → design-task"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Block first message without / task skill; flag session for status-line warning. Zero tokens.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
STATE_FILE="${HOME}/.cursor/pixelize-skill-session-state.json"
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
7
|
+
# shellcheck disable=SC1091
|
|
8
|
+
source "$SCRIPT_DIR/task-hint.env"
|
|
9
|
+
|
|
10
|
+
INPUT=$(cat)
|
|
11
|
+
PROMPT=$(echo "$INPUT" | jq -r '.prompt // empty')
|
|
12
|
+
CONV_ID=$(echo "$INPUT" | jq -r '.conversation_id // empty')
|
|
13
|
+
|
|
14
|
+
if [[ -z "$CONV_ID" ]]; then
|
|
15
|
+
echo '{"continue":true}'
|
|
16
|
+
exit 0
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
has_skill() {
|
|
20
|
+
echo "$PROMPT" | grep -qiE '^\s*/(task|crm-task|social-task|tickets-task|crm-mobile-task|design-task|hrms-task)\b'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
ensure_state_file() {
|
|
24
|
+
mkdir -p "$(dirname "$STATE_FILE")"
|
|
25
|
+
[[ -f "$STATE_FILE" ]] || echo '{}' >"$STATE_FILE"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
update_state() {
|
|
29
|
+
local first_nudge="$1"
|
|
30
|
+
local chatting="$2"
|
|
31
|
+
ensure_state_file
|
|
32
|
+
local tmp
|
|
33
|
+
tmp=$(mktemp)
|
|
34
|
+
jq --arg id "$CONV_ID" \
|
|
35
|
+
--argjson first "$first_nudge" \
|
|
36
|
+
--argjson chatting "$chatting" \
|
|
37
|
+
'.[$id] = {first_nudge_done: $first, chatting_without_skill: $chatting}' \
|
|
38
|
+
"$STATE_FILE" >"$tmp" && mv "$tmp" "$STATE_FILE"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if has_skill; then
|
|
42
|
+
if [[ -f "$STATE_FILE" ]] && jq -e --arg id "$CONV_ID" '.[$id]' "$STATE_FILE" >/dev/null 2>&1; then
|
|
43
|
+
update_state true false
|
|
44
|
+
fi
|
|
45
|
+
echo '{"continue":true}'
|
|
46
|
+
exit 0
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
ensure_state_file
|
|
50
|
+
FIRST_DONE=$(jq -r --arg id "$CONV_ID" '.[$id].first_nudge_done // false' "$STATE_FILE")
|
|
51
|
+
|
|
52
|
+
if [[ "$FIRST_DONE" != "true" ]]; then
|
|
53
|
+
update_state true false
|
|
54
|
+
MSG="━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
55
|
+
NO TASK SKILL LOADED
|
|
56
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
57
|
+
|
|
58
|
+
You are chatting WITHOUT a pipeline skill.
|
|
59
|
+
|
|
60
|
+
For feature / bugfix work, use the / menu first:
|
|
61
|
+
${REPO_HINT}
|
|
62
|
+
|
|
63
|
+
Then type your goal in the SAME input (do not type the skill name).
|
|
64
|
+
|
|
65
|
+
Send this message AGAIN to continue without a skill."
|
|
66
|
+
jq -n --arg msg "$MSG" '{continue: false, user_message: $msg}'
|
|
67
|
+
exit 0
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
update_state true true
|
|
71
|
+
echo '{"continue":true}'
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Blocks plain-text task skill names (not / menu picks). Zero API tokens.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck disable=SC1091
|
|
7
|
+
source "$SCRIPT_DIR/task-hint.env"
|
|
8
|
+
|
|
9
|
+
INPUT=$(cat)
|
|
10
|
+
PROMPT=$(echo "$INPUT" | jq -r '.prompt // empty')
|
|
11
|
+
|
|
12
|
+
# Menu picker embeds "/tickets-task ..." in prompt; attachments stay empty.
|
|
13
|
+
# Only block plain-text mistakes: skill name at start without a leading slash.
|
|
14
|
+
if echo "$PROMPT" | grep -qiE '^\s*@?(task|crm-task|social-task|tickets-task|crm-mobile-task|design-task|hrms-task)\b'; then
|
|
15
|
+
MSG="⚠️ TASK PIPELINE NOT ACTIVE
|
|
16
|
+
|
|
17
|
+
You typed a task command as plain text. The skill was NOT loaded.
|
|
18
|
+
|
|
19
|
+
To run the pipeline:
|
|
20
|
+
1. Click the chat input
|
|
21
|
+
2. Type / and pick the skill from the menu
|
|
22
|
+
3. Send your goal
|
|
23
|
+
|
|
24
|
+
For this repo use: ${REPO_HINT}
|
|
25
|
+
|
|
26
|
+
Do not type task skill names in the message body — use the / menu picker."
|
|
27
|
+
jq -n --arg msg "$MSG" '{continue: false, user_message: $msg}'
|
|
28
|
+
exit 0
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
echo '{"continue":true}'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Cards
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Card, PaymentCard, ProfileCard, ProductCard, ProductDetails.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Card/`, `Card/PaymentCard/`, `ProfileCard/`, `ProductCard/`, `ProductDetails/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- ProfileCard has Header/Body/Footer subcomponents
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Charts
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Apexcharts wrappers: Bar, Line, Pie, Polar.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Apexcharts/ApexBarChart/`, `ApexLineChart/`, `ApexPieChart/`, `ApexPolarCharts/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- react-apexcharts; colors from theme chart tokens
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Common Helpers
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Internal shared helpers under `Components/Common/` — not all exported from index.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Common/` — ErrorComponent, FormLabel, etc.
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- Internal use by other components; export only if needed publicly
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Feedback
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Loading, Skeletons, ProgressBar, Notification, FeedbackForm.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Loading/`, `Skeletons/`, `ProgressBar/`, `Notification/`, `FeedbackForm/`
|
|
10
|
+
- `src/services/feedback.ts`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- FeedbackForm may POST to account API in consumer apps — keep props generic
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Basic Inputs
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
TextInput, PhoneNumberInput, InputTextArea, NoteTextArea, NumberInput, PinInput, PinInputs.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Input/`, `InputTextArea/`, `NoteTextArea/`, `NumberInput/`, `PinInput/`, `PinInputs/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- InputSwitch in `Input/Switch/`
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Date & Files
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
ThemeDatePicker, FileUpload, FileUploader, Editor (jodit-react).
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/DatePicker/`, `FileUpload/`, `FileUploader/`, `Editor/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- DatePicker themed for brand tokens
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Select & Search
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Select, SearchSelect, SelectSearch, MultiSelect, Dropdown, Search.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Select/`, `SearchSelect/`, `SelectSearch/`, `MultiSelect/`, `Dropdown/`, `Search/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- SearchSelect has performance tests; virtualize for large lists
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Kanban
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
KanbanBoard with drag-and-drop columns and KanbanActions.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/KanbanBoard/`, `KanbanActions/`
|
|
10
|
+
- Tests: `KanbanBoard.test.tsx`, `AccountCard.test.tsx`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- Uses @hello-pangea/dnd; MeasuredItem for layout
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Layout & Navigation
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Accordion, Breadcrumbs, NavigationBar, SideBar, Header, Drawer, FilterSidebar.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Accordion/`, `Breadcrumbs/`, `NavigationBar/`, `SideBar/`, `Header/`, `Drawer/`, `FilterSidebar/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- SideBar/Header have sub-`components/` folders
|
|
14
|
+
- Used by crm-frontend, account-frontend sidebars
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Overlays
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Modal, AlertDialog, ToolTip, Toaster (+ `useToaster` hook).
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Modal/`, `AlertDialog/`, `ToolTip/`, `Toaster/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- Modal exports ModalHeader, ModalBody, ModalFooter subcomponents
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Playground
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Vite dev playground — demo pages not published to npm.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Pages/` (40 demo files), `src/App.tsx`, `src/Layout.tsx`
|
|
10
|
+
- `npm start` launches playground
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- Demo API calls to dev.pixelizetech.com are playground-only
|
|
15
|
+
- Not included in `dist/` publish output
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Table
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Data table with virtualization, filters, pagination, column management.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Table/`, `Table/Components/`, `Table/TableSettings/`
|
|
10
|
+
- Tests: `TableBody.virtualize.test.tsx`, `ManageColumns.test.tsx`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- Core CRM list UI — high change frequency
|
|
15
|
+
- `src/Utils/table.ts` helpers
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Theme
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Seven brand presets (Default, Dark, Emerald, Meadow, Radiant, Rosewood, Skyline, Slate), `useCustomTheme`, `withTheme` HOC, token builders.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Theme/`, `src/withTheme.tsx`
|
|
10
|
+
- Export: `useCustomTheme`, `ThemesList`, `withTheme`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- Consumers wrap app with `withTheme`; use theme tokens not hardcoded colors
|
|
15
|
+
- Chart colors from theme via `chartColorsFromTheme`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Types & Exports
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Public API surface — semver-sensitive.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/index.ts` (~50 exports)
|
|
10
|
+
- `src/types/`
|
|
11
|
+
- `src/withTheme.tsx`
|
|
12
|
+
|
|
13
|
+
## Key rules
|
|
14
|
+
|
|
15
|
+
- Every public component must be exported here
|
|
16
|
+
- Breaking export changes require major version bump
|
|
17
|
+
- Run `npm run build` after export changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Utils & Hooks
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Shared utilities and hooks: debounce, table helpers, preferences.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Utils/table.ts`, `src/Hooks/usePreferences.ts`, `src/services/feedback.ts`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- `debounce` exported from index.ts
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Local status line only — never sent to the model. See .cursor/TASK-SETUP.md
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
STATE_FILE="${HOME}/.cursor/pixelize-skill-session-state.json"
|
|
6
|
+
|
|
7
|
+
payload=$(cat)
|
|
8
|
+
dir=$(echo "$payload" | jq -r ".cwd // .workspace.current_dir // empty")
|
|
9
|
+
session_id=$(echo "$payload" | jq -r ".session_id // empty")
|
|
10
|
+
base=$(basename "$dir")
|
|
11
|
+
|
|
12
|
+
show_no_skill_warning=false
|
|
13
|
+
if [[ -n "$session_id" && -f "$STATE_FILE" ]]; then
|
|
14
|
+
if jq -e --arg id "$session_id" '.[$id].chatting_without_skill == true' "$STATE_FILE" >/dev/null 2>&1; then
|
|
15
|
+
show_no_skill_warning=true
|
|
16
|
+
fi
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
case "$base" in
|
|
20
|
+
account-frontend|account-service)
|
|
21
|
+
line1="/ → task (Account FE + BE)"
|
|
22
|
+
line2=""
|
|
23
|
+
;;
|
|
24
|
+
crm-frontend|crm-service)
|
|
25
|
+
line1="/ → task (this repo)"
|
|
26
|
+
line2="/ → crm-task (CRM FE + BE)"
|
|
27
|
+
;;
|
|
28
|
+
social-frontend|social-service)
|
|
29
|
+
line1="/ → task (this repo)"
|
|
30
|
+
line2="/ → social-task (Social FE + BE)"
|
|
31
|
+
;;
|
|
32
|
+
tickets-frontend)
|
|
33
|
+
line1="/ → task (this repo)"
|
|
34
|
+
line2="/ → tickets-task"
|
|
35
|
+
;;
|
|
36
|
+
crm-mobile)
|
|
37
|
+
line1="/ → task (this repo)"
|
|
38
|
+
line2="/ → crm-mobile-task"
|
|
39
|
+
;;
|
|
40
|
+
Micro-Components)
|
|
41
|
+
line1="/ → task (this repo)"
|
|
42
|
+
line2="/ → design-task"
|
|
43
|
+
;;
|
|
44
|
+
hrms)
|
|
45
|
+
line1="/ → task (this repo)"
|
|
46
|
+
line2="/ → hrms-task (HRMS FE + BE)"
|
|
47
|
+
;;
|
|
48
|
+
*)
|
|
49
|
+
line1="Open a Pixelize repo root for / → task"
|
|
50
|
+
line2=""
|
|
51
|
+
;;
|
|
52
|
+
esac
|
|
53
|
+
|
|
54
|
+
if [[ "$show_no_skill_warning" == "true" ]]; then
|
|
55
|
+
echo -e "\033[1;33m\033[7m ⚠ CHATTING WITHOUT TASK SKILL — use / menu ⚠ \033[0m"
|
|
56
|
+
echo -e "\033[1;33m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
echo -e "\033[1;33m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
|
|
60
|
+
echo -e "\033[1;33m FEATURE WORK → $line1\033[0m"
|
|
61
|
+
if [ -n "$line2" ]; then
|
|
62
|
+
echo -e "\033[1;33m Full pipeline → $line2\033[0m"
|
|
63
|
+
fi
|
|
64
|
+
echo -e "\033[1;33m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/.cursor/rules
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
## Session start
|
|
2
|
+
- Always read CLAUDE.md before starting any task
|
|
3
|
+
- Always read MODULE.md before touching a component family (`.cursor/modules/<domain>/MODULE.md`)
|
|
4
|
+
- Read one similar existing component before implementing
|
|
5
|
+
- Never invent a new pattern if one already exists
|
|
6
|
+
|
|
7
|
+
## Implementation
|
|
8
|
+
- Components live in `src/Components/<Name>/`
|
|
9
|
+
- Public API via `src/index.ts` only
|
|
10
|
+
- Demo pages in `src/Pages/` for playground — not published
|
|
11
|
+
- Never add CRM/app-specific API calls to library components
|
|
12
|
+
- Use theme tokens from `src/Theme/` — no hardcoded brand colors
|
|
13
|
+
- Add Jest tests for new behavior (`*.test.tsx`)
|
|
14
|
+
- Keep changes minimal — no scope creep
|
|
15
|
+
|
|
16
|
+
## Output quality
|
|
17
|
+
- Never create placeholder files unless explicitly asked
|
|
18
|
+
- Never use fake data, lorem ipsum, example.com, or demo seeds
|
|
19
|
+
- Never leave TODO comments — implement fully or report blocked
|
|
20
|
+
- Production-ready components with loading/error states where applicable
|
|
21
|
+
|
|
22
|
+
## Branch rules
|
|
23
|
+
- Always branch from **develop** — never from main
|
|
24
|
+
- Feature work: `feature/<domain>-<short-description>`
|
|
25
|
+
- Bug fixes: `fix/<domain>-<short-description>`
|
|
26
|
+
- Never commit directly to main
|
|
27
|
+
|
|
28
|
+
## Commit rules
|
|
29
|
+
- Never commit without explicit user confirmation
|
|
30
|
+
- Never run git push under any condition
|
|
31
|
+
- Never add Cursor co-author lines
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task
|
|
3
|
+
description: >-
|
|
4
|
+
Runs the Pixelize Design Library dev pipeline: task-plan → fe-impl → test-create → test-exec → review gate → commit. Use when the user invokes @task, /task, or requests component library delivery.
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Task Pipeline — Pixelize Design Library
|
|
9
|
+
|
|
10
|
+
Single library repo **Micro-Components** (`pixelize-design-library`). Module docs: `.cursor/modules/<domain>/MODULE.md`.
|
|
11
|
+
|
|
12
|
+
Run phases in order. Do not skip unless user opts out.
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
- [ ] 1. Task plan (agent: task-plan)
|
|
16
|
+
- [ ] 2. Implementation (agents: fe-impl + be-impl, parallel when both needed)
|
|
17
|
+
- [ ] 3a. Test creation (agent: test-create)
|
|
18
|
+
- [ ] 3b. Test execution (agent: test-exec)
|
|
19
|
+
- [ ] 4. Review gate (orchestrator — show diff, wait for user)
|
|
20
|
+
- [ ] 5. Commit (orchestrator only)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Before Starting
|
|
26
|
+
|
|
27
|
+
1. Read CLAUDE.md
|
|
28
|
+
2. Confirm user goal — feat / fix / refactor / chore
|
|
29
|
+
3. Tell user which phases apply
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Phase 1 — Task Plan
|
|
34
|
+
|
|
35
|
+
Agent: task-plan → `.cursor/agents/task-plan.md`
|
|
36
|
+
|
|
37
|
+
- Read `.cursor/modules/<domain>/MODULE.md` for touched component families
|
|
38
|
+
- Plan saved to `.cursor/plans/current.md`
|
|
39
|
+
- If current.md already exists — read it first, user may be resuming
|
|
40
|
+
|
|
41
|
+
Gate: do not start phase 2 until plan has concrete tasks.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Phase 2 — Implementation
|
|
46
|
+
|
|
47
|
+
| Plan says | Action |
|
|
48
|
+
|-----------|--------|
|
|
49
|
+
| Library only | Invoke fe-impl only |
|
|
50
|
+
| Both | Rare — fe-impl + test agents |
|
|
51
|
+
|
|
52
|
+
Pass `.cursor/plans/current.md` to each agent.
|
|
53
|
+
|
|
54
|
+
If blocked mid-task:
|
|
55
|
+
- Save progress to `.cursor/plans/blocked/<task-name>.md` with exact blocker details
|
|
56
|
+
- Stop pipeline and report to user
|
|
57
|
+
|
|
58
|
+
Gate: all required agents must report Done or Blocked before phase 3.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Phase 3 — Tests
|
|
63
|
+
|
|
64
|
+
3a: test-create → `.cursor/agents/test-create.md`
|
|
65
|
+
3b: test-exec → `.cursor/agents/test-exec.md`
|
|
66
|
+
|
|
67
|
+
Jest: `npm test` from repo root.
|
|
68
|
+
|
|
69
|
+
Gate: do not proceed to review if tests failed and not explicitly waived by user.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Phase 4 — Review Gate
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
git status
|
|
77
|
+
git diff
|
|
78
|
+
git diff --staged
|
|
79
|
+
git log -5 --oneline
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Run git status/diff. STOP and wait for user approval.
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
CHANGES READY TO COMMIT
|
|
86
|
+
|
|
87
|
+
Backend:
|
|
88
|
+
- path/to/file — what changed
|
|
89
|
+
|
|
90
|
+
Frontend:
|
|
91
|
+
- path/to/component — what changed
|
|
92
|
+
|
|
93
|
+
Tests:
|
|
94
|
+
- path/to/test — what it covers
|
|
95
|
+
|
|
96
|
+
MODULE.md updates:
|
|
97
|
+
- path/to/MODULE.md
|
|
98
|
+
|
|
99
|
+
Excluded:
|
|
100
|
+
- none
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
STOP. Wait for: "yes" / "commit" / "looks good" / "go ahead"
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
## Phase 5 — Commit
|
|
107
|
+
|
|
108
|
+
### Commit message format
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
<type>(<module>): <concise imperative title>
|
|
112
|
+
|
|
113
|
+
Backend:
|
|
114
|
+
- <specific change — file context>
|
|
115
|
+
|
|
116
|
+
Frontend:
|
|
117
|
+
- <specific change — file context>
|
|
118
|
+
|
|
119
|
+
Tests:
|
|
120
|
+
- <what is covered and where>
|
|
121
|
+
|
|
122
|
+
Config:
|
|
123
|
+
- <migrations, registry changes, config updates>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Commit steps
|
|
127
|
+
|
|
128
|
+
1. Scan diff — if .env or secrets found, warn user and ask if they want to include. Commit only on confirmation.
|
|
129
|
+
2. git add relevant files — state any exclusions clearly
|
|
130
|
+
3. git commit using HEREDOC — never add Cursor attribution lines
|
|
131
|
+
4. If Cursor injects co-author lines — amend immediately if unpushed
|
|
132
|
+
5. Verify: git status + git log -1 --format=full
|
|
133
|
+
6. Show commit hash to user
|
|
134
|
+
7. Move `.cursor/plans/current.md` → `.cursor/plans/done/<YYYY-MM-DD>-<title>.md`
|
|
135
|
+
|
|
136
|
+
Never run git push under any condition.
|
|
137
|
+
|
|
138
|
+
### Commit safety
|
|
139
|
+
|
|
140
|
+
- Never --no-verify unless user explicitly requests
|
|
141
|
+
- Never force-push any branch
|
|
142
|
+
- Nothing staged → skip commit, report clearly
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Final Report
|
|
147
|
+
|
|
148
|
+
| Phase | Status | Notes |
|
|
149
|
+
| -------- | -------------- | --------------------------------- |
|
|
150
|
+
| 1 Plan | done / skipped | saved to .cursor/plans/current.md |
|
|
151
|
+
| 2 Impl | fe / be / both | done / blocked |
|
|
152
|
+
| 3 Tests | create / exec | pass / fail / blocked |
|
|
153
|
+
| 4 Review | approved | confirmed by user |
|
|
154
|
+
| 5 Commit | done / skipped | hash if committed |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## User Opt-outs
|
|
159
|
+
|
|
160
|
+
| User says | Effect |
|
|
161
|
+
| ------------- | ----------------------------------------- |
|
|
162
|
+
| "plan only" | Stop after phase 1 |
|
|
163
|
+
| "no tests" | Skip phase 3 — confirm with user first |
|
|
164
|
+
| "no commit" | Stop after phase 4 review |
|
|
165
|
+
| "commit only" | Phase 4+5 only — still show diff and wait |
|
|
166
|
+
| "skip review" | Go straight to commit — confirm with user |
|
|
167
|
+
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Pixelize Design Library — Agent Guide
|
|
2
|
+
|
|
3
|
+
Rules for AI assistants working in **Micro-Components** (npm: `pixelize-design-library`).
|
|
4
|
+
|
|
5
|
+
## 1. App name and purpose
|
|
6
|
+
|
|
7
|
+
**Pixelize Design Library** — shared React UI component library and theme system for all Pixelize frontends. Published to npm; local Vite playground demos components in `src/Pages/`.
|
|
8
|
+
|
|
9
|
+
## 2. Stack
|
|
10
|
+
|
|
11
|
+
| Layer | Technology | Version |
|
|
12
|
+
| ------------- | ----------------------------------- | -------------- |
|
|
13
|
+
| Framework | React + TypeScript | 18.3.1 / 5.9.3 |
|
|
14
|
+
| UI base | Chakra UI + Emotion + Framer Motion | 2.8.2 |
|
|
15
|
+
| Build | `tsc` → `dist/` + CSS copy | — |
|
|
16
|
+
| Dev | Vite playground | 6.2.0 |
|
|
17
|
+
| Styling | Tailwind + global CSS | 3.4.17 |
|
|
18
|
+
| Tests | Jest + Testing Library | 29.7.0 |
|
|
19
|
+
| Package | `pixelize-design-library` | 2.2.x |
|
|
20
|
+
|
|
21
|
+
Not a monorepo — single package, one `package.json`.
|
|
22
|
+
|
|
23
|
+
## 3. Repo relationship
|
|
24
|
+
|
|
25
|
+
| Repo / package | Role |
|
|
26
|
+
| --------------------------- | ------------------------------------------------- |
|
|
27
|
+
| **Micro-Components** (here) | Source of `pixelize-design-library` npm package |
|
|
28
|
+
| **crm-frontend** | Consumer — `npm run pixelize` to update |
|
|
29
|
+
| **account-frontend** | Consumer |
|
|
30
|
+
| **social-frontend** | Consumer |
|
|
31
|
+
| **tickets-frontend** | Consumer |
|
|
32
|
+
| **crm-mobile** | Consumer (native-base overlap — check mobile) |
|
|
33
|
+
| **pixelize-authenticator** | Companion auth UI package (separate repo) |
|
|
34
|
+
|
|
35
|
+
No backend API in this repo. Demo pages may call dev APIs for playground only.
|
|
36
|
+
|
|
37
|
+
## 4. Folder structure (2 levels)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Micro-Components/
|
|
41
|
+
├── package.json, tsconfig.json, vite.config.ts
|
|
42
|
+
├── src/
|
|
43
|
+
│ ├── index.ts public exports (~50)
|
|
44
|
+
│ ├── withTheme.tsx HOC wrapper
|
|
45
|
+
│ ├── Components/ 57 component families
|
|
46
|
+
│ ├── Theme/ 7 brand presets + useCustomTheme
|
|
47
|
+
│ ├── Pages/ 40 Vite demo/playground pages
|
|
48
|
+
│ ├── Utils/, Hooks/, services/, types/
|
|
49
|
+
│ └── App.tsx, Layout.tsx playground shell
|
|
50
|
+
├── dist/ publish output (gitignored)
|
|
51
|
+
└── .cursor/modules/ MODULE.md per component domain
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 5. Dev commands
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm start # Vite playground
|
|
58
|
+
npm run build # tsc + copy CSS → dist/
|
|
59
|
+
npm test # Jest
|
|
60
|
+
npm run test:watch
|
|
61
|
+
npm run remove # strip dev artifacts from dist before publish
|
|
62
|
+
npm run package # version patch + build + publish
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 6. Module / component pattern
|
|
66
|
+
|
|
67
|
+
Follow the **Table** or **KanbanBoard** pattern for complex components:
|
|
68
|
+
|
|
69
|
+
| Step | Path |
|
|
70
|
+
| ---- | ---- |
|
|
71
|
+
| Component | `src/Components/<Name>/` |
|
|
72
|
+
| Subcomponents | `src/Components/<Name>/Components/` or nested folders |
|
|
73
|
+
| Props/types | `<Name>Props.ts` or colocated types |
|
|
74
|
+
| Tests | `*.test.tsx` next to component |
|
|
75
|
+
| Stories | `*.stories.tsx` (where present) |
|
|
76
|
+
| Demo page | `src/Pages/<name>.tsx` |
|
|
77
|
+
| Public export | add to `src/index.ts` |
|
|
78
|
+
| Module doc | `.cursor/modules/<domain>/MODULE.md` |
|
|
79
|
+
|
|
80
|
+
Read `.cursor/modules/<domain>/MODULE.md` before touching a component family.
|
|
81
|
+
|
|
82
|
+
## 7. Publishing integration
|
|
83
|
+
|
|
84
|
+
- **Exports:** every public component must be exported from `src/index.ts`
|
|
85
|
+
- **Peers:** React 18, Chakra, Emotion — consumers install alongside library
|
|
86
|
+
- **Build:** `npm run build` compiles to `dist/`; never edit `dist/` directly
|
|
87
|
+
- **Version:** patch releases via `npm run package`; CI publishes on merge to `develop`
|
|
88
|
+
- **Breaking changes:** require version bump + consumer update in frontends
|
|
89
|
+
|
|
90
|
+
## 8. Checklist — adding a new component
|
|
91
|
+
|
|
92
|
+
1. Read similar component + `.cursor/modules/<domain>/MODULE.md`
|
|
93
|
+
2. Create `src/Components/<Name>/` with component + props
|
|
94
|
+
3. Add demo page in `src/Pages/` if needed
|
|
95
|
+
4. Export from `src/index.ts`
|
|
96
|
+
5. Add Jest tests (`*.test.tsx`)
|
|
97
|
+
6. Update `.cursor/modules/<domain>/MODULE.md`
|
|
98
|
+
7. Verify playground: `npm start`
|
|
99
|
+
8. After merge to develop: consumers run `npm run pixelize` in their frontend
|
|
100
|
+
|
|
101
|
+
## 9. Do
|
|
102
|
+
|
|
103
|
+
- Match existing Chakra + design token patterns in `src/Theme/`
|
|
104
|
+
- Keep components framework-agnostic where possible (props in, events out)
|
|
105
|
+
- Add tests for new behavior
|
|
106
|
+
- Use `useCustomTheme` / theme tokens — no hardcoded brand colors
|
|
107
|
+
- Branch from **feature/cursor-ai-setup** or **develop**
|
|
108
|
+
|
|
109
|
+
## 10. Don't
|
|
110
|
+
|
|
111
|
+
- Don't add app-specific business logic (CRM entities, API calls) to library components
|
|
112
|
+
- Don't break existing exports without semver major bump
|
|
113
|
+
- Don't edit `dist/` — always change `src/` and rebuild
|
|
114
|
+
- Don't skip `index.ts` export for public components
|
|
115
|
+
- Don't introduce a second component pattern without team agreement
|
|
116
|
+
- Don't commit npm tokens or `.env` secrets
|
|
117
|
+
|
|
118
|
+
## Task pipeline
|
|
119
|
+
|
|
120
|
+
- **Feature work:** invoke via **`/` menu → `task`** (not by typing `/task` in the message).
|
|
121
|
+
- Cross-repo: **`/ → design-task**`.
|
|
122
|
+
- One-time status line + hook details: [.cursor/TASK-SETUP.md](.cursor/TASK-SETUP.md).
|