@industry-theme/xterm-terminal-panel 0.9.6 → 0.10.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
@@ -22,7 +22,7 @@ export { useThemedTerminal } from './src/hooks/useThemedTerminal';
22
22
  export type { UseThemedTerminalReturn } from './src/hooks/useThemedTerminal';
23
23
  export { createTerminalTheme, getTerminalCSSVariables, } from './src/utils/terminalTheme';
24
24
  export { TabBar, TabButton } from './src/components/TabBar';
25
- export type { Tab, BaseTab, LegacyTab, TabBarProps, TabButtonProps } from './src/types/tab';
25
+ export type { Tab, BaseTab, LegacyTab, TabBarProps, TabButtonProps, TabReorderPosition } from './src/types/tab';
26
26
  export type { ContentTab, SkillTab, AgentTab, MixedTab, TabByContentType, } from './src/types/mixed-tab';
27
27
  export { isTabOfType } from './src/types/mixed-tab';
28
28
  export { useTabKeyboardShortcuts } from './src/hooks/useTabKeyboardShortcuts';
@@ -31,7 +31,7 @@ export { TabbedTerminalPanel } from './src/panels/TabbedTerminalPanel';
31
31
  export type { TerminalTabContentRef } from './src/panels/TabbedTerminalPanel';
32
32
  export { panels, onPackageLoad, onPackageUnload } from './src/panel-exports';
33
33
  export { terminalPanelTools, terminalPanelToolsMetadata, createTerminalSessionTool, writeToTerminalTool, closeTerminalSessionTool, clearTerminalTool, focusTerminalTool, } from './src/panel-exports';
34
- export type { PanelDefinition, PanelMetadata, PanelComponentProps, PanelContextValue, PanelActions, PanelEventEmitter, TerminalSessionInfo, CreateTerminalSessionOptions, TerminalPanelActions, TerminalEventType, TerminalLinkClickEvent, TerminalScope, TerminalPanelProps, TerminalTab, TabbedTerminalPanelProps, OwnershipStatus, OwnershipResult, PortReadyData, TerminalWorkingState, TerminalActivityType, TerminalActivityChangedEvent, TabAssociation, TabAssociations, TerminalRepoInfo, } from './src/panel-types';
34
+ export type { PanelDefinition, PanelMetadata, PanelComponentProps, PanelContextValue, PanelActions, PanelEventEmitter, TerminalSessionInfo, CreateTerminalSessionOptions, TerminalPanelActions, TerminalEventType, TerminalLinkClickEvent, TerminalScope, TerminalPanelProps, TerminalTab, TabbedTerminalPanelProps, OwnershipStatus, OwnershipResult, PortReadyData, TerminalWorkingState, TerminalActivityType, TerminalActivityChangedEvent, TerminalRepoInfo, } from './src/panel-types';
35
35
  export { getTerminalSessions, getTerminalSession, isTerminalLoading, getRepositoryPath, getWorkspacePath, getTerminalDirectory, getTerminalSlice, } from './src/panel-types';
36
36
  export { getTracer, getActiveSpan, withSpan, withSpanSync, TRACER_NAME, TRACER_VERSION, trace, context, SpanStatusCode, } from './src/telemetry';
37
37
  export type { Tracer, Span } from './src/telemetry';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -30,6 +30,14 @@ import {
30
30
  useDropZone
31
31
  } from "@principal-ade/panel-framework-core";
32
32
  import { useCallback } from "react";
33
+
34
+ // src/utils/tabDrag.ts
35
+ var TAB_REORDER_MIME = "application/x-tab-reorder";
36
+ function isTabReorderDrag(dataTransfer) {
37
+ return !!dataTransfer?.types.includes(TAB_REORDER_MIME);
38
+ }
39
+
40
+ // src/hooks/useTerminalDropZone.tsx
33
41
  import { jsx } from "react/jsx-runtime";
34
42
  var FocusDelayMs = 10;
35
43
  function getDroppedImageFiles(e) {
@@ -75,7 +83,9 @@ function useTerminalDropZone({
75
83
  const {
76
84
  isDragOver,
77
85
  onDrop: handlePanelDrop,
78
- ...dropZoneProps
86
+ onDragOver: handlePanelDragOver,
87
+ onDragEnter: handlePanelDragEnter,
88
+ onDragLeave: handlePanelDragLeave
79
89
  } = useDropZone({
80
90
  handlers: [
81
91
  {
@@ -100,6 +110,10 @@ function useTerminalDropZone({
100
110
  });
101
111
  const handleDrop = useCallback(
102
112
  (e) => {
113
+ if (isTabReorderDrag(e.dataTransfer)) {
114
+ e.preventDefault();
115
+ return;
116
+ }
103
117
  const imageFiles = getDroppedImageFiles(e);
104
118
  handlePanelDrop(e);
105
119
  if (imageFiles.length > 0) {
@@ -108,6 +122,20 @@ function useTerminalDropZone({
108
122
  },
109
123
  [handlePanelDrop, handleDroppedImageFiles]
110
124
  );
125
+ const dropZoneProps = {
126
+ onDragOver: (e) => {
127
+ if (isTabReorderDrag(e.dataTransfer)) return;
128
+ handlePanelDragOver(e);
129
+ },
130
+ onDragEnter: (e) => {
131
+ if (isTabReorderDrag(e.dataTransfer)) return;
132
+ handlePanelDragEnter(e);
133
+ },
134
+ onDragLeave: (e) => {
135
+ if (isTabReorderDrag(e.dataTransfer)) return;
136
+ handlePanelDragLeave(e);
137
+ }
138
+ };
111
139
  return {
112
140
  isDragOver,
113
141
  dropZoneProps,
@@ -159,7 +187,7 @@ import {
159
187
  // package.json
160
188
  var package_default = {
161
189
  name: "@industry-theme/xterm-terminal-panel",
162
- version: "0.9.6",
190
+ version: "0.10.0",
163
191
  description: "Industry-themed xterm.js terminal components with panel framework integration",
164
192
  type: "module",
165
193
  sideEffects: [
@@ -2581,12 +2609,15 @@ function useThemedTerminal() {
2581
2609
  // src/components/TabBar/TabBar.tsx
2582
2610
  import { useTheme as useTheme7 } from "@principal-ade/industry-theme";
2583
2611
  import { Plus } from "lucide-react";
2584
- import { useState as useState3, useCallback as useCallback6 } from "react";
2612
+ import React, { useCallback as useCallback5, useState as useState3 } from "react";
2585
2613
 
2586
2614
  // src/components/TabBar/TabButton.tsx
2587
2615
  import { useTheme as useTheme6 } from "@principal-ade/industry-theme";
2588
- import { useCallback as useCallback5 } from "react";
2589
2616
  import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
2617
+ var CLOSE_BUTTON_LEFT = 8;
2618
+ var CLOSE_BUTTON_SIZE = 16;
2619
+ var CLOSE_BUTTON_GAP = 6;
2620
+ var CLOSE_BUTTON_GUTTER = CLOSE_BUTTON_LEFT + CLOSE_BUTTON_SIZE + CLOSE_BUTTON_GAP;
2590
2621
  var TabButton = ({
2591
2622
  tab,
2592
2623
  isActive,
@@ -2599,105 +2630,28 @@ var TabButton = ({
2599
2630
  renderAccessory,
2600
2631
  renderIcon,
2601
2632
  renderLabel,
2602
- // Drag and drop props
2603
2633
  draggable = false,
2604
2634
  onDragStart,
2605
2635
  onDragEnd,
2606
- onDrop,
2607
- canAcceptDrop = false,
2608
- isDragOver = false,
2609
- onDragEnter,
2636
+ onDragOver,
2610
2637
  onDragLeave,
2611
- isBeingDragged: _isBeingDragged = false
2638
+ onDrop,
2639
+ dropPosition = null,
2640
+ isBeingDragged = false
2612
2641
  }) => {
2613
2642
  const { theme } = useTheme6();
2614
2643
  const showCloseButton = isHovered || isActive;
2615
2644
  const closable = tab.closable !== false;
2616
- const handleDragStart = useCallback5(
2617
- (e) => {
2618
- const target = e.currentTarget;
2619
- e.dataTransfer.setData("application/x-tab-association", tab.id);
2620
- e.dataTransfer.effectAllowed = "move";
2621
- if (target) {
2622
- const clone = target.cloneNode(true);
2623
- clone.style.position = "fixed";
2624
- clone.style.top = "-9999px";
2625
- clone.style.left = "-9999px";
2626
- clone.style.width = `${target.offsetWidth}px`;
2627
- clone.style.height = `${target.offsetHeight}px`;
2628
- clone.style.opacity = "0.8";
2629
- clone.style.pointerEvents = "none";
2630
- clone.style.transform = "none";
2631
- clone.style.zIndex = "99999";
2632
- document.body.appendChild(clone);
2633
- e.dataTransfer.setDragImage(clone, target.offsetWidth / 2, target.offsetHeight / 2);
2634
- setTimeout(() => {
2635
- if (clone.parentNode) {
2636
- clone.parentNode.removeChild(clone);
2637
- }
2638
- }, 100);
2639
- }
2640
- onDragStart?.(tab.id);
2641
- },
2642
- [tab.id, onDragStart]
2643
- );
2644
- const handleDragEnd = useCallback5(() => {
2645
- onDragEnd?.();
2646
- }, [onDragEnd]);
2647
- const handleDragOver = useCallback5(
2648
- (e) => {
2649
- if (canAcceptDrop) {
2650
- e.preventDefault();
2651
- e.dataTransfer.dropEffect = "move";
2652
- }
2653
- },
2654
- [canAcceptDrop]
2655
- );
2656
- const handleDrop = useCallback5(
2657
- (e) => {
2658
- e.preventDefault();
2659
- const draggedTabId = e.dataTransfer.getData("application/x-tab-association");
2660
- if (draggedTabId && draggedTabId !== tab.id) {
2661
- onDrop?.(draggedTabId);
2662
- }
2663
- },
2664
- [tab.id, onDrop]
2665
- );
2666
- const handleDragEnter = useCallback5(
2667
- (e) => {
2668
- e.preventDefault();
2669
- onDragEnter?.();
2670
- },
2671
- [onDragEnter]
2672
- );
2673
- const handleDragLeave = useCallback5(
2674
- (e) => {
2675
- e.preventDefault();
2676
- onDragLeave?.();
2677
- },
2678
- [onDragLeave]
2679
- );
2680
- const getDragOverStyles = () => {
2681
- if (isDragOver && canAcceptDrop) {
2682
- return {
2683
- outline: `2px solid ${theme.colors.primary}`,
2684
- outlineOffset: "-2px",
2685
- backgroundColor: theme.colors.backgroundTertiary
2686
- };
2687
- }
2688
- return {};
2689
- };
2690
2645
  return /* @__PURE__ */ jsxs7(
2691
2646
  "div",
2692
2647
  {
2693
2648
  "data-tab-id": tab.id,
2694
2649
  draggable,
2695
- onDragStart: draggable ? handleDragStart : void 0,
2696
- onDragEnd: draggable ? handleDragEnd : void 0,
2697
- onDragOver: handleDragOver,
2698
- onDrop: handleDrop,
2699
- onDragEnter: handleDragEnter,
2700
- onDragLeave: handleDragLeave,
2650
+ onDragStart,
2651
+ onDragEnd,
2652
+ onDragOver,
2653
+ onDragLeave,
2654
+ onDrop,
2701
2655
  onMouseEnter,
2702
2656
  onMouseLeave,
2703
2657
  onClick,
@@ -2707,12 +2661,17 @@ var TabButton = ({
2707
2661
  justifyContent: "center",
2708
2662
  gap: "6px",
2709
2663
  padding: "6px 8px",
2664
+ // Reserve the close button's gutter so a long, ellipsized label never
2665
+ // renders underneath it. Reserved whenever the tab is closable (not
2666
+ // just when the button is shown) so the layout doesn't shift on hover.
2667
+ paddingLeft: closable ? `${CLOSE_BUTTON_GUTTER}px` : "8px",
2710
2668
  backgroundColor: isActive ? theme.colors.backgroundDark ?? theme.colors.backgroundSecondary : theme.colors.background,
2711
2669
  // The tab bar's bottom border lives on each tab: inactive tabs draw
2712
2670
  // it, the active tab leaves a gap so it reads as connected to the
2713
2671
  // terminal content below.
2714
2672
  borderBottom: isActive ? "1px solid transparent" : `1px solid ${theme.colors.border}`,
2715
- cursor: draggable ? "grab" : "pointer",
2673
+ cursor: draggable ? isBeingDragged ? "grabbing" : "grab" : "pointer",
2674
+ opacity: isBeingDragged ? 0.55 : 1,
2716
2675
  userSelect: "none",
2717
2676
  WebkitUserSelect: "none",
2718
2677
  fontSize: theme.fontSizes[1],
@@ -2725,10 +2684,27 @@ var TabButton = ({
2725
2684
  minWidth: 0,
2726
2685
  height: "100%",
2727
2686
  position: "relative",
2728
- boxSizing: "border-box",
2729
- ...getDragOverStyles()
2687
+ boxSizing: "border-box"
2730
2688
  },
2731
2689
  children: [
2690
+ dropPosition && /* @__PURE__ */ jsx11(
2691
+ "span",
2692
+ {
2693
+ "aria-hidden": "true",
2694
+ style: {
2695
+ position: "absolute",
2696
+ top: 3,
2697
+ bottom: 3,
2698
+ left: dropPosition === "before" ? 0 : void 0,
2699
+ right: dropPosition === "after" ? 0 : void 0,
2700
+ width: "2px",
2701
+ borderRadius: "1px",
2702
+ backgroundColor: theme.colors.primary,
2703
+ zIndex: 2,
2704
+ pointerEvents: "none"
2705
+ }
2706
+ }
2707
+ ),
2732
2708
  closable && showCloseButton && /* @__PURE__ */ jsx11(
2733
2709
  "button",
2734
2710
  {
@@ -2740,8 +2716,8 @@ var TabButton = ({
2740
2716
  display: "flex",
2741
2717
  alignItems: "center",
2742
2718
  justifyContent: "center",
2743
- width: "16px",
2744
- height: "16px",
2719
+ width: `${CLOSE_BUTTON_SIZE}px`,
2720
+ height: `${CLOSE_BUTTON_SIZE}px`,
2745
2721
  borderRadius: "3px",
2746
2722
  border: "none",
2747
2723
  backgroundColor: "transparent",
@@ -2749,7 +2725,7 @@ var TabButton = ({
2749
2725
  color: theme.colors.textSecondary,
2750
2726
  padding: 0,
2751
2727
  position: "absolute",
2752
- left: "8px"
2728
+ left: `${CLOSE_BUTTON_LEFT}px`
2753
2729
  },
2754
2730
  onMouseEnter: (e) => {
2755
2731
  e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;
@@ -2816,38 +2792,76 @@ var TabBar = ({
2816
2792
  renderTabLabel,
2817
2793
  className,
2818
2794
  showKeyboardHints = true,
2819
- // Drag and drop props
2820
- onTabDrop,
2821
- canDropOnTab,
2822
- enableDragAndDrop = false
2795
+ enableTabReorder,
2796
+ onTabReorder,
2797
+ canReorderTab
2823
2798
  }) => {
2824
2799
  const { theme } = useTheme7();
2825
2800
  const [hoveredTabId, setHoveredTabId] = useState3(null);
2826
2801
  const [draggedTabId, setDraggedTabId] = useState3(null);
2827
- const [dragOverTabId, setDragOverTabId] = useState3(null);
2828
- const handleDragStart = useCallback6((tabId) => {
2829
- setDraggedTabId(tabId);
2830
- }, []);
2831
- const handleDragEnd = useCallback6(() => {
2802
+ const [dropTarget, setDropTarget] = useState3(null);
2803
+ const reorderEnabled = onTabReorder !== void 0 && (enableTabReorder ?? true);
2804
+ const isReorderable = useCallback5(
2805
+ (tabId) => reorderEnabled && (canReorderTab ? canReorderTab(tabId) : true),
2806
+ [reorderEnabled, canReorderTab]
2807
+ );
2808
+ const handleDragStart = useCallback5(
2809
+ (tabId, e) => {
2810
+ setDraggedTabId(tabId);
2811
+ e.dataTransfer.setData(TAB_REORDER_MIME, tabId);
2812
+ e.dataTransfer.effectAllowed = "move";
2813
+ },
2814
+ []
2815
+ );
2816
+ const clearDrag = useCallback5(() => {
2832
2817
  setDraggedTabId(null);
2833
- setDragOverTabId(null);
2818
+ setDropTarget(null);
2834
2819
  }, []);
2835
- const handleDrop = useCallback6(
2836
- (targetTabId, draggedId) => {
2837
- if (draggedId !== targetTabId) {
2838
- onTabDrop?.(draggedId, targetTabId);
2820
+ const handleDragOver = useCallback5(
2821
+ (tabId, e) => {
2822
+ if (!draggedTabId || !isReorderable(draggedTabId) || !isReorderable(tabId)) {
2823
+ return;
2839
2824
  }
2840
- setDraggedTabId(null);
2841
- setDragOverTabId(null);
2825
+ e.preventDefault();
2826
+ e.dataTransfer.dropEffect = "move";
2827
+ if (draggedTabId === tabId) {
2828
+ setDropTarget(null);
2829
+ return;
2830
+ }
2831
+ const rect = e.currentTarget.getBoundingClientRect();
2832
+ const position = e.clientX < rect.left + rect.width / 2 ? "before" : "after";
2833
+ setDropTarget(
2834
+ (prev) => prev?.tabId === tabId && prev.position === position ? prev : { tabId, position }
2835
+ );
2842
2836
  },
2843
- [onTabDrop]
2837
+ [draggedTabId, isReorderable]
2838
+ );
2839
+ const handleDragLeave = useCallback5(
2840
+ (tabId, e) => {
2841
+ const related = e.relatedTarget;
2842
+ if (related && e.currentTarget.contains(related)) {
2843
+ return;
2844
+ }
2845
+ setDropTarget((prev) => prev?.tabId === tabId ? null : prev);
2846
+ },
2847
+ []
2848
+ );
2849
+ const handleDrop = useCallback5(
2850
+ (tabId, e) => {
2851
+ if (!draggedTabId || !isReorderable(draggedTabId) || !isReorderable(tabId)) {
2852
+ return;
2853
+ }
2854
+ e.preventDefault();
2855
+ e.stopPropagation();
2856
+ if (draggedTabId !== tabId) {
2857
+ const rect = e.currentTarget.getBoundingClientRect();
2858
+ const position = e.clientX < rect.left + rect.width / 2 ? "before" : "after";
2859
+ onTabReorder?.(draggedTabId, tabId, position);
2860
+ }
2861
+ clearDrag();
2862
+ },
2863
+ [draggedTabId, isReorderable, onTabReorder, clearDrag]
2844
2864
  );
2845
- const handleDragEnter = useCallback6((tabId) => {
2846
- setDragOverTabId(tabId);
2847
- }, []);
2848
- const handleDragLeave = useCallback6(() => {
2849
- setDragOverTabId(null);
2850
- }, []);
2851
2865
  return /* @__PURE__ */ jsxs8(
2852
2866
  "div",
2853
2867
  {
@@ -2887,34 +2901,55 @@ var TabBar = ({
2887
2901
  backgroundColor: theme.colors.backgroundSecondary,
2888
2902
  boxSizing: "border-box"
2889
2903
  },
2904
+ onDragLeave: (e) => {
2905
+ const related = e.relatedTarget;
2906
+ if (!related || !e.currentTarget.contains(related)) {
2907
+ setDropTarget(null);
2908
+ }
2909
+ },
2890
2910
  children: tabs.map((tab, index) => {
2891
- const canDrop = enableDragAndDrop && draggedTabId !== null && draggedTabId !== tab.id ? canDropOnTab ? canDropOnTab(draggedTabId, tab.id) : true : false;
2892
- return /* @__PURE__ */ jsx12(
2893
- TabButton,
2894
- {
2895
- tab,
2896
- isActive: tab.id === activeTabId,
2897
- isHovered: tab.id === hoveredTabId,
2898
- onMouseEnter: () => setHoveredTabId(tab.id),
2899
- onMouseLeave: () => setHoveredTabId(null),
2900
- onClick: () => onTabClick(tab.id),
2901
- onClose: () => onTabClose(tab.id),
2902
- keyboardHint: showKeyboardHints && index < 9 ? `\u2318 ${index + 1}` : void 0,
2903
- renderAccessory: renderTabAccessory,
2904
- renderIcon: renderTabIcon,
2905
- renderLabel: renderTabLabel,
2906
- draggable: enableDragAndDrop,
2907
- onDragStart: handleDragStart,
2908
- onDragEnd: handleDragEnd,
2909
- onDrop: (draggedId) => handleDrop(tab.id, draggedId),
2910
- canAcceptDrop: canDrop,
2911
- isDragOver: dragOverTabId === tab.id,
2912
- isBeingDragged: draggedTabId === tab.id,
2913
- onDragEnter: () => handleDragEnter(tab.id),
2914
- onDragLeave: handleDragLeave
2915
- },
2916
- tab.id
2917
- );
2911
+ const reorderable = isReorderable(tab.id);
2912
+ const acceptsDrop = reorderEnabled && draggedTabId !== null && draggedTabId !== tab.id && isReorderable(draggedTabId) && reorderable;
2913
+ const prevTab = index > 0 ? tabs[index - 1] : void 0;
2914
+ const showDivider = prevTab !== void 0 && prevTab.id !== activeTabId && tab.id !== activeTabId;
2915
+ return /* @__PURE__ */ jsxs8(React.Fragment, { children: [
2916
+ showDivider && /* @__PURE__ */ jsx12(
2917
+ "div",
2918
+ {
2919
+ "aria-hidden": "true",
2920
+ style: {
2921
+ flexShrink: 0,
2922
+ width: "1px",
2923
+ height: "16px",
2924
+ backgroundColor: theme.colors.border
2925
+ }
2926
+ }
2927
+ ),
2928
+ /* @__PURE__ */ jsx12(
2929
+ TabButton,
2930
+ {
2931
+ tab,
2932
+ isActive: tab.id === activeTabId,
2933
+ isHovered: tab.id === hoveredTabId,
2934
+ onMouseEnter: () => setHoveredTabId(tab.id),
2935
+ onMouseLeave: () => setHoveredTabId(null),
2936
+ onClick: () => onTabClick(tab.id),
2937
+ onClose: () => onTabClose(tab.id),
2938
+ keyboardHint: showKeyboardHints && index < 9 ? `\u2318 ${index + 1}` : void 0,
2939
+ renderAccessory: renderTabAccessory,
2940
+ renderIcon: renderTabIcon,
2941
+ renderLabel: renderTabLabel,
2942
+ draggable: reorderable,
2943
+ onDragStart: reorderable ? (e) => handleDragStart(tab.id, e) : void 0,
2944
+ onDragEnd: reorderable ? clearDrag : void 0,
2945
+ onDragOver: (e) => handleDragOver(tab.id, e),
2946
+ onDragLeave: (e) => handleDragLeave(tab.id, e),
2947
+ onDrop: (e) => handleDrop(tab.id, e),
2948
+ dropPosition: acceptsDrop && dropTarget?.tabId === tab.id ? dropTarget.position : null,
2949
+ isBeingDragged: draggedTabId === tab.id
2950
+ }
2951
+ )
2952
+ ] }, tab.id);
2918
2953
  })
2919
2954
  }
2920
2955
  ),
@@ -3024,11 +3059,10 @@ var useTabKeyboardShortcuts = ({
3024
3059
 
3025
3060
  // src/panels/TabbedTerminalPanel.tsx
3026
3061
  import { useTheme as useTheme9 } from "@principal-ade/industry-theme";
3027
- import { CollapsibleSplitPane } from "@principal-ade/panels";
3028
- import { Terminal as TerminalIcon2, Box, Boxes, Paperclip } from "lucide-react";
3029
- import React4, {
3062
+ import { Terminal as TerminalIcon2, Box, Boxes } from "lucide-react";
3063
+ import React3, {
3030
3064
  useState as useState4,
3031
- useCallback as useCallback7,
3065
+ useCallback as useCallback6,
3032
3066
  useEffect as useEffect5,
3033
3067
  useRef as useRef5
3034
3068
  } from "react";
@@ -3036,7 +3070,7 @@ import React4, {
3036
3070
  // src/components/TerminalStatusBar.tsx
3037
3071
  import { useTheme as useTheme8 } from "@principal-ade/industry-theme";
3038
3072
  import { Folder, GitBranch } from "lucide-react";
3039
- import React3 from "react";
3073
+ import React2 from "react";
3040
3074
  import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
3041
3075
  var AVATAR_SIZE = 14;
3042
3076
  var TerminalStatusBar = ({
@@ -3044,9 +3078,9 @@ var TerminalStatusBar = ({
3044
3078
  repo
3045
3079
  }) => {
3046
3080
  const { theme } = useTheme8();
3047
- const [avatarFailed, setAvatarFailed] = React3.useState(false);
3081
+ const [avatarFailed, setAvatarFailed] = React2.useState(false);
3048
3082
  const owner = repo?.owner;
3049
- React3.useEffect(() => {
3083
+ React2.useEffect(() => {
3050
3084
  setAvatarFailed(false);
3051
3085
  }, [owner]);
3052
3086
  const containerStyle = {
@@ -3212,17 +3246,17 @@ function TerminalTabContentInner(props, ref) {
3212
3246
  } = props;
3213
3247
  const [isWorkingFromActivity, setIsWorkingFromActivity] = useState4(false);
3214
3248
  const sessionRef = useRef5(null);
3215
- const handleSessionCreated = useCallback7(
3249
+ const handleSessionCreated = useCallback6(
3216
3250
  (sid) => onSessionCreated(tab.id, sid),
3217
3251
  [onSessionCreated, tab.id]
3218
3252
  );
3219
- const handleScrollPositionChange = useCallback7(
3253
+ const handleScrollPositionChange = useCallback6(
3220
3254
  (position) => {
3221
3255
  onScrollPositionChange?.(tab.id, position);
3222
3256
  },
3223
3257
  [onScrollPositionChange, tab.id]
3224
3258
  );
3225
- const handleActivityChange = useCallback7(
3259
+ const handleActivityChange = useCallback6(
3226
3260
  (state) => {
3227
3261
  const sid = sessionRef.current?.getSessionId();
3228
3262
  if (sid) {
@@ -3234,7 +3268,7 @@ function TerminalTabContentInner(props, ref) {
3234
3268
  },
3235
3269
  [autoShowBlinds, onActivityStateChange]
3236
3270
  );
3237
- React4.useImperativeHandle(
3271
+ React3.useImperativeHandle(
3238
3272
  ref,
3239
3273
  () => ({
3240
3274
  scrollToBottom: () => sessionRef.current?.scrollToBottom()
@@ -3298,8 +3332,8 @@ var areTerminalTabContentPropsEqual = (prevProps, nextProps) => {
3298
3332
  }
3299
3333
  return changes.length === 0;
3300
3334
  };
3301
- var TerminalTabContentForwarded = React4.forwardRef(TerminalTabContentInner);
3302
- var TerminalTabContent = React4.memo(TerminalTabContentForwarded, areTerminalTabContentPropsEqual);
3335
+ var TerminalTabContentForwarded = React3.forwardRef(TerminalTabContentInner);
3336
+ var TerminalTabContent = React3.memo(TerminalTabContentForwarded, areTerminalTabContentPropsEqual);
3303
3337
  TerminalTabContent.displayName = "TerminalTabContent";
3304
3338
  var TabbedTerminalPanelInner = ({
3305
3339
  context: _context,
@@ -3315,10 +3349,12 @@ var TabbedTerminalPanelInner = ({
3315
3349
  showAllTerminals = false,
3316
3350
  onShowAllTerminalsChange,
3317
3351
  hideShowAllTerminalsButton = true,
3352
+ enableTabReorder = true,
3318
3353
  tabLabelPrefix,
3319
3354
  renderTabContent,
3320
3355
  renderTabIcon,
3321
3356
  renderTabLabel,
3357
+ renderEmptyState,
3322
3358
  width,
3323
3359
  activeTabId: activeTabIdProp,
3324
3360
  onActiveTabChange,
@@ -3330,28 +3366,16 @@ var TabbedTerminalPanelInner = ({
3330
3366
  activityDetection = true,
3331
3367
  activityTimeout = 500,
3332
3368
  autoShowBlinds = false,
3333
- // Association props
3334
- associations,
3335
- onAssociationCollapsedChange,
3336
- onAssociationRatioChange,
3337
- renderAssociatedContent,
3338
- getAssociatedHeader,
3339
- // Drag and drop association
3340
- enableTabAssociationDrag = true,
3341
- onTabAssociate: onTabAssociateProp,
3342
- onTabDissociate: _onTabDissociate,
3343
- // TODO: implement dissociate (pop-out) functionality
3344
3369
  bottomBarContent,
3345
3370
  renderer
3346
3371
  }) => {
3347
3372
  const { theme } = useTheme9();
3348
- const onTabAssociate = actions.onTabAssociate ?? onTabAssociateProp;
3349
3373
  const [ownedTabs, setOwnedTabs] = useState4(initialTabs);
3350
3374
  const [foreignTabs, setForeignTabs] = useState4([]);
3351
3375
  const [internalActiveTabId, setInternalActiveTabId] = useState4(null);
3352
3376
  const isControlled = activeTabIdProp !== void 0;
3353
3377
  const activeTabId = isControlled ? activeTabIdProp : internalActiveTabId;
3354
- const setActiveTabId = React4.useCallback((tabId) => {
3378
+ const setActiveTabId = React3.useCallback((tabId) => {
3355
3379
  if (isControlled) {
3356
3380
  onActiveTabChange?.(tabId);
3357
3381
  } else {
@@ -3360,13 +3384,13 @@ var TabbedTerminalPanelInner = ({
3360
3384
  }
3361
3385
  }, [isControlled, onActiveTabChange]);
3362
3386
  const [activatedTabs, setActivatedTabs] = useState4(() => /* @__PURE__ */ new Set());
3363
- React4.useEffect(() => {
3387
+ React3.useEffect(() => {
3364
3388
  if (activeTabId && !activatedTabs.has(activeTabId)) {
3365
3389
  setActivatedTabs((prev) => new Set(prev).add(activeTabId));
3366
3390
  }
3367
3391
  }, [activeTabId, activatedTabs]);
3368
- const activationOrderRef = React4.useRef([]);
3369
- React4.useEffect(() => {
3392
+ const activationOrderRef = React3.useRef([]);
3393
+ React3.useEffect(() => {
3370
3394
  if (!activeTabId) return;
3371
3395
  const order = activationOrderRef.current.filter((id) => id !== activeTabId);
3372
3396
  order.push(activeTabId);
@@ -3374,7 +3398,7 @@ var TabbedTerminalPanelInner = ({
3374
3398
  }, [activeTabId]);
3375
3399
  const [sessionIds, setSessionIds] = useState4(/* @__PURE__ */ new Map());
3376
3400
  const [activityStates, setActivityStates] = useState4(/* @__PURE__ */ new Map());
3377
- const customTabsKey = React4.useMemo(() => {
3401
+ const customTabsKey = React3.useMemo(() => {
3378
3402
  const customTabs = initialTabs.filter((tab) => tab.contentType !== "terminal");
3379
3403
  return JSON.stringify(customTabs);
3380
3404
  }, [initialTabs]);
@@ -3414,13 +3438,13 @@ var TabbedTerminalPanelInner = ({
3414
3438
  onFocusTabHandled?.();
3415
3439
  }
3416
3440
  }, [requestFocusTabId, ownedTabs, foreignTabs, setActiveTabId, onFocusTabHandled, activeTabId]);
3417
- const getOwnedTabLabel = useCallback7((index, _directory) => {
3441
+ const getOwnedTabLabel = useCallback6((index, _directory) => {
3418
3442
  if (tabLabelPrefix) {
3419
3443
  return `${tabLabelPrefix} ${index + 1}`;
3420
3444
  }
3421
3445
  return `\u2318 ${index + 1}`;
3422
3446
  }, [tabLabelPrefix]);
3423
- const tabs = React4.useMemo(() => {
3447
+ const tabs = React3.useMemo(() => {
3424
3448
  const labeledOwnedTabs = ownedTabs.map((tab, index) => ({
3425
3449
  ...tab,
3426
3450
  // Only overwrite label for terminal tabs, preserve original label for custom tabs
@@ -3431,7 +3455,7 @@ var TabbedTerminalPanelInner = ({
3431
3455
  );
3432
3456
  return [...labeledOwnedTabs, ...sortedForeignTabs];
3433
3457
  }, [ownedTabs, foreignTabs, getOwnedTabLabel]);
3434
- const genericTabs = React4.useMemo(() => {
3458
+ const genericTabs = React3.useMemo(() => {
3435
3459
  return tabs.map((tab) => ({
3436
3460
  id: tab.id,
3437
3461
  label: tab.label,
@@ -3446,7 +3470,7 @@ var TabbedTerminalPanelInner = ({
3446
3470
  }, [tabs]);
3447
3471
  const tabRefsMap = useRef5(/* @__PURE__ */ new Map());
3448
3472
  const refCallbacksMap = useRef5(/* @__PURE__ */ new Map());
3449
- const getRefCallback = useCallback7((tabId) => {
3473
+ const getRefCallback = useCallback6((tabId) => {
3450
3474
  let callback = refCallbacksMap.current.get(tabId);
3451
3475
  if (!callback) {
3452
3476
  callback = (ref) => {
@@ -3463,7 +3487,7 @@ var TabbedTerminalPanelInner = ({
3463
3487
  const hasInitializedRef = useRef5(false);
3464
3488
  const isCreatingTabRef = useRef5(false);
3465
3489
  const headerRef = useRef5(null);
3466
- const restoreOwnedSessions = useCallback7(async () => {
3490
+ const restoreOwnedSessions = useCallback6(async () => {
3467
3491
  try {
3468
3492
  let sessions = [];
3469
3493
  if (actions.listTerminalSessions) {
@@ -3512,7 +3536,7 @@ var TabbedTerminalPanelInner = ({
3512
3536
  console.error("[TabbedTerminalPanel] Failed to restore owned sessions:", err);
3513
3537
  }
3514
3538
  }, [terminalContext, sessionIds, activeTabId, onTabsChange, actions, directory, setActiveTabId]);
3515
- const fetchForeignSessions = useCallback7(async () => {
3539
+ const fetchForeignSessions = useCallback6(async () => {
3516
3540
  try {
3517
3541
  if (!actions.listTerminalSessions) {
3518
3542
  return;
@@ -3546,7 +3570,7 @@ var TabbedTerminalPanelInner = ({
3546
3570
  console.error("[TabbedTerminalPanel] Failed to fetch foreign sessions:", err);
3547
3571
  }
3548
3572
  }, [terminalContext, actions]);
3549
- const clearForeignTabs = useCallback7(() => {
3573
+ const clearForeignTabs = useCallback6(() => {
3550
3574
  setForeignTabs((prevForeign) => {
3551
3575
  const foreignTabIds = new Set(prevForeign.map((t) => t.id));
3552
3576
  setSessionIds((prev) => {
@@ -3583,10 +3607,10 @@ var TabbedTerminalPanelInner = ({
3583
3607
  clearForeignTabs();
3584
3608
  }
3585
3609
  }, [showAllTerminals, fetchForeignSessions, clearForeignTabs]);
3586
- const switchTab = useCallback7((tabId) => {
3610
+ const switchTab = useCallback6((tabId) => {
3587
3611
  setActiveTabId(tabId);
3588
3612
  }, [setActiveTabId]);
3589
- const addNewTab = useCallback7(
3613
+ const addNewTab = useCallback6(
3590
3614
  (label, command, targetDirectory) => {
3591
3615
  const targetDir = targetDirectory || directory;
3592
3616
  const directoryName = targetDir.split("/").pop() || targetDir;
@@ -3607,10 +3631,30 @@ var TabbedTerminalPanelInner = ({
3607
3631
  },
3608
3632
  [directory, onTabsChange]
3609
3633
  );
3610
- const isForeignTab = useCallback7((tabId) => {
3634
+ const isForeignTab = useCallback6((tabId) => {
3611
3635
  return tabId.startsWith("tab-foreign-");
3612
3636
  }, []);
3613
- const closeTab = useCallback7(
3637
+ const handleTabReorder = useCallback6(
3638
+ (draggedTabId, targetTabId, position) => {
3639
+ if (draggedTabId === targetTabId) return;
3640
+ if (isForeignTab(draggedTabId) || isForeignTab(targetTabId)) return;
3641
+ const fromIndex = ownedTabs.findIndex((tab) => tab.id === draggedTabId);
3642
+ const targetIndex = ownedTabs.findIndex((tab) => tab.id === targetTabId);
3643
+ if (fromIndex === -1 || targetIndex === -1) return;
3644
+ const nextTabs = [...ownedTabs];
3645
+ const [moved] = nextTabs.splice(fromIndex, 1);
3646
+ let insertAt = targetIndex + (position === "after" ? 1 : 0);
3647
+ if (fromIndex < insertAt) insertAt -= 1;
3648
+ nextTabs.splice(insertAt, 0, moved);
3649
+ if (nextTabs.every((tab, index) => tab.id === ownedTabs[index].id)) {
3650
+ return;
3651
+ }
3652
+ setOwnedTabs(nextTabs);
3653
+ onTabsChange?.(nextTabs);
3654
+ },
3655
+ [ownedTabs, onTabsChange, isForeignTab]
3656
+ );
3657
+ const closeTab = useCallback6(
3614
3658
  async (tabId) => {
3615
3659
  const sessionId = sessionIds.get(tabId);
3616
3660
  const isForeign = isForeignTab(tabId);
@@ -3693,10 +3737,10 @@ var TabbedTerminalPanelInner = ({
3693
3737
  if (!requestCloseTabId) return;
3694
3738
  closeTab(requestCloseTabId);
3695
3739
  }, [requestCloseTabId]);
3696
- const handleSessionCreated = useCallback7((tabId, sessionId) => {
3740
+ const handleSessionCreated = useCallback6((tabId, sessionId) => {
3697
3741
  setSessionIds((prev) => new Map(prev).set(tabId, sessionId));
3698
3742
  }, []);
3699
- const handleActivityStateChange = useCallback7((sessionId, isActive) => {
3743
+ const handleActivityStateChange = useCallback6((sessionId, isActive) => {
3700
3744
  setActivityStates((prev) => {
3701
3745
  const next = new Map(prev);
3702
3746
  if (isActive) {
@@ -3728,7 +3772,7 @@ var TabbedTerminalPanelInner = ({
3728
3772
  }
3729
3773
  }
3730
3774
  });
3731
- const renderTabAccessory = useCallback7((tab) => {
3775
+ const renderTabAccessory = useCallback6((tab) => {
3732
3776
  const tabSessionId = sessionIds.get(tab.id);
3733
3777
  const isActive = tab.id === activeTabId;
3734
3778
  const record = tabSessionId ? programStatus?.[tabSessionId] : void 0;
@@ -3770,123 +3814,39 @@ var TabbedTerminalPanelInner = ({
3770
3814
  }
3771
3815
  ) });
3772
3816
  }, [activeTabId, theme, sessionIds, workingStates, activityStates, programStatus]);
3773
- const renderTerminalWithAssociation = useCallback7((tab, isActive, sessionId, association) => {
3774
- const terminalContent = /* @__PURE__ */ jsx14(
3775
- TerminalTabContent,
3776
- {
3777
- ref: getRefCallback(tab.id),
3778
- tab,
3779
- sessionId,
3780
- isActive,
3781
- isVisible,
3782
- actions,
3783
- events,
3784
- terminalContext,
3785
- onSessionCreated: handleSessionCreated,
3786
- renderer,
3787
- isForeign: tab.id.startsWith("tab-foreign-"),
3788
- activityDetection,
3789
- activityTimeout,
3790
- autoShowBlinds,
3791
- onActivityStateChange: handleActivityStateChange
3792
- },
3793
- `terminal-${tab.id}`
3794
- );
3795
- const hasAssociation = !!association;
3796
- const secondaryContent = hasAssociation && renderAssociatedContent ? renderAssociatedContent(association.associatedTabId, isActive) : /* @__PURE__ */ jsx14("div", { style: {
3797
- height: "100%",
3798
- display: "flex",
3799
- alignItems: "center",
3800
- justifyContent: "center",
3801
- color: theme.colors.textMuted,
3802
- fontSize: "13px",
3803
- backgroundColor: theme.colors.backgroundSecondary
3804
- }, children: "Drag a tab here to associate it with this terminal" });
3805
- const headerConfig = hasAssociation && getAssociatedHeader ? getAssociatedHeader(association.associatedTabId) : { title: "Drop zone", icon: /* @__PURE__ */ jsx14(Paperclip, { size: 14 }) };
3806
- const isCollapsed = hasAssociation ? association.collapsed : true;
3807
- const handleCollapsedChange = hasAssociation ? (collapsed) => onAssociationCollapsedChange?.(tab.id, collapsed) : void 0;
3808
- return /* @__PURE__ */ jsx14(
3809
- CollapsibleSplitPane,
3810
- {
3811
- style: { height: "100%" },
3812
- primaryContent: terminalContent,
3813
- secondaryContent,
3814
- collapsedHeader: headerConfig,
3815
- collapsed: isCollapsed,
3816
- onCollapsedChange: handleCollapsedChange,
3817
- ratio: hasAssociation ? association.ratio : 0.15,
3818
- onRatioChange: hasAssociation ? (ratio) => onAssociationRatioChange?.(tab.id, ratio) : void 0,
3819
- theme,
3820
- hideHeader: !hasAssociation
3821
- }
3822
- );
3823
- }, [
3817
+ const renderTerminalContent = useCallback6((tab, isActive, sessionId) => /* @__PURE__ */ jsx14(
3818
+ TerminalTabContent,
3819
+ {
3820
+ ref: getRefCallback(tab.id),
3821
+ tab,
3822
+ sessionId,
3823
+ isActive,
3824
+ isVisible,
3825
+ actions,
3826
+ events,
3827
+ terminalContext,
3828
+ onSessionCreated: handleSessionCreated,
3829
+ renderer,
3830
+ isForeign: tab.id.startsWith("tab-foreign-"),
3831
+ activityDetection,
3832
+ activityTimeout,
3833
+ autoShowBlinds,
3834
+ onActivityStateChange: handleActivityStateChange
3835
+ },
3836
+ `terminal-${tab.id}`
3837
+ ), [
3824
3838
  getRefCallback,
3825
3839
  isVisible,
3826
3840
  actions,
3827
3841
  events,
3828
3842
  terminalContext,
3829
3843
  handleSessionCreated,
3844
+ renderer,
3830
3845
  activityDetection,
3831
3846
  activityTimeout,
3832
3847
  autoShowBlinds,
3833
- handleActivityStateChange,
3834
- renderAssociatedContent,
3835
- getAssociatedHeader,
3836
- onAssociationCollapsedChange,
3837
- onAssociationRatioChange,
3838
- theme
3848
+ handleActivityStateChange
3839
3849
  ]);
3840
- const handleTabDrop = useCallback7(
3841
- (draggedTabId, targetTabId) => {
3842
- const draggedTab = tabs.find((t) => t.id === draggedTabId);
3843
- const targetTab = tabs.find((t) => t.id === targetTabId);
3844
- if (targetTab?.contentType === "terminal" && draggedTab?.contentType !== "terminal") {
3845
- onTabAssociate?.(targetTabId, draggedTabId);
3846
- setActiveTabId(targetTabId);
3847
- }
3848
- },
3849
- [tabs, onTabAssociate, setActiveTabId]
3850
- );
3851
- const canDropOnTab = useCallback7(
3852
- (draggedTabId, targetTabId) => {
3853
- const draggedTab = tabs.find((t) => t.id === draggedTabId);
3854
- const targetTab = tabs.find((t) => t.id === targetTabId);
3855
- return targetTab?.contentType === "terminal" && draggedTab?.contentType !== "terminal";
3856
- },
3857
- [tabs]
3858
- );
3859
- const [isDragOverContent, setIsDragOverContent] = useState4(false);
3860
- const handleContentDragEnter = useCallback7((e) => {
3861
- e.preventDefault();
3862
- if (activeTabId) {
3863
- const activeTab = tabs.find((t) => t.id === activeTabId);
3864
- if (activeTab?.contentType === "terminal") {
3865
- setIsDragOverContent(true);
3866
- }
3867
- }
3868
- }, [activeTabId, tabs]);
3869
- const handleContentDragLeave = useCallback7((e) => {
3870
- const relatedTarget = e.relatedTarget;
3871
- if (!e.currentTarget.contains(relatedTarget)) {
3872
- setIsDragOverContent(false);
3873
- }
3874
- }, []);
3875
- const handleContentDrop = useCallback7((e) => {
3876
- e.preventDefault();
3877
- e.stopPropagation();
3878
- setIsDragOverContent(false);
3879
- const draggedTabId = e.dataTransfer.getData("application/x-tab-association");
3880
- if (!draggedTabId || !activeTabId) {
3881
- return;
3882
- }
3883
- const draggedTab = tabs.find((t) => t.id === draggedTabId);
3884
- const activeTab = tabs.find((t) => t.id === activeTabId);
3885
- if (activeTab?.contentType === "terminal" && draggedTab?.contentType !== "terminal") {
3886
- onTabAssociate?.(activeTabId, draggedTabId);
3887
- setActiveTabId(activeTabId);
3888
- }
3889
- }, [activeTabId, tabs, onTabAssociate, setActiveTabId]);
3890
3850
  return /* @__PURE__ */ jsxs10(
3891
3851
  "div",
3892
3852
  {
@@ -3939,9 +3899,9 @@ var TabbedTerminalPanelInner = ({
3939
3899
  renderTabIcon,
3940
3900
  renderTabLabel,
3941
3901
  showKeyboardHints: false,
3942
- enableDragAndDrop: enableTabAssociationDrag,
3943
- onTabDrop: handleTabDrop,
3944
- canDropOnTab
3902
+ enableTabReorder,
3903
+ onTabReorder: handleTabReorder,
3904
+ canReorderTab: (tabId) => !isForeignTab(tabId)
3945
3905
  }
3946
3906
  ) }),
3947
3907
  /* @__PURE__ */ jsxs10(
@@ -3954,36 +3914,7 @@ var TabbedTerminalPanelInner = ({
3954
3914
  overflow: "hidden",
3955
3915
  width: "100%",
3956
3916
  minHeight: 0,
3957
- position: "relative",
3958
- // Visual feedback when dragging over
3959
- outline: isDragOverContent ? `3px dashed ${theme.colors.primary}` : "none",
3960
- outlineOffset: "-3px"
3961
- },
3962
- onDragEnterCapture: (e) => {
3963
- if (!enableTabAssociationDrag) return;
3964
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
3965
- e.preventDefault();
3966
- e.stopPropagation();
3967
- handleContentDragEnter(e);
3968
- },
3969
- onDragOverCapture: (e) => {
3970
- if (!enableTabAssociationDrag) return;
3971
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
3972
- e.preventDefault();
3973
- e.stopPropagation();
3974
- e.dataTransfer.dropEffect = "move";
3975
- },
3976
- onDragLeaveCapture: (e) => {
3977
- if (!enableTabAssociationDrag) return;
3978
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
3979
- handleContentDragLeave(e);
3980
- },
3981
- onDropCapture: (e) => {
3982
- if (!enableTabAssociationDrag) return;
3983
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
3984
- e.preventDefault();
3985
- e.stopPropagation();
3986
- handleContentDrop(e);
3917
+ position: "relative"
3987
3918
  },
3988
3919
  children: [
3989
3920
  tabs.map((tab) => {
@@ -3992,7 +3923,6 @@ var TabbedTerminalPanelInner = ({
3992
3923
  if (renderTabContent) {
3993
3924
  const customContent = renderTabContent(tab, isActive, sessionId, width);
3994
3925
  if (customContent === null && tab.contentType === "terminal") {
3995
- const association = associations?.[tab.id];
3996
3926
  return /* @__PURE__ */ jsx14(
3997
3927
  "div",
3998
3928
  {
@@ -4015,7 +3945,7 @@ var TabbedTerminalPanelInner = ({
4015
3945
  flexDirection: "column",
4016
3946
  opacity: isActive ? 1 : 0
4017
3947
  },
4018
- children: renderTerminalWithAssociation(tab, isActive, sessionId, association)
3948
+ children: renderTerminalContent(tab, isActive, sessionId)
4019
3949
  },
4020
3950
  tab.id
4021
3951
  );
@@ -4040,7 +3970,6 @@ var TabbedTerminalPanelInner = ({
4040
3970
  );
4041
3971
  }
4042
3972
  if (tab.contentType === "terminal") {
4043
- const association = associations?.[tab.id];
4044
3973
  return /* @__PURE__ */ jsx14(
4045
3974
  "div",
4046
3975
  {
@@ -4054,7 +3983,7 @@ var TabbedTerminalPanelInner = ({
4054
3983
  flexDirection: "column",
4055
3984
  opacity: isActive ? 1 : 0
4056
3985
  },
4057
- children: renderTerminalWithAssociation(tab, isActive, sessionId, association)
3986
+ children: renderTerminalContent(tab, isActive, sessionId)
4058
3987
  },
4059
3988
  tab.id
4060
3989
  );
@@ -4085,46 +4014,52 @@ var TabbedTerminalPanelInner = ({
4085
4014
  tab.id
4086
4015
  );
4087
4016
  }),
4088
- tabs.length === 0 && /* @__PURE__ */ jsxs10(
4089
- "div",
4090
- {
4091
- style: {
4092
- display: "flex",
4093
- flexDirection: "column",
4094
- alignItems: "center",
4095
- justifyContent: "center",
4096
- height: "100%",
4097
- color: theme.colors.textSecondary
4098
- },
4099
- children: [
4100
- /* @__PURE__ */ jsx14(
4101
- TerminalIcon2,
4102
- {
4103
- size: 32,
4104
- style: { opacity: 0.5, marginBottom: "16px" }
4105
- }
4106
- ),
4107
- /* @__PURE__ */ jsx14(
4108
- "button",
4109
- {
4110
- onClick: () => addNewTab(),
4111
- style: {
4112
- marginTop: "16px",
4113
- padding: "8px 16px",
4114
- backgroundColor: theme.colors.primary,
4115
- color: theme.colors.background,
4116
- border: "none",
4117
- borderRadius: "4px",
4118
- cursor: "pointer",
4119
- fontSize: theme.fontSizes[1],
4120
- fontFamily: theme.fonts.body
4121
- },
4122
- children: "New Terminal"
4123
- }
4124
- )
4125
- ]
4017
+ tabs.length === 0 && (() => {
4018
+ const customEmptyState = renderEmptyState?.();
4019
+ if (customEmptyState !== void 0 && customEmptyState !== null) {
4020
+ return customEmptyState;
4126
4021
  }
4127
- )
4022
+ return /* @__PURE__ */ jsxs10(
4023
+ "div",
4024
+ {
4025
+ style: {
4026
+ display: "flex",
4027
+ flexDirection: "column",
4028
+ alignItems: "center",
4029
+ justifyContent: "center",
4030
+ height: "100%",
4031
+ color: theme.colors.textSecondary
4032
+ },
4033
+ children: [
4034
+ /* @__PURE__ */ jsx14(
4035
+ TerminalIcon2,
4036
+ {
4037
+ size: 32,
4038
+ style: { opacity: 0.5, marginBottom: "16px" }
4039
+ }
4040
+ ),
4041
+ /* @__PURE__ */ jsx14(
4042
+ "button",
4043
+ {
4044
+ onClick: () => addNewTab(),
4045
+ style: {
4046
+ marginTop: "16px",
4047
+ padding: "8px 16px",
4048
+ backgroundColor: theme.colors.primary,
4049
+ color: theme.colors.background,
4050
+ border: "none",
4051
+ borderRadius: "4px",
4052
+ cursor: "pointer",
4053
+ fontSize: theme.fontSizes[1],
4054
+ fontFamily: theme.fonts.body
4055
+ },
4056
+ children: "New Terminal"
4057
+ }
4058
+ )
4059
+ ]
4060
+ }
4061
+ );
4062
+ })()
4128
4063
  ]
4129
4064
  }
4130
4065
  ),
@@ -4147,7 +4082,7 @@ var TabbedTerminalPanelInner = ({
4147
4082
  );
4148
4083
  };
4149
4084
  TabbedTerminalPanelInner.displayName = "TabbedTerminalPanelInner";
4150
- var TabbedTerminalPanelMemoized = React4.memo(TabbedTerminalPanelInner, (prevProps, nextProps) => {
4085
+ var TabbedTerminalPanelMemoized = React3.memo(TabbedTerminalPanelInner, (prevProps, nextProps) => {
4151
4086
  const changes = [];
4152
4087
  if (prevProps.terminalContext !== nextProps.terminalContext) changes.push("terminalContext");
4153
4088
  if (prevProps.directory !== nextProps.directory) changes.push("directory");
@@ -4156,6 +4091,7 @@ var TabbedTerminalPanelMemoized = React4.memo(TabbedTerminalPanelInner, (prevPro
4156
4091
  if (prevProps.isVisible !== nextProps.isVisible) changes.push("isVisible");
4157
4092
  if (prevProps.showAllTerminals !== nextProps.showAllTerminals) changes.push("showAllTerminals");
4158
4093
  if (prevProps.hideShowAllTerminalsButton !== nextProps.hideShowAllTerminalsButton) changes.push("hideShowAllTerminalsButton");
4094
+ if (prevProps.enableTabReorder !== nextProps.enableTabReorder) changes.push("enableTabReorder");
4159
4095
  if (prevProps.tabLabelPrefix !== nextProps.tabLabelPrefix) changes.push("tabLabelPrefix");
4160
4096
  if (prevProps.width !== nextProps.width) changes.push("width");
4161
4097
  if (prevProps.actions !== nextProps.actions) changes.push("actions");
@@ -4163,6 +4099,7 @@ var TabbedTerminalPanelMemoized = React4.memo(TabbedTerminalPanelInner, (prevPro
4163
4099
  if (prevProps.onShowAllTerminalsChange !== nextProps.onShowAllTerminalsChange) changes.push("onShowAllTerminalsChange");
4164
4100
  if (prevProps.initialTabs !== nextProps.initialTabs) changes.push("initialTabs");
4165
4101
  if (prevProps.renderTabContent !== nextProps.renderTabContent) changes.push("renderTabContent");
4102
+ if (prevProps.renderEmptyState !== nextProps.renderEmptyState) changes.push("renderEmptyState");
4166
4103
  if (prevProps.requestFocusTabId !== nextProps.requestFocusTabId) changes.push("requestFocusTabId");
4167
4104
  if (prevProps.requestCloseTabId !== nextProps.requestCloseTabId) changes.push("requestCloseTabId");
4168
4105
  if (prevProps.onFocusTabHandled !== nextProps.onFocusTabHandled) changes.push("onFocusTabHandled");
@@ -4173,9 +4110,6 @@ var TabbedTerminalPanelMemoized = React4.memo(TabbedTerminalPanelInner, (prevPro
4173
4110
  if (prevProps.activityDetection !== nextProps.activityDetection) changes.push("activityDetection");
4174
4111
  if (prevProps.activityTimeout !== nextProps.activityTimeout) changes.push("activityTimeout");
4175
4112
  if (prevProps.autoShowBlinds !== nextProps.autoShowBlinds) changes.push("autoShowBlinds");
4176
- if (prevProps.associations !== nextProps.associations) changes.push("associations");
4177
- if (prevProps.renderAssociatedContent !== nextProps.renderAssociatedContent) changes.push("renderAssociatedContent");
4178
- if (prevProps.getAssociatedHeader !== nextProps.getAssociatedHeader) changes.push("getAssociatedHeader");
4179
4113
  if (prevProps.bottomBarContent !== nextProps.bottomBarContent) changes.push("bottomBarContent");
4180
4114
  const ignoredChanges = [];
4181
4115
  if (prevProps.context !== nextProps.context) ignoredChanges.push("context");
@@ -1 +1 @@
1
- {"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../../src/components/TabBar/TabBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkBnD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA2LxC,CAAC"}
1
+ {"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../../src/components/TabBar/TabBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,iBAAiB,CAAC;AAwBvE,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA0RxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabButton.d.ts","sourceRoot":"","sources":["../../../../src/components/TabBar/TabButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQtD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA0P9C,CAAC"}
1
+ {"version":3,"file":"TabButton.d.ts","sourceRoot":"","sources":["../../../../src/components/TabBar/TabButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiBtD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAmL9C,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { TabBar } from './TabBar';
2
2
  export { TabButton } from './TabButton';
3
- export type { Tab, TabBarProps, TabButtonProps } from '../../types/tab';
3
+ export type { Tab, TabBarProps, TabButtonProps, TabReorderPosition } from '../../types/tab';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/TabBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/TabBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTerminalDropZone.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTerminalDropZone.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IAMtC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAKtC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAOnB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,OAAO,CAAC;IAEpB,aAAa,EAAE;QACb,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;QACzC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;QAC1C,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;KAC3C,CAAC;IAEF,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAEzC,aAAa,EAAE,SAAS,CAAC;CAC1B;AAoBD,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,KAAK,EACL,cAAc,GACf,EAAE,uBAAuB,GAAG,sBAAsB,CAsFlD"}
1
+ {"version":3,"file":"useTerminalDropZone.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTerminalDropZone.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,MAAM,WAAW,uBAAuB;IAMtC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAKtC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAOnB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,OAAO,CAAC;IAEpB,aAAa,EAAE;QACb,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;QACzC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;QAC1C,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;KAC3C,CAAC;IAEF,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAEzC,aAAa,EAAE,SAAS,CAAC;CAC1B;AAoBD,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,KAAK,EACL,cAAc,GACf,EAAE,uBAAuB,GAAG,sBAAsB,CA8GlD"}
@@ -85,8 +85,6 @@ export interface TerminalPanelActions extends CorePanelActions {
85
85
  onTerminalData: (sessionId: string, callback: (data: string) => void) => () => void;
86
86
  listTerminalSessions: () => Promise<TerminalSessionInfo[]>;
87
87
  getTerminalBuffer?: (sessionId: string) => Promise<string | null>;
88
- onTabAssociate?: (terminalTabId: string, associatedTabId: string) => void;
89
- onTabDissociate?: (terminalTabId: string, associatedTabId: string) => void;
90
88
  }
91
89
  export declare function getTerminalSessions(context: PanelContextValue<TerminalPanelContext>): TerminalSessionInfo[];
92
90
  export declare function getTerminalSession(context: PanelContextValue<TerminalPanelContext>, sessionId: string): TerminalSessionInfo | undefined;
@@ -102,12 +100,6 @@ export declare function getWorkspacePath(context: PanelContextValue): string | n
102
100
  export declare function getTerminalDirectory(context: PanelContextValue, terminalScope?: TerminalScope): string | null;
103
101
  export declare function getTerminalSlice(context: PanelContextValue<TerminalPanelContext>): DataSlice<TerminalSessionInfo[]> | undefined;
104
102
  import type { BaseTab } from '../types/tab';
105
- export interface TabAssociation {
106
- associatedTabId: string;
107
- collapsed: boolean;
108
- ratio: number;
109
- }
110
- export type TabAssociations = Record<string, TabAssociation>;
111
103
  export interface TerminalWorkingState {
112
104
  isWorking: boolean;
113
105
  message?: string;
@@ -134,28 +126,19 @@ export interface TabbedTerminalPanelProps<TTab extends BaseTab = TerminalTab> ex
134
126
  showAllTerminals?: boolean;
135
127
  onShowAllTerminalsChange?: (showAll: boolean) => void;
136
128
  hideShowAllTerminalsButton?: boolean;
129
+ enableTabReorder?: boolean;
137
130
  tabLabelPrefix?: string;
138
131
  renderTabContent?: (tab: TTab, isActive: boolean, sessionId?: string | null, width?: number) => React.ReactNode;
139
132
  renderTabIcon?: (tab: TTab) => React.ReactNode;
140
133
  requestCloseTabId?: string | null;
141
134
  bottomBarContent?: React.ReactNode;
142
135
  renderTabLabel?: (tab: TTab) => React.ReactNode;
136
+ renderEmptyState?: () => React.ReactNode;
143
137
  width?: number;
144
138
  workingStates?: Record<string, TerminalWorkingState>;
145
139
  programStatus?: Record<string, ProgramStatusRecord>;
146
140
  activityDetection?: boolean;
147
141
  activityTimeout?: number;
148
142
  autoShowBlinds?: boolean;
149
- associations?: TabAssociations;
150
- onAssociationCollapsedChange?: (tabId: string, collapsed: boolean) => void;
151
- onAssociationRatioChange?: (tabId: string, ratio: number) => void;
152
- renderAssociatedContent?: (associatedTabId: string, isActive: boolean) => React.ReactNode;
153
- getAssociatedHeader?: (associatedTabId: string) => {
154
- icon?: React.ReactNode;
155
- title: string;
156
- } | undefined;
157
- enableTabAssociationDrag?: boolean;
158
- onTabAssociate?: (terminalTabId: string, associatedTabId: string) => void;
159
- onTabDissociate?: (terminalTabId: string, associatedTabId: string) => void;
160
143
  }
161
144
  //# sourceMappingURL=index.d.ts.map
@@ -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":"AAIA,OAAO,KAKN,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AAkExB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAsyCD,eAAO,MAAM,mBAAmB,EAAkC,CAAC,IAAI,SAAS,OAAO,cAAc,EAAE,OAAO,GAAG,WAAW,EAC1H,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC,KAClC,KAAK,CAAC,YAAY,CAAC"}
1
+ {"version":3,"file":"TabbedTerminalPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TabbedTerminalPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAKN,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AAmExB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAypCD,eAAO,MAAM,mBAAmB,EAAkC,CAAC,IAAI,SAAS,OAAO,cAAc,EAAE,OAAO,GAAG,WAAW,EAC1H,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC,KAClC,KAAK,CAAC,YAAY,CAAC"}
@@ -16,6 +16,7 @@ export interface LegacyTab {
16
16
  closable?: boolean;
17
17
  metadata?: Record<string, unknown>;
18
18
  }
19
+ export type TabReorderPosition = 'before' | 'after';
19
20
  export interface TabBarProps {
20
21
  tabs: Tab[];
21
22
  activeTabId: string | null;
@@ -29,9 +30,9 @@ export interface TabBarProps {
29
30
  renderTabLabel?: (tab: Tab) => ReactNode;
30
31
  className?: string;
31
32
  showKeyboardHints?: boolean;
32
- onTabDrop?: (draggedTabId: string, targetTabId: string) => void;
33
- canDropOnTab?: (draggedTabId: string, targetTabId: string) => boolean;
34
- enableDragAndDrop?: boolean;
33
+ enableTabReorder?: boolean;
34
+ onTabReorder?: (draggedTabId: string, targetTabId: string, position: TabReorderPosition) => void;
35
+ canReorderTab?: (tabId: string) => boolean;
35
36
  }
36
37
  export interface TabButtonProps {
37
38
  tab: Tab;
@@ -46,13 +47,12 @@ export interface TabButtonProps {
46
47
  renderIcon?: (tab: Tab) => ReactNode;
47
48
  renderLabel?: (tab: Tab) => ReactNode;
48
49
  draggable?: boolean;
49
- onDragStart?: (tabId: string) => void;
50
+ onDragStart?: (e: React.DragEvent<HTMLDivElement>) => void;
50
51
  onDragEnd?: () => void;
51
- onDrop?: (draggedTabId: string) => void;
52
- canAcceptDrop?: boolean;
53
- isDragOver?: boolean;
52
+ onDragOver?: (e: React.DragEvent<HTMLDivElement>) => void;
53
+ onDragLeave?: (e: React.DragEvent<HTMLDivElement>) => void;
54
+ onDrop?: (e: React.DragEvent<HTMLDivElement>) => void;
55
+ dropPosition?: TabReorderPosition | null;
54
56
  isBeingDragged?: boolean;
55
- onDragEnter?: () => void;
56
- onDragLeave?: () => void;
57
57
  }
58
58
  //# sourceMappingURL=tab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab.d.ts","sourceRoot":"","sources":["../../../src/types/tab.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,MAAM,WAAW,OAAO;IAEtB,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,SAAS,CAAC;IAGjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG;IAE1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAKF,MAAM,WAAW,SAAS;IAExB,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,SAAS,CAAC;IAGjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,GAAG,EAAE,CAAC;IAGZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAGtB,WAAW,CAAC,EAAE,SAAS,CAAC;IAGxB,YAAY,CAAC,EAAE,SAAS,CAAC;IAGzB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IAG7C,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IAGxC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IAGzC,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAQ5B,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAMhE,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IAKtE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAKD,MAAM,WAAW,cAAc;IAE7B,GAAG,EAAE,GAAG,CAAC;IAGT,QAAQ,EAAE,OAAO,CAAC;IAGlB,SAAS,EAAE,OAAO,CAAC;IAGnB,YAAY,EAAE,MAAM,IAAI,CAAC;IAGzB,YAAY,EAAE,MAAM,IAAI,CAAC;IAGzB,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IAG1C,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IAGrC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,CAAC;IAKtC,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGtC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAGvB,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAGzB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B"}
1
+ {"version":3,"file":"tab.d.ts","sourceRoot":"","sources":["../../../src/types/tab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const TAB_REORDER_MIME = "application/x-tab-reorder";
2
+ export declare function isTabReorderDrag(dataTransfer: DataTransfer | null): boolean;
3
+ //# sourceMappingURL=tabDrag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabDrag.d.ts","sourceRoot":"","sources":["../../../src/utils/tabDrag.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAG5D,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAE3E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@industry-theme/xterm-terminal-panel",
3
- "version": "0.9.6",
3
+ "version": "0.10.0",
4
4
  "description": "Industry-themed xterm.js terminal components with panel framework integration",
5
5
  "type": "module",
6
6
  "sideEffects": [