import { type HTMLTemplateResult, type ReactiveElement } from 'lit';
import { Controller } from '../Controller/index.js';
/**
* A part of a component, extracted into a class of its own without introducing a component boundary.
*
* A part contributes a `template` to its host and may declare its own state, queries, events and
* event listeners with the very same decorators a component uses. As a part shares the update
* lifecycle of its host, changing its state re-renders the host as a whole - no properties have to
* be passed down and no updates have to be propagated by hand.
*
* This makes a part the tool of choice to break up a large component, whereas a component should be
* introduced whenever the extracted unit is reusable on its own.
*/
export declare abstract class ComponentPart extends Controller {
protected readonly host: THost;
constructor(host: THost);
/** The template of the part which its host renders. */
get template(): HTMLTemplateResult;
/**
* Requests an update of the host.
*
* When a property key is provided, the change is tracked in the host's `changedProperties`
* by a key unique to this part and property, so that it can neither collide with a property
* of the host nor with one of another part.
*/
requestUpdate(propertyKey?: PropertyKey, oldValue?: unknown): void;
}
//# sourceMappingURL=ComponentPart.d.ts.map