@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.
Files changed (134) hide show
  1. package/LICENSE +201 -0
  2. package/dist/TermaxTerminal.d.ts +16 -0
  3. package/dist/TermaxTerminal.d.ts.map +1 -0
  4. package/dist/TermaxTerminal.js +11 -0
  5. package/dist/TermaxTerminal.js.map +1 -0
  6. package/dist/TerminalContext.d.ts +22 -0
  7. package/dist/TerminalContext.d.ts.map +1 -0
  8. package/dist/TerminalContext.js +10 -0
  9. package/dist/TerminalContext.js.map +1 -0
  10. package/dist/TerminalContextMenu.d.ts +15 -0
  11. package/dist/TerminalContextMenu.d.ts.map +1 -0
  12. package/dist/TerminalContextMenu.js +138 -0
  13. package/dist/TerminalContextMenu.js.map +1 -0
  14. package/dist/TerminalDropZone.d.ts +10 -0
  15. package/dist/TerminalDropZone.d.ts.map +1 -0
  16. package/dist/TerminalDropZone.js +40 -0
  17. package/dist/TerminalDropZone.js.map +1 -0
  18. package/dist/TerminalRoot.d.ts +10 -0
  19. package/dist/TerminalRoot.d.ts.map +1 -0
  20. package/dist/TerminalRoot.js +38 -0
  21. package/dist/TerminalRoot.js.map +1 -0
  22. package/dist/TerminalScreen.d.ts +7 -0
  23. package/dist/TerminalScreen.d.ts.map +1 -0
  24. package/dist/TerminalScreen.js +30 -0
  25. package/dist/TerminalScreen.js.map +1 -0
  26. package/dist/TerminalSearch.d.ts +8 -0
  27. package/dist/TerminalSearch.d.ts.map +1 -0
  28. package/dist/TerminalSearch.js +122 -0
  29. package/dist/TerminalSearch.js.map +1 -0
  30. package/dist/TerminalToolbar.d.ts +10 -0
  31. package/dist/TerminalToolbar.d.ts.map +1 -0
  32. package/dist/TerminalToolbar.js +34 -0
  33. package/dist/TerminalToolbar.js.map +1 -0
  34. package/dist/TerminalView.d.ts +28 -0
  35. package/dist/TerminalView.d.ts.map +1 -0
  36. package/dist/TerminalView.js +148 -0
  37. package/dist/TerminalView.js.map +1 -0
  38. package/dist/components/FileTree.d.ts +8 -0
  39. package/dist/components/FileTree.d.ts.map +1 -0
  40. package/dist/components/FileTree.js +19 -0
  41. package/dist/components/FileTree.js.map +1 -0
  42. package/dist/components/GitCommitGraph.d.ts +16 -0
  43. package/dist/components/GitCommitGraph.d.ts.map +1 -0
  44. package/dist/components/GitCommitGraph.js +11 -0
  45. package/dist/components/GitCommitGraph.js.map +1 -0
  46. package/dist/components/SpacesBar.d.ts +8 -0
  47. package/dist/components/SpacesBar.d.ts.map +1 -0
  48. package/dist/components/SpacesBar.js +12 -0
  49. package/dist/components/SpacesBar.js.map +1 -0
  50. package/dist/explorer/HeadlessFileTree.d.ts +28 -0
  51. package/dist/explorer/HeadlessFileTree.d.ts.map +1 -0
  52. package/dist/explorer/HeadlessFileTree.js +50 -0
  53. package/dist/explorer/HeadlessFileTree.js.map +1 -0
  54. package/dist/git/HeadlessGitGraph.d.ts +22 -0
  55. package/dist/git/HeadlessGitGraph.d.ts.map +1 -0
  56. package/dist/git/HeadlessGitGraph.js +13 -0
  57. package/dist/git/HeadlessGitGraph.js.map +1 -0
  58. package/dist/hooks/useTerminal.d.ts +27 -0
  59. package/dist/hooks/useTerminal.d.ts.map +1 -0
  60. package/dist/hooks/useTerminal.js +97 -0
  61. package/dist/hooks/useTerminal.js.map +1 -0
  62. package/dist/hooks/useTerminalDrop.d.ts +9 -0
  63. package/dist/hooks/useTerminalDrop.d.ts.map +1 -0
  64. package/dist/hooks/useTerminalDrop.js +59 -0
  65. package/dist/hooks/useTerminalDrop.js.map +1 -0
  66. package/dist/hooks/useTerminalSearch.d.ts +22 -0
  67. package/dist/hooks/useTerminalSearch.d.ts.map +1 -0
  68. package/dist/hooks/useTerminalSearch.js +89 -0
  69. package/dist/hooks/useTerminalSearch.js.map +1 -0
  70. package/dist/hooks/useTerminalSelection.d.ts +9 -0
  71. package/dist/hooks/useTerminalSelection.d.ts.map +1 -0
  72. package/dist/hooks/useTerminalSelection.js +46 -0
  73. package/dist/hooks/useTerminalSelection.js.map +1 -0
  74. package/dist/index.d.ts +29 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +28 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/layout/HeadlessFloatingPane.d.ts +18 -0
  79. package/dist/layout/HeadlessFloatingPane.d.ts.map +1 -0
  80. package/dist/layout/HeadlessFloatingPane.js +29 -0
  81. package/dist/layout/HeadlessFloatingPane.js.map +1 -0
  82. package/dist/palette/TerminalCommandPalette.d.ts +23 -0
  83. package/dist/palette/TerminalCommandPalette.d.ts.map +1 -0
  84. package/dist/palette/TerminalCommandPalette.js +105 -0
  85. package/dist/palette/TerminalCommandPalette.js.map +1 -0
  86. package/dist/panels/PanelContext.d.ts +25 -0
  87. package/dist/panels/PanelContext.d.ts.map +1 -0
  88. package/dist/panels/PanelContext.js +10 -0
  89. package/dist/panels/PanelContext.js.map +1 -0
  90. package/dist/panels/TerminalPanel.d.ts +17 -0
  91. package/dist/panels/TerminalPanel.d.ts.map +1 -0
  92. package/dist/panels/TerminalPanel.js +47 -0
  93. package/dist/panels/TerminalPanel.js.map +1 -0
  94. package/dist/panels/TerminalPanelGroup.d.ts +13 -0
  95. package/dist/panels/TerminalPanelGroup.d.ts.map +1 -0
  96. package/dist/panels/TerminalPanelGroup.js +167 -0
  97. package/dist/panels/TerminalPanelGroup.js.map +1 -0
  98. package/dist/panels/TerminalResizeHandle.d.ts +12 -0
  99. package/dist/panels/TerminalResizeHandle.d.ts.map +1 -0
  100. package/dist/panels/TerminalResizeHandle.js +56 -0
  101. package/dist/panels/TerminalResizeHandle.js.map +1 -0
  102. package/dist/pool/index.d.ts +2 -0
  103. package/dist/pool/index.d.ts.map +1 -0
  104. package/dist/pool/index.js +2 -0
  105. package/dist/pool/index.js.map +1 -0
  106. package/dist/pool/rendererPool.d.ts +118 -0
  107. package/dist/pool/rendererPool.d.ts.map +1 -0
  108. package/dist/pool/rendererPool.js +1281 -0
  109. package/dist/pool/rendererPool.js.map +1 -0
  110. package/dist/spaces/HeadlessSpacesBar.d.ts +21 -0
  111. package/dist/spaces/HeadlessSpacesBar.d.ts.map +1 -0
  112. package/dist/spaces/HeadlessSpacesBar.js +41 -0
  113. package/dist/spaces/HeadlessSpacesBar.js.map +1 -0
  114. package/dist/status/TerminalStatusBar.d.ts +21 -0
  115. package/dist/status/TerminalStatusBar.d.ts.map +1 -0
  116. package/dist/status/TerminalStatusBar.js +28 -0
  117. package/dist/status/TerminalStatusBar.js.map +1 -0
  118. package/dist/tabs/TerminalTab.d.ts +15 -0
  119. package/dist/tabs/TerminalTab.d.ts.map +1 -0
  120. package/dist/tabs/TerminalTab.js +57 -0
  121. package/dist/tabs/TerminalTab.js.map +1 -0
  122. package/dist/tabs/TerminalTabBar.d.ts +21 -0
  123. package/dist/tabs/TerminalTabBar.d.ts.map +1 -0
  124. package/dist/tabs/TerminalTabBar.js +57 -0
  125. package/dist/tabs/TerminalTabBar.js.map +1 -0
  126. package/dist/themes.d.ts +17 -0
  127. package/dist/themes.d.ts.map +1 -0
  128. package/dist/themes.js +153 -0
  129. package/dist/themes.js.map +1 -0
  130. package/dist/tree/TerminalTree.d.ts +19 -0
  131. package/dist/tree/TerminalTree.d.ts.map +1 -0
  132. package/dist/tree/TerminalTree.js +68 -0
  133. package/dist/tree/TerminalTree.js.map +1 -0
  134. package/package.json +53 -0
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface TerminalSearchProps {
3
+ position?: 'top-right' | 'top-left' | 'bottom-right';
4
+ className?: string;
5
+ style?: React.CSSProperties;
6
+ }
7
+ export declare function TerminalSearch({ position, className, style, }: TerminalSearchProps): React.JSX.Element | null;
8
+ //# sourceMappingURL=TerminalSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalSearch.d.ts","sourceRoot":"","sources":["../src/TerminalSearch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAsB,EACtB,SAAS,EACT,KAAK,GACN,EAAE,mBAAmB,4BAqMrB"}
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from 'react';
3
+ import { useTerminalContext } from './TerminalContext.js';
4
+ export function TerminalSearch({ position = 'top-right', className, style, }) {
5
+ const { search, theme } = useTerminalContext();
6
+ const inputRef = useRef(null);
7
+ useEffect(() => {
8
+ if (search.isOpen) {
9
+ inputRef.current?.focus();
10
+ inputRef.current?.select();
11
+ }
12
+ }, [search.isOpen]);
13
+ if (!search.isOpen)
14
+ return null;
15
+ const positionStyles = {
16
+ top: position.startsWith('top') ? 12 : undefined,
17
+ bottom: position.startsWith('bottom') ? 12 : undefined,
18
+ right: position.endsWith('right') ? 16 : undefined,
19
+ left: position.endsWith('left') ? 16 : undefined,
20
+ };
21
+ return (_jsxs("div", { className: className, style: {
22
+ position: 'absolute',
23
+ zIndex: 50,
24
+ display: 'flex',
25
+ alignItems: 'center',
26
+ gap: '6px',
27
+ padding: '6px 10px',
28
+ backgroundColor: theme.background || '#18181b',
29
+ color: theme.foreground || '#fafafa',
30
+ border: `1px solid ${theme.selectionBackground || 'rgba(255, 255, 255, 0.2)'}`,
31
+ borderRadius: '8px',
32
+ boxShadow: '0 8px 24px rgba(0, 0, 0, 0.4)',
33
+ backdropFilter: 'blur(12px)',
34
+ fontSize: '12px',
35
+ ...positionStyles,
36
+ ...style,
37
+ }, children: [_jsx("input", { ref: inputRef, type: "text", placeholder: "Find...", value: search.query, onChange: (e) => {
38
+ search.setQuery(e.target.value);
39
+ search.findNext(e.target.value);
40
+ }, onKeyDown: (e) => {
41
+ if (e.key === 'Enter') {
42
+ if (e.shiftKey)
43
+ search.findPrevious();
44
+ else
45
+ search.findNext();
46
+ }
47
+ else if (e.key === 'Escape') {
48
+ search.close();
49
+ }
50
+ }, style: {
51
+ background: 'rgba(255, 255, 255, 0.08)',
52
+ border: '1px solid rgba(255, 255, 255, 0.15)',
53
+ borderRadius: '4px',
54
+ color: 'inherit',
55
+ padding: '3px 8px',
56
+ fontSize: '12px',
57
+ width: '140px',
58
+ outline: 'none',
59
+ } }), search.resultCount > 0 && (_jsxs("span", { style: { fontSize: '11px', opacity: 0.65, minWidth: '40px', textAlign: 'center' }, children: [search.resultIndex + 1, "/", search.resultCount] })), search.query && search.resultCount === 0 && (_jsx("span", { style: { fontSize: '11px', opacity: 0.5, minWidth: '40px', textAlign: 'center' }, children: "0/0" })), _jsx("button", { type: "button", title: "Match Case", onClick: () => {
60
+ const next = !search.useCase;
61
+ search.setUseCase(next);
62
+ search.findNext(undefined, { caseSensitive: next });
63
+ }, style: {
64
+ background: search.useCase ? 'rgba(255, 255, 255, 0.25)' : 'transparent',
65
+ border: '1px solid rgba(255, 255, 255, 0.15)',
66
+ borderRadius: '4px',
67
+ color: 'inherit',
68
+ padding: '2px 6px',
69
+ cursor: 'pointer',
70
+ fontSize: '11px',
71
+ fontWeight: 600,
72
+ }, children: "Aa" }), _jsx("button", { type: "button", title: "Match Whole Word", onClick: () => {
73
+ const next = !search.useWord;
74
+ search.setUseWord(next);
75
+ search.findNext(undefined, { wholeWord: next });
76
+ }, style: {
77
+ background: search.useWord ? 'rgba(255, 255, 255, 0.25)' : 'transparent',
78
+ border: '1px solid rgba(255, 255, 255, 0.15)',
79
+ borderRadius: '4px',
80
+ color: 'inherit',
81
+ padding: '2px 6px',
82
+ cursor: 'pointer',
83
+ fontSize: '11px',
84
+ fontWeight: 600,
85
+ }, children: "\\b" }), _jsx("button", { type: "button", title: "Use Regular Expression", onClick: () => {
86
+ const next = !search.useRegex;
87
+ search.setUseRegex(next);
88
+ search.findNext(undefined, { regex: next });
89
+ }, style: {
90
+ background: search.useRegex ? 'rgba(255, 255, 255, 0.25)' : 'transparent',
91
+ border: '1px solid rgba(255, 255, 255, 0.15)',
92
+ borderRadius: '4px',
93
+ color: 'inherit',
94
+ padding: '2px 6px',
95
+ cursor: 'pointer',
96
+ fontSize: '11px',
97
+ fontWeight: 600,
98
+ }, children: ".*" }), _jsx("button", { type: "button", title: "Previous Match (Shift+Enter)", onClick: () => search.findPrevious(), style: {
99
+ background: 'transparent',
100
+ border: 'none',
101
+ color: 'inherit',
102
+ cursor: 'pointer',
103
+ padding: '2px 4px',
104
+ fontSize: '13px',
105
+ }, children: "\u2191" }), _jsx("button", { type: "button", title: "Next Match (Enter)", onClick: () => search.findNext(), style: {
106
+ background: 'transparent',
107
+ border: 'none',
108
+ color: 'inherit',
109
+ cursor: 'pointer',
110
+ padding: '2px 4px',
111
+ fontSize: '13px',
112
+ }, children: "\u2193" }), _jsx("button", { type: "button", title: "Close (Escape)", onClick: () => search.close(), style: {
113
+ background: 'transparent',
114
+ border: 'none',
115
+ color: 'inherit',
116
+ cursor: 'pointer',
117
+ padding: '2px 6px',
118
+ fontSize: '13px',
119
+ opacity: 0.7,
120
+ }, children: "\u2715" })] }));
121
+ }
122
+ //# sourceMappingURL=TerminalSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalSearch.js","sourceRoot":"","sources":["../src/TerminalSearch.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React, { ReactNode } from 'react';
2
+ export interface TerminalToolbarProps {
3
+ title?: string;
4
+ showTrafficLights?: boolean;
5
+ actions?: ReactNode[];
6
+ className?: string;
7
+ style?: React.CSSProperties;
8
+ }
9
+ export declare function TerminalToolbar({ title, showTrafficLights, actions, className, style, }: TerminalToolbarProps): React.JSX.Element;
10
+ //# sourceMappingURL=TerminalToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalToolbar.d.ts","sourceRoot":"","sources":["../src/TerminalToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzC,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAwB,EACxB,iBAAwB,EACxB,OAAY,EACZ,SAAS,EACT,KAAK,GACN,EAAE,oBAAoB,qBAmEtB"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useTerminalContext } from './TerminalContext.js';
3
+ export function TerminalToolbar({ title = 'termaxui ~ zsh', showTrafficLights = true, actions = [], className, style, }) {
4
+ const { clear, search, theme } = useTerminalContext();
5
+ return (_jsxs("div", { className: className, style: {
6
+ display: 'flex',
7
+ alignItems: 'center',
8
+ justifyContent: 'space-between',
9
+ height: '38px',
10
+ padding: '0 12px',
11
+ borderBottom: `1px solid ${theme.selectionBackground || 'rgba(255, 255, 255, 0.1)'}`,
12
+ backgroundColor: theme.black || '#0f1217',
13
+ userSelect: 'none',
14
+ fontSize: '12px',
15
+ ...style,
16
+ }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [showTrafficLights && (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx("span", { style: { width: 10, height: 10, borderRadius: '50%', backgroundColor: '#ff5f56' } }), _jsx("span", { style: { width: 10, height: 10, borderRadius: '50%', backgroundColor: '#ffbd2e' } }), _jsx("span", { style: { width: 10, height: 10, borderRadius: '50%', backgroundColor: '#27c93f' } })] })), _jsx("span", { style: { fontWeight: 500, opacity: 0.85, marginLeft: showTrafficLights ? 6 : 0 }, children: title })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [actions, _jsx("button", { type: "button", onClick: () => search.toggle(), style: {
17
+ padding: '3px 8px',
18
+ fontSize: '11px',
19
+ borderRadius: '4px',
20
+ border: '1px solid rgba(255, 255, 255, 0.15)',
21
+ background: search.isOpen ? 'rgba(255, 255, 255, 0.2)' : 'transparent',
22
+ color: 'inherit',
23
+ cursor: 'pointer',
24
+ }, children: "Find" }), _jsx("button", { type: "button", onClick: () => clear(), style: {
25
+ padding: '3px 8px',
26
+ fontSize: '11px',
27
+ borderRadius: '4px',
28
+ border: '1px solid rgba(255, 255, 255, 0.15)',
29
+ background: 'transparent',
30
+ color: 'inherit',
31
+ cursor: 'pointer',
32
+ }, children: "Clear" })] })] }));
33
+ }
34
+ //# sourceMappingURL=TerminalToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalToolbar.js","sourceRoot":"","sources":["../src/TerminalToolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU1D,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,GAAG,gBAAgB,EACxB,iBAAiB,GAAG,IAAI,EACxB,OAAO,GAAG,EAAE,EACZ,SAAS,EACT,KAAK,GACgB;IACrB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAEtD,OAAO,CACL,eACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,eAAe;YAC/B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,QAAQ;YACjB,YAAY,EAAE,aAAa,KAAK,CAAC,mBAAmB,IAAI,0BAA0B,EAAE;YACpF,eAAe,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS;YACzC,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,MAAM;YAChB,GAAG,KAAK;SACT,aAED,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAC9D,iBAAiB,IAAI,CACpB,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAC/D,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,GAAI,EAC3F,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,GAAI,EAC3F,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,GAAI,IACvF,CACP,EACD,eAAM,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YACnF,KAAK,GACD,IACH,EAEN,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAC9D,OAAO,EACR,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAC9B,KAAK,EAAE;4BACL,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,MAAM;4BAChB,YAAY,EAAE,KAAK;4BACnB,MAAM,EAAE,qCAAqC;4BAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,aAAa;4BACtE,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,SAAS;yBAClB,qBAGM,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EACtB,KAAK,EAAE;4BACL,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,MAAM;4BAChB,YAAY,EAAE,KAAK;4BACnB,MAAM,EAAE,qCAAqC;4BAC7C,UAAU,EAAE,aAAa;4BACzB,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,SAAS;yBAClB,sBAGM,IACL,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { Terminal, type ITerminalOptions, type TerminalTheme } from "@termaxjs/web-ui";
3
+ import { FitAddon } from "@termaxjs/web-addons";
4
+ import type { IPtyAdapter } from "@termaxjs/web-adapter";
5
+ export interface TerminalViewHandle {
6
+ readonly terminal: Terminal | null;
7
+ readonly fitAddon: FitAddon | null;
8
+ focus(): void;
9
+ write(data: string | Uint8Array): void;
10
+ clear(): void;
11
+ fit(): void;
12
+ }
13
+ export interface TerminalViewProps {
14
+ options?: ITerminalOptions;
15
+ theme?: TerminalTheme;
16
+ adapter?: IPtyAdapter;
17
+ className?: string;
18
+ style?: React.CSSProperties;
19
+ onData?: (data: string) => void;
20
+ onMount?: (term: Terminal, fitAddon: FitAddon) => void;
21
+ }
22
+ export declare const TerminalView: React.ForwardRefExoticComponent<TerminalViewProps & React.RefAttributes<TerminalViewHandle>>;
23
+ export declare function useTerminal(options?: ITerminalOptions, adapter?: IPtyAdapter): {
24
+ containerRef: React.RefObject<HTMLDivElement | null>;
25
+ term: React.RefObject<Terminal | null>;
26
+ fit: React.RefObject<FitAddon | null>;
27
+ };
28
+ //# sourceMappingURL=TerminalView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalView.d.ts","sourceRoot":"","sources":["../src/TerminalView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACvC,KAAK,IAAI,IAAI,CAAC;IACd,GAAG,IAAI,IAAI,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;CACxD;AAED,eAAO,MAAM,YAAY,8FAkHxB,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,WAAW;;;;EAiE5E"}
@@ -0,0 +1,148 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { useEffect, useRef } from "react";
3
+ import { Terminal } from "@termaxjs/web-ui";
4
+ import { FitAddon } from "@termaxjs/web-addons";
5
+ export const TerminalView = React.forwardRef(function TerminalView({ options, theme, adapter, className, style, onData, onMount, }, ref) {
6
+ const containerRef = useRef(null);
7
+ const termRef = useRef(null);
8
+ const fitRef = useRef(null);
9
+ React.useImperativeHandle(ref, () => ({
10
+ get terminal() {
11
+ return termRef.current;
12
+ },
13
+ get fitAddon() {
14
+ return fitRef.current;
15
+ },
16
+ focus: () => termRef.current?.focus(),
17
+ write: (data) => termRef.current?.write(data),
18
+ clear: () => termRef.current?.clear(),
19
+ fit: () => fitRef.current?.fit(),
20
+ }), []);
21
+ // biome-ignore lint/correctness/useExhaustiveDependencies: terminal lifecycle is mount-once by design; options and callbacks must not recreate the terminal.
22
+ useEffect(() => {
23
+ if (!containerRef.current)
24
+ return;
25
+ const term = new Terminal(options);
26
+ const fit = new FitAddon();
27
+ term.loadAddon(fit);
28
+ term.open(containerRef.current);
29
+ fit.fit();
30
+ termRef.current = term;
31
+ fitRef.current = fit;
32
+ if (onData) {
33
+ term.onData(onData);
34
+ }
35
+ if (onMount) {
36
+ onMount(term, fit);
37
+ }
38
+ let ptyId = null;
39
+ let adapterDataDisposer = null;
40
+ let adapterExitDisposer = null;
41
+ let termDataDisposer = null;
42
+ let termResizeDisposer = null;
43
+ if (adapter) {
44
+ adapter
45
+ .spawn({ cols: term.cols, rows: term.rows })
46
+ .then((id) => {
47
+ ptyId = id;
48
+ adapterDataDisposer = adapter.onData(id, (data) => {
49
+ term.write(data);
50
+ });
51
+ if (adapter.onExit) {
52
+ adapterExitDisposer = adapter.onExit(id, () => { });
53
+ }
54
+ termDataDisposer = term.onData((data) => {
55
+ adapter.write(id, data);
56
+ });
57
+ termResizeDisposer = term.onResize(({ cols, rows }) => {
58
+ adapter.resize(id, cols, rows);
59
+ });
60
+ })
61
+ .catch((err) => {
62
+ console.error("[TerminalView] adapter spawn failed:", err);
63
+ });
64
+ }
65
+ const onResize = () => fit.fit();
66
+ window.addEventListener("resize", onResize);
67
+ return () => {
68
+ window.removeEventListener("resize", onResize);
69
+ adapterDataDisposer?.();
70
+ adapterExitDisposer?.();
71
+ termDataDisposer?.dispose();
72
+ termResizeDisposer?.dispose();
73
+ if (ptyId !== null && adapter) {
74
+ adapter.kill(ptyId).catch(() => { });
75
+ }
76
+ term.dispose();
77
+ termRef.current = null;
78
+ fitRef.current = null;
79
+ };
80
+ }, [adapter]);
81
+ useEffect(() => {
82
+ if (theme && termRef.current) {
83
+ termRef.current.updateTheme(theme);
84
+ }
85
+ }, [theme]);
86
+ return (_jsx("div", { ref: containerRef, className: className, style: { width: "100%", height: "100%", overflow: "hidden", position: "relative", ...style } }));
87
+ });
88
+ export function useTerminal(options, adapter) {
89
+ const containerRef = useRef(null);
90
+ const termRef = useRef(null);
91
+ const fitRef = useRef(null);
92
+ // biome-ignore lint/correctness/useExhaustiveDependencies: terminal lifecycle is mount-once by design; options must not recreate the terminal.
93
+ useEffect(() => {
94
+ if (!containerRef.current)
95
+ return;
96
+ const term = new Terminal(options);
97
+ const fit = new FitAddon();
98
+ term.loadAddon(fit);
99
+ term.open(containerRef.current);
100
+ fit.fit();
101
+ termRef.current = term;
102
+ fitRef.current = fit;
103
+ let ptyId = null;
104
+ let adapterDataDisposer = null;
105
+ let adapterExitDisposer = null;
106
+ let termDataDisposer = null;
107
+ let termResizeDisposer = null;
108
+ if (adapter) {
109
+ adapter
110
+ .spawn({ cols: term.cols, rows: term.rows })
111
+ .then((id) => {
112
+ ptyId = id;
113
+ adapterDataDisposer = adapter.onData(id, (data) => {
114
+ term.write(data);
115
+ });
116
+ if (adapter.onExit) {
117
+ adapterExitDisposer = adapter.onExit(id, () => { });
118
+ }
119
+ termDataDisposer = term.onData((data) => {
120
+ adapter.write(id, data);
121
+ });
122
+ termResizeDisposer = term.onResize(({ cols, rows }) => {
123
+ adapter.resize(id, cols, rows);
124
+ });
125
+ })
126
+ .catch((err) => {
127
+ console.error("[useTerminal] adapter spawn failed:", err);
128
+ });
129
+ }
130
+ const onResize = () => fit.fit();
131
+ window.addEventListener("resize", onResize);
132
+ return () => {
133
+ window.removeEventListener("resize", onResize);
134
+ adapterDataDisposer?.();
135
+ adapterExitDisposer?.();
136
+ termDataDisposer?.dispose();
137
+ termResizeDisposer?.dispose();
138
+ if (ptyId !== null && adapter) {
139
+ adapter.kill(ptyId).catch(() => { });
140
+ }
141
+ term.dispose();
142
+ termRef.current = null;
143
+ fitRef.current = null;
144
+ };
145
+ }, [adapter]);
146
+ return { containerRef, term: termRef, fit: fitRef };
147
+ }
148
+ //# sourceMappingURL=TerminalView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalView.js","sourceRoot":"","sources":["../src/TerminalView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { UseFileTreeOptions } from "../index.js";
3
+ export interface FileTreeProps extends UseFileTreeOptions {
4
+ className?: string;
5
+ style?: React.CSSProperties;
6
+ }
7
+ export declare function FileTree({ initialRoot, onSelect, className, style }: FileTreeProps): React.JSX.Element;
8
+ //# sourceMappingURL=FileTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileTree.d.ts","sourceRoot":"","sources":["../../src/components/FileTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAiC,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGhF,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,QAAQ,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,qBA6ClF"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useFileTree, HeadlessFileTree } from "../index.js";
3
+ export function FileTree({ initialRoot, onSelect, className, style }) {
4
+ const tree = useFileTree({ initialRoot, onSelect });
5
+ return (_jsx(HeadlessFileTree, { tree: tree, className: className || "termax-file-tree select-none font-mono text-sm py-1", children: ({ row, isSelected, onToggle, onSelect: handleSelect }) => {
6
+ const activateRow = () => {
7
+ if (row.node.isDir)
8
+ onToggle();
9
+ handleSelect();
10
+ };
11
+ return (_jsxs("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": row.node.isDir ? row.isExpanded : undefined, tabIndex: 0, onClick: activateRow, onKeyDown: (e) => {
12
+ if (e.key === 'Enter' || e.key === ' ') {
13
+ e.preventDefault();
14
+ activateRow();
15
+ }
16
+ }, style: { paddingLeft: `${row.depth * 14 + 8}px` }, className: `flex items-center gap-1.5 py-1 px-2 cursor-pointer transition-colors ${isSelected ? "bg-accent/40 text-foreground font-medium" : "text-muted-foreground hover:bg-accent/20 hover:text-foreground"}`, children: [_jsx("span", { className: "text-xs opacity-70", children: row.node.isDir ? (row.isExpanded ? "📂" : "📁") : "📄" }), _jsx("span", { className: "truncate", children: row.node.name }), row.node.gitStatus && (_jsx("span", { className: "ml-auto text-[10px] uppercase font-bold text-amber-500", children: row.node.gitStatus[0] }))] }));
17
+ } }));
18
+ }
19
+ //# sourceMappingURL=FileTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileTree.js","sourceRoot":"","sources":["../../src/components/FileTree.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AAQhF,MAAM,UAAU,QAAQ,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAiB;IACjF,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEpD,OAAO,CACL,KAAC,gBAAgB,IACf,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,IAAI,qDAAqD,YAE5E,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE;YACzD,MAAM,WAAW,GAAG,GAAG,EAAE;gBACvB,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK;oBAAE,QAAQ,EAAE,CAAC;gBAC/B,YAAY,EAAE,CAAC;YACjB,CAAC,CAAC;YACF,OAAO,CACP,eACE,IAAI,EAAC,UAAU,mBACA,UAAU,mBACV,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAC1D,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;wBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,WAAW,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EACjD,SAAS,EAAE,wEACT,UAAU,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,gEAC5D,EAAE,aAEF,eAAM,SAAS,EAAC,oBAAoB,YACjC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAClD,EACP,eAAM,SAAS,EAAC,UAAU,YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAQ,EAChD,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CACrB,eAAM,SAAS,EAAC,wDAAwD,YACrE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GACjB,CACR,IACG,CACL,CAAC;QACJ,CAAC,GACgB,CACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ export interface GitCommitGraphProps {
3
+ commits: Array<{
4
+ sha: string;
5
+ parents: string[];
6
+ author: string;
7
+ email: string;
8
+ timestamp: number;
9
+ message: string;
10
+ branchName?: string;
11
+ }>;
12
+ onSelectCommit?: (sha: string) => void;
13
+ className?: string;
14
+ }
15
+ export declare function GitCommitGraph({ commits, onSelectCommit, className }: GitCommitGraphProps): React.JSX.Element;
16
+ //# sourceMappingURL=GitCommitGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitCommitGraph.d.ts","sourceRoot":"","sources":["../../src/components/GitCommitGraph.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3I,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,mBAAmB,qBAiCzF"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useGitGraph, HeadlessGitCommitGraph } from "../index.js";
3
+ const LANE_COLORS = ["#3b82f6", "#10b981", "#f59e0b", "#ec4899", "#8b5cf6", "#06b6d4"];
4
+ export function GitCommitGraph({ commits, onSelectCommit, className }) {
5
+ const graphCommits = useGitGraph(commits);
6
+ return (_jsx(HeadlessGitCommitGraph, { commits: graphCommits, className: className || "termax-git-graph flex flex-col font-mono text-xs divide-y divide-border/20", children: ({ commit }) => {
7
+ const laneColor = LANE_COLORS[commit.lane % LANE_COLORS.length];
8
+ return (_jsxs("button", { type: "button", "aria-label": `Commit ${commit.sha.slice(0, 7)}: ${commit.message}`, onClick: () => onSelectCommit?.(commit.sha), className: "flex items-center gap-3 py-1.5 px-3 hover:bg-accent/20 cursor-pointer transition-colors w-full text-left bg-transparent border-none font-inherit", children: [_jsx("div", { className: "flex items-center", style: { width: `${(commit.lane + 1) * 16}px` }, children: _jsx("div", { className: "size-2 rounded-full ring-2 ring-background", style: { backgroundColor: laneColor, marginLeft: `${commit.lane * 16}px` } }) }), _jsx("span", { className: "text-[11px] font-bold opacity-60", children: commit.sha.slice(0, 7) }), _jsx("span", { className: "truncate flex-1 font-medium", children: commit.message }), _jsx("span", { className: "text-[11px] opacity-50", children: commit.author })] }, commit.sha));
9
+ } }));
10
+ }
11
+ //# sourceMappingURL=GitCommitGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitCommitGraph.js","sourceRoot":"","sources":["../../src/components/GitCommitGraph.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQlE,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAEvF,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAuB;IACxF,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAE1C,OAAO,CACL,KAAC,sBAAsB,IACrB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,SAAS,IAAI,4EAA4E,YAEnG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACd,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAChE,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,gBAED,UAAU,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,EACjE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAC3C,SAAS,EAAC,kJAAkJ,aAG5J,cAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,YAChF,cACE,SAAS,EAAC,4CAA4C,EACtD,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,GAC1E,GACE,EACN,eAAM,SAAS,EAAC,kCAAkC,YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAQ,EAClF,eAAM,SAAS,EAAC,6BAA6B,YAAE,MAAM,CAAC,OAAO,GAAQ,EACrE,eAAM,SAAS,EAAC,wBAAwB,YAAE,MAAM,CAAC,MAAM,GAAQ,KAd1D,MAAM,CAAC,GAAG,CAeR,CACV,CAAC;QACJ,CAAC,GACsB,CAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { SpaceMeta } from "@termaxjs/web-core";
3
+ export interface SpacesBarProps {
4
+ initialSpaces?: SpaceMeta[];
5
+ className?: string;
6
+ }
7
+ export declare function SpacesBar({ initialSpaces, className }: SpacesBarProps): React.JSX.Element;
8
+ //# sourceMappingURL=SpacesBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpacesBar.d.ts","sourceRoot":"","sources":["../../src/components/SpacesBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,cAAc,qBAuCrE"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useSpaces, HeadlessSpacesBar } from "../index.js";
3
+ export function SpacesBar({ initialSpaces, className }) {
4
+ const spaces = useSpaces(initialSpaces);
5
+ return (_jsx(HeadlessSpacesBar, { spaces: spaces, className: className || "termax-spaces-bar flex items-center gap-1 p-1 bg-background border-b border-border/40 text-xs", children: ({ space, isActive, onSelect, onDelete }) => (_jsxs("button", { type: "button", "aria-pressed": isActive, "aria-label": `Space ${space.name}`, onClick: onSelect, className: `group flex items-center gap-1.5 py-1 px-2.5 rounded-md cursor-pointer transition-all bg-transparent border-none font-inherit ${isActive
6
+ ? "bg-accent text-accent-foreground font-semibold shadow-xs"
7
+ : "text-muted-foreground hover:bg-accent/40 hover:text-foreground"}`, children: [_jsx("span", { children: space.icon || "🪐" }), _jsx("span", { children: space.name }), spaces.spaces.length > 1 && (_jsx("button", { type: "button", "aria-label": `Delete space ${space.name}`, onClick: (e) => {
8
+ e.stopPropagation();
9
+ onDelete();
10
+ }, className: "opacity-0 group-hover:opacity-100 hover:text-destructive text-[10px] ml-1 transition-opacity", children: "\u2715" }))] })) }));
11
+ }
12
+ //# sourceMappingURL=SpacesBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpacesBar.js","sourceRoot":"","sources":["../../src/components/SpacesBar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQ3D,MAAM,UAAU,SAAS,CAAC,EAAE,aAAa,EAAE,SAAS,EAAkB;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAExC,OAAO,CACL,KAAC,iBAAiB,IAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,IAAI,+FAA+F,YAEtH,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAC5C,kBACE,IAAI,EAAC,QAAQ,kBACC,QAAQ,gBACV,SAAS,KAAK,CAAC,IAAI,EAAE,EACjC,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,gIACT,QAAQ;gBACN,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,gEACN,EAAE,aAEF,yBAAO,KAAK,CAAC,IAAI,IAAI,IAAI,GAAQ,EACjC,yBAAO,KAAK,CAAC,IAAI,GAAQ,EACxB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,iBACE,IAAI,EAAC,QAAQ,gBACD,gBAAgB,KAAK,CAAC,IAAI,EAAE,EACxC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wBACb,CAAC,CAAC,eAAe,EAAE,CAAC;wBACpB,QAAQ,EAAE,CAAC;oBACb,CAAC,EACD,SAAS,EAAC,8FAA8F,uBAGjG,CACV,IACM,CACV,GACiB,CACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { type FileNode, type VisibleFileRow } from "@termaxjs/web-core";
3
+ export interface UseFileTreeOptions {
4
+ initialRoot?: FileNode;
5
+ onSelect?: (path: string) => void;
6
+ }
7
+ export declare function useFileTree(options?: UseFileTreeOptions): {
8
+ rows: VisibleFileRow[];
9
+ selectedPath: string | null;
10
+ setRoot: (root: FileNode) => void;
11
+ toggleExpand: (path: string) => void;
12
+ select: (path: string | null) => void;
13
+ setFilter: (query: string) => void;
14
+ expandAll: () => void;
15
+ collapseAll: () => void;
16
+ };
17
+ export interface HeadlessFileTreeProps {
18
+ tree: ReturnType<typeof useFileTree>;
19
+ children: (props: {
20
+ row: VisibleFileRow;
21
+ isSelected: boolean;
22
+ onToggle: () => void;
23
+ onSelect: () => void;
24
+ }) => React.ReactNode;
25
+ className?: string;
26
+ }
27
+ export declare function HeadlessFileTree({ tree, children, className }: HeadlessFileTreeProps): React.JSX.Element;
28
+ //# sourceMappingURL=HeadlessFileTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadlessFileTree.d.ts","sourceRoot":"","sources":["../../src/explorer/HeadlessFileTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAoC,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1G,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB;;;oBAKvB,QAAQ;yBAKH,MAAM;mBAKZ,MAAM,GAAG,IAAI;uBAMT,MAAM;;;EAkB7C;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,cAAc,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/H,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,qBAAqB,qBAkBpF"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { useState, useMemo, useCallback } from "react";
3
+ import { HeadlessFileTree as CoreFileTree } from "@termaxjs/web-core";
4
+ export function useFileTree(options = {}) {
5
+ const [treeInstance] = useState(() => new CoreFileTree(options.initialRoot));
6
+ const [, setVersion] = useState(0);
7
+ const rerender = useCallback(() => setVersion((v) => v + 1), []);
8
+ const setRoot = useCallback((root) => {
9
+ treeInstance.setRoot(root);
10
+ rerender();
11
+ }, [treeInstance, rerender]);
12
+ const toggleExpand = useCallback((path) => {
13
+ treeInstance.toggleExpand(path);
14
+ rerender();
15
+ }, [treeInstance, rerender]);
16
+ const select = useCallback((path) => {
17
+ treeInstance.select(path);
18
+ if (path && options.onSelect)
19
+ options.onSelect(path);
20
+ rerender();
21
+ }, [treeInstance, rerender, options]);
22
+ const setFilter = useCallback((query) => {
23
+ treeInstance.setFilter(query);
24
+ rerender();
25
+ }, [treeInstance, rerender]);
26
+ // biome-ignore lint/correctness/useExhaustiveDependencies: treeInstance mutates in place; the rerender tick is what invalidates this memo.
27
+ const rows = useMemo(() => treeInstance.getVisibleRows(), [treeInstance, rerender]);
28
+ return {
29
+ rows,
30
+ selectedPath: treeInstance.getSelected(),
31
+ setRoot,
32
+ toggleExpand,
33
+ select,
34
+ setFilter,
35
+ expandAll: () => { treeInstance.expandAll(); rerender(); },
36
+ collapseAll: () => { treeInstance.collapseAll(); rerender(); },
37
+ };
38
+ }
39
+ export function HeadlessFileTree({ tree, children, className }) {
40
+ return (_jsx("div", { className: className, role: "tree", tabIndex: 0, children: tree.rows.map((row) => {
41
+ const isSelected = tree.selectedPath === row.node.path;
42
+ return (_jsx(React.Fragment, { children: children({
43
+ row,
44
+ isSelected,
45
+ onToggle: () => tree.toggleExpand(row.node.path),
46
+ onSelect: () => tree.select(row.node.path),
47
+ }) }, row.node.path));
48
+ }) }));
49
+ }
50
+ //# sourceMappingURL=HeadlessFileTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadlessFileTree.js","sourceRoot":"","sources":["../../src/explorer/HeadlessFileTree.tsx"],"names":[],"mappings":"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"}