dbctx 1.5.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/index.mjs +6012 -188
  2. package/package.json +12 -9
  3. package/dist/app/assemble.d.mts +0 -5
  4. package/dist/app/assemble.d.mts.map +0 -1
  5. package/dist/app/assemble.mjs +0 -166
  6. package/dist/app/config.d.mts +0 -9
  7. package/dist/app/config.d.mts.map +0 -1
  8. package/dist/app/config.mjs +0 -49
  9. package/dist/app/db.d.mts +0 -9
  10. package/dist/app/db.d.mts.map +0 -1
  11. package/dist/app/db.mjs +0 -182
  12. package/dist/app/detect.d.mts +0 -14
  13. package/dist/app/detect.d.mts.map +0 -1
  14. package/dist/app/detect.mjs +0 -108
  15. package/dist/app/index.d.mts +0 -3
  16. package/dist/app/index.d.mts.map +0 -1
  17. package/dist/app/index.mjs +0 -156
  18. package/dist/app/open-url.d.mts +0 -4
  19. package/dist/app/open-url.d.mts.map +0 -1
  20. package/dist/app/open-url.mjs +0 -28
  21. package/dist/app/session.d.mts +0 -8
  22. package/dist/app/session.d.mts.map +0 -1
  23. package/dist/app/session.mjs +0 -155
  24. package/dist/app/ssh.d.mts +0 -3
  25. package/dist/app/ssh.d.mts.map +0 -1
  26. package/dist/app/ssh.mjs +0 -218
  27. package/dist/db/analyze.d.mts +0 -3
  28. package/dist/db/analyze.d.mts.map +0 -1
  29. package/dist/db/analyze.mjs +0 -16
  30. package/dist/db/attributes.d.mts +0 -16
  31. package/dist/db/attributes.d.mts.map +0 -1
  32. package/dist/db/attributes.mjs +0 -37
  33. package/dist/db/enums.d.mts +0 -8
  34. package/dist/db/enums.d.mts.map +0 -1
  35. package/dist/db/enums.mjs +0 -24
  36. package/dist/db/file-stats.d.mts +0 -11
  37. package/dist/db/file-stats.d.mts.map +0 -1
  38. package/dist/db/file-stats.mjs +0 -43
  39. package/dist/db/foreign-keys.d.mts +0 -14
  40. package/dist/db/foreign-keys.d.mts.map +0 -1
  41. package/dist/db/foreign-keys.mjs +0 -44
  42. package/dist/db/index.d.mts +0 -10
  43. package/dist/db/index.d.mts.map +0 -1
  44. package/dist/db/index.mjs +0 -10
  45. package/dist/db/indexes.d.mts +0 -16
  46. package/dist/db/indexes.d.mts.map +0 -1
  47. package/dist/db/indexes.mjs +0 -38
  48. package/dist/db/relations.d.mts +0 -11
  49. package/dist/db/relations.d.mts.map +0 -1
  50. package/dist/db/relations.mjs +0 -32
  51. package/dist/db/stats.d.mts +0 -12
  52. package/dist/db/stats.d.mts.map +0 -1
  53. package/dist/db/stats.mjs +0 -34
  54. package/dist/db/version.d.mts +0 -14
  55. package/dist/db/version.d.mts.map +0 -1
  56. package/dist/db/version.mjs +0 -27
  57. package/dist/index.d.mts +0 -23
  58. package/dist/index.d.mts.map +0 -1
  59. package/dist/lib/env.d.mts +0 -2
  60. package/dist/lib/env.d.mts.map +0 -1
  61. package/dist/lib/env.mjs +0 -4
  62. package/dist/lib/trpc-url.d.mts +0 -2
  63. package/dist/lib/trpc-url.d.mts.map +0 -1
  64. package/dist/lib/trpc-url.mjs +0 -5
  65. package/dist/lib/trpc.d.mts +0 -7
  66. package/dist/lib/trpc.d.mts.map +0 -1
  67. package/dist/lib/trpc.mjs +0 -37
  68. package/dist/lib/trpc.react.d.mts +0 -4
  69. package/dist/lib/trpc.react.d.mts.map +0 -1
  70. package/dist/lib/trpc.react.mjs +0 -3
  71. package/dist/lib/version.d.mts +0 -2
  72. package/dist/lib/version.d.mts.map +0 -1
  73. package/dist/lib/version.mjs +0 -5
  74. package/dist/logger.d.mts +0 -3
  75. package/dist/logger.d.mts.map +0 -1
  76. package/dist/logger.mjs +0 -8
  77. package/dist/providers/TrpcProvider.d.ts +0 -9
  78. package/dist/providers/TrpcProvider.d.ts.map +0 -1
  79. package/dist/providers/TrpcProvider.js +0 -41
  80. package/dist/store.d.mts +0 -83
  81. package/dist/store.d.mts.map +0 -1
  82. package/dist/store.mjs +0 -84
  83. package/dist/types/connection.d.mts +0 -17
  84. package/dist/types/connection.d.mts.map +0 -1
  85. package/dist/types/connection.mjs +0 -2
  86. package/dist/ui/App.d.ts +0 -10
  87. package/dist/ui/App.d.ts.map +0 -1
  88. package/dist/ui/App.js +0 -23
  89. package/dist/ui/components/DB.d.ts +0 -10
  90. package/dist/ui/components/DB.d.ts.map +0 -1
  91. package/dist/ui/components/DB.js +0 -22
  92. package/dist/ui/components/Error.d.ts +0 -7
  93. package/dist/ui/components/Error.d.ts.map +0 -1
  94. package/dist/ui/components/Error.js +0 -6
  95. package/dist/ui/components/Gate.d.ts +0 -10
  96. package/dist/ui/components/Gate.d.ts.map +0 -1
  97. package/dist/ui/components/Gate.js +0 -15
  98. package/dist/ui/components/Introspect.d.ts +0 -10
  99. package/dist/ui/components/Introspect.d.ts.map +0 -1
  100. package/dist/ui/components/Introspect.js +0 -66
  101. package/dist/ui/components/OutputJson.d.ts +0 -10
  102. package/dist/ui/components/OutputJson.d.ts.map +0 -1
  103. package/dist/ui/components/OutputJson.js +0 -18
  104. package/dist/ui/components/PasswordInput.d.ts +0 -7
  105. package/dist/ui/components/PasswordInput.d.ts.map +0 -1
  106. package/dist/ui/components/PasswordInput.js +0 -32
  107. package/dist/ui/components/SSH.d.ts +0 -10
  108. package/dist/ui/components/SSH.d.ts.map +0 -1
  109. package/dist/ui/components/SSH.js +0 -22
  110. package/dist/ui/components/Session.d.ts +0 -10
  111. package/dist/ui/components/Session.d.ts.map +0 -1
  112. package/dist/ui/components/Session.js +0 -47
  113. package/dist/ui/components/Spinner.d.ts +0 -3
  114. package/dist/ui/components/Spinner.d.ts.map +0 -1
  115. package/dist/ui/components/Spinner.js +0 -18
  116. package/dist/ui/components/Splash.d.ts +0 -3
  117. package/dist/ui/components/Splash.d.ts.map +0 -1
  118. package/dist/ui/components/Splash.js +0 -13
  119. package/dist/ui/components/TextInput.d.ts +0 -11
  120. package/dist/ui/components/TextInput.d.ts.map +0 -1
  121. package/dist/ui/components/TextInput.js +0 -286
  122. package/dist/ui/components/UserExplanation.d.ts +0 -10
  123. package/dist/ui/components/UserExplanation.d.ts.map +0 -1
  124. package/dist/ui/components/UserExplanation.js +0 -34
  125. package/dist/validatePaths.d.mts +0 -13
  126. package/dist/validatePaths.d.mts.map +0 -1
  127. package/dist/validatePaths.mjs +0 -54
@@ -1,47 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text, useInput } from 'ink';
3
- import { useState, useEffect } from 'react';
4
- import { observer } from 'mobx-react-lite';
5
- import { openSessionURL, shouldOpenBrowser } from '../../app/open-url.mjs';
6
- import { Spinner } from './Spinner.js';
7
- const terminalLink = (url) => `${url}`;
8
- const canOpen = shouldOpenBrowser();
9
- export const Account = observer(({ store }) => {
10
- const account = store.steps.account;
11
- const [dotVisible, setDotVisible] = useState(true);
12
- const [opened, setOpened] = useState(false);
13
- useEffect(() => {
14
- if (account.state !== 'waiting') {
15
- return;
16
- }
17
- const id = setInterval(() => {
18
- setDotVisible((prev) => !prev);
19
- }, 750);
20
- return () => {
21
- clearInterval(id);
22
- };
23
- }, [account.state]);
24
- useInput((_input, key) => {
25
- if (key.return && account.url) {
26
- setOpened(true);
27
- openSessionURL(account.url);
28
- }
29
- }, { isActive: account.state === 'waiting' && canOpen });
30
- if (account.state === 'idle') {
31
- return null;
32
- }
33
- if (account.state === 'error') {
34
- return (_jsxs(Box, { children: [_jsx(Text, { color: "red", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { color: "red", children: account.error })] }));
35
- }
36
- if (account.state === 'connected') {
37
- return (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { children: "connected to account " }), _jsx(Text, { bold: true, children: account.email })] }));
38
- }
39
- if (account.state === 'fetching-account') {
40
- return (_jsxs(Box, { children: [_jsx(Spinner, {}), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { children: "connecting..." })] }));
41
- }
42
- if (account.state === 'waiting') {
43
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: dotVisible ? '●' : ' ' }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT" })] }), _jsxs(Box, { borderStyle: "single", paddingX: 2, paddingY: 1, marginLeft: 1, borderDimColor: true, width: 92, flexDirection: "column", children: [_jsxs(Text, { bold: true, children: ["Login to your dbctx.io account", '\n'] }), _jsx(Text, { color: 'cyan', children: terminalLink(account.url) }), canOpen ? (_jsxs(Text, { color: "gray", children: ["Press Enter to ", opened ? 're-open' : 'open', " in browser"] })) : null, _jsx(Text, { children: '\n\n' }), _jsxs(Box, { children: [_jsx(Spinner, {}), _jsx(Text, { dimColor: true, children: " Waiting for login ..." })] })] })] }));
44
- }
45
- return (_jsxs(Box, { children: [_jsx(Spinner, {}), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { children: "creating..." })] }));
46
- });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInVpL2NvbXBvbmVudHMvU2Vzc2lvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxNQUFNLEtBQUssQ0FBQztBQUV4QyxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFNckMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFFdkQsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQWdCLEVBQWEsRUFBRTtJQUNsRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNwQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUN4QixhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFD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QyxNQUFNLGdDQUNFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLG1CQUV4QyxDQUNWLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDUixLQUFDLElBQUksY0FBRSxNQUFNLEdBQVEsRUFDckIsTUFBQyxHQUFHLGVBQ0EsS0FBQyxPQUFPLEtBQUcsRUFDWCxLQUFDLElBQUksSUFBQyxRQUFRLDZDQUE4QixJQUMxQyxJQUNKLElBQ0osQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sQ0FDSCxNQUFDLEdBQUcsZUFDQSxLQUFDLE9BQU8sS0FBRyxFQUNYLEtBQUMsSUFBSSxvQkFBUyxFQUNkLEtBQUMsSUFBSSxJQUFDLElBQUksZ0NBQWlCLEVBQzNCLEtBQUMsSUFBSSw4QkFBbUIsSUFDdEIsQ0FDVCxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JveCwgVGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtvcGVuU2Vzc2lvblVSTCwgc2hvdWxkT3BlbkJyb3dzZXJ9IGZyb20gJy4uLy4uL2FwcC9vcGVuLXVybC5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRTZXNzaW9uUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IHRlcm1pbmFsTGluayA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiBgJHt1cmx9YDtcblxuY29uc3QgY2FuT3BlbiA9IHNob3VsZE9wZW5Ccm93c2VyKCk7XG5cbmV4cG9ydCBjb25zdCBBY2NvdW50ID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRTZXNzaW9uUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IGFjY291bnQgPSBzdG9yZS5zdGVwcy5hY2NvdW50O1xuICAgIGNvbnN0IFtkb3RWaXNpYmxlLCBzZXREb3RWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtvcGVuZWQsIHNldE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYWNjb3VudC5zdGF0ZSAhPT0gJ3dhaXRpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldERvdFZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgNzUwKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2FjY291bnQuc3RhdGVdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuICYmIGFjY291bnQudXJsKSB7XG4gICAgICAgICAgICAgICAgc2V0T3BlbmVkKHRydWUpO1xuICAgICAgICAgICAgICAgIG9wZW5TZXNzaW9uVVJMKGFjY291bnQudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge2lzQWN0aXZlOiBhY2NvdW50LnN0YXRlID09PSAnd2FpdGluZycgJiYgY2FuT3Blbn0sXG4gICAgKTtcblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj7il488L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPnthY2NvdW50LmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+4pePPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+Y29ubmVjdGVkIHRvIGFjY291bnQgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+e2FjY291bnQuZW1haWx9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdmZXRjaGluZy1hY2NvdW50Jykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+Y29ubmVjdGluZy4uLjwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnd2FpdGluZycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPntkb3RWaXNpYmxlID8gJ+KXjycgOiAnICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdD17MX1cbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezkyfVxuICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TG9naW4gdG8geW91ciBkYmN0eC5pbyBhY2NvdW50eydcXG4nfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eydjeWFuJ30+e3Rlcm1pbmFsTGluayhhY2NvdW50LnVybCEpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2Nhbk9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzcyBFbnRlciB0byB7b3BlbmVkID8gJ3JlLW9wZW4nIDogJ29wZW4nfSBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PnsnXFxuXFxuJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+IFdhaXRpbmcgZm9yIGxvZ2luIC4uLjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ6IDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PmNyZWF0aW5nLi4uPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iXX0=
@@ -1,3 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- export declare const Spinner: () => ReactNode;
3
- //# sourceMappingURL=Spinner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Spinner.d.ts","sourceRoot":"./src/","sources":["ui/components/Spinner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAOrC,eAAO,MAAM,OAAO,QAAO,SAc1B,CAAC"}
@@ -1,18 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Text } from 'ink';
3
- import { useState, useEffect } from 'react';
4
- const SPINNER_FRAMES = ['·', '✻', '✽', '✶', '\u2733\uFE0E', '✢'];
5
- const SPINNER_INTERVAL = 200;
6
- export const Spinner = () => {
7
- const [frame, setFrame] = useState(0);
8
- useEffect(() => {
9
- const id = setInterval(() => {
10
- setFrame((prev) => (prev + 1) % SPINNER_FRAMES.length);
11
- }, SPINNER_INTERVAL);
12
- return () => {
13
- clearInterval(id);
14
- };
15
- }, []);
16
- return _jsx(Text, { color: "cyan", children: SPINNER_FRAMES[frame] });
17
- };
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Bpbm5lci5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInVpL2NvbXBvbmVudHMvU3Bpbm5lci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFFekIsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBVSxDQUFDO0FBRTFFLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBRTdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFjLEVBQUU7SUFDbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNYLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFckIsT0FBTyxHQUFHLEVBQUU7WUFDUixhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsT0FBTyxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBUSxDQUFDO0FBQzdELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBTUElOTkVSX0ZSQU1FUyA9IFsnwrcnLCAn4py7JywgJ+KcvScsICfinLYnLCAnXFx1MjczM1xcdUZFMEUnLCAn4pyiJ10gYXMgY29uc3Q7XG5cbmNvbnN0IFNQSU5ORVJfSU5URVJWQUwgPSAyMDA7XG5cbmV4cG9ydCBjb25zdCBTcGlubmVyID0gKCk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgW2ZyYW1lLCBzZXRGcmFtZV0gPSB1c2VTdGF0ZSgwKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgc2V0RnJhbWUoKHByZXYpID0+IChwcmV2ICsgMSkgJSBTUElOTkVSX0ZSQU1FUy5sZW5ndGgpO1xuICAgICAgICB9LCBTUElOTkVSX0lOVEVSVkFMKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIDxUZXh0IGNvbG9yPVwiY3lhblwiPntTUElOTkVSX0ZSQU1FU1tmcmFtZV19PC9UZXh0Pjtcbn07XG4iXX0=
@@ -1,3 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- export declare const Splash: () => ReactNode;
3
- //# sourceMappingURL=Splash.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Splash.d.ts","sourceRoot":"./src/","sources":["ui/components/Splash.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAIrC,eAAO,MAAM,MAAM,QAAO,SA4BzB,CAAC"}
@@ -1,13 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from 'ink';
3
- import dedent from 'dedent';
4
- import { CLIENT_VERSION } from '../../lib/version.mjs';
5
- export const Splash = () => {
6
- return (_jsxs(Box, { flexDirection: 'row', marginY: 1, children: [_jsx(Box, { paddingX: 2, children: _jsx(Text, { children: dedent `
7
- ▛▀▖▛▀▖▞▀▖▀▛▘▌ ▌
8
- ▌ ▌▙▄▘▌ ▌ ▝▞
9
- ▌ ▌▌ ▌▌ ▖ ▌ ▞▝▖
10
- ▀▀ ▀▀ ▝▀ ▘ ▘ ▘
11
- ` }) }), _jsx(Box, { width: 42, alignItems: 'center', flexDirection: 'column', children: _jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: [_jsx(Text, { color: 'cyan', children: "dbctx.io" }), _jsx(Text, { dimColor: true, children: ` — v${CLIENT_VERSION}` })] }), _jsx(Text, { children: 'AI Enriched Database Docs for Humans & Coding Agents.' })] }) })] }));
12
- };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsYXNoLmpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsidWkvY29tcG9uZW50cy9TcGxhc2gudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFjLEVBQUU7SUFDbEMsT0FBTyxDQUNILE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsYUFDakMsS0FBQyxHQUFHLElBQUMsUUFBUSxFQUFFLENBQUMsWUFDWixLQUFDLElBQUksY0FDQSxNQUFNLENBQUE7Ozs7O3FCQUtOLEdBQ0UsR0FDTCxFQUNOLEtBQUMsR0FBRyxJQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxZQUN6RCxNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUUsUUFBUSxhQUN4QixNQUFDLElBQUksZUFDRCxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsTUFBTSx5QkFBaUIsRUFDcEMsS0FBQyxJQUFJLElBQUMsUUFBUSxrQkFBRSxPQUFPLGNBQWMsRUFBRSxHQUFRLElBQzVDLEVBQ1AsS0FBQyxJQUFJLGNBRUcsdURBQXVELEdBRXhELElBQ0wsR0FDSixJQUNKLENBQ1QsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGRlZGVudCBmcm9tICdkZWRlbnQnO1xuaW1wb3J0IHtDTElFTlRfVkVSU0lPTn0gZnJvbSAnLi4vLi4vbGliL3ZlcnNpb24ubWpzJztcblxuZXhwb3J0IGNvbnN0IFNwbGFzaCA9ICgpOiBSZWFjdE5vZGUgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj17J3Jvdyd9IG1hcmdpblk9ezF9PlxuICAgICAgICAgICAgPEJveCBwYWRkaW5nWD17Mn0+XG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIHtkZWRlbnRgXG4gICAgICAgICAgICAgICAgICAgICAgICDilpviloDilpbilpviloDilpbilp7iloDilpbiloDilpvilpjilowg4paMXG4gICAgICAgICAgICAgICAgICAgICAgICDilowg4paM4paZ4paE4paY4paMICAg4paMIOKWneKWnlxuICAgICAgICAgICAgICAgICAgICAgICAg4paMIOKWjOKWjCDilozilowg4paWIOKWjCDilp7ilp3ilpZcbiAgICAgICAgICAgICAgICAgICAgICAgIOKWgOKWgCDiloDiloAg4pad4paAICDilpgg4paYIOKWmFxuICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17NDJ9IGFsaWduSXRlbXM9eydjZW50ZXInfSBmbGV4RGlyZWN0aW9uPXsnY29sdW1uJ30+XG4gICAgICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPXsnY29sdW1uJ30+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eydjeWFuJ30+ZGJjdHguaW88L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57YCDigJQgdiR7Q0xJRU5UX1ZFUlNJT059YH08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FJIEVucmljaGVkIERhdGFiYXNlIERvY3MgZm9yIEh1bWFucyAmIENvZGluZyBBZ2VudHMuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn07XG4iXX0=
@@ -1,11 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- type TLinePrefixFn = (lineNumber: number, totalLines: number) => ReactNode;
3
- type TTextInputProps = {
4
- readonly isActive: boolean;
5
- readonly onSubmit: (value: string) => void;
6
- readonly placeholder?: string;
7
- readonly linePrefix?: ReactNode | TLinePrefixFn;
8
- };
9
- export declare const TextInput: ({ isActive, onSubmit, placeholder, linePrefix, }: TTextInputProps) => ReactNode;
10
- export {};
11
- //# sourceMappingURL=TextInput.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextInput.d.ts","sourceRoot":"./src/","sources":["ui/components/TextInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AA2DrC,KAAK,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,SAAS,CAAC;AAE3E,KAAK,eAAe,GAAG;IACnB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,kDAKvB,eAAe,KAAG,SAgVpB,CAAC"}
@@ -1,286 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text, useInput } from 'ink';
3
- import { useState, useEffect, useRef } from 'react';
4
- const CURSOR_INTERVAL = 500;
5
- const MAX_UNDO = 100;
6
- const UNDO_GROUP_DELAY = 2500;
7
- const findLineStart = (value, cursor) => {
8
- const idx = value.lastIndexOf('\n', cursor - 1);
9
- return idx === -1 ? 0 : idx + 1;
10
- };
11
- const findLineEnd = (value, cursor) => {
12
- const idx = value.indexOf('\n', cursor);
13
- return idx === -1 ? value.length : idx;
14
- };
15
- const findPrevWordBoundary = (value, cursor) => {
16
- const lineStart = findLineStart(value, cursor);
17
- let pos = cursor - 1;
18
- while (pos > lineStart && /\s/.test(value[pos]) && value[pos] !== '\n') {
19
- pos -= 1;
20
- }
21
- while (pos > lineStart && !/\s/.test(value[pos - 1])) {
22
- pos -= 1;
23
- }
24
- return Math.max(lineStart, pos);
25
- };
26
- const findNextWordBoundary = (value, cursor) => {
27
- const lineEnd = findLineEnd(value, cursor);
28
- let pos = cursor;
29
- while (pos < lineEnd && !/\s/.test(value[pos])) {
30
- pos += 1;
31
- }
32
- while (pos < lineEnd && /\s/.test(value[pos]) && value[pos] !== '\n') {
33
- pos += 1;
34
- }
35
- return Math.min(lineEnd, pos);
36
- };
37
- const getCursorLineAndColumn = (value, cursor) => {
38
- let line = 0;
39
- let lastLineStart = 0;
40
- for (let i = 0; i < cursor; i++) {
41
- if (value[i] === '\n') {
42
- line += 1;
43
- lastLineStart = i + 1;
44
- }
45
- }
46
- return { line, column: cursor - lastLineStart };
47
- };
48
- export const TextInput = ({ isActive, onSubmit, placeholder, linePrefix, }) => {
49
- const [value, setValue] = useState('');
50
- const [cursor, setCursor] = useState(0);
51
- const [cursorVisible, setCursorVisible] = useState(true);
52
- useEffect(() => {
53
- if (!isActive) {
54
- return;
55
- }
56
- const id = setInterval(() => {
57
- setCursorVisible((prev) => !prev);
58
- }, CURSOR_INTERVAL);
59
- return () => {
60
- clearInterval(id);
61
- };
62
- }, [isActive]);
63
- const undoStack = useRef([]);
64
- const lastMutationTime = useRef(0);
65
- const lastMutationType = useRef(null);
66
- const resetBlink = () => {
67
- setCursorVisible(true);
68
- };
69
- const pushUndo = (type) => {
70
- const now = Date.now();
71
- const elapsed = now - lastMutationTime.current;
72
- const sameType = type === lastMutationType.current;
73
- lastMutationTime.current = now;
74
- lastMutationType.current = type;
75
- if (elapsed < UNDO_GROUP_DELAY && sameType) {
76
- return;
77
- }
78
- const stack = undoStack.current;
79
- if (stack.length >= MAX_UNDO) {
80
- stack.shift();
81
- }
82
- stack.push({ value, cursor });
83
- };
84
- useInput((input, key) => {
85
- // Ctrl+J — insert newline
86
- if (key.ctrl && input === 'j') {
87
- resetBlink();
88
- pushUndo('insert');
89
- setValue((v) => v.slice(0, cursor) + '\n' + v.slice(cursor));
90
- setCursor((c) => c + 1);
91
- return;
92
- }
93
- // Enter — submit
94
- if (key.return) {
95
- onSubmit(value);
96
- return;
97
- }
98
- // Up arrow — move to same column on previous line
99
- if (key.upArrow) {
100
- resetBlink();
101
- setCursor((c) => {
102
- const { line, column } = getCursorLineAndColumn(value, c);
103
- if (line === 0) {
104
- return findLineStart(value, c);
105
- }
106
- const prevLineEnd = findLineStart(value, c) - 1;
107
- const prevLineStart = findLineStart(value, prevLineEnd);
108
- const prevLineLength = prevLineEnd - prevLineStart;
109
- return prevLineStart + Math.min(column, prevLineLength);
110
- });
111
- return;
112
- }
113
- // Down arrow — move to next line, or create one if on last line
114
- if (key.downArrow) {
115
- resetBlink();
116
- const currentLineEnd = findLineEnd(value, cursor);
117
- if (currentLineEnd >= value.length) {
118
- // On last line — insert a new line and move cursor there
119
- pushUndo('insert');
120
- setValue((v) => v + '\n');
121
- setCursor(value.length + 1);
122
- }
123
- else {
124
- setCursor((c) => {
125
- const { column } = getCursorLineAndColumn(value, c);
126
- const nextLineStart = currentLineEnd + 1;
127
- const nextLineEnd = findLineEnd(value, nextLineStart);
128
- const nextLineLength = nextLineEnd - nextLineStart;
129
- return nextLineStart + Math.min(column, nextLineLength);
130
- });
131
- }
132
- return;
133
- }
134
- // Left arrow
135
- if (key.leftArrow) {
136
- resetBlink();
137
- setCursor((c) => Math.max(0, c - 1));
138
- return;
139
- }
140
- // Right arrow
141
- if (key.rightArrow) {
142
- resetBlink();
143
- setCursor((c) => Math.min(value.length, c + 1));
144
- return;
145
- }
146
- // Opt+Left (meta+b) — word jump backward
147
- if (key.meta && input === 'b') {
148
- resetBlink();
149
- setCursor((c) => findPrevWordBoundary(value, c));
150
- return;
151
- }
152
- // Opt+Right (meta+f) — word jump forward
153
- if (key.meta && input === 'f') {
154
- resetBlink();
155
- setCursor((c) => findNextWordBoundary(value, c));
156
- return;
157
- }
158
- // Ctrl+A — start of current line
159
- if (key.ctrl && input === 'a') {
160
- resetBlink();
161
- setCursor((c) => findLineStart(value, c));
162
- return;
163
- }
164
- // Ctrl+E — end of current line
165
- if (key.ctrl && input === 'e') {
166
- resetBlink();
167
- setCursor((c) => findLineEnd(value, c));
168
- return;
169
- }
170
- // Ctrl+W — delete word before cursor
171
- if (key.ctrl && input === 'w') {
172
- resetBlink();
173
- pushUndo('delete');
174
- setCursor((c) => {
175
- const boundary = findPrevWordBoundary(value, c);
176
- setValue((v) => v.slice(0, boundary) + v.slice(c));
177
- return boundary;
178
- });
179
- return;
180
- }
181
- // Ctrl+U — delete to start of current line
182
- if (key.ctrl && input === 'u') {
183
- resetBlink();
184
- pushUndo('delete');
185
- setCursor((c) => {
186
- const lineStart = findLineStart(value, c);
187
- setValue((v) => v.slice(0, lineStart) + v.slice(c));
188
- return lineStart;
189
- });
190
- return;
191
- }
192
- // Ctrl+K — delete to end of current line
193
- if (key.ctrl && input === 'k') {
194
- resetBlink();
195
- pushUndo('delete');
196
- setCursor((c) => {
197
- const lineEnd = findLineEnd(value, c);
198
- setValue((v) => v.slice(0, c) + v.slice(lineEnd));
199
- return c;
200
- });
201
- return;
202
- }
203
- // Backspace (with Opt+Backspace for word deletion)
204
- if (key.backspace || key.delete) {
205
- if (key.meta) {
206
- // Opt+Delete — delete word before cursor
207
- resetBlink();
208
- pushUndo('delete');
209
- const boundary = findPrevWordBoundary(value, cursor);
210
- setValue((v) => v.slice(0, boundary) + v.slice(cursor));
211
- setCursor(boundary);
212
- return;
213
- }
214
- if (cursor > 0) {
215
- resetBlink();
216
- pushUndo('delete');
217
- setValue((v) => v.slice(0, cursor - 1) + v.slice(cursor));
218
- setCursor((c) => c - 1);
219
- }
220
- return;
221
- }
222
- // Ctrl+Z — undo
223
- if (key.ctrl && input === 'z') {
224
- resetBlink();
225
- const entry = undoStack.current.pop();
226
- if (entry) {
227
- setValue(entry.value);
228
- setCursor(entry.cursor);
229
- }
230
- lastMutationTime.current = 0;
231
- lastMutationType.current = null;
232
- return;
233
- }
234
- // Ignore other control/meta/escape/tab keys
235
- if (key.ctrl || key.escape || key.tab) {
236
- return;
237
- }
238
- // Regular character input
239
- if (input && input.length > 0) {
240
- resetBlink();
241
- pushUndo('insert');
242
- setValue((v) => v.slice(0, cursor) + input + v.slice(cursor));
243
- setCursor((c) => c + input.length);
244
- }
245
- }, { isActive });
246
- const renderLine = (content, key, lineNumber, totalLines) => {
247
- const prefix = typeof linePrefix === 'function'
248
- ? linePrefix(lineNumber, totalLines)
249
- : linePrefix;
250
- return prefix ? (_jsxs(Box, { children: [prefix, content] }, key)) : (_jsx(Box, { children: content }, key));
251
- };
252
- // Render placeholder when empty and not focused
253
- if (value.length === 0 && !isActive && placeholder) {
254
- return (_jsxs(Box, { flexDirection: "column", children: [renderLine(_jsx(Text, { dimColor: true, children: placeholder }), 0, 0, 2), renderLine(_jsx(Text, { children: " " }), 1, 1, 2)] }));
255
- }
256
- // Render placeholder with cursor when empty and focused
257
- if (value.length === 0 && isActive) {
258
- return (_jsxs(Box, { flexDirection: "column", children: [renderLine(_jsxs(Text, { children: [cursorVisible ? '\x1b[7m \x1b[27m' : ' ', placeholder ? (_jsx(Text, { dimColor: true, children: placeholder })) : null] }), 0, 0, 2), renderLine(_jsx(Text, { children: " " }), 1, 1, 2)] }));
259
- }
260
- // Multi-line rendering (minimum 2 visible lines)
261
- const lines = value.split('\n');
262
- const totalLines = Math.max(lines.length, 2);
263
- const hasContent = value.replace(/\n/g, '').length > 0;
264
- const { line: cursorLine, column: cursorColumn } = getCursorLineAndColumn(value, cursor);
265
- const renderedLines = lines.map((lineText, lineIdx) => {
266
- const isCursorLine = lineIdx === cursorLine;
267
- if (!isCursorLine || !isActive) {
268
- return renderLine(_jsxs(Text, { children: [lineText || ' ', lineIdx === 0 && !hasContent && placeholder ? (_jsx(Text, { dimColor: true, children: placeholder })) : null] }), lineIdx, lineIdx, totalLines);
269
- }
270
- const before = lineText.slice(0, cursorColumn);
271
- const atCursor = lineText[cursorColumn] ?? ' ';
272
- const after = lineText.slice(cursorColumn + 1);
273
- return renderLine(_jsxs(Text, { children: [before, cursorVisible
274
- ? `\x1b[7m${atCursor}\x1b[27m`
275
- : atCursor === ' ' && cursorColumn >= lineText.length
276
- ? ' '
277
- : atCursor, after, lineIdx === 0 && !hasContent && placeholder ? (_jsx(Text, { dimColor: true, children: placeholder })) : null] }), lineIdx, lineIdx, totalLines);
278
- });
279
- // Pad to minimum 2 lines so the input visually signals multi-line
280
- while (renderedLines.length < 2) {
281
- const padIdx = renderedLines.length;
282
- renderedLines.push(renderLine(_jsx(Text, { children: " " }), `pad-${padIdx}`, padIdx, totalLines));
283
- }
284
- return _jsx(Box, { flexDirection: "column", children: renderedLines });
285
- };
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dElucHV0LmpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsidWkvY29tcG9uZW50cy9UZXh0SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFFeEMsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRWxELE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUM1QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFLOUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFVLEVBQUU7SUFDNUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFVLEVBQUU7SUFDMUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBVSxFQUFFO0lBQ25FLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0Ms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QUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ3BDLGFBQWEsQ0FBQyxJQUFJLENBQ2QsVUFBVSxDQUFDLEtBQUMsSUFBSSxvQkFBUyxFQUFFLE9BQU8sTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUNsRSxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sS0FBQyxHQUFHLElBQUMsYUFBYSxFQUFDLFFBQVEsWUFBRSxhQUFhLEdBQU8sQ0FBQztBQUM3RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JveCwgVGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBDVVJTT1JfSU5URVJWQUwgPSA1MDA7XG5jb25zdCBNQVhfVU5ETyA9IDEwMDtcbmNvbnN0IFVORE9fR1JPVVBfREVMQVkgPSAyNTAwO1xuXG50eXBlIFRVbmRvRW50cnkgPSB7cmVhZG9ubHkgdmFsdWU6IHN0cmluZzsgcmVhZG9ubHkgY3Vyc29yOiBudW1iZXJ9O1xudHlwZSBUTXV0YXRpb25UeXBlID0gJ2luc2VydCcgfCAnZGVsZXRlJztcblxuY29uc3QgZmluZExpbmVTdGFydCA9ICh2YWx1ZTogc3RyaW5nLCBjdXJzb3I6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgY29uc3QgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoJ1xcbicsIGN1cnNvciAtIDEpO1xuICAgIHJldHVybiBpZHggPT09IC0xID8gMCA6IGlkeCArIDE7XG59O1xuXG5jb25zdCBmaW5kTGluZUVuZCA9ICh2YWx1ZTogc3RyaW5nLCBjdXJzb3I6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgY29uc3QgaWR4ID0gdmFsdWUuaW5kZXhPZignXFxuJywgY3Vyc29yKTtcbiAgICByZXR1cm4gaWR4ID09PSAtMSA/IHZhbHVlLmxlbmd0aCA6IGlkeDtcbn07XG5cbmNvbnN0IGZpbmRQcmV2V29yZEJvdW5kYXJ5ID0gKHZhbHVlOiBzdHJpbmcsIGN1cnNvcjogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsaW5lU3RhcnQgPSBmaW5kTGluZVN0YXJ0KHZhbHVlLCBjdXJzb3IpO1xuICAgIGxldCBwb3MgPSBjdXJzb3IgLSAxO1xuICAgIHdoaWxlIChwb3MgPiBsaW5lU3RhcnQgJiYgL1xccy8udGVzdCh2YWx1ZVtwb3NdISkgJiYgdmFsdWVbcG9zXSAhPT0gJ1xcbicpIHtcbiAgICAgICAgcG9zIC09IDE7XG4gICAgfVxuICAgIHdoaWxlIChwb3MgPiBsaW5lU3RhcnQgJiYgIS9cXHMvLnRlc3QodmFsdWVbcG9zIC0gMV0hKSkge1xuICAgICAgICBwb3MgLT0gMTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWF4KGxpbmVTdGFydCwgcG9zKTtcbn07XG5cbmNvbnN0IGZpbmROZXh0V29yZEJvdW5kYXJ5ID0gKHZhbHVlOiBzdHJpbmcsIGN1cnNvcjogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsaW5lRW5kID0gZmluZExpbmVFbmQodmFsdWUsIGN1cnNvcik7XG4gICAgbGV0IHBvcyA9IGN1cnNvcjtcbiAgICB3aGlsZSAocG9zIDwgbGluZUVuZCAmJiAhL1xccy8udGVzdCh2YWx1ZVtwb3NdISkpIHtcbiAgICAgICAgcG9zICs9IDE7XG4gICAgfVxuICAgIHdoaWxlIChwb3MgPCBsaW5lRW5kICYmIC9cXHMvLnRlc3QodmFsdWVbcG9zXSEpICYmIHZhbHVlW3Bvc10gIT09ICdcXG4nKSB7XG4gICAgICAgIHBvcyArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5taW4obGluZUVuZCwgcG9zKTtcbn07XG5cbmNvbnN0IGdldEN1cnNvckxpbmVBbmRDb2x1bW4gPSAoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBjdXJzb3I6IG51bWJlcixcbik6IHtsaW5lOiBudW1iZXI7IGNvbHVtbjogbnVtYmVyfSA9PiB7XG4gICAgbGV0IGxpbmUgPSAwO1xuICAgIGxldCBsYXN0TGluZVN0YXJ0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnNvcjsgaSsrKSB7XG4gICAgICAgIGlmICh2YWx1ZVtpXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGxpbmUgKz0gMTtcbiAgICAgICAgICAgIGxhc3RMaW5lU3RhcnQgPSBpICsgMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge2xpbmUsIGNvbHVtbjogY3Vyc29yIC0gbGFzdExpbmVTdGFydH07XG59O1xuXG50eXBlIFRMaW5lUHJlZml4Rm4gPSAobGluZU51bWJlcjogbnVtYmVyLCB0b3RhbExpbmVzOiBudW1iZXIpID0+IFJlYWN0Tm9kZTtcblxudHlwZSBUVGV4dElucHV0UHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgb25TdWJtaXQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGxpbmVQcmVmaXg/OiBSZWFjdE5vZGUgfCBUTGluZVByZWZpeEZuO1xufTtcblxuZXhwb3J0IGNvbnN0IFRleHRJbnB1dCA9ICh7XG4gICAgaXNBY3RpdmUsXG4gICAgb25TdWJtaXQsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGluZVByZWZpeCxcbn06IFRUZXh0SW5wdXRQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtjdXJzb3JWaXNpYmxlLCBzZXRDdXJzb3JWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRDdXJzb3JWaXNpYmxlKChwcmV2KSA9PiAhcHJldik7XG4gICAgICAgIH0sIENVUlNPUl9JTlRFUlZBTCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9O1xuICAgIH0sIFtpc0FjdGl2ZV0pO1xuXG4gICAgY29uc3QgdW5kb1N0YWNrID0gdXNlUmVmPFRVbmRvRW50cnlbXT4oW10pO1xuICAgIGNvbnN0IGxhc3RNdXRhdGlvblRpbWUgPSB1c2VSZWYoMCk7XG4gICAgY29uc3QgbGFzdE11dGF0aW9uVHlwZSA9IHVzZVJlZjxUTXV0YXRpb25UeXBlIHwgbnVsbD4obnVsbCk7XG5cbiAgICBjb25zdCByZXNldEJsaW5rID0gKCkgPT4ge1xuICAgICAgICBzZXRDdXJzb3JWaXNpYmxlKHRydWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBwdXNoVW5kbyA9ICh0eXBlOiBUTXV0YXRpb25UeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBub3cgLSBsYXN0TXV0YXRpb25UaW1lLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IHNhbWVUeXBlID0gdHlwZSA9PT0gbGFzdE11dGF0aW9uVHlwZS5jdXJyZW50O1xuXG4gICAgICAgIGxhc3RNdXRhdGlvblRpbWUuY3VycmVudCA9IG5vdztcbiAgICAgICAgbGFzdE11dGF0aW9uVHlwZS5jdXJyZW50ID0gdHlwZTtcblxuICAgICAgICBpZiAoZWxhcHNlZCA8IFVORE9fR1JPVVBfREVMQVkgJiYgc2FtZVR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gdW5kb1N0YWNrLmN1cnJlbnQ7XG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPj0gTUFYX1VORE8pIHtcbiAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2sucHVzaCh7dmFsdWUsIGN1cnNvcn0pO1xuICAgIH07XG5cbiAgICB1c2VJbnB1dChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIC8vIEN0cmwrSiDigJQgaW5zZXJ0IG5ld2xpbmVcbiAgICAgICAgICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ2onKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdpbnNlcnQnKTtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdi5zbGljZSgwLCBjdXJzb3IpICsgJ1xcbicgKyB2LnNsaWNlKGN1cnNvcikpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gYyArIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRW50ZXIg4oCUIHN1Ym1pdFxuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICBvblN1Ym1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcCBhcnJvdyDigJQgbW92ZSB0byBzYW1lIGNvbHVtbiBvbiBwcmV2aW91cyBsaW5lXG4gICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtsaW5lLCBjb2x1bW59ID0gZ2V0Q3Vyc29yTGluZUFuZENvbHVtbih2YWx1ZSwgYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZExpbmVTdGFydCh2YWx1ZSwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkxpbmVFbmQgPSBmaW5kTGluZVN0YXJ0KHZhbHVlLCBjKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZMaW5lU3RhcnQgPSBmaW5kTGluZVN0YXJ0KHZhbHVlLCBwcmV2TGluZUVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZMaW5lTGVuZ3RoID0gcHJldkxpbmVFbmQgLSBwcmV2TGluZVN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldkxpbmVTdGFydCArIE1hdGgubWluKGNvbHVtbiwgcHJldkxpbmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRG93biBhcnJvdyDigJQgbW92ZSB0byBuZXh0IGxpbmUsIG9yIGNyZWF0ZSBvbmUgaWYgb24gbGFzdCBsaW5lXG4gICAgICAgICAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGluZUVuZCA9IGZpbmRMaW5lRW5kKHZhbHVlLCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TGluZUVuZCA+PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT24gbGFzdCBsaW5lIOKAlCBpbnNlcnQgYSBuZXcgbGluZSBhbmQgbW92ZSBjdXJzb3IgdGhlcmVcbiAgICAgICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2luc2VydCcpO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdiArICdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yKHZhbHVlLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge2NvbHVtbn0gPSBnZXRDdXJzb3JMaW5lQW5kQ29sdW1uKHZhbHVlLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRMaW5lU3RhcnQgPSBjdXJyZW50TGluZUVuZCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGluZUVuZCA9IGZpbmRMaW5lRW5kKHZhbHVlLCBuZXh0TGluZVN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRMaW5lTGVuZ3RoID0gbmV4dExpbmVFbmQgLSBuZXh0TGluZVN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRMaW5lU3RhcnQgKyBNYXRoLm1pbihjb2x1bW4sIG5leHRMaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTGVmdCBhcnJvd1xuICAgICAgICAgICAgaWYgKGtleS5sZWZ0QXJyb3cpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBNYXRoLm1heCgwLCBjIC0gMSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmlnaHQgYXJyb3dcbiAgICAgICAgICAgIGlmIChrZXkucmlnaHRBcnJvdykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IE1hdGgubWluKHZhbHVlLmxlbmd0aCwgYyArIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9wdCtMZWZ0IChtZXRhK2IpIOKAlCB3b3JkIGp1bXAgYmFja3dhcmRcbiAgICAgICAgICAgIGlmIChrZXkubWV0YSAmJiBpbnB1dCA9PT0gJ2InKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gZmluZFByZXZXb3JkQm91bmRhcnkodmFsdWUsIGMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9wdCtSaWdodCAobWV0YStmKSDigJQgd29yZCBqdW1wIGZvcndhcmRcbiAgICAgICAgICAgIGlmIChrZXkubWV0YSAmJiBpbnB1dCA9PT0gJ2YnKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gZmluZE5leHRXb3JkQm91bmRhcnkodmFsdWUsIGMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN0cmwrQSDigJQgc3RhcnQgb2YgY3VycmVudCBsaW5lXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICdhJykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IGZpbmRMaW5lU3RhcnQodmFsdWUsIGMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN0cmwrRSDigJQgZW5kIG9mIGN1cnJlbnQgbGluZVxuICAgICAgICAgICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAnZScpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBmaW5kTGluZUVuZCh2YWx1ZSwgYykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3RybCtXIOKAlCBkZWxldGUgd29yZCBiZWZvcmUgY3Vyc29yXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICd3Jykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBwdXNoVW5kbygnZGVsZXRlJyk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kYXJ5ID0gZmluZFByZXZXb3JkQm91bmRhcnkodmFsdWUsIGMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdi5zbGljZSgwLCBib3VuZGFyeSkgKyB2LnNsaWNlKGMpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3RybCtVIOKAlCBkZWxldGUgdG8gc3RhcnQgb2YgY3VycmVudCBsaW5lXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICd1Jykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBwdXNoVW5kbygnZGVsZXRlJyk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVTdGFydCA9IGZpbmRMaW5lU3RhcnQodmFsdWUsIGMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdi5zbGljZSgwLCBsaW5lU3RhcnQpICsgdi5zbGljZShjKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lU3RhcnQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdHJsK0sg4oCUIGRlbGV0ZSB0byBlbmQgb2YgY3VycmVudCBsaW5lXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICdrJykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBwdXNoVW5kbygnZGVsZXRlJyk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVFbmQgPSBmaW5kTGluZUVuZCh2YWx1ZSwgYyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2LnNsaWNlKDAsIGMpICsgdi5zbGljZShsaW5lRW5kKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmFja3NwYWNlICh3aXRoIE9wdCtCYWNrc3BhY2UgZm9yIHdvcmQgZGVsZXRpb24pXG4gICAgICAgICAgICBpZiAoa2V5LmJhY2tzcGFjZSB8fCBrZXkuZGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5tZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9wdCtEZWxldGUg4oCUIGRlbGV0ZSB3b3JkIGJlZm9yZSBjdXJzb3JcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgICAgICBwdXNoVW5kbygnZGVsZXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kYXJ5ID0gZmluZFByZXZXb3JkQm91bmRhcnkodmFsdWUsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2LnNsaWNlKDAsIGJvdW5kYXJ5KSArIHYuc2xpY2UoY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnNvcihib3VuZGFyeSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnNvciA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgICAgICBwdXNoVW5kbygnZGVsZXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2LnNsaWNlKDAsIGN1cnNvciAtIDEpICsgdi5zbGljZShjdXJzb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBjIC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3RybCtaIOKAlCB1bmRvXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHVuZG9TdGFjay5jdXJyZW50LnBvcCgpO1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShlbnRyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnNvcihlbnRyeS5jdXJzb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYXN0TXV0YXRpb25UaW1lLmN1cnJlbnQgPSAwO1xuICAgICAgICAgICAgICAgIGxhc3RNdXRhdGlvblR5cGUuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZ25vcmUgb3RoZXIgY29udHJvbC9tZXRhL2VzY2FwZS90YWIga2V5c1xuICAgICAgICAgICAgaWYgKGtleS5jdHJsIHx8IGtleS5lc2NhcGUgfHwga2V5LnRhYikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmVndWxhciBjaGFyYWN0ZXIgaW5wdXRcbiAgICAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdpbnNlcnQnKTtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdi5zbGljZSgwLCBjdXJzb3IpICsgaW5wdXQgKyB2LnNsaWNlKGN1cnNvcikpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gYyArIGlucHV0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtpc0FjdGl2ZX0sXG4gICAgKTtcblxuICAgIGNvbnN0IHJlbmRlckxpbmUgPSAoXG4gICAgICAgIGNvbnRlbnQ6IFJlYWN0Tm9kZSxcbiAgICAgICAga2V5OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGxpbmVOdW1iZXI6IG51bWJlcixcbiAgICAgICAgdG90YWxMaW5lczogbnVtYmVyLFxuICAgICk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9XG4gICAgICAgICAgICB0eXBlb2YgbGluZVByZWZpeCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gbGluZVByZWZpeChsaW5lTnVtYmVyLCB0b3RhbExpbmVzKVxuICAgICAgICAgICAgICAgIDogbGluZVByZWZpeDtcblxuICAgICAgICByZXR1cm4gcHJlZml4ID8gKFxuICAgICAgICAgICAgPEJveCBrZXk9e2tleX0+XG4gICAgICAgICAgICAgICAge3ByZWZpeH1cbiAgICAgICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApIDogKFxuICAgICAgICAgICAgPEJveCBrZXk9e2tleX0+e2NvbnRlbnR9PC9Cb3g+XG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIFJlbmRlciBwbGFjZWhvbGRlciB3aGVuIGVtcHR5IGFuZCBub3QgZm9jdXNlZFxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgJiYgIWlzQWN0aXZlICYmIHBsYWNlaG9sZGVyKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICB7cmVuZGVyTGluZSg8VGV4dCBkaW1Db2xvcj57cGxhY2Vob2xkZXJ9PC9UZXh0PiwgMCwgMCwgMil9XG4gICAgICAgICAgICAgICAge3JlbmRlckxpbmUoPFRleHQ+IDwvVGV4dD4sIDEsIDEsIDIpfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIHBsYWNlaG9sZGVyIHdpdGggY3Vyc29yIHdoZW4gZW1wdHkgYW5kIGZvY3VzZWRcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwICYmIGlzQWN0aXZlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICB7cmVuZGVyTGluZShcbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y3Vyc29yVmlzaWJsZSA/ICdcXHgxYls3bSBcXHgxYlsyN20nIDogJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntwbGFjZWhvbGRlcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PixcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtyZW5kZXJMaW5lKDxUZXh0PiA8L1RleHQ+LCAxLCAxLCAyKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIE11bHRpLWxpbmUgcmVuZGVyaW5nIChtaW5pbXVtIDIgdmlzaWJsZSBsaW5lcylcbiAgICBjb25zdCBsaW5lcyA9IHZhbHVlLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCB0b3RhbExpbmVzID0gTWF0aC5tYXgobGluZXMubGVuZ3RoLCAyKTtcbiAgICBjb25zdCBoYXNDb250ZW50ID0gdmFsdWUucmVwbGFjZSgvXFxuL2csICcnKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHtsaW5lOiBjdXJzb3JMaW5lLCBjb2x1bW46IGN1cnNvckNvbHVtbn0gPSBnZXRDdXJzb3JMaW5lQW5kQ29sdW1uKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgY3Vyc29yLFxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJlZExpbmVzID0gbGluZXMubWFwKChsaW5lVGV4dCwgbGluZUlkeCkgPT4ge1xuICAgICAgICBjb25zdCBpc0N1cnNvckxpbmUgPSBsaW5lSWR4ID09PSBjdXJzb3JMaW5lO1xuXG4gICAgICAgIGlmICghaXNDdXJzb3JMaW5lIHx8ICFpc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlckxpbmUoXG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIHtsaW5lVGV4dCB8fCAnICd9XG4gICAgICAgICAgICAgICAgICAgIHtsaW5lSWR4ID09PSAwICYmICFoYXNDb250ZW50ICYmIHBsYWNlaG9sZGVyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e3BsYWNlaG9sZGVyfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9UZXh0PixcbiAgICAgICAgICAgICAgICBsaW5lSWR4LFxuICAgICAgICAgICAgICAgIGxpbmVJZHgsXG4gICAgICAgICAgICAgICAgdG90YWxMaW5lcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiZWZvcmUgPSBsaW5lVGV4dC5zbGljZSgwLCBjdXJzb3JDb2x1bW4pO1xuICAgICAgICBjb25zdCBhdEN1cnNvciA9IGxpbmVUZXh0W2N1cnNvckNvbHVtbl0gPz8gJyAnO1xuICAgICAgICBjb25zdCBhZnRlciA9IGxpbmVUZXh0LnNsaWNlKGN1cnNvckNvbHVtbiArIDEpO1xuXG4gICAgICAgIHJldHVybiByZW5kZXJMaW5lKFxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAge2JlZm9yZX1cbiAgICAgICAgICAgICAgICB7Y3Vyc29yVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICA/IGBcXHgxYls3bSR7YXRDdXJzb3J9XFx4MWJbMjdtYFxuICAgICAgICAgICAgICAgICAgICA6IGF0Q3Vyc29yID09PSAnICcgJiYgY3Vyc29yQ29sdW1uID49IGxpbmVUZXh0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgID8gJyAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBhdEN1cnNvcn1cbiAgICAgICAgICAgICAgICB7YWZ0ZXJ9XG4gICAgICAgICAgICAgICAge2xpbmVJZHggPT09IDAgJiYgIWhhc0NvbnRlbnQgJiYgcGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntwbGFjZWhvbGRlcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1RleHQ+LFxuICAgICAgICAgICAgbGluZUlkeCxcbiAgICAgICAgICAgIGxpbmVJZHgsXG4gICAgICAgICAgICB0b3RhbExpbmVzLFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gUGFkIHRvIG1pbmltdW0gMiBsaW5lcyBzbyB0aGUgaW5wdXQgdmlzdWFsbHkgc2lnbmFscyBtdWx0aS1saW5lXG4gICAgd2hpbGUgKHJlbmRlcmVkTGluZXMubGVuZ3RoIDwgMikge1xuICAgICAgICBjb25zdCBwYWRJZHggPSByZW5kZXJlZExpbmVzLmxlbmd0aDtcbiAgICAgICAgcmVuZGVyZWRMaW5lcy5wdXNoKFxuICAgICAgICAgICAgcmVuZGVyTGluZSg8VGV4dD4gPC9UZXh0PiwgYHBhZC0ke3BhZElkeH1gLCBwYWRJZHgsIHRvdGFsTGluZXMpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj57cmVuZGVyZWRMaW5lc308L0JveD47XG59O1xuIl19
@@ -1,10 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import type { TStore } from '../../store.mjs';
3
- type TUserExplanationProps = {
4
- readonly store: TStore;
5
- };
6
- export declare const UserExplanation: (({ store }: TUserExplanationProps) => ReactNode) & {
7
- displayName: string;
8
- };
9
- export {};
10
- //# sourceMappingURL=UserExplanation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserExplanation.d.ts","sourceRoot":"./src/","sources":["ui/components/UserExplanation.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAGrC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAG5C,KAAK,qBAAqB,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC;AASF,eAAO,MAAM,eAAe,eACd,qBAAqB,KAAG,SAAS;;CAuE9C,CAAC"}
@@ -1,34 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from 'ink';
3
- import { observer } from 'mobx-react-lite';
4
- import { runInAction } from 'mobx';
5
- import { TextInput } from './TextInput.js';
6
- const TRUNCATE_LENGTH = 80;
7
- const truncate = (text) => text.length > TRUNCATE_LENGTH
8
- ? `${text.slice(0, TRUNCATE_LENGTH)}...`
9
- : text;
10
- export const UserExplanation = observer(({ store }) => {
11
- const step = store.steps.userExplanation;
12
- if (step.state === 'idle') {
13
- return null;
14
- }
15
- if (step.state === 'done') {
16
- return (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { children: [_jsx(Text, { color: "green", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "EXPLANATION: " }), _jsx(Text, { dimColor: true, children: truncate(step.value ?? '') })] }) }));
17
- }
18
- const handleSubmit = (value) => {
19
- const trimmed = value.trim();
20
- if (trimmed.length === 0) {
21
- return;
22
- }
23
- runInAction(() => {
24
- store.steps.userExplanation.value = trimmed;
25
- store.steps.userExplanation.state = 'done';
26
- });
27
- };
28
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "EXPLANATION: " }), _jsx(Text, { children: "Describe this database" })] }), _jsxs(Box, { paddingLeft: 2, flexDirection: "column", children: [_jsx(Box, { width: 96, flexDirection: 'column', paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "Mention what kind of DB it is, which app it's for, what the business is, if it's standalone or part of a larger ecosystem, and what the app does (Ctrl+J for new line)" }) }), _jsx(Text, { children: " " }), _jsx(TextInput, { isActive: step.state === 'prompting', onSubmit: handleSubmit, placeholder: "e.g. a multi-vendor ecommerce platform part of a larger superapp", linePrefix: (lineNumber, totalLines) => {
29
- const width = String(totalLines).length;
30
- const num = String(lineNumber + 1).padStart(width, ' ');
31
- return (_jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: num }), _jsx(Text, { color: "gray", children: " \u2503 " })] }));
32
- } })] })] }));
33
- });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckV4cGxhbmF0aW9uLmpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsidWkvY29tcG9uZW50cy9Vc2VyRXhwbGFuYXRpb24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVqQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFNekMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBRTNCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlO0lBQ3pCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxLQUFLO0lBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFZixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUNuQyxDQUFDLEVBQUMsS0FBSyxFQUF3QixFQUFhLEVBQUU7SUFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFFekMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUNILEtBQUMsR0FBRyxJQUFDLGFBQWEsRUFBQyxRQUFRLFlBQ3ZCLE1BQUMsR0FBRyxlQUNBLEtBQUMsSUFBSSxJQUFDLEtBQUssRUFBQyxPQUFPLHVCQUFTLEVBQzVCLEtBQUMsSUFBSSxvQkFBUyxFQUNkLEtBQUMsSUFBSSxJQUFDLElBQUksb0NBQXFCLEVBQy9CLEtBQUMsSUFBSSxJQUFDLFFBQVEsa0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEdBQVEsSUFDaEQsR0FDSixDQUNULENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtRQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDWCxDQUFDO1FBQ0QsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNiLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7WUFDNUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztJQUVGLE9BQU8sQ0FDSCxNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsUUFBUSxhQUN2QixNQUFDLEdBQUcsZUFDQSxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsUUFBUSx1QkFBUyxFQUM3QixLQUFDLElBQUksb0JBQVMsRUFDZCxLQUFDLElBQUksSUFBQyxJQUFJLG9DQUFxQixFQUMvQixLQUFDLElBQUkseUNBQThCLElBQ2pDLEVBQ04sTUFBQyxHQUFHLElBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUMsUUFBUSxhQUN2QyxLQUFDLEdBQUcsSUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsWUFDbEQsS0FBQyxJQUFJLElBQUMsUUFBUSw2TEFLUCxHQUNMLEVBQ04sS0FBQyxJQUFJLG9CQUFTLEVBQ2QsS0FBQyxTQUFTLElBQ04sUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUNwQyxRQUFRLEVBQUUsWUFBWSxFQUN0QixXQUFXLEVBQUMsa0VBQWtFLEVBQzlFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRTs0QkFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQzs0QkFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQ3ZDLEtBQUssRUFDTCxHQUFHLENBQ04sQ0FBQzs0QkFDRixPQUFPLENBQ0gsTUFBQyxJQUFJLGVBQ0QsS0FBQyxJQUFJLElBQUMsUUFBUSxrQkFBRSxHQUFHLEdBQVEsRUFDM0IsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0seUJBQVcsSUFDMUIsQ0FDVixDQUFDO3dCQUNOLENBQUMsR0FDSCxJQUNBLElBQ0osQ0FDVCxDQUFDO0FBQ04sQ0FBQyxDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1RleHRJbnB1dH0gZnJvbSAnLi9UZXh0SW5wdXQuanMnO1xuXG50eXBlIFRVc2VyRXhwbGFuYXRpb25Qcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuY29uc3QgVFJVTkNBVEVfTEVOR1RIID0gODA7XG5cbmNvbnN0IHRydW5jYXRlID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIHRleHQubGVuZ3RoID4gVFJVTkNBVEVfTEVOR1RIXG4gICAgICAgID8gYCR7dGV4dC5zbGljZSgwLCBUUlVOQ0FURV9MRU5HVEgpfS4uLmBcbiAgICAgICAgOiB0ZXh0O1xuXG5leHBvcnQgY29uc3QgVXNlckV4cGxhbmF0aW9uID0gb2JzZXJ2ZXIoXG4gICAgKHtzdG9yZX06IFRVc2VyRXhwbGFuYXRpb25Qcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb247XG5cbiAgICAgICAgaWYgKHN0ZXAuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RlcC5zdGF0ZSA9PT0gJ2RvbmUnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPuKXjzwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkVYUExBTkFUSU9OOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57dHJ1bmNhdGUoc3RlcC52YWx1ZSA/PyAnJyl9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb24udmFsdWUgPSB0cmltbWVkO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnVzZXJFeHBsYW5hdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPuKXjzwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZD5FWFBMQU5BVElPTjogPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5EZXNjcmliZSB0aGlzIGRhdGFiYXNlPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezJ9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17OTZ9IGZsZXhEaXJlY3Rpb249eydjb2x1bW4nfSBwYWRkaW5nVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnRpb24gd2hhdCBraW5kIG9mIERCIGl0IGlzLCB3aGljaCBhcHAgaXQncyBmb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCB0aGUgYnVzaW5lc3MgaXMsIGlmIGl0J3Mgc3RhbmRhbG9uZSBvciBwYXJ0IG9mXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBsYXJnZXIgZWNvc3lzdGVtLCBhbmQgd2hhdCB0aGUgYXBwIGRvZXMgKEN0cmwrSlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuZXcgbGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzdGVwLnN0YXRlID09PSAncHJvbXB0aW5nJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gYSBtdWx0aS12ZW5kb3IgZWNvbW1lcmNlIHBsYXRmb3JtIHBhcnQgb2YgYSBsYXJnZXIgc3VwZXJhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByZWZpeD17KGxpbmVOdW1iZXIsIHRvdGFsTGluZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IFN0cmluZyh0b3RhbExpbmVzKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtID0gU3RyaW5nKGxpbmVOdW1iZXIgKyAxKS5wYWRTdGFydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e251bX08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj4g4pSDIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfSxcbik7XG4iXX0=
@@ -1,13 +0,0 @@
1
- type TPathOptionKey = 'sslcert' | 'sslkey' | 'sslrootcert' | 'sshKey';
2
- export type TPathValidationError = {
3
- option: string;
4
- path: string;
5
- error: string;
6
- };
7
- export declare const normalizePath: (path: string) => string;
8
- export declare const validatePathOptions: <T extends Partial<Record<TPathOptionKey, string>>>(options: T) => {
9
- errors: TPathValidationError[];
10
- expandedPaths: Partial<Record<TPathOptionKey, string>>;
11
- };
12
- export {};
13
- //# sourceMappingURL=validatePaths.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validatePaths.d.mts","sourceRoot":"./src/","sources":["validatePaths.mts"],"names":[],"mappings":"AAQA,KAAK,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEtE,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAOF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MACf,CAAC;AAiB/B,eAAO,MAAM,mBAAmB,GAC5B,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,EAEjD,SAAS,CAAC,KACX;IACC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CA0C1D,CAAC"}