@@ -9,14 +9,9 @@ import {
99 rippleClasses ,
1010 setupRipple ,
1111} from '@material/web/labs/gb/components/ripple/ripple.js' ;
12+ import { createClassMapDirective } from '@material/web/labs/gb/components/shared/directives.js' ;
1213import { PSEUDO_CLASSES } from '@material/web/labs/gb/components/shared/pseudo-classes.js' ;
13- import {
14- AsyncDirective ,
15- AttributePart ,
16- directive ,
17- DirectiveParameters ,
18- } from 'lit/async-directive.js' ;
19- import { classMap , type ClassInfo } from 'lit/directives/class-map.js' ;
14+ import { type ClassInfo } from 'lit/directives/class-map.js' ;
2015
2116/** Checkbox classes. */
2217export const CHECKBOX_CLASSES = {
@@ -90,48 +85,6 @@ export function setupCheckbox(
9085 setupRipple ( checkbox , opts ) ;
9186}
9287
93- /** The state provided to the `checkbox()` directive. */
94- export interface CheckboxDirectiveState extends CheckboxClassesState {
95- /** Additional classes to apply to the element. */
96- classes ?: ClassInfo ;
97- }
98-
99- class CheckboxDirective extends AsyncDirective {
100- private element ?: HTMLElement ;
101- private cleanup ?: AbortController ;
102-
103- render ( state : CheckboxDirectiveState = { } ) {
104- return classMap ( {
105- ...( state . classes || { } ) ,
106- ...checkboxClasses ( state ) ,
107- } ) ;
108- }
109-
110- override update (
111- { element} : AttributePart ,
112- [ state ] : DirectiveParameters < this> ,
113- ) {
114- if ( this . isConnected && element !== this . element ) {
115- this . element = element as HTMLElement ;
116- this . disconnected ( ) ;
117- this . reconnected ( ) ;
118- }
119-
120- return this . render ( state ) ;
121- }
122-
123- protected override disconnected ( ) {
124- this . cleanup ?. abort ( ) ;
125- }
126-
127- protected override reconnected ( ) {
128- if ( this . element ) {
129- this . cleanup = new AbortController ( ) ;
130- setupCheckbox ( this . element , { signal : this . cleanup . signal } ) ;
131- }
132- }
133- }
134-
13588/**
13689 * A Lit directive that adds checkbox styling and functionality to its element.
13790 *
@@ -140,4 +93,7 @@ class CheckboxDirective extends AsyncDirective {
14093 * html`<input type="checkbox" class="${checkbox()}">`;
14194 * ```
14295 */
143- export const checkbox = directive ( CheckboxDirective ) ;
96+ export const checkbox = createClassMapDirective ( {
97+ getClasses : checkboxClasses ,
98+ setupElement : setupCheckbox ,
99+ } ) ;
0 commit comments