@industry-theme/xterm-terminal-panel 0.1.10 → 0.2.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/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { ThemedTerminal } from './src/components/ThemedTerminal';
2
2
  export { ThemedTerminalWithProvider } from './src/components/ThemedTerminalWithProvider';
3
- export type { ThemedTerminalProps, ThemedTerminalRef, TerminalHeaderBadge, TerminalOverlayState, TerminalScrollPosition, } from './src/types/terminal.types';
3
+ export type { ThemedTerminalProps, ThemedTerminalRef, TerminalHeaderBadge, TerminalOverlayState, TerminalScrollPosition, LinkClickModifiers, } from './src/types/terminal.types';
4
4
  export { useThemedTerminal } from './src/hooks/useThemedTerminal';
5
5
  export type { UseThemedTerminalReturn } from './src/hooks/useThemedTerminal';
6
6
  export { createTerminalTheme, getTerminalCSSVariables, } from './src/utils/terminalTheme';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAGzF,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAG7E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAG9E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG7E,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAO3B,YAAY,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAG3D,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAGzF,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAG7E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAG9E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG7E,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAO3B,YAAY,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAG3D,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,9 @@
1
1
  // src/components/ThemedTerminal.tsx
2
+ import {
3
+ DATA_TYPES,
4
+ sanitizePath,
5
+ useDropZone
6
+ } from "@principal-ade/panel-framework-core";
2
7
  import { FitAddon } from "@xterm/addon-fit";
3
8
  import { SearchAddon } from "@xterm/addon-search";
4
9
  import { WebLinksAddon } from "@xterm/addon-web-links";
@@ -13,6 +18,7 @@ import {
13
18
  } from "lucide-react";
14
19
  import {
15
20
  forwardRef,
21
+ useCallback,
16
22
  useEffect,
17
23
  useImperativeHandle,
18
24
  useRef,
@@ -80,6 +86,7 @@ var ThemedTerminal = forwardRef(({
80
86
  onClose,
81
87
  onDestroy,
82
88
  onPopOut,
89
+ onShortcut,
83
90
  overlayState,
84
91
  cursorBlink = true,
85
92
  cursorStyle = "block",
@@ -98,6 +105,37 @@ var ThemedTerminal = forwardRef(({
98
105
  const scrollDebounceRef = useRef(null);
99
106
  const isVisibleRef = useRef(isVisible);
100
107
  const isScrollLockedRef = useRef(true);
108
+ const onShortcutRef = useRef(onShortcut);
109
+ useEffect(() => {
110
+ onShortcutRef.current = onShortcut;
111
+ }, [onShortcut]);
112
+ const handleDroppedContent = useCallback((content) => {
113
+ if (terminal) {
114
+ terminal.paste(content);
115
+ terminal.focus();
116
+ }
117
+ }, [terminal]);
118
+ const { isDragOver, ...dropZoneProps } = useDropZone({
119
+ handlers: [
120
+ {
121
+ dataType: [DATA_TYPES.FILE_PATH, DATA_TYPES.DIRECTORY_PATH],
122
+ onDrop: (data) => {
123
+ const safePath = sanitizePath(data.primaryData);
124
+ handleDroppedContent(safePath);
125
+ }
126
+ },
127
+ {
128
+ dataType: DATA_TYPES.TEXT_SELECTION,
129
+ onDrop: (data) => {
130
+ handleDroppedContent(data.primaryData);
131
+ }
132
+ }
133
+ ],
134
+ onPlainTextDrop: (text) => {
135
+ handleDroppedContent(text);
136
+ },
137
+ showVisualFeedback: true
138
+ });
101
139
  useEffect(() => {
102
140
  isVisibleRef.current = isVisible;
103
141
  }, [isVisible]);
@@ -251,6 +289,12 @@ var ThemedTerminal = forwardRef(({
251
289
  });
252
290
  term.attachCustomKeyEventHandler((event) => {
253
291
  if (event.metaKey && event.shiftKey && event.key.toLowerCase() === "p") {
292
+ if (onShortcutRef.current) {
293
+ onShortcutRef.current({
294
+ shortcut: "command-palette",
295
+ originalEvent: event
296
+ });
297
+ }
254
298
  return false;
255
299
  }
256
300
  return true;
@@ -267,7 +311,12 @@ var ThemedTerminal = forwardRef(({
267
311
  const webLinksAddon = new WebLinksAddon((event, uri) => {
268
312
  event.preventDefault();
269
313
  if (onLinkClick) {
270
- onLinkClick(uri);
314
+ onLinkClick(uri, {
315
+ shiftKey: event.shiftKey,
316
+ metaKey: event.metaKey,
317
+ ctrlKey: event.ctrlKey,
318
+ altKey: event.altKey
319
+ });
271
320
  }
272
321
  });
273
322
  term.loadAddon(webLinksAddon);
@@ -574,8 +623,9 @@ var ThemedTerminal = forwardRef(({
574
623
  })
575
624
  ]
576
625
  }),
577
- /* @__PURE__ */ jsx("div", {
626
+ /* @__PURE__ */ jsxs("div", {
578
627
  ref: terminalRef,
628
+ ...dropZoneProps,
579
629
  className: `terminal-container-fix ${scrollbarStyle === "hidden" ? "hide-scrollbar" : scrollbarStyle === "thin" ? "thin-scrollbar" : scrollbarStyle === "auto-hide" ? "auto-hide-scrollbar" : ""}`,
580
630
  style: {
581
631
  flex: 1,
@@ -585,91 +635,118 @@ var ThemedTerminal = forwardRef(({
585
635
  height: "100%",
586
636
  minHeight: 0
587
637
  },
588
- children: overlayState && /* @__PURE__ */ jsxs("div", {
589
- style: {
590
- position: "absolute",
591
- top: 0,
592
- left: 0,
593
- right: 0,
594
- bottom: 0,
595
- display: "flex",
596
- flexDirection: "column",
597
- alignItems: "center",
598
- justifyContent: "center",
599
- backgroundColor: theme.colors.background,
600
- opacity: overlayState.opacity ?? 1,
601
- gap: "16px",
602
- padding: "32px",
603
- zIndex: 10
604
- },
605
- children: [
606
- /* @__PURE__ */ jsx(Monitor, {
607
- size: 48,
608
- color: theme.colors.textSecondary
609
- }),
610
- /* @__PURE__ */ jsx("div", {
611
- style: {
612
- fontSize: "16px",
613
- fontWeight: "500",
614
- color: theme.colors.text,
615
- textAlign: "center"
616
- },
617
- children: overlayState.message
618
- }),
619
- overlayState.subtitle && /* @__PURE__ */ jsx("div", {
620
- style: {
621
- fontSize: "14px",
622
- color: theme.colors.textSecondary,
623
- textAlign: "center",
624
- maxWidth: "400px"
625
- },
626
- children: overlayState.subtitle
627
- }),
628
- overlayState.actions && overlayState.actions.length > 0 && /* @__PURE__ */ jsx("div", {
638
+ children: [
639
+ isDragOver && /* @__PURE__ */ jsx("div", {
640
+ style: {
641
+ position: "absolute",
642
+ inset: 0,
643
+ background: "rgba(59, 130, 246, 0.1)",
644
+ border: "2px dashed #3b82f6",
645
+ borderRadius: "4px",
646
+ display: "flex",
647
+ alignItems: "center",
648
+ justifyContent: "center",
649
+ pointerEvents: "none",
650
+ zIndex: 1000
651
+ },
652
+ children: /* @__PURE__ */ jsx("div", {
629
653
  style: {
630
- display: "flex",
631
- gap: "12px",
632
- marginTop: "8px"
654
+ padding: "8px 16px",
655
+ background: "#3b82f6",
656
+ color: "white",
657
+ borderRadius: "4px",
658
+ fontSize: "13px",
659
+ fontWeight: 500
633
660
  },
634
- children: overlayState.actions.map((action) => /* @__PURE__ */ jsxs("button", {
635
- type: "button",
636
- onClick: action.onClick,
661
+ children: "Drop to insert"
662
+ })
663
+ }),
664
+ overlayState && /* @__PURE__ */ jsxs("div", {
665
+ style: {
666
+ position: "absolute",
667
+ top: 0,
668
+ left: 0,
669
+ right: 0,
670
+ bottom: 0,
671
+ display: "flex",
672
+ flexDirection: "column",
673
+ alignItems: "center",
674
+ justifyContent: "center",
675
+ backgroundColor: theme.colors.background,
676
+ opacity: overlayState.opacity ?? 1,
677
+ gap: "16px",
678
+ padding: "32px",
679
+ zIndex: 10
680
+ },
681
+ children: [
682
+ /* @__PURE__ */ jsx(Monitor, {
683
+ size: 48,
684
+ color: theme.colors.textSecondary
685
+ }),
686
+ /* @__PURE__ */ jsx("div", {
637
687
  style: {
638
- padding: "8px 16px",
639
- backgroundColor: action.primary ? theme.colors.primary : "transparent",
640
- color: action.primary ? "#ffffff" : theme.colors.text,
641
- border: action.primary ? "none" : `1px solid ${theme.colors.border}`,
642
- borderRadius: "6px",
643
- cursor: "pointer",
644
- fontSize: "14px",
688
+ fontSize: "16px",
645
689
  fontWeight: "500",
646
- display: "flex",
647
- alignItems: "center",
648
- gap: "8px",
649
- transition: "all 0.2s"
690
+ color: theme.colors.text,
691
+ textAlign: "center"
650
692
  },
651
- onMouseEnter: (e) => {
652
- if (action.primary) {
653
- e.currentTarget.style.opacity = "0.8";
654
- } else {
655
- e.currentTarget.style.backgroundColor = theme.colors.backgroundSecondary;
656
- }
693
+ children: overlayState.message
694
+ }),
695
+ overlayState.subtitle && /* @__PURE__ */ jsx("div", {
696
+ style: {
697
+ fontSize: "14px",
698
+ color: theme.colors.textSecondary,
699
+ textAlign: "center",
700
+ maxWidth: "400px"
657
701
  },
658
- onMouseLeave: (e) => {
659
- if (action.primary) {
660
- e.currentTarget.style.opacity = "1";
661
- } else {
662
- e.currentTarget.style.backgroundColor = "transparent";
663
- }
702
+ children: overlayState.subtitle
703
+ }),
704
+ overlayState.actions && overlayState.actions.length > 0 && /* @__PURE__ */ jsx("div", {
705
+ style: {
706
+ display: "flex",
707
+ gap: "12px",
708
+ marginTop: "8px"
664
709
  },
665
- children: [
666
- action.icon,
667
- action.label
668
- ]
669
- }, action.label))
670
- })
671
- ]
672
- })
710
+ children: overlayState.actions.map((action) => /* @__PURE__ */ jsxs("button", {
711
+ type: "button",
712
+ onClick: action.onClick,
713
+ style: {
714
+ padding: "8px 16px",
715
+ backgroundColor: action.primary ? theme.colors.primary : "transparent",
716
+ color: action.primary ? "#ffffff" : theme.colors.text,
717
+ border: action.primary ? "none" : `1px solid ${theme.colors.border}`,
718
+ borderRadius: "6px",
719
+ cursor: "pointer",
720
+ fontSize: "14px",
721
+ fontWeight: "500",
722
+ display: "flex",
723
+ alignItems: "center",
724
+ gap: "8px",
725
+ transition: "all 0.2s"
726
+ },
727
+ onMouseEnter: (e) => {
728
+ if (action.primary) {
729
+ e.currentTarget.style.opacity = "0.8";
730
+ } else {
731
+ e.currentTarget.style.backgroundColor = theme.colors.backgroundSecondary;
732
+ }
733
+ },
734
+ onMouseLeave: (e) => {
735
+ if (action.primary) {
736
+ e.currentTarget.style.opacity = "1";
737
+ } else {
738
+ e.currentTarget.style.backgroundColor = "transparent";
739
+ }
740
+ },
741
+ children: [
742
+ action.icon,
743
+ action.label
744
+ ]
745
+ }, action.label))
746
+ })
747
+ ]
748
+ })
749
+ ]
673
750
  })
674
751
  ]
675
752
  });
@@ -1080,7 +1157,7 @@ import { useTheme as useTheme4 } from "@principal-ade/industry-theme";
1080
1157
  import { Terminal as TerminalIcon2, X as X2, Plus, Lock as Lock2, Unlock as Unlock2, Box, Boxes } from "lucide-react";
1081
1158
  import React, {
1082
1159
  useState as useState3,
1083
- useCallback,
1160
+ useCallback as useCallback2,
1084
1161
  useEffect as useEffect3,
1085
1162
  useRef as useRef3
1086
1163
  } from "react";
@@ -1099,7 +1176,7 @@ function TerminalTabContentInner(props, ref) {
1099
1176
  const [shouldRenderTerminal, setShouldRenderTerminal] = useState3(true);
1100
1177
  const [ownerWindowId, setOwnerWindowId] = useState3(null);
1101
1178
  const needsRefreshOnResizeRef = useRef3(false);
1102
- const claimAndConnect = useCallback(async (targetSessionId, force = false) => {
1179
+ const claimAndConnect = useCallback2(async (targetSessionId, force = false) => {
1103
1180
  try {
1104
1181
  if (actions.claimTerminalOwnership) {
1105
1182
  await actions.claimTerminalOwnership(targetSessionId, force);
@@ -1178,17 +1255,17 @@ function TerminalTabContentInner(props, ref) {
1178
1255
  unsubscribe();
1179
1256
  };
1180
1257
  }, [localSessionId, isInitialized, actions, shouldRenderTerminal]);
1181
- const handleData = useCallback((data) => {
1258
+ const handleData = useCallback2((data) => {
1182
1259
  if (localSessionId && actions.writeToTerminal) {
1183
1260
  actions.writeToTerminal(localSessionId, data);
1184
1261
  }
1185
1262
  }, [localSessionId, actions]);
1186
- const handleResize = useCallback((cols, rows) => {
1263
+ const handleResize = useCallback2((cols, rows) => {
1187
1264
  if (localSessionId && actions.resizeTerminal) {
1188
1265
  actions.resizeTerminal(localSessionId, cols, rows);
1189
1266
  }
1190
1267
  }, [localSessionId, actions]);
1191
- const handleReady = useCallback((cols, rows) => {
1268
+ const handleReady = useCallback2((cols, rows) => {
1192
1269
  if (localSessionId && actions.resizeTerminal) {
1193
1270
  const shouldForce = needsRefreshOnResizeRef.current;
1194
1271
  if (shouldForce) {
@@ -1197,7 +1274,7 @@ function TerminalTabContentInner(props, ref) {
1197
1274
  actions.resizeTerminal(localSessionId, cols, rows, shouldForce);
1198
1275
  }
1199
1276
  }, [localSessionId, actions]);
1200
- const handleLinkClick = useCallback((url) => {
1277
+ const handleLinkClick = useCallback2((url, modifiers) => {
1201
1278
  if (localSessionId) {
1202
1279
  events.emit({
1203
1280
  type: "terminal:link-click",
@@ -1205,7 +1282,11 @@ function TerminalTabContentInner(props, ref) {
1205
1282
  timestamp: Date.now(),
1206
1283
  payload: {
1207
1284
  url,
1208
- sessionId: localSessionId
1285
+ sessionId: localSessionId,
1286
+ shiftKey: modifiers.shiftKey,
1287
+ metaKey: modifiers.metaKey,
1288
+ ctrlKey: modifiers.ctrlKey,
1289
+ altKey: modifiers.altKey
1209
1290
  }
1210
1291
  });
1211
1292
  }
@@ -1224,20 +1305,33 @@ function TerminalTabContentInner(props, ref) {
1224
1305
  unsubscribe();
1225
1306
  };
1226
1307
  }, [localSessionId, actions]);
1227
- const handleTakeControl = useCallback(async () => {
1308
+ const handleTakeControl = useCallback2(async () => {
1228
1309
  if (!localSessionId) {
1229
1310
  return;
1230
1311
  }
1231
1312
  await claimAndConnect(localSessionId, true);
1232
1313
  }, [localSessionId, claimAndConnect]);
1233
- const handleScrollPositionChange = useCallback((position) => {
1314
+ const handleScrollPositionChange = useCallback2((position) => {
1234
1315
  setScrollPosition(position);
1235
1316
  onScrollPositionChange?.(tab.id, position);
1236
1317
  }, [tab.id, onScrollPositionChange]);
1237
- const handleScrollToBottom = useCallback(() => {
1318
+ const handleShortcut = useCallback2((shortcutEvent) => {
1319
+ if (localSessionId) {
1320
+ events.emit({
1321
+ type: "terminal:shortcut",
1322
+ source: "TabbedTerminalPanel",
1323
+ timestamp: Date.now(),
1324
+ payload: {
1325
+ shortcut: shortcutEvent.shortcut,
1326
+ sessionId: localSessionId
1327
+ }
1328
+ });
1329
+ }
1330
+ }, [localSessionId, events]);
1331
+ const handleScrollToBottom = useCallback2(() => {
1238
1332
  terminalRef.current?.scrollToBottom();
1239
1333
  }, []);
1240
- const handleToggleScrollLock = useCallback(() => {
1334
+ const handleToggleScrollLock = useCallback2(() => {
1241
1335
  if (scrollPosition.isScrollLocked) {
1242
1336
  const terminal = terminalRef.current?.getTerminal();
1243
1337
  if (terminal) {
@@ -1289,6 +1383,7 @@ function TerminalTabContentInner(props, ref) {
1289
1383
  onReady: shouldRenderTerminal ? handleReady : undefined,
1290
1384
  onLinkClick: shouldRenderTerminal ? handleLinkClick : undefined,
1291
1385
  onScrollPositionChange: shouldRenderTerminal ? handleScrollPositionChange : undefined,
1386
+ onShortcut: handleShortcut,
1292
1387
  hideHeader: true,
1293
1388
  autoFocus: isActive && shouldRenderTerminal,
1294
1389
  isVisible: isVisible && isActive,
@@ -1342,7 +1437,7 @@ var TabbedTerminalPanelInner = ({
1342
1437
  const [sessionIds, setSessionIds] = useState3(new Map);
1343
1438
  const [hoveredTabId, setHoveredTabId] = useState3(null);
1344
1439
  const [scrollPositions, setScrollPositions] = useState3(new Map);
1345
- const getOwnedTabLabel = useCallback((index, directory2) => {
1440
+ const getOwnedTabLabel = useCallback2((index, directory2) => {
1346
1441
  if (tabLabelPrefix) {
1347
1442
  return `${tabLabelPrefix} ${index + 1}`;
1348
1443
  }
@@ -1358,7 +1453,7 @@ var TabbedTerminalPanelInner = ({
1358
1453
  }, [ownedTabs, foreignTabs, getOwnedTabLabel]);
1359
1454
  const tabRefsMap = useRef3(new Map);
1360
1455
  const refCallbacksMap = useRef3(new Map);
1361
- const getRefCallback = useCallback((tabId) => {
1456
+ const getRefCallback = useCallback2((tabId) => {
1362
1457
  let callback = refCallbacksMap.current.get(tabId);
1363
1458
  if (!callback) {
1364
1459
  callback = (ref) => {
@@ -1375,7 +1470,7 @@ var TabbedTerminalPanelInner = ({
1375
1470
  const hasInitializedRef = useRef3(false);
1376
1471
  const isCreatingTabRef = useRef3(false);
1377
1472
  const headerRef = useRef3(null);
1378
- const handleTabScrollPositionChange = useCallback((tabId, position) => {
1473
+ const handleTabScrollPositionChange = useCallback2((tabId, position) => {
1379
1474
  setScrollPositions((prev) => new Map(prev).set(tabId, position));
1380
1475
  }, []);
1381
1476
  const defaultScrollPosition = {
@@ -1383,12 +1478,12 @@ var TabbedTerminalPanelInner = ({
1383
1478
  isAtBottom: true,
1384
1479
  isScrollLocked: false
1385
1480
  };
1386
- const handleToggleScrollLock = useCallback(() => {
1481
+ const handleToggleScrollLock = useCallback2(() => {
1387
1482
  if (activeTabId) {
1388
1483
  tabRefsMap.current.get(activeTabId)?.toggleScrollLock();
1389
1484
  }
1390
1485
  }, [activeTabId]);
1391
- const restoreOwnedSessions = useCallback(async () => {
1486
+ const restoreOwnedSessions = useCallback2(async () => {
1392
1487
  try {
1393
1488
  let sessions = [];
1394
1489
  if (actions.listTerminalSessions) {
@@ -1422,7 +1517,7 @@ var TabbedTerminalPanelInner = ({
1422
1517
  console.error("[TabbedTerminalPanel] Failed to restore owned sessions:", err);
1423
1518
  }
1424
1519
  }, [terminalContext, initialTabs, onTabsChange, actions, directory]);
1425
- const fetchForeignSessions = useCallback(async () => {
1520
+ const fetchForeignSessions = useCallback2(async () => {
1426
1521
  try {
1427
1522
  if (!actions.listTerminalSessions) {
1428
1523
  return;
@@ -1453,7 +1548,7 @@ var TabbedTerminalPanelInner = ({
1453
1548
  console.error("[TabbedTerminalPanel] Failed to fetch foreign sessions:", err);
1454
1549
  }
1455
1550
  }, [terminalContext, actions]);
1456
- const clearForeignTabs = useCallback(() => {
1551
+ const clearForeignTabs = useCallback2(() => {
1457
1552
  setForeignTabs((prevForeign) => {
1458
1553
  const foreignTabIds = new Set(prevForeign.map((t) => t.id));
1459
1554
  setSessionIds((prev) => {
@@ -1477,7 +1572,7 @@ var TabbedTerminalPanelInner = ({
1477
1572
  clearForeignTabs();
1478
1573
  }
1479
1574
  }, [showAllTerminals, fetchForeignSessions, clearForeignTabs]);
1480
- const switchTab = useCallback((tabId) => {
1575
+ const switchTab = useCallback2((tabId) => {
1481
1576
  setOwnedTabs((prevTabs) => prevTabs.map((t) => ({
1482
1577
  ...t,
1483
1578
  isActive: t.id === tabId
@@ -1488,7 +1583,7 @@ var TabbedTerminalPanelInner = ({
1488
1583
  })));
1489
1584
  setActiveTabId(tabId);
1490
1585
  }, []);
1491
- const addNewTab = useCallback((label, command, targetDirectory) => {
1586
+ const addNewTab = useCallback2((label, command, targetDirectory) => {
1492
1587
  const targetDir = targetDirectory || directory;
1493
1588
  const directoryName = targetDir.split("/").pop() || targetDir;
1494
1589
  const newTab = {
@@ -1507,10 +1602,10 @@ var TabbedTerminalPanelInner = ({
1507
1602
  setForeignTabs((prevTabs) => prevTabs.map((t) => ({ ...t, isActive: false })));
1508
1603
  setActiveTabId(newTab.id);
1509
1604
  }, [directory, onTabsChange]);
1510
- const isForeignTab = useCallback((tabId) => {
1605
+ const isForeignTab = useCallback2((tabId) => {
1511
1606
  return tabId.startsWith("tab-foreign-");
1512
1607
  }, []);
1513
- const closeTab = useCallback(async (tabId) => {
1608
+ const closeTab = useCallback2(async (tabId) => {
1514
1609
  const sessionId = sessionIds.get(tabId);
1515
1610
  const isForeign = isForeignTab(tabId);
1516
1611
  if (!isForeign && sessionId && actions.destroyTerminalSession) {
@@ -1560,7 +1655,7 @@ var TabbedTerminalPanelInner = ({
1560
1655
  });
1561
1656
  }
1562
1657
  }, [activeTabId, sessionIds, actions, onTabsChange, isForeignTab, ownedTabs, foreignTabs]);
1563
- const handleSessionCreated = useCallback((tabId, sessionId) => {
1658
+ const handleSessionCreated = useCallback2((tabId, sessionId) => {
1564
1659
  setSessionIds((prev) => new Map(prev).set(tabId, sessionId));
1565
1660
  }, []);
1566
1661
  const tabsRef = useRef3(tabs);
@@ -1 +1 @@
1
- {"version":3,"file":"ThemedTerminal.d.ts","sourceRoot":"","sources":["../../../src/components/ThemedTerminal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAyB3D,OAAO,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,8BAA8B,CAAC;AAEtC,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,KAAK,EAAE,KAAK,CAAC;CACd;AAsBD,eAAO,MAAM,cAAc,4HAgvB1B,CAAC"}
1
+ {"version":3,"file":"ThemedTerminal.d.ts","sourceRoot":"","sources":["../../../src/components/ThemedTerminal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AA+B3D,OAAO,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,8BAA8B,CAAC;AAEtC,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,KAAK,EAAE,KAAK,CAAC;CACd;AAsBD,eAAO,MAAM,cAAc,4HAq0B1B,CAAC"}
@@ -1,9 +1,18 @@
1
1
  export type { PanelComponentProps, PanelContextValue, PanelActions, PanelEventEmitter, PanelEvent, PanelEventType, PanelDefinition, PanelMetadata, PanelLifecycleHooks, DataSlice, RepositoryMetadata, WorkspaceMetadata, } from '@principal-ade/panel-framework-core';
2
2
  import type { PanelActions as CorePanelActions, PanelContextValue, DataSlice } from '@principal-ade/panel-framework-core';
3
- export type TerminalEventType = 'terminal:data' | 'terminal:exit' | 'terminal:created' | 'terminal:title-change' | 'terminal:cwd-change' | 'terminal:link-click';
3
+ export type TerminalEventType = 'terminal:data' | 'terminal:exit' | 'terminal:created' | 'terminal:title-change' | 'terminal:cwd-change' | 'terminal:link-click' | 'terminal:shortcut';
4
4
  export interface TerminalLinkClickEvent {
5
5
  url: string;
6
6
  sessionId: string;
7
+ shiftKey: boolean;
8
+ metaKey: boolean;
9
+ ctrlKey: boolean;
10
+ altKey: boolean;
11
+ }
12
+ export type TerminalShortcutId = 'command-palette';
13
+ export interface TerminalShortcutEvent {
14
+ shortcut: TerminalShortcutId;
15
+ sessionId: string;
7
16
  }
8
17
  export interface TerminalSessionInfo {
9
18
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panel-types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panel-types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabbedTerminalPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TabbedTerminalPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAKN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EACV,wBAAwB,EAIzB,MAAM,gBAAgB,CAAC;AAwBxB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AA0jCD,eAAO,MAAM,mBAAmB,sDAmB9B,CAAC"}
1
+ {"version":3,"file":"TabbedTerminalPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TabbedTerminalPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAKN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EACV,wBAAwB,EAKzB,MAAM,gBAAgB,CAAC;AAwBxB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AAilCD,eAAO,MAAM,mBAAmB,sDAmB9B,CAAC"}
@@ -20,11 +20,22 @@ export interface TerminalScrollPosition {
20
20
  isAtBottom: boolean;
21
21
  isScrollLocked: boolean;
22
22
  }
23
+ export type TerminalShortcut = 'command-palette';
24
+ export interface TerminalShortcutEvent {
25
+ shortcut: TerminalShortcut;
26
+ originalEvent: KeyboardEvent;
27
+ }
28
+ export interface LinkClickModifiers {
29
+ shiftKey: boolean;
30
+ metaKey: boolean;
31
+ ctrlKey: boolean;
32
+ altKey: boolean;
33
+ }
23
34
  export interface ThemedTerminalProps {
24
35
  onData?: (data: string) => void;
25
36
  onResize?: (cols: number, rows: number) => void;
26
37
  onReady?: (cols: number, rows: number) => void;
27
- onLinkClick?: (url: string) => void;
38
+ onLinkClick?: (url: string, modifiers: LinkClickModifiers) => void;
28
39
  onScrollPositionChange?: (position: TerminalScrollPosition) => void;
29
40
  className?: string;
30
41
  hideHeader?: boolean;
@@ -37,6 +48,7 @@ export interface ThemedTerminalProps {
37
48
  onClose?: () => void;
38
49
  onDestroy?: () => void;
39
50
  onPopOut?: () => void;
51
+ onShortcut?: (event: TerminalShortcutEvent) => void;
40
52
  overlayState?: TerminalOverlayState;
41
53
  convertEol?: boolean;
42
54
  cursorBlink?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.types.d.ts","sourceRoot":"","sources":["../../../src/types/terminal.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.types.d.ts","sourceRoot":"","sources":["../../../src/types/terminal.types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@industry-theme/xterm-terminal-panel",
3
- "version": "0.1.10",
3
+ "version": "0.2.1",
4
4
  "description": "Industry-themed xterm.js terminal components with panel framework integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -55,7 +55,7 @@
55
55
  "license": "MIT",
56
56
  "dependencies": {
57
57
  "@principal-ade/industry-theme": "^0.1.3",
58
- "@principal-ade/panel-framework-core": "^0.1.5",
58
+ "@principal-ade/panel-framework-core": "^0.2.0",
59
59
  "@principal-ade/utcp-panel-event": "^0.1.0",
60
60
  "clsx": "^2.1.1"
61
61
  },