/**
 * @license
 * Copyright 2021 Google LLC
 * SPDX-License-Identifier: BSD-3-Clause
 */
/**
 * An event fired by a context requester to signal it desires a specified context with the given key.
 *
 * A provider should inspect the `context` property of the event to determine if it has a value that can
 * satisfy the request, calling the `callback` with the requested value if so.
 *
 * If the requested context event contains a truthy `subscribe` value, then a provider can call the callback
 * multiple times if the value is changed, if this is the case the provider should pass an `unsubscribe`
 * method to the callback which consumers can invoke to indicate they no longer wish to receive these updates.
 *
 * If no `subscribe` value is present in the event, then the provider can assume that this is a 'one time'
 * request for the context and can therefore not track the consumer.
 */
export class ContextRequestEvent extends Event {
    /**
     *
     * @param context the context key to request
     * @param contextTarget the original context target of the requester
     * @param callback the callback that should be invoked when the context with the specified key is available
     * @param subscribe when, true indicates we want to subscribe to future updates
     */
    constructor(context, contextTarget, callback, subscribe) {
        super('context-request', { bubbles: true, composed: true });
        this.context = context;
        this.contextTarget = contextTarget;
        this.callback = callback;
        this.subscribe = subscribe ?? false;
    }
}
//# sourceMappingURL=context-request-event.js.map