forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.1 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>
 | |
| 
 | |
| <style>
 | |
|     .tab-selected {
 | |
|         background-color: rgb(59 130 246);
 | |
|         color: rgb(255 255 255);
 | |
|     }
 | |
| 
 | |
|     .tab-unselected {
 | |
|         background-color: rgb(255 255 255);
 | |
|         color: rgb(0 0 0);
 | |
|     }
 | |
| </style>
 |