@arbor-education/design-system.components 0.9.0 → 0.11.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/.claude/agent-memory/blanche-designspert/MEMORY.md +64 -0
- package/.claude/agent-memory/blanche-designspert/token-review-patterns.md +29 -0
- package/.claude/agent-memory/dorothy-fact-checker/MEMORY.md +129 -0
- package/.claude/agent-memory/rose-storybookspert/MEMORY.md +29 -0
- package/.claude/agent-memory/rose-storybookspert/patterns.md +132 -0
- package/.claude/agent-memory/sophia-componentspert/MEMORY.md +14 -0
- package/.claude/agent-memory/sophia-componentspert/components.md +367 -0
- package/.claude/agents/blanche-designspert.md +150 -0
- package/.claude/agents/dorothy-fact-checker.md +145 -0
- package/.claude/agents/rose-storybookspert.md +148 -0
- package/.claude/agents/sophia-componentspert.md +133 -0
- package/.claude/component-library.md +1107 -0
- package/.claude/design-assessment-daily-attendance-2026-04-10.md +566 -0
- package/.claude/figma-assessment-7154-58899.md +404 -0
- package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-11086-97537.md +392 -0
- package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-551-41974.md +474 -0
- package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-551-43094.md +462 -0
- package/.claude/figma-assessment-fcFK4CGzkz2fVyY3koX8ZE-7154-59061.md +440 -0
- package/.claude/migration-report-custom-report-writer-2026-02-19.md +591 -0
- package/.claude/skills/analyze-design/README.md +295 -0
- package/.claude/skills/analyze-design/SKILL.md +741 -0
- package/.claude/skills/create-page/README.md +246 -0
- package/.claude/skills/create-page/SKILL.md +634 -0
- package/.claude/skills/create-page/design-analysis-template.md +333 -0
- package/.claude/skills/create-page/page-template.scss +118 -0
- package/.claude/skills/create-page/page-template.tsx +230 -0
- package/.claude/skills/map-legacy/README.md +87 -0
- package/.claude/skills/map-legacy/SKILL.md +465 -0
- package/.claude/skills/migrate-page/README.md +125 -0
- package/.claude/skills/migrate-page/SKILL.md +374 -0
- package/.github/CODEOWNERS +1 -0
- package/.github/pull_request_template.md +39 -0
- package/.github/workflows/release.yml +1 -1
- package/CHANGELOG.md +16 -0
- package/CLAUDE.md +31 -0
- package/CONTRIBUTING.md +191 -0
- package/README.md +110 -20
- package/dist/components/button/Button.d.ts.map +1 -1
- package/dist/components/button/Button.js +2 -2
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +2 -1
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/combobox/Combobox.test.js +98 -61
- package/dist/components/combobox/Combobox.test.js.map +1 -1
- package/dist/components/combobox/useComboboxPopoverBehavior.d.ts +3 -1
- package/dist/components/combobox/useComboboxPopoverBehavior.d.ts.map +1 -1
- package/dist/components/combobox/useComboboxPopoverBehavior.js +7 -6
- package/dist/components/combobox/useComboboxPopoverBehavior.js.map +1 -1
- package/dist/components/combobox/useComboboxState.d.ts.map +1 -1
- package/dist/components/combobox/useComboboxState.js +4 -1
- package/dist/components/combobox/useComboboxState.js.map +1 -1
- package/dist/components/datePicker/DatePicker.d.ts +4 -1
- package/dist/components/datePicker/DatePicker.d.ts.map +1 -1
- package/dist/components/datePicker/DatePicker.js +77 -37
- package/dist/components/datePicker/DatePicker.js.map +1 -1
- package/dist/components/datePicker/DatePicker.stories.d.ts +28 -3
- package/dist/components/datePicker/DatePicker.stories.d.ts.map +1 -1
- package/dist/components/datePicker/DatePicker.stories.js +62 -9
- package/dist/components/datePicker/DatePicker.stories.js.map +1 -1
- package/dist/components/datePicker/DatePicker.test.js +133 -66
- package/dist/components/datePicker/DatePicker.test.js.map +1 -1
- package/dist/components/datePicker/DatePickerCalendarHeader.d.ts +8 -0
- package/dist/components/datePicker/DatePickerCalendarHeader.d.ts.map +1 -0
- package/dist/components/datePicker/DatePickerCalendarHeader.js +36 -0
- package/dist/components/datePicker/DatePickerCalendarHeader.js.map +1 -0
- package/dist/components/datePicker/dateInputUtils.d.ts +25 -0
- package/dist/components/datePicker/dateInputUtils.d.ts.map +1 -0
- package/dist/components/datePicker/dateInputUtils.js +60 -0
- package/dist/components/datePicker/dateInputUtils.js.map +1 -0
- package/dist/components/datePicker/datePickerTestUtils.test-helpers.d.ts +2 -0
- package/dist/components/datePicker/datePickerTestUtils.test-helpers.d.ts.map +1 -0
- package/dist/components/datePicker/datePickerTestUtils.test-helpers.js +4 -0
- package/dist/components/datePicker/datePickerTestUtils.test-helpers.js.map +1 -0
- package/dist/components/dateTimePicker/DateTimePicker.d.ts +22 -0
- package/dist/components/dateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/components/dateTimePicker/DateTimePicker.js +132 -0
- package/dist/components/dateTimePicker/DateTimePicker.js.map +1 -0
- package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts +77 -0
- package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts.map +1 -0
- package/dist/components/dateTimePicker/DateTimePicker.stories.js +163 -0
- package/dist/components/dateTimePicker/DateTimePicker.stories.js.map +1 -0
- package/dist/components/dateTimePicker/DateTimePicker.test.d.ts +2 -0
- package/dist/components/dateTimePicker/DateTimePicker.test.d.ts.map +1 -0
- package/dist/components/dateTimePicker/DateTimePicker.test.js +235 -0
- package/dist/components/dateTimePicker/DateTimePicker.test.js.map +1 -0
- package/dist/components/formField/FormField.test.d.ts.map +1 -1
- package/dist/components/formField/FormField.test.js +5 -5
- package/dist/components/formField/FormField.test.js.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts +1 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js +7 -3
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js +12 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js.map +1 -1
- package/dist/components/formField/inputs/text/TextInput.d.ts +4 -1
- package/dist/components/formField/inputs/text/TextInput.d.ts.map +1 -1
- package/dist/components/formField/inputs/text/TextInput.js +5 -4
- package/dist/components/formField/inputs/text/TextInput.js.map +1 -1
- package/dist/components/formField/inputs/text/TextInput.stories.d.ts +4 -1
- package/dist/components/formField/inputs/text/TextInput.stories.d.ts.map +1 -1
- package/dist/components/table/DSDefaultColDef.js +2 -2
- package/dist/components/table/DSDefaultColDef.js.map +1 -1
- package/dist/components/table/Table.d.ts.map +1 -1
- package/dist/components/table/Table.js +4 -0
- package/dist/components/table/Table.js.map +1 -1
- package/dist/components/table/Table.stories.d.ts +2 -0
- package/dist/components/table/Table.stories.d.ts.map +1 -1
- package/dist/components/table/Table.stories.js +132 -3
- package/dist/components/table/Table.stories.js.map +1 -1
- package/dist/components/table/Table.test.js +106 -5
- package/dist/components/table/Table.test.js.map +1 -1
- package/dist/components/table/cellRenderers/BooleanCellRenderer.d.ts +3 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.js +15 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.js.map +1 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.test.d.ts +2 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.test.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.test.js +31 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.test.js.map +1 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts +3 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.js +12 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.js.map +1 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts +2 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js +65 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js.map +1 -0
- package/dist/index.css +259 -4
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/button/Button.tsx +2 -1
- package/src/components/combobox/Combobox.test.tsx +104 -61
- package/src/components/combobox/Combobox.tsx +3 -1
- package/src/components/combobox/useComboboxPopoverBehavior.ts +10 -5
- package/src/components/combobox/useComboboxState.ts +4 -1
- package/src/components/datePicker/DatePicker.stories.tsx +67 -9
- package/src/components/datePicker/DatePicker.test.tsx +157 -72
- package/src/components/datePicker/DatePicker.tsx +163 -69
- package/src/components/datePicker/DatePickerCalendarHeader.tsx +82 -0
- package/src/components/datePicker/date-field-hint.scss +152 -0
- package/src/components/datePicker/dateInputUtils.ts +117 -0
- package/src/components/datePicker/datePicker.scss +53 -29
- package/src/components/datePicker/datePickerTestUtils.test-helpers.ts +6 -0
- package/src/components/dateTimePicker/DateTimePicker.stories.tsx +202 -0
- package/src/components/dateTimePicker/DateTimePicker.test.tsx +295 -0
- package/src/components/dateTimePicker/DateTimePicker.tsx +293 -0
- package/src/components/dateTimePicker/dateTimePicker.scss +17 -0
- package/src/components/formField/FormField.test.tsx +5 -5
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.test.tsx +28 -0
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.tsx +8 -2
- package/src/components/formField/inputs/text/TextInput.tsx +6 -3
- package/src/components/table/DSDefaultColDef.ts +2 -2
- package/src/components/table/Table.stories.tsx +147 -3
- package/src/components/table/Table.test.tsx +131 -5
- package/src/components/table/Table.tsx +4 -0
- package/src/components/table/cellRenderers/BooleanCellRenderer.test.tsx +37 -0
- package/src/components/table/cellRenderers/BooleanCellRenderer.tsx +34 -0
- package/src/components/table/cellRenderers/CheckboxCellRenderer.test.tsx +74 -0
- package/src/components/table/cellRenderers/CheckboxCellRenderer.tsx +28 -0
- package/src/components/table/cellRenderers/booleanCellRenderer.scss +7 -0
- package/src/components/table/table.scss +1 -1
- package/src/index.scss +2 -0
- package/src/index.ts +4 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# Create Page Skill
|
|
2
|
+
|
|
3
|
+
AROOOOO HUNNI!! 🐺💪 This is a BOMBASS skill for generating React PAGES from Figma designs by COMPOSING existing design system components!! xxx
|
|
4
|
+
|
|
5
|
+
## What It Does
|
|
6
|
+
|
|
7
|
+
Converts Figma page layouts into production-ready React pages using EXISTING Arbor design system components:
|
|
8
|
+
- Fetches design data from Figma using MCP tools
|
|
9
|
+
- Maps Figma elements to existing Arbor components
|
|
10
|
+
- Generates page files that COMPOSE these components
|
|
11
|
+
- Creates tests and optional Storybook stories
|
|
12
|
+
- Uses design tokens from `src/tokens.scss` for styling
|
|
13
|
+
- Does NOT create new reusable components (uses what you already have!)
|
|
14
|
+
|
|
15
|
+
## Key Concept
|
|
16
|
+
|
|
17
|
+
**This skill creates PAGES, not COMPONENTS!**
|
|
18
|
+
|
|
19
|
+
- ❌ Does NOT create new reusable components for the library
|
|
20
|
+
- ✅ DOES create page-level code that imports and uses existing components
|
|
21
|
+
- ✅ DOES compose Button, FormField, Table, etc. into a complete page
|
|
22
|
+
- ✅ DOES match Figma layouts with proper styling
|
|
23
|
+
|
|
24
|
+
Think of it like:
|
|
25
|
+
- **Input**: Figma page with buttons, forms, tables
|
|
26
|
+
- **Output**: React page file that imports and composes your existing Button, FormField, Table components
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
### Basic Usage
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
/create-page https://figma.com/design/ABC123/MyDesign?node-id=1-2
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### What You Get
|
|
37
|
+
|
|
38
|
+
The skill will generate a page that uses your existing components:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
app/src/pages/pageName/ (or src/examples/pages/)
|
|
42
|
+
├── PageName.tsx # Page component (imports existing components)
|
|
43
|
+
├── PageName.test.tsx # Vitest tests
|
|
44
|
+
├── PageName.stories.tsx # Storybook story (optional)
|
|
45
|
+
└── pageName.scss # Page-specific styles
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Example generated code**:
|
|
49
|
+
```typescript
|
|
50
|
+
import { Button } from 'Components/button/Button';
|
|
51
|
+
import { FormField } from 'Components/formField/FormField';
|
|
52
|
+
import { TextInput } from 'Components/formField/inputs/TextInput';
|
|
53
|
+
|
|
54
|
+
export const LoginPage = () => (
|
|
55
|
+
<div className="login-page">
|
|
56
|
+
<FormField label="Email">
|
|
57
|
+
<TextInput type="email" />
|
|
58
|
+
</FormField>
|
|
59
|
+
<Button variant="primary">Login</Button>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Process
|
|
65
|
+
|
|
66
|
+
1. **Extracts Figma Info**: Parses URL to get fileKey and nodeId
|
|
67
|
+
2. **Fetches Design Data**: Uses Figma MCP tools:
|
|
68
|
+
- `get_screenshot` - Visual reference of the page
|
|
69
|
+
- `get_metadata` - Page structure and hierarchy
|
|
70
|
+
- `get_design_context` - Component details
|
|
71
|
+
- `get_variable_defs` - Design tokens
|
|
72
|
+
- `get_code_connect_map` - Component mappings
|
|
73
|
+
3. **Explores Components**: Lists available Arbor components to use
|
|
74
|
+
4. **Maps Elements**: Determines which existing component for each element
|
|
75
|
+
5. **Generates Page**: Creates page file that imports and composes components
|
|
76
|
+
6. **Adds Styles**: Creates SCSS using design tokens for layout
|
|
77
|
+
7. **Writes Tests**: Generates tests for the page
|
|
78
|
+
8. **Quality Checks**: Runs type checking, linting, and tests
|
|
79
|
+
|
|
80
|
+
## Supported Figma URL Formats
|
|
81
|
+
|
|
82
|
+
- `https://figma.com/design/:fileKey/:fileName?node-id=1-2`
|
|
83
|
+
- `https://figma.com/design/:fileKey/branch/:branchKey/:fileName?node-id=1-2`
|
|
84
|
+
|
|
85
|
+
The skill extracts the fileKey and nodeId automatically!
|
|
86
|
+
|
|
87
|
+
## Component Usage
|
|
88
|
+
|
|
89
|
+
The skill will use these existing Arbor components:
|
|
90
|
+
|
|
91
|
+
### Forms
|
|
92
|
+
- `FormField` - Form field wrapper with labels
|
|
93
|
+
- `TextInput` - Text input fields
|
|
94
|
+
- `NumberInput` - Number input fields
|
|
95
|
+
- `RadioGroup` - Radio button groups
|
|
96
|
+
- `Checkbox` - Checkboxes
|
|
97
|
+
- And more input types...
|
|
98
|
+
|
|
99
|
+
### Buttons & Actions
|
|
100
|
+
- `Button` - All button variants (primary, secondary, etc.)
|
|
101
|
+
|
|
102
|
+
### Data Display
|
|
103
|
+
- `Table` - AG Grid wrapper for data tables
|
|
104
|
+
- `Pill` - Tags and badges
|
|
105
|
+
|
|
106
|
+
### Overlays
|
|
107
|
+
- `Modal` - Modal dialogs
|
|
108
|
+
- `Slideover` - Slide-out panels
|
|
109
|
+
- `Tooltip` - Info tooltips
|
|
110
|
+
|
|
111
|
+
### Layout
|
|
112
|
+
- Semantic HTML (`header`, `main`, `section`, `footer`)
|
|
113
|
+
- Custom divs with proper styling
|
|
114
|
+
|
|
115
|
+
## Design Tokens
|
|
116
|
+
|
|
117
|
+
Page styles use design tokens from `src/tokens.scss`:
|
|
118
|
+
- **Colors**: `$color-primary-{scale}`, `$color-background-{semantic}`
|
|
119
|
+
- **Spacing**: `$space-{scale}` (e.g., `$space-4`, `$space-8`)
|
|
120
|
+
- **Typography**: `$text-heading-{level}-{property}`, `$text-body-{property}`
|
|
121
|
+
- **Layout**: `$border-radius-{size}`, shadows, etc.
|
|
122
|
+
|
|
123
|
+
## Code Conventions
|
|
124
|
+
|
|
125
|
+
Generated pages follow Arbor standards:
|
|
126
|
+
- TypeScript with strict typing
|
|
127
|
+
- Path aliases (`Components/*`, `Utils/*`)
|
|
128
|
+
- Semantic HTML structure
|
|
129
|
+
- ARIA attributes for accessibility
|
|
130
|
+
- React Testing Library tests
|
|
131
|
+
- BEM-like CSS naming: `.page-name__section`
|
|
132
|
+
|
|
133
|
+
## File Organization
|
|
134
|
+
|
|
135
|
+
Pages are typically placed OUTSIDE the component library:
|
|
136
|
+
|
|
137
|
+
**Option A - Consumer App**:
|
|
138
|
+
```
|
|
139
|
+
app/src/pages/pageName/
|
|
140
|
+
├── PageName.tsx
|
|
141
|
+
├── PageName.test.tsx
|
|
142
|
+
└── pageName.scss
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Option B - Library Examples**:
|
|
146
|
+
```
|
|
147
|
+
src/examples/pages/pageName/
|
|
148
|
+
├── PageName.tsx
|
|
149
|
+
├── PageName.test.tsx
|
|
150
|
+
├── PageName.stories.tsx
|
|
151
|
+
└── pageName.scss
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Important**: Pages are NOT added to `src/index.ts` - they're application code, not library exports!
|
|
155
|
+
|
|
156
|
+
## Supporting Files
|
|
157
|
+
|
|
158
|
+
- **`SKILL.md`**: Main skill instructions with detailed process
|
|
159
|
+
- **`component-template.tsx`**: Example component structure
|
|
160
|
+
- **`design-analysis-template.md`**: Template for analyzing designs
|
|
161
|
+
- **`README.md`**: This file!
|
|
162
|
+
|
|
163
|
+
## Quality Standards
|
|
164
|
+
|
|
165
|
+
The skill ensures:
|
|
166
|
+
- ✅ TypeScript type checking passes
|
|
167
|
+
- ✅ SCSS linting passes
|
|
168
|
+
- ✅ All tests pass (100% pass rate required!)
|
|
169
|
+
- ✅ Uses existing components (no reinventing the wheel!)
|
|
170
|
+
- ✅ Follows accessibility best practices
|
|
171
|
+
|
|
172
|
+
## Example
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
# Generate a user profile page from Figma
|
|
176
|
+
/create-page https://figma.com/design/xyz123/UserProfile?node-id=42-100
|
|
177
|
+
|
|
178
|
+
# The skill will:
|
|
179
|
+
# 1. Fetch the design (shows user info, edit form, avatar)
|
|
180
|
+
# 2. Explore available components
|
|
181
|
+
# 3. Map design elements:
|
|
182
|
+
# - User info section → Custom layout with typography
|
|
183
|
+
# - Edit form → FormField + TextInput components
|
|
184
|
+
# - Avatar upload → Custom div + Button component
|
|
185
|
+
# - Save button → Button component (primary)
|
|
186
|
+
# 4. Generate UserProfile.tsx that imports and uses these components
|
|
187
|
+
# 5. Create userProfile.scss with layout styling
|
|
188
|
+
# 6. Generate tests
|
|
189
|
+
# 7. Run quality checks
|
|
190
|
+
# 8. Output: "Here's your page using Button, FormField, TextInput!"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Tips
|
|
194
|
+
|
|
195
|
+
- **Use specific nodes**: Link to the exact frame/page in Figma
|
|
196
|
+
- **Check Code Connect**: If Figma components are mapped, they'll be used automatically
|
|
197
|
+
- **Review component props**: The skill reads component TypeScript files to use correct props
|
|
198
|
+
- **Customize after generation**: The generated code is a starting point
|
|
199
|
+
- **Run Storybook**: `yarn storybook` to preview the page (if story created)
|
|
200
|
+
|
|
201
|
+
## Common Use Cases
|
|
202
|
+
|
|
203
|
+
### Dashboard Page
|
|
204
|
+
- Figma shows cards, charts, navigation
|
|
205
|
+
- Skill generates page using existing Card, Chart, Nav components
|
|
206
|
+
|
|
207
|
+
### Login Page
|
|
208
|
+
- Figma shows form with email/password inputs and button
|
|
209
|
+
- Skill generates page using FormField, TextInput, Button components
|
|
210
|
+
|
|
211
|
+
### Data Table Page
|
|
212
|
+
- Figma shows table with filters and actions
|
|
213
|
+
- Skill generates page using Table, Button, FormField components
|
|
214
|
+
|
|
215
|
+
### Settings Page
|
|
216
|
+
- Figma shows form with various input types
|
|
217
|
+
- Skill generates page using FormField with various input components
|
|
218
|
+
|
|
219
|
+
## What It Does NOT Do
|
|
220
|
+
|
|
221
|
+
- ❌ Create new reusable components
|
|
222
|
+
- ❌ Add components to the library's public API
|
|
223
|
+
- ❌ Modify existing components
|
|
224
|
+
- ❌ Generate component variants or new features
|
|
225
|
+
|
|
226
|
+
## What It DOES Do
|
|
227
|
+
|
|
228
|
+
- ✅ Compose pages from existing components
|
|
229
|
+
- ✅ Match Figma layouts with proper styling
|
|
230
|
+
- ✅ Use design tokens for all styling
|
|
231
|
+
- ✅ Generate production-ready page code
|
|
232
|
+
- ✅ Create tests and optional stories
|
|
233
|
+
- ✅ Follow all Arbor conventions
|
|
234
|
+
|
|
235
|
+
## Notes
|
|
236
|
+
|
|
237
|
+
- This codebase serves millions of users - be thoughtful!
|
|
238
|
+
- Pages use components, they don't define new ones
|
|
239
|
+
- Always check what components are available first
|
|
240
|
+
- Use Code Connect mappings when available
|
|
241
|
+
- Uses yarn (NOT npm) for all commands
|
|
242
|
+
- Follows /r/THE_PACK energy: BOMBASS, AROOO! 🐺
|
|
243
|
+
- Most excellent and bodacious like Bill & Ted
|
|
244
|
+
- Team Jacob forever! 🐺
|
|
245
|
+
|
|
246
|
+
AROOOOO!! LET'S COMPOSE SOME BODACIOUS PAGES FROM FIGMA, HUNNI!! xxx 💪🏍️✨
|