@webship.co/workspace 0.0.0-stage → 1.0.0-beta1
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/PLUGINS.md +249 -0
- package/README.md +379 -2
- package/WORKSPACES.md +69 -0
- package/actions/ai-items.js +293 -0
- package/actions/audio.js +48 -0
- package/actions/build-order.js +79 -0
- package/actions/checks.js +95 -0
- package/actions/claude-session.js +104 -0
- package/actions/commands-center.js +258 -0
- package/actions/composer.js +267 -0
- package/actions/ddev-addons.js +90 -0
- package/actions/ddev-mail.js +80 -0
- package/actions/ddev.js +237 -0
- package/actions/folders.js +165 -0
- package/actions/images-svg.js +33 -0
- package/actions/images.js +145 -0
- package/actions/navigation.js +190 -0
- package/actions/node.js +222 -0
- package/actions/notes.js +55 -0
- package/actions/plugins.js +36 -0
- package/actions/project-make.js +28 -0
- package/actions/rag.js +202 -0
- package/actions/row-actions.js +262 -0
- package/actions/screens.js +270 -0
- package/actions/testing.js +121 -0
- package/actions/video-edit.js +54 -0
- package/ai-inventory.js +182 -0
- package/ai-items.js +202 -0
- package/assistant-cast.js +176 -0
- package/assistant-suggestions.js +91 -0
- package/assistant.js +484 -0
- package/audio-voice.js +528 -0
- package/auth-google.js +260 -0
- package/build-ai.js +52 -0
- package/build-order-page.js +191 -0
- package/build-order.js +313 -0
- package/builder-args.js +117 -0
- package/changelog.js +302 -0
- package/chat-threads.js +134 -0
- package/checks.js +105 -0
- package/claude-args.js +282 -0
- package/claude-sessions.js +129 -0
- package/command-author.js +117 -0
- package/command-block.js +20 -0
- package/commands/defaults.yml +159 -0
- package/commands-page.js +460 -0
- package/commands.js +568 -0
- package/cucumber.js +43 -0
- package/ddev-addons-page.js +124 -0
- package/ddev-addons.js +154 -0
- package/ddev-custom-commands.js +96 -0
- package/ddev-domains.js +84 -0
- package/ddev-import.js +93 -0
- package/ddev-mail-page.js +167 -0
- package/ddev-mail.js +110 -0
- package/ddev-options.js +145 -0
- package/ddev-snapshots.js +126 -0
- package/ddev.js +145 -0
- package/docs/DEVELOPER-GUIDE.md +224 -0
- package/docs/README.md +252 -0
- package/docs/REFERENCE.md +684 -0
- package/docs/USER-GUIDE.md +697 -0
- package/docs/screenshots/assistant/avatar-board.png +0 -0
- package/docs/screenshots/assistant/avatar-coffee.png +0 -0
- package/docs/screenshots/assistant/avatar-colours.png +0 -0
- package/docs/screenshots/assistant/avatar-icons.png +0 -0
- package/docs/screenshots/assistant/avatar-moves.png +0 -0
- package/docs/screenshots/assistant/avatar-pick-cookieman.png +0 -0
- package/docs/screenshots/assistant/avatar-settings-voices.png +0 -0
- package/docs/screenshots/assistant/avatar-status.png +0 -0
- package/docs/screenshots/create-card/create-card.png +0 -0
- package/docs/screenshots/create-card/start-ai.png +0 -0
- package/docs/screenshots/guide-clone-address.png +0 -0
- package/docs/screenshots/guide-clone-worktree-off.png +0 -0
- package/docs/screenshots/guide-clone-worktree-on.png +0 -0
- package/docs/screenshots/guide-ddev-menu.png +0 -0
- package/docs/screenshots/guide-domains.png +0 -0
- package/docs/screenshots/guide-home.png +0 -0
- package/docs/screenshots/guide-ide-menu.png +0 -0
- package/docs/screenshots/guide-remove-refusal.png +0 -0
- package/docs/screenshots/guide-rows-worktree.png +0 -0
- package/docs/screenshots/guide-screens.png +0 -0
- package/docs/screenshots/guide-settings.png +0 -0
- package/docs/screenshots/guide-workspace-page.png +0 -0
- package/docs/screenshots/home/card-settings.png +0 -0
- package/docs/screenshots/home/drag-reorder.png +0 -0
- package/docs/screenshots/home/edit-card.png +0 -0
- package/docs/screenshots/images/claude-code-image.png +0 -0
- package/docs/screenshots/images/edit-with-ai.png +0 -0
- package/docs/screenshots/images/gallery.png +0 -0
- package/docs/screenshots/images/generate-description.png +0 -0
- package/docs/screenshots/images/generate-plan.png +0 -0
- package/docs/screenshots/images/providers.png +0 -0
- package/docs/screenshots/images/svg-form.png +0 -0
- package/docs/screenshots/images/svg-result.png +0 -0
- package/docs/screenshots/images/upload.png +0 -0
- package/docs/screenshots/new-folder/2-form.png +0 -0
- package/docs/screenshots/new-folder/8-ddev-options.png +0 -0
- package/docs/screenshots/new-folder/files-folder.png +0 -0
- package/docs/screenshots/projects/ddev-custom-commands.png +0 -0
- package/docs/screenshots/projects/state-chip-stop.png +0 -0
- package/docs/screenshots/readme/dashboard-dark.png +0 -0
- package/docs/screenshots/readme/dashboard-light.png +0 -0
- package/docs/screenshots/readme/dev-dark.png +0 -0
- package/docs/screenshots/readme/dev-light.png +0 -0
- package/docs/screenshots/readme/docs-dark.png +0 -0
- package/docs/screenshots/readme/docs-light.png +0 -0
- package/docs/screenshots/readme/icons/ai.svg +4 -0
- package/docs/screenshots/readme/icons/code.svg +4 -0
- package/docs/screenshots/readme/icons/docs.svg +4 -0
- package/docs/screenshots/readme/icons/services.svg +4 -0
- package/docs/screenshots/readme/icons/sites.svg +4 -0
- package/docs/screenshots/readme/test-report-dark.png +0 -0
- package/docs/screenshots/readme/test-report-light.png +0 -0
- package/docs/screenshots/readme/test-scenarios.png +0 -0
- package/docs/screenshots/readme/test-steps.png +0 -0
- package/docs/screenshots/readme/videos-dark.png +0 -0
- package/docs/screenshots/readme/videos-light.png +0 -0
- package/docs/screenshots/screens-menu.png +0 -0
- package/docs/screenshots/screens-new.png +0 -0
- package/docs/screenshots/settings/auth-google-lists.png +0 -0
- package/docs/screenshots/settings/delete-1-row.png +0 -0
- package/docs/screenshots/settings/delete-2-confirm.png +0 -0
- package/docs/screenshots/settings/delete-3-type-name.png +0 -0
- package/docs/screenshots/settings/delete-4-type-yes.png +0 -0
- package/event-log.js +59 -0
- package/files-browser.js +247 -0
- package/folders.js +121 -0
- package/format.js +73 -0
- package/git-info.js +81 -0
- package/github-auth.js +62 -0
- package/html.js +10 -0
- package/icons.js +83 -0
- package/images-ai.js +447 -0
- package/images-create.js +226 -0
- package/images-page.js +417 -0
- package/images-records.js +39 -0
- package/images-render.js +36 -0
- package/images-svg-core.js +214 -0
- package/images-svg-sanitize.js +188 -0
- package/images-svg.js +241 -0
- package/images.js +270 -0
- package/jobs.js +430 -0
- package/linger.js +21 -0
- package/lists.js +292 -0
- package/media-info.js +136 -0
- package/navigation-page.js +264 -0
- package/navigation.js +394 -0
- package/notes.js +0 -0
- package/package.json +47 -4
- package/palette-index.js +46 -0
- package/playwright.config.js +23 -0
- package/plugin-install.js +239 -0
- package/plugin-loader.js +466 -0
- package/plugin-manifest.js +83 -0
- package/plugin-settings.js +44 -0
- package/plugins/workspace-notes/index.js +59 -0
- package/plugins-page.js +103 -0
- package/project-make.js +241 -0
- package/project-name.js +210 -0
- package/public/assistant-avatar-moves.js +646 -0
- package/public/assistant-avatar-ui.js +1223 -0
- package/public/assistant-avatar.js +530 -0
- package/public/avatar/druplicon.vrm +0 -0
- package/public/css/base.css +260 -0
- package/public/css/components/ai-assistant.css +263 -0
- package/public/css/components/assistant-avatar.css +279 -0
- package/public/css/components/assistant-views.css +198 -0
- package/public/css/components/build-order.css +74 -0
- package/public/css/components/clone-as-a-git-worktree.css +30 -0
- package/public/css/components/command-palette.css +61 -0
- package/public/css/components/commands-center.css +139 -0
- package/public/css/components/confirm-dialog.css +40 -0
- package/public/css/components/create-card.css +8 -0
- package/public/css/components/ddev-menu.css +23 -0
- package/public/css/components/deep-chat.css +17 -0
- package/public/css/components/density.css +11 -0
- package/public/css/components/floating-assistant-workspace-pages.css +55 -0
- package/public/css/components/folders.css +5 -0
- package/public/css/components/full-height-left-assistant-sidebar-all-pages.css +39 -0
- package/public/css/components/full-height-right-actions-rail-pages-that-have-actions.css +267 -0
- package/public/css/components/grid-and-list.css +203 -0
- package/public/css/components/help-page.css +36 -0
- package/public/css/components/hero.css +16 -0
- package/public/css/components/images.css +70 -0
- package/public/css/components/layout-rhythm-and-spacing-polish.css +139 -0
- package/public/css/components/mic-on-any-field-that-wants-typing.css +416 -0
- package/public/css/components/modal-fit.css +113 -0
- package/public/css/components/page-width.css +23 -0
- package/public/css/components/plugins-page.css +9 -0
- package/public/css/components/project-cards.css +256 -0
- package/public/css/components/project-rows.css +390 -0
- package/public/css/components/reordering-the-workspace-cards.css +85 -0
- package/public/css/components/responsive-home-and-the-workspace-pages.css +457 -0
- package/public/css/components/running-commands-as-toasts.css +327 -0
- package/public/css/components/settings-editor-core-config-yml.css +828 -0
- package/public/css/components/short-results-as-a-toast-at-the-top.css +203 -0
- package/public/css/components/sound-player.css +84 -0
- package/public/css/components/suggest-agents-skills-commands.css +112 -0
- package/public/css/components/tab-modal.css +142 -0
- package/public/css/components/terminals.css +244 -0
- package/public/css/components/test-report-media-one-file-per-row-paged.css +144 -0
- package/public/css/components/top-toolbar-logo-breadcrumb.css +107 -0
- package/public/css/components/video-edit.css +6 -0
- package/public/css/components/web-ide-open-with.css +23 -0
- package/public/css/components/working-indicators.css +158 -0
- package/public/css/components/workspace-cards.css +79 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.png +0 -0
- package/public/htmx.min.js +1 -0
- package/public/logo.png +0 -0
- package/public/media-player.js +215 -0
- package/public/mic.js +255 -0
- package/public/narration.js +110 -0
- package/public/palette.js +278 -0
- package/public/sortable.js +251 -0
- package/public/suggest.js +337 -0
- package/public/terminal.js +903 -0
- package/public/themes/default/theme.css +267 -0
- package/public/themes/ember/theme.css +180 -0
- package/public/themes/press/theme.css +290 -0
- package/public/themes/slate/theme.css +182 -0
- package/public/touch-icon.png +0 -0
- package/public/ui.js +2721 -0
- package/public/vendor/ace/LICENSE.txt +24 -0
- package/public/vendor/ace/ace.js +23 -0
- package/public/vendor/ace/ext-language_tools.js +8 -0
- package/public/vendor/ace/ext-searchbox.js +8 -0
- package/public/vendor/ace/mode-css.js +8 -0
- package/public/vendor/ace/mode-html.js +8 -0
- package/public/vendor/ace/mode-javascript.js +8 -0
- package/public/vendor/ace/mode-markdown.js +8 -0
- package/public/vendor/ace/mode-sh.js +8 -0
- package/public/vendor/ace/mode-yaml.js +8 -0
- package/public/vendor/ace/theme-textmate.js +8 -0
- package/public/vendor/ace/theme-tomorrow_night.js +8 -0
- package/public/vendor/ace/worker-yaml.js +1 -0
- package/public/vendor/deep-chat.LICENSE +21 -0
- package/public/vendor/deep-chat.bundle.js +1 -0
- package/public/vendor/fonts/dm-serif-text-LICENSE.txt +93 -0
- package/public/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
- package/public/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
- package/public/vendor/fonts/figtree-LICENSE.txt +93 -0
- package/public/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
- package/public/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
- package/public/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
- package/public/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
- package/public/vendor/fonts/jetbrains-mono-LICENSE.txt +93 -0
- package/public/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
- package/public/vendor/fonts/ubuntu-mono-LICENSE.txt +98 -0
- package/public/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
- package/public/vendor/tabler-LICENSE.txt +21 -0
- package/public/vendor/tabler-sprite.svg +1 -0
- package/public/vendor/three/LICENSE +21 -0
- package/public/vendor/three/addons/loaders/GLTFLoader.js +4860 -0
- package/public/vendor/three/addons/utils/BufferGeometryUtils.js +1501 -0
- package/public/vendor/three/addons/utils/SkeletonUtils.js +496 -0
- package/public/vendor/three/three.core.min.js +6 -0
- package/public/vendor/three/three.module.min.js +6 -0
- package/public/vendor/three-vrm/LICENSE +22 -0
- package/public/vendor/three-vrm/three-vrm.module.min.js +983 -0
- package/public/vendor/uikit-icons.min.js +1 -0
- package/public/vendor/uikit.min.css +1 -0
- package/public/vendor/uikit.min.js +1 -0
- package/public/vendor/webship-icons/ui/bookmark-outlined.svg +1 -0
- package/public/vendor/webship-icons/ui/headset.svg +1 -0
- package/public/vendor/webship-icons/ui/menu.svg +1 -0
- package/public/vendor/webship-icons/ui/pause.svg +1 -0
- package/public/vendor/webship-icons/ui/play.svg +1 -0
- package/public/vendor/webship-icons/ui/share.svg +1 -0
- package/public/vendor/webship-icons/ui/sound-off.svg +1 -0
- package/public/vendor/webship-icons/ui/sound-on.svg +1 -0
- package/public/vendor/webship-icons/ui/stop.svg +1 -0
- package/public/vendor/xterm/addon-fit.js +2 -0
- package/public/vendor/xterm/addon-unicode11.js +2 -0
- package/public/vendor/xterm/addon-web-links.js +2 -0
- package/public/vendor/xterm/xterm.css +218 -0
- package/public/vendor/xterm/xterm.js +2 -0
- package/rag.js +169 -0
- package/reader.js +132 -0
- package/repo-blobs.js +66 -0
- package/report-pdf.js +337 -0
- package/row-layout.js +1439 -0
- package/screenrc +37 -0
- package/screens.js +1063 -0
- package/scripts/code-server-start.sh +190 -0
- package/scripts/images-claude-finish.js +107 -0
- package/scripts/screen-host.sh +114 -0
- package/scripts/screen-runner.js +362 -0
- package/scripts/screen-then.js +47 -0
- package/scripts/update.sh +350 -0
- package/server.js +7923 -0
- package/settings-file.js +423 -0
- package/speech.js +297 -0
- package/tab-modal.js +75 -0
- package/test-reports.js +260 -0
- package/themes.js +381 -0
- package/transcripts.js +168 -0
- package/urls.js +13 -0
- package/validate.js +18 -0
- package/version-check.js +94 -0
- package/video-edit.js +588 -0
- package/waiting.js +85 -0
- package/workspace-card-tools.js +41 -0
- package/workspace-delete.js +139 -0
- package/workspace-types.js +85 -0
- package/workspaces.js +553 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/* ---------- Running commands, as toasts ---------- */
|
|
2
|
+
|
|
3
|
+
/* Bottom-right: the assistant owns the left rail and the actions rail owns the right edge, and
|
|
4
|
+
a job must not push page content around while it runs. */
|
|
5
|
+
.job-toasts {
|
|
6
|
+
position: fixed;
|
|
7
|
+
/* Starts where the AI Assistant ends (its rail is 25rem) and runs to the right edge, so the
|
|
8
|
+
stack sits under the content it belongs to instead of covering the last rows of the list. */
|
|
9
|
+
left: calc(25rem + 1rem);
|
|
10
|
+
right: 1rem;
|
|
11
|
+
bottom: 1rem;
|
|
12
|
+
z-index: 1010; /* over the rails, under the one modal (UIKit uses 1010+) */
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
align-items: flex-end; /* a resized toast grows leftwards, away from the edge */
|
|
16
|
+
gap: 0.5rem;
|
|
17
|
+
max-height: calc(100vh - 6rem);
|
|
18
|
+
overflow-y: auto;
|
|
19
|
+
pointer-events: none; /* the gaps must not swallow clicks on the page beneath */
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* The actions rail owns the right edge when a page has one. */
|
|
23
|
+
.app-content.has-actions ~ .job-toasts,
|
|
24
|
+
body:has(.app-content.has-actions) .job-toasts { right: 16.5rem; }
|
|
25
|
+
|
|
26
|
+
.job-toasts > * { pointer-events: auto; }
|
|
27
|
+
|
|
28
|
+
.job-toast {
|
|
29
|
+
margin: 0 !important;
|
|
30
|
+
background: var(--surface-card); /* opaque: it floats over the page, not into it */
|
|
31
|
+
border-radius: 0.5rem;
|
|
32
|
+
box-shadow: var(--shadow-toast);
|
|
33
|
+
border-left: 3px solid var(--brand-primary);
|
|
34
|
+
/* Resizable while it runs, both ways from the one handle: the stack is bottom-anchored and
|
|
35
|
+
right-aligned, so width grows leftwards and height grows upwards — into the space rather than
|
|
36
|
+
off the screen. */
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
resize: none; /* the eight grips replace the single native handle */
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
width: min(40rem, 100%);
|
|
42
|
+
min-width: 16rem;
|
|
43
|
+
max-width: 100%;
|
|
44
|
+
min-height: 5rem;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.job-toast.is-done { border-left-color: var(--ok); }
|
|
48
|
+
.job-toast.is-failed { border-left-color: var(--danger); }
|
|
49
|
+
|
|
50
|
+
.job-toast-head {
|
|
51
|
+
display: flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
gap: 0.5rem;
|
|
54
|
+
margin-bottom: 0.375rem;
|
|
55
|
+
/* Clear of the top corner grips on both sides: a grip a button sits on top of is a grip that
|
|
56
|
+
cannot be grabbed, and Dismiss was exactly where the top-right one goes. The head itself
|
|
57
|
+
takes no stacking context — that put it OVER the three top grips and killed all three. */
|
|
58
|
+
padding: 0 0.625rem;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.job-toast-title {
|
|
62
|
+
flex: 1;
|
|
63
|
+
min-width: 0;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
text-overflow: ellipsis;
|
|
66
|
+
white-space: nowrap;
|
|
67
|
+
font-size: 0.82rem;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.job-toast-status { font-size: 0.74rem; white-space: nowrap; opacity: .85; }
|
|
71
|
+
|
|
72
|
+
.job-toast-btn {
|
|
73
|
+
background: none;
|
|
74
|
+
border: 0;
|
|
75
|
+
padding: 0.125rem 0.25rem;
|
|
76
|
+
cursor: pointer;
|
|
77
|
+
color: inherit;
|
|
78
|
+
opacity: .7;
|
|
79
|
+
line-height: 1;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.job-toast-btn:hover { opacity: 1; }
|
|
83
|
+
|
|
84
|
+
/* Collapsed keeps the title and status — the point is to stop watching the output, not to lose
|
|
85
|
+
track of the job. */
|
|
86
|
+
.job-toast.is-collapsed .terminal-pre { display: none; }
|
|
87
|
+
.job-toast.is-collapsed .job-toast-collapse span[uk-icon] { transform: rotate(180deg); }
|
|
88
|
+
|
|
89
|
+
.job-toast .terminal-pre {
|
|
90
|
+
flex: 1 1 auto;
|
|
91
|
+
min-height: 0; /* a flex child must be allowed to shrink below its content */
|
|
92
|
+
max-height: 60vh;
|
|
93
|
+
overflow: auto;
|
|
94
|
+
margin: 0;
|
|
95
|
+
font-size: 0.72rem;
|
|
96
|
+
border-radius: 0.375rem;
|
|
97
|
+
resize: none; /* the card's own handle covers both dimensions */
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* The eight grips ui.js adds — four corners over four edges. CSS `resize` gives only the
|
|
101
|
+
bottom-right one, which is why the native handle is off and these are drawn instead. */
|
|
102
|
+
.job-toast { position: relative; }
|
|
103
|
+
/* Above the head's text, below its buttons. */
|
|
104
|
+
.toast-grip {
|
|
105
|
+
position: absolute;
|
|
106
|
+
z-index: 2;
|
|
107
|
+
touch-action: none; /* a pointerdown here must not scroll the stack */
|
|
108
|
+
}
|
|
109
|
+
/* Edges first, corners after: the corners must win where they overlap. */
|
|
110
|
+
.toast-grip-t, .toast-grip-b { left: 0.875rem; right: 0.875rem; height: 0.4375rem; cursor: ns-resize; }
|
|
111
|
+
.toast-grip-l, .toast-grip-r { top: 0.875rem; bottom: 0.875rem; width: 0.4375rem; cursor: ew-resize; }
|
|
112
|
+
.toast-grip-t { top: 0; }
|
|
113
|
+
.toast-grip-b { bottom: 0; }
|
|
114
|
+
.toast-grip-l { left: 0; }
|
|
115
|
+
.toast-grip-r { right: 0; }
|
|
116
|
+
.toast-grip-tl, .toast-grip-tr, .toast-grip-bl, .toast-grip-br { width: 0.875rem; height: 0.875rem; }
|
|
117
|
+
.toast-grip-tl { top: 0; left: 0; cursor: nwse-resize; }
|
|
118
|
+
.toast-grip-tr { top: 0; right: 0; cursor: nesw-resize; }
|
|
119
|
+
.toast-grip-bl { bottom: 0; left: 0; cursor: nesw-resize; }
|
|
120
|
+
.toast-grip-br { bottom: 0; right: 0; cursor: nwse-resize; }
|
|
121
|
+
|
|
122
|
+
/* Corner marks only, and only while hovered: eight permanent marks per toast would be noise. */
|
|
123
|
+
.job-toast:hover .toast-grip-tl::before,
|
|
124
|
+
.job-toast:hover .toast-grip-tr::before,
|
|
125
|
+
.job-toast:hover .toast-grip-bl::before,
|
|
126
|
+
.job-toast:hover .toast-grip-br::before {
|
|
127
|
+
content: "";
|
|
128
|
+
position: absolute;
|
|
129
|
+
inset: 0.1875rem;
|
|
130
|
+
border-color: var(--brand-primary);
|
|
131
|
+
opacity: 0.55;
|
|
132
|
+
}
|
|
133
|
+
.job-toast:hover .toast-grip-tl::before { border-top: 2px solid; border-left: 2px solid; }
|
|
134
|
+
.job-toast:hover .toast-grip-tr::before { border-top: 2px solid; border-right: 2px solid; }
|
|
135
|
+
.job-toast:hover .toast-grip-bl::before { border-bottom: 2px solid; border-left: 2px solid; }
|
|
136
|
+
.job-toast:hover .toast-grip-br::before { border-bottom: 2px solid; border-right: 2px solid; }
|
|
137
|
+
|
|
138
|
+
/* While dragging, nothing else should take the pointer or select text. */
|
|
139
|
+
body.toast-resizing { user-select: none; }
|
|
140
|
+
body.toast-resizing .job-toast { pointer-events: none; }
|
|
141
|
+
body.toast-resizing .toast-grip { pointer-events: auto; }
|
|
142
|
+
|
|
143
|
+
/* A finished job shrinks to its output instead of holding a tall empty box open. */
|
|
144
|
+
.job-toast.is-done,
|
|
145
|
+
.job-toast.is-failed { height: auto; }
|
|
146
|
+
.job-toast.is-running:not([style*="height"]) { height: 18rem; }
|
|
147
|
+
|
|
148
|
+
.job-toast-status { font-family: var(--font-code); }
|
|
149
|
+
.job-toast.is-done .job-toast-status { color: var(--ok); }
|
|
150
|
+
.job-toast.is-failed .job-toast-status { color: var(--danger); }
|
|
151
|
+
|
|
152
|
+
/* Below the assistant's stacking break there is no rail to clear. */
|
|
153
|
+
@media (max-width: 61.9375em) {
|
|
154
|
+
.job-toasts { left: 1rem; right: 1rem; }
|
|
155
|
+
body:has(.app-content.has-actions) .job-toasts { right: 1rem; }
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@media (max-width: 47.9375em) {
|
|
159
|
+
.job-toasts { right: 0.5rem; left: 0.5rem; bottom: 0.5rem; }
|
|
160
|
+
/* No room to drag on a phone, and grips over a small box are just clutter. */
|
|
161
|
+
.job-toast { width: 100%; }
|
|
162
|
+
.toast-grip { display: none; }
|
|
163
|
+
.job-toast.is-running { height: 12rem; }
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* An agent, skill or prompt row: name and labels on the first line, what it is for underneath.
|
|
167
|
+
Clamped to three lines with the full text on hover — these descriptions run to a paragraph
|
|
168
|
+
(one agent's is 700 characters) and a list of 69 has to stay scannable. */
|
|
169
|
+
.item-row-body { display: flex; flex-direction: column; gap: 0.25rem; }
|
|
170
|
+
|
|
171
|
+
.item-row-body > .uk-text-bold { display: block; }
|
|
172
|
+
|
|
173
|
+
.item-description {
|
|
174
|
+
margin: 0;
|
|
175
|
+
font-size: 0.78rem;
|
|
176
|
+
line-height: 1.4;
|
|
177
|
+
color: var(--text-subtle);
|
|
178
|
+
display: -webkit-box;
|
|
179
|
+
-webkit-line-clamp: 3;
|
|
180
|
+
-webkit-box-orient: vertical;
|
|
181
|
+
overflow: hidden;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.item-declared {
|
|
185
|
+
font-family: var(--font-code);
|
|
186
|
+
font-size: 0.7rem;
|
|
187
|
+
padding: 0.0625rem 0.3125rem;
|
|
188
|
+
border-radius: 0.25rem;
|
|
189
|
+
background: var(--subtle-accent);
|
|
190
|
+
color: var(--brand-secondary);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* The actions sat on the same flex line as the name; with a description below, they belong on
|
|
194
|
+
their own row like the project rows. */
|
|
195
|
+
.item-row-body .project-actions {
|
|
196
|
+
padding-top: 0.5rem;
|
|
197
|
+
border-top: 1px solid var(--line);
|
|
198
|
+
margin-top: 0.125rem;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* Sized to sit inline with the small buttons beside it, not as wide as the search box above. */
|
|
202
|
+
.install-target { display: inline-flex; gap: 0.35rem; }
|
|
203
|
+
.install-target select, .install-target input { width: auto; max-width: 11rem; }
|
|
204
|
+
|
|
205
|
+
/* A markdown file in agents/, skills/ or prompts/ with no frontmatter name: Claude Code cannot
|
|
206
|
+
dispatch it, so it is a reference document, not an item. Said, not hidden — it is still the
|
|
207
|
+
user's file to read and edit. */
|
|
208
|
+
.item-doc { background: transparent; border: 1px dashed var(--line); color: var(--text-subtle); }
|
|
209
|
+
|
|
210
|
+
/* The search row: the field takes the slack, its buttons sit beside it, and the auto toggle
|
|
211
|
+
reads as a preference rather than another filter. */
|
|
212
|
+
.list-controls .uk-button-small { flex: 0 0 auto; }
|
|
213
|
+
|
|
214
|
+
.list-auto {
|
|
215
|
+
display: inline-flex;
|
|
216
|
+
align-items: center;
|
|
217
|
+
gap: 0.375rem;
|
|
218
|
+
white-space: nowrap;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.list-reset { opacity: .85; }
|
|
222
|
+
.list-reset:hover { opacity: 1; }
|
|
223
|
+
|
|
224
|
+
/* A job running inline — inside the modal it was launched from — sits in normal
|
|
225
|
+
flow at full width; the corner-stack sizing does not apply to it. */
|
|
226
|
+
.job-toast.job-inline {
|
|
227
|
+
position: relative;
|
|
228
|
+
width: 100%;
|
|
229
|
+
max-width: 100%;
|
|
230
|
+
margin-top: 1rem;
|
|
231
|
+
/* The modal is the chrome; the job inside it is content, not a second window. */
|
|
232
|
+
border: 0;
|
|
233
|
+
box-shadow: none;
|
|
234
|
+
padding: 0;
|
|
235
|
+
background: transparent;
|
|
236
|
+
}
|
|
237
|
+
.job-toast.job-inline .job-toast-head {
|
|
238
|
+
background: transparent;
|
|
239
|
+
border: 0;
|
|
240
|
+
padding: 0 0 .4rem 0;
|
|
241
|
+
}
|
|
242
|
+
.job-toast.job-inline .terminal-pre {
|
|
243
|
+
min-height: 20rem;
|
|
244
|
+
max-height: 55vh;
|
|
245
|
+
border-radius: .5rem;
|
|
246
|
+
}
|
|
247
|
+
.job-progress { display: flex; align-items: center; gap: .75rem; margin: .5rem 0; }
|
|
248
|
+
.job-progress .uk-progress { margin: 0; flex: 1; }
|
|
249
|
+
.job-progress .uk-text-meta { white-space: nowrap; }
|
|
250
|
+
.job-done-note { margin: .5rem 0 0; font-weight: 600; }
|
|
251
|
+
|
|
252
|
+
/* The Resume control in the New screen form: a checkbox that turns the list of sessions on, because
|
|
253
|
+
starting fresh is the default and resuming is the exception. */
|
|
254
|
+
.claude-resume { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
|
|
255
|
+
.claude-resume-on { display: inline-flex; align-items: center; gap: 0.35rem; white-space: nowrap; }
|
|
256
|
+
.claude-resume select { flex: 1; min-width: 16rem; }
|
|
257
|
+
.claude-resume select[disabled] { opacity: .55; }
|
|
258
|
+
|
|
259
|
+
/* The New screen form, as steps rather than as one row of controls. Each fieldset is a question:
|
|
260
|
+
where it runs, what it starts, its arguments, and the prompt — in the order they are answered. */
|
|
261
|
+
.new-screen-card .screen-step {
|
|
262
|
+
border: 1px solid var(--line);
|
|
263
|
+
border-radius: 12px;
|
|
264
|
+
padding: 0.75rem 0.9rem 0.9rem;
|
|
265
|
+
margin: 0 0 0.75rem;
|
|
266
|
+
}
|
|
267
|
+
.new-screen-card .screen-step > legend {
|
|
268
|
+
font-size: 0.6875rem;
|
|
269
|
+
text-transform: uppercase;
|
|
270
|
+
letter-spacing: 1px;
|
|
271
|
+
font-weight: 600;
|
|
272
|
+
color: var(--text-subtle);
|
|
273
|
+
padding: 0 0.4rem;
|
|
274
|
+
}
|
|
275
|
+
.new-screen-card .uk-form-label { font-size: 0.75rem; display: block; margin-bottom: 0.2rem; }
|
|
276
|
+
.screen-where-path { margin-top: 0.25rem; }
|
|
277
|
+
|
|
278
|
+
/* What it starts: three named choices with a line each, rather than three words in a dropdown. */
|
|
279
|
+
.screen-kinds { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5rem; }
|
|
280
|
+
@media (max-width: 40em) { .screen-kinds { grid-template-columns: 1fr; } }
|
|
281
|
+
.screen-kind {
|
|
282
|
+
display: grid;
|
|
283
|
+
grid-template-columns: auto 1fr;
|
|
284
|
+
grid-template-areas: "radio name" "radio help";
|
|
285
|
+
gap: 0 0.5rem;
|
|
286
|
+
align-items: center;
|
|
287
|
+
border: 1px solid var(--line);
|
|
288
|
+
border-radius: 10px;
|
|
289
|
+
padding: 0.5rem 0.6rem;
|
|
290
|
+
cursor: pointer;
|
|
291
|
+
}
|
|
292
|
+
.screen-kind input { grid-area: radio; }
|
|
293
|
+
.screen-kind strong { grid-area: name; font-size: 0.8125rem; }
|
|
294
|
+
.screen-kind .uk-text-meta { grid-area: help; font-size: 0.6875rem; line-height: 1.3; }
|
|
295
|
+
.screen-kind.is-on { border-color: var(--brand-primary); background: var(--subtle-brand); }
|
|
296
|
+
|
|
297
|
+
.screen-name-row { display: grid; grid-template-columns: 1fr; gap: 0.15rem; }
|
|
298
|
+
|
|
299
|
+
/* The Claude Code arguments, read from the CLI's own --help. The four reached for every time are laid
|
|
300
|
+
out first; the rest are behind the disclosure, so the form opens as a few controls, not as forty. */
|
|
301
|
+
.claude-args-common,
|
|
302
|
+
.claude-args-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem 0.75rem; }
|
|
303
|
+
@media (max-width: 47.9375em) { .claude-args-common, .claude-args-grid { grid-template-columns: 1fr; } }
|
|
304
|
+
.claude-args-common { margin-top: 0.5rem; }
|
|
305
|
+
.claude-arg { display: grid; grid-template-columns: 1fr; gap: 0.15rem; min-width: 0; }
|
|
306
|
+
.claude-arg-name code, .claude-arg-flag code { font-size: 0.75rem; color: var(--link); }
|
|
307
|
+
.claude-arg-help {
|
|
308
|
+
font-size: 0.6875rem;
|
|
309
|
+
line-height: 1.35;
|
|
310
|
+
color: var(--text-subtle);
|
|
311
|
+
display: -webkit-box;
|
|
312
|
+
-webkit-line-clamp: 2;
|
|
313
|
+
-webkit-box-orient: vertical;
|
|
314
|
+
overflow: hidden;
|
|
315
|
+
}
|
|
316
|
+
.claude-arg-flag {
|
|
317
|
+
grid-template-columns: auto 1fr;
|
|
318
|
+
grid-template-areas: "box name" "box help";
|
|
319
|
+
gap: 0 0.4rem;
|
|
320
|
+
align-items: center;
|
|
321
|
+
cursor: pointer;
|
|
322
|
+
}
|
|
323
|
+
.claude-arg-flag input { grid-area: box; }
|
|
324
|
+
.claude-arg-flag code { grid-area: name; }
|
|
325
|
+
.claude-arg-flag .claude-arg-help { grid-area: help; }
|
|
326
|
+
.claude-args-all { margin-top: 0.75rem; }
|
|
327
|
+
.claude-args-all > summary { cursor: pointer; font-size: 0.8125rem; font-weight: 600; }
|