@arbor-education/design-system.components 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) 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/CHANGELOG.md +14 -0
  34. package/CLAUDE.md +31 -0
  35. package/CONTRIBUTING.md +191 -0
  36. package/README.md +110 -20
  37. package/dist/components/table/DSDefaultColDef.js +2 -2
  38. package/dist/components/table/DSDefaultColDef.js.map +1 -1
  39. package/dist/components/table/Table.d.ts +5 -29
  40. package/dist/components/table/Table.d.ts.map +1 -1
  41. package/dist/components/table/Table.js +12 -22
  42. package/dist/components/table/Table.js.map +1 -1
  43. package/dist/components/table/Table.stories.d.ts +4 -0
  44. package/dist/components/table/Table.stories.d.ts.map +1 -1
  45. package/dist/components/table/Table.stories.js +163 -28
  46. package/dist/components/table/Table.stories.js.map +1 -1
  47. package/dist/components/table/Table.test.js +109 -8
  48. package/dist/components/table/Table.test.js.map +1 -1
  49. package/dist/components/table/TableSettingsContext.d.ts +13 -0
  50. package/dist/components/table/TableSettingsContext.d.ts.map +1 -0
  51. package/dist/components/table/TableSettingsContext.js +15 -0
  52. package/dist/components/table/TableSettingsContext.js.map +1 -0
  53. package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts +3 -0
  54. package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts.map +1 -0
  55. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js +12 -0
  56. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js.map +1 -0
  57. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts +2 -0
  58. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts.map +1 -0
  59. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js +65 -0
  60. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js.map +1 -0
  61. package/dist/components/table/tableConsts.d.ts +7 -0
  62. package/dist/components/table/tableConsts.d.ts.map +1 -0
  63. package/dist/components/table/tableConsts.js +8 -0
  64. package/dist/components/table/tableConsts.js.map +1 -0
  65. package/dist/components/table/{BulkActionsDropdown.d.ts → tableControls/BulkActionsDropdown.d.ts} +1 -1
  66. package/dist/components/table/tableControls/BulkActionsDropdown.d.ts.map +1 -0
  67. package/dist/components/table/{BulkActionsDropdown.js → tableControls/BulkActionsDropdown.js} +3 -3
  68. package/dist/components/table/tableControls/BulkActionsDropdown.js.map +1 -0
  69. package/dist/components/table/{HideColumnsDropdown.d.ts → tableControls/HideColumnsDropdown.d.ts} +1 -2
  70. package/dist/components/table/tableControls/HideColumnsDropdown.d.ts.map +1 -0
  71. package/dist/components/table/{HideColumnsDropdown.js → tableControls/HideColumnsDropdown.js} +2 -2
  72. package/dist/components/table/tableControls/HideColumnsDropdown.js.map +1 -0
  73. package/dist/components/table/tableControls/TableControls.d.ts +23 -0
  74. package/dist/components/table/tableControls/TableControls.d.ts.map +1 -0
  75. package/dist/components/table/tableControls/TableControls.js +21 -0
  76. package/dist/components/table/tableControls/TableControls.js.map +1 -0
  77. package/dist/components/table/tableControls/TableControls.test.d.ts +2 -0
  78. package/dist/components/table/tableControls/TableControls.test.d.ts.map +1 -0
  79. package/dist/components/table/tableControls/TableControls.test.js +124 -0
  80. package/dist/components/table/tableControls/TableControls.test.js.map +1 -0
  81. package/dist/components/table/tableControls/TableSettingsDropdown.d.ts.map +1 -0
  82. package/dist/components/table/{TableSettingsDropdown.js → tableControls/TableSettingsDropdown.js} +7 -6
  83. package/dist/components/table/tableControls/TableSettingsDropdown.js.map +1 -0
  84. package/dist/components/table/useTableSettings.d.ts +1 -1
  85. package/dist/components/table/useTableSettings.d.ts.map +1 -1
  86. package/dist/components/table/useTableSettings.js +1 -1
  87. package/dist/components/table/useTableSettings.js.map +1 -1
  88. package/dist/index.css +19 -1
  89. package/dist/index.css.map +1 -1
  90. package/dist/index.d.ts +1 -0
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +1 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/utils/setAgGridLicenseKey.js +1 -1
  95. package/package.json +1 -1
  96. package/src/components/table/DSDefaultColDef.ts +2 -2
  97. package/src/components/table/Table.stories.tsx +202 -35
  98. package/src/components/table/Table.test.tsx +134 -8
  99. package/src/components/table/Table.tsx +12 -22
  100. package/src/components/table/TableSettingsContext.ts +15 -0
  101. package/src/components/table/cellRenderers/CheckboxCellRenderer.test.tsx +74 -0
  102. package/src/components/table/cellRenderers/CheckboxCellRenderer.tsx +28 -0
  103. package/src/components/table/table.scss +23 -1
  104. package/src/components/table/tableConsts.ts +6 -0
  105. package/src/components/table/{BulkActionsDropdown.tsx → tableControls/BulkActionsDropdown.tsx} +2 -2
  106. package/src/components/table/{HideColumnsDropdown.tsx → tableControls/HideColumnsDropdown.tsx} +2 -2
  107. package/src/components/table/tableControls/TableControls.test.tsx +150 -0
  108. package/src/components/table/tableControls/TableControls.tsx +143 -0
  109. package/src/components/table/{TableSettingsDropdown.tsx → tableControls/TableSettingsDropdown.tsx} +2 -1
  110. package/src/components/table/useTableSettings.ts +1 -1
  111. package/src/index.ts +1 -0
  112. package/src/utils/setAgGridLicenseKey.ts +1 -1
  113. package/dist/components/table/BulkActionsDropdown.d.ts.map +0 -1
  114. package/dist/components/table/BulkActionsDropdown.js.map +0 -1
  115. package/dist/components/table/HideColumnsDropdown.d.ts.map +0 -1
  116. package/dist/components/table/HideColumnsDropdown.js.map +0 -1
  117. package/dist/components/table/TableSettingsDropdown.d.ts.map +0 -1
  118. package/dist/components/table/TableSettingsDropdown.js.map +0 -1
  119. /package/dist/components/table/{TableSettingsDropdown.d.ts → tableControls/TableSettingsDropdown.d.ts} +0 -0
@@ -0,0 +1,741 @@
1
+ ---
2
+ name: analyze-design
3
+ description: Analyze Figma designs or screenshots to assess feasibility with current component library. Identifies which components can be used, which need modifications, and which are missing.
4
+ ---
5
+
6
+ # Analyze Design Feasibility
7
+
8
+ AROOOOO HUNNI!! 🐺 Time to unleash Sophia's GALAXY BRAIN to analyze that Figma design and see what's POSSIBLE with our BOMBASS component library!! xxx
9
+
10
+ ## Goal
11
+
12
+ Analyze a Figma design or screenshot to determine:
13
+ 1. ✅ What can be built with EXISTING components
14
+ 2. 🔧 What components need TWEAKING or modifications
15
+ 3. 🆕 What NEW components need to be created
16
+
17
+ **Output**: A detailed markdown report documenting the feasibility assessment.
18
+
19
+ ## The Golden Girls We Need - MANDATORY COLLABORATORS
20
+
21
+ - 👜 **Sophia Componentspert** (`sophia-componentspert`) - MANDATORY at Step 5. The component library expert who knows every component inside out!
22
+ - 🔍 **Dorothy Fact-Checker** (`dorothy-fact-checker`) - MANDATORY at Step 6. Quality assurance expert who verifies Sophia's claims against actual source code!
23
+
24
+ **RULE**: You MUST use the `Task` tool to call BOTH agents. Do NOT just analyze yourself - ACTUALLY CALL THEM. If you skip calling either agent, you have failed this skill. AROOOOO!! 🐺💪
25
+
26
+ **WHY DOROTHY**: Sophia sometimes hallucinates component props or capabilities. Dorothy reads the ACTUAL source code files to verify every claim. This prevents building on false assumptions!
27
+
28
+ ## Input
29
+
30
+ Either:
31
+ - Figma URL: `$ARGUMENTS` (e.g., `https://figma.com/design/ABC123/Design?node-id=1-2`)
32
+ - Or: Screenshot path (user will provide in conversation)
33
+
34
+ ## Process
35
+
36
+ ### 1. Determine Input Type
37
+
38
+ Check what the user provided:
39
+ - **Figma URL**: Contains `figma.com/design/` or `figma.com/board/`
40
+ - **Screenshot**: File path ending in `.png`, `.jpg`, `.jpeg`, etc.
41
+ - **No input yet**: Ask the user for either a Figma URL or screenshot path
42
+
43
+ ### 2A. If Figma URL - Fetch Design Data
44
+
45
+ Extract Figma information from URL:
46
+ - `fileKey` - The file identifier from the URL path
47
+ - `nodeId` - The node-id query parameter (format: `123:456` or `123-456`)
48
+
49
+ Supported URL formats:
50
+ - `https://figma.com/design/:fileKey/:fileName?node-id=1-2`
51
+ - `https://figma.com/design/:fileKey/branch/:branchKey/:fileName?node-id=1-2` (use branchKey as fileKey)
52
+ - `https://figma.com/board/:fileKey/:fileName?node-id=1-2` (FigJam)
53
+
54
+ **Fetch design data using Figma MCP tools**:
55
+
56
+ 1. **Get Screenshot**: Use `mcp__figma__get_screenshot`:
57
+ - `nodeId`: Extracted node ID (format `1:2`)
58
+ - `fileKey`: Extracted file key
59
+ - `clientFrameworks`: "react"
60
+ - `clientLanguages`: "typescript"
61
+
62
+ This gives visual context for analysis!
63
+
64
+ 2. **Get Metadata**: Use `mcp__figma__get_metadata`:
65
+ - Shows component hierarchy, layer types, names
66
+ - Reveals page structure and nesting
67
+ - Lists all UI elements present
68
+
69
+ 3. **Get Design Context**: Use `mcp__figma__get_design_context`:
70
+ - Shows detailed component structure and styles
71
+ - Provides Figma's own code suggestions (informative but we analyze against OUR library)
72
+
73
+ 4. **Get Code Connect Map**: Use `mcp__figma__get_code_connect_map`:
74
+ - Shows any existing mappings between Figma components and Arbor components
75
+ - CRITICAL - these mappings tell us what's already connected!
76
+
77
+ ### 2B. If Screenshot - Read the Image
78
+
79
+ Use the `Read` tool to load and view the screenshot:
80
+ ```
81
+ Read tool: file_path="<path-to-screenshot>"
82
+ ```
83
+
84
+ You'll see the image visually (Claude Code is multimodal) and can analyze the UI elements.
85
+
86
+ ### 3. Catalog UI Elements
87
+
88
+ List all distinct UI elements visible in the design:
89
+ - Buttons (and their variants/states)
90
+ - Form inputs (text, number, select, etc.)
91
+ - Headings and text styles
92
+ - Cards and containers
93
+ - Tables and data grids
94
+ - Icons
95
+ - Navigation elements
96
+ - Modals/dialogs/overlays
97
+ - Tags/badges/pills
98
+ - Dividers/separators
99
+ - Any other interactive or display components
100
+
101
+ Be thorough! The more complete your catalog, the better Sophia's analysis will be.
102
+
103
+ ### 4. Review Available Components
104
+
105
+ Read the component library manifest for a comprehensive view of every component, its props, variants, and use cases:
106
+
107
+ ```
108
+ Read tool: file_path=".claude/component-library.md"
109
+ ```
110
+
111
+ This manifest is the authoritative reference. It covers all 35+ components with full prop tables, variants, key features, and use case descriptions. Use it to build your catalog of what's available BEFORE calling Sophia.
112
+
113
+ The full component list includes: `Avatar`, `AvatarGroup`, `Banner`, `Button`, `Card`, `DatePicker`, `Dropdown`, `EditableText`, `FormField`, `Fieldset`, `TextInput`, `TextArea`, `NumberInput`, `CheckboxInput`, `CheckboxGroup`, `RadioButtonInput`, `RadioButtonGroup`, `SelectDropdown`, `ColourPickerDropdown`, `Heading`, `Icon`, `Modal`, `ModalManager`, `Pill`, `Progress`, `SearchBar`, `Section`, `Separator`, `Slideover`, `SlideoverManager`, `Table`, `Tabs`, `Tag`, `Toast`, `Tooltip`, `TooltipWrapper`, `UserDropdown`
114
+
115
+ **Pass the full manifest content to Sophia** in Step 5 so she has everything she needs without re-reading files herself.
116
+
117
+ ### ⚡ MANDATORY STEP 5 - CALL SOPHIA COMPONENTSPERT NOW ⚡
118
+
119
+ **YOU MUST USE THE `Task` tool RIGHT NOW** to launch the `sophia-componentspert` agent. This is NOT optional. Do NOT skip this. Do NOT proceed without calling her.
120
+
121
+ Sophia will analyze the design against the component library and provide expert assessment.
122
+
123
+ ```
124
+ Task tool: subagent_type="sophia-componentspert"
125
+ prompt: "I need you to analyze this design and assess what's possible with our current component library.
126
+
127
+ DESIGN INFORMATION:
128
+ [Paste the design screenshot description, metadata, and/or visual elements you identified]
129
+
130
+ UI ELEMENTS IDENTIFIED:
131
+ [List all the UI elements you cataloged in step 3]
132
+
133
+ AVAILABLE COMPONENTS:
134
+ [List the components from src/index.ts]
135
+
136
+ Please provide a detailed analysis with THREE sections:
137
+
138
+ 1. ✅ POSSIBLE WITH CURRENT COMPONENTS
139
+ - List each UI element from the design that CAN be built with existing components
140
+ - For each one, specify WHICH component(s) to use and key props
141
+ - Be specific about component APIs
142
+
143
+ 2. 🔧 NEEDS MODIFICATIONS
144
+ - List components that exist but would need tweaks/enhancements to match the design
145
+ - Specify exactly what modifications are needed (new props, new variants, style changes, etc.)
146
+ - Explain the gap between current component and design requirements
147
+
148
+ 3. 🆕 NEW COMPONENTS NEEDED
149
+ - List UI elements that don't have existing component equivalents
150
+ - Explain why existing components can't be adapted
151
+ - Suggest what would need to be built from scratch
152
+
153
+ Be thorough and specific! Think about component APIs, variants, and realistic feasibility."
154
+ ```
155
+
156
+ **WAIT for Sophia's response before continuing.** DO NOT proceed to the next step until you have Sophia's analysis.
157
+
158
+ ### ⚡ MANDATORY STEP 6 - CALL DOROTHY FACT-CHECKER NOW ⚡
159
+
160
+ **YOU MUST USE THE `Task` tool RIGHT NOW** to launch the `dorothy-fact-checker` agent. This is NOT optional. Sophia sometimes hallucin ates props or capabilities. Dorothy verifies EVERY claim against actual source code.
161
+
162
+ ```
163
+ Task tool: subagent_type="dorothy-fact-checker"
164
+ prompt: "Sophia just analyzed a Figma design and made claims about our component library. I need you to FACT-CHECK her claims by reading the actual source code files.
165
+
166
+ SOPHIA'S CLAIMS TO VERIFY:
167
+ [List the key components and props Sophia mentioned]
168
+
169
+ YOUR TASK:
170
+ 1. Read src/index.ts to verify what's exported
171
+ 2. Read the actual component files Sophia referenced (Button.tsx, Section.tsx, Table.tsx, Pill.tsx, Icon allowedIcons file, etc.)
172
+ 3. For each component Sophia mentioned, verify:
173
+ - Does it exist?
174
+ - Is it exported from src/index.ts (public API)?
175
+ - Do the props she mentioned actually exist?
176
+ - Are the prop NAMES correct? (e.g., is it 'defaultExpanded' or 'collapsed'?)
177
+ - Are icon names correct?
178
+ 4. Call out ANY hallucinations or incorrect information
179
+ 5. Provide CORRECTED information for anything wrong
180
+ 6. List every file you read to verify
181
+
182
+ BE BRUTALLY HONEST. If Sophia hallucinated props, got names wrong, or made incorrect claims, I need the truth. Check ACTUAL source code, not assumptions.
183
+
184
+ Here's what Sophia claimed: [paste relevant excerpts from Sophia's response]"
185
+ ```
186
+
187
+ **WAIT for Dorothy's response before continuing.** Her fact-check is CRITICAL.
188
+
189
+ After Dorothy responds, **REVIEW HER CORRECTIONS** and note any hallucinations or errors Sophia made. You will use Dorothy's CORRECTED information in the final report, NOT Sophia's original claims if they were wrong.
190
+
191
+ ### 7. Generate Feasibility Report
192
+
193
+ Using Sophia's analysis AND Dorothy's fact-checked corrections, create a comprehensive markdown report.
194
+
195
+ **CRITICAL**: Use Dorothy's CORRECTED information where she found errors! If Dorothy said a prop doesn't exist or has a different name, use her correction in the report, NOT Sophia's original claim.
196
+
197
+ **Report file naming**:
198
+ - For Figma URLs: `.claude/figma-assessment-{fileKey}-{nodeId-without-colons}.md`
199
+ - Example: `figma-assessment-ABC123-1-2.md`
200
+ - For screenshots: `.claude/design-assessment-{timestamp}.md`
201
+ - Example: `design-assessment-2026-02-19.md`
202
+
203
+ **Report structure** (see `.claude/figma-assessment-7154-58899.md` for reference format):
204
+
205
+ The report should be organized like Sophia's voice - conversational, with Sicilian anecdotes, but grounded in FACTS verified by Dorothy.
206
+
207
+ ```markdown
208
+ # Figma Design Feasibility Assessment
209
+ ## Design: Node {nodeId} — [Descriptive Title]
210
+ **Written by:** Sophia Petrillo, Componentspert, age none-of-your-business
211
+ **Fact-checked by:** Dorothy Zbornak, QA Expert
212
+ **Date**: [current date]
213
+
214
+ ---
215
+
216
+ ## What Is This Thing, Anyway?
217
+
218
+ [Sophia-voice description of the design with a Sicily anecdote. Describe what the design shows and its purpose.]
219
+
220
+ ---
221
+
222
+ ## Section 1: What We Already Have — Use These As-Is, Don't Reinvent Them
223
+
224
+ [For each component that CAN be used as-is, provide:]
225
+ ### ComponentName (`path/to/Component.tsx`)
226
+
227
+ [Brief Sophia-voice intro]
228
+
229
+ **Key features:**
230
+ - Prop details with ACTUAL prop names (verified by Dorothy)
231
+ - Code examples showing correct usage
232
+ - Any gotchas or notes
233
+
234
+ **Example:**
235
+ ```tsx
236
+ <Component prop="value" />
237
+ ```
238
+
239
+ [Continue for all ready-to-use components]
240
+
241
+ ---
242
+
243
+ ## Section 2: Almost There — Minor Issues or Gotchas
244
+
245
+ [Components that exist but have caveats, missing exports, or minor limitations]
246
+
247
+ ### ComponentName
248
+
249
+ **What exists:** [Current state]
250
+ **What's needed:** [Gap or issue]
251
+ **The fix:** [Specific action needed]
252
+
253
+ ---
254
+
255
+ ## Section 3: Build It From Scratch — These Don't Exist Yet
256
+
257
+ [UI elements that have NO component equivalents]
258
+
259
+ ### ElementName
260
+
261
+ [Why it doesn't exist, what would be needed, effort estimate]
262
+
263
+ ---
264
+
265
+ ## Section 4: Tricky Bits — Pay Attention Here
266
+
267
+ [Complex integration points, state management concerns, gotchas]
268
+
269
+ ### 1. [Tricky Thing]
270
+
271
+ [Detailed explanation of the complexity and how to handle it]
272
+
273
+ ---
274
+
275
+ ## Section 5: The Verdict
276
+
277
+ [Sophia's overall assessment with Sicily anecdote]
278
+
279
+ ### Is It Buildable With Our Existing Components?
280
+
281
+ **[Yes/No/Mostly]. [Confidence level].**
282
+
283
+ **Summary Table:**
284
+
285
+ | Design Element | Library Component | Status |
286
+ |---|---|---|
287
+ | Element | Component | Ready/Needs work/Missing |
288
+
289
+ ### What Actually Needs Work
290
+
291
+ | Item | Where It Lives | Effort |
292
+ |---|---|---|
293
+ | Thing | Location | Low/Medium/High |
294
+
295
+ ### Summary Verdict
296
+
297
+ [Final recommendation]
298
+
299
+ ---
300
+
301
+ ## Appendix: Files Referenced in This Assessment
302
+
303
+ [List EVERY file that Dorothy read to verify claims. This proves the assessment is grounded in actual code, not hallucinations.]
304
+
305
+ - `path/to/file1.tsx`
306
+ - `path/to/file2.tsx`
307
+ - ...
308
+
309
+ ---
310
+
311
+ ## Design Overview
312
+
313
+ [Brief description of what the design shows - e.g., "A user profile page with avatar, form fields, and action buttons"]
314
+
315
+ ### UI Elements Identified
316
+
317
+ [Bulleted list of all UI elements cataloged]
318
+
319
+ ---
320
+
321
+ ## Assessment
322
+
323
+ ### ✅ Possible with Current Components
324
+
325
+ [Sophia's analysis of what CAN be built]
326
+
327
+ For each element, include:
328
+ - **Design element**: [name from design]
329
+ - **Component to use**: `ComponentName`
330
+ - **Key props**: [relevant props and values]
331
+ - **Notes**: [any usage considerations]
332
+
333
+ Example:
334
+ - **Design element**: Primary action button
335
+ - **Component to use**: `Button`
336
+ - **Key props**: `variant="primary"`, `onClick={...}`
337
+ - **Notes**: Supports all button states (hover, disabled, loading)
338
+
339
+ ### 🔧 Components Needing Modifications
340
+
341
+ [Sophia's analysis of what needs tweaking]
342
+
343
+ For each component, include:
344
+ - **Component**: `ComponentName`
345
+ - **Current limitation**: [what it can't do now]
346
+ - **Required modification**: [what needs to change]
347
+ - **Impact**: [Low/Medium/High effort estimate]
348
+
349
+ Example:
350
+ - **Component**: `FormField`
351
+ - **Current limitation**: No inline validation indicator
352
+ - **Required modification**: Add `showValidationIcon` prop to display checkmark/error icon inline with input
353
+ - **Impact**: Medium - requires new prop and styling for icon positioning
354
+
355
+ ### 🆕 New Components Required
356
+
357
+ [Sophia's analysis of what doesn't exist]
358
+
359
+ For each new component, include:
360
+ - **Design element**: [name from design]
361
+ - **Why existing components don't fit**: [explanation]
362
+ - **Suggested component**: `NewComponentName`
363
+ - **Key features needed**: [list of requirements]
364
+
365
+ Example:
366
+ - **Design element**: Expandable timeline with nested events
367
+ - **Why existing components don't fit**: No existing component handles nested, expandable timeline visualization
368
+ - **Suggested component**: `Timeline`
369
+ - **Key features needed**:
370
+ - Vertical timeline display
371
+ - Nested event support
372
+ - Expand/collapse functionality
373
+ - Icon/avatar support for events
374
+ - Date formatting
375
+
376
+ ---
377
+
378
+ ## Summary
379
+
380
+ **Feasibility Score**: [X/Y elements can be built with current components]
381
+
382
+ - ✅ **Ready to build**: X elements
383
+ - 🔧 **Needs modifications**: Y components
384
+ - 🆕 **Requires new components**: Z elements
385
+
386
+ **Recommendation**: [Overall assessment - "Highly feasible with minor tweaks" / "Requires significant component work" / etc.]
387
+
388
+ ---
389
+
390
+ ## Next Steps
391
+
392
+ 1. **For immediate implementation**: Use the components identified in the "Possible with Current Components" section
393
+ 2. **For modifications**: Prioritize the modifications by impact and implement them before building the design
394
+ 3. **For new components**: Consider whether to build new components or adjust the design to use existing ones
395
+
396
+ **To generate a page from this design**: Use `/create-page [figma-url]` after addressing required modifications and new components.
397
+
398
+ ---
399
+
400
+ *Analysis by Sophia Componentspert 👜, fact-checked by Dorothy Zbornak 🔍*
401
+ *Powered by Claude Code 🐺*
402
+ ```
403
+
404
+ ### 8. Write Report to File
405
+
406
+ Use the `Write` tool to create the assessment markdown file:
407
+
408
+ ```
409
+ Write tool:
410
+ file_path: ".claude/figma-assessment-{fileKey}-{nodeId}.md"
411
+ content: [the generated report]
412
+ ```
413
+
414
+ ### 9. Present Summary to User
415
+
416
+ After writing the report, share a BOMBASS summary with the user:
417
+
418
+ **Share Sophia's wisdom AND Dorothy's fact-checking** (relay key points):
419
+
420
+ > 👜 **Sophia says:** _[relay Sophia's overall assessment in her warm, knowledgeable voice - e.g. "Oh pussycat, this design is MOSTLY doable with what we have! That form section? Our FormField and TextInput are perfect for it. The data table? Table component has you covered. But that custom timeline visualization? That's gonna need a whole new component, babe. Here's the breakdown..."]_
421
+
422
+ Then provide:
423
+ 1. 📊 **Feasibility score**: "X out of Y elements can be built with current components"
424
+ 2. ✅ **Highlights**: List 2-3 major elements that ARE possible
425
+ 3. 🔧 **Modifications needed**: Briefly note any tweaks required
426
+ 4. 🆕 **New components**: List any components that need creating
427
+ 5. 📄 **Report location**: Path to the generated markdown file
428
+
429
+ Then ask the user all optional follow-up questions **together in one message**:
430
+
431
+ > "Want me to level this up even further? I can:
432
+ > - 🎫 **Create Jira tickets** for each work item (modifications + new components)
433
+ > - 📝 **Save the report to Confluence** (and if I create tickets, I'll link them in the doc too!)
434
+ > - 💬 **Post a summary to Slack** — Confluence link, feasibility score, and ticket refs dropped straight into your channel!
435
+ >
436
+ > Say yes to any combo — you're the boss hunni! xxx 🐺"
437
+
438
+ Example output:
439
+ ```
440
+ AROOOOO HUNNI! 🐺 Sophia has assessed that BOMBASS design! xxx
441
+
442
+ 📊 **Feasibility**: 12 out of 15 elements can be built with current components!
443
+
444
+ ✅ **Ready to rock**:
445
+ - Form fields → Use FormField + TextInput/SelectDropdown
446
+ - Action buttons → Use Button with primary/secondary variants
447
+ - Data table → Use Table component
448
+
449
+ 🔧 **Needs tweaks**:
450
+ - Button component needs new "icon-only" variant for toolbar buttons
451
+
452
+ 🆕 **New components required**:
453
+ - Timeline component for event visualization
454
+ - ProgressStepper component for multi-step process
455
+
456
+ 📄 **Full report**: .claude/figma-assessment-ABC123-1-2.md
457
+
458
+ **Recommendation**: MOST EXCELLENT feasibility hunni! Start building with existing components while we add that icon-only button variant! xxx 🏍️💪
459
+ ```
460
+
461
+ ---
462
+
463
+ ### 10. (Optional) Create Jira Tickets from Recommendations
464
+
465
+ **Only do this step if the user said YES to Jira tickets.**
466
+
467
+ **a) Atlassian base URL:**
468
+
469
+ The Atlassian instance is **`https://orchard.atlassian.net`**. Use this to construct all ticket links — no need to call `getAccessibleAtlassianResources`.
470
+
471
+ **b) Look up the "Robot playground" sprint ID:**
472
+
473
+ Use `mcp__atlassian__fetchAtlassian` to call the Agile API:
474
+ ```
475
+ GET /rest/agile/1.0/board/221/sprint?state=active,future
476
+ ```
477
+ Find the sprint named **"Robot playground"** in the response and note its numeric `id`. You will pass this as the sprint field when creating tickets.
478
+
479
+ **c) Look up the FLUX team field:**
480
+
481
+ Use `mcp__atlassian__getJiraProjectIssueTypesMetadata` with project key `MIS` to get the available fields. Look for a field named `team` or `Team` (it will be a custom field like `customfield_XXXXX`). Also note the field's allowed values to find the one matching **"FLUX"**.
482
+
483
+ If the team field/value isn't visible in project metadata, use `mcp__atlassian__fetchAtlassian` to call:
484
+ ```
485
+ GET /rest/api/3/project/MIS/versions
486
+ ```
487
+ or inspect an existing ticket in the project to find the correct custom field ID for team.
488
+
489
+ **d) Create a ticket for EVERY work item:**
490
+
491
+ All tickets go in project **`MIS`** with these fields set on every ticket:
492
+ - **Sprint**: The "Robot playground" sprint ID found in step (b)
493
+ - **Team**: `"FLUX"` — using the custom field ID found in step (c)
494
+
495
+ For each **🔧 modification** (component that needs changes):
496
+ - **Summary**: `Modify [ComponentName]: [brief description of what needs changing]`
497
+ - **Description**: Full details from the report — what the component currently lacks, what modification is needed, effort estimate, and a reference to the design assessment file (`.claude/figma-assessment-*.md`)
498
+
499
+ For each **🆕 new component** (things that need building from scratch):
500
+ - **Summary**: `Create [NewComponentName]: [brief description]`
501
+ - **Description**: Full details from the report — why it doesn't exist, key features/requirements, effort estimate, and a reference to the design assessment file
502
+
503
+ Use `mcp__atlassian__createJiraIssue` for each ticket, passing the sprint ID and team field as custom fields.
504
+
505
+ **e) Track all created ticket keys** — store them in a list like:
506
+ ```
507
+ [
508
+ { key: "MIS-12345", summary: "Modify Button: Add icon-only variant", type: "modification" },
509
+ { key: "MIS-12346", summary: "Create ToggleSwitch component", type: "new-component" }
510
+ ]
511
+ ```
512
+
513
+ You WILL need this list for Step 11 if the user wants a Confluence page.
514
+
515
+ **f) Report back to the user:**
516
+
517
+ ```
518
+ 🎫 AROOOOO TICKETS CREATED HUNNI!! 🐺💪
519
+
520
+ Work items are now tracked in Jira:
521
+ 🔧 [MIS-12345] Modify Button: Add icon-only variant
522
+ 🔧 [MIS-12346] Modify Section: Add defaultExpanded prop
523
+ 🆕 [MIS-12347] Create ToggleSwitch component
524
+ 🆕 [MIS-12348] Create Timeline component
525
+
526
+ BODACIOUS work tracking hunni!! xxx
527
+ ```
528
+
529
+ ---
530
+
531
+ ### 11. (Optional) Save Report to Confluence
532
+
533
+ **Only do this step if the user said YES to Confluence.**
534
+
535
+ **a) Target Confluence location:**
536
+
537
+ All assessment pages go into this specific Confluence folder — **do not ask the user**:
538
+ - **Space**: `SATD`
539
+ - **Parent page/folder ID**: `2540666919`
540
+ - **Atlassian instance**: `https://orchard.atlassian.net`
541
+
542
+ Use `mcp__atlassian__createConfluencePage` with `spaceKey: "SATD"` and `parentId: "2540666919"`.
543
+
544
+ **b) Build the Confluence page content:**
545
+
546
+ Confluence pages use Atlassian storage format (XHTML-based). Convert the markdown report into well-structured HTML. Key conversions:
547
+ - Headings: `<h1>`, `<h2>`, `<h3>`
548
+ - Bold: `<strong>`
549
+ - Code blocks: `<ac:structured-macro ac:name="code"><ac:plain-text-body><![CDATA[...]]></ac:plain-text-body></ac:structured-macro>`
550
+ - Inline code: `<code>`
551
+ - Tables: standard HTML `<table><tr><th>/<td>` format
552
+ - Lists: `<ul><li>` or `<ol><li>`
553
+ - Horizontal rules: `<hr />`
554
+
555
+ **c) If Jira tickets were created in Step 10**, prepend a "Work Items" section near the top of the page (right after the title/intro, before the main assessment sections):
556
+
557
+ ```html
558
+ <h2>🎫 Jira Work Items</h2>
559
+ <p>The following tickets have been created to track the work identified in this assessment:</p>
560
+ <table>
561
+ <tbody>
562
+ <tr>
563
+ <th>Type</th>
564
+ <th>Ticket</th>
565
+ <th>Description</th>
566
+ </tr>
567
+ <tr>
568
+ <td>🔧 Modification</td>
569
+ <td><a href="[ATLASSIAN_BASE_URL]/browse/MIS-12345">MIS-12345</a></td>
570
+ <td>Modify Button: Add icon-only variant</td>
571
+ </tr>
572
+ <tr>
573
+ <td>🆕 New Component</td>
574
+ <td><a href="[ATLASSIAN_BASE_URL]/browse/MIS-12347">MIS-12347</a></td>
575
+ <td>Create ToggleSwitch component</td>
576
+ </tr>
577
+ </tbody>
578
+ </table>
579
+ ```
580
+
581
+ Replace `[ATLASSIAN_BASE_URL]` with the URL retrieved in Step 10a (e.g., `https://yourcompany.atlassian.net`).
582
+
583
+ **d) Create the page:**
584
+
585
+ Use `mcp__atlassian__createConfluencePage` with:
586
+ - `spaceKey`: The chosen space key
587
+ - `title`: `Design Feasibility Assessment: [Descriptive Design Name] — [YYYY-MM-DD]`
588
+ - `content`: The full formatted HTML content of the report
589
+
590
+ **e) Report back to the user with the page link:**
591
+
592
+ ```
593
+ 📝 AROOOOO CONFLUENCE PAGE CREATED HUNNI!! 🐺✨
594
+
595
+ Your bombass design assessment is now immortalized for all time:
596
+ 📄 Design Feasibility Assessment: Daily Attendance — 2026-04-10
597
+ 🔗 [link from the createConfluencePage response]
598
+
599
+ [If tickets were created: "All Jira work items are linked in the doc — team can see exactly what needs building! 💖"]
600
+
601
+ MOST EXCELLENT documentation hunni!!! xxx 🏍️
602
+ ```
603
+
604
+ ---
605
+
606
+ ### 12. (Optional) Post Summary to Slack
607
+
608
+ **Only do this step if the user said YES to Slack.**
609
+
610
+ **a) Find the right channel:**
611
+
612
+ The design system channel is **`wg-design-system`**. Use `mcp__plugin_slack_slack__slack_search_channels` with the query `"wg-design-system"` to get its channel ID. Use that ID when sending the message.
613
+
614
+ **b) Compose the Slack message:**
615
+
616
+ Build a well-formatted Slack message using standard markdown (Slack uses `*bold*`, `_italic_`, and `\`code\``). The message should contain:
617
+
618
+ 1. **Header** — the design name and assessment date
619
+ 2. **Feasibility score** — X/Y elements ready
620
+ 3. **Quick breakdown** — ready ✅, needs tweaks 🔧, new builds needed 🆕 (keep it punchy — 1 line each, not exhaustive lists)
621
+ 4. **Confluence link** — if the page was created in Step 11 (use the URL returned by `createConfluencePage`)
622
+ 5. **Jira tickets** — if tickets were created in Step 10, list each one as a clickable link using the format `<[ATLASSIAN_BASE_URL]/browse/MIS-12345|MIS-12345>` (Slack link format)
623
+ 6. **Local report fallback** — if no Confluence page was created, reference the local `.claude/` report path instead
624
+
625
+ Example message shape:
626
+ ```
627
+ 🐺 *Design Feasibility Assessment: Daily Attendance*
628
+
629
+ 📊 *Feasibility:* 12/15 elements can be built with current components
630
+
631
+ ✅ *Ready to rock:* FormField, Button, Table, Heading, Separator
632
+ 🔧 *Needs tweaks:* Section (1 component)
633
+ 🆕 *New builds needed:* ToggleSwitch, Timeline (2 components)
634
+
635
+ 📄 *Full report:* <https://yourcompany.atlassian.net/wiki/...|Design Feasibility Assessment: Daily Attendance — 2026-04-10>
636
+
637
+ 🎫 *Jira work items:*
638
+ • <https://yourcompany.atlassian.net/browse/MIS-12345|MIS-12345> — Modify Section: Add collapsed prop
639
+ • <https://yourcompany.atlassian.net/browse/MIS-12346|MIS-12346> — Create ToggleSwitch component
640
+ • <https://yourcompany.atlassian.net/browse/MIS-12347|MIS-12347> — Create Timeline component
641
+ ```
642
+
643
+ If no Confluence page and no Jira tickets exist, simplify accordingly — just the score, breakdown, and local report path.
644
+
645
+ **c) Send the message:**
646
+
647
+ Use `mcp__plugin_slack_slack__slack_send_message` with:
648
+ - `channel_id`: The channel ID from the search result
649
+ - `text`: The composed message
650
+
651
+ **d) Report back to the user:**
652
+
653
+ ```
654
+ 💬 AROOOOO SLACK NOTIF SENT HUNNI!! 🐺✨
655
+
656
+ The design system channel has been blessed with this bombass assessment!
657
+ 📣 Posted to: #design-system (or whatever channel name)
658
+
659
+ The team is now fully in the loop — MOST EXCELLENT communication hunni!!! xxx 🏍️
660
+ ```
661
+
662
+ ---
663
+
664
+ ## Important Notes
665
+
666
+ - **Always call BOTH Sophia AND Dorothy** - Sophia provides initial analysis, Dorothy verifies it against actual code
667
+ - **Dorothy catches hallucinations** - Sophia sometimes makes up props or gets names wrong. Dorothy reads the actual source files to verify EVERY claim
668
+ - **Use Dorothy's corrections** - If Dorothy says a prop doesn't exist or has a different name, trust her! She read the code
669
+ - **Be thorough** - Better to over-catalog UI elements than miss them
670
+ - **Be specific** - Don't just say "use Button", say "use Button with variant='primary'" (and make sure that variant actually exists!)
671
+ - **Be realistic** - If something truly needs a new component, say so
672
+ - **Write the report** - Don't just output to console, create the markdown file!
673
+ - **Follow the reference format** - See `.claude/figma-assessment-7154-58899.md` for the correct structure and tone
674
+ - **List verified files** - Include an Appendix with every file Dorothy read to prove the assessment is grounded in real code
675
+ - **Consider feasibility holistically** - A design that needs 10 new components is NOT highly feasible
676
+ - This codebase serves millions of users - accurate assessments matter!
677
+ - Use yarn (NOT npm)
678
+ - AROOO like you mean it! 🐺💪
679
+
680
+ ## Example Flow
681
+
682
+ 1. User provides Figma URL: `https://figma.com/design/XYZ/Settings?node-id=42-100`
683
+ 2. Extract fileKey and nodeId
684
+ 3. Fetch screenshot, metadata, design context from Figma
685
+ 4. Catalog UI elements: form fields, toggle switches, buttons, section headers, dividers
686
+ 5. Read `src/index.ts` to see available components
687
+ 6. **Call Sophia** with design info and component list
688
+ 7. Sophia analyzes and reports back:
689
+ - Form fields → FormField ✅
690
+ - Buttons → Button with `ghost` variant ✅
691
+ - Section headers → Heading + Section with `defaultExpanded` prop ✅
692
+ - Toggle switches → Need new ToggleSwitch component 🆕
693
+ - Dividers → Separator ✅
694
+ 8. **Call Dorothy** to fact-check Sophia's claims
695
+ 9. Dorothy verifies and corrects:
696
+ - Button `ghost` variant DOESN'T EXIST ❌ (actual variants: primary, secondary, tertiary, text-link, dropdown)
697
+ - Section `defaultExpanded` DOESN'T EXIST ❌ (actual prop: `collapsed` boolean with inverted logic)
698
+ - FormField, Separator confirmed ✅
699
+ 10. Generate report markdown using Dorothy's CORRECTED information
700
+ 11. Write to `.claude/figma-assessment-XYZ-42-100.md`
701
+ 12. Include Appendix listing all files Dorothy read (Button.tsx, Section.tsx, index.ts, etc.)
702
+ 13. Present summary: "3/5 elements ready (with correct props!), need ToggleSwitch component!"
703
+ 14. Ask user if they want Jira tickets and/or a Confluence page
704
+ 15. **(Optional) Create Jira tickets:**
705
+ - Get Atlassian base URL and visible projects
706
+ - Create ticket: `Modify Section: Replace defaultExpanded with collapsed boolean` → `MIS-12345`
707
+ - Create ticket: `Create ToggleSwitch component` → `MIS-12346`
708
+ - Report back with all ticket keys
709
+ 16. **(Optional) Save to Confluence:**
710
+ - Get available spaces, ask user which one
711
+ - Convert report to Confluence storage format HTML
712
+ - Prepend Jira work items table (linking MIS-12345, MIS-12346) if tickets were created
713
+ - Create page: "Design Feasibility Assessment: Settings Page — 2026-04-10"
714
+ - Share the page URL with the user
715
+ 17. **(Optional) Post to Slack:**
716
+ - Search for the design system channel
717
+ - Compose message: score, quick breakdown, Confluence link, ticket links
718
+ - Send to channel
719
+ - Report back to user
720
+
721
+ ## What This Skill Does NOT Do
722
+
723
+ - ❌ Generate actual page code (use `/create-page` for that)
724
+ - ❌ Modify existing components
725
+ - ❌ Create new components
726
+ - ❌ Make design recommendations (just assesses feasibility)
727
+
728
+ ## What This Skill DOES Do
729
+
730
+ - ✅ Analyze designs for component coverage
731
+ - ✅ Identify gaps in component library
732
+ - ✅ Provide specific, actionable recommendations
733
+ - ✅ Generate detailed markdown reports
734
+ - ✅ Help prioritize component development work
735
+ - ✅ Assess before building (measure twice, code once!)
736
+ - ✅ (Optional) Create Jira tickets for every modification and new component identified
737
+ - ✅ (Optional) Save the full report to Confluence as a proper page
738
+ - ✅ (Optional) Link Jira tickets inside the Confluence doc so everything is connected
739
+ - ✅ (Optional) Post a summary + Confluence link + ticket refs to the design system Slack channel
740
+
741
+ AROOOOO HUNNI!! LET'S ANALYZE SOME BODACIOUS DESIGNS AND SEE WHAT'S POSSIBLE!! xxx 💪🏍️✨🐺