(() => {
  const output=document.getElementById('boba-native-menu-result'),cache={},trace=[],failures=[];
  let input,props,styles,driver,blocker,OriginalToggle,OriginalExpandable,mounts=0,busy=false;
  const animationCalls=[],toggleEvents=[],frames=[],nativeControlEvents=[];
  const report=()=>{output.textContent=JSON.stringify({ready:!!driver,trace,failures,renderCalls:mounts,controllerStyles:styles?.get(input.menuId),animationCalls,toggleEvents,frames,nativeControlEvents,sourceReferenceAdapter:false,originalComponentMountAdapter:true,fullSiteNativeMount:false},null,2);};
  function req(id){if(cache[id])return cache[id].exports;if(!modules[id])throw Error('missing_module_'+id);const m={exports:{}};cache[id]=m;modules[id](m,m.exports,req);return m.exports;}
  req.d=(target,getters)=>{for(const [key,get]of Object.entries(getters))if(!Object.hasOwn(target,key))Object.defineProperty(target,key,{enumerable:true,get});};
  req.r=target=>{Object.defineProperty(target,Symbol.toStringTag,{value:'Module'});Object.defineProperty(target,'__esModule',{value:true});};
  req.n=value=>{const get=value&&value.__esModule?()=>value.default:()=>value;req.d(get,{a:get});return get;};
  req.o=(object,key)=>Object.hasOwn(object,key);req.hmd=module=>module;req.g=window;
  req.nmd=m=>(m.paths=[],m.children||(m.children=[]),m);req.e=()=>{throw Error('dynamic_chunk_forbidden');};
  const camel=name=>name.replace(/-([a-z])/g,(_,letter)=>letter.toUpperCase());
  function reactNode(node,index){
    if(node.nodeType===Node.TEXT_NODE)return node.textContent;
    if(node.nodeType!==Node.ELEMENT_NODE)return null;
    if(input?.toggles[node.id])return React.createElement(OriginalToggle,{id:node.id,key:index});
    if(node.id===input?.expandableMenu?.id)return React.createElement(OriginalExpandable,{key:index});
    const attributes={key:index};
    for(const attr of node.attributes){
      if(attr.name==='class')attributes.className=attr.value;
      else if(attr.name==='tabindex')attributes.tabIndex=attr.value;
      else if(attr.name==='style'){attributes.style={};for(const key of node.style)attributes.style[key.startsWith('--')?key:camel(key)]=node.style.getPropertyValue(key);}
      else attributes[attr.name]=attr.value;
    }
    return React.createElement(node.tagName.toLowerCase(),attributes,...Array.from(node.childNodes).map(reactNode));
  }
  const record=stage=>{
    const element=document.getElementById(input.menuId),computed=getComputedStyle(element),rect=element.getBoundingClientRect();
    trace.push({stage,isOpen:props.get(input.menuId).isOpen,isVisible:props.get(input.menuId).isVisible,className:element.className,opacity:computed.opacity,visibility:computed.visibility,display:computed.display,rect:{x:rect.x,y:rect.y,width:rect.width,height:rect.height},hasDialog:!!element.querySelector('[role="dialog"]'),scrollBlocked:blocker.isScrollingBlocked(),bodyClass:document.body.className,controlTabindex:document.getElementById(Object.keys(input.toggles)[0]).getAttribute('tabindex')});report();
  };
  window.addEventListener('error',e=>{failures.push({kind:'error',message:e.message});report();});
  window.addEventListener('unhandledrejection',e=>{failures.push({kind:'rejection',message:String(e.reason?.stack||e.reason)});report();});
  fetch(document.documentElement.dataset.bobaMenuInput || '/native-menu/input.json',{cache:'no-store'}).then(r=>r.json()).then(async value=>{
    input=value;const original=window['rb_wixui.thunderbolt[MenuContainer_Responsive]'].components.MenuContainer_Responsive;
    const parent=req(55225).m(),symbols=req(40766),featureSymbols=req(66294),stores=req(51127);
    parent.bind(req(27089).n).toConstantValue(input.experiments);
    parent.bind(symbols.RV).toConstantValue(window);parent.bind(symbols.CB).toConstantValue(input.viewMode);
    parent.bind(symbols.Ht).toConstantValue({meter(){},histogram(){},runAsyncAndReport:fn=>fn()});
    parent.load(req(1040).site);
    props=parent.get(stores.Ji);props.setChildStore(input.contextId,{[input.menuId]:input.rendererProps,...input.toggles});
    styles=parent.get(stores.q2);styles.setChildStore(input.contextId,{[input.menuId]:{}});
    const structure=parent.get(stores.oE);structure.setChildStore(input.contextId,input.structure);
    // This branch needs only get(); full page-structure loading is outside the fixture.
    parent.bind(stores.eZ).toConstantValue(structure);
    const selectedNames=[...new Set([...input.siteFeatures,'animations'])];
    const featureNames={getAllFeatureNames:()=>selectedNames};
    parent.load(req(9515).isolatedExportRegistration({specificEnvFeaturesLoaders:featureNames}));
    parent.load(req(9515).isolatedFeatureStateRegistration({specificEnvFeaturesLoaders:featureNames}));
    parent.load(req(60605).site);
    parent.bind(featureSymbols.Gp).toConstantValue(input.domSelectors).whenTargetNamed('domSelectors');parent.load(req(60605).page);
    for(const id of [77382,86804]){const service=req(id);parent.bind(featureSymbols.YG).toConstantValue(input.siteFeaturesConfigs[service.name]).whenTargetNamed(service.name);parent.load(service.site);}
    parent.bind(featureSymbols.Gp).toConstantValue(input.animations).whenTargetNamed('animations');parent.load(req(69949).page);
    const pageHooks=parent.getAll(req(83121).$.PageWillMountHandler);
    await pageHooks.find(h=>h.name==='componentIdsRegistryLoader').pageWillMount();
    parent.getAll(req(83121).$.AppWillMountHandler).find(h=>typeof h.appWillMount==='function').appWillMount();
    pageHooks.find(h=>h.name==='animationsInit').pageWillMount();
    const animationApi=parent.get(req(8615).Qw),manager=await animationApi.getInstance();
    const originalRun=manager.runAnimation;
    manager.runAnimation=spec=>{animationCalls.push({name:spec.name,targetId:spec.targetId,duration:spec.duration??0,delay:spec.delay??0});return originalRun(spec);};
    blocker=parent.get(req(70976).j);
    const exportsStore=parent.get(stores.N0),cyclic={enableCyclicTabbing:exportsStore.get(['cyclicTabbing','enableCyclicTabbing']),disableCyclicTabbing:exportsStore.get(['cyclicTabbing','disableCyclicTabbing'])};
    const base=req(55670),traits=[base.isolatedPropsTrait(props),base.isolatedActionsTrait(parent.get(req(62969).T)),base.isolatedRefsTrait(parent.get(req(27913).Q)),base.isolatedStylesTrait(styles)];
    const feature=req(65880).isolatedMenuDriver(input.menu,input.viewMode,window,cyclic,structure,parent.get(req(1375).B),blocker,animationApi,undefined);
    const provider=base.isolatedProvider(traits,[feature],input.componentsConfig),descriptor=input.structure[input.menuId];
    driver=provider.createComponent(input.menuId,descriptor.componentType,descriptor.uiType,descriptor.builderType);driver.onToggle(value=>toggleEvents.push(value));
    const components=parent.get(req(42756).KZ),toggleDrivers={};
    for(const id of Object.keys(input.toggles)){
      const descriptor=input.structure[id];toggleDrivers[id]=provider.createComponent(id,descriptor.componentType,descriptor.uiType,descriptor.builderType);
    }
    components.setChildStore(input.contextId,{[input.menuId]:driver,...toggleDrivers});
    const menuMount=req(65880).isolatedMenuMount(input.menu,input.experiments);
    const toggleMount=req(65880).isolatedToggleMount(input.menu,components,window,structure,parent.get(req(1375).B));
    menuMount.componentWillMount(driver);
    for(const control of Object.values(toggleDrivers))toggleMount.componentWillMount(control);
    const eventProp=(id,name)=>props.get(id)?.[name] ? event=>props.get(id)[name]({args:[event],compId:id}) : undefined;
    const template=document.createElement('template');template.innerHTML=input.childrenHtml;
    const vector=window['rb_wixui.thunderbolt[VectorImage_VectorButton]'].components.VectorImage_VectorButton;
    const expandable=window['rb_wixui.thunderbolt_mobile'].components.ExpandableMenu;
    OriginalExpandable=function(){
      const current=input.expandableMenu;
      const mapped=expandable.controller.useComponentProps(current.props,{currentUrl:current.currentUrl},{});
      return React.createElement(expandable.component,{...mapped,id:current.id});
    };
    OriginalToggle=function({id}){
      const {sourceToggleRef,...mapper}=input.toggles[id];
      const current={...mapper,...props.get(id),onClick:eventProp(id,'onClick'),onKeyDown:eventProp(id,'onKeyDown')};
      const mapped=vector.controller.useComponentProps(current,{},{updateStyles(){}});
      return React.createElement(vector.component,{...mapped,id});
    };
    const host=document.getElementById(input.mountHostId);
    styles.subscribeToChanges(changed=>{for(const [id,values]of Object.entries(changed)){const element=document.getElementById(id);if(element)for(const [key,value]of Object.entries(values))element.style.setProperty(key,value);}});
    function OriginalMenu(){
      const mapped=original.controller.useComponentProps(input.rendererProps,props.get(input.menuId),{updateStyles:changes=>styles.update({[input.menuId]:changes})});
      return React.createElement(original.component,{...mapped,id:input.menuId,onClick:eventProp(input.menuId,'onClick'),children:()=>Array.from(template.content.childNodes).map(reactNode)});
    }
    const render=()=>{mounts++;ReactDOM.render(React.createElement(OriginalMenu),host);ReactDOM.render(React.createElement(OriginalToggle,{id:Object.keys(input.toggles)[0]}),document.getElementById(input.toggleMountHostId));};
    let pendingAnchor=null;
    document.addEventListener('click',event=>{
      const link=event.target.closest('a[data-anchor="anchors-lihgbjh5"]');
      if(!link || !document.getElementById(input.menuId).contains(link) ||
         link.getAttribute('href')!=='#comp-lihgbdap' || event.button!==0 ||
         event.ctrlKey || event.metaKey || event.shiftKey || event.altKey)return;
      event.preventDefault();
      pendingAnchor=link.getAttribute('href');
    },true);
    props.subscribeToChanges(changed=>{
      if(!pendingAnchor || !changed[input.menuId])return;
      requestAnimationFrame(()=>{
        if(pendingAnchor && !props.get(input.menuId).isVisible && !blocker.isScrollingBlocked()){
          const href=pendingAnchor;pendingAnchor=null;window.location.assign(href);
        }
      });
    });
    props.subscribeToChanges(changed=>{if([input.menuId,...Object.keys(input.toggles)].some(id=>changed[id]))render();});render();
    await driver.getCompRef();record('closed_initial');
    driver.onToggle(value=>{
      const name=value?'open':'close',start=performance.now();let sampling=true;
      const sample=()=>{if(!sampling)return;const target=document.getElementById('container-'+input.menuId),overlay=document.getElementById('overlay-'+input.menuId),r=target.getBoundingClientRect();frames.push({action:name,ms:performance.now()-start,x:r.x,transform:getComputedStyle(target).transform,overlayOpacity:getComputedStyle(overlay).opacity,rootOpacity:getComputedStyle(document.getElementById(input.menuId)).opacity});if(frames.length<180)requestAnimationFrame(sample);};
      requestAnimationFrame(sample);record(name+'_started');
      setTimeout(()=>{sampling=false;record(name+'_settled');req(69949).isolatedGsap.ticker.sleep();},700);
    });
    document.addEventListener('click',event=>{const control=event.target.closest('button');if(control&&input.toggles[control.id]){nativeControlEvents.push({id:control.id,event:'click'});report();}},true);

  }).catch(error=>{failures.push({kind:'initialization',message:String(error.stack||error)});report();});
})();
