forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			69 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| 
								 | 
							
								<script lang="ts">
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Thin wrapper around 'TabGroup' which binds the state
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  import { Tab, TabGroup, TabList, TabPanel, TabPanels } from "@rgossiaux/svelte-headlessui";
							 | 
						||
| 
								 | 
							
								  import { UIEventSource } from "../../Logic/UIEventSource";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export let tab: UIEventSource<number>;
							 | 
						||
| 
								 | 
							
								  let tabElements: HTMLElement[] = [];
							 | 
						||
| 
								 | 
							
								  $: tabElements[$tab]?.click();
							 | 
						||
| 
								 | 
							
								  $: {
							 | 
						||
| 
								 | 
							
								    if (tabElements[tab.data]) {
							 | 
						||
| 
								 | 
							
								      window.setTimeout(() =>   tabElements[tab.data].click(), 50)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TabGroup defaultIndex={1} on:change={(e) =>{if(e.detail >= 0){tab.setData( e.detail); }} }>
							 | 
						||
| 
								 | 
							
								  <TabList>
							 | 
						||
| 
								 | 
							
								    <Tab class={({selected}) => selected ? "tab-selected" : "tab-unselected"}>
							 | 
						||
| 
								 | 
							
								      <div bind:this={tabElements[0]} class="flex">
							 | 
						||
| 
								 | 
							
								        <slot name="title0">
							 | 
						||
| 
								 | 
							
								          Tab 0
							 | 
						||
| 
								 | 
							
								        </slot>
							 | 
						||
| 
								 | 
							
								      </div>
							 | 
						||
| 
								 | 
							
								    </Tab>
							 | 
						||
| 
								 | 
							
								    <Tab class={({selected}) => selected ? "tab-selected" : "tab-unselected"}>
							 | 
						||
| 
								 | 
							
								      <div bind:this={tabElements[1]} class="flex">
							 | 
						||
| 
								 | 
							
								        <slot name="title1" />
							 | 
						||
| 
								 | 
							
								      </div>
							 | 
						||
| 
								 | 
							
								    </Tab>
							 | 
						||
| 
								 | 
							
								    <Tab class={({selected}) => selected ? "tab-selected" : "tab-unselected"}>
							 | 
						||
| 
								 | 
							
								      <div bind:this={tabElements[2]} class="flex">
							 | 
						||
| 
								 | 
							
								        <slot name="title2" />
							 | 
						||
| 
								 | 
							
								      </div>
							 | 
						||
| 
								 | 
							
								    </Tab>
							 | 
						||
| 
								 | 
							
								    <Tab class={({selected}) => selected ? "tab-selected" : "tab-unselected"}>
							 | 
						||
| 
								 | 
							
								      <div bind:this={tabElements[3]} class="flex">
							 | 
						||
| 
								 | 
							
								        <slot name="title3" />
							 | 
						||
| 
								 | 
							
								      </div>
							 | 
						||
| 
								 | 
							
								    </Tab>
							 | 
						||
| 
								 | 
							
								    <Tab class={({selected}) => selected ? "tab-selected" : "tab-unselected"}>
							 | 
						||
| 
								 | 
							
								      <div bind:this={tabElements[4]} class="flex">
							 | 
						||
| 
								 | 
							
								        <slot name="title4" />
							 | 
						||
| 
								 | 
							
								      </div>
							 | 
						||
| 
								 | 
							
								    </Tab>
							 | 
						||
| 
								 | 
							
								  </TabList>
							 | 
						||
| 
								 | 
							
								  <TabPanels defaultIndex={$tab}>
							 | 
						||
| 
								 | 
							
								    <TabPanel>
							 | 
						||
| 
								 | 
							
								      <slot name="content0">
							 | 
						||
| 
								 | 
							
								        <div>Empty</div>
							 | 
						||
| 
								 | 
							
								      </slot>
							 | 
						||
| 
								 | 
							
								    </TabPanel>
							 | 
						||
| 
								 | 
							
								    <TabPanel>
							 | 
						||
| 
								 | 
							
								      <slot name="content1" />
							 | 
						||
| 
								 | 
							
								    </TabPanel>
							 | 
						||
| 
								 | 
							
								    <TabPanel>
							 | 
						||
| 
								 | 
							
								      <slot name="content2" />
							 | 
						||
| 
								 | 
							
								    </TabPanel>
							 | 
						||
| 
								 | 
							
								    <TabPanel>
							 | 
						||
| 
								 | 
							
								      <slot name="content3" />
							 | 
						||
| 
								 | 
							
								    </TabPanel>
							 | 
						||
| 
								 | 
							
								    <TabPanel>
							 | 
						||
| 
								 | 
							
								      <slot name="content4" />
							 | 
						||
| 
								 | 
							
								    </TabPanel>
							 | 
						||
| 
								 | 
							
								  </TabPanels>
							 | 
						||
| 
								 | 
							
								</TabGroup>
							 |