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>
 |