@mks2508/mks-ui 0.3.2 → 0.5.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/react-ui/blocks/Terminal/ResttyAdapter.d.ts +146 -0
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.js +213 -0
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.d.ts +55 -0
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.js +68 -0
- package/dist/react-ui/blocks/Terminal/Terminal.theme.d.ts +43 -0
- package/dist/react-ui/blocks/Terminal/Terminal.theme.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/Terminal.theme.js +59 -0
- package/dist/react-ui/blocks/Terminal/Terminal.theme.restty.d.ts +63 -0
- package/dist/react-ui/blocks/Terminal/Terminal.theme.restty.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/Terminal.theme.restty.js +109 -0
- package/dist/react-ui/blocks/Terminal/Terminal.types.d.ts +351 -0
- package/dist/react-ui/blocks/Terminal/Terminal.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.d.ts +46 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.js +168 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.styles.d.ts +21 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.styles.js +31 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts +56 -0
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/TerminalPanel.d.ts +60 -0
- package/dist/react-ui/blocks/Terminal/TerminalPanel.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/TerminalPanel.js +183 -0
- package/dist/react-ui/blocks/Terminal/TerminalRestty.d.ts +111 -0
- package/dist/react-ui/blocks/Terminal/TerminalRestty.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/TerminalRestty.js +185 -0
- package/dist/react-ui/blocks/Terminal/TerminalXterm.d.ts +58 -0
- package/dist/react-ui/blocks/Terminal/TerminalXterm.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/TerminalXterm.js +143 -0
- package/dist/react-ui/blocks/Terminal/XTermAdapter.d.ts +87 -0
- package/dist/react-ui/blocks/Terminal/XTermAdapter.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/XTermAdapter.js +135 -0
- package/dist/react-ui/blocks/Terminal/chrome.d.ts +14 -0
- package/dist/react-ui/blocks/Terminal/chrome.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/chrome.js +6 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.d.ts +160 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.js +185 -0
- package/dist/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.d.ts +48 -0
- package/dist/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.js +139 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.d.ts +60 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.js +352 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.d.ts +36 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.js +52 -0
- package/dist/react-ui/blocks/Terminal/components/index.d.ts +10 -0
- package/dist/react-ui/blocks/Terminal/components/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/index.js +4 -0
- package/dist/react-ui/blocks/Terminal/display.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/display.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/display.js +9 -0
- package/dist/react-ui/blocks/Terminal/hooks/index.d.ts +11 -0
- package/dist/react-ui/blocks/Terminal/hooks/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/index.js +2 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalSettings.d.ts +69 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalSettings.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalSettings.js +162 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.d.ts +104 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.js +180 -0
- package/dist/react-ui/blocks/Terminal/index.d.ts +43 -0
- package/dist/react-ui/blocks/Terminal/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/index.js +41 -0
- package/dist/react-ui/blocks/Terminal/panel/LogLinesViewer.d.ts +58 -0
- package/dist/react-ui/blocks/Terminal/panel/LogLinesViewer.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/LogLinesViewer.js +222 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel.d.ts +74 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel.js +168 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.d.ts +42 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.js +175 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs.d.ts +43 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.d.ts +38 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.js +62 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.d.ts +67 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.js +326 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.d.ts +36 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.js +371 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.d.ts +67 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.js +417 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.d.ts +197 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts +55 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.js +214 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.d.ts +35 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.js +57 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.d.ts +62 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.d.ts +30 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.js +126 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.d.ts +31 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.js +149 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.d.ts +35 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl.d.ts +58 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs.d.ts +63 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs.js +245 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.d.ts +24 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.js +225 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector.d.ts +35 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector.js +187 -0
- package/dist/react-ui/blocks/Terminal/panel/index.d.ts +30 -0
- package/dist/react-ui/blocks/Terminal/panel/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module-CNVWCefU.css +60 -0
- package/dist/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.js +5 -0
- package/dist/react-ui/blocks/Terminal/panel/terminal-session-tabs.module-cmyJ11jP.css +60 -0
- package/dist/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.js +5 -0
- package/dist/react-ui/blocks/Terminal/parsing/BadgeFormatter.d.ts +73 -0
- package/dist/react-ui/blocks/Terminal/parsing/BadgeFormatter.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/BadgeFormatter.js +136 -0
- package/dist/react-ui/blocks/Terminal/parsing/HttpLogParser.d.ts +117 -0
- package/dist/react-ui/blocks/Terminal/parsing/HttpLogParser.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/HttpLogParser.js +174 -0
- package/dist/react-ui/blocks/Terminal/parsing/LogParser.types.d.ts +221 -0
- package/dist/react-ui/blocks/Terminal/parsing/LogParser.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/LogParserService.d.ts +184 -0
- package/dist/react-ui/blocks/Terminal/parsing/LogParserService.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/LogParserService.js +478 -0
- package/dist/react-ui/blocks/Terminal/parsing/MultilineAggregator.d.ts +173 -0
- package/dist/react-ui/blocks/Terminal/parsing/MultilineAggregator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/MultilineAggregator.js +313 -0
- package/dist/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.d.ts +181 -0
- package/dist/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.js +221 -0
- package/dist/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.d.ts +69 -0
- package/dist/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.js +142 -0
- package/dist/react-ui/blocks/Terminal/parsing/TableParser.d.ts +125 -0
- package/dist/react-ui/blocks/Terminal/parsing/TableParser.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/TableParser.js +245 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.d.ts +165 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.js +225 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.d.ts +164 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.js +285 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.d.ts +188 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.js +178 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/index.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/parsing/ansi/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/index.d.ts +24 -0
- package/dist/react-ui/blocks/Terminal/parsing/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.d.ts +56 -0
- package/dist/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.d.ts +140 -0
- package/dist/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.js +325 -0
- package/dist/react-ui/blocks/Terminal/parsing/levels/index.d.ts +10 -0
- package/dist/react-ui/blocks/Terminal/parsing/levels/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/index.d.ts +11 -0
- package/dist/react-ui/blocks/index.d.ts.map +1 -0
- package/dist/react-ui/icons/lucide-animated/activity.js +1 -1
- package/dist/react-ui/icons/lucide-animated/bell-electric.js +1 -1
- package/dist/react-ui/icons/lucide-animated/bell.js +1 -1
- package/dist/react-ui/icons/lucide-animated/bot.js +1 -1
- package/dist/react-ui/icons/lucide-animated/box.js +1 -1
- package/dist/react-ui/icons/lucide-animated/circle-check.js +1 -1
- package/dist/react-ui/icons/lucide-animated/delete.js +1 -1
- package/dist/react-ui/icons/lucide-animated/download.js +1 -1
- package/dist/react-ui/icons/lucide-animated/home.js +1 -1
- package/dist/react-ui/icons/lucide-animated/layout-panel-top.js +1 -1
- package/dist/react-ui/icons/lucide-animated/plus.js +1 -1
- package/dist/react-ui/icons/lucide-animated/search.js +1 -1
- package/dist/react-ui/icons/lucide-animated/settings.js +1 -1
- package/dist/react-ui/icons/lucide-animated/trending-down.js +1 -1
- package/dist/react-ui/icons/lucide-animated/trending-up.js +1 -1
- package/dist/react-ui/icons/lucide-animated/x.js +1 -1
- package/dist/react-ui/index.js +3 -1
- package/dist/react-ui/lib/icon-wrapper.d.ts +37 -0
- package/dist/react-ui/lib/icon-wrapper.d.ts.map +1 -0
- package/dist/react-ui/lib/icon-wrapper.js +55 -0
- package/dist/react-ui/lib/index.d.ts +1 -0
- package/dist/react-ui/lib/index.d.ts.map +1 -1
- package/dist/react-ui/lib/index.js +1 -0
- package/dist/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.js +2 -0
- package/dist/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.js +2 -0
- package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.js +2 -0
- package/dist/react-ui/primitives/waapi/Morph/useMorph.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Morph/useMorph.js +2 -0
- package/dist/react-ui/primitives/waapi/Reorder/useReorder.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Reorder/useReorder.js +2 -0
- package/dist/react-ui/primitives/waapi/Reorder/useReorderPresence.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Reorder/useReorderPresence.js +2 -0
- package/dist/react-ui/primitives/waapi/core/useAnimationOrchestrator.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/core/useAnimationOrchestrator.js +2 -0
- package/dist/react-ui/primitives/waapi/core/useElementRegistry.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/core/useElementRegistry.js +2 -0
- package/dist/react-ui/primitives/waapi/core/useFLIPAnimation.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/core/useFLIPAnimation.js +2 -0
- package/dist/react-ui/primitives/waapi/core/usePositionCapture.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/core/usePositionCapture.js +2 -0
- package/dist/react-ui/ui/Button/Button.styles.d.ts +1 -1
- package/dist/react-ui/ui/CornerBracket/CornerBracket.styles.d.ts +1 -1
- package/dist/react-ui/ui/CornerBracket/CornerBracket.styles.js +1 -1
- package/dist/react-ui/ui/InputGroup/index.d.ts.map +1 -1
- package/dist/react-ui/ui/InputGroup/index.js +2 -0
- package/dist/react-ui/ui/Tabs/Tabs.styles.d.ts +43 -25
- package/dist/react-ui/ui/Tabs/Tabs.styles.d.ts.map +1 -1
- package/dist/react-ui/ui/Tabs/Tabs.styles.js +105 -13
- package/dist/react-ui/ui/Tabs/Tabs.types.d.ts +6 -3
- package/dist/react-ui/ui/Tabs/Tabs.types.d.ts.map +1 -1
- package/dist/react-ui/ui/Tabs/index.d.ts +18 -9
- package/dist/react-ui/ui/Tabs/index.d.ts.map +1 -1
- package/dist/react-ui/ui/Tabs/index.js +99 -27
- package/dist/react-ui/ui/index.js +1 -0
- package/package.json +84 -29
- package/src/css.d.ts +6 -0
- package/src/react-ui/blocks/Terminal/ResttyAdapter.ts +278 -0
- package/src/react-ui/blocks/Terminal/Terminal.adapter.ts +97 -0
- package/src/react-ui/blocks/Terminal/Terminal.theme.restty.ts +155 -0
- package/src/react-ui/blocks/Terminal/Terminal.theme.ts +80 -0
- package/src/react-ui/blocks/Terminal/Terminal.types.ts +438 -0
- package/src/react-ui/blocks/Terminal/TerminalDisplay.styles.ts +38 -0
- package/src/react-ui/blocks/Terminal/TerminalDisplay.tsx +243 -0
- package/src/react-ui/blocks/Terminal/TerminalDisplay.types.ts +73 -0
- package/src/react-ui/blocks/Terminal/TerminalPanel.tsx +269 -0
- package/src/react-ui/blocks/Terminal/TerminalRestty.tsx +326 -0
- package/src/react-ui/blocks/Terminal/TerminalXterm.tsx +230 -0
- package/src/react-ui/blocks/Terminal/XTermAdapter.ts +163 -0
- package/src/react-ui/blocks/Terminal/chrome.ts +25 -0
- package/src/react-ui/blocks/Terminal/components/LogLineBadges.tsx +316 -0
- package/src/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.tsx +218 -0
- package/src/react-ui/blocks/Terminal/components/SyntaxHighlight.tsx +386 -0
- package/src/react-ui/blocks/Terminal/components/TerminalLogBadge.tsx +67 -0
- package/src/react-ui/blocks/Terminal/components/index.ts +10 -0
- package/src/react-ui/blocks/Terminal/display.ts +46 -0
- package/src/react-ui/blocks/Terminal/hooks/index.ts +22 -0
- package/src/react-ui/blocks/Terminal/hooks/useTerminalSettings.ts +229 -0
- package/src/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.ts +292 -0
- package/src/react-ui/blocks/Terminal/index.ts +111 -0
- package/src/react-ui/blocks/Terminal/panel/LogLinesViewer.tsx +330 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalDebugPanel.tsx +242 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.tsx +202 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterTabs.tsx +140 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.tsx +68 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.ts +85 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.tsx +383 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx +439 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.tsx +550 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.ts +259 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.ts +75 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx +266 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts +82 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelFooter.tsx +112 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelHeader.tsx +178 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.tsx +203 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionControl.tsx +252 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionTabs.tsx +334 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.tsx +261 -0
- package/src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx +248 -0
- package/src/react-ui/blocks/Terminal/panel/index.ts +72 -0
- package/src/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.css +59 -0
- package/src/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.css +59 -0
- package/src/react-ui/blocks/Terminal/parsing/BadgeFormatter.ts +180 -0
- package/src/react-ui/blocks/Terminal/parsing/HttpLogParser.ts +248 -0
- package/src/react-ui/blocks/Terminal/parsing/LogParser.types.ts +283 -0
- package/src/react-ui/blocks/Terminal/parsing/LogParserService.ts +686 -0
- package/src/react-ui/blocks/Terminal/parsing/MultilineAggregator.ts +466 -0
- package/src/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.ts +343 -0
- package/src/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.ts +167 -0
- package/src/react-ui/blocks/Terminal/parsing/TableParser.ts +348 -0
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.ts +251 -0
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.ts +390 -0
- package/src/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.ts +320 -0
- package/src/react-ui/blocks/Terminal/parsing/ansi/index.ts +20 -0
- package/src/react-ui/blocks/Terminal/parsing/index.ts +69 -0
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.ts +68 -0
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.ts +436 -0
- package/src/react-ui/blocks/Terminal/parsing/levels/index.ts +14 -0
- package/src/react-ui/blocks/index.ts +11 -0
- package/src/react-ui/icons/lucide-animated/activity.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/bell-electric.tsx +1 -1
- package/src/react-ui/icons/lucide-animated/bell.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/bot.tsx +1 -1
- package/src/react-ui/icons/lucide-animated/box.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/circle-check.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/delete.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/download.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/home.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/layout-panel-top.tsx +1 -1
- package/src/react-ui/icons/lucide-animated/plus.tsx +1 -1
- package/src/react-ui/icons/lucide-animated/search.tsx +1 -1
- package/src/react-ui/icons/lucide-animated/settings.tsx +1 -1
- package/src/react-ui/icons/lucide-animated/trending-down.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/trending-up.tsx +2 -2
- package/src/react-ui/icons/lucide-animated/x.tsx +2 -2
- package/src/react-ui/lib/icon-wrapper.tsx +70 -0
- package/src/react-ui/lib/index.ts +1 -0
- package/src/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.ts +1 -0
- package/src/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.ts +1 -0
- package/src/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.ts +1 -0
- package/src/react-ui/primitives/waapi/Morph/useMorph.ts +1 -0
- package/src/react-ui/primitives/waapi/Reorder/useReorder.ts +1 -0
- package/src/react-ui/primitives/waapi/Reorder/useReorderPresence.ts +1 -0
- package/src/react-ui/primitives/waapi/core/useAnimationOrchestrator.ts +1 -0
- package/src/react-ui/primitives/waapi/core/useElementRegistry.ts +1 -0
- package/src/react-ui/primitives/waapi/core/useFLIPAnimation.ts +1 -0
- package/src/react-ui/primitives/waapi/core/usePositionCapture.ts +1 -0
- package/src/react-ui/ui/Accordion/index.tsx +3 -3
- package/src/react-ui/ui/CornerBracket/CornerBracket.styles.ts +1 -1
- package/src/react-ui/ui/InputGroup/index.tsx +2 -0
- package/src/react-ui/ui/Tabs/Tabs.css +39 -0
- package/src/react-ui/ui/Tabs/Tabs.styles.ts +119 -31
- package/src/react-ui/ui/Tabs/Tabs.types.ts +8 -3
- package/src/react-ui/ui/Tabs/index.tsx +135 -27
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { cn } from "../../../lib/utils.js";
|
|
4
|
+
import { Popover, PopoverPopup, PopoverPortal, PopoverPositioner, PopoverTrigger } from "../../../ui/Popover/index.js";
|
|
5
|
+
import { Separator } from "../../../ui/Separator/index.js";
|
|
6
|
+
import { SettingsIcon } from "../../../icons/lucide-animated/settings.js";
|
|
7
|
+
import "../../../icons/lucide-animated/index.js";
|
|
8
|
+
import { useTerminalSettings } from "../hooks/useTerminalSettings.js";
|
|
9
|
+
import { TerminalThemeSelector } from "./TerminalThemeSelector.js";
|
|
10
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
|
|
12
|
+
//#region src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.tsx
|
|
13
|
+
/**
|
|
14
|
+
* TerminalSettingsPopover Component.
|
|
15
|
+
*
|
|
16
|
+
* Gear icon popover for global terminal settings:
|
|
17
|
+
* renderer (xterm/restty), theme (458 built-in), PTY backend,
|
|
18
|
+
* and font size. Reads and writes via useTerminalSettings hook.
|
|
19
|
+
*
|
|
20
|
+
* @module components/devenv/terminal/panel/TerminalSettingsPopover
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Action button base styles for the trigger icon.
|
|
24
|
+
*/
|
|
25
|
+
const triggerBtnStyles = "h-8 w-8 rounded-md transition-all hover:bg-muted/20 active:bg-muted/30 flex items-center justify-center text-muted-foreground hover:text-foreground flex-shrink-0";
|
|
26
|
+
/**
|
|
27
|
+
* Segmented control button styles.
|
|
28
|
+
*/
|
|
29
|
+
const segmentedBase = "flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium transition-all";
|
|
30
|
+
const segmentedInactive = "text-muted-foreground hover:text-foreground hover:bg-white/5 hover:shadow-[inset_0_1px_0_0_rgba(255,255,255,0.1)]";
|
|
31
|
+
const segmentedActive = "bg-primary/20 text-primary border border-primary/30 shadow-[0_0_8px_hsla(330,85%,43%,0.15)] hover:shadow-[0_0_12px_hsla(330,85%,43%,0.25)]";
|
|
32
|
+
/**
|
|
33
|
+
* Min/max font size bounds.
|
|
34
|
+
*/
|
|
35
|
+
const MIN_FONT_SIZE = 10;
|
|
36
|
+
const MAX_FONT_SIZE = 24;
|
|
37
|
+
/**
|
|
38
|
+
* Small control button for font size +/-.
|
|
39
|
+
*/
|
|
40
|
+
const fontBtnStyles = "h-7 w-7 rounded-md transition-all hover:bg-muted/20 active:bg-muted/30 flex items-center justify-center text-muted-foreground hover:text-foreground disabled:opacity-30 disabled:pointer-events-none";
|
|
41
|
+
/**
|
|
42
|
+
* TerminalSettingsPopover Component.
|
|
43
|
+
*
|
|
44
|
+
* Renders a settings gear icon that opens a popover with
|
|
45
|
+
* terminal configuration options. Reads settings from
|
|
46
|
+
* `useTerminalSettings` — no prop drilling needed.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* // In action bar:
|
|
51
|
+
* <TerminalSettingsPopover />
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function TerminalSettingsPopover() {
|
|
55
|
+
const { settings, setRenderer, setPtyBackend, setResttyThemeName, setFontSize, setCrtEffect, setDebugPanel, resetToDefaults } = useTerminalSettings();
|
|
56
|
+
return /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx("button", {
|
|
57
|
+
type: "button",
|
|
58
|
+
className: triggerBtnStyles,
|
|
59
|
+
title: "Terminal settings",
|
|
60
|
+
children: /* @__PURE__ */ jsx(SettingsIcon, { size: 16 })
|
|
61
|
+
}) }), /* @__PURE__ */ jsx(PopoverPortal, { children: /* @__PURE__ */ jsx(PopoverPositioner, {
|
|
62
|
+
align: "end",
|
|
63
|
+
sideOffset: 6,
|
|
64
|
+
children: /* @__PURE__ */ jsxs(PopoverPopup, {
|
|
65
|
+
className: "w-72 p-0 glass-subtle",
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ jsxs("div", {
|
|
68
|
+
className: "flex items-center gap-2 px-4 py-3",
|
|
69
|
+
children: [/* @__PURE__ */ jsx(SettingsIcon, {
|
|
70
|
+
size: 14,
|
|
71
|
+
className: "text-muted-foreground"
|
|
72
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
73
|
+
className: "text-sm font-medium text-foreground",
|
|
74
|
+
children: "Terminal Settings"
|
|
75
|
+
})]
|
|
76
|
+
}),
|
|
77
|
+
/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }),
|
|
78
|
+
/* @__PURE__ */ jsxs("div", {
|
|
79
|
+
className: "px-4 py-3 space-y-2",
|
|
80
|
+
children: [/* @__PURE__ */ jsx("label", {
|
|
81
|
+
className: "text-[10px] font-mono text-muted-foreground uppercase tracking-wider",
|
|
82
|
+
children: "Renderer"
|
|
83
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
84
|
+
className: "flex items-center gap-1 bg-muted/10 rounded-lg p-0.5",
|
|
85
|
+
children: [/* @__PURE__ */ jsx("button", {
|
|
86
|
+
type: "button",
|
|
87
|
+
onClick: () => setRenderer("xterm"),
|
|
88
|
+
className: cn(segmentedBase, settings.renderer === "xterm" ? segmentedActive : segmentedInactive, "flex-1 justify-center"),
|
|
89
|
+
children: "xterm"
|
|
90
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
91
|
+
type: "button",
|
|
92
|
+
onClick: () => setRenderer("restty"),
|
|
93
|
+
className: cn(segmentedBase, settings.renderer === "restty" ? segmentedActive : segmentedInactive, "flex-1 justify-center"),
|
|
94
|
+
children: "restty"
|
|
95
|
+
})]
|
|
96
|
+
})]
|
|
97
|
+
}),
|
|
98
|
+
settings.renderer === "restty" && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }), /* @__PURE__ */ jsxs("div", {
|
|
99
|
+
className: "px-4 py-3 space-y-2",
|
|
100
|
+
children: [/* @__PURE__ */ jsx("label", {
|
|
101
|
+
className: "text-[10px] font-mono text-muted-foreground uppercase tracking-wider",
|
|
102
|
+
children: "Theme"
|
|
103
|
+
}), /* @__PURE__ */ jsx(TerminalThemeSelector, {
|
|
104
|
+
currentTheme: settings.resttyThemeName,
|
|
105
|
+
onThemeChange: setResttyThemeName
|
|
106
|
+
})]
|
|
107
|
+
})] }),
|
|
108
|
+
/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }),
|
|
109
|
+
/* @__PURE__ */ jsxs("div", {
|
|
110
|
+
className: "px-4 py-3 space-y-2",
|
|
111
|
+
children: [/* @__PURE__ */ jsx("label", {
|
|
112
|
+
className: "text-[10px] font-mono text-muted-foreground uppercase tracking-wider",
|
|
113
|
+
children: "PTY Backend"
|
|
114
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
115
|
+
className: "flex items-center gap-1 bg-muted/10 rounded-lg p-0.5",
|
|
116
|
+
children: [/* @__PURE__ */ jsx("button", {
|
|
117
|
+
type: "button",
|
|
118
|
+
onClick: () => setPtyBackend("nodepty"),
|
|
119
|
+
className: cn(segmentedBase, settings.ptyBackend === "nodepty" ? segmentedActive : segmentedInactive, "flex-1 justify-center"),
|
|
120
|
+
children: "nodepty"
|
|
121
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
122
|
+
type: "button",
|
|
123
|
+
onClick: () => setPtyBackend("webcontainer"),
|
|
124
|
+
className: cn(segmentedBase, settings.ptyBackend === "webcontainer" ? segmentedActive : segmentedInactive, "flex-1 justify-center"),
|
|
125
|
+
children: "webcontainer"
|
|
126
|
+
})]
|
|
127
|
+
})]
|
|
128
|
+
}),
|
|
129
|
+
/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }),
|
|
130
|
+
/* @__PURE__ */ jsxs("div", {
|
|
131
|
+
className: "px-4 py-3 space-y-2",
|
|
132
|
+
children: [/* @__PURE__ */ jsx("label", {
|
|
133
|
+
className: "text-[10px] font-mono text-muted-foreground uppercase tracking-wider",
|
|
134
|
+
children: "Font Size"
|
|
135
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
136
|
+
className: "flex items-center gap-2",
|
|
137
|
+
children: [
|
|
138
|
+
/* @__PURE__ */ jsx("button", {
|
|
139
|
+
type: "button",
|
|
140
|
+
onClick: () => setFontSize(settings.fontSize - 1),
|
|
141
|
+
className: fontBtnStyles,
|
|
142
|
+
disabled: settings.fontSize <= MIN_FONT_SIZE,
|
|
143
|
+
title: "Decrease font size",
|
|
144
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
145
|
+
className: "text-sm font-bold",
|
|
146
|
+
children: "−"
|
|
147
|
+
})
|
|
148
|
+
}),
|
|
149
|
+
/* @__PURE__ */ jsx("span", {
|
|
150
|
+
className: "text-sm font-mono text-foreground w-8 text-center",
|
|
151
|
+
children: settings.fontSize
|
|
152
|
+
}),
|
|
153
|
+
/* @__PURE__ */ jsx("button", {
|
|
154
|
+
type: "button",
|
|
155
|
+
onClick: () => setFontSize(settings.fontSize + 1),
|
|
156
|
+
className: fontBtnStyles,
|
|
157
|
+
disabled: settings.fontSize >= MAX_FONT_SIZE,
|
|
158
|
+
title: "Increase font size",
|
|
159
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
160
|
+
className: "text-sm font-bold",
|
|
161
|
+
children: "+"
|
|
162
|
+
})
|
|
163
|
+
}),
|
|
164
|
+
/* @__PURE__ */ jsx("span", {
|
|
165
|
+
className: "text-[10px] font-mono text-muted-foreground/50 ml-auto",
|
|
166
|
+
children: "px"
|
|
167
|
+
})
|
|
168
|
+
]
|
|
169
|
+
})]
|
|
170
|
+
}),
|
|
171
|
+
/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }),
|
|
172
|
+
/* @__PURE__ */ jsxs("div", {
|
|
173
|
+
className: "px-4 py-3 space-y-2",
|
|
174
|
+
children: [/* @__PURE__ */ jsx("label", {
|
|
175
|
+
className: "text-[10px] font-mono text-muted-foreground uppercase tracking-wider",
|
|
176
|
+
children: "CRT Effect"
|
|
177
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
178
|
+
className: "flex items-center justify-between",
|
|
179
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
180
|
+
className: "text-xs text-muted-foreground",
|
|
181
|
+
children: "Scanlines, bloom & vignette"
|
|
182
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
183
|
+
type: "button",
|
|
184
|
+
onClick: () => setCrtEffect(!settings.crtEffect),
|
|
185
|
+
className: cn("relative w-9 h-5 rounded-full transition-colors", settings.crtEffect ? "bg-primary/60 shadow-[0_0_8px_hsla(330,85%,43%,0.3)]" : "bg-muted/30"),
|
|
186
|
+
children: /* @__PURE__ */ jsx("span", { className: cn("absolute top-0.5 h-4 w-4 rounded-full bg-foreground transition-all", settings.crtEffect ? "left-[18px]" : "left-0.5") })
|
|
187
|
+
})]
|
|
188
|
+
})]
|
|
189
|
+
}),
|
|
190
|
+
/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }),
|
|
191
|
+
/* @__PURE__ */ jsxs("div", {
|
|
192
|
+
className: "px-4 py-3 space-y-2",
|
|
193
|
+
children: [/* @__PURE__ */ jsx("label", {
|
|
194
|
+
className: "text-[10px] font-mono text-muted-foreground uppercase tracking-wider",
|
|
195
|
+
children: "Debug Panel"
|
|
196
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
197
|
+
className: "flex items-center justify-between",
|
|
198
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
199
|
+
className: "text-xs text-muted-foreground",
|
|
200
|
+
children: "GPU, FPS, grid & connection info"
|
|
201
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
202
|
+
type: "button",
|
|
203
|
+
onClick: () => setDebugPanel(!settings.debugPanel),
|
|
204
|
+
className: cn("relative w-9 h-5 rounded-full transition-colors", settings.debugPanel ? "bg-primary/60 shadow-[0_0_8px_hsla(330,85%,43%,0.3)]" : "bg-muted/30"),
|
|
205
|
+
children: /* @__PURE__ */ jsx("span", { className: cn("absolute top-0.5 h-4 w-4 rounded-full bg-foreground transition-all", settings.debugPanel ? "left-[18px]" : "left-0.5") })
|
|
206
|
+
})]
|
|
207
|
+
})]
|
|
208
|
+
}),
|
|
209
|
+
/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }),
|
|
210
|
+
/* @__PURE__ */ jsx("div", {
|
|
211
|
+
className: "px-4 py-3",
|
|
212
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
213
|
+
type: "button",
|
|
214
|
+
onClick: resetToDefaults,
|
|
215
|
+
className: "w-full h-8 rounded-md text-xs font-mono text-muted-foreground hover:text-foreground hover:bg-muted/20 transition-colors",
|
|
216
|
+
children: "Reset to Defaults"
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
]
|
|
220
|
+
})
|
|
221
|
+
}) })] });
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
//#endregion
|
|
225
|
+
export { TerminalSettingsPopover };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TerminalThemeSelector Component.
|
|
3
|
+
*
|
|
4
|
+
* Searchable dropdown for restty's 458 built-in terminal themes.
|
|
5
|
+
* Uses Popover for the dropdown UI with glassmorphism styling
|
|
6
|
+
* matching the existing TerminalFilterDropdown pattern.
|
|
7
|
+
*
|
|
8
|
+
* @module components/devenv/terminal/panel/TerminalThemeSelector
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Props for the TerminalThemeSelector component.
|
|
12
|
+
*/
|
|
13
|
+
export interface ITerminalThemeSelectorProps {
|
|
14
|
+
/** Currently active theme name */
|
|
15
|
+
currentTheme: string;
|
|
16
|
+
/** Callback when user selects a new theme */
|
|
17
|
+
onThemeChange: (themeName: string) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* TerminalThemeSelector Component.
|
|
21
|
+
*
|
|
22
|
+
* Searchable dropdown for restty's built-in theme catalog.
|
|
23
|
+
* Favorites are pinned to the top, followed by alphabetically
|
|
24
|
+
* sorted themes. Search filters by case-insensitive substring.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* <TerminalThemeSelector
|
|
29
|
+
* currentTheme="Synthwave Alpha"
|
|
30
|
+
* onThemeChange={(name) => setResttyThemeName(name)}
|
|
31
|
+
* />
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function TerminalThemeSelector({ currentTheme, onThemeChange }: ITerminalThemeSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
//# sourceMappingURL=TerminalThemeSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalThemeSelector.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IAErB,6CAA6C;IAC7C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAsBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,2BAA2B,2CAyJjG"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { cn } from "../../../lib/utils.js";
|
|
4
|
+
import { Popover, PopoverPopup, PopoverPortal, PopoverPositioner, PopoverTrigger } from "../../../ui/Popover/index.js";
|
|
5
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx
|
|
9
|
+
/**
|
|
10
|
+
* TerminalThemeSelector Component.
|
|
11
|
+
*
|
|
12
|
+
* Searchable dropdown for restty's 458 built-in terminal themes.
|
|
13
|
+
* Uses Popover for the dropdown UI with glassmorphism styling
|
|
14
|
+
* matching the existing TerminalFilterDropdown pattern.
|
|
15
|
+
*
|
|
16
|
+
* @module components/devenv/terminal/panel/TerminalThemeSelector
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Favorite themes displayed at the top of the list.
|
|
20
|
+
*/
|
|
21
|
+
const FAVORITE_THEMES = [
|
|
22
|
+
"Synthwave Alpha",
|
|
23
|
+
"Synthwave",
|
|
24
|
+
"Dracula",
|
|
25
|
+
"Nord",
|
|
26
|
+
"One Dark",
|
|
27
|
+
"Tokyo Night",
|
|
28
|
+
"Catppuccin Mocha",
|
|
29
|
+
"Gruvbox Dark"
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Action button base styles (matches TerminalInteractivePanel pattern).
|
|
33
|
+
*/
|
|
34
|
+
const triggerStyles = "h-8 px-2.5 rounded-md transition-all hover:bg-muted/20 active:bg-muted/30 flex items-center justify-center gap-1.5 text-xs font-mono text-muted-foreground hover:text-foreground flex-shrink-0 border border-border/30";
|
|
35
|
+
/**
|
|
36
|
+
* TerminalThemeSelector Component.
|
|
37
|
+
*
|
|
38
|
+
* Searchable dropdown for restty's built-in theme catalog.
|
|
39
|
+
* Favorites are pinned to the top, followed by alphabetically
|
|
40
|
+
* sorted themes. Search filters by case-insensitive substring.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* <TerminalThemeSelector
|
|
45
|
+
* currentTheme="Synthwave Alpha"
|
|
46
|
+
* onThemeChange={(name) => setResttyThemeName(name)}
|
|
47
|
+
* />
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
function TerminalThemeSelector({ currentTheme, onThemeChange }) {
|
|
51
|
+
const [open, setOpen] = useState(false);
|
|
52
|
+
const [search, setSearch] = useState("");
|
|
53
|
+
const [themeNames, setThemeNames] = useState([]);
|
|
54
|
+
const searchInputRef = useRef(null);
|
|
55
|
+
/**
|
|
56
|
+
* Load the theme catalog from restty on first open.
|
|
57
|
+
*/
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (!open || themeNames.length > 0) return;
|
|
60
|
+
import("restty").then(({ listBuiltinThemeNames }) => {
|
|
61
|
+
const names = listBuiltinThemeNames();
|
|
62
|
+
if (Array.isArray(names)) setThemeNames(names.sort((a, b) => a.localeCompare(b)));
|
|
63
|
+
}).catch(() => {});
|
|
64
|
+
}, [open, themeNames.length]);
|
|
65
|
+
/**
|
|
66
|
+
* Focus search input on open.
|
|
67
|
+
*/
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (open) requestAnimationFrame(() => searchInputRef.current?.focus());
|
|
70
|
+
else setSearch("");
|
|
71
|
+
}, [open]);
|
|
72
|
+
/**
|
|
73
|
+
* Filter and group themes based on search query.
|
|
74
|
+
*/
|
|
75
|
+
const { favorites, others } = useMemo(() => {
|
|
76
|
+
const query = search.toLowerCase().trim();
|
|
77
|
+
const allNames = themeNames.length > 0 ? themeNames : FAVORITE_THEMES;
|
|
78
|
+
const favSet = new Set(FAVORITE_THEMES);
|
|
79
|
+
return {
|
|
80
|
+
favorites: FAVORITE_THEMES.filter((name) => !query || name.toLowerCase().includes(query)),
|
|
81
|
+
others: allNames.filter((name) => !favSet.has(name) && (!query || name.toLowerCase().includes(query)))
|
|
82
|
+
};
|
|
83
|
+
}, [search, themeNames]);
|
|
84
|
+
/**
|
|
85
|
+
* Handle theme selection.
|
|
86
|
+
*/
|
|
87
|
+
const handleSelect = useCallback((themeName) => {
|
|
88
|
+
onThemeChange(themeName);
|
|
89
|
+
setOpen(false);
|
|
90
|
+
}, [onThemeChange]);
|
|
91
|
+
return /* @__PURE__ */ jsxs(Popover, {
|
|
92
|
+
open,
|
|
93
|
+
onOpenChange: setOpen,
|
|
94
|
+
children: [/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsxs("button", {
|
|
95
|
+
type: "button",
|
|
96
|
+
className: triggerStyles,
|
|
97
|
+
title: "Select terminal theme",
|
|
98
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
99
|
+
className: "truncate max-w-[140px]",
|
|
100
|
+
children: currentTheme
|
|
101
|
+
}), /* @__PURE__ */ jsx("svg", {
|
|
102
|
+
className: cn("w-3 h-3 transition-transform flex-shrink-0", open && "rotate-180"),
|
|
103
|
+
viewBox: "0 0 12 12",
|
|
104
|
+
fill: "none",
|
|
105
|
+
stroke: "currentColor",
|
|
106
|
+
strokeWidth: "2",
|
|
107
|
+
children: /* @__PURE__ */ jsx("path", { d: "M3 5l3 3 3-3" })
|
|
108
|
+
})]
|
|
109
|
+
}) }), /* @__PURE__ */ jsx(PopoverPortal, { children: /* @__PURE__ */ jsx(PopoverPositioner, {
|
|
110
|
+
align: "start",
|
|
111
|
+
sideOffset: 6,
|
|
112
|
+
children: /* @__PURE__ */ jsxs(PopoverPopup, {
|
|
113
|
+
className: "w-64 p-0 glass-subtle rounded-lg",
|
|
114
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
115
|
+
className: "p-2 border-b border-border/30",
|
|
116
|
+
children: /* @__PURE__ */ jsx("input", {
|
|
117
|
+
ref: searchInputRef,
|
|
118
|
+
type: "text",
|
|
119
|
+
value: search,
|
|
120
|
+
onChange: (e) => setSearch(e.target.value),
|
|
121
|
+
placeholder: "Search themes...",
|
|
122
|
+
className: "w-full h-8 px-2.5 rounded-md bg-muted/20 border border-border/30 text-xs font-mono text-foreground placeholder:text-muted-foreground/50 outline-none focus:border-primary/40 focus:ring-1 focus:ring-primary/20 transition-colors"
|
|
123
|
+
})
|
|
124
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
125
|
+
className: "max-h-[300px] overflow-y-auto py-1",
|
|
126
|
+
children: [
|
|
127
|
+
favorites.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
128
|
+
className: "px-3 py-1.5",
|
|
129
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
130
|
+
className: "text-[10px] font-mono text-muted-foreground/60 uppercase tracking-wider",
|
|
131
|
+
children: "Favorites"
|
|
132
|
+
})
|
|
133
|
+
}), favorites.map((name) => /* @__PURE__ */ jsx(ThemeOption, {
|
|
134
|
+
name,
|
|
135
|
+
isActive: name === currentTheme,
|
|
136
|
+
onSelect: handleSelect
|
|
137
|
+
}, `fav-${name}`))] }),
|
|
138
|
+
others.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
139
|
+
favorites.length > 0 && /* @__PURE__ */ jsx("div", { className: "mx-2 my-1 h-px bg-border/20" }),
|
|
140
|
+
/* @__PURE__ */ jsx("div", {
|
|
141
|
+
className: "px-3 py-1.5",
|
|
142
|
+
children: /* @__PURE__ */ jsxs("span", {
|
|
143
|
+
className: "text-[10px] font-mono text-muted-foreground/60 uppercase tracking-wider",
|
|
144
|
+
children: [
|
|
145
|
+
"All Themes (",
|
|
146
|
+
others.length,
|
|
147
|
+
")"
|
|
148
|
+
]
|
|
149
|
+
})
|
|
150
|
+
}),
|
|
151
|
+
others.map((name) => /* @__PURE__ */ jsx(ThemeOption, {
|
|
152
|
+
name,
|
|
153
|
+
isActive: name === currentTheme,
|
|
154
|
+
onSelect: handleSelect
|
|
155
|
+
}, name))
|
|
156
|
+
] }),
|
|
157
|
+
favorites.length === 0 && others.length === 0 && /* @__PURE__ */ jsx("div", {
|
|
158
|
+
className: "px-3 py-4 text-center",
|
|
159
|
+
children: /* @__PURE__ */ jsxs("span", {
|
|
160
|
+
className: "text-xs font-mono text-muted-foreground/50",
|
|
161
|
+
children: [
|
|
162
|
+
"No themes match \"",
|
|
163
|
+
search,
|
|
164
|
+
"\""
|
|
165
|
+
]
|
|
166
|
+
})
|
|
167
|
+
})
|
|
168
|
+
]
|
|
169
|
+
})]
|
|
170
|
+
})
|
|
171
|
+
}) })]
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Individual theme option in the dropdown list.
|
|
176
|
+
*/
|
|
177
|
+
function ThemeOption({ name, isActive, onSelect }) {
|
|
178
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
179
|
+
type: "button",
|
|
180
|
+
onClick: () => onSelect(name),
|
|
181
|
+
className: cn("w-full text-left px-3 py-1.5 text-xs font-mono transition-colors", "hover:bg-muted/20", isActive ? "text-primary bg-primary/10" : "text-foreground/80"),
|
|
182
|
+
children: [isActive && /* @__PURE__ */ jsx("span", { className: "inline-block w-1.5 h-1.5 rounded-full bg-primary mr-2 align-middle" }), name]
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
//#endregion
|
|
187
|
+
export { TerminalThemeSelector };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Panel Module.
|
|
3
|
+
*
|
|
4
|
+
* Complete terminal panel with session tabs, header, filter tabs,
|
|
5
|
+
* action bar, display, and footer. Ghostty-inspired design with
|
|
6
|
+
* glassmorphism effects and premium visual details.
|
|
7
|
+
*
|
|
8
|
+
* @module components/devenv/terminal/panel
|
|
9
|
+
*/
|
|
10
|
+
export { TerminalLogsPanel } from './TerminalLogsPanel';
|
|
11
|
+
export { TerminalInteractivePanel } from './TerminalInteractivePanel';
|
|
12
|
+
export { TerminalInteractivePanelRestty } from './TerminalInteractivePanelRestty';
|
|
13
|
+
export { TerminalPanelChrome } from './TerminalPanelChrome';
|
|
14
|
+
export { TerminalSettingsPopover } from './TerminalSettingsPopover';
|
|
15
|
+
export { TerminalThemeSelector } from './TerminalThemeSelector';
|
|
16
|
+
export { TerminalDebugPanel, type ITerminalDebugPanelProps } from './TerminalDebugPanel';
|
|
17
|
+
export { NOISE_TEXTURE_SVG, terminalScrollStyles } from './TerminalPanelChrome';
|
|
18
|
+
export { TerminalPanelHeader } from './TerminalPanelHeader';
|
|
19
|
+
export { TerminalPanelFooter } from './TerminalPanelFooter';
|
|
20
|
+
export { TerminalSessionTabs } from './TerminalSessionTabs';
|
|
21
|
+
export { TerminalFilterTabs } from './TerminalFilterTabs';
|
|
22
|
+
export { TerminalFilterDropdown } from './TerminalFilterDropdown';
|
|
23
|
+
export { TerminalSessionControl } from './TerminalSessionControl';
|
|
24
|
+
export { LogLinesViewer } from './LogLinesViewer';
|
|
25
|
+
export type { ITerminalPanelChromeProps } from './TerminalPanelChrome.types';
|
|
26
|
+
export type { ITerminalInteractivePanelProps, ITerminalInteractivePanelRef, } from './TerminalInteractivePanel.types';
|
|
27
|
+
export type { ITerminalThemeSelectorProps } from './TerminalThemeSelector';
|
|
28
|
+
export type { ITerminalLogsPanelProps, ITerminalLogsPanelRef, ITerminalPanelHeaderProps, ITerminalPanelToolbarProps, ITerminalPanelFooterProps, ITerminalSession, ITerminalSessionTabsProps, ITerminalFilterTabsProps, ITerminalFilterDropdownProps, ITerminalSessionControlProps, TLogLevelFilter, ILevelFilterButton, TTerminalAction, TLogLevel, } from './TerminalLogsPanel.types';
|
|
29
|
+
export type { ILogLinesViewerProps, } from './LogLinesViewer';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGzF,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,YAAY,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAG7E,YAAY,EACV,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,kCAAkC,CAAC;AAG1C,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAG3E,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,gBAAgB,EAChB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,SAAS,GACV,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TerminalFilterDropdown Styles.
|
|
3
|
+
*
|
|
4
|
+
* Uses CSS Anchor Positioning API for dropdown placement.
|
|
5
|
+
* Button acts as anchor, dropdown is positioned relative to it
|
|
6
|
+
* with automatic flip behavior at viewport edges.
|
|
7
|
+
*
|
|
8
|
+
* @module components/devenv/terminal/panel/terminal-filter-dropdown/styles
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* Trigger button - acts as CSS anchor */
|
|
12
|
+
.triggerButton {
|
|
13
|
+
anchor-name: --filter-dropdown-anchor;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Dropdown menu - anchored to trigger button */
|
|
17
|
+
.dropdownMenu {
|
|
18
|
+
position-anchor: --filter-dropdown-anchor;
|
|
19
|
+
position: fixed;
|
|
20
|
+
|
|
21
|
+
/* Position below and left-aligned */
|
|
22
|
+
left: anchor(left);
|
|
23
|
+
top: anchor(bottom);
|
|
24
|
+
margin-top: 4px;
|
|
25
|
+
|
|
26
|
+
/* Flip to above if no room below */
|
|
27
|
+
position-try-fallbacks: flip-block, flip-inline;
|
|
28
|
+
|
|
29
|
+
min-width: 180px;
|
|
30
|
+
z-index: 50;
|
|
31
|
+
|
|
32
|
+
/* Hidden by default */
|
|
33
|
+
display: none;
|
|
34
|
+
opacity: 0;
|
|
35
|
+
transform: translateY(-4px);
|
|
36
|
+
transition: opacity 0.15s ease-out, transform 0.15s ease-out;
|
|
37
|
+
pointer-events: none;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.dropdownMenu[data-open="true"] {
|
|
41
|
+
display: block;
|
|
42
|
+
opacity: 1;
|
|
43
|
+
transform: translateY(0);
|
|
44
|
+
pointer-events: auto;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Fallback for browsers without CSS Anchor Positioning */
|
|
48
|
+
@supports not (anchor-name: none) {
|
|
49
|
+
.dropdownMenu {
|
|
50
|
+
position: absolute;
|
|
51
|
+
left: 0;
|
|
52
|
+
top: calc(100% + 4px);
|
|
53
|
+
z-index: 50;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.dropdownMenu[data-open="true"] {
|
|
57
|
+
display: block;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TerminalSessionTabs Dropdown Styles.
|
|
3
|
+
*
|
|
4
|
+
* Uses CSS Anchor Positioning API for the "add container" dropdown.
|
|
5
|
+
* The + button acts as anchor, dropdown is positioned below it
|
|
6
|
+
* with automatic flip behavior at viewport edges.
|
|
7
|
+
*
|
|
8
|
+
* @module components/devenv/terminal/panel/terminal-session-tabs/styles
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* + button - acts as CSS anchor */
|
|
12
|
+
.addButton {
|
|
13
|
+
anchor-name: --session-tabs-add-anchor;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Container dropdown - anchored to + button */
|
|
17
|
+
.containerDropdown {
|
|
18
|
+
position-anchor: --session-tabs-add-anchor;
|
|
19
|
+
position: fixed;
|
|
20
|
+
|
|
21
|
+
/* Position below and left-aligned */
|
|
22
|
+
left: anchor(left);
|
|
23
|
+
top: anchor(bottom);
|
|
24
|
+
margin-top: 4px;
|
|
25
|
+
|
|
26
|
+
/* Flip to above if no room below */
|
|
27
|
+
position-try-fallbacks: flip-block, flip-inline;
|
|
28
|
+
|
|
29
|
+
min-width: 200px;
|
|
30
|
+
z-index: 50;
|
|
31
|
+
|
|
32
|
+
/* Hidden by default */
|
|
33
|
+
display: none;
|
|
34
|
+
opacity: 0;
|
|
35
|
+
transform: translateY(-4px);
|
|
36
|
+
transition: opacity 0.15s ease-out, transform 0.15s ease-out;
|
|
37
|
+
pointer-events: none;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.containerDropdown[data-open="true"] {
|
|
41
|
+
display: block;
|
|
42
|
+
opacity: 1;
|
|
43
|
+
transform: translateY(0);
|
|
44
|
+
pointer-events: auto;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Fallback for browsers without CSS Anchor Positioning */
|
|
48
|
+
@supports not (anchor-name: none) {
|
|
49
|
+
.containerDropdown {
|
|
50
|
+
position: absolute;
|
|
51
|
+
left: 0;
|
|
52
|
+
top: calc(100% + 4px);
|
|
53
|
+
z-index: 50;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.containerDropdown[data-open="true"] {
|
|
57
|
+
display: block;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|