looks good.
I'm not sure I'd remember the transitive=false API if I only wanted data when I'm on a leaf. I would probably inspect the objects and conclude that I should do
> if (!quad.node.length) for (const d of quad.data())
Are you suggesting transitive should default to false? I think that’d be more surprising. Or are you suggesting have separate methods for transitive and non to avoid needing to chose what the default is? I felt like in the common case you’d want all the data, not just the coincident points.
yeah sorry I was unclear. I think data() should give all the underlying data (so transitive=true is the correct default); but maybe we should have a separate method (or none at all) for requesting leaf data.