element-vir
Version:
Heroic. Reactive. Declarative. Type safe. Web components without compromise.
46 lines (45 loc) • 1.32 kB
JavaScript
import { assertWrap } from '@augment-vir/assert';
import { directive, Directive, noChange } from '../../lit-exports/all-lit-exports.js';
import { extractElement } from './directive-helpers.js';
/**
* A directive that allows arbitrary modifications to be made to the element that it's attached to.
*
* @category Directives
*/
export const mutate = directive(class extends Directive {
element;
lastKey;
constructor(partInfo) {
super(partInfo);
this.element = assertWrap.instanceOf(extractElement(partInfo, 'modifyElement'), HTMLElement);
}
render(callback) {
callback({
directive: this,
element: this.element,
});
return noChange;
}
});
/**
* A helper for making new directives.
*
* @category Internal
*/
export function createMutateDirective(directiveName, callback) {
return directive(class extends Directive {
element;
constructor(partInfo) {
super(partInfo);
this.element = assertWrap.instanceOf(extractElement(partInfo, directiveName), HTMLElement);
}
render(...params) {
callback({
params: params,
directive: this,
element: this.element,
});
return noChange;
}
});
}