sincronizado 1.1.0 → 1.1.2
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.
Potentially problematic release.
This version of sincronizado might be problematic. Click here for more details.
- package/dist/App.d.ts +26 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +52 -0
- package/dist/App.js.map +1 -0
- package/dist/components/Button.d.ts +17 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +33 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/CheckboxGroup.d.ts +13 -0
- package/dist/components/CheckboxGroup.d.ts.map +1 -0
- package/dist/components/CheckboxGroup.js +25 -0
- package/dist/components/CheckboxGroup.js.map +1 -0
- package/dist/components/Header.d.ts +6 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +15 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +9 -0
- package/dist/components/ProgressBar.d.ts.map +1 -0
- package/dist/components/ProgressBar.js +20 -0
- package/dist/components/ProgressBar.js.map +1 -0
- package/dist/components/RadioGroup.d.ts +13 -0
- package/dist/components/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup.js +19 -0
- package/dist/components/RadioGroup.js.map +1 -0
- package/dist/components/TextInput.d.ts +10 -0
- package/dist/components/TextInput.d.ts.map +1 -0
- package/dist/components/TextInput.js +38 -0
- package/dist/components/TextInput.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -36686
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +46 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/ssh.d.ts +10 -0
- package/dist/lib/ssh.d.ts.map +1 -0
- package/dist/lib/ssh.js +46 -0
- package/dist/lib/ssh.js.map +1 -0
- package/dist/screens/Addons.d.ts +11 -0
- package/dist/screens/Addons.d.ts.map +1 -0
- package/dist/screens/Addons.js +97 -0
- package/dist/screens/Addons.js.map +1 -0
- package/dist/screens/AgentSelect.d.ts +11 -0
- package/dist/screens/AgentSelect.d.ts.map +1 -0
- package/dist/screens/AgentSelect.js +22 -0
- package/dist/screens/AgentSelect.js.map +1 -0
- package/dist/screens/Complete.d.ts +9 -0
- package/dist/screens/Complete.d.ts.map +1 -0
- package/dist/screens/Complete.js +8 -0
- package/dist/screens/Complete.js.map +1 -0
- package/dist/screens/Config.d.ts +11 -0
- package/dist/screens/Config.d.ts.map +1 -0
- package/dist/screens/Config.js +9 -0
- package/dist/screens/Config.js.map +1 -0
- package/dist/screens/Confirm.d.ts +10 -0
- package/dist/screens/Confirm.d.ts.map +1 -0
- package/dist/screens/Confirm.js +37 -0
- package/dist/screens/Confirm.js.map +1 -0
- package/dist/screens/Install.d.ts +10 -0
- package/dist/screens/Install.d.ts.map +1 -0
- package/dist/screens/Install.js +116 -0
- package/dist/screens/Install.js.map +1 -0
- package/dist/screens/ModeSelect.d.ts +11 -0
- package/dist/screens/ModeSelect.d.ts.map +1 -0
- package/dist/screens/ModeSelect.js +32 -0
- package/dist/screens/ModeSelect.js.map +1 -0
- package/dist/screens/Provider.d.ts +11 -0
- package/dist/screens/Provider.d.ts.map +1 -0
- package/dist/screens/Provider.js +37 -0
- package/dist/screens/Provider.js.map +1 -0
- package/dist/screens/Welcome.d.ts +8 -0
- package/dist/screens/Welcome.d.ts.map +1 -0
- package/dist/screens/Welcome.js +9 -0
- package/dist/screens/Welcome.js.map +1 -0
- package/dist/sincronizado.js +19 -0
- package/package.json +4 -5
- package/dist/cli.js +0 -2
- package/dist/highlights-eq9cgrbb.scm +0 -604
- package/dist/highlights-ghv9g403.scm +0 -205
- package/dist/highlights-hk7bwhj4.scm +0 -284
- package/dist/highlights-r812a2qc.scm +0 -150
- package/dist/highlights-x6tmsnaa.scm +0 -115
- package/dist/injections-73j83es3.scm +0 -27
- package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
package/dist/App.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type Screen = 'welcome' | 'agent' | 'mode' | 'addons' | 'provider' | 'config' | 'confirm' | 'install' | 'complete';
|
|
3
|
+
export type AIAgent = 'opencode' | 'claude';
|
|
4
|
+
export type InstallMode = 'minimal' | 'standard' | 'full' | 'custom';
|
|
5
|
+
export type VPSProvider = 'oracle' | 'hetzner' | 'digitalocean' | 'aws' | 'other';
|
|
6
|
+
export interface InstallConfig {
|
|
7
|
+
agent: AIAgent;
|
|
8
|
+
mode: InstallMode;
|
|
9
|
+
withKimaki: boolean;
|
|
10
|
+
withLunaroute: boolean;
|
|
11
|
+
withMCP: boolean;
|
|
12
|
+
withWorktreeSession: boolean;
|
|
13
|
+
withSessionHandoff: boolean;
|
|
14
|
+
withAgentOfEmpires: boolean;
|
|
15
|
+
withOpenSync: boolean;
|
|
16
|
+
setupAlias: boolean;
|
|
17
|
+
noAgentOS: boolean;
|
|
18
|
+
noCcmanager: boolean;
|
|
19
|
+
noPlugins: boolean;
|
|
20
|
+
provider: VPSProvider;
|
|
21
|
+
hostname: string;
|
|
22
|
+
sshUser: string;
|
|
23
|
+
projectRoot: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function App(): React.ReactNode;
|
|
26
|
+
//# sourceMappingURL=App.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAYxC,MAAM,MAAM,MAAM,GACd,SAAS,GACT,OAAO,GACP,MAAM,GACN,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,KAAK,GAAG,OAAO,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAsBD,wBAAgB,GAAG,oBA6ElB"}
|
package/dist/App.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Welcome } from './screens/Welcome.js';
|
|
4
|
+
import { AgentSelect } from './screens/AgentSelect.js';
|
|
5
|
+
import { ModeSelect } from './screens/ModeSelect.js';
|
|
6
|
+
import { Addons } from './screens/Addons.js';
|
|
7
|
+
import { Provider } from './screens/Provider.js';
|
|
8
|
+
import { Config } from './screens/Config.js';
|
|
9
|
+
import { Confirm } from './screens/Confirm.js';
|
|
10
|
+
import { Install } from './screens/Install.js';
|
|
11
|
+
import { Complete } from './screens/Complete.js';
|
|
12
|
+
import { Header } from './components/Header.js';
|
|
13
|
+
const defaultConfig = {
|
|
14
|
+
agent: 'opencode',
|
|
15
|
+
mode: 'standard',
|
|
16
|
+
withKimaki: false,
|
|
17
|
+
withLunaroute: false,
|
|
18
|
+
withMCP: false,
|
|
19
|
+
withWorktreeSession: false,
|
|
20
|
+
withSessionHandoff: false,
|
|
21
|
+
withAgentOfEmpires: false,
|
|
22
|
+
withOpenSync: false,
|
|
23
|
+
setupAlias: false,
|
|
24
|
+
noAgentOS: false,
|
|
25
|
+
noCcmanager: false,
|
|
26
|
+
noPlugins: false,
|
|
27
|
+
provider: 'oracle',
|
|
28
|
+
hostname: '',
|
|
29
|
+
sshUser: 'ubuntu',
|
|
30
|
+
projectRoot: '~/projects',
|
|
31
|
+
};
|
|
32
|
+
export function App() {
|
|
33
|
+
const [screen, setScreen] = useState('welcome');
|
|
34
|
+
const [config, setConfig] = useState(defaultConfig);
|
|
35
|
+
const [history, setHistory] = useState([]);
|
|
36
|
+
const navigateTo = (next) => {
|
|
37
|
+
setHistory((h) => [...h, screen]);
|
|
38
|
+
setScreen(next);
|
|
39
|
+
};
|
|
40
|
+
const goBack = () => {
|
|
41
|
+
if (history.length > 0) {
|
|
42
|
+
const prev = history[history.length - 1];
|
|
43
|
+
setHistory((h) => h.slice(0, -1));
|
|
44
|
+
setScreen(prev);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const updateConfig = (updates) => {
|
|
48
|
+
setConfig((c) => ({ ...c, ...updates }));
|
|
49
|
+
};
|
|
50
|
+
return (_jsxs("box", { flexDirection: "column", height: 24, children: [_jsx(Header, { screen: screen }), screen === 'welcome' && (_jsx(Welcome, { onContinue: () => navigateTo('agent'), onExit: () => process.exit(0) })), screen === 'agent' && (_jsx(AgentSelect, { config: config, onChange: updateConfig, onContinue: () => navigateTo('mode'), onBack: goBack })), screen === 'mode' && (_jsx(ModeSelect, { config: config, onChange: updateConfig, onContinue: () => navigateTo(config.mode === 'custom' ? 'addons' : 'provider'), onBack: goBack })), screen === 'addons' && (_jsx(Addons, { config: config, onChange: updateConfig, onContinue: () => navigateTo('provider'), onBack: goBack })), screen === 'provider' && (_jsx(Provider, { config: config, onChange: updateConfig, onContinue: () => navigateTo('config'), onBack: goBack })), screen === 'config' && (_jsx(Config, { config: config, onChange: updateConfig, onContinue: () => navigateTo('confirm'), onBack: goBack })), screen === 'confirm' && (_jsx(Confirm, { config: config, onInstall: () => navigateTo('install'), onBack: goBack })), screen === 'install' && (_jsx(Install, { config: config, onComplete: () => navigateTo('complete'), onBack: goBack })), screen === 'complete' && _jsx(Complete, { config: config, onExit: () => process.exit(0) })] }));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=App.js.map
|
package/dist/App.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ButtonProps {
|
|
3
|
+
label: string;
|
|
4
|
+
onClick: () => void;
|
|
5
|
+
variant?: 'primary' | 'secondary' | 'danger';
|
|
6
|
+
}
|
|
7
|
+
export declare function Button({ label, onClick, variant }: ButtonProps): React.ReactNode;
|
|
8
|
+
interface ButtonGroupProps {
|
|
9
|
+
buttons: {
|
|
10
|
+
label: string;
|
|
11
|
+
onClick: () => void;
|
|
12
|
+
variant?: 'primary' | 'secondary' | 'danger';
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
export declare function ButtonGroup({ buttons }: ButtonGroupProps): React.ReactNode;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC9C;AAED,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAmB,EAAE,EAAE,WAAW,mBAkB1E;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;KAAE,EAAE,CAAC;CACjG;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,gBAAgB,mBAiCxD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useKeyboard } from '@opentui/react';
|
|
4
|
+
export function Button({ label, onClick, variant = 'primary' }) {
|
|
5
|
+
const [isFocused, setIsFocused] = React.useState(false);
|
|
6
|
+
useKeyboard((key) => {
|
|
7
|
+
if (isFocused && key.name === 'return') {
|
|
8
|
+
onClick();
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const color = variant === 'danger' ? 'red' : variant === 'secondary' ? 'gray' : '#FFFFC5';
|
|
12
|
+
return (_jsx("box", { borderStyle: isFocused ? 'double' : 'single', paddingX: 2, children: _jsx("text", { color: isFocused ? color : undefined, bold: isFocused, children: label }) }));
|
|
13
|
+
}
|
|
14
|
+
export function ButtonGroup({ buttons }) {
|
|
15
|
+
const [selectedIndex, setSelectedIndex] = React.useState(0);
|
|
16
|
+
useKeyboard((key) => {
|
|
17
|
+
if (key.name === 'leftArrow') {
|
|
18
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
19
|
+
}
|
|
20
|
+
else if (key.name === 'rightArrow') {
|
|
21
|
+
setSelectedIndex((i) => Math.min(buttons.length - 1, i + 1));
|
|
22
|
+
}
|
|
23
|
+
else if (key.name === 'return') {
|
|
24
|
+
buttons[selectedIndex].onClick();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return (_jsx("box", { gap: 2, children: buttons.map((button, index) => (_jsx("box", { borderStyle: index === selectedIndex ? 'double' : 'single', paddingX: 2, children: _jsx("text", { color: index === selectedIndex
|
|
28
|
+
? button.variant === 'danger'
|
|
29
|
+
? 'red'
|
|
30
|
+
: '#FFFFC5'
|
|
31
|
+
: undefined, bold: index === selectedIndex, children: button.label }) }, index))) }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAQ7C,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,EAAe;IACzE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,OAAO,CACL,cAAK,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,YAC5D,eAAM,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,YACxD,KAAK,GACD,GACH,CACP,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,WAAW,CAAC,EAAE,OAAO,EAAoB;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5D,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACrC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,cAAK,GAAG,EAAE,CAAC,YACR,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,cAAiB,WAAW,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,YACtF,eACE,KAAK,EACH,KAAK,KAAK,aAAa;oBACrB,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ;wBAC3B,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,SAAS;oBACb,CAAC,CAAC,SAAS,EAEf,IAAI,EAAE,KAAK,KAAK,aAAa,YAE5B,MAAM,CAAC,KAAK,GACR,IAZC,KAAK,CAaT,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface CheckboxGroupProps {
|
|
3
|
+
options: {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
}[];
|
|
8
|
+
values: string[];
|
|
9
|
+
onChange: (values: string[]) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function CheckboxGroup({ options, values, onChange }: CheckboxGroupProps): React.ReactNode;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=CheckboxGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxGroup.d.ts","sourceRoot":"","sources":["../../src/components/CheckboxGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,kBAAkB;IAC1B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,kBAAkB,mBAqC9E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useKeyboard } from '@opentui/react';
|
|
4
|
+
export function CheckboxGroup({ options, values, onChange }) {
|
|
5
|
+
const [selectedIndex, setSelectedIndex] = React.useState(0);
|
|
6
|
+
useKeyboard((key) => {
|
|
7
|
+
if (key.name === 'upArrow') {
|
|
8
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
9
|
+
}
|
|
10
|
+
else if (key.name === 'downArrow') {
|
|
11
|
+
setSelectedIndex((i) => Math.min(options.length - 1, i + 1));
|
|
12
|
+
}
|
|
13
|
+
else if (key.name === 'space') {
|
|
14
|
+
const option = options[selectedIndex];
|
|
15
|
+
if (values.includes(option.value)) {
|
|
16
|
+
onChange(values.filter((v) => v !== option.value));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
onChange([...values, option.value]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return (_jsxs("box", { flexDirection: "column", children: [options.map((option, index) => (_jsx("box", { children: _jsxs("text", { children: [index === selectedIndex ? '> ' : ' ', values.includes(option.value) ? '[x] ' : '[ ] ', option.label, index === selectedIndex && option.description && (_jsxs("text", { dimColor: true, children: [" \u2014 ", option.description] }))] }) }, option.value))), _jsx("box", { paddingTop: 1, children: _jsx("text", { dimColor: true, children: "Press space to toggle, arrow keys to navigate" }) })] }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=CheckboxGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxGroup.js","sourceRoot":"","sources":["../../src/components/CheckboxGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAQ7C,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAsB;IAC7E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5D,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,aACxB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,wBACE,2BACG,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAC/C,MAAM,CAAC,KAAK,EACZ,KAAK,KAAK,aAAa,IAAI,MAAM,CAAC,WAAW,IAAI,CAChD,gBAAM,QAAQ,+BAAK,MAAM,CAAC,WAAW,IAAQ,CAC9C,IACI,IARC,MAAM,CAAC,KAAK,CAShB,CACP,CAAC,EACF,cAAK,UAAU,EAAE,CAAC,YAChB,eAAM,QAAQ,oEAAqD,GAC/D,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAaxC,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,mBAgCpD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
const screenTitles = {
|
|
3
|
+
welcome: 'Welcome',
|
|
4
|
+
mode: 'Installation Mode',
|
|
5
|
+
addons: 'Select Add-ons',
|
|
6
|
+
provider: 'VPS Provider',
|
|
7
|
+
config: 'Configuration',
|
|
8
|
+
confirm: 'Confirm Installation',
|
|
9
|
+
install: 'Installing...',
|
|
10
|
+
complete: 'Complete',
|
|
11
|
+
};
|
|
12
|
+
export function Header({ screen }) {
|
|
13
|
+
return (_jsxs("box", { flexDirection: "column", paddingBottom: 1, children: [_jsx("box", { children: _jsx("text", { bold: true, color: "#FFFFC5", children: "\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557" }) }), _jsxs("box", { children: [_jsx("text", { bold: true, color: "#FFFFC5", children: "\u2551" }), _jsx("text", { bold: true, color: "white", children: ' SINCRONIZADO INSTALLER v1.1.0 ' }), _jsx("text", { bold: true, color: "#FFFFC5", children: "\u2551" })] }), _jsx("box", { children: _jsx("text", { bold: true, color: "#FFFFC5", children: "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D" }) }), _jsx("box", { paddingTop: 1, children: _jsxs("text", { dimColor: true, children: [' ', screenTitles[screen]] }) })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":";AAGA,MAAM,YAAY,GAA2B;IAC3C,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAsB;IACnD,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,EAAC,aAAa,EAAE,CAAC,aAC1C,wBACE,eAAM,IAAI,QAAC,KAAK,EAAC,SAAS,yXAEnB,GACH,EACN,0BACE,eAAM,IAAI,QAAC,KAAK,EAAC,SAAS,uBAEnB,EACP,eAAM,IAAI,QAAC,KAAK,EAAC,OAAO,YACrB,sDAAsD,GAClD,EACP,eAAM,IAAI,QAAC,KAAK,EAAC,SAAS,uBAEnB,IACH,EACN,wBACE,eAAM,IAAI,QAAC,KAAK,EAAC,SAAS,yXAEnB,GACH,EACN,cAAK,UAAU,EAAE,CAAC,YAChB,gBAAM,QAAQ,mBACX,IAAI,EACJ,YAAY,CAAC,MAAM,CAAC,IAChB,GACH,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ProgressBarProps {
|
|
3
|
+
progress: number;
|
|
4
|
+
label: string;
|
|
5
|
+
status?: 'pending' | 'running' | 'complete' | 'error';
|
|
6
|
+
}
|
|
7
|
+
export declare function ProgressBar({ progress, label, status }: ProgressBarProps): React.ReactNode;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../src/components/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;CACvD;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAkB,EAAE,EAAE,gBAAgB,mBAiCpF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
export function ProgressBar({ progress, label, status = 'pending' }) {
|
|
3
|
+
const width = 40;
|
|
4
|
+
const filled = Math.round((progress / 100) * width);
|
|
5
|
+
const empty = width - filled;
|
|
6
|
+
const statusIcon = {
|
|
7
|
+
pending: '○',
|
|
8
|
+
running: '●',
|
|
9
|
+
complete: '✓',
|
|
10
|
+
error: '✗',
|
|
11
|
+
}[status];
|
|
12
|
+
const statusColor = {
|
|
13
|
+
pending: 'gray',
|
|
14
|
+
running: '#FFFFC5',
|
|
15
|
+
complete: 'green',
|
|
16
|
+
error: 'red',
|
|
17
|
+
}[status];
|
|
18
|
+
return (_jsxs("box", { flexDirection: "column", children: [_jsx("box", { children: _jsxs("text", { color: statusColor, children: [statusIcon, " ", label] }) }), _jsxs("box", { children: [_jsx("text", { color: "#FFFFC5", children: '█'.repeat(filled) }), _jsx("text", { dimColor: true, children: '░'.repeat(empty) }), _jsxs("text", { children: [" ", Math.round(progress), "%"] })] })] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ProgressBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../src/components/ProgressBar.tsx"],"names":[],"mappings":";AAQA,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAoB;IACnF,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7B,MAAM,UAAU,GAAG;QACjB,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,GAAG;KACX,CAAC,MAAM,CAAC,CAAC;IAEV,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,KAAK;KACb,CAAC,MAAM,CAAC,CAAC;IAEV,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,aACzB,wBACE,gBAAM,KAAK,EAAE,WAAW,aACrB,UAAU,OAAG,KAAK,IACd,GACH,EACN,0BACE,eAAM,KAAK,EAAC,SAAS,YAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAQ,EACjD,eAAM,QAAQ,kBAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EACzC,gCAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,IACjC,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface RadioGroupProps<T> {
|
|
3
|
+
options: {
|
|
4
|
+
value: T;
|
|
5
|
+
label: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
}[];
|
|
8
|
+
value: T;
|
|
9
|
+
onChange: (value: T) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function RadioGroup<T extends string>({ options, value, onChange }: RadioGroupProps<T>): React.ReactNode;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=RadioGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../../src/components/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,eAAe,CAAC,CAAC;IACzB,OAAO,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,mBA8B5F"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useKeyboard } from '@opentui/react';
|
|
4
|
+
export function RadioGroup({ options, value, onChange }) {
|
|
5
|
+
const [selectedIndex, setSelectedIndex] = React.useState(() => options.findIndex((o) => o.value === value));
|
|
6
|
+
useKeyboard((key) => {
|
|
7
|
+
if (key.name === 'upArrow') {
|
|
8
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
9
|
+
}
|
|
10
|
+
else if (key.name === 'downArrow') {
|
|
11
|
+
setSelectedIndex((i) => Math.min(options.length - 1, i + 1));
|
|
12
|
+
}
|
|
13
|
+
else if (key.name === 'return') {
|
|
14
|
+
onChange(options[selectedIndex].value);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return (_jsx("box", { flexDirection: "column", children: options.map((option, index) => (_jsx("box", { children: _jsxs("text", { children: [index === selectedIndex ? '● ' : '○ ', option.label, index === selectedIndex && option.description && (_jsxs("text", { dimColor: true, children: [" \u2014 ", option.description] }))] }) }, option.value))) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=RadioGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../../src/components/RadioGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAQ7C,MAAM,UAAU,UAAU,CAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAsB;IAC3F,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAC5D,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAC5C,CAAC;IAEF,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,cAAK,aAAa,EAAC,QAAQ,YACxB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,wBACE,2BACG,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EACrC,MAAM,CAAC,KAAK,EACZ,KAAK,KAAK,aAAa,IAAI,MAAM,CAAC,WAAW,IAAI,CAChD,gBAAM,QAAQ,+BAAK,MAAM,CAAC,WAAW,IAAQ,CAC9C,IACI,IAPC,MAAM,CAAC,KAAK,CAQhB,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface TextInputProps {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
onChange: (value: string) => void;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function TextInput({ label, value, onChange, placeholder }: TextInputProps): React.ReactNode;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=TextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../src/components/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,cAAc,mBA8ChF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useKeyboard } from '@opentui/react';
|
|
4
|
+
export function TextInput({ label, value, onChange, placeholder }) {
|
|
5
|
+
const [cursorPosition, setCursorPosition] = React.useState(value.length);
|
|
6
|
+
const [isFocused, setIsFocused] = React.useState(false);
|
|
7
|
+
useKeyboard((key) => {
|
|
8
|
+
if (!isFocused)
|
|
9
|
+
return;
|
|
10
|
+
if (key.name === 'return') {
|
|
11
|
+
setIsFocused(false);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (key.name === 'backspace' || key.name === 'delete') {
|
|
15
|
+
if (cursorPosition > 0) {
|
|
16
|
+
const newValue = value.slice(0, cursorPosition - 1) + value.slice(cursorPosition);
|
|
17
|
+
onChange(newValue);
|
|
18
|
+
setCursorPosition(cursorPosition - 1);
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (key.name === 'leftArrow') {
|
|
23
|
+
setCursorPosition((p) => Math.max(0, p - 1));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (key.name === 'rightArrow') {
|
|
27
|
+
setCursorPosition((p) => Math.min(value.length, p + 1));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (key.input) {
|
|
31
|
+
const newValue = value.slice(0, cursorPosition) + key.input + value.slice(cursorPosition);
|
|
32
|
+
onChange(newValue);
|
|
33
|
+
setCursorPosition(cursorPosition + key.input.length);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return (_jsxs("box", { flexDirection: "column", children: [_jsxs("text", { children: [label, ":"] }), _jsx("box", { borderStyle: isFocused ? 'round' : 'single', paddingX: 1, children: _jsx("text", { children: value || placeholder || '' }) })] }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=TextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../src/components/TextInput.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAS7C,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAkB;IAC/E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAClF,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnB,iBAAiB,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC1F,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,iBAAiB,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,aACzB,2BAAO,KAAK,SAAS,EACrB,cAAK,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,YAC3D,yBAAO,KAAK,IAAI,WAAW,IAAI,EAAE,GAAQ,GACrC,IACF,CACP,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":""}
|