@fnd-platform/cli 1.0.0-alpha.3 → 1.0.0-alpha.31
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/LICENSE +21 -0
- package/lib/bin/fnd.js +101 -4
- package/lib/bin/fnd.js.map +1 -1
- package/lib/commands/add.d.ts.map +1 -1
- package/lib/commands/add.js +134 -67
- package/lib/commands/add.js.map +1 -1
- package/lib/commands/build.js +29 -34
- package/lib/commands/build.js.map +1 -1
- package/lib/commands/deploy.d.ts +34 -9
- package/lib/commands/deploy.d.ts.map +1 -1
- package/lib/commands/deploy.js +246 -52
- package/lib/commands/deploy.js.map +1 -1
- package/lib/commands/destroy.d.ts +69 -0
- package/lib/commands/destroy.d.ts.map +1 -0
- package/lib/commands/destroy.js +172 -0
- package/lib/commands/destroy.js.map +1 -0
- package/lib/commands/index.d.ts +2 -0
- package/lib/commands/index.d.ts.map +1 -1
- package/lib/commands/index.js +7 -13
- package/lib/commands/index.js.map +1 -1
- package/lib/commands/new.js +46 -50
- package/lib/commands/new.js.map +1 -1
- package/lib/commands/synth.d.ts +8 -1
- package/lib/commands/synth.d.ts.map +1 -1
- package/lib/commands/synth.js +82 -22
- package/lib/commands/synth.js.map +1 -1
- package/lib/commands/test.d.ts +73 -0
- package/lib/commands/test.d.ts.map +1 -0
- package/lib/commands/test.js +193 -0
- package/lib/commands/test.js.map +1 -0
- package/lib/index.d.ts +11 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +31 -15
- package/lib/index.js.map +1 -1
- package/lib/lib/deploy-utils.d.ts +190 -0
- package/lib/lib/deploy-utils.d.ts.map +1 -0
- package/lib/lib/deploy-utils.js +372 -0
- package/lib/lib/deploy-utils.js.map +1 -0
- package/lib/lib/infra-generator.d.ts +118 -0
- package/lib/lib/infra-generator.d.ts.map +1 -1
- package/lib/lib/infra-generator.js +1051 -59
- package/lib/lib/infra-generator.js.map +1 -1
- package/lib/lib/logger.js +23 -29
- package/lib/lib/logger.js.map +1 -1
- package/lib/lib/nx-stats.js +12 -18
- package/lib/lib/nx-stats.js.map +1 -1
- package/lib/lib/project.js +7 -11
- package/lib/lib/project.js.map +1 -1
- package/lib/lib/templates.js +2 -6
- package/lib/lib/templates.js.map +1 -1
- package/lib/lib/timer.js +2 -7
- package/lib/lib/timer.js.map +1 -1
- package/lib/lib/validation.d.ts +135 -0
- package/lib/lib/validation.d.ts.map +1 -0
- package/lib/lib/validation.js +233 -0
- package/lib/lib/validation.js.map +1 -0
- package/lib/tui/App.d.ts +11 -0
- package/lib/tui/App.d.ts.map +1 -0
- package/lib/tui/App.js +98 -0
- package/lib/tui/App.js.map +1 -0
- package/lib/tui/components/branding/AsciiBanner.d.ts +21 -0
- package/lib/tui/components/branding/AsciiBanner.d.ts.map +1 -0
- package/lib/tui/components/branding/AsciiBanner.js +15 -0
- package/lib/tui/components/branding/AsciiBanner.js.map +1 -0
- package/lib/tui/components/branding/index.d.ts +5 -0
- package/lib/tui/components/branding/index.d.ts.map +1 -0
- package/lib/tui/components/branding/index.js +5 -0
- package/lib/tui/components/branding/index.js.map +1 -0
- package/lib/tui/components/feedback/Notification.d.ts +51 -0
- package/lib/tui/components/feedback/Notification.d.ts.map +1 -0
- package/lib/tui/components/feedback/Notification.js +89 -0
- package/lib/tui/components/feedback/Notification.js.map +1 -0
- package/lib/tui/components/feedback/ProgressBar.d.ts +46 -0
- package/lib/tui/components/feedback/ProgressBar.d.ts.map +1 -0
- package/lib/tui/components/feedback/ProgressBar.js +30 -0
- package/lib/tui/components/feedback/ProgressBar.js.map +1 -0
- package/lib/tui/components/feedback/ProgressSteps.d.ts +35 -0
- package/lib/tui/components/feedback/ProgressSteps.d.ts.map +1 -0
- package/lib/tui/components/feedback/ProgressSteps.js +37 -0
- package/lib/tui/components/feedback/ProgressSteps.js.map +1 -0
- package/lib/tui/components/feedback/Spinner.d.ts +18 -0
- package/lib/tui/components/feedback/Spinner.d.ts.map +1 -0
- package/lib/tui/components/feedback/Spinner.js +28 -0
- package/lib/tui/components/feedback/Spinner.js.map +1 -0
- package/lib/tui/components/feedback/index.d.ts +8 -0
- package/lib/tui/components/feedback/index.d.ts.map +1 -0
- package/lib/tui/components/feedback/index.js +8 -0
- package/lib/tui/components/feedback/index.js.map +1 -0
- package/lib/tui/components/index.d.ts +8 -0
- package/lib/tui/components/index.d.ts.map +1 -0
- package/lib/tui/components/index.js +8 -0
- package/lib/tui/components/index.js.map +1 -0
- package/lib/tui/components/input/Checkbox.d.ts +26 -0
- package/lib/tui/components/input/Checkbox.d.ts.map +1 -0
- package/lib/tui/components/input/Checkbox.js +20 -0
- package/lib/tui/components/input/Checkbox.js.map +1 -0
- package/lib/tui/components/input/SelectInput.d.ts +41 -0
- package/lib/tui/components/input/SelectInput.d.ts.map +1 -0
- package/lib/tui/components/input/SelectInput.js +53 -0
- package/lib/tui/components/input/SelectInput.js.map +1 -0
- package/lib/tui/components/input/TextInput.d.ts +30 -0
- package/lib/tui/components/input/TextInput.d.ts.map +1 -0
- package/lib/tui/components/input/TextInput.js +48 -0
- package/lib/tui/components/input/TextInput.js.map +1 -0
- package/lib/tui/components/input/index.d.ts +7 -0
- package/lib/tui/components/input/index.d.ts.map +1 -0
- package/lib/tui/components/input/index.js +7 -0
- package/lib/tui/components/input/index.js.map +1 -0
- package/lib/tui/components/layout/Breadcrumbs.d.ts +11 -0
- package/lib/tui/components/layout/Breadcrumbs.d.ts.map +1 -0
- package/lib/tui/components/layout/Breadcrumbs.js +34 -0
- package/lib/tui/components/layout/Breadcrumbs.js.map +1 -0
- package/lib/tui/components/layout/Footer.d.ts +11 -0
- package/lib/tui/components/layout/Footer.d.ts.map +1 -0
- package/lib/tui/components/layout/Footer.js +20 -0
- package/lib/tui/components/layout/Footer.js.map +1 -0
- package/lib/tui/components/layout/Header.d.ts +21 -0
- package/lib/tui/components/layout/Header.d.ts.map +1 -0
- package/lib/tui/components/layout/Header.js +21 -0
- package/lib/tui/components/layout/Header.js.map +1 -0
- package/lib/tui/components/layout/Screen.d.ts +27 -0
- package/lib/tui/components/layout/Screen.d.ts.map +1 -0
- package/lib/tui/components/layout/Screen.js +11 -0
- package/lib/tui/components/layout/Screen.js.map +1 -0
- package/lib/tui/components/layout/index.d.ts +8 -0
- package/lib/tui/components/layout/index.d.ts.map +1 -0
- package/lib/tui/components/layout/index.js +8 -0
- package/lib/tui/components/layout/index.js.map +1 -0
- package/lib/tui/hooks/index.d.ts +20 -0
- package/lib/tui/hooks/index.d.ts.map +1 -0
- package/lib/tui/hooks/index.js +18 -0
- package/lib/tui/hooks/index.js.map +1 -0
- package/lib/tui/hooks/useAddPackage.d.ts +120 -0
- package/lib/tui/hooks/useAddPackage.d.ts.map +1 -0
- package/lib/tui/hooks/useAddPackage.js +357 -0
- package/lib/tui/hooks/useAddPackage.js.map +1 -0
- package/lib/tui/hooks/useCreateProject.d.ts +66 -0
- package/lib/tui/hooks/useCreateProject.d.ts.map +1 -0
- package/lib/tui/hooks/useCreateProject.js +158 -0
- package/lib/tui/hooks/useCreateProject.js.map +1 -0
- package/lib/tui/hooks/useDeploy.d.ts +93 -0
- package/lib/tui/hooks/useDeploy.d.ts.map +1 -0
- package/lib/tui/hooks/useDeploy.js +254 -0
- package/lib/tui/hooks/useDeploy.js.map +1 -0
- package/lib/tui/hooks/useKeyboard.d.ts +66 -0
- package/lib/tui/hooks/useKeyboard.d.ts.map +1 -0
- package/lib/tui/hooks/useKeyboard.js +102 -0
- package/lib/tui/hooks/useKeyboard.js.map +1 -0
- package/lib/tui/hooks/useNavigation.d.ts +33 -0
- package/lib/tui/hooks/useNavigation.d.ts.map +1 -0
- package/lib/tui/hooks/useNavigation.js +27 -0
- package/lib/tui/hooks/useNavigation.js.map +1 -0
- package/lib/tui/hooks/useProject.d.ts +36 -0
- package/lib/tui/hooks/useProject.d.ts.map +1 -0
- package/lib/tui/hooks/useProject.js +47 -0
- package/lib/tui/hooks/useProject.js.map +1 -0
- package/lib/tui/index.d.ts +15 -0
- package/lib/tui/index.d.ts.map +1 -0
- package/lib/tui/index.js +16 -0
- package/lib/tui/index.js.map +1 -0
- package/lib/tui/lib/add-package-tui.d.ts +130 -0
- package/lib/tui/lib/add-package-tui.d.ts.map +1 -0
- package/lib/tui/lib/add-package-tui.js +492 -0
- package/lib/tui/lib/add-package-tui.js.map +1 -0
- package/lib/tui/lib/create-project-tui.d.ts +92 -0
- package/lib/tui/lib/create-project-tui.d.ts.map +1 -0
- package/lib/tui/lib/create-project-tui.js +181 -0
- package/lib/tui/lib/create-project-tui.js.map +1 -0
- package/lib/tui/lib/deploy-tui.d.ts +131 -0
- package/lib/tui/lib/deploy-tui.d.ts.map +1 -0
- package/lib/tui/lib/deploy-tui.js +347 -0
- package/lib/tui/lib/deploy-tui.js.map +1 -0
- package/lib/tui/screens/AddPackageScreen.d.ts +12 -0
- package/lib/tui/screens/AddPackageScreen.d.ts.map +1 -0
- package/lib/tui/screens/AddPackageScreen.js +436 -0
- package/lib/tui/screens/AddPackageScreen.js.map +1 -0
- package/lib/tui/screens/CreateProjectScreen.d.ts +12 -0
- package/lib/tui/screens/CreateProjectScreen.d.ts.map +1 -0
- package/lib/tui/screens/CreateProjectScreen.js +261 -0
- package/lib/tui/screens/CreateProjectScreen.js.map +1 -0
- package/lib/tui/screens/DeployScreen.d.ts +11 -0
- package/lib/tui/screens/DeployScreen.d.ts.map +1 -0
- package/lib/tui/screens/DeployScreen.js +224 -0
- package/lib/tui/screens/DeployScreen.js.map +1 -0
- package/lib/tui/screens/ProjectDashboard.d.ts +11 -0
- package/lib/tui/screens/ProjectDashboard.d.ts.map +1 -0
- package/lib/tui/screens/ProjectDashboard.js +81 -0
- package/lib/tui/screens/ProjectDashboard.js.map +1 -0
- package/lib/tui/screens/WelcomeScreen.d.ts +11 -0
- package/lib/tui/screens/WelcomeScreen.d.ts.map +1 -0
- package/lib/tui/screens/WelcomeScreen.js +26 -0
- package/lib/tui/screens/WelcomeScreen.js.map +1 -0
- package/lib/tui/screens/index.d.ts +9 -0
- package/lib/tui/screens/index.d.ts.map +1 -0
- package/lib/tui/screens/index.js +9 -0
- package/lib/tui/screens/index.js.map +1 -0
- package/lib/tui/services/ConfigService.d.ts +133 -0
- package/lib/tui/services/ConfigService.d.ts.map +1 -0
- package/lib/tui/services/ConfigService.js +221 -0
- package/lib/tui/services/ConfigService.js.map +1 -0
- package/lib/tui/services/ProjectService.d.ts +55 -0
- package/lib/tui/services/ProjectService.d.ts.map +1 -0
- package/lib/tui/services/ProjectService.js +179 -0
- package/lib/tui/services/ProjectService.js.map +1 -0
- package/lib/tui/services/index.d.ts +6 -0
- package/lib/tui/services/index.d.ts.map +1 -0
- package/lib/tui/services/index.js +6 -0
- package/lib/tui/services/index.js.map +1 -0
- package/lib/tui/state/AppContext.d.ts +58 -0
- package/lib/tui/state/AppContext.d.ts.map +1 -0
- package/lib/tui/state/AppContext.js +75 -0
- package/lib/tui/state/AppContext.js.map +1 -0
- package/lib/tui/state/index.d.ts +7 -0
- package/lib/tui/state/index.d.ts.map +1 -0
- package/lib/tui/state/index.js +7 -0
- package/lib/tui/state/index.js.map +1 -0
- package/lib/tui/state/reducer.d.ts +13 -0
- package/lib/tui/state/reducer.d.ts.map +1 -0
- package/lib/tui/state/reducer.js +136 -0
- package/lib/tui/state/reducer.js.map +1 -0
- package/lib/tui/state/types.d.ts +132 -0
- package/lib/tui/state/types.d.ts.map +1 -0
- package/lib/tui/state/types.js +38 -0
- package/lib/tui/state/types.js.map +1 -0
- package/lib/tui/utils/ascii.d.ts +42 -0
- package/lib/tui/utils/ascii.d.ts.map +1 -0
- package/lib/tui/utils/ascii.js +63 -0
- package/lib/tui/utils/ascii.js.map +1 -0
- package/lib/tui/utils/colors.d.ts +65 -0
- package/lib/tui/utils/colors.d.ts.map +1 -0
- package/lib/tui/utils/colors.js +65 -0
- package/lib/tui/utils/colors.js.map +1 -0
- package/lib/tui/utils/index.d.ts +6 -0
- package/lib/tui/utils/index.d.ts.map +1 -0
- package/lib/tui/utils/index.js +6 -0
- package/lib/tui/utils/index.js.map +1 -0
- package/package.json +23 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../../src/tui/components/feedback/ProgressBar.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA0B/C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,KAAK,GAAG,EAAE,EACV,KAAK,EACL,cAAc,GAAG,KAAK,EACtB,QAAQ,GAAG,GAAG,EACd,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,MAAM,CAAC,OAAO,EAC1B,UAAU,GAAG,MAAM,CAAC,KAAK,GACR;IACjB,qBAAqB;IACrB,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,KAAK,GAAG,WAAW,CAAC;IAEvC,8BAA8B;IAC9B,MAAM,YAAY,GAAG,cAAc;QACjC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG;QACpC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;IAExB,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,oBAAS,EACd,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,YAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAQ,EAC7D,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,YAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,GAAQ,EAC9D,KAAC,IAAI,oBAAS,EACd,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,kBAAI,YAAY,IAAQ,EAChD,KAAK,IAAI,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,kBAAI,KAAK,IAAQ,IAChD,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress steps component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Displays a vertical list of progress steps with status indicators.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Status of a progress step.
|
|
9
|
+
*/
|
|
10
|
+
export type ProgressStepStatus = 'pending' | 'in-progress' | 'complete' | 'error';
|
|
11
|
+
/**
|
|
12
|
+
* A single progress step.
|
|
13
|
+
*/
|
|
14
|
+
export interface ProgressStep {
|
|
15
|
+
/** Unique step identifier */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Step label */
|
|
18
|
+
label: string;
|
|
19
|
+
/** Step status */
|
|
20
|
+
status: ProgressStepStatus;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Props for the ProgressSteps component.
|
|
24
|
+
*/
|
|
25
|
+
export interface ProgressStepsProps {
|
|
26
|
+
/** List of steps */
|
|
27
|
+
steps: ProgressStep[];
|
|
28
|
+
/** Error message to display */
|
|
29
|
+
errorMessage?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Progress steps component showing multiple steps with their status.
|
|
33
|
+
*/
|
|
34
|
+
export declare function ProgressSteps({ steps, errorMessage }: ProgressStepsProps): React.ReactElement;
|
|
35
|
+
//# sourceMappingURL=ProgressSteps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressSteps.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/feedback/ProgressSteps.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CA6B7F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { colors } from '../../utils/colors.js';
|
|
4
|
+
import { Spinner } from './Spinner.js';
|
|
5
|
+
/**
|
|
6
|
+
* Renders a status indicator for a step.
|
|
7
|
+
*/
|
|
8
|
+
function StepIndicator({ status }) {
|
|
9
|
+
switch (status) {
|
|
10
|
+
case 'pending':
|
|
11
|
+
return _jsx(Text, { color: colors.muted, children: "\u25CB" });
|
|
12
|
+
case 'in-progress':
|
|
13
|
+
return _jsx(Spinner, {});
|
|
14
|
+
case 'complete':
|
|
15
|
+
return _jsx(Text, { color: colors.success, children: "\u2713" });
|
|
16
|
+
case 'error':
|
|
17
|
+
return _jsx(Text, { color: colors.error, children: "\u2717" });
|
|
18
|
+
default:
|
|
19
|
+
return _jsx(Text, { color: colors.muted, children: "\u25CB" });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Progress steps component showing multiple steps with their status.
|
|
24
|
+
*/
|
|
25
|
+
export function ProgressSteps({ steps, errorMessage }) {
|
|
26
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 0, children: [steps.map((step) => {
|
|
27
|
+
const textColor = step.status === 'complete'
|
|
28
|
+
? colors.success
|
|
29
|
+
: step.status === 'error'
|
|
30
|
+
? colors.error
|
|
31
|
+
: step.status === 'in-progress'
|
|
32
|
+
? undefined
|
|
33
|
+
: colors.muted;
|
|
34
|
+
return (_jsxs(Box, { children: [_jsx(Box, { width: 3, children: _jsx(StepIndicator, { status: step.status }) }), _jsx(Text, { color: textColor, children: step.label })] }, step.id));
|
|
35
|
+
}), errorMessage && (_jsx(Box, { marginTop: 1, marginLeft: 3, children: _jsx(Text, { color: colors.error, children: errorMessage }) }))] }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=ProgressSteps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressSteps.js","sourceRoot":"","sources":["../../../../src/tui/components/feedback/ProgressSteps.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA6BvC;;GAEG;AACH,SAAS,aAAa,CAAC,EAAE,MAAM,EAAkC;IAC/D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,uBAAU,CAAC;QAC7C,KAAK,aAAa;YAChB,OAAO,KAAC,OAAO,KAAG,CAAC;QACrB,KAAK,UAAU;YACb,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,uBAAU,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,uBAAU,CAAC;QAC7C;YACE,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,uBAAU,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,YAAY,EAAsB;IACvE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAClB,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,KAAK,UAAU;oBACxB,CAAC,CAAC,MAAM,CAAC,OAAO;oBAChB,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO;wBACvB,CAAC,CAAC,MAAM,CAAC,KAAK;wBACd,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa;4BAC7B,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAEvB,OAAO,CACL,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,YACX,KAAC,aAAa,IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAI,GAClC,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,YAAG,IAAI,CAAC,KAAK,GAAQ,KAJnC,IAAI,CAAC,EAAE,CAKX,CACP,CAAC;YACJ,CAAC,CAAC,EACD,YAAY,IAAI,CACf,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAC9B,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,YAAY,GAAQ,GAC5C,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Provides an animated loading indicator.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Props for the Spinner component.
|
|
9
|
+
*/
|
|
10
|
+
export interface SpinnerProps {
|
|
11
|
+
/** Text to display alongside the spinner */
|
|
12
|
+
text?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Animated spinner component.
|
|
16
|
+
*/
|
|
17
|
+
export declare function Spinner({ text }: SpinnerProps): React.ReactElement;
|
|
18
|
+
//# sourceMappingURL=Spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/feedback/Spinner.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CAmBlE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Spinner component for the FND TUI.
|
|
4
|
+
*
|
|
5
|
+
* Provides an animated loading indicator.
|
|
6
|
+
*/
|
|
7
|
+
import { useState, useEffect } from 'react';
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import { colors } from '../../utils/colors.js';
|
|
10
|
+
/**
|
|
11
|
+
* Spinner animation frames.
|
|
12
|
+
*/
|
|
13
|
+
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
14
|
+
/**
|
|
15
|
+
* Animated spinner component.
|
|
16
|
+
*/
|
|
17
|
+
export function Spinner({ text }) {
|
|
18
|
+
const [frameIndex, setFrameIndex] = useState(0);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const timer = setInterval(() => {
|
|
21
|
+
setFrameIndex((prev) => (prev + 1) % SPINNER_FRAMES.length);
|
|
22
|
+
}, 80);
|
|
23
|
+
return () => clearInterval(timer);
|
|
24
|
+
}, []);
|
|
25
|
+
const frame = SPINNER_FRAMES[frameIndex];
|
|
26
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: colors.primary, children: frame }), text && _jsxs(Text, { children: [" ", text] })] }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=Spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../../src/tui/components/feedback/Spinner.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAU1E;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAgB;IAC5C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAEzC,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,KAAK,GAAQ,EAC1C,IAAI,IAAI,MAAC,IAAI,oBAAG,IAAI,IAAQ,IACzB,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/feedback/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/components/feedback/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkbox component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Provides a toggleable checkbox input.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Props for the Checkbox component.
|
|
9
|
+
*/
|
|
10
|
+
export interface CheckboxProps {
|
|
11
|
+
/** Checkbox label */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Whether the checkbox is checked */
|
|
14
|
+
checked: boolean;
|
|
15
|
+
/** Change handler */
|
|
16
|
+
onChange: (checked: boolean) => void;
|
|
17
|
+
/** Whether the checkbox is focused */
|
|
18
|
+
isFocused?: boolean;
|
|
19
|
+
/** Optional description */
|
|
20
|
+
description?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Checkbox component with space/enter toggle.
|
|
24
|
+
*/
|
|
25
|
+
export declare function Checkbox({ label, checked, onChange, isFocused, description, }: CheckboxProps): React.ReactElement;
|
|
26
|
+
//# sourceMappingURL=Checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/input/Checkbox.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,sCAAsC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAiB,EACjB,WAAW,GACZ,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAiCpC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from 'ink';
|
|
3
|
+
import { colors } from '../../utils/colors.js';
|
|
4
|
+
/**
|
|
5
|
+
* Checkbox component with space/enter toggle.
|
|
6
|
+
*/
|
|
7
|
+
export function Checkbox({ label, checked, onChange, isFocused = false, description, }) {
|
|
8
|
+
// Handle keyboard input
|
|
9
|
+
useInput((input, key) => {
|
|
10
|
+
if (!isFocused)
|
|
11
|
+
return;
|
|
12
|
+
if (input === ' ' || key.return) {
|
|
13
|
+
onChange(!checked);
|
|
14
|
+
}
|
|
15
|
+
}, { isActive: isFocused });
|
|
16
|
+
const indicator = isFocused ? '>' : ' ';
|
|
17
|
+
const checkbox = checked ? '[x]' : '[ ]';
|
|
18
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: isFocused ? colors.primary : colors.muted, children: [indicator, ' '] }), _jsxs(Text, { color: isFocused ? colors.primary : undefined, children: [checkbox, " ", label] })] }), description && isFocused && (_jsx(Box, { marginLeft: 4, children: _jsx(Text, { color: colors.muted, children: description }) }))] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../src/tui/components/input/Checkbox.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAkB/C;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,WAAW,GACG;IACd,wBAAwB;IACxB,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAEzC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,aACnD,SAAS,EAAE,GAAG,IACV,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,aAChD,QAAQ,OAAG,KAAK,IACZ,IACH,EACL,WAAW,IAAI,SAAS,IAAI,CAC3B,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,WAAW,GAAQ,GAC3C,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Select input component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Provides an arrow-key navigable option selector.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Option for the select input.
|
|
9
|
+
*/
|
|
10
|
+
export interface SelectOption<T = string> {
|
|
11
|
+
/** Display label */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Option value */
|
|
14
|
+
value: T;
|
|
15
|
+
/** Optional description */
|
|
16
|
+
description?: string;
|
|
17
|
+
/** Whether this option is recommended */
|
|
18
|
+
recommended?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Props for the SelectInput component.
|
|
22
|
+
*/
|
|
23
|
+
export interface SelectInputProps<T = string> {
|
|
24
|
+
/** Available options */
|
|
25
|
+
options: SelectOption<T>[];
|
|
26
|
+
/** Currently selected value */
|
|
27
|
+
value: T;
|
|
28
|
+
/** Change handler */
|
|
29
|
+
onChange: (value: T) => void;
|
|
30
|
+
/** Label text */
|
|
31
|
+
label?: string;
|
|
32
|
+
/** Whether the input is focused */
|
|
33
|
+
isFocused?: boolean;
|
|
34
|
+
/** Submit handler (Enter key) */
|
|
35
|
+
onSubmit?: () => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Select input component with arrow key navigation.
|
|
39
|
+
*/
|
|
40
|
+
export declare function SelectInput<T = string>({ options, value, onChange, label, isFocused, onSubmit, }: SelectInputProps<T>): React.ReactElement;
|
|
41
|
+
//# sourceMappingURL=SelectInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectInput.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/input/SelectInput.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM;IACtC,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,KAAK,EAAE,CAAC,CAAC;IACT,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,MAAM;IAC1C,wBAAwB;IACxB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,+BAA+B;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,MAAM,EAAE,EACtC,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAgB,EAChB,QAAQ,GACT,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CA4E1C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Select input component for the FND TUI.
|
|
4
|
+
*
|
|
5
|
+
* Provides an arrow-key navigable option selector.
|
|
6
|
+
*/
|
|
7
|
+
import { useState, useEffect } from 'react';
|
|
8
|
+
import { Box, Text, useInput } from 'ink';
|
|
9
|
+
import { colors } from '../../utils/colors.js';
|
|
10
|
+
/**
|
|
11
|
+
* Select input component with arrow key navigation.
|
|
12
|
+
*/
|
|
13
|
+
export function SelectInput({ options, value, onChange, label, isFocused = true, onSubmit, }) {
|
|
14
|
+
const [highlightedIndex, setHighlightedIndex] = useState(() => {
|
|
15
|
+
const idx = options.findIndex((opt) => opt.value === value);
|
|
16
|
+
return idx >= 0 ? idx : 0;
|
|
17
|
+
});
|
|
18
|
+
// Sync highlighted index with value when value changes externally
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const idx = options.findIndex((opt) => opt.value === value);
|
|
21
|
+
if (idx >= 0 && idx !== highlightedIndex) {
|
|
22
|
+
setHighlightedIndex(idx);
|
|
23
|
+
}
|
|
24
|
+
}, [value, options, highlightedIndex]);
|
|
25
|
+
// Handle keyboard input
|
|
26
|
+
useInput((input, key) => {
|
|
27
|
+
if (!isFocused)
|
|
28
|
+
return;
|
|
29
|
+
if (key.upArrow) {
|
|
30
|
+
const newIndex = highlightedIndex > 0 ? highlightedIndex - 1 : options.length - 1;
|
|
31
|
+
setHighlightedIndex(newIndex);
|
|
32
|
+
onChange(options[newIndex].value);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (key.downArrow) {
|
|
36
|
+
const newIndex = highlightedIndex < options.length - 1 ? highlightedIndex + 1 : 0;
|
|
37
|
+
setHighlightedIndex(newIndex);
|
|
38
|
+
onChange(options[newIndex].value);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (key.return && onSubmit) {
|
|
42
|
+
onSubmit();
|
|
43
|
+
}
|
|
44
|
+
}, { isActive: isFocused });
|
|
45
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 0, children: [label && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.muted, children: label }) })), options.map((option, index) => {
|
|
46
|
+
const isHighlighted = index === highlightedIndex;
|
|
47
|
+
const isSelected = option.value === value;
|
|
48
|
+
const indicator = isHighlighted ? '>' : ' ';
|
|
49
|
+
const bullet = isSelected ? '●' : '○';
|
|
50
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: isHighlighted ? colors.primary : colors.muted, children: [indicator, ' '] }), _jsxs(Text, { color: isHighlighted ? colors.primary : undefined, children: [bullet, " ", option.label] }), option.recommended && (_jsx(Text, { color: colors.success, children: " (recommended)" }))] }), option.description && isHighlighted && (_jsx(Box, { marginLeft: 4, children: _jsx(Text, { color: colors.muted, children: option.description }) }))] }, String(option.value)));
|
|
51
|
+
})] }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=SelectInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectInput.js","sourceRoot":"","sources":["../../../../src/tui/components/input/SelectInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text input component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Provides a styled text input with validation support.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Props for the TextInput component.
|
|
9
|
+
*/
|
|
10
|
+
export interface TextInputProps {
|
|
11
|
+
/** Current value */
|
|
12
|
+
value: string;
|
|
13
|
+
/** Change handler */
|
|
14
|
+
onChange: (value: string) => void;
|
|
15
|
+
/** Placeholder text */
|
|
16
|
+
placeholder?: string;
|
|
17
|
+
/** Label text */
|
|
18
|
+
label?: string;
|
|
19
|
+
/** Error message */
|
|
20
|
+
error?: string;
|
|
21
|
+
/** Whether the input is focused */
|
|
22
|
+
isFocused?: boolean;
|
|
23
|
+
/** Submit handler (Enter key) */
|
|
24
|
+
onSubmit?: () => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Text input component with cursor and validation display.
|
|
28
|
+
*/
|
|
29
|
+
export declare function TextInput({ value, onChange, placeholder, label, error, isFocused, onSubmit, }: TextInputProps): React.ReactElement;
|
|
30
|
+
//# sourceMappingURL=TextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/input/TextInput.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAAgB,EAChB,KAAK,EACL,KAAK,EACL,SAAgB,EAChB,QAAQ,GACT,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAwErC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Text input component for the FND TUI.
|
|
4
|
+
*
|
|
5
|
+
* Provides a styled text input with validation support.
|
|
6
|
+
*/
|
|
7
|
+
import { useState, useEffect } from 'react';
|
|
8
|
+
import { Box, Text, useInput } from 'ink';
|
|
9
|
+
import { colors } from '../../utils/colors.js';
|
|
10
|
+
/**
|
|
11
|
+
* Text input component with cursor and validation display.
|
|
12
|
+
*/
|
|
13
|
+
export function TextInput({ value, onChange, placeholder = '', label, error, isFocused = true, onSubmit, }) {
|
|
14
|
+
const [cursorVisible, setCursorVisible] = useState(true);
|
|
15
|
+
// Cursor blink effect
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!isFocused) {
|
|
18
|
+
setCursorVisible(false);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const timer = setInterval(() => {
|
|
22
|
+
setCursorVisible((prev) => !prev);
|
|
23
|
+
}, 530);
|
|
24
|
+
return () => clearInterval(timer);
|
|
25
|
+
}, [isFocused]);
|
|
26
|
+
// Handle keyboard input
|
|
27
|
+
useInput((input, key) => {
|
|
28
|
+
if (!isFocused)
|
|
29
|
+
return;
|
|
30
|
+
if (key.return && onSubmit) {
|
|
31
|
+
onSubmit();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (key.backspace || key.delete) {
|
|
35
|
+
onChange(value.slice(0, -1));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Only accept printable characters
|
|
39
|
+
if (input && !key.ctrl && !key.meta) {
|
|
40
|
+
onChange(value + input);
|
|
41
|
+
}
|
|
42
|
+
}, { isActive: isFocused });
|
|
43
|
+
const displayValue = value || '';
|
|
44
|
+
const showPlaceholder = !displayValue && placeholder;
|
|
45
|
+
const cursor = isFocused && cursorVisible ? '▌' : ' ';
|
|
46
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 0, children: [label && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.muted, children: label }) })), _jsxs(Box, { children: [_jsx(Text, { color: colors.primary, children: '> ' }), showPlaceholder ? (_jsxs(Text, { color: colors.muted, children: [placeholder, cursor] })) : (_jsxs(Text, { children: [displayValue, _jsx(Text, { color: colors.primary, children: cursor })] }))] }), error && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.error, children: error }) }))] }));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=TextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../../../src/tui/components/input/TextInput.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAsB/C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,EAAE,EAChB,KAAK,EACL,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,QAAQ,GACO;IACf,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEzD,sBAAsB;IACtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,wBAAwB;IACxB,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC3B,QAAQ,EAAE,CAAC;YACX,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,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,eAAe,GAAG,CAAC,YAAY,IAAI,WAAW,CAAC;IACrD,MAAM,MAAM,GAAG,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEtD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC/B,KAAK,IAAI,CACR,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,KAAK,GAAQ,GACrC,CACP,EACD,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,IAAI,GAAQ,EACzC,eAAe,CAAC,CAAC,CAAC,CACjB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACtB,WAAW,EACX,MAAM,IACF,CACR,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,eACF,YAAY,EACb,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,MAAM,GAAQ,IACvC,CACR,IACG,EACL,KAAK,IAAI,CACR,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,KAAK,GAAQ,GACrC,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/input/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/components/input/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breadcrumbs component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Shows the navigation trail.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Breadcrumbs component showing navigation trail.
|
|
9
|
+
*/
|
|
10
|
+
export declare function Breadcrumbs(): React.ReactElement;
|
|
11
|
+
//# sourceMappingURL=Breadcrumbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/layout/Breadcrumbs.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAmB1B;;GAEG;AACH,wBAAgB,WAAW,IAAI,KAAK,CAAC,YAAY,CA8BhD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useNavigation } from '../../hooks/useNavigation.js';
|
|
4
|
+
import { colors } from '../../utils/colors.js';
|
|
5
|
+
/**
|
|
6
|
+
* Screen display names.
|
|
7
|
+
*/
|
|
8
|
+
const SCREEN_NAMES = {
|
|
9
|
+
welcome: 'Welcome',
|
|
10
|
+
'project-dashboard': 'Dashboard',
|
|
11
|
+
'create-project': 'New Project',
|
|
12
|
+
'add-package': 'Add Package',
|
|
13
|
+
deploy: 'Deploy',
|
|
14
|
+
settings: 'Settings',
|
|
15
|
+
help: 'Help',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Breadcrumbs component showing navigation trail.
|
|
19
|
+
*/
|
|
20
|
+
export function Breadcrumbs() {
|
|
21
|
+
const { currentScreen, history } = useNavigation();
|
|
22
|
+
// Only show if we have history
|
|
23
|
+
if (history.length === 0) {
|
|
24
|
+
return _jsx(Box, {});
|
|
25
|
+
}
|
|
26
|
+
// Take last 3 items from history + current
|
|
27
|
+
const trail = [...history.slice(-2), currentScreen];
|
|
28
|
+
return (_jsx(Box, { children: trail.map((screen, index) => {
|
|
29
|
+
const isLast = index === trail.length - 1;
|
|
30
|
+
const name = SCREEN_NAMES[screen] || screen;
|
|
31
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: isLast ? colors.primary : colors.muted, children: name }), !isLast && (_jsx(Text, { color: colors.muted, children: " \u203A " }))] }, `${screen}-${index}`));
|
|
32
|
+
}) }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.js","sourceRoot":"","sources":["../../../../src/tui/components/layout/Breadcrumbs.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C;;GAEG;AACH,MAAM,YAAY,GAA2B;IAC3C,OAAO,EAAE,SAAS;IAClB,mBAAmB,EAAE,WAAW;IAChC,gBAAgB,EAAE,aAAa;IAC/B,aAAa,EAAE,aAAa;IAC5B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAEnD,+BAA+B;IAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAC,GAAG,KAAG,CAAC;IACjB,CAAC;IAED,2CAA2C;IAC3C,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAEpD,OAAO,CACL,KAAC,GAAG,cACD,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;YAE5C,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,YAChD,IAAI,GACA,EACN,CAAC,MAAM,IAAI,CACV,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,yBAAY,CACtC,KANO,GAAG,MAAM,IAAI,KAAK,EAAE,CAOxB,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Footer component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Shows keyboard shortcuts and notifications.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Footer component with keyboard shortcuts.
|
|
9
|
+
*/
|
|
10
|
+
export declare function Footer(): React.ReactElement;
|
|
11
|
+
//# sourceMappingURL=Footer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/layout/Footer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B;;GAEG;AACH,wBAAgB,MAAM,IAAI,KAAK,CAAC,YAAY,CAsC3C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useAppState } from '../../state/AppContext.js';
|
|
4
|
+
import { getShortcutsForScreen } from '../../hooks/useKeyboard.js';
|
|
5
|
+
import { colors, statusColors } from '../../utils/colors.js';
|
|
6
|
+
/**
|
|
7
|
+
* Footer component with keyboard shortcuts.
|
|
8
|
+
*/
|
|
9
|
+
export function Footer() {
|
|
10
|
+
const { state } = useAppState();
|
|
11
|
+
const { currentScreen } = state.navigation;
|
|
12
|
+
const { notification, notificationType } = state.ui;
|
|
13
|
+
const shortcuts = getShortcutsForScreen(currentScreen);
|
|
14
|
+
// Determine notification color
|
|
15
|
+
const notificationColor = notificationType
|
|
16
|
+
? statusColors[notificationType === 'info' ? 'idle' : notificationType === 'success' ? 'active' : notificationType === 'warning' ? 'pending' : 'failed']
|
|
17
|
+
: colors.muted;
|
|
18
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [notification && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: notificationColor, children: notification }) })), _jsx(Box, { children: _jsx(Text, { color: colors.muted, children: '─'.repeat(process.stdout.columns || 80) }) }), _jsx(Box, { gap: 2, flexWrap: "wrap", children: shortcuts.map((shortcut, index) => (_jsxs(Box, { children: [_jsx(Text, { color: colors.muted, children: "[" }), _jsx(Text, { color: colors.accent, children: shortcut.key }), _jsxs(Text, { color: colors.muted, children: ["] ", shortcut.description] })] }, index))) })] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../../src/tui/components/layout/Footer.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,MAAM;IACpB,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;IAChC,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IAC3C,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAEpD,MAAM,SAAS,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAEvD,+BAA+B;IAC/B,MAAM,iBAAiB,GAAG,gBAAgB;QACxC,CAAC,CAAC,YAAY,CAAC,gBAAgB,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxJ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAEjB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aAErC,YAAY,IAAI,CACf,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAE,iBAAiB,YAAG,YAAY,GAAQ,GACjD,CACP,EAGD,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,GAAQ,GACxE,EAGN,KAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAC,MAAM,YACzB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAClC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,kBAAU,EACnC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,YAAG,QAAQ,CAAC,GAAG,GAAQ,EACjD,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,mBAAK,QAAQ,CAAC,WAAW,IAAQ,KAHlD,KAAK,CAIT,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Header component for the FND TUI.
|
|
3
|
+
*
|
|
4
|
+
* Shows the ASCII banner or breadcrumbs depending on context.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Props for the Header component.
|
|
9
|
+
*/
|
|
10
|
+
interface HeaderProps {
|
|
11
|
+
/** Whether to show the full banner */
|
|
12
|
+
showBanner?: boolean;
|
|
13
|
+
/** Custom title to display */
|
|
14
|
+
title?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Header component that shows banner or navigation breadcrumbs.
|
|
18
|
+
*/
|
|
19
|
+
export declare function Header({ showBanner, title }: HeaderProps): React.ReactElement;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/layout/Header.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B;;GAEG;AACH,UAAU,WAAW;IACnB,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,UAAkB,EAAE,KAAK,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CA4BrF"}
|