@elench/shell 0.1.2 → 0.1.4
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/components/shell/activity-bar.js +5 -5
- package/dist/components/shell/app-shell.d.ts +1 -1
- package/dist/components/shell/app-shell.js +22 -22
- package/dist/components/shell/context-action-menu.d.ts +1 -1
- package/dist/components/shell/context-action-menu.js +1 -1
- package/dist/components/shell/left-sidebar.js +5 -5
- package/dist/components/shell/primitives/activity-nav.js +1 -1
- package/dist/components/shell/primitives/inspector-panel.js +3 -3
- package/dist/components/shell/primitives/instance-row.js +2 -2
- package/dist/components/shell/primitives/search-bar-primitives.js +1 -1
- package/dist/components/shell/primitives/shell-frame.js +1 -1
- package/dist/components/shell/primitives/shell-status-bar.js +1 -1
- package/dist/components/shell/primitives/shell-toolbar.js +2 -2
- package/dist/components/shell/primitives/sidebar-action-row.js +2 -2
- package/dist/components/shell/primitives/sidebar-frame.d.ts +2 -2
- package/dist/components/shell/primitives/sidebar-frame.js +5 -5
- package/dist/components/shell/primitives/sidebar-section.js +3 -3
- package/dist/components/shell/primitives/workspace-page.js +1 -1
- package/dist/components/shell/right-inspector.js +7 -7
- package/dist/components/shell/search-action-groups.d.ts +1 -1
- package/dist/components/shell/search-action-groups.js +2 -2
- package/dist/components/shell/search-bar.js +7 -7
- package/dist/components/shell/shell-layout.d.ts +1 -1
- package/dist/components/shell/shell-layout.js +3 -3
- package/dist/components/shell/shell-model.d.ts +1 -1
- package/dist/components/shell/status-bar.js +4 -4
- package/dist/components/shell/top-bar.js +9 -9
- package/dist/components/shell/use-shell-surface-action-groups.d.ts +2 -2
- package/dist/components/shell/use-shell-surface-action-groups.js +5 -5
- package/dist/components/shell/workspace-surface-context-menu.d.ts +1 -1
- package/dist/components/shell/workspace-surface-context-menu.js +3 -3
- package/dist/components/shell/workspace-tab-content.d.ts +1 -1
- package/dist/components/shell/workspace-tab-content.js +3 -3
- package/dist/components/system/async-state.d.ts +1 -1
- package/dist/components/system/async-state.js +4 -4
- package/dist/components/system/status.js +2 -2
- package/dist/components/ui/badge.js +1 -1
- package/dist/components/ui/button.js +1 -1
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/checkbox.js +1 -1
- package/dist/components/ui/context-menu.d.ts +1 -1
- package/dist/components/ui/context-menu.js +2 -2
- package/dist/components/ui/dialog.js +2 -2
- package/dist/components/ui/dropdown-menu.js +1 -1
- package/dist/components/ui/icon-button.d.ts +1 -1
- package/dist/components/ui/icon-button.js +2 -2
- package/dist/components/ui/input.js +1 -1
- package/dist/components/ui/kbd.js +1 -1
- package/dist/components/ui/label.js +1 -1
- package/dist/components/ui/popover.js +1 -1
- package/dist/components/ui/scroll-area.js +1 -1
- package/dist/components/ui/search-field.d.ts +1 -1
- package/dist/components/ui/search-field.js +3 -3
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/separator.js +1 -1
- package/dist/components/ui/skeleton.js +1 -1
- package/dist/components/ui/switch.js +1 -1
- package/dist/components/ui/tabs.js +1 -1
- package/dist/components/ui/textarea.js +1 -1
- package/dist/components/ui/tooltip.js +1 -1
- package/dist/hooks/shell/shell-registry-provider.d.ts +1 -1
- package/dist/hooks/shell/shell-registry-provider.d.ts.map +1 -1
- package/dist/hooks/shell/shell-registry-provider.js +9 -4
- package/dist/hooks/shell/shell-registry-provider.js.map +1 -1
- package/dist/hooks/shell/use-shell-shortcuts.js +3 -3
- package/dist/hooks/shell/use-shell-store.d.ts +2 -2
- package/dist/hooks/shell/use-shell-store.js +4 -4
- package/dist/hooks/shell/use-shell-tab-strip-bridge.js +1 -1
- package/dist/lib/infra/logger.d.ts +2 -2
- package/dist/lib/infra/logger.js +1 -1
- package/dist/lib/observe/event.d.ts +1 -1
- package/dist/lib/observe/index.d.ts +6 -6
- package/dist/lib/observe/index.js +5 -5
- package/dist/lib/observe/logger.d.ts +2 -2
- package/dist/lib/observe/logger.js +1 -1
- package/dist/lib/observe/nop.d.ts +1 -1
- package/dist/lib/observe/nop.js +1 -1
- package/dist/lib/observe/shell.d.ts +9 -9
- package/dist/lib/observe/shell.js +1 -1
- package/dist/lib/observe/stdout.d.ts +1 -1
- package/dist/lib/shell/actions.d.ts +1 -1
- package/dist/lib/shell/types.d.ts +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.js +8 -8
- package/package.json +2 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { ContextActionMenu } from "
|
|
4
|
-
import { useShellRegistry } from "
|
|
5
|
-
import { useShellStore } from "
|
|
6
|
-
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups";
|
|
7
|
-
import { ActivityNav, ActivityNavButton, ActivityNavSpacer, } from "./primitives/activity-nav";
|
|
3
|
+
import { ContextActionMenu } from "./context-action-menu.js";
|
|
4
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
5
|
+
import { useShellStore } from "../../hooks/shell/use-shell-store.js";
|
|
6
|
+
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups.js";
|
|
7
|
+
import { ActivityNav, ActivityNavButton, ActivityNavSpacer, } from "./primitives/activity-nav.js";
|
|
8
8
|
export function ActivityBar() {
|
|
9
9
|
const setActiveMode = useShellStore((state) => state.setActiveMode);
|
|
10
10
|
const { activeMode, workspaces } = useShellRegistry();
|
|
@@ -3,28 +3,28 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
3
3
|
import { useCallback, useEffect, useRef, useState, } from "react";
|
|
4
4
|
import { Actions, DockLocation, Layout, Model, } from "flexlayout-react";
|
|
5
5
|
import { PinIcon, XIcon } from "lucide-react";
|
|
6
|
-
import { Dialog, DialogContent, DialogTitle } from "
|
|
7
|
-
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "
|
|
8
|
-
import { ShellRegistryProvider } from "
|
|
9
|
-
import { useShellRegistry } from "
|
|
10
|
-
import { useShellShortcuts } from "
|
|
11
|
-
import { useShellStore } from "
|
|
12
|
-
import { useShellTabStripBridge } from "
|
|
13
|
-
import { setShellLayoutFields, setShellSource, shellLayoutLogger, } from "
|
|
14
|
-
import { ContextActionMenu } from "./context-action-menu";
|
|
15
|
-
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups";
|
|
16
|
-
import { ActivityBar } from "./activity-bar";
|
|
17
|
-
import { DEFAULT_LAYOUT } from "./default-layout";
|
|
18
|
-
import { LeftSidebar } from "./left-sidebar";
|
|
19
|
-
import { ShellHeaderSlot, ShellMainSlot, ShellRailSlot, ShellStatusSlot, ShellViewport, } from "./primitives/shell-frame";
|
|
20
|
-
import { RightInspector } from "./right-inspector";
|
|
21
|
-
import { ShellLayoutProvider, useShellLayout } from "./shell-layout";
|
|
22
|
-
import { extractActiveTabId, extractTabsFromModel, setShellModel, } from "./shell-model";
|
|
23
|
-
import { StatusBar } from "./status-bar";
|
|
24
|
-
import { SHELL_TAB_ID_ATTR, SHELL_TAB_MODE_ATTR, SHELL_TAB_PREVIEW_ATTR, } from "./tab-strip-bridge";
|
|
25
|
-
import { TopBar } from "./top-bar";
|
|
26
|
-
import { WorkspaceSurfaceContextMenu } from "./workspace-surface-context-menu";
|
|
27
|
-
import { WorkspaceTabContent } from "./workspace-tab-content";
|
|
6
|
+
import { Dialog, DialogContent, DialogTitle } from "../ui/dialog.js";
|
|
7
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "../ui/dropdown-menu.js";
|
|
8
|
+
import { ShellRegistryProvider } from "../../hooks/shell/shell-registry-provider.js";
|
|
9
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
10
|
+
import { useShellShortcuts } from "../../hooks/shell/use-shell-shortcuts.js";
|
|
11
|
+
import { useShellStore } from "../../hooks/shell/use-shell-store.js";
|
|
12
|
+
import { useShellTabStripBridge } from "../../hooks/shell/use-shell-tab-strip-bridge.js";
|
|
13
|
+
import { setShellLayoutFields, setShellSource, shellLayoutLogger, } from "../../lib/observe/shell.js";
|
|
14
|
+
import { ContextActionMenu } from "./context-action-menu.js";
|
|
15
|
+
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups.js";
|
|
16
|
+
import { ActivityBar } from "./activity-bar.js";
|
|
17
|
+
import { DEFAULT_LAYOUT } from "./default-layout.js";
|
|
18
|
+
import { LeftSidebar } from "./left-sidebar.js";
|
|
19
|
+
import { ShellHeaderSlot, ShellMainSlot, ShellRailSlot, ShellStatusSlot, ShellViewport, } from "./primitives/shell-frame.js";
|
|
20
|
+
import { RightInspector } from "./right-inspector.js";
|
|
21
|
+
import { ShellLayoutProvider, useShellLayout } from "./shell-layout.js";
|
|
22
|
+
import { extractActiveTabId, extractTabsFromModel, setShellModel, } from "./shell-model.js";
|
|
23
|
+
import { StatusBar } from "./status-bar.js";
|
|
24
|
+
import { SHELL_TAB_ID_ATTR, SHELL_TAB_MODE_ATTR, SHELL_TAB_PREVIEW_ATTR, } from "./tab-strip-bridge.js";
|
|
25
|
+
import { TopBar } from "./top-bar.js";
|
|
26
|
+
import { WorkspaceSurfaceContextMenu } from "./workspace-surface-context-menu.js";
|
|
27
|
+
import { WorkspaceTabContent } from "./workspace-tab-content.js";
|
|
28
28
|
const FLEXLAYOUT_STORAGE_KEY = "shell-flexlayout:v1";
|
|
29
29
|
function sanitizeStoredGlobalLayout(global) {
|
|
30
30
|
const sanitizedGlobal = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
|
-
import type { ShellActionGroup } from "
|
|
2
|
+
import type { ShellActionGroup } from "../../lib/shell/actions.js";
|
|
3
3
|
export declare function ContextActionMenu({ children, groups, }: {
|
|
4
4
|
children: ReactNode;
|
|
5
5
|
groups: ShellActionGroup[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import {} from "react";
|
|
4
|
-
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuTrigger, } from "
|
|
4
|
+
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuTrigger, } from "../ui/context-menu.js";
|
|
5
5
|
const NATIVE_CONTEXT_MENU_SELECTOR = [
|
|
6
6
|
"a[href]",
|
|
7
7
|
"[role='link']",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { ContextActionMenu } from "
|
|
4
|
-
import { useShellSurfaceActionGroups } from "
|
|
5
|
-
import { EmptyState } from "
|
|
6
|
-
import { useShellRegistry } from "
|
|
7
|
-
import { ShellSurfaceRoot } from "
|
|
3
|
+
import { ContextActionMenu } from "./context-action-menu.js";
|
|
4
|
+
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups.js";
|
|
5
|
+
import { EmptyState } from "../system/async-state.js";
|
|
6
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
7
|
+
import { ShellSurfaceRoot } from "./primitives/shell-surface.js";
|
|
8
8
|
export function LeftSidebar() {
|
|
9
9
|
const { activeModeWorkspace } = useShellRegistry();
|
|
10
10
|
const contextMenuGroups = useShellSurfaceActionGroups({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
3
|
export function ActivityNav({ children, className, ...props }) {
|
|
4
4
|
return (_jsx("nav", { "aria-label": "Shell navigation", className: cn("flex h-full flex-col items-center gap-[2px] bg-background px-0 py-3 select-none", className), ...props, children: children }));
|
|
5
5
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { ShellHeaderBar } from "./shell-frame";
|
|
4
|
-
import { ShellSurfaceRoot, useShellSurface } from "./shell-surface";
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
|
+
import { ShellHeaderBar } from "./shell-frame.js";
|
|
4
|
+
import { ShellSurfaceRoot, useShellSurface } from "./shell-surface.js";
|
|
5
5
|
export function InspectorPanel({ children, className, ...props }) {
|
|
6
6
|
return (_jsx(ShellSurfaceRoot, { className: cn("flex h-full min-w-0 flex-col overflow-hidden bg-bg-surface", className), surface: "inspector", ...props, children: children }));
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from "react";
|
|
3
|
-
import { cn } from "
|
|
4
|
-
import { useShellSurface } from "./shell-surface";
|
|
3
|
+
import { cn } from "../../../lib/utils.js";
|
|
4
|
+
import { useShellSurface } from "./shell-surface.js";
|
|
5
5
|
const toneClassName = {
|
|
6
6
|
api: "bg-blue-500/12 text-blue-400",
|
|
7
7
|
frontend: "bg-violet-500/12 text-violet-300",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef, } from "react";
|
|
3
3
|
import { Command } from "cmdk";
|
|
4
|
-
import { cn } from "
|
|
4
|
+
import { cn } from "../../../lib/utils.js";
|
|
5
5
|
export const SearchBarList = forwardRef(function SearchBarList({ children, className, ...props }, ref) {
|
|
6
6
|
return (_jsx(Command.List, { className: cn("max-h-[min(420px,55vh)] overflow-auto p-2", className), ref: ref, ...props, children: children }));
|
|
7
7
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
3
|
const NOISE_BACKGROUND = "url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\")";
|
|
4
4
|
export function ShellViewport({ children, compact = false, className, ...props }) {
|
|
5
5
|
return (_jsxs("div", { "data-compact": compact || undefined, className: cn("fixed inset-0 grid bg-background shell-viewport-y-gap", "grid-cols-[52px_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)_auto]", className), ...props, children: [_jsx("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 opacity-[0.015]", style: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
3
|
export function ShellStatusBar({ children, className, ...props }) {
|
|
4
4
|
return (_jsx("footer", { className: cn("flex items-center gap-3 bg-background px-4 font-mono text-[11px] text-fg-tertiary select-none", className), ...props, children: children }));
|
|
5
5
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { ShellHeaderBar } from "./shell-frame";
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
|
+
import { ShellHeaderBar } from "./shell-frame.js";
|
|
4
4
|
export function ShellToolbar({ children, className, ...props }) {
|
|
5
5
|
return (_jsx(ShellHeaderBar, { className: cn("gap-2 px-3 pt-0 pb-0 pl-4 bg-background", className), ...props, children: children }));
|
|
6
6
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from "react";
|
|
3
|
-
import { cn } from "
|
|
4
|
-
import { useShellSurface } from "./shell-surface";
|
|
3
|
+
import { cn } from "../../../lib/utils.js";
|
|
4
|
+
import { useShellSurface } from "./shell-surface.js";
|
|
5
5
|
export const SidebarActionRow = forwardRef(function SidebarActionRow({ active = false, className, description, icon, title, ...props }, ref) {
|
|
6
6
|
const { isCompact, isNarrow, isWide } = useShellSurface();
|
|
7
7
|
return (_jsxs("button", { "data-active": active || undefined, className: cn("group/action my-px flex w-full items-center gap-2.5 rounded-md px-[14px] py-[7px] text-left text-[13px] font-medium text-fg-secondary transition-colors", isCompact && "gap-2 px-3 py-2 text-[12.5px]", isNarrow && "gap-1.5 px-2.5 py-1.5 text-[12px]", "hover:bg-bg-hover hover:text-fg active:bg-bg-active", active && "bg-primary/12 text-fg", className), ref: ref, type: "button", ...props, children: [_jsx("span", { className: cn("shrink-0 text-fg-tertiary transition-colors group-hover/action:text-fg-secondary group-data-[active=true]/action:text-fg-secondary", isNarrow && "[&_svg]:size-3.5"), children: icon }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: cn("block truncate", isNarrow && "leading-[1.25]"), children: title }), description && isWide ? (_jsx("span", { className: "mt-0.5 block truncate text-[11px] text-fg-tertiary", children: description })) : null] })] }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComponentProps, ReactNode } from "react";
|
|
2
|
-
import type { ShellActionGroup } from "
|
|
3
|
-
import { ScrollArea } from "
|
|
2
|
+
import type { ShellActionGroup } from "../../../lib/shell/actions.js";
|
|
3
|
+
import { ScrollArea } from "../../ui/scroll-area.js";
|
|
4
4
|
export declare function SidebarFrame({ children, action, title, className, contextMenuGroups, }: {
|
|
5
5
|
title: string;
|
|
6
6
|
children: ReactNode;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { ContextActionMenu } from "
|
|
3
|
-
import { ScrollArea } from "
|
|
4
|
-
import { cn } from "
|
|
5
|
-
import { ShellHeaderBar } from "./shell-frame";
|
|
6
|
-
import { useShellSurface } from "./shell-surface";
|
|
2
|
+
import { ContextActionMenu } from "../context-action-menu.js";
|
|
3
|
+
import { ScrollArea } from "../../ui/scroll-area.js";
|
|
4
|
+
import { cn } from "../../../lib/utils.js";
|
|
5
|
+
import { ShellHeaderBar } from "./shell-frame.js";
|
|
6
|
+
import { useShellSurface } from "./shell-surface.js";
|
|
7
7
|
export function SidebarFrame({ children, action, title, className, contextMenuGroups, }) {
|
|
8
8
|
const { isCompact, isNarrow } = useShellSurface();
|
|
9
9
|
const frame = (_jsxs("div", { className: cn("flex h-full min-h-0 flex-col", className), children: [_jsxs(ShellHeaderBar, { className: cn("justify-between border-b border-border bg-bg-surface px-3 pt-0 pb-0 pl-4", isCompact && "px-2.5 pl-3", isNarrow && "h-11 px-2 pl-2.5"), children: [_jsx("span", { className: cn("truncate text-[11px] font-semibold tracking-[0.06em] text-fg-tertiary uppercase", isNarrow && "text-[10px]"), children: title }), action] }), _jsx(SidebarScroll, { children: children })] }));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { ChevronDownIcon } from "lucide-react";
|
|
3
|
-
import { Badge } from "
|
|
4
|
-
import { cn } from "
|
|
5
|
-
import { useShellSurface } from "./shell-surface";
|
|
3
|
+
import { Badge } from "../../ui/badge.js";
|
|
4
|
+
import { cn } from "../../../lib/utils.js";
|
|
5
|
+
import { useShellSurface } from "./shell-surface.js";
|
|
6
6
|
export function SidebarSection({ children, className, ...props }) {
|
|
7
7
|
return (_jsx("section", { className: cn("mb-0.5", className), ...props, children: children }));
|
|
8
8
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
3
|
export function WorkspacePageFrame({ align = "start", children, className, contentClassName, width = "wide", ...props }) {
|
|
4
4
|
return (_jsx("div", { className: cn("min-h-full overflow-y-auto bg-bg-surface px-6 pt-5 pb-8 xl:px-7", align === "center" && "flex items-start justify-center", className), ...props, children: _jsx("div", { className: cn("w-full", width === "narrow" && "max-w-[480px]", width === "wide" && "max-w-6xl", contentClassName), children: children }) }));
|
|
5
5
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useRef } from "react";
|
|
4
|
-
import { ContextActionMenu } from "
|
|
5
|
-
import { EmptyState, LoadingState } from "
|
|
6
|
-
import { InspectorHeader, InspectorPanel, InspectorScroll, } from "
|
|
7
|
-
import { useShellRegistry } from "
|
|
8
|
-
import { useShellStore } from "
|
|
9
|
-
import { setShellTabFields, shellInspectorLogger } from "
|
|
10
|
-
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups";
|
|
4
|
+
import { ContextActionMenu } from "./context-action-menu.js";
|
|
5
|
+
import { EmptyState, LoadingState } from "../system/async-state.js";
|
|
6
|
+
import { InspectorHeader, InspectorPanel, InspectorScroll, } from "./primitives/inspector-panel.js";
|
|
7
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
8
|
+
import { useShellStore } from "../../hooks/shell/use-shell-store.js";
|
|
9
|
+
import { setShellTabFields, shellInspectorLogger } from "../../lib/observe/shell.js";
|
|
10
|
+
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups.js";
|
|
11
11
|
export function RightInspector() {
|
|
12
12
|
const hasHydrated = useShellStore((state) => state.hasHydrated);
|
|
13
13
|
const { activeModeWorkspace, activeTab, activeTabWorkspace } = useShellRegistry();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ShellActionGroup } from "
|
|
1
|
+
import type { ShellActionGroup } from "../../lib/shell/actions.js";
|
|
2
2
|
export declare function SearchActionGroups({ groups, runCommand, }: {
|
|
3
3
|
groups: ShellActionGroup[];
|
|
4
4
|
runCommand: (command: () => void) => void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { Command } from "cmdk";
|
|
4
|
-
import { SearchBarGroupHeading, SearchBarItem, } from "
|
|
5
|
-
import { shellSearchLogger } from "
|
|
4
|
+
import { SearchBarGroupHeading, SearchBarItem, } from "./primitives/search-bar-primitives.js";
|
|
5
|
+
import { shellSearchLogger } from "../../lib/observe/shell.js";
|
|
6
6
|
function logSearchAction(action) {
|
|
7
7
|
if (!action.searchLog)
|
|
8
8
|
return;
|
|
@@ -4,13 +4,13 @@ import { Command } from "cmdk";
|
|
|
4
4
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { CommandIcon, SearchIcon } from "lucide-react";
|
|
6
6
|
import { useShallow } from "zustand/react/shallow";
|
|
7
|
-
import { Kbd } from "
|
|
8
|
-
import { useShellLayout } from "
|
|
9
|
-
import { useShellRegistry } from "
|
|
10
|
-
import { useShellStore } from "
|
|
11
|
-
import { shellSearchLogger } from "
|
|
12
|
-
import { SearchActionGroups } from "./search-action-groups";
|
|
13
|
-
import { SearchBarEmpty, SearchBarList, } from "./primitives/search-bar-primitives";
|
|
7
|
+
import { Kbd } from "../ui/kbd.js";
|
|
8
|
+
import { useShellLayout } from "./shell-layout.js";
|
|
9
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
10
|
+
import { useShellStore } from "../../hooks/shell/use-shell-store.js";
|
|
11
|
+
import { shellSearchLogger } from "../../lib/observe/shell.js";
|
|
12
|
+
import { SearchActionGroups } from "./search-action-groups.js";
|
|
13
|
+
import { SearchBarEmpty, SearchBarList, } from "./primitives/search-bar-primitives.js";
|
|
14
14
|
export function SearchBar() {
|
|
15
15
|
const [query, setQuery] = useState("");
|
|
16
16
|
const { searchBarOpen, setActiveMode, setSearchBarOpen } = useShellStore(useShallow((state) => ({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useCallback, useContext, useMemo, useState, } from "react";
|
|
4
|
-
import { useMediaQuery } from "
|
|
5
|
-
import { setShellLayoutFields, setShellSource, shellLayoutLogger, } from "
|
|
6
|
-
import { getShellModel, isBorderOpen, toggleBorder } from "./shell-model";
|
|
4
|
+
import { useMediaQuery } from "../../hooks/use-media-query.js";
|
|
5
|
+
import { setShellLayoutFields, setShellSource, shellLayoutLogger, } from "../../lib/observe/shell.js";
|
|
6
|
+
import { getShellModel, isBorderOpen, toggleBorder } from "./shell-model.js";
|
|
7
7
|
const ShellLayoutContext = createContext(null);
|
|
8
8
|
export const DEFAULT_PANEL_PIXELS = {
|
|
9
9
|
activityRail: 52,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Model, type TabNode } from "flexlayout-react";
|
|
2
|
-
import type { ShellTab } from "
|
|
2
|
+
import type { ShellTab } from "../../lib/shell/types.js";
|
|
3
3
|
export declare function getShellModel(): Model | null;
|
|
4
4
|
export declare function setShellModel(model: Model | null): void;
|
|
5
5
|
export declare function extractTabsFromModel(model: Model): ShellTab[];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { ContextActionMenu } from "
|
|
4
|
-
import { useShellRegistry } from "
|
|
5
|
-
import { ShellStatusBar as ShellStatusBarPrimitive, ShellStatusItem, ShellStatusPill, ShellStatusSelected, } from "./primitives/shell-status-bar";
|
|
6
|
-
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups";
|
|
3
|
+
import { ContextActionMenu } from "./context-action-menu.js";
|
|
4
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
5
|
+
import { ShellStatusBar as ShellStatusBarPrimitive, ShellStatusItem, ShellStatusPill, ShellStatusSelected, } from "./primitives/shell-status-bar.js";
|
|
6
|
+
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups.js";
|
|
7
7
|
export function StatusBar() {
|
|
8
8
|
const { activeMode, activeModeWorkspace, activeTab } = useShellRegistry();
|
|
9
9
|
const contextMenuGroups = useShellSurfaceActionGroups({
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { CheckIcon, PanelLeftIcon, PanelRightIcon, SunMoonIcon, } from "lucide-react";
|
|
4
|
-
import { useShellLayout } from "
|
|
5
|
-
import { ContextActionMenu } from "
|
|
6
|
-
import { useShellRegistry } from "
|
|
7
|
-
import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "
|
|
8
|
-
import { IconButton } from "
|
|
9
|
-
import { useTheme } from "
|
|
10
|
-
import { useShellSurfaceActionGroups, useShellThemes, } from "./use-shell-surface-action-groups";
|
|
11
|
-
import { SearchBar } from "./search-bar";
|
|
12
|
-
import { ShellToolbar, ShellToolbarActions, ShellToolbarBrand, ShellToolbarDivider, ShellToolbarSpacer, ShellToolbarWordmark, } from "./primitives/shell-toolbar";
|
|
4
|
+
import { useShellLayout } from "./shell-layout.js";
|
|
5
|
+
import { ContextActionMenu } from "./context-action-menu.js";
|
|
6
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
7
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "../ui/dropdown-menu.js";
|
|
8
|
+
import { IconButton } from "../ui/icon-button.js";
|
|
9
|
+
import { useTheme } from "../../hooks/use-theme.js";
|
|
10
|
+
import { useShellSurfaceActionGroups, useShellThemes, } from "./use-shell-surface-action-groups.js";
|
|
11
|
+
import { SearchBar } from "./search-bar.js";
|
|
12
|
+
import { ShellToolbar, ShellToolbarActions, ShellToolbarBrand, ShellToolbarDivider, ShellToolbarSpacer, ShellToolbarWordmark, } from "./primitives/shell-toolbar.js";
|
|
13
13
|
export function TopBar() {
|
|
14
14
|
const { appTitle } = useShellRegistry();
|
|
15
15
|
const { leftSidebarOpen, rightInspectorOpen, toggleLeftSidebar, toggleRightInspector, } = useShellLayout();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
|
-
import { type Theme } from "
|
|
3
|
-
import type { ShellActionGroup } from "
|
|
2
|
+
import { type Theme } from "../../hooks/use-theme.js";
|
|
3
|
+
import type { ShellActionGroup } from "../../lib/shell/actions.js";
|
|
4
4
|
export declare function useShellThemes(): {
|
|
5
5
|
value: Theme;
|
|
6
6
|
label: string;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
import { CheckIcon, CommandIcon, MoonStarIcon, PanelLeftIcon, PanelRightIcon, PinIcon, SunIcon, SunMoonIcon, XIcon, } from "lucide-react";
|
|
5
|
-
import { useShellLayout } from "
|
|
6
|
-
import { getWorkspaceShellTab } from "
|
|
7
|
-
import { useShellRegistry } from "
|
|
8
|
-
import { useShellStore } from "
|
|
9
|
-
import { useTheme } from "
|
|
5
|
+
import { useShellLayout } from "./shell-layout.js";
|
|
6
|
+
import { getWorkspaceShellTab } from "./shell-model.js";
|
|
7
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
8
|
+
import { useShellStore } from "../../hooks/shell/use-shell-store.js";
|
|
9
|
+
import { useTheme } from "../../hooks/use-theme.js";
|
|
10
10
|
import { useShallow } from "zustand/react/shallow";
|
|
11
11
|
const THEMES = [
|
|
12
12
|
{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
import type { ShellTab, ShellWorkspaceDefinition } from "
|
|
2
|
+
import type { ShellTab, ShellWorkspaceDefinition } from "../../lib/shell/types.js";
|
|
3
3
|
interface WorkspaceSurfaceContextMenuProps {
|
|
4
4
|
children: ReactNode;
|
|
5
5
|
/** Explicit tab — used by FlexLayout factory. Falls back to global activeTab. */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { ContextActionMenu } from "
|
|
4
|
-
import { useShellRegistry } from "
|
|
5
|
-
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups";
|
|
3
|
+
import { ContextActionMenu } from "./context-action-menu.js";
|
|
4
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
5
|
+
import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups.js";
|
|
6
6
|
export function WorkspaceSurfaceContextMenu({ children, tab: explicitTab, workspace: explicitWorkspace, }) {
|
|
7
7
|
const { activeModeWorkspace, activeTab, activeTabWorkspace } = useShellRegistry();
|
|
8
8
|
const shellGroups = useShellSurfaceActionGroups({
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { ErrorState } from "
|
|
4
|
-
import { useShellRegistry } from "
|
|
5
|
-
import { WorkspaceSurfaceContextMenu } from "./workspace-surface-context-menu";
|
|
3
|
+
import { ErrorState } from "../system/async-state.js";
|
|
4
|
+
import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
|
|
5
|
+
import { WorkspaceSurfaceContextMenu } from "./workspace-surface-context-menu.js";
|
|
6
6
|
export function WorkspaceTabContent({ tab }) {
|
|
7
7
|
const { getWorkspace } = useShellRegistry();
|
|
8
8
|
const workspace = getWorkspace(tab.mode);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AlertCircleIcon, PlugZapIcon, RefreshCcwIcon } from "lucide-react";
|
|
3
|
-
import { Button } from "
|
|
4
|
-
import { Card, CardContent } from "
|
|
5
|
-
import { Skeleton } from "
|
|
6
|
-
import { cn } from "
|
|
3
|
+
import { Button } from "../ui/button.js";
|
|
4
|
+
import { Card, CardContent } from "../ui/card.js";
|
|
5
|
+
import { Skeleton } from "../ui/skeleton.js";
|
|
6
|
+
import { cn } from "../../lib/utils.js";
|
|
7
7
|
export function EmptyState({ title, description, action, className, }) {
|
|
8
8
|
return (_jsxs(StateCard, { className: className, children: [_jsx(StateHeading, { title: title, children: description }), action] }));
|
|
9
9
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AlertTriangleIcon, CheckCircle2Icon, Clock3Icon, XCircleIcon, } from "lucide-react";
|
|
3
|
-
import { Badge } from "
|
|
4
|
-
import { cn } from "
|
|
3
|
+
import { Badge } from "../ui/badge.js";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
5
|
export function StatusDot({ status, className, }) {
|
|
6
6
|
return (_jsx("span", { className: cn("inline-block size-2 rounded-full", status === "healthy" || status === "ready"
|
|
7
7
|
? "bg-status-ok"
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
import { Slot } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
import { Slot } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { cn } from "
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
4
|
function Card({ className, size = "default", ...props }) {
|
|
5
5
|
return (_jsx("div", { "data-slot": "card", "data-size": size, className: cn("group/card flex min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", className), ...props }));
|
|
6
6
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Checkbox as CheckboxPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
import { CheckIcon } from "lucide-react";
|
|
7
7
|
function Checkbox({ className, ...props }) {
|
|
8
8
|
return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "grid place-content-center text-current transition-none [&>svg]:size-3.5", children: _jsx(CheckIcon, {}) }) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { ContextMenu as ContextMenuPrimitive } from "radix-ui";
|
|
3
|
-
import { Kbd } from "
|
|
3
|
+
import { Kbd } from "./kbd.js";
|
|
4
4
|
declare function ContextMenu({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
declare function ContextMenuTrigger({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
declare function ContextMenuPortal({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Portal>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { ContextMenu as ContextMenuPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
6
|
-
import { Kbd } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
|
+
import { Kbd } from "./kbd.js";
|
|
7
7
|
import { CheckIcon, ChevronRightIcon } from "lucide-react";
|
|
8
8
|
function ContextMenu({ ...props }) {
|
|
9
9
|
return _jsx(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Dialog as DialogPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
6
|
-
import { Button } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
|
+
import { Button } from "./button.js";
|
|
7
7
|
import { XIcon } from "lucide-react";
|
|
8
8
|
function Dialog({ ...props }) {
|
|
9
9
|
return _jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
import { CheckIcon, ChevronRightIcon } from "lucide-react";
|
|
7
7
|
function DropdownMenu({ ...props }) {
|
|
8
8
|
return _jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Button } from "
|
|
3
|
-
import { cn } from "
|
|
2
|
+
import { Button } from "./button.js";
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
4
|
export function IconButton({ children, className, iconClassName, label, size = "icon-sm", variant = "ghost", ...props }) {
|
|
5
5
|
return (_jsx(Button, { "aria-label": label, className: cn("shrink-0", className), size: size, variant: variant, ...props, children: _jsx("span", { className: cn("flex items-center justify-center", iconClassName), children: children }) }));
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { cn } from "
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
4
|
function Input({ className, type, ...props }) {
|
|
5
5
|
return (_jsx("input", { type: type, "data-slot": "input", className: cn("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className), ...props }));
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
3
|
export function Kbd({ className, ...props }) {
|
|
4
4
|
return (_jsx("kbd", { "data-slot": "kbd", className: cn("inline-flex items-center rounded-md border border-border bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", className), ...props }));
|
|
5
5
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Label as LabelPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
function Label({ className, ...props }) {
|
|
7
7
|
return (_jsx(LabelPrimitive.Root, { "data-slot": "label", className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className), ...props }));
|
|
8
8
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Popover as PopoverPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
function Popover({ ...props }) {
|
|
7
7
|
return _jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
8
8
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { ScrollArea as ScrollAreaPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
function ScrollArea({ className, children, ...props }) {
|
|
7
7
|
return (_jsxs(ScrollAreaPrimitive.Root, { "data-slot": "scroll-area", className: cn("relative", className), ...props, children: [_jsx(ScrollAreaPrimitive.Viewport, { "data-slot": "scroll-area-viewport", className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1", children: children }), _jsx(ScrollBar, {}), _jsx(ScrollAreaPrimitive.Corner, {})] }));
|
|
8
8
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { SearchIcon } from "lucide-react";
|
|
3
|
-
import { Input } from "
|
|
4
|
-
import { Kbd } from "
|
|
5
|
-
import { cn } from "
|
|
3
|
+
import { Input } from "./input.js";
|
|
4
|
+
import { Kbd } from "./kbd.js";
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
export function SearchField({ className, shortcut, wrapperClassName, ...props }) {
|
|
7
7
|
return (_jsxs("div", { className: cn("flex items-center gap-2 rounded-lg border border-border bg-muted px-3 text-sm text-muted-foreground transition-colors focus-within:border-ring", wrapperClassName), children: [_jsx(SearchIcon, { className: "size-3.5 shrink-0" }), _jsx(Input, { className: cn("border-0 bg-transparent px-0 shadow-none focus-visible:border-0 focus-visible:ring-0", className), ...props }), shortcut ? _jsx(Kbd, { className: "ml-auto", children: shortcut }) : null] }));
|
|
8
8
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Select as SelectPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
import { ChevronDownIcon, CheckIcon } from "lucide-react";
|
|
7
7
|
function Select({ ...props }) {
|
|
8
8
|
return _jsx(SelectPrimitive.Root, { "data-slot": "select", ...props });
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Separator as SeparatorPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
function Separator({ className, orientation = "horizontal", decorative = true, ...props }) {
|
|
7
7
|
return (_jsx(SeparatorPrimitive.Root, { "data-slot": "separator", decorative: decorative, orientation: orientation, className: cn("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", className), ...props }));
|
|
8
8
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
3
|
function Skeleton({ className, ...props }) {
|
|
4
4
|
return (_jsx("div", { "data-slot": "skeleton", className: cn("rounded-md bg-muted bg-[length:400%_100%] animate-[shimmer_4s_ease-in-out_infinite]", className), style: {
|
|
5
5
|
backgroundImage: "linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.04) 50%, transparent 100%)",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Switch as SwitchPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
function Switch({ className, size = "default", ...props }) {
|
|
7
7
|
return (_jsx(SwitchPrimitive.Root, { "data-slot": "switch", "data-size": size, className: cn("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: _jsx(SwitchPrimitive.Thumb, { "data-slot": "switch-thumb", className: "pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground" }) }));
|
|
8
8
|
}
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { cva } from "class-variance-authority";
|
|
5
5
|
import { Tabs as TabsPrimitive } from "radix-ui";
|
|
6
|
-
import { cn } from "
|
|
6
|
+
import { cn } from "../../lib/utils.js";
|
|
7
7
|
function Tabs({ className, orientation = "horizontal", ...props }) {
|
|
8
8
|
return (_jsx(TabsPrimitive.Root, { "data-slot": "tabs", "data-orientation": orientation, className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className), ...props }));
|
|
9
9
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { cn } from "
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
4
|
function Textarea({ className, ...props }) {
|
|
5
5
|
return (_jsx("textarea", { "data-slot": "textarea", className: cn("flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className), ...props }));
|
|
6
6
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Tooltip as TooltipPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
6
|
function TooltipProvider({ delayDuration = 0, ...props }) {
|
|
7
7
|
return (_jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration: delayDuration, ...props }));
|
|
8
8
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
|
-
import type { ShellTab, ShellWorkspaceDefinition } from "
|
|
2
|
+
import type { ShellTab, ShellWorkspaceDefinition } from "../../lib/shell/types.js";
|
|
3
3
|
type ShellRegistryContextValue = {
|
|
4
4
|
appTitle: string;
|
|
5
5
|
workspaces: ShellWorkspaceDefinition[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-registry-provider.d.ts","sourceRoot":"","sources":["../../../src/hooks/shell/shell-registry-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAM3E,OAAO,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,mBAAmB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACrD,kBAAkB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACpD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,wBAAwB,GAAG,IAAI,CAAC;CACjE,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,iBAAsC,EACtC,QAAkB,EAClB,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,wBAAwB,EAAE,CAAC;CACxC,
|
|
1
|
+
{"version":3,"file":"shell-registry-provider.d.ts","sourceRoot":"","sources":["../../../src/hooks/shell/shell-registry-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAM3E,OAAO,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,mBAAmB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACrD,kBAAkB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACpD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,wBAAwB,GAAG,IAAI,CAAC;CACjE,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,iBAAsC,EACtC,QAAkB,EAClB,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,wBAAwB,EAAE,CAAC;CACxC,2CAoDA;AAED,wBAAgB,gBAAgB,IAAI,yBAAyB,CAQ5D"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useContext, useMemo } from "react";
|
|
4
4
|
import { useShallow } from "zustand/react/shallow";
|
|
5
|
-
import { DEFAULT_SHELL_MODE, resolveInitialShellMode, } from "
|
|
6
|
-
import { useShellStore } from "./use-shell-store";
|
|
5
|
+
import { DEFAULT_SHELL_MODE, resolveInitialShellMode, } from "../../lib/shell/persistence.js";
|
|
6
|
+
import { useShellStore } from "./use-shell-store.js";
|
|
7
7
|
const ShellRegistryContext = createContext(null);
|
|
8
8
|
export function ShellRegistryProvider({ children, initialActiveMode = DEFAULT_SHELL_MODE, appTitle = "shell", workspaces, }) {
|
|
9
9
|
const { activeMode: persistedActiveMode, activeTabId, hasHydrated, tabs, } = useShellStore(useShallow((state) => ({
|
|
@@ -12,9 +12,14 @@ export function ShellRegistryProvider({ children, initialActiveMode = DEFAULT_SH
|
|
|
12
12
|
tabs: state.tabs,
|
|
13
13
|
activeTabId: state.activeTabId,
|
|
14
14
|
})));
|
|
15
|
-
const
|
|
15
|
+
const workspaceModes = useMemo(() => new Set(workspaces.map((workspace) => workspace.mode)), [workspaces]);
|
|
16
|
+
const fallbackMode = resolveInitialShellMode(initialActiveMode) !== DEFAULT_SHELL_MODE ||
|
|
17
|
+
workspaceModes.has(DEFAULT_SHELL_MODE)
|
|
18
|
+
? resolveInitialShellMode(initialActiveMode)
|
|
19
|
+
: (workspaces[0]?.mode ?? DEFAULT_SHELL_MODE);
|
|
20
|
+
const activeMode = hasHydrated && workspaceModes.has(persistedActiveMode)
|
|
16
21
|
? persistedActiveMode
|
|
17
|
-
:
|
|
22
|
+
: fallbackMode;
|
|
18
23
|
const value = useMemo(() => {
|
|
19
24
|
const workspaceByMode = new Map(workspaces.map((workspace) => [workspace.mode, workspace]));
|
|
20
25
|
const activeTab = tabs.find((tab) => tab.id === activeTabId) ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-registry-provider.js","sourceRoot":"","sources":["../../../src/hooks/shell/shell-registry-provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYlD,MAAM,oBAAoB,GAAG,aAAa,CACxC,IAAI,CACL,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,EACpC,QAAQ,EACR,iBAAiB,GAAG,kBAAkB,EACtC,QAAQ,GAAG,OAAO,EAClB,UAAU,GAMX;IACC,MAAM,EACJ,UAAU,EAAE,mBAAmB,EAC/B,WAAW,EACX,WAAW,EACX,IAAI,GACL,GAAG,aAAa,CACf,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC,CAAC,CACJ,CAAC;IACF,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"shell-registry-provider.js","sourceRoot":"","sources":["../../../src/hooks/shell/shell-registry-provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYlD,MAAM,oBAAoB,GAAG,aAAa,CACxC,IAAI,CACL,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,EACpC,QAAQ,EACR,iBAAiB,GAAG,kBAAkB,EACtC,QAAQ,GAAG,OAAO,EAClB,UAAU,GAMX;IACC,MAAM,EACJ,UAAU,EAAE,mBAAmB,EAC/B,WAAW,EACX,WAAW,EACX,IAAI,GACL,GAAG,aAAa,CACf,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC,CAAC,CACJ,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAC5D,CAAC,UAAU,CAAC,CACb,CAAC;IACF,MAAM,YAAY,GAChB,uBAAuB,CAAC,iBAAiB,CAAC,KAAK,kBAAkB;QACjE,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACpC,CAAC,CAAC,uBAAuB,CAAC,iBAAiB,CAAC;QAC5C,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,kBAAkB,CAAC,CAAC;IAClD,MAAM,UAAU,GACd,WAAW,IAAI,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACpD,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,YAAY,CAAC;IAEnB,MAAM,KAAK,GAAG,OAAO,CAA4B,GAAG,EAAE;QACpD,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAC3D,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC;QAErE,OAAO;YACL,QAAQ;YACR,UAAU;YACV,UAAU;YACV,SAAS;YACT,mBAAmB,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI;YAC5D,kBAAkB,EAAE,SAAS;gBAC3B,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;gBAC/C,CAAC,CAAC,IAAI;YACR,YAAY,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;SAClE,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1D,OAAO,CACL,KAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACxC,QAAQ,GACqB,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
|
-
import { useShellLayout } from "
|
|
4
|
-
import { useKeyboardShortcut } from "
|
|
5
|
-
import { useShellStore } from "./use-shell-store";
|
|
3
|
+
import { useShellLayout } from "../../components/shell/shell-layout.js";
|
|
4
|
+
import { useKeyboardShortcut } from "../use-keyboard-shortcut.js";
|
|
5
|
+
import { useShellStore } from "./use-shell-store.js";
|
|
6
6
|
export function useShellShortcuts() {
|
|
7
7
|
const { toggleLeftSidebar, toggleRightInspector } = useShellLayout();
|
|
8
8
|
const setSearchBarOpen = useShellStore((state) => state.setSearchBarOpen);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ShellModeId, ShellTab } from "
|
|
2
|
-
import { type ShellEventSource } from "
|
|
1
|
+
import type { ShellModeId, ShellTab } from "../../lib/shell/types.js";
|
|
2
|
+
import { type ShellEventSource } from "../../lib/observe/shell.js";
|
|
3
3
|
type ShellActionMeta = {
|
|
4
4
|
source?: ShellEventSource;
|
|
5
5
|
preview?: boolean;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { Actions, DockLocation } from "flexlayout-react";
|
|
3
3
|
import { create } from "zustand";
|
|
4
4
|
import { createJSONStorage, persist } from "zustand/middleware";
|
|
5
|
-
import { DEFAULT_SHELL_MODE, resolveInitialShellMode, SHELL_MODE_COOKIE_MAX_AGE, SHELL_MODE_COOKIE_NAME, SHELL_STORE_STORAGE_KEY, } from "
|
|
6
|
-
import { setShellModeField, setShellSource, setShellTabFields, shellNavLogger, } from "
|
|
7
|
-
import { findPreviewTabNode, getShellModel, getWorkspaceShellTab, } from "
|
|
8
|
-
import { clearWorkspaceDraftsByTabIds, resetWorkspaceDraftStoreForTests, } from "
|
|
5
|
+
import { DEFAULT_SHELL_MODE, resolveInitialShellMode, SHELL_MODE_COOKIE_MAX_AGE, SHELL_MODE_COOKIE_NAME, SHELL_STORE_STORAGE_KEY, } from "../../lib/shell/persistence.js";
|
|
6
|
+
import { setShellModeField, setShellSource, setShellTabFields, shellNavLogger, } from "../../lib/observe/shell.js";
|
|
7
|
+
import { findPreviewTabNode, getShellModel, getWorkspaceShellTab, } from "../../components/shell/shell-model.js";
|
|
8
|
+
import { clearWorkspaceDraftsByTabIds, resetWorkspaceDraftStoreForTests, } from "../workspace/use-workspace-draft-store.js";
|
|
9
9
|
const INITIAL_PERSISTED_STATE = {
|
|
10
10
|
activeMode: DEFAULT_SHELL_MODE,
|
|
11
11
|
tabs: [],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useEffect, useRef } from "react";
|
|
3
|
-
import { computeActiveIndicatorGeometry, computeTabBridgeGeometry, getShellTabId, SELECTED_TAB_BUTTON_SELECTOR, SHELL_TAB_INDICATOR_MODE_ATTR, SHELL_TAB_INDICATOR_SETTLE_MS, TAB_BUTTON_SELECTOR, TAB_CONTAINER_SELECTOR, } from "
|
|
3
|
+
import { computeActiveIndicatorGeometry, computeTabBridgeGeometry, getShellTabId, SELECTED_TAB_BUTTON_SELECTOR, SHELL_TAB_INDICATOR_MODE_ATTR, SHELL_TAB_INDICATOR_SETTLE_MS, TAB_BUTTON_SELECTOR, TAB_CONTAINER_SELECTOR, } from "../../components/shell/tab-strip-bridge.js";
|
|
4
4
|
function clearIndicatorContainer(container) {
|
|
5
5
|
container.style.removeProperty("--shell-tab-indicator-left");
|
|
6
6
|
container.style.removeProperty("--shell-tab-indicator-width");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Logger } from "
|
|
2
|
-
import type { WideEventData } from "
|
|
1
|
+
import { Logger } from "../observe/index.js";
|
|
2
|
+
import type { WideEventData } from "../observe/index.js";
|
|
3
3
|
export declare const sessionId: string;
|
|
4
4
|
export declare const logger: Logger;
|
|
5
5
|
export declare const buffer: {
|
package/dist/lib/infra/logger.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export type { WideEventData, Transport } from "./types";
|
|
2
|
-
export { WideEvent } from "./event";
|
|
3
|
-
export { Logger } from "./logger";
|
|
4
|
-
export { stdoutTransport } from "./stdout";
|
|
5
|
-
export { nopLogger } from "./nop";
|
|
6
|
-
export { newSessionId, newTraceId } from "./ids";
|
|
1
|
+
export type { WideEventData, Transport } from "./types.js";
|
|
2
|
+
export { WideEvent } from "./event.js";
|
|
3
|
+
export { Logger } from "./logger.js";
|
|
4
|
+
export { stdoutTransport } from "./stdout.js";
|
|
5
|
+
export { nopLogger } from "./nop.js";
|
|
6
|
+
export { newSessionId, newTraceId } from "./ids.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { WideEvent } from "./event";
|
|
2
|
-
export { Logger } from "./logger";
|
|
3
|
-
export { stdoutTransport } from "./stdout";
|
|
4
|
-
export { nopLogger } from "./nop";
|
|
5
|
-
export { newSessionId, newTraceId } from "./ids";
|
|
1
|
+
export { WideEvent } from "./event.js";
|
|
2
|
+
export { Logger } from "./logger.js";
|
|
3
|
+
export { stdoutTransport } from "./stdout.js";
|
|
4
|
+
export { nopLogger } from "./nop.js";
|
|
5
|
+
export { newSessionId, newTraceId } from "./ids.js";
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/lib/observe/nop.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { ShellTab } from "
|
|
2
|
-
import type { WideEvent } from "./event";
|
|
1
|
+
import type { ShellTab } from "../shell/types.js";
|
|
2
|
+
import type { WideEvent } from "./event.js";
|
|
3
3
|
export type ShellEventSource = "activity_bar" | "app_shell" | "context_menu" | "search_bar" | "drawer" | "keyboard_shortcut" | "layout_restore" | "layout_resize" | "shell_data" | "sidebar" | "store" | "tab_bar" | "top_bar";
|
|
4
|
-
export declare const shellLogger: import("./logger").Logger;
|
|
5
|
-
export declare const shellNavLogger: import("./logger").Logger;
|
|
6
|
-
export declare const shellLayoutLogger: import("./logger").Logger;
|
|
7
|
-
export declare const shellSearchLogger: import("./logger").Logger;
|
|
8
|
-
export declare const shellSidebarLogger: import("./logger").Logger;
|
|
9
|
-
export declare const shellInspectorLogger: import("./logger").Logger;
|
|
10
|
-
export declare const shellDataLogger: import("./logger").Logger;
|
|
4
|
+
export declare const shellLogger: import("./logger.js").Logger;
|
|
5
|
+
export declare const shellNavLogger: import("./logger.js").Logger;
|
|
6
|
+
export declare const shellLayoutLogger: import("./logger.js").Logger;
|
|
7
|
+
export declare const shellSearchLogger: import("./logger.js").Logger;
|
|
8
|
+
export declare const shellSidebarLogger: import("./logger.js").Logger;
|
|
9
|
+
export declare const shellInspectorLogger: import("./logger.js").Logger;
|
|
10
|
+
export declare const shellDataLogger: import("./logger.js").Logger;
|
|
11
11
|
export declare function setShellSource(event: WideEvent, source?: ShellEventSource): WideEvent;
|
|
12
12
|
export declare function setShellTabFields(event: WideEvent, tab: ShellTab | null | undefined): WideEvent;
|
|
13
13
|
export declare function setShellModeField(event: WideEvent, activeMode: string | null | undefined): WideEvent;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
import type { ShellEventSource } from "
|
|
2
|
+
import type { ShellEventSource } from "../observe/shell.js";
|
|
3
3
|
type SearchLogValue = string | number | boolean | null;
|
|
4
4
|
export type ShellActionRunMeta = {
|
|
5
5
|
source: ShellEventSource;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ComponentType, ReactNode } from "react";
|
|
2
|
-
import type { ShellActionGroup } from "./actions";
|
|
2
|
+
import type { ShellActionGroup } from "./actions.js";
|
|
3
3
|
export type ShellModeId = string;
|
|
4
4
|
export type ShellTabTone = "neutral" | "success" | "warning" | "danger" | "info";
|
|
5
5
|
export type ShellTabTarget = {
|
package/dist/public-api.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
import type { ShellSearchBarProps, ShellTab as InternalShellTab, ShellTabTarget, ShellTabTone } from "
|
|
3
|
-
import type { ShellEventSource } from "
|
|
2
|
+
import type { ShellSearchBarProps, ShellTab as InternalShellTab, ShellTabTarget, ShellTabTone } from "./lib/shell/types.js";
|
|
3
|
+
import type { ShellEventSource } from "./lib/observe/shell.js";
|
|
4
4
|
export type { ShellTabTarget, ShellTabTone };
|
|
5
5
|
export type ShellTab<TTarget extends ShellTabTarget = ShellTabTarget> = InternalShellTab & {
|
|
6
6
|
sectionId: string;
|
package/dist/public-api.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { AppShell as AvocadoShellApp } from "
|
|
4
|
-
import { SidebarActionRow } from "
|
|
5
|
-
import { SidebarFrame } from "
|
|
6
|
-
import { SidebarSection } from "
|
|
7
|
-
import { WorkspaceFormHeader, WorkspaceFormSection, WorkspacePageFrame, } from "
|
|
8
|
-
import { InspectorField, InspectorValue, } from "
|
|
9
|
-
import { useShellRegistry } from "
|
|
10
|
-
import { useShellStore } from "
|
|
3
|
+
import { AppShell as AvocadoShellApp } from "./components/shell/app-shell.js";
|
|
4
|
+
import { SidebarActionRow } from "./components/shell/primitives/sidebar-action-row.js";
|
|
5
|
+
import { SidebarFrame } from "./components/shell/primitives/sidebar-frame.js";
|
|
6
|
+
import { SidebarSection } from "./components/shell/primitives/sidebar-section.js";
|
|
7
|
+
import { WorkspaceFormHeader, WorkspaceFormSection, WorkspacePageFrame, } from "./components/shell/primitives/workspace-page.js";
|
|
8
|
+
import { InspectorField, InspectorValue, } from "./components/shell/primitives/inspector-panel.js";
|
|
9
|
+
import { useShellRegistry } from "./hooks/shell/shell-registry-provider.js";
|
|
10
|
+
import { useShellStore } from "./hooks/shell/use-shell-store.js";
|
|
11
11
|
export function defineShellApp(app) {
|
|
12
12
|
if (app.sections.length === 0) {
|
|
13
13
|
throw new Error("Shell apps must define at least one section.");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elench/shell",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "The Avocado-derived Elench desktop shell packaged behind a public domain API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"./styles.css": "./dist/styles.css"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "rm -rf dist && tsc -p tsconfig.json && cp src/styles.css dist/styles.css",
|
|
17
|
+
"build": "rm -rf dist && tsc -p tsconfig.json && cp src/styles.css dist/styles.css && node scripts/rewrite-dist-imports.mjs",
|
|
18
18
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
19
19
|
"test": "vitest run --config vitest.config.ts"
|
|
20
20
|
},
|