claudeup 0.6.4 → 1.1.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/bin/claudeup.js +1 -1
- package/dist/data/marketplaces.d.ts +2 -0
- package/dist/data/marketplaces.d.ts.map +1 -1
- package/dist/data/marketplaces.js +51 -8
- package/dist/data/marketplaces.js.map +1 -1
- package/dist/data/mcp-servers.d.ts.map +1 -1
- package/dist/data/mcp-servers.js +82 -0
- package/dist/data/mcp-servers.js.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +79 -0
- package/dist/main.js.map +1 -0
- package/dist/services/claude-settings.d.ts +8 -1
- package/dist/services/claude-settings.d.ts.map +1 -1
- package/dist/services/claude-settings.js +79 -0
- package/dist/services/claude-settings.js.map +1 -1
- package/dist/services/local-marketplace.d.ts +76 -0
- package/dist/services/local-marketplace.d.ts.map +1 -0
- package/dist/services/local-marketplace.js +340 -0
- package/dist/services/local-marketplace.js.map +1 -0
- package/dist/services/plugin-manager.d.ts +39 -2
- package/dist/services/plugin-manager.d.ts.map +1 -1
- package/dist/services/plugin-manager.js +259 -9
- package/dist/services/plugin-manager.js.map +1 -1
- package/dist/services/plugin-mcp-config.d.ts +52 -0
- package/dist/services/plugin-mcp-config.d.ts.map +1 -0
- package/dist/services/plugin-mcp-config.js +176 -0
- package/dist/services/plugin-mcp-config.js.map +1 -0
- package/dist/types/index.d.ts +6 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/InkApp.d.ts +5 -0
- package/dist/ui/InkApp.d.ts.map +1 -0
- package/dist/ui/InkApp.js +175 -0
- package/dist/ui/InkApp.js.map +1 -0
- package/dist/ui/components/CategoryHeader.d.ts +16 -0
- package/dist/ui/components/CategoryHeader.d.ts.map +1 -0
- package/dist/ui/components/CategoryHeader.js +11 -0
- package/dist/ui/components/CategoryHeader.js.map +1 -0
- package/dist/ui/components/ScrollableList.d.ts +16 -0
- package/dist/ui/components/ScrollableList.d.ts.map +1 -0
- package/dist/ui/components/ScrollableList.js +35 -0
- package/dist/ui/components/ScrollableList.js.map +1 -0
- package/dist/ui/components/SearchInput.d.ts +18 -0
- package/dist/ui/components/SearchInput.d.ts.map +1 -0
- package/dist/ui/components/SearchInput.js +30 -0
- package/dist/ui/components/SearchInput.js.map +1 -0
- package/dist/ui/components/TabBar.d.ts +8 -0
- package/dist/ui/components/TabBar.d.ts.map +1 -0
- package/dist/ui/components/TabBar.js +18 -0
- package/dist/ui/components/TabBar.js.map +1 -0
- package/dist/ui/components/layout/Footer.d.ts +14 -0
- package/dist/ui/components/layout/Footer.d.ts.map +1 -0
- package/dist/ui/components/layout/Footer.js +23 -0
- package/dist/ui/components/layout/Footer.js.map +1 -0
- package/dist/ui/components/layout/Header.d.ts +4 -0
- package/dist/ui/components/layout/Header.d.ts.map +1 -0
- package/dist/ui/components/layout/Header.js +25 -0
- package/dist/ui/components/layout/Header.js.map +1 -0
- package/dist/ui/components/layout/Panel.d.ts +22 -0
- package/dist/ui/components/layout/Panel.d.ts.map +1 -0
- package/dist/ui/components/layout/Panel.js +8 -0
- package/dist/ui/components/layout/Panel.js.map +1 -0
- package/dist/ui/components/layout/ProgressBar.d.ts +12 -0
- package/dist/ui/components/layout/ProgressBar.d.ts.map +1 -0
- package/dist/ui/components/layout/ProgressBar.js +16 -0
- package/dist/ui/components/layout/ProgressBar.js.map +1 -0
- package/dist/ui/components/layout/ScopeTabs.d.ts +12 -0
- package/dist/ui/components/layout/ScopeTabs.d.ts.map +1 -0
- package/dist/ui/components/layout/ScopeTabs.js +8 -0
- package/dist/ui/components/layout/ScopeTabs.js.map +1 -0
- package/dist/ui/components/layout/ScreenLayout.d.ts +30 -0
- package/dist/ui/components/layout/ScreenLayout.d.ts.map +1 -0
- package/dist/ui/components/layout/ScreenLayout.js +23 -0
- package/dist/ui/components/layout/ScreenLayout.js.map +1 -0
- package/dist/ui/components/layout/index.d.ts +7 -0
- package/dist/ui/components/layout/index.d.ts.map +1 -0
- package/dist/ui/components/layout/index.js +7 -0
- package/dist/ui/components/layout/index.js.map +1 -0
- package/dist/ui/components/modals/ConfirmModal.d.ts +14 -0
- package/dist/ui/components/modals/ConfirmModal.d.ts.map +1 -0
- package/dist/ui/components/modals/ConfirmModal.js +15 -0
- package/dist/ui/components/modals/ConfirmModal.js.map +1 -0
- package/dist/ui/components/modals/InputModal.d.ts +16 -0
- package/dist/ui/components/modals/InputModal.d.ts.map +1 -0
- package/dist/ui/components/modals/InputModal.js +23 -0
- package/dist/ui/components/modals/InputModal.js.map +1 -0
- package/dist/ui/components/modals/LoadingModal.d.ts +8 -0
- package/dist/ui/components/modals/LoadingModal.d.ts.map +1 -0
- package/dist/ui/components/modals/LoadingModal.js +8 -0
- package/dist/ui/components/modals/LoadingModal.js.map +1 -0
- package/dist/ui/components/modals/MessageModal.d.ts +14 -0
- package/dist/ui/components/modals/MessageModal.d.ts.map +1 -0
- package/dist/ui/components/modals/MessageModal.js +17 -0
- package/dist/ui/components/modals/MessageModal.js.map +1 -0
- package/dist/ui/components/modals/ModalContainer.d.ts +7 -0
- package/dist/ui/components/modals/ModalContainer.d.ts.map +1 -0
- package/dist/ui/components/modals/ModalContainer.js +38 -0
- package/dist/ui/components/modals/ModalContainer.js.map +1 -0
- package/dist/ui/components/modals/SelectModal.d.ts +17 -0
- package/dist/ui/components/modals/SelectModal.d.ts.map +1 -0
- package/dist/ui/components/modals/SelectModal.js +33 -0
- package/dist/ui/components/modals/SelectModal.js.map +1 -0
- package/dist/ui/components/modals/index.d.ts +7 -0
- package/dist/ui/components/modals/index.d.ts.map +1 -0
- package/dist/ui/components/modals/index.js +7 -0
- package/dist/ui/components/modals/index.js.map +1 -0
- package/dist/ui/hooks/index.d.ts +3 -0
- package/dist/ui/hooks/index.d.ts.map +1 -0
- package/dist/ui/hooks/index.js +3 -0
- package/dist/ui/hooks/index.js.map +1 -0
- package/dist/ui/hooks/useAsyncData.d.ts +40 -0
- package/dist/ui/hooks/useAsyncData.d.ts.map +1 -0
- package/dist/ui/hooks/useAsyncData.js +78 -0
- package/dist/ui/hooks/useAsyncData.js.map +1 -0
- package/dist/ui/hooks/useKeyboardNavigation.d.ts +27 -0
- package/dist/ui/hooks/useKeyboardNavigation.d.ts.map +1 -0
- package/dist/ui/hooks/useKeyboardNavigation.js +82 -0
- package/dist/ui/hooks/useKeyboardNavigation.js.map +1 -0
- package/dist/ui/screens/CliToolsScreen.d.ts +4 -0
- package/dist/ui/screens/CliToolsScreen.d.ts.map +1 -0
- package/dist/ui/screens/CliToolsScreen.js +268 -0
- package/dist/ui/screens/CliToolsScreen.js.map +1 -0
- package/dist/ui/screens/EnvVarsScreen.d.ts +4 -0
- package/dist/ui/screens/EnvVarsScreen.d.ts.map +1 -0
- package/dist/ui/screens/EnvVarsScreen.js +145 -0
- package/dist/ui/screens/EnvVarsScreen.js.map +1 -0
- package/dist/ui/screens/McpRegistryScreen.d.ts +4 -0
- package/dist/ui/screens/McpRegistryScreen.d.ts.map +1 -0
- package/dist/ui/screens/McpRegistryScreen.js +226 -0
- package/dist/ui/screens/McpRegistryScreen.js.map +1 -0
- package/dist/ui/screens/McpScreen.d.ts +4 -0
- package/dist/ui/screens/McpScreen.d.ts.map +1 -0
- package/dist/ui/screens/McpScreen.js +222 -0
- package/dist/ui/screens/McpScreen.js.map +1 -0
- package/dist/ui/screens/ModelSelectorScreen.d.ts +4 -0
- package/dist/ui/screens/ModelSelectorScreen.d.ts.map +1 -0
- package/dist/ui/screens/ModelSelectorScreen.js +143 -0
- package/dist/ui/screens/ModelSelectorScreen.js.map +1 -0
- package/dist/ui/screens/PluginsScreen.d.ts +4 -0
- package/dist/ui/screens/PluginsScreen.d.ts.map +1 -0
- package/dist/ui/screens/PluginsScreen.js +818 -0
- package/dist/ui/screens/PluginsScreen.js.map +1 -0
- package/dist/ui/screens/StatusLineScreen.d.ts +4 -0
- package/dist/ui/screens/StatusLineScreen.d.ts.map +1 -0
- package/dist/ui/screens/StatusLineScreen.js +197 -0
- package/dist/ui/screens/StatusLineScreen.js.map +1 -0
- package/dist/ui/screens/index.d.ts +8 -0
- package/dist/ui/screens/index.d.ts.map +1 -0
- package/dist/ui/screens/index.js +8 -0
- package/dist/ui/screens/index.js.map +1 -0
- package/dist/ui/state/AppContext.d.ts +40 -0
- package/dist/ui/state/AppContext.d.ts.map +1 -0
- package/dist/ui/state/AppContext.js +162 -0
- package/dist/ui/state/AppContext.js.map +1 -0
- package/dist/ui/state/DimensionsContext.d.ts +25 -0
- package/dist/ui/state/DimensionsContext.d.ts.map +1 -0
- package/dist/ui/state/DimensionsContext.js +68 -0
- package/dist/ui/state/DimensionsContext.js.map +1 -0
- package/dist/ui/state/reducer.d.ts +4 -0
- package/dist/ui/state/reducer.d.ts.map +1 -0
- package/dist/ui/state/reducer.js +412 -0
- package/dist/ui/state/reducer.js.map +1 -0
- package/dist/ui/state/types.d.ts +266 -0
- package/dist/ui/state/types.d.ts.map +1 -0
- package/dist/ui/state/types.js +2 -0
- package/dist/ui/state/types.js.map +1 -0
- package/dist/utils/fuzzy-search.d.ts +33 -0
- package/dist/utils/fuzzy-search.d.ts.map +1 -0
- package/dist/utils/fuzzy-search.js +102 -0
- package/dist/utils/fuzzy-search.js.map +1 -0
- package/dist/utils/string-utils.d.ts +24 -0
- package/dist/utils/string-utils.d.ts.map +1 -0
- package/dist/utils/string-utils.js +62 -0
- package/dist/utils/string-utils.js.map +1 -0
- package/package.json +19 -7
- package/dist/ui/app.d.ts +0 -38
- package/dist/ui/app.d.ts.map +0 -1
- package/dist/ui/app.js +0 -590
- package/dist/ui/app.js.map +0 -1
- package/dist/ui/screens/cli-tools.d.ts +0 -4
- package/dist/ui/screens/cli-tools.d.ts.map +0 -1
- package/dist/ui/screens/cli-tools.js +0 -369
- package/dist/ui/screens/cli-tools.js.map +0 -1
- package/dist/ui/screens/env-vars.d.ts +0 -3
- package/dist/ui/screens/env-vars.d.ts.map +0 -1
- package/dist/ui/screens/env-vars.js +0 -119
- package/dist/ui/screens/env-vars.js.map +0 -1
- package/dist/ui/screens/main-menu.d.ts +0 -3
- package/dist/ui/screens/main-menu.d.ts.map +0 -1
- package/dist/ui/screens/main-menu.js +0 -110
- package/dist/ui/screens/main-menu.js.map +0 -1
- package/dist/ui/screens/mcp-registry.d.ts +0 -10
- package/dist/ui/screens/mcp-registry.d.ts.map +0 -1
- package/dist/ui/screens/mcp-registry.js +0 -310
- package/dist/ui/screens/mcp-registry.js.map +0 -1
- package/dist/ui/screens/mcp-setup.d.ts +0 -4
- package/dist/ui/screens/mcp-setup.d.ts.map +0 -1
- package/dist/ui/screens/mcp-setup.js +0 -492
- package/dist/ui/screens/mcp-setup.js.map +0 -1
- package/dist/ui/screens/plugins.d.ts +0 -3
- package/dist/ui/screens/plugins.d.ts.map +0 -1
- package/dist/ui/screens/plugins.js +0 -443
- package/dist/ui/screens/plugins.js.map +0 -1
- package/dist/ui/screens/statusline.d.ts +0 -5
- package/dist/ui/screens/statusline.d.ts.map +0 -1
- package/dist/ui/screens/statusline.js +0 -235
- package/dist/ui/screens/statusline.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,GAAG,KAAK,CAAC;IACpG,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;IAC9C,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3D,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAE9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAG3G,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InkApp.d.ts","sourceRoot":"","sources":["../../src/ui/InkApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAkBnD,eAAO,MAAM,OAAO,UAAU,CAAC;AAkN/B,wBAAgB,GAAG,IAAI,KAAK,CAAC,YAAY,CAMxC;AAED,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Box, Text, useApp as useInkApp, useInput, useStdout } from 'ink';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import { AppProvider, useApp, useNavigation, useModal } from './state/AppContext.js';
|
|
6
|
+
import { DimensionsProvider, useDimensions } from './state/DimensionsContext.js';
|
|
7
|
+
// Header removed as per new design
|
|
8
|
+
import { ModalContainer } from './components/modals/index.js';
|
|
9
|
+
import { PluginsScreen, McpScreen, McpRegistryScreen, StatusLineScreen, EnvVarsScreen, CliToolsScreen, } from './screens/index.js';
|
|
10
|
+
import { refreshLocalMarketplaces } from '../services/local-marketplace.js';
|
|
11
|
+
export const VERSION = '1.0.0';
|
|
12
|
+
function Router() {
|
|
13
|
+
const { state } = useApp();
|
|
14
|
+
const { currentRoute } = state;
|
|
15
|
+
switch (currentRoute.screen) {
|
|
16
|
+
case 'plugins':
|
|
17
|
+
return _jsx(PluginsScreen, {});
|
|
18
|
+
case 'mcp':
|
|
19
|
+
return _jsx(McpScreen, {});
|
|
20
|
+
case 'mcp-registry':
|
|
21
|
+
return _jsx(McpRegistryScreen, {});
|
|
22
|
+
case 'statusline':
|
|
23
|
+
return _jsx(StatusLineScreen, {});
|
|
24
|
+
case 'env-vars':
|
|
25
|
+
return _jsx(EnvVarsScreen, {});
|
|
26
|
+
case 'cli-tools':
|
|
27
|
+
return _jsx(CliToolsScreen, {});
|
|
28
|
+
default:
|
|
29
|
+
return _jsx(PluginsScreen, {});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function GlobalKeyHandler({ onDebugToggle }) {
|
|
33
|
+
const { state } = useApp();
|
|
34
|
+
const { navigateToScreen } = useNavigation();
|
|
35
|
+
const { exit } = useInkApp();
|
|
36
|
+
const modal = useModal();
|
|
37
|
+
const { stdout } = useStdout();
|
|
38
|
+
useInput((input, key) => {
|
|
39
|
+
// Debug key - always available
|
|
40
|
+
if (input === 'D' && key.shift) {
|
|
41
|
+
onDebugToggle();
|
|
42
|
+
// Also write debug info to file
|
|
43
|
+
const debugInfo = {
|
|
44
|
+
timestamp: new Date().toISOString(),
|
|
45
|
+
terminal: { rows: stdout?.rows, columns: stdout?.columns },
|
|
46
|
+
state: {
|
|
47
|
+
currentRoute: state.currentRoute,
|
|
48
|
+
isSearching: state.isSearching,
|
|
49
|
+
modal: state.modal ? { type: state.modal.type } : null,
|
|
50
|
+
plugins: {
|
|
51
|
+
scope: state.plugins.scope,
|
|
52
|
+
selectedIndex: state.plugins.selectedIndex,
|
|
53
|
+
searchQuery: state.plugins.searchQuery,
|
|
54
|
+
marketplacesStatus: state.plugins.marketplaces.status,
|
|
55
|
+
pluginsStatus: state.plugins.plugins.status,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
fs.writeFileSync('/tmp/claudeup-debug.json', JSON.stringify(debugInfo, null, 2));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Don't handle keys when modal is open or searching
|
|
63
|
+
if (state.modal || state.isSearching)
|
|
64
|
+
return;
|
|
65
|
+
// Global navigation shortcuts (1-5) - include mcp-registry as it's a sub-screen of mcp
|
|
66
|
+
const isTopLevel = ['plugins', 'mcp', 'mcp-registry', 'statusline', 'env-vars', 'cli-tools'].includes(state.currentRoute.screen);
|
|
67
|
+
if (isTopLevel) {
|
|
68
|
+
if (input === '1')
|
|
69
|
+
navigateToScreen('plugins');
|
|
70
|
+
else if (input === '2')
|
|
71
|
+
navigateToScreen('mcp');
|
|
72
|
+
else if (input === '3')
|
|
73
|
+
navigateToScreen('statusline');
|
|
74
|
+
else if (input === '4')
|
|
75
|
+
navigateToScreen('env-vars');
|
|
76
|
+
else if (input === '5')
|
|
77
|
+
navigateToScreen('cli-tools');
|
|
78
|
+
// Tab navigation cycling
|
|
79
|
+
if (key.tab) {
|
|
80
|
+
const screens = ['plugins', 'mcp', 'statusline', 'env-vars', 'cli-tools'];
|
|
81
|
+
const currentIndex = screens.indexOf(state.currentRoute.screen);
|
|
82
|
+
if (currentIndex !== -1) {
|
|
83
|
+
const nextIndex = key.shift
|
|
84
|
+
? (currentIndex - 1 + screens.length) % screens.length
|
|
85
|
+
: (currentIndex + 1) % screens.length;
|
|
86
|
+
navigateToScreen(screens[nextIndex]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Escape/q to go back or exit
|
|
91
|
+
if (key.escape || input === 'q') {
|
|
92
|
+
if (state.currentRoute.screen === 'plugins') {
|
|
93
|
+
// On home screen, exit immediately
|
|
94
|
+
exit();
|
|
95
|
+
}
|
|
96
|
+
else if (state.currentRoute.screen === 'mcp-registry') {
|
|
97
|
+
// Go back to MCP from registry
|
|
98
|
+
navigateToScreen('mcp');
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Go back to plugins (home)
|
|
102
|
+
navigateToScreen('plugins');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// ? for help
|
|
106
|
+
if (input === '?') {
|
|
107
|
+
modal.message('claudeup Help', `Navigation
|
|
108
|
+
↑/↓ or j/k Move selection
|
|
109
|
+
Enter Select / Toggle
|
|
110
|
+
Escape or q Back / Quit
|
|
111
|
+
? This help
|
|
112
|
+
|
|
113
|
+
Quick Navigation
|
|
114
|
+
1 Plugins 4 Env Vars
|
|
115
|
+
2 MCP Servers 5 CLI Tools
|
|
116
|
+
3 Status Line
|
|
117
|
+
|
|
118
|
+
Plugin Actions
|
|
119
|
+
u Update d Uninstall
|
|
120
|
+
a Update All r Refresh
|
|
121
|
+
|
|
122
|
+
MCP Servers
|
|
123
|
+
/ Search local + remote
|
|
124
|
+
r Browse MCP registry`, 'info');
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
function ProgressIndicator({ message, current, total }) {
|
|
130
|
+
let progressText = message;
|
|
131
|
+
if (current !== undefined && total !== undefined && total > 0) {
|
|
132
|
+
const barWidth = 20;
|
|
133
|
+
const filled = Math.round((current / total) * barWidth);
|
|
134
|
+
const empty = barWidth - filled;
|
|
135
|
+
progressText += ` [${'█'.repeat(filled)}${'░'.repeat(empty)}] ${current}/${total}`;
|
|
136
|
+
}
|
|
137
|
+
return (_jsxs(Box, { paddingX: 1, children: [_jsx(Text, { color: "cyan", children: "\u27F3 " }), _jsx(Text, { children: progressText })] }));
|
|
138
|
+
}
|
|
139
|
+
function AppContentInner({ showDebug, onDebugToggle }) {
|
|
140
|
+
const { state, dispatch } = useApp();
|
|
141
|
+
const { progress } = state;
|
|
142
|
+
const dimensions = useDimensions();
|
|
143
|
+
// Auto-refresh marketplaces on startup
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
const noRefresh = process.argv.includes('--no-refresh');
|
|
146
|
+
if (noRefresh)
|
|
147
|
+
return;
|
|
148
|
+
dispatch({ type: 'SHOW_PROGRESS', state: { message: 'Syncing marketplaces...' } });
|
|
149
|
+
refreshLocalMarketplaces((prog) => {
|
|
150
|
+
dispatch({
|
|
151
|
+
type: 'UPDATE_PROGRESS',
|
|
152
|
+
state: { message: `Syncing ${prog.name}...`, current: prog.current, total: prog.total },
|
|
153
|
+
});
|
|
154
|
+
})
|
|
155
|
+
.then(() => {
|
|
156
|
+
dispatch({ type: 'HIDE_PROGRESS' });
|
|
157
|
+
dispatch({ type: 'DATA_REFRESH_COMPLETE' });
|
|
158
|
+
})
|
|
159
|
+
.catch(() => {
|
|
160
|
+
dispatch({ type: 'HIDE_PROGRESS' });
|
|
161
|
+
});
|
|
162
|
+
}, [dispatch]);
|
|
163
|
+
return (_jsxs(Box, { flexDirection: "column", height: dimensions.terminalHeight, children: [showDebug && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: "yellow", dimColor: true, children: ["DEBUG: ", dimensions.terminalWidth, "x", dimensions.terminalHeight, " | content=", dimensions.contentHeight, " | screen=", state.currentRoute.screen] }) })), progress && _jsx(ProgressIndicator, { ...progress }), _jsx(Box, { flexDirection: "column", height: dimensions.contentHeight, paddingX: 1, overflow: "hidden", children: _jsx(Router, {}) }), _jsx(GlobalKeyHandler, { onDebugToggle: onDebugToggle }), _jsx(ModalContainer, {})] }));
|
|
164
|
+
}
|
|
165
|
+
function AppContent() {
|
|
166
|
+
const { state } = useApp();
|
|
167
|
+
const { progress } = state;
|
|
168
|
+
const [showDebug, setShowDebug] = useState(false);
|
|
169
|
+
return (_jsx(DimensionsProvider, { showProgress: !!progress, showDebug: showDebug, children: _jsx(AppContentInner, { showDebug: showDebug, onDebugToggle: () => setShowDebug(s => !s) }) }));
|
|
170
|
+
}
|
|
171
|
+
export function App() {
|
|
172
|
+
return (_jsx(AppProvider, { children: _jsx(AppContent, {}) }));
|
|
173
|
+
}
|
|
174
|
+
export default App;
|
|
175
|
+
//# sourceMappingURL=InkApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InkApp.js","sourceRoot":"","sources":["../../src/ui/InkApp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface CategoryHeaderProps {
|
|
3
|
+
/** Category title */
|
|
4
|
+
title: string;
|
|
5
|
+
/** Status badge (e.g., "✓ Configured", "3 plugins") */
|
|
6
|
+
status?: string;
|
|
7
|
+
/** Status badge color */
|
|
8
|
+
statusColor?: string;
|
|
9
|
+
/** Whether category is expanded */
|
|
10
|
+
expanded?: boolean;
|
|
11
|
+
/** Number of items in category */
|
|
12
|
+
count?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function CategoryHeader({ title, status, statusColor, expanded, count, }: CategoryHeaderProps): React.ReactElement;
|
|
15
|
+
export default CategoryHeader;
|
|
16
|
+
//# sourceMappingURL=CategoryHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CategoryHeader.d.ts","sourceRoot":"","sources":["../../../src/ui/components/CategoryHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,mBAAmB;IAC3B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,EACN,WAAqB,EACrB,QAAe,EACf,KAAK,GACN,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAe1C;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Text } from 'ink';
|
|
3
|
+
export function CategoryHeader({ title, status, statusColor = 'green', expanded = true, count, }) {
|
|
4
|
+
const expandIcon = expanded ? '▼' : '▶';
|
|
5
|
+
const countBadge = count !== undefined ? ` (${count})` : '';
|
|
6
|
+
const statusText = status ? ` ${status}` : '';
|
|
7
|
+
// Simple format without dynamic line calculation
|
|
8
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: "gray", dimColor: true, children: expandIcon }), _jsxs(Text, { color: "white", bold: true, children: [" ", title] }), _jsx(Text, { color: "gray", dimColor: true, children: countBadge }), _jsx(Text, { color: "gray", dimColor: true, children: " \u2500\u2500\u2500\u2500" }), _jsx(Text, { color: statusColor, children: statusText })] }));
|
|
9
|
+
}
|
|
10
|
+
export default CategoryHeader;
|
|
11
|
+
//# sourceMappingURL=CategoryHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CategoryHeader.js","sourceRoot":"","sources":["../../../src/ui/components/CategoryHeader.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAe3B,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,EACN,WAAW,GAAG,OAAO,EACrB,QAAQ,GAAG,IAAI,EACf,KAAK,GACe;IACpB,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACxC,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,iDAAiD;IACjD,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,kBAAE,UAAU,GAAQ,EAC/C,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,wBAAG,KAAK,IAAQ,EACxC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,kBAAE,UAAU,GAAQ,EAC/C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,gDAAa,EACxC,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,YAAG,UAAU,GAAQ,IACxC,CACR,CAAC;AACJ,CAAC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ScrollableListProps<T> {
|
|
3
|
+
/** Array of items to display */
|
|
4
|
+
items: T[];
|
|
5
|
+
/** Currently selected index */
|
|
6
|
+
selectedIndex: number;
|
|
7
|
+
/** Render function for each item */
|
|
8
|
+
renderItem: (item: T, index: number, isSelected: boolean) => React.ReactNode;
|
|
9
|
+
/** Maximum visible height (number of lines) - REQUIRED for proper rendering */
|
|
10
|
+
maxHeight: number;
|
|
11
|
+
/** Show scroll indicators */
|
|
12
|
+
showScrollIndicators?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function ScrollableList<T>({ items, selectedIndex, renderItem, maxHeight, showScrollIndicators, }: ScrollableListProps<T>): React.ReactElement;
|
|
15
|
+
export default ScrollableList;
|
|
16
|
+
//# sourceMappingURL=ScrollableList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollableList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ScrollableList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,UAAU,mBAAmB,CAAC,CAAC;IAC7B,gCAAgC;IAChC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC;IAC7E,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAChC,KAAK,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,oBAA2B,GAC5B,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAoD7C;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useMemo } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
export function ScrollableList({ items, selectedIndex, renderItem, maxHeight, showScrollIndicators = true, }) {
|
|
5
|
+
const [scrollOffset, setScrollOffset] = useState(0);
|
|
6
|
+
// Account for scroll indicators in available space
|
|
7
|
+
const hasItemsAbove = scrollOffset > 0;
|
|
8
|
+
const hasItemsBelow = scrollOffset + maxHeight < items.length;
|
|
9
|
+
const indicatorLines = (showScrollIndicators && hasItemsAbove ? 1 : 0) + (showScrollIndicators && hasItemsBelow ? 1 : 0);
|
|
10
|
+
const effectiveMaxHeight = Math.max(1, maxHeight - indicatorLines);
|
|
11
|
+
// Adjust scroll offset to keep selected item visible
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (selectedIndex < scrollOffset) {
|
|
14
|
+
// Selected is above viewport - scroll up
|
|
15
|
+
setScrollOffset(selectedIndex);
|
|
16
|
+
}
|
|
17
|
+
else if (selectedIndex >= scrollOffset + effectiveMaxHeight) {
|
|
18
|
+
// Selected is below viewport - scroll down
|
|
19
|
+
setScrollOffset(selectedIndex - effectiveMaxHeight + 1);
|
|
20
|
+
}
|
|
21
|
+
}, [selectedIndex, effectiveMaxHeight, scrollOffset]);
|
|
22
|
+
// Calculate visible items - strictly limited to effectiveMaxHeight
|
|
23
|
+
const visibleItems = useMemo(() => {
|
|
24
|
+
const start = scrollOffset;
|
|
25
|
+
const end = Math.min(scrollOffset + effectiveMaxHeight, items.length);
|
|
26
|
+
return items.slice(start, end).map((item, idx) => ({
|
|
27
|
+
item,
|
|
28
|
+
originalIndex: start + idx,
|
|
29
|
+
}));
|
|
30
|
+
}, [items, scrollOffset, effectiveMaxHeight]);
|
|
31
|
+
const itemsBelow = items.length - scrollOffset - effectiveMaxHeight;
|
|
32
|
+
return (_jsxs(Box, { flexDirection: "column", children: [showScrollIndicators && hasItemsAbove && (_jsxs(Text, { color: "cyan", children: ["\u2191 ", scrollOffset, " more"] })), visibleItems.map(({ item, originalIndex }) => (_jsx(Box, { width: "100%", overflow: "hidden", children: renderItem(item, originalIndex, originalIndex === selectedIndex) }, originalIndex))), showScrollIndicators && hasItemsBelow && (_jsxs(Text, { color: "cyan", children: ["\u2193 ", itemsBelow, " more"] }))] }));
|
|
33
|
+
}
|
|
34
|
+
export default ScrollableList;
|
|
35
|
+
//# sourceMappingURL=ScrollableList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollableList.js","sourceRoot":"","sources":["../../../src/ui/components/ScrollableList.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAehC,MAAM,UAAU,cAAc,CAAI,EAChC,KAAK,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,oBAAoB,GAAG,IAAI,GACJ;IACvB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpD,mDAAmD;IACnD,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9D,MAAM,cAAc,GAAG,CAAC,oBAAoB,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzH,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC,CAAC;IAEnE,qDAAqD;IACrD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,GAAG,YAAY,EAAE,CAAC;YACjC,yCAAyC;YACzC,eAAe,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,aAAa,IAAI,YAAY,GAAG,kBAAkB,EAAE,CAAC;YAC9D,2CAA2C;YAC3C,eAAe,CAAC,aAAa,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEtD,mEAAmE;IACnE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI;YACJ,aAAa,EAAE,KAAK,GAAG,GAAG;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,GAAG,kBAAkB,CAAC;IAEpE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAExB,oBAAoB,IAAI,aAAa,IAAI,CACxC,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAI,YAAY,aAAa,CAChD,EAGA,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAC7C,KAAC,GAAG,IAAqB,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,YACpD,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,KAAK,aAAa,CAAC,IADzD,aAAa,CAEjB,CACP,CAAC,EAGD,oBAAoB,IAAI,aAAa,IAAI,CACxC,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAI,UAAU,aAAa,CAC9C,IACG,CACP,CAAC;AACJ,CAAC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SearchInputProps {
|
|
3
|
+
/** Current search value */
|
|
4
|
+
value: string;
|
|
5
|
+
/** Called when value changes */
|
|
6
|
+
onChange: (value: string) => void;
|
|
7
|
+
/** Placeholder text when empty */
|
|
8
|
+
placeholder?: string;
|
|
9
|
+
/** Whether the input is focused/active */
|
|
10
|
+
isActive: boolean;
|
|
11
|
+
/** Called when user presses escape to exit search */
|
|
12
|
+
onExit?: () => void;
|
|
13
|
+
/** Called when user presses enter */
|
|
14
|
+
onSubmit?: () => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function SearchInput({ value, onChange, placeholder, isActive, onExit, onSubmit, }: SearchInputProps): React.ReactElement;
|
|
17
|
+
export default SearchInput;
|
|
18
|
+
//# sourceMappingURL=SearchInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/ui/components/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,gBAAgB;IACxB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,WAAyB,EACzB,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAuCvC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from 'ink';
|
|
3
|
+
export function SearchInput({ value, onChange, placeholder = 'Search...', isActive, onExit, onSubmit, }) {
|
|
4
|
+
useInput((input, key) => {
|
|
5
|
+
if (!isActive)
|
|
6
|
+
return;
|
|
7
|
+
if (key.escape) {
|
|
8
|
+
onExit?.();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (key.return) {
|
|
12
|
+
onSubmit?.();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (key.backspace || key.delete) {
|
|
16
|
+
onChange(value.slice(0, -1));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Only accept printable characters
|
|
20
|
+
if (input && !key.ctrl && !key.meta) {
|
|
21
|
+
onChange(value + input);
|
|
22
|
+
}
|
|
23
|
+
}, { isActive });
|
|
24
|
+
const displayValue = value || (isActive ? '' : placeholder);
|
|
25
|
+
const showCursor = isActive;
|
|
26
|
+
const textColor = value ? 'white' : 'gray';
|
|
27
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "\u276F " }), _jsx(Text, { color: textColor, children: displayValue }), showCursor && _jsx(Text, { color: "cyan", children: "\u258B" })] }));
|
|
28
|
+
}
|
|
29
|
+
export default SearchInput;
|
|
30
|
+
//# sourceMappingURL=SearchInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchInput.js","sourceRoot":"","sources":["../../../src/ui/components/SearchInput.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAiB1C,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,WAAW,EACzB,QAAQ,EACR,MAAM,EACN,QAAQ,GACS;IACjB,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,EAAE,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,EAAE,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,QAAQ,CAAC;IAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAE3C,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAU,EAC5B,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,YAAG,YAAY,GAAQ,EAC5C,UAAU,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,IACtC,CACP,CAAC;AACJ,CAAC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Screen } from '../state/types.js';
|
|
3
|
+
interface TabBarProps {
|
|
4
|
+
currentScreen: Screen;
|
|
5
|
+
}
|
|
6
|
+
export declare function TabBar({ currentScreen }: TabBarProps): React.ReactElement;
|
|
7
|
+
export default TabBar;
|
|
8
|
+
//# sourceMappingURL=TabBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/TabBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAgBhD,UAAU,WAAW;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,MAAM,CAAC,EAAE,aAAa,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CA8BzE;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
const TABS = [
|
|
4
|
+
{ key: '1', label: 'Plugins', screen: 'plugins' },
|
|
5
|
+
{ key: '2', label: 'MCP', screen: 'mcp' },
|
|
6
|
+
{ key: '3', label: 'Status', screen: 'statusline' },
|
|
7
|
+
{ key: '4', label: 'Env', screen: 'env-vars' },
|
|
8
|
+
{ key: '5', label: 'CLI', screen: 'cli-tools' },
|
|
9
|
+
];
|
|
10
|
+
export function TabBar({ currentScreen }) {
|
|
11
|
+
return (_jsx(Box, { flexDirection: "row", gap: 0, children: TABS.map((tab, index) => {
|
|
12
|
+
const isSelected = tab.screen === currentScreen;
|
|
13
|
+
const isLast = index === TABS.length - 1;
|
|
14
|
+
return (_jsxs(Box, { flexDirection: "row", children: [isSelected ? (_jsx(Box, { children: _jsxs(Text, { backgroundColor: "#7e57c2", color: "white", bold: true, children: [' ', tab.key, ":", tab.label, ' '] }) })) : (_jsx(Box, { children: _jsxs(Text, { color: "gray", children: [' ', tab.key, ":", tab.label, ' '] }) })), !isLast && _jsx(Text, { color: "gray", dimColor: true, children: "\u2502" })] }, tab.key));
|
|
15
|
+
}) }));
|
|
16
|
+
}
|
|
17
|
+
export default TabBar;
|
|
18
|
+
//# sourceMappingURL=TabBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabBar.js","sourceRoot":"","sources":["../../../src/ui/components/TabBar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,IAAI,GAAU;IAClB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;IACjD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;IACzC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;IACnD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE;IAC9C,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE;CAChD,CAAC;AAMF,MAAM,UAAU,MAAM,CAAC,EAAE,aAAa,EAAe;IACnD,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,KAAK,aAAa,CAAC;YAChD,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAEzC,OAAO,CACL,MAAC,GAAG,IAAe,aAAa,EAAC,KAAK,aAEnC,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,eAAe,EAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAC,IAAI,mBAC/C,GAAG,EAAE,GAAG,CAAC,GAAG,OAAG,GAAG,CAAC,KAAK,EAAE,GAAG,IACzB,GACH,CACP,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aACf,GAAG,EAAE,GAAG,CAAC,GAAG,OAAG,GAAG,CAAC,KAAK,EAAE,GAAG,IACzB,GACH,CACP,EAEA,CAAC,MAAM,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,6BAAS,KAhBxC,GAAG,CAAC,GAAG,CAiBX,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface KeyHint {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
interface FooterProps {
|
|
7
|
+
/** Keyboard hints to display - either as string or structured array */
|
|
8
|
+
hints?: string;
|
|
9
|
+
/** Structured keyboard hints */
|
|
10
|
+
keys?: KeyHint[];
|
|
11
|
+
}
|
|
12
|
+
export declare function Footer({ hints, keys }: FooterProps): React.ReactElement;
|
|
13
|
+
export default Footer;
|
|
14
|
+
//# sourceMappingURL=Footer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/layout/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,OAAO;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CA2DvE;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
export function Footer({ hints, keys }) {
|
|
5
|
+
// If using structured keys
|
|
6
|
+
if (keys && keys.length > 0) {
|
|
7
|
+
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", borderTop: true, borderLeft: false, borderRight: false, borderBottom: false, paddingX: 1, marginTop: 1, children: keys.map((hint, idx) => (_jsxs(React.Fragment, { children: [_jsx(Text, { color: "yellow", bold: true, children: hint.key }), _jsxs(Text, { color: "gray", children: [" ", hint.label] }), idx < keys.length - 1 && _jsx(Text, { color: "gray", children: " \u00B7 " })] }, hint.key))) }));
|
|
8
|
+
}
|
|
9
|
+
// Parse string hints like "↑↓ Navigate │ Enter Apply │ q Back"
|
|
10
|
+
if (hints) {
|
|
11
|
+
const parts = hints.split('│').map((s) => s.trim());
|
|
12
|
+
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", borderTop: true, borderLeft: false, borderRight: false, borderBottom: false, paddingX: 1, marginTop: 1, children: parts.map((part, idx) => {
|
|
13
|
+
// Split on first space to get key and label
|
|
14
|
+
const spaceIdx = part.indexOf(' ');
|
|
15
|
+
const key = spaceIdx > 0 ? part.substring(0, spaceIdx) : part;
|
|
16
|
+
const label = spaceIdx > 0 ? part.substring(spaceIdx + 1) : '';
|
|
17
|
+
return (_jsxs(React.Fragment, { children: [_jsx(Text, { color: "yellow", bold: true, children: key }), _jsxs(Text, { color: "gray", children: [" ", label] }), idx < parts.length - 1 && _jsx(Text, { color: "gray", children: " \u00B7 " })] }, idx));
|
|
18
|
+
}) }));
|
|
19
|
+
}
|
|
20
|
+
return _jsx(Box, {});
|
|
21
|
+
}
|
|
22
|
+
export default Footer;
|
|
23
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../../src/ui/components/layout/Footer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAchC,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAe;IACjD,2BAA2B;IAC3B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CACL,KAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,SAAS,QACT,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,KAAK,EAClB,YAAY,EAAE,KAAK,EACnB,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,CAAC,YAEX,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CACvB,MAAC,KAAK,CAAC,QAAQ,eACb,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,kBAAE,IAAI,CAAC,GAAG,GAAQ,EAC3C,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAG,IAAI,CAAC,KAAK,IAAQ,EACtC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,2BAAa,KAHtC,IAAI,CAAC,GAAG,CAIZ,CAClB,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpD,OAAO,CACL,KAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,SAAS,QACT,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,KAAK,EAClB,YAAY,EAAE,KAAK,EACnB,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,CAAC,YAEX,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBACvB,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnC,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9D,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE/D,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACb,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,kBAAE,GAAG,GAAQ,EACtC,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAG,KAAK,IAAQ,EACjC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,2BAAa,KAHvC,GAAG,CAIP,CAClB,CAAC;YACJ,CAAC,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,OAAO,KAAC,GAAG,KAAG,CAAC;AACjB,CAAC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/layout/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAsB1B,wBAAgB,MAAM,IAAI,KAAK,CAAC,YAAY,CA+C3C;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { useNavigation } from '../../state/AppContext.js';
|
|
5
|
+
const VERSION = '0.7.0';
|
|
6
|
+
const tabs = [
|
|
7
|
+
{ key: '1', label: 'Plugins', screen: 'plugins', icon: '◈' },
|
|
8
|
+
{ key: '2', label: 'MCP', screen: 'mcp', icon: '⚡' },
|
|
9
|
+
{ key: '3', label: 'Status', screen: 'statusline', icon: '◐' },
|
|
10
|
+
{ key: '4', label: 'Env', screen: 'env-vars', icon: '◉' },
|
|
11
|
+
{ key: '5', label: 'Tools', screen: 'cli-tools', icon: '⚙' },
|
|
12
|
+
];
|
|
13
|
+
export function Header() {
|
|
14
|
+
const { currentScreen } = useNavigation();
|
|
15
|
+
return (_jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: 1, children: _jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "magenta", children: "claudeup" }), _jsxs(Text, { color: "gray", children: [" v", VERSION] })] }), _jsx(Box, { children: tabs.map((tab, idx) => {
|
|
16
|
+
const isActive = currentScreen === tab.screen;
|
|
17
|
+
const isLast = idx === tabs.length - 1;
|
|
18
|
+
if (isActive) {
|
|
19
|
+
return (_jsxs(React.Fragment, { children: [_jsxs(Text, { backgroundColor: "magenta", color: "white", bold: true, children: [' ', tab.icon, " ", tab.key, ":", tab.label, ' '] }), !isLast && _jsx(Text, { color: "gray", children: " " })] }, tab.key));
|
|
20
|
+
}
|
|
21
|
+
return (_jsxs(React.Fragment, { children: [_jsxs(Text, { color: "gray", children: [tab.icon, " "] }), _jsxs(Text, { color: "white", dimColor: true, children: [tab.key, ":", tab.label] }), !isLast && _jsx(Text, { color: "gray", children: " " })] }, tab.key));
|
|
22
|
+
}) })] }) }));
|
|
23
|
+
}
|
|
24
|
+
export default Header;
|
|
25
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../src/ui/components/layout/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,OAAO,GAAG,OAAO,CAAC;AASxB,MAAM,IAAI,GAAU;IAClB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;IAC5D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;IACpD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE;IAC9D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE;IACzD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;CAC7D,CAAC;AAEF,MAAM,UAAU,MAAM;IACpB,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAAC;IAE1C,OAAO,CACL,KAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAE,CAAC,YAGX,MAAC,GAAG,IAAC,cAAc,EAAC,eAAe,aAEjC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,SAAS,yBAAgB,EAC1C,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,OAAO,IAAQ,IACjC,EAGN,KAAC,GAAG,cACD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;wBACrB,MAAM,QAAQ,GAAG,aAAa,KAAK,GAAG,CAAC,MAAM,CAAC;wBAC9C,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;wBAEvC,IAAI,QAAQ,EAAE,CAAC;4BACb,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACb,MAAC,IAAI,IAAC,eAAe,EAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAC,IAAI,mBAC/C,GAAG,EAAE,GAAG,CAAC,IAAI,OAAG,GAAG,CAAC,GAAG,OAAG,GAAG,CAAC,KAAK,EAAE,GAAG,IACpC,EACN,CAAC,MAAM,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAS,KAJpB,GAAG,CAAC,GAAG,CAKX,CAClB,CAAC;wBACJ,CAAC;wBAED,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACb,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aAAE,GAAG,CAAC,IAAI,SAAS,EACrC,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,QAAQ,mBAAE,GAAG,CAAC,GAAG,OAAG,GAAG,CAAC,KAAK,IAAQ,EACxD,CAAC,MAAM,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAU,KAHrB,GAAG,CAAC,GAAG,CAIX,CAClB,CAAC;oBACJ,CAAC,CAAC,GACE,IACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface PanelProps {
|
|
3
|
+
/** Panel title */
|
|
4
|
+
title?: string;
|
|
5
|
+
/** Panel content */
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
/** Border color */
|
|
8
|
+
borderColor?: string;
|
|
9
|
+
/** Title color */
|
|
10
|
+
titleColor?: string;
|
|
11
|
+
/** Panel width */
|
|
12
|
+
width?: number | string;
|
|
13
|
+
/** Panel height */
|
|
14
|
+
height?: number | string;
|
|
15
|
+
/** Whether to use flexGrow */
|
|
16
|
+
flexGrow?: number;
|
|
17
|
+
/** Whether panel is focused/active */
|
|
18
|
+
focused?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function Panel({ title, children, borderColor, titleColor, width, height, flexGrow, focused, }: PanelProps): React.ReactElement;
|
|
21
|
+
export default Panel;
|
|
22
|
+
//# sourceMappingURL=Panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/layout/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,UAAU;IAClB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,WAAuB,EACvB,UAAsB,EACtB,KAAK,EACL,MAAM,EACN,QAAY,EACZ,OAAe,GAChB,EAAE,UAAU,GAAG,KAAK,CAAC,YAAY,CA6BjC;AAED,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export function Panel({ title, children, borderColor = '#7e57c2', titleColor = '#7e57c2', width, height, flexGrow = 1, focused = false, }) {
|
|
4
|
+
const activeColor = focused ? '#7e57c2' : borderColor;
|
|
5
|
+
return (_jsxs(Box, { flexDirection: "column", width: width, height: height, flexGrow: flexGrow, borderStyle: "single", borderColor: activeColor, paddingX: 1, overflow: "hidden", children: [title && (_jsx(Box, { marginBottom: 0, children: _jsx(Text, { color: titleColor, bold: true, children: title }) })), _jsx(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: children })] }));
|
|
6
|
+
}
|
|
7
|
+
export default Panel;
|
|
8
|
+
//# sourceMappingURL=Panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../../../src/ui/components/layout/Panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAqBhC,MAAM,UAAU,KAAK,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,SAAS,EACvB,UAAU,GAAG,SAAS,EACtB,KAAK,EACL,MAAM,EACN,QAAQ,GAAG,CAAC,EACZ,OAAO,GAAG,KAAK,GACJ;IACX,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IAEtD,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAC,QAAQ,aAGhB,KAAK,IAAI,CACR,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,EAAE,IAAI,kBAC1B,KAAK,GACD,GACH,CACP,EAGD,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAC,QAAQ,YACvD,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ProgressBarProps {
|
|
3
|
+
/** Progress message */
|
|
4
|
+
message: string;
|
|
5
|
+
/** Current progress (if determinate) */
|
|
6
|
+
current?: number;
|
|
7
|
+
/** Total items (if determinate) */
|
|
8
|
+
total?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function ProgressBar({ message, current, total }: ProgressBarProps): React.ReactElement;
|
|
11
|
+
export default ProgressBar;
|
|
12
|
+
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/layout/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,gBAAgB;IACxB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CA4B7F;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export function ProgressBar({ message, current, total }) {
|
|
4
|
+
const isDeterminate = current !== undefined && total !== undefined && total > 0;
|
|
5
|
+
if (isDeterminate) {
|
|
6
|
+
const barWidth = 20;
|
|
7
|
+
const filled = Math.round((current / total) * barWidth);
|
|
8
|
+
const empty = barWidth - filled;
|
|
9
|
+
const bar = '█'.repeat(filled) + '░'.repeat(empty);
|
|
10
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "\u27F3" }), _jsxs(Text, { children: [" ", message, " "] }), _jsxs(Text, { color: "cyan", children: ["[", bar, "] ", current, "/", total] })] }));
|
|
11
|
+
}
|
|
12
|
+
// Indeterminate progress
|
|
13
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "\u27F3" }), _jsxs(Text, { children: [" ", message] }), _jsx(Text, { color: "gray", children: " ..." })] }));
|
|
14
|
+
}
|
|
15
|
+
export default ProgressBar;
|
|
16
|
+
//# sourceMappingURL=ProgressBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../../src/ui/components/layout/ProgressBar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAoB;IACvE,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC;IAEhF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnD,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,EAC3B,MAAC,IAAI,oBAAG,OAAO,SAAS,EACxB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBACd,GAAG,QAAI,OAAO,OAAG,KAAK,IACnB,IACH,CACP,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,EAC3B,MAAC,IAAI,oBAAG,OAAO,IAAQ,EACvB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qBAAY,IAC1B,CACP,CAAC;AACJ,CAAC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ScopeTabsProps {
|
|
3
|
+
/** Current scope */
|
|
4
|
+
scope: 'project' | 'global';
|
|
5
|
+
/** Callback when scope changes */
|
|
6
|
+
onToggle?: () => void;
|
|
7
|
+
/** Hint text for toggle key */
|
|
8
|
+
toggleHint?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function ScopeTabs({ scope, onToggle: _onToggle, toggleHint, }: ScopeTabsProps): React.ReactElement;
|
|
11
|
+
export default ScopeTabs;
|
|
12
|
+
//# sourceMappingURL=ScopeTabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeTabs.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/layout/ScopeTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,cAAc;IACtB,oBAAoB;IACpB,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EAAE,SAAS,EACnB,UAAU,GACX,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAyCrC;AAED,eAAe,SAAS,CAAC"}
|