@elench/shell 0.1.1 → 0.1.2
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/README.md +46 -7
- package/dist/components/shell/activity-bar.d.ts +2 -0
- package/dist/components/shell/activity-bar.d.ts.map +1 -0
- package/dist/components/shell/activity-bar.js +19 -0
- package/dist/components/shell/activity-bar.js.map +1 -0
- package/dist/components/shell/app-shell.d.ts +11 -0
- package/dist/components/shell/app-shell.d.ts.map +1 -0
- package/dist/components/shell/app-shell.js +323 -0
- package/dist/components/shell/app-shell.js.map +1 -0
- package/dist/components/shell/context-action-menu.d.ts +7 -0
- package/dist/components/shell/context-action-menu.d.ts.map +1 -0
- package/dist/components/shell/context-action-menu.js +75 -0
- package/dist/components/shell/context-action-menu.js.map +1 -0
- package/dist/components/shell/default-layout.d.ts +3 -0
- package/dist/components/shell/default-layout.d.ts.map +1 -0
- package/dist/components/shell/default-layout.js +63 -0
- package/dist/components/shell/default-layout.js.map +1 -0
- package/dist/components/shell/left-sidebar.d.ts +2 -0
- package/dist/components/shell/left-sidebar.d.ts.map +1 -0
- package/dist/components/shell/left-sidebar.js +16 -0
- package/dist/components/shell/left-sidebar.js.map +1 -0
- package/dist/components/shell/primitives/activity-nav.d.ts +7 -0
- package/dist/components/shell/primitives/activity-nav.d.ts.map +1 -0
- package/dist/components/shell/primitives/activity-nav.js +12 -0
- package/dist/components/shell/primitives/activity-nav.js.map +1 -0
- package/dist/components/shell/primitives/inspector-panel.d.ts +25 -0
- package/dist/components/shell/primitives/inspector-panel.d.ts.map +1 -0
- package/dist/components/shell/primitives/inspector-panel.js +32 -0
- package/dist/components/shell/primitives/inspector-panel.js.map +1 -0
- package/dist/components/shell/primitives/instance-row.d.ts +20 -0
- package/dist/components/shell/primitives/instance-row.d.ts.map +1 -0
- package/dist/components/shell/primitives/instance-row.js +16 -0
- package/dist/components/shell/primitives/instance-row.js.map +1 -0
- package/dist/components/shell/primitives/search-bar-primitives.d.ts +21 -0
- package/dist/components/shell/primitives/search-bar-primitives.d.ts.map +1 -0
- package/dist/components/shell/primitives/search-bar-primitives.js +24 -0
- package/dist/components/shell/primitives/search-bar-primitives.js.map +1 -0
- package/dist/components/shell/primitives/shell-frame.d.ts +10 -0
- package/dist/components/shell/primitives/shell-frame.d.ts.map +1 -0
- package/dist/components/shell/primitives/shell-frame.js +26 -0
- package/dist/components/shell/primitives/shell-frame.js.map +1 -0
- package/dist/components/shell/primitives/shell-status-bar.d.ts +13 -0
- package/dist/components/shell/primitives/shell-status-bar.d.ts.map +1 -0
- package/dist/components/shell/primitives/shell-status-bar.js +18 -0
- package/dist/components/shell/primitives/shell-status-bar.js.map +1 -0
- package/dist/components/shell/primitives/shell-surface.d.ts +19 -0
- package/dist/components/shell/primitives/shell-surface.d.ts.map +1 -0
- package/dist/components/shell/primitives/shell-surface.js +73 -0
- package/dist/components/shell/primitives/shell-surface.js.map +1 -0
- package/dist/components/shell/primitives/shell-toolbar.d.ts +8 -0
- package/dist/components/shell/primitives/shell-toolbar.d.ts.map +1 -0
- package/dist/components/shell/primitives/shell-toolbar.js +22 -0
- package/dist/components/shell/primitives/shell-toolbar.js.map +1 -0
- package/dist/components/shell/primitives/sidebar-action-row.d.ts +14 -0
- package/dist/components/shell/primitives/sidebar-action-row.d.ts.map +1 -0
- package/dist/components/shell/primitives/sidebar-action-row.js +9 -0
- package/dist/components/shell/primitives/sidebar-action-row.js.map +1 -0
- package/dist/components/shell/primitives/sidebar-frame.d.ts +12 -0
- package/dist/components/shell/primitives/sidebar-frame.d.ts.map +1 -0
- package/dist/components/shell/primitives/sidebar-frame.js +19 -0
- package/dist/components/shell/primitives/sidebar-frame.js.map +1 -0
- package/dist/components/shell/primitives/sidebar-section.d.ts +15 -0
- package/dist/components/shell/primitives/sidebar-section.d.ts.map +1 -0
- package/dist/components/shell/primitives/sidebar-section.js +23 -0
- package/dist/components/shell/primitives/sidebar-section.js.map +1 -0
- package/dist/components/shell/primitives/workspace-page.d.ts +21 -0
- package/dist/components/shell/primitives/workspace-page.d.ts.map +1 -0
- package/dist/components/shell/primitives/workspace-page.js +18 -0
- package/dist/components/shell/primitives/workspace-page.js.map +1 -0
- package/dist/components/shell/right-inspector.d.ts +2 -0
- package/dist/components/shell/right-inspector.d.ts.map +1 -0
- package/dist/components/shell/right-inspector.js +32 -0
- package/dist/components/shell/right-inspector.js.map +1 -0
- package/dist/components/shell/search-action-groups.d.ts +6 -0
- package/dist/components/shell/search-action-groups.d.ts.map +1 -0
- package/dist/components/shell/search-action-groups.js +37 -0
- package/dist/components/shell/search-action-groups.js.map +1 -0
- package/dist/components/shell/search-bar.d.ts +2 -0
- package/dist/components/shell/search-bar.d.ts.map +1 -0
- package/dist/components/shell/search-bar.js +161 -0
- package/dist/components/shell/search-bar.js.map +1 -0
- package/dist/components/shell/shell-layout.d.ts +30 -0
- package/dist/components/shell/shell-layout.d.ts.map +1 -0
- package/dist/components/shell/shell-layout.js +176 -0
- package/dist/components/shell/shell-layout.js.map +1 -0
- package/dist/components/shell/shell-model.d.ts +14 -0
- package/dist/components/shell/shell-model.d.ts.map +1 -0
- package/dist/components/shell/shell-model.js +75 -0
- package/dist/components/shell/shell-model.js.map +1 -0
- package/dist/components/shell/status-bar.d.ts +2 -0
- package/dist/components/shell/status-bar.d.ts.map +1 -0
- package/dist/components/shell/status-bar.js +16 -0
- package/dist/components/shell/status-bar.js.map +1 -0
- package/dist/components/shell/tab-strip-bridge.d.ts +32 -0
- package/dist/components/shell/tab-strip-bridge.d.ts.map +1 -0
- package/dist/components/shell/tab-strip-bridge.js +46 -0
- package/dist/components/shell/tab-strip-bridge.js.map +1 -0
- package/dist/components/shell/top-bar.d.ts +2 -0
- package/dist/components/shell/top-bar.d.ts.map +1 -0
- package/dist/components/shell/top-bar.js +24 -0
- package/dist/components/shell/top-bar.js.map +1 -0
- package/dist/components/shell/use-shell-surface-action-groups.d.ts +16 -0
- package/dist/components/shell/use-shell-surface-action-groups.d.ts.map +1 -0
- package/dist/components/shell/use-shell-surface-action-groups.js +169 -0
- package/dist/components/shell/use-shell-surface-action-groups.js.map +1 -0
- package/dist/components/shell/workspace-surface-context-menu.d.ts +12 -0
- package/dist/components/shell/workspace-surface-context-menu.d.ts.map +1 -0
- package/dist/components/shell/workspace-surface-context-menu.js +27 -0
- package/dist/components/shell/workspace-surface-context-menu.js.map +1 -0
- package/dist/components/shell/workspace-tab-content.d.ts +7 -0
- package/dist/components/shell/workspace-tab-content.d.ts.map +1 -0
- package/dist/components/shell/workspace-tab-content.js +15 -0
- package/dist/components/shell/workspace-tab-content.js.map +1 -0
- package/dist/components/system/async-state.d.ts +22 -0
- package/dist/components/system/async-state.d.ts.map +1 -0
- package/dist/components/system/async-state.js +34 -0
- package/dist/components/system/async-state.js.map +1 -0
- package/dist/components/system/status.d.ts +16 -0
- package/dist/components/system/status.d.ts.map +1 -0
- package/dist/components/system/status.js +42 -0
- package/dist/components/system/status.js.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +26 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +37 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.d.ts +12 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +26 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +11 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/context-menu.d.ts +31 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/context-menu.js +54 -0
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +18 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +39 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +30 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +53 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/icon-button.d.ts +10 -0
- package/dist/components/ui/icon-button.d.ts.map +1 -0
- package/dist/components/ui/icon-button.js +7 -0
- package/dist/components/ui/icon-button.js.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +8 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/kbd.d.ts +3 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +6 -0
- package/dist/components/ui/kbd.js.map +1 -0
- package/dist/components/ui/label.d.ts +5 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +10 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/popover.d.ts +11 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +28 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +13 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/search-field.d.ts +9 -0
- package/dist/components/ui/search-field.d.ts.map +1 -0
- package/dist/components/ui/search-field.js +9 -0
- package/dist/components/ui/search-field.js.map +1 -0
- package/dist/components/ui/select.d.ts +25 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +35 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +10 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +9 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/switch.d.ts +7 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +10 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +12 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +31 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +8 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +19 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/hooks/shell/shell-registry-provider.d.ts +20 -0
- package/dist/hooks/shell/shell-registry-provider.d.ts.map +1 -0
- package/dist/hooks/shell/shell-registry-provider.js +42 -0
- package/dist/hooks/shell/shell-registry-provider.js.map +1 -0
- package/dist/hooks/shell/use-shell-shortcuts.d.ts +2 -0
- package/dist/hooks/shell/use-shell-shortcuts.d.ts.map +1 -0
- package/dist/hooks/shell/use-shell-shortcuts.js +27 -0
- package/dist/hooks/shell/use-shell-shortcuts.js.map +1 -0
- package/dist/hooks/shell/use-shell-store.d.ts +40 -0
- package/dist/hooks/shell/use-shell-store.d.ts.map +1 -0
- package/dist/hooks/shell/use-shell-store.js +420 -0
- package/dist/hooks/shell/use-shell-store.js.map +1 -0
- package/dist/hooks/shell/use-shell-tab-strip-bridge.d.ts +7 -0
- package/dist/hooks/shell/use-shell-tab-strip-bridge.d.ts.map +1 -0
- package/dist/hooks/shell/use-shell-tab-strip-bridge.js +316 -0
- package/dist/hooks/shell/use-shell-tab-strip-bridge.js.map +1 -0
- package/dist/hooks/use-keyboard-shortcut.d.ts +10 -0
- package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -0
- package/dist/hooks/use-keyboard-shortcut.js +35 -0
- package/dist/hooks/use-keyboard-shortcut.js.map +1 -0
- package/dist/hooks/use-media-query.d.ts +2 -0
- package/dist/hooks/use-media-query.d.ts.map +1 -0
- package/dist/hooks/use-media-query.js +14 -0
- package/dist/hooks/use-media-query.js.map +1 -0
- package/dist/hooks/use-theme.d.ts +14 -0
- package/dist/hooks/use-theme.d.ts.map +1 -0
- package/dist/hooks/use-theme.js +43 -0
- package/dist/hooks/use-theme.js.map +1 -0
- package/dist/hooks/workspace/use-workspace-draft-store.d.ts +45 -0
- package/dist/hooks/workspace/use-workspace-draft-store.d.ts.map +1 -0
- package/dist/hooks/workspace/use-workspace-draft-store.js +197 -0
- package/dist/hooks/workspace/use-workspace-draft-store.js.map +1 -0
- package/dist/index.d.ts +3 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/infra/logger.d.ts +10 -0
- package/dist/lib/infra/logger.d.ts.map +1 -0
- package/dist/lib/infra/logger.js +24 -0
- package/dist/lib/infra/logger.js.map +1 -0
- package/dist/lib/observe/event.d.ts +20 -0
- package/dist/lib/observe/event.d.ts.map +1 -0
- package/dist/lib/observe/event.js +60 -0
- package/dist/lib/observe/event.js.map +1 -0
- package/dist/lib/observe/ids.d.ts +3 -0
- package/dist/lib/observe/ids.d.ts.map +1 -0
- package/dist/lib/observe/ids.js +9 -0
- package/dist/lib/observe/ids.js.map +1 -0
- package/dist/lib/observe/index.d.ts +7 -0
- package/dist/lib/observe/index.d.ts.map +1 -0
- package/dist/lib/observe/index.js +6 -0
- package/dist/lib/observe/index.js.map +1 -0
- package/dist/lib/observe/logger.d.ts +25 -0
- package/dist/lib/observe/logger.d.ts.map +1 -0
- package/dist/lib/observe/logger.js +53 -0
- package/dist/lib/observe/logger.js.map +1 -0
- package/dist/lib/observe/nop.d.ts +3 -0
- package/dist/lib/observe/nop.d.ts.map +1 -0
- package/dist/lib/observe/nop.js +9 -0
- package/dist/lib/observe/nop.js.map +1 -0
- package/dist/lib/observe/shell.d.ts +19 -0
- package/dist/lib/observe/shell.d.ts.map +1 -0
- package/dist/lib/observe/shell.js +49 -0
- package/dist/lib/observe/shell.js.map +1 -0
- package/dist/lib/observe/stdout.d.ts +3 -0
- package/dist/lib/observe/stdout.d.ts.map +1 -0
- package/dist/lib/observe/stdout.js +6 -0
- package/dist/lib/observe/stdout.js.map +1 -0
- package/dist/lib/observe/types.d.ts +14 -0
- package/dist/lib/observe/types.d.ts.map +1 -0
- package/dist/lib/observe/types.js +2 -0
- package/dist/lib/observe/types.js.map +1 -0
- package/dist/lib/shell/actions.d.ts +33 -0
- package/dist/lib/shell/actions.d.ts.map +1 -0
- package/dist/lib/shell/actions.js +2 -0
- package/dist/lib/shell/actions.js.map +1 -0
- package/dist/lib/shell/persistence.d.ts +7 -0
- package/dist/lib/shell/persistence.d.ts.map +1 -0
- package/dist/lib/shell/persistence.js +18 -0
- package/dist/lib/shell/persistence.js.map +1 -0
- package/dist/lib/shell/status.d.ts +4 -0
- package/dist/lib/shell/status.d.ts.map +1 -0
- package/dist/lib/shell/status.js +31 -0
- package/dist/lib/shell/status.js.map +1 -0
- package/dist/lib/shell/types.d.ts +40 -0
- package/dist/lib/shell/types.d.ts.map +1 -0
- package/dist/lib/shell/types.js +2 -0
- package/dist/lib/shell/types.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/public-api.d.ts +109 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +145 -0
- package/dist/public-api.js.map +1 -0
- package/dist/styles.css +249 -379
- package/package.json +16 -10
- package/dist/shell.d.ts +0 -147
- package/dist/shell.d.ts.map +0 -1
- package/dist/shell.js +0 -339
- package/dist/shell.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,9 +1,48 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Avocado Frontend
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
sections, sidebar entries, tab descriptors, tab renderers, and inspector/status
|
|
5
|
-
content. The package owns the activity rail, sidebar, tab rail, main pane,
|
|
6
|
-
inspector placement, status bar, persistence, and shell actions.
|
|
3
|
+
Next.js 16 + React 19 frontend for Avocado. It is an App Router SPA with a shell-based workspace UI and is embedded into the API service at build time.
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
From `avocado/frontend/`:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install
|
|
11
|
+
npm run dev
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- Dev server: `http://localhost:3010`
|
|
15
|
+
- Toolchain: Node `24.14.1`, npm `11.11.0`
|
|
16
|
+
|
|
17
|
+
## How It Is Organized
|
|
18
|
+
|
|
19
|
+
- `src/app/` - Next.js routes and app entrypoints
|
|
20
|
+
- `src/components/shell/` - app shell layout, navigation, tabs, inspector
|
|
21
|
+
- `src/features/` - feature workspaces such as environments, instances, intelligence, and tools
|
|
22
|
+
- `src/hooks/` - data-fetching and domain hooks
|
|
23
|
+
- `src/hooks/shell/` - shell store, shortcuts, registry provider
|
|
24
|
+
- `src/lib/` - API client, shell types/actions, live updates, shared utilities
|
|
25
|
+
|
|
26
|
+
## Architectural Notes
|
|
27
|
+
|
|
28
|
+
- The UI is centered around a multi-panel shell: activity bar, sidebar, workspace, and inspector.
|
|
29
|
+
- Feature workspaces register themselves through `src/hooks/shell/shell-registry-provider.tsx`.
|
|
30
|
+
- Shell state is managed with Zustand; server state and domain behavior live in focused hooks.
|
|
31
|
+
- Real-time updates flow through SSE-based stream hooks such as `use-event-stream` and `use-runtime-stream`.
|
|
32
|
+
|
|
33
|
+
## Common Commands
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm run dev
|
|
37
|
+
npm run build
|
|
38
|
+
npm run lint
|
|
39
|
+
npm run typecheck
|
|
40
|
+
npm run test
|
|
41
|
+
npm run test:e2e
|
|
42
|
+
npm run storybook
|
|
43
|
+
npm run ci
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Further Reading
|
|
47
|
+
|
|
48
|
+
- [Frontend architecture](../docs/frontend/architecture.md)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-bar.d.ts","sourceRoot":"","sources":["../../../src/components/shell/activity-bar.tsx"],"names":[],"mappings":"AAYA,wBAAgB,WAAW,4CAiC1B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
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";
|
|
8
|
+
export function ActivityBar() {
|
|
9
|
+
const setActiveMode = useShellStore((state) => state.setActiveMode);
|
|
10
|
+
const { activeMode, workspaces } = useShellRegistry();
|
|
11
|
+
const contextMenuGroups = useShellSurfaceActionGroups({
|
|
12
|
+
includeActiveTab: false,
|
|
13
|
+
includeAppearance: false,
|
|
14
|
+
includePanels: false,
|
|
15
|
+
includeSearch: false,
|
|
16
|
+
});
|
|
17
|
+
return (_jsx(ContextActionMenu, { groups: contextMenuGroups, children: _jsx("div", { className: "h-full", children: _jsxs(ActivityNav, { children: [workspaces.map((workspace) => (_jsx(ActivityNavButton, { active: activeMode === workspace.mode, "aria-label": workspace.label, onClick: () => setActiveMode(workspace.mode, { source: "activity_bar" }), title: workspace.label, children: workspace.icon }, workspace.mode))), _jsx(ActivityNavSpacer, {})] }) }) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=activity-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-bar.js","sourceRoot":"","sources":["../../../src/components/shell/activity-bar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,UAAU,WAAW;IACzB,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACpE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtD,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;QACpD,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,KAAK;QACxB,aAAa,EAAE,KAAK;QACpB,aAAa,EAAE,KAAK;KACrB,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,iBAAiB,IAAC,MAAM,EAAE,iBAAiB,YAC1C,cAAK,SAAS,EAAC,QAAQ,YACrB,MAAC,WAAW,eACT,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAC7B,KAAC,iBAAiB,IAChB,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,gBACzB,SAAS,CAAC,KAAK,EAE3B,OAAO,EAAE,GAAG,EAAE,CACZ,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EAE3D,KAAK,EAAE,SAAS,CAAC,KAAK,YAErB,SAAS,CAAC,IAAI,IANV,SAAS,CAAC,IAAI,CAOD,CACrB,CAAC,EAEF,KAAC,iBAAiB,KAAG,IACT,GACV,GACY,CACrB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { ShellWorkspaceDefinition } from "@/lib/shell/types";
|
|
3
|
+
interface AppShellProps {
|
|
4
|
+
appTitle?: string;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
initialActiveMode?: string;
|
|
7
|
+
workspaces: ShellWorkspaceDefinition[];
|
|
8
|
+
}
|
|
9
|
+
export declare function AppShell({ appTitle, children, initialActiveMode, workspaces, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=app-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAgCf,OAAO,KAAK,EAAY,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAsiB5E,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,wBAAwB,EAAE,CAAC;CACxC;AAED,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,UAAU,GACX,EAAE,aAAa,2CAYf"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useRef, useState, } from "react";
|
|
4
|
+
import { Actions, DockLocation, Layout, Model, } from "flexlayout-react";
|
|
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";
|
|
28
|
+
const FLEXLAYOUT_STORAGE_KEY = "shell-flexlayout:v1";
|
|
29
|
+
function sanitizeStoredGlobalLayout(global) {
|
|
30
|
+
const sanitizedGlobal = {
|
|
31
|
+
...global,
|
|
32
|
+
splitterSize: 6,
|
|
33
|
+
};
|
|
34
|
+
// Older saved layouts may persist these sizing fields, but the current shell
|
|
35
|
+
// controls tab geometry via CSS instead of FlexLayout globals.
|
|
36
|
+
delete sanitizedGlobal.tabMinWidth;
|
|
37
|
+
delete sanitizedGlobal.tabMaxWidth;
|
|
38
|
+
return sanitizedGlobal;
|
|
39
|
+
}
|
|
40
|
+
function sanitizeStoredLayout(json) {
|
|
41
|
+
if (!json || typeof json !== "object")
|
|
42
|
+
return DEFAULT_LAYOUT;
|
|
43
|
+
const layout = json;
|
|
44
|
+
if (!layout.global)
|
|
45
|
+
return json;
|
|
46
|
+
return {
|
|
47
|
+
...layout,
|
|
48
|
+
global: sanitizeStoredGlobalLayout(layout.global),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function loadOrCreateModel() {
|
|
52
|
+
if (typeof window !== "undefined") {
|
|
53
|
+
try {
|
|
54
|
+
const stored = window.localStorage.getItem(FLEXLAYOUT_STORAGE_KEY);
|
|
55
|
+
if (stored) {
|
|
56
|
+
const json = sanitizeStoredLayout(JSON.parse(stored));
|
|
57
|
+
return Model.fromJson(json);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Fall through to default
|
|
62
|
+
}
|
|
63
|
+
// Migrate tabs from old shell-store if present
|
|
64
|
+
try {
|
|
65
|
+
const oldStore = window.localStorage.getItem("shell-store");
|
|
66
|
+
if (oldStore) {
|
|
67
|
+
const parsed = JSON.parse(oldStore);
|
|
68
|
+
const tabs = parsed?.state?.tabs ?? [];
|
|
69
|
+
const activeTabId = parsed?.state?.activeTabId ?? null;
|
|
70
|
+
if (tabs.length > 0) {
|
|
71
|
+
const model = Model.fromJson(DEFAULT_LAYOUT);
|
|
72
|
+
for (const tab of tabs) {
|
|
73
|
+
model.doAction(Actions.addNode({
|
|
74
|
+
type: "tab",
|
|
75
|
+
id: `workspace:${tab.id}`,
|
|
76
|
+
name: tab.label,
|
|
77
|
+
component: "workspace",
|
|
78
|
+
config: { shellTab: tab },
|
|
79
|
+
}, "main-tabset", DockLocation.CENTER, -1, false));
|
|
80
|
+
}
|
|
81
|
+
// Select the previously active tab
|
|
82
|
+
if (activeTabId) {
|
|
83
|
+
const nodeId = `workspace:${activeTabId}`;
|
|
84
|
+
const node = model.getNodeById(nodeId);
|
|
85
|
+
if (node) {
|
|
86
|
+
model.doAction(Actions.selectTab(nodeId));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return model;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Fall through to default
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return Model.fromJson(DEFAULT_LAYOUT);
|
|
98
|
+
}
|
|
99
|
+
function persistModel(model) {
|
|
100
|
+
if (typeof window === "undefined")
|
|
101
|
+
return;
|
|
102
|
+
try {
|
|
103
|
+
window.localStorage.setItem(FLEXLAYOUT_STORAGE_KEY, JSON.stringify(model.toJson()));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Ignore storage failures
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function ShellChrome({ children }) {
|
|
110
|
+
const { isCompact, leftSidebarOpen, rightInspectorOpen, setPanelVisibility } = useShellLayout();
|
|
111
|
+
const modelRef = useRef(null);
|
|
112
|
+
const layoutSurfaceRef = useRef(null);
|
|
113
|
+
const layoutLogTimerRef = useRef(null);
|
|
114
|
+
const layoutContextMenuGroups = useShellSurfaceActionGroups({
|
|
115
|
+
includeActiveTab: false,
|
|
116
|
+
includeAppearance: false,
|
|
117
|
+
});
|
|
118
|
+
useShellShortcuts();
|
|
119
|
+
useShellTabStripBridge(layoutSurfaceRef, { enabled: !isCompact });
|
|
120
|
+
const [tabContextMenu, setTabContextMenu] = useState(null);
|
|
121
|
+
const handleTabContextMenu = useCallback((node, event) => {
|
|
122
|
+
if (node.getType() !== "tab")
|
|
123
|
+
return;
|
|
124
|
+
const tabNode = node;
|
|
125
|
+
if (tabNode.getComponent() !== "workspace")
|
|
126
|
+
return;
|
|
127
|
+
const shellTab = tabNode.getConfig()?.shellTab;
|
|
128
|
+
if (!shellTab)
|
|
129
|
+
return;
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
event.stopPropagation();
|
|
132
|
+
setTabContextMenu({
|
|
133
|
+
tabId: shellTab.id,
|
|
134
|
+
shellTab,
|
|
135
|
+
x: event.clientX,
|
|
136
|
+
y: event.clientY,
|
|
137
|
+
});
|
|
138
|
+
}, []);
|
|
139
|
+
// Initialize model once
|
|
140
|
+
if (!modelRef.current) {
|
|
141
|
+
const model = loadOrCreateModel();
|
|
142
|
+
model.doAction(Actions.updateModelAttributes({ tabEnableRenderOnDemand: false }));
|
|
143
|
+
model.setOnAllowDrop((_dragNode, dropInfo) => {
|
|
144
|
+
return dropInfo.node.getType() !== "border";
|
|
145
|
+
});
|
|
146
|
+
persistModel(model);
|
|
147
|
+
modelRef.current = model;
|
|
148
|
+
setShellModel(model);
|
|
149
|
+
// Sync initial tabs to Zustand
|
|
150
|
+
const tabs = extractTabsFromModel(model);
|
|
151
|
+
const activeTabId = extractActiveTabId(model);
|
|
152
|
+
if (tabs.length > 0) {
|
|
153
|
+
useShellStore.setState({ tabs, activeTabId });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
useEffect(() => {
|
|
157
|
+
setShellSource(setShellLayoutFields(shellLayoutLogger.event("shell.layout.restored"), {
|
|
158
|
+
isCompact,
|
|
159
|
+
leftSidebarOpen,
|
|
160
|
+
rightInspectorOpen,
|
|
161
|
+
}), "layout_restore").send();
|
|
162
|
+
return () => {
|
|
163
|
+
if (layoutLogTimerRef.current) {
|
|
164
|
+
clearTimeout(layoutLogTimerRef.current);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
// Only log on mount
|
|
168
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
169
|
+
}, []);
|
|
170
|
+
const factory = useCallback((node) => {
|
|
171
|
+
switch (node.getComponent()) {
|
|
172
|
+
case "sidebar":
|
|
173
|
+
return _jsx(LeftSidebar, {});
|
|
174
|
+
case "inspector":
|
|
175
|
+
return _jsx(RightInspector, {});
|
|
176
|
+
case "workspace": {
|
|
177
|
+
const shellTab = node.getConfig()?.shellTab;
|
|
178
|
+
if (!shellTab)
|
|
179
|
+
return null;
|
|
180
|
+
return _jsx(WorkspaceTabContent, { tab: shellTab });
|
|
181
|
+
}
|
|
182
|
+
default:
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}, []);
|
|
186
|
+
const handleModelChange = useCallback((model) => {
|
|
187
|
+
persistModel(model);
|
|
188
|
+
// Sync tabs + activeTabId back to Zustand
|
|
189
|
+
const tabs = extractTabsFromModel(model);
|
|
190
|
+
const activeTabId = extractActiveTabId(model);
|
|
191
|
+
useShellStore.setState({ tabs, activeTabId });
|
|
192
|
+
// Sync border visibility to shell layout
|
|
193
|
+
const borderSet = model.getBorderSet();
|
|
194
|
+
const borders = borderSet.getBorders();
|
|
195
|
+
const leftBorder = borders.find((b) => b.getLocation().getName() === "left");
|
|
196
|
+
const rightBorder = borders.find((b) => b.getLocation().getName() === "right");
|
|
197
|
+
const leftOpen = leftBorder?.getSelectedNode() != null;
|
|
198
|
+
const rightOpen = rightBorder?.getSelectedNode() != null;
|
|
199
|
+
if (leftOpen !== leftSidebarOpen || rightOpen !== rightInspectorOpen) {
|
|
200
|
+
setPanelVisibility({ leftSidebarOpen: leftOpen, rightInspectorOpen: rightOpen }, { source: "layout_resize" });
|
|
201
|
+
}
|
|
202
|
+
}, [leftSidebarOpen, rightInspectorOpen, setPanelVisibility]);
|
|
203
|
+
const handleAction = useCallback((action) => {
|
|
204
|
+
// Log layout-native events only (not tab lifecycle — that's in useShellStore)
|
|
205
|
+
switch (action.type) {
|
|
206
|
+
case Actions.MOVE_NODE:
|
|
207
|
+
case Actions.MAXIMIZE_TOGGLE: {
|
|
208
|
+
if (layoutLogTimerRef.current) {
|
|
209
|
+
clearTimeout(layoutLogTimerRef.current);
|
|
210
|
+
}
|
|
211
|
+
layoutLogTimerRef.current = setTimeout(() => {
|
|
212
|
+
setShellSource(setShellLayoutFields(shellLayoutLogger
|
|
213
|
+
.event("shell.panel.resized")
|
|
214
|
+
.set("action_type", action.type), { isCompact, leftSidebarOpen, rightInspectorOpen }), "layout_resize").send();
|
|
215
|
+
layoutLogTimerRef.current = null;
|
|
216
|
+
}, 250);
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Prevent closing/dragging border tabs
|
|
221
|
+
if (action.type === Actions.DELETE_TAB ||
|
|
222
|
+
action.type === Actions.MOVE_NODE) {
|
|
223
|
+
const nodeId = action.data?.node;
|
|
224
|
+
if (nodeId === "sidebar" || nodeId === "inspector") {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Pin preview tab when dragged
|
|
229
|
+
if (action.type === Actions.MOVE_NODE) {
|
|
230
|
+
const nodeId = action.data?.node;
|
|
231
|
+
if (nodeId && nodeId.startsWith("workspace:")) {
|
|
232
|
+
const tabId = nodeId.replace("workspace:", "");
|
|
233
|
+
setTimeout(() => {
|
|
234
|
+
useShellStore.getState().pinTab(tabId, { source: "tab_bar" });
|
|
235
|
+
}, 0);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return action;
|
|
239
|
+
}, [isCompact, leftSidebarOpen, rightInspectorOpen]);
|
|
240
|
+
const EmptyTabsetPlaceholder = useCallback(() => {
|
|
241
|
+
return _jsx(EmptyWorkspacePlaceholder, {});
|
|
242
|
+
}, []);
|
|
243
|
+
if (isCompact) {
|
|
244
|
+
return (_jsxs(ShellViewport, { compact: true, children: [_jsx(ShellHeaderSlot, { children: _jsx(TopBar, {}) }), _jsx(ShellRailSlot, { children: _jsx(ActivityBar, {}) }), _jsx(ShellMainSlot, { children: _jsx("div", { className: "h-full overflow-auto shell-surface-radius bg-bg-surface", children: _jsx("main", { className: "min-h-0 flex-1 overflow-auto", children: children }) }) }), _jsx(ShellStatusSlot, { children: _jsx(StatusBar, {}) }), _jsx(Dialog, { onOpenChange: (open) => setPanelVisibility({
|
|
245
|
+
leftSidebarOpen: open,
|
|
246
|
+
rightInspectorOpen,
|
|
247
|
+
}, { source: "drawer" }), open: leftSidebarOpen, children: _jsxs(DialogContent, { className: "!top-[calc(36px+var(--shell-gap))] !bottom-[calc(28px+var(--shell-gap))] !left-[52px] !right-auto !w-[min(24rem,calc(100vw-4rem))] !max-w-none !transform-none !rounded-none border-border/80 bg-popover !p-0", showCloseButton: false, children: [_jsx(DialogTitle, { className: "sr-only", children: "Left sidebar" }), _jsx(LeftSidebar, {})] }) }), _jsx(Dialog, { onOpenChange: (open) => setPanelVisibility({
|
|
248
|
+
leftSidebarOpen,
|
|
249
|
+
rightInspectorOpen: open,
|
|
250
|
+
}, { source: "drawer" }), open: rightInspectorOpen, children: _jsxs(DialogContent, { className: "!top-[calc(36px+var(--shell-gap))] !bottom-[calc(28px+var(--shell-gap))] !right-0 !left-auto !w-[min(24rem,calc(100vw-4rem))] !max-w-none !transform-none !rounded-none border-border/80 bg-popover !p-0", showCloseButton: false, children: [_jsx(DialogTitle, { className: "sr-only", children: "Inspector" }), _jsx(RightInspector, {})] }) })] }));
|
|
251
|
+
}
|
|
252
|
+
const model = modelRef.current;
|
|
253
|
+
if (!model)
|
|
254
|
+
return null;
|
|
255
|
+
return (_jsxs(ShellViewport, { children: [_jsx(ShellHeaderSlot, { children: _jsx(TopBar, {}) }), _jsx(ShellRailSlot, { children: _jsx(ActivityBar, {}) }), _jsx(ShellMainSlot, { children: _jsx(ContextActionMenu, { groups: layoutContextMenuGroups, children: _jsxs("div", { ref: layoutSurfaceRef, className: "relative h-full min-h-0 overflow-hidden shell-surface-radius", children: [_jsx(Layout, { model: model, factory: factory, realtimeResize: true, onModelChange: handleModelChange, onAction: handleAction, onContextMenu: handleTabContextMenu, onRenderTab: (node, renderValues) => {
|
|
256
|
+
if (node.getComponent() === "workspace") {
|
|
257
|
+
const shellTab = node.getConfig()?.shellTab;
|
|
258
|
+
if (shellTab) {
|
|
259
|
+
renderValues.content = (_jsx("span", { [SHELL_TAB_ID_ATTR]: shellTab.id,
|
|
260
|
+
[SHELL_TAB_MODE_ATTR]: shellTab.mode,
|
|
261
|
+
...(shellTab.preview
|
|
262
|
+
? { [SHELL_TAB_PREVIEW_ATTR]: "true" }
|
|
263
|
+
: {}), style: { display: "contents" }, onDoubleClick: () => {
|
|
264
|
+
if (!shellTab.preview)
|
|
265
|
+
return;
|
|
266
|
+
useShellStore.getState().pinTab(shellTab.id, {
|
|
267
|
+
source: "tab_bar",
|
|
268
|
+
});
|
|
269
|
+
}, children: renderValues.content }));
|
|
270
|
+
}
|
|
271
|
+
if (shellTab?.tone) {
|
|
272
|
+
const toneClass = {
|
|
273
|
+
neutral: "bg-border",
|
|
274
|
+
success: "bg-status-ok shadow-[0_0_4px_var(--ok-glow)]",
|
|
275
|
+
warning: "bg-status-warn shadow-[0_0_4px_var(--warn-glow)]",
|
|
276
|
+
danger: "bg-status-err shadow-[0_0_4px_var(--error-glow)]",
|
|
277
|
+
info: "bg-status-info shadow-[0_0_4px_var(--info-glow)]",
|
|
278
|
+
}[shellTab.tone];
|
|
279
|
+
renderValues.leading = (_jsx("span", { className: `size-[5px] shrink-0 rounded-full ${toneClass}` }));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}, onTabSetPlaceHolder: EmptyTabsetPlaceholder }), tabContextMenu && (_jsxs(DropdownMenu, { open: true, onOpenChange: (open) => {
|
|
283
|
+
if (!open)
|
|
284
|
+
setTabContextMenu(null);
|
|
285
|
+
}, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("div", { style: {
|
|
286
|
+
position: "fixed",
|
|
287
|
+
left: tabContextMenu.x,
|
|
288
|
+
top: tabContextMenu.y,
|
|
289
|
+
width: 0,
|
|
290
|
+
height: 0,
|
|
291
|
+
} }) }), _jsxs(DropdownMenuContent, { className: "min-w-52 w-auto", align: "start", side: "bottom", sideOffset: 0, children: [tabContextMenu.shellTab.preview && (_jsxs(_Fragment, { children: [_jsxs(DropdownMenuItem, { onSelect: () => {
|
|
292
|
+
useShellStore
|
|
293
|
+
.getState()
|
|
294
|
+
.pinTab(tabContextMenu.tabId, {
|
|
295
|
+
source: "context_menu",
|
|
296
|
+
});
|
|
297
|
+
}, children: [_jsx(PinIcon, { className: "size-4" }), " Keep open"] }), _jsx(DropdownMenuSeparator, {})] })), _jsxs(DropdownMenuItem, { onSelect: () => {
|
|
298
|
+
useShellStore.getState().closeTab(tabContextMenu.tabId, {
|
|
299
|
+
source: "context_menu",
|
|
300
|
+
});
|
|
301
|
+
}, children: [_jsx(XIcon, { className: "size-4" }), " Close"] }), _jsx(DropdownMenuItem, { disabled: useShellStore.getState().tabs.length <= 1, onSelect: () => {
|
|
302
|
+
useShellStore
|
|
303
|
+
.getState()
|
|
304
|
+
.closeOtherTabs(tabContextMenu.tabId, {
|
|
305
|
+
source: "context_menu",
|
|
306
|
+
});
|
|
307
|
+
}, children: "Close Others" }), _jsx(DropdownMenuItem, { variant: "destructive", onSelect: () => {
|
|
308
|
+
useShellStore
|
|
309
|
+
.getState()
|
|
310
|
+
.closeAllTabs({ source: "context_menu" });
|
|
311
|
+
}, children: "Close All" })] })] }))] }) }) }), _jsx(ShellStatusSlot, { children: _jsx(StatusBar, {}) })] }));
|
|
312
|
+
}
|
|
313
|
+
function EmptyWorkspacePlaceholder() {
|
|
314
|
+
const { activeModeWorkspace } = useShellRegistry();
|
|
315
|
+
if (!activeModeWorkspace)
|
|
316
|
+
return null;
|
|
317
|
+
const { Workspace } = activeModeWorkspace;
|
|
318
|
+
return (_jsx(WorkspaceSurfaceContextMenu, { workspace: activeModeWorkspace, tab: null, children: _jsx("div", { className: "h-full overflow-auto bg-bg-surface", children: _jsx(Workspace, { tab: null }) }) }));
|
|
319
|
+
}
|
|
320
|
+
export function AppShell({ appTitle, children, initialActiveMode, workspaces, }) {
|
|
321
|
+
return (_jsx(ShellRegistryProvider, { appTitle: appTitle, initialActiveMode: initialActiveMode, workspaces: workspaces, children: _jsx(ShellLayoutProvider, { children: _jsx(ShellChrome, { children: children }) }) }));
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=app-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-shell.js","sourceRoot":"","sources":["../../../src/components/shell/app-shell.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAEL,WAAW,EACX,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EACL,OAAO,EAGP,YAAY,EAGZ,MAAM,EACN,KAAK,GAGN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAErD,SAAS,0BAA0B,CACjC,MAA+B;IAE/B,MAAM,eAAe,GAA4B;QAC/C,GAAG,MAAM;QACT,YAAY,EAAE,CAAC;KAChB,CAAC;IAEF,6EAA6E;IAC7E,+DAA+D;IAC/D,OAAO,eAAe,CAAC,WAAW,CAAC;IACnC,OAAO,eAAe,CAAC,WAAW,CAAC;IAEnC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,cAAc,CAAC;IAC7D,MAAM,MAAM,GAAG,IAA4C,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAkB,CAAC;IAE9C,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC;KACzB,CAAC;AAC7B,CAAC;AAED,SAAS,iBAAiB;IACxB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACnE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtD,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAe,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;gBACnD,MAAM,WAAW,GAAkB,MAAM,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC;gBAEtE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;oBAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,KAAK,CAAC,QAAQ,CACZ,OAAO,CAAC,OAAO,CACb;4BACE,IAAI,EAAE,KAAK;4BACX,EAAE,EAAE,aAAa,GAAG,CAAC,EAAE,EAAE;4BACzB,IAAI,EAAE,GAAG,CAAC,KAAK;4BACf,SAAS,EAAE,WAAW;4BACtB,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;yBAC1B,EACD,aAAa,EACb,YAAY,CAAC,MAAM,EACnB,CAAC,CAAC,EACF,KAAK,CACN,CACF,CAAC;oBACJ,CAAC;oBACD,mCAAmC;oBACnC,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,MAAM,GAAG,aAAa,WAAW,EAAE,CAAC;wBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBACvC,IAAI,IAAI,EAAE,CAAC;4BACT,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC5C,CAAC;oBACH,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAChC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,IAAI,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,OAAO,CACzB,sBAAsB,EACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAC/B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,QAAQ,EAA2B;IACxD,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,GAC1E,cAAc,EAAE,CAAC;IAEnB,MAAM,QAAQ,GAAG,MAAM,CAAe,IAAI,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAC7E,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;QAC1D,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,KAAK;KACzB,CAAC,CAAC;IAEH,iBAAiB,EAAE,CAAC;IACpB,sBAAsB,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IAElE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAK1C,IAAI,CAAC,CAAC;IAEhB,MAAM,oBAAoB,GAAG,WAAW,CACtC,CACE,IAAuC,EACvC,KAAoC,EACpC,EAAE;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK;YAAE,OAAO;QACrC,MAAM,OAAO,GAAG,IAAe,CAAC;QAChC,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,WAAW;YAAE,OAAO;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,QAAgC,CAAC;QACvE,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,iBAAiB,CAAC;YAChB,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,QAAQ;YACR,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,CAAC,EAAE,KAAK,CAAC,OAAO;SACjB,CAAC,CAAC;IACL,CAAC,EACD,EAAE,CACH,CAAC;IAEF,wBAAwB;IACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAClC,KAAK,CAAC,QAAQ,CACZ,OAAO,CAAC,qBAAqB,CAAC,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,CAClE,CAAC;QACF,KAAK,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;YAC3C,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,aAAa,CAAC,KAAK,CAAC,CAAC;QAErB,+BAA+B;QAC/B,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CACZ,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE;YACrE,SAAS;YACT,eAAe;YACf,kBAAkB;SACnB,CAAC,EACF,gBAAgB,CACjB,CAAC,IAAI,EAAE,CAAC;QAET,OAAO,GAAG,EAAE;YACV,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBAC9B,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC;QACF,oBAAoB;QACpB,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE;QAC5C,QAAQ,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YAC5B,KAAK,SAAS;gBACZ,OAAO,KAAC,WAAW,KAAG,CAAC;YACzB,KAAK,WAAW;gBACd,OAAO,KAAC,cAAc,KAAG,CAAC;YAC5B,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,QAAgC,CAAC;gBACpE,IAAI,CAAC,QAAQ;oBAAE,OAAO,IAAI,CAAC;gBAC3B,OAAO,KAAC,mBAAmB,IAAC,GAAG,EAAE,QAAQ,GAAI,CAAC;YAChD,CAAC;YACD;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAY,EAAE,EAAE;QACf,YAAY,CAAC,KAAK,CAAC,CAAC;QAEpB,0CAA0C;QAC1C,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC9C,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAE9C,yCAAyC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,MAAM,CAC5C,CAAC;QACF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,OAAO,CAC7C,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,EAAE,eAAe,EAAE,IAAI,IAAI,CAAC;QACvD,MAAM,SAAS,GAAG,WAAW,EAAE,eAAe,EAAE,IAAI,IAAI,CAAC;QAEzD,IAAI,QAAQ,KAAK,eAAe,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;YACrE,kBAAkB,CAChB,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAC5D,EAAE,MAAM,EAAE,eAAe,EAAE,CAC5B,CAAC;QACJ,CAAC;IACH,CAAC,EACD,CAAC,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAC1D,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAAc,EAAsB,EAAE;QACrC,8EAA8E;QAC9E,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,OAAO,CAAC,SAAS,CAAC;YACvB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC7B,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;oBAC9B,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBACD,iBAAiB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC1C,cAAc,CACZ,oBAAoB,CAClB,iBAAiB;yBACd,KAAK,CAAC,qBAAqB,CAAC;yBAC5B,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAClC,EAAE,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,CACnD,EACD,eAAe,CAChB,CAAC,IAAI,EAAE,CAAC;oBACT,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;gBACnC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,MAAM;YACR,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,IACE,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,UAAU;YAClC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,SAAS,EACjC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAA0B,CAAC;YACvD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBACnD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAA0B,CAAC;YACvD,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAC/C,UAAU,CAAC,GAAG,EAAE;oBACd,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAChE,CAAC,EAAE,CAAC,CAAC,CAAC;YACR,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,SAAS,EAAE,eAAe,EAAE,kBAAkB,CAAC,CACjD,CAAC;IAEF,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,OAAO,KAAC,yBAAyB,KAAG,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,MAAC,aAAa,IAAC,OAAO,mBACpB,KAAC,eAAe,cACd,KAAC,MAAM,KAAG,GACM,EAClB,KAAC,aAAa,cACZ,KAAC,WAAW,KAAG,GACD,EAChB,KAAC,aAAa,cACZ,cAAK,SAAS,EAAC,yDAAyD,YACtE,eAAM,SAAS,EAAC,8BAA8B,YAAE,QAAQ,GAAQ,GAC5D,GACQ,EAChB,KAAC,eAAe,cACd,KAAC,SAAS,KAAG,GACG,EAElB,KAAC,MAAM,IACL,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CACrB,kBAAkB,CAChB;wBACE,eAAe,EAAE,IAAI;wBACrB,kBAAkB;qBACnB,EACD,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,EAEH,IAAI,EAAE,eAAe,YAErB,MAAC,aAAa,IACZ,SAAS,EAAC,+MAA+M,EACzN,eAAe,EAAE,KAAK,aAEtB,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,6BAA2B,EAC3D,KAAC,WAAW,KAAG,IACD,GACT,EAET,KAAC,MAAM,IACL,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CACrB,kBAAkB,CAChB;wBACE,eAAe;wBACf,kBAAkB,EAAE,IAAI;qBACzB,EACD,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,EAEH,IAAI,EAAE,kBAAkB,YAExB,MAAC,aAAa,IACZ,SAAS,EAAC,0MAA0M,EACpN,eAAe,EAAE,KAAK,aAEtB,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,0BAAwB,EACxD,KAAC,cAAc,KAAG,IACJ,GACT,IACK,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO,CACL,MAAC,aAAa,eACZ,KAAC,eAAe,cACd,KAAC,MAAM,KAAG,GACM,EAClB,KAAC,aAAa,cACZ,KAAC,WAAW,KAAG,GACD,EAChB,KAAC,aAAa,cACZ,KAAC,iBAAiB,IAAC,MAAM,EAAE,uBAAuB,YAChD,eACE,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAC,8DAA8D,aAExE,KAAC,MAAM,IACL,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,cAAc,QACd,aAAa,EAAE,iBAAiB,EAChC,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,oBAAoB,EACnC,WAAW,EAAE,CAAC,IAAa,EAAE,YAA8B,EAAE,EAAE;oCAC7D,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,WAAW,EAAE,CAAC;wCACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,QAEtB,CAAC;wCACd,IAAI,QAAQ,EAAE,CAAC;4CACb,YAAY,CAAC,OAAO,GAAG,CACrB,eAEI,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,EAAE;gDAChC,CAAC,mBAAmB,CAAC,EAAE,QAAQ,CAAC,IAAI;gDACpC,GAAG,CAAC,QAAQ,CAAC,OAAO;oDAClB,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE;oDACtC,CAAC,CAAC,EAAE,CAAC,EAET,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAC9B,aAAa,EAAE,GAAG,EAAE;oDAClB,IAAI,CAAC,QAAQ,CAAC,OAAO;wDAAE,OAAO;oDAC9B,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;wDAC3C,MAAM,EAAE,SAAS;qDAClB,CAAC,CAAC;gDACL,CAAC,YAEA,YAAY,CAAC,OAAO,GAChB,CACR,CAAC;wCACJ,CAAC;wCACD,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;4CACnB,MAAM,SAAS,GAAG;gDAChB,OAAO,EAAE,WAAW;gDACpB,OAAO,EAAE,8CAA8C;gDACvD,OAAO,EACL,kDAAkD;gDACpD,MAAM,EACJ,kDAAkD;gDACpD,IAAI,EAAE,kDAAkD;6CACzD,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;4CACjB,YAAY,CAAC,OAAO,GAAG,CACrB,eACE,SAAS,EAAE,oCAAoC,SAAS,EAAE,GAC1D,CACH,CAAC;wCACJ,CAAC;oCACH,CAAC;gCACH,CAAC,EACD,mBAAmB,EAAE,sBAAsB,GAC3C,EACD,cAAc,IAAI,CACjB,MAAC,YAAY,IACX,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;oCACrB,IAAI,CAAC,IAAI;wCAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;gCACrC,CAAC,aAED,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,cACE,KAAK,EAAE;gDACL,QAAQ,EAAE,OAAO;gDACjB,IAAI,EAAE,cAAc,CAAC,CAAC;gDACtB,GAAG,EAAE,cAAc,CAAC,CAAC;gDACrB,KAAK,EAAE,CAAC;gDACR,MAAM,EAAE,CAAC;6CACV,GACD,GACkB,EACtB,MAAC,mBAAmB,IAClB,SAAS,EAAC,iBAAiB,EAC3B,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,QAAQ,EACb,UAAU,EAAE,CAAC,aAEZ,cAAc,CAAC,QAAQ,CAAC,OAAO,IAAI,CAClC,8BACE,MAAC,gBAAgB,IACf,QAAQ,EAAE,GAAG,EAAE;4DACb,aAAa;iEACV,QAAQ,EAAE;iEACV,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE;gEAC5B,MAAM,EAAE,cAAc;6DACvB,CAAC,CAAC;wDACP,CAAC,aAED,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,GAAG,kBACb,EACnB,KAAC,qBAAqB,KAAG,IACxB,CACJ,EACD,MAAC,gBAAgB,IACf,QAAQ,EAAE,GAAG,EAAE;oDACb,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE;wDACtD,MAAM,EAAE,cAAc;qDACvB,CAAC,CAAC;gDACL,CAAC,aAED,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,GAAG,cACX,EACnB,KAAC,gBAAgB,IACf,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EACnD,QAAQ,EAAE,GAAG,EAAE;oDACb,aAAa;yDACV,QAAQ,EAAE;yDACV,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE;wDACpC,MAAM,EAAE,cAAc;qDACvB,CAAC,CAAC;gDACP,CAAC,6BAGgB,EACnB,KAAC,gBAAgB,IACf,OAAO,EAAC,aAAa,EACrB,QAAQ,EAAE,GAAG,EAAE;oDACb,aAAa;yDACV,QAAQ,EAAE;yDACV,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;gDAC9C,CAAC,0BAGgB,IACC,IACT,CAChB,IACG,GACY,GACN,EAChB,KAAC,eAAe,cACd,KAAC,SAAS,KAAG,GACG,IACJ,CACjB,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,EAAE,mBAAmB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEnD,IAAI,CAAC,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC;IAE1C,OAAO,CACL,KAAC,2BAA2B,IAAC,SAAS,EAAE,mBAAmB,EAAE,GAAG,EAAE,IAAI,YACpE,cAAK,SAAS,EAAC,oCAAoC,YACjD,KAAC,SAAS,IAAC,GAAG,EAAE,IAAI,GAAI,GACpB,GACsB,CAC/B,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,UAAU,GACI;IACd,OAAO,CACL,KAAC,qBAAqB,IACpB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,YAEtB,KAAC,mBAAmB,cAClB,KAAC,WAAW,cAAE,QAAQ,GAAe,GACjB,GACA,CACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { ShellActionGroup } from "@/lib/shell/actions";
|
|
3
|
+
export declare function ContextActionMenu({ children, groups, }: {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
groups: ShellActionGroup[];
|
|
6
|
+
}): string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
|
|
7
|
+
//# sourceMappingURL=context-action-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-action-menu.d.ts","sourceRoot":"","sources":["../../../src/components/shell/context-action-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAoE5D,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,2UA4DA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import {} from "react";
|
|
4
|
+
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuTrigger, } from "@/components/ui/context-menu";
|
|
5
|
+
const NATIVE_CONTEXT_MENU_SELECTOR = [
|
|
6
|
+
"a[href]",
|
|
7
|
+
"[role='link']",
|
|
8
|
+
"input",
|
|
9
|
+
"textarea",
|
|
10
|
+
"[contenteditable='']",
|
|
11
|
+
"[contenteditable='true']",
|
|
12
|
+
"[contenteditable='plaintext-only']",
|
|
13
|
+
"[data-native-context-menu]",
|
|
14
|
+
].join(", ");
|
|
15
|
+
function hasSelectedText(target, currentTarget) {
|
|
16
|
+
if (typeof window === "undefined")
|
|
17
|
+
return false;
|
|
18
|
+
const selection = window.getSelection();
|
|
19
|
+
if (!selection ||
|
|
20
|
+
selection.isCollapsed ||
|
|
21
|
+
selection.rangeCount === 0 ||
|
|
22
|
+
selection.toString().trim().length === 0) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const targetNode = target instanceof Node ? target : null;
|
|
26
|
+
if (!targetNode || !(currentTarget instanceof Node)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return Array.from({ length: selection.rangeCount }).some((_, index) => {
|
|
30
|
+
const range = selection.getRangeAt(index);
|
|
31
|
+
if (!currentTarget.contains(range.commonAncestorContainer)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return range.intersectsNode(targetNode);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function shouldPreserveNativeContextMenu(event) {
|
|
43
|
+
const target = event.target;
|
|
44
|
+
const element = target instanceof Element
|
|
45
|
+
? target
|
|
46
|
+
: target instanceof Node
|
|
47
|
+
? target.parentElement
|
|
48
|
+
: null;
|
|
49
|
+
if (!element)
|
|
50
|
+
return false;
|
|
51
|
+
if (element.closest(NATIVE_CONTEXT_MENU_SELECTOR)) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return hasSelectedText(target, event.currentTarget);
|
|
55
|
+
}
|
|
56
|
+
export function ContextActionMenu({ children, groups, }) {
|
|
57
|
+
const visibleGroups = groups
|
|
58
|
+
.map((group) => ({
|
|
59
|
+
...group,
|
|
60
|
+
actions: group.actions.filter((action) => action.showInContextMenu !== false),
|
|
61
|
+
}))
|
|
62
|
+
.filter((group) => group.actions.length > 0);
|
|
63
|
+
if (visibleGroups.length === 0) {
|
|
64
|
+
return children;
|
|
65
|
+
}
|
|
66
|
+
const handleContextMenuCapture = (event) => {
|
|
67
|
+
if (!shouldPreserveNativeContextMenu(event)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
event.stopPropagation();
|
|
71
|
+
event.nativeEvent.stopImmediatePropagation?.();
|
|
72
|
+
};
|
|
73
|
+
return (_jsxs(ContextMenu, { children: [_jsx(ContextMenuTrigger, { asChild: true, children: _jsx("div", { className: "contents", onContextMenuCapture: handleContextMenuCapture, children: children }) }), _jsx(ContextMenuContent, { className: "min-w-52", children: visibleGroups.map((group, groupIndex) => (_jsxs("div", { children: [groupIndex > 0 ? _jsx(ContextMenuSeparator, {}) : null, group.label ? (_jsx(ContextMenuLabel, { children: group.label })) : null, group.actions.map((action) => (_jsxs(ContextMenuItem, { disabled: action.disabled, inset: !action.icon, onSelect: () => action.run({ source: "context_menu" }), variant: action.variant, children: [action.icon, action.label, action.shortcut ? (_jsx(ContextMenuShortcut, { children: action.shortcut })) : null] }, action.id)))] }, group.id))) })] }));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=context-action-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-action-menu.js","sourceRoot":"","sources":["../../../src/components/shell/context-action-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-layout.d.ts","sourceRoot":"","sources":["../../../src/components/shell/default-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,UA6D5B,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export const DEFAULT_LAYOUT = {
|
|
2
|
+
global: {
|
|
3
|
+
tabEnableClose: true, // workspace tabs have an X button
|
|
4
|
+
tabEnableRename: false, // tab labels are set programmatically, not by users
|
|
5
|
+
tabEnableRenderOnDemand: false, // keep open workspace tabs mounted when inactive
|
|
6
|
+
tabSetEnableMaximize: true, // double-click tabset header to go fullscreen
|
|
7
|
+
tabSetEnableClose: false, // can't close the entire tabset container
|
|
8
|
+
splitterSize: 6, // must match --shell-gap in globals.css
|
|
9
|
+
splitterExtra: 4, // invisible hit-target padding on each side of splitter
|
|
10
|
+
borderEnableAutoHide: false, // sidebar/inspector only collapse via toggle functions, not by resizing narrow
|
|
11
|
+
borderEnableDrop: false, // borders are reserved shell surfaces, not user tab drop targets
|
|
12
|
+
},
|
|
13
|
+
borders: [
|
|
14
|
+
{
|
|
15
|
+
type: "border",
|
|
16
|
+
location: "left",
|
|
17
|
+
size: 260, // default width (px) — persisted after first drag
|
|
18
|
+
minSize: 100, // narrowest the user can drag to
|
|
19
|
+
selected: 0, // 0 = open (first child selected), -1 = collapsed
|
|
20
|
+
children: [
|
|
21
|
+
{
|
|
22
|
+
type: "tab",
|
|
23
|
+
id: "sidebar",
|
|
24
|
+
name: "Sidebar",
|
|
25
|
+
component: "sidebar", // resolved by factory → <LeftSidebar />
|
|
26
|
+
enableClose: false, // permanent — no X button
|
|
27
|
+
enableDrag: false, // can't be dragged out of the border
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: "border",
|
|
33
|
+
location: "right",
|
|
34
|
+
size: 260,
|
|
35
|
+
minSize: 100,
|
|
36
|
+
selected: 0,
|
|
37
|
+
children: [
|
|
38
|
+
{
|
|
39
|
+
type: "tab",
|
|
40
|
+
id: "inspector",
|
|
41
|
+
name: "Inspector",
|
|
42
|
+
component: "inspector", // resolved by factory → <RightInspector />
|
|
43
|
+
enableClose: false,
|
|
44
|
+
enableDrag: false,
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
layout: {
|
|
50
|
+
type: "row",
|
|
51
|
+
weight: 100, // fills all remaining horizontal space between borders
|
|
52
|
+
children: [
|
|
53
|
+
{
|
|
54
|
+
type: "tabset",
|
|
55
|
+
weight: 100,
|
|
56
|
+
id: "main-tabset", // target for openTab — workspace tabs are added here
|
|
57
|
+
enableDeleteWhenEmpty: false, // keeps the tabset even with zero tabs (shows placeholder)
|
|
58
|
+
children: [],
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=default-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-layout.js","sourceRoot":"","sources":["../../../src/components/shell/default-layout.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,MAAM,EAAE;QACN,cAAc,EAAE,IAAI,EAAE,kCAAkC;QACxD,eAAe,EAAE,KAAK,EAAE,oDAAoD;QAC5E,uBAAuB,EAAE,KAAK,EAAE,iDAAiD;QACjF,oBAAoB,EAAE,IAAI,EAAE,8CAA8C;QAC1E,iBAAiB,EAAE,KAAK,EAAE,0CAA0C;QACpE,YAAY,EAAE,CAAC,EAAE,wCAAwC;QACzD,aAAa,EAAE,CAAC,EAAE,wDAAwD;QAC1E,oBAAoB,EAAE,KAAK,EAAE,+EAA+E;QAC5G,gBAAgB,EAAE,KAAK,EAAE,iEAAiE;KAC3F;IACD,OAAO,EAAE;QACP;YACE,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,GAAG,EAAE,kDAAkD;YAC7D,OAAO,EAAE,GAAG,EAAE,iCAAiC;YAC/C,QAAQ,EAAE,CAAC,EAAE,kDAAkD;YAC/D,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,KAAK;oBACX,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,SAAS,EAAE,wCAAwC;oBAC9D,WAAW,EAAE,KAAK,EAAE,0BAA0B;oBAC9C,UAAU,EAAE,KAAK,EAAE,qCAAqC;iBACzD;aACF;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,KAAK;oBACX,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,WAAW,EAAE,2CAA2C;oBACnE,WAAW,EAAE,KAAK;oBAClB,UAAU,EAAE,KAAK;iBAClB;aACF;SACF;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,GAAG,EAAE,uDAAuD;QACpE,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,GAAG;gBACX,EAAE,EAAE,aAAa,EAAE,qDAAqD;gBACxE,qBAAqB,EAAE,KAAK,EAAE,2DAA2D;gBACzF,QAAQ,EAAE,EAAE;aACb;SACF;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"left-sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/shell/left-sidebar.tsx"],"names":[],"mappings":"AAQA,wBAAgB,WAAW,4CA4B1B"}
|