zidane-ui 9.1.13 → 9.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/index.d.ts +2 -2
- package/dist/adapters/index.js +2 -2
- package/dist/adapters/live.d.ts +29 -3
- package/dist/adapters/live.js +9 -1
- package/dist/adapters/server-composer-host.js +17 -2
- package/dist/adapters/server-extensions-host.d.ts +0 -1
- package/dist/adapters/server-extensions-host.js +5 -16
- package/dist/adapters/server-git-host.js +7 -16
- package/dist/adapters/server-host.js +181 -43
- package/dist/adapters/server-machines-host.d.ts +2 -0
- package/dist/adapters/server-machines-host.js +24 -25
- package/dist/adapters/server-onboarding-host.d.ts +1 -1
- package/dist/adapters/server-onboarding-host.js +3 -4
- package/dist/adapters/server-session-host.js +22 -3
- package/dist/adapters/server-settings-accounts.js +2 -2
- package/dist/adapters/server-settings-host.js +3 -3
- package/dist/adapters/server-settings-performance.js +7 -9
- package/dist/adapters/server-settings-sections.js +13 -14
- package/dist/adapters/server-sidebar-host.js +2 -2
- package/dist/adapters/sse-host.js +68 -3
- package/dist/adapters/sse-protocol.d.ts +12 -2
- package/dist/adapters/sse-protocol.js +4 -2
- package/dist/app/AppHostProvider.js +4 -3
- package/dist/app/ModalProvider.d.ts +13 -3
- package/dist/app/ModalProvider.js +103 -24
- package/dist/app/NoticeStack.d.ts +33 -0
- package/dist/app/NoticeStack.js +90 -0
- package/dist/app/index.d.ts +3 -2
- package/dist/app/index.js +3 -2
- package/dist/appearance/AppearanceProvider.js +2 -2
- package/dist/appearance/headless/index.js +1 -1
- package/dist/approvals/headless/index.js +2 -2
- package/dist/chat/SessionFilterMenu.d.ts +1 -1
- package/dist/chat/SessionFilterMenu.js +2 -1
- package/dist/chat/Transcript.js +1 -1
- package/dist/chat/composer/Composer.js +9 -6
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/ConversationBadges.js +1 -1
- package/dist/chat/composer/ModelChainList.js +17 -8
- package/dist/chat/composer/ModelChainTooltip.js +5 -2
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/composer/use-draft-target.d.ts +20 -1
- package/dist/chat/composer/use-draft-target.js +122 -6
- package/dist/chat/composer/use-new-session-defaults.d.ts +5 -1
- package/dist/chat/composer/use-new-session-defaults.js +17 -4
- package/dist/chat/composer/use-run-meter.js +1 -1
- package/dist/chat/composer/use-send-prompt.js +1 -1
- package/dist/chat/headless/chip-labels.d.ts +1 -0
- package/dist/chat/headless/chip-labels.js +1 -0
- package/dist/chat/headless/composer/index.js +2 -2
- package/dist/chat/headless/draft-target.d.ts +21 -1
- package/dist/chat/headless/fixture-host.js +17 -2
- package/dist/chat/headless/host.d.ts +3 -3
- package/dist/chat/headless/index.d.ts +9 -9
- package/dist/chat/headless/index.js +15 -15
- package/dist/chat/headless/labels.d.ts +13 -4
- package/dist/chat/headless/labels.js +8 -5
- package/dist/chat/headless/session-list.d.ts +20 -6
- package/dist/chat/headless/session-list.js +1 -0
- package/dist/chat/headless/sidebar/directory.d.ts +56 -14
- package/dist/chat/headless/sidebar/directory.js +149 -70
- package/dist/chat/headless/sidebar/index.d.ts +3 -3
- package/dist/chat/headless/sidebar/index.js +3 -3
- package/dist/chat/headless/sidebar/labels.d.ts +15 -6
- package/dist/chat/headless/sidebar/types.d.ts +3 -1
- package/dist/chat/headless/sidebar/view.d.ts +13 -5
- package/dist/chat/headless/sidebar/view.js +31 -11
- package/dist/chat/headless/streams/actions.d.ts +5 -3
- package/dist/chat/headless/streams/actions.js +3 -2
- package/dist/chat/headless/streams/index.d.ts +3 -3
- package/dist/chat/headless/streams/merge.d.ts +6 -10
- package/dist/chat/headless/streams/merge.js +7 -21
- package/dist/chat/headless/streams/session-streams.d.ts +29 -4
- package/dist/chat/headless/streams/session-streams.js +86 -0
- package/dist/chat/headless/streams/store.d.ts +162 -16
- package/dist/chat/headless/streams/store.js +334 -38
- package/dist/chat/headless/streams/types.d.ts +10 -7
- package/dist/chat/headless/transcript-labels.d.ts +1 -0
- package/dist/chat/interactions/PlanCard.js +10 -3
- package/dist/chat/interactions/QuestionForm.js +7 -3
- package/dist/chat/interactions/card-ui.d.ts +5 -3
- package/dist/chat/interactions/card-ui.js +9 -7
- package/dist/chat/sidebar/SessionSidebar.js +5 -5
- package/dist/chat/sidebar/SidebarFilterMenu.js +3 -1
- package/dist/chat/sidebar/SidebarFrame.d.ts +4 -0
- package/dist/chat/sidebar/SidebarFrame.js +27 -9
- package/dist/chat/sidebar/SidebarGroupHeader.js +1 -1
- package/dist/chat/sidebar/SidebarHostProvider.d.ts +8 -5
- package/dist/chat/sidebar/SidebarHostProvider.js +13 -9
- package/dist/chat/sidebar/SidebarToggleButton.js +7 -3
- package/dist/chat/sidebar/index.d.ts +2 -2
- package/dist/chat/sidebar/session-menu.js +4 -4
- package/dist/chat/sidebar/useSaveViewAsSpace.js +2 -2
- package/dist/chat/testing/contract.js +2 -2
- package/dist/chat/transcript/AuthFailureCard.js +11 -8
- package/dist/chat/transcript/BadgeMenu.js +13 -2
- package/dist/chat/transcript/MermaidDiagram.js +7 -3
- package/dist/chat/transcript/fold.d.ts +4 -0
- package/dist/chat/transcript/fold.js +53 -22
- package/dist/chat/transcript/script-input.d.ts +1 -1
- package/dist/chat/transcript/shell-block.js +8 -4
- package/dist/chat/transcript/useStickToBottom.js +12 -0
- package/dist/components/BrowserSignIn.js +23 -21
- package/dist/components/Form.d.ts +6 -4
- package/dist/components/Form.js +16 -8
- package/dist/components/LoadError.d.ts +4 -2
- package/dist/components/LoadError.js +13 -9
- package/dist/components/Notice.d.ts +29 -0
- package/dist/components/Notice.js +63 -0
- package/dist/components/PanelEmpty.d.ts +1 -1
- package/dist/components/PanelEmpty.js +4 -2
- package/dist/components/Restricted.d.ts +1 -1
- package/dist/components/palette/PaletteList.js +8 -1
- package/dist/components/palette/PalettePanel.js +14 -6
- package/dist/core.css +24 -5
- package/dist/dist/{index-Bq87OcGy.d.ts → index-C6rzc-tt.d.ts} +28 -3
- package/dist/dist/index.d.ts +2 -2
- package/dist/dist/{timeout-B5pO5I5a.d.ts → timeout-Cz9dRF8Q.d.ts} +1 -1
- package/dist/extensions/ExtensionSettingsPage.js +2 -5
- package/dist/extensions/ExtensionSettingsSection.js +5 -4
- package/dist/extensions/ExtensionSettingsSidebar.js +3 -7
- package/dist/extensions/SettingsWireForm.d.ts +1 -7
- package/dist/extensions/SettingsWireForm.js +7 -5
- package/dist/extensions/headless/fixture-host.d.ts +1 -5
- package/dist/extensions/headless/fixture-host.js +2 -5
- package/dist/extensions/headless/host.d.ts +1 -11
- package/dist/extensions/headless/index.d.ts +3 -3
- package/dist/extensions/headless/index.js +6 -6
- package/dist/extensions/headless/select.d.ts +1 -11
- package/dist/extensions/headless/select.js +1 -18
- package/dist/extensions/hooks.js +1 -1
- package/dist/files/EditorColumn.js +13 -2
- package/dist/files/MediaDiff.js +1 -1
- package/dist/files/TreeColumn.js +13 -20
- package/dist/files/useEntryActions.js +1 -1
- package/dist/files/useOpenFiles.js +3 -1
- package/dist/git/BranchMenu.js +6 -4
- package/dist/git/ImportRepoDialog.js +18 -9
- package/dist/git/MoveSessionDialog.js +16 -8
- package/dist/git/RemoteFolderPicker.js +35 -17
- package/dist/git/SyncChip.js +17 -17
- package/dist/git/WherePicker.d.ts +16 -1
- package/dist/git/WherePicker.js +81 -37
- package/dist/git/headless/environment.d.ts +33 -3
- package/dist/git/headless/environment.js +33 -5
- package/dist/git/headless/index.d.ts +2 -2
- package/dist/git/headless/index.js +2 -2
- package/dist/git/headless/labels.d.ts +15 -2
- package/dist/git/headless/labels.js +17 -4
- package/dist/git/useEnvironmentChoices.d.ts +3 -1
- package/dist/git/useEnvironmentChoices.js +7 -4
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/keybindings/KeyCommands.js +1 -1
- package/dist/keybindings/KeybindingsProvider.js +1 -1
- package/dist/keybindings/headless/index.js +2 -2
- package/dist/keybindings/headless/overrides.js +1 -1
- package/dist/labels.d.ts +5 -0
- package/dist/labels.js +5 -0
- package/dist/machines/AddMachineDialog.d.ts +34 -0
- package/dist/machines/AddMachineDialog.js +464 -0
- package/dist/machines/Banners.d.ts +33 -4
- package/dist/machines/Banners.js +64 -3
- package/dist/machines/DaemonMenu.js +27 -4
- package/dist/machines/HostCapabilities.d.ts +1 -3
- package/dist/machines/HostCapabilities.js +24 -45
- package/dist/machines/HostSyncPanel.js +124 -130
- package/dist/machines/HostsSection.d.ts +4 -1
- package/dist/machines/HostsSection.js +30 -7
- package/dist/machines/MachinesExplainer.d.ts +17 -0
- package/dist/machines/MachinesExplainer.js +71 -0
- package/dist/machines/MachinesProvider.d.ts +14 -2
- package/dist/machines/MachinesProvider.js +35 -1
- package/dist/machines/ServerAddedCard.d.ts +31 -0
- package/dist/machines/ServerAddedCard.js +72 -0
- package/dist/machines/ServerCard.js +91 -215
- package/dist/machines/ServerMachinesPanel.d.ts +2 -2
- package/dist/machines/ServerMachinesPanel.js +184 -323
- package/dist/machines/ServerUpdatePanel.js +51 -40
- package/dist/machines/ShareThisComputerForm.d.ts +19 -0
- package/dist/machines/ShareThisComputerForm.js +133 -0
- package/dist/machines/SyncOutcomeBadge.js +1 -1
- package/dist/machines/TokensPanel.d.ts +5 -3
- package/dist/machines/TokensPanel.js +98 -78
- package/dist/machines/headless/fixture-host.d.ts +19 -3
- package/dist/machines/headless/fixture-host.js +43 -6
- package/dist/machines/headless/fixtures.js +4 -6
- package/dist/machines/headless/host.d.ts +40 -19
- package/dist/machines/headless/index.d.ts +3 -3
- package/dist/machines/headless/index.js +3 -3
- package/dist/machines/headless/labels.d.ts +63 -20
- package/dist/machines/headless/labels.js +88 -25
- package/dist/machines/headless/messages.js +8 -0
- package/dist/machines/headless/stores.d.ts +9 -2
- package/dist/machines/headless/stores.js +28 -1
- package/dist/machines/index.d.ts +7 -3
- package/dist/machines/index.js +8 -4
- package/dist/machines/testing/contract.d.ts +15 -3
- package/dist/machines/testing/contract.js +68 -14
- package/dist/motion/grow.d.ts +8 -1
- package/dist/motion/grow.js +10 -4
- package/dist/onboarding/headless/labels.d.ts +13 -0
- package/dist/onboarding/headless/labels.js +8 -0
- package/dist/onboarding/sources/SourceBrowser.js +11 -7
- package/dist/onboarding/steps/ImportStep.js +4 -1
- package/dist/onboarding/steps/ReadyStep.js +9 -2
- package/dist/onboarding/steps/connect/KeyForm.js +6 -2
- package/dist/onboarding/steps/connect/ProviderPanel.js +6 -2
- package/dist/onboarding/steps/connect/ProviderReady.js +25 -20
- package/dist/onboarding/steps/tasks.js +17 -14
- package/dist/palette/app-sources.js +1 -1
- package/dist/server/sse-handler.js +141 -19
- package/dist/session/ArtifactsPanel.js +40 -18
- package/dist/session/PlanTracker.js +13 -8
- package/dist/session/ProjectHome.js +13 -11
- package/dist/session/RemindersPanel.js +35 -17
- package/dist/session/RunningWorkDialog.js +6 -2
- package/dist/session/SecretsPanel.js +29 -10
- package/dist/session/SessionDetailsDialog.d.ts +1 -1
- package/dist/session/SessionDetailsDialog.js +18 -10
- package/dist/session/SideChat.js +10 -7
- package/dist/session/TurnDetailsDialog.js +19 -5
- package/dist/session/UsagePanel.js +10 -4
- package/dist/session/headless/host.d.ts +2 -0
- package/dist/session/headless/index.js +2 -2
- package/dist/session/headless/labels.d.ts +19 -1
- package/dist/session/headless/labels.js +15 -1
- package/dist/session/headless/queue.js +2 -1
- package/dist/session/headless/reminder-labels.d.ts +4 -0
- package/dist/session/headless/reminder-labels.js +4 -0
- package/dist/settings/SettingsRestricted.d.ts +1 -1
- package/dist/settings/SettingsRestricted.js +4 -4
- package/dist/settings/SettingsShell.d.ts +7 -0
- package/dist/settings/SettingsShell.js +6 -1
- package/dist/settings/headless/fixture-performance.d.ts +1 -1
- package/dist/settings/headless/host.d.ts +2 -2
- package/dist/settings/headless/index.js +1 -1
- package/dist/settings/headless/labels.d.ts +3 -3
- package/dist/settings/headless/labels.js +3 -3
- package/dist/settings/headless/performance.d.ts +3 -4
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/index.d.ts +2 -1
- package/dist/settings/index.js +2 -1
- package/dist/settings/sections/appearance/AppearanceSection.js +2 -2
- package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
- package/dist/settings/sections/editor/EditorSection.js +8 -5
- package/dist/settings/sections/editor/labels.d.ts +1 -0
- package/dist/settings/sections/editor/labels.js +1 -0
- package/dist/settings/sections/environments/EnvironmentsSection.js +21 -14
- package/dist/settings/sections/environments/labels.d.ts +1 -0
- package/dist/settings/sections/environments/labels.js +2 -1
- package/dist/settings/sections/extensions/ChangeOriginDialog.js +1 -1
- package/dist/settings/sections/extensions/CreateExtensionDialog.js +1 -1
- package/dist/settings/sections/extensions/ExtensionConfigRows.d.ts +1 -3
- package/dist/settings/sections/extensions/ExtensionConfigRows.js +20 -19
- package/dist/settings/sections/extensions/ExtensionOptionsSection.js +2 -1
- package/dist/settings/sections/extensions/ExtensionsSection.js +1 -1
- package/dist/settings/sections/extensions/options-labels.d.ts +2 -1
- package/dist/settings/sections/extensions/options-labels.js +2 -1
- package/dist/settings/sections/host-catalog/HostCatalogSection.js +1 -1
- package/dist/settings/sections/index.d.ts +2 -1
- package/dist/settings/sections/index.js +2 -1
- package/dist/settings/sections/instructions/InstructionsSection.js +1 -1
- package/dist/settings/sections/logs/LogsSection.d.ts +2 -2
- package/dist/settings/sections/logs/LogsSection.js +2 -2
- package/dist/settings/sections/mcp/McpSection.d.ts +1 -1
- package/dist/settings/sections/mcp/McpSection.js +13 -7
- package/dist/settings/sections/mcp/McpServerRow.js +21 -14
- package/dist/settings/sections/mcp/labels.d.ts +8 -2
- package/dist/settings/sections/mcp/labels.js +8 -2
- package/dist/settings/sections/models/ModelRows.js +1 -1
- package/dist/settings/sections/models/NewChatPlaceRow.d.ts +26 -0
- package/dist/settings/sections/models/NewChatPlaceRow.js +78 -0
- package/dist/settings/sections/models/SpacesDefaultsSection.js +15 -3
- package/dist/settings/sections/models/labels.d.ts +7 -0
- package/dist/settings/sections/models/labels.js +7 -0
- package/dist/settings/sections/models/model-test.js +7 -4
- package/dist/settings/sections/performance/PerformanceSection.js +16 -6
- package/dist/settings/sections/performance/labels.d.ts +1 -1
- package/dist/settings/sections/performance/labels.js +1 -1
- package/dist/settings/sections/providers/ProvidersSection.d.ts +1 -1
- package/dist/settings/sections/providers/ProvidersSection.js +15 -8
- package/dist/settings/sections/providers/ServerProvidersSection.d.ts +1 -1
- package/dist/settings/sections/providers/ServerProvidersSection.js +12 -6
- package/dist/settings/sections/providers/labels.d.ts +2 -2
- package/dist/settings/sections/providers/labels.js +2 -2
- package/dist/settings/sections/shared/catalog.js +1 -1
- package/dist/settings/sections/skills/SkillsSection.js +1 -1
- package/dist/settings/testing/performance.contract.js +8 -12
- package/dist/styles.css +32 -3
- package/dist/terminal/HostTerminalSurface.js +17 -7
- package/dist/terminal/TerminalPanel.js +30 -17
- package/dist/terminal/TerminalSurface.js +11 -4
- package/dist/terminal/headless/labels.d.ts +5 -0
- package/dist/terminal/headless/labels.js +5 -0
- package/dist/terminal/headless/store.d.ts +1 -1
- package/dist/terminal/headless/store.js +6 -3
- package/dist/workspace/LayoutBudget.d.ts +5 -1
- package/dist/workspace/LayoutBudget.js +14 -1
- package/dist/workspace/PanelContentView.d.ts +1 -1
- package/dist/workspace/PanelContentView.js +17 -6
- package/dist/workspace/WorkspaceProvider.js +4 -3
- package/dist/workspace/extension-tabs.js +1 -1
- package/dist/workspace/headless/index.js +1 -1
- package/dist/workspace/headless/labels.d.ts +1 -0
- package/dist/workspace/headless/labels.js +1 -0
- package/package.json +3 -3
- package/src/styles/motion.css +8 -0
- package/src/styles/primitives.css +7 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { BTN_DANGER, BTN_PRIMARY, BTN_SECONDARY } from "../../../components/button.js";
|
|
2
|
+
import { Notice } from "../../../components/Notice.js";
|
|
2
3
|
import { ErrorNote, FormCard, FormSection, MetaChip, OpLine, RowText } from "../../../components/Form.js";
|
|
3
|
-
import { toSettingsError } from "../../headless/host.js";
|
|
4
4
|
import { useSettingsHost } from "../../SettingsProvider.js";
|
|
5
|
+
import { toSettingsError } from "../../headless/host.js";
|
|
5
6
|
import { SettingsPanel, SettingsPanelBody } from "../../section.js";
|
|
6
7
|
import { hasCredentialChoice } from "../../headless/providers.js";
|
|
7
8
|
import { SettingsRestricted } from "../../SettingsRestricted.js";
|
|
@@ -25,7 +26,7 @@ const YES = async () => true;
|
|
|
25
26
|
/**
|
|
26
27
|
* Renders the providers of the nearest `SettingsProvider`'s host (`providers`) as a server's cards: Set API
|
|
27
28
|
* key needs `setApiKey`, Sign in `signIn`, Remove `remove`; a connection that may not write (`writable`)
|
|
28
|
-
* sees the cards restricted
|
|
29
|
+
* sees the cards restricted.
|
|
29
30
|
*
|
|
30
31
|
* @param props - The `hostName`, an `intro`, `className` and `style`.
|
|
31
32
|
*/
|
|
@@ -41,7 +42,10 @@ function ServerProvidersSection({ hostName, intro, className, style }) {
|
|
|
41
42
|
children: /* @__PURE__ */ jsxs(SettingsPanelBody, { children: [intro, /* @__PURE__ */ jsxs("div", {
|
|
42
43
|
className: "space-y-4",
|
|
43
44
|
children: [
|
|
44
|
-
load.error && /* @__PURE__ */ jsx(ErrorNote, {
|
|
45
|
+
load.error && /* @__PURE__ */ jsx(ErrorNote, {
|
|
46
|
+
...load.error.detail ? { detail: load.error.detail } : {},
|
|
47
|
+
children: l.accountsServerReadFailed(hostName, l.accountsFailed(load.error))
|
|
48
|
+
}),
|
|
45
49
|
!list && !load.error && /* @__PURE__ */ jsx(OpLine, {
|
|
46
50
|
kind: "busy",
|
|
47
51
|
children: l.accountsServerReading(hostName)
|
|
@@ -198,9 +202,11 @@ function ProviderCard({ host, hostName, provider, labels: l }) {
|
|
|
198
202
|
}),
|
|
199
203
|
error && /* @__PURE__ */ jsx("div", {
|
|
200
204
|
className: "px-3 pb-2.5",
|
|
201
|
-
children: /* @__PURE__ */ jsx(
|
|
202
|
-
|
|
203
|
-
|
|
205
|
+
children: /* @__PURE__ */ jsx(Notice, {
|
|
206
|
+
tone: "error",
|
|
207
|
+
compact: true,
|
|
208
|
+
...error.detail ? { detail: error.detail } : {},
|
|
209
|
+
children: l.accountsFailed(error)
|
|
204
210
|
})
|
|
205
211
|
})
|
|
206
212
|
]
|
|
@@ -2,8 +2,8 @@ import { SettingsError } from "../../headless/host.js";
|
|
|
2
2
|
//#region src/settings/sections/providers/labels.d.ts
|
|
3
3
|
/** The default English strings of the Accounts sections. */
|
|
4
4
|
declare const DEFAULT_ACCOUNTS_SECTION_LABELS: {
|
|
5
|
-
/** A failed read or action, worded
|
|
6
|
-
|
|
5
|
+
/** A failed read or action, worded by its kind. What the host said goes under Details. */
|
|
6
|
+
accountsFailed: (error: SettingsError) => "Couldn't reach the host." | "Not allowed: this connection may not do that." | "Something went wrong.";
|
|
7
7
|
/** The status dot of a provider with a credential. */
|
|
8
8
|
accountsAuthenticated: string;
|
|
9
9
|
/** The status dot of a provider without one. */
|
|
@@ -9,8 +9,8 @@ import { DEFAULT_OAUTH_ACCOUNT_LABEL } from "zidane/chat/pure";
|
|
|
9
9
|
*/
|
|
10
10
|
/** The default English strings of the Accounts sections. */
|
|
11
11
|
const DEFAULT_ACCOUNTS_SECTION_LABELS = {
|
|
12
|
-
/** A failed read or action, worded
|
|
13
|
-
|
|
12
|
+
/** A failed read or action, worded by its kind. What the host said goes under Details. */
|
|
13
|
+
accountsFailed: (error) => error.kind === "unreachable" ? "Couldn't reach the host." : error.kind === "refused" ? "Not allowed: this connection may not do that." : "Something went wrong.",
|
|
14
14
|
/** The status dot of a provider with a credential. */
|
|
15
15
|
accountsAuthenticated: "Authenticated",
|
|
16
16
|
/** The status dot of a provider without one. */
|
|
@@ -2,8 +2,8 @@ import { IconButton } from "../../../components/IconButton.js";
|
|
|
2
2
|
import { Segmented } from "../../../components/Segmented.js";
|
|
3
3
|
import { EmptyState } from "../../../components/Surface.js";
|
|
4
4
|
import { Checkbox } from "../../../components/Form.js";
|
|
5
|
-
import { toSettingsError } from "../../headless/host.js";
|
|
6
5
|
import { useSettingsDocument, useSettingsHost, useSettingsWritable } from "../../SettingsProvider.js";
|
|
6
|
+
import { toSettingsError } from "../../headless/host.js";
|
|
7
7
|
import { useSectionLabels } from "../use-section-labels.js";
|
|
8
8
|
import { SettingsRestricted } from "../../SettingsRestricted.js";
|
|
9
9
|
import { enabledNames, toggleEnabled } from "../../headless/enabled.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BTN_LG_SECONDARY, BTN_PRIMARY, BTN_SECONDARY } from "../../../components/button.js";
|
|
2
2
|
import { OpLine } from "../../../components/Form.js";
|
|
3
|
-
import { toSettingsError } from "../../headless/host.js";
|
|
4
3
|
import { useSettingsHost } from "../../SettingsProvider.js";
|
|
4
|
+
import { toSettingsError } from "../../headless/host.js";
|
|
5
5
|
import { SettingsPanel, SettingsPanelActions, SettingsPanelBody } from "../../section.js";
|
|
6
6
|
import { ScopePicker, useCatalogSharedLabels, useOpLine, useSettingsResource, useSettingsValues, useWriteSetting } from "../shared/catalog.js";
|
|
7
7
|
import { SettingsTutorial } from "../../SettingsTutorial.js";
|
|
@@ -99,17 +99,10 @@ function describeSettingsPerformanceContract(name, makeHarness, capabilities, op
|
|
|
99
99
|
control.emit(fixturePerfSample(3, 7e3));
|
|
100
100
|
expect(seen).toEqual([5e3]);
|
|
101
101
|
});
|
|
102
|
-
it.skipIf(!options.watchErrors).each([
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
detail: "\"perf.watch\" needs an admin token"
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
kind: "failed",
|
|
110
|
-
detail: "offline"
|
|
111
|
-
}
|
|
112
|
-
])("a refused watch ($kind) reaches onError as its kind, once", async (error) => {
|
|
102
|
+
it.skipIf(!options.watchErrors).each([{ kind: "unavailable" }, {
|
|
103
|
+
kind: "failed",
|
|
104
|
+
detail: "offline"
|
|
105
|
+
}])("a refused watch ($kind) reaches onError as its kind, once", async (error) => {
|
|
113
106
|
const { host } = await setup({ watchError: error });
|
|
114
107
|
const errors = [];
|
|
115
108
|
const seen = [];
|
|
@@ -119,7 +112,10 @@ function describeSettingsPerformanceContract(name, makeHarness, capabilities, op
|
|
|
119
112
|
expect(seen).toEqual([]);
|
|
120
113
|
});
|
|
121
114
|
it.skipIf(!options.watchErrors)("a watch released before its refusal lands hears nothing", async () => {
|
|
122
|
-
const { host } = await setup({ watchError: {
|
|
115
|
+
const { host } = await setup({ watchError: {
|
|
116
|
+
kind: "failed",
|
|
117
|
+
detail: "offline"
|
|
118
|
+
} });
|
|
123
119
|
const errors = [];
|
|
124
120
|
host.performance.watch(() => void 0, (e) => errors.push(e))();
|
|
125
121
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
package/dist/styles.css
CHANGED
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
.i-ph-clock-counter-clockwise{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M136 80v43.47l36.12 21.67a8 8 0 0 1-8.24 13.72l-40-24A8 8 0 0 1 120 128V80a8 8 0 0 1 16 0m-8-48a95.44 95.44 0 0 0-67.92 28.15C52.81 67.51 46.35 74.59 40 82V64a8 8 0 0 0-16 0v40a8 8 0 0 0 8 8h40a8 8 0 0 0 0-16H49c7.15-8.42 14.27-16.35 22.39-24.57a80 80 0 1 1 1.66 114.75a8 8 0 1 0-11 11.64A96 96 0 1 0 128 32'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
76
76
|
.i-ph-cloud{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M160 40a88.09 88.09 0 0 0-78.71 48.67A64 64 0 1 0 72 216h88a88 88 0 0 0 0-176m0 160H72a48 48 0 0 1 0-96c1.1 0 2.2 0 3.29.11A88 88 0 0 0 72 128a8 8 0 0 0 16 0a72 72 0 1 1 72 72'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
77
77
|
.i-ph-cloud-arrow-up{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M178.34 165.66L160 147.31V208a8 8 0 0 1-16 0v-60.69l-18.34 18.35a8 8 0 0 1-11.32-11.32l32-32a8 8 0 0 1 11.32 0l32 32a8 8 0 0 1-11.32 11.32M160 40a88.08 88.08 0 0 0-78.71 48.68A64 64 0 1 0 72 216h40a8 8 0 0 0 0-16H72a48 48 0 0 1 0-96c1.1 0 2.2 0 3.29.12A88 88 0 0 0 72 128a8 8 0 0 0 16 0a72 72 0 1 1 100.8 66a8 8 0 0 0 3.2 15.34a7.9 7.9 0 0 0 3.2-.68A88 88 0 0 0 160 40'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
78
|
+
.i-ph-cloud-slash{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M53.92 34.62a8 8 0 1 0-11.84 10.76l39.24 43.17l-.06.12A65 65 0 0 0 72 88a64 64 0 0 0 0 128h88a87.3 87.3 0 0 0 31.8-5.93l10.28 11.31a8 8 0 1 0 11.84-10.76ZM160 200H72a48 48 0 0 1 0-96c1.1 0 2.2 0 3.3.12A88.4 88.4 0 0 0 72 128a8 8 0 0 0 16 0a72.3 72.3 0 0 1 5.06-26.54l87 95.7A71.7 71.7 0 0 1 160 200m88-72a87.9 87.9 0 0 1-22.35 58.61A8 8 0 0 1 213.71 176a72 72 0 0 0-96.34-106a8 8 0 0 1-9.48-12.89A88 88 0 0 1 248 128'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
78
79
|
.i-ph-code{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M69.12 94.15L28.5 128l40.62 33.85a8 8 0 1 1-10.24 12.29l-48-40a8 8 0 0 1 0-12.29l48-40a8 8 0 0 1 10.24 12.3m176 27.7l-48-40a8 8 0 1 0-10.24 12.3L227.5 128l-40.62 33.85a8 8 0 1 0 10.24 12.29l48-40a8 8 0 0 0 0-12.29m-82.39-89.37a8 8 0 0 0-10.25 4.79l-64 176a8 8 0 0 0 4.79 10.26A8.1 8.1 0 0 0 96 224a8 8 0 0 0 7.52-5.27l64-176a8 8 0 0 0-4.79-10.25'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
79
80
|
.i-ph-coffee{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M80 56V24a8 8 0 0 1 16 0v32a8 8 0 0 1-16 0m40 8a8 8 0 0 0 8-8V24a8 8 0 0 0-16 0v32a8 8 0 0 0 8 8m32 0a8 8 0 0 0 8-8V24a8 8 0 0 0-16 0v32a8 8 0 0 0 8 8m96 56v8a40 40 0 0 1-37.51 39.91a96.6 96.6 0 0 1-27 40.09H208a8 8 0 0 1 0 16H32a8 8 0 0 1 0-16h24.54A96.3 96.3 0 0 1 24 136V88a8 8 0 0 1 8-8h176a40 40 0 0 1 40 40m-48-24H40v40a80.27 80.27 0 0 0 45.12 72h69.76A80.27 80.27 0 0 0 200 136Zm32 24a24 24 0 0 0-16-22.62V136a96 96 0 0 1-1.2 15a24 24 0 0 0 17.2-23Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
80
81
|
.i-ph-columns{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M104 32H64a16 16 0 0 0-16 16v160a16 16 0 0 0 16 16h40a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16m0 176H64V48h40Zm88-176h-40a16 16 0 0 0-16 16v160a16 16 0 0 0 16 16h40a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16m0 176h-40V48h40Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
@@ -137,6 +138,7 @@
|
|
|
137
138
|
.i-ph-globe-simple{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M128 24a104 104 0 1 0 104 104A104.12 104.12 0 0 0 128 24m87.62 96h-39.83c-1.79-36.51-15.85-62.33-27.38-77.6a88.19 88.19 0 0 1 67.22 77.6ZM96.23 136h63.54c-2.31 41.61-22.23 67.11-31.77 77c-9.55-9.9-29.46-35.4-31.77-77m0-16c2.31-41.61 22.23-67.11 31.77-77c9.55 9.93 29.46 35.43 31.77 77Zm11.36-77.6C96.06 57.67 82 83.49 80.21 120H40.37a88.19 88.19 0 0 1 67.22-77.6M40.37 136h39.84c1.82 36.51 15.85 62.33 27.38 77.6A88.19 88.19 0 0 1 40.37 136m108 77.6c11.53-15.27 25.56-41.09 27.38-77.6h39.84a88.19 88.19 0 0 1-67.18 77.6Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
138
139
|
.i-ph-graduation-cap{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='m251.76 88.94l-120-64a8 8 0 0 0-7.52 0l-120 64a8 8 0 0 0 0 14.12L32 117.87v48.42a15.9 15.9 0 0 0 4.06 10.65C49.16 191.53 78.51 216 128 216a130 130 0 0 0 48-8.76V240a8 8 0 0 0 16 0v-40.49a115.6 115.6 0 0 0 27.94-22.57a15.9 15.9 0 0 0 4.06-10.65v-48.42l27.76-14.81a8 8 0 0 0 0-14.12M128 200c-43.27 0-68.72-21.14-80-33.71V126.4l76.24 40.66a8 8 0 0 0 7.52 0L176 143.47v46.34c-12.6 5.88-28.48 10.19-48 10.19m80-33.75a97.8 97.8 0 0 1-16 14.25v-45.57l16-8.53Zm-20-47.31l-.22-.13l-56-29.87a8 8 0 0 0-7.52 14.12L171 128l-43 22.93L25 96l103-54.93L231 96Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
139
140
|
.i-ph-graph{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M200 152a31.84 31.84 0 0 0-19.53 6.68l-23.11-18A31.65 31.65 0 0 0 160 128c0-.74 0-1.48-.08-2.21l13.23-4.41A32 32 0 1 0 168 104c0 .74 0 1.48.08 2.21l-13.23 4.41A32 32 0 0 0 128 96a32.6 32.6 0 0 0-5.27.44L115.89 81A32 32 0 1 0 96 88a32.6 32.6 0 0 0 5.27-.44l6.84 15.4a31.92 31.92 0 0 0-8.57 39.64l-25.71 22.84a32.06 32.06 0 1 0 10.63 12l25.71-22.84a31.91 31.91 0 0 0 37.36-1.24l23.11 18A31.65 31.65 0 0 0 168 184a32 32 0 1 0 32-32m0-64a16 16 0 1 1-16 16a16 16 0 0 1 16-16M80 56a16 16 0 1 1 16 16a16 16 0 0 1-16-16M56 208a16 16 0 1 1 16-16a16 16 0 0 1-16 16m56-80a16 16 0 1 1 16 16a16 16 0 0 1-16-16m88 72a16 16 0 1 1 16-16a16 16 0 0 1-16 16'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
141
|
+
.i-ph-graphics-card{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M232 48H16a8 8 0 0 0-8 8v152a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h112a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16m0 128H24V64h208Zm-56-16a40 40 0 1 0-40-40a40 40 0 0 0 40 40m-24-40a23.74 23.74 0 0 1 2.35-10.34l32 32A23.74 23.74 0 0 1 176 144a24 24 0 0 1-24-24m48 0a23.74 23.74 0 0 1-2.35 10.34l-32-32A23.74 23.74 0 0 1 176 96a24 24 0 0 1 24 24M80 160a40 40 0 1 0-40-40a40 40 0 0 0 40 40m-24-40a23.74 23.74 0 0 1 2.35-10.34l32 32A23.74 23.74 0 0 1 80 144a24 24 0 0 1-24-24m48 0a23.74 23.74 0 0 1-2.35 10.34l-32-32A23.74 23.74 0 0 1 80 96a24 24 0 0 1 24 24'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
140
142
|
.i-ph-hand{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M188 48a27.75 27.75 0 0 0-12 2.71V44a28 28 0 0 0-54.65-8.6A28 28 0 0 0 80 60v64l-3.82-6.13a28 28 0 0 0-48.6 27.82c16 33.77 28.93 57.72 43.72 72.69C86.24 233.54 103.2 240 128 240a88.1 88.1 0 0 0 88-88V76a28 28 0 0 0-28-28m12 104a72.08 72.08 0 0 1-72 72c-20.38 0-33.51-4.88-45.33-16.85C69.44 193.74 57.26 171 41.9 138.58a6 6 0 0 0-.3-.58a12 12 0 0 1 20.79-12a2 2 0 0 0 .14.23l18.67 30A8 8 0 0 0 96 152V60a12 12 0 0 1 24 0v60a8 8 0 0 0 16 0V44a12 12 0 0 1 24 0v76a8 8 0 0 0 16 0V76a12 12 0 0 1 24 0Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
141
143
|
.i-ph-hand-palm{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M188 88a27.75 27.75 0 0 0-12 2.71V60a28 28 0 0 0-41.36-24.6A28 28 0 0 0 80 44v6.71A27.75 27.75 0 0 0 68 48a28 28 0 0 0-28 28v76a88 88 0 0 0 176 0v-36a28 28 0 0 0-28-28m12 64a72 72 0 0 1-144 0V76a12 12 0 0 1 24 0v44a8 8 0 0 0 16 0V44a12 12 0 0 1 24 0v68a8 8 0 0 0 16 0V60a12 12 0 0 1 24 0v68.67A48.08 48.08 0 0 0 120 176a8 8 0 0 0 16 0a32 32 0 0 1 32-32a8 8 0 0 0 8-8v-20a12 12 0 0 1 24 0Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
142
144
|
.i-ph-hard-drives{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M208 136H48a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16m0 64H48v-48h160zm0-160H48a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16V56a16 16 0 0 0-16-16m0 64H48V56h160zm-16-24a12 12 0 1 1-12-12a12 12 0 0 1 12 12m0 96a12 12 0 1 1-12-12a12 12 0 0 1 12 12'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
@@ -215,6 +217,7 @@
|
|
|
215
217
|
.i-ph-sidebar-simple{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M216 40H40a16 16 0 0 0-16 16v144a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V56a16 16 0 0 0-16-16M40 56h40v144H40Zm176 144H96V56h120z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
216
218
|
.i-ph-sidebar-simple-fill{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M216 40H40a16 16 0 0 0-16 16v144a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V56a16 16 0 0 0-16-16m0 160H88V56h128z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
217
219
|
.i-ph-sign-in{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='m141.66 133.66l-40 40a8 8 0 0 1-11.32-11.32L116.69 136H24a8 8 0 0 1 0-16h92.69L90.34 93.66a8 8 0 0 1 11.32-11.32l40 40a8 8 0 0 1 0 11.32M200 32h-64a8 8 0 0 0 0 16h56v160h-56a8 8 0 0 0 0 16h64a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
220
|
+
.i-ph-signpost{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M246 106.65L212.33 69.3a16 16 0 0 0-11.89-5.3H136V32a8 8 0 0 0-16 0v32H40a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h80v64a8 8 0 0 0 16 0v-64h64.44a16 16 0 0 0 11.89-5.3L246 117.35a8 8 0 0 0 0-10.7M200.44 144H40V80h160.44l28.8 32Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
218
221
|
.i-ph-sliders-horizontal{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M40 88h33a32 32 0 0 0 62 0h81a8 8 0 0 0 0-16h-81a32 32 0 0 0-62 0H40a8 8 0 0 0 0 16m64-24a16 16 0 1 1-16 16a16 16 0 0 1 16-16m112 104h-17a32 32 0 0 0-62 0H40a8 8 0 0 0 0 16h97a32 32 0 0 0 62 0h17a8 8 0 0 0 0-16m-48 24a16 16 0 1 1 16-16a16 16 0 0 1-16 16'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
219
222
|
.i-ph-sparkle{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M197.58 129.06L146 110l-19-51.62a15.92 15.92 0 0 0-29.88 0L78 110l-51.62 19a15.92 15.92 0 0 0 0 29.88L78 178l19 51.62a15.92 15.92 0 0 0 29.88 0L146 178l51.62-19a15.92 15.92 0 0 0 0-29.88ZM137 164.22a8 8 0 0 0-4.74 4.74L112 223.85L91.78 169a8 8 0 0 0-4.78-4.78L32.15 144L87 123.78a8 8 0 0 0 4.78-4.78L112 64.15L132.22 119a8 8 0 0 0 4.74 4.74L191.85 144ZM144 40a8 8 0 0 1 8-8h16V16a8 8 0 0 1 16 0v16h16a8 8 0 0 1 0 16h-16v16a8 8 0 0 1-16 0V48h-16a8 8 0 0 1-8-8m104 48a8 8 0 0 1-8 8h-8v8a8 8 0 0 1-16 0v-8h-8a8 8 0 0 1 0-16h8v-8a8 8 0 0 1 16 0v8h8a8 8 0 0 1 8 8'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
220
223
|
.i-ph-speaker-high{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' height='1em' width='1em' display='inline-block' vertical-align='middle' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M155.51 24.81a8 8 0 0 0-8.42.88L77.25 80H32a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h45.25l69.84 54.31A8 8 0 0 0 160 224V32a8 8 0 0 0-4.49-7.19M32 96h40v64H32Zm112 111.64l-56-43.55V91.91l56-43.55Zm54-106.08a40 40 0 0 1 0 52.88a8 8 0 0 1-12-10.58a24 24 0 0 0 0-31.72a8 8 0 0 1 12-10.58M248 128a79.9 79.9 0 0 1-20.37 53.34a8 8 0 0 1-11.92-10.67a64 64 0 0 0 0-85.33a8 8 0 1 1 11.92-10.67A79.83 79.83 0 0 1 248 128'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;height:1em;width:1em;display:inline-block;vertical-align:middle;}
|
|
@@ -363,7 +366,6 @@
|
|
|
363
366
|
.top-7{top:1.75rem;}
|
|
364
367
|
.top-full{top:100%;}
|
|
365
368
|
.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;}
|
|
366
|
-
.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;}
|
|
367
369
|
.line-clamp-4{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;line-clamp:4;}
|
|
368
370
|
.isolate{isolation:isolate;}
|
|
369
371
|
.z-\[-1\]{z-index:-1;}
|
|
@@ -396,6 +398,7 @@
|
|
|
396
398
|
.m\[0\]{margin:0;}
|
|
397
399
|
.m-1{margin:0.25rem;}
|
|
398
400
|
.m-2{margin:0.5rem;}
|
|
401
|
+
.m-3{margin:0.75rem;}
|
|
399
402
|
.m\[1\]{margin:1;}
|
|
400
403
|
.m\[2\]{margin:2;}
|
|
401
404
|
.m\[2\]\!{margin:2 !important;}
|
|
@@ -415,7 +418,8 @@
|
|
|
415
418
|
.-my-0\.5{margin-top:-0.125rem;margin-bottom:-0.125rem;}
|
|
416
419
|
.-my-1{margin-top:-0.25rem;margin-bottom:-0.25rem;}
|
|
417
420
|
.-my-px{margin-top:-1px;margin-bottom:-1px;}
|
|
418
|
-
.mx
|
|
421
|
+
.mx,
|
|
422
|
+
.mx-4{margin-left:1rem;margin-right:1rem;}
|
|
419
423
|
.mx-0\.5{margin-left:0.125rem;margin-right:0.125rem;}
|
|
420
424
|
.mx-1{margin-left:0.25rem;margin-right:0.25rem;}
|
|
421
425
|
.mx-1\.5{margin-left:0.375rem;margin-right:0.375rem;}
|
|
@@ -500,14 +504,17 @@
|
|
|
500
504
|
.hidden{display:none;}
|
|
501
505
|
.aspect-square{aspect-ratio:1/1;}
|
|
502
506
|
.size-7{width:1.75rem;height:1.75rem;}
|
|
507
|
+
.size-9{width:2.25rem;height:2.25rem;}
|
|
503
508
|
.\!h-2{height:0.5rem !important;}
|
|
504
509
|
.\!h-6{height:1.5rem !important;}
|
|
505
510
|
.\!h-7{height:1.75rem !important;}
|
|
511
|
+
.\!max-w-none{max-width:none !important;}
|
|
506
512
|
.\!min-h-0{min-height:0 !important;}
|
|
507
513
|
.\!w-4{width:1rem !important;}
|
|
508
514
|
.\!w-40{width:10rem !important;}
|
|
509
515
|
.\!w-64{width:16rem !important;}
|
|
510
516
|
.\!w-auto{width:auto !important;}
|
|
517
|
+
.\!w-full{width:100% !important;}
|
|
511
518
|
.h-\[108px\]{height:108px;}
|
|
512
519
|
.h-\[14px\]{height:14px;}
|
|
513
520
|
.h-\[18px\]{height:18px;}
|
|
@@ -650,6 +657,7 @@
|
|
|
650
657
|
.min-h-full{min-height:100%;}
|
|
651
658
|
.min-w-\[10rem\],
|
|
652
659
|
.min-w-40{min-width:10rem;}
|
|
660
|
+
.min-w-\[12rem\]{min-width:12rem;}
|
|
653
661
|
.min-w-\[14px\]{min-width:14px;}
|
|
654
662
|
.min-w-\[14rem\]{min-width:14rem;}
|
|
655
663
|
.min-w-\[1em\]{min-width:1em;}
|
|
@@ -681,6 +689,7 @@
|
|
|
681
689
|
.w-\[440px\]{width:440px;}
|
|
682
690
|
.w-\[460px\]{width:460px;}
|
|
683
691
|
.w-\[480px\]{width:480px;}
|
|
692
|
+
.w-\[520px\]{width:520px;}
|
|
684
693
|
.w-\[560px\]{width:560px;}
|
|
685
694
|
.w-\[62\%\]{width:62%;}
|
|
686
695
|
.w-\[72px\]{width:72px;}
|
|
@@ -690,6 +699,7 @@
|
|
|
690
699
|
.w-\[8px\]{width:8px;}
|
|
691
700
|
.w-\[920px\]{width:920px;}
|
|
692
701
|
.w-\[calc\(50\%-2px\)\]{width:calc(50% - 2px);}
|
|
702
|
+
.w-\[min\(24rem\,calc\(100vw-1\.5rem\)\)\]{width:min(24rem,calc(100vw - 1.5rem));}
|
|
693
703
|
.w-0\.5{width:0.125rem;}
|
|
694
704
|
.w-1,
|
|
695
705
|
.w1{width:0.25rem;}
|
|
@@ -736,6 +746,7 @@
|
|
|
736
746
|
.flex-grow,
|
|
737
747
|
.grow{flex-grow:1;}
|
|
738
748
|
.basis-40{flex-basis:10rem;}
|
|
749
|
+
.basis-full{flex-basis:100%;}
|
|
739
750
|
.flex-row{flex-direction:row;}
|
|
740
751
|
.flex-row-reverse{flex-direction:row-reverse;}
|
|
741
752
|
.flex-col{flex-direction:column;}
|
|
@@ -828,7 +839,6 @@
|
|
|
828
839
|
.gap-y-1\.5{row-gap:0.375rem;}
|
|
829
840
|
.gap-y-2{row-gap:0.5rem;}
|
|
830
841
|
.gap-y-3\.5{row-gap:0.875rem;}
|
|
831
|
-
.space-y-0\.5>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(0.125rem * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(0.125rem * var(--un-space-y-reverse));}
|
|
832
842
|
.space-y-1\.5>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(0.375rem * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(0.375rem * var(--un-space-y-reverse));}
|
|
833
843
|
.space-y-1>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(0.25rem * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(0.25rem * var(--un-space-y-reverse));}
|
|
834
844
|
.space-y-2>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(0.5rem * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(0.5rem * var(--un-space-y-reverse));}
|
|
@@ -947,6 +957,7 @@
|
|
|
947
957
|
.bg-amber-500{--un-bg-opacity:1;background-color:rgb(245 158 11 / var(--un-bg-opacity));}
|
|
948
958
|
.bg-amber-600{--un-bg-opacity:1;background-color:rgb(217 119 6 / var(--un-bg-opacity));}
|
|
949
959
|
.bg-black{--un-bg-opacity:1;background-color:rgb(0 0 0 / var(--un-bg-opacity));}
|
|
960
|
+
.bg-black\/30{background-color:rgb(0 0 0 / 0.3);}
|
|
950
961
|
.bg-current{background-color:currentColor;}
|
|
951
962
|
.bg-transparent{background-color:transparent;}
|
|
952
963
|
.bg-zg-accent-fill-fg{background-color:var(--zg-accent-fill-fg);}
|
|
@@ -1196,6 +1207,7 @@
|
|
|
1196
1207
|
.tracking-\[-0\.005em\]{letter-spacing:-0.005em;}
|
|
1197
1208
|
.tracking-\[-0\.01em\]{letter-spacing:-0.01em;}
|
|
1198
1209
|
.tracking-\[0\.12em\]{letter-spacing:0.12em;}
|
|
1210
|
+
.tracking-\[0\.2em\]{letter-spacing:0.2em;}
|
|
1199
1211
|
.tracking-\[inherit\]{letter-spacing:inherit;}
|
|
1200
1212
|
.tracking-normal{letter-spacing:0em;}
|
|
1201
1213
|
.font-\[inherit\]{font-family:inherit;}
|
|
@@ -1301,6 +1313,8 @@
|
|
|
1301
1313
|
.z-zg-overlay{z-index:var(--zg-z-overlay);}
|
|
1302
1314
|
.z-zg-tooltip{z-index:var(--zg-z-tooltip);}
|
|
1303
1315
|
.bg-zg-danger\/10{background-color:color-mix(in srgb, var(--zg-danger) 10%, transparent);}
|
|
1316
|
+
.bg-zg-info\/10{background-color:color-mix(in srgb, var(--zg-info) 10%, transparent);}
|
|
1317
|
+
.bg-zg-success\/15{background-color:color-mix(in srgb, var(--zg-success) 15%, transparent);}
|
|
1304
1318
|
.bg-zg-warn\/10{background-color:color-mix(in srgb, var(--zg-warn) 10%, transparent);}
|
|
1305
1319
|
.border-zg-danger\/30{border-color:color-mix(in srgb, var(--zg-danger) 30%, transparent);}
|
|
1306
1320
|
.text-zg-accent-fill-fg\/80{color:color-mix(in srgb, var(--zg-accent-fill-fg) 80%, transparent);}
|
|
@@ -1955,6 +1969,13 @@ html[data-motion='off'] {
|
|
|
1955
1969
|
padding: 6px 10px;
|
|
1956
1970
|
align-items: flex-start;
|
|
1957
1971
|
}
|
|
1972
|
+
/* A row that belongs to the row above it (a server's machines): one glyph column in. */
|
|
1973
|
+
.zg-menu-row.zg-menu-row-nested {
|
|
1974
|
+
padding-left: 26px;
|
|
1975
|
+
}
|
|
1976
|
+
.zg-menu-row.zg-menu-row-nested[data-size='lg'] {
|
|
1977
|
+
padding-left: 28px;
|
|
1978
|
+
}
|
|
1958
1979
|
.zg-menu-row:hover:not(:disabled) {
|
|
1959
1980
|
background: var(--zg-row-hover);
|
|
1960
1981
|
}
|
|
@@ -2589,6 +2610,14 @@ html[data-motion='reduced'] .zg-shimmer {
|
|
|
2589
2610
|
opacity var(--zg-motion-fade),
|
|
2590
2611
|
margin-left var(--zg-motion-settle);
|
|
2591
2612
|
}
|
|
2613
|
+
/* `Grow symmetric`: leaving on the curve it arrived on, so a row shrinking out
|
|
2614
|
+
as another grows in mirrors it exactly and the list's height holds. */
|
|
2615
|
+
.zg-grow[data-symmetric]:not([data-shown]) {
|
|
2616
|
+
transition:
|
|
2617
|
+
grid-template-rows var(--zg-motion-settle),
|
|
2618
|
+
opacity var(--zg-motion-fade-out),
|
|
2619
|
+
margin-left var(--zg-motion-settle);
|
|
2620
|
+
}
|
|
2592
2621
|
.zg-grow-clip {
|
|
2593
2622
|
min-height: 0;
|
|
2594
2623
|
overflow-x: visible;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Notice } from "../components/Notice.js";
|
|
2
|
+
import { errorMessage } from "../components/report-error.js";
|
|
1
3
|
import { RowActionsMenu } from "../components/RowActionsMenu.js";
|
|
2
|
-
import { getMergedKeybindings } from "../keybindings/headless/overrides.js";
|
|
3
|
-
import { bindingAllowedIn } from "../keybindings/headless/key-scope.js";
|
|
4
4
|
import { useAppearanceState, usePalette } from "../appearance/AppearanceProvider.js";
|
|
5
|
+
import { bindingAllowedIn } from "../keybindings/headless/key-scope.js";
|
|
6
|
+
import { getMergedKeybindings } from "../keybindings/headless/overrides.js";
|
|
5
7
|
import { matchesBinding } from "../keybindings/match.js";
|
|
6
8
|
import { useKeybindingsHost } from "../keybindings/KeybindingsProvider.js";
|
|
7
9
|
import { useSymbolsFontUrl, useTerminalActions, useTerminalStore } from "./TerminalProvider.js";
|
|
@@ -324,7 +326,10 @@ function HostTerminalSurface({ scope, terminalId, label, cwd, autoFocus = false,
|
|
|
324
326
|
for (const q of pending) (q.kind === "reset" ? reset : apply)(q.offset, q.data);
|
|
325
327
|
settle(true);
|
|
326
328
|
} catch (err) {
|
|
327
|
-
if (!disposed && seq === attachSeq) setFailed(
|
|
329
|
+
if (!disposed && seq === attachSeq) setFailed({
|
|
330
|
+
message: labels.terminalAttachError,
|
|
331
|
+
detail: errorMessage(err)
|
|
332
|
+
});
|
|
328
333
|
reveal();
|
|
329
334
|
}
|
|
330
335
|
}
|
|
@@ -471,7 +476,10 @@ function HostTerminalSurface({ scope, terminalId, label, cwd, autoFocus = false,
|
|
|
471
476
|
attach();
|
|
472
477
|
if (autoFocusRef.current) term.focus();
|
|
473
478
|
}, (err) => {
|
|
474
|
-
if (!disposed) setFailed(
|
|
479
|
+
if (!disposed) setFailed({
|
|
480
|
+
message: labels.terminalLoadError,
|
|
481
|
+
detail: errorMessage(err)
|
|
482
|
+
});
|
|
475
483
|
});
|
|
476
484
|
return () => {
|
|
477
485
|
disposed = true;
|
|
@@ -586,9 +594,11 @@ function HostTerminalSurface({ scope, terminalId, label, cwd, autoFocus = false,
|
|
|
586
594
|
className: "absolute inset-0 pl-2 pt-1",
|
|
587
595
|
style: { caretColor: "transparent" }
|
|
588
596
|
}),
|
|
589
|
-
failed && /* @__PURE__ */ jsx(
|
|
590
|
-
|
|
591
|
-
|
|
597
|
+
failed && /* @__PURE__ */ jsx(Notice, {
|
|
598
|
+
tone: "error",
|
|
599
|
+
detail: failed.detail,
|
|
600
|
+
className: "absolute inset-x-0 top-0 m-2",
|
|
601
|
+
children: failed.message
|
|
592
602
|
}),
|
|
593
603
|
/* @__PURE__ */ jsx(RowActionsMenu, {
|
|
594
604
|
open: menu !== null,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useMotionTransition, useTabExit } from "../motion/springs.js";
|
|
2
2
|
import { IconButton } from "../components/IconButton.js";
|
|
3
3
|
import { buttonClass } from "../components/button.js";
|
|
4
|
+
import { Notice } from "../components/Notice.js";
|
|
4
5
|
import { Tooltip } from "../components/Tooltip.js";
|
|
5
6
|
import { IconToggle } from "../components/IconToggle.js";
|
|
6
7
|
import { useTabDrag } from "../hooks/useTabDrag.js";
|
|
@@ -214,19 +215,19 @@ function TerminalPanel({ scope, placement, trailing, className, style }) {
|
|
|
214
215
|
onNew: (target) => void openNew(target),
|
|
215
216
|
trailing
|
|
216
217
|
}),
|
|
217
|
-
data.error && /* @__PURE__ */
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}), /* @__PURE__ */ jsx(IconButton, {
|
|
218
|
+
data.error && /* @__PURE__ */ jsx(Notice, {
|
|
219
|
+
tone: "error",
|
|
220
|
+
compact: true,
|
|
221
|
+
detail: data.error,
|
|
222
|
+
className: "shrink-0 mx-2 mt-1",
|
|
223
|
+
action: /* @__PURE__ */ jsx(IconButton, {
|
|
224
224
|
size: "xs",
|
|
225
225
|
icon: "i-ph-x",
|
|
226
226
|
label: labels.terminalDismissError,
|
|
227
227
|
onClick: () => store.dismissError(key),
|
|
228
|
-
className: "!text-current"
|
|
229
|
-
})
|
|
228
|
+
className: "!text-current ml-auto"
|
|
229
|
+
}),
|
|
230
|
+
children: labels.terminalActionFailed
|
|
230
231
|
}),
|
|
231
232
|
/* @__PURE__ */ jsx("div", {
|
|
232
233
|
ref: areaRef,
|
|
@@ -439,7 +440,7 @@ function statusText(t, labels) {
|
|
|
439
440
|
switch (t.status) {
|
|
440
441
|
case "exited": return t.exitCode !== void 0 ? labels.terminalExitedWith(t.exitCode) : labels.terminalExitedPlain;
|
|
441
442
|
case "paused": return labels.terminalDisconnected;
|
|
442
|
-
case "error": return
|
|
443
|
+
case "error": return labels.terminalFailedToStart;
|
|
443
444
|
case "starting": return labels.terminalStarting;
|
|
444
445
|
default: return null;
|
|
445
446
|
}
|
|
@@ -457,18 +458,30 @@ function StatusBar({ scope, terminal: t, onReconnect }) {
|
|
|
457
458
|
label: labels.terminalRestart,
|
|
458
459
|
run: () => void store.restart(scope, t.id)
|
|
459
460
|
} : null;
|
|
461
|
+
const button = action && /* @__PURE__ */ jsx("button", {
|
|
462
|
+
type: "button",
|
|
463
|
+
onClick: action.run,
|
|
464
|
+
className: "zg-segment-item zg-press-soft shrink-0 h-5 px-1.5 rounded-zg-sm border-0 bg-transparent font-sans text-zg-meta text-[var(--zg-accent)] cursor-pointer",
|
|
465
|
+
children: action.label
|
|
466
|
+
});
|
|
467
|
+
if (t.status === "error") return /* @__PURE__ */ jsx("div", {
|
|
468
|
+
className: "shrink-0 px-2 py-1",
|
|
469
|
+
"data-testid": "terminal-status",
|
|
470
|
+
children: /* @__PURE__ */ jsx(Notice, {
|
|
471
|
+
tone: "error",
|
|
472
|
+
compact: true,
|
|
473
|
+
...t.error ? { detail: t.error } : {},
|
|
474
|
+
action: button,
|
|
475
|
+
children: text
|
|
476
|
+
})
|
|
477
|
+
});
|
|
460
478
|
return /* @__PURE__ */ jsxs("div", {
|
|
461
|
-
className:
|
|
479
|
+
className: "shrink-0 flex items-center gap-2 h-7 px-3 zg-meta",
|
|
462
480
|
"data-testid": "terminal-status",
|
|
463
481
|
children: [/* @__PURE__ */ jsx("span", {
|
|
464
482
|
className: "truncate",
|
|
465
483
|
children: text
|
|
466
|
-
}),
|
|
467
|
-
type: "button",
|
|
468
|
-
onClick: action.run,
|
|
469
|
-
className: "zg-segment-item zg-press-soft shrink-0 h-5 px-1.5 rounded-zg-sm border-0 bg-transparent font-sans text-zg-meta text-[var(--zg-accent)] cursor-pointer",
|
|
470
|
-
children: action.label
|
|
471
|
-
})]
|
|
484
|
+
}), button]
|
|
472
485
|
});
|
|
473
486
|
}
|
|
474
487
|
function Empty({ onNew }) {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { useLabels } from "../labels.js";
|
|
2
|
+
import { Notice } from "../components/Notice.js";
|
|
3
|
+
import { errorMessage } from "../components/report-error.js";
|
|
2
4
|
import { loadGhostty, openTerminal } from "./ghostty.js";
|
|
3
5
|
import { macTerminalKey } from "./keys.js";
|
|
4
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -131,7 +133,7 @@ function TerminalSurface({ adapter, theme, fontFamily, fontSize, symbolsFontUrl,
|
|
|
131
133
|
if (adapter.onExit) unsubscribe.push(adapter.onExit((code) => setExitCode(code)));
|
|
132
134
|
if (live.current.autoFocus && live.current.visible) term.focus();
|
|
133
135
|
}, (error) => {
|
|
134
|
-
if (!disposed) setFailed(
|
|
136
|
+
if (!disposed) setFailed(errorMessage(error));
|
|
135
137
|
});
|
|
136
138
|
return () => {
|
|
137
139
|
disposed = true;
|
|
@@ -176,10 +178,15 @@ function TerminalSurface({ adapter, theme, fontFamily, fontSize, symbolsFontUrl,
|
|
|
176
178
|
"data-terminal-mount": true,
|
|
177
179
|
className: "absolute inset-0 pl-2 pt-1",
|
|
178
180
|
style: { caretColor: "transparent" }
|
|
179
|
-
}),
|
|
181
|
+
}), failed !== null ? /* @__PURE__ */ jsx(Notice, {
|
|
182
|
+
tone: "error",
|
|
183
|
+
detail: failed,
|
|
184
|
+
className: "absolute inset-x-0 bottom-0 m-2",
|
|
185
|
+
children: labels.terminalStartFailed
|
|
186
|
+
}) : exitCode !== null && /* @__PURE__ */ jsx("div", {
|
|
180
187
|
role: "status",
|
|
181
|
-
className:
|
|
182
|
-
children:
|
|
188
|
+
className: "absolute inset-x-0 bottom-0 m-2 px-2.5 py-1.5 rounded-zg-sm text-zg-label bg-[var(--zg-tray)] text-[var(--zg-text-muted)]",
|
|
189
|
+
children: labels.terminalExited(exitCode)
|
|
183
190
|
})]
|
|
184
191
|
});
|
|
185
192
|
}
|
|
@@ -60,6 +60,11 @@ declare const DEFAULT_TERMINAL_LABELS: {
|
|
|
60
60
|
terminalPaste: string;
|
|
61
61
|
terminalClear: string;
|
|
62
62
|
terminalCouldNotLoad: (message: string) => string;
|
|
63
|
+
/** The terminal's view failed: the renderer did not load, or the terminal did not attach. */
|
|
64
|
+
terminalLoadError: string;
|
|
65
|
+
terminalAttachError: string;
|
|
66
|
+
/** Opening, closing or restarting a terminal failed (the error line over the terminal). */
|
|
67
|
+
terminalActionFailed: string;
|
|
63
68
|
/** A remote terminal's loopback link, in its tooltip. */
|
|
64
69
|
terminalLinkOnServer: (serverName: string) => string;
|
|
65
70
|
};
|
|
@@ -60,6 +60,11 @@ const DEFAULT_TERMINAL_LABELS = {
|
|
|
60
60
|
terminalPaste: "Paste",
|
|
61
61
|
terminalClear: "Clear",
|
|
62
62
|
terminalCouldNotLoad: (message) => `Could not load the terminal: ${message}`,
|
|
63
|
+
/** The terminal's view failed: the renderer did not load, or the terminal did not attach. */
|
|
64
|
+
terminalLoadError: "Couldn't load the terminal.",
|
|
65
|
+
terminalAttachError: "Couldn't connect to this terminal.",
|
|
66
|
+
/** Opening, closing or restarting a terminal failed (the error line over the terminal). */
|
|
67
|
+
terminalActionFailed: "Couldn't complete that terminal action.",
|
|
63
68
|
/** A remote terminal's loopback link, in its tooltip. */
|
|
64
69
|
terminalLinkOnServer: (serverName) => `runs on ${serverName}, not reachable from this computer`
|
|
65
70
|
};
|
|
@@ -249,7 +249,8 @@ var TerminalStore = class {
|
|
|
249
249
|
if (s.state.terminals.some((t) => t.owner === "user")) return;
|
|
250
250
|
const revealed = this.revealed.get(key);
|
|
251
251
|
if (revealed && revealed === s.activeId && s.state.terminals.some((t) => t.id === revealed)) return;
|
|
252
|
-
await this.open(scope, void 0, measure?.() ?? void 0);
|
|
252
|
+
const info = await this.open(scope, void 0, measure?.() ?? void 0);
|
|
253
|
+
if (info && placement === "drawer") this.reveal(scope, info.id, "drawer");
|
|
253
254
|
}
|
|
254
255
|
/**
|
|
255
256
|
* Opens a terminal and makes it active. Resolves `null` when it failed (see `error`).
|
|
@@ -505,13 +506,15 @@ var TerminalStore = class {
|
|
|
505
506
|
this.layouts.update(scope, { terminalOpen: open });
|
|
506
507
|
}
|
|
507
508
|
/**
|
|
508
|
-
* Opens the drawer and a new terminal in it.
|
|
509
|
+
* Opens the drawer and a new terminal in it, focused.
|
|
509
510
|
*
|
|
510
511
|
* @param scope - The scope.
|
|
511
512
|
*/
|
|
512
513
|
openInDrawer(scope) {
|
|
513
514
|
this.layouts.update(scope, { terminalOpen: true });
|
|
514
|
-
this.open(scope)
|
|
515
|
+
this.open(scope).then((info) => {
|
|
516
|
+
if (info) this.reveal(scope, info.id, "drawer");
|
|
517
|
+
});
|
|
515
518
|
}
|
|
516
519
|
/**
|
|
517
520
|
* Opens a new terminal in the scope, shows it, and types `input` into it (a
|
|
@@ -9,6 +9,10 @@ interface LayoutBudget extends LayoutResolved {
|
|
|
9
9
|
hidePanel: () => void;
|
|
10
10
|
/** Bring the slid-away panel back. */
|
|
11
11
|
revealPanel: () => void;
|
|
12
|
+
/** The sidebar is open over the chat while the window is too narrow to dock it. */
|
|
13
|
+
sidebarPeek: boolean;
|
|
14
|
+
/** Open (or close) the sidebar over the chat. It works only while the budget collapses the sidebar. */
|
|
15
|
+
peekSidebar: (open: boolean) => void;
|
|
12
16
|
/**
|
|
13
17
|
* Drag caps that keep the chat at its floor, read at drag time. A getter,
|
|
14
18
|
* not a value: they change on every resized pixel and must not re-render
|
|
@@ -39,7 +43,7 @@ interface LayoutBudgetProviderProps {
|
|
|
39
43
|
width: number | null;
|
|
40
44
|
share: number | null;
|
|
41
45
|
};
|
|
42
|
-
/** What the panel belongs to (the scope's key): a change brings a slid-away panel back. */
|
|
46
|
+
/** What the panel belongs to (the scope's key): a change brings a slid-away panel back and closes a peeking sidebar. */
|
|
43
47
|
resetKey?: string | null;
|
|
44
48
|
/** The columns. */
|
|
45
49
|
children: ReactNode;
|
|
@@ -12,7 +12,10 @@ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, use
|
|
|
12
12
|
*
|
|
13
13
|
* Owns the floating panel's "slid away" flag: a pointer-down in the chat
|
|
14
14
|
* hides it (`hidePanel`) until it is opened again, the window grows enough
|
|
15
|
-
* to dock it, or the scope changes (`resetKey`).
|
|
15
|
+
* to dock it, or the scope changes (`resetKey`). And the sidebar's peek: on a
|
|
16
|
+
* window too narrow to dock it (a phone, a tablet), the sidebar toggle opens
|
|
17
|
+
* it over the chat (`peekSidebar`) until it is closed, the scope changes, or
|
|
18
|
+
* the window grows enough to dock it.
|
|
16
19
|
*
|
|
17
20
|
* Never read `window.innerWidth` in a column: read `useLayoutBudget()`.
|
|
18
21
|
*/
|
|
@@ -53,6 +56,12 @@ function LayoutBudgetProvider({ sidebar, panel, resetKey = null, children }) {
|
|
|
53
56
|
]);
|
|
54
57
|
const hidePanel = useCallback(() => setPanelHidden(true), []);
|
|
55
58
|
const revealPanel = useCallback(() => setPanelHidden(false), []);
|
|
59
|
+
const [peek, setPeek] = useState(false);
|
|
60
|
+
const sidebarPeek = peek && resolved.sidebarForcedCollapsed;
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
setPeek(false);
|
|
63
|
+
}, [resolved.sidebarForcedCollapsed, resetKey]);
|
|
64
|
+
const peekSidebar = useCallback((open) => setPeek(open), []);
|
|
56
65
|
const caps = useRef({
|
|
57
66
|
viewportWidth,
|
|
58
67
|
resolved,
|
|
@@ -79,12 +88,16 @@ function LayoutBudgetProvider({ sidebar, panel, resetKey = null, children }) {
|
|
|
79
88
|
panelHidden,
|
|
80
89
|
hidePanel,
|
|
81
90
|
revealPanel,
|
|
91
|
+
sidebarPeek,
|
|
92
|
+
peekSidebar,
|
|
82
93
|
getCaps
|
|
83
94
|
}), [
|
|
84
95
|
resolved,
|
|
85
96
|
panelHidden,
|
|
86
97
|
hidePanel,
|
|
87
98
|
revealPanel,
|
|
99
|
+
sidebarPeek,
|
|
100
|
+
peekSidebar,
|
|
88
101
|
getCaps
|
|
89
102
|
]);
|
|
90
103
|
return /* @__PURE__ */ jsx(BudgetContext.Provider, {
|
|
@@ -37,7 +37,7 @@ interface PanelContentViewProps {
|
|
|
37
37
|
content: PanelContent | null;
|
|
38
38
|
/** A load is in flight. */
|
|
39
39
|
loading: boolean;
|
|
40
|
-
/** Why the last load failed, or `null`. */
|
|
40
|
+
/** Why the last load or action failed, in the extension's words (shown under Details), or `null`. */
|
|
41
41
|
error: string | null;
|
|
42
42
|
/** Runs one of the panel's actions (a row's `actionId`, a footer action). Keep it stable: the view is memoised. */
|
|
43
43
|
onAction: (actionId: string, payload?: unknown) => void;
|