UNPKG

@isthatuzii/create-nano-app

Version:

Desktop application scaffolding tool for the Nano Framework

172 lines (159 loc) 5.59 kB
import { createSignal, onMount, For } from "solid-js"; import { X, Plus, Eye, EyeOff, FileText, Package } from "lucide-solid"; import "./MainWorkspace.css"; import { createMainWorkspaceFunctions } from "./MainWorkspace.functions.js"; function MainWorkspace(props) { const [state, setState] = createSignal({ activeTab: 'drak_caterpillar', tabs: [ { id: 'drak_caterpillar', name: 'drak_caterpillar', type: 'EntityClassDefinition', modified: false, content: { name: 'DRAK_Caterpillar', type: 'EntityClassDefinition', guid: 'dc3b9a60-1d7e-4d49-9346-35bf995f3678', path: 'libs/foundry/records/entities/spaceships/drak_caterpillar.xml' } } ] }); const functions = createMainWorkspaceFunctions( state, setState, props ); onMount(() => { functions.initialize(); }); const TabHeader = ({ tab }) => ( <div class="tab-header" classList={{ active: state().activeTab === tab.id }} onClick={() => functions.setActiveTab(tab.id)} > <div class="tab-content"> <Package class="icon size-sm tab-icon" /> <span class="tab-name">{tab.name}</span> {tab.modified && <div class="tab-modified-indicator"></div>} <button class="tab-close" onClick={(e) => { e.stopPropagation(); functions.closeTab(tab.id); }} > <X class="icon size-sm" /> </button> </div> </div> ); const TabContent = () => { const activeTab = () => state().tabs.find(t => t.id === state().activeTab); if (!activeTab()) return <div class="empty-workspace">No tab selected</div>; const content = activeTab().content; return ( <div class="tab-content-area"> <div class="content-header"> <div class="content-info"> <div class="content-title"> <Package class="icon size-md" /> <span class="title-text">{content.name}</span> </div> <div class="content-meta"> <span class="meta-item">Type: <span class="meta-value">{content.type}</span></span> <span class="meta-item">GUID: <span class="meta-value">{content.guid}</span></span> </div> </div> <div class="content-controls"> <button class="control-button" title="View XML"> <FileText class="icon size-sm" /> <span>View XML</span> </button> <button class="control-button" title="View JSON"> <FileText class="icon size-sm" /> <span>View JSON</span> </button> </div> </div> <div class="content-body"> <div class="property-section"> <div class="section-header"> <span class="section-title">Geometry</span> <Eye class="icon size-sm" /> </div> <div class="section-content"> <div class="property-grid"> <div class="property-row"> <span class="property-label">Bioselection</span> <span class="property-value">False</span> </div> <div class="property-row"> <span class="property-label">Category</span> <span class="property-value">Default.large</span> </div> <div class="property-row"> <span class="property-label">Icon</span> <span class="property-value">Default.large</span> </div> <div class="property-row"> <span class="property-label">Invisible</span> <span class="property-value">False</span> </div> <div class="property-row"> <span class="property-label">LifetimePolicy</span> <span class="property-value">VehicleLifetimePolicy/Template (7394741ef-e3a7-4ecf-8849-cff6f6dc334f)</span> </div> </div> </div> </div> <div class="property-section"> <div class="section-header"> <span class="section-title">Components</span> <Eye class="icon size-sm" /> </div> <div class="section-content"> <div class="component-list"> <div class="component-item">StaticEntityClassData</div> <div class="component-item">Tags</div> </div> </div> </div> <div class="property-section"> <div class="section-header"> <span class="section-title">StaticEntityClassData</span> <Eye class="icon size-sm" /> </div> </div> </div> </div> ); }; return ( <div class="main-workspace"> <div class="workspace-header"> <div class="tab-bar"> <For each={state().tabs}> {(tab) => <TabHeader tab={tab} />} </For> <button class="new-tab-button" onClick={functions.addNewTab}> <Plus class="icon size-sm" /> </button> </div> </div> <div class="workspace-content"> <TabContent /> </div> </div> ); } export default MainWorkspace;