ask-cli-ai 1.0.12 → 1.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.
package/README.md CHANGED
@@ -17,7 +17,6 @@ Forget about switching between applications to know how to use a command or fix
17
17
  ## Content
18
18
 
19
19
  - [Why use Ask CLI?](#why-use-ask-cli)
20
- - [For whom is Ask CLI?](#for-whom-is-ask-cli)
21
20
  - [Installation](#installation)
22
21
  - [Usage](#usage)
23
22
  - [Select model](#select-model)
@@ -31,15 +30,8 @@ Why use Ask CLI and not an AI agent like Claude or Gemini?
31
30
  - Ask CLI was created to do one thing and do it well: help you with commands, coding, apps and more from your terminal.
32
31
  - The AI models it uses are optimized to generate short, precise and fast answers.
33
32
  - No risk of prompt injection, Ask CLI cannot run commands or access your files by default.
34
- - No risk of running dangerous commands on your computer, you have to explicitly authorize it using the `--command` option. See [Running commands](#running-commands) for more details.
35
-
36
- ## For whom is Ask CLI?
37
-
38
- - Students who want to learn how to use commands and the terminal.
39
- - Developers who want to be more productive and avoid context switching.
40
- - Sysadmins who need quick help with commands and troubleshooting.
41
- - DevOps engineers who want to automate tasks and get help with commands.
42
- - Anyone working in production environments where security is critical.
33
+ - No risk of running dangerous commands on your computer. See [Running commands](#running-commands) for more details.
34
+ - Designed for anyone who wants fast, secure, and precise help directly in the terminal.
43
35
 
44
36
  ## Installation
45
37
 
@@ -49,7 +41,7 @@ npm install -g ask-cli-ai
49
41
 
50
42
  ## Usage
51
43
 
52
- > To use Ask CLI, you first need to set up the API key. See the [Select model](#select-model) section to learn how.
44
+ > To use Ask CLI, you first need to set up the API key. See [Select model](#select-model) to learn how.
53
45
 
54
46
  ### Ask questions
55
47
 
@@ -58,9 +50,9 @@ npm install -g ask-cli-ai
58
50
  ask <your question>
59
51
 
60
52
  # Examples
61
- ask how to find files by name in linux
62
- ask what is a promise in javascript
63
- ask how to create a new branch in git
53
+ ask how to terminate a linux process
54
+ ask what is a javascript promise
55
+ ask how to create a git branch
64
56
 
65
57
  # Using quotes
66
58
  ask 'What does this command do: git config user.name "Ask CLI"?'
@@ -68,7 +60,7 @@ ask 'What does this command do: git config user.name "Ask CLI"?'
68
60
 
69
61
  ### Aliases
70
62
 
71
- You can use `how` and `what` as aliases for the `ask` command:
63
+ You can use **`how`** and **`what`** as aliases for the **`ask`** command:
72
64
 
73
65
  ```bash
74
66
  # Using 'how' alias
@@ -80,7 +72,7 @@ what is the difference between git merge and rebase
80
72
 
81
73
  ### Running commands
82
74
 
83
- By default, Ask CLI cannot run commands on your computer. However, you can use the `-c` or `--command` option to execute a command and include its output in your question. This allows Ask CLI to analyze errors, logs, or any command output and provide context-aware answers.
75
+ By default, Ask CLI cannot run commands on your computer. However, you can use the **`-c`** or **`--command`** option to execute a command and include its output in your question. This allows Ask CLI to analyze errors, logs, or any command output and provide context-aware answers.
84
76
 
85
77
  ```bash
86
78
  # Analyze an error
@@ -95,7 +87,7 @@ ask what is wrong here -c "git status"
95
87
 
96
88
  ## Select model
97
89
 
98
- You can select a model using the `ask /models` command. This will list all the available models and let you select the model you want to use.
90
+ You can select a model using the **`ask /models`** command. This will list all the available models and let you select the model you want to use.
99
91
 
100
92
  ![Model selection screen](https://github.com/david-minaya/ask/blob/main/images/select-model.png)
101
93
 
@@ -131,7 +123,7 @@ You can select a model using the `ask /models` command. This will list all the a
131
123
  ```
132
124
  AI CLI to help you with commands, coding, apps and more.
133
125
 
134
- Version: 1.0.12
126
+ Version: 1.1.0
135
127
 
136
128
  Usage: ask <prompt..>
137
129
 
@@ -139,6 +131,7 @@ Commands:
139
131
  ask <prompt..> Ask something. Alias: what, how [default]
140
132
  ask /models Select a model
141
133
  ask /providers Setup providers
134
+ ask /config Configuration
142
135
  ask /history List the chat history
143
136
  ask /clear Clear the chat history
144
137
 
package/dist/app.js CHANGED
@@ -7,10 +7,11 @@ import { listHistory } from "./commands/listHistory.js";
7
7
  import { clearHistory } from "./commands/clearHistory.js";
8
8
  import { providers } from "./commands/providers.js";
9
9
  import { logo } from "./utils/logo.js";
10
+ import { config } from "./commands/config.js";
10
11
  void yargs(hideBin(process.argv))
11
12
  .scriptName('ask')
12
- .usage(`${logo}\nAI CLI to help you with commands, coding, apps and more.\n\nVersion: 1.0.12\n\nUsage: $0 <prompt..>`)
13
- .version('1.0.12')
13
+ .usage(`${logo}\nAI CLI to help you with commands, coding, apps and more.\n\nVersion: 1.1.0\n\nUsage: $0 <prompt..>`)
14
+ .version('1.1.0')
14
15
  .locale('en')
15
16
  .example('$0 how to run a docker container', '')
16
17
  .example('how to setup my git account', '')
@@ -39,6 +40,11 @@ void yargs(hideBin(process.argv))
39
40
  command: '/providers',
40
41
  describe: 'Setup providers',
41
42
  handler: () => providers()
43
+ })
44
+ .command({
45
+ command: '/config',
46
+ describe: 'Configuration',
47
+ handler: () => config()
42
48
  })
43
49
  .command({
44
50
  command: '/history',
@@ -51,4 +57,4 @@ void yargs(hideBin(process.argv))
51
57
  handler: () => clearHistory()
52
58
  })
53
59
  .parse();
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFvQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkMsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDO0tBQ2pCLEtBQUssQ0FBQyxHQUFHLElBQUksdUdBQXVHLENBQUM7S0FDckgsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDO0tBQ1osT0FBTyxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsQ0FBQztLQUMvQyxPQUFPLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDO0tBQzFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUM7S0FDeEMsT0FBTyxDQUFDLDRDQUE0QyxFQUFFLEVBQUUsQ0FBQztLQUV6RCxJQUFJLEVBQUU7S0FDTixPQUFPLENBQUM7SUFDUCxPQUFPLEVBQUUsZUFBZTtJQUN4QixRQUFRLEVBQUUsaUNBQWlDO0lBQzNDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUs7U0FDcEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDekUsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNqQixLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDWixJQUFJLEVBQUUsUUFBUTtRQUNkLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsV0FBVyxFQUFFLElBQUk7S0FDbEIsQ0FBQztJQUNKLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7Q0FDNUQsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRTtDQUM3QixDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1AsT0FBTyxFQUFFLFlBQVk7SUFDckIsUUFBUSxFQUFFLGlCQUFpQjtJQUMzQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFO0NBQzNCLENBQUM7S0FDRCxPQUFPLENBQUM7SUFDUCxPQUFPLEVBQUUsVUFBVTtJQUNuQixRQUFRLEVBQUUsdUJBQXVCO0lBQ2pDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Q0FDN0IsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFFBQVEsRUFBRSx3QkFBd0I7SUFDbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRTtDQUM5QixDQUFDO0tBQ0QsS0FBSyxFQUFFLENBQUMifQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFvQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUF1QixDQUFDO0FBRS9DLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUIsVUFBVSxDQUFDLEtBQUssQ0FBQztLQUNqQixLQUFLLENBQUMsR0FBRyxJQUFJLHNHQUFzRyxDQUFDO0tBQ3BILE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsTUFBTSxDQUFDLElBQUksQ0FBQztLQUNaLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLENBQUM7S0FDL0MsT0FBTyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQztLQUMxQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxDQUFDO0tBQ3hDLE9BQU8sQ0FBQyw0Q0FBNEMsRUFBRSxFQUFFLENBQUM7S0FDekQsSUFBSSxFQUFFO0tBQ04sT0FBTyxDQUFDO0lBQ1AsT0FBTyxFQUFFLGVBQWU7SUFDeEIsUUFBUSxFQUFFLGlDQUFpQztJQUMzQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLO1NBQ3BCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3pFLE1BQU0sQ0FBQyxTQUFTLEVBQUU7UUFDakIsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1osSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUUsb0JBQW9CO1FBQ2pDLFdBQVcsRUFBRSxJQUFJO0tBQ2xCLENBQUM7SUFDSixPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO0NBQzVELENBQUM7S0FDRCxPQUFPLENBQUM7SUFDUCxPQUFPLEVBQUUsU0FBUztJQUNsQixRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Q0FDN0IsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLFFBQVEsRUFBRSxpQkFBaUI7SUFDM0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRTtDQUMzQixDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1AsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLGVBQWU7SUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRTtDQUN4QixDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1AsT0FBTyxFQUFFLFVBQVU7SUFDbkIsUUFBUSxFQUFFLHVCQUF1QjtJQUNqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFO0NBQzdCLENBQUM7S0FDRCxPQUFPLENBQUM7SUFDUCxPQUFPLEVBQUUsUUFBUTtJQUNqQixRQUFRLEVBQUUsd0JBQXdCO0lBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDOUIsQ0FBQztLQUNELEtBQUssRUFBRSxDQUFDIn0=
@@ -1,10 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import util from 'node:util';
3
- import path from 'node:path';
4
- import fs from 'node:fs/promises';
5
- import { exec as execCb } from 'node:child_process';
6
3
  import findProcess from 'find-process';
7
4
  import chalk from 'chalk';
5
+ import { exec as execCb } from 'node:child_process';
8
6
  import { useEffect, useState } from 'react';
9
7
  import { Box, render, Static, Text, useApp } from 'ink';
10
8
  import { ChatGoogleGenerativeAI } from '@langchain/google-genai';
@@ -12,7 +10,6 @@ import { configStore } from "../stores/config.js";
12
10
  import { historyStore } from "../stores/history.js";
13
11
  import { Welcome } from "../components/welcome.js";
14
12
  import { Loading } from "../components/loading.js";
15
- import { root } from "../utils/root.js";
16
13
  import { ChatAnthropic } from '@langchain/anthropic';
17
14
  import { ChatOpenAI } from '@langchain/openai';
18
15
  import { instructions } from "../templates/instructions.js";
@@ -29,6 +26,7 @@ function Ask(props) {
29
26
  const [view, setView] = useState('ask');
30
27
  const [sending, setSending] = useState(false);
31
28
  const [response, setResponse] = useState('');
29
+ const [meta, setMeta] = useState();
32
30
  const [exitCode, setExitCode] = useState();
33
31
  const [isFirstRun, setIsFirstRun] = useState(false);
34
32
  useEffect(() => {
@@ -47,19 +45,7 @@ function Ask(props) {
47
45
  }
48
46
  }, [exitCode]);
49
47
  useEffect(() => {
50
- (async () => {
51
- const dirPath = path.join(root, '/data/chats');
52
- const fileNames = await fs.readdir(dirPath);
53
- const files = await Promise.all(fileNames.map(async (name) => {
54
- const filePath = path.join(dirPath, name);
55
- const stats = await fs.stat(filePath);
56
- return { path: filePath, time: stats.ctimeMs };
57
- }));
58
- const sortedFiles = files
59
- .sort((a, b) => b.time - a.time)
60
- .slice(10);
61
- await Promise.all(sortedFiles.map(file => fs.unlink(file.path)));
62
- })().catch(() => { });
48
+ void historyStore.deleteOldHistory();
63
49
  }, []);
64
50
  async function handleSend() {
65
51
  setIsFirstRun(true);
@@ -82,17 +68,25 @@ function Ask(props) {
82
68
  try {
83
69
  setSending(true);
84
70
  const prompt = await getPrompt();
85
- const model = getModel(providerId, modelId, apikey);
86
- const response = await model.invoke([
71
+ const modelClient = getModel(providerId, modelId, apikey);
72
+ const startTime = Date.now();
73
+ const response = await modelClient.invoke([
87
74
  { role: 'system', content: instructions },
88
75
  ...history.map(item => ({ ...item })),
89
76
  { role: 'human', content: prompt }
90
77
  ]);
78
+ const endTime = Date.now();
91
79
  await historyStore.add([
92
80
  { role: 'human', content: prompt },
93
81
  { role: 'ai', content: response.text }
94
82
  ]);
95
83
  setResponse(response.text.replaceAll('\\x1b', '\x1b').replaceAll('\\n', '\n').concat('\x1b[0m'));
84
+ setMeta({
85
+ model: model.title,
86
+ time: endTime - startTime,
87
+ inputTokens: response.usage_metadata?.input_tokens || 0,
88
+ outputTokens: response.usage_metadata?.output_tokens || 0
89
+ });
96
90
  setSending(false);
97
91
  setExitCode(0);
98
92
  }
@@ -113,10 +107,11 @@ function Ask(props) {
113
107
  function getModel(providerId, modelId, apiKey) {
114
108
  const provider = providers.find(provider => provider.id === providerId);
115
109
  const model = provider?.models.find(model => model.name === modelId);
110
+ const maxOutputTokens = config.settings.maxOutputTokens.value;
116
111
  switch (providerId) {
117
- case 'openai': return new ChatOpenAI({ model: modelId, apiKey, ...model?.config });
118
- case 'gemini': return new ChatGoogleGenerativeAI({ model: modelId, apiKey, ...model?.config });
119
- case 'anthropic': return new ChatAnthropic({ model: modelId, apiKey, ...model?.config });
112
+ case 'openai': return new ChatOpenAI({ model: modelId, apiKey, ...model?.config, maxTokens: maxOutputTokens });
113
+ case 'gemini': return new ChatGoogleGenerativeAI({ model: modelId, apiKey, ...model?.config, maxOutputTokens });
114
+ case 'anthropic': return new ChatAnthropic({ model: modelId, apiKey, ...model?.config, maxTokens: maxOutputTokens });
120
115
  default: throw new Error('Model not found');
121
116
  }
122
117
  }
@@ -131,11 +126,17 @@ function Ask(props) {
131
126
  return `Error executing command: \n\n${stdout}\n\n${stderr}`;
132
127
  }
133
128
  }
129
+ function formatTime(time) {
130
+ return time < 1000 * 60
131
+ ? `${(time / 1000).toFixed(1)}s`
132
+ : `${(time / (1000 * 60)).toFixed(1)}m`;
133
+ }
134
134
  return (_jsxs(Box, { children: [view === 'welcome' &&
135
135
  _jsx(Welcome, { onSend: handleSend }), view === 'ask' &&
136
136
  _jsxs(Box, { children: [isFirstRun &&
137
137
  _jsx(Static, { items: [''], children: item => _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: 'cyan', bold: true, children: "Prompt:" }), " ", prompt] }) }, item) }), sending &&
138
138
  _jsx(Loading, {}), !sending && response &&
139
- _jsx(Static, { items: [''], children: item => _jsx(Text, { children: response }, item) })] })] }));
139
+ _jsx(Static, { items: [''], children: item => _jsxs(Box, { flexDirection: 'column', children: [_jsx(Text, { children: response }), config.settings.metadata.value && meta &&
140
+ _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: 'gray', dimColor: true, children: ["Model: ", meta.model, ", Time: ", formatTime(meta.time), ", Tokens: ", meta.inputTokens + meta.outputTokens] }) })] }, item) })] })] }));
140
141
  }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2Fzay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEMsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzVDLE1BQU0sSUFBSSxH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
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2Fzay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXBDLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBYyxFQUFFLE9BQWdCO0lBQ2xELE1BQU0sQ0FBQyxLQUFDLEdBQUcsSUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFPRCxTQUFTLEdBQUcsQ0FBQyxLQUFZO0lBRXZCLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWxDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUUxQixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBb0IsS0FBSyxDQUFDLENBQUM7SUFDM0QsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQThFLENBQUM7SUFDL0csTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxRQUFRLEVBQVUsQ0FBQztJQUNuRCxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVwRCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2YsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRWYsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLEtBQUssWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDdkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsS0FBSyxVQUFVLFVBQVU7UUFDdkIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLFVBQVUsSUFBSSxDQUFDLE1BQWM7UUFFaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQU0sQ0FBQyxLQUFLLENBQUM7UUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQU0sQ0FBQyxRQUFRLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFPLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDeEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBRXJFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFNLENBQUMsS0FBSyxLQUFLLFFBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyx3Q0FBd0MsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hKLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpCLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxFQUFFLENBQUM7WUFFakMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUU7Z0JBQ3pDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLEVBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRyxPQUFPLEVBQUUsTUFBTSxFQUFFO2FBQ3JDLENBQUMsQ0FBQztZQUVILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUUzQixNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUM7Z0JBQ3JCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUU7YUFDdkMsQ0FBQyxDQUFDO1lBRUgsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBRWpHLE9BQU8sQ0FBQztnQkFDTixLQUFLLEVBQUUsS0FBTSxDQUFDLEtBQUs7Z0JBQ25CLElBQUksRUFBRSxPQUFPLEdBQUcsU0FBUztnQkFDekIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxJQUFJLENBQUM7Z0JBQ3ZELFlBQVksRUFBRSxRQUFRLENBQUMsY0FBYyxFQUFFLGFBQWEsSUFBSSxDQUFDO2FBQzFELENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFFYixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBTSxDQUFDLEtBQUssS0FBSyxRQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUyxHQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUV4SCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxVQUFVLFNBQVM7UUFFdEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXBCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLGFBQWEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxNQUFNLElBQUksZ0JBQWdCLE9BQU8sMEJBQTBCLGFBQWEsRUFBRSxDQUFDO1FBQzdFLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxRQUFRLENBQUMsVUFBa0IsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUVuRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUN4RSxNQUFNLEtBQUssR0FBRyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDckUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBZSxDQUFDO1FBRXhFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDbkIsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDaEgsS0FBSyxXQUFXLENBQUMsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ3JILE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssVUFBVSxVQUFVLENBQUMsT0FBZTtRQUN2QyxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBeUMsQ0FBQztZQUNyRSxPQUFPLGdDQUFnQyxNQUFNLE9BQU8sTUFBTSxFQUFFLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFZO1FBQzlCLE9BQU8sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1lBQ3JCLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRztZQUNoQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzVDLENBQUM7SUFFRCxPQUFPLENBQ0wsTUFBQyxHQUFHLGVBQ0QsSUFBSSxLQUFLLFNBQVM7Z0JBQ2pCLEtBQUMsT0FBTyxJQUFDLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFFL0IsSUFBSSxLQUFLLEtBQUs7Z0JBQ2IsTUFBQyxHQUFHLGVBQ0QsVUFBVTs0QkFDVCxLQUFDLE1BQU0sSUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFDaEIsSUFBSSxDQUFDLEVBQUUsQ0FDTixLQUFDLEdBQUcsSUFBWSxZQUFZLEVBQUUsQ0FBQyxZQUM3QixNQUFDLElBQUksZUFBQyxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLElBQUksOEJBQWUsT0FBRSxNQUFNLElBQVEsSUFEcEQsSUFBSSxDQUVSLEdBRUQsRUFFVixPQUFPOzRCQUNOLEtBQUMsT0FBTyxLQUFFLEVBRVgsQ0FBQyxPQUFPLElBQUksUUFBUTs0QkFDbkIsS0FBQyxNQUFNLElBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQ2hCLElBQUksQ0FBQyxFQUFFLENBQ04sTUFBQyxHQUFHLElBQUMsYUFBYSxFQUFDLFFBQVEsYUFDekIsS0FBQyxJQUFJLGNBQUUsUUFBUSxHQUFRLEVBQ3RCLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBRyxJQUFJOzRDQUNwQyxLQUFDLEdBQUcsSUFBQyxTQUFTLEVBQUUsQ0FBQyxZQUNmLE1BQUMsSUFBSSxJQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsUUFBUSw4QkFDakIsSUFBSSxDQUFDLEtBQUssY0FBVSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBWSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQzVGLEdBQ0gsS0FQdUIsSUFBSSxDQVMvQixHQUVELElBRVAsSUFFSixDQUNQLENBQUM7QUFDSixDQUFDIn0=
@@ -1,6 +1,6 @@
1
1
  import { historyStore } from "../stores/history.js";
2
2
  export async function clearHistory() {
3
3
  await historyStore.clear();
4
- console.log('Conversation history cleared.');
4
+ console.log('Conversation history deleted.');
5
5
  }
6
6
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXJIaXN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NsZWFySGlzdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZO0lBQ2hDLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUMvQyxDQUFDIn0=
@@ -0,0 +1,91 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import TextInput from 'ink-text-input';
3
+ import { useEffect, useState } from 'react';
4
+ import { Box, render, Text } from 'ink';
5
+ import { ScrollView } from 'ink-scroll-view';
6
+ import { configStore } from "../stores/config.js";
7
+ import { Commands } from "../components/commands.js";
8
+ import { Command } from "../components/command.js";
9
+ const height = process.stdout.rows - 4;
10
+ const initialConfig = await configStore.get();
11
+ const initialSettings = Object.entries(initialConfig.settings).map(([key, setting]) => ({
12
+ key,
13
+ edit: false,
14
+ setting
15
+ }));
16
+ export function config() {
17
+ render(_jsx(Config, {}));
18
+ }
19
+ export function Config() {
20
+ const [currentIndex, setCurrentIndex] = useState(0);
21
+ const [settingItems, setSettingItems] = useState(initialSettings);
22
+ const [saved, setSaved] = useState(false);
23
+ const [exit, setExit] = useState(false);
24
+ useEffect(() => {
25
+ if (exit) {
26
+ setTimeout(() => process.exit(), 0);
27
+ }
28
+ }, [exit]);
29
+ function handleUp() {
30
+ unselect();
31
+ setCurrentIndex(index => Math.max(0, index - 1));
32
+ }
33
+ function handleDown() {
34
+ unselect();
35
+ setCurrentIndex(index => Math.min(settingItems.length - 1, index + 1));
36
+ }
37
+ function handleEnter() {
38
+ for (const settingItem of settingItems) {
39
+ settingItem.edit = false;
40
+ }
41
+ const settingItem = settingItems[currentIndex];
42
+ settingItem.edit = true;
43
+ if (settingItem.setting.type === 'boolean') {
44
+ settingItem.setting.value = !settingItem.setting.value;
45
+ }
46
+ setSettingItems([...settingItems]);
47
+ }
48
+ function handleInputChange(key, value) {
49
+ const setting = settingItems.find(setting => setting.key === key).setting;
50
+ if (value === '') {
51
+ setting.value = '';
52
+ }
53
+ else if (!isNaN(parseInt(value)) && parseInt(value) < setting.max) {
54
+ setting.value = parseInt(value);
55
+ }
56
+ setSettingItems([...settingItems]);
57
+ }
58
+ async function handleSave() {
59
+ const config = await configStore.get();
60
+ config.settings = settingItems.reduce((obj, item) => ({
61
+ ...obj,
62
+ [item.key]: item.setting
63
+ }), {});
64
+ await configStore.save(config);
65
+ setSaved(true);
66
+ setTimeout(() => setSaved(false), 500);
67
+ }
68
+ function handleExit() {
69
+ setExit(true);
70
+ }
71
+ function unselect() {
72
+ for (const item of settingItems) {
73
+ item.edit = false;
74
+ if (item.setting.type === 'number') {
75
+ if (!item.setting.value || (typeof item.setting.value === 'number' && item.setting.value < item.setting.min)) {
76
+ item.setting.value = item.setting.min;
77
+ }
78
+ }
79
+ }
80
+ setSettingItems([...settingItems]);
81
+ }
82
+ if (exit)
83
+ return null;
84
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Configuration" }), _jsx(Box, { height: settingItems.length > height ? height : undefined, borderStyle: 'single', borderColor: 'cyan', borderTop: false, borderRight: false, borderBottom: false, marginTop: 1, paddingLeft: 1, children: _jsx(ScrollView, { children: settingItems.map((item, index) => (_jsxs(Box, { width: 80, gap: 1, backgroundColor: index === currentIndex ? 'black' : undefined, children: [_jsx(Box, { minWidth: 20, children: _jsxs(Text, { children: [item.setting.title, ":"] }) }), _jsxs(Box, { minWidth: 6, children: [item.setting.type === 'boolean' &&
85
+ _jsx(Text, { color: 'cyan', inverse: item.edit, children: item.setting.value ? 'true' : 'false' }), item.setting.type === 'number' &&
86
+ _jsxs(Box, { children: [item.edit &&
87
+ _jsx(Text, { inverse: true, color: 'cyan', children: _jsx(TextInput, { value: item.setting.value.toString(), onChange: value => handleInputChange(item.key, value) }) }), !item.edit &&
88
+ _jsx(Text, { color: 'cyan', inverse: item.edit, children: item.setting.value })] })] }), _jsx(Box, { children: _jsx(Text, { color: 'gray', dimColor: index !== currentIndex, children: item.setting.description }) })] }, item.key))) }) }), _jsxs(Box, { flexDirection: 'row', gap: 1, children: [_jsxs(Commands, { children: [_jsx(Command, { title: 'Esc (Exit)', esc: true, onPress: handleExit }), _jsx(Command, { title: 'Enter (Select)', enter: true, onPress: handleEnter }), _jsx(Command, { title: 'Ctrl+S (Save)', ctrl: true, inputKey: 's', onPress: handleSave }), _jsx(Command, { up: true, onPress: handleUp }), _jsx(Command, { down: true, onPress: handleDown })] }), saved &&
89
+ _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: 'cyan', bold: true, children: "Saved!" }) })] })] }));
90
+ }
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NvbmZpZy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sU0FBUyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTJCLENBQUM7QUFHcEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sYUFBYSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTlDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLEdBQUc7SUFDSCxJQUFJLEVBQUUsS0FBSztJQUNYLE9BQU87Q0FDUixDQUFDLENBQUMsQ0FBQztBQUVKLE1BQU0sVUFBVSxNQUFNO0lBQ3BCLE1BQU0sQ0FBQyxLQUFDLE1BQU0sS0FBRyxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNO0lBRXBCLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVYLFNBQVMsUUFBUTtRQUNmLFFBQVEsRUFBRSxDQUFDO1FBQ1gsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFNBQVMsVUFBVTtRQUNqQixRQUFRLEVBQUUsQ0FBQztRQUNYLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFNBQVMsV0FBVztRQUVsQixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0MsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3pELENBQUM7UUFFRCxlQUFlLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFFbkQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFFLENBQUMsT0FBd0IsQ0FBQztRQUU1RixJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxlQUFlLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssVUFBVSxVQUFVO1FBRXZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEQsR0FBRyxHQUFHO1lBQ04sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDekIsQ0FBQyxFQUFFLEVBQTRCLENBQUMsQ0FBQztRQUVsQyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsU0FBUyxVQUFVO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxRQUFRO1FBRWYsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUVoQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUVsQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzdHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxlQUFlLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXRCLE9BQU8sQ0FDTCxNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsUUFBUSxhQUN6QixLQUFDLElBQUksSUFBQyxJQUFJLG9DQUFxQixFQUMvQixLQUFDLEdBQUcsSUFDRixNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUN6RCxXQUFXLEVBQUMsUUFBUSxFQUNwQixXQUFXLEVBQUMsTUFBTSxFQUNsQixTQUFTLEVBQUUsS0FBSyxFQUNoQixXQUFXLEVBQUUsS0FBSyxFQUNsQixZQUFZLEVBQUUsS0FBSyxFQUNuQixTQUFTLEVBQUUsQ0FBQyxFQUNaLFdBQVcsRUFBRSxDQUFDLFlBQ2QsS0FBQyxVQUFVLGNBQ1IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQ2pDLE1BQUMsR0FBRyxJQUVGLEtBQUssRUFBRSxFQUFFLEVBQ1QsR0FBRyxFQUFFLENBQUMsRUFDTixlQUFlLEVBQUUsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQzdELEtBQUMsR0FBRyxJQUFDLFFBQVEsRUFBRSxFQUFFLFlBQ2YsTUFBQyxJQUFJLGVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsR0FDOUIsRUFDTixNQUFDLEdBQUcsSUFBQyxRQUFRLEVBQUUsQ0FBQyxhQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVM7d0NBQzlCLEtBQUMsSUFBSSxJQUNILEtBQUssRUFBQyxNQUFNLEVBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLFlBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FDakMsRUFFUixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRO3dDQUM3QixNQUFDLEdBQUcsZUFDRCxJQUFJLENBQUMsSUFBSTtvREFDUixLQUFDLElBQUksSUFBQyxPQUFPLFFBQUMsS0FBSyxFQUFDLE1BQU0sWUFDeEIsS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUNwQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQ3JELEVBRVIsQ0FBQyxJQUFJLENBQUMsSUFBSTtvREFDVCxLQUFDLElBQUksSUFDSCxLQUFLLEVBQUMsTUFBTSxFQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FDZCxJQUVMLElBRUosRUFDTixLQUFDLEdBQUcsY0FDRixLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssWUFBWSxZQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFRLEdBQ2xGLEtBcENELElBQUksQ0FBQyxHQUFHLENBcUNULENBQ1AsQ0FBQyxHQUNTLEdBQ1QsRUFDTixNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBRSxDQUFDLGFBQzdCLE1BQUMsUUFBUSxlQUNQLEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsR0FBRyxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsRUFDdEQsS0FBQyxPQUFPLElBQUMsS0FBSyxFQUFDLGdCQUFnQixFQUFDLEtBQUssUUFBQyxPQUFPLEVBQUUsV0FBVyxHQUFHLEVBQzdELEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxlQUFlLEVBQUMsSUFBSSxRQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxFQUN2RSxLQUFDLE9BQU8sSUFBQyxFQUFFLFFBQUMsT0FBTyxFQUFFLFFBQVEsR0FBSSxFQUNqQyxLQUFDLE9BQU8sSUFBQyxJQUFJLFFBQUMsT0FBTyxFQUFFLFVBQVUsR0FBSSxJQUM1QixFQUNWLEtBQUs7d0JBQ0osS0FBQyxHQUFHLElBQUMsU0FBUyxFQUFFLENBQUMsWUFDZixLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLElBQUksNkJBQWMsR0FDakMsSUFFSixJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUMifQ==
@@ -1,13 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
- import { useEffect, useState } from 'react';
4
3
  import { TextField } from "./textField.js";
5
4
  export function ApiKeyField(props) {
6
- const { title, apiKey: initialApiKey = '', commands, onChange } = props;
7
- const [apiKey, setApiKey] = useState(initialApiKey);
8
- useEffect(() => {
9
- setApiKey(initialApiKey);
10
- }, [initialApiKey]);
11
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(Text, { bold: true, children: title }), _jsx(TextField, { label: 'Api key:', value: apiKey, placeholder: 'Enter api key', marginTop: 1, onChange: setApiKey, onSubmit: value => onChange(value.trim()) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: 'grey', dimColor: true, children: commands }) })] }));
5
+ const { title, value, onChange } = props;
6
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(Text, { bold: true, children: title }), _jsx(Box, { flexShrink: 0 }), _jsxs(Box, { flexDirection: 'row', gap: 1, borderStyle: 'single', borderLeftColor: 'cyan', borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, paddingLeft: 1, marginTop: 1, children: [_jsx(Box, { flexShrink: 0, children: _jsx(Text, { children: "Api key:" }) }), _jsx(TextField, { value: value, placeholder: 'Enter api key', onChange: onChange })] })] }));
12
7
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpS2V5RmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9hcGlLZXlGaWVsZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBaUIsQ0FBQztBQVM1QyxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVk7SUFFdEMsTUFBTSxFQUNKLEtBQUssRUFDTCxNQUFNLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFDMUIsUUFBUSxFQUNSLFFBQVEsRUFDVCxHQUFHLEtBQUssQ0FBQztJQUVWLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXBELFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUVwQixPQUFPLENBQ0wsTUFBQyxHQUFHLElBQUMsYUFBYSxFQUFDLFFBQVEsYUFDekIsS0FBQyxJQUFJLElBQUMsSUFBSSxrQkFBRSxLQUFLLEdBQVEsRUFDekIsS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFDLFVBQVUsRUFDaEIsS0FBSyxFQUFFLE1BQU0sRUFDYixXQUFXLEVBQUMsZUFBZSxFQUMzQixTQUFTLEVBQUUsQ0FBQyxFQUNaLFFBQVEsRUFBRSxTQUFTLEVBQ25CLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUM5QyxLQUFDLEdBQUcsSUFBQyxTQUFTLEVBQUUsQ0FBQyxZQUNmLEtBQUMsSUFBSSxJQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsUUFBUSxrQkFBRSxRQUFRLEdBQVEsR0FDekMsSUFDRixDQUNQLENBQUM7QUFDSixDQUFDIn0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpS2V5RmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9hcGlLZXlGaWVsZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBaUIsQ0FBQztBQVE1QyxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVk7SUFFdEMsTUFBTSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsUUFBUSxFQUNULEdBQUcsS0FBSyxDQUFDO0lBRVYsT0FBTyxDQUNMLE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBQyxRQUFRLGFBQ3pCLEtBQUMsSUFBSSxJQUFDLElBQUksa0JBQUUsS0FBSyxHQUFRLEVBQ3pCLEtBQUMsR0FBRyxJQUFDLFVBQVUsRUFBRSxDQUFDLEdBQ1osRUFDTixNQUFDLEdBQUcsSUFDRixhQUFhLEVBQUMsS0FBSyxFQUNuQixHQUFHLEVBQUUsQ0FBQyxFQUNOLFdBQVcsRUFBQyxRQUFRLEVBQ3BCLGVBQWUsRUFBQyxNQUFNLEVBQ3RCLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLFlBQVksRUFBRSxLQUFLLEVBQ25CLFdBQVcsRUFBRSxDQUFDLEVBQ2QsU0FBUyxFQUFFLENBQUMsYUFDWixLQUFDLEdBQUcsSUFBQyxVQUFVLEVBQUUsQ0FBQyxZQUNoQixLQUFDLElBQUksMkJBQWdCLEdBQ2pCLEVBQ04sS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFFLEtBQUssRUFDWixXQUFXLEVBQUMsZUFBZSxFQUMzQixRQUFRLEVBQUUsUUFBUSxHQUFHLElBQ25CLElBQ0YsQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { useContext, useEffect, useState } from 'react';
4
+ import { CommandContext } from "./commands.js";
5
+ export function Command(props) {
6
+ const { title, ctrl, esc, enter, up, down, inputKey, onPress } = props;
7
+ const [active, setActive] = useState(false);
8
+ const inputEvent = useContext(CommandContext);
9
+ useEffect(() => {
10
+ if (!inputEvent)
11
+ return;
12
+ const keyMap = {
13
+ ctrl,
14
+ escape: esc,
15
+ return: enter,
16
+ upArrow: up,
17
+ downArrow: down
18
+ };
19
+ const keys = Object
20
+ .entries(keyMap)
21
+ .filter(item => item[1] !== undefined)
22
+ .map(([key]) => key);
23
+ const validateKey = keys.length > 0;
24
+ const validateInput = inputKey !== undefined;
25
+ const isKeyActive = keys.every(key => inputEvent.key[key]);
26
+ const isInputActive = inputEvent.input === inputKey;
27
+ const active = isActive(validateKey, validateInput, isKeyActive, isInputActive);
28
+ if (active) {
29
+ onPress?.();
30
+ setActive(true);
31
+ setTimeout(() => setActive(false), 200);
32
+ }
33
+ }, [inputEvent]);
34
+ function isActive(validateKey, validateInput, isKeyActive, isInputActive) {
35
+ if (ctrl && inputKey === 'v' && inputEvent && inputEvent.input.length > 1) {
36
+ return true;
37
+ }
38
+ else if (validateKey && validateInput) {
39
+ return isKeyActive && isInputActive;
40
+ }
41
+ else if (validateKey) {
42
+ return isKeyActive;
43
+ }
44
+ else if (validateInput) {
45
+ return isInputActive;
46
+ }
47
+ else {
48
+ return false;
49
+ }
50
+ }
51
+ if (!title)
52
+ return null;
53
+ return (_jsx(Box, { children: _jsx(Text, { bold: active, color: active ? 'cyan' : 'gray', children: title }) }));
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1hbmQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFPLElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWdCLENBQUM7QUFhaEQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFtQjtJQUV6QyxNQUFNLEVBQ0osS0FBSyxFQUNMLElBQUksRUFDSixHQUFHLEVBQ0gsS0FBSyxFQUNMLEVBQUUsRUFDRixJQUFJLEVBQ0osUUFBUSxFQUNSLE9BQU8sRUFDUixHQUFHLEtBQUssQ0FBQztJQUVWLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU5QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBRWIsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRXhCLE1BQU0sTUFBTSxHQUFpQjtZQUMzQixJQUFJO1lBQ0osTUFBTSxFQUFFLEdBQUc7WUFDWCxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU07YUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7YUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBZ0IsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLFFBQVEsS0FBSyxTQUFTLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztRQUVwRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEYsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVqQixTQUFTLFFBQVEsQ0FBQyxXQUFvQixFQUFFLGFBQXNCLEVBQUUsV0FBb0IsRUFBRSxhQUFzQjtRQUMxRyxJQUFJLElBQUksSUFBSSxRQUFRLEtBQUssR0FBRyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLFdBQVcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN4QyxPQUFPLFdBQVcsSUFBSSxhQUFhLENBQUM7UUFDdEMsQ0FBQzthQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4QixPQUFPLENBQ0wsS0FBQyxHQUFHLGNBQ0YsS0FBQyxJQUFJLElBQ0gsSUFBSSxFQUFFLE1BQU0sRUFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sWUFDOUIsS0FBSyxHQUNELEdBQ0gsQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { Children, createContext, useState } from 'react';
4
+ export const CommandContext = createContext(undefined);
5
+ export function Commands(props) {
6
+ const [inputEvent, setInputEvent] = useState();
7
+ useInput((input, key) => {
8
+ setInputEvent({ input, key });
9
+ });
10
+ const children = Children.map(props.children, child => child);
11
+ return (_jsx(CommandContext.Provider, { value: inputEvent, children: _jsxs(Box, { marginTop: 1, gap: 1, children: [children.filter(child => child.props.title).map((child, index, children) => _jsxs(Box, { children: [child, index !== children.length - 1 &&
12
+ _jsx(Text, { color: 'gray', children: "," })] }, index)), children.filter(child => !child.props.title).map((child) => child)] }) }));
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9jb21tYW5kcy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQU8sSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBS3hFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQXlCLFNBQVMsQ0FBQyxDQUFDO0FBTS9FLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBWTtJQUVuQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsRUFBYyxDQUFDO0lBRTNELFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN0QixhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlELE9BQU8sQ0FDTCxLQUFDLGNBQWMsQ0FBQyxRQUFRLElBQUMsS0FBSyxFQUFFLFVBQVUsWUFDeEMsTUFBQyxHQUFHLElBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQzFFLE1BQUMsR0FBRyxlQUNELEtBQUssRUFDTCxLQUFLLEtBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUM1QixLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBUyxLQUhyQixLQUFLLENBS1QsQ0FDUCxFQUNBLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDMUQsS0FBSyxDQUNOLElBQ0csR0FDa0IsQ0FDM0IsQ0FBQztBQUNKLENBQUMifQ==
@@ -1,34 +1,41 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useInput, Box, Text } from 'ink';
2
+ import { Box, Text } from 'ink';
3
3
  import { useEffect, useState } from 'react';
4
4
  import { configStore } from "../stores/config.js";
5
5
  import { ApiKeyField } from "./apiKeyField.js";
6
+ import { Commands } from "./commands.js";
7
+ import { Command } from "./command.js";
6
8
  const config = await configStore.get();
7
9
  export function Provider(props) {
8
10
  const { provider, onClose } = props;
9
- const [apiKey, setApiKey] = useState(config?.providers[provider.id]?.apiKey);
11
+ const [apiKey, setApiKey] = useState(config?.providers[provider.id]?.apiKey ?? '');
10
12
  const [exit, setExit] = useState(false);
11
13
  const [saved, setSaved] = useState(false);
14
+ useEffect(() => {
15
+ void (async () => {
16
+ const config = await configStore.get();
17
+ setApiKey(config?.providers[provider.id]?.apiKey ?? '');
18
+ })();
19
+ }, []);
12
20
  useEffect(() => {
13
21
  if (exit) {
14
22
  setTimeout(() => process.exit(), 0);
15
23
  }
16
24
  }, [exit]);
17
- useInput((input, key) => {
18
- if (key.escape)
19
- setExit(true);
20
- if (input.toLowerCase() === 'q')
21
- onClose();
22
- });
23
- async function handleSave(apiKey) {
25
+ async function handleSave() {
24
26
  await configStore.setProviderApiKey(provider.id, apiKey);
25
- setApiKey(apiKey);
26
27
  setSaved(true);
27
- setTimeout(() => setSaved(false), 1000);
28
+ setTimeout(() => setSaved(false), 800);
29
+ }
30
+ function handleExit() {
31
+ setExit(true);
32
+ }
33
+ function handleGoBack() {
34
+ onClose();
28
35
  }
29
36
  if (exit)
30
37
  return null;
31
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(ApiKeyField, { title: provider.name, apiKey: apiKey, commands: 'Esc (Exit), Q (Go Back), Ctrl+V (Paste), Enter (Save)', onChange: handleSave }), saved &&
32
- _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: 'cyan', bold: true, children: "Saved!" }) })] }));
38
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(ApiKeyField, { title: provider.name, value: apiKey, onChange: setApiKey }), _jsxs(Box, { flexDirection: 'row', gap: 1, children: [_jsxs(Commands, { children: [_jsx(Command, { title: 'Esc (Exit)', esc: true, onPress: handleExit }), _jsx(Command, { title: 'Ctrl+B (Go Back)', ctrl: true, inputKey: 'b', onPress: handleGoBack }), _jsx(Command, { title: 'Ctrl+V (Paste)', ctrl: true, inputKey: 'v' }), _jsx(Command, { title: 'Enter (Save)', enter: true, onPress: handleSave })] }), saved &&
39
+ _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: 'cyan', bold: true, children: "\u00A1Saved!" }) })] })] }));
33
40
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9wcm92aWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFtQixDQUFDO0FBT2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXZDLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBWTtJQUVuQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVwQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3RSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUxQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFWCxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDdEIsSUFBSSxHQUFHLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxLQUFLLFVBQVUsVUFBVSxDQUFDLE1BQWM7UUFDdEMsTUFBTSxXQUFXLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RCxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdEIsT0FBTyxDQUNMLE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBQyxRQUFRLGFBQ3pCLEtBQUMsV0FBVyxJQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUNwQixNQUFNLEVBQUUsTUFBTSxFQUNkLFFBQVEsRUFBQyx1REFBdUQsRUFDaEUsUUFBUSxFQUFFLFVBQVUsR0FBRyxFQUN4QixLQUFLO2dCQUNKLEtBQUMsR0FBRyxJQUFDLFNBQVMsRUFBRSxDQUFDLFlBQ2YsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxJQUFJLDZCQUFjLEdBQ2pDLElBRUosQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9wcm92aWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWUsQ0FBQztBQU94QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUV2QyxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVk7SUFFbkMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFcEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFWCxLQUFLLFVBQVUsVUFBVTtRQUN2QixNQUFNLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFNBQVMsVUFBVTtRQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQVMsWUFBWTtRQUNuQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV0QixPQUFPLENBQ0wsTUFBQyxHQUFHLElBQUMsYUFBYSxFQUFDLFFBQVEsYUFDekIsS0FBQyxXQUFXLElBQ1YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssRUFBRSxNQUFNLEVBQ2IsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUN4QixNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBRSxDQUFDLGFBQzdCLE1BQUMsUUFBUSxlQUNQLEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsR0FBRyxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsRUFDdEQsS0FBQyxPQUFPLElBQUMsS0FBSyxFQUFDLGtCQUFrQixFQUFDLElBQUksUUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsRUFDNUUsS0FBQyxPQUFPLElBQUMsS0FBSyxFQUFDLGdCQUFnQixFQUFDLElBQUksUUFBQyxRQUFRLEVBQUMsR0FBRyxHQUFFLEVBQ25ELEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxjQUFjLEVBQUMsS0FBSyxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsSUFDakQsRUFDVixLQUFLO3dCQUNKLEtBQUMsR0FBRyxJQUFDLFNBQVMsRUFBRSxDQUFDLFlBQ2YsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxJQUFJLG1DQUFlLEdBQ2xDLElBRUosSUFDRixDQUNQLENBQUM7QUFDSixDQUFDIn0=