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.

Files changed (90) hide show
  1. package/dist/App.d.ts +26 -0
  2. package/dist/App.d.ts.map +1 -0
  3. package/dist/App.js +52 -0
  4. package/dist/App.js.map +1 -0
  5. package/dist/components/Button.d.ts +17 -0
  6. package/dist/components/Button.d.ts.map +1 -0
  7. package/dist/components/Button.js +33 -0
  8. package/dist/components/Button.js.map +1 -0
  9. package/dist/components/CheckboxGroup.d.ts +13 -0
  10. package/dist/components/CheckboxGroup.d.ts.map +1 -0
  11. package/dist/components/CheckboxGroup.js +25 -0
  12. package/dist/components/CheckboxGroup.js.map +1 -0
  13. package/dist/components/Header.d.ts +6 -0
  14. package/dist/components/Header.d.ts.map +1 -0
  15. package/dist/components/Header.js +15 -0
  16. package/dist/components/Header.js.map +1 -0
  17. package/dist/components/ProgressBar.d.ts +9 -0
  18. package/dist/components/ProgressBar.d.ts.map +1 -0
  19. package/dist/components/ProgressBar.js +20 -0
  20. package/dist/components/ProgressBar.js.map +1 -0
  21. package/dist/components/RadioGroup.d.ts +13 -0
  22. package/dist/components/RadioGroup.d.ts.map +1 -0
  23. package/dist/components/RadioGroup.js +19 -0
  24. package/dist/components/RadioGroup.js.map +1 -0
  25. package/dist/components/TextInput.d.ts +10 -0
  26. package/dist/components/TextInput.d.ts.map +1 -0
  27. package/dist/components/TextInput.js +38 -0
  28. package/dist/components/TextInput.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +8 -36686
  32. package/dist/index.js.map +1 -0
  33. package/dist/lib/config.d.ts +16 -0
  34. package/dist/lib/config.d.ts.map +1 -0
  35. package/dist/lib/config.js +46 -0
  36. package/dist/lib/config.js.map +1 -0
  37. package/dist/lib/ssh.d.ts +10 -0
  38. package/dist/lib/ssh.d.ts.map +1 -0
  39. package/dist/lib/ssh.js +46 -0
  40. package/dist/lib/ssh.js.map +1 -0
  41. package/dist/screens/Addons.d.ts +11 -0
  42. package/dist/screens/Addons.d.ts.map +1 -0
  43. package/dist/screens/Addons.js +97 -0
  44. package/dist/screens/Addons.js.map +1 -0
  45. package/dist/screens/AgentSelect.d.ts +11 -0
  46. package/dist/screens/AgentSelect.d.ts.map +1 -0
  47. package/dist/screens/AgentSelect.js +22 -0
  48. package/dist/screens/AgentSelect.js.map +1 -0
  49. package/dist/screens/Complete.d.ts +9 -0
  50. package/dist/screens/Complete.d.ts.map +1 -0
  51. package/dist/screens/Complete.js +8 -0
  52. package/dist/screens/Complete.js.map +1 -0
  53. package/dist/screens/Config.d.ts +11 -0
  54. package/dist/screens/Config.d.ts.map +1 -0
  55. package/dist/screens/Config.js +9 -0
  56. package/dist/screens/Config.js.map +1 -0
  57. package/dist/screens/Confirm.d.ts +10 -0
  58. package/dist/screens/Confirm.d.ts.map +1 -0
  59. package/dist/screens/Confirm.js +37 -0
  60. package/dist/screens/Confirm.js.map +1 -0
  61. package/dist/screens/Install.d.ts +10 -0
  62. package/dist/screens/Install.d.ts.map +1 -0
  63. package/dist/screens/Install.js +116 -0
  64. package/dist/screens/Install.js.map +1 -0
  65. package/dist/screens/ModeSelect.d.ts +11 -0
  66. package/dist/screens/ModeSelect.d.ts.map +1 -0
  67. package/dist/screens/ModeSelect.js +32 -0
  68. package/dist/screens/ModeSelect.js.map +1 -0
  69. package/dist/screens/Provider.d.ts +11 -0
  70. package/dist/screens/Provider.d.ts.map +1 -0
  71. package/dist/screens/Provider.js +37 -0
  72. package/dist/screens/Provider.js.map +1 -0
  73. package/dist/screens/Welcome.d.ts +8 -0
  74. package/dist/screens/Welcome.d.ts.map +1 -0
  75. package/dist/screens/Welcome.js +9 -0
  76. package/dist/screens/Welcome.js.map +1 -0
  77. package/dist/sincronizado.js +19 -0
  78. package/package.json +4 -5
  79. package/dist/cli.js +0 -2
  80. package/dist/highlights-eq9cgrbb.scm +0 -604
  81. package/dist/highlights-ghv9g403.scm +0 -205
  82. package/dist/highlights-hk7bwhj4.scm +0 -284
  83. package/dist/highlights-r812a2qc.scm +0 -150
  84. package/dist/highlights-x6tmsnaa.scm +0 -115
  85. package/dist/injections-73j83es3.scm +0 -27
  86. package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  87. package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  88. package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  89. package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  90. 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
@@ -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,6 @@
1
+ import React from 'react';
2
+ import type { Screen } from '../App.js';
3
+ export declare function Header({ screen }: {
4
+ screen: Screen;
5
+ }): React.ReactNode;
6
+ //# sourceMappingURL=Header.d.ts.map
@@ -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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":""}