#import <DOM/Document.idl>
#import <DOM/Element.idl>
#import <DOM/Node.idl>
#import <IntersectionObserver/IntersectionObserverEntry.idl>

// https://w3c.github.io/IntersectionObserver/#intersection-observer-callback
callback IntersectionObserverCallback = undefined (sequence<IntersectionObserverEntry> entries, IntersectionObserver observer);

// https://w3c.github.io/IntersectionObserver/#intersection-observer-interface
[Exposed=(Window)]
interface IntersectionObserver {
    constructor(IntersectionObserverCallback callback, optional IntersectionObserverInit options = {});
    readonly attribute (Element or Document)? root;
    [FIXME] readonly attribute DOMString rootMargin;
    // FIXME: `sequence<double>` should be `FrozenArray<double>`
    readonly attribute sequence<double> thresholds;
    undefined observe(Element target);
    undefined unobserve(Element target);
    undefined disconnect();
    sequence<IntersectionObserverEntry> takeRecords();
};

// https://w3c.github.io/IntersectionObserver/#intersection-observer-init
dictionary IntersectionObserverInit {
    (Element or Document)? root = null;
    DOMString rootMargin = "0px";
    // FIXME: DOMString scrollMargin = "0px";
    (double or sequence<double>) threshold = 0;
};
