text: /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  import { decorateProperty } from './base.js';
  // Note, in the future, we may extend this decorator to support the use case
  // where the queried element may need to do work to become ready to interact
  // with (e.g. load some implementation code). If so, we might elect to
  // add a second argument defining a function that can be run to make the
  // queried element loaded/updated/ready.
  /**
   * A property decorator that converts a class property into a getter that
   * returns a promise that resolves to the result of a querySelector on the
   * element's renderRoot done after the element's `updateComplete` promise
   * resolves. When the queried property may change with element state, this
   * decorator can be used instead of requiring users to await the
   * `updateComplete` before accessing the property.
   *
   * @param selector A DOMString containing one or more selectors to match.
   *
   * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector
   *
   * @example
   * ```ts
   * class MyElement {
   *   @queryAsync('#first')
   *   first;
   *
   *   render() {
   *     return html`
   *       <div id="first"></div>
   *       <div id="second"></div>
   *     `;
   *   }
   * }
   *
   * // external usage
   * async doSomethingWithFirst() {
   *  (await aMyElement.first).doSomething();
   * }
   * ```
   * @category Decorator
   */
  export function queryAsync(selector) {
      return decorateProperty({
          descriptor: (_name) => ({
              async get() {
                  var _a;
                  await this.updateComplete;
                  return (_a = this.renderRoot) === null || _a === void 0 ? void 0 : _a.querySelector(selector);
              },
              enumerable: true,
              configurable: true,
          }),
      });
  }
  //# sourceMappingURL=query-async.js.map