@parhelia/core 0.1.12775 → 0.1.12776

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.
@@ -1,4 +1,4 @@
1
- import { type Dispatch, type ReactNode, type SetStateAction } from "react";
1
+ import { type Dispatch, type RefObject, type ReactNode, type SetStateAction } from "react";
2
2
  export type SettingsHeaderActionsSetter = Dispatch<SetStateAction<ReactNode>>;
3
3
  export declare const SettingsHeaderActionsContext: import("react").Context<SettingsHeaderActionsSetter | null>;
4
4
  export declare function useSettingsHeaderActions(): SettingsHeaderActionsSetter | null;
@@ -6,3 +6,6 @@ export declare function useRequiredSettingsHeaderActions(): SettingsHeaderAction
6
6
  export declare const SettingsBreadcrumbExtraContext: import("react").Context<SettingsHeaderActionsSetter | null>;
7
7
  export declare function useSettingsBreadcrumbExtra(): SettingsHeaderActionsSetter | null;
8
8
  export declare function useRequiredSettingsBreadcrumbExtra(): SettingsHeaderActionsSetter;
9
+ export declare const SettingsMainContentRefContext: import("react").Context<RefObject<HTMLDivElement | null> | null>;
10
+ export declare function useSettingsMainContentRef(): RefObject<HTMLDivElement | null> | null;
11
+ export declare function useRequiredSettingsMainContentRef(): RefObject<HTMLDivElement | null>;
@@ -21,4 +21,15 @@ export function useRequiredSettingsBreadcrumbExtra() {
21
21
  }
22
22
  return setter;
23
23
  }
24
+ export const SettingsMainContentRefContext = createContext(null);
25
+ export function useSettingsMainContentRef() {
26
+ return useContext(SettingsMainContentRefContext);
27
+ }
28
+ export function useRequiredSettingsMainContentRef() {
29
+ const mainContentRef = useContext(SettingsMainContentRefContext);
30
+ if (!mainContentRef) {
31
+ throw new Error("useRequiredSettingsMainContentRef must be used inside SettingsMainContentRefContext.Provider");
32
+ }
33
+ return mainContentRef;
34
+ }
24
35
  //# sourceMappingURL=SettingsHeaderActionsContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsHeaderActionsContext.js","sourceRoot":"","sources":["../../../src/editor/settings/SettingsHeaderActionsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,GAIX,MAAM,OAAO,CAAC;AAIf,MAAM,CAAC,MAAM,4BAA4B,GACvC,aAAa,CAAqC,IAAI,CAAC,CAAC;AAE1D,MAAM,UAAU,wBAAwB;IACtC,OAAO,UAAU,CAAC,4BAA4B,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gCAAgC;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAAC;IAExD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GACzC,aAAa,CAAqC,IAAI,CAAC,CAAC;AAE1D,MAAM,UAAU,0BAA0B;IACxC,OAAO,UAAU,CAAC,8BAA8B,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kCAAkC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"SettingsHeaderActionsContext.js","sourceRoot":"","sources":["../../../src/editor/settings/SettingsHeaderActionsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,GAKX,MAAM,OAAO,CAAC;AAIf,MAAM,CAAC,MAAM,4BAA4B,GACvC,aAAa,CAAqC,IAAI,CAAC,CAAC;AAE1D,MAAM,UAAU,wBAAwB;IACtC,OAAO,UAAU,CAAC,4BAA4B,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gCAAgC;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAAC;IAExD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GACzC,aAAa,CAAqC,IAAI,CAAC,CAAC;AAE1D,MAAM,UAAU,0BAA0B;IACxC,OAAO,UAAU,CAAC,8BAA8B,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kCAAkC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GACxC,aAAa,CAA0C,IAAI,CAAC,CAAC;AAE/D,MAAM,UAAU,yBAAyB;IACvC,OAAO,UAAU,CAAC,6BAA6B,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,MAAM,cAAc,GAAG,UAAU,CAAC,6BAA6B,CAAC,CAAC;IAEjE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useState } from "react";
2
+ import { useEffect, useRef, useState } from "react";
3
3
  import { usePathname, useSearchParams } from "../client/navigation";
4
4
  import { useEditContext } from "../client/editContext";
5
5
  import { SimpleMenu } from "../ui/SimpleMenu";
6
6
  import { StatusSummary } from "./StatusSummary";
7
7
  import { SettingsBreadcrumb } from "./SettingsBreadcrumb";
8
- import { SettingsBreadcrumbExtraContext, SettingsHeaderActionsContext, } from "./SettingsHeaderActionsContext";
8
+ import { SettingsBreadcrumbExtraContext, SettingsHeaderActionsContext, SettingsMainContentRefContext, } from "./SettingsHeaderActionsContext";
9
9
  import { Info, Menu } from "lucide-react";
10
10
  import { cn } from "../../lib/utils";
11
11
  export function SettingsView() {
@@ -99,6 +99,7 @@ export function SettingsView() {
99
99
  const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
100
100
  const [headerActions, setHeaderActions] = useState(null);
101
101
  const [breadcrumbExtra, setBreadcrumbExtra] = useState(null);
102
+ const settingsMainContentRef = useRef(null);
102
103
  const settingsSubtitle = config?.settings.subtitle;
103
104
  const items = groups?.map((group) => {
104
105
  return {
@@ -136,16 +137,16 @@ export function SettingsView() {
136
137
  ? "Close settings navigation"
137
138
  : "Open settings navigation", title: mobileSidebarOpen
138
139
  ? "Close settings navigation"
139
- : "Open settings navigation", children: _jsx(Menu, { className: "h-4 w-4", strokeWidth: 1.75 }) }))] }), _jsxs("div", { className: "relative flex min-h-0 flex-1 overflow-hidden", children: [!isDesktop && mobileSidebarOpen && (_jsx("button", { type: "button", className: "absolute inset-0 z-10 bg-black/20", "aria-label": "Close settings navigation", onClick: () => setMobileSidebarOpen(false) })), _jsxs("div", { className: cn("z-20 flex min-h-0 flex-col border-r border-gray-200 bg-gray-50", "transition-[width,transform,box-shadow] duration-300 ease-out", isDesktop
140
- ? "relative w-64"
141
- : mobileSidebarOpen
142
- ? "absolute inset-y-0 left-0 w-64 shadow-xl"
143
- : "absolute inset-y-0 left-0 w-0 -translate-x-full overflow-hidden border-r-0"), children: [_jsx(StatusSummary, { onNavigate: handleNavigateToStatus, collapsed: !isDesktop && !mobileSidebarOpen }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsx(SimpleMenu, { items: items, activeItemKey: activeItemKey, collapsed: !isDesktop && !mobileSidebarOpen, onItemClick: (item) => {
144
- setActiveItemKey(item.id);
145
- updateUrl(item.id);
146
- if (!isDesktop) {
147
- setMobileSidebarOpen(false);
148
- }
149
- } }) })] }), _jsx("div", { className: "relative flex min-h-0 w-full flex-1 flex-col bg-white select-text", "data-testid": "settings-view-content", children: selectedPanel ? (_jsx(SettingsBreadcrumbExtraContext.Provider, { value: setBreadcrumbExtra, children: _jsx(SettingsHeaderActionsContext.Provider, { value: setHeaderActions, children: _jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: selectedPanel.content }, selectedPanel.id) }) })) : (_jsxs("div", { className: "flex h-full flex-col items-center justify-center text-gray-500", children: [_jsx(Info, { className: "mb-4 h-10 w-10" }), _jsx("p", { children: "Select a panel from the menu to view its content" })] })) })] })] }));
140
+ : "Open settings navigation", children: _jsx(Menu, { className: "h-4 w-4", strokeWidth: 1.75 }) }))] }), _jsx(SettingsMainContentRefContext.Provider, { value: settingsMainContentRef, children: _jsxs("div", { ref: settingsMainContentRef, className: "relative flex min-h-0 flex-1 overflow-hidden", "data-element": "settings-view-main-content", "data-testid": "settings-view-main-content", children: [!isDesktop && mobileSidebarOpen && (_jsx("button", { type: "button", className: "absolute inset-0 z-10 bg-black/20", "aria-label": "Close settings navigation", onClick: () => setMobileSidebarOpen(false) })), _jsxs("div", { className: cn("z-20 flex min-h-0 flex-col border-r border-gray-200 bg-gray-50", "transition-[width,transform,box-shadow] duration-300 ease-out", isDesktop
141
+ ? "relative w-64"
142
+ : mobileSidebarOpen
143
+ ? "absolute inset-y-0 left-0 w-64 shadow-xl"
144
+ : "absolute inset-y-0 left-0 w-0 -translate-x-full overflow-hidden border-r-0"), children: [_jsx(StatusSummary, { onNavigate: handleNavigateToStatus, collapsed: !isDesktop && !mobileSidebarOpen }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsx(SimpleMenu, { items: items, activeItemKey: activeItemKey, collapsed: !isDesktop && !mobileSidebarOpen, onItemClick: (item) => {
145
+ setActiveItemKey(item.id);
146
+ updateUrl(item.id);
147
+ if (!isDesktop) {
148
+ setMobileSidebarOpen(false);
149
+ }
150
+ } }) })] }), _jsx("div", { className: "relative flex min-h-0 w-full flex-1 flex-col bg-white select-text", "data-testid": "settings-view-content", children: selectedPanel ? (_jsx(SettingsBreadcrumbExtraContext.Provider, { value: setBreadcrumbExtra, children: _jsx(SettingsHeaderActionsContext.Provider, { value: setHeaderActions, children: _jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: selectedPanel.content }, selectedPanel.id) }) })) : (_jsxs("div", { className: "flex h-full flex-col items-center justify-center text-gray-500", children: [_jsx(Info, { className: "mb-4 h-10 w-10" }), _jsx("p", { children: "Select a panel from the menu to view its content" })] })) })] }) })] }));
150
151
  }
151
152
  //# sourceMappingURL=SettingsView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsView.js","sourceRoot":"","sources":["../../../src/editor/settings/SettingsView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SettingsView.js","sourceRoot":"","sources":["../../../src/editor/settings/SettingsView.tsx"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ import { deleteProjectTemplate, getProjectTemplates, getProjectTemplateAgent, re
19
19
  import { getAiProfilesErrorMessage, loadAiProfiles, } from "../../services/aiService";
20
20
  import { updateAgentContext } from "../../services/agentService";
21
21
  import { useEditContext } from "../../client/editContext";
22
+ import { localStorageService } from "../../services/localStorageService";
22
23
  import { ItemNameDialog, } from "../../ui/ItemNameDialogNew";
23
24
  import { SimpleTabs } from "../../ui/SimpleTabs";
24
25
  import { isTypingEventTarget } from "../../utils/keyboardNavigation";
@@ -26,10 +27,25 @@ import { cn } from "../../../lib/utils";
26
27
  import { AgentProfileEditorPanel, } from "./AgentProfileEditorPanel";
27
28
  import { ProjectTemplateAgentPanel } from "./ProjectTemplateAgentPanel";
28
29
  import { ProjectTemplateSelector } from "./ProjectTemplateSelector";
29
- import { useRequiredSettingsBreadcrumbExtra, useRequiredSettingsHeaderActions, } from "../SettingsHeaderActionsContext";
30
+ import { useRequiredSettingsBreadcrumbExtra, useRequiredSettingsHeaderActions, useRequiredSettingsMainContentRef, } from "../SettingsHeaderActionsContext";
30
31
  import { useSearchParams } from "../../client/navigation";
31
32
  // Query param for deep-linking the selected project template (settings reload).
32
33
  const SELECTED_PROJECT_TEMPLATE_QUERY_PARAM = "projectTemplateId";
34
+ function measureOverlayBounds(element) {
35
+ if (!element) {
36
+ return null;
37
+ }
38
+ const rect = element.getBoundingClientRect();
39
+ if (rect.width <= 0 || rect.height <= 0) {
40
+ return null;
41
+ }
42
+ return {
43
+ top: rect.top,
44
+ left: rect.left,
45
+ width: rect.width,
46
+ height: rect.height,
47
+ };
48
+ }
33
49
  const PRIORITY_OPTIONS = [
34
50
  { value: "", label: "No priority" },
35
51
  { value: "Low", label: "Low" },
@@ -51,6 +67,7 @@ const PROJECT_TEMPLATE_ROOT_PATHS = [
51
67
  "/sitecore/system/parhelia/settings/project templates",
52
68
  "/sitecore/system/parhelia/system/project templates",
53
69
  ];
70
+ const PROJECT_TEMPLATE_SPLITTER_STORAGE_KEY = "settings-project-templates-panel-splitter-v3";
54
71
  function isProjectTemplateItemChange(changes, selectedTemplateId) {
55
72
  const normalizedSelectedTemplateId = selectedTemplateId?.toLowerCase() ?? null;
56
73
  return changes.some((change) => {
@@ -406,6 +423,11 @@ export function ProjectTemplatesPanel() {
406
423
  const [duplicatingAgentProfile, setDuplicatingAgentProfile] = useState(false);
407
424
  const [mobileView, setMobileView] = useState("detail");
408
425
  const [editingAgentProfile, setEditingAgentProfile] = useState(null);
426
+ const [isTaskEditorMaximized, setIsTaskEditorMaximized] = useState(false);
427
+ const [taskEditorOverlayBounds, setTaskEditorOverlayBounds] = useState(null);
428
+ const [forceCollapseAgentPanelKey, setForceCollapseAgentPanelKey] = useState(0);
429
+ const [forceExpandAgentPanelKey, setForceExpandAgentPanelKey] = useState(0);
430
+ const settingsMainContentRef = useRequiredSettingsMainContentRef();
409
431
  const setSettingsHeaderActions = useRequiredSettingsHeaderActions();
410
432
  const setSettingsBreadcrumbExtra = useRequiredSettingsBreadcrumbExtra();
411
433
  const autosaveTimeoutRef = useRef(null);
@@ -421,6 +443,108 @@ export function ProjectTemplatesPanel() {
421
443
  const templateAgentLoadRunIdRef = useRef(0);
422
444
  const externalRefreshTimeoutRef = useRef(null);
423
445
  const pendingExternalRefreshRef = useRef(false);
446
+ const agentPanelWasExpandedBeforeMaximizeRef = useRef(null);
447
+ const exitTaskEditorMaximizedRef = useRef(() => { });
448
+ const wasAgentPanelCollapsed = () => {
449
+ const stored = localStorageService.getItem(PROJECT_TEMPLATE_SPLITTER_STORAGE_KEY);
450
+ return stored?.lastCollapsed ?? true;
451
+ };
452
+ const restoreAgentPanelAfterMaximize = () => {
453
+ if (agentPanelWasExpandedBeforeMaximizeRef.current === true) {
454
+ setForceExpandAgentPanelKey((value) => value + 1);
455
+ }
456
+ agentPanelWasExpandedBeforeMaximizeRef.current = null;
457
+ };
458
+ /* eslint-disable react-hooks/exhaustive-deps */
459
+ const exitTaskEditorMaximized = () => {
460
+ setIsTaskEditorMaximized(false);
461
+ restoreAgentPanelAfterMaximize();
462
+ };
463
+ exitTaskEditorMaximizedRef.current = exitTaskEditorMaximized;
464
+ const handleToggleTaskEditorMaximized = () => {
465
+ if (isTaskEditorMaximized) {
466
+ exitTaskEditorMaximized();
467
+ return;
468
+ }
469
+ const nextBounds = measureOverlayBounds(settingsMainContentRef.current);
470
+ if (!nextBounds) {
471
+ return;
472
+ }
473
+ const agentPanelCollapsed = wasAgentPanelCollapsed();
474
+ agentPanelWasExpandedBeforeMaximizeRef.current = !agentPanelCollapsed;
475
+ if (!agentPanelCollapsed) {
476
+ setForceCollapseAgentPanelKey((value) => value + 1);
477
+ }
478
+ setTaskEditorOverlayBounds(nextBounds);
479
+ setIsTaskEditorMaximized(true);
480
+ };
481
+ useEffect(() => {
482
+ if (!isTaskEditorMaximized) {
483
+ setTaskEditorOverlayBounds(null);
484
+ return;
485
+ }
486
+ const settingsMainContent = settingsMainContentRef.current;
487
+ const updateBounds = () => {
488
+ const nextBounds = measureOverlayBounds(settingsMainContentRef.current);
489
+ if (nextBounds) {
490
+ setTaskEditorOverlayBounds(nextBounds);
491
+ }
492
+ };
493
+ updateBounds();
494
+ if (typeof window === "undefined") {
495
+ return;
496
+ }
497
+ let frameId = null;
498
+ const scheduleUpdate = () => {
499
+ if (frameId != null) {
500
+ window.cancelAnimationFrame(frameId);
501
+ }
502
+ frameId = window.requestAnimationFrame(() => {
503
+ frameId = null;
504
+ updateBounds();
505
+ });
506
+ };
507
+ const resizeObserver = typeof ResizeObserver !== "undefined" && settingsMainContent
508
+ ? new ResizeObserver(scheduleUpdate)
509
+ : null;
510
+ if (resizeObserver && settingsMainContent) {
511
+ resizeObserver.observe(settingsMainContent);
512
+ }
513
+ window.addEventListener("resize", scheduleUpdate);
514
+ window.addEventListener("scroll", scheduleUpdate, true);
515
+ return () => {
516
+ if (frameId != null) {
517
+ window.cancelAnimationFrame(frameId);
518
+ }
519
+ resizeObserver?.disconnect();
520
+ window.removeEventListener("resize", scheduleUpdate);
521
+ window.removeEventListener("scroll", scheduleUpdate, true);
522
+ };
523
+ }, [isTaskEditorMaximized, settingsMainContentRef]);
524
+ useEffect(() => {
525
+ if (isTaskEditorMaximized &&
526
+ (!draftTemplate || activeDetailTab !== "tasks" || isMobile)) {
527
+ exitTaskEditorMaximizedRef.current();
528
+ }
529
+ }, [
530
+ activeDetailTab,
531
+ draftTemplate,
532
+ isMobile,
533
+ isTaskEditorMaximized,
534
+ ]);
535
+ const projectTemplateEditorStyle = useMemo(() => {
536
+ if (!isTaskEditorMaximized || !taskEditorOverlayBounds) {
537
+ return undefined;
538
+ }
539
+ return {
540
+ position: "fixed",
541
+ top: taskEditorOverlayBounds.top,
542
+ left: taskEditorOverlayBounds.left,
543
+ width: taskEditorOverlayBounds.width,
544
+ height: taskEditorOverlayBounds.height,
545
+ zIndex: 80,
546
+ };
547
+ }, [isTaskEditorMaximized, taskEditorOverlayBounds]);
424
548
  useEffect(() => {
425
549
  let cancelled = false;
426
550
  loadAiProfiles()
@@ -1537,6 +1661,12 @@ export function ProjectTemplatesPanel() {
1537
1661
  removeTaskTemplateById(selectedTaskId);
1538
1662
  }, [removeTaskTemplateById, selectedTaskId]);
1539
1663
  const handleProjectTemplateEditorKeyDownCapture = useCallback((event) => {
1664
+ if (event.key === "Escape" && isTaskEditorMaximized) {
1665
+ event.preventDefault();
1666
+ event.stopPropagation();
1667
+ exitTaskEditorMaximizedRef.current();
1668
+ return;
1669
+ }
1540
1670
  if (event.key !== "Delete")
1541
1671
  return;
1542
1672
  if (isTypingEventTarget(event.nativeEvent))
@@ -1556,6 +1686,7 @@ export function ProjectTemplatesPanel() {
1556
1686
  }, [
1557
1687
  handleDeleteSelectedTask,
1558
1688
  handleRemoveDependency,
1689
+ isTaskEditorMaximized,
1559
1690
  selectedDependencyId,
1560
1691
  selectedTaskId,
1561
1692
  ]);
@@ -1603,7 +1734,7 @@ export function ProjectTemplatesPanel() {
1603
1734
  if (!draftTemplate) {
1604
1735
  return null;
1605
1736
  }
1606
- const graphView = (_jsx("div", { className: "h-full min-h-0 overflow-hidden bg-slate-50/40", "data-testid": "project-template-graph", children: _jsx(DependencyGraphView, { projectId: draftTemplate.id, layoutKey: `project-template:${draftTemplate.id}`, tasks: graphTasks, dependencies: graphDependencies, miniMapWidth: 160, miniMapHeight: 120, showMiniMap: !isMobile, orientation: "horizontal", showOrientationToggle: true, autoLayoutStrategy: "hierarchy", savedLayout: draftTemplate.graphLayout, selectedTaskId: selectedTaskId, selectedDependencyId: selectedDependencyId, onSelectTask: handleSelectTask, onSelectDependency: handleSelectDependencyFromGraph, onClearDependencySelection: handleClearDependencySelection, onAddDependentTaskFromNode: (taskId) => {
1737
+ const graphView = (_jsx("div", { className: "h-full min-h-0 overflow-hidden bg-slate-50/40", "data-testid": "project-template-graph", children: _jsx(DependencyGraphView, { projectId: draftTemplate.id, layoutKey: `project-template:${draftTemplate.id}`, tasks: graphTasks, dependencies: graphDependencies, miniMapWidth: 160, miniMapHeight: 120, showMiniMap: !isMobile, isMaximized: !isMobile && isTaskEditorMaximized, onToggleMaximized: !isMobile ? handleToggleTaskEditorMaximized : undefined, orientation: "horizontal", showOrientationToggle: true, autoLayoutStrategy: "hierarchy", savedLayout: draftTemplate.graphLayout, selectedTaskId: selectedTaskId, selectedDependencyId: selectedDependencyId, onSelectTask: handleSelectTask, onSelectDependency: handleSelectDependencyFromGraph, onClearDependencySelection: handleClearDependencySelection, onAddDependentTaskFromNode: (taskId) => {
1607
1738
  void handleOpenCreateDependentTaskDialogForTask(taskId);
1608
1739
  }, onAddChildTaskFromNode: (taskId) => {
1609
1740
  void handleOpenAddChildTaskDialogForTask(taskId);
@@ -1723,7 +1854,7 @@ export function ProjectTemplatesPanel() {
1723
1854
  openInWizardMode: checked,
1724
1855
  })), "aria-label": "Open new projects from this template in wizard mode", "data-testid": "project-template-open-in-wizard-mode-switch" })] })] }));
1725
1856
  const taskEditorContent = (_jsx("div", { className: "flex h-full min-h-0 flex-1 flex-col overflow-hidden", children: renderTemplateTaskEditorMain() }));
1726
- return (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-y-contain p-5 md:overflow-hidden", children: [_jsx("div", { className: "flex shrink-0 flex-col gap-5 md:max-h-[50vh] md:min-h-0 md:overflow-y-auto md:overscroll-y-contain", children: saveError && (_jsx("div", { className: "rounded border border-red-200 bg-red-50 px-4 py-3 text-xs text-red-700", children: saveError })) }), _jsxs("section", { className: "flex min-h-0 flex-1 flex-col rounded-lg border border-gray-200 bg-white shadow-sm md:overflow-hidden", children: [_jsxs("div", { className: "flex shrink-0 items-center justify-between gap-3 border-b border-gray-100 px-2 py-1", children: [_jsx("div", { className: "min-w-0 flex-1", children: _jsx(SimpleTabs, { tabs: detailTabs, activeTab: activeDetailTab === "basic" ? 0 : 1, setActiveTab: (index) => setActiveDetailTab(index === 0 ? "basic" : "tasks"), hideContent: true, variant: "elegant", className: "w-full justify-start gap-6" }) }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => void handleOpenCreateTaskDialog(), disabled: creatingTask, "data-testid": "project-template-add-task-button", className: activeDetailTab === "tasks"
1857
+ return (_jsxs("div", { className: cn("flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-y-contain md:overflow-hidden", isTaskEditorMaximized ? "overflow-hidden p-0" : "p-5"), children: [_jsx("div", { className: "flex shrink-0 flex-col gap-5 md:max-h-[50vh] md:min-h-0 md:overflow-y-auto md:overscroll-y-contain", children: saveError && (_jsx("div", { className: "rounded border border-red-200 bg-red-50 px-4 py-3 text-xs text-red-700", children: saveError })) }), _jsxs("section", { className: cn("flex min-h-0 flex-1 flex-col rounded-lg border border-gray-200 bg-white shadow-sm md:overflow-hidden", isTaskEditorMaximized && "overflow-hidden rounded-none shadow-xl"), "data-testid": "project-template-task-editor-shell", children: [_jsxs("div", { className: "flex shrink-0 items-center justify-between gap-3 border-b border-gray-100 px-4 py-3", children: [_jsx("div", { className: "min-w-0 flex-1", children: _jsx(SimpleTabs, { tabs: detailTabs, activeTab: activeDetailTab === "basic" ? 0 : 1, setActiveTab: (index) => setActiveDetailTab(index === 0 ? "basic" : "tasks"), hideContent: true, variant: "elegant", className: "w-full justify-start gap-6" }) }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => void handleOpenCreateTaskDialog(), disabled: creatingTask, "data-testid": "project-template-add-task-button", className: activeDetailTab === "tasks"
1727
1858
  ? ""
1728
1859
  : "pointer-events-none invisible", "aria-hidden": activeDetailTab !== "tasks", tabIndex: activeDetailTab === "tasks" ? undefined : -1, children: [_jsx(Plus, { className: "h-4 w-4", strokeWidth: 1.5 }), "Add Task"] })] }), _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: activeDetailTab === "basic"
1729
1860
  ? basicSettingsContent
@@ -1751,7 +1882,7 @@ export function ProjectTemplatesPanel() {
1751
1882
  hidden: isMobile && mobileView !== "agent",
1752
1883
  },
1753
1884
  ];
1754
- return (_jsxs(_Fragment, { children: [_jsx("div", { className: "h-full", "data-testid": "project-template-editor", onKeyDownCapture: handleProjectTemplateEditorKeyDownCapture, children: _jsx(Splitter, { panels: panels, localStorageKey: "settings-project-templates-panel-splitter-v3", direction: "horizontal", className: "h-full", forceExpandLastPanelKey: editingAgentProfile?.id ?? null }) }), _jsx(Dialog, { open: isCreateTaskDialogOpen, onOpenChange: (open) => {
1885
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: cn("h-full", isTaskEditorMaximized && "fixed overflow-hidden bg-white shadow-xl"), style: projectTemplateEditorStyle, "data-testid": "project-template-editor", onKeyDownCapture: handleProjectTemplateEditorKeyDownCapture, children: _jsx(Splitter, { panels: panels, localStorageKey: PROJECT_TEMPLATE_SPLITTER_STORAGE_KEY, direction: "horizontal", className: "h-full", forceExpandLastPanelKey: editingAgentProfile?.id ?? null }) }), _jsx(Dialog, { open: isCreateTaskDialogOpen, onOpenChange: (open) => {
1755
1886
  setIsCreateTaskDialogOpen(open);
1756
1887
  if (!open) {
1757
1888
  setNewTaskDependencySourceId(null);