@termaxjs/web-react 0.1.1
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/LICENSE +201 -0
- package/dist/TermaxTerminal.d.ts +16 -0
- package/dist/TermaxTerminal.d.ts.map +1 -0
- package/dist/TermaxTerminal.js +11 -0
- package/dist/TermaxTerminal.js.map +1 -0
- package/dist/TerminalContext.d.ts +22 -0
- package/dist/TerminalContext.d.ts.map +1 -0
- package/dist/TerminalContext.js +10 -0
- package/dist/TerminalContext.js.map +1 -0
- package/dist/TerminalContextMenu.d.ts +15 -0
- package/dist/TerminalContextMenu.d.ts.map +1 -0
- package/dist/TerminalContextMenu.js +138 -0
- package/dist/TerminalContextMenu.js.map +1 -0
- package/dist/TerminalDropZone.d.ts +10 -0
- package/dist/TerminalDropZone.d.ts.map +1 -0
- package/dist/TerminalDropZone.js +40 -0
- package/dist/TerminalDropZone.js.map +1 -0
- package/dist/TerminalRoot.d.ts +10 -0
- package/dist/TerminalRoot.d.ts.map +1 -0
- package/dist/TerminalRoot.js +38 -0
- package/dist/TerminalRoot.js.map +1 -0
- package/dist/TerminalScreen.d.ts +7 -0
- package/dist/TerminalScreen.d.ts.map +1 -0
- package/dist/TerminalScreen.js +30 -0
- package/dist/TerminalScreen.js.map +1 -0
- package/dist/TerminalSearch.d.ts +8 -0
- package/dist/TerminalSearch.d.ts.map +1 -0
- package/dist/TerminalSearch.js +122 -0
- package/dist/TerminalSearch.js.map +1 -0
- package/dist/TerminalToolbar.d.ts +10 -0
- package/dist/TerminalToolbar.d.ts.map +1 -0
- package/dist/TerminalToolbar.js +34 -0
- package/dist/TerminalToolbar.js.map +1 -0
- package/dist/TerminalView.d.ts +28 -0
- package/dist/TerminalView.d.ts.map +1 -0
- package/dist/TerminalView.js +148 -0
- package/dist/TerminalView.js.map +1 -0
- package/dist/components/FileTree.d.ts +8 -0
- package/dist/components/FileTree.d.ts.map +1 -0
- package/dist/components/FileTree.js +19 -0
- package/dist/components/FileTree.js.map +1 -0
- package/dist/components/GitCommitGraph.d.ts +16 -0
- package/dist/components/GitCommitGraph.d.ts.map +1 -0
- package/dist/components/GitCommitGraph.js +11 -0
- package/dist/components/GitCommitGraph.js.map +1 -0
- package/dist/components/SpacesBar.d.ts +8 -0
- package/dist/components/SpacesBar.d.ts.map +1 -0
- package/dist/components/SpacesBar.js +12 -0
- package/dist/components/SpacesBar.js.map +1 -0
- package/dist/explorer/HeadlessFileTree.d.ts +28 -0
- package/dist/explorer/HeadlessFileTree.d.ts.map +1 -0
- package/dist/explorer/HeadlessFileTree.js +50 -0
- package/dist/explorer/HeadlessFileTree.js.map +1 -0
- package/dist/git/HeadlessGitGraph.d.ts +22 -0
- package/dist/git/HeadlessGitGraph.d.ts.map +1 -0
- package/dist/git/HeadlessGitGraph.js +13 -0
- package/dist/git/HeadlessGitGraph.js.map +1 -0
- package/dist/hooks/useTerminal.d.ts +27 -0
- package/dist/hooks/useTerminal.d.ts.map +1 -0
- package/dist/hooks/useTerminal.js +97 -0
- package/dist/hooks/useTerminal.js.map +1 -0
- package/dist/hooks/useTerminalDrop.d.ts +9 -0
- package/dist/hooks/useTerminalDrop.d.ts.map +1 -0
- package/dist/hooks/useTerminalDrop.js +59 -0
- package/dist/hooks/useTerminalDrop.js.map +1 -0
- package/dist/hooks/useTerminalSearch.d.ts +22 -0
- package/dist/hooks/useTerminalSearch.d.ts.map +1 -0
- package/dist/hooks/useTerminalSearch.js +89 -0
- package/dist/hooks/useTerminalSearch.js.map +1 -0
- package/dist/hooks/useTerminalSelection.d.ts +9 -0
- package/dist/hooks/useTerminalSelection.d.ts.map +1 -0
- package/dist/hooks/useTerminalSelection.js +46 -0
- package/dist/hooks/useTerminalSelection.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/HeadlessFloatingPane.d.ts +18 -0
- package/dist/layout/HeadlessFloatingPane.d.ts.map +1 -0
- package/dist/layout/HeadlessFloatingPane.js +29 -0
- package/dist/layout/HeadlessFloatingPane.js.map +1 -0
- package/dist/palette/TerminalCommandPalette.d.ts +23 -0
- package/dist/palette/TerminalCommandPalette.d.ts.map +1 -0
- package/dist/palette/TerminalCommandPalette.js +105 -0
- package/dist/palette/TerminalCommandPalette.js.map +1 -0
- package/dist/panels/PanelContext.d.ts +25 -0
- package/dist/panels/PanelContext.d.ts.map +1 -0
- package/dist/panels/PanelContext.js +10 -0
- package/dist/panels/PanelContext.js.map +1 -0
- package/dist/panels/TerminalPanel.d.ts +17 -0
- package/dist/panels/TerminalPanel.d.ts.map +1 -0
- package/dist/panels/TerminalPanel.js +47 -0
- package/dist/panels/TerminalPanel.js.map +1 -0
- package/dist/panels/TerminalPanelGroup.d.ts +13 -0
- package/dist/panels/TerminalPanelGroup.d.ts.map +1 -0
- package/dist/panels/TerminalPanelGroup.js +167 -0
- package/dist/panels/TerminalPanelGroup.js.map +1 -0
- package/dist/panels/TerminalResizeHandle.d.ts +12 -0
- package/dist/panels/TerminalResizeHandle.d.ts.map +1 -0
- package/dist/panels/TerminalResizeHandle.js +56 -0
- package/dist/panels/TerminalResizeHandle.js.map +1 -0
- package/dist/pool/index.d.ts +2 -0
- package/dist/pool/index.d.ts.map +1 -0
- package/dist/pool/index.js +2 -0
- package/dist/pool/index.js.map +1 -0
- package/dist/pool/rendererPool.d.ts +118 -0
- package/dist/pool/rendererPool.d.ts.map +1 -0
- package/dist/pool/rendererPool.js +1281 -0
- package/dist/pool/rendererPool.js.map +1 -0
- package/dist/spaces/HeadlessSpacesBar.d.ts +21 -0
- package/dist/spaces/HeadlessSpacesBar.d.ts.map +1 -0
- package/dist/spaces/HeadlessSpacesBar.js +41 -0
- package/dist/spaces/HeadlessSpacesBar.js.map +1 -0
- package/dist/status/TerminalStatusBar.d.ts +21 -0
- package/dist/status/TerminalStatusBar.d.ts.map +1 -0
- package/dist/status/TerminalStatusBar.js +28 -0
- package/dist/status/TerminalStatusBar.js.map +1 -0
- package/dist/tabs/TerminalTab.d.ts +15 -0
- package/dist/tabs/TerminalTab.d.ts.map +1 -0
- package/dist/tabs/TerminalTab.js +57 -0
- package/dist/tabs/TerminalTab.js.map +1 -0
- package/dist/tabs/TerminalTabBar.d.ts +21 -0
- package/dist/tabs/TerminalTabBar.d.ts.map +1 -0
- package/dist/tabs/TerminalTabBar.js +57 -0
- package/dist/tabs/TerminalTabBar.js.map +1 -0
- package/dist/themes.d.ts +17 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +153 -0
- package/dist/themes.js.map +1 -0
- package/dist/tree/TerminalTree.d.ts +19 -0
- package/dist/tree/TerminalTree.d.ts.map +1 -0
- package/dist/tree/TerminalTree.js +68 -0
- package/dist/tree/TerminalTree.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { CommitNode, DiffHunk } from "@termaxjs/web-core";
|
|
3
|
+
export declare function useGitGraph(commits: Array<{
|
|
4
|
+
sha: string;
|
|
5
|
+
parents: string[];
|
|
6
|
+
author: string;
|
|
7
|
+
email: string;
|
|
8
|
+
timestamp: number;
|
|
9
|
+
message: string;
|
|
10
|
+
branchName?: string;
|
|
11
|
+
}>): CommitNode[];
|
|
12
|
+
export declare function useSourceControl(rawDiff: string): DiffHunk[];
|
|
13
|
+
export interface HeadlessGitCommitGraphProps {
|
|
14
|
+
commits: CommitNode[];
|
|
15
|
+
children: (props: {
|
|
16
|
+
commit: CommitNode;
|
|
17
|
+
index: number;
|
|
18
|
+
}) => React.ReactNode;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function HeadlessGitCommitGraph({ commits, children, className }: HeadlessGitCommitGraphProps): React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=HeadlessGitGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadlessGitGraph.d.ts","sourceRoot":"","sources":["../../src/git/HeadlessGitGraph.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EAA2C,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnG,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,gBAErK;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,cAE/C;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,2BAA2B,qBAUnG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { useMemo } from "react";
|
|
3
|
+
import { HeadlessGitGraph, HeadlessSourceControl } from "@termaxjs/web-core";
|
|
4
|
+
export function useGitGraph(commits) {
|
|
5
|
+
return useMemo(() => HeadlessGitGraph.computeLanes(commits), [commits]);
|
|
6
|
+
}
|
|
7
|
+
export function useSourceControl(rawDiff) {
|
|
8
|
+
return useMemo(() => HeadlessSourceControl.parseUnifiedDiff(rawDiff), [rawDiff]);
|
|
9
|
+
}
|
|
10
|
+
export function HeadlessGitCommitGraph({ commits, children, className }) {
|
|
11
|
+
return (_jsx("div", { className: className, children: commits.map((commit, index) => (_jsx(React.Fragment, { children: children({ commit, index }) }, commit.sha))) }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=HeadlessGitGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadlessGitGraph.js","sourceRoot":"","sources":["../../src/git/HeadlessGitGraph.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAwB,MAAM,oBAAoB,CAAC;AAEnG,MAAM,UAAU,WAAW,CAAC,OAA0I;IACpK,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACnF,CAAC;AAQD,MAAM,UAAU,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAA+B;IAClG,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,YACtB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,KAAC,KAAK,CAAC,QAAQ,cACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IADT,MAAM,CAAC,GAAG,CAEd,CAClB,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Terminal } from '@termaxjs/web-ui';
|
|
2
|
+
import { FitAddon } from '@termaxjs/web-addons';
|
|
3
|
+
import { ITerminalOptions, TerminalTheme } from '@termaxjs/web-core';
|
|
4
|
+
import { BuiltinThemeName } from '../themes.js';
|
|
5
|
+
export interface UseTerminalOptions extends Omit<ITerminalOptions, 'theme'> {
|
|
6
|
+
theme?: TerminalTheme | BuiltinThemeName;
|
|
7
|
+
autoFocus?: boolean;
|
|
8
|
+
onData?: (data: string) => void;
|
|
9
|
+
onResize?: (size: {
|
|
10
|
+
cols: number;
|
|
11
|
+
rows: number;
|
|
12
|
+
}) => void;
|
|
13
|
+
onTitleChange?: (title: string) => void;
|
|
14
|
+
onCwdChange?: (cwd: string) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function useTerminal(options?: UseTerminalOptions): {
|
|
17
|
+
terminal: Terminal | null;
|
|
18
|
+
containerRef: (node: HTMLDivElement | null) => void;
|
|
19
|
+
fitAddon: FitAddon | null;
|
|
20
|
+
write: (data: string | Uint8Array) => void;
|
|
21
|
+
writeln: (data: string | Uint8Array) => void;
|
|
22
|
+
clear: () => void;
|
|
23
|
+
focus: () => void;
|
|
24
|
+
blur: () => void;
|
|
25
|
+
fit: () => void;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useTerminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminal.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAkB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACzE,KAAK,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB;;yBA6DjD,cAAc,GAAG,IAAI;;kBAcrB,MAAM,GAAG,UAAU;oBAOnB,MAAM,GAAG,UAAU;;;;;EAiC7B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { Terminal } from '@termaxjs/web-ui';
|
|
3
|
+
import { FitAddon } from '@termaxjs/web-addons';
|
|
4
|
+
import { BUILTIN_THEMES } from '../themes.js';
|
|
5
|
+
export function useTerminal(options = {}) {
|
|
6
|
+
const [terminal, setTerminal] = useState(null);
|
|
7
|
+
const containerRef = useRef(null);
|
|
8
|
+
const fitAddonRef = useRef(null);
|
|
9
|
+
const resolvedTheme = typeof options.theme === 'string'
|
|
10
|
+
? (BUILTIN_THEMES[options.theme] || BUILTIN_THEMES.termax)
|
|
11
|
+
: (options.theme || BUILTIN_THEMES.termax);
|
|
12
|
+
const optionsRef = useRef(options);
|
|
13
|
+
optionsRef.current = options;
|
|
14
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: terminal lifecycle is mount-once by design; options must not recreate the terminal.
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const term = new Terminal({
|
|
17
|
+
...optionsRef.current,
|
|
18
|
+
theme: resolvedTheme,
|
|
19
|
+
});
|
|
20
|
+
const fitAddon = new FitAddon();
|
|
21
|
+
term.loadAddon(fitAddon);
|
|
22
|
+
fitAddonRef.current = fitAddon;
|
|
23
|
+
if (optionsRef.current.onData) {
|
|
24
|
+
term.onData(optionsRef.current.onData);
|
|
25
|
+
}
|
|
26
|
+
if (optionsRef.current.onResize) {
|
|
27
|
+
term.onResize(optionsRef.current.onResize);
|
|
28
|
+
}
|
|
29
|
+
if (optionsRef.current.onTitleChange) {
|
|
30
|
+
term.onTitleChange(optionsRef.current.onTitleChange);
|
|
31
|
+
}
|
|
32
|
+
if (optionsRef.current.onCwdChange) {
|
|
33
|
+
term.parser.registerOscHandler(7, (data) => {
|
|
34
|
+
let url = data;
|
|
35
|
+
if (url.startsWith('file://'))
|
|
36
|
+
url = url.slice(7);
|
|
37
|
+
const slash = url.indexOf('/');
|
|
38
|
+
if (slash !== -1 && !url.startsWith('/'))
|
|
39
|
+
url = url.slice(slash);
|
|
40
|
+
optionsRef.current.onCwdChange?.(decodeURIComponent(url));
|
|
41
|
+
return true;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
setTerminal(term);
|
|
45
|
+
return () => {
|
|
46
|
+
term.dispose();
|
|
47
|
+
fitAddon.dispose();
|
|
48
|
+
setTerminal(null);
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
51
|
+
// Update theme when changed
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (terminal) {
|
|
54
|
+
terminal.updateTheme(resolvedTheme);
|
|
55
|
+
}
|
|
56
|
+
}, [terminal, resolvedTheme]);
|
|
57
|
+
const bindContainer = useCallback((node) => {
|
|
58
|
+
if (node && terminal && !terminal.element) {
|
|
59
|
+
containerRef.current = node;
|
|
60
|
+
terminal.open(node);
|
|
61
|
+
fitAddonRef.current?.fit();
|
|
62
|
+
if (optionsRef.current.autoFocus) {
|
|
63
|
+
terminal.focus();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}, [terminal]);
|
|
67
|
+
const write = useCallback((data) => {
|
|
68
|
+
terminal?.write(data);
|
|
69
|
+
}, [terminal]);
|
|
70
|
+
const writeln = useCallback((data) => {
|
|
71
|
+
terminal?.writeln(data);
|
|
72
|
+
}, [terminal]);
|
|
73
|
+
const clear = useCallback(() => {
|
|
74
|
+
terminal?.clear();
|
|
75
|
+
}, [terminal]);
|
|
76
|
+
const focus = useCallback(() => {
|
|
77
|
+
terminal?.focus();
|
|
78
|
+
}, [terminal]);
|
|
79
|
+
const blur = useCallback(() => {
|
|
80
|
+
terminal?.blur();
|
|
81
|
+
}, [terminal]);
|
|
82
|
+
const fit = useCallback(() => {
|
|
83
|
+
fitAddonRef.current?.fit();
|
|
84
|
+
}, []);
|
|
85
|
+
return {
|
|
86
|
+
terminal,
|
|
87
|
+
containerRef: bindContainer,
|
|
88
|
+
fitAddon: fitAddonRef.current,
|
|
89
|
+
write,
|
|
90
|
+
writeln,
|
|
91
|
+
clear,
|
|
92
|
+
focus,
|
|
93
|
+
blur,
|
|
94
|
+
fit,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=useTerminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminal.js","sourceRoot":"","sources":["../../src/hooks/useTerminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Terminal } from '@termaxjs/web-ui';
|
|
2
|
+
export interface UseTerminalDropOptions {
|
|
3
|
+
onDrop?: (paths: string[]) => void;
|
|
4
|
+
autoPaste?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function useTerminalDrop(terminal: Terminal | null, options?: UseTerminalDropOptions): {
|
|
7
|
+
isDropTarget: boolean;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useTerminalDrop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminalDrop.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminalDrop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,GAAE,sBAA2B;;EAgE9F"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
export function useTerminalDrop(terminal, options = {}) {
|
|
3
|
+
const [isDropTarget, setIsDropTarget] = useState(false);
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
if (!terminal || !terminal.element)
|
|
6
|
+
return;
|
|
7
|
+
const container = terminal.element;
|
|
8
|
+
let dragCounter = 0;
|
|
9
|
+
const handleDragEnter = (e) => {
|
|
10
|
+
e.preventDefault();
|
|
11
|
+
dragCounter++;
|
|
12
|
+
setIsDropTarget(true);
|
|
13
|
+
};
|
|
14
|
+
const handleDragOver = (e) => {
|
|
15
|
+
e.preventDefault();
|
|
16
|
+
if (e.dataTransfer)
|
|
17
|
+
e.dataTransfer.dropEffect = 'copy';
|
|
18
|
+
};
|
|
19
|
+
const handleDragLeave = () => {
|
|
20
|
+
dragCounter--;
|
|
21
|
+
if (dragCounter <= 0) {
|
|
22
|
+
dragCounter = 0;
|
|
23
|
+
setIsDropTarget(false);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const handleDrop = (e) => {
|
|
27
|
+
e.preventDefault();
|
|
28
|
+
dragCounter = 0;
|
|
29
|
+
setIsDropTarget(false);
|
|
30
|
+
if (!e.dataTransfer)
|
|
31
|
+
return;
|
|
32
|
+
const files = Array.from(e.dataTransfer.files);
|
|
33
|
+
const paths = files.map((f) => {
|
|
34
|
+
const path = f.path || f.name;
|
|
35
|
+
return /[\s"'\\]/.test(path) ? `'${path.replace(/'/g, `'\\''`)}'` : path;
|
|
36
|
+
});
|
|
37
|
+
if (paths.length > 0) {
|
|
38
|
+
options.onDrop?.(paths);
|
|
39
|
+
if (options.autoPaste ?? true) {
|
|
40
|
+
terminal.paste(paths.join(' ') + ' ');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
container.addEventListener('dragenter', handleDragEnter);
|
|
45
|
+
container.addEventListener('dragover', handleDragOver);
|
|
46
|
+
container.addEventListener('dragleave', handleDragLeave);
|
|
47
|
+
container.addEventListener('drop', handleDrop);
|
|
48
|
+
return () => {
|
|
49
|
+
container.removeEventListener('dragenter', handleDragEnter);
|
|
50
|
+
container.removeEventListener('dragover', handleDragOver);
|
|
51
|
+
container.removeEventListener('dragleave', handleDragLeave);
|
|
52
|
+
container.removeEventListener('drop', handleDrop);
|
|
53
|
+
};
|
|
54
|
+
}, [terminal, options.onDrop, options.autoPaste]);
|
|
55
|
+
return {
|
|
56
|
+
isDropTarget,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=useTerminalDrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminalDrop.js","sourceRoot":"","sources":["../../src/hooks/useTerminalDrop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Terminal } from '@termaxjs/web-ui';
|
|
2
|
+
import { ISearchOptions } from '@termaxjs/web-addons';
|
|
3
|
+
export declare function useTerminalSearch(terminal: Terminal | null): {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
open: () => void;
|
|
6
|
+
close: () => void;
|
|
7
|
+
toggle: () => void;
|
|
8
|
+
query: string;
|
|
9
|
+
setQuery: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
10
|
+
useRegex: boolean;
|
|
11
|
+
setUseRegex: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
12
|
+
useCase: boolean;
|
|
13
|
+
setUseCase: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
14
|
+
useWord: boolean;
|
|
15
|
+
setUseWord: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
16
|
+
resultIndex: number;
|
|
17
|
+
resultCount: number;
|
|
18
|
+
findNext: (term?: string, opts?: ISearchOptions) => boolean;
|
|
19
|
+
findPrevious: (term?: string, opts?: ISearchOptions) => boolean;
|
|
20
|
+
clearSearch: () => void;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=useTerminalSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminalSearch.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminalSearch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAEnE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;;;;;;;;;;;;;;;sBA8B/C,MAAM,SAAS,cAAc;0BAc7B,MAAM,SAAS,cAAc;;EAqDxC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { SearchAddon } from '@termaxjs/web-addons';
|
|
3
|
+
export function useTerminalSearch(terminal) {
|
|
4
|
+
const searchAddonRef = useRef(null);
|
|
5
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
6
|
+
const [query, setQuery] = useState('');
|
|
7
|
+
const [useRegex, setUseRegex] = useState(false);
|
|
8
|
+
const [useCase, setUseCase] = useState(false);
|
|
9
|
+
const [useWord, setUseWord] = useState(false);
|
|
10
|
+
const [resultIndex, setResultIndex] = useState(-1);
|
|
11
|
+
const [resultCount, setResultCount] = useState(0);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (!terminal)
|
|
14
|
+
return;
|
|
15
|
+
const addon = new SearchAddon();
|
|
16
|
+
terminal.loadAddon(addon);
|
|
17
|
+
searchAddonRef.current = addon;
|
|
18
|
+
const disposable = addon.onDidChangeResults((e) => {
|
|
19
|
+
setResultIndex(e.resultIndex);
|
|
20
|
+
setResultCount(e.resultCount);
|
|
21
|
+
});
|
|
22
|
+
return () => {
|
|
23
|
+
disposable.dispose();
|
|
24
|
+
addon.dispose();
|
|
25
|
+
searchAddonRef.current = null;
|
|
26
|
+
};
|
|
27
|
+
}, [terminal]);
|
|
28
|
+
const findNext = useCallback((term, opts) => {
|
|
29
|
+
const q = term !== undefined ? term : query;
|
|
30
|
+
if (!searchAddonRef.current || !q)
|
|
31
|
+
return false;
|
|
32
|
+
return searchAddonRef.current.findNext(q, {
|
|
33
|
+
regex: opts?.regex ?? useRegex,
|
|
34
|
+
caseSensitive: opts?.caseSensitive ?? useCase,
|
|
35
|
+
wholeWord: opts?.wholeWord ?? useWord,
|
|
36
|
+
...opts,
|
|
37
|
+
});
|
|
38
|
+
}, [query, useRegex, useCase, useWord]);
|
|
39
|
+
const findPrevious = useCallback((term, opts) => {
|
|
40
|
+
const q = term !== undefined ? term : query;
|
|
41
|
+
if (!searchAddonRef.current || !q)
|
|
42
|
+
return false;
|
|
43
|
+
return searchAddonRef.current.findPrevious(q, {
|
|
44
|
+
regex: opts?.regex ?? useRegex,
|
|
45
|
+
caseSensitive: opts?.caseSensitive ?? useCase,
|
|
46
|
+
wholeWord: opts?.wholeWord ?? useWord,
|
|
47
|
+
...opts,
|
|
48
|
+
});
|
|
49
|
+
}, [query, useRegex, useCase, useWord]);
|
|
50
|
+
const clearSearch = useCallback(() => {
|
|
51
|
+
searchAddonRef.current?.clearDecorations();
|
|
52
|
+
setResultIndex(-1);
|
|
53
|
+
setResultCount(0);
|
|
54
|
+
}, []);
|
|
55
|
+
const open = useCallback(() => {
|
|
56
|
+
setIsOpen(true);
|
|
57
|
+
}, []);
|
|
58
|
+
const close = useCallback(() => {
|
|
59
|
+
setIsOpen(false);
|
|
60
|
+
clearSearch();
|
|
61
|
+
terminal?.focus();
|
|
62
|
+
}, [clearSearch, terminal]);
|
|
63
|
+
const toggle = useCallback(() => {
|
|
64
|
+
if (isOpen)
|
|
65
|
+
close();
|
|
66
|
+
else
|
|
67
|
+
open();
|
|
68
|
+
}, [isOpen, open, close]);
|
|
69
|
+
return {
|
|
70
|
+
isOpen,
|
|
71
|
+
open,
|
|
72
|
+
close,
|
|
73
|
+
toggle,
|
|
74
|
+
query,
|
|
75
|
+
setQuery,
|
|
76
|
+
useRegex,
|
|
77
|
+
setUseRegex,
|
|
78
|
+
useCase,
|
|
79
|
+
setUseCase,
|
|
80
|
+
useWord,
|
|
81
|
+
setUseWord,
|
|
82
|
+
resultIndex,
|
|
83
|
+
resultCount,
|
|
84
|
+
findNext,
|
|
85
|
+
findPrevious,
|
|
86
|
+
clearSearch,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=useTerminalSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminalSearch.js","sourceRoot":"","sources":["../../src/hooks/useTerminalSearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Terminal } from '@termaxjs/web-ui';
|
|
2
|
+
export declare function useTerminalSelection(terminal: Terminal | null): {
|
|
3
|
+
hasSelection: boolean;
|
|
4
|
+
selectionText: string;
|
|
5
|
+
copyToClipboard: () => Promise<boolean>;
|
|
6
|
+
selectAll: () => void;
|
|
7
|
+
clearSelection: () => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useTerminalSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminalSelection.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminalSelection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;;;2BAkBd,OAAO,CAAC,OAAO,CAAC;;;EA6B/D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
export function useTerminalSelection(terminal) {
|
|
3
|
+
const [hasSelection, setHasSelection] = useState(false);
|
|
4
|
+
const [selectionText, setSelectionText] = useState('');
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
if (!terminal)
|
|
7
|
+
return;
|
|
8
|
+
const disposable = terminal.onSelectionChange(() => {
|
|
9
|
+
const selected = terminal.hasSelection();
|
|
10
|
+
setHasSelection(selected);
|
|
11
|
+
setSelectionText(selected ? terminal.getSelection() : '');
|
|
12
|
+
});
|
|
13
|
+
return () => {
|
|
14
|
+
disposable.dispose();
|
|
15
|
+
};
|
|
16
|
+
}, [terminal]);
|
|
17
|
+
const copyToClipboard = useCallback(async () => {
|
|
18
|
+
if (!terminal)
|
|
19
|
+
return false;
|
|
20
|
+
const text = terminal.getSelection();
|
|
21
|
+
if (text && typeof navigator !== 'undefined' && navigator.clipboard) {
|
|
22
|
+
try {
|
|
23
|
+
await navigator.clipboard.writeText(text);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}, [terminal]);
|
|
32
|
+
const selectAll = useCallback(() => {
|
|
33
|
+
terminal?.selectAll();
|
|
34
|
+
}, [terminal]);
|
|
35
|
+
const clearSelection = useCallback(() => {
|
|
36
|
+
terminal?.clearSelection();
|
|
37
|
+
}, [terminal]);
|
|
38
|
+
return {
|
|
39
|
+
hasSelection,
|
|
40
|
+
selectionText,
|
|
41
|
+
copyToClipboard,
|
|
42
|
+
selectAll,
|
|
43
|
+
clearSelection,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=useTerminalSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTerminalSelection.js","sourceRoot":"","sources":["../../src/hooks/useTerminalSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGzD,MAAM,UAAU,oBAAoB,CAAC,QAAyB;IAC5D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,UAAU,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE;YACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YACzC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC1B,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAsB,EAAE;QAC/D,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;QACrC,IAAI,IAAI,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACpE,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,QAAQ,EAAE,SAAS,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC7B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO;QACL,YAAY;QACZ,aAAa;QACb,eAAe;QACf,SAAS;QACT,cAAc;KACf,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export { TerminalView, type TerminalViewProps, type TerminalViewHandle, } from "./TerminalView.js";
|
|
2
|
+
export type { IPtyAdapter, IPtySpawnOptions } from "@termaxjs/web-adapter";
|
|
3
|
+
export { InMemoryPtyAdapter, MockPtyAdapter, WebSocketPtyAdapter, type InMemoryPtyOptions, } from "@termaxjs/web-adapter";
|
|
4
|
+
export * from "./TermaxTerminal.js";
|
|
5
|
+
export * from "./TerminalRoot.js";
|
|
6
|
+
export * from "./TerminalScreen.js";
|
|
7
|
+
export * from "./TerminalToolbar.js";
|
|
8
|
+
export * from "./TerminalSearch.js";
|
|
9
|
+
export * from "./TerminalContextMenu.js";
|
|
10
|
+
export * from "./TerminalDropZone.js";
|
|
11
|
+
export * from "./TerminalContext.js";
|
|
12
|
+
export * from "./hooks/useTerminal.js";
|
|
13
|
+
export * from "./hooks/useTerminalSearch.js";
|
|
14
|
+
export * from "./hooks/useTerminalSelection.js";
|
|
15
|
+
export * from "./hooks/useTerminalDrop.js";
|
|
16
|
+
export * from "./themes.js";
|
|
17
|
+
export { TerminalPanel, type TerminalPanelProps } from "./panels/TerminalPanel.js";
|
|
18
|
+
export { TerminalPanelGroup, type TerminalPanelGroupProps } from "./panels/TerminalPanelGroup.js";
|
|
19
|
+
export { TerminalResizeHandle, type TerminalResizeHandleProps } from "./panels/TerminalResizeHandle.js";
|
|
20
|
+
export { type PanelImperativeHandle, usePanelGroupContext } from "./panels/PanelContext.js";
|
|
21
|
+
export * from "./explorer/HeadlessFileTree.js";
|
|
22
|
+
export * from "./git/HeadlessGitGraph.js";
|
|
23
|
+
export * from "./spaces/HeadlessSpacesBar.js";
|
|
24
|
+
export * from "./layout/HeadlessFloatingPane.js";
|
|
25
|
+
export * from "./components/FileTree.js";
|
|
26
|
+
export * from "./components/GitCommitGraph.js";
|
|
27
|
+
export * from "./components/SpacesBar.js";
|
|
28
|
+
export * from "./pool/index.js";
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AACxG,OAAO,EAAE,KAAK,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAE5F,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AAEjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { TerminalView, } from "./TerminalView.js";
|
|
2
|
+
export { InMemoryPtyAdapter, MockPtyAdapter, WebSocketPtyAdapter, } from "@termaxjs/web-adapter";
|
|
3
|
+
export * from "./TermaxTerminal.js";
|
|
4
|
+
export * from "./TerminalRoot.js";
|
|
5
|
+
export * from "./TerminalScreen.js";
|
|
6
|
+
export * from "./TerminalToolbar.js";
|
|
7
|
+
export * from "./TerminalSearch.js";
|
|
8
|
+
export * from "./TerminalContextMenu.js";
|
|
9
|
+
export * from "./TerminalDropZone.js";
|
|
10
|
+
export * from "./TerminalContext.js";
|
|
11
|
+
export * from "./hooks/useTerminal.js";
|
|
12
|
+
export * from "./hooks/useTerminalSearch.js";
|
|
13
|
+
export * from "./hooks/useTerminalSelection.js";
|
|
14
|
+
export * from "./hooks/useTerminalDrop.js";
|
|
15
|
+
export * from "./themes.js";
|
|
16
|
+
export { TerminalPanel } from "./panels/TerminalPanel.js";
|
|
17
|
+
export { TerminalPanelGroup } from "./panels/TerminalPanelGroup.js";
|
|
18
|
+
export { TerminalResizeHandle } from "./panels/TerminalResizeHandle.js";
|
|
19
|
+
export { usePanelGroupContext } from "./panels/PanelContext.js";
|
|
20
|
+
export * from "./explorer/HeadlessFileTree.js";
|
|
21
|
+
export * from "./git/HeadlessGitGraph.js";
|
|
22
|
+
export * from "./spaces/HeadlessSpacesBar.js";
|
|
23
|
+
export * from "./layout/HeadlessFloatingPane.js";
|
|
24
|
+
export * from "./components/FileTree.js";
|
|
25
|
+
export * from "./components/GitCommitGraph.js";
|
|
26
|
+
export * from "./components/SpacesBar.js";
|
|
27
|
+
export * from "./pool/index.js";
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,aAAa,EAA2B,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAgC,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAkC,MAAM,kCAAkC,CAAC;AACxG,OAAO,EAA8B,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAE5F,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AAEjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { FloatingRect } from "@termaxjs/web-core";
|
|
3
|
+
export declare function useFloatingPane(id: string, initialRect?: Partial<FloatingRect>): {
|
|
4
|
+
rect: FloatingRect;
|
|
5
|
+
updateRect: (next: Partial<FloatingRect>) => void;
|
|
6
|
+
bringToFront: () => void;
|
|
7
|
+
};
|
|
8
|
+
export interface HeadlessFloatingPaneProps {
|
|
9
|
+
id: string;
|
|
10
|
+
initialRect?: Partial<FloatingRect>;
|
|
11
|
+
children: (props: {
|
|
12
|
+
rect: FloatingRect;
|
|
13
|
+
updateRect: (next: Partial<FloatingRect>) => void;
|
|
14
|
+
bringToFront: () => void;
|
|
15
|
+
}) => React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare function HeadlessFloatingPane({ id, initialRect, children }: HeadlessFloatingPaneProps): React.JSX.Element;
|
|
18
|
+
//# sourceMappingURL=HeadlessFloatingPane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadlessFloatingPane.d.ts","sourceRoot":"","sources":["../../src/layout/HeadlessFloatingPane.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,EAA2B,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;;uBASvC,OAAO,CAAC,YAAY,CAAC;;EAe5D;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;QAAC,YAAY,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;CAC3I;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,yBAAyB,qBAG5F"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback, useMemo } from "react";
|
|
3
|
+
import { HeadlessFloatingManager } from "@termaxjs/web-core";
|
|
4
|
+
export function useFloatingPane(id, initialRect) {
|
|
5
|
+
const [manager] = useState(() => new HeadlessFloatingManager());
|
|
6
|
+
const [, setVersion] = useState(0);
|
|
7
|
+
const rerender = useCallback(() => setVersion((v) => v + 1), []);
|
|
8
|
+
const rect = useMemo(() => {
|
|
9
|
+
return manager.getPane(id) || manager.setPane(id, initialRect || {});
|
|
10
|
+
}, [manager, id, initialRect]);
|
|
11
|
+
const updateRect = useCallback((next) => {
|
|
12
|
+
manager.setPane(id, next);
|
|
13
|
+
rerender();
|
|
14
|
+
}, [manager, id, rerender]);
|
|
15
|
+
const bringToFront = useCallback(() => {
|
|
16
|
+
manager.bringToFront(id);
|
|
17
|
+
rerender();
|
|
18
|
+
}, [manager, id, rerender]);
|
|
19
|
+
return {
|
|
20
|
+
rect,
|
|
21
|
+
updateRect,
|
|
22
|
+
bringToFront,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function HeadlessFloatingPane({ id, initialRect, children }) {
|
|
26
|
+
const state = useFloatingPane(id, initialRect);
|
|
27
|
+
return _jsx(_Fragment, { children: children(state) });
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=HeadlessFloatingPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadlessFloatingPane.js","sourceRoot":"","sources":["../../src/layout/HeadlessFloatingPane.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAgB,MAAM,oBAAoB,CAAC;AAE3E,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,WAAmC;IAC7E,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;QACxB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,IAA2B,EAAE,EAAE;QAC7D,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1B,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACzB,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5B,OAAO;QACL,IAAI;QACJ,UAAU;QACV,YAAY;KACb,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,oBAAoB,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAA6B;IAC3F,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/C,OAAO,4BAAG,QAAQ,CAAC,KAAK,CAAC,GAAI,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface CommandItem {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
icon?: string;
|
|
7
|
+
shortcut?: string;
|
|
8
|
+
onSelect: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface CommandGroup {
|
|
11
|
+
heading: string;
|
|
12
|
+
items: CommandItem[];
|
|
13
|
+
}
|
|
14
|
+
export interface TerminalCommandPaletteProps {
|
|
15
|
+
isOpen: boolean;
|
|
16
|
+
onClose: () => void;
|
|
17
|
+
groups: CommandGroup[];
|
|
18
|
+
placeholder?: string;
|
|
19
|
+
className?: string;
|
|
20
|
+
style?: React.CSSProperties;
|
|
21
|
+
}
|
|
22
|
+
export declare function TerminalCommandPalette({ isOpen, onClose, groups, placeholder, className, style, }: TerminalCommandPaletteProps): React.JSX.Element | null;
|
|
23
|
+
//# sourceMappingURL=TerminalCommandPalette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalCommandPalette.d.ts","sourceRoot":"","sources":["../../src/palette/TerminalCommandPalette.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,OAAO,EACP,MAAM,EACN,WAA0D,EAC1D,SAAS,EACT,KAAK,GACN,EAAE,2BAA2B,4BAuL7B"}
|