@cryptiklemur/lattice 2.0.0 → 4.0.0
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/bin/lattice +6 -1
- package/dist/client/assets/{angular-html-BBi1Szz5.js → angular-html-N8PCEquT.js} +1 -1
- package/dist/client/assets/{angular-ts-2PMpSPqc.js → angular-ts-CJ8RJIPD.js} +1 -1
- package/dist/client/assets/{apl-B-NEtBvQ.js → apl-BD6tCLWN.js} +1 -1
- package/dist/client/assets/{astro-mxH1DA5Z.js → astro-CpIIfBs6.js} +1 -1
- package/dist/client/assets/{blade-BUQ9XSm3.js → blade-D3qgnjiV.js} +1 -1
- package/dist/client/assets/{c-DrQixLw7.js → c-Dr6ADN_t.js} +1 -1
- package/dist/client/assets/{cobol-42amjOMh.js → cobol-BIfDE0Hr.js} +1 -1
- package/dist/client/assets/{coffee-CMSEUKyy.js → coffee-DHQ57vfY.js} +1 -1
- package/dist/client/assets/{cpp-C4yJBzl2.js → cpp-CEBY6JOp.js} +1 -1
- package/dist/client/assets/{crystal-DZ27EoiA.js → crystal-D125CSmP.js} +1 -1
- package/dist/client/assets/{css-CdQwkSNm.js → css-CBmrkYSr.js} +1 -1
- package/dist/client/assets/{dist-CBRIe7YG.js → dist-A_mCRD1f.js} +2 -2
- package/dist/client/assets/{edge-J8VemHZC.js → edge-Ccsz7cJW.js} +1 -1
- package/dist/client/assets/{elixir-DU66qSn_.js → elixir-Do6gk14X.js} +1 -1
- package/dist/client/assets/{elm-8cz1JjRg.js → elm-Db22zT4C.js} +1 -1
- package/dist/client/assets/{erb-DMl63J6s.js → erb-MXVqAAJD.js} +1 -1
- package/dist/client/assets/{git-rebase-DjlZL8cj.js → git-rebase-B-LLWBOA.js} +1 -1
- package/dist/client/assets/{glimmer-js-Fu7vOQY-.js → glimmer-js-eWszRU73.js} +1 -1
- package/dist/client/assets/{glimmer-ts-AJljRs0A.js → glimmer-ts-VQmwGqUp.js} +1 -1
- package/dist/client/assets/{glsl-CfodGzSv.js → glsl-B8ilOfAl.js} +1 -1
- package/dist/client/assets/{graphql-C8GPKPx1.js → graphql-DnTqxeOc.js} +1 -1
- package/dist/client/assets/{hack-Gp6OuE21.js → hack-XJsHYSQb.js} +1 -1
- package/dist/client/assets/{haml-BOyG6GfM.js → haml-CQ7Vqzwp.js} +1 -1
- package/dist/client/assets/{handlebars-B9IoVRxd.js → handlebars-C4szooBf.js} +1 -1
- package/dist/client/assets/{html-CFrSukiU.js → html-B6EgAiSd.js} +1 -1
- package/dist/client/assets/{html-derivative-D0_gRK_M.js → html-derivative-DdinogQX.js} +1 -1
- package/dist/client/assets/{http-D4MmFixi.js → http-BSLxCgRq.js} +1 -1
- package/dist/client/assets/{hurl-D1xbk-LS.js → hurl-pOsTwNfp.js} +1 -1
- package/dist/client/assets/{index-DrTbNMzI.css → index-2jfMHAda.css} +1 -1
- package/dist/client/assets/{index-ZIuI5BCP.js → index-BHQ_8mvl.js} +62 -62
- package/dist/client/assets/{java-CfPMY1Dv.js → java-DRQLiiST.js} +1 -1
- package/dist/client/assets/{javascript-B8vNHeqm.js → javascript-DvEK2-47.js} +1 -1
- package/dist/client/assets/{jinja-CF0K8bFV.js → jinja-D2NYJ25y.js} +1 -1
- package/dist/client/assets/{jison-BP7my5TL.js → jison-DDZaLNAp.js} +1 -1
- package/dist/client/assets/{json-TeXNjpMZ.js → json-TGR0NIWd.js} +1 -1
- package/dist/client/assets/{jsx-C86NmHc2.js → jsx-BjUoPYga.js} +1 -1
- package/dist/client/assets/{julia-C58U_aQP.js → julia-C4gjSpFu.js} +1 -1
- package/dist/client/assets/{just-h6Vco8Qu.js → just-H351x5u_.js} +1 -1
- package/dist/client/assets/{latex-DRsNisjT.js → latex-BiTmf6gf.js} +1 -1
- package/dist/client/assets/{liquid-C9jXC9M7.js → liquid-86ufjRy-.js} +1 -1
- package/dist/client/assets/{lua-BUYvdn-F.js → lua-BNxR0F_8.js} +1 -1
- package/dist/client/assets/{marko-BqB4tqw-.js → marko-CvRxpRjM.js} +1 -1
- package/dist/client/assets/{mdc-C8Rs68Nw.js → mdc-CYbAIy2C.js} +1 -1
- package/dist/client/assets/{nginx-Dj6E3HRL.js → nginx-egdgMq-F.js} +1 -1
- package/dist/client/assets/{nim-BizJb4iF.js → nim-CXBJVz_w.js} +1 -1
- package/dist/client/assets/{perl-DnJAtWNn.js → perl-XRfMobzg.js} +1 -1
- package/dist/client/assets/{php-BeY_VEeb.js → php-Br7a8uil.js} +1 -1
- package/dist/client/assets/{pug-DXhFbVDh.js → pug-BVbbUVvy.js} +1 -1
- package/dist/client/assets/{qml-CngzXsz8.js → qml-ByKvrL1j.js} +1 -1
- package/dist/client/assets/{r-BMmy9apu.js → r-mVoV0Ni6.js} +1 -1
- package/dist/client/assets/{razor-kIo5DNUk.js → razor-T5O-9UJL.js} +1 -1
- package/dist/client/assets/{regexp-BIa5IayX.js → regexp-CioRuhuN.js} +1 -1
- package/dist/client/assets/{rst-McWv3WP0.js → rst-V__uTudD.js} +1 -1
- package/dist/client/assets/{ruby-CkenUDKe.js → ruby-C_PuKPTI.js} +1 -1
- package/dist/client/assets/{sas-Dgn9Yrr5.js → sas-D_DqqQH4.js} +1 -1
- package/dist/client/assets/{scss-Tfn9jzBB.js → scss-D-TjzZ4c.js} +1 -1
- package/dist/client/assets/{shellscript-vGpgBWOS.js → shellscript-E5759VHu.js} +1 -1
- package/dist/client/assets/{shellsession-7CA0dOzR.js → shellsession-AESTM-Pv.js} +1 -1
- package/dist/client/assets/{soy-DbBURueN.js → soy-QrbrrcDv.js} +1 -1
- package/dist/client/assets/{sql-BJGtbEM8.js → sql-0M8VcDHD.js} +1 -1
- package/dist/client/assets/{stata-L0kV9FQT.js → stata-CgeIpGtc.js} +1 -1
- package/dist/client/assets/{surrealql-C17jcHRl.js → surrealql-DBGwnZbw.js} +1 -1
- package/dist/client/assets/{svelte-B5_CmVcu.js → svelte-Cv0PvUc_.js} +1 -1
- package/dist/client/assets/{templ-C5f2EORt.js → templ-B9t7xRE4.js} +1 -1
- package/dist/client/assets/{tex-DvaBtCMN.js → tex-DhZZ8dr2.js} +1 -1
- package/dist/client/assets/{ts-tags-DlZzQdBU.js → ts-tags-BFv8sbnd.js} +1 -1
- package/dist/client/assets/{tsx-DaLOIju9.js → tsx-CXC9KSbY.js} +1 -1
- package/dist/client/assets/{twig-BB7320dl.js → twig-CM_OO66r.js} +1 -1
- package/dist/client/assets/{typescript-D8B-VgXj.js → typescript-BdgOTaoD.js} +1 -1
- package/dist/client/assets/{vue-DylGFDrG.js → vue-BnQhjnCm.js} +1 -1
- package/dist/client/assets/{vue-html-Dt8r3B9y.js → vue-html-CNnGecRI.js} +1 -1
- package/dist/client/assets/{vue-vine-DdN02uhY.js → vue-vine-DCuMkRhK.js} +1 -1
- package/dist/client/assets/{xml-CBEuB6I0.js → xml-CbTD7cB8.js} +1 -1
- package/dist/client/assets/{xsl-CuhlgDL5.js → xsl-uOqqo7cf.js} +1 -1
- package/dist/client/assets/{yaml-Da6ymghi.js → yaml-BNrLoH59.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/sw.js +1 -1
- package/package.json +5 -2
- package/src/client/components/analytics/AnalyticsView.tsx +1 -1
- package/src/client/components/analytics/ChartCard.tsx +1 -1
- package/src/client/components/analytics/charts/NodeFleetOverview.tsx +1 -1
- package/src/client/components/chat/AttachmentChips.tsx +4 -4
- package/src/client/components/chat/ChatView.tsx +2 -2
- package/src/client/components/chat/CommandPalette.tsx +1 -1
- package/src/client/components/chat/ElicitationCard.tsx +3 -0
- package/src/client/components/chat/Message.tsx +7 -6
- package/src/client/components/chat/PromptQuestion.tsx +1 -1
- package/src/client/components/chat/TodoCard.tsx +1 -1
- package/src/client/components/chat/ToolGroup.tsx +1 -1
- package/src/client/components/chat/ToolResultRenderer.tsx +2 -2
- package/src/client/components/dashboard/DashboardView.tsx +1 -1
- package/src/client/components/dashboard/ProjectDashboardView.tsx +1 -1
- package/src/client/components/mesh/NodeBadge.tsx +1 -1
- package/src/client/components/mesh/PairingDialog.tsx +2 -2
- package/src/client/components/project-settings/ProjectClaude.tsx +1 -1
- package/src/client/components/project-settings/ProjectEnvironment.tsx +1 -1
- package/src/client/components/project-settings/ProjectGeneral.tsx +1 -1
- package/src/client/components/project-settings/ProjectMcp.tsx +1 -1
- package/src/client/components/project-settings/ProjectMemory.tsx +3 -3
- package/src/client/components/project-settings/ProjectPermissions.tsx +1 -1
- package/src/client/components/project-settings/ProjectPlugins.tsx +1 -1
- package/src/client/components/project-settings/ProjectRules.tsx +1 -1
- package/src/client/components/project-settings/ProjectSettingsView.tsx +1 -1
- package/src/client/components/project-settings/ProjectSkills.tsx +1 -1
- package/src/client/components/settings/Appearance.tsx +1 -1
- package/src/client/components/settings/BudgetSettings.tsx +1 -1
- package/src/client/components/settings/ClaudeSettings.tsx +1 -1
- package/src/client/components/settings/Editor.tsx +1 -1
- package/src/client/components/settings/Environment.tsx +1 -1
- package/src/client/components/settings/GlobalMcp.tsx +2 -2
- package/src/client/components/settings/GlobalPlugins.tsx +2 -2
- package/src/client/components/settings/GlobalRules.tsx +1 -1
- package/src/client/components/settings/GlobalSkills.tsx +1 -1
- package/src/client/components/settings/MeshStatus.tsx +1 -1
- package/src/client/components/settings/SkillMarketplace.tsx +1 -1
- package/src/client/components/settings/ThemeWizard.tsx +1 -1
- package/src/client/components/settings/mcp-shared.tsx +1 -1
- package/src/client/components/settings/skill-shared.tsx +2 -2
- package/src/client/components/setup/SetupWizard.tsx +5 -0
- package/src/client/components/sidebar/AddProjectModal.tsx +2 -2
- package/src/client/components/sidebar/NodeSettingsModal.tsx +2 -2
- package/src/client/components/sidebar/ProjectRail.tsx +1 -1
- package/src/client/components/sidebar/SessionList.tsx +2 -2
- package/src/client/components/sidebar/Sidebar.tsx +1 -1
- package/src/client/components/sidebar/UserIsland.tsx +1 -1
- package/src/client/components/ui/CommandPalette.tsx +1 -1
- package/src/client/components/ui/IconPicker.tsx +3 -1
- package/src/client/components/ui/KeyboardShortcuts.tsx +1 -1
- package/src/client/components/ui/UpdateBanner.tsx +1 -1
- package/src/client/components/workspace/BookmarksView.tsx +2 -2
- package/src/client/components/workspace/FileBrowser.tsx +1 -1
- package/src/client/components/workspace/FileTree.tsx +1 -1
- package/src/client/components/workspace/NoteCard.tsx +2 -1
- package/src/client/components/workspace/NotesView.tsx +1 -1
- package/src/client/components/workspace/ScheduledTasksView.tsx +1 -1
- package/src/client/components/workspace/TaskCard.tsx +2 -1
- package/src/client/components/workspace/TaskEditModal.tsx +2 -2
- package/src/client/components/workspace/TerminalInstance.tsx +1 -1
- package/src/client/hooks/useAnalytics.ts +7 -7
- package/src/client/hooks/useAttachments.ts +49 -16
- package/src/client/hooks/useBookmarks.ts +1 -1
- package/src/client/hooks/useEditorConfig.ts +1 -1
- package/src/client/hooks/useFocusTrap.ts +4 -2
- package/src/client/hooks/useIdleDetection.ts +6 -0
- package/src/client/hooks/useMesh.ts +1 -1
- package/src/client/hooks/useProjectSettings.ts +1 -1
- package/src/client/hooks/useProjects.ts +3 -3
- package/src/client/hooks/useSession.ts +31 -32
- package/src/client/hooks/useSkills.ts +2 -2
- package/src/client/hooks/useSpinnerVerb.ts +1 -1
- package/src/client/hooks/useVoiceRecorder.ts +5 -2
- package/src/client/hooks/useWebSocket.ts +1 -1
- package/src/client/providers/WebSocketProvider.tsx +9 -1
- package/src/client/router.tsx +1 -1
- package/src/client/stores/analytics.ts +1 -1
- package/src/client/stores/bookmarks.ts +1 -1
- package/src/client/stores/mesh.ts +1 -1
- package/src/client/stores/session.ts +1 -11
- package/src/client/stores/sidebar.ts +1 -1
- package/src/client/styles/global.css +12 -0
- package/src/server/analytics/engine.ts +1 -1
- package/src/server/auth/passphrase.ts +16 -6
- package/src/server/config.ts +2 -2
- package/src/server/daemon.ts +32 -12
- package/src/server/features/ralph-loop.ts +1 -1
- package/src/server/features/scheduler.ts +1 -1
- package/src/server/features/sticky-notes.ts +1 -1
- package/src/server/handlers/analytics.ts +1 -1
- package/src/server/handlers/attachment.ts +4 -3
- package/src/server/handlers/bookmarks.ts +1 -1
- package/src/server/handlers/chat.ts +1 -1
- package/src/server/handlers/editor.ts +1 -1
- package/src/server/handlers/fs.ts +1 -1
- package/src/server/handlers/loop.ts +1 -1
- package/src/server/handlers/memory.ts +1 -1
- package/src/server/handlers/mesh.ts +3 -3
- package/src/server/handlers/notes.ts +1 -1
- package/src/server/handlers/plugins.ts +1 -1
- package/src/server/handlers/project-settings.ts +1 -1
- package/src/server/handlers/scheduler.ts +1 -1
- package/src/server/handlers/session.ts +2 -1
- package/src/server/handlers/settings.ts +4 -4
- package/src/server/handlers/skills.ts +5 -5
- package/src/server/handlers/terminal.ts +12 -1
- package/src/server/handlers/themes.ts +1 -1
- package/src/server/handlers/update.ts +1 -1
- package/src/server/identity.ts +3 -1
- package/src/server/index.ts +2 -2
- package/src/server/mesh/connector.ts +1 -1
- package/src/server/mesh/peers.ts +1 -1
- package/src/server/mesh/proxy.ts +1 -1
- package/src/server/mesh/session-sync.ts +1 -1
- package/src/server/project/bookmarks.ts +1 -1
- package/src/server/project/context-breakdown.ts +1 -1
- package/src/server/project/file-browser.ts +1 -1
- package/src/server/project/registry.ts +1 -1
- package/src/server/project/sdk-bridge.ts +28 -2
- package/src/server/project/session.ts +7 -6
- package/src/server/tls.ts +15 -1
- package/src/server/tui.ts +2 -2
- package/src/server/ws/router.ts +1 -1
- package/tsconfig.json +1 -1
- package/vite.config.ts +1 -1
|
@@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
|
|
|
2
2
|
import { X, Plus } from "lucide-react";
|
|
3
3
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
4
4
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
5
|
-
import type { ProjectSettings } from "
|
|
5
|
+
import type { ProjectSettings } from "#shared";
|
|
6
6
|
|
|
7
7
|
function RuleList({
|
|
8
8
|
rules,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect } from "react";
|
|
2
2
|
import { Blocks, Loader2 } from "lucide-react";
|
|
3
3
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
4
|
-
import type { ProjectSettings, ServerMessage, PluginInfo } from "
|
|
4
|
+
import type { ProjectSettings, ServerMessage, PluginInfo } from "#shared";
|
|
5
5
|
|
|
6
6
|
interface ProjectPluginsProps {
|
|
7
7
|
settings: ProjectSettings;
|
|
@@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
|
|
|
2
2
|
import { X, Plus, ChevronDown, ChevronRight, ExternalLink } from "lucide-react";
|
|
3
3
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
4
4
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
5
|
-
import type { ProjectSettings } from "
|
|
5
|
+
import type { ProjectSettings } from "#shared";
|
|
6
6
|
|
|
7
7
|
interface RuleEntry {
|
|
8
8
|
filename: string;
|
|
@@ -2,7 +2,7 @@ import { useSidebar } from "../../hooks/useSidebar";
|
|
|
2
2
|
import { useProjectSettings } from "../../hooks/useProjectSettings";
|
|
3
3
|
import { Menu } from "lucide-react";
|
|
4
4
|
import type { ProjectSettingsSection } from "../../stores/sidebar";
|
|
5
|
-
import type { ProjectSettings } from "
|
|
5
|
+
import type { ProjectSettings } from "#shared";
|
|
6
6
|
import { ProjectGeneral } from "./ProjectGeneral";
|
|
7
7
|
import { ProjectClaude } from "./ProjectClaude";
|
|
8
8
|
import { ProjectEnvironment } from "./ProjectEnvironment";
|
|
@@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
|
|
|
2
2
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
3
3
|
import { SkillMarketplace } from "../settings/SkillMarketplace";
|
|
4
4
|
import { SkillItem, SkillViewModal } from "../settings/skill-shared";
|
|
5
|
-
import type { ProjectSettings, ServerMessage } from "
|
|
5
|
+
import type { ProjectSettings, ServerMessage } from "#shared";
|
|
6
6
|
|
|
7
7
|
interface ProjectSkillsProps {
|
|
8
8
|
settings: ProjectSettings;
|
|
@@ -6,7 +6,7 @@ import type { ThemeEntry } from "../../themes/index";
|
|
|
6
6
|
import { ThemeWizard } from "./ThemeWizard";
|
|
7
7
|
import { ThemeSwatches } from "./ThemePreview";
|
|
8
8
|
import { ContextMenu, useContextMenu } from "../ui/ContextMenu";
|
|
9
|
-
import type { ServerMessage } from "
|
|
9
|
+
import type { ServerMessage } from "#shared";
|
|
10
10
|
|
|
11
11
|
var SWATCH_KEYS = [
|
|
12
12
|
"base00", "base01", "base02", "base03",
|
|
@@ -4,7 +4,7 @@ import { useWebSocket } from "../../hooks/useWebSocket";
|
|
|
4
4
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
5
5
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
6
6
|
import { getSessionStore, setBudgetStatus } from "../../stores/session";
|
|
7
|
-
import type { ServerMessage, SettingsDataMessage, SettingsUpdateMessage } from "
|
|
7
|
+
import type { ServerMessage, SettingsDataMessage, SettingsUpdateMessage } from "#shared";
|
|
8
8
|
|
|
9
9
|
var ENFORCEMENT_OPTIONS = [
|
|
10
10
|
{ id: "warning", label: "Warning", description: "Shows a warning but does not block" },
|
|
@@ -3,7 +3,7 @@ import { ExternalLink } from "lucide-react";
|
|
|
3
3
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
4
4
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
5
5
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
6
|
-
import type { ServerMessage, SettingsDataMessage, SettingsUpdateMessage } from "
|
|
6
|
+
import type { ServerMessage, SettingsDataMessage, SettingsUpdateMessage } from "#shared";
|
|
7
7
|
|
|
8
8
|
var CLAUDE_MODELS = [
|
|
9
9
|
{ id: "claude-opus-4-6", label: "Claude Opus 4.6" },
|
|
@@ -2,7 +2,7 @@ import { useEffect, useRef, useState } from "react";
|
|
|
2
2
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
3
3
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
4
4
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
5
|
-
import type { ServerMessage, SettingsDataMessage, SettingsUpdateMessage } from "
|
|
5
|
+
import type { ServerMessage, SettingsDataMessage, SettingsUpdateMessage } from "#shared";
|
|
6
6
|
|
|
7
7
|
var IDE_OPTIONS = [
|
|
8
8
|
{ id: "vscode", label: "VS Code" },
|
|
@@ -4,7 +4,7 @@ import { useWebSocket } from "../../hooks/useWebSocket";
|
|
|
4
4
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
5
5
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
6
6
|
import { findDuplicateKeys } from "../../utils/findDuplicateKeys";
|
|
7
|
-
import type { ServerMessage, SettingsDataMessage } from "
|
|
7
|
+
import type { ServerMessage, SettingsDataMessage } from "#shared";
|
|
8
8
|
|
|
9
9
|
interface EnvEntry {
|
|
10
10
|
id: string;
|
|
@@ -3,7 +3,7 @@ import { Plus, Pencil, Trash2, ExternalLink } from "lucide-react";
|
|
|
3
3
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
4
4
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
5
5
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
6
|
-
import type { ServerMessage, SettingsDataMessage, McpServerConfig } from "
|
|
6
|
+
import type { ServerMessage, SettingsDataMessage, McpServerConfig } from "#shared";
|
|
7
7
|
import {
|
|
8
8
|
type FormState,
|
|
9
9
|
emptyForm,
|
|
@@ -99,7 +99,7 @@ export function GlobalMcp() {
|
|
|
99
99
|
save.startSave();
|
|
100
100
|
send({
|
|
101
101
|
type: "settings:update",
|
|
102
|
-
settings: { mcpServers: servers } as unknown as import("
|
|
102
|
+
settings: { mcpServers: servers } as unknown as import("#shared").SettingsUpdateMessage["settings"],
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -12,7 +12,7 @@ import type {
|
|
|
12
12
|
PluginError,
|
|
13
13
|
PluginMarketplaceInfo,
|
|
14
14
|
MarketplacePluginEntry,
|
|
15
|
-
} from "
|
|
15
|
+
} from "#shared";
|
|
16
16
|
|
|
17
17
|
export function GlobalPlugins() {
|
|
18
18
|
var { send, subscribe, unsubscribe } = useWebSocket();
|
|
@@ -503,7 +503,7 @@ function PluginDetailModal({ plugin, onClose }: { plugin: PluginDetails; onClose
|
|
|
503
503
|
|
|
504
504
|
return (
|
|
505
505
|
<div className="fixed inset-0 z-50 flex items-center justify-center" role="dialog" aria-modal="true" aria-label={"Plugin: " + plugin.name}>
|
|
506
|
-
<div className="absolute inset-0 bg-
|
|
506
|
+
<div className="absolute inset-0 bg-base-content/50" onClick={onClose} />
|
|
507
507
|
<div className="relative bg-base-200 border border-base-content/15 rounded-2xl shadow-2xl w-full max-w-2xl mx-4 max-h-[80vh] flex flex-col overflow-hidden">
|
|
508
508
|
<div className="flex items-center justify-between px-5 py-4 border-b border-base-content/15 flex-shrink-0">
|
|
509
509
|
<div className="flex items-center gap-2.5 min-w-0">
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect } from "react";
|
|
2
2
|
import { ChevronDown, ChevronRight, ExternalLink } from "lucide-react";
|
|
3
3
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
4
|
-
import type { ServerMessage, SettingsDataMessage } from "
|
|
4
|
+
import type { ServerMessage, SettingsDataMessage } from "#shared";
|
|
5
5
|
|
|
6
6
|
interface RuleEntry {
|
|
7
7
|
filename: string;
|
|
@@ -3,7 +3,7 @@ import { ExternalLink } from "lucide-react";
|
|
|
3
3
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
4
4
|
import { SkillMarketplace } from "./SkillMarketplace";
|
|
5
5
|
import { SkillItem, SkillActions, SkillViewModal } from "./skill-shared";
|
|
6
|
-
import type { ServerMessage, SkillInfo, SettingsDataMessage } from "
|
|
6
|
+
import type { ServerMessage, SkillInfo, SettingsDataMessage } from "#shared";
|
|
7
7
|
|
|
8
8
|
export function GlobalSkills() {
|
|
9
9
|
var { send, subscribe, unsubscribe } = useWebSocket();
|
|
@@ -3,7 +3,7 @@ import { Plus, CircleDot, Circle, RefreshCw, Loader2 } from "lucide-react";
|
|
|
3
3
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
4
4
|
import { useMesh } from "../../hooks/useMesh";
|
|
5
5
|
import { PairingDialog } from "../mesh/PairingDialog";
|
|
6
|
-
import type { NodeInfo } from "
|
|
6
|
+
import type { NodeInfo } from "#shared";
|
|
7
7
|
|
|
8
8
|
interface NodeRowProps {
|
|
9
9
|
node: NodeInfo;
|
|
@@ -2,7 +2,7 @@ import { useState, useEffect, useRef } from "react";
|
|
|
2
2
|
import { Search, Download, ChevronDown, Loader2 } from "lucide-react";
|
|
3
3
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
4
4
|
import { useProjects } from "../../hooks/useProjects";
|
|
5
|
-
import type { ServerMessage, MarketplaceSkill } from "
|
|
5
|
+
import type { ServerMessage, MarketplaceSkill } from "#shared";
|
|
6
6
|
|
|
7
7
|
interface SkillMarketplaceProps {
|
|
8
8
|
defaultScope?: "global" | "project";
|
|
@@ -161,7 +161,7 @@ export function ThemeWizard(props: ThemeWizardProps) {
|
|
|
161
161
|
var canProceed = step === 1 ? name.trim().length > 0 : true;
|
|
162
162
|
|
|
163
163
|
return createPortal(
|
|
164
|
-
<div className="fixed inset-0 z-[9999] flex items-center justify-center bg-
|
|
164
|
+
<div className="fixed inset-0 z-[9999] flex items-center justify-center bg-base-content/60 backdrop-blur-sm" onClick={props.onClose}>
|
|
165
165
|
<div
|
|
166
166
|
className="bg-base-200 border border-base-content/15 rounded-2xl shadow-2xl w-[90vw] max-w-[860px] max-h-[85vh] flex flex-col overflow-hidden"
|
|
167
167
|
onClick={function (e) { e.stopPropagation(); }}
|
|
@@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
|
|
|
2
2
|
import { Trash2, RefreshCw, X, Loader2, FileText } from "lucide-react";
|
|
3
3
|
import Markdown from "react-markdown";
|
|
4
4
|
import remarkGfm from "remark-gfm";
|
|
5
|
-
import type { SkillInfo } from "
|
|
5
|
+
import type { SkillInfo } from "#shared";
|
|
6
6
|
|
|
7
7
|
function parseFrontmatter(content: string): { meta: Record<string, string>; body: string } {
|
|
8
8
|
var match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\s*\r?\n?([\s\S]*)$/);
|
|
@@ -136,7 +136,7 @@ export function SkillViewModal({ path, content, onClose }: { path: string; conte
|
|
|
136
136
|
|
|
137
137
|
return (
|
|
138
138
|
<div className="fixed inset-0 z-50 flex items-center justify-center" role="dialog" aria-modal="true" aria-label={"Skill: " + (parsed.meta.name || path)}>
|
|
139
|
-
<div className="absolute inset-0 bg-
|
|
139
|
+
<div className="absolute inset-0 bg-base-content/50" onClick={onClose} />
|
|
140
140
|
<div className="relative bg-base-200 border border-base-content/15 rounded-2xl shadow-2xl w-full max-w-2xl mx-4 max-h-[80vh] flex flex-col overflow-hidden">
|
|
141
141
|
<div className="flex items-center justify-between px-5 py-4 border-b border-base-content/15 flex-shrink-0">
|
|
142
142
|
<div className="flex items-center gap-2 min-w-0">
|
|
@@ -352,6 +352,7 @@ function NameStep(props: NameStepProps) {
|
|
|
352
352
|
value={props.value}
|
|
353
353
|
onChange={function (e) { props.onChange(e.target.value); }}
|
|
354
354
|
placeholder="my-laptop"
|
|
355
|
+
aria-label="Machine name"
|
|
355
356
|
className="flex-1 bg-transparent text-base-content font-mono text-[14px] outline-none"
|
|
356
357
|
autoFocus
|
|
357
358
|
spellCheck={false}
|
|
@@ -518,6 +519,7 @@ function SecurityStep(props: SecurityStepProps) {
|
|
|
518
519
|
value={props.passphrase}
|
|
519
520
|
onChange={function (e) { props.onPassphraseChange(e.target.value); }}
|
|
520
521
|
placeholder="Leave blank to skip"
|
|
522
|
+
aria-label="Passphrase"
|
|
521
523
|
className="input input-bordered w-full bg-base-300 text-base-content text-[14px] focus:border-primary"
|
|
522
524
|
autoFocus
|
|
523
525
|
/>
|
|
@@ -544,6 +546,7 @@ function SecurityStep(props: SecurityStepProps) {
|
|
|
544
546
|
value={props.passphraseConfirm}
|
|
545
547
|
onChange={function (e) { props.onConfirmChange(e.target.value); }}
|
|
546
548
|
placeholder="Repeat passphrase"
|
|
549
|
+
aria-label="Confirm passphrase"
|
|
547
550
|
className={
|
|
548
551
|
"input input-bordered w-full bg-base-300 text-base-content text-[14px] focus:border-primary " +
|
|
549
552
|
(props.error ? "border-error" : "")
|
|
@@ -595,6 +598,7 @@ function ProjectStep(props: ProjectStepProps) {
|
|
|
595
598
|
value={props.path}
|
|
596
599
|
onChange={function (e) { props.onPathChange(e.target.value); }}
|
|
597
600
|
placeholder="/home/you/projects/my-app"
|
|
601
|
+
aria-label="Project path"
|
|
598
602
|
className="input input-bordered w-full bg-base-300 text-base-content font-mono text-[14px] focus:border-primary"
|
|
599
603
|
autoFocus
|
|
600
604
|
spellCheck={false}
|
|
@@ -612,6 +616,7 @@ function ProjectStep(props: ProjectStepProps) {
|
|
|
612
616
|
value={props.title}
|
|
613
617
|
onChange={function (e) { props.onTitleChange(e.target.value); }}
|
|
614
618
|
placeholder={props.path ? (props.path.replace(/\/+$/, "").split("/").pop() || "My App") : "My App"}
|
|
619
|
+
aria-label="Display name"
|
|
615
620
|
className="input input-bordered w-full bg-base-300 text-base-content text-[14px] focus:border-primary"
|
|
616
621
|
/>
|
|
617
622
|
</fieldset>
|
|
@@ -3,7 +3,7 @@ import { useFocusTrap } from "../../hooks/useFocusTrap";
|
|
|
3
3
|
import { X, FolderOpen, FileText, Loader2 } from "lucide-react";
|
|
4
4
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
5
5
|
import { useProjects } from "../../hooks/useProjects";
|
|
6
|
-
import type { ServerMessage } from "
|
|
6
|
+
import type { ServerMessage } from "#shared";
|
|
7
7
|
|
|
8
8
|
interface BrowseEntry {
|
|
9
9
|
name: string;
|
|
@@ -285,7 +285,7 @@ export function AddProjectModal({ isOpen, onClose }: AddProjectModalProps) {
|
|
|
285
285
|
|
|
286
286
|
return (
|
|
287
287
|
<div ref={modalRef} className="fixed inset-0 z-[9999] flex items-center justify-center" role="dialog" aria-modal="true" aria-label="Add Project">
|
|
288
|
-
<div className="absolute inset-0 bg-
|
|
288
|
+
<div className="absolute inset-0 bg-base-content/50" onClick={onClose} />
|
|
289
289
|
<div className="relative bg-base-200 border border-base-content/15 rounded-2xl shadow-2xl w-full max-w-3xl mx-4 overflow-hidden">
|
|
290
290
|
<div className="flex items-center justify-between px-5 py-4 border-b border-base-content/15">
|
|
291
291
|
<h2 className="text-[15px] font-mono font-bold text-base-content">Add Project</h2>
|
|
@@ -5,7 +5,7 @@ import { useWebSocket } from "../../hooks/useWebSocket";
|
|
|
5
5
|
import { useMesh } from "../../hooks/useMesh";
|
|
6
6
|
import { useSaveState } from "../../hooks/useSaveState";
|
|
7
7
|
import { SaveFooter } from "../ui/SaveFooter";
|
|
8
|
-
import type { ServerMessage, SettingsDataMessage, LatticeConfig } from "
|
|
8
|
+
import type { ServerMessage, SettingsDataMessage, LatticeConfig } from "#shared";
|
|
9
9
|
|
|
10
10
|
interface NodeSettingsModalProps {
|
|
11
11
|
isOpen: boolean;
|
|
@@ -89,7 +89,7 @@ export function NodeSettingsModal({ isOpen, onClose }: NodeSettingsModalProps) {
|
|
|
89
89
|
|
|
90
90
|
return (
|
|
91
91
|
<div ref={modalRef} className="fixed inset-0 z-[9999] flex items-center justify-center" role="dialog" aria-modal="true" aria-label="Node Settings">
|
|
92
|
-
<div className="absolute inset-0 bg-
|
|
92
|
+
<div className="absolute inset-0 bg-base-content/50" onClick={onClose} />
|
|
93
93
|
<div className="relative bg-base-200 border border-base-content/15 rounded-2xl shadow-2xl w-full max-w-md mx-4 overflow-hidden">
|
|
94
94
|
<div className="flex items-center justify-between px-5 py-4 border-b border-base-content/15">
|
|
95
95
|
<h2 className="text-[15px] font-mono font-bold text-base-content">Node Settings</h2>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState } from "react";
|
|
2
2
|
import { createPortal } from "react-dom";
|
|
3
3
|
import { Plus, Settings, PlusCircle, Trash2, Unplug, RefreshCw } from "lucide-react";
|
|
4
|
-
import type { ProjectInfo, NodeInfo } from "
|
|
4
|
+
import type { ProjectInfo, NodeInfo } from "#shared";
|
|
5
5
|
import { LatticeLogomark } from "../ui/LatticeLogomark";
|
|
6
6
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
7
7
|
import { useSidebar } from "../../hooks/useSidebar";
|
|
@@ -2,8 +2,8 @@ import { useEffect, useRef, useState, useMemo, useCallback } from "react";
|
|
|
2
2
|
import { createPortal } from "react-dom";
|
|
3
3
|
import { Clock, MessageSquare, Cpu, DollarSign, Pencil, Trash2 } from "lucide-react";
|
|
4
4
|
import { ContextMenu, useContextMenu } from "../ui/ContextMenu";
|
|
5
|
-
import type { SessionSummary, SessionPreview, SessionListMessage, SessionCreatedMessage, SessionPreviewMessage } from "
|
|
6
|
-
import type { ServerMessage } from "
|
|
5
|
+
import type { SessionSummary, SessionPreview, SessionListMessage, SessionCreatedMessage, SessionPreviewMessage } from "#shared";
|
|
6
|
+
import type { ServerMessage } from "#shared";
|
|
7
7
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
8
8
|
import { useTimeTick } from "../../hooks/useTimeTick";
|
|
9
9
|
import { markSessionHasUpdates, sessionHasUpdates, markSessionRead } from "../../stores/session";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect, useRef } from "react";
|
|
2
2
|
import { Plus, ChevronDown, Search, LayoutDashboard, FolderOpen, TerminalSquare, StickyNote, Calendar, BarChart3, Bookmark, Settings, Network } from "lucide-react";
|
|
3
3
|
import { LatticeLogomark } from "../ui/LatticeLogomark";
|
|
4
|
-
import type { SessionSummary, ServerMessage, SettingsDataMessage } from "
|
|
4
|
+
import type { SessionSummary, ServerMessage, SettingsDataMessage } from "#shared";
|
|
5
5
|
import type { DateRange } from "./SessionList";
|
|
6
6
|
import { useProjects } from "../../hooks/useProjects";
|
|
7
7
|
import { useMesh } from "../../hooks/useMesh";
|
|
@@ -8,7 +8,7 @@ import { useWebSocket } from "../../hooks/useWebSocket";
|
|
|
8
8
|
import { getSessionStore, loadCachedRateLimits, updateRateLimit } from "../../stores/session";
|
|
9
9
|
import type { RateLimitEntry } from "../../stores/session";
|
|
10
10
|
import pkg from "../../../../package.json";
|
|
11
|
-
import type { ServerMessage } from "
|
|
11
|
+
import type { ServerMessage } from "#shared";
|
|
12
12
|
|
|
13
13
|
interface UserIslandProps {
|
|
14
14
|
nodeName: string;
|
|
@@ -248,7 +248,7 @@ export function CommandPalette() {
|
|
|
248
248
|
|
|
249
249
|
return (
|
|
250
250
|
<div className="fixed inset-0 z-[9998] flex items-start justify-center pt-[15vh]" onClick={close}>
|
|
251
|
-
<div className="absolute inset-0 bg-
|
|
251
|
+
<div className="absolute inset-0 bg-base-content/50" />
|
|
252
252
|
<div
|
|
253
253
|
className="relative w-full max-w-[520px] mx-4 bg-base-200 border border-base-content/10 rounded-xl shadow-2xl overflow-hidden"
|
|
254
254
|
onClick={function (e) { e.stopPropagation(); }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState, useMemo } from "react";
|
|
2
2
|
import { icons } from "lucide-react";
|
|
3
|
-
import type { ProjectIcon } from "
|
|
3
|
+
import type { ProjectIcon } from "#shared";
|
|
4
4
|
|
|
5
5
|
type Tab = "lucide" | "text" | "upload";
|
|
6
6
|
|
|
@@ -110,6 +110,7 @@ export function IconPicker({ value, onChange }: IconPickerProps) {
|
|
|
110
110
|
value={search}
|
|
111
111
|
onChange={function (e) { setSearch(e.target.value); }}
|
|
112
112
|
placeholder="Search icons..."
|
|
113
|
+
aria-label="Search icons"
|
|
113
114
|
className="w-full h-8 px-3 bg-base-300 border border-base-content/15 rounded-xl text-base-content text-[12px] focus:border-primary focus-visible:outline-none transition-colors duration-[120ms]"
|
|
114
115
|
/>
|
|
115
116
|
<div className="grid grid-cols-10 gap-1 max-h-48 overflow-y-auto">
|
|
@@ -148,6 +149,7 @@ export function IconPicker({ value, onChange }: IconPickerProps) {
|
|
|
148
149
|
}
|
|
149
150
|
}}
|
|
150
151
|
placeholder="1-2 chars"
|
|
152
|
+
aria-label="Icon text"
|
|
151
153
|
className="flex-1 h-9 px-3 bg-base-300 border border-base-content/15 rounded-xl text-base-content text-[13px] focus:border-primary focus-visible:outline-none transition-colors duration-[120ms]"
|
|
152
154
|
/>
|
|
153
155
|
<input
|
|
@@ -76,7 +76,7 @@ export function KeyboardShortcuts() {
|
|
|
76
76
|
|
|
77
77
|
return (
|
|
78
78
|
<div className="fixed inset-0 z-[9998] flex items-center justify-center" onClick={function () { setOpen(false); }}>
|
|
79
|
-
<div className="absolute inset-0 bg-
|
|
79
|
+
<div className="absolute inset-0 bg-base-content/50" />
|
|
80
80
|
<div
|
|
81
81
|
className="relative w-full max-w-[540px] mx-4 bg-base-200 border border-base-content/15 rounded-2xl shadow-xl overflow-hidden"
|
|
82
82
|
onClick={function (e) { e.stopPropagation(); }}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect } from "react";
|
|
2
2
|
import { ArrowUpCircle, X, Loader2, ExternalLink, RefreshCw } from "lucide-react";
|
|
3
3
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
4
|
-
import type { ServerMessage } from "
|
|
4
|
+
import type { ServerMessage } from "#shared";
|
|
5
5
|
|
|
6
6
|
interface UpdateState {
|
|
7
7
|
currentVersion: string;
|
|
@@ -4,7 +4,7 @@ import { useBookmarks } from "../../hooks/useBookmarks";
|
|
|
4
4
|
import { useSession } from "../../hooks/useSession";
|
|
5
5
|
import { useProjects } from "../../hooks/useProjects";
|
|
6
6
|
import { openTab } from "../../stores/workspace";
|
|
7
|
-
import type { MessageBookmark } from "
|
|
7
|
+
import type { MessageBookmark } from "#shared";
|
|
8
8
|
|
|
9
9
|
function relativeTime(ts: number): string {
|
|
10
10
|
var diff = Date.now() - ts;
|
|
@@ -80,7 +80,7 @@ export function BookmarksView() {
|
|
|
80
80
|
setTimeout(function () {
|
|
81
81
|
var el = document.getElementById("msg-" + bm.messageUuid);
|
|
82
82
|
if (el) {
|
|
83
|
-
el.scrollIntoView({ behavior: "smooth", block: "center" });
|
|
83
|
+
el.scrollIntoView({ behavior: window.matchMedia("(prefers-reduced-motion: reduce)").matches ? "auto" : "smooth", block: "center" });
|
|
84
84
|
el.classList.add("ring-2", "ring-warning/40");
|
|
85
85
|
setTimeout(function () { el!.classList.remove("ring-2", "ring-warning/40"); }, 2000);
|
|
86
86
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
import { ArrowLeft, FileCode, FileX } from "lucide-react";
|
|
3
|
-
import type { FsListResultMessage, FsReadResultMessage, ServerMessage } from "
|
|
3
|
+
import type { FsListResultMessage, FsReadResultMessage, ServerMessage } from "#shared";
|
|
4
4
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
5
5
|
import { useSidebar } from "../../hooks/useSidebar";
|
|
6
6
|
import { useProjects } from "../../hooks/useProjects";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState, useRef } from "react";
|
|
2
2
|
import { Trash2 } from "lucide-react";
|
|
3
|
-
import type { StickyNote } from "
|
|
3
|
+
import type { StickyNote } from "#shared";
|
|
4
4
|
|
|
5
5
|
interface NoteCardProps {
|
|
6
6
|
note: StickyNote;
|
|
@@ -74,6 +74,7 @@ export function NoteCard(props: NoteCardProps) {
|
|
|
74
74
|
onBlur={handleBlur}
|
|
75
75
|
onKeyDown={handleKeyDown}
|
|
76
76
|
placeholder="Type your note..."
|
|
77
|
+
aria-label="Note content"
|
|
77
78
|
className="textarea textarea-bordered w-full min-h-[80px] bg-base-300 text-base-content text-[13px] resize-y leading-relaxed"
|
|
78
79
|
/>
|
|
79
80
|
) : (
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from "react";
|
|
2
2
|
import { StickyNote as StickyNoteIcon } from "lucide-react";
|
|
3
|
-
import type { StickyNote, ServerMessage } from "
|
|
3
|
+
import type { StickyNote, ServerMessage } from "#shared";
|
|
4
4
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
5
5
|
import { useSession } from "../../hooks/useSession";
|
|
6
6
|
import { useOnline } from "../../hooks/useOnline";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from "react";
|
|
2
2
|
import { Calendar } from "lucide-react";
|
|
3
|
-
import type { ScheduledTask, ServerMessage } from "
|
|
3
|
+
import type { ScheduledTask, ServerMessage } from "#shared";
|
|
4
4
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
5
5
|
import { useSession } from "../../hooks/useSession";
|
|
6
6
|
import { useOnline } from "../../hooks/useOnline";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState } from "react";
|
|
2
2
|
import { ChevronDown, ChevronRight, Pencil, Trash2 } from "lucide-react";
|
|
3
3
|
import cronstrue from "cronstrue";
|
|
4
|
-
import type { ScheduledTask } from "
|
|
4
|
+
import type { ScheduledTask } from "#shared";
|
|
5
5
|
|
|
6
6
|
interface TaskCardProps {
|
|
7
7
|
task: ScheduledTask;
|
|
@@ -97,6 +97,7 @@ export function TaskCard(props: TaskCardProps) {
|
|
|
97
97
|
className="toggle toggle-primary toggle-xs"
|
|
98
98
|
checked={task.enabled}
|
|
99
99
|
disabled={disabled}
|
|
100
|
+
aria-label={"Toggle " + task.name}
|
|
100
101
|
onChange={function () {}}
|
|
101
102
|
/>
|
|
102
103
|
</label>
|
|
@@ -2,7 +2,7 @@ import { useState, useRef, useCallback } from "react";
|
|
|
2
2
|
import { X } from "lucide-react";
|
|
3
3
|
import { useFocusTrap } from "../../hooks/useFocusTrap";
|
|
4
4
|
import cronstrue from "cronstrue";
|
|
5
|
-
import type { ScheduledTask } from "
|
|
5
|
+
import type { ScheduledTask } from "#shared";
|
|
6
6
|
|
|
7
7
|
interface TaskEditModalProps {
|
|
8
8
|
task: ScheduledTask | null;
|
|
@@ -46,7 +46,7 @@ export function TaskEditModal(props: TaskEditModalProps) {
|
|
|
46
46
|
return (
|
|
47
47
|
<div
|
|
48
48
|
ref={modalRef}
|
|
49
|
-
className="fixed inset-0 z-[9999] flex items-center justify-center bg-
|
|
49
|
+
className="fixed inset-0 z-[9999] flex items-center justify-center bg-base-content/50 backdrop-blur-sm"
|
|
50
50
|
onClick={handleBackdrop}
|
|
51
51
|
role="dialog"
|
|
52
52
|
aria-modal="true"
|
|
@@ -6,7 +6,7 @@ import { SearchAddon } from "@xterm/addon-search";
|
|
|
6
6
|
import "@xterm/xterm/css/xterm.css";
|
|
7
7
|
import { useWebSocket } from "../../hooks/useWebSocket";
|
|
8
8
|
import { useSidebar } from "../../hooks/useSidebar";
|
|
9
|
-
import type { ServerMessage, TerminalCreatedMessage, TerminalOutputMessage, TerminalExitedMessage } from "
|
|
9
|
+
import type { ServerMessage, TerminalCreatedMessage, TerminalOutputMessage, TerminalExitedMessage } from "#shared";
|
|
10
10
|
|
|
11
11
|
function getXtermTheme(): Record<string, string> {
|
|
12
12
|
var root = document.documentElement;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { useEffect, useRef } from "react";
|
|
1
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
2
2
|
import { useStore } from "@tanstack/react-store";
|
|
3
3
|
import { useWebSocket } from "./useWebSocket";
|
|
4
|
-
import type { ServerMessage } from "
|
|
5
|
-
import type { AnalyticsPeriod, AnalyticsScope, AnalyticsSectionName } from "
|
|
6
|
-
import type { AnalyticsPayload } from "
|
|
4
|
+
import type { ServerMessage } from "#shared";
|
|
5
|
+
import type { AnalyticsPeriod, AnalyticsScope, AnalyticsSectionName } from "#shared";
|
|
6
|
+
import type { AnalyticsPayload } from "#shared";
|
|
7
7
|
import {
|
|
8
8
|
getAnalyticsStore,
|
|
9
9
|
mergeAnalyticsSection,
|
|
@@ -26,7 +26,7 @@ export function useAnalytics(): AnalyticsState & {
|
|
|
26
26
|
var sendRef = useRef(send);
|
|
27
27
|
sendRef.current = send;
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
var requestAnalytics = useCallback(function (forceRefresh?: boolean) {
|
|
30
30
|
var s = getAnalyticsStore().state;
|
|
31
31
|
clearAnalyticsForRequest();
|
|
32
32
|
sendRef.current({
|
|
@@ -37,7 +37,7 @@ export function useAnalytics(): AnalyticsState & {
|
|
|
37
37
|
period: s.period,
|
|
38
38
|
forceRefresh: forceRefresh,
|
|
39
39
|
} as any);
|
|
40
|
-
}
|
|
40
|
+
}, []);
|
|
41
41
|
|
|
42
42
|
useEffect(function () {
|
|
43
43
|
function handleSection(msg: ServerMessage) {
|
|
@@ -67,7 +67,7 @@ export function useAnalytics(): AnalyticsState & {
|
|
|
67
67
|
|
|
68
68
|
useEffect(function () {
|
|
69
69
|
requestAnalytics();
|
|
70
|
-
}, [state.period, state.scope, state.projectSlug]);
|
|
70
|
+
}, [state.period, state.scope, state.projectSlug, requestAnalytics]);
|
|
71
71
|
|
|
72
72
|
return {
|
|
73
73
|
data: state.data,
|