@@ -185,6 +185,14 @@ const UIStrings = {
185185 * @description ARIA label for Elements Tree adorners
186186 */
187187 disableGridMode : 'Disable grid mode' ,
188+ /**
189+ * @description ARIA label for Elements Tree adorners
190+ */
191+ enableMasonryMode : 'Enable masonry mode' ,
192+ /**
193+ * @description ARIA label for Elements Tree adorners
194+ */
195+ disableMasonryMode : 'Disable masonry mode' ,
188196 /**
189197 * @description ARIA label for an elements tree adorner
190198 */
@@ -2504,6 +2512,9 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
25042512 if ( layout . isGrid ) {
25052513 this . pushGridAdorner ( this . tagTypeContext , layout . isSubgrid ) ;
25062514 }
2515+ if ( layout . isMasonry ) {
2516+ this . pushMasonryAdorner ( this . tagTypeContext ) ;
2517+ }
25072518 if ( layout . isFlex ) {
25082519 this . pushFlexAdorner ( this . tagTypeContext ) ;
25092520 }
@@ -2598,6 +2609,47 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
25982609 }
25992610 }
26002611
2612+ pushMasonryAdorner ( context : OpeningTagContext ) : void {
2613+ const node = this . node ( ) ;
2614+ const nodeId = node . id ;
2615+ if ( ! nodeId ) {
2616+ return ;
2617+ }
2618+
2619+ const config = ElementsComponents . AdornerManager . getRegisteredAdorner (
2620+ ElementsComponents . AdornerManager . RegisteredAdorners . MASONRY ) ;
2621+ const adorner = this . adorn ( config ) ;
2622+ adorner . classList . add ( 'masonry' ) ;
2623+
2624+ const onClick = ( ( ( ) => {
2625+ if ( adorner . isActive ( ) ) {
2626+ node . domModel ( ) . overlayModel ( ) . highlightGridInPersistentOverlay ( nodeId ) ;
2627+ } else {
2628+ node . domModel ( ) . overlayModel ( ) . hideGridInPersistentOverlay ( nodeId ) ;
2629+ }
2630+ } ) as EventListener ) ;
2631+ adorner . addInteraction ( onClick , {
2632+ isToggle : true ,
2633+ shouldPropagateOnKeydown : false ,
2634+ ariaLabelDefault : i18nString ( UIStrings . enableMasonryMode ) ,
2635+ ariaLabelActive : i18nString ( UIStrings . disableMasonryMode ) ,
2636+ } ) ;
2637+
2638+ node . domModel ( ) . overlayModel ( ) . addEventListener (
2639+ SDK . OverlayModel . Events . PERSISTENT_GRID_OVERLAY_STATE_CHANGED , event => {
2640+ const { nodeId : eventNodeId , enabled} = event . data ;
2641+ if ( eventNodeId !== nodeId ) {
2642+ return ;
2643+ }
2644+ adorner . toggle ( enabled ) ;
2645+ } ) ;
2646+
2647+ context . styleAdorners . add ( adorner ) ;
2648+ if ( node . domModel ( ) . overlayModel ( ) . isHighlightedGridInPersistentOverlay ( nodeId ) ) {
2649+ adorner . toggle ( true ) ;
2650+ }
2651+ }
2652+
26012653 pushScrollSnapAdorner ( context : OpeningTagContext ) : void {
26022654 const node = this . node ( ) ;
26032655 const nodeId = node . id ;
0 commit comments