@industry-theme/xterm-terminal-panel 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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';
@@ -9,7 +9,7 @@ export { TabbedTerminalPanel } from './src/panels/TabbedTerminalPanel';
9
9
  export type { TerminalTabContentRef } from './src/panels/TabbedTerminalPanel';
10
10
  export { panels, onPackageLoad, onPackageUnload } from './src/panel-exports';
11
11
  export { terminalPanelTools, terminalPanelToolsMetadata, createTerminalSessionTool, writeToTerminalTool, closeTerminalSessionTool, clearTerminalTool, focusTerminalTool, } from './src/panel-exports';
12
- export type { PanelDefinition, PanelMetadata, PanelComponentProps, PanelContextValue, PanelActions, PanelEventEmitter, TerminalSessionInfo, CreateTerminalSessionOptions, TerminalPanelActions, TerminalEventType, TerminalScope, TerminalPanelProps, TerminalTab, TabbedTerminalPanelProps, OwnershipStatus, OwnershipResult, PortReadyData, } from './src/panel-types';
12
+ export type { PanelDefinition, PanelMetadata, PanelComponentProps, PanelContextValue, PanelActions, PanelEventEmitter, TerminalSessionInfo, CreateTerminalSessionOptions, TerminalPanelActions, TerminalEventType, TerminalLinkClickEvent, TerminalScope, TerminalPanelProps, TerminalTab, TabbedTerminalPanelProps, OwnershipStatus, OwnershipResult, PortReadyData, } from './src/panel-types';
13
13
  export { getTerminalSessions, getTerminalSession, isTerminalLoading, getRepositoryPath, getWorkspacePath, getTerminalDirectory, getTerminalSlice, } from './src/panel-types';
14
14
  export type { Theme } from '@principal-ade/industry-theme';
15
15
  export type { Terminal, ITheme as XTermTheme, ITerminalOptions } from '@xterm/xterm';
@@ -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,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,
@@ -98,6 +104,33 @@ var ThemedTerminal = forwardRef(({
98
104
  const scrollDebounceRef = useRef(null);
99
105
  const isVisibleRef = useRef(isVisible);
100
106
  const isScrollLockedRef = useRef(true);
107
+ const handleDroppedContent = useCallback((content) => {
108
+ if (terminal) {
109
+ terminal.paste(content);
110
+ terminal.focus();
111
+ }
112
+ }, [terminal]);
113
+ const { isDragOver, ...dropZoneProps } = useDropZone({
114
+ handlers: [
115
+ {
116
+ dataType: [DATA_TYPES.FILE_PATH, DATA_TYPES.DIRECTORY_PATH],
117
+ onDrop: (data) => {
118
+ const safePath = sanitizePath(data.primaryData);
119
+ handleDroppedContent(safePath);
120
+ }
121
+ },
122
+ {
123
+ dataType: DATA_TYPES.TEXT_SELECTION,
124
+ onDrop: (data) => {
125
+ handleDroppedContent(data.primaryData);
126
+ }
127
+ }
128
+ ],
129
+ onPlainTextDrop: (text) => {
130
+ handleDroppedContent(text);
131
+ },
132
+ showVisualFeedback: true
133
+ });
101
134
  useEffect(() => {
102
135
  isVisibleRef.current = isVisible;
103
136
  }, [isVisible]);
@@ -267,8 +300,12 @@ var ThemedTerminal = forwardRef(({
267
300
  const webLinksAddon = new WebLinksAddon((event, uri) => {
268
301
  event.preventDefault();
269
302
  if (onLinkClick) {
270
- const isLocalhost = /^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?/i.test(uri);
271
- onLinkClick(uri, isLocalhost);
303
+ onLinkClick(uri, {
304
+ shiftKey: event.shiftKey,
305
+ metaKey: event.metaKey,
306
+ ctrlKey: event.ctrlKey,
307
+ altKey: event.altKey
308
+ });
272
309
  }
273
310
  });
274
311
  term.loadAddon(webLinksAddon);
@@ -575,8 +612,9 @@ var ThemedTerminal = forwardRef(({
575
612
  })
576
613
  ]
577
614
  }),
578
- /* @__PURE__ */ jsx("div", {
615
+ /* @__PURE__ */ jsxs("div", {
579
616
  ref: terminalRef,
617
+ ...dropZoneProps,
580
618
  className: `terminal-container-fix ${scrollbarStyle === "hidden" ? "hide-scrollbar" : scrollbarStyle === "thin" ? "thin-scrollbar" : scrollbarStyle === "auto-hide" ? "auto-hide-scrollbar" : ""}`,
581
619
  style: {
582
620
  flex: 1,
@@ -586,91 +624,118 @@ var ThemedTerminal = forwardRef(({
586
624
  height: "100%",
587
625
  minHeight: 0
588
626
  },
589
- children: overlayState && /* @__PURE__ */ jsxs("div", {
590
- style: {
591
- position: "absolute",
592
- top: 0,
593
- left: 0,
594
- right: 0,
595
- bottom: 0,
596
- display: "flex",
597
- flexDirection: "column",
598
- alignItems: "center",
599
- justifyContent: "center",
600
- backgroundColor: theme.colors.background,
601
- opacity: overlayState.opacity ?? 1,
602
- gap: "16px",
603
- padding: "32px",
604
- zIndex: 10
605
- },
606
- children: [
607
- /* @__PURE__ */ jsx(Monitor, {
608
- size: 48,
609
- color: theme.colors.textSecondary
610
- }),
611
- /* @__PURE__ */ jsx("div", {
612
- style: {
613
- fontSize: "16px",
614
- fontWeight: "500",
615
- color: theme.colors.text,
616
- textAlign: "center"
617
- },
618
- children: overlayState.message
619
- }),
620
- overlayState.subtitle && /* @__PURE__ */ jsx("div", {
621
- style: {
622
- fontSize: "14px",
623
- color: theme.colors.textSecondary,
624
- textAlign: "center",
625
- maxWidth: "400px"
626
- },
627
- children: overlayState.subtitle
628
- }),
629
- overlayState.actions && overlayState.actions.length > 0 && /* @__PURE__ */ jsx("div", {
627
+ children: [
628
+ isDragOver && /* @__PURE__ */ jsx("div", {
629
+ style: {
630
+ position: "absolute",
631
+ inset: 0,
632
+ background: "rgba(59, 130, 246, 0.1)",
633
+ border: "2px dashed #3b82f6",
634
+ borderRadius: "4px",
635
+ display: "flex",
636
+ alignItems: "center",
637
+ justifyContent: "center",
638
+ pointerEvents: "none",
639
+ zIndex: 1000
640
+ },
641
+ children: /* @__PURE__ */ jsx("div", {
630
642
  style: {
631
- display: "flex",
632
- gap: "12px",
633
- marginTop: "8px"
643
+ padding: "8px 16px",
644
+ background: "#3b82f6",
645
+ color: "white",
646
+ borderRadius: "4px",
647
+ fontSize: "13px",
648
+ fontWeight: 500
634
649
  },
635
- children: overlayState.actions.map((action) => /* @__PURE__ */ jsxs("button", {
636
- type: "button",
637
- onClick: action.onClick,
650
+ children: "Drop to insert"
651
+ })
652
+ }),
653
+ overlayState && /* @__PURE__ */ jsxs("div", {
654
+ style: {
655
+ position: "absolute",
656
+ top: 0,
657
+ left: 0,
658
+ right: 0,
659
+ bottom: 0,
660
+ display: "flex",
661
+ flexDirection: "column",
662
+ alignItems: "center",
663
+ justifyContent: "center",
664
+ backgroundColor: theme.colors.background,
665
+ opacity: overlayState.opacity ?? 1,
666
+ gap: "16px",
667
+ padding: "32px",
668
+ zIndex: 10
669
+ },
670
+ children: [
671
+ /* @__PURE__ */ jsx(Monitor, {
672
+ size: 48,
673
+ color: theme.colors.textSecondary
674
+ }),
675
+ /* @__PURE__ */ jsx("div", {
638
676
  style: {
639
- padding: "8px 16px",
640
- backgroundColor: action.primary ? theme.colors.primary : "transparent",
641
- color: action.primary ? "#ffffff" : theme.colors.text,
642
- border: action.primary ? "none" : `1px solid ${theme.colors.border}`,
643
- borderRadius: "6px",
644
- cursor: "pointer",
645
- fontSize: "14px",
677
+ fontSize: "16px",
646
678
  fontWeight: "500",
647
- display: "flex",
648
- alignItems: "center",
649
- gap: "8px",
650
- transition: "all 0.2s"
679
+ color: theme.colors.text,
680
+ textAlign: "center"
651
681
  },
652
- onMouseEnter: (e) => {
653
- if (action.primary) {
654
- e.currentTarget.style.opacity = "0.8";
655
- } else {
656
- e.currentTarget.style.backgroundColor = theme.colors.backgroundSecondary;
657
- }
682
+ children: overlayState.message
683
+ }),
684
+ overlayState.subtitle && /* @__PURE__ */ jsx("div", {
685
+ style: {
686
+ fontSize: "14px",
687
+ color: theme.colors.textSecondary,
688
+ textAlign: "center",
689
+ maxWidth: "400px"
658
690
  },
659
- onMouseLeave: (e) => {
660
- if (action.primary) {
661
- e.currentTarget.style.opacity = "1";
662
- } else {
663
- e.currentTarget.style.backgroundColor = "transparent";
664
- }
691
+ children: overlayState.subtitle
692
+ }),
693
+ overlayState.actions && overlayState.actions.length > 0 && /* @__PURE__ */ jsx("div", {
694
+ style: {
695
+ display: "flex",
696
+ gap: "12px",
697
+ marginTop: "8px"
665
698
  },
666
- children: [
667
- action.icon,
668
- action.label
669
- ]
670
- }, action.label))
671
- })
672
- ]
673
- })
699
+ children: overlayState.actions.map((action) => /* @__PURE__ */ jsxs("button", {
700
+ type: "button",
701
+ onClick: action.onClick,
702
+ style: {
703
+ padding: "8px 16px",
704
+ backgroundColor: action.primary ? theme.colors.primary : "transparent",
705
+ color: action.primary ? "#ffffff" : theme.colors.text,
706
+ border: action.primary ? "none" : `1px solid ${theme.colors.border}`,
707
+ borderRadius: "6px",
708
+ cursor: "pointer",
709
+ fontSize: "14px",
710
+ fontWeight: "500",
711
+ display: "flex",
712
+ alignItems: "center",
713
+ gap: "8px",
714
+ transition: "all 0.2s"
715
+ },
716
+ onMouseEnter: (e) => {
717
+ if (action.primary) {
718
+ e.currentTarget.style.opacity = "0.8";
719
+ } else {
720
+ e.currentTarget.style.backgroundColor = theme.colors.backgroundSecondary;
721
+ }
722
+ },
723
+ onMouseLeave: (e) => {
724
+ if (action.primary) {
725
+ e.currentTarget.style.opacity = "1";
726
+ } else {
727
+ e.currentTarget.style.backgroundColor = "transparent";
728
+ }
729
+ },
730
+ children: [
731
+ action.icon,
732
+ action.label
733
+ ]
734
+ }, action.label))
735
+ })
736
+ ]
737
+ })
738
+ ]
674
739
  })
675
740
  ]
676
741
  });
@@ -1081,13 +1146,13 @@ import { useTheme as useTheme4 } from "@principal-ade/industry-theme";
1081
1146
  import { Terminal as TerminalIcon2, X as X2, Plus, Lock as Lock2, Unlock as Unlock2, Box, Boxes } from "lucide-react";
1082
1147
  import React, {
1083
1148
  useState as useState3,
1084
- useCallback,
1149
+ useCallback as useCallback2,
1085
1150
  useEffect as useEffect3,
1086
1151
  useRef as useRef3
1087
1152
  } from "react";
1088
1153
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
1089
1154
  function TerminalTabContentInner(props, ref) {
1090
- const { tab, sessionId, isActive, isVisible, actions, terminalContext, onSessionCreated, onScrollPositionChange, isForeign = false } = props;
1155
+ const { tab, sessionId, isActive, isVisible, actions, events, terminalContext, onSessionCreated, onScrollPositionChange, isForeign = false } = props;
1091
1156
  const terminalRef = useRef3(null);
1092
1157
  const [localSessionId, setLocalSessionId] = useState3(sessionId);
1093
1158
  const [isInitialized, setIsInitialized] = useState3(false);
@@ -1100,7 +1165,7 @@ function TerminalTabContentInner(props, ref) {
1100
1165
  const [shouldRenderTerminal, setShouldRenderTerminal] = useState3(true);
1101
1166
  const [ownerWindowId, setOwnerWindowId] = useState3(null);
1102
1167
  const needsRefreshOnResizeRef = useRef3(false);
1103
- const claimAndConnect = useCallback(async (targetSessionId, force = false) => {
1168
+ const claimAndConnect = useCallback2(async (targetSessionId, force = false) => {
1104
1169
  try {
1105
1170
  if (actions.claimTerminalOwnership) {
1106
1171
  await actions.claimTerminalOwnership(targetSessionId, force);
@@ -1179,17 +1244,17 @@ function TerminalTabContentInner(props, ref) {
1179
1244
  unsubscribe();
1180
1245
  };
1181
1246
  }, [localSessionId, isInitialized, actions, shouldRenderTerminal]);
1182
- const handleData = useCallback((data) => {
1247
+ const handleData = useCallback2((data) => {
1183
1248
  if (localSessionId && actions.writeToTerminal) {
1184
1249
  actions.writeToTerminal(localSessionId, data);
1185
1250
  }
1186
1251
  }, [localSessionId, actions]);
1187
- const handleResize = useCallback((cols, rows) => {
1252
+ const handleResize = useCallback2((cols, rows) => {
1188
1253
  if (localSessionId && actions.resizeTerminal) {
1189
1254
  actions.resizeTerminal(localSessionId, cols, rows);
1190
1255
  }
1191
1256
  }, [localSessionId, actions]);
1192
- const handleReady = useCallback((cols, rows) => {
1257
+ const handleReady = useCallback2((cols, rows) => {
1193
1258
  if (localSessionId && actions.resizeTerminal) {
1194
1259
  const shouldForce = needsRefreshOnResizeRef.current;
1195
1260
  if (shouldForce) {
@@ -1198,6 +1263,23 @@ function TerminalTabContentInner(props, ref) {
1198
1263
  actions.resizeTerminal(localSessionId, cols, rows, shouldForce);
1199
1264
  }
1200
1265
  }, [localSessionId, actions]);
1266
+ const handleLinkClick = useCallback2((url, modifiers) => {
1267
+ if (localSessionId) {
1268
+ events.emit({
1269
+ type: "terminal:link-click",
1270
+ source: "TabbedTerminalPanel",
1271
+ timestamp: Date.now(),
1272
+ payload: {
1273
+ url,
1274
+ sessionId: localSessionId,
1275
+ shiftKey: modifiers.shiftKey,
1276
+ metaKey: modifiers.metaKey,
1277
+ ctrlKey: modifiers.ctrlKey,
1278
+ altKey: modifiers.altKey
1279
+ }
1280
+ });
1281
+ }
1282
+ }, [localSessionId, events]);
1201
1283
  useEffect3(() => {
1202
1284
  if (!localSessionId || !actions.onOwnershipLost) {
1203
1285
  return;
@@ -1212,20 +1294,20 @@ function TerminalTabContentInner(props, ref) {
1212
1294
  unsubscribe();
1213
1295
  };
1214
1296
  }, [localSessionId, actions]);
1215
- const handleTakeControl = useCallback(async () => {
1297
+ const handleTakeControl = useCallback2(async () => {
1216
1298
  if (!localSessionId) {
1217
1299
  return;
1218
1300
  }
1219
1301
  await claimAndConnect(localSessionId, true);
1220
1302
  }, [localSessionId, claimAndConnect]);
1221
- const handleScrollPositionChange = useCallback((position) => {
1303
+ const handleScrollPositionChange = useCallback2((position) => {
1222
1304
  setScrollPosition(position);
1223
1305
  onScrollPositionChange?.(tab.id, position);
1224
1306
  }, [tab.id, onScrollPositionChange]);
1225
- const handleScrollToBottom = useCallback(() => {
1307
+ const handleScrollToBottom = useCallback2(() => {
1226
1308
  terminalRef.current?.scrollToBottom();
1227
1309
  }, []);
1228
- const handleToggleScrollLock = useCallback(() => {
1310
+ const handleToggleScrollLock = useCallback2(() => {
1229
1311
  if (scrollPosition.isScrollLocked) {
1230
1312
  const terminal = terminalRef.current?.getTerminal();
1231
1313
  if (terminal) {
@@ -1275,6 +1357,7 @@ function TerminalTabContentInner(props, ref) {
1275
1357
  onData: shouldRenderTerminal ? handleData : undefined,
1276
1358
  onResize: shouldRenderTerminal ? handleResize : undefined,
1277
1359
  onReady: shouldRenderTerminal ? handleReady : undefined,
1360
+ onLinkClick: shouldRenderTerminal ? handleLinkClick : undefined,
1278
1361
  onScrollPositionChange: shouldRenderTerminal ? handleScrollPositionChange : undefined,
1279
1362
  hideHeader: true,
1280
1363
  autoFocus: isActive && shouldRenderTerminal,
@@ -1311,7 +1394,7 @@ TerminalTabContent.displayName = "TerminalTabContent";
1311
1394
  var TabbedTerminalPanelInner = ({
1312
1395
  context: _context,
1313
1396
  actions,
1314
- events: _events,
1397
+ events,
1315
1398
  terminalContext,
1316
1399
  directory,
1317
1400
  hideHeader = false,
@@ -1329,7 +1412,7 @@ var TabbedTerminalPanelInner = ({
1329
1412
  const [sessionIds, setSessionIds] = useState3(new Map);
1330
1413
  const [hoveredTabId, setHoveredTabId] = useState3(null);
1331
1414
  const [scrollPositions, setScrollPositions] = useState3(new Map);
1332
- const getOwnedTabLabel = useCallback((index, directory2) => {
1415
+ const getOwnedTabLabel = useCallback2((index, directory2) => {
1333
1416
  if (tabLabelPrefix) {
1334
1417
  return `${tabLabelPrefix} ${index + 1}`;
1335
1418
  }
@@ -1345,7 +1428,7 @@ var TabbedTerminalPanelInner = ({
1345
1428
  }, [ownedTabs, foreignTabs, getOwnedTabLabel]);
1346
1429
  const tabRefsMap = useRef3(new Map);
1347
1430
  const refCallbacksMap = useRef3(new Map);
1348
- const getRefCallback = useCallback((tabId) => {
1431
+ const getRefCallback = useCallback2((tabId) => {
1349
1432
  let callback = refCallbacksMap.current.get(tabId);
1350
1433
  if (!callback) {
1351
1434
  callback = (ref) => {
@@ -1362,7 +1445,7 @@ var TabbedTerminalPanelInner = ({
1362
1445
  const hasInitializedRef = useRef3(false);
1363
1446
  const isCreatingTabRef = useRef3(false);
1364
1447
  const headerRef = useRef3(null);
1365
- const handleTabScrollPositionChange = useCallback((tabId, position) => {
1448
+ const handleTabScrollPositionChange = useCallback2((tabId, position) => {
1366
1449
  setScrollPositions((prev) => new Map(prev).set(tabId, position));
1367
1450
  }, []);
1368
1451
  const defaultScrollPosition = {
@@ -1370,12 +1453,12 @@ var TabbedTerminalPanelInner = ({
1370
1453
  isAtBottom: true,
1371
1454
  isScrollLocked: false
1372
1455
  };
1373
- const handleToggleScrollLock = useCallback(() => {
1456
+ const handleToggleScrollLock = useCallback2(() => {
1374
1457
  if (activeTabId) {
1375
1458
  tabRefsMap.current.get(activeTabId)?.toggleScrollLock();
1376
1459
  }
1377
1460
  }, [activeTabId]);
1378
- const restoreOwnedSessions = useCallback(async () => {
1461
+ const restoreOwnedSessions = useCallback2(async () => {
1379
1462
  try {
1380
1463
  let sessions = [];
1381
1464
  if (actions.listTerminalSessions) {
@@ -1409,7 +1492,7 @@ var TabbedTerminalPanelInner = ({
1409
1492
  console.error("[TabbedTerminalPanel] Failed to restore owned sessions:", err);
1410
1493
  }
1411
1494
  }, [terminalContext, initialTabs, onTabsChange, actions, directory]);
1412
- const fetchForeignSessions = useCallback(async () => {
1495
+ const fetchForeignSessions = useCallback2(async () => {
1413
1496
  try {
1414
1497
  if (!actions.listTerminalSessions) {
1415
1498
  return;
@@ -1440,7 +1523,7 @@ var TabbedTerminalPanelInner = ({
1440
1523
  console.error("[TabbedTerminalPanel] Failed to fetch foreign sessions:", err);
1441
1524
  }
1442
1525
  }, [terminalContext, actions]);
1443
- const clearForeignTabs = useCallback(() => {
1526
+ const clearForeignTabs = useCallback2(() => {
1444
1527
  setForeignTabs((prevForeign) => {
1445
1528
  const foreignTabIds = new Set(prevForeign.map((t) => t.id));
1446
1529
  setSessionIds((prev) => {
@@ -1464,7 +1547,7 @@ var TabbedTerminalPanelInner = ({
1464
1547
  clearForeignTabs();
1465
1548
  }
1466
1549
  }, [showAllTerminals, fetchForeignSessions, clearForeignTabs]);
1467
- const switchTab = useCallback((tabId) => {
1550
+ const switchTab = useCallback2((tabId) => {
1468
1551
  setOwnedTabs((prevTabs) => prevTabs.map((t) => ({
1469
1552
  ...t,
1470
1553
  isActive: t.id === tabId
@@ -1475,7 +1558,7 @@ var TabbedTerminalPanelInner = ({
1475
1558
  })));
1476
1559
  setActiveTabId(tabId);
1477
1560
  }, []);
1478
- const addNewTab = useCallback((label, command, targetDirectory) => {
1561
+ const addNewTab = useCallback2((label, command, targetDirectory) => {
1479
1562
  const targetDir = targetDirectory || directory;
1480
1563
  const directoryName = targetDir.split("/").pop() || targetDir;
1481
1564
  const newTab = {
@@ -1494,10 +1577,10 @@ var TabbedTerminalPanelInner = ({
1494
1577
  setForeignTabs((prevTabs) => prevTabs.map((t) => ({ ...t, isActive: false })));
1495
1578
  setActiveTabId(newTab.id);
1496
1579
  }, [directory, onTabsChange]);
1497
- const isForeignTab = useCallback((tabId) => {
1580
+ const isForeignTab = useCallback2((tabId) => {
1498
1581
  return tabId.startsWith("tab-foreign-");
1499
1582
  }, []);
1500
- const closeTab = useCallback(async (tabId) => {
1583
+ const closeTab = useCallback2(async (tabId) => {
1501
1584
  const sessionId = sessionIds.get(tabId);
1502
1585
  const isForeign = isForeignTab(tabId);
1503
1586
  if (!isForeign && sessionId && actions.destroyTerminalSession) {
@@ -1547,7 +1630,7 @@ var TabbedTerminalPanelInner = ({
1547
1630
  });
1548
1631
  }
1549
1632
  }, [activeTabId, sessionIds, actions, onTabsChange, isForeignTab, ownedTabs, foreignTabs]);
1550
- const handleSessionCreated = useCallback((tabId, sessionId) => {
1633
+ const handleSessionCreated = useCallback2((tabId, sessionId) => {
1551
1634
  setSessionIds((prev) => new Map(prev).set(tabId, sessionId));
1552
1635
  }, []);
1553
1636
  const tabsRef = useRef3(tabs);
@@ -1825,6 +1908,7 @@ var TabbedTerminalPanelInner = ({
1825
1908
  isActive: tab.id === activeTabId,
1826
1909
  isVisible,
1827
1910
  actions,
1911
+ events,
1828
1912
  terminalContext,
1829
1913
  onSessionCreated: handleSessionCreated,
1830
1914
  onScrollPositionChange: handleTabScrollPositionChange,
@@ -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,4HAkvB1B,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,4HAuzB1B,CAAC"}
@@ -1,6 +1,14 @@
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';
3
+ export type TerminalEventType = 'terminal:data' | 'terminal:exit' | 'terminal:created' | 'terminal:title-change' | 'terminal:cwd-change' | 'terminal:link-click';
4
+ export interface TerminalLinkClickEvent {
5
+ url: string;
6
+ sessionId: string;
7
+ shiftKey: boolean;
8
+ metaKey: boolean;
9
+ ctrlKey: boolean;
10
+ altKey: boolean;
11
+ }
4
12
  export interface TerminalSessionInfo {
5
13
  id: string;
6
14
  pid: number;
@@ -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;AAGf,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,gBAAgB,CAAC;AAuBxB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AAsiCD,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,EAIzB,MAAM,gBAAgB,CAAC;AAwBxB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AA8jCD,eAAO,MAAM,mBAAmB,sDAmB9B,CAAC"}
@@ -20,11 +20,17 @@ export interface TerminalScrollPosition {
20
20
  isAtBottom: boolean;
21
21
  isScrollLocked: boolean;
22
22
  }
23
+ export interface LinkClickModifiers {
24
+ shiftKey: boolean;
25
+ metaKey: boolean;
26
+ ctrlKey: boolean;
27
+ altKey: boolean;
28
+ }
23
29
  export interface ThemedTerminalProps {
24
30
  onData?: (data: string) => void;
25
31
  onResize?: (cols: number, rows: number) => void;
26
32
  onReady?: (cols: number, rows: number) => void;
27
- onLinkClick?: (url: string, isLocalhost: boolean) => void;
33
+ onLinkClick?: (url: string, modifiers: LinkClickModifiers) => void;
28
34
  onScrollPositionChange?: (position: TerminalScrollPosition) => void;
29
35
  className?: string;
30
36
  hideHeader?: 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.9",
3
+ "version": "0.2.0",
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
  },