this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 195e6566782f1f150e147d459d003b53f49fd1db 77 lines 2.7 kB view raw
1import { createSignal, For, onMount, Show } from 'solid-js'; 2import './TabMenu.css'; 3import { NodeManager } from '../Mangers/NodeManager'; 4import { Tab } from '../structs/Tab'; 5 6export let TabMenu = () => { 7 let [ tabImportOpen, setTabImportOpen ] = createSignal(false); 8 let [ tabs, setTabs ] = createSignal<Tab[]>([], { equals: false }); 9 10 let closeTabImportMenu = () => { 11 window.removeEventListener('click', closeTabImportMenu); 12 setTabImportOpen(false); 13 } 14 15 onMount(() => { 16 NodeManager.Instance.HookTabUpdate(setTabs); 17 }); 18 19 return ( 20 <div class="tab-menu"> 21 <For each={Object.values(tabs())}> 22 { 23 tab => 24 <div class={ tab.selected() ? 'tab-selected ' : 'tab' } onClick={() => { 25 NodeManager.Instance.SelectTab(tab.id); 26 }}> 27 <div class="tab-icon" onClick={async () => { 28 if(tab.selected()){ 29 NodeManager.Instance.SaveTab(tab); 30 } 31 }}> 32 <Show when={tab.selected() && tab.needsSave()} fallback={ 33 <img src="/assets/icons/pen-to-square-regular-full.svg" width="15" /> 34 }> 35 <img src="/assets/icons/floppy-disk-solid-full.svg" width="15" /> 36 </Show> 37 38 </div> 39 <div class="tab-meta" onDblClick={( e ) => { 40 let input = <input class="tab-meta-input" value={ e.target.innerHTML } /> as HTMLInputElement; 41 42 e.target.innerHTML = ''; 43 e.target.appendChild(input); 44 45 input.select(); 46 input.onchange = () => { 47 NodeManager.Instance.RenameTab(tab.id, input.value); 48 e.target.innerHTML = input.value; 49 } 50 }}>{ tab.name }</div> 51 <div class="tab-close" onClick={() => { 52 setTimeout(() => { 53 NodeManager.Instance.CloseTab(tab.id); 54 }, 50) 55 }}><img src="/assets/icons/xmark-solid-full.svg" width="12" /></div> 56 </div> 57 } 58 </For> 59 60 <div class="tab" onClick={() => { 61 NodeManager.Instance.AddTab("Untitled"); 62 }} onContextMenu={( e ) => { 63 e.preventDefault(); 64 setTabImportOpen(true); 65 66 window.addEventListener('click', closeTabImportMenu); 67 }}> 68 <div class="tab-new-dropdown" style={{ display: tabImportOpen() ? 'block' : 'none' }}> 69 <div class="tab">Import from file</div> 70 <div class="tab">Import from URL</div> 71 </div> 72 <div class="tab-icon"><img src="/assets/icons/plus-solid-full.svg" width="15" /></div> 73 <div class="tab-meta">New Tab</div> 74 </div> 75 </div> 76 ) 77}