@@ -228,7 +228,7 @@ export class DataGridImpl<T> extends Common.ObjectWrapper.ObjectWrapper<EventTyp
228228 this . editing = false ;
229229 this . selectedNode = null ;
230230 this . expandNodesWhenArrowing = false ;
231- this . setRootNode ( ( new DataGridNode ( ) as DataGridNode < T > ) ) ;
231+ this . setRootNode ( new DataGridNode < T > ( ) ) ;
232232
233233 this . setHasSelection ( false ) ;
234234
@@ -1549,9 +1549,9 @@ export class DataGridImpl<T> extends Common.ObjectWrapper.ObjectWrapper<EventTyp
15491549 return 0 ;
15501550 }
15511551
1552- asWidget ( ) : DataGridWidget < T > {
1552+ asWidget ( element ?: HTMLElement ) : DataGridWidget < T > {
15531553 if ( ! this . dataGridWidget ) {
1554- this . dataGridWidget = new DataGridWidget ( this ) ;
1554+ this . dataGridWidget = new DataGridWidget ( this , element ) ;
15551555 }
15561556 return this . dataGridWidget ;
15571557 }
@@ -2441,9 +2441,9 @@ export class CreationDataGridNode<T> extends DataGridNode<T> {
24412441}
24422442
24432443export class DataGridWidget < T > extends UI . Widget . VBox {
2444- private readonly dataGrid : DataGridImpl < T > ;
2445- constructor ( dataGrid : DataGridImpl < T > ) {
2446- super ( ) ;
2444+ readonly dataGrid : DataGridImpl < T > ;
2445+ constructor ( dataGrid : DataGridImpl < T > , element ?: HTMLElement ) {
2446+ super ( undefined , undefined , element ) ;
24472447 this . dataGrid = dataGrid ;
24482448 this . element . appendChild ( dataGrid . element ) ;
24492449 this . setDefaultFocusedElement ( dataGrid . element ) ;
@@ -2466,6 +2466,92 @@ export class DataGridWidget<T> extends UI.Widget.VBox {
24662466 return [ this . dataGrid . scrollContainer ] ;
24672467 }
24682468}
2469+
2470+ export interface DataGridWidgetOptions < T > {
2471+ implParams : Parameters ;
2472+ dataGridImpl ?: DataGridImpl < T > ;
2473+ markAsRoot ?: boolean ;
2474+ nodes : DataGridNode < T > [ ] ;
2475+ }
2476+
2477+ export class DataGridWidgetElement < T > extends UI . Widget . WidgetElement < DataGridWidget < T > > {
2478+ #options: DataGridWidgetOptions < T > ;
2479+
2480+ constructor ( ) {
2481+ super ( ) ;
2482+ // default values for options
2483+ this . #options = {
2484+ implParams : {
2485+ displayName : 'dataGrid' ,
2486+ columns : [ ] ,
2487+ } ,
2488+ nodes : [ ] ,
2489+ } ;
2490+ }
2491+
2492+ set options ( options : DataGridWidgetOptions < T > ) {
2493+ this . #options = options ;
2494+ }
2495+
2496+ override createWidget ( ) : DataGridWidget < T > {
2497+ const {
2498+ implParams,
2499+ markAsRoot,
2500+ nodes,
2501+ } = this . #options;
2502+
2503+ if ( ! this . #options. dataGridImpl ) {
2504+ this . #options. dataGridImpl = new DataGridImpl < T > ( implParams ) ;
2505+ }
2506+
2507+ this . #options. dataGridImpl . rootNode ( ) . removeChildren ( ) ;
2508+ for ( const node of nodes ) {
2509+ this . #options. dataGridImpl . rootNode ( ) . appendChild ( node ) ;
2510+ }
2511+
2512+ // Translate existing DataGridImpl ("ObjectWrapper") events to DOM CustomEvents so clients can
2513+ // use lit templates to bind listeners.
2514+ this . #options. dataGridImpl . addEventListener ( Events . SELECTED_NODE , this . #selectedNode. bind ( this ) ) ;
2515+ this . #options. dataGridImpl . addEventListener ( Events . DESELECTED_NODE , this . #deselectedNode. bind ( this ) ) ;
2516+ this . #options. dataGridImpl . addEventListener ( Events . OPENED_NODE , this . #openedNode. bind ( this ) ) ;
2517+ this . #options. dataGridImpl . addEventListener ( Events . SORTING_CHANGED , this . #sortingChanged. bind ( this ) ) ;
2518+ this . #options. dataGridImpl . addEventListener ( Events . PADDING_CHANGED , this . #paddingChanged. bind ( this ) ) ;
2519+ const widget = this . #options. dataGridImpl . asWidget ( this ) ;
2520+
2521+ if ( markAsRoot ) {
2522+ widget . markAsRoot ( ) ;
2523+ }
2524+ return widget ;
2525+ }
2526+
2527+ #selectedNode( event : Common . EventTarget . EventTargetEvent < DataGridNode < T > > ) : void {
2528+ const domEvent = new CustomEvent ( 'selectedNode' , { detail : event . data } ) ;
2529+ this . dispatchEvent ( domEvent ) ;
2530+ }
2531+
2532+ #deselectedNode( ) : void {
2533+ const domEvent = new CustomEvent ( 'deselectedNode' ) ;
2534+ this . dispatchEvent ( domEvent ) ;
2535+ }
2536+
2537+ #openedNode( event : Common . EventTarget . EventTargetEvent < DataGridNode < T > > ) : void {
2538+ const domEvent = new CustomEvent ( 'openedNode' , { detail : event . data } ) ;
2539+ this . dispatchEvent ( domEvent ) ;
2540+ }
2541+
2542+ #sortingChanged( ) : void {
2543+ const domEvent = new CustomEvent ( 'sortingChanged' ) ;
2544+ this . dispatchEvent ( domEvent ) ;
2545+ }
2546+
2547+ #paddingChanged( ) : void {
2548+ const domEvent = new CustomEvent ( 'paddingChanged' ) ;
2549+ this . dispatchEvent ( domEvent ) ;
2550+ }
2551+ }
2552+
2553+ customElements . define ( 'devtools-data-grid-widget' , DataGridWidgetElement ) ;
2554+
24692555export interface Parameters {
24702556 displayName : string ;
24712557 columns : ColumnDescriptor [ ] ;
0 commit comments