claudeup 0.6.4 → 1.0.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/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 +747 -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
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface LoadingModalProps {
|
|
3
|
+
/** Loading message */
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function LoadingModal({ message }: LoadingModalProps): React.ReactElement;
|
|
7
|
+
export default LoadingModal;
|
|
8
|
+
//# sourceMappingURL=LoadingModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingModal.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/modals/LoadingModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,iBAAiB;IACzB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAe/E;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
export function LoadingModal({ message }) {
|
|
5
|
+
return (_jsxs(Box, { flexDirection: "row", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [_jsx(Text, { color: "cyan", children: _jsx(Spinner, { type: "dots" }) }), _jsxs(Text, { children: [" ", message] })] }));
|
|
6
|
+
}
|
|
7
|
+
export default LoadingModal;
|
|
8
|
+
//# sourceMappingURL=LoadingModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingModal.js","sourceRoot":"","sources":["../../../../src/ui/components/modals/LoadingModal.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,OAAO,MAAM,aAAa,CAAC;AAOlC,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAqB;IACzD,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,KAAK,EACnB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,aAEX,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAChB,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,GAClB,EACP,MAAC,IAAI,oBAAG,OAAO,IAAQ,IACnB,CACP,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface MessageModalProps {
|
|
3
|
+
/** Modal title */
|
|
4
|
+
title: string;
|
|
5
|
+
/** Modal message */
|
|
6
|
+
message: string;
|
|
7
|
+
/** Message variant */
|
|
8
|
+
variant: 'info' | 'success' | 'error';
|
|
9
|
+
/** Callback when dismissed */
|
|
10
|
+
onDismiss: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function MessageModal({ title, message, variant, onDismiss, }: MessageModalProps): React.ReactElement;
|
|
13
|
+
export default MessageModal;
|
|
14
|
+
//# sourceMappingURL=MessageModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageModal.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/modals/MessageModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,iBAAiB;IACzB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,8BAA8B;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAQD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CA+BxC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from 'ink';
|
|
3
|
+
const variantConfig = {
|
|
4
|
+
info: { icon: 'ℹ', color: 'cyan' },
|
|
5
|
+
success: { icon: '✓', color: 'green' },
|
|
6
|
+
error: { icon: '✗', color: 'red' },
|
|
7
|
+
};
|
|
8
|
+
export function MessageModal({ title, message, variant, onDismiss, }) {
|
|
9
|
+
const config = variantConfig[variant];
|
|
10
|
+
useInput(() => {
|
|
11
|
+
// Any key dismisses
|
|
12
|
+
onDismiss();
|
|
13
|
+
});
|
|
14
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: config.color, paddingX: 2, paddingY: 1, width: 60, children: [_jsxs(Box, { children: [_jsx(Text, { color: config.color, children: config.icon }), _jsxs(Text, { bold: true, children: [" ", title] })] }), _jsx(Box, { marginY: 1, children: _jsx(Text, { children: message }) }), _jsx(Box, { children: _jsx(Text, { color: "gray", children: "Press any key to continue" }) })] }));
|
|
15
|
+
}
|
|
16
|
+
export default MessageModal;
|
|
17
|
+
//# sourceMappingURL=MessageModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageModal.js","sourceRoot":"","sources":["../../../../src/ui/components/modals/MessageModal.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAa1C,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;IACtC,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;CAC1B,CAAC;AAEX,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,EACP,OAAO,EACP,SAAS,GACS;IAClB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAEtC,QAAQ,CAAC,GAAG,EAAE;QACZ,oBAAoB;QACpB,SAAS,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,MAAM,CAAC,KAAK,EACzB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,EAAE,aAET,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,MAAM,CAAC,IAAI,GAAQ,EAC/C,MAAC,IAAI,IAAC,IAAI,wBAAG,KAAK,IAAQ,IACtB,EAEN,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,KAAC,IAAI,cAAE,OAAO,GAAQ,GAClB,EAEN,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0CAAiC,GAC/C,IACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalContainer.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/modals/ModalContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B;;GAEG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAAC,YAAY,GAAG,IAAI,CAwE1D;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box } from 'ink';
|
|
3
|
+
import { useApp } from '../../state/AppContext.js';
|
|
4
|
+
import { ConfirmModal } from './ConfirmModal.js';
|
|
5
|
+
import { InputModal } from './InputModal.js';
|
|
6
|
+
import { SelectModal } from './SelectModal.js';
|
|
7
|
+
import { MessageModal } from './MessageModal.js';
|
|
8
|
+
import { LoadingModal } from './LoadingModal.js';
|
|
9
|
+
/**
|
|
10
|
+
* Container that renders the active modal as an overlay
|
|
11
|
+
*/
|
|
12
|
+
export function ModalContainer() {
|
|
13
|
+
const { state } = useApp();
|
|
14
|
+
const { modal } = state;
|
|
15
|
+
if (!modal) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const renderModal = () => {
|
|
19
|
+
switch (modal.type) {
|
|
20
|
+
case 'confirm':
|
|
21
|
+
return (_jsx(ConfirmModal, { title: modal.title, message: modal.message, onConfirm: modal.onConfirm, onCancel: modal.onCancel }));
|
|
22
|
+
case 'input':
|
|
23
|
+
return (_jsx(InputModal, { title: modal.title, label: modal.label, defaultValue: modal.defaultValue, onSubmit: modal.onSubmit, onCancel: modal.onCancel }));
|
|
24
|
+
case 'select':
|
|
25
|
+
return (_jsx(SelectModal, { title: modal.title, message: modal.message, options: modal.options, onSelect: modal.onSelect, onCancel: modal.onCancel }));
|
|
26
|
+
case 'message':
|
|
27
|
+
return (_jsx(MessageModal, { title: modal.title, message: modal.message, variant: modal.variant, onDismiss: modal.onDismiss }));
|
|
28
|
+
case 'loading':
|
|
29
|
+
return _jsx(LoadingModal, { message: modal.message });
|
|
30
|
+
default:
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
// Center the modal on screen
|
|
35
|
+
return (_jsx(Box, { position: "absolute", width: "100%", height: "100%", justifyContent: "center", alignItems: "center", children: renderModal() }));
|
|
36
|
+
}
|
|
37
|
+
export default ModalContainer;
|
|
38
|
+
//# sourceMappingURL=ModalContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalContainer.js","sourceRoot":"","sources":["../../../../src/ui/components/modals/ModalContainer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAExB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS;gBACZ,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACxB,CACH,CAAC;YAEJ,KAAK,OAAO;gBACV,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACxB,CACH,CAAC;YAEJ,KAAK,QAAQ;gBACX,OAAO,CACL,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACxB,CACH,CAAC;YAEJ,KAAK,SAAS;gBACZ,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,SAAS,EAAE,KAAK,CAAC,SAAS,GAC1B,CACH,CAAC;YAEJ,KAAK,SAAS;gBACZ,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;YAElD;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,6BAA6B;IAC7B,OAAO,CACL,KAAC,GAAG,IACF,QAAQ,EAAC,UAAU,EACnB,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,cAAc,EAAC,QAAQ,EACvB,UAAU,EAAC,QAAQ,YAElB,WAAW,EAAE,GACV,CACP,CAAC;AACJ,CAAC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SelectOption } from '../../state/types.js';
|
|
3
|
+
interface SelectModalProps {
|
|
4
|
+
/** Modal title */
|
|
5
|
+
title: string;
|
|
6
|
+
/** Modal message */
|
|
7
|
+
message: string;
|
|
8
|
+
/** Select options */
|
|
9
|
+
options: SelectOption[];
|
|
10
|
+
/** Callback when option selected */
|
|
11
|
+
onSelect: (value: string) => void;
|
|
12
|
+
/** Callback when cancelled */
|
|
13
|
+
onCancel: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function SelectModal({ title, message, options, onSelect, onCancel, }: SelectModalProps): React.ReactElement;
|
|
16
|
+
export default SelectModal;
|
|
17
|
+
//# sourceMappingURL=SelectModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectModal.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/modals/SelectModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,UAAU,gBAAgB;IACxB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,oCAAoC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CA+DvC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
export function SelectModal({ title, message, options, onSelect, onCancel, }) {
|
|
5
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
6
|
+
useInput((input, key) => {
|
|
7
|
+
if (key.return) {
|
|
8
|
+
onSelect(options[selectedIndex].value);
|
|
9
|
+
}
|
|
10
|
+
else if (key.escape || input === 'q') {
|
|
11
|
+
onCancel();
|
|
12
|
+
}
|
|
13
|
+
else if (key.upArrow || input === 'k') {
|
|
14
|
+
setSelectedIndex((prev) => Math.max(0, prev - 1));
|
|
15
|
+
}
|
|
16
|
+
else if (key.downArrow || input === 'j') {
|
|
17
|
+
setSelectedIndex((prev) => Math.min(options.length - 1, prev + 1));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
// Height: top padding(1) + title(1) + spacing(2) + message(1) + spacing(1) + options + spacing(1) + footer(1) + bottom padding(1) + border(2)
|
|
21
|
+
const boxHeight = options.length + 11;
|
|
22
|
+
const innerWidth = 46; // 50 - 2 (paddingX) - 2 (border)
|
|
23
|
+
// Create background fill for each line
|
|
24
|
+
const bgFill = ' '.repeat(innerWidth);
|
|
25
|
+
const bg = '#1a1a1a';
|
|
26
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, width: 50, height: boxHeight, children: [_jsx(Text, { backgroundColor: bg, children: bgFill }), _jsx(Text, { bold: true, backgroundColor: bg, children: ` ${title}`.padEnd(innerWidth) }), _jsx(Text, { backgroundColor: bg, children: bgFill }), _jsx(Text, { backgroundColor: bg, children: ` ${message}`.padEnd(innerWidth) }), _jsx(Text, { backgroundColor: bg, children: bgFill }), options.map((option, idx) => {
|
|
27
|
+
const isSelected = idx === selectedIndex;
|
|
28
|
+
const label = isSelected ? ` > ${option.label}` : ` ${option.label}`;
|
|
29
|
+
return (_jsx(Text, { backgroundColor: bg, color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: label.padEnd(innerWidth) }, option.value));
|
|
30
|
+
}), _jsx(Text, { backgroundColor: bg, children: bgFill }), _jsx(Text, { color: "gray", backgroundColor: bg, children: ' ↑↓ Select • Enter • Esc'.padEnd(innerWidth) }), _jsx(Text, { backgroundColor: bg, children: bgFill })] }));
|
|
31
|
+
}
|
|
32
|
+
export default SelectModal;
|
|
33
|
+
//# sourceMappingURL=SelectModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectModal.js","sourceRoot":"","sources":["../../../../src/ui/components/modals/SelectModal.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAgB1C,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,GACS;IACjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACvC,QAAQ,EAAE,CAAC;QACb,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACxC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC1C,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,8IAA8I;IAC9I,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,iCAAiC;IAExD,uCAAuC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,SAAS,CAAC;IAErB,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,SAAS,aAGjB,KAAC,IAAI,IAAC,eAAe,EAAE,EAAE,YAAG,MAAM,GAAQ,EAE1C,KAAC,IAAI,IAAC,IAAI,QAAC,eAAe,EAAE,EAAE,YAAG,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAQ,EAEvE,KAAC,IAAI,IAAC,eAAe,EAAE,EAAE,YAAG,MAAM,GAAQ,EAC1C,KAAC,IAAI,IAAC,eAAe,EAAE,EAAE,YAAG,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAQ,EACpE,KAAC,IAAI,IAAC,eAAe,EAAE,EAAE,YAAG,MAAM,GAAQ,EAEzC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,MAAM,UAAU,GAAG,GAAG,KAAK,aAAa,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvE,OAAO,CACL,KAAC,IAAI,IAEH,eAAe,EAAE,EAAE,EACnB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EACnC,IAAI,EAAE,UAAU,YAEf,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IALpB,MAAM,CAAC,KAAK,CAMZ,CACR,CAAC;YACJ,CAAC,CAAC,EAEF,KAAC,IAAI,IAAC,eAAe,EAAE,EAAE,YAAG,MAAM,GAAQ,EAC1C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,eAAe,EAAE,EAAE,YAAG,0BAA0B,CAAC,MAAM,CAAC,UAAU,CAAC,GAAQ,EAG9F,KAAC,IAAI,IAAC,eAAe,EAAE,EAAE,YAAG,MAAM,GAAQ,IACtC,CACP,CAAC;AACJ,CAAC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ConfirmModal } from './ConfirmModal.js';
|
|
2
|
+
export { InputModal } from './InputModal.js';
|
|
3
|
+
export { SelectModal } from './SelectModal.js';
|
|
4
|
+
export { MessageModal } from './MessageModal.js';
|
|
5
|
+
export { LoadingModal } from './LoadingModal.js';
|
|
6
|
+
export { ModalContainer } from './ModalContainer.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/modals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ConfirmModal } from './ConfirmModal.js';
|
|
2
|
+
export { InputModal } from './InputModal.js';
|
|
3
|
+
export { SelectModal } from './SelectModal.js';
|
|
4
|
+
export { MessageModal } from './MessageModal.js';
|
|
5
|
+
export { LoadingModal } from './LoadingModal.js';
|
|
6
|
+
export { ModalContainer } from './ModalContainer.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ui/components/modals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AsyncData } from '../state/types.js';
|
|
2
|
+
interface UseAsyncDataOptions<T> {
|
|
3
|
+
/** Function that fetches data */
|
|
4
|
+
fetcher: () => Promise<T>;
|
|
5
|
+
/** Dependencies that trigger refetch when changed */
|
|
6
|
+
deps?: unknown[];
|
|
7
|
+
/** Whether to fetch immediately on mount */
|
|
8
|
+
immediate?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface UseAsyncDataResult<T> {
|
|
11
|
+
/** Current async data state */
|
|
12
|
+
data: AsyncData<T>;
|
|
13
|
+
/** Whether data is currently loading */
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
/** Whether data has been successfully loaded */
|
|
16
|
+
isSuccess: boolean;
|
|
17
|
+
/** Whether there was an error loading data */
|
|
18
|
+
isError: boolean;
|
|
19
|
+
/** Error if any */
|
|
20
|
+
error: Error | null;
|
|
21
|
+
/** Trigger a manual refetch */
|
|
22
|
+
refetch: () => Promise<void>;
|
|
23
|
+
/** Raw data if available */
|
|
24
|
+
value: T | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Hook for fetching async data with loading/error states
|
|
28
|
+
*/
|
|
29
|
+
export declare function useAsyncData<T>({ fetcher, deps, immediate, }: UseAsyncDataOptions<T>): UseAsyncDataResult<T>;
|
|
30
|
+
/**
|
|
31
|
+
* Hook for fetching async data with debounced query
|
|
32
|
+
*/
|
|
33
|
+
export declare function useDebouncedAsyncData<T>({ fetcher, query, debounceMs, minQueryLength, }: {
|
|
34
|
+
fetcher: (query: string) => Promise<T>;
|
|
35
|
+
query: string;
|
|
36
|
+
debounceMs?: number;
|
|
37
|
+
minQueryLength?: number;
|
|
38
|
+
}): UseAsyncDataResult<T>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=useAsyncData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAsyncData.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useAsyncData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,UAAU,mBAAmB,CAAC,CAAC;IAC7B,iCAAiC;IACjC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,qDAAqD;IACrD,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,kBAAkB,CAAC,CAAC;IAC5B,+BAA+B;IAC/B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACnB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,4BAA4B;IAC5B,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAC9B,OAAO,EACP,IAAS,EACT,SAAgB,GACjB,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAgChD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,EACvC,OAAO,EACP,KAAK,EACL,UAAgB,EAChB,cAAkB,GACnB,EAAE;IACD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,kBAAkB,CAAC,CAAC,CAAC,CA2CxB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Hook for fetching async data with loading/error states
|
|
4
|
+
*/
|
|
5
|
+
export function useAsyncData({ fetcher, deps = [], immediate = true, }) {
|
|
6
|
+
const [data, setData] = useState({ status: 'idle' });
|
|
7
|
+
const refetch = useCallback(async () => {
|
|
8
|
+
setData({ status: 'loading' });
|
|
9
|
+
try {
|
|
10
|
+
const result = await fetcher();
|
|
11
|
+
setData({ status: 'success', data: result });
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
setData({
|
|
15
|
+
status: 'error',
|
|
16
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}, [fetcher]);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (immediate) {
|
|
22
|
+
refetch();
|
|
23
|
+
}
|
|
24
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
|
+
}, deps);
|
|
26
|
+
return {
|
|
27
|
+
data,
|
|
28
|
+
isLoading: data.status === 'loading',
|
|
29
|
+
isSuccess: data.status === 'success',
|
|
30
|
+
isError: data.status === 'error',
|
|
31
|
+
error: data.status === 'error' ? data.error : null,
|
|
32
|
+
refetch,
|
|
33
|
+
value: data.status === 'success' ? data.data : null,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Hook for fetching async data with debounced query
|
|
38
|
+
*/
|
|
39
|
+
export function useDebouncedAsyncData({ fetcher, query, debounceMs = 300, minQueryLength = 1, }) {
|
|
40
|
+
const [data, setData] = useState({ status: 'idle' });
|
|
41
|
+
const refetch = useCallback(async () => {
|
|
42
|
+
if (query.length < minQueryLength) {
|
|
43
|
+
setData({ status: 'idle' });
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
setData({ status: 'loading' });
|
|
47
|
+
try {
|
|
48
|
+
const result = await fetcher(query);
|
|
49
|
+
setData({ status: 'success', data: result });
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
setData({
|
|
53
|
+
status: 'error',
|
|
54
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}, [fetcher, query, minQueryLength]);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (query.length < minQueryLength) {
|
|
60
|
+
setData({ status: 'idle' });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const timeoutId = setTimeout(() => {
|
|
64
|
+
refetch();
|
|
65
|
+
}, debounceMs);
|
|
66
|
+
return () => clearTimeout(timeoutId);
|
|
67
|
+
}, [query, debounceMs, minQueryLength, refetch]);
|
|
68
|
+
return {
|
|
69
|
+
data,
|
|
70
|
+
isLoading: data.status === 'loading',
|
|
71
|
+
isSuccess: data.status === 'success',
|
|
72
|
+
isError: data.status === 'error',
|
|
73
|
+
error: data.status === 'error' ? data.error : null,
|
|
74
|
+
refetch,
|
|
75
|
+
value: data.status === 'success' ? data.data : null,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=useAsyncData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAsyncData.js","sourceRoot":"","sources":["../../../src/ui/hooks/useAsyncData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
interface KeyboardOptions {
|
|
2
|
+
/** Total number of items in the list */
|
|
3
|
+
itemCount: number;
|
|
4
|
+
/** Current selected index */
|
|
5
|
+
selectedIndex: number;
|
|
6
|
+
/** Callback to update selected index */
|
|
7
|
+
onSelect: (index: number) => void;
|
|
8
|
+
/** Callback when Enter is pressed on selected item */
|
|
9
|
+
onEnter?: (index: number) => void;
|
|
10
|
+
/** Callback when Escape/q is pressed */
|
|
11
|
+
onBack?: () => void;
|
|
12
|
+
/** Callback for custom key handlers */
|
|
13
|
+
customKeys?: Record<string, () => void>;
|
|
14
|
+
/** Disabled keyboard input (e.g., during modal) */
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Hook for handling keyboard navigation in lists
|
|
19
|
+
* Provides j/k/up/down for navigation, Enter for selection, Escape/q for back
|
|
20
|
+
*/
|
|
21
|
+
export declare function useKeyboardNavigation({ itemCount, selectedIndex, onSelect, onEnter, onBack, customKeys, disabled, }: KeyboardOptions): void;
|
|
22
|
+
/**
|
|
23
|
+
* Hook for global keyboard shortcuts (screen navigation)
|
|
24
|
+
*/
|
|
25
|
+
export declare function useGlobalKeyboard(): void;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=useKeyboardNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardNavigation.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useKeyboardNavigation.ts"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,sDAAsD;IACtD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IACxC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,aAAa,EACb,QAAQ,EACR,OAAO,EACP,MAAM,EACN,UAAe,EACf,QAAgB,GACjB,EAAE,eAAe,GAAG,IAAI,CA4CxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAmCxC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { useInput, useApp as useInkApp } from 'ink';
|
|
2
|
+
import { useApp, useNavigation } from '../state/AppContext.js';
|
|
3
|
+
/**
|
|
4
|
+
* Hook for handling keyboard navigation in lists
|
|
5
|
+
* Provides j/k/up/down for navigation, Enter for selection, Escape/q for back
|
|
6
|
+
*/
|
|
7
|
+
export function useKeyboardNavigation({ itemCount, selectedIndex, onSelect, onEnter, onBack, customKeys = {}, disabled = false, }) {
|
|
8
|
+
const { state } = useApp();
|
|
9
|
+
const { exit } = useInkApp();
|
|
10
|
+
useInput((input, key) => {
|
|
11
|
+
// Don't handle input when disabled or modal is open
|
|
12
|
+
if (disabled || state.isSearching)
|
|
13
|
+
return;
|
|
14
|
+
// Navigation: up/down or j/k
|
|
15
|
+
if (key.upArrow || input === 'k') {
|
|
16
|
+
const newIndex = Math.max(0, selectedIndex - 1);
|
|
17
|
+
if (newIndex !== selectedIndex) {
|
|
18
|
+
onSelect(newIndex);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else if (key.downArrow || input === 'j') {
|
|
22
|
+
const newIndex = Math.min(itemCount - 1, selectedIndex + 1);
|
|
23
|
+
if (newIndex !== selectedIndex) {
|
|
24
|
+
onSelect(newIndex);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Selection: Enter
|
|
28
|
+
else if (key.return && onEnter) {
|
|
29
|
+
onEnter(selectedIndex);
|
|
30
|
+
}
|
|
31
|
+
// Back: Escape or q
|
|
32
|
+
else if ((key.escape || input === 'q') && onBack) {
|
|
33
|
+
onBack();
|
|
34
|
+
}
|
|
35
|
+
// Exit: Ctrl+C
|
|
36
|
+
else if (key.ctrl && input === 'c') {
|
|
37
|
+
exit();
|
|
38
|
+
}
|
|
39
|
+
// Custom keys
|
|
40
|
+
else if (input && customKeys[input]) {
|
|
41
|
+
customKeys[input]();
|
|
42
|
+
}
|
|
43
|
+
}, { isActive: !disabled });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Hook for global keyboard shortcuts (screen navigation)
|
|
47
|
+
*/
|
|
48
|
+
export function useGlobalKeyboard() {
|
|
49
|
+
const { state } = useApp();
|
|
50
|
+
const { navigateToScreen, currentScreen } = useNavigation();
|
|
51
|
+
const { exit } = useInkApp();
|
|
52
|
+
useInput((input, key) => {
|
|
53
|
+
// Don't handle input when modal is open
|
|
54
|
+
if (state.isSearching)
|
|
55
|
+
return;
|
|
56
|
+
// Number keys for quick navigation
|
|
57
|
+
if (input === '1') {
|
|
58
|
+
navigateToScreen('plugins');
|
|
59
|
+
}
|
|
60
|
+
else if (input === '2') {
|
|
61
|
+
navigateToScreen('mcp');
|
|
62
|
+
}
|
|
63
|
+
else if (input === '3') {
|
|
64
|
+
navigateToScreen('statusline');
|
|
65
|
+
}
|
|
66
|
+
else if (input === '4') {
|
|
67
|
+
navigateToScreen('env-vars');
|
|
68
|
+
}
|
|
69
|
+
else if (input === '5') {
|
|
70
|
+
navigateToScreen('cli-tools');
|
|
71
|
+
}
|
|
72
|
+
// Exit on Ctrl+C
|
|
73
|
+
else if (key.ctrl && input === 'c') {
|
|
74
|
+
exit();
|
|
75
|
+
}
|
|
76
|
+
// Quit on q only from home screen (plugins)
|
|
77
|
+
else if (input === 'q' && currentScreen === 'plugins') {
|
|
78
|
+
exit();
|
|
79
|
+
}
|
|
80
|
+
}, { isActive: true });
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=useKeyboardNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardNavigation.js","sourceRoot":"","sources":["../../../src/ui/hooks/useKeyboardNavigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliToolsScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/CliToolsScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAoGxE,wBAAgB,cAAc,IAAI,KAAK,CAAC,YAAY,CA8SnD;AAED,eAAe,cAAc,CAAC"}
|