Symptom
@dashforge/tw <Stack direction="column" gap="3" className="…"> renders as display: block with NO gap and NO flex-direction applied — the internal flex flex-col gap-* classes are lost. The final computed style is display: block; row-gap: normal; flex-direction: row;, children flush.
Verified in browser preview:
<Stack direction="column" gap="3"> alone → renders correctly (flex flex-col gap-3)
<Stack direction="column" gap="3" className="min-h-0"> → flex flex-col gap-3 disappear during tailwind-merge
Why this is bad
- Consumer expects
className to be additive (standard React pattern)
- Silent-fail: no error, no visual hint until you notice children have no gap
- Forces consumers to swap
<Stack> for <div className="flex flex-col gap-2 …"> — defeats the purpose of using the primitive
Discovered while
Refactoring PalettePanel.CategoryContent in the Blueprint Builder V2 shell. Filed in Blueprint's dogfood report as G-28 (severity: medium — silent-fail via tailwind-merge collision).
Workaround applied in Blueprint
Replaced <Stack> with raw <div className="flex flex-col gap-2"> at every collision site.
Acceptance (pick one)
Related
Symptom
@dashforge/tw<Stack direction="column" gap="3" className="…">renders asdisplay: blockwith NO gap and NO flex-direction applied — the internalflex flex-col gap-*classes are lost. The final computed style isdisplay: block; row-gap: normal; flex-direction: row;, children flush.Verified in browser preview:
<Stack direction="column" gap="3">alone → renders correctly (flex flex-col gap-3)<Stack direction="column" gap="3" className="min-h-0">→flex flex-col gap-3disappear during tailwind-mergeWhy this is bad
classNameto be additive (standard React pattern)<Stack>for<div className="flex flex-col gap-2 …">— defeats the purpose of using the primitiveDiscovered while
Refactoring
PalettePanel.CategoryContentin the Blueprint Builder V2 shell. Filed in Blueprint's dogfood report as G-28 (severity: medium — silent-fail via tailwind-merge collision).Workaround applied in Blueprint
Replaced
<Stack>with raw<div className="flex flex-col gap-2">at every collision site.Acceptance (pick one)
flex,flex-col,gap-*are preserved when the consumer'sclassNamecollides on unrelated utilitiesclassNameon<Stack>and requireslotProps.root.className(consistent with the [1.2.0] Component Defaults System — theme.components + slotProps (Option C) #60 Option C slot pattern)displayof the Stack root is notflex,console.warnin development with a hint<Stack className="min-h-0" direction="column" gap="3">computed style must bedisplay: flex; flex-direction: column; row-gap: <value>Related