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.
Files changed (91) hide show
  1. package/README.md +42 -0
  2. package/dist/components/ActivityBar.d.ts +21 -0
  3. package/dist/components/ActivityBar.d.ts.map +1 -0
  4. package/dist/components/ActivityBar.js +14 -0
  5. package/dist/components/ActivityBar.js.map +1 -0
  6. package/dist/components/EditorArea.d.ts +5 -0
  7. package/dist/components/EditorArea.d.ts.map +1 -0
  8. package/dist/components/EditorArea.js +468 -0
  9. package/dist/components/EditorArea.js.map +1 -0
  10. package/dist/components/Explorer.d.ts +2 -0
  11. package/dist/components/Explorer.d.ts.map +1 -0
  12. package/dist/components/Explorer.js +349 -0
  13. package/dist/components/Explorer.js.map +1 -0
  14. package/dist/components/IdeView.d.ts +24 -0
  15. package/dist/components/IdeView.d.ts.map +1 -0
  16. package/dist/components/IdeView.js +359 -0
  17. package/dist/components/IdeView.js.map +1 -0
  18. package/dist/components/QuickOpen.d.ts +2 -0
  19. package/dist/components/QuickOpen.d.ts.map +1 -0
  20. package/dist/components/QuickOpen.js +204 -0
  21. package/dist/components/QuickOpen.js.map +1 -0
  22. package/dist/components/ScmView.d.ts +6 -0
  23. package/dist/components/ScmView.d.ts.map +1 -0
  24. package/dist/components/ScmView.js +283 -0
  25. package/dist/components/ScmView.js.map +1 -0
  26. package/dist/components/SearchView.d.ts +2 -0
  27. package/dist/components/SearchView.d.ts.map +1 -0
  28. package/dist/components/SearchView.js +97 -0
  29. package/dist/components/SearchView.js.map +1 -0
  30. package/dist/components/StatusBar.d.ts +2 -0
  31. package/dist/components/StatusBar.d.ts.map +1 -0
  32. package/dist/components/StatusBar.js +71 -0
  33. package/dist/components/StatusBar.js.map +1 -0
  34. package/dist/components/TerminalPanel.d.ts +6 -0
  35. package/dist/components/TerminalPanel.d.ts.map +1 -0
  36. package/dist/components/TerminalPanel.js +101 -0
  37. package/dist/components/TerminalPanel.js.map +1 -0
  38. package/dist/components/hooks.d.ts +25 -0
  39. package/dist/components/hooks.d.ts.map +1 -0
  40. package/dist/components/hooks.js +99 -0
  41. package/dist/components/hooks.js.map +1 -0
  42. package/dist/components/icons.d.ts +23 -0
  43. package/dist/components/icons.d.ts.map +1 -0
  44. package/dist/components/icons.js +123 -0
  45. package/dist/components/icons.js.map +1 -0
  46. package/dist/components/primitives.d.ts +57 -0
  47. package/dist/components/primitives.d.ts.map +1 -0
  48. package/dist/components/primitives.js +263 -0
  49. package/dist/components/primitives.js.map +1 -0
  50. package/dist/fuzzy.d.ts +17 -0
  51. package/dist/fuzzy.d.ts.map +1 -0
  52. package/dist/fuzzy.js +62 -0
  53. package/dist/fuzzy.js.map +1 -0
  54. package/dist/git-model.d.ts +104 -0
  55. package/dist/git-model.d.ts.map +1 -0
  56. package/dist/git-model.js +126 -0
  57. package/dist/git-model.js.map +1 -0
  58. package/dist/ide.css +2203 -0
  59. package/dist/index.d.ts +22 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +19 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/keys.d.ts +33 -0
  64. package/dist/keys.d.ts.map +1 -0
  65. package/dist/keys.js +98 -0
  66. package/dist/keys.js.map +1 -0
  67. package/dist/paths.d.ts +14 -0
  68. package/dist/paths.d.ts.map +1 -0
  69. package/dist/paths.js +66 -0
  70. package/dist/paths.js.map +1 -0
  71. package/dist/store.d.ts +406 -0
  72. package/dist/store.d.ts.map +1 -0
  73. package/dist/store.js +1464 -0
  74. package/dist/store.js.map +1 -0
  75. package/dist/terminal.d.ts +60 -0
  76. package/dist/terminal.d.ts.map +1 -0
  77. package/dist/terminal.js +293 -0
  78. package/dist/terminal.js.map +1 -0
  79. package/dist/text.d.ts +26 -0
  80. package/dist/text.d.ts.map +1 -0
  81. package/dist/text.js +76 -0
  82. package/dist/text.js.map +1 -0
  83. package/dist/tree.d.ts +31 -0
  84. package/dist/tree.d.ts.map +1 -0
  85. package/dist/tree.js +105 -0
  86. package/dist/tree.js.map +1 -0
  87. package/dist/types.d.ts +216 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +14 -0
  90. package/dist/types.js.map +1 -0
  91. 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,2 @@
1
+ export declare function SearchView(): import("react").JSX.Element;
2
+ //# sourceMappingURL=SearchView.d.ts.map
@@ -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,2 @@
1
+ export declare function StatusBar(): import("react").JSX.Element;
2
+ //# sourceMappingURL=StatusBar.d.ts.map
@@ -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