@@ -33,6 +33,7 @@ import { useDialog } from "../ui/dialog"
3333import { useToast } from "../ui/toast"
3434import { useAttention } from "../context/attention"
3535import { useStorage } from "../context/storage"
36+ import { useSessionTabs } from "../context/session-tabs"
3637import { abbreviateHome } from "../util/path-format"
3738import { builtins } from "./builtins"
3839import { discoverTuiPlugins } from "./discovery"
@@ -94,6 +95,7 @@ export function PluginProvider(props: ParentProps<{ packages: PackageResolver }>
9495 const toast = useToast ( )
9596 const attention = useAttention ( )
9697 const storage = useStorage ( )
98+ const sessionTabs = useSessionTabs ( )
9799 const directory = config . path ? path . dirname ( config . path ) : process . cwd ( )
98100 const [ store , setStore ] = createStore ( {
99101 ready : false ,
@@ -278,6 +280,33 @@ export function PluginProvider(props: ParentProps<{ packages: PackageResolver }>
278280 return route . data
279281 } ,
280282 } ,
283+ tabs : {
284+ enabled : sessionTabs . enabled ,
285+ list : ( ) =>
286+ sessionTabs . tabs ( ) . map ( ( tab ) => ( {
287+ ...tab ,
288+ active : sessionTabs . current ( ) === tab . sessionID ,
289+ ...sessionTabs . status ( tab . sessionID ) ,
290+ } ) ) ,
291+ open ( sessionID ) {
292+ if ( ! sessionTabs . enabled ( ) ) return false
293+ sessionTabs . select ( sessionID )
294+ return true
295+ } ,
296+ focus ( sessionID ) {
297+ if ( ! sessionTabs . enabled ( ) ) return false
298+ if ( ! sessionTabs . tabs ( ) . some ( ( tab ) => tab . sessionID === sessionID ) ) return false
299+ sessionTabs . select ( sessionID )
300+ return true
301+ } ,
302+ close ( sessionID ) {
303+ if ( ! sessionTabs . enabled ( ) ) return false
304+ const target = sessionID ?? sessionTabs . current ( )
305+ if ( ! target || ! sessionTabs . tabs ( ) . some ( ( tab ) => tab . sessionID === target ) ) return false
306+ sessionTabs . close ( target )
307+ return true
308+ } ,
309+ } ,
281310 slot ( name , render ) {
282311 if ( store . registrations [ item . plugin . id ] ?. slots [ name ] ) throw new Error ( `Slot already registered: ${ name } ` )
283312 setStore ( "registrations" , item . plugin . id , "slots" , name , ( ) => ( input : SlotMap [ typeof name ] ) => (
0 commit comments