diff --git a/apps/desktop/src/renderer/components/NewWorkspaceModal/NewWorkspaceModal.tsx b/apps/desktop/src/renderer/components/NewWorkspaceModal/NewWorkspaceModal.tsx index 5f7078199b9..88b7d8201df 100644 --- a/apps/desktop/src/renderer/components/NewWorkspaceModal/NewWorkspaceModal.tsx +++ b/apps/desktop/src/renderer/components/NewWorkspaceModal/NewWorkspaceModal.tsx @@ -67,7 +67,7 @@ export function NewWorkspaceModal() { const isOpen = useNewWorkspaceModalOpen(); const closeModal = useCloseNewWorkspaceModal(); const preSelectedProjectId = usePreSelectedProjectId(); - const [selectedProjectId, setSelectedProjectId] = useState( + const [selectedProjectId, _setSelectedProjectId] = useState( null, ); const [title, setTitle] = useState(""); @@ -75,6 +75,10 @@ export function NewWorkspaceModal() { const [branchNameEdited, setBranchNameEdited] = useState(false); const [mode, setMode] = useState("new"); const [baseBranch, setBaseBranch] = useState(null); + const selectProject = (projectId: string | null) => { + _setSelectedProjectId(projectId); + setBaseBranch(null); + }; const [baseBranchOpen, setBaseBranchOpen] = useState(false); const [branchSearch, setBranchSearch] = useState(""); const [showAdvanced, setShowAdvanced] = useState(false); @@ -129,17 +133,12 @@ export function NewWorkspaceModal() { useEffect(() => { if (isOpen && !selectedProjectId && preSelectedProjectId) { - setSelectedProjectId(preSelectedProjectId); + selectProject(preSelectedProjectId); } }, [isOpen, selectedProjectId, preSelectedProjectId]); const effectiveBaseBranch = baseBranch ?? branchData?.defaultBranch ?? null; - // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally reset when project changes - useEffect(() => { - setBaseBranch(null); - }, [selectedProjectId]); - const branchSlug = branchNameEdited ? sanitizeBranchName(branchName) : generateSlugFromTitle(title); @@ -152,7 +151,7 @@ export function NewWorkspaceModal() { : branchSlug; const resetForm = () => { - setSelectedProjectId(null); + _setSelectedProjectId(null); setTitle(""); setBranchName(""); setBranchNameEdited(false); @@ -221,7 +220,7 @@ export function NewWorkspaceModal() { } if (successes.length > 0) { - setSelectedProjectId(successes[0].project.id); + selectProject(successes[0].project.id); } } } catch (error) { @@ -300,7 +299,7 @@ export function NewWorkspaceModal() { .map((project) => ( setSelectedProjectId(project.id)} + onClick={() => selectProject(project.id)} > {project.name} {project.id === selectedProjectId && ( diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/project/$projectId/page.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/project/$projectId/page.tsx index bb52a707360..bf5d438a966 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/project/$projectId/page.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/project/$projectId/page.tsx @@ -155,8 +155,7 @@ function ProjectPage() {
- {/* biome-ignore lint/a11y/noStaticElementInteractions: onKeyDown for Enter-to-submit */} -
+

Create your first workspace

diff --git a/apps/desktop/src/renderer/routes/_authenticated/providers/CollectionsProvider/CollectionsProvider.tsx b/apps/desktop/src/renderer/routes/_authenticated/providers/CollectionsProvider/CollectionsProvider.tsx index a1d9d39aca4..4a255c2dd73 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/providers/CollectionsProvider/CollectionsProvider.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/providers/CollectionsProvider/CollectionsProvider.tsx @@ -31,10 +31,10 @@ export function CollectionsProvider({ children }: { children: ReactNode }) { setIsSwitching(true); try { await authClient.organization.setActive({ organizationId }); - // Wait for target org's collections to finish initial Electric sync. - // If already preloaded by the background useEffect, this resolves instantly. - await preloadCollections(organizationId); - await refetchSession(); + await Promise.all([ + preloadCollections(organizationId), + refetchSession(), + ]); } finally { setIsSwitching(false); } diff --git a/apps/desktop/src/renderer/routes/_authenticated/settings/api-keys/components/ApiKeysSettings/ApiKeysSettings.tsx b/apps/desktop/src/renderer/routes/_authenticated/settings/api-keys/components/ApiKeysSettings/ApiKeysSettings.tsx index b8bbcd2ab63..a0c0227f2db 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/settings/api-keys/components/ApiKeysSettings/ApiKeysSettings.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/settings/api-keys/components/ApiKeysSettings/ApiKeysSettings.tsx @@ -160,8 +160,8 @@ export function ApiKeysSettings({ visibleItems }: ApiKeysSettingsProps) { {showApiKeysList && (isLoading ? (
- {[1, 2, 3].map((i) => ( -
+ {["skeleton-1", "skeleton-2", "skeleton-3"].map((id) => ( +
diff --git a/apps/desktop/src/renderer/routes/_authenticated/settings/appearance/components/AppearanceSettings/components/FontSettingSection/FontSettingSection.tsx b/apps/desktop/src/renderer/routes/_authenticated/settings/appearance/components/AppearanceSettings/components/FontSettingSection/FontSettingSection.tsx index faefac9f02e..8d6c6842002 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/settings/appearance/components/AppearanceSettings/components/FontSettingSection/FontSettingSection.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/settings/appearance/components/AppearanceSettings/components/FontSettingSection/FontSettingSection.tsx @@ -1,6 +1,6 @@ import { Button } from "@superset/ui/button"; import { Input } from "@superset/ui/input"; -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useState } from "react"; import { electronTrpc } from "renderer/lib/electron-trpc"; import { MONACO_EDITOR_OPTIONS } from "renderer/providers/MonacoProvider"; import { @@ -69,11 +69,6 @@ export function FontSettingSection({ variant }: FontSettingSectionProps) { const [fontDraft, setFontDraft] = useState(null); const [fontSizeDraft, setFontSizeDraft] = useState(null); - // biome-ignore lint/correctness/useExhaustiveDependencies: sync draft state when fontSettings changes - useEffect(() => { - setFontSizeDraft(null); - }, [fontSettings]); - const currentFamily = fontSettings?.[config.familyKey] ?? null; const currentSize = fontSettings?.[config.sizeKey] ?? null; diff --git a/apps/desktop/src/renderer/routes/_authenticated/settings/billing/plans/page.tsx b/apps/desktop/src/renderer/routes/_authenticated/settings/billing/plans/page.tsx index 3a211ae1d83..3c1b4934a01 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/settings/billing/plans/page.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/settings/billing/plans/page.tsx @@ -193,6 +193,23 @@ const COMPARISON_SECTIONS: ComparisonSection[] = [ }, ]; +function ComparisonValueCell({ value }: { value: ComparisonValue }) { + if (value === null || value === false) { + return Not included; + } + + if (value === true) { + return ; + } + + return ( + <> + + {value} + + ); +} + function PlansPage() { const [isYearly, setIsYearly] = useState(true); const [isUpgrading, setIsUpgrading] = useState(false); @@ -310,23 +327,6 @@ function PlansPage() { } }; - const renderComparisonValue = (value: ComparisonValue) => { - if (value === null || value === false) { - return Not included; - } - - if (value === true) { - return ; - } - - return ( - <> - - {value} - - ); - }; - const highlightColumnIndex = 1; const highlightColumnStart = highlightColumnIndex + 2; const gridColumnsClass = "grid grid-cols-[240px_repeat(3,_1fr)]"; @@ -534,7 +534,7 @@ function PlansPage() { key={`${row.label}-${valueIndex}`} className="flex items-center justify-start gap-2 px-4 py-2.5" > - {renderComparisonValue(value)} +
))} {!isLastRow && ( diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceSidebar.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceSidebar.tsx index e7f8b78be79..8c06c64744a 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceSidebar.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceSidebar.tsx @@ -1,4 +1,3 @@ -import { useMemo } from "react"; import { useWorkspaceShortcuts } from "renderer/hooks/useWorkspaceShortcuts"; import { PortsList } from "./PortsList"; import { ProjectSection } from "./ProjectSection"; @@ -20,18 +19,16 @@ export function WorkspaceSidebar({ }: WorkspaceSidebarProps) { const { groups } = useWorkspaceShortcuts(); - // Calculate shortcut base indices for each project group using cumulative offsets - const projectShortcutIndices = useMemo( - () => - groups.reduce<{ indices: number[]; cumulative: number }>( - (acc, group) => ({ - indices: [...acc.indices, acc.cumulative], - cumulative: acc.cumulative + group.workspaces.length, - }), - { indices: [], cumulative: 0 }, - ).indices, - [groups], - ); + const projectShortcutIndices = groups.reduce<{ + indices: number[]; + cumulative: number; + }>( + (acc, group) => ({ + indices: [...acc.indices, acc.cumulative], + cumulative: acc.cumulative + group.workspaces.length, + }), + { indices: [], cumulative: 0 }, + ).indices; return ( diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ChatPane/ChatInterface/components/MessagePartsRenderer/MessagePartsRenderer.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ChatPane/ChatInterface/components/MessagePartsRenderer/MessagePartsRenderer.tsx index 0d2d8b66604..72eac0d3391 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ChatPane/ChatInterface/components/MessagePartsRenderer/MessagePartsRenderer.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ChatPane/ChatInterface/components/MessagePartsRenderer/MessagePartsRenderer.tsx @@ -42,7 +42,10 @@ export function MessagePartsRenderer({ if (part.type === "text") { nodes.push( - + {part.text} , ); diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/components/BasePaneWindow/BasePaneWindow.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/components/BasePaneWindow/BasePaneWindow.tsx index e7bf067b5f1..8957070855d 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/components/BasePaneWindow/BasePaneWindow.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/components/BasePaneWindow/BasePaneWindow.tsx @@ -102,12 +102,16 @@ export function BasePaneWindow({ onDragStart={() => setDragging(paneId, tabId)} onDragEnd={() => clearDragging()} > - {/* biome-ignore lint/a11y/useKeyWithClickEvents lint/a11y/noStaticElementInteractions: Focus handler for pane */}
{ + if (e.target !== e.currentTarget) return; + if (e.key === "Enter" || e.key === " ") handleFocus(); + }} > {children}
diff --git a/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx b/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx index 6f36f0329d0..349cdd0f376 100644 --- a/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx +++ b/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx @@ -711,9 +711,9 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { }} transition={{ duration: 0.3, ease: "easeOut" }} > - {FILE_CHANGES.map((file, i) => ( + {FILE_CHANGES.map((file) => (
{/* Large diffuse back-shadow */} @@ -47,7 +47,7 @@ export function ProductDemo({ scrollYProgress }: ProductDemoProps) { {/* Selector pills - below mockup, shift up as mockup scales */} {DEMO_OPTIONS.map((option) => ( >; }