@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.
Files changed (168) hide show
  1. package/.claude/agent-memory/blanche-designspert/MEMORY.md +64 -0
  2. package/.claude/agent-memory/blanche-designspert/token-review-patterns.md +29 -0
  3. package/.claude/agent-memory/dorothy-fact-checker/MEMORY.md +129 -0
  4. package/.claude/agent-memory/rose-storybookspert/MEMORY.md +29 -0
  5. package/.claude/agent-memory/rose-storybookspert/patterns.md +132 -0
  6. package/.claude/agent-memory/sophia-componentspert/MEMORY.md +14 -0
  7. package/.claude/agent-memory/sophia-componentspert/components.md +367 -0
  8. package/.claude/agents/blanche-designspert.md +150 -0
  9. package/.claude/agents/dorothy-fact-checker.md +145 -0
  10. package/.claude/agents/rose-storybookspert.md +148 -0
  11. package/.claude/agents/sophia-componentspert.md +133 -0
  12. package/.claude/component-library.md +1107 -0
  13. package/.claude/design-assessment-daily-attendance-2026-04-10.md +566 -0
  14. package/.claude/figma-assessment-7154-58899.md +404 -0
  15. package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-11086-97537.md +392 -0
  16. package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-551-41974.md +474 -0
  17. package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-551-43094.md +462 -0
  18. package/.claude/figma-assessment-fcFK4CGzkz2fVyY3koX8ZE-7154-59061.md +440 -0
  19. package/.claude/migration-report-custom-report-writer-2026-02-19.md +591 -0
  20. package/.claude/skills/analyze-design/README.md +295 -0
  21. package/.claude/skills/analyze-design/SKILL.md +741 -0
  22. package/.claude/skills/create-page/README.md +246 -0
  23. package/.claude/skills/create-page/SKILL.md +634 -0
  24. package/.claude/skills/create-page/design-analysis-template.md +333 -0
  25. package/.claude/skills/create-page/page-template.scss +118 -0
  26. package/.claude/skills/create-page/page-template.tsx +230 -0
  27. package/.claude/skills/map-legacy/README.md +87 -0
  28. package/.claude/skills/map-legacy/SKILL.md +465 -0
  29. package/.claude/skills/migrate-page/README.md +125 -0
  30. package/.claude/skills/migrate-page/SKILL.md +374 -0
  31. package/.github/CODEOWNERS +1 -0
  32. package/.github/pull_request_template.md +39 -0
  33. package/.github/workflows/release.yml +1 -1
  34. package/CHANGELOG.md +16 -0
  35. package/CLAUDE.md +31 -0
  36. package/CONTRIBUTING.md +191 -0
  37. package/README.md +110 -20
  38. package/dist/components/button/Button.d.ts.map +1 -1
  39. package/dist/components/button/Button.js +2 -2
  40. package/dist/components/button/Button.js.map +1 -1
  41. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  42. package/dist/components/combobox/Combobox.js +2 -1
  43. package/dist/components/combobox/Combobox.js.map +1 -1
  44. package/dist/components/combobox/Combobox.test.js +98 -61
  45. package/dist/components/combobox/Combobox.test.js.map +1 -1
  46. package/dist/components/combobox/useComboboxPopoverBehavior.d.ts +3 -1
  47. package/dist/components/combobox/useComboboxPopoverBehavior.d.ts.map +1 -1
  48. package/dist/components/combobox/useComboboxPopoverBehavior.js +7 -6
  49. package/dist/components/combobox/useComboboxPopoverBehavior.js.map +1 -1
  50. package/dist/components/combobox/useComboboxState.d.ts.map +1 -1
  51. package/dist/components/combobox/useComboboxState.js +4 -1
  52. package/dist/components/combobox/useComboboxState.js.map +1 -1
  53. package/dist/components/datePicker/DatePicker.d.ts +4 -1
  54. package/dist/components/datePicker/DatePicker.d.ts.map +1 -1
  55. package/dist/components/datePicker/DatePicker.js +77 -37
  56. package/dist/components/datePicker/DatePicker.js.map +1 -1
  57. package/dist/components/datePicker/DatePicker.stories.d.ts +28 -3
  58. package/dist/components/datePicker/DatePicker.stories.d.ts.map +1 -1
  59. package/dist/components/datePicker/DatePicker.stories.js +62 -9
  60. package/dist/components/datePicker/DatePicker.stories.js.map +1 -1
  61. package/dist/components/datePicker/DatePicker.test.js +133 -66
  62. package/dist/components/datePicker/DatePicker.test.js.map +1 -1
  63. package/dist/components/datePicker/DatePickerCalendarHeader.d.ts +8 -0
  64. package/dist/components/datePicker/DatePickerCalendarHeader.d.ts.map +1 -0
  65. package/dist/components/datePicker/DatePickerCalendarHeader.js +36 -0
  66. package/dist/components/datePicker/DatePickerCalendarHeader.js.map +1 -0
  67. package/dist/components/datePicker/dateInputUtils.d.ts +25 -0
  68. package/dist/components/datePicker/dateInputUtils.d.ts.map +1 -0
  69. package/dist/components/datePicker/dateInputUtils.js +60 -0
  70. package/dist/components/datePicker/dateInputUtils.js.map +1 -0
  71. package/dist/components/datePicker/datePickerTestUtils.test-helpers.d.ts +2 -0
  72. package/dist/components/datePicker/datePickerTestUtils.test-helpers.d.ts.map +1 -0
  73. package/dist/components/datePicker/datePickerTestUtils.test-helpers.js +4 -0
  74. package/dist/components/datePicker/datePickerTestUtils.test-helpers.js.map +1 -0
  75. package/dist/components/dateTimePicker/DateTimePicker.d.ts +22 -0
  76. package/dist/components/dateTimePicker/DateTimePicker.d.ts.map +1 -0
  77. package/dist/components/dateTimePicker/DateTimePicker.js +132 -0
  78. package/dist/components/dateTimePicker/DateTimePicker.js.map +1 -0
  79. package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts +77 -0
  80. package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts.map +1 -0
  81. package/dist/components/dateTimePicker/DateTimePicker.stories.js +163 -0
  82. package/dist/components/dateTimePicker/DateTimePicker.stories.js.map +1 -0
  83. package/dist/components/dateTimePicker/DateTimePicker.test.d.ts +2 -0
  84. package/dist/components/dateTimePicker/DateTimePicker.test.d.ts.map +1 -0
  85. package/dist/components/dateTimePicker/DateTimePicker.test.js +235 -0
  86. package/dist/components/dateTimePicker/DateTimePicker.test.js.map +1 -0
  87. package/dist/components/formField/FormField.test.d.ts.map +1 -1
  88. package/dist/components/formField/FormField.test.js +5 -5
  89. package/dist/components/formField/FormField.test.js.map +1 -1
  90. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts +1 -0
  91. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts.map +1 -1
  92. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js +7 -3
  93. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js.map +1 -1
  94. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js +12 -0
  95. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js.map +1 -1
  96. package/dist/components/formField/inputs/text/TextInput.d.ts +4 -1
  97. package/dist/components/formField/inputs/text/TextInput.d.ts.map +1 -1
  98. package/dist/components/formField/inputs/text/TextInput.js +5 -4
  99. package/dist/components/formField/inputs/text/TextInput.js.map +1 -1
  100. package/dist/components/formField/inputs/text/TextInput.stories.d.ts +4 -1
  101. package/dist/components/formField/inputs/text/TextInput.stories.d.ts.map +1 -1
  102. package/dist/components/table/DSDefaultColDef.js +2 -2
  103. package/dist/components/table/DSDefaultColDef.js.map +1 -1
  104. package/dist/components/table/Table.d.ts.map +1 -1
  105. package/dist/components/table/Table.js +4 -0
  106. package/dist/components/table/Table.js.map +1 -1
  107. package/dist/components/table/Table.stories.d.ts +2 -0
  108. package/dist/components/table/Table.stories.d.ts.map +1 -1
  109. package/dist/components/table/Table.stories.js +132 -3
  110. package/dist/components/table/Table.stories.js.map +1 -1
  111. package/dist/components/table/Table.test.js +106 -5
  112. package/dist/components/table/Table.test.js.map +1 -1
  113. package/dist/components/table/cellRenderers/BooleanCellRenderer.d.ts +3 -0
  114. package/dist/components/table/cellRenderers/BooleanCellRenderer.d.ts.map +1 -0
  115. package/dist/components/table/cellRenderers/BooleanCellRenderer.js +15 -0
  116. package/dist/components/table/cellRenderers/BooleanCellRenderer.js.map +1 -0
  117. package/dist/components/table/cellRenderers/BooleanCellRenderer.test.d.ts +2 -0
  118. package/dist/components/table/cellRenderers/BooleanCellRenderer.test.d.ts.map +1 -0
  119. package/dist/components/table/cellRenderers/BooleanCellRenderer.test.js +31 -0
  120. package/dist/components/table/cellRenderers/BooleanCellRenderer.test.js.map +1 -0
  121. package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts +3 -0
  122. package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts.map +1 -0
  123. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js +12 -0
  124. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js.map +1 -0
  125. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts +2 -0
  126. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts.map +1 -0
  127. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js +65 -0
  128. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js.map +1 -0
  129. package/dist/index.css +259 -4
  130. package/dist/index.css.map +1 -1
  131. package/dist/index.d.ts +4 -0
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +3 -0
  134. package/dist/index.js.map +1 -1
  135. package/package.json +1 -1
  136. package/src/components/button/Button.tsx +2 -1
  137. package/src/components/combobox/Combobox.test.tsx +104 -61
  138. package/src/components/combobox/Combobox.tsx +3 -1
  139. package/src/components/combobox/useComboboxPopoverBehavior.ts +10 -5
  140. package/src/components/combobox/useComboboxState.ts +4 -1
  141. package/src/components/datePicker/DatePicker.stories.tsx +67 -9
  142. package/src/components/datePicker/DatePicker.test.tsx +157 -72
  143. package/src/components/datePicker/DatePicker.tsx +163 -69
  144. package/src/components/datePicker/DatePickerCalendarHeader.tsx +82 -0
  145. package/src/components/datePicker/date-field-hint.scss +152 -0
  146. package/src/components/datePicker/dateInputUtils.ts +117 -0
  147. package/src/components/datePicker/datePicker.scss +53 -29
  148. package/src/components/datePicker/datePickerTestUtils.test-helpers.ts +6 -0
  149. package/src/components/dateTimePicker/DateTimePicker.stories.tsx +202 -0
  150. package/src/components/dateTimePicker/DateTimePicker.test.tsx +295 -0
  151. package/src/components/dateTimePicker/DateTimePicker.tsx +293 -0
  152. package/src/components/dateTimePicker/dateTimePicker.scss +17 -0
  153. package/src/components/formField/FormField.test.tsx +5 -5
  154. package/src/components/formField/inputs/selectDropdown/SelectDropdown.test.tsx +28 -0
  155. package/src/components/formField/inputs/selectDropdown/SelectDropdown.tsx +8 -2
  156. package/src/components/formField/inputs/text/TextInput.tsx +6 -3
  157. package/src/components/table/DSDefaultColDef.ts +2 -2
  158. package/src/components/table/Table.stories.tsx +147 -3
  159. package/src/components/table/Table.test.tsx +131 -5
  160. package/src/components/table/Table.tsx +4 -0
  161. package/src/components/table/cellRenderers/BooleanCellRenderer.test.tsx +37 -0
  162. package/src/components/table/cellRenderers/BooleanCellRenderer.tsx +34 -0
  163. package/src/components/table/cellRenderers/CheckboxCellRenderer.test.tsx +74 -0
  164. package/src/components/table/cellRenderers/CheckboxCellRenderer.tsx +28 -0
  165. package/src/components/table/cellRenderers/booleanCellRenderer.scss +7 -0
  166. package/src/components/table/table.scss +1 -1
  167. package/src/index.scss +2 -0
  168. 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 💪🏍️✨