@termaxjs/web-ui-components 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/ai/AgentStatusPill.d.ts +13 -0
- package/dist/ai/AgentStatusPill.d.ts.map +1 -0
- package/dist/ai/AgentStatusPill.js +28 -0
- package/dist/ai/AgentStatusPill.js.map +1 -0
- package/dist/ai/AiToolApproval.d.ts +12 -0
- package/dist/ai/AiToolApproval.d.ts.map +1 -0
- package/dist/ai/AiToolApproval.js +63 -0
- package/dist/ai/AiToolApproval.js.map +1 -0
- package/dist/ai/Chip.d.ts +17 -0
- package/dist/ai/Chip.d.ts.map +1 -0
- package/dist/ai/Chip.js +39 -0
- package/dist/ai/Chip.js.map +1 -0
- package/dist/ai/ChipsRow.d.ts +35 -0
- package/dist/ai/ChipsRow.d.ts.map +1 -0
- package/dist/ai/ChipsRow.js +32 -0
- package/dist/ai/ChipsRow.js.map +1 -0
- package/dist/ai/TodoStrip.d.ts +11 -0
- package/dist/ai/TodoStrip.d.ts.map +1 -0
- package/dist/ai/TodoStrip.js +27 -0
- package/dist/ai/TodoStrip.js.map +1 -0
- package/dist/ai/index.d.ts +6 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +6 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/command-palette/CommandPaletteDialog.d.ts +19 -0
- package/dist/command-palette/CommandPaletteDialog.d.ts.map +1 -0
- package/dist/command-palette/CommandPaletteDialog.js +23 -0
- package/dist/command-palette/CommandPaletteDialog.js.map +1 -0
- package/dist/command-palette/index.d.ts +2 -0
- package/dist/command-palette/index.d.ts.map +1 -0
- package/dist/command-palette/index.js +2 -0
- package/dist/command-palette/index.js.map +1 -0
- package/dist/explorer/ExplorerSearch.d.ts +35 -0
- package/dist/explorer/ExplorerSearch.d.ts.map +1 -0
- package/dist/explorer/ExplorerSearch.js +153 -0
- package/dist/explorer/ExplorerSearch.js.map +1 -0
- package/dist/explorer/FileTree.d.ts +65 -0
- package/dist/explorer/FileTree.d.ts.map +1 -0
- package/dist/explorer/FileTree.js +205 -0
- package/dist/explorer/FileTree.js.map +1 -0
- package/dist/explorer/InlineInput.d.ts +14 -0
- package/dist/explorer/InlineInput.d.ts.map +1 -0
- package/dist/explorer/InlineInput.js +77 -0
- package/dist/explorer/InlineInput.js.map +1 -0
- package/dist/explorer/TreeRow.d.ts +64 -0
- package/dist/explorer/TreeRow.d.ts.map +1 -0
- package/dist/explorer/TreeRow.js +100 -0
- package/dist/explorer/TreeRow.js.map +1 -0
- package/dist/explorer/constants.d.ts +12 -0
- package/dist/explorer/constants.d.ts.map +1 -0
- package/dist/explorer/constants.js +72 -0
- package/dist/explorer/constants.js.map +1 -0
- package/dist/explorer/contextActions.d.ts +5 -0
- package/dist/explorer/contextActions.d.ts.map +1 -0
- package/dist/explorer/contextActions.js +38 -0
- package/dist/explorer/contextActions.js.map +1 -0
- package/dist/explorer/iconMap.json +1 -0
- package/dist/explorer/iconResolver.d.ts +3 -0
- package/dist/explorer/iconResolver.d.ts.map +1 -0
- package/dist/explorer/iconResolver.js +98 -0
- package/dist/explorer/iconResolver.js.map +1 -0
- package/dist/explorer/index.d.ts +8 -0
- package/dist/explorer/index.d.ts.map +1 -0
- package/dist/explorer/index.js +8 -0
- package/dist/explorer/index.js.map +1 -0
- package/dist/explorer/menuItemClass.d.ts +3 -0
- package/dist/explorer/menuItemClass.d.ts.map +1 -0
- package/dist/explorer/menuItemClass.js +6 -0
- package/dist/explorer/menuItemClass.js.map +1 -0
- package/dist/explorer/types.d.ts +2 -0
- package/dist/explorer/types.d.ts.map +1 -0
- package/dist/explorer/types.js +2 -0
- package/dist/explorer/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/PaneChip.d.ts +13 -0
- package/dist/layout/PaneChip.d.ts.map +1 -0
- package/dist/layout/PaneChip.js +19 -0
- package/dist/layout/PaneChip.js.map +1 -0
- package/dist/layout/TabBar.d.ts +36 -0
- package/dist/layout/TabBar.d.ts.map +1 -0
- package/dist/layout/TabBar.js +237 -0
- package/dist/layout/TabBar.js.map +1 -0
- package/dist/layout/TabItem.d.ts +19 -0
- package/dist/layout/TabItem.d.ts.map +1 -0
- package/dist/layout/TabItem.js +66 -0
- package/dist/layout/TabItem.js.map +1 -0
- package/dist/layout/index.d.ts +7 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +7 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/leafState.d.ts +15 -0
- package/dist/layout/leafState.d.ts.map +1 -0
- package/dist/layout/leafState.js +70 -0
- package/dist/layout/leafState.js.map +1 -0
- package/dist/layout/resizable.d.ts +31 -0
- package/dist/layout/resizable.d.ts.map +1 -0
- package/dist/layout/resizable.js +16 -0
- package/dist/layout/resizable.js.map +1 -0
- package/dist/layout/tabLabel.d.ts +9 -0
- package/dist/layout/tabLabel.d.ts.map +1 -0
- package/dist/layout/tabLabel.js +31 -0
- package/dist/layout/tabLabel.js.map +1 -0
- package/dist/primitives/alert-dialog.d.ts +19 -0
- package/dist/primitives/alert-dialog.d.ts.map +1 -0
- package/dist/primitives/alert-dialog.js +42 -0
- package/dist/primitives/alert-dialog.js.map +1 -0
- package/dist/primitives/alert.d.ts +11 -0
- package/dist/primitives/alert.d.ts.map +1 -0
- package/dist/primitives/alert.js +28 -0
- package/dist/primitives/alert.js.map +1 -0
- package/dist/primitives/badge.d.ts +10 -0
- package/dist/primitives/badge.d.ts.map +1 -0
- package/dist/primitives/badge.js +25 -0
- package/dist/primitives/badge.js.map +1 -0
- package/dist/primitives/breadcrumb.d.ts +12 -0
- package/dist/primitives/breadcrumb.d.ts.map +1 -0
- package/dist/primitives/breadcrumb.js +29 -0
- package/dist/primitives/breadcrumb.js.map +1 -0
- package/dist/primitives/button-group.d.ts +12 -0
- package/dist/primitives/button-group.d.ts.map +1 -0
- package/dist/primitives/button-group.js +28 -0
- package/dist/primitives/button-group.js.map +1 -0
- package/dist/primitives/button.d.ts +11 -0
- package/dist/primitives/button.d.ts.map +1 -0
- package/dist/primitives/button.js +36 -0
- package/dist/primitives/button.js.map +1 -0
- package/dist/primitives/card.d.ts +12 -0
- package/dist/primitives/card.d.ts.map +1 -0
- package/dist/primitives/card.js +25 -0
- package/dist/primitives/card.js.map +1 -0
- package/dist/primitives/checkbox.d.ts +5 -0
- package/dist/primitives/checkbox.d.ts.map +1 -0
- package/dist/primitives/checkbox.js +10 -0
- package/dist/primitives/checkbox.js.map +1 -0
- package/dist/primitives/collapsible.d.ts +6 -0
- package/dist/primitives/collapsible.d.ts.map +1 -0
- package/dist/primitives/collapsible.js +13 -0
- package/dist/primitives/collapsible.js.map +1 -0
- package/dist/primitives/command.d.ts +36 -0
- package/dist/primitives/command.d.ts.map +1 -0
- package/dist/primitives/command.js +103 -0
- package/dist/primitives/command.js.map +1 -0
- package/dist/primitives/context-menu.d.ts +41 -0
- package/dist/primitives/context-menu.d.ts.map +1 -0
- package/dist/primitives/context-menu.js +83 -0
- package/dist/primitives/context-menu.js.map +1 -0
- package/dist/primitives/dialog.d.ts +18 -0
- package/dist/primitives/dialog.d.ts.map +1 -0
- package/dist/primitives/dialog.js +38 -0
- package/dist/primitives/dialog.js.map +1 -0
- package/dist/primitives/dropdown-menu.d.ts +30 -0
- package/dist/primitives/dropdown-menu.d.ts.map +1 -0
- package/dist/primitives/dropdown-menu.js +52 -0
- package/dist/primitives/dropdown-menu.js.map +1 -0
- package/dist/primitives/empty.d.ts +12 -0
- package/dist/primitives/empty.d.ts.map +1 -0
- package/dist/primitives/empty.js +34 -0
- package/dist/primitives/empty.js.map +1 -0
- package/dist/primitives/hover-card.d.ts +7 -0
- package/dist/primitives/hover-card.d.ts.map +1 -0
- package/dist/primitives/hover-card.js +14 -0
- package/dist/primitives/hover-card.js.map +1 -0
- package/dist/primitives/index.d.ts +40 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +40 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/input-group.d.ts +17 -0
- package/dist/primitives/input-group.d.ts.map +1 -0
- package/dist/primitives/input-group.js +59 -0
- package/dist/primitives/input-group.js.map +1 -0
- package/dist/primitives/input.d.ts +4 -0
- package/dist/primitives/input.d.ts.map +1 -0
- package/dist/primitives/input.js +7 -0
- package/dist/primitives/input.js.map +1 -0
- package/dist/primitives/item.d.ts +24 -0
- package/dist/primitives/item.d.ts.map +1 -0
- package/dist/primitives/item.js +68 -0
- package/dist/primitives/item.js.map +1 -0
- package/dist/primitives/kbd.d.ts +4 -0
- package/dist/primitives/kbd.d.ts.map +1 -0
- package/dist/primitives/kbd.js +10 -0
- package/dist/primitives/kbd.js.map +1 -0
- package/dist/primitives/label.d.ts +5 -0
- package/dist/primitives/label.d.ts.map +1 -0
- package/dist/primitives/label.js +8 -0
- package/dist/primitives/label.js.map +1 -0
- package/dist/primitives/menubar.d.ts +31 -0
- package/dist/primitives/menubar.d.ts.map +1 -0
- package/dist/primitives/menubar.js +55 -0
- package/dist/primitives/menubar.js.map +1 -0
- package/dist/primitives/popover.d.ts +11 -0
- package/dist/primitives/popover.d.ts.map +1 -0
- package/dist/primitives/popover.js +27 -0
- package/dist/primitives/popover.js.map +1 -0
- package/dist/primitives/progress.d.ts +5 -0
- package/dist/primitives/progress.d.ts.map +1 -0
- package/dist/primitives/progress.js +8 -0
- package/dist/primitives/progress.js.map +1 -0
- package/dist/primitives/radio-group.d.ts +6 -0
- package/dist/primitives/radio-group.d.ts.map +1 -0
- package/dist/primitives/radio-group.js +11 -0
- package/dist/primitives/radio-group.js.map +1 -0
- package/dist/primitives/resizable.d.ts +31 -0
- package/dist/primitives/resizable.d.ts.map +1 -0
- package/dist/primitives/resizable.js +16 -0
- package/dist/primitives/resizable.js.map +1 -0
- package/dist/primitives/scroll-area.d.ts +6 -0
- package/dist/primitives/scroll-area.d.ts.map +1 -0
- package/dist/primitives/scroll-area.js +11 -0
- package/dist/primitives/scroll-area.js.map +1 -0
- package/dist/primitives/select.d.ts +16 -0
- package/dist/primitives/select.d.ts.map +1 -0
- package/dist/primitives/select.js +37 -0
- package/dist/primitives/select.js.map +1 -0
- package/dist/primitives/separator.d.ts +5 -0
- package/dist/primitives/separator.d.ts.map +1 -0
- package/dist/primitives/separator.js +8 -0
- package/dist/primitives/separator.js.map +1 -0
- package/dist/primitives/sheet.d.ts +15 -0
- package/dist/primitives/sheet.d.ts.map +1 -0
- package/dist/primitives/sheet.js +38 -0
- package/dist/primitives/sheet.js.map +1 -0
- package/dist/primitives/skeleton.d.ts +3 -0
- package/dist/primitives/skeleton.d.ts.map +1 -0
- package/dist/primitives/skeleton.js +7 -0
- package/dist/primitives/skeleton.js.map +1 -0
- package/dist/primitives/slider.d.ts +5 -0
- package/dist/primitives/slider.d.ts.map +1 -0
- package/dist/primitives/slider.js +14 -0
- package/dist/primitives/slider.js.map +1 -0
- package/dist/primitives/sonner.d.ts +5 -0
- package/dist/primitives/sonner.d.ts.map +1 -0
- package/dist/primitives/sonner.js +12 -0
- package/dist/primitives/sonner.js.map +1 -0
- package/dist/primitives/spinner.d.ts +3 -0
- package/dist/primitives/spinner.d.ts.map +1 -0
- package/dist/primitives/spinner.js +11 -0
- package/dist/primitives/spinner.js.map +1 -0
- package/dist/primitives/switch.d.ts +7 -0
- package/dist/primitives/switch.d.ts.map +1 -0
- package/dist/primitives/switch.js +18 -0
- package/dist/primitives/switch.js.map +1 -0
- package/dist/primitives/tabs.d.ts +12 -0
- package/dist/primitives/tabs.d.ts.map +1 -0
- package/dist/primitives/tabs.js +29 -0
- package/dist/primitives/tabs.js.map +1 -0
- package/dist/primitives/textarea.d.ts +4 -0
- package/dist/primitives/textarea.d.ts.map +1 -0
- package/dist/primitives/textarea.js +7 -0
- package/dist/primitives/textarea.js.map +1 -0
- package/dist/primitives/toggle-group.d.ts +11 -0
- package/dist/primitives/toggle-group.d.ts.map +1 -0
- package/dist/primitives/toggle-group.js +24 -0
- package/dist/primitives/toggle-group.js.map +1 -0
- package/dist/primitives/toggle.d.ts +10 -0
- package/dist/primitives/toggle.d.ts.map +1 -0
- package/dist/primitives/toggle.js +26 -0
- package/dist/primitives/toggle.js.map +1 -0
- package/dist/primitives/tooltip.d.ts +8 -0
- package/dist/primitives/tooltip.d.ts.map +1 -0
- package/dist/primitives/tooltip.js +18 -0
- package/dist/primitives/tooltip.js.map +1 -0
- package/dist/settings/SettingGroup.d.ts +8 -0
- package/dist/settings/SettingGroup.d.ts.map +1 -0
- package/dist/settings/SettingGroup.js +7 -0
- package/dist/settings/SettingGroup.js.map +1 -0
- package/dist/settings/SettingRow.d.ts +58 -0
- package/dist/settings/SettingRow.d.ts.map +1 -0
- package/dist/settings/SettingRow.js +54 -0
- package/dist/settings/SettingRow.js.map +1 -0
- package/dist/settings/SettingsFormBuilder.d.ts +11 -0
- package/dist/settings/SettingsFormBuilder.d.ts.map +1 -0
- package/dist/settings/SettingsFormBuilder.js +43 -0
- package/dist/settings/SettingsFormBuilder.js.map +1 -0
- package/dist/settings/index.d.ts +4 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +4 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/shell/HeaderBar.d.ts +10 -0
- package/dist/shell/HeaderBar.d.ts.map +1 -0
- package/dist/shell/HeaderBar.js +6 -0
- package/dist/shell/HeaderBar.js.map +1 -0
- package/dist/shell/StatusBar.d.ts +9 -0
- package/dist/shell/StatusBar.d.ts.map +1 -0
- package/dist/shell/StatusBar.js +6 -0
- package/dist/shell/StatusBar.js.map +1 -0
- package/dist/shell/index.d.ts +3 -0
- package/dist/shell/index.d.ts.map +1 -0
- package/dist/shell/index.js +3 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/source-control/BranchSwitcher.d.ts +14 -0
- package/dist/source-control/BranchSwitcher.d.ts.map +1 -0
- package/dist/source-control/BranchSwitcher.js +10 -0
- package/dist/source-control/BranchSwitcher.js.map +1 -0
- package/dist/source-control/CommitRow.d.ts +15 -0
- package/dist/source-control/CommitRow.d.ts.map +1 -0
- package/dist/source-control/CommitRow.js +20 -0
- package/dist/source-control/CommitRow.js.map +1 -0
- package/dist/source-control/EntryRow.d.ts +25 -0
- package/dist/source-control/EntryRow.d.ts.map +1 -0
- package/dist/source-control/EntryRow.js +67 -0
- package/dist/source-control/EntryRow.js.map +1 -0
- package/dist/source-control/GraphRail.d.ts +14 -0
- package/dist/source-control/GraphRail.d.ts.map +1 -0
- package/dist/source-control/GraphRail.js +49 -0
- package/dist/source-control/GraphRail.js.map +1 -0
- package/dist/source-control/InlineHunkView.d.ts +22 -0
- package/dist/source-control/InlineHunkView.d.ts.map +1 -0
- package/dist/source-control/InlineHunkView.js +95 -0
- package/dist/source-control/InlineHunkView.js.map +1 -0
- package/dist/source-control/SourceControlActions.d.ts +15 -0
- package/dist/source-control/SourceControlActions.d.ts.map +1 -0
- package/dist/source-control/SourceControlActions.js +38 -0
- package/dist/source-control/SourceControlActions.js.map +1 -0
- package/dist/source-control/SourceControlPanel.d.ts +21 -0
- package/dist/source-control/SourceControlPanel.d.ts.map +1 -0
- package/dist/source-control/SourceControlPanel.js +300 -0
- package/dist/source-control/SourceControlPanel.js.map +1 -0
- package/dist/source-control/SourceControlStatusViews.d.ts +20 -0
- package/dist/source-control/SourceControlStatusViews.d.ts.map +1 -0
- package/dist/source-control/SourceControlStatusViews.js +18 -0
- package/dist/source-control/SourceControlStatusViews.js.map +1 -0
- package/dist/source-control/StashSection.d.ts +13 -0
- package/dist/source-control/StashSection.d.ts.map +1 -0
- package/dist/source-control/StashSection.js +14 -0
- package/dist/source-control/StashSection.js.map +1 -0
- package/dist/source-control/highlight.d.ts +8 -0
- package/dist/source-control/highlight.d.ts.map +1 -0
- package/dist/source-control/highlight.js +15 -0
- package/dist/source-control/highlight.js.map +1 -0
- package/dist/source-control/index.d.ts +12 -0
- package/dist/source-control/index.d.ts.map +1 -0
- package/dist/source-control/index.js +12 -0
- package/dist/source-control/index.js.map +1 -0
- package/dist/source-control/sourceControlHelpers.d.ts +27 -0
- package/dist/source-control/sourceControlHelpers.d.ts.map +1 -0
- package/dist/source-control/sourceControlHelpers.js +51 -0
- package/dist/source-control/sourceControlHelpers.js.map +1 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +6 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/isTauri.d.ts +2 -0
- package/dist/utils/isTauri.d.ts.map +1 -0
- package/dist/utils/isTauri.js +2 -0
- package/dist/utils/isTauri.js.map +1 -0
- package/dist/utils/mockCore.d.ts +6 -0
- package/dist/utils/mockCore.d.ts.map +1 -0
- package/dist/utils/mockCore.js +3 -0
- package/dist/utils/mockCore.js.map +1 -0
- package/dist/utils/mockFs.d.ts +10 -0
- package/dist/utils/mockFs.d.ts.map +1 -0
- package/dist/utils/mockFs.js +10 -0
- package/dist/utils/mockFs.js.map +1 -0
- package/dist/utils/mockSettings.d.ts +3 -0
- package/dist/utils/mockSettings.d.ts.map +1 -0
- package/dist/utils/mockSettings.js +3 -0
- package/dist/utils/mockSettings.js.map +1 -0
- package/dist/utils/mockShortcuts.d.ts +2 -0
- package/dist/utils/mockShortcuts.d.ts.map +1 -0
- package/dist/utils/mockShortcuts.js +2 -0
- package/dist/utils/mockShortcuts.js.map +1 -0
- package/dist/utils/mockSpaces.d.ts +4 -0
- package/dist/utils/mockSpaces.d.ts.map +1 -0
- package/dist/utils/mockSpaces.js +2 -0
- package/dist/utils/mockSpaces.js.map +1 -0
- package/dist/utils/mockTauri.d.ts +5 -0
- package/dist/utils/mockTauri.d.ts.map +1 -0
- package/dist/utils/mockTauri.js +3 -0
- package/dist/utils/mockTauri.js.map +1 -0
- package/dist/utils/mockWorkspace.d.ts +2 -0
- package/dist/utils/mockWorkspace.d.ts.map +1 -0
- package/dist/utils/mockWorkspace.js +2 -0
- package/dist/utils/mockWorkspace.js.map +1 -0
- package/dist/utils/platform.d.ts +5 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +8 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/shellQuote.d.ts +2 -0
- package/dist/utils/shellQuote.d.ts.map +1 -0
- package/dist/utils/shellQuote.js +7 -0
- package/dist/utils/shellQuote.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from "../primitives/button.js";
|
|
3
|
+
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger, } from "../primitives/context-menu.js";
|
|
4
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../primitives/dropdown-menu.js";
|
|
5
|
+
import { Tabs, TabsList } from "../primitives/tabs.js";
|
|
6
|
+
import { fmtShortcut, MOD_KEY } from "../utils/platform.js";
|
|
7
|
+
import { cn } from "../utils/cn.js";
|
|
8
|
+
import { fileIconUrl } from "../explorer/iconResolver.js";
|
|
9
|
+
import { leafIds } from "@termaxjs/web-core/layout";
|
|
10
|
+
import { useLeafStates } from "./leafState.js";
|
|
11
|
+
import { horizontalListSortingStrategy, SortableContext, useSortable, verticalListSortingStrategy, } from "@dnd-kit/sortable";
|
|
12
|
+
import { CSS } from "@dnd-kit/utilities";
|
|
13
|
+
import { Cancel01Icon, Clock01Icon, ComputerTerminal02Icon, GitBranchIcon, GitCompareIcon, Globe02Icon, IncognitoIcon, PencilEdit02Icon, PlusSignIcon, } from "@hugeicons/core-free-icons";
|
|
14
|
+
import { HugeiconsIcon } from "@hugeicons/react";
|
|
15
|
+
import { forwardRef, useEffect, useRef, useState } from "react";
|
|
16
|
+
import { labelFor } from "./tabLabel.js";
|
|
17
|
+
import { PaneChip } from "./PaneChip.js";
|
|
18
|
+
import { TabItem } from "./TabItem.js";
|
|
19
|
+
export function TabBar({ tabs, activeId, onSelect, onNew, onNewBlock, onNewPrivate, onNewPreview, onNewEditor, onNewGitGraph, onClose, onPin, onRename, onColorChange, onFocusLeaf, onClosePaneByLeaf, compact, orientation = "horizontal", }) {
|
|
20
|
+
const leafStates = useLeafStates();
|
|
21
|
+
const scrollRef = useRef(null);
|
|
22
|
+
const listRef = useRef(null);
|
|
23
|
+
const [editingId, setEditingId] = useState(null);
|
|
24
|
+
// Play the enter animation only for tabs opened after the first paint, never
|
|
25
|
+
// the restored set and never on switch/reorder (triggers are keyed, so they
|
|
26
|
+
// don't remount then). The ref is seeded with the initial ids on first render.
|
|
27
|
+
const seenRef = useRef(null);
|
|
28
|
+
const firstRender = seenRef.current === null;
|
|
29
|
+
let seen = seenRef.current;
|
|
30
|
+
if (seen === null) {
|
|
31
|
+
seen = new Set(tabs.map((t) => t.id));
|
|
32
|
+
seenRef.current = seen;
|
|
33
|
+
}
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
seenRef.current = new Set(tabs.map((t) => t.id));
|
|
36
|
+
}, [tabs]);
|
|
37
|
+
// Horizontal wheel scroll without holding shift.
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const el = scrollRef.current;
|
|
40
|
+
if (!el)
|
|
41
|
+
return;
|
|
42
|
+
const onWheel = (e) => {
|
|
43
|
+
if (Math.abs(e.deltaY) <= Math.abs(e.deltaX))
|
|
44
|
+
return;
|
|
45
|
+
if (el.scrollWidth <= el.clientWidth)
|
|
46
|
+
return;
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
el.scrollLeft += e.deltaY;
|
|
49
|
+
};
|
|
50
|
+
el.addEventListener("wheel", onWheel, { passive: false });
|
|
51
|
+
return () => el.removeEventListener("wheel", onWheel);
|
|
52
|
+
}, []);
|
|
53
|
+
// Keep the active tab visible after selection / open.
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
const el = scrollRef.current;
|
|
56
|
+
if (!el)
|
|
57
|
+
return;
|
|
58
|
+
const active = el.querySelector(`[data-tab-id="${activeId}"]`);
|
|
59
|
+
active?.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
60
|
+
}, [activeId]);
|
|
61
|
+
const isVertical = orientation === "vertical";
|
|
62
|
+
return (_jsx("div", { ref: scrollRef, "data-tauri-drag-region": true, className: cn("min-w-0 shrink", isVertical
|
|
63
|
+
? "flex flex-col h-full w-full overflow-y-auto px-1 py-1 gap-1"
|
|
64
|
+
: "flex h-full items-center overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"), children: _jsxs("div", { className: cn("flex gap-0.5", isVertical ? "flex-col w-full" : "h-full w-max items-center"), children: [_jsx(Tabs, { value: String(activeId), onValueChange: (v) => onSelect(Number(v)), className: cn("flex", isVertical ? "flex-col w-full" : "h-full items-center"), children: _jsx(TabsList, { ref: listRef, className: cn("relative bg-transparent p-0 gap-1", isVertical
|
|
65
|
+
? "flex flex-col h-auto w-full items-stretch"
|
|
66
|
+
: "flex h-[var(--tx-tab-h,28px)] items-center w-max"), children: _jsx(SortableContext, { items: tabs.map((t) => `tab-${t.id}`), strategy: isVertical
|
|
67
|
+
? verticalListSortingStrategy
|
|
68
|
+
: horizontalListSortingStrategy, children: tabs.map((t) => {
|
|
69
|
+
// Multi-pane terminal tab → grouped chips
|
|
70
|
+
if (t.kind === "terminal" &&
|
|
71
|
+
!t.blocks &&
|
|
72
|
+
onFocusLeaf &&
|
|
73
|
+
onClosePaneByLeaf) {
|
|
74
|
+
const ids = leafIds(t.paneTree);
|
|
75
|
+
if (ids.length > 1) {
|
|
76
|
+
return (_jsx(GroupedPaneTab, { tab: t, leafIdList: ids, leafStates: leafStates, isTabActive: t.id === activeId, onSelect: () => onSelect(t.id), onRename: (title) => onRename(t.id, title), onColorChange: (color) => onColorChange(t.id, color), onFocusLeaf: (lid) => onFocusLeaf(t.id, lid), onCloseLeaf: onClosePaneByLeaf, onCloseTab: () => onClose(t.id) }, t.id));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return (_jsx(TabItem, { tab: t, isActive: t.id === activeId, isNew: !firstRender && !seen.has(t.id), isEditing: editingId === t.id, tabsLength: tabs.length, compact: compact, setEditingId: setEditingId, onSelect: () => onSelect(t.id), onRename: onRename, onColorChange: onColorChange, onPin: onPin, onClose: onClose }, t.id));
|
|
80
|
+
}) }) }) }), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "size-7 shrink-0 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground", title: "New tab", children: _jsx(HugeiconsIcon, { icon: PlusSignIcon, size: 14, strokeWidth: 2 }) }) }), _jsxs(DropdownMenuContent, { align: "start", className: "min-w-44", children: [_jsxs(DropdownMenuItem, { onSelect: () => onNew(), children: [_jsx(HugeiconsIcon, { icon: ComputerTerminal02Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Terminal" }), _jsx("div", { className: "text-xs text-muted-foreground", children: fmtShortcut(MOD_KEY, "T") })] }), _jsxs(DropdownMenuItem, { onSelect: () => onNewBlock(), children: [_jsx(HugeiconsIcon, { icon: ComputerTerminal02Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Block terminal" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "beta" })] }), _jsxs(DropdownMenuItem, { onSelect: () => onNewPrivate(), children: [_jsx(HugeiconsIcon, { icon: IncognitoIcon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Privacy" }), _jsx("div", { className: "text-xs text-muted-foreground", children: fmtShortcut(MOD_KEY, "R") })] }), _jsxs(DropdownMenuItem, { onSelect: () => onNewEditor(), children: [_jsx(HugeiconsIcon, { icon: PencilEdit02Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Editor" }), _jsx("div", { className: "text-xs text-muted-foreground", children: fmtShortcut(MOD_KEY, "E") })] }), _jsxs(DropdownMenuItem, { onSelect: () => onNewPreview(), children: [_jsx(HugeiconsIcon, { icon: Globe02Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Preview" }), _jsx("div", { className: "text-xs text-muted-foreground", children: fmtShortcut(MOD_KEY, "P") })] }), _jsxs(DropdownMenuItem, { onSelect: () => onNewGitGraph(), children: [_jsx(HugeiconsIcon, { icon: GitBranchIcon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Git Graph" })] })] })] })] }) }));
|
|
81
|
+
}
|
|
82
|
+
export function TabIcon({ tab }) {
|
|
83
|
+
if (tab.kind === "editor" || tab.kind === "markdown") {
|
|
84
|
+
const url = fileIconUrl(tab.title);
|
|
85
|
+
return url ? _jsx("img", { src: url, alt: "", className: "size-3.5 shrink-0" }) : null;
|
|
86
|
+
}
|
|
87
|
+
if (tab.kind === "preview") {
|
|
88
|
+
return (_jsx(HugeiconsIcon, { icon: Globe02Icon, size: 14, strokeWidth: 2, className: "shrink-0" }));
|
|
89
|
+
}
|
|
90
|
+
if (tab.kind === "ai-diff") {
|
|
91
|
+
return (_jsx(HugeiconsIcon, { icon: GitCompareIcon, size: 14, strokeWidth: 2, className: "shrink-0" }));
|
|
92
|
+
}
|
|
93
|
+
if (tab.kind === "terminal" && tab.private) {
|
|
94
|
+
return (_jsx(HugeiconsIcon, { icon: IncognitoIcon, size: 14, strokeWidth: 2, className: "shrink-0" }));
|
|
95
|
+
}
|
|
96
|
+
if (tab.kind === "git-diff" || tab.kind === "git-commit-file") {
|
|
97
|
+
return (_jsx(HugeiconsIcon, { icon: GitCompareIcon, size: 14, strokeWidth: 2, className: "shrink-0" }));
|
|
98
|
+
}
|
|
99
|
+
if (tab.kind === "git-history") {
|
|
100
|
+
return (_jsx(HugeiconsIcon, { icon: Clock01Icon, size: 14, strokeWidth: 2, className: "shrink-0" }));
|
|
101
|
+
}
|
|
102
|
+
return (_jsx(HugeiconsIcon, { icon: ComputerTerminal02Icon, size: 14, strokeWidth: 2, className: "shrink-0" }));
|
|
103
|
+
}
|
|
104
|
+
export function TabRenameInput({ initial, onCommit, onCancel, }) {
|
|
105
|
+
const ref = useRef(null);
|
|
106
|
+
// Guards against a trailing blur re-resolving an edit that Enter/Escape
|
|
107
|
+
// already finished (Escape must never commit).
|
|
108
|
+
const done = useRef(false);
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
// Focus on the next frame so it runs after the context menu restores focus
|
|
111
|
+
// to its trigger when closing; a synchronous focus would be stolen.
|
|
112
|
+
const raf = requestAnimationFrame(() => {
|
|
113
|
+
ref.current?.focus();
|
|
114
|
+
ref.current?.select();
|
|
115
|
+
});
|
|
116
|
+
return () => cancelAnimationFrame(raf);
|
|
117
|
+
}, []);
|
|
118
|
+
const finish = (fn) => {
|
|
119
|
+
if (done.current)
|
|
120
|
+
return;
|
|
121
|
+
done.current = true;
|
|
122
|
+
fn();
|
|
123
|
+
};
|
|
124
|
+
// explicit = the user pressed Enter, which pins even the unchanged label. A
|
|
125
|
+
// plain blur with no change must not freeze the cwd-derived default into a
|
|
126
|
+
// custom title.
|
|
127
|
+
const commit = (value, explicit) => {
|
|
128
|
+
if (!explicit && value.trim() === initial.trim())
|
|
129
|
+
finish(onCancel);
|
|
130
|
+
else
|
|
131
|
+
finish(() => onCommit(value));
|
|
132
|
+
};
|
|
133
|
+
return (_jsx("input", { ref: ref, defaultValue: initial, "aria-label": "Rename tab", className: cn("w-28 min-w-0 rounded-sm bg-background px-1 text-xs text-foreground", "outline-none ring-1 ring-border focus:ring-ring"), onKeyDown: (e) => {
|
|
134
|
+
e.stopPropagation();
|
|
135
|
+
if (e.key === "Enter")
|
|
136
|
+
commit(e.currentTarget.value, true);
|
|
137
|
+
else if (e.key === "Escape")
|
|
138
|
+
finish(onCancel);
|
|
139
|
+
}, onBlur: (e) => {
|
|
140
|
+
// Switching windows/apps blurs the input; keep the edit open instead
|
|
141
|
+
// of resolving it on the way out.
|
|
142
|
+
if (!document.hasFocus())
|
|
143
|
+
return;
|
|
144
|
+
commit(e.currentTarget.value, false);
|
|
145
|
+
} }));
|
|
146
|
+
}
|
|
147
|
+
export const SortableTabTrigger = forwardRef(({ id, children, value, "data-tab-id": dataTabId, "data-tab-active": dataTabActive, onClick, onDoubleClick, onAuxClick, onMouseDown, className, ...props }, ref) => {
|
|
148
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({
|
|
149
|
+
id: `tab-${id}`,
|
|
150
|
+
});
|
|
151
|
+
const style = {
|
|
152
|
+
transform: CSS.Transform.toString(transform),
|
|
153
|
+
transition,
|
|
154
|
+
zIndex: isDragging ? 10 : undefined,
|
|
155
|
+
};
|
|
156
|
+
const setRefs = (node) => {
|
|
157
|
+
setNodeRef(node);
|
|
158
|
+
if (typeof ref === "function") {
|
|
159
|
+
ref(node);
|
|
160
|
+
}
|
|
161
|
+
else if (ref) {
|
|
162
|
+
ref.current = node;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
return (
|
|
166
|
+
// biome-ignore lint/a11y/noStaticElementInteractions: dnd-kit sortable container; drag supports the dnd-kit keyboard sensor and activation lives on the inner tab button.
|
|
167
|
+
_jsx("div", { ref: setRefs, style: style, ...attributes, ...props, ...listeners, onPointerDown: (e) => {
|
|
168
|
+
props.onPointerDown?.(e);
|
|
169
|
+
listeners?.onPointerDown?.(e);
|
|
170
|
+
}, onKeyDown: (e) => {
|
|
171
|
+
props.onKeyDown?.(e);
|
|
172
|
+
listeners?.onKeyDown?.(e);
|
|
173
|
+
}, className: "flex h-full w-max shrink-0 items-center", children: _jsx("button", { type: "button", role: "tab", "aria-selected": dataTabActive === "true", "aria-controls": `radix-${id}`, onClick: onClick, "data-tab-id": dataTabId, "data-tab-active": dataTabActive, onDoubleClick: onDoubleClick, onAuxClick: onAuxClick, onMouseDown: onMouseDown, className: cn("flex items-center h-full", className, isDragging && "opacity-50"), children: children }) }));
|
|
174
|
+
});
|
|
175
|
+
function GroupedPaneTab({ tab, leafIdList, leafStates, isTabActive, onSelect, onFocusLeaf, onCloseLeaf, onCloseTab, onRename, onColorChange, }) {
|
|
176
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
177
|
+
const trigger = (_jsx(SortableTabTrigger, { id: tab.id, value: String(tab.id), "data-tab-id": tab.id, "data-tab-active": isTabActive ? "true" : undefined, onClick: onSelect, onDoubleClick: () => setIsEditing(true), onAuxClick: (e) => {
|
|
178
|
+
if (e.button === 1) {
|
|
179
|
+
e.preventDefault();
|
|
180
|
+
e.stopPropagation();
|
|
181
|
+
onCloseTab();
|
|
182
|
+
}
|
|
183
|
+
}, onMouseDown: (e) => {
|
|
184
|
+
if (e.button === 1)
|
|
185
|
+
e.preventDefault();
|
|
186
|
+
}, className: cn("group relative z-[1] h-[var(--tx-tab-h,28px)] shrink-0 rounded-md text-xs transition-colors p-0!", isTabActive
|
|
187
|
+
? "text-foreground dark:text-foreground bg-foreground/[0.07] shadow-sm ring-1 ring-inset ring-foreground/[0.05]"
|
|
188
|
+
: "bg-transparent text-muted-foreground hover:text-foreground/80 dark:text-muted-foreground"), style: tab.color ? { borderBottom: `2px solid ${tab.color}` } : undefined, children: _jsx("div", { className: "flex h-full items-stretch", children: isEditing ? (_jsxs("div", { className: "flex h-[var(--tx-tab-h,28px)] shrink-0 items-center gap-1.5 px-2", children: [_jsx(TabIcon, { tab: tab }), _jsx(TabRenameInput, { initial: labelFor(tab), onCommit: (value) => {
|
|
189
|
+
onRename(value);
|
|
190
|
+
setIsEditing(false);
|
|
191
|
+
}, onCancel: () => setIsEditing(false) })] })) : (_jsx(SortableContext, { items: leafIdList.map((lid) => `pane-drag-${lid}`), strategy: horizontalListSortingStrategy, children: leafIdList.map((lid, i) => {
|
|
192
|
+
const ls = leafStates.get(lid);
|
|
193
|
+
const cwd = ls?.cwd ?? tab.cwd;
|
|
194
|
+
const mainTitle = cwd
|
|
195
|
+
? cwd.split(/[\\/]/).filter(Boolean).pop() || "Terminal"
|
|
196
|
+
: "Terminal";
|
|
197
|
+
const isGenericZsh = ls?.title && /^[^@]+@[^:]+:/.test(ls.title);
|
|
198
|
+
const showSub = ls?.title && !isGenericZsh && ls.title !== mainTitle;
|
|
199
|
+
const subTitle = showSub ? ls?.title : null;
|
|
200
|
+
return (_jsx(SortablePaneChip, { id: lid, className: i > 0 ? "border-l border-border/20" : undefined, children: _jsx(PaneChip, { leafId: lid, mainTitle: mainTitle, subTitle: subTitle, interaction: ls?.interaction, longRunning: ls?.longRunning, isActive: isTabActive && tab.activeLeafId === lid, onFocus: () => {
|
|
201
|
+
onSelect();
|
|
202
|
+
onFocusLeaf(lid);
|
|
203
|
+
}, onClose: () => onCloseLeaf(lid) }) }, lid));
|
|
204
|
+
}) })) }) }));
|
|
205
|
+
return (_jsxs(ContextMenu, { children: [_jsx(ContextMenuTrigger, { asChild: true, children: trigger }), _jsxs(ContextMenuContent, { className: "min-w-36", onCloseAutoFocus: (e) => e.preventDefault(), children: [_jsxs(ContextMenuItem, { onSelect: () => setIsEditing(true), children: [_jsx(HugeiconsIcon, { icon: PencilEdit02Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Rename" })] }), tab.kind === "terminal" && tab.customTitle && (_jsxs(ContextMenuItem, { onSelect: () => onRename(""), children: [_jsx(HugeiconsIcon, { icon: Cancel01Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Reset Title" })] })), _jsx(ContextMenuSeparator, {}), _jsx("div", { className: "px-2 py-1.5 text-xs font-semibold text-muted-foreground", children: "Color" }), _jsxs("div", { className: "flex gap-1.5 px-2 pb-2", children: [[
|
|
206
|
+
"#ef4444",
|
|
207
|
+
"#f97316",
|
|
208
|
+
"#eab308",
|
|
209
|
+
"#22c55e",
|
|
210
|
+
"#3b82f6",
|
|
211
|
+
"#a855f7",
|
|
212
|
+
"#ec4899",
|
|
213
|
+
].map((color) => (_jsx("button", { type: "button", className: cn("size-4 rounded-full border border-border/50", tab.color === color &&
|
|
214
|
+
"ring-2 ring-foreground/30 ring-offset-1 ring-offset-background"), style: { backgroundColor: color }, onClick: (e) => {
|
|
215
|
+
e.stopPropagation();
|
|
216
|
+
onColorChange(color);
|
|
217
|
+
} }, color))), _jsx("button", { type: "button", className: "flex size-4 items-center justify-center rounded-full border border-border/50 bg-background text-muted-foreground hover:text-foreground", onClick: (e) => {
|
|
218
|
+
e.stopPropagation();
|
|
219
|
+
onColorChange(undefined);
|
|
220
|
+
}, children: _jsx(HugeiconsIcon, { icon: Cancel01Icon, size: 12, strokeWidth: 2.5 }) })] }), _jsx(ContextMenuSeparator, {}), _jsxs(ContextMenuItem, { onSelect: onCloseTab, children: [_jsx(HugeiconsIcon, { icon: Cancel01Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Close" })] })] })] }, tab.id));
|
|
221
|
+
}
|
|
222
|
+
function SortablePaneChip({ id, className, children, }) {
|
|
223
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({
|
|
224
|
+
id: `pane-drag-${id}`,
|
|
225
|
+
});
|
|
226
|
+
const style = {
|
|
227
|
+
transform: CSS.Transform.toString(transform),
|
|
228
|
+
transition,
|
|
229
|
+
zIndex: isDragging ? 10 : undefined,
|
|
230
|
+
};
|
|
231
|
+
return (_jsx("div", { ref: setNodeRef, style: style, ...attributes, ...listeners, onPointerDown: (e) => {
|
|
232
|
+
// Stop propagation so the outer Tab doesn't start dragging
|
|
233
|
+
e.stopPropagation();
|
|
234
|
+
listeners?.onPointerDown?.(e);
|
|
235
|
+
}, className: cn("flex items-stretch", className, isDragging && "opacity-50"), children: children }));
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=TabBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabBar.js","sourceRoot":"","sources":["../../src/layout/TabBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { Tab } from "@termaxjs/web-core/layout";
|
|
3
|
+
type TabItemProps = {
|
|
4
|
+
tab: Tab;
|
|
5
|
+
isActive: boolean;
|
|
6
|
+
isNew: boolean;
|
|
7
|
+
isEditing: boolean;
|
|
8
|
+
tabsLength: number;
|
|
9
|
+
compact?: boolean;
|
|
10
|
+
setEditingId: (id: number | null) => void;
|
|
11
|
+
onSelect: () => void;
|
|
12
|
+
onRename: (id: number, title: string) => void;
|
|
13
|
+
onPin: (id: number) => void;
|
|
14
|
+
onClose: (id: number) => void;
|
|
15
|
+
onColorChange: (id: number, color: string | undefined) => void;
|
|
16
|
+
};
|
|
17
|
+
export declare function TabItem({ tab: t, isActive, isNew, isEditing, tabsLength, compact, setEditingId, onSelect, onRename, onPin, onClose, onColorChange, }: TabItemProps): React.JSX.Element;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=TabItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabItem.d.ts","sourceRoot":"","sources":["../../src/layout/TabItem.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAa,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAGhE,KAAK,YAAY,GAAG;IAClB,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACtB,GAAG,EAAE,CAAC,EACN,QAAQ,EACR,KAAK,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,OAAO,EACP,aAAa,GACd,EAAE,YAAY,qBAmNd"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger, } from "../primitives/context-menu.js";
|
|
3
|
+
import { cn } from "../utils/cn.js";
|
|
4
|
+
import { Cancel01Icon, Loading02Icon, LockIcon, PencilEdit02Icon, Unlock, } from "@hugeicons/core-free-icons";
|
|
5
|
+
import { HugeiconsIcon } from "@hugeicons/react";
|
|
6
|
+
import { labelFor } from "./tabLabel.js";
|
|
7
|
+
import { SortableTabTrigger, TabIcon, TabRenameInput } from "./TabBar.js";
|
|
8
|
+
export function TabItem({ tab: t, isActive, isNew, isEditing, tabsLength, compact, setEditingId, onSelect, onRename, onPin, onClose, onColorChange, }) {
|
|
9
|
+
const isPreview = t.kind === "editor" && t.preview;
|
|
10
|
+
if (isEditing && t.kind === "terminal") {
|
|
11
|
+
return (_jsxs("div", { "data-tab-id": t.id, className: cn("flex h-[var(--tx-tab-h,28px)] shrink-0 items-center gap-1.5 rounded-md bg-accent text-xs text-foreground", compact ? "px-1.5" : "px-2"), children: [_jsx(TabIcon, { tab: t }), _jsx(TabRenameInput, { initial: labelFor(t), onCommit: (value) => {
|
|
12
|
+
onRename(t.id, value);
|
|
13
|
+
setEditingId(null);
|
|
14
|
+
}, onCancel: () => setEditingId(null) })] }, t.id));
|
|
15
|
+
}
|
|
16
|
+
let mainTitle = labelFor(t);
|
|
17
|
+
let subTitle = null;
|
|
18
|
+
if (t.kind === "terminal" && !t.customTitle) {
|
|
19
|
+
mainTitle = t.cwd
|
|
20
|
+
? t.cwd.split(/[\\/]/).filter(Boolean).pop() || "Terminal"
|
|
21
|
+
: t.title;
|
|
22
|
+
const isGenericZshPrompt = t.dynamicTitle && /^[^@]+@[^:]+:/.test(t.dynamicTitle);
|
|
23
|
+
if (t.dynamicTitle && !isGenericZshPrompt && t.dynamicTitle !== mainTitle) {
|
|
24
|
+
subTitle = t.dynamicTitle;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const trigger = (_jsxs(SortableTabTrigger, { id: t.id, value: String(t.id), "data-tab-id": t.id, "data-tab-active": isActive ? "true" : undefined, onClick: onSelect, onDoubleClick: () => {
|
|
28
|
+
if (isPreview)
|
|
29
|
+
onPin(t.id);
|
|
30
|
+
else if (t.kind === "terminal")
|
|
31
|
+
setEditingId(t.id);
|
|
32
|
+
}, onAuxClick: (e) => {
|
|
33
|
+
if (e.button === 1 && tabsLength > 1) {
|
|
34
|
+
e.preventDefault();
|
|
35
|
+
e.stopPropagation();
|
|
36
|
+
onClose(t.id);
|
|
37
|
+
}
|
|
38
|
+
}, onMouseDown: (e) => {
|
|
39
|
+
if (e.button === 1)
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
}, className: cn("group relative z-[1] h-[var(--tx-tab-h,28px)] shrink-0 justify-center gap-1.5 rounded-md text-xs transition-colors p-0!", isNew && "termax-tab-in", isActive
|
|
42
|
+
? "text-foreground dark:text-foreground bg-foreground/[0.07] shadow-sm ring-1 ring-inset ring-foreground/[0.05]"
|
|
43
|
+
: "bg-transparent text-muted-foreground hover:text-foreground/80 dark:text-muted-foreground", compact ? "px-1.5! pr-6!" : "pl-2! pr-7!"), style: t.color ? { borderBottom: `2px solid ${t.color}` } : undefined, children: [_jsxs("div", { className: cn("flex min-w-0 items-center justify-center gap-1.5 h-full", compact ? "max-w-48" : "max-w-80"), children: [t.kind === "terminal" && t.alert ? (_jsx("div", { className: "flex w-3.5 items-center justify-center", children: _jsx("span", { className: "flex size-1.5 shrink-0 animate-pulse rounded-full bg-blue-500" }) })) : t.kind === "terminal" && t.interaction ? (_jsx("div", { className: "flex w-3.5 items-center justify-center", children: _jsx("span", { className: "flex size-1.5 shrink-0 animate-pulse rounded-full bg-amber-400" }) })) : t.kind === "terminal" && t.longRunning ? (_jsx(HugeiconsIcon, { icon: Loading02Icon, size: 14, className: "animate-spin text-muted-foreground shrink-0", strokeWidth: 2 })) : (_jsx(TabIcon, { tab: t })), _jsxs("div", { className: "flex flex-col min-w-0 justify-center", children: [_jsx("span", { className: cn("truncate font-medium leading-none", isPreview && "italic", subTitle && "text-[11px]"), children: mainTitle }), subTitle && (_jsx("span", { className: "truncate text-[9px] leading-[10px] text-muted-foreground/70 font-normal", children: subTitle }))] }), t.kind === "editor" && t.dirty ? (_jsx("div", { role: "img", "aria-label": "Unsaved changes", className: "size-1.5 shrink-0 rounded-full bg-foreground/70" })) : null] }), _jsx("div", { "aria-hidden": "true", onClick: (e) => {
|
|
44
|
+
e.stopPropagation();
|
|
45
|
+
onClose(t.id);
|
|
46
|
+
}, className: "absolute right-1 top-1/2 -translate-y-1/2 flex items-center justify-center rounded p-0.5 opacity-0 transition-all hover:bg-accent hover:opacity-100 group-hover:opacity-60", children: _jsx(HugeiconsIcon, { icon: Cancel01Icon, size: 12, strokeWidth: 2 }) })] }, t.id));
|
|
47
|
+
if (t.kind !== "terminal")
|
|
48
|
+
return trigger;
|
|
49
|
+
return (_jsxs(ContextMenu, { children: [_jsx(ContextMenuTrigger, { asChild: true, children: trigger }), _jsxs(ContextMenuContent, { className: "min-w-36", onCloseAutoFocus: (e) => e.preventDefault(), children: [_jsxs(ContextMenuItem, { onSelect: () => setEditingId(t.id), children: [_jsx(HugeiconsIcon, { icon: PencilEdit02Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Rename" })] }), _jsxs(ContextMenuItem, { onSelect: () => onRename(t.id, t.customTitle ? "" : mainTitle), children: [_jsx(HugeiconsIcon, { icon: t.customTitle ? Unlock : LockIcon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: t.customTitle ? "Unlock title" : "Lock title" })] }), _jsx(ContextMenuSeparator, {}), _jsx("div", { className: "px-2 py-1.5 text-xs font-semibold text-muted-foreground", children: "Color" }), _jsxs("div", { className: "flex gap-1.5 px-2 pb-2", children: [[
|
|
50
|
+
"#ef4444",
|
|
51
|
+
"#f97316",
|
|
52
|
+
"#eab308",
|
|
53
|
+
"#22c55e",
|
|
54
|
+
"#3b82f6",
|
|
55
|
+
"#a855f7",
|
|
56
|
+
"#ec4899",
|
|
57
|
+
].map((color) => (_jsx("button", { type: "button", className: cn("size-4 rounded-full border border-border/50", t.color === color &&
|
|
58
|
+
"ring-2 ring-foreground/30 ring-offset-1 ring-offset-background"), style: { backgroundColor: color }, onClick: (e) => {
|
|
59
|
+
e.stopPropagation();
|
|
60
|
+
onColorChange(t.id, color);
|
|
61
|
+
} }, color))), _jsx("button", { type: "button", className: "flex size-4 items-center justify-center rounded-full border border-border/50 bg-background text-muted-foreground hover:text-foreground", onClick: (e) => {
|
|
62
|
+
e.stopPropagation();
|
|
63
|
+
onColorChange(t.id, undefined);
|
|
64
|
+
}, children: _jsx(HugeiconsIcon, { icon: Cancel01Icon, size: 12, strokeWidth: 2.5 }) })] }), tabsLength > 1 && (_jsxs(_Fragment, { children: [_jsx(ContextMenuSeparator, {}), _jsxs(ContextMenuItem, { onSelect: () => onClose(t.id), children: [_jsx(HugeiconsIcon, { icon: Cancel01Icon, size: 14, strokeWidth: 1.75 }), _jsx("div", { className: "flex-1", children: "Close" })] })] }))] })] }, t.id));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=TabItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabItem.js","sourceRoot":"","sources":["../../src/layout/TabItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type LeafState = {
|
|
2
|
+
title: string;
|
|
3
|
+
interaction: boolean;
|
|
4
|
+
longRunning: boolean;
|
|
5
|
+
cwd: string | undefined;
|
|
6
|
+
};
|
|
7
|
+
export declare function setLeafTitle(leafId: number, title: string): void;
|
|
8
|
+
export declare function setLeafInteraction(leafId: number, interaction: boolean): void;
|
|
9
|
+
export declare function setLeafLongRunning(leafId: number, longRunning: boolean): void;
|
|
10
|
+
export declare function setLeafCwd(leafId: number, cwd: string): void;
|
|
11
|
+
export declare function clearLeafState(leafId: number): void;
|
|
12
|
+
export declare function getLeafState(leafId: number): LeafState | undefined;
|
|
13
|
+
/** React hook — re-renders when any leaf state changes. */
|
|
14
|
+
export declare function useLeafStates(): ReadonlyMap<number, LeafState>;
|
|
15
|
+
//# sourceMappingURL=leafState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leafState.d.ts","sourceRoot":"","sources":["../../src/layout/leafState.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB,CAAC;AAoBF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKhE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI,CAK7E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI,CAK7E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAK5D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAElE;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAQ9D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight per-leaf state store.
|
|
3
|
+
*
|
|
4
|
+
* PaneLeafView writes title / interaction / cwd here on every change;
|
|
5
|
+
* the TabBar and Sidebar read it via `useLeafStates()` to render grouped
|
|
6
|
+
* pane chips with per-leaf titles and interaction dots.
|
|
7
|
+
*
|
|
8
|
+
* Uses useSyncExternalStore so React only re-renders subscribers when the
|
|
9
|
+
* snapshot reference changes (which only happens on actual value changes).
|
|
10
|
+
*/
|
|
11
|
+
import { useSyncExternalStore } from "react";
|
|
12
|
+
const store = new Map();
|
|
13
|
+
const listeners = new Set();
|
|
14
|
+
let snapshot = new Map();
|
|
15
|
+
function emit() {
|
|
16
|
+
snapshot = new Map(store);
|
|
17
|
+
for (const fn of listeners)
|
|
18
|
+
fn();
|
|
19
|
+
}
|
|
20
|
+
function getOrCreate(leafId) {
|
|
21
|
+
let s = store.get(leafId);
|
|
22
|
+
if (!s) {
|
|
23
|
+
s = { title: "", interaction: false, longRunning: false, cwd: undefined };
|
|
24
|
+
store.set(leafId, s);
|
|
25
|
+
}
|
|
26
|
+
return s;
|
|
27
|
+
}
|
|
28
|
+
export function setLeafTitle(leafId, title) {
|
|
29
|
+
const s = getOrCreate(leafId);
|
|
30
|
+
if (s.title === title)
|
|
31
|
+
return;
|
|
32
|
+
s.title = title;
|
|
33
|
+
emit();
|
|
34
|
+
}
|
|
35
|
+
export function setLeafInteraction(leafId, interaction) {
|
|
36
|
+
const s = getOrCreate(leafId);
|
|
37
|
+
if (s.interaction === interaction)
|
|
38
|
+
return;
|
|
39
|
+
s.interaction = interaction;
|
|
40
|
+
emit();
|
|
41
|
+
}
|
|
42
|
+
export function setLeafLongRunning(leafId, longRunning) {
|
|
43
|
+
const s = getOrCreate(leafId);
|
|
44
|
+
if (s.longRunning === longRunning)
|
|
45
|
+
return;
|
|
46
|
+
s.longRunning = longRunning;
|
|
47
|
+
emit();
|
|
48
|
+
}
|
|
49
|
+
export function setLeafCwd(leafId, cwd) {
|
|
50
|
+
const s = getOrCreate(leafId);
|
|
51
|
+
if (s.cwd === cwd)
|
|
52
|
+
return;
|
|
53
|
+
s.cwd = cwd;
|
|
54
|
+
emit();
|
|
55
|
+
}
|
|
56
|
+
export function clearLeafState(leafId) {
|
|
57
|
+
if (store.delete(leafId))
|
|
58
|
+
emit();
|
|
59
|
+
}
|
|
60
|
+
export function getLeafState(leafId) {
|
|
61
|
+
return store.get(leafId);
|
|
62
|
+
}
|
|
63
|
+
/** React hook — re-renders when any leaf state changes. */
|
|
64
|
+
export function useLeafStates() {
|
|
65
|
+
return useSyncExternalStore((cb) => {
|
|
66
|
+
listeners.add(cb);
|
|
67
|
+
return () => listeners.delete(cb);
|
|
68
|
+
}, () => snapshot);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=leafState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leafState.js","sourceRoot":"","sources":["../../src/layout/leafState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAS7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;AAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AACxC,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE5C,SAAS,IAAI;IACX,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,SAAS;QAAE,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QAC1E,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,KAAa;IACxD,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO;IAC9B,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;IAChB,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,WAAoB;IACrE,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW;QAAE,OAAO;IAC1C,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;IAC5B,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,WAAoB;IACrE,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW;QAAE,OAAO;IAC1C,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;IAC5B,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,GAAW;IACpD,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG;QAAE,OAAO;IAC1B,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;IACZ,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,aAAa;IAC3B,OAAO,oBAAoB,CACzB,CAAC,EAAE,EAAE,EAAE;QACL,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,EACD,GAAG,EAAE,CAAC,QAAQ,CACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface ResizablePanelGroupProps {
|
|
3
|
+
direction?: "horizontal" | "vertical";
|
|
4
|
+
orientation?: "horizontal" | "vertical";
|
|
5
|
+
snapToGrid?: boolean;
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
declare function ResizablePanelGroup({ className, direction, orientation, ...props }: ResizablePanelGroupProps): React.JSX.Element;
|
|
11
|
+
interface ResizablePanelProps {
|
|
12
|
+
id?: string;
|
|
13
|
+
defaultSize?: number;
|
|
14
|
+
minSize?: number;
|
|
15
|
+
maxSize?: number;
|
|
16
|
+
collapsible?: boolean;
|
|
17
|
+
className?: string;
|
|
18
|
+
style?: React.CSSProperties;
|
|
19
|
+
children?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
declare const ResizablePanel: React.ForwardRefExoticComponent<ResizablePanelProps & React.RefAttributes<any>>;
|
|
22
|
+
interface ResizableHandleProps {
|
|
23
|
+
withHandle?: boolean;
|
|
24
|
+
isCollapsed?: boolean;
|
|
25
|
+
onHandleClick?: (e: React.MouseEvent) => void;
|
|
26
|
+
className?: string;
|
|
27
|
+
style?: React.CSSProperties;
|
|
28
|
+
}
|
|
29
|
+
declare function ResizableHandle({ withHandle, className, onHandleClick, isCollapsed, ...props }: ResizableHandleProps): React.JSX.Element;
|
|
30
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
|
31
|
+
//# sourceMappingURL=resizable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resizable.d.ts","sourceRoot":"","sources":["../../src/layout/resizable.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,UAAU,wBAAwB;IAChC,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACtC,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,SAAwB,EACxB,WAAW,EACX,GAAG,KAAK,EACT,EAAE,wBAAwB,qBAS1B;AAED,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,QAAA,MAAM,cAAc,iFAInB,CAAC;AAEF,UAAU,oBAAoB;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,iBAAS,eAAe,CAAC,EACvB,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,GAAG,KAAK,EACT,EAAE,oBAAoB,qBAetB;AAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { TerminalPanel, TerminalPanelGroup, TerminalResizeHandle, } from "@termaxjs/web-react";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { cn } from "../utils/cn.js";
|
|
5
|
+
function ResizablePanelGroup({ className, direction = "horizontal", orientation, ...props }) {
|
|
6
|
+
const dir = orientation || direction;
|
|
7
|
+
return (_jsx(TerminalPanelGroup, { direction: dir, className: cn("flex h-full w-full", className), ...props }));
|
|
8
|
+
}
|
|
9
|
+
const ResizablePanel = forwardRef(function ResizablePanel(props, ref) {
|
|
10
|
+
return _jsx(TerminalPanel, { ref: ref, ...props });
|
|
11
|
+
});
|
|
12
|
+
function ResizableHandle({ withHandle, className, onHandleClick, isCollapsed, ...props }) {
|
|
13
|
+
return (_jsx(TerminalResizeHandle, { withHandle: withHandle, isCollapsed: isCollapsed, onHandleClick: onHandleClick, className: cn("group relative flex w-px items-center justify-center bg-border ring-offset-background", className), ...props, children: _jsx("div", { className: "z-10 flex h-6 w-px shrink-0 items-center justify-center rounded-full bg-border/0 transition-all group-hover:bg-primary/60 group-active:bg-primary" }) }));
|
|
14
|
+
}
|
|
15
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
|
16
|
+
//# sourceMappingURL=resizable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resizable.js","sourceRoot":"","sources":["../../src/layout/resizable.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAWpC,SAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,SAAS,GAAG,YAAY,EACxB,WAAW,EACX,GAAG,KAAK,EACiB;IACzB,MAAM,GAAG,GAAG,WAAW,IAAI,SAAS,CAAC;IACrC,OAAO,CACL,KAAC,kBAAkB,IACjB,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,EAAE,CAAC,oBAAoB,EAAE,SAAS,CAAC,KAC1C,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAaD,MAAM,cAAc,GAAG,UAAU,CAC/B,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG;IAChC,OAAO,KAAC,aAAa,IAAC,GAAG,EAAE,GAAG,KAAM,KAAK,GAAI,CAAC;AAChD,CAAC,CACF,CAAC;AAUF,SAAS,eAAe,CAAC,EACvB,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,GAAG,KAAK,EACa;IACrB,OAAO,CACL,KAAC,oBAAoB,IACnB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,EAAE,CACX,uFAAuF,EACvF,SAAS,CACV,KACG,KAAK,YAET,cAAK,SAAS,EAAC,mJAAmJ,GAAG,GAChJ,CACxB,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Tab } from "@termaxjs/web-core/layout";
|
|
2
|
+
/**
|
|
3
|
+
* The label shown on a tab. Non-terminal tabs use their stored title; terminal
|
|
4
|
+
* tabs prefer a user-set custom name, then fall back to the last segment of the
|
|
5
|
+
* cwd. Keeping this pure makes the "custom name survives a cd" invariant
|
|
6
|
+
* testable without rendering the bar.
|
|
7
|
+
*/
|
|
8
|
+
export declare function labelFor(t: Tab): string;
|
|
9
|
+
//# sourceMappingURL=tabLabel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabLabel.d.ts","sourceRoot":"","sources":["../../src/layout/tabLabel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAavC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The label shown on a tab. Non-terminal tabs use their stored title; terminal
|
|
3
|
+
* tabs prefer a user-set custom name, then fall back to the last segment of the
|
|
4
|
+
* cwd. Keeping this pure makes the "custom name survives a cd" invariant
|
|
5
|
+
* testable without rendering the bar.
|
|
6
|
+
*/
|
|
7
|
+
export function labelFor(t) {
|
|
8
|
+
if (t.kind === "editor")
|
|
9
|
+
return t.title;
|
|
10
|
+
if (t.kind === "preview")
|
|
11
|
+
return t.title;
|
|
12
|
+
if (t.kind === "markdown")
|
|
13
|
+
return t.title;
|
|
14
|
+
if (t.kind === "ai-diff")
|
|
15
|
+
return t.title;
|
|
16
|
+
if (t.kind === "git-diff")
|
|
17
|
+
return t.title;
|
|
18
|
+
if (t.kind === "git-history")
|
|
19
|
+
return t.title;
|
|
20
|
+
if (t.kind === "git-commit-file")
|
|
21
|
+
return t.title;
|
|
22
|
+
if (t.customTitle)
|
|
23
|
+
return t.customTitle;
|
|
24
|
+
if (t.dynamicTitle)
|
|
25
|
+
return t.dynamicTitle;
|
|
26
|
+
if (!t.cwd)
|
|
27
|
+
return t.title;
|
|
28
|
+
const parts = t.cwd.split(/[\\/]/).filter(Boolean);
|
|
29
|
+
return parts.length ? parts[parts.length - 1] : "/";
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=tabLabel.js.map
|