Episode 2 — React Frontend Architecture NextJS / 2.10 — Advanced Reusability Patterns

2.10.c — Compound components: flexible APIs with shared internal state

<< 2.10 Overview


Learning outcomes

  1. Build a small compound API (Tabs/Accordion style) with private context.
  2. Explain why compounds reduce prop explosion on a single mega-component.
  3. 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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 Tab ids 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.

<< 2.10 Overview