import { emitEvent } from '@roenlie/mimic-core/dom';
import { css, html, LitElement, nothing } from 'lit';
import { customElement, state } from 'lit/decorators.js';
import { cache } from 'lit/directives/cache.js';
import { component } from '../../src/core/component.js';
import { useAfterConnected } from '../../src/hooks/use-after-connected.js';
import { useConnected } from '../../src/hooks/use-connected.js';
import { useController } from '../../src/hooks/use-controller.js';
import { useDisconnected } from '../../src/hooks/use-disconnected.js';
import { useOnEvent } from '../../src/hooks/use-onevent.js';
import { useProperty, useState } from '../../src/hooks/use-property.js';
import { useQuery } from '../../src/hooks/use-query.js';
import { useUpdated } from '../../src/hooks/use-updated.js';
@customElement('demo-introduction')
export class DemoIntroduction extends LitElement {
@state() protected toggle = true;
protected override render() {
return html`
${ cache(this.toggle ? html`
` : nothing) }
`;
}
public static override styles = [
css`
:host {
display: grid;
grid-auto-rows: max-content;
}
`,
];
}
declare global {
interface HTMLElementTagNameMap {
'demo-button': DemoButton;
}
}
declare class DemoButton extends LitElement {
public label: string;
}
export type { DemoButton };
component('demo-button', (element) => {
const [ label, setLabel ] = useProperty('label', 'test-label', { type: String });
const [ counter, setCounter ] = useState('counter', 0, { type: Number });
const subCounter = 0;
const inputQry = useQuery('inputQry', 'input');
useConnected(() => {
//console.log('connected');
});
useDisconnected(() => {
//console.log('disconnecting');
});
useAfterConnected(() => {
//console.log('after connected!', inputQry.value);
});
useUpdated((props) => {
//console.log('effect!', props);
}, [ 'counter' ]);
useController({
hostUpdate() {
//console.log('controller updating');
},
hostConnected() {
//console.log('host connected');
},
hostDisconnected() {
//console.log('controller disconnecting');
},
});
return ({
render: () => html`
setLabel((ev.target as any).value) } />
`,
styles: css`
button {
background-color: hotpink;
width: 200px;
height: 100px;
}
`,
});
}).register();