@mks2508/mks-ui 0.6.8 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/blocks-Sidebar-animations-tooltip.css +330 -0
- package/dist/index.css +587 -357
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.d.ts +64 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.js +301 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.styles.d.ts +94 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.styles.js +216 -0
- package/dist/react-ui/blocks/BottomNavBar/index.d.ts +10 -0
- package/dist/react-ui/blocks/BottomNavBar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/index.js +4 -0
- package/dist/react-ui/blocks/BottomNavBar/types.d.ts +362 -0
- package/dist/react-ui/blocks/BottomNavBar/types.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/types.js +175 -0
- package/dist/react-ui/blocks/BottomNavBar/useIOSSafariFix.d.ts +73 -0
- package/dist/react-ui/blocks/BottomNavBar/useIOSSafariFix.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/useIOSSafariFix.js +178 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.constants.d.ts +285 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.constants.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.constants.js +208 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.d.ts +80 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.js +114 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.styles.d.ts +77 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.styles.js +274 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.types.d.ts +546 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.types.js +149 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContent.d.ts +46 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContent.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContent.js +86 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContext.d.ts +85 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContext.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContext.js +178 -0
- package/dist/react-ui/blocks/Sidebar/SidebarFluidIndicator.d.ts +31 -0
- package/dist/react-ui/blocks/Sidebar/SidebarFluidIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarFluidIndicator.js +37 -0
- package/dist/react-ui/blocks/Sidebar/SidebarIndicator.d.ts +59 -0
- package/dist/react-ui/blocks/Sidebar/SidebarIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarIndicator.js +106 -0
- package/dist/react-ui/blocks/Sidebar/SidebarItem.d.ts +82 -0
- package/dist/react-ui/blocks/Sidebar/SidebarItem.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarItem.js +209 -0
- package/dist/react-ui/blocks/Sidebar/SidebarNav.d.ts +48 -0
- package/dist/react-ui/blocks/Sidebar/SidebarNav.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarNav.js +317 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSafeArea.d.ts +56 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSafeArea.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSafeArea.js +105 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubContent.d.ts +27 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubContent.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubContent.js +31 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubLink.d.ts +20 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubLink.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubLink.js +44 -0
- package/dist/react-ui/blocks/Sidebar/SidebarToggle.d.ts +52 -0
- package/dist/react-ui/blocks/Sidebar/SidebarToggle.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarToggle.js +119 -0
- package/dist/react-ui/blocks/Sidebar/SidebarTooltip.d.ts +15 -0
- package/dist/react-ui/blocks/Sidebar/SidebarTooltip.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarTooltip.js +177 -0
- package/dist/react-ui/blocks/Sidebar/animations/tooltip-keyframes.js +0 -0
- package/dist/react-ui/blocks/Sidebar/animations/tooltip.css +330 -0
- package/dist/react-ui/blocks/Sidebar/components/FluidHoverIndicator.d.ts +28 -0
- package/dist/react-ui/blocks/Sidebar/components/FluidHoverIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/components/FluidHoverIndicator.js +74 -0
- package/dist/react-ui/blocks/Sidebar/hooks/use-fluid-animation.d.ts +18 -0
- package/dist/react-ui/blocks/Sidebar/hooks/use-fluid-animation.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/use-fluid-animation.js +166 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarContext.d.ts +48 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarContext.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarContext.js +59 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.d.ts +72 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.js +159 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarKeyboard.d.ts +51 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarKeyboard.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarKeyboard.js +150 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSubContent.d.ts +42 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSubContent.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSubContent.js +49 -0
- package/dist/react-ui/blocks/Sidebar/index.d.ts +163 -0
- package/dist/react-ui/blocks/Sidebar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/index.js +19 -0
- package/dist/react-ui/blocks/Terminal/Terminal.tokens.d.ts +219 -0
- package/dist/react-ui/blocks/Terminal/Terminal.tokens.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/Terminal.tokens.js +253 -0
- package/dist/react-ui/blocks/Terminal/Terminal.types.d.ts +2 -1
- package/dist/react-ui/blocks/Terminal/Terminal.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.js +1 -1
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts +1 -1
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/chrome.js +2 -2
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.d.ts +15 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.js +14 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.types.d.ts +106 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/index.d.ts +89 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/index.js +136 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.d.ts +21 -7
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.js +81 -71
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.styles.d.ts +33 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.styles.js +51 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.js +8 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.types.d.ts +29 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/index.d.ts +26 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/index.js +40 -0
- package/dist/react-ui/blocks/Terminal/components/index.js +5 -2
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.js +13 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.types.d.ts +35 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/index.d.ts +75 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/index.js +115 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalAtoms.d.ts +122 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalAtoms.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalAtoms.js +128 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.js +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.types.d.ts +29 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/index.d.ts +37 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/index.js +74 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.js +16 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.types.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/index.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/index.js +81 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.js +13 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.types.d.ts +28 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/index.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/index.js +108 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.js +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.types.d.ts +31 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/index.d.ts +73 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/index.js +99 -0
- package/dist/react-ui/blocks/Terminal/controls/index.d.ts +16 -0
- package/dist/react-ui/blocks/Terminal/controls/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/index.js +11 -0
- package/dist/react-ui/blocks/Terminal/display.d.ts +2 -2
- package/dist/react-ui/blocks/Terminal/display.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/display.js +4 -2
- package/dist/react-ui/blocks/Terminal/hooks/index.d.ts +9 -2
- package/dist/react-ui/blocks/Terminal/hooks/index.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/hooks/index.js +6 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminal.d.ts +198 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminal.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminal.js +198 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalConnection.d.ts +81 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalConnection.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalConnection.js +115 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalDimensions.d.ts +54 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalDimensions.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalDimensions.js +57 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalFontSize.d.ts +81 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalFontSize.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalFontSize.js +102 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalKeyboardShortcuts.d.ts +78 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalKeyboardShortcuts.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalKeyboardShortcuts.js +136 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalPaneManager.d.ts +88 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalPaneManager.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalPaneManager.js +101 -0
- package/dist/react-ui/blocks/Terminal/index.d.ts +10 -6
- package/dist/react-ui/blocks/Terminal/index.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/index.js +43 -11
- package/dist/react-ui/blocks/Terminal/panel/LogLinesViewer.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/LogLinesViewer.js +8 -13
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.js +18 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalDebugPanel.d.ts → TerminalDebugPanel/TerminalDebugPanel.types.d.ts} +19 -27
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/index.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalDebugPanel.js → TerminalDebugPanel/index.js} +59 -38
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.js +17 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.types.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/index.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalFilterDropdown.js → TerminalFilterDropdown/index.js} +29 -31
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.css +60 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.js +5 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.types.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/index.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.js +5 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.d.ts +2 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.d.ts +6 -3
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.js +43 -264
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts +43 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.js +248 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.d.ts +4 -2
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.js +40 -150
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.d.ts +26 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.js +30 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.types.d.ts +123 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalLogsPanel.d.ts → TerminalLogsPanel/index.d.ts} +10 -21
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalLogsPanel.js → TerminalLogsPanel/index.js} +48 -81
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.d.ts +6 -142
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.js +16 -16
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.d.ts +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.js +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.d.ts +21 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.js +21 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.types.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/index.d.ts +37 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/index.js +127 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.d.ts +22 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.js +24 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.types.d.ts +43 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/index.d.ts +35 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/index.js +129 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.styles.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.types.d.ts +72 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalPanelToolbar.d.ts → TerminalPanelToolbar/index.d.ts} +10 -4
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalSessionControl.d.ts → TerminalSessionControl/TerminalSessionControl.types.d.ts} +24 -30
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/index.d.ts +38 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.d.ts +23 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.js +27 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.types.d.ts +56 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/index.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalSessionTabs.js → TerminalSessionTabs/index.js} +26 -31
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.css +60 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.js +5 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.js +19 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.types.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.d.ts +25 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.js +217 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.js +15 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.types.d.ts +28 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/index.d.ts +30 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalThemeSelector.js → TerminalThemeSelector/index.js} +31 -46
- package/dist/react-ui/blocks/Terminal/restty/ResttyContext.d.ts +38 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyContext.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyContext.js +47 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttySessionProvider.d.ts +50 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttySessionProvider.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttySessionProvider.js +60 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.js +278 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.types.d.ts +166 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/index.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/restty/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/index.js +7 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPane.d.ts +51 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPane.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPane.js +61 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPanes.d.ts +39 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPanes.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPanes.js +48 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPlugins.d.ts +29 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPlugins.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPlugins.js +33 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyVisibility.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyVisibility.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyVisibility.js +67 -0
- package/dist/react-ui/blocks/Terminal/wterm/WtermJsonTransport.d.ts +83 -0
- package/dist/react-ui/blocks/Terminal/wterm/WtermJsonTransport.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/wterm/WtermJsonTransport.js +191 -0
- package/dist/react-ui/blocks/index.d.ts +2 -0
- package/dist/react-ui/blocks/index.d.ts.map +1 -1
- package/dist/react-ui/components/MorphingPopover/morphing-popover.module.css +154 -0
- package/dist/react-ui/icons/lucide-animated/terminal.d.ts +45 -13
- package/dist/react-ui/icons/lucide-animated/terminal.d.ts.map +1 -1
- package/dist/react-ui/icons/lucide-animated/terminal.js +118 -28
- package/dist/react-ui/index.d.ts +4 -0
- package/dist/react-ui/index.d.ts.map +1 -1
- package/dist/react-ui/index.js +40 -1
- package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module.css +20 -0
- package/dist/react-ui/ui/Button/Button.styles.d.ts +2 -2
- package/dist/react-ui/ui/Button/Button.styles.d.ts.map +1 -1
- package/dist/react-ui/ui/Button/Button.styles.js +4 -2
- package/dist/react-ui/ui/Button/Button.types.d.ts +2 -2
- package/dist/react-ui/ui/Button/Button.types.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +369 -0
- package/dist/react-ui/ui/Tabs/Tabs.css +38 -0
- package/package.json +20 -7
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.d.ts +0 -146
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.js +0 -213
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.d.ts +0 -55
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.js +0 -68
- package/dist/react-ui/blocks/Terminal/TerminalRestty.d.ts +0 -111
- package/dist/react-ui/blocks/Terminal/TerminalRestty.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/TerminalRestty.js +0 -185
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.d.ts +0 -160
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.js +0 -185
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.d.ts +0 -36
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.js +0 -52
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.d.ts +0 -42
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs.d.ts +0 -43
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.d.ts +0 -30
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.js +0 -126
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.d.ts +0 -31
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.js +0 -149
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs.d.ts +0 -63
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.d.ts +0 -24
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.js +0 -225
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector.d.ts +0 -35
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.js +0 -5
- package/dist/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.js +0 -5
- /package/dist/{react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module-p4Aks9qK.css → css/blocks-Terminal-panel-TerminalFilterDropdown-terminal-filter-dropdown.module.css} +0 -0
- /package/dist/{react-ui/blocks/Terminal/panel/terminal-session-tabs.module-D7g8zk0W.css → css/blocks-Terminal-panel-TerminalSessionTabs-terminal-session-tabs.module.css} +0 -0
- /package/dist/{react-ui/components/MorphingPopover/morphing-popover.module-s63snw7C.css → css/components-MorphingPopover-morphing-popover.module.css} +0 -0
- /package/dist/{react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module-7y-To7On.css → css/primitives-waapi-Morph-techniques-useViewTransitions.module.css} +0 -0
- /package/dist/{react-ui/ui/DynamicToggle/DynamicToggle-C3rJw_PQ.css → css/ui-DynamicToggle-DynamicToggle.css} +0 -0
- /package/dist/{react-ui/ui/Tabs/Tabs-DKe-TP8j.css → css/ui-Tabs-Tabs.css} +0 -0
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { cn } from "../../../lib/utils.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import "
|
|
8
|
-
import { useTerminalSettings } from "../hooks/useTerminalSettings.js";
|
|
4
|
+
import { useTerminal } from "../hooks/useTerminal.js";
|
|
5
|
+
import { TerminalDisconnectedOverlay } from "../controls/TerminalAtoms.js";
|
|
6
|
+
import { TerminalActionBar } from "../controls/TerminalActionBar/index.js";
|
|
7
|
+
import { TerminalStatusBar } from "../controls/TerminalStatusBar/index.js";
|
|
9
8
|
import { TerminalPanelChrome } from "./TerminalPanelChrome.js";
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import { TerminalDebugPanel } from "./TerminalDebugPanel.js";
|
|
13
|
-
import { forwardRef,
|
|
9
|
+
import { ResttyTerminal } from "../restty/ResttyTerminal.js";
|
|
10
|
+
import "../restty/index.js";
|
|
11
|
+
import { TerminalDebugPanel } from "./TerminalDebugPanel/index.js";
|
|
12
|
+
import { forwardRef, useImperativeHandle } from "react";
|
|
14
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
14
|
|
|
16
15
|
//#region src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.tsx
|
|
@@ -22,26 +21,20 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
22
21
|
* footer) but uses restty for rendering and its own PTY transport
|
|
23
22
|
* instead of useTerminalWebSocket.
|
|
24
23
|
*
|
|
24
|
+
* Internally composes `useTerminal` hook with `TerminalActionBar`,
|
|
25
|
+
* `TerminalStatusBar`, and `TerminalDisconnectedOverlay` atoms.
|
|
26
|
+
*
|
|
25
27
|
* @module components/devenv/terminal/panel/interactive-restty
|
|
26
28
|
*/
|
|
27
29
|
/**
|
|
28
|
-
* Min/max font size bounds.
|
|
29
|
-
*/
|
|
30
|
-
const MIN_FONT_SIZE = 10;
|
|
31
|
-
const MAX_FONT_SIZE = 24;
|
|
32
|
-
/**
|
|
33
|
-
* Action button base styles.
|
|
34
|
-
*/
|
|
35
|
-
const actionBtnStyles = "h-8 px-2 rounded-md transition-all hover:bg-muted/20 active:bg-muted/30 flex items-center justify-center gap-1 text-xs font-mono text-muted-foreground hover:text-foreground flex-shrink-0";
|
|
36
|
-
/**
|
|
37
30
|
* TerminalInteractivePanelRestty Component.
|
|
38
31
|
*
|
|
39
32
|
* GPU-accelerated interactive terminal combining:
|
|
40
33
|
* - TerminalPanelChrome (Ghostty glassmorphism shell)
|
|
41
34
|
* - restty with WebGPU/WebGL2 rendering
|
|
42
|
-
* -
|
|
43
|
-
* -
|
|
44
|
-
* -
|
|
35
|
+
* - Composable action bar (clear, settings, split, font controls)
|
|
36
|
+
* - Composable status bar (connection, dimensions, font size)
|
|
37
|
+
* - Disconnected overlay with reconnect button
|
|
45
38
|
*
|
|
46
39
|
* @example
|
|
47
40
|
* ```tsx
|
|
@@ -53,270 +46,56 @@ const actionBtnStyles = "h-8 px-2 rounded-md transition-all hover:bg-muted/20 ac
|
|
|
53
46
|
* ```
|
|
54
47
|
*/
|
|
55
48
|
const TerminalInteractivePanelRestty = forwardRef(({ containerName, wsUrl, sessions, activeSessionId, onSessionChange, onSessionClose, onNewSession, onConnect, onDisconnect, onError, className }, ref) => {
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
rows: 24
|
|
49
|
+
const terminal = useTerminal({
|
|
50
|
+
wsUrl,
|
|
51
|
+
onConnect,
|
|
52
|
+
onDisconnect,
|
|
53
|
+
onError
|
|
62
54
|
});
|
|
63
|
-
const [connectionStatus, setConnectionStatus] = useState("disconnected");
|
|
64
|
-
const [uptimeStart, setUptimeStart] = useState(null);
|
|
65
|
-
/**
|
|
66
|
-
* Handle PTY connection status changes from restty.
|
|
67
|
-
*/
|
|
68
|
-
const handlePtyStatus = useCallback((status) => {
|
|
69
|
-
if (status === "connected" || status === "attached" || status === "welcome" || status === "created") setConnectionStatus("connected");
|
|
70
|
-
else if (status === "connecting") setConnectionStatus("connecting");
|
|
71
|
-
else if (status === "error") setConnectionStatus("error");
|
|
72
|
-
}, []);
|
|
73
|
-
/**
|
|
74
|
-
* Handle PTY connection open.
|
|
75
|
-
*/
|
|
76
|
-
const handleConnect = useCallback(() => {
|
|
77
|
-
setConnectionStatus("connected");
|
|
78
|
-
setUptimeStart(Date.now());
|
|
79
|
-
onConnect?.();
|
|
80
|
-
}, [onConnect]);
|
|
81
|
-
/**
|
|
82
|
-
* Handle PTY connection close.
|
|
83
|
-
*/
|
|
84
|
-
const handleDisconnect = useCallback(() => {
|
|
85
|
-
setConnectionStatus("disconnected");
|
|
86
|
-
setUptimeStart(null);
|
|
87
|
-
onDisconnect?.();
|
|
88
|
-
}, [onDisconnect]);
|
|
89
|
-
/**
|
|
90
|
-
* Handle PTY errors.
|
|
91
|
-
*/
|
|
92
|
-
const handleError = useCallback((message) => {
|
|
93
|
-
setConnectionStatus("error");
|
|
94
|
-
onError?.(message);
|
|
95
|
-
}, [onError]);
|
|
96
|
-
/**
|
|
97
|
-
* Handle terminal resize from restty.
|
|
98
|
-
*/
|
|
99
|
-
const handleResize = useCallback((cols, rows) => {
|
|
100
|
-
setDimensions({
|
|
101
|
-
cols,
|
|
102
|
-
rows
|
|
103
|
-
});
|
|
104
|
-
}, []);
|
|
105
|
-
const isConnected = connectionStatus === "connected";
|
|
106
|
-
/**
|
|
107
|
-
* Clear terminal display.
|
|
108
|
-
*/
|
|
109
|
-
const handleClear = useCallback(() => {
|
|
110
|
-
resttyRef.current?.clear();
|
|
111
|
-
}, []);
|
|
112
|
-
/**
|
|
113
|
-
* Increase font size.
|
|
114
|
-
*/
|
|
115
|
-
const handleFontIncrease = useCallback(() => {
|
|
116
|
-
setFontSize((prev) => {
|
|
117
|
-
const next = Math.min(prev + 1, MAX_FONT_SIZE);
|
|
118
|
-
resttyRef.current?.setFontSize(next);
|
|
119
|
-
return next;
|
|
120
|
-
});
|
|
121
|
-
}, []);
|
|
122
|
-
/**
|
|
123
|
-
* Decrease font size.
|
|
124
|
-
*/
|
|
125
|
-
const handleFontDecrease = useCallback(() => {
|
|
126
|
-
setFontSize((prev) => {
|
|
127
|
-
const next = Math.max(prev - 1, MIN_FONT_SIZE);
|
|
128
|
-
resttyRef.current?.setFontSize(next);
|
|
129
|
-
return next;
|
|
130
|
-
});
|
|
131
|
-
}, []);
|
|
132
|
-
/**
|
|
133
|
-
* Reconnect to PTY.
|
|
134
|
-
*/
|
|
135
|
-
const handleReconnect = useCallback(() => {
|
|
136
|
-
if (!wsUrl) return;
|
|
137
|
-
resttyRef.current?.disconnectPty();
|
|
138
|
-
resttyRef.current?.connectPty(wsUrl);
|
|
139
|
-
setConnectionStatus("connecting");
|
|
140
|
-
}, [wsUrl]);
|
|
141
55
|
/**
|
|
142
56
|
* Expose imperative methods to parent.
|
|
143
57
|
*/
|
|
144
58
|
useImperativeHandle(ref, () => ({
|
|
145
59
|
write: (_text) => {},
|
|
146
|
-
clear: () =>
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
resttyRef.current?.focus();
|
|
151
|
-
},
|
|
152
|
-
sendInput: (data) => {
|
|
153
|
-
resttyRef.current?.sendInput(data);
|
|
154
|
-
},
|
|
155
|
-
isConnected: () => resttyRef.current?.isPtyConnected() ?? false
|
|
60
|
+
clear: () => terminal.clear(),
|
|
61
|
+
focus: () => terminal.focus(),
|
|
62
|
+
sendInput: (data) => terminal.sendInput(data),
|
|
63
|
+
isConnected: () => terminal.isConnected
|
|
156
64
|
}));
|
|
157
|
-
/**
|
|
158
|
-
* Get connection status label with color.
|
|
159
|
-
*/
|
|
160
|
-
const getStatusLabel = () => {
|
|
161
|
-
switch (connectionStatus) {
|
|
162
|
-
case "connected": return {
|
|
163
|
-
text: "Connected (GPU)",
|
|
164
|
-
color: "text-success"
|
|
165
|
-
};
|
|
166
|
-
case "connecting": return {
|
|
167
|
-
text: "Connecting...",
|
|
168
|
-
color: "text-yellow-500"
|
|
169
|
-
};
|
|
170
|
-
case "error": return {
|
|
171
|
-
text: "Error",
|
|
172
|
-
color: "text-destructive"
|
|
173
|
-
};
|
|
174
|
-
default: return {
|
|
175
|
-
text: "Disconnected",
|
|
176
|
-
color: "text-muted-foreground"
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
const statusLabel = getStatusLabel();
|
|
181
65
|
return /* @__PURE__ */ jsxs(TerminalPanelChrome, {
|
|
182
66
|
containerName,
|
|
183
|
-
isConnected,
|
|
184
|
-
crtEffect: settings.crtEffect,
|
|
67
|
+
isConnected: terminal.isConnected,
|
|
68
|
+
crtEffect: terminal.settings.crtEffect,
|
|
185
69
|
sessions,
|
|
186
70
|
activeSessionId,
|
|
187
71
|
onSessionTabClick: onSessionChange,
|
|
188
72
|
onSessionClose,
|
|
189
73
|
onNewSession,
|
|
190
|
-
actionBar: /* @__PURE__ */
|
|
191
|
-
|
|
192
|
-
children: [
|
|
193
|
-
/* @__PURE__ */ jsxs("button", {
|
|
194
|
-
type: "button",
|
|
195
|
-
onClick: handleClear,
|
|
196
|
-
className: actionBtnStyles,
|
|
197
|
-
title: "Clear terminal",
|
|
198
|
-
children: [/* @__PURE__ */ jsx(DeleteIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }), /* @__PURE__ */ jsx("span", { children: "Clear" })]
|
|
199
|
-
}),
|
|
200
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1" }),
|
|
201
|
-
/* @__PURE__ */ jsx(TerminalSettingsPopover, {}),
|
|
202
|
-
/* @__PURE__ */ jsx("span", {
|
|
203
|
-
className: "text-[10px] font-mono text-primary/70 uppercase tracking-wider px-1.5 py-0.5 rounded border border-primary/20 bg-primary/5",
|
|
204
|
-
children: "restty"
|
|
205
|
-
}),
|
|
206
|
-
connectionStatus === "disconnected" && /* @__PURE__ */ jsx("button", {
|
|
207
|
-
type: "button",
|
|
208
|
-
onClick: handleReconnect,
|
|
209
|
-
className: cn(actionBtnStyles, "text-primary hover:text-primary"),
|
|
210
|
-
title: "Reconnect",
|
|
211
|
-
children: "Reconnect"
|
|
212
|
-
}),
|
|
213
|
-
/* @__PURE__ */ jsxs("div", {
|
|
214
|
-
className: "flex items-center gap-1",
|
|
215
|
-
children: [
|
|
216
|
-
/* @__PURE__ */ jsx("span", {
|
|
217
|
-
className: "text-[10px] text-muted-foreground font-mono uppercase tracking-wider mr-1",
|
|
218
|
-
children: "Font"
|
|
219
|
-
}),
|
|
220
|
-
/* @__PURE__ */ jsx("button", {
|
|
221
|
-
type: "button",
|
|
222
|
-
onClick: handleFontDecrease,
|
|
223
|
-
className: cn(actionBtnStyles, "w-7 h-7 px-0"),
|
|
224
|
-
title: "Decrease font size",
|
|
225
|
-
disabled: fontSize <= MIN_FONT_SIZE,
|
|
226
|
-
children: /* @__PURE__ */ jsx("span", {
|
|
227
|
-
className: "text-sm font-bold",
|
|
228
|
-
children: "−"
|
|
229
|
-
})
|
|
230
|
-
}),
|
|
231
|
-
/* @__PURE__ */ jsx("span", {
|
|
232
|
-
className: "text-xs font-mono text-foreground w-7 text-center",
|
|
233
|
-
children: fontSize
|
|
234
|
-
}),
|
|
235
|
-
/* @__PURE__ */ jsx("button", {
|
|
236
|
-
type: "button",
|
|
237
|
-
onClick: handleFontIncrease,
|
|
238
|
-
className: cn(actionBtnStyles, "w-7 h-7 px-0"),
|
|
239
|
-
title: "Increase font size",
|
|
240
|
-
disabled: fontSize >= MAX_FONT_SIZE,
|
|
241
|
-
children: /* @__PURE__ */ jsx(PlusIcon, { className: "w-3 h-3 flex-shrink-0" })
|
|
242
|
-
})
|
|
243
|
-
]
|
|
244
|
-
})
|
|
245
|
-
]
|
|
246
|
-
}),
|
|
247
|
-
footer: /* @__PURE__ */ jsxs("div", {
|
|
248
|
-
className: "flex items-center justify-between px-4 h-10 bg-muted/20 border-t border-white/10",
|
|
249
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
250
|
-
className: "flex items-center gap-3",
|
|
251
|
-
children: /* @__PURE__ */ jsxs("div", {
|
|
252
|
-
className: "flex items-center gap-1.5",
|
|
253
|
-
children: [/* @__PURE__ */ jsx("div", { className: cn("w-2 h-2 rounded-full transition-all duration-300", isConnected ? "bg-success/80 shadow-[0_0_8px_hsla(142,100%,62%,0.5)]" : connectionStatus === "connecting" ? "bg-yellow-500/80 animate-pulse" : connectionStatus === "error" ? "bg-destructive/80" : "bg-muted-foreground/60") }), /* @__PURE__ */ jsx("span", {
|
|
254
|
-
className: cn("text-xs font-mono", statusLabel.color),
|
|
255
|
-
children: statusLabel.text
|
|
256
|
-
})]
|
|
257
|
-
})
|
|
258
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
259
|
-
className: "flex items-center gap-3",
|
|
260
|
-
children: [/* @__PURE__ */ jsxs("span", {
|
|
261
|
-
className: "text-xs font-mono text-muted-foreground",
|
|
262
|
-
children: [
|
|
263
|
-
dimensions.cols,
|
|
264
|
-
"×",
|
|
265
|
-
dimensions.rows
|
|
266
|
-
]
|
|
267
|
-
}), /* @__PURE__ */ jsxs("span", {
|
|
268
|
-
className: "text-xs font-mono text-muted-foreground",
|
|
269
|
-
children: [fontSize, "px"]
|
|
270
|
-
})]
|
|
271
|
-
})]
|
|
272
|
-
}),
|
|
74
|
+
actionBar: /* @__PURE__ */ jsx(TerminalActionBar, { terminal }),
|
|
75
|
+
footer: /* @__PURE__ */ jsx(TerminalStatusBar, { terminal }),
|
|
273
76
|
className,
|
|
274
77
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
275
78
|
className: "relative min-h-[400px]",
|
|
276
|
-
children: [/* @__PURE__ */ jsx(
|
|
277
|
-
ref:
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
resttyThemeName: settings.resttyThemeName,
|
|
79
|
+
children: [/* @__PURE__ */ jsx(ResttyTerminal, {
|
|
80
|
+
ref: terminal.ref,
|
|
81
|
+
...terminal.resttyProps,
|
|
82
|
+
resttyThemeName: terminal.settings.resttyThemeName,
|
|
281
83
|
gpuRenderer: "auto",
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
onError: handleError,
|
|
287
|
-
className: "w-full h-full min-h-[400px] bg-[#241B2F]"
|
|
288
|
-
}), connectionStatus === "disconnected" && /* @__PURE__ */ jsx("div", {
|
|
289
|
-
className: "absolute inset-0 flex items-center justify-center bg-black/40 backdrop-blur-sm pointer-events-none",
|
|
290
|
-
children: /* @__PURE__ */ jsxs("div", {
|
|
291
|
-
className: "text-center pointer-events-auto",
|
|
292
|
-
children: [
|
|
293
|
-
/* @__PURE__ */ jsx(TerminalIcon, { className: "w-12 h-12 mx-auto mb-3 text-muted-foreground/50" }),
|
|
294
|
-
/* @__PURE__ */ jsx("p", {
|
|
295
|
-
className: "text-sm text-muted-foreground/70 font-mono mb-3",
|
|
296
|
-
children: "Terminal disconnected"
|
|
297
|
-
}),
|
|
298
|
-
/* @__PURE__ */ jsx("button", {
|
|
299
|
-
type: "button",
|
|
300
|
-
onClick: handleReconnect,
|
|
301
|
-
className: cn("px-4 py-2 rounded-lg text-sm font-mono transition-colors", "bg-primary/20 text-primary hover:bg-primary/30", "border border-primary/40", "shadow-[0_0_10px_hsla(330,85%,43%,0.2)]"),
|
|
302
|
-
children: "Reconnect"
|
|
303
|
-
})
|
|
304
|
-
]
|
|
305
|
-
})
|
|
84
|
+
className: cn("w-full h-full min-h-[400px]", "bg-[hsl(var(--terminal-bg,var(--background)))]")
|
|
85
|
+
}), /* @__PURE__ */ jsx(TerminalDisconnectedOverlay, {
|
|
86
|
+
onReconnect: terminal.reconnect,
|
|
87
|
+
visible: terminal.status === "disconnected"
|
|
306
88
|
})]
|
|
307
89
|
}), /* @__PURE__ */ jsx(TerminalDebugPanel, {
|
|
308
|
-
visible: settings.debugPanel,
|
|
309
|
-
renderer:
|
|
310
|
-
gridSize: dimensions.cols > 0 ?
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
} : void 0,
|
|
314
|
-
font: `JetBrains Mono ${fontSize}px`,
|
|
315
|
-
ptyStatus: connectionStatus,
|
|
90
|
+
visible: terminal.settings.debugPanel,
|
|
91
|
+
renderer: terminal.isConnected ? "restty (GPU)" : void 0,
|
|
92
|
+
gridSize: terminal.dimensions.cols > 0 ? terminal.dimensions : void 0,
|
|
93
|
+
font: `JetBrains Mono ${terminal.fontSize}px`,
|
|
94
|
+
ptyStatus: terminal.status,
|
|
316
95
|
ptyUrl: wsUrl,
|
|
317
|
-
themeName: settings.resttyThemeName,
|
|
318
|
-
crtEffect: settings.crtEffect,
|
|
319
|
-
uptimeSeconds:
|
|
96
|
+
themeName: terminal.settings.resttyThemeName,
|
|
97
|
+
crtEffect: terminal.settings.crtEffect,
|
|
98
|
+
uptimeSeconds: terminal.uptimeSeconds ?? 0
|
|
320
99
|
})]
|
|
321
100
|
});
|
|
322
101
|
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TerminalInteractivePanelWterm Component.
|
|
3
|
+
*
|
|
4
|
+
* Interactive terminal panel using wterm — Zig + WASM terminal emulator.
|
|
5
|
+
* Mirrors TerminalInteractivePanel's UI (Ghostty chrome, action bar,
|
|
6
|
+
* footer) but uses wterm for rendering with WtermJsonTransport
|
|
7
|
+
* bridging the MKS JSON WebSocket protocol.
|
|
8
|
+
*
|
|
9
|
+
* @module components/devenv/terminal/panel/interactive-wterm
|
|
10
|
+
*/
|
|
11
|
+
import type { ITerminalInteractivePanelProps, ITerminalInteractivePanelRef } from './TerminalInteractivePanel.types';
|
|
12
|
+
import '@wterm/react/css';
|
|
13
|
+
/**
|
|
14
|
+
* TerminalInteractivePanelWterm Component.
|
|
15
|
+
*
|
|
16
|
+
* Interactive terminal panel combining:
|
|
17
|
+
* - TerminalPanelChrome (Ghostty glassmorphism shell)
|
|
18
|
+
* - wterm with Zig + WASM VT100/VT220/xterm parser
|
|
19
|
+
* - WtermJsonTransport bridging MKS JSON WS protocol
|
|
20
|
+
* - Composable action bar and status bar atoms
|
|
21
|
+
*
|
|
22
|
+
* wterm features:
|
|
23
|
+
* - ~12KB WASM binary (embedded base64 fallback)
|
|
24
|
+
* - DOM rendering with dirty-row tracking via requestAnimationFrame
|
|
25
|
+
* - Full 24-bit color (SGR) support
|
|
26
|
+
* - Alternate screen buffer (vim, less, htop work)
|
|
27
|
+
* - Scrollback history ring buffer
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* const termRef = useRef<ITerminalInteractivePanelRef>(null);
|
|
32
|
+
*
|
|
33
|
+
* <TerminalInteractivePanelWterm
|
|
34
|
+
* ref={termRef}
|
|
35
|
+
* containerName="mks-devenv"
|
|
36
|
+
* wsUrl="ws://localhost:3100/terminal/session-1"
|
|
37
|
+
* onConnect={() => console.log('Connected')}
|
|
38
|
+
* onDisconnect={() => console.log('Disconnected')}
|
|
39
|
+
* />
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare const TerminalInteractivePanelWterm: import("react").ForwardRefExoticComponent<ITerminalInteractivePanelProps & import("react").RefAttributes<ITerminalInteractivePanelRef>>;
|
|
43
|
+
//# sourceMappingURL=TerminalInteractivePanelWterm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalInteractivePanelWterm.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,OAAO,KAAK,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAWrH,OAAO,kBAAkB,CAAC;AAY1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,6BAA6B,yIAqOzC,CAAC"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { cn } from "../../../lib/utils.js";
|
|
4
|
+
import { useTerminalSettings } from "../hooks/useTerminalSettings.js";
|
|
5
|
+
import { TerminalClearButton, TerminalDimensionsBadge, TerminalDisconnectedOverlay, TerminalReconnectButton } from "../controls/TerminalAtoms.js";
|
|
6
|
+
import { TerminalFontControls } from "../controls/TerminalFontControls/index.js";
|
|
7
|
+
import { TerminalSettingsPopover } from "./TerminalSettingsPopover/index.js";
|
|
8
|
+
import { TerminalActionBar } from "../controls/TerminalActionBar/index.js";
|
|
9
|
+
import { TerminalConnectionStatus } from "../controls/TerminalConnectionStatus/index.js";
|
|
10
|
+
import { TerminalStatusBar } from "../controls/TerminalStatusBar/index.js";
|
|
11
|
+
import { TerminalPanelChrome } from "./TerminalPanelChrome.js";
|
|
12
|
+
import { WtermJsonTransport } from "../wterm/WtermJsonTransport.js";
|
|
13
|
+
import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
|
|
14
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
import { Terminal } from "@wterm/react";
|
|
16
|
+
import "@wterm/react/css";
|
|
17
|
+
|
|
18
|
+
//#region src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.tsx
|
|
19
|
+
/**
|
|
20
|
+
* TerminalInteractivePanelWterm Component.
|
|
21
|
+
*
|
|
22
|
+
* Interactive terminal panel using wterm — Zig + WASM terminal emulator.
|
|
23
|
+
* Mirrors TerminalInteractivePanel's UI (Ghostty chrome, action bar,
|
|
24
|
+
* footer) but uses wterm for rendering with WtermJsonTransport
|
|
25
|
+
* bridging the MKS JSON WebSocket protocol.
|
|
26
|
+
*
|
|
27
|
+
* @module components/devenv/terminal/panel/interactive-wterm
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Terminal display container styles for interactive mode.
|
|
31
|
+
*/
|
|
32
|
+
const terminalContainerStyles = "relative bg-[hsl(var(--terminal-bg,var(--background)))] min-h-[400px] border-x border-border/10 terminal-scroll";
|
|
33
|
+
/** Min/max font size bounds. */
|
|
34
|
+
const MIN_FONT_SIZE = 10;
|
|
35
|
+
const MAX_FONT_SIZE = 24;
|
|
36
|
+
/**
|
|
37
|
+
* TerminalInteractivePanelWterm Component.
|
|
38
|
+
*
|
|
39
|
+
* Interactive terminal panel combining:
|
|
40
|
+
* - TerminalPanelChrome (Ghostty glassmorphism shell)
|
|
41
|
+
* - wterm with Zig + WASM VT100/VT220/xterm parser
|
|
42
|
+
* - WtermJsonTransport bridging MKS JSON WS protocol
|
|
43
|
+
* - Composable action bar and status bar atoms
|
|
44
|
+
*
|
|
45
|
+
* wterm features:
|
|
46
|
+
* - ~12KB WASM binary (embedded base64 fallback)
|
|
47
|
+
* - DOM rendering with dirty-row tracking via requestAnimationFrame
|
|
48
|
+
* - Full 24-bit color (SGR) support
|
|
49
|
+
* - Alternate screen buffer (vim, less, htop work)
|
|
50
|
+
* - Scrollback history ring buffer
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* const termRef = useRef<ITerminalInteractivePanelRef>(null);
|
|
55
|
+
*
|
|
56
|
+
* <TerminalInteractivePanelWterm
|
|
57
|
+
* ref={termRef}
|
|
58
|
+
* containerName="mks-devenv"
|
|
59
|
+
* wsUrl="ws://localhost:3100/terminal/session-1"
|
|
60
|
+
* onConnect={() => console.log('Connected')}
|
|
61
|
+
* onDisconnect={() => console.log('Disconnected')}
|
|
62
|
+
* />
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
const TerminalInteractivePanelWterm = forwardRef(({ containerName, wsUrl, sessions, activeSessionId, onSessionChange, onSessionClose, onNewSession, onConnect, onDisconnect, onError, className }, ref) => {
|
|
66
|
+
/** wterm terminal instance handle */
|
|
67
|
+
const terminalRef = useRef(null);
|
|
68
|
+
/** MKS JSON → wterm bridge transport */
|
|
69
|
+
const transportRef = useRef(null);
|
|
70
|
+
const containerRef = useRef(null);
|
|
71
|
+
const terminalReadyRef = useRef(false);
|
|
72
|
+
const { settings } = useTerminalSettings();
|
|
73
|
+
const [fontSize, setFontSize] = useState(settings.fontSize);
|
|
74
|
+
const [dimensions, setDimensions] = useState({
|
|
75
|
+
cols: 80,
|
|
76
|
+
rows: 24
|
|
77
|
+
});
|
|
78
|
+
const [connectionStatus, setConnectionStatus] = useState("disconnected");
|
|
79
|
+
/**
|
|
80
|
+
* Connect to MKS terminal server via WtermJsonTransport.
|
|
81
|
+
*/
|
|
82
|
+
const connectTransport = useCallback(() => {
|
|
83
|
+
if (!wsUrl) return;
|
|
84
|
+
transportRef.current?.destroy();
|
|
85
|
+
const transport = new WtermJsonTransport(containerName || "bash");
|
|
86
|
+
transport.connect({
|
|
87
|
+
url: wsUrl,
|
|
88
|
+
cols: dimensions.cols,
|
|
89
|
+
rows: dimensions.rows,
|
|
90
|
+
callbacks: {
|
|
91
|
+
onConnect: () => {
|
|
92
|
+
setConnectionStatus("connected");
|
|
93
|
+
onConnect?.();
|
|
94
|
+
terminalRef.current?.write("\r\n\x1B[32m✓ Connected to wterm\x1B[0m\r\n");
|
|
95
|
+
},
|
|
96
|
+
onDisconnect: () => {
|
|
97
|
+
setConnectionStatus("disconnected");
|
|
98
|
+
onDisconnect?.();
|
|
99
|
+
terminalRef.current?.write("\r\n\x1B[31m✗ Disconnected from terminal\x1B[0m\r\n");
|
|
100
|
+
},
|
|
101
|
+
onError: (message) => {
|
|
102
|
+
setConnectionStatus("error");
|
|
103
|
+
onError?.(message);
|
|
104
|
+
terminalRef.current?.write(`\r\n\x1b[31mError: ${message}\x1b[0m\r\n`);
|
|
105
|
+
},
|
|
106
|
+
onData: (data) => {
|
|
107
|
+
terminalRef.current?.write(data);
|
|
108
|
+
},
|
|
109
|
+
onStatus: (shell) => {
|
|
110
|
+
console.debug("[wterm] Shell:", shell);
|
|
111
|
+
},
|
|
112
|
+
onExit: (code) => {
|
|
113
|
+
terminalRef.current?.write(`\r\n\x1b[33m[process exited with code ${code}]\x1b[0m\r\n`);
|
|
114
|
+
setConnectionStatus("disconnected");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
transportRef.current = transport;
|
|
119
|
+
}, [
|
|
120
|
+
wsUrl,
|
|
121
|
+
containerName,
|
|
122
|
+
dimensions.cols,
|
|
123
|
+
dimensions.rows,
|
|
124
|
+
onConnect,
|
|
125
|
+
onDisconnect,
|
|
126
|
+
onError
|
|
127
|
+
]);
|
|
128
|
+
/**
|
|
129
|
+
* Handle terminal data input from user → send to PTY via JSON transport.
|
|
130
|
+
*/
|
|
131
|
+
const handleData = useCallback((data) => {
|
|
132
|
+
transportRef.current?.sendInput(data);
|
|
133
|
+
}, []);
|
|
134
|
+
/**
|
|
135
|
+
* Handle terminal resize → update transport and wterm dimensions.
|
|
136
|
+
*/
|
|
137
|
+
const handleResize = useCallback((cols, rows) => {
|
|
138
|
+
setDimensions({
|
|
139
|
+
cols,
|
|
140
|
+
rows
|
|
141
|
+
});
|
|
142
|
+
transportRef.current?.resize(cols, rows);
|
|
143
|
+
}, []);
|
|
144
|
+
/**
|
|
145
|
+
* Reconnect to terminal.
|
|
146
|
+
*/
|
|
147
|
+
const reconnect = useCallback(() => {
|
|
148
|
+
connectTransport();
|
|
149
|
+
}, [connectTransport]);
|
|
150
|
+
/**
|
|
151
|
+
* Initialize transport on mount and clean up on unmount.
|
|
152
|
+
*/
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
terminalReadyRef.current = true;
|
|
155
|
+
connectTransport();
|
|
156
|
+
return () => {
|
|
157
|
+
terminalReadyRef.current = false;
|
|
158
|
+
transportRef.current?.destroy();
|
|
159
|
+
transportRef.current = null;
|
|
160
|
+
};
|
|
161
|
+
}, [connectTransport]);
|
|
162
|
+
/**
|
|
163
|
+
* Handle font size changes via CSS custom property.
|
|
164
|
+
*/
|
|
165
|
+
useEffect(() => {
|
|
166
|
+
if (containerRef.current) containerRef.current.style.setProperty("--wterm-font-size", `${fontSize}px`);
|
|
167
|
+
}, [fontSize]);
|
|
168
|
+
const handleClear = useCallback(() => {
|
|
169
|
+
terminalRef.current?.write("\x1B[2J\x1B[H");
|
|
170
|
+
}, []);
|
|
171
|
+
const handleFontIncrease = useCallback(() => {
|
|
172
|
+
setFontSize((prev) => Math.min(prev + 1, MAX_FONT_SIZE));
|
|
173
|
+
}, []);
|
|
174
|
+
const handleFontDecrease = useCallback(() => {
|
|
175
|
+
setFontSize((prev) => Math.max(prev - 1, MIN_FONT_SIZE));
|
|
176
|
+
}, []);
|
|
177
|
+
useImperativeHandle(ref, () => ({
|
|
178
|
+
write: (text) => {
|
|
179
|
+
terminalRef.current?.write(text);
|
|
180
|
+
},
|
|
181
|
+
clear: () => {
|
|
182
|
+
terminalRef.current?.write("\x1B[2J\x1B[H");
|
|
183
|
+
},
|
|
184
|
+
focus: () => {
|
|
185
|
+
terminalRef.current?.focus();
|
|
186
|
+
},
|
|
187
|
+
sendInput: (data) => {
|
|
188
|
+
transportRef.current?.sendInput(data);
|
|
189
|
+
},
|
|
190
|
+
isConnected: () => connectionStatus === "connected"
|
|
191
|
+
}));
|
|
192
|
+
return /* @__PURE__ */ jsx(TerminalPanelChrome, {
|
|
193
|
+
containerName,
|
|
194
|
+
isConnected: connectionStatus === "connected",
|
|
195
|
+
crtEffect: settings.crtEffect,
|
|
196
|
+
sessions,
|
|
197
|
+
activeSessionId,
|
|
198
|
+
onSessionTabClick: onSessionChange,
|
|
199
|
+
onSessionClose,
|
|
200
|
+
onNewSession,
|
|
201
|
+
actionBar: /* @__PURE__ */ jsxs(TerminalActionBar, { children: [
|
|
202
|
+
/* @__PURE__ */ jsx(TerminalClearButton, { onClear: handleClear }),
|
|
203
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1" }),
|
|
204
|
+
/* @__PURE__ */ jsx(TerminalSettingsPopover, {}),
|
|
205
|
+
/* @__PURE__ */ jsx(TerminalReconnectButton, {
|
|
206
|
+
onReconnect: reconnect,
|
|
207
|
+
status: connectionStatus
|
|
208
|
+
}),
|
|
209
|
+
/* @__PURE__ */ jsx(TerminalFontControls, {
|
|
210
|
+
fontSize,
|
|
211
|
+
onIncrease: handleFontIncrease,
|
|
212
|
+
onDecrease: handleFontDecrease,
|
|
213
|
+
isMin: fontSize <= MIN_FONT_SIZE,
|
|
214
|
+
isMax: fontSize >= MAX_FONT_SIZE
|
|
215
|
+
})
|
|
216
|
+
] }),
|
|
217
|
+
footer: /* @__PURE__ */ jsxs(TerminalStatusBar, { children: [/* @__PURE__ */ jsx(TerminalStatusBar.Group, { children: /* @__PURE__ */ jsx(TerminalConnectionStatus, { status: connectionStatus }) }), /* @__PURE__ */ jsxs(TerminalStatusBar.Group, { children: [/* @__PURE__ */ jsx(TerminalDimensionsBadge, { dimensions }), /* @__PURE__ */ jsxs("span", {
|
|
218
|
+
className: "text-xs font-mono text-muted-foreground",
|
|
219
|
+
children: [fontSize, "px"]
|
|
220
|
+
})] })] }),
|
|
221
|
+
className,
|
|
222
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
223
|
+
ref: containerRef,
|
|
224
|
+
className: cn(terminalContainerStyles, "wterm-wrapper"),
|
|
225
|
+
style: { "--wterm-font-size": `${fontSize}px` },
|
|
226
|
+
children: [/* @__PURE__ */ jsx(Terminal, {
|
|
227
|
+
ref: terminalRef,
|
|
228
|
+
cols: dimensions.cols,
|
|
229
|
+
rows: dimensions.rows,
|
|
230
|
+
autoResize: false,
|
|
231
|
+
cursorBlink: true,
|
|
232
|
+
onData: handleData,
|
|
233
|
+
onResize: handleResize,
|
|
234
|
+
onReady: (wt) => {
|
|
235
|
+
wt.focus();
|
|
236
|
+
},
|
|
237
|
+
className: "w-full h-full"
|
|
238
|
+
}), /* @__PURE__ */ jsx(TerminalDisconnectedOverlay, {
|
|
239
|
+
onReconnect: reconnect,
|
|
240
|
+
visible: connectionStatus === "disconnected"
|
|
241
|
+
})]
|
|
242
|
+
})
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
TerminalInteractivePanelWterm.displayName = "TerminalInteractivePanelWterm";
|
|
246
|
+
|
|
247
|
+
//#endregion
|
|
248
|
+
export { TerminalInteractivePanelWterm };
|
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* Ghostty-inspired chrome (via TerminalPanelChrome), xterm.js
|
|
6
6
|
* rendering, and action bar controls. Includes settings popover.
|
|
7
7
|
*
|
|
8
|
+
* Uses composable control atoms for the action bar and status bar
|
|
9
|
+
* while managing xterm.js lifecycle internally.
|
|
10
|
+
*
|
|
8
11
|
* @module components/devenv/terminal/panel/interactive-xterm
|
|
9
12
|
*/
|
|
10
13
|
import type { ITerminalInteractivePanelProps, ITerminalInteractivePanelRef } from './TerminalInteractivePanel.types';
|
|
@@ -16,8 +19,7 @@ import '@xterm/xterm/css/xterm.css';
|
|
|
16
19
|
* - TerminalPanelChrome (Ghostty glassmorphism shell)
|
|
17
20
|
* - xterm.js with interactive mode (cursorBlink, stdin enabled)
|
|
18
21
|
* - WebSocket connection via useTerminalWebSocket
|
|
19
|
-
* -
|
|
20
|
-
* - Footer with connection status and terminal dimensions
|
|
22
|
+
* - Composable action bar and status bar atoms
|
|
21
23
|
*
|
|
22
24
|
* @example
|
|
23
25
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalInteractivePanelXterm.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TerminalInteractivePanelXterm.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmBH,OAAO,KAAK,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAWrH,OAAO,4BAA4B,CAAC;AAYpC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,6BAA6B,yIAwPzC,CAAC"}
|