xgen-dex-ide 1.60.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 +42 -0
- package/dist/components/ActivityBar.d.ts +21 -0
- package/dist/components/ActivityBar.d.ts.map +1 -0
- package/dist/components/ActivityBar.js +14 -0
- package/dist/components/ActivityBar.js.map +1 -0
- package/dist/components/EditorArea.d.ts +5 -0
- package/dist/components/EditorArea.d.ts.map +1 -0
- package/dist/components/EditorArea.js +468 -0
- package/dist/components/EditorArea.js.map +1 -0
- package/dist/components/Explorer.d.ts +2 -0
- package/dist/components/Explorer.d.ts.map +1 -0
- package/dist/components/Explorer.js +349 -0
- package/dist/components/Explorer.js.map +1 -0
- package/dist/components/IdeView.d.ts +24 -0
- package/dist/components/IdeView.d.ts.map +1 -0
- package/dist/components/IdeView.js +359 -0
- package/dist/components/IdeView.js.map +1 -0
- package/dist/components/QuickOpen.d.ts +2 -0
- package/dist/components/QuickOpen.d.ts.map +1 -0
- package/dist/components/QuickOpen.js +204 -0
- package/dist/components/QuickOpen.js.map +1 -0
- package/dist/components/ScmView.d.ts +6 -0
- package/dist/components/ScmView.d.ts.map +1 -0
- package/dist/components/ScmView.js +283 -0
- package/dist/components/ScmView.js.map +1 -0
- package/dist/components/SearchView.d.ts +2 -0
- package/dist/components/SearchView.d.ts.map +1 -0
- package/dist/components/SearchView.js +97 -0
- package/dist/components/SearchView.js.map +1 -0
- package/dist/components/StatusBar.d.ts +2 -0
- package/dist/components/StatusBar.d.ts.map +1 -0
- package/dist/components/StatusBar.js +71 -0
- package/dist/components/StatusBar.js.map +1 -0
- package/dist/components/TerminalPanel.d.ts +6 -0
- package/dist/components/TerminalPanel.d.ts.map +1 -0
- package/dist/components/TerminalPanel.js +101 -0
- package/dist/components/TerminalPanel.js.map +1 -0
- package/dist/components/hooks.d.ts +25 -0
- package/dist/components/hooks.d.ts.map +1 -0
- package/dist/components/hooks.js +99 -0
- package/dist/components/hooks.js.map +1 -0
- package/dist/components/icons.d.ts +23 -0
- package/dist/components/icons.d.ts.map +1 -0
- package/dist/components/icons.js +123 -0
- package/dist/components/icons.js.map +1 -0
- package/dist/components/primitives.d.ts +57 -0
- package/dist/components/primitives.d.ts.map +1 -0
- package/dist/components/primitives.js +263 -0
- package/dist/components/primitives.js.map +1 -0
- package/dist/fuzzy.d.ts +17 -0
- package/dist/fuzzy.d.ts.map +1 -0
- package/dist/fuzzy.js +62 -0
- package/dist/fuzzy.js.map +1 -0
- package/dist/git-model.d.ts +104 -0
- package/dist/git-model.d.ts.map +1 -0
- package/dist/git-model.js +126 -0
- package/dist/git-model.js.map +1 -0
- package/dist/ide.css +2203 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +33 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +98 -0
- package/dist/keys.js.map +1 -0
- package/dist/paths.d.ts +14 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +66 -0
- package/dist/paths.js.map +1 -0
- package/dist/store.d.ts +406 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +1464 -0
- package/dist/store.js.map +1 -0
- package/dist/terminal.d.ts +60 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +293 -0
- package/dist/terminal.js.map +1 -0
- package/dist/text.d.ts +26 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +76 -0
- package/dist/text.js.map +1 -0
- package/dist/tree.d.ts +31 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +105 -0
- package/dist/tree.js.map +1 -0
- package/dist/types.d.ts +216 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useStore } from './hooks.js';
|
|
2
|
+
export declare function ScmView(): import("react").JSX.Element;
|
|
3
|
+
type Store = ReturnType<typeof useStore>;
|
|
4
|
+
declare function createBranch(store: Store, repo: string): Promise<void>;
|
|
5
|
+
export { createBranch };
|
|
6
|
+
//# sourceMappingURL=ScmView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScmView.d.ts","sourceRoot":"","sources":["../../src/components/ScmView.tsx"],"names":[],"mappings":"AASA,OAAO,EAAU,QAAQ,EAAE,MAAM,SAAS,CAAC;AAe3C,wBAAgB,OAAO,gCAoGtB;AAsXD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAoDzC,iBAAe,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQrE;AA6CD,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* 소스 제어 — 샌드박스 안의 git 을 편집기처럼 다룬다.
|
|
4
|
+
*
|
|
5
|
+
* 저장소가 어디에 있는지(GitHub·GitLab…), 누구 이름으로 커밋하는지, 어떤 로그인 정보를
|
|
6
|
+
* 가지고 있는지를 함께 보여 준다. 그 정보는 샌드박스 HOME 에 있어 에이전트의 `git push`
|
|
7
|
+
* 도 같은 것을 쓴다.
|
|
8
|
+
*/
|
|
9
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
10
|
+
import { FileIcon, Icon } from './icons.js';
|
|
11
|
+
import { useIde, useStore } from './hooks.js';
|
|
12
|
+
import { Empty, IconButton, showMenu } from './primitives.js';
|
|
13
|
+
import { PROVIDER_LABEL, STATUS_LABEL, STATUS_LETTER, changeCount, relativeTime, toWorkspacePath, } from '../git-model.js';
|
|
14
|
+
import { basename, dirname } from '../paths.js';
|
|
15
|
+
import { formatBinding, isMac } from '../keys.js';
|
|
16
|
+
export function ScmView() {
|
|
17
|
+
const store = useStore();
|
|
18
|
+
const git = useIde((s) => s.git);
|
|
19
|
+
const readonly = useIde((s) => s.readonly);
|
|
20
|
+
const [repo, setRepo] = useState(null);
|
|
21
|
+
const [accountOpen, setAccountOpen] = useState(false);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
if (!git.loaded && !git.loading)
|
|
24
|
+
void store.refreshGit();
|
|
25
|
+
}, [git.loaded, git.loading, store]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (accountOpen && !git.account)
|
|
28
|
+
void store.refreshAccount();
|
|
29
|
+
}, [accountOpen, git.account, store]);
|
|
30
|
+
const repos = git.repos;
|
|
31
|
+
const active = repo != null && repos.includes(repo) ? repo : repos.includes('') ? '' : repos[0] ?? null;
|
|
32
|
+
const status = active != null ? git.statuses[active] : undefined;
|
|
33
|
+
const moreMenu = (e) => {
|
|
34
|
+
const items = [];
|
|
35
|
+
if (status && !readonly) {
|
|
36
|
+
items.push({ id: 'pull', label: '풀', run: () => void store.gitRun({ op: 'pull', repo: active }, '풀') }, { id: 'pull-rebase', label: '풀 (리베이스)', run: () => void store.gitRun({ op: 'pull', repo: active, rebase: true }, '풀') }, { id: 'push', label: '푸시', run: () => void store.gitRun({ op: 'push', repo: active }, '푸시') }, { id: 'sync', label: '동기화', run: () => void store.gitRun({ op: 'sync', repo: active }, '동기화') }, { id: 'fetch', label: '가져오기', run: () => void store.gitRun({ op: 'fetch', repo: active }, '가져오기') }, 'separator', { id: 'checkout', label: '브랜치 전환', run: () => store.openQuickOpen('branches') }, { id: 'branch', label: '새 브랜치 만들기', run: () => void createBranch(store, active) }, 'separator', { id: 'stash', label: '스태시', run: () => void store.gitRun({ op: 'stash', repo: active, action: 'push', include_untracked: true }, '스태시') }, { id: 'stash-pop', label: '마지막 스태시 꺼내기', disabled: !status.stash_count, run: () => void store.gitRun({ op: 'stash', repo: active, action: 'pop', index: 0 }, '스태시 꺼내기') }, 'separator', { id: 'remote', label: '원격 추가', run: () => void addRemote(store, active) });
|
|
37
|
+
}
|
|
38
|
+
if (!readonly) {
|
|
39
|
+
items.push({ id: 'clone', label: '저장소 복제', run: () => void cloneRepo(store) }, { id: 'init', label: '저장소 초기화', run: () => void initRepo(store) }, 'separator');
|
|
40
|
+
}
|
|
41
|
+
items.push({ id: 'account', label: '계정과 토큰', run: () => setAccountOpen(true) });
|
|
42
|
+
showMenu(e, items);
|
|
43
|
+
};
|
|
44
|
+
return (_jsxs("div", { className: "xide-side-view xide-scm", children: [_jsxs("div", { className: "xide-side-header", children: [_jsx("span", { className: "xide-side-title", children: "\uC18C\uC2A4 \uC81C\uC5B4" }), _jsxs("span", { className: "xide-section-actions", children: [status && !readonly ? (_jsx(IconButton, { icon: "check", label: "\uCEE4\uBC0B", onClick: () => void commit(store, active, 'commit'), keybinding: "Mod+Enter" })) : null, _jsx(IconButton, { icon: "refresh", label: "\uC0C8\uB85C \uACE0\uCE68", onClick: () => void store.refreshGit() }), _jsx(IconButton, { icon: "more", label: "\uB354 \uBCF4\uAE30", onClick: moreMenu })] })] }), git.busy ? (_jsx("div", { className: "xide-progress", role: "progressbar", "aria-label": git.busy, children: _jsx("span", {}) })) : null, _jsxs("div", { className: "xide-scm-body", children: [git.error ? _jsx("div", { className: "xide-tree-note xide--error", children: git.error.message }) : null, !git.loaded ? _jsx("div", { className: "xide-tree-note", children: "\uBD88\uB7EC\uC624\uB294 \uC911" }) : null, git.loaded && !repos.length && !git.error ? (_jsxs(Empty, { icon: "scm", children: [_jsx("p", { children: "\uC774 \uC791\uC5C5 \uACF5\uAC04\uC5D0\uB294 git \uC800\uC7A5\uC18C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." }), !readonly ? (_jsxs("div", { className: "xide-empty-actions", children: [_jsx("button", { type: "button", className: "xide-btn xide--primary", onClick: () => void initRepo(store), children: "\uC800\uC7A5\uC18C \uCD08\uAE30\uD654" }), _jsx("button", { type: "button", className: "xide-btn", onClick: () => void cloneRepo(store), children: "\uC800\uC7A5\uC18C \uBCF5\uC81C" })] })) : null] })) : null, repos.length > 1 ? (_jsxs("label", { className: "xide-scm-repo-select", children: [_jsx("span", { children: "\uC800\uC7A5\uC18C" }), _jsx("select", { className: "xide-input", value: active ?? '', onChange: (e) => setRepo(e.target.value), children: repos.map((r) => (_jsxs("option", { value: r, children: [r || '(작업 공간 루트)', " ", changeCount(git.statuses[r]) ? `· ${changeCount(git.statuses[r])}` : ''] }, r))) })] })) : null, status ? _jsx(RepoPanel, { status: status, readonly: readonly }) : null, _jsx(AccountSection, { open: accountOpen, onToggle: () => setAccountOpen((v) => !v), readonly: readonly })] })] }));
|
|
45
|
+
}
|
|
46
|
+
function RepoPanel({ status, readonly }) {
|
|
47
|
+
const store = useStore();
|
|
48
|
+
const message = useIde((s) => s.git.message[status.repo] ?? '');
|
|
49
|
+
const busy = useIde((s) => s.git.busy);
|
|
50
|
+
const [collapsed, setCollapsed] = useState(new Set());
|
|
51
|
+
const ref = useRef(null);
|
|
52
|
+
const repo = status.repo;
|
|
53
|
+
const remote = status.remotes.find((r) => r.name === 'origin') ?? status.remotes[0];
|
|
54
|
+
const b = status.branch;
|
|
55
|
+
const changes = useMemo(() => [...status.changes, ...status.untracked], [status.changes, status.untracked]);
|
|
56
|
+
const nothing = !status.staged.length && !changes.length && !status.conflicts.length;
|
|
57
|
+
const section = (id, title, items, kind) => {
|
|
58
|
+
if (!items.length)
|
|
59
|
+
return null;
|
|
60
|
+
const open = !collapsed.has(id);
|
|
61
|
+
const paths = items.map((c) => c.path);
|
|
62
|
+
const untracked = items.filter((c) => c.status === 'untracked').map((c) => c.path);
|
|
63
|
+
const tracked = items.filter((c) => c.status !== 'untracked').map((c) => c.path);
|
|
64
|
+
return (_jsxs("div", { className: "xide-scm-section", children: [_jsxs("div", { className: "xide-scm-section-head", onClick: () => setCollapsed((cur) => {
|
|
65
|
+
const next = new Set(cur);
|
|
66
|
+
if (next.has(id))
|
|
67
|
+
next.delete(id);
|
|
68
|
+
else
|
|
69
|
+
next.add(id);
|
|
70
|
+
return next;
|
|
71
|
+
}), children: [_jsx(Icon, { name: open ? 'chevron-down' : 'chevron-right' }), _jsx("span", { className: "xide-scm-section-title", children: title }), _jsxs("span", { className: "xide-row-actions", onClick: (e) => e.stopPropagation(), children: [!readonly && kind === 'staged' ? (_jsx(IconButton, { icon: "minus", label: "\uBAA8\uB450 \uC2A4\uD14C\uC774\uC9C0 \uCDE8\uC18C", onClick: () => void store.gitRun({ op: 'unstage', repo, paths }, '스테이지 취소') })) : null, !readonly && kind !== 'staged' ? (_jsxs(_Fragment, { children: [kind === 'changes' ? (_jsx(IconButton, { icon: "discard", label: "\uBAA8\uB450 \uB418\uB3CC\uB9AC\uAE30", onClick: () => void discard(store, repo, tracked, untracked) })) : null, _jsx(IconButton, { icon: "plus", label: "\uBAA8\uB450 \uC2A4\uD14C\uC774\uC9C0", onClick: () => void store.gitRun({ op: 'stage', repo, paths }, '스테이지') })] })) : null] }), _jsx("span", { className: "xide-count", children: items.length })] }), open
|
|
72
|
+
? items.map((c) => (_jsx(ChangeRow, { change: c, repo: repo, staged: kind === 'staged', readonly: readonly }, `${kind}:${c.path}`)))
|
|
73
|
+
: null] }));
|
|
74
|
+
};
|
|
75
|
+
return (_jsxs("div", { className: "xide-scm-repo", children: [_jsx("div", { className: "xide-scm-remote", children: remote ? (_jsxs(_Fragment, { children: [_jsx("span", { className: `xide-provider xide--${remote.provider}`, children: PROVIDER_LABEL[remote.provider] }), _jsxs("span", { className: "xide-scm-remote-path", title: remote.url || remote.push_url, children: [remote.host, remote.path ? `/${remote.path}` : ''] }), remote.web_url && store.host.openExternal ? (_jsx(IconButton, { icon: "link-external", label: "\uC6F9\uC5D0\uC11C \uC5F4\uAE30", onClick: () => store.host.openExternal?.(remote.web_url) })) : null] })) : (_jsx("span", { className: "xide-scm-remote-none", children: "\uC6D0\uACA9 \uC800\uC7A5\uC18C \uC5C6\uC74C" })) }), _jsxs("div", { className: "xide-scm-branch", children: [_jsxs("button", { type: "button", className: "xide-link", disabled: readonly, title: "\uBE0C\uB79C\uCE58 \uC804\uD658", onClick: () => store.openQuickOpen('branches'), children: [_jsx(Icon, { name: "branch" }), " ", b.head || (b.oid ? b.oid.slice(0, 8) : '(아직 커밋 없음)')] }), b.upstream ? _jsxs("span", { className: "xide-dim", children: ["\u21C4 ", b.upstream] }) : null, status.state ? _jsx("span", { className: "xide-warn-chip", children: STATE_LABEL[status.state] }) : null] }), !readonly ? (_jsxs("div", { className: "xide-scm-commit", children: [_jsx("textarea", { ref: ref, className: "xide-input", rows: Math.min(8, Math.max(1, message.split('\n').length)), value: message, placeholder: `메시지 (${formatBinding('Mod+Enter')} 로 ${b.head || '이 브랜치'} 에 커밋)`, "aria-label": "\uCEE4\uBC0B \uBA54\uC2DC\uC9C0", onChange: (e) => store.setCommitMessage(repo, e.target.value), onKeyDown: (e) => {
|
|
76
|
+
if (e.key === 'Enter' && (isMac ? e.metaKey : e.ctrlKey)) {
|
|
77
|
+
e.preventDefault();
|
|
78
|
+
void commit(store, repo, 'commit');
|
|
79
|
+
}
|
|
80
|
+
} }), _jsxs("div", { className: "xide-split-button", children: [_jsxs("button", { type: "button", className: "xide-btn xide--primary", disabled: !!busy || (nothing && !message), onClick: () => void commit(store, repo, 'commit'), children: [_jsx(Icon, { name: "check" }), " \uCEE4\uBC0B"] }), _jsx("button", { type: "button", className: "xide-btn xide--primary xide-split-more", "aria-label": "\uCEE4\uBC0B \uBC29\uC2DD", disabled: !!busy, onClick: (e) => showMenu(e, [
|
|
81
|
+
{ id: 'commit', label: '커밋', run: () => void commit(store, repo, 'commit') },
|
|
82
|
+
{ id: 'commit-all', label: '모두 커밋', run: () => void commit(store, repo, 'all') },
|
|
83
|
+
{ id: 'amend', label: '마지막 커밋 수정', run: () => void commit(store, repo, 'amend') },
|
|
84
|
+
'separator',
|
|
85
|
+
{ id: 'commit-push', label: '커밋 후 푸시', run: () => void commit(store, repo, 'push') },
|
|
86
|
+
{ id: 'commit-sync', label: '커밋 후 동기화', run: () => void commit(store, repo, 'sync') },
|
|
87
|
+
]), children: _jsx(Icon, { name: "chevron-down" }) })] }), nothing && (b.ahead || b.behind) ? (_jsxs("button", { type: "button", className: "xide-btn xide--full", disabled: !!busy, onClick: () => void store.gitRun({ op: 'sync', repo }, '동기화'), children: [_jsx(Icon, { name: "sync" }), " \uBCC0\uACBD \uB0B4\uC6A9 \uB3D9\uAE30\uD654 ", b.behind ? `↓${b.behind}` : '', " ", b.ahead ? `↑${b.ahead}` : ''] })) : null, nothing && !b.upstream && b.head && remoteExists(status) ? (_jsxs("button", { type: "button", className: "xide-btn xide--full", disabled: !!busy, onClick: () => void store.gitRun({ op: 'push', repo }, '푸시'), children: [_jsx(Icon, { name: "cloud" }), " \uBE0C\uB79C\uCE58 \uAC8C\uC2DC"] })) : null] })) : null, section('conflicts', '병합 변경', status.conflicts, 'conflict'), section('staged', '스테이지된 변경', status.staged, 'staged'), section('changes', '변경', changes, 'changes'), nothing ? _jsx("div", { className: "xide-tree-note", children: "\uBC14\uB010 \uD30C\uC77C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4." }) : null, status.last_commit ? (_jsxs("div", { className: "xide-scm-last", title: status.last_commit.hash, children: [_jsx(Icon, { name: "commit" }), " ", status.last_commit.subject, _jsxs("span", { className: "xide-dim", children: [' ', "\u00B7 ", status.last_commit.author, " \u00B7 ", relativeTime(status.last_commit.time)] })] })) : null, status.stash_count ? _jsx(StashSection, { repo: repo, count: status.stash_count, readonly: readonly }) : null] }));
|
|
88
|
+
}
|
|
89
|
+
const STATE_LABEL = {
|
|
90
|
+
merging: '병합 중',
|
|
91
|
+
rebasing: '리베이스 중',
|
|
92
|
+
cherry_picking: '체리픽 중',
|
|
93
|
+
};
|
|
94
|
+
function remoteExists(s) {
|
|
95
|
+
return s.remotes.length > 0;
|
|
96
|
+
}
|
|
97
|
+
const STATUS_CLASS = {
|
|
98
|
+
modified: 'xide--git-modified',
|
|
99
|
+
type_changed: 'xide--git-modified',
|
|
100
|
+
added: 'xide--git-added',
|
|
101
|
+
untracked: 'xide--git-untracked',
|
|
102
|
+
deleted: 'xide--git-deleted',
|
|
103
|
+
renamed: 'xide--git-renamed',
|
|
104
|
+
copied: 'xide--git-added',
|
|
105
|
+
unmerged: 'xide--git-conflict',
|
|
106
|
+
};
|
|
107
|
+
function ChangeRow({ change, repo, staged, readonly }) {
|
|
108
|
+
const store = useStore();
|
|
109
|
+
const wsPath = toWorkspacePath(repo, change.path);
|
|
110
|
+
const name = basename(change.path.replace(/\/$/, ''));
|
|
111
|
+
const open = (preview) => {
|
|
112
|
+
if (change.status === 'unmerged') {
|
|
113
|
+
void store.openFile(wsPath, { preview });
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
store.openDiff({ repo, path: change.path, staged, status: change.status }, { preview });
|
|
117
|
+
};
|
|
118
|
+
const tracked = change.status !== 'untracked';
|
|
119
|
+
const menu = [
|
|
120
|
+
{ id: 'diff', label: '변경 내용 보기', run: () => open(false) },
|
|
121
|
+
{
|
|
122
|
+
id: 'file',
|
|
123
|
+
label: '파일 열기',
|
|
124
|
+
disabled: change.status === 'deleted' && !staged,
|
|
125
|
+
run: () => void store.openFile(wsPath, { preview: false }),
|
|
126
|
+
},
|
|
127
|
+
'separator',
|
|
128
|
+
];
|
|
129
|
+
if (!readonly) {
|
|
130
|
+
if (staged)
|
|
131
|
+
menu.push({ id: 'unstage', label: '스테이지 취소', run: () => void store.gitRun({ op: 'unstage', repo, paths: [change.path] }, '스테이지 취소') });
|
|
132
|
+
else {
|
|
133
|
+
menu.push({ id: 'stage', label: '스테이지', run: () => void store.gitRun({ op: 'stage', repo, paths: [change.path] }, '스테이지') });
|
|
134
|
+
menu.push({
|
|
135
|
+
id: 'discard',
|
|
136
|
+
label: '변경 되돌리기',
|
|
137
|
+
danger: true,
|
|
138
|
+
run: () => void discard(store, repo, tracked ? [change.path] : [], tracked ? [] : [change.path]),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
menu.push('separator');
|
|
142
|
+
}
|
|
143
|
+
menu.push({ id: 'reveal', label: '탐색기에서 보기', run: () => {
|
|
144
|
+
store.reveal(wsPath);
|
|
145
|
+
store.showSideView('explorer');
|
|
146
|
+
} });
|
|
147
|
+
return (_jsxs("div", { className: `xide-scm-change ${STATUS_CLASS[change.status] ?? ''}`, title: `${wsPath} · ${STATUS_LABEL[change.status]}${change.orig ? ` (${change.orig} 에서)` : ''}`, onClick: () => open(true), onDoubleClick: () => open(false), onContextMenu: (e) => showMenu(e, menu), children: [_jsx(FileIcon, { name: name }), _jsx("span", { className: `xide-scm-change-name${change.status === 'deleted' ? ' xide--strike' : ''}`, children: name }), _jsx("span", { className: "xide-scm-change-dir", children: dirname(change.path) }), _jsxs("span", { className: "xide-row-actions", onClick: (e) => e.stopPropagation(), children: [change.status !== 'deleted' || staged ? (_jsx(IconButton, { icon: "go-to-file", label: "\uD30C\uC77C \uC5F4\uAE30", onClick: () => void store.openFile(wsPath, { preview: false }) })) : null, !readonly && !staged ? (_jsx(IconButton, { icon: "discard", label: "\uBCC0\uACBD \uB418\uB3CC\uB9AC\uAE30", onClick: () => void discard(store, repo, tracked ? [change.path] : [], tracked ? [] : [change.path]) })) : null, !readonly ? (staged ? (_jsx(IconButton, { icon: "minus", label: "\uC2A4\uD14C\uC774\uC9C0 \uCDE8\uC18C", onClick: () => void store.gitRun({ op: 'unstage', repo, paths: [change.path] }, '스테이지 취소') })) : (_jsx(IconButton, { icon: "plus", label: "\uC2A4\uD14C\uC774\uC9C0", onClick: () => void store.gitRun({ op: 'stage', repo, paths: [change.path] }, '스테이지') }))) : null] }), _jsx("span", { className: "xide-scm-letter", children: STATUS_LETTER[change.status] })] }));
|
|
148
|
+
}
|
|
149
|
+
function StashSection({ repo, count, readonly }) {
|
|
150
|
+
const store = useStore();
|
|
151
|
+
const [open, setOpen] = useState(false);
|
|
152
|
+
const [items, setItems] = useState(null);
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
if (!open)
|
|
155
|
+
return;
|
|
156
|
+
let alive = true;
|
|
157
|
+
void store.host
|
|
158
|
+
.git({ op: 'stash', repo, action: 'list' })
|
|
159
|
+
.then((r) => alive && setItems(r.stashes), () => alive && setItems([]));
|
|
160
|
+
return () => {
|
|
161
|
+
alive = false;
|
|
162
|
+
};
|
|
163
|
+
}, [open, count, repo, store]);
|
|
164
|
+
return (_jsxs("div", { className: "xide-scm-section", children: [_jsxs("div", { className: "xide-scm-section-head", onClick: () => setOpen((v) => !v), children: [_jsx(Icon, { name: open ? 'chevron-down' : 'chevron-right' }), _jsx("span", { className: "xide-scm-section-title", children: "\uC2A4\uD0DC\uC2DC" }), _jsx("span", { className: "xide-count", children: count })] }), open
|
|
165
|
+
? (items ?? []).map((s, i) => (_jsxs("div", { className: "xide-scm-change", title: s.ref, children: [_jsx(Icon, { name: "stash" }), _jsx("span", { className: "xide-scm-change-name", children: s.subject }), _jsx("span", { className: "xide-scm-change-dir", children: relativeTime(s.time) }), !readonly ? (_jsxs("span", { className: "xide-row-actions", children: [_jsx(IconButton, { icon: "arrow-up", label: "\uAEBC\uB0B4\uAE30", onClick: () => void store.gitRun({ op: 'stash', repo, action: 'pop', index: i }, '스태시 꺼내기') }), _jsx(IconButton, { icon: "copy", label: "\uC801\uC6A9(\uB0A8\uACA8 \uB450\uAE30)", onClick: () => void store.gitRun({ op: 'stash', repo, action: 'apply', index: i }, '스태시 적용') }), _jsx(IconButton, { icon: "trash", label: "\uBC84\uB9AC\uAE30", onClick: async () => {
|
|
166
|
+
if (await store.confirm('이 스태시를 버릴까요?', '되돌릴 수 없습니다.', '버리기', true)) {
|
|
167
|
+
void store.gitRun({ op: 'stash', repo, action: 'drop', index: i }, '스태시 버리기');
|
|
168
|
+
}
|
|
169
|
+
} })] })) : null] }, s.ref)))
|
|
170
|
+
: null] }));
|
|
171
|
+
}
|
|
172
|
+
function AccountSection({ open, onToggle, readonly }) {
|
|
173
|
+
const store = useStore();
|
|
174
|
+
const account = useIde((s) => s.git.account);
|
|
175
|
+
return (_jsxs("div", { className: "xide-scm-section xide-scm-account", children: [_jsxs("div", { className: "xide-scm-section-head", onClick: onToggle, children: [_jsx(Icon, { name: open ? 'chevron-down' : 'chevron-right' }), _jsx("span", { className: "xide-scm-section-title", children: "\uACC4\uC815\uACFC \uD1A0\uD070" })] }), open ? (_jsxs("div", { className: "xide-scm-account-body", children: [_jsxs("div", { className: "xide-kv", children: [_jsx("span", { className: "xide-dim", children: "\uCEE4\uBC0B \uC774\uB984" }), _jsx("span", { children: account?.identity.name ? `${account.identity.name} <${account.identity.email}>` : '설정되지 않음' }), !readonly ? (_jsx("button", { type: "button", className: "xide-link", onClick: () => void store.promptIdentity(), children: "\uBCC0\uACBD" })) : null] }), _jsx("div", { className: "xide-dim xide-small", children: "\uC800\uC7A5\uB41C \uB85C\uADF8\uC778 \uC815\uBCF4" }), account?.credentials.stored.length ? (account.credentials.stored.map((c) => (_jsxs("div", { className: "xide-kv", children: [_jsx("span", { className: `xide-provider xide--${c.provider}`, children: PROVIDER_LABEL[c.provider] }), _jsxs("span", { children: [c.host, " \u00B7 ", c.username || '(이름 없음)'] }), !readonly ? (_jsx(IconButton, { icon: "trash", label: "\uD1A0\uD070 \uC9C0\uC6B0\uAE30", onClick: () => void store.removeCredential(c.host, c.username) })) : null] }, `${c.host}:${c.username}`)))) : (_jsx("div", { className: "xide-small", children: "\uC5C6\uC74C. \uD478\uC2DC\uD558\uB824\uBA74 \uD1A0\uD070\uC744 \uB4F1\uB85D\uD558\uC138\uC694." })), !readonly ? (_jsxs("button", { type: "button", className: "xide-btn", onClick: () => void store.promptCredential(), children: [_jsx(Icon, { name: "key" }), " \uD1A0\uD070 \uB4F1\uB85D"] })) : null] })) : null] }));
|
|
176
|
+
}
|
|
177
|
+
async function commit(store, repo, mode) {
|
|
178
|
+
const st = store.getState().git.statuses[repo];
|
|
179
|
+
if (!st)
|
|
180
|
+
return;
|
|
181
|
+
const message = (store.getState().git.message[repo] ?? '').trim();
|
|
182
|
+
let all = mode === 'all';
|
|
183
|
+
const hasStaged = st.staged.length > 0;
|
|
184
|
+
const hasChanges = st.changes.length + st.untracked.length > 0;
|
|
185
|
+
if (mode !== 'amend' && !message) {
|
|
186
|
+
store.notify('warning', '커밋 메시지를 입력하세요');
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (mode !== 'amend' && !hasStaged && !all) {
|
|
190
|
+
if (!hasChanges) {
|
|
191
|
+
store.notify('info', '커밋할 변경이 없습니다');
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const ok = await store.confirm('스테이지된 변경이 없습니다', '모든 변경을 스테이지하고 커밋할까요?', '모두 커밋');
|
|
195
|
+
if (!ok)
|
|
196
|
+
return;
|
|
197
|
+
all = true;
|
|
198
|
+
}
|
|
199
|
+
// 저장하지 않은 편집기 내용은 커밋에 들어가지 않는다 — 먼저 저장한다(편집기와 같은 순서).
|
|
200
|
+
const dirty = Object.values(store.getState().docs).filter((d) => d.dirty);
|
|
201
|
+
if (dirty.length) {
|
|
202
|
+
const save = await store.confirm('저장하지 않은 파일이 있습니다', '커밋 전에 모두 저장할까요?', '저장하고 커밋');
|
|
203
|
+
if (!save)
|
|
204
|
+
return;
|
|
205
|
+
await store.saveAll();
|
|
206
|
+
}
|
|
207
|
+
const out = await store.gitRun({ op: 'commit', repo, message, all, amend: mode === 'amend' }, '커밋');
|
|
208
|
+
if (!out)
|
|
209
|
+
return;
|
|
210
|
+
store.setCommitMessage(repo, '');
|
|
211
|
+
if (mode === 'push')
|
|
212
|
+
await store.gitRun({ op: 'push', repo }, '푸시');
|
|
213
|
+
if (mode === 'sync')
|
|
214
|
+
await store.gitRun({ op: 'sync', repo }, '동기화');
|
|
215
|
+
}
|
|
216
|
+
async function discard(store, repo, tracked, untracked) {
|
|
217
|
+
const n = tracked.length + untracked.length;
|
|
218
|
+
if (!n)
|
|
219
|
+
return;
|
|
220
|
+
const label = n === 1 ? basename([...tracked, ...untracked][0]) : `${n}개 파일`;
|
|
221
|
+
const msg = untracked.length
|
|
222
|
+
? '추적하지 않는 파일은 지워집니다. 되돌릴 수 없습니다.'
|
|
223
|
+
: '변경 내용이 사라집니다. 되돌릴 수 없습니다.';
|
|
224
|
+
const ok = await store.confirm(`${label} 의 변경을 되돌릴까요?`, msg, '되돌리기', true);
|
|
225
|
+
if (!ok)
|
|
226
|
+
return;
|
|
227
|
+
await store.gitRun({ op: 'discard', repo, paths: tracked, untracked }, '되돌리기');
|
|
228
|
+
}
|
|
229
|
+
async function createBranch(store, repo) {
|
|
230
|
+
const name = await store.prompt('새 브랜치 이름', {
|
|
231
|
+
placeholder: 'feature/my-change',
|
|
232
|
+
ok: '만들기',
|
|
233
|
+
validate: (v) => (/^[\w./-]+$/.test(v.trim()) && !v.includes('..') ? null : '브랜치 이름에 쓸 수 없는 문자가 있습니다'),
|
|
234
|
+
});
|
|
235
|
+
if (!name)
|
|
236
|
+
return;
|
|
237
|
+
await store.gitRun({ op: 'checkout', repo, ref: name.trim(), create: true }, '브랜치 만들기');
|
|
238
|
+
}
|
|
239
|
+
async function addRemote(store, repo) {
|
|
240
|
+
const r = await store.ask({
|
|
241
|
+
title: '원격 추가',
|
|
242
|
+
fields: [
|
|
243
|
+
{ id: 'name', label: '이름', value: 'origin' },
|
|
244
|
+
{ id: 'url', label: '주소', value: '', placeholder: 'https://github.com/owner/repo.git' },
|
|
245
|
+
],
|
|
246
|
+
buttons: [
|
|
247
|
+
{ id: 'ok', label: '추가', primary: true },
|
|
248
|
+
{ id: 'cancel', label: '취소' },
|
|
249
|
+
],
|
|
250
|
+
});
|
|
251
|
+
if (r.button !== 'ok')
|
|
252
|
+
return;
|
|
253
|
+
await store.gitRun({ op: 'remote_add', repo, name: r.fields.name, url: r.fields.url }, '원격 추가');
|
|
254
|
+
}
|
|
255
|
+
async function cloneRepo(store) {
|
|
256
|
+
const r = await store.ask({
|
|
257
|
+
title: '저장소 복제',
|
|
258
|
+
message: '작업 공간 안의 새 폴더로 복제합니다. 비공개 저장소는 먼저 토큰을 등록하세요.',
|
|
259
|
+
fields: [
|
|
260
|
+
{ id: 'url', label: '주소', value: '', placeholder: 'https://github.com/owner/repo.git' },
|
|
261
|
+
{ id: 'dir', label: '폴더 (비우면 저장소 이름)', value: '' },
|
|
262
|
+
],
|
|
263
|
+
buttons: [
|
|
264
|
+
{ id: 'ok', label: '복제', primary: true },
|
|
265
|
+
{ id: 'cancel', label: '취소' },
|
|
266
|
+
],
|
|
267
|
+
});
|
|
268
|
+
if (r.button !== 'ok' || !r.fields.url.trim())
|
|
269
|
+
return;
|
|
270
|
+
const out = await store.gitRun({ op: 'clone', url: r.fields.url.trim(), dir: r.fields.dir.trim() || undefined }, '복제');
|
|
271
|
+
if (out) {
|
|
272
|
+
store.notify('success', `${out.repo} 에 복제했습니다`);
|
|
273
|
+
store.reveal(out.repo);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async function initRepo(store) {
|
|
277
|
+
const ok = await store.confirm('작업 공간을 git 저장소로 만들까요?', '작업 공간 루트에 저장소를 만듭니다(기본 브랜치 main).', '초기화');
|
|
278
|
+
if (!ok)
|
|
279
|
+
return;
|
|
280
|
+
await store.gitRun({ op: 'init', repo: '' }, '초기화');
|
|
281
|
+
}
|
|
282
|
+
export { createBranch };
|
|
283
|
+
//# sourceMappingURL=ScmView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScmView.js","sourceRoot":"","sources":["../../src/components/ScmView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchView.d.ts","sourceRoot":"","sources":["../../src/components/SearchView.tsx"],"names":[],"mappings":"AAaA,wBAAgB,UAAU,gCAuPzB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* 찾기 — 에이전트 샌드박스 안에서 찾는다(저장하지 않은 편집기 내용은 저장해야 찾힌다).
|
|
4
|
+
*
|
|
5
|
+
* 편집기와 같은 모양: 대소문자·단어 단위·정규식 토글, 바꾸기(펼침), 포함·제외할 파일.
|
|
6
|
+
* 치는 대로 찾고(0.35초 쉼), 결과를 누르면 그 자리를 골라 연다.
|
|
7
|
+
*/
|
|
8
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
9
|
+
import { FileIcon, Icon } from './icons.js';
|
|
10
|
+
import { useIde, useStore } from './hooks.js';
|
|
11
|
+
import { IconButton, showMenu } from './primitives.js';
|
|
12
|
+
import { basename, dirname } from '../paths.js';
|
|
13
|
+
export function SearchView() {
|
|
14
|
+
const store = useStore();
|
|
15
|
+
const s = useIde((st) => st.search);
|
|
16
|
+
const readonly = useIde((st) => st.readonly);
|
|
17
|
+
const inputRef = useRef(null);
|
|
18
|
+
const [dismissed, setDismissed] = useState(new Set());
|
|
19
|
+
const timer = useRef(null);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
inputRef.current?.focus();
|
|
22
|
+
inputRef.current?.select();
|
|
23
|
+
}, []);
|
|
24
|
+
const schedule = (delay = 350) => {
|
|
25
|
+
if (timer.current)
|
|
26
|
+
clearTimeout(timer.current);
|
|
27
|
+
timer.current = setTimeout(() => {
|
|
28
|
+
setDismissed(new Set());
|
|
29
|
+
void store.runSearch();
|
|
30
|
+
}, delay);
|
|
31
|
+
};
|
|
32
|
+
useEffect(() => () => {
|
|
33
|
+
if (timer.current)
|
|
34
|
+
clearTimeout(timer.current);
|
|
35
|
+
}, []);
|
|
36
|
+
const set = (patch, rerun = true) => {
|
|
37
|
+
store.setSearch(patch);
|
|
38
|
+
if (rerun)
|
|
39
|
+
schedule();
|
|
40
|
+
};
|
|
41
|
+
const files = useMemo(() => (s.result?.files ?? []).filter((f) => !dismissed.has(f.path)), [s.result, dismissed]);
|
|
42
|
+
const total = files.reduce((n, f) => n + f.matches.length, 0);
|
|
43
|
+
const toggle = (path) => {
|
|
44
|
+
const next = new Set(s.collapsed);
|
|
45
|
+
if (next.has(path))
|
|
46
|
+
next.delete(path);
|
|
47
|
+
else
|
|
48
|
+
next.add(path);
|
|
49
|
+
store.setSearch({ collapsed: next });
|
|
50
|
+
};
|
|
51
|
+
const openMatch = (path, m, preview = true) => void store.openFile(path, { preview, line: m.line, col: m.col, length: m.len });
|
|
52
|
+
return (_jsxs("div", { className: "xide-side-view xide-search", children: [_jsxs("div", { className: "xide-side-header", children: [_jsx("span", { className: "xide-side-title", children: "\uCC3E\uAE30" }), _jsxs("span", { className: "xide-section-actions", children: [_jsx(IconButton, { icon: "refresh", label: "\uB2E4\uC2DC \uCC3E\uAE30", onClick: () => schedule(0), disabled: !s.query }), _jsx(IconButton, { icon: "close", label: "\uACB0\uACFC \uC9C0\uC6B0\uAE30", onClick: () => {
|
|
53
|
+
store.setSearch({ query: '', result: null, error: null });
|
|
54
|
+
setDismissed(new Set());
|
|
55
|
+
} }), _jsx(IconButton, { icon: "collapse", label: "\uBAA8\uB450 \uC811\uAE30", onClick: () => store.setSearch({ collapsed: new Set(files.map((f) => f.path)) }) })] })] }), _jsxs("div", { className: "xide-search-form", children: [_jsxs("div", { className: "xide-search-row", children: [!readonly ? (_jsx("button", { type: "button", className: "xide-search-toggle-replace", "aria-label": s.showReplace ? '바꾸기 닫기' : '바꾸기 열기', "aria-expanded": s.showReplace, title: "\uBC14\uAFB8\uAE30", onClick: () => store.setSearch({ showReplace: !s.showReplace }), children: _jsx(Icon, { name: s.showReplace ? 'chevron-down' : 'chevron-right' }) })) : null, _jsxs("div", { className: "xide-search-fields", children: [_jsxs("div", { className: "xide-search-box", children: [_jsx("textarea", { ref: inputRef, className: "xide-input", rows: 1, value: s.query, placeholder: "\uCC3E\uAE30", "aria-label": "\uCC3E\uAE30", spellCheck: false, onChange: (e) => set({ query: e.target.value }), onKeyDown: (e) => {
|
|
56
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
57
|
+
e.preventDefault();
|
|
58
|
+
schedule(0);
|
|
59
|
+
}
|
|
60
|
+
} }), _jsxs("span", { className: "xide-search-flags", children: [_jsx(FlagButton, { icon: "case", label: "\uB300\uC18C\uBB38\uC790 \uAD6C\uBD84", on: s.caseSensitive, onClick: () => set({ caseSensitive: !s.caseSensitive }) }), _jsx(FlagButton, { icon: "word", label: "\uB2E8\uC5B4 \uB2E8\uC704\uB85C", on: s.word, onClick: () => set({ word: !s.word }) }), _jsx(FlagButton, { icon: "regex", label: "\uC815\uADDC\uC2DD \uC0AC\uC6A9", on: s.regex, onClick: () => set({ regex: !s.regex }) })] })] }), s.showReplace && !readonly ? (_jsxs("div", { className: "xide-search-box", children: [_jsx("textarea", { className: "xide-input", rows: 1, value: s.replace, placeholder: "\uBC14\uAFB8\uAE30", "aria-label": "\uBC14\uAFB8\uAE30", spellCheck: false, onChange: (e) => store.setSearch({ replace: e.target.value }), onKeyDown: (e) => {
|
|
61
|
+
if (e.key === 'Enter' && (e.ctrlKey || e.metaKey) && e.altKey) {
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
void store.replaceInFiles(files.map((f) => f.path));
|
|
64
|
+
}
|
|
65
|
+
else if (e.key === 'Enter' && !e.shiftKey)
|
|
66
|
+
e.preventDefault();
|
|
67
|
+
} }), _jsx("span", { className: "xide-search-flags", children: _jsx(FlagButton, { icon: "replace-all", label: "\uBAA8\uB450 \uBC14\uAFB8\uAE30", on: false, disabled: !files.length, onClick: () => void store.replaceInFiles(files.map((f) => f.path)) }) })] })) : null] })] }), _jsx("div", { className: "xide-search-details-toggle", children: _jsx(IconButton, { icon: "more", label: s.showDetails ? '포함·제외 닫기' : '포함·제외할 파일', active: s.showDetails, onClick: () => store.setSearch({ showDetails: !s.showDetails }) }) }), s.showDetails ? (_jsxs("div", { className: "xide-search-details", children: [_jsxs("label", { children: [_jsx("span", { children: "\uD3EC\uD568\uD560 \uD30C\uC77C" }), _jsx("input", { className: "xide-input", value: s.include, placeholder: "\uC608: src, *.ts", spellCheck: false, onChange: (e) => set({ include: e.target.value }) })] }), _jsxs("label", { children: [_jsx("span", { children: "\uC81C\uC678\uD560 \uD30C\uC77C" }), _jsx("input", { className: "xide-input", value: s.exclude, placeholder: "\uC608: dist, *.min.js", spellCheck: false, onChange: (e) => set({ exclude: e.target.value }) })] })] })) : null] }), _jsxs("div", { className: "xide-search-summary", "aria-live": "polite", children: [s.running ? '찾는 중' : null, !s.running && s.error ? _jsx("span", { className: "xide--error", children: s.error }) : null, !s.running && !s.error && s.result ? (total ? (_jsxs(_Fragment, { children: [files.length, "\uAC1C \uD30C\uC77C\uC5D0\uC11C ", total, "\uAC1C \uACB0\uACFC", s.result.truncated ? _jsx("span", { className: "xide--warn", children: " \u00B7 \uACB0\uACFC\uAC00 \uB9CE\uC544 \uC77C\uBD80\uB9CC \uBCF4\uC785\uB2C8\uB2E4. \uC870\uAC74\uC744 \uC881\uD600 \uBCF4\uC138\uC694." }) : null] })) : ('결과가 없습니다')) : null] }), _jsx("div", { className: "xide-search-results", role: "tree", "aria-label": "\uCC3E\uAE30 \uACB0\uACFC", children: files.map((f) => {
|
|
68
|
+
const open = !s.collapsed.has(f.path);
|
|
69
|
+
return (_jsxs("div", { className: "xide-search-file", role: "treeitem", "aria-expanded": open, children: [_jsxs("div", { className: "xide-search-file-row", title: f.path, onClick: () => toggle(f.path), onContextMenu: (e) => showMenu(e, [
|
|
70
|
+
{ id: 'open', label: '파일 열기', run: () => void store.openFile(f.path, { preview: false }) },
|
|
71
|
+
...(s.showReplace && !readonly
|
|
72
|
+
? [{ id: 'replace', label: '이 파일에서 모두 바꾸기', run: () => void store.replaceInFiles([f.path]) }]
|
|
73
|
+
: []),
|
|
74
|
+
{ id: 'dismiss', label: '결과에서 빼기', run: () => setDismissed((d) => new Set([...d, f.path])) },
|
|
75
|
+
]), children: [_jsx(Icon, { name: open ? 'chevron-down' : 'chevron-right' }), _jsx(FileIcon, { name: basename(f.path) }), _jsx("span", { className: "xide-search-file-name", children: basename(f.path) }), _jsx("span", { className: "xide-search-file-dir", children: dirname(f.path) }), _jsx("span", { className: "xide-search-count", children: f.matches.length }), _jsxs("span", { className: "xide-row-actions", children: [s.showReplace && !readonly ? (_jsx(IconButton, { icon: "replace-all", label: "\uC774 \uD30C\uC77C\uC5D0\uC11C \uBAA8\uB450 \uBC14\uAFB8\uAE30", onClick: (e) => {
|
|
76
|
+
e.stopPropagation();
|
|
77
|
+
void store.replaceInFiles([f.path]);
|
|
78
|
+
} })) : null, _jsx(IconButton, { icon: "close", label: "\uACB0\uACFC\uC5D0\uC11C \uBE7C\uAE30", onClick: (e) => {
|
|
79
|
+
e.stopPropagation();
|
|
80
|
+
setDismissed((d) => new Set([...d, f.path]));
|
|
81
|
+
} })] })] }), open
|
|
82
|
+
? f.matches.map((m, i) => (_jsx("div", { className: "xide-search-match", role: "treeitem", tabIndex: -1, title: `${m.line}번째 줄`, onClick: () => openMatch(f.path, m), onDoubleClick: () => openMatch(f.path, m, false), children: _jsx(MatchPreview, { m: m, replace: s.showReplace && !readonly ? s.replace : null }) }, `${m.line}:${m.col}:${i}`)))
|
|
83
|
+
: null] }, f.path));
|
|
84
|
+
}) })] }));
|
|
85
|
+
}
|
|
86
|
+
function FlagButton({ icon, label, on, disabled, onClick, }) {
|
|
87
|
+
return (_jsx("button", { type: "button", className: `xide-flag${on ? ' xide--on' : ''}`, title: label, "aria-label": label, "aria-pressed": on, disabled: disabled, onClick: onClick, children: _jsx(Icon, { name: icon }) }));
|
|
88
|
+
}
|
|
89
|
+
/** 미리보기 한 줄 — UTF-16 위치로 일치를 자른다(서버가 그 단위로 준다). */
|
|
90
|
+
function MatchPreview({ m, replace }) {
|
|
91
|
+
const text = m.preview;
|
|
92
|
+
const before = text.slice(0, m.at);
|
|
93
|
+
const hit = text.slice(m.at, m.at + m.len);
|
|
94
|
+
const after = text.slice(m.at + m.len);
|
|
95
|
+
return (_jsxs("span", { className: "xide-search-preview", children: [_jsx("span", { children: before.trimStart() }), replace != null ? (_jsxs(_Fragment, { children: [_jsx("del", { className: "xide-search-hit", children: hit }), _jsx("ins", { className: "xide-search-ins", children: replace })] })) : (_jsx("mark", { className: "xide-search-hit", children: hit })), _jsx("span", { children: after })] }));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=SearchView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchView.js","sourceRoot":"","sources":["../../src/components/SearchView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAMA,wBAAgB,SAAS,gCA+GxB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/** 상태 표시줄 — 왼쪽은 브랜치·동기화, 오른쪽은 커서·들여쓰기·인코딩·줄 끝·언어. */
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { Icon } from './icons.js';
|
|
5
|
+
import { useIde, useStore } from './hooks.js';
|
|
6
|
+
import { basename } from '../paths.js';
|
|
7
|
+
export function StatusBar() {
|
|
8
|
+
const store = useStore();
|
|
9
|
+
const readonly = useIde((s) => s.readonly);
|
|
10
|
+
const sessionError = useIde((s) => s.sessionError);
|
|
11
|
+
const cursor = useIde((s) => s.cursor);
|
|
12
|
+
const notice = useIde((s) => s.notice);
|
|
13
|
+
const busy = useIde((s) => s.git.busy);
|
|
14
|
+
const statuses = useIde((s) => s.git.statuses);
|
|
15
|
+
const repos = useIde((s) => s.git.repos);
|
|
16
|
+
const active = useIde((s) => {
|
|
17
|
+
const g = s.groups.find((x) => x.id === s.activeGroup);
|
|
18
|
+
return g?.tabs.find((t) => t.id === g.activeId) ?? null;
|
|
19
|
+
});
|
|
20
|
+
const doc = useIde((s) => (active ? s.docs[active.path] : undefined));
|
|
21
|
+
const [visibleNotice, setVisibleNotice] = useState(notice);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setVisibleNotice(notice);
|
|
24
|
+
if (!notice)
|
|
25
|
+
return;
|
|
26
|
+
const t = setTimeout(() => setVisibleNotice(null), notice.kind === 'error' ? 8000 : 3500);
|
|
27
|
+
return () => clearTimeout(t);
|
|
28
|
+
}, [notice]);
|
|
29
|
+
const repo = repos.includes('') ? '' : repos[0];
|
|
30
|
+
const st = repo != null ? statuses[repo] : undefined;
|
|
31
|
+
const model = active && doc?.status === 'ready' ? store.getModel(active.path) : null;
|
|
32
|
+
const indent = model?.getOptions();
|
|
33
|
+
const language = model?.getLanguageId();
|
|
34
|
+
return (_jsxs("footer", { className: `xide-status${readonly ? ' xide--readonly' : ''}`, role: "status", children: [_jsxs("div", { className: "xide-status-left", children: [st ? (_jsxs("button", { type: "button", className: "xide-status-item", title: "\uBE0C\uB79C\uCE58 \uC804\uD658", disabled: readonly, onClick: () => store.openQuickOpen('branches'), children: [_jsx(Icon, { name: "branch", size: 14 }), st.branch.head || st.branch.oid.slice(0, 8) || '커밋 없음', doc && Object.values(store.getState().docs).some((d) => d.dirty) ? '*' : ''] })) : null, st && (st.branch.ahead || st.branch.behind || st.branch.upstream) ? (_jsxs("button", { type: "button", className: "xide-status-item", title: "\uBCC0\uACBD \uB0B4\uC6A9 \uB3D9\uAE30\uD654(\uD480 \uD6C4 \uD478\uC2DC)", disabled: readonly || !!busy, onClick: () => void store.gitRun({ op: 'sync', repo }, '동기화'), children: [_jsx(Icon, { name: "sync", size: 14, className: `xide-icon${busy ? ' xide--spin' : ''}` }), st.branch.behind ? ` ${st.branch.behind}↓` : '', st.branch.ahead ? ` ${st.branch.ahead}↑` : ''] })) : null, busy ? _jsxs("span", { className: "xide-status-item", children: [busy, " \uC911"] }) : null, readonly ? (_jsxs("span", { className: "xide-status-item", title: "\uACE0\uC815\uB41C \uC5D0\uC774\uC804\uD2B8\uB294 \uBCF4\uAE30\uB9CC \uD569\uB2C8\uB2E4", children: [_jsx(Icon, { name: "lock", size: 14 }), " \uC77D\uAE30 \uC804\uC6A9"] })) : null, sessionError ? (_jsxs("span", { className: "xide-status-item xide--error", title: sessionError, children: [_jsx(Icon, { name: "error", size: 14 }), " \uC0CC\uB4DC\uBC15\uC2A4 \uC5F0\uACB0 \uC548 \uB428"] })) : null, visibleNotice ? (_jsxs("span", { className: `xide-status-item xide--notice xide--${visibleNotice.kind}`, title: visibleNotice.message, children: [_jsx(Icon, { name: visibleNotice.kind === 'error' ? 'error' : visibleNotice.kind === 'warning' ? 'warning' : visibleNotice.kind === 'success' ? 'check' : 'info', size: 14 }), visibleNotice.message] })) : null] }), _jsxs("div", { className: "xide-status-right", children: [cursor && model ? (_jsxs("button", { type: "button", className: "xide-status-item", title: "\uC904\uB85C \uC774\uB3D9", onClick: () => store.openQuickOpen('line'), children: ["\uC904 ", cursor.line, ", \uC5F4 ", cursor.col, cursor.selected ? ` (${cursor.selected}자 선택)` : ''] })) : null, indent ? (_jsx("span", { className: "xide-status-item", title: "\uB4E4\uC5EC\uC4F0\uAE30", children: indent.insertSpaces ? `공백: ${indent.tabSize}` : `탭 크기: ${indent.tabSize}` })) : null, doc?.status === 'ready' ? _jsx("span", { className: "xide-status-item", children: doc.bom ? 'UTF-8 BOM' : 'UTF-8' }) : null, doc?.status === 'ready' && model ? (_jsx("button", { type: "button", className: "xide-status-item", title: "\uC904 \uB05D \uBC14\uAFB8\uAE30", disabled: readonly, onClick: () => {
|
|
35
|
+
const monaco = store.getMonaco();
|
|
36
|
+
if (!monaco || !active)
|
|
37
|
+
return;
|
|
38
|
+
const next = doc.eol === 'LF' ? 'CRLF' : 'LF';
|
|
39
|
+
model.pushEOL(next === 'CRLF' ? monaco.editor.EndOfLineSequence.CRLF : monaco.editor.EndOfLineSequence.LF);
|
|
40
|
+
store.setDocEol(active.path, next);
|
|
41
|
+
}, children: doc.eol })) : null, language ? _jsx("span", { className: "xide-status-item", children: languageLabel(language) }) : null, active && active.kind === 'image' ? _jsx("span", { className: "xide-status-item", children: basename(active.path) }) : null] })] }));
|
|
42
|
+
}
|
|
43
|
+
const LANGUAGE_LABEL = {
|
|
44
|
+
typescript: 'TypeScript',
|
|
45
|
+
javascript: 'JavaScript',
|
|
46
|
+
python: 'Python',
|
|
47
|
+
json: 'JSON',
|
|
48
|
+
markdown: 'Markdown',
|
|
49
|
+
html: 'HTML',
|
|
50
|
+
css: 'CSS',
|
|
51
|
+
scss: 'SCSS',
|
|
52
|
+
shell: 'Shell Script',
|
|
53
|
+
yaml: 'YAML',
|
|
54
|
+
plaintext: '일반 텍스트',
|
|
55
|
+
go: 'Go',
|
|
56
|
+
rust: 'Rust',
|
|
57
|
+
java: 'Java',
|
|
58
|
+
sql: 'SQL',
|
|
59
|
+
xml: 'XML',
|
|
60
|
+
dockerfile: 'Dockerfile',
|
|
61
|
+
cpp: 'C++',
|
|
62
|
+
c: 'C',
|
|
63
|
+
csharp: 'C#',
|
|
64
|
+
ruby: 'Ruby',
|
|
65
|
+
php: 'PHP',
|
|
66
|
+
kotlin: 'Kotlin',
|
|
67
|
+
};
|
|
68
|
+
function languageLabel(id) {
|
|
69
|
+
return LANGUAGE_LABEL[id] ?? id;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=StatusBar.js.map
|