@industry-theme/xterm-terminal-panel 0.9.7 → 0.10.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
@@ -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":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACpG,YAAY,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAIjF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACnF,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EACV,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,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,MAAM,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAG5D,YAAY,EACV,GAAG,EACH,OAAO,EACP,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAIzB,YAAY,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,YAAY,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAO1F,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,EACb,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAE5B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EACL,SAAS,EACT,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,cAAc,EACd,KAAK,EACL,OAAO,EACP,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAOpD,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
@@ -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.1",
163
191
  description: "Industry-themed xterm.js terminal components with panel framework integration",
164
192
  type: "module",
165
193
  sideEffects: [
@@ -2581,11 +2609,10 @@ 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 React2, { 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";
2590
2617
  var CLOSE_BUTTON_LEFT = 8;
2591
2618
  var CLOSE_BUTTON_SIZE = 16;
@@ -2603,105 +2630,28 @@ var TabButton = ({
2603
2630
  renderAccessory,
2604
2631
  renderIcon,
2605
2632
  renderLabel,
2606
- // Drag and drop props
2607
2633
  draggable = false,
2608
2634
  onDragStart,
2609
2635
  onDragEnd,
2610
- onDrop,
2611
- canAcceptDrop = false,
2612
- isDragOver = false,
2613
- onDragEnter,
2636
+ onDragOver,
2614
2637
  onDragLeave,
2615
- isBeingDragged: _isBeingDragged = false
2638
+ onDrop,
2639
+ dropPosition = null,
2640
+ isBeingDragged = false
2616
2641
  }) => {
2617
2642
  const { theme } = useTheme6();
2618
2643
  const showCloseButton = isHovered || isActive;
2619
2644
  const closable = tab.closable !== false;
2620
- const handleDragStart = useCallback5(
2621
- (e) => {
2622
- const target = e.currentTarget;
2623
- e.dataTransfer.setData("application/x-tab-association", tab.id);
2624
- e.dataTransfer.effectAllowed = "move";
2625
- if (target) {
2626
- const clone = target.cloneNode(true);
2627
- clone.style.position = "fixed";
2628
- clone.style.top = "-9999px";
2629
- clone.style.left = "-9999px";
2630
- clone.style.width = `${target.offsetWidth}px`;
2631
- clone.style.height = `${target.offsetHeight}px`;
2632
- clone.style.opacity = "0.8";
2633
- clone.style.pointerEvents = "none";
2634
- clone.style.transform = "none";
2635
- clone.style.zIndex = "99999";
2636
- document.body.appendChild(clone);
2637
- e.dataTransfer.setDragImage(clone, target.offsetWidth / 2, target.offsetHeight / 2);
2638
- setTimeout(() => {
2639
- if (clone.parentNode) {
2640
- clone.parentNode.removeChild(clone);
2641
- }
2642
- }, 100);
2643
- }
2644
- onDragStart?.(tab.id);
2645
- },
2646
- [tab.id, onDragStart]
2647
- );
2648
- const handleDragEnd = useCallback5(() => {
2649
- onDragEnd?.();
2650
- }, [onDragEnd]);
2651
- const handleDragOver = useCallback5(
2652
- (e) => {
2653
- if (canAcceptDrop) {
2654
- e.preventDefault();
2655
- e.dataTransfer.dropEffect = "move";
2656
- }
2657
- },
2658
- [canAcceptDrop]
2659
- );
2660
- const handleDrop = useCallback5(
2661
- (e) => {
2662
- e.preventDefault();
2663
- const draggedTabId = e.dataTransfer.getData("application/x-tab-association");
2664
- if (draggedTabId && draggedTabId !== tab.id) {
2665
- onDrop?.(draggedTabId);
2666
- }
2667
- },
2668
- [tab.id, onDrop]
2669
- );
2670
- const handleDragEnter = useCallback5(
2671
- (e) => {
2672
- e.preventDefault();
2673
- onDragEnter?.();
2674
- },
2675
- [onDragEnter]
2676
- );
2677
- const handleDragLeave = useCallback5(
2678
- (e) => {
2679
- e.preventDefault();
2680
- onDragLeave?.();
2681
- },
2682
- [onDragLeave]
2683
- );
2684
- const getDragOverStyles = () => {
2685
- if (isDragOver && canAcceptDrop) {
2686
- return {
2687
- outline: `2px solid ${theme.colors.primary}`,
2688
- outlineOffset: "-2px",
2689
- backgroundColor: theme.colors.backgroundTertiary
2690
- };
2691
- }
2692
- return {};
2693
- };
2694
2645
  return /* @__PURE__ */ jsxs7(
2695
2646
  "div",
2696
2647
  {
2697
2648
  "data-tab-id": tab.id,
2698
2649
  draggable,
2699
- onDragStart: draggable ? handleDragStart : void 0,
2700
- onDragEnd: draggable ? handleDragEnd : void 0,
2701
- onDragOver: handleDragOver,
2702
- onDrop: handleDrop,
2703
- onDragEnter: handleDragEnter,
2704
- onDragLeave: handleDragLeave,
2650
+ onDragStart,
2651
+ onDragEnd,
2652
+ onDragOver,
2653
+ onDragLeave,
2654
+ onDrop,
2705
2655
  onMouseEnter,
2706
2656
  onMouseLeave,
2707
2657
  onClick,
@@ -2715,12 +2665,13 @@ var TabButton = ({
2715
2665
  // renders underneath it. Reserved whenever the tab is closable (not
2716
2666
  // just when the button is shown) so the layout doesn't shift on hover.
2717
2667
  paddingLeft: closable ? `${CLOSE_BUTTON_GUTTER}px` : "8px",
2718
- backgroundColor: isActive ? theme.colors.backgroundDark ?? theme.colors.backgroundSecondary : theme.colors.background,
2668
+ backgroundColor: isActive ? theme.colors.background : theme.colors.backgroundDark ?? theme.colors.backgroundSecondary,
2719
2669
  // The tab bar's bottom border lives on each tab: inactive tabs draw
2720
2670
  // it, the active tab leaves a gap so it reads as connected to the
2721
2671
  // terminal content below.
2722
2672
  borderBottom: isActive ? "1px solid transparent" : `1px solid ${theme.colors.border}`,
2723
- cursor: draggable ? "grab" : "pointer",
2673
+ cursor: draggable ? isBeingDragged ? "grabbing" : "grab" : "pointer",
2674
+ opacity: isBeingDragged ? 0.55 : 1,
2724
2675
  userSelect: "none",
2725
2676
  WebkitUserSelect: "none",
2726
2677
  fontSize: theme.fontSizes[1],
@@ -2733,10 +2684,27 @@ var TabButton = ({
2733
2684
  minWidth: 0,
2734
2685
  height: "100%",
2735
2686
  position: "relative",
2736
- boxSizing: "border-box",
2737
- ...getDragOverStyles()
2687
+ boxSizing: "border-box"
2738
2688
  },
2739
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
+ ),
2740
2708
  closable && showCloseButton && /* @__PURE__ */ jsx11(
2741
2709
  "button",
2742
2710
  {
@@ -2824,38 +2792,76 @@ var TabBar = ({
2824
2792
  renderTabLabel,
2825
2793
  className,
2826
2794
  showKeyboardHints = true,
2827
- // Drag and drop props
2828
- onTabDrop,
2829
- canDropOnTab,
2830
- enableDragAndDrop = false
2795
+ enableTabReorder,
2796
+ onTabReorder,
2797
+ canReorderTab
2831
2798
  }) => {
2832
2799
  const { theme } = useTheme7();
2833
2800
  const [hoveredTabId, setHoveredTabId] = useState3(null);
2834
2801
  const [draggedTabId, setDraggedTabId] = useState3(null);
2835
- const [dragOverTabId, setDragOverTabId] = useState3(null);
2836
- const handleDragStart = useCallback6((tabId) => {
2837
- setDraggedTabId(tabId);
2838
- }, []);
2839
- 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(() => {
2840
2817
  setDraggedTabId(null);
2841
- setDragOverTabId(null);
2818
+ setDropTarget(null);
2842
2819
  }, []);
2843
- const handleDrop = useCallback6(
2844
- (targetTabId, draggedId) => {
2845
- if (draggedId !== targetTabId) {
2846
- onTabDrop?.(draggedId, targetTabId);
2820
+ const handleDragOver = useCallback5(
2821
+ (tabId, e) => {
2822
+ if (!draggedTabId || !isReorderable(draggedTabId) || !isReorderable(tabId)) {
2823
+ return;
2824
+ }
2825
+ e.preventDefault();
2826
+ e.dataTransfer.dropEffect = "move";
2827
+ if (draggedTabId === tabId) {
2828
+ setDropTarget(null);
2829
+ return;
2847
2830
  }
2848
- setDraggedTabId(null);
2849
- setDragOverTabId(null);
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
+ );
2850
2836
  },
2851
- [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]
2852
2864
  );
2853
- const handleDragEnter = useCallback6((tabId) => {
2854
- setDragOverTabId(tabId);
2855
- }, []);
2856
- const handleDragLeave = useCallback6(() => {
2857
- setDragOverTabId(null);
2858
- }, []);
2859
2865
  return /* @__PURE__ */ jsxs8(
2860
2866
  "div",
2861
2867
  {
@@ -2895,11 +2901,18 @@ var TabBar = ({
2895
2901
  backgroundColor: theme.colors.backgroundSecondary,
2896
2902
  boxSizing: "border-box"
2897
2903
  },
2904
+ onDragLeave: (e) => {
2905
+ const related = e.relatedTarget;
2906
+ if (!related || !e.currentTarget.contains(related)) {
2907
+ setDropTarget(null);
2908
+ }
2909
+ },
2898
2910
  children: tabs.map((tab, index) => {
2899
- const canDrop = enableDragAndDrop && draggedTabId !== null && draggedTabId !== tab.id ? canDropOnTab ? canDropOnTab(draggedTabId, tab.id) : true : false;
2911
+ const reorderable = isReorderable(tab.id);
2912
+ const acceptsDrop = reorderEnabled && draggedTabId !== null && draggedTabId !== tab.id && isReorderable(draggedTabId) && reorderable;
2900
2913
  const prevTab = index > 0 ? tabs[index - 1] : void 0;
2901
2914
  const showDivider = prevTab !== void 0 && prevTab.id !== activeTabId && tab.id !== activeTabId;
2902
- return /* @__PURE__ */ jsxs8(React2.Fragment, { children: [
2915
+ return /* @__PURE__ */ jsxs8(React.Fragment, { children: [
2903
2916
  showDivider && /* @__PURE__ */ jsx12(
2904
2917
  "div",
2905
2918
  {
@@ -2926,15 +2939,14 @@ var TabBar = ({
2926
2939
  renderAccessory: renderTabAccessory,
2927
2940
  renderIcon: renderTabIcon,
2928
2941
  renderLabel: renderTabLabel,
2929
- draggable: enableDragAndDrop,
2930
- onDragStart: handleDragStart,
2931
- onDragEnd: handleDragEnd,
2932
- onDrop: (draggedId) => handleDrop(tab.id, draggedId),
2933
- canAcceptDrop: canDrop,
2934
- isDragOver: dragOverTabId === tab.id,
2935
- isBeingDragged: draggedTabId === tab.id,
2936
- onDragEnter: () => handleDragEnter(tab.id),
2937
- onDragLeave: handleDragLeave
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
2938
2950
  }
2939
2951
  )
2940
2952
  ] }, tab.id);
@@ -3047,11 +3059,10 @@ var useTabKeyboardShortcuts = ({
3047
3059
 
3048
3060
  // src/panels/TabbedTerminalPanel.tsx
3049
3061
  import { useTheme as useTheme9 } from "@principal-ade/industry-theme";
3050
- import { CollapsibleSplitPane } from "@principal-ade/panels";
3051
- import { Terminal as TerminalIcon2, Box, Boxes, Paperclip } from "lucide-react";
3052
- import React4, {
3062
+ import { Terminal as TerminalIcon2, Box, Boxes } from "lucide-react";
3063
+ import React3, {
3053
3064
  useState as useState4,
3054
- useCallback as useCallback7,
3065
+ useCallback as useCallback6,
3055
3066
  useEffect as useEffect5,
3056
3067
  useRef as useRef5
3057
3068
  } from "react";
@@ -3059,7 +3070,7 @@ import React4, {
3059
3070
  // src/components/TerminalStatusBar.tsx
3060
3071
  import { useTheme as useTheme8 } from "@principal-ade/industry-theme";
3061
3072
  import { Folder, GitBranch } from "lucide-react";
3062
- import React3 from "react";
3073
+ import React2 from "react";
3063
3074
  import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
3064
3075
  var AVATAR_SIZE = 14;
3065
3076
  var TerminalStatusBar = ({
@@ -3067,9 +3078,9 @@ var TerminalStatusBar = ({
3067
3078
  repo
3068
3079
  }) => {
3069
3080
  const { theme } = useTheme8();
3070
- const [avatarFailed, setAvatarFailed] = React3.useState(false);
3081
+ const [avatarFailed, setAvatarFailed] = React2.useState(false);
3071
3082
  const owner = repo?.owner;
3072
- React3.useEffect(() => {
3083
+ React2.useEffect(() => {
3073
3084
  setAvatarFailed(false);
3074
3085
  }, [owner]);
3075
3086
  const containerStyle = {
@@ -3235,17 +3246,17 @@ function TerminalTabContentInner(props, ref) {
3235
3246
  } = props;
3236
3247
  const [isWorkingFromActivity, setIsWorkingFromActivity] = useState4(false);
3237
3248
  const sessionRef = useRef5(null);
3238
- const handleSessionCreated = useCallback7(
3249
+ const handleSessionCreated = useCallback6(
3239
3250
  (sid) => onSessionCreated(tab.id, sid),
3240
3251
  [onSessionCreated, tab.id]
3241
3252
  );
3242
- const handleScrollPositionChange = useCallback7(
3253
+ const handleScrollPositionChange = useCallback6(
3243
3254
  (position) => {
3244
3255
  onScrollPositionChange?.(tab.id, position);
3245
3256
  },
3246
3257
  [onScrollPositionChange, tab.id]
3247
3258
  );
3248
- const handleActivityChange = useCallback7(
3259
+ const handleActivityChange = useCallback6(
3249
3260
  (state) => {
3250
3261
  const sid = sessionRef.current?.getSessionId();
3251
3262
  if (sid) {
@@ -3257,7 +3268,7 @@ function TerminalTabContentInner(props, ref) {
3257
3268
  },
3258
3269
  [autoShowBlinds, onActivityStateChange]
3259
3270
  );
3260
- React4.useImperativeHandle(
3271
+ React3.useImperativeHandle(
3261
3272
  ref,
3262
3273
  () => ({
3263
3274
  scrollToBottom: () => sessionRef.current?.scrollToBottom()
@@ -3321,8 +3332,8 @@ var areTerminalTabContentPropsEqual = (prevProps, nextProps) => {
3321
3332
  }
3322
3333
  return changes.length === 0;
3323
3334
  };
3324
- var TerminalTabContentForwarded = React4.forwardRef(TerminalTabContentInner);
3325
- var TerminalTabContent = React4.memo(TerminalTabContentForwarded, areTerminalTabContentPropsEqual);
3335
+ var TerminalTabContentForwarded = React3.forwardRef(TerminalTabContentInner);
3336
+ var TerminalTabContent = React3.memo(TerminalTabContentForwarded, areTerminalTabContentPropsEqual);
3326
3337
  TerminalTabContent.displayName = "TerminalTabContent";
3327
3338
  var TabbedTerminalPanelInner = ({
3328
3339
  context: _context,
@@ -3338,6 +3349,7 @@ var TabbedTerminalPanelInner = ({
3338
3349
  showAllTerminals = false,
3339
3350
  onShowAllTerminalsChange,
3340
3351
  hideShowAllTerminalsButton = true,
3352
+ enableTabReorder = true,
3341
3353
  tabLabelPrefix,
3342
3354
  renderTabContent,
3343
3355
  renderTabIcon,
@@ -3354,28 +3366,16 @@ var TabbedTerminalPanelInner = ({
3354
3366
  activityDetection = true,
3355
3367
  activityTimeout = 500,
3356
3368
  autoShowBlinds = false,
3357
- // Association props
3358
- associations,
3359
- onAssociationCollapsedChange,
3360
- onAssociationRatioChange,
3361
- renderAssociatedContent,
3362
- getAssociatedHeader,
3363
- // Drag and drop association
3364
- enableTabAssociationDrag = true,
3365
- onTabAssociate: onTabAssociateProp,
3366
- onTabDissociate: _onTabDissociate,
3367
- // TODO: implement dissociate (pop-out) functionality
3368
3369
  bottomBarContent,
3369
3370
  renderer
3370
3371
  }) => {
3371
3372
  const { theme } = useTheme9();
3372
- const onTabAssociate = actions.onTabAssociate ?? onTabAssociateProp;
3373
3373
  const [ownedTabs, setOwnedTabs] = useState4(initialTabs);
3374
3374
  const [foreignTabs, setForeignTabs] = useState4([]);
3375
3375
  const [internalActiveTabId, setInternalActiveTabId] = useState4(null);
3376
3376
  const isControlled = activeTabIdProp !== void 0;
3377
3377
  const activeTabId = isControlled ? activeTabIdProp : internalActiveTabId;
3378
- const setActiveTabId = React4.useCallback((tabId) => {
3378
+ const setActiveTabId = React3.useCallback((tabId) => {
3379
3379
  if (isControlled) {
3380
3380
  onActiveTabChange?.(tabId);
3381
3381
  } else {
@@ -3384,13 +3384,13 @@ var TabbedTerminalPanelInner = ({
3384
3384
  }
3385
3385
  }, [isControlled, onActiveTabChange]);
3386
3386
  const [activatedTabs, setActivatedTabs] = useState4(() => /* @__PURE__ */ new Set());
3387
- React4.useEffect(() => {
3387
+ React3.useEffect(() => {
3388
3388
  if (activeTabId && !activatedTabs.has(activeTabId)) {
3389
3389
  setActivatedTabs((prev) => new Set(prev).add(activeTabId));
3390
3390
  }
3391
3391
  }, [activeTabId, activatedTabs]);
3392
- const activationOrderRef = React4.useRef([]);
3393
- React4.useEffect(() => {
3392
+ const activationOrderRef = React3.useRef([]);
3393
+ React3.useEffect(() => {
3394
3394
  if (!activeTabId) return;
3395
3395
  const order = activationOrderRef.current.filter((id) => id !== activeTabId);
3396
3396
  order.push(activeTabId);
@@ -3398,7 +3398,7 @@ var TabbedTerminalPanelInner = ({
3398
3398
  }, [activeTabId]);
3399
3399
  const [sessionIds, setSessionIds] = useState4(/* @__PURE__ */ new Map());
3400
3400
  const [activityStates, setActivityStates] = useState4(/* @__PURE__ */ new Map());
3401
- const customTabsKey = React4.useMemo(() => {
3401
+ const customTabsKey = React3.useMemo(() => {
3402
3402
  const customTabs = initialTabs.filter((tab) => tab.contentType !== "terminal");
3403
3403
  return JSON.stringify(customTabs);
3404
3404
  }, [initialTabs]);
@@ -3438,13 +3438,13 @@ var TabbedTerminalPanelInner = ({
3438
3438
  onFocusTabHandled?.();
3439
3439
  }
3440
3440
  }, [requestFocusTabId, ownedTabs, foreignTabs, setActiveTabId, onFocusTabHandled, activeTabId]);
3441
- const getOwnedTabLabel = useCallback7((index, _directory) => {
3441
+ const getOwnedTabLabel = useCallback6((index, _directory) => {
3442
3442
  if (tabLabelPrefix) {
3443
3443
  return `${tabLabelPrefix} ${index + 1}`;
3444
3444
  }
3445
3445
  return `\u2318 ${index + 1}`;
3446
3446
  }, [tabLabelPrefix]);
3447
- const tabs = React4.useMemo(() => {
3447
+ const tabs = React3.useMemo(() => {
3448
3448
  const labeledOwnedTabs = ownedTabs.map((tab, index) => ({
3449
3449
  ...tab,
3450
3450
  // Only overwrite label for terminal tabs, preserve original label for custom tabs
@@ -3455,7 +3455,7 @@ var TabbedTerminalPanelInner = ({
3455
3455
  );
3456
3456
  return [...labeledOwnedTabs, ...sortedForeignTabs];
3457
3457
  }, [ownedTabs, foreignTabs, getOwnedTabLabel]);
3458
- const genericTabs = React4.useMemo(() => {
3458
+ const genericTabs = React3.useMemo(() => {
3459
3459
  return tabs.map((tab) => ({
3460
3460
  id: tab.id,
3461
3461
  label: tab.label,
@@ -3470,7 +3470,7 @@ var TabbedTerminalPanelInner = ({
3470
3470
  }, [tabs]);
3471
3471
  const tabRefsMap = useRef5(/* @__PURE__ */ new Map());
3472
3472
  const refCallbacksMap = useRef5(/* @__PURE__ */ new Map());
3473
- const getRefCallback = useCallback7((tabId) => {
3473
+ const getRefCallback = useCallback6((tabId) => {
3474
3474
  let callback = refCallbacksMap.current.get(tabId);
3475
3475
  if (!callback) {
3476
3476
  callback = (ref) => {
@@ -3487,7 +3487,7 @@ var TabbedTerminalPanelInner = ({
3487
3487
  const hasInitializedRef = useRef5(false);
3488
3488
  const isCreatingTabRef = useRef5(false);
3489
3489
  const headerRef = useRef5(null);
3490
- const restoreOwnedSessions = useCallback7(async () => {
3490
+ const restoreOwnedSessions = useCallback6(async () => {
3491
3491
  try {
3492
3492
  let sessions = [];
3493
3493
  if (actions.listTerminalSessions) {
@@ -3536,7 +3536,7 @@ var TabbedTerminalPanelInner = ({
3536
3536
  console.error("[TabbedTerminalPanel] Failed to restore owned sessions:", err);
3537
3537
  }
3538
3538
  }, [terminalContext, sessionIds, activeTabId, onTabsChange, actions, directory, setActiveTabId]);
3539
- const fetchForeignSessions = useCallback7(async () => {
3539
+ const fetchForeignSessions = useCallback6(async () => {
3540
3540
  try {
3541
3541
  if (!actions.listTerminalSessions) {
3542
3542
  return;
@@ -3570,7 +3570,7 @@ var TabbedTerminalPanelInner = ({
3570
3570
  console.error("[TabbedTerminalPanel] Failed to fetch foreign sessions:", err);
3571
3571
  }
3572
3572
  }, [terminalContext, actions]);
3573
- const clearForeignTabs = useCallback7(() => {
3573
+ const clearForeignTabs = useCallback6(() => {
3574
3574
  setForeignTabs((prevForeign) => {
3575
3575
  const foreignTabIds = new Set(prevForeign.map((t) => t.id));
3576
3576
  setSessionIds((prev) => {
@@ -3607,10 +3607,10 @@ var TabbedTerminalPanelInner = ({
3607
3607
  clearForeignTabs();
3608
3608
  }
3609
3609
  }, [showAllTerminals, fetchForeignSessions, clearForeignTabs]);
3610
- const switchTab = useCallback7((tabId) => {
3610
+ const switchTab = useCallback6((tabId) => {
3611
3611
  setActiveTabId(tabId);
3612
3612
  }, [setActiveTabId]);
3613
- const addNewTab = useCallback7(
3613
+ const addNewTab = useCallback6(
3614
3614
  (label, command, targetDirectory) => {
3615
3615
  const targetDir = targetDirectory || directory;
3616
3616
  const directoryName = targetDir.split("/").pop() || targetDir;
@@ -3631,10 +3631,30 @@ var TabbedTerminalPanelInner = ({
3631
3631
  },
3632
3632
  [directory, onTabsChange]
3633
3633
  );
3634
- const isForeignTab = useCallback7((tabId) => {
3634
+ const isForeignTab = useCallback6((tabId) => {
3635
3635
  return tabId.startsWith("tab-foreign-");
3636
3636
  }, []);
3637
- 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(
3638
3658
  async (tabId) => {
3639
3659
  const sessionId = sessionIds.get(tabId);
3640
3660
  const isForeign = isForeignTab(tabId);
@@ -3717,10 +3737,10 @@ var TabbedTerminalPanelInner = ({
3717
3737
  if (!requestCloseTabId) return;
3718
3738
  closeTab(requestCloseTabId);
3719
3739
  }, [requestCloseTabId]);
3720
- const handleSessionCreated = useCallback7((tabId, sessionId) => {
3740
+ const handleSessionCreated = useCallback6((tabId, sessionId) => {
3721
3741
  setSessionIds((prev) => new Map(prev).set(tabId, sessionId));
3722
3742
  }, []);
3723
- const handleActivityStateChange = useCallback7((sessionId, isActive) => {
3743
+ const handleActivityStateChange = useCallback6((sessionId, isActive) => {
3724
3744
  setActivityStates((prev) => {
3725
3745
  const next = new Map(prev);
3726
3746
  if (isActive) {
@@ -3752,7 +3772,7 @@ var TabbedTerminalPanelInner = ({
3752
3772
  }
3753
3773
  }
3754
3774
  });
3755
- const renderTabAccessory = useCallback7((tab) => {
3775
+ const renderTabAccessory = useCallback6((tab) => {
3756
3776
  const tabSessionId = sessionIds.get(tab.id);
3757
3777
  const isActive = tab.id === activeTabId;
3758
3778
  const record = tabSessionId ? programStatus?.[tabSessionId] : void 0;
@@ -3794,123 +3814,39 @@ var TabbedTerminalPanelInner = ({
3794
3814
  }
3795
3815
  ) });
3796
3816
  }, [activeTabId, theme, sessionIds, workingStates, activityStates, programStatus]);
3797
- const renderTerminalWithAssociation = useCallback7((tab, isActive, sessionId, association) => {
3798
- const terminalContent = /* @__PURE__ */ jsx14(
3799
- TerminalTabContent,
3800
- {
3801
- ref: getRefCallback(tab.id),
3802
- tab,
3803
- sessionId,
3804
- isActive,
3805
- isVisible,
3806
- actions,
3807
- events,
3808
- terminalContext,
3809
- onSessionCreated: handleSessionCreated,
3810
- renderer,
3811
- isForeign: tab.id.startsWith("tab-foreign-"),
3812
- activityDetection,
3813
- activityTimeout,
3814
- autoShowBlinds,
3815
- onActivityStateChange: handleActivityStateChange
3816
- },
3817
- `terminal-${tab.id}`
3818
- );
3819
- const hasAssociation = !!association;
3820
- const secondaryContent = hasAssociation && renderAssociatedContent ? renderAssociatedContent(association.associatedTabId, isActive) : /* @__PURE__ */ jsx14("div", { style: {
3821
- height: "100%",
3822
- display: "flex",
3823
- alignItems: "center",
3824
- justifyContent: "center",
3825
- color: theme.colors.textMuted,
3826
- fontSize: "13px",
3827
- backgroundColor: theme.colors.backgroundSecondary
3828
- }, children: "Drag a tab here to associate it with this terminal" });
3829
- const headerConfig = hasAssociation && getAssociatedHeader ? getAssociatedHeader(association.associatedTabId) : { title: "Drop zone", icon: /* @__PURE__ */ jsx14(Paperclip, { size: 14 }) };
3830
- const isCollapsed = hasAssociation ? association.collapsed : true;
3831
- const handleCollapsedChange = hasAssociation ? (collapsed) => onAssociationCollapsedChange?.(tab.id, collapsed) : void 0;
3832
- return /* @__PURE__ */ jsx14(
3833
- CollapsibleSplitPane,
3834
- {
3835
- style: { height: "100%" },
3836
- primaryContent: terminalContent,
3837
- secondaryContent,
3838
- collapsedHeader: headerConfig,
3839
- collapsed: isCollapsed,
3840
- onCollapsedChange: handleCollapsedChange,
3841
- ratio: hasAssociation ? association.ratio : 0.15,
3842
- onRatioChange: hasAssociation ? (ratio) => onAssociationRatioChange?.(tab.id, ratio) : void 0,
3843
- theme,
3844
- hideHeader: !hasAssociation
3845
- }
3846
- );
3847
- }, [
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
+ ), [
3848
3838
  getRefCallback,
3849
3839
  isVisible,
3850
3840
  actions,
3851
3841
  events,
3852
3842
  terminalContext,
3853
3843
  handleSessionCreated,
3844
+ renderer,
3854
3845
  activityDetection,
3855
3846
  activityTimeout,
3856
3847
  autoShowBlinds,
3857
- handleActivityStateChange,
3858
- renderAssociatedContent,
3859
- getAssociatedHeader,
3860
- onAssociationCollapsedChange,
3861
- onAssociationRatioChange,
3862
- theme
3848
+ handleActivityStateChange
3863
3849
  ]);
3864
- const handleTabDrop = useCallback7(
3865
- (draggedTabId, targetTabId) => {
3866
- const draggedTab = tabs.find((t) => t.id === draggedTabId);
3867
- const targetTab = tabs.find((t) => t.id === targetTabId);
3868
- if (targetTab?.contentType === "terminal" && draggedTab?.contentType !== "terminal") {
3869
- onTabAssociate?.(targetTabId, draggedTabId);
3870
- setActiveTabId(targetTabId);
3871
- }
3872
- },
3873
- [tabs, onTabAssociate, setActiveTabId]
3874
- );
3875
- const canDropOnTab = useCallback7(
3876
- (draggedTabId, targetTabId) => {
3877
- const draggedTab = tabs.find((t) => t.id === draggedTabId);
3878
- const targetTab = tabs.find((t) => t.id === targetTabId);
3879
- return targetTab?.contentType === "terminal" && draggedTab?.contentType !== "terminal";
3880
- },
3881
- [tabs]
3882
- );
3883
- const [isDragOverContent, setIsDragOverContent] = useState4(false);
3884
- const handleContentDragEnter = useCallback7((e) => {
3885
- e.preventDefault();
3886
- if (activeTabId) {
3887
- const activeTab = tabs.find((t) => t.id === activeTabId);
3888
- if (activeTab?.contentType === "terminal") {
3889
- setIsDragOverContent(true);
3890
- }
3891
- }
3892
- }, [activeTabId, tabs]);
3893
- const handleContentDragLeave = useCallback7((e) => {
3894
- const relatedTarget = e.relatedTarget;
3895
- if (!e.currentTarget.contains(relatedTarget)) {
3896
- setIsDragOverContent(false);
3897
- }
3898
- }, []);
3899
- const handleContentDrop = useCallback7((e) => {
3900
- e.preventDefault();
3901
- e.stopPropagation();
3902
- setIsDragOverContent(false);
3903
- const draggedTabId = e.dataTransfer.getData("application/x-tab-association");
3904
- if (!draggedTabId || !activeTabId) {
3905
- return;
3906
- }
3907
- const draggedTab = tabs.find((t) => t.id === draggedTabId);
3908
- const activeTab = tabs.find((t) => t.id === activeTabId);
3909
- if (activeTab?.contentType === "terminal" && draggedTab?.contentType !== "terminal") {
3910
- onTabAssociate?.(activeTabId, draggedTabId);
3911
- setActiveTabId(activeTabId);
3912
- }
3913
- }, [activeTabId, tabs, onTabAssociate, setActiveTabId]);
3914
3850
  return /* @__PURE__ */ jsxs10(
3915
3851
  "div",
3916
3852
  {
@@ -3963,9 +3899,9 @@ var TabbedTerminalPanelInner = ({
3963
3899
  renderTabIcon,
3964
3900
  renderTabLabel,
3965
3901
  showKeyboardHints: false,
3966
- enableDragAndDrop: enableTabAssociationDrag,
3967
- onTabDrop: handleTabDrop,
3968
- canDropOnTab
3902
+ enableTabReorder,
3903
+ onTabReorder: handleTabReorder,
3904
+ canReorderTab: (tabId) => !isForeignTab(tabId)
3969
3905
  }
3970
3906
  ) }),
3971
3907
  /* @__PURE__ */ jsxs10(
@@ -3978,36 +3914,7 @@ var TabbedTerminalPanelInner = ({
3978
3914
  overflow: "hidden",
3979
3915
  width: "100%",
3980
3916
  minHeight: 0,
3981
- position: "relative",
3982
- // Visual feedback when dragging over
3983
- outline: isDragOverContent ? `3px dashed ${theme.colors.primary}` : "none",
3984
- outlineOffset: "-3px"
3985
- },
3986
- onDragEnterCapture: (e) => {
3987
- if (!enableTabAssociationDrag) return;
3988
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
3989
- e.preventDefault();
3990
- e.stopPropagation();
3991
- handleContentDragEnter(e);
3992
- },
3993
- onDragOverCapture: (e) => {
3994
- if (!enableTabAssociationDrag) return;
3995
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
3996
- e.preventDefault();
3997
- e.stopPropagation();
3998
- e.dataTransfer.dropEffect = "move";
3999
- },
4000
- onDragLeaveCapture: (e) => {
4001
- if (!enableTabAssociationDrag) return;
4002
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
4003
- handleContentDragLeave(e);
4004
- },
4005
- onDropCapture: (e) => {
4006
- if (!enableTabAssociationDrag) return;
4007
- if (!e.dataTransfer.types.includes("application/x-tab-association")) return;
4008
- e.preventDefault();
4009
- e.stopPropagation();
4010
- handleContentDrop(e);
3917
+ position: "relative"
4011
3918
  },
4012
3919
  children: [
4013
3920
  tabs.map((tab) => {
@@ -4016,7 +3923,6 @@ var TabbedTerminalPanelInner = ({
4016
3923
  if (renderTabContent) {
4017
3924
  const customContent = renderTabContent(tab, isActive, sessionId, width);
4018
3925
  if (customContent === null && tab.contentType === "terminal") {
4019
- const association = associations?.[tab.id];
4020
3926
  return /* @__PURE__ */ jsx14(
4021
3927
  "div",
4022
3928
  {
@@ -4039,7 +3945,7 @@ var TabbedTerminalPanelInner = ({
4039
3945
  flexDirection: "column",
4040
3946
  opacity: isActive ? 1 : 0
4041
3947
  },
4042
- children: renderTerminalWithAssociation(tab, isActive, sessionId, association)
3948
+ children: renderTerminalContent(tab, isActive, sessionId)
4043
3949
  },
4044
3950
  tab.id
4045
3951
  );
@@ -4064,7 +3970,6 @@ var TabbedTerminalPanelInner = ({
4064
3970
  );
4065
3971
  }
4066
3972
  if (tab.contentType === "terminal") {
4067
- const association = associations?.[tab.id];
4068
3973
  return /* @__PURE__ */ jsx14(
4069
3974
  "div",
4070
3975
  {
@@ -4078,7 +3983,7 @@ var TabbedTerminalPanelInner = ({
4078
3983
  flexDirection: "column",
4079
3984
  opacity: isActive ? 1 : 0
4080
3985
  },
4081
- children: renderTerminalWithAssociation(tab, isActive, sessionId, association)
3986
+ children: renderTerminalContent(tab, isActive, sessionId)
4082
3987
  },
4083
3988
  tab.id
4084
3989
  );
@@ -4177,7 +4082,7 @@ var TabbedTerminalPanelInner = ({
4177
4082
  );
4178
4083
  };
4179
4084
  TabbedTerminalPanelInner.displayName = "TabbedTerminalPanelInner";
4180
- var TabbedTerminalPanelMemoized = React4.memo(TabbedTerminalPanelInner, (prevProps, nextProps) => {
4085
+ var TabbedTerminalPanelMemoized = React3.memo(TabbedTerminalPanelInner, (prevProps, nextProps) => {
4181
4086
  const changes = [];
4182
4087
  if (prevProps.terminalContext !== nextProps.terminalContext) changes.push("terminalContext");
4183
4088
  if (prevProps.directory !== nextProps.directory) changes.push("directory");
@@ -4186,6 +4091,7 @@ var TabbedTerminalPanelMemoized = React4.memo(TabbedTerminalPanelInner, (prevPro
4186
4091
  if (prevProps.isVisible !== nextProps.isVisible) changes.push("isVisible");
4187
4092
  if (prevProps.showAllTerminals !== nextProps.showAllTerminals) changes.push("showAllTerminals");
4188
4093
  if (prevProps.hideShowAllTerminalsButton !== nextProps.hideShowAllTerminalsButton) changes.push("hideShowAllTerminalsButton");
4094
+ if (prevProps.enableTabReorder !== nextProps.enableTabReorder) changes.push("enableTabReorder");
4189
4095
  if (prevProps.tabLabelPrefix !== nextProps.tabLabelPrefix) changes.push("tabLabelPrefix");
4190
4096
  if (prevProps.width !== nextProps.width) changes.push("width");
4191
4097
  if (prevProps.actions !== nextProps.actions) changes.push("actions");
@@ -4204,9 +4110,6 @@ var TabbedTerminalPanelMemoized = React4.memo(TabbedTerminalPanelInner, (prevPro
4204
4110
  if (prevProps.activityDetection !== nextProps.activityDetection) changes.push("activityDetection");
4205
4111
  if (prevProps.activityTimeout !== nextProps.activityTimeout) changes.push("activityTimeout");
4206
4112
  if (prevProps.autoShowBlinds !== nextProps.autoShowBlinds) changes.push("autoShowBlinds");
4207
- if (prevProps.associations !== nextProps.associations) changes.push("associations");
4208
- if (prevProps.renderAssociatedContent !== nextProps.renderAssociatedContent) changes.push("renderAssociatedContent");
4209
- if (prevProps.getAssociatedHeader !== nextProps.getAssociatedHeader) changes.push("getAssociatedHeader");
4210
4113
  if (prevProps.bottomBarContent !== nextProps.bottomBarContent) changes.push("bottomBarContent");
4211
4114
  const ignoredChanges = [];
4212
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,CA+MxC,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;AAkBtD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA8P9C,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,6 +126,7 @@ 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;
@@ -147,16 +140,5 @@ export interface TabbedTerminalPanelProps<TTab extends BaseTab = TerminalTab> ex
147
140
  activityDetection?: boolean;
148
141
  activityTimeout?: number;
149
142
  autoShowBlinds?: boolean;
150
- associations?: TabAssociations;
151
- onAssociationCollapsedChange?: (tabId: string, collapsed: boolean) => void;
152
- onAssociationRatioChange?: (tabId: string, ratio: number) => void;
153
- renderAssociatedContent?: (associatedTabId: string, isActive: boolean) => React.ReactNode;
154
- getAssociatedHeader?: (associatedTabId: string) => {
155
- icon?: React.ReactNode;
156
- title: string;
157
- } | undefined;
158
- enableTabAssociationDrag?: boolean;
159
- onTabAssociate?: (terminalTabId: string, associatedTabId: string) => void;
160
- onTabDissociate?: (terminalTabId: string, associatedTabId: string) => void;
161
143
  }
162
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;AAizCD,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.7",
3
+ "version": "0.10.1",
4
4
  "description": "Industry-themed xterm.js terminal components with panel framework integration",
5
5
  "type": "module",
6
6
  "sideEffects": [