{"version":3,"file":"treePlugin.cjs","sources":["../../src/devtool/treePlugin.ts"],"sourcesContent":["import type { Container } from 'pixi.js';\nimport type { PixiMetadata, TreeExtension } from '@pixi/devtools';\n\nexport interface DevtoolFlexContainer extends Container {\n    __devtoolLayoutDefaults?: any;\n}\n\nfunction flashNode(node: Container) {\n    const originalAlpha = node.alpha;\n    // repeatedly set the alpha to 0.1 and 1.0 to flash the node but in intervals of 100ms\n    let count = 0;\n    const interval = setInterval(() => {\n        if (count % 2 === 0) {\n            node.alpha = 0.1;\n        } else {\n            node.alpha = 1.0;\n        }\n        count++;\n        if (count === 6) {\n            clearInterval(interval);\n            node.alpha = originalAlpha;\n        }\n    }, 100);\n}\n\nexport function hasDefaults(node: DevtoolFlexContainer) {\n    return node?.__devtoolLayoutDefaults !== undefined;\n}\n\nfunction isDirty(node: DevtoolFlexContainer) {\n    return (\n        hasDefaults(node) && JSON.stringify(node.layout?.style ?? {}) !== JSON.stringify(node.__devtoolLayoutDefaults)\n    );\n}\n\nexport const treePlugin: TreeExtension = {\n    extension: {\n        name: 'layout-scene-tree',\n        type: 'sceneTree',\n    },\n    onButtonPress(container: DevtoolFlexContainer, buttonAction) {\n        if (buttonAction === 'flash') {\n            flashNode(container);\n        } else if (buttonAction === 'reset') {\n            if (hasDefaults(container)) {\n                container.layout = { ...container.__devtoolLayoutDefaults };\n                container.__devtoolLayoutDefaults = undefined;\n            }\n        }\n    },\n    updateNodeMetadata(node: Container, metadata: PixiMetadata) {\n        // add flash icon to the node\n        metadata.buttons!.push({\n            name: 'flash',\n            icon: '⚡',\n            type: 'button',\n        });\n\n        if (!node?.layout) {\n            return metadata;\n        }\n\n        // add reset icon to the node\n        metadata.buttons!.push({\n            name: 'reset',\n            icon: '↺',\n            type: 'button',\n        });\n\n        const icon = '⬥';\n        const dirty = isDirty(node) ? '*' : '';\n\n        metadata.suffix = `${dirty} ${icon}`;\n\n        return metadata;\n    },\n    onSelected(container: DevtoolFlexContainer) {\n        if (!hasDefaults(container)) {\n            container.__devtoolLayoutDefaults = { ...container.layout?.style };\n        }\n    },\n};\n"],"names":[],"mappings":";;AAOA,SAAS,UAAU,MAAiB;AAChC,QAAM,gBAAgB,KAAK;AAE3B,MAAI,QAAQ;AACN,QAAA,WAAW,YAAY,MAAM;AAC3B,QAAA,QAAQ,MAAM,GAAG;AACjB,WAAK,QAAQ;AAAA,IAAA,OACV;AACH,WAAK,QAAQ;AAAA,IAAA;AAEjB;AACA,QAAI,UAAU,GAAG;AACb,oBAAc,QAAQ;AACtB,WAAK,QAAQ;AAAA,IAAA;AAAA,KAElB,GAAG;AACV;AAEO,SAAS,YAAY,MAA4B;AACpD,UAAO,6BAAM,6BAA4B;AAC7C;AAEA,SAAS,QAAQ,MAA4B;;AACzC,SACI,YAAY,IAAI,KAAK,KAAK,YAAU,UAAK,WAAL,mBAAa,UAAS,CAAE,CAAA,MAAM,KAAK,UAAU,KAAK,uBAAuB;AAErH;AAEO,MAAM,aAA4B;AAAA,EACrC,WAAW;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AAAA,EACA,cAAc,WAAiC,cAAc;AACzD,QAAI,iBAAiB,SAAS;AAC1B,gBAAU,SAAS;AAAA,IAAA,WACZ,iBAAiB,SAAS;AAC7B,UAAA,YAAY,SAAS,GAAG;AACxB,kBAAU,SAAS,EAAE,GAAG,UAAU,wBAAwB;AAC1D,kBAAU,0BAA0B;AAAA,MAAA;AAAA,IACxC;AAAA,EAER;AAAA,EACA,mBAAmB,MAAiB,UAAwB;AAExD,aAAS,QAAS,KAAK;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,CACT;AAEG,QAAA,EAAC,6BAAM,SAAQ;AACR,aAAA;AAAA,IAAA;AAIX,aAAS,QAAS,KAAK;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,CACT;AAED,UAAM,OAAO;AACb,UAAM,QAAQ,QAAQ,IAAI,IAAI,MAAM;AAEpC,aAAS,SAAS,GAAG,KAAK,IAAI,IAAI;AAE3B,WAAA;AAAA,EACX;AAAA,EACA,WAAW,WAAiC;;AACpC,QAAA,CAAC,YAAY,SAAS,GAAG;AACzB,gBAAU,0BAA0B,EAAE,IAAG,eAAU,WAAV,mBAAkB,MAAM;AAAA,IAAA;AAAA,EACrE;AAER;;;"}