/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* A unique symbol used for protected access to an instance's
* `ElementInternals`.
*
* @example
* ```ts
* class MyElement extends mixinElementInternals(LitElement) {
* constructor() {
* super();
* this[internals].role = 'button';
* }
* }
* ```
*/
export const internals = Symbol('internals');
// Private symbols
const privateInternals = Symbol('privateInternals');
/**
* Mixes in an attached `ElementInternals` instance.
*
* This mixin is only needed when other shared code needs access to a
* component's `ElementInternals`, such as form-associated mixins.
*
* @param base The class to mix functionality into.
* @return The provided class with `WithElementInternals` mixed in.
*/
export function mixinElementInternals(base) {
class WithElementInternalsElement extends base {
get [internals]() {
// Create internals in getter so that it can be used in methods called on
// construction in `ReactiveElement`, such as `requestUpdate()`.
if (!this[privateInternals]) {
// Cast needed for closure
this[privateInternals] = this.attachInternals();
}
return this[privateInternals];
}
}
return WithElementInternalsElement;
}
//# sourceMappingURL=element-internals.js.map