@elench/shell 0.1.2 → 0.1.3

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.
Files changed (83) hide show
  1. package/dist/components/shell/activity-bar.js +5 -5
  2. package/dist/components/shell/app-shell.d.ts +1 -1
  3. package/dist/components/shell/app-shell.js +22 -22
  4. package/dist/components/shell/context-action-menu.d.ts +1 -1
  5. package/dist/components/shell/context-action-menu.js +1 -1
  6. package/dist/components/shell/left-sidebar.js +5 -5
  7. package/dist/components/shell/primitives/activity-nav.js +1 -1
  8. package/dist/components/shell/primitives/inspector-panel.js +3 -3
  9. package/dist/components/shell/primitives/instance-row.js +2 -2
  10. package/dist/components/shell/primitives/search-bar-primitives.js +1 -1
  11. package/dist/components/shell/primitives/shell-frame.js +1 -1
  12. package/dist/components/shell/primitives/shell-status-bar.js +1 -1
  13. package/dist/components/shell/primitives/shell-toolbar.js +2 -2
  14. package/dist/components/shell/primitives/sidebar-action-row.js +2 -2
  15. package/dist/components/shell/primitives/sidebar-frame.d.ts +2 -2
  16. package/dist/components/shell/primitives/sidebar-frame.js +5 -5
  17. package/dist/components/shell/primitives/sidebar-section.js +3 -3
  18. package/dist/components/shell/primitives/workspace-page.js +1 -1
  19. package/dist/components/shell/right-inspector.js +7 -7
  20. package/dist/components/shell/search-action-groups.d.ts +1 -1
  21. package/dist/components/shell/search-action-groups.js +2 -2
  22. package/dist/components/shell/search-bar.js +7 -7
  23. package/dist/components/shell/shell-layout.d.ts +1 -1
  24. package/dist/components/shell/shell-layout.js +3 -3
  25. package/dist/components/shell/shell-model.d.ts +1 -1
  26. package/dist/components/shell/status-bar.js +4 -4
  27. package/dist/components/shell/top-bar.js +9 -9
  28. package/dist/components/shell/use-shell-surface-action-groups.d.ts +2 -2
  29. package/dist/components/shell/use-shell-surface-action-groups.js +5 -5
  30. package/dist/components/shell/workspace-surface-context-menu.d.ts +1 -1
  31. package/dist/components/shell/workspace-surface-context-menu.js +3 -3
  32. package/dist/components/shell/workspace-tab-content.d.ts +1 -1
  33. package/dist/components/shell/workspace-tab-content.js +3 -3
  34. package/dist/components/system/async-state.d.ts +1 -1
  35. package/dist/components/system/async-state.js +4 -4
  36. package/dist/components/system/status.js +2 -2
  37. package/dist/components/ui/badge.js +1 -1
  38. package/dist/components/ui/button.js +1 -1
  39. package/dist/components/ui/card.js +1 -1
  40. package/dist/components/ui/checkbox.js +1 -1
  41. package/dist/components/ui/context-menu.d.ts +1 -1
  42. package/dist/components/ui/context-menu.js +2 -2
  43. package/dist/components/ui/dialog.js +2 -2
  44. package/dist/components/ui/dropdown-menu.js +1 -1
  45. package/dist/components/ui/icon-button.d.ts +1 -1
  46. package/dist/components/ui/icon-button.js +2 -2
  47. package/dist/components/ui/input.js +1 -1
  48. package/dist/components/ui/kbd.js +1 -1
  49. package/dist/components/ui/label.js +1 -1
  50. package/dist/components/ui/popover.js +1 -1
  51. package/dist/components/ui/scroll-area.js +1 -1
  52. package/dist/components/ui/search-field.d.ts +1 -1
  53. package/dist/components/ui/search-field.js +3 -3
  54. package/dist/components/ui/select.js +1 -1
  55. package/dist/components/ui/separator.js +1 -1
  56. package/dist/components/ui/skeleton.js +1 -1
  57. package/dist/components/ui/switch.js +1 -1
  58. package/dist/components/ui/tabs.js +1 -1
  59. package/dist/components/ui/textarea.js +1 -1
  60. package/dist/components/ui/tooltip.js +1 -1
  61. package/dist/hooks/shell/shell-registry-provider.d.ts +1 -1
  62. package/dist/hooks/shell/shell-registry-provider.js +2 -2
  63. package/dist/hooks/shell/use-shell-shortcuts.js +3 -3
  64. package/dist/hooks/shell/use-shell-store.d.ts +2 -2
  65. package/dist/hooks/shell/use-shell-store.js +4 -4
  66. package/dist/hooks/shell/use-shell-tab-strip-bridge.js +1 -1
  67. package/dist/lib/infra/logger.d.ts +2 -2
  68. package/dist/lib/infra/logger.js +1 -1
  69. package/dist/lib/observe/event.d.ts +1 -1
  70. package/dist/lib/observe/index.d.ts +6 -6
  71. package/dist/lib/observe/index.js +5 -5
  72. package/dist/lib/observe/logger.d.ts +2 -2
  73. package/dist/lib/observe/logger.js +1 -1
  74. package/dist/lib/observe/nop.d.ts +1 -1
  75. package/dist/lib/observe/nop.js +1 -1
  76. package/dist/lib/observe/shell.d.ts +9 -9
  77. package/dist/lib/observe/shell.js +1 -1
  78. package/dist/lib/observe/stdout.d.ts +1 -1
  79. package/dist/lib/shell/actions.d.ts +1 -1
  80. package/dist/lib/shell/types.d.ts +1 -1
  81. package/dist/public-api.d.ts +2 -2
  82. package/dist/public-api.js +8 -8
  83. 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 "@/components/shell/context-action-menu";
4
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
5
- import { useShellStore } from "@/hooks/shell/use-shell-store";
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();
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import type { ShellWorkspaceDefinition } from "@/lib/shell/types";
2
+ import type { ShellWorkspaceDefinition } from "../../lib/shell/types.js";
3
3
  interface AppShellProps {
4
4
  appTitle?: string;
5
5
  children: ReactNode;
@@ -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 "@/components/ui/dialog";
7
- import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu";
8
- import { ShellRegistryProvider } from "@/hooks/shell/shell-registry-provider";
9
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
10
- import { useShellShortcuts } from "@/hooks/shell/use-shell-shortcuts";
11
- import { useShellStore } from "@/hooks/shell/use-shell-store";
12
- import { useShellTabStripBridge } from "@/hooks/shell/use-shell-tab-strip-bridge";
13
- import { setShellLayoutFields, setShellSource, shellLayoutLogger, } from "@/lib/observe/shell";
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 "@/lib/shell/actions";
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 "@/components/ui/context-menu";
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 "@/components/shell/context-action-menu";
4
- import { useShellSurfaceActionGroups } from "@/components/shell/use-shell-surface-action-groups";
5
- import { EmptyState } from "@/components/system/async-state";
6
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
7
- import { ShellSurfaceRoot } from "@/components/shell/primitives/shell-surface";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/shell/actions";
3
- import { ScrollArea } from "@/components/ui/scroll-area";
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 "@/components/shell/context-action-menu";
3
- import { ScrollArea } from "@/components/ui/scroll-area";
4
- import { cn } from "@/lib/utils";
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 "@/components/ui/badge";
4
- import { cn } from "@/lib/utils";
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 "@/lib/utils";
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 "@/components/shell/context-action-menu";
5
- import { EmptyState, LoadingState } from "@/components/system/async-state";
6
- import { InspectorHeader, InspectorPanel, InspectorScroll, } from "@/components/shell/primitives/inspector-panel";
7
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
8
- import { useShellStore } from "@/hooks/shell/use-shell-store";
9
- import { setShellTabFields, shellInspectorLogger } from "@/lib/observe/shell";
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 "@/lib/shell/actions";
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 "@/components/shell/primitives/search-bar-primitives";
5
- import { shellSearchLogger } from "@/lib/observe/shell";
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 "@/components/ui/kbd";
8
- import { useShellLayout } from "@/components/shell/shell-layout";
9
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
10
- import { useShellStore } from "@/hooks/shell/use-shell-store";
11
- import { shellSearchLogger } from "@/lib/observe/shell";
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,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import { type ShellEventSource } from "@/lib/observe/shell";
2
+ import { type ShellEventSource } from "../../lib/observe/shell.js";
3
3
  type ShellLayoutActionMeta = {
4
4
  source?: ShellEventSource;
5
5
  };
@@ -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 "@/hooks/use-media-query";
5
- import { setShellLayoutFields, setShellSource, shellLayoutLogger, } from "@/lib/observe/shell";
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 "@/lib/shell/types";
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 "@/components/shell/context-action-menu";
4
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
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 "@/components/shell/shell-layout";
5
- import { ContextActionMenu } from "@/components/shell/context-action-menu";
6
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
7
- import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu";
8
- import { IconButton } from "@/components/ui/icon-button";
9
- import { useTheme } from "@/hooks/use-theme";
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 "@/hooks/use-theme";
3
- import type { ShellActionGroup } from "@/lib/shell/actions";
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 "@/components/shell/shell-layout";
6
- import { getWorkspaceShellTab } from "@/components/shell/shell-model";
7
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
8
- import { useShellStore } from "@/hooks/shell/use-shell-store";
9
- import { useTheme } from "@/hooks/use-theme";
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 "@/lib/shell/types";
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 "@/components/shell/context-action-menu";
4
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
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,4 +1,4 @@
1
- import type { ShellTab } from "@/lib/shell/types";
1
+ import type { ShellTab } from "../../lib/shell/types.js";
2
2
  interface WorkspaceTabContentProps {
3
3
  tab: ShellTab;
4
4
  }
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { ErrorState } from "@/components/system/async-state";
4
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
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,5 +1,5 @@
1
1
  import type { ComponentProps, ReactNode } from "react";
2
- import { Button } from "@/components/ui/button";
2
+ import { Button } from "../ui/button.js";
3
3
  type AsyncStateProps = {
4
4
  title: string;
5
5
  description: string;
@@ -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 "@/components/ui/button";
4
- import { Card, CardContent } from "@/components/ui/card";
5
- import { Skeleton } from "@/components/ui/skeleton";
6
- import { cn } from "@/lib/utils";
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 "@/components/ui/badge";
4
- import { cn } from "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/components/ui/kbd";
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 "@/lib/utils";
6
- import { Kbd } from "@/components/ui/kbd";
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 "@/lib/utils";
6
- import { Button } from "@/components/ui/button";
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 "@/lib/utils";
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,5 +1,5 @@
1
1
  import type { ComponentProps } from "react";
2
- import { Button } from "@/components/ui/button";
2
+ import { Button } from "./button.js";
3
3
  type IconButtonProps = ComponentProps<typeof Button> & {
4
4
  label: string;
5
5
  iconClassName?: string;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Button } from "@/components/ui/button";
3
- import { cn } from "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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,5 +1,5 @@
1
1
  import type { ComponentProps } from "react";
2
- import { Input } from "@/components/ui/input";
2
+ import { Input } from "./input.js";
3
3
  type SearchFieldProps = ComponentProps<typeof Input> & {
4
4
  shortcut?: string;
5
5
  wrapperClassName?: string;
@@ -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 "@/components/ui/input";
4
- import { Kbd } from "@/components/ui/kbd";
5
- import { cn } from "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/utils";
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 "@/lib/shell/types";
2
+ import type { ShellTab, ShellWorkspaceDefinition } from "../../lib/shell/types.js";
3
3
  type ShellRegistryContextValue = {
4
4
  appTitle: string;
5
5
  workspaces: ShellWorkspaceDefinition[];
@@ -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 "@/lib/shell/persistence";
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) => ({
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { useMemo } from "react";
3
- import { useShellLayout } from "@/components/shell/shell-layout";
4
- import { useKeyboardShortcut } from "@/hooks/use-keyboard-shortcut";
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 "@/lib/shell/types";
2
- import { type ShellEventSource } from "@/lib/observe/shell";
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 "@/lib/shell/persistence";
6
- import { setShellModeField, setShellSource, setShellTabFields, shellNavLogger, } from "@/lib/observe/shell";
7
- import { findPreviewTabNode, getShellModel, getWorkspaceShellTab, } from "@/components/shell/shell-model";
8
- import { clearWorkspaceDraftsByTabIds, resetWorkspaceDraftStoreForTests, } from "@/hooks/workspace/use-workspace-draft-store";
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 "@/components/shell/tab-strip-bridge";
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 "@/lib/observe";
2
- import type { WideEventData } from "@/lib/observe";
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: {
@@ -1,4 +1,4 @@
1
- import { Logger, newSessionId } from "@/lib/observe";
1
+ import { Logger, newSessionId } from "../observe/index.js";
2
2
  const eventSubscribers = new Set();
3
3
  function emitObservedEvent(event) {
4
4
  eventSubscribers.forEach((subscriber) => {
@@ -1,4 +1,4 @@
1
- import type { Transport } from "./types";
1
+ import type { Transport } from "./types.js";
2
2
  export declare class WideEvent {
3
3
  private eventType;
4
4
  private module;
@@ -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
@@ -1,5 +1,5 @@
1
- import { WideEvent } from "./event";
2
- import type { Transport } from "./types";
1
+ import { WideEvent } from "./event.js";
2
+ import type { Transport } from "./types.js";
3
3
  interface LoggerOptions {
4
4
  service: string;
5
5
  sessionId: string;
@@ -1,4 +1,4 @@
1
- import { WideEvent } from "./event";
1
+ import { WideEvent } from "./event.js";
2
2
  export class Logger {
3
3
  constructor(opts) {
4
4
  this.service = opts.service;
@@ -1,3 +1,3 @@
1
- import { Logger } from "./logger";
1
+ import { Logger } from "./logger.js";
2
2
  export declare function nopLogger(): Logger;
3
3
  //# sourceMappingURL=nop.d.ts.map
@@ -1,4 +1,4 @@
1
- import { Logger } from "./logger";
1
+ import { Logger } from "./logger.js";
2
2
  export function nopLogger() {
3
3
  return new Logger({
4
4
  service: "",
@@ -1,13 +1,13 @@
1
- import type { ShellTab } from "@/lib/shell/types";
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,4 +1,4 @@
1
- import { logger } from "@/lib/infra/logger";
1
+ import { logger } from "../infra/logger.js";
2
2
  export const shellLogger = logger.named("shell");
3
3
  export const shellNavLogger = shellLogger.named("nav");
4
4
  export const shellLayoutLogger = shellLogger.named("layout");
@@ -1,3 +1,3 @@
1
- import type { Transport } from "./types";
1
+ import type { Transport } from "./types.js";
2
2
  export declare function stdoutTransport(): Transport;
3
3
  //# sourceMappingURL=stdout.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import type { ShellEventSource } from "@/lib/observe/shell";
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 = {
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
- import type { ShellSearchBarProps, ShellTab as InternalShellTab, ShellTabTarget, ShellTabTone } from "@/lib/shell/types";
3
- import type { ShellEventSource } from "@/lib/observe/shell";
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;
@@ -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 "@/components/shell/app-shell";
4
- import { SidebarActionRow } from "@/components/shell/primitives/sidebar-action-row";
5
- import { SidebarFrame } from "@/components/shell/primitives/sidebar-frame";
6
- import { SidebarSection } from "@/components/shell/primitives/sidebar-section";
7
- import { WorkspaceFormHeader, WorkspaceFormSection, WorkspacePageFrame, } from "@/components/shell/primitives/workspace-page";
8
- import { InspectorField, InspectorValue, } from "@/components/shell/primitives/inspector-panel";
9
- import { useShellRegistry } from "@/hooks/shell/shell-registry-provider";
10
- import { useShellStore } from "@/hooks/shell/use-shell-store";
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.2",
3
+ "version": "0.1.3",
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
  },