Add theme_3d_systems/static/src/js/widgets/widget_3d_hero.js

This commit is contained in:
Huzaifa Inam 2026-08-22 21:25:14 +00:00
parent 14ba6cd252
commit 67f5eaa187

View file

@ -0,0 +1,39 @@
/** @odoo-module **/
import publicWidget from '@web/legacy/js/public/public_widget';
import { HeroNetworkScene } from '../three/hero_network_scene';
publicWidget.registry.Theme3DHero = publicWidget.Widget.extend({
selector: '.s_3d_hero',
disabledInEditableMode: false,
start: function () {
this._super.apply(this, arguments);
// Do not initialize heavy WebGL on reduced-motion preference or low-end mobile
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (prefersReducedMotion) return;
const container = this.el.querySelector('.hero-canvas-container');
if (container) {
const density = this.el.dataset.particleDensity || 'normal';
let count = 65;
if (density === 'low') count = 30;
if (density === 'high') count = 110;
this.sceneInstance = new HeroNetworkScene(container, {
particleCount: count,
});
}
},
destroy: function () {
if (this.sceneInstance) {
this.sceneInstance.destroy();
this.sceneInstance = null;
}
this._super.apply(this, arguments);
},
});
export default publicWidget.registry.Theme3DHero;