This demo creates the ShadowDOM slots in the constructor. Red text means the slotchanged event fired.

A custom element that gets upgraded later:

Tab 1
Panel 1
Tab 2
Panel 2
Tab 3
Panel 3

A custom element that gets directly created by the parser:

Tab 1
Panel 1
Tab 2
Panel 2
Tab 3
Panel 3