import { html } from 'lit';
import type {
DefaultResolvesType,
RoutedLitElement,
RoutedLitTemplate,
UIViewInjectedProps,
} from './interface.js';
/**
* Binds a routed class to a single instance for as long as the returned renderer
* lives, so whoever holds the renderer decides how long the element survives.
*
* Not re-exported by `pure.ts`: this is plumbing shared by `core` and `ui-view`.
*
* @internal
*/
export function routedLitElementRenderer<
T extends DefaultResolvesType = DefaultResolvesType,
>(Component: RoutedLitElement): RoutedLitTemplate {
let element: InstanceType>;
return (props: UIViewInjectedProps) => {
element ??= new Component(props);
element._uiViewProps = props;
return html`${element}`;
};
}