Episode 2 — React Frontend Architecture NextJS / 2.10 — Advanced Reusability Patterns
2.10.c — Compound components: flexible APIs with shared internal state
Learning outcomes
- Build a small compound API (
Tabs/Accordionstyle) with private context. - Explain why compounds reduce prop explosion on a single mega-component.
- Connect compounds to accessibility responsibilities.
Idea
Instead of:
<Tabs value={v} onChange={setV} tabs={[...]} renderPanel={...} />
You expose:
<Tabs value={v} onValueChange={setV}>
<Tabs.List>
<Tabs.Tab value="a">A</Tabs.Tab>
<Tabs.Tab value="b">B</Tabs.Tab>
</Tabs.List>
<Tabs.Panel value="a">…</Tabs.Panel>
<Tabs.Panel value="b">…</Tabs.Panel>
</Tabs>
The parent Tabs owns state; children coordinate via context.
Private context module
Keep TabsContext unexported; only compound subcomponents consume it. Public surface documents the allowed vocabulary.
Accessibility
Compounds often implement keyboard roving, aria-selected, aria-controls. The flexible API must not relax a11y requirements—document tab order and roles in Storybook.
Appendix — Scenario bank (basic → advanced)
Each card: symptom → cause → fix → interview phrase.
RP2-001 — Compound components #1
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
13. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-002 — Compound components #2
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
26. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-003 — Compound components #3
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
39. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-004 — Compound components #4
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
52. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-005 — Compound components #5
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
65. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-006 — Compound components #6
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
78. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-007 — Compound components #7
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
91. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-008 — Compound components #8
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
104. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-009 — Compound components #9
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
117. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-010 — Compound components #10
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
130. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-011 — Compound components #11
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
143. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-012 — Compound components #12
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
156. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-013 — Compound components #13
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
169. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-014 — Compound components #14
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
182. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-015 — Compound components #15
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
195. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-016 — Compound components #16
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
8. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-017 — Compound components #17
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
21. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-018 — Compound components #18
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
34. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-019 — Compound components #19
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
47. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-020 — Compound components #20
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
60. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-021 — Compound components #21
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
73. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-022 — Compound components #22
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
86. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-023 — Compound components #23
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
99. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-024 — Compound components #24
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
112. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-025 — Compound components #25
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
125. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-026 — Compound components #26
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
138. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-027 — Compound components #27
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
151. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-028 — Compound components #28
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
164. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-029 — Compound components #29
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
177. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-030 — Compound components #30
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
190. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-031 — Compound components #31
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
3. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-032 — Compound components #32
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
16. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-033 — Compound components #33
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
29. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-034 — Compound components #34
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
42. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-035 — Compound components #35
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
55. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-036 — Compound components #36
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
68. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-037 — Compound components #37
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
81. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-038 — Compound components #38
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
94. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-039 — Compound components #39
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
107. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-040 — Compound components #40
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
120. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-041 — Compound components #41
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
133. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-042 — Compound components #42
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
146. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-043 — Compound components #43
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
159. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-044 — Compound components #44
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
172. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-045 — Compound components #45
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
185. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-046 — Compound components #46
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
198. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-047 — Compound components #47
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
11. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-048 — Compound components #48
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
24. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-049 — Compound components #49
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
37. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-050 — Compound components #50
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
50. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-051 — Compound components #51
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
63. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-052 — Compound components #52
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
76. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-053 — Compound components #53
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
89. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-054 — Compound components #54
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
102. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-055 — Compound components #55
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
115. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-056 — Compound components #56
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
128. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-057 — Compound components #57
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
141. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-058 — Compound components #58
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
154. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-059 — Compound components #59
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
167. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-060 — Compound components #60
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
180. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-061 — Compound components #61
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
193. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-062 — Compound components #62
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
6. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-063 — Compound components #63
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
19. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-064 — Compound components #64
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
32. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-065 — Compound components #65
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
45. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-066 — Compound components #66
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
58. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-067 — Compound components #67
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
71. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-068 — Compound components #68
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
84. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-069 — Compound components #69
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
97. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-070 — Compound components #70
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
110. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-071 — Compound components #71
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
123. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-072 — Compound components #72
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
136. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-073 — Compound components #73
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
149. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-074 — Compound components #74
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
162. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-075 — Compound components #75
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
175. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-076 — Compound components #76
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
188. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-077 — Compound components #77
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
1. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-078 — Compound components #78
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
14. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-079 — Compound components #79
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
27. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-080 — Compound components #80
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
40. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-081 — Compound components #81
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
53. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-082 — Compound components #82
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
66. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-083 — Compound components #83
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
79. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-084 — Compound components #84
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
92. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-085 — Compound components #85
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
105. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-086 — Compound components #86
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
118. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-087 — Compound components #87
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
131. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-088 — Compound components #88
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
144. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-089 — Compound components #89
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
157. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-090 — Compound components #90
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
170. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-091 — Compound components #91
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
183. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-092 — Compound components #92
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
196. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-093 — Compound components #93
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
9. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-094 — Compound components #94
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
22. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-095 — Compound components #95
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
35. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-096 — Compound components #96
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
48. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-097 — Compound components #97
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
61. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-098 — Compound components #98
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
74. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-099 — Compound components #99
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
87. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-100 — Compound components #100
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
100. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-101 — Compound components #101
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
113. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-102 — Compound components #102
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
126. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-103 — Compound components #103
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
139. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-104 — Compound components #104
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
152. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-105 — Compound components #105
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
165. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-106 — Compound components #106
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
178. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-107 — Compound components #107
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
191. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-108 — Compound components #108
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
4. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-109 — Compound components #109
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
17. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-110 — Compound components #110
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
30. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-111 — Compound components #111
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
43. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-112 — Compound components #112
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
56. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-113 — Compound components #113
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
69. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-114 — Compound components #114
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
82. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-115 — Compound components #115
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
95. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-116 — Compound components #116
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
108. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-117 — Compound components #117
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
121. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-118 — Compound components #118
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
134. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-119 — Compound components #119
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
147. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-120 — Compound components #120
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
160. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-121 — Compound components #121
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
173. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-122 — Compound components #122
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
186. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-123 — Compound components #123
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
199. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-124 — Compound components #124
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
12. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-125 — Compound components #125
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
25. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-126 — Compound components #126
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
38. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-127 — Compound components #127
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
51. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-128 — Compound components #128
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
64. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-129 — Compound components #129
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
77. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-130 — Compound components #130
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
90. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-131 — Compound components #131
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
103. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-132 — Compound components #132
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
116. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-133 — Compound components #133
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
129. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-134 — Compound components #134
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
142. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-135 — Compound components #135
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
155. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-136 — Compound components #136
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
168. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-137 — Compound components #137
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
181. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-138 — Compound components #138
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
194. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-139 — Compound components #139
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
7. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-140 — Compound components #140
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
20. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-141 — Compound components #141
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
33. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-142 — Compound components #142
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
46. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-143 — Compound components #143
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
59. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-144 — Compound components #144
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
72. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-145 — Compound components #145
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
85. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-146 — Compound components #146
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
98. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-147 — Compound components #147
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
111. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-148 — Compound components #148
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
124. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-149 — Compound components #149
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
137. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-150 — Compound components #150
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
150. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-151 — Compound components #151
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
163. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-152 — Compound components #152
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
176. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-153 — Compound components #153
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
189. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-154 — Compound components #154
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
2. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-155 — Compound components #155
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
15. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-156 — Compound components #156
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
28. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-157 — Compound components #157
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
41. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-158 — Compound components #158
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
54. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-159 — Compound components #159
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
67. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-160 — Compound components #160
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
80. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-161 — Compound components #161
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
93. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-162 — Compound components #162
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
106. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Duplicate
Tabids when multiple instances mount without unique root id. - Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-163 — Compound components #163
- Level: Beginner
- Symptom: confusing devtools component names or ref warnings after refactor
119. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound API flexible but consumers forget required subcomponents.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-164 — Compound components #164
- Level: Beginner+
- Symptom: confusing devtools component names or ref warnings after refactor
132. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Internal context exported publicly breaking encapsulation.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-165 — Compound components #165
- Level: Intermediate
- Symptom: confusing devtools component names or ref warnings after refactor
145. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Overusing compound pattern for simple button variants.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-166 — Compound components #166
- Level: Intermediate+
- Symptom: confusing devtools component names or ref warnings after refactor
158. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Keyboard roving tabindex not wired between Listbox.Option siblings.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-167 — Compound components #167
- Level: Advanced
- Symptom: confusing devtools component names or ref warnings after refactor
171. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: State updates not batched causing flicker between Tab header and panel.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.
RP2-168 — Compound components #168
- Level: Advanced+
- Symptom: confusing devtools component names or ref warnings after refactor
184. - API symptom: consumers cannot access the right state without importing internals.
- Root cause class: Compound pieces used outside provider context throwing runtime errors.
- Primary remediation: Assert context in dev; document required composition; ship examples in Storybook.
- Verify: unit tests + Storybook variants + a11y keyboard path unchanged.
- Interview one-liner: Compound components trade explicit wiring for a small curated vocabulary:
Tabs.List,Tabs.Tab,Tabs.Panel.