desktop-team-doc 0.1.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/README.md +89 -0
- package/content/docs/README.md +227 -0
- package/content/docs/index.md +352 -0
- package/content/docs/instructions/coding-conventions/.clang-format +65 -0
- package/content/docs/instructions/coding-conventions/cpp.md +132 -0
- package/content/docs/instructions/coding-conventions/frontend.md +612 -0
- package/content/docs/instructions/coding-conventions/team-wide.md +176 -0
- package/content/docs/instructions/workflows/assets/jira-1.png +0 -0
- package/content/docs/instructions/workflows/assets/jira-comment.png +0 -0
- package/content/docs/instructions/workflows/assets/jira-release-note.png +0 -0
- package/content/docs/instructions/workflows/assets/jira-tag.png +0 -0
- package/content/docs/instructions/workflows/code-review.md +451 -0
- package/content/docs/instructions/workflows/git-branch-convention.md +246 -0
- package/content/docs/instructions/workflows/git-commit.md +95 -0
- package/content/docs/instructions/workflows/jira-process.md +173 -0
- package/content/docs/instructions/workflows/jira-ticket-guide.md +105 -0
- package/content/docs/instructions/workflows/pull-request-generation.md +319 -0
- package/content/docs/instructions/workflows/scrum-process.md +104 -0
- package/content/docs/instructions/workflows/survey-project-setup.md +76 -0
- package/content/docs/knowledge/architecture/README.md +11 -0
- package/content/docs/knowledge/architecture/audio-plugin-architecture.md +213 -0
- package/content/docs/knowledge/architecture/cross-platform-design.md +176 -0
- package/content/docs/knowledge/architecture/frontend-native-bridge.md +193 -0
- package/content/docs/knowledge/architecture/native-command.md +189 -0
- package/content/docs/knowledge/architecture/state-management-architecture.md +105 -0
- package/content/docs/knowledge/component-library/ControlComponent/README.md +281 -0
- package/content/docs/knowledge/component-library/ControlComponent/accessibility/accessibility-implementation.md +503 -0
- package/content/docs/knowledge/component-library/ControlComponent/common-mechanisms.md +278 -0
- package/content/docs/knowledge/component-library/ControlComponent/core/error-handling.md +451 -0
- package/content/docs/knowledge/component-library/ControlComponent/core/native-interface.md +515 -0
- package/content/docs/knowledge/component-library/ControlComponent/core/state-management.md +509 -0
- package/content/docs/knowledge/component-library/ControlComponent/creating-new-controls.md +654 -0
- package/content/docs/knowledge/component-library/ControlComponent/design/api-design-reference.md +1142 -0
- package/content/docs/knowledge/component-library/ControlComponent/design/design-principles.md +336 -0
- package/content/docs/knowledge/component-library/ControlComponent/design/styling-architecture.md +595 -0
- package/content/docs/knowledge/component-library/ControlComponent/design/visual-feedback.md +456 -0
- package/content/docs/knowledge/component-library/ControlComponent/development-environment.md +213 -0
- package/content/docs/knowledge/component-library/ControlComponent/interaction/gesture-algorithms.md +705 -0
- package/content/docs/knowledge/component-library/ControlComponent/interaction/touch-support.md +525 -0
- package/content/docs/knowledge/component-library/ControlComponent/interaction/value-processing-patterns.md +801 -0
- package/content/docs/knowledge/component-library/ControlComponent/interaction/velocity-damping-systems.md +741 -0
- package/content/docs/knowledge/component-library/ControlComponent/knob/architecture.md +490 -0
- package/content/docs/knowledge/component-library/ControlComponent/knob/how-to-use.md +304 -0
- package/content/docs/knowledge/component-library/ControlComponent/knob/index.md +105 -0
- package/content/docs/knowledge/component-library/ControlComponent/optimization/performance-benchmarks.md +535 -0
- package/content/docs/knowledge/component-library/ControlComponent/optimization/performance-optimization.md +1092 -0
- package/content/docs/knowledge/component-library/ControlComponent/quick-start.md +345 -0
- package/content/docs/knowledge/component-library/ControlComponent/slider/architecture.md +444 -0
- package/content/docs/knowledge/component-library/ControlComponent/slider/how-to-use.md +470 -0
- package/content/docs/knowledge/component-library/ControlComponent/slider/index.md +107 -0
- package/content/docs/knowledge/component-library/ControlComponent/testing-guide.md +950 -0
- package/content/docs/knowledge/component-library/ControlComponent/troubleshooting.md +657 -0
- package/content/docs/knowledge/component-library/frontend-develop/LICENSE.txt +176 -0
- package/content/docs/knowledge/component-library/frontend-develop/SKILL.md +124 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/code-organization.md +620 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/coding-standards.md +275 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/component-reusability.md +559 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/examples.md +554 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/layout-separation.md +638 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/performance-optimization.md +678 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/state-management.md +331 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/styling-guidelines.md +349 -0
- package/content/docs/knowledge/component-library/frontend-develop/references/type-safety.md +493 -0
- package/content/docs/knowledge/development/assets/cyberduck-aws-credentials.png +0 -0
- package/content/docs/knowledge/development/assets/postman-environment-setup.png +0 -0
- package/content/docs/knowledge/development/aws-storage.md +95 -0
- package/content/docs/knowledge/development/crm-system.md +22 -0
- package/content/docs/knowledge/development/glossary.md +246 -0
- package/content/docs/knowledge/development/pg-api-guide.md +71 -0
- package/content/docs/knowledge/development/staging-license-management.md +44 -0
- package/content/docs/knowledge/development/tech-stack.md +240 -0
- package/content/docs/knowledge/domain/popup-system.md +106 -0
- package/content/docs/knowledge/domain/sigpath.md +264 -0
- package/content/docs/knowledge/environment-setup/aax-signing-update.md +149 -0
- package/content/docs/knowledge/environment-setup/assets/aax-1.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/aax-2.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/aax-3.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/aax-4.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/aax-5.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/aax-6.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/aax-7.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-1.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-10.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-11.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-12.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-13.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-14.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-2.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-3.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-4.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-5.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-6.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-7.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-8.png +0 -0
- package/content/docs/knowledge/environment-setup/assets/buildmachine-9.png +0 -0
- package/content/docs/knowledge/environment-setup/build-machine-setup.md +224 -0
- package/content/docs/knowledge/environment-setup/build-machine-troubleshooting.md +193 -0
- package/content/docs/knowledge/implementation-guides/adding-amp.md +190 -0
- package/content/docs/knowledge/implementation-guides/adding-fx.md +111 -0
- package/content/docs/knowledge/implementation-guides/cab-integration.md +194 -0
- package/content/docs/knowledge/implementation-guides/custom-pedal-integration.md +309 -0
- package/content/docs/knowledge/projects/BIAS_ONE_GUI/README.md +17 -0
- package/content/manifest.json +122 -0
- package/content/rules/cpp.mdc +135 -0
- package/content/rules/frontend.mdc +615 -0
- package/content/rules/index.mdc +256 -0
- package/content/rules/knowledge.mdc +46 -0
- package/content/rules/team-wide.mdc +179 -0
- package/content/rules/workflows.mdc +43 -0
- package/content/tools/agents/context-compressor.md +357 -0
- package/content/tools/agents/context-writer.md +328 -0
- package/content/tools/agents/release-notes-generator.md +389 -0
- package/content/tools/agents/srs-writer-agent.md +63 -0
- package/content/tools/mcp/README.md +25 -0
- package/content/tools/mcp/mcp-desktop-team.example.json +13 -0
- package/content/tools/skills/frontend-develop/LICENSE.txt +176 -0
- package/content/tools/skills/frontend-develop/SKILL.md +124 -0
- package/content/tools/skills/frontend-develop/references/code-organization.md +620 -0
- package/content/tools/skills/frontend-develop/references/coding-standards.md +275 -0
- package/content/tools/skills/frontend-develop/references/component-reusability.md +559 -0
- package/content/tools/skills/frontend-develop/references/examples.md +554 -0
- package/content/tools/skills/frontend-develop/references/layout-separation.md +638 -0
- package/content/tools/skills/frontend-develop/references/performance-optimization.md +678 -0
- package/content/tools/skills/frontend-develop/references/state-management.md +331 -0
- package/content/tools/skills/frontend-develop/references/styling-guidelines.md +349 -0
- package/content/tools/skills/frontend-develop/references/type-safety.md +493 -0
- package/content/tools/slash-commands/commit.md +17 -0
- package/content/tools/slash-commands/context-compress.md +149 -0
- package/content/tools/slash-commands/context-write.md +92 -0
- package/content/tools/slash-commands/jira.md +12 -0
- package/content/tools/slash-commands/pr-gen.md +12 -0
- package/content/tools/slash-commands/pr-review.md +12 -0
- package/dist/commands/detect.d.ts +1 -0
- package/dist/commands/detect.js +33 -0
- package/dist/commands/install.d.ts +1 -0
- package/dist/commands/install.js +100 -0
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.js +132 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +53 -0
- package/dist/lib/detect-env.d.ts +3 -0
- package/dist/lib/detect-env.js +52 -0
- package/dist/lib/prompt-env.d.ts +3 -0
- package/dist/lib/prompt-env.js +16 -0
- package/dist/lib/resolve-doc-repo.d.ts +14 -0
- package/dist/lib/resolve-doc-repo.js +61 -0
- package/dist/lib/symlink.d.ts +7 -0
- package/dist/lib/symlink.js +60 -0
- package/dist/lib/sync-from-manifest.d.ts +8 -0
- package/dist/lib/sync-from-manifest.js +64 -0
- package/package.json +46 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Adding Cab
|
|
2
|
+
|
|
3
|
+
*Last Updated: 2025-03-02*
|
|
4
|
+
|
|
5
|
+
This document outlines the process for integrating new cab assets into the BIAS_ONE_GUI project using the Figma parser tool.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The cab integration process involves extracting cab assets from Figma designs, generating the necessary JSON files, and placing the assets in the correct directories within the BIAS_ONE_GUI project. This guide will walk you through each step of the process.
|
|
10
|
+
|
|
11
|
+
## Cab Reference Data
|
|
12
|
+
|
|
13
|
+
For cab initialization data, refer to the following Google Spreadsheet:
|
|
14
|
+
[BIAS ONE Cab Reference Data](https://docs.google.com/spreadsheets/d/1GbX8jtDhavA5rNZoTNQ8rY9-fVTb9IS-qhvv1-AMIic/edit?gid=1857417807#gid=1857417807)
|
|
15
|
+
|
|
16
|
+
### Available Fields in the Spreadsheet
|
|
17
|
+
|
|
18
|
+
The spreadsheet contains the following fields for each cab:
|
|
19
|
+
|
|
20
|
+
- **UUID**: Unique identifier for the cab (e.g., "50B743E0-E702-476C-8A62-57FB0B1C0FFD") - *Defined by desktop developers*
|
|
21
|
+
- **DSP Value**: The DSP parameter value used to select this cab in the backend (e.g., 0.001, 0.002) - *Assigned by the DSP team, cannot be modified by desktop developers*
|
|
22
|
+
- **Display Name**: The name shown in the UI (e.g., "Blackface", "British 30") - *Defined by Product Management*
|
|
23
|
+
- **Speaker Configuration**: The speaker layout (e.g., "1x12", "2x12", "4x12") - *Defined by Product Management*
|
|
24
|
+
- **Category**: The cab category (e.g., "Electric Guitar", "Bass", "Acoustic") - *Defined by Product Management*
|
|
25
|
+
- **Display Order**: The order in which cabs appear within their category in the UI - *Defined by Product Management*
|
|
26
|
+
|
|
27
|
+
### How to Use the Reference Data
|
|
28
|
+
|
|
29
|
+
When accessing the spreadsheet:
|
|
30
|
+
|
|
31
|
+
1. **For Adding New Cabs**:
|
|
32
|
+
- Desktop developers should generate a new UUID
|
|
33
|
+
- Consult with the DSP team to get an assigned DSP value
|
|
34
|
+
- Get the display name, speaker configuration, category, and display order from Product Management
|
|
35
|
+
|
|
36
|
+
2. **For Updating Existing Cabs**:
|
|
37
|
+
- Reference the spreadsheet to ensure consistency with existing cab configurations
|
|
38
|
+
- Note that DSP values cannot be modified by desktop developers
|
|
39
|
+
- Any changes to display names, categories, or other UI elements must be approved by Product Management
|
|
40
|
+
|
|
41
|
+
3. **For Integration with DSP**:
|
|
42
|
+
- The DSP value from the spreadsheet (assigned by the DSP team) must be used in the `cabSpeakerBg.json` file to properly map the cab to its visual representation
|
|
43
|
+
- Never create or modify DSP values without DSP team approval
|
|
44
|
+
|
|
45
|
+
4. **For UI Integration**:
|
|
46
|
+
- Use the display name, speaker configuration, category, and display order values (defined by Product Management) when updating the `cabDisplayInfo.json` file
|
|
47
|
+
|
|
48
|
+
This reference data is essential when adding new cabs to ensure proper integration with both the UI and DSP components of the application.
|
|
49
|
+
|
|
50
|
+
## Prerequisites
|
|
51
|
+
|
|
52
|
+
- Access to the Figma design file containing cab designs
|
|
53
|
+
- Node.js installed on your machine
|
|
54
|
+
- BIAS_ONE_GUI project cloned locally
|
|
55
|
+
|
|
56
|
+
## Step 1: Using the Figma Parser
|
|
57
|
+
|
|
58
|
+
The Figma parser tool (`tools/gear-figma-parser`) is used to extract cab assets from Figma designs.
|
|
59
|
+
|
|
60
|
+
### Figma Design Requirements for Cab
|
|
61
|
+
|
|
62
|
+
- The main node in Figma must be named `cab design`
|
|
63
|
+
- The node should contain:
|
|
64
|
+
- TEXT: Cab Name (e.g., "Blackface")
|
|
65
|
+
- TEXT: UUID (e.g., "50B743E0-E702-476C-8A62-57FB0B1C0FFD")
|
|
66
|
+
- RECTANGLE: Cab on signal path (for thumbnail image)
|
|
67
|
+
|
|
68
|
+
### Running the Figma Parser
|
|
69
|
+
|
|
70
|
+
1. Navigate to the `tools/gear-figma-parser` directory:
|
|
71
|
+
```bash
|
|
72
|
+
cd tools/gear-figma-parser
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. Install dependencies:
|
|
76
|
+
```bash
|
|
77
|
+
npm install
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
3. Run the plugin UI:
|
|
81
|
+
```bash
|
|
82
|
+
npm run watch
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
4. In the Figma Desktop App:
|
|
86
|
+
- Enable Figma Dev Mode
|
|
87
|
+
- Under Plugin tab > Click + > Select `Import plugin from manifest` > select the `manifest.json` from the gear-figma-parser directory
|
|
88
|
+
- Click the plugin and then select the Cab design
|
|
89
|
+
- Click `Export All` or `Export JSON only` to export assets
|
|
90
|
+
|
|
91
|
+
The parser will generate:
|
|
92
|
+
- A JSON file with the cab's UUID as the filename
|
|
93
|
+
- A PNG image for the signal path thumbnail named `sigpath-[UUID].png`
|
|
94
|
+
|
|
95
|
+
## Step 2: Moving Assets to template-cab
|
|
96
|
+
|
|
97
|
+
1. Move the generated JSON file to the `public/gear/template-cab` directory:
|
|
98
|
+
```bash
|
|
99
|
+
mv [UUID].json public/gear/template-cab/
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
2. Verify that the JSON file contains the cab's UUID:
|
|
103
|
+
```json
|
|
104
|
+
{"id":"[UUID]"}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Step 3: Updating cabDisplayInfo.json
|
|
108
|
+
|
|
109
|
+
Update the `public/gear/cabDisplayInfo.json` file to include the new cab:
|
|
110
|
+
|
|
111
|
+
1. Open `public/gear/cabDisplayInfo.json`
|
|
112
|
+
2. Add a new entry to the `data` object:
|
|
113
|
+
```json
|
|
114
|
+
"[UUID]": {
|
|
115
|
+
"displayName": "Cab Name",
|
|
116
|
+
"directName": "Speaker Configuration (e.g., 1x12, 2x12, 4x12)",
|
|
117
|
+
"categoryKey": "Category (e.g., Electric Guitar, Acoustic & Bass)",
|
|
118
|
+
"displayOrder": [Next available number in the category]
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Example:
|
|
123
|
+
```json
|
|
124
|
+
"NEW-UUID-HERE": {
|
|
125
|
+
"displayName": "New Cab",
|
|
126
|
+
"directName": "2x12",
|
|
127
|
+
"categoryKey": "Electric Guitar",
|
|
128
|
+
"displayOrder": 20
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
If needed, add a new category to the `category` object:
|
|
133
|
+
```json
|
|
134
|
+
"New Category": "New Category Display Name"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Step 4: Updating cabSpeakerBg.json
|
|
138
|
+
|
|
139
|
+
Update the `public/gear/cabSpeakerBg.json` file to map the cab's DSP value to a speaker background image:
|
|
140
|
+
|
|
141
|
+
1. Open `public/gear/cabSpeakerBg.json`
|
|
142
|
+
2. Add a new entry:
|
|
143
|
+
```json
|
|
144
|
+
"0.XXX": "images/Cab3/Speaker.Default.png"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Replace `0.XXX` with the DSP value for the new cab, and use either `Speaker.Default.png` or `Speaker.Spectre.png` as appropriate for the cab type.
|
|
148
|
+
|
|
149
|
+
## Step 5: Moving Assets to Cab3
|
|
150
|
+
|
|
151
|
+
If your cab requires a custom speaker background image:
|
|
152
|
+
|
|
153
|
+
1. Create the speaker background image named according to the cab (e.g., `Speaker.NewCab.png`)
|
|
154
|
+
2. Move the image to the `public/images/Cab3` directory:
|
|
155
|
+
```bash
|
|
156
|
+
mv Speaker.NewCab.png public/images/Cab3/
|
|
157
|
+
```
|
|
158
|
+
3. Update the `cabSpeakerBg.json` file to reference this new image:
|
|
159
|
+
```json
|
|
160
|
+
"0.XXX": "images/Cab3/Speaker.NewCab.png"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Step 6: Moving Assets to SigPath/Cab
|
|
164
|
+
|
|
165
|
+
Move the signal path thumbnail image to the `public/images/SigPath/Cab` directory:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
mv sigpath-[UUID].png public/images/SigPath/Cab/
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
This image will be used to display the cab in the signal path view.
|
|
172
|
+
|
|
173
|
+
## Troubleshooting
|
|
174
|
+
|
|
175
|
+
### Missing Images
|
|
176
|
+
|
|
177
|
+
If images are not displaying correctly:
|
|
178
|
+
- Verify that the image paths in `cabSpeakerBg.json` are correct
|
|
179
|
+
- Check that all image files have been moved to the correct directories
|
|
180
|
+
- Ensure that the image filenames match the references in the JSON files
|
|
181
|
+
|
|
182
|
+
### Cab Not Appearing in UI
|
|
183
|
+
|
|
184
|
+
If the cab is not appearing in the UI:
|
|
185
|
+
- Verify that the cab has been added to `cabDisplayInfo.json` with the correct UUID
|
|
186
|
+
- Check that the cab's JSON file exists in the `public/gear/template-cab` directory
|
|
187
|
+
- Ensure that the signal path thumbnail image exists in `public/images/SigPath/Cab`
|
|
188
|
+
|
|
189
|
+
### Figma Parser Issues
|
|
190
|
+
|
|
191
|
+
If the Figma parser is not generating the expected files:
|
|
192
|
+
- Verify that the Figma design follows the required structure
|
|
193
|
+
- Check that the cab design node is named `cab design`
|
|
194
|
+
- Ensure that the UUID text node contains a valid UUID
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Custom Pedal Integration Guide
|
|
2
|
+
|
|
3
|
+
*Last Updated: 2025-03-02*
|
|
4
|
+
|
|
5
|
+
This guide explains how to integrate custom pedals with specialized UI components into BIAS X.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
BIAS X supports custom pedal interfaces that go beyond standard controls, allowing for specialized interactions like wah pedals with foot controllers, delay units with tape animations, and other unique interfaces. These custom pedals are implemented through:
|
|
10
|
+
|
|
11
|
+
1. Panel JSON configuration files
|
|
12
|
+
2. Background images
|
|
13
|
+
3. Custom React components
|
|
14
|
+
|
|
15
|
+
## File Structure and Naming Conventions
|
|
16
|
+
|
|
17
|
+
### Panel Configuration Files
|
|
18
|
+
|
|
19
|
+
Panel configuration files follow this naming pattern:
|
|
20
|
+
- `public/panel/DSP.<dspId>.Panel.json` - Main configuration file
|
|
21
|
+
|
|
22
|
+
### Background Images
|
|
23
|
+
|
|
24
|
+
Background images follow these naming patterns:
|
|
25
|
+
- `public/panel/DSP.<dspId>.BG.png` - Main panel background
|
|
26
|
+
- `public/panel/DSP.<dspId>.Panel.Board.png` - Pedal board view (for wah-like pedals)
|
|
27
|
+
- `public/panel/DSP.<dspId>.Pedal.BG.png` - Pedal background (for pedalboard view)
|
|
28
|
+
|
|
29
|
+
## Panel JSON Configuration
|
|
30
|
+
|
|
31
|
+
### Basic Structure
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"data": {
|
|
36
|
+
"id": "dspId",
|
|
37
|
+
"shouldScale": false,
|
|
38
|
+
"width": 1000,
|
|
39
|
+
"height": 600,
|
|
40
|
+
"ratio": 1,
|
|
41
|
+
"y": 0,
|
|
42
|
+
|
|
43
|
+
"bg": {
|
|
44
|
+
"normal": "panel/DSP.dspId.BG.png",
|
|
45
|
+
"retina": "panel/DSP.dspId.BG@2x.png",
|
|
46
|
+
"width": 1000,
|
|
47
|
+
"height": 600,
|
|
48
|
+
"x": 0,
|
|
49
|
+
"y": 0
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
"controls": [
|
|
53
|
+
// Control definitions
|
|
54
|
+
],
|
|
55
|
+
|
|
56
|
+
"powers": [
|
|
57
|
+
// Power button and LED definitions
|
|
58
|
+
],
|
|
59
|
+
|
|
60
|
+
"cables": [
|
|
61
|
+
// Cable definitions
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Standard Controls
|
|
68
|
+
|
|
69
|
+
#### Knob Control
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"pid": 0,
|
|
74
|
+
"param": "gain",
|
|
75
|
+
"type": "knob",
|
|
76
|
+
"width": 60,
|
|
77
|
+
"height": 60,
|
|
78
|
+
"x": 100,
|
|
79
|
+
"y": 200,
|
|
80
|
+
"res": "knob/chicken-black"
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### Switch Control
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"pid": 1,
|
|
89
|
+
"param": "mode",
|
|
90
|
+
"type": "switch",
|
|
91
|
+
"width": 40,
|
|
92
|
+
"height": 40,
|
|
93
|
+
"x": 200,
|
|
94
|
+
"y": 300,
|
|
95
|
+
"res": "switch/toggle-1"
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### Slider Control
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"pid": 2,
|
|
104
|
+
"param": "level",
|
|
105
|
+
"type": "slider",
|
|
106
|
+
"width": 200,
|
|
107
|
+
"height": 20,
|
|
108
|
+
"x": 300,
|
|
109
|
+
"y": 400,
|
|
110
|
+
"useSimpleTransform": true,
|
|
111
|
+
"res": "slider/fader-1"
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Wah-like Pedals
|
|
116
|
+
|
|
117
|
+
For pedals with specialized foot controller interfaces:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"data": {
|
|
122
|
+
"id": "CryWah",
|
|
123
|
+
"panel": {
|
|
124
|
+
"width": 1978,
|
|
125
|
+
"height": 800,
|
|
126
|
+
"reflection": {
|
|
127
|
+
"src": "panel/DSP.CryWah.BG.png",
|
|
128
|
+
"y": 680
|
|
129
|
+
},
|
|
130
|
+
"bg": {
|
|
131
|
+
"normal": "panel/DSP.CryWah.BG.png",
|
|
132
|
+
"width": 1978,
|
|
133
|
+
"height": 800,
|
|
134
|
+
"x": -30,
|
|
135
|
+
"y": 0
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"pedal": {
|
|
139
|
+
"bg": {
|
|
140
|
+
"normal": "panel/DSP.CryWah.Pedal.BG.png"
|
|
141
|
+
},
|
|
142
|
+
"board": {
|
|
143
|
+
"normal": "panel/DSP.CryWah.Panel.Board.png"
|
|
144
|
+
},
|
|
145
|
+
"rotation": {
|
|
146
|
+
"origin": {
|
|
147
|
+
"x": 0.5,
|
|
148
|
+
"y": 0.8
|
|
149
|
+
},
|
|
150
|
+
"min": 0,
|
|
151
|
+
"max": 20
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"decorations": [
|
|
155
|
+
{
|
|
156
|
+
"res": "images/Customization/CryWah/screw.png",
|
|
157
|
+
"width": 1978,
|
|
158
|
+
"height": 800,
|
|
159
|
+
"x": -30,
|
|
160
|
+
"y": 0
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Custom Component Implementation
|
|
168
|
+
|
|
169
|
+
For pedals requiring specialized UI beyond standard controls, you need to create custom React components.
|
|
170
|
+
|
|
171
|
+
### Component Structure
|
|
172
|
+
|
|
173
|
+
1. Create a directory for your custom pedal:
|
|
174
|
+
```
|
|
175
|
+
src/components/dumbs/addons-pedal-panel/YourPedalName/
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
2. Create an index.tsx file with your component implementation:
|
|
179
|
+
```
|
|
180
|
+
src/components/dumbs/addons-pedal-panel/YourPedalName/index.tsx
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Example Implementation
|
|
184
|
+
|
|
185
|
+
Here's an example of a custom wah pedal implementation. 專案已不再使用 Emotion;新程式請以 Tailwind 或 `style` 實作樣式。
|
|
186
|
+
|
|
187
|
+
```tsx
|
|
188
|
+
import React from 'react';
|
|
189
|
+
import RotationPedal from '@/src/components/dumbs/pedal-panel-customization/shared/RotationPedal';
|
|
190
|
+
import { ParameterPanel, usePanelStore, usePanelStoreSelector } from '@/src/components/panel-factory/shared';
|
|
191
|
+
import { ROOT_FOLDER } from '@/src/utils/assetUtils';
|
|
192
|
+
|
|
193
|
+
const PEDAL_IMG_URL = `url(${ROOT_FOLDER}/panel/DSP.CryWah.Panel.Board.png)`;
|
|
194
|
+
|
|
195
|
+
const PID_FILTER = 0;
|
|
196
|
+
|
|
197
|
+
const CryWah: ParameterPanel = ({ config }) => {
|
|
198
|
+
const { updateParameterValue } = usePanelStore().getState();
|
|
199
|
+
const pidFilter = usePanelStoreSelector((state) => state.parameterValues[PID_FILTER]);
|
|
200
|
+
const { x, y, height, width } = config.bg;
|
|
201
|
+
|
|
202
|
+
return (
|
|
203
|
+
<RotationPedal
|
|
204
|
+
value={pidFilter}
|
|
205
|
+
originX={729 / width}
|
|
206
|
+
originY={410 / height}
|
|
207
|
+
minRotationAngle={0}
|
|
208
|
+
maxRotationAngle={+11}
|
|
209
|
+
panelXOffset={-30}
|
|
210
|
+
panelYOffset={0}
|
|
211
|
+
style={{
|
|
212
|
+
width: width,
|
|
213
|
+
height: height,
|
|
214
|
+
top: y,
|
|
215
|
+
left: x,
|
|
216
|
+
backgroundImage: PEDAL_IMG_URL,
|
|
217
|
+
}}
|
|
218
|
+
onChange={(value) => updateParameterValue(PID_FILTER, value)}
|
|
219
|
+
/>
|
|
220
|
+
);
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export default CryWah;
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Reusable Components
|
|
227
|
+
|
|
228
|
+
The system provides several reusable components for building custom pedal interfaces:
|
|
229
|
+
|
|
230
|
+
- `RotationPedal`: For pedals that rotate (like wah pedals)
|
|
231
|
+
- `ImageKnob`: For custom knob implementations
|
|
232
|
+
- `MaskedBgSlider`: For sliders with custom backgrounds
|
|
233
|
+
- `Toggle`: For toggle switches
|
|
234
|
+
- `Indicator`: For LED indicators
|
|
235
|
+
|
|
236
|
+
## Registering Custom Components
|
|
237
|
+
|
|
238
|
+
To make your custom component available in the application, you need to register it in the addons panel map:
|
|
239
|
+
|
|
240
|
+
1. Open `src/components/panel-factory/shared/customization/addonsPanelMap.tsx`
|
|
241
|
+
2. Import your component:
|
|
242
|
+
```tsx
|
|
243
|
+
const YourPedalName = React.lazy(() => import('@/src/components/dumbs/addons-pedal-panel/YourPedalName'));
|
|
244
|
+
```
|
|
245
|
+
3. Add it to the panel map:
|
|
246
|
+
```tsx
|
|
247
|
+
panelMap.set('YourPedalDspId', YourPedalName);
|
|
248
|
+
```
|
|
249
|
+
4. For pedals that should be available in pedalboard mode:
|
|
250
|
+
```tsx
|
|
251
|
+
panelMap.set('YourPedalDspId', [YourPedalName, true]);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Integration Process
|
|
255
|
+
|
|
256
|
+
1. **Create Panel JSON**: Define the panel configuration in `public/panel/DSP.<dspId>.Panel.json`
|
|
257
|
+
2. **Prepare Assets**: Create and place background images in the `public/panel/` directory
|
|
258
|
+
3. **Implement Custom Component**: Create your React component in `src/components/dumbs/addons-pedal-panel/`
|
|
259
|
+
4. **Register Component**: Add your component to the addons panel map
|
|
260
|
+
5. **Test**: Test your implementation in both panel and pedalboard modes
|
|
261
|
+
|
|
262
|
+
## AddonsContainer Component
|
|
263
|
+
|
|
264
|
+
The `AddonsContainer` component in `src/components/smarts/pedal-panel/AddonsContainer.tsx` is responsible for rendering the custom pedal components:
|
|
265
|
+
|
|
266
|
+
```tsx
|
|
267
|
+
export const AddonsContainer: ParameterPanel = (props) => {
|
|
268
|
+
const { api } = props;
|
|
269
|
+
const { selectedFx } = usePanelStore().getState();
|
|
270
|
+
const addonsComp = getAddonsPanel({ ...props, selectedFx });
|
|
271
|
+
return (
|
|
272
|
+
<div className={`pedal-panel-v2--addons relative left-0 top-0`}>
|
|
273
|
+
<Provider store={api.getStore()}>{addonsComp}</Provider>
|
|
274
|
+
</div>
|
|
275
|
+
);
|
|
276
|
+
};
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
This component uses `getAddonsPanel` from `addonsPanelMap.tsx` to retrieve and render the appropriate custom component based on the selected effect.
|
|
280
|
+
|
|
281
|
+
## Legacy vs. Modern Components
|
|
282
|
+
|
|
283
|
+
BIAS X supports two types of custom pedal components:
|
|
284
|
+
|
|
285
|
+
1. **Modern Components**: Located in `src/components/dumbs/addons-pedal-panel/`
|
|
286
|
+
- Registered in `panelMap`
|
|
287
|
+
- Used by `AddonsContainer`
|
|
288
|
+
|
|
289
|
+
2. **Legacy Components**: Located in `src/components/dumbs/pedal-panel-customization/`
|
|
290
|
+
- Registered in `legacyPanelMap`
|
|
291
|
+
- Used by `LegacyAddonsContainer`
|
|
292
|
+
|
|
293
|
+
When creating new custom pedals, use the modern approach with components in the `addons-pedal-panel` directory.
|
|
294
|
+
|
|
295
|
+
## Best Practices
|
|
296
|
+
|
|
297
|
+
1. **Component Organization**: Keep all files related to a specific pedal in its own directory
|
|
298
|
+
2. **Parameter Access**: Use `usePanelStoreSelector` to access parameter values
|
|
299
|
+
3. **Parameter Updates**: Use `updateParameterValue` from the panel store to update parameters
|
|
300
|
+
4. **Responsive Design**: Use relative positioning and sizing for proper scaling
|
|
301
|
+
5. **Performance**: Optimize renders using React.memo and useMemo where appropriate
|
|
302
|
+
6. **Reusable Components**: Leverage existing components like RotationPedal for common interactions
|
|
303
|
+
|
|
304
|
+
## Troubleshooting
|
|
305
|
+
|
|
306
|
+
1. **Component Not Appearing**: Verify the component is properly registered in the addons panel map
|
|
307
|
+
2. **Parameter Not Updating**: Check that the PID matches the parameter ID in the DSP
|
|
308
|
+
3. **Styling Issues**: Ensure background images are properly referenced and sized
|
|
309
|
+
4. **Performance Issues**: Check for unnecessary re-renders or heavy computations
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# BIAS_ONE_GUI Knowledge Base
|
|
2
|
+
|
|
3
|
+
Project-specific knowledge for the BIAS_ONE_GUI application.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
- **architecture/** – State management, native bridge, API clients, component architecture
|
|
8
|
+
- **core-components/** – Signal Path, Panel Factory, Guitar Match, Preset AI, App Navigation
|
|
9
|
+
- **gear-customization/** – Amp, Effect, Cab, Custom Pedal integration
|
|
10
|
+
- **redux-slices/** – Slice and thunk action documentation
|
|
11
|
+
- **services-and-utils/** – Configuration, localization, license, Firebase Remote Config
|
|
12
|
+
|
|
13
|
+
## Related Documentation
|
|
14
|
+
|
|
15
|
+
- [Architecture Patterns](../../architecture/) – Team-wide architecture patterns
|
|
16
|
+
- [Implementation Guides](../../implementation-guides/) – Adding amp, FX, cab, custom pedals
|
|
17
|
+
- [Signal Path](../../domain/sigpath.md) – Signal path domain knowledge
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1",
|
|
3
|
+
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"src": "docs/instructions",
|
|
6
|
+
"type": "dir",
|
|
7
|
+
"cursor": ".cursor/docs/instructions",
|
|
8
|
+
"claude": ".claude/docs/instructions",
|
|
9
|
+
"roo": ".roo/rules/desktop-team-documentation/instructions",
|
|
10
|
+
"gemini": ".gemini/docs/instructions",
|
|
11
|
+
"description": "Coding conventions and workflows"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"src": "docs/knowledge",
|
|
15
|
+
"type": "dir",
|
|
16
|
+
"cursor": ".cursor/docs/knowledge",
|
|
17
|
+
"claude": ".claude/docs/knowledge",
|
|
18
|
+
"roo": ".roo/rules/desktop-team-documentation/knowledge",
|
|
19
|
+
"gemini": ".gemini/docs/knowledge",
|
|
20
|
+
"description": "Knowledge base (architecture, development, projects, implementation-guides, component-library, domain)"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"src": "docs/index.md",
|
|
24
|
+
"type": "file",
|
|
25
|
+
"cursor": ".cursor/docs/index.md",
|
|
26
|
+
"claude": ".claude/docs/index.md",
|
|
27
|
+
"roo": ".roo/rules/desktop-team-documentation/index.md",
|
|
28
|
+
"gemini": ".gemini/docs/index.md",
|
|
29
|
+
"description": "Main documentation index"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"src": "docs/README.md",
|
|
33
|
+
"type": "file",
|
|
34
|
+
"cursor": ".cursor/docs/README.md",
|
|
35
|
+
"claude": ".claude/docs/README.md",
|
|
36
|
+
"roo": ".roo/rules/desktop-team-documentation/README.md",
|
|
37
|
+
"gemini": ".gemini/docs/README.md",
|
|
38
|
+
"description": "Repository README"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"src": "rules/cpp.mdc",
|
|
42
|
+
"type": "file",
|
|
43
|
+
"cursor": ".cursor/rules/cpp.mdc",
|
|
44
|
+
"claude": ".claude/rules/cpp.mdc",
|
|
45
|
+
"roo": null,
|
|
46
|
+
"gemini": ".gemini/rules/cpp.mdc",
|
|
47
|
+
"description": "Cursor/Claude rule file"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"src": "rules/frontend.mdc",
|
|
51
|
+
"type": "file",
|
|
52
|
+
"cursor": ".cursor/rules/frontend.mdc",
|
|
53
|
+
"claude": ".claude/rules/frontend.mdc",
|
|
54
|
+
"roo": null,
|
|
55
|
+
"gemini": ".gemini/rules/frontend.mdc",
|
|
56
|
+
"description": "Cursor/Claude rule file"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"src": "rules/index.mdc",
|
|
60
|
+
"type": "file",
|
|
61
|
+
"cursor": ".cursor/rules/index.mdc",
|
|
62
|
+
"claude": ".claude/rules/index.mdc",
|
|
63
|
+
"roo": null,
|
|
64
|
+
"gemini": ".gemini/rules/index.mdc",
|
|
65
|
+
"description": "Cursor/Claude rule file"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"src": "rules/knowledge.mdc",
|
|
69
|
+
"type": "file",
|
|
70
|
+
"cursor": ".cursor/rules/knowledge.mdc",
|
|
71
|
+
"claude": ".claude/rules/knowledge.mdc",
|
|
72
|
+
"roo": null,
|
|
73
|
+
"gemini": ".gemini/rules/knowledge.mdc",
|
|
74
|
+
"description": "Cursor/Claude rule file"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"src": "rules/team-wide.mdc",
|
|
78
|
+
"type": "file",
|
|
79
|
+
"cursor": ".cursor/rules/team-wide.mdc",
|
|
80
|
+
"claude": ".claude/rules/team-wide.mdc",
|
|
81
|
+
"roo": null,
|
|
82
|
+
"gemini": ".gemini/rules/team-wide.mdc",
|
|
83
|
+
"description": "Cursor/Claude rule file"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"src": "rules/workflows.mdc",
|
|
87
|
+
"type": "file",
|
|
88
|
+
"cursor": ".cursor/rules/workflows.mdc",
|
|
89
|
+
"claude": ".claude/rules/workflows.mdc",
|
|
90
|
+
"roo": null,
|
|
91
|
+
"gemini": ".gemini/rules/workflows.mdc",
|
|
92
|
+
"description": "Cursor/Claude rule file"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"src": "tools/agents",
|
|
96
|
+
"type": "dir",
|
|
97
|
+
"cursor": ".cursor/agents",
|
|
98
|
+
"claude": ".claude/agents",
|
|
99
|
+
"roo": null,
|
|
100
|
+
"gemini": ".gemini/agents",
|
|
101
|
+
"description": "Agent definitions"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"src": "tools/skills",
|
|
105
|
+
"type": "dir",
|
|
106
|
+
"cursor": ".cursor/skills",
|
|
107
|
+
"claude": ".claude/skills",
|
|
108
|
+
"roo": null,
|
|
109
|
+
"gemini": null,
|
|
110
|
+
"description": "Skills (from knowledge dirs with SKILL.md)"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"src": "tools/slash-commands",
|
|
114
|
+
"type": "dir",
|
|
115
|
+
"cursor": ".cursor/commands/team",
|
|
116
|
+
"claude": ".claude/commands/team",
|
|
117
|
+
"roo": null,
|
|
118
|
+
"gemini": ".gemini/commands/team",
|
|
119
|
+
"description": "Slash commands"
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|