bento-get 1.98.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/dist/cli.d.ts +2 -0
- package/dist/cli.js +8 -0
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.js +12 -0
- package/dist/commands/index.d.ts +15 -0
- package/dist/commands/index.js +203 -0
- package/dist/components.d.ts +10 -0
- package/dist/components.js +598 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +4 -0
- package/dist/hooks/useGetComponent.d.ts +5 -0
- package/dist/hooks/useGetComponent.js +55 -0
- package/dist/hooks/useGithubAuth.d.ts +13 -0
- package/dist/hooks/useGithubAuth.js +47 -0
- package/dist/hooks/useGithubAuthPooling.d.ts +8 -0
- package/dist/hooks/useGithubAuthPooling.js +56 -0
- package/dist/hooks/useInstallComponent.d.ts +6 -0
- package/dist/hooks/useInstallComponent.js +84 -0
- package/package.json +42 -0
- package/readme.md +11 -0
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import Pastel from 'pastel';
|
|
3
|
+
const app = new Pastel({
|
|
4
|
+
importMeta: import.meta,
|
|
5
|
+
name: 'bento-get',
|
|
6
|
+
});
|
|
7
|
+
await app.run();
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL2NsaS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQTtBQUUzQixNQUFNLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUk7SUFDdkIsSUFBSSxFQUFFLFdBQVc7Q0FDbEIsQ0FBQyxDQUFBO0FBRUYsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUEifQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Text } from 'ink';
|
|
3
|
+
import zod from 'zod';
|
|
4
|
+
export const args = zod.tuple([zod.string(), zod.string()]);
|
|
5
|
+
// const categories = ['forms', 'elements', 'shells', 'animations', 'ecommerce', 'user']
|
|
6
|
+
export default function Add({ args }) {
|
|
7
|
+
// if `bento add` show Select with categories.
|
|
8
|
+
// then show Select with category sections.
|
|
9
|
+
// if `bento add <category>` show Select with category sections.
|
|
10
|
+
return (_jsxs(Text, { children: ["Adding now ", args[0], " to ", args[1]] }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbW1hbmRzL2FkZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDMUIsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBRXJCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFNM0Qsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxPQUFPLFVBQVUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFTO0lBQ3pDLDhDQUE4QztJQUM5QywyQ0FBMkM7SUFDM0MsZ0VBQWdFO0lBQ2hFLE9BQU8sQ0FDTCxNQUFDLElBQUksOEJBQ1MsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsSUFDM0IsQ0FDUixDQUFBO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const AppContext: import("react").Context<{
|
|
3
|
+
tokenStore: {};
|
|
4
|
+
copyToClipboard: boolean;
|
|
5
|
+
setCopyToClipboard: () => void;
|
|
6
|
+
results: never[];
|
|
7
|
+
setResults: () => void;
|
|
8
|
+
selectedId: number;
|
|
9
|
+
setSelectedId: () => void;
|
|
10
|
+
input: string;
|
|
11
|
+
setInput: () => void;
|
|
12
|
+
setInstallcomponent: () => void;
|
|
13
|
+
install: null;
|
|
14
|
+
}>;
|
|
15
|
+
export default function Search(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
import { Alert, Badge, Spinner } from '@inkjs/ui';
|
|
4
|
+
import Conf from 'conf';
|
|
5
|
+
import { copy } from 'copy-paste';
|
|
6
|
+
import Fuse from 'fuse.js';
|
|
7
|
+
import { Box, Spacer, Text, useApp, useInput } from 'ink';
|
|
8
|
+
import TextInput from 'ink-text-input';
|
|
9
|
+
import open from 'open';
|
|
10
|
+
import { createContext, useContext, useEffect, useState } from 'react';
|
|
11
|
+
import { componentsList } from '../components.js';
|
|
12
|
+
import { useGithubAuth } from '../hooks/useGithubAuth.js';
|
|
13
|
+
import { useInstallComponent } from '../hooks/useInstallComponent.js';
|
|
14
|
+
const tokenStore = new Conf({ projectName: 'bento-cli' });
|
|
15
|
+
const handleKeypress = (_, key, appContext) => {
|
|
16
|
+
const { selectedId, setSelectedId, setInstall, results, copyToClipboard, setCopyToClipboard, } = appContext;
|
|
17
|
+
if (_ === 'c' && appContext.install.installingComponent) {
|
|
18
|
+
setCopyToClipboard(true);
|
|
19
|
+
}
|
|
20
|
+
if (key.escape && !appContext.install.installingComponent?.isOSS) {
|
|
21
|
+
appContext.setInstall((prev) => ({
|
|
22
|
+
...prev,
|
|
23
|
+
installingComponent: null,
|
|
24
|
+
enterToOpenBrowser: false,
|
|
25
|
+
}));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (key.return &&
|
|
29
|
+
!appContext.install.installingComponent?.isOSS &&
|
|
30
|
+
appContext.install.enterToOpenBrowser) {
|
|
31
|
+
open('https://github.com/login/device');
|
|
32
|
+
}
|
|
33
|
+
if (appContext.install.installingComponent?.isOSS)
|
|
34
|
+
return;
|
|
35
|
+
if (!key)
|
|
36
|
+
return;
|
|
37
|
+
if (key.escape) {
|
|
38
|
+
appContext.exit();
|
|
39
|
+
}
|
|
40
|
+
if (key.upArrow) {
|
|
41
|
+
selectedId > -1 && setSelectedId(selectedId - 1);
|
|
42
|
+
}
|
|
43
|
+
if (key.downArrow) {
|
|
44
|
+
selectedId < appContext.results.length - 1 && setSelectedId(selectedId + 1);
|
|
45
|
+
}
|
|
46
|
+
if (key.return) {
|
|
47
|
+
setInstall((prev) => ({
|
|
48
|
+
...prev,
|
|
49
|
+
installingComponent: results[selectedId]?.item,
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
export const AppContext = createContext({
|
|
54
|
+
tokenStore: {},
|
|
55
|
+
copyToClipboard: false,
|
|
56
|
+
setCopyToClipboard: () => { },
|
|
57
|
+
results: [],
|
|
58
|
+
setResults: () => { },
|
|
59
|
+
selectedId: -1,
|
|
60
|
+
setSelectedId: () => { },
|
|
61
|
+
input: '',
|
|
62
|
+
setInput: () => { },
|
|
63
|
+
setInstallcomponent: () => { },
|
|
64
|
+
install: null,
|
|
65
|
+
});
|
|
66
|
+
const SearchBar = () => {
|
|
67
|
+
const appContext = useContext(AppContext);
|
|
68
|
+
const search = (query) => {
|
|
69
|
+
const fuse = new Fuse(componentsList, {
|
|
70
|
+
keys: ['name', 'category', 'categorySection'],
|
|
71
|
+
});
|
|
72
|
+
return fuse.search(query);
|
|
73
|
+
};
|
|
74
|
+
const handleChange = (value) => {
|
|
75
|
+
if (appContext.install.installingComponent?.isOSS)
|
|
76
|
+
return;
|
|
77
|
+
appContext.setInput(value);
|
|
78
|
+
const results = search(value);
|
|
79
|
+
appContext.setResults(results);
|
|
80
|
+
appContext.setSelectedId(-1);
|
|
81
|
+
};
|
|
82
|
+
return (_jsxs(Box, { marginX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, children: "Search: " }), _jsx(TextInput, { value: appContext.input, onChange: handleChange, marginRight: 'auto' })] }), _jsx(ResultsCounter, {})] }));
|
|
83
|
+
};
|
|
84
|
+
const ResultsContainer = () => {
|
|
85
|
+
const appContext = useContext(AppContext);
|
|
86
|
+
return (_jsxs(Box, { flexDirection: "column", display: appContext.results.length ? 'flex' : 'none', children: [_jsx(Box, { flexDirection: "column", borderStyle: "round", paddingX: 1, gap: 1, children: appContext.results.slice(0, 5).map((result, i) => (_jsx(ResultCard, { result: result, isSelected: appContext.selectedId === i }, result.item.fileName))) }), _jsx(Footer, {})] }));
|
|
87
|
+
};
|
|
88
|
+
const Footer = () => {
|
|
89
|
+
return (_jsx(Box, { flexDirection: "row", justifyContent: "flex-end", marginRight: 1, children: _jsxs(Text, { children: [_jsx(Text, { underline: true, children: "ESC" }), " to exit"] }) }));
|
|
90
|
+
};
|
|
91
|
+
const InstalledBadge = ({ item }) => {
|
|
92
|
+
const appContext = useContext(AppContext);
|
|
93
|
+
const componentIsInstalled = appContext.install?.installedComponents
|
|
94
|
+
?.map((component) => component.fileName)
|
|
95
|
+
.includes(item.fileName);
|
|
96
|
+
if (!appContext.install?.installedComponents)
|
|
97
|
+
return null;
|
|
98
|
+
return (componentIsInstalled && (_jsx(Box, { marginLeft: 1, children: _jsx(Badge, { color: "green", children: "Installed" }) })));
|
|
99
|
+
};
|
|
100
|
+
const ResultCard = ({ result, isSelected }) => {
|
|
101
|
+
const appContext = useContext(AppContext);
|
|
102
|
+
return (_jsxs(Box, { flexDirection: "row", minWidth: '100%', children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { textWrap: "nowrap", bold: true, style: { textWrap: 'nowrap' }, color: "gray", children: (() => {
|
|
103
|
+
switch (true) {
|
|
104
|
+
case appContext.install.installingComponent && isSelected:
|
|
105
|
+
return '';
|
|
106
|
+
case appContext.install.installingComponent:
|
|
107
|
+
return ' ';
|
|
108
|
+
case isSelected:
|
|
109
|
+
return '❯ ';
|
|
110
|
+
default:
|
|
111
|
+
return ' ';
|
|
112
|
+
}
|
|
113
|
+
})() }), appContext.install.installingComponent && isSelected && _jsx(InstallComponent, {}), _jsx(Text, { bold: true, style: { textWrap: 'nowrap' }, color: isSelected ? 'white' : 'black', children: result.item?.name }), _jsx(InstalledBadge, { item: result.item })] }), _jsx(Spacer, {}), _jsx(TypeOfComponentAccess, { item: result.item }), _jsx(CategorySectionBadge, { item: result.item })] }));
|
|
114
|
+
};
|
|
115
|
+
const CategorySectionBadge = ({ item }) => {
|
|
116
|
+
const appContext = useContext(AppContext);
|
|
117
|
+
return (_jsx(Box, { marginLeft: 1, gap: 1, children: _jsxs(Text, { color: 'black', backgroundColor: 'white', children: [' ', item?.category.charAt(0).toUpperCase() + item?.category.slice(1), " ", '>', ' ', item?.categorySection.charAt(0).toUpperCase() +
|
|
118
|
+
item?.categorySection.slice(1), ' '] }) }));
|
|
119
|
+
};
|
|
120
|
+
const TypeOfComponentAccess = ({ item }) => {
|
|
121
|
+
const appContext = useContext(AppContext);
|
|
122
|
+
return (_jsx(Box, { marginLeft: 1, gap: 1, display: item?.isOSS ? 'flex' : 'none', children: _jsx(Text, { color: 'black', backgroundColor: 'gray', children: "OSS" }) }));
|
|
123
|
+
};
|
|
124
|
+
const ResultsCounter = () => {
|
|
125
|
+
const appContext = useContext(AppContext);
|
|
126
|
+
return (_jsx(Box, { children: !!appContext.results.length && (_jsxs(Text, { bold: true, color: "gray", children: [appContext.results.length, " result", appContext.results.length > 1 ? 's' : ''] })) }));
|
|
127
|
+
};
|
|
128
|
+
const InstallComponent = () => {
|
|
129
|
+
const appContext = useContext(AppContext);
|
|
130
|
+
return (_jsx(Box, { children: appContext.install.installingComponent ? (_jsx(Box, { children: _jsx(Spinner, { label: "Installing " }) })) : (_jsx(Box, { marginRight: 2 })) }));
|
|
131
|
+
};
|
|
132
|
+
const UsageBanner = () => {
|
|
133
|
+
return (_jsxs(Alert, { variant: "info", children: ["Search any component by category, section or name. ", _jsx(Text, { underline: true, children: "Up" }), " and", ' ', _jsx(Text, { underline: true, children: "down" }), " arrows to select. ", _jsx(Text, { underline: true, children: "Enter" }), " to install."] }));
|
|
134
|
+
};
|
|
135
|
+
const CodeAuthScreen = () => {
|
|
136
|
+
const appContext = useContext(AppContext);
|
|
137
|
+
const { data, isLoading } = useGithubAuth();
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
appContext.setInstall((prev) => ({
|
|
140
|
+
...prev,
|
|
141
|
+
enterToOpenBrowser: true,
|
|
142
|
+
}));
|
|
143
|
+
return () => {
|
|
144
|
+
appContext.setCopyToClipboard(false);
|
|
145
|
+
};
|
|
146
|
+
}, []);
|
|
147
|
+
appContext.tokenStore.onDidChange('token', (newvalue, oldvalue) => {
|
|
148
|
+
appContext.setInstall((prev) => ({
|
|
149
|
+
...prev,
|
|
150
|
+
tokenIsInstalled: true,
|
|
151
|
+
}));
|
|
152
|
+
});
|
|
153
|
+
if (appContext.copyToClipboard)
|
|
154
|
+
copy(data?.user_code);
|
|
155
|
+
return (_jsxs(Box, { flexDirection: "column", display: "flex", children: [_jsxs(Alert, { variant: "info", children: ["Press ", _jsx(Text, { underline: true, children: "Enter" }), " to open browser window and authenticate to your Github account with the following auth code."] }), _jsxs(Box, { justifyContent: "space-between", paddingRight: 1, children: [_jsxs(Text, { children: [' < ', _jsx(Text, { underline: true, children: "ESC" }), " to go Back"] }), appContext.copyToClipboard ? (_jsx(Text, { color: "green", children: "copied!" })) : (_jsxs(Text, { children: ["Hit ", _jsx(Text, { underline: true, children: "c" }), " to copy to clipboard"] }))] }), _jsx(Box, { flexDirection: "row", borderStyle: "round", paddingY: 1, justifyContent: "center", children: appContext.install.tokenIsInstalled ? (_jsx(Box, { paddingY: 1, children: _jsx(Text, { color: "green", children: "Github Authentication Successful \u2714\uFE0E" }) })) : isLoading ? (_jsx(Box, { paddingY: 1, children: _jsx(Spinner, { label: "Loading..." }) })) : (data?.user_code?.split('')?.map((item, key) => (_jsx(Box, { flexDirection: "column", ...(item !== '-' && { borderStyle: 'round' }), paddingX: 1, gap: 1, width: item !== '-' ? 5 : 3, height: 3, alignItems: "center", justifyContent: "center", children: _jsx(Text, { width: 5, children: item }) }, key)))) })] }));
|
|
156
|
+
};
|
|
157
|
+
export default function Search() {
|
|
158
|
+
const [results, setResults] = useState([]);
|
|
159
|
+
const [selectedId, setSelectedId] = useState(-1);
|
|
160
|
+
const [input, setInput] = useState('');
|
|
161
|
+
const [install, setInstall] = useState({
|
|
162
|
+
installingComponent: null,
|
|
163
|
+
installedComponents: [],
|
|
164
|
+
enterToOpenBrowser: false,
|
|
165
|
+
tokenIsInstalled: false,
|
|
166
|
+
});
|
|
167
|
+
const [copyToClipboard, setCopyToClipboard] = useState(false);
|
|
168
|
+
const { exit } = useApp();
|
|
169
|
+
const { access_token } = tokenStore?.get('token') ?? {};
|
|
170
|
+
// tokenStore.delete("token");
|
|
171
|
+
useInput((_, key) => handleKeypress(_, key, {
|
|
172
|
+
tokenStore,
|
|
173
|
+
copyToClipboard,
|
|
174
|
+
setCopyToClipboard,
|
|
175
|
+
exit,
|
|
176
|
+
results,
|
|
177
|
+
setResults,
|
|
178
|
+
selectedId,
|
|
179
|
+
setSelectedId,
|
|
180
|
+
input,
|
|
181
|
+
setInput,
|
|
182
|
+
setInstall,
|
|
183
|
+
install,
|
|
184
|
+
}));
|
|
185
|
+
return (_jsx(AppContext.Provider, { value: {
|
|
186
|
+
tokenStore,
|
|
187
|
+
copyToClipboard,
|
|
188
|
+
setCopyToClipboard,
|
|
189
|
+
results,
|
|
190
|
+
setResults,
|
|
191
|
+
selectedId,
|
|
192
|
+
setSelectedId,
|
|
193
|
+
input,
|
|
194
|
+
setInput,
|
|
195
|
+
install,
|
|
196
|
+
setInstall,
|
|
197
|
+
}, children: _jsx(Provider, { children: _jsx(Box, { flexDirection: "column", children: (install.installingComponent?.isOSS ?? true) || access_token ? (_jsxs(Box, { flexDirection: "column", children: [_jsx(UsageBanner, {}), _jsx(SearchBar, {}), _jsx(ResultsContainer, {})] })) : (_jsx(Box, { flexDirection: "column", children: _jsx(CodeAuthScreen, {}) })) }) }) }));
|
|
198
|
+
}
|
|
199
|
+
const Provider = ({ children }) => {
|
|
200
|
+
useInstallComponent();
|
|
201
|
+
return _jsx(_Fragment, { children: children });
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tbWFuZHMvaW5kZXgudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxjQUFjO0FBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2pELE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQTtBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUN6RCxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN0QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRXJFLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUE7QUFFekQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQzVDLE1BQU0sRUFDSixVQUFVLEVBQ1YsYUFBYSxFQUNiLFVBQVUsRUFDVixPQUFPLEVBQ1AsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixHQUFHLFVBQVUsQ0FBQTtJQUVkLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxVQUFVLENB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
|