diff --git a/src/app/App.tsx b/src/app/App.tsx index 22657096..b0c184b2 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -9951,103 +9951,230 @@ export function App({ store, initialStatusMessage }: AppProps) { -
-
+
- {VIEWPORT_PANEL_IDS.map((panelId) => ( - { - store.setViewportPanelCameraState(panelId, cameraState); - }} - onToolPreviewChange={(toolPreview) => { - store.setViewportToolPreview(toolPreview); - }} - onBeginTransformOperation={(operation) => - beginTransformOperation(operation, "toolbar") - } - onWhiteboxSelectionModeChange={ - handleWhiteboxSelectionModeChange - } - onViewportGridToggle={handleViewportGridToggle} - onWhiteboxSnapToggle={handleWhiteboxSnapToggle} - onWhiteboxSnapStepDraftChange={setWhiteboxSnapStepDraft} - onWhiteboxSnapStepBlur={handleWhiteboxSnapStepBlur} - onTransformSessionChange={(nextTransformSession) => { - store.setTransformSession(nextTransformSession); - }} - onTransformCommit={commitTransformSession} - onTransformCancel={() => cancelTransformSession()} - onSelectionChange={(selection) => - applySelection(selection, "viewport") - } - /> - ))} - {layoutMode !== "quad" ? null : ( - <> -
+ {VIEWPORT_PANEL_IDS.map((panelId) => ( + { + store.setViewportPanelCameraState(panelId, cameraState); + }} + onToolPreviewChange={(toolPreview) => { + store.setViewportToolPreview(toolPreview); + }} + onBeginTransformOperation={(operation) => + beginTransformOperation(operation, "toolbar") + } + onWhiteboxSelectionModeChange={ + handleWhiteboxSelectionModeChange + } + onViewportGridToggle={handleViewportGridToggle} + onWhiteboxSnapToggle={handleWhiteboxSnapToggle} + onWhiteboxSnapStepDraftChange={setWhiteboxSnapStepDraft} + onWhiteboxSnapStepBlur={handleWhiteboxSnapStepBlur} + onTransformSessionChange={(nextTransformSession) => { + store.setTransformSession(nextTransformSession); + }} + onTransformCommit={commitTransformSession} + onTransformCancel={() => cancelTransformSession()} + onSelectionChange={(selection) => + applySelection(selection, "viewport") + } /> -
-
- - )} -
-
+ ))} + {layoutMode !== "quad" ? null : ( + <> +
+
+
+ + )} +
+
+ + {schedulePaneOpen ? ( + setSchedulePaneOpen(false)} + onSetRoutineActor={(routineId, actorId) => + updateProjectScheduleRoutine( + routineId, + "Set project schedule target actor", + `Retargeted schedule routine to ${actorId}.`, + (routine) => { + routine.target = createActorControlTargetRef(actorId); + routine.effect = createSetActorPresenceControlEffect({ + target: createActorControlTargetRef(actorId), + active: routine.effect.active + }); + } + ) + } + onSetRoutineTitle={(routineId, title) => + updateProjectScheduleRoutine( + routineId, + "Rename project schedule routine", + "Updated schedule routine title.", + (routine) => { + routine.title = title.trim(); + } + ) + } + onSetRoutineEnabled={(routineId, enabled) => + updateProjectScheduleRoutine( + routineId, + "Toggle project schedule routine", + enabled + ? "Enabled schedule routine." + : "Disabled schedule routine.", + (routine) => { + routine.enabled = enabled; + } + ) + } + onSetRoutineStartHour={(routineId, startHour) => + updateProjectScheduleRoutine( + routineId, + "Set project schedule start time", + "Updated schedule routine start time.", + (routine) => { + routine.startHour = normalizeTimeOfDayHours(startHour); + if (routine.startHour === routine.endHour) { + throw new Error( + "Schedule routine start and end hours must differ." + ); + } + } + ) + } + onSetRoutineEndHour={(routineId, endHour) => + updateProjectScheduleRoutine( + routineId, + "Set project schedule end time", + "Updated schedule routine end time.", + (routine) => { + routine.endHour = normalizeTimeOfDayHours(endHour); + if (routine.startHour === routine.endHour) { + throw new Error( + "Schedule routine start and end hours must differ." + ); + } + } + ) + } + onSetRoutinePriority={(routineId, priority) => + updateProjectScheduleRoutine( + routineId, + "Set project schedule priority", + "Updated schedule routine priority.", + (routine) => { + if (!Number.isFinite(priority)) { + throw new Error( + "Schedule routine priority must be a finite number." + ); + } + + routine.priority = Math.trunc(priority); + } + ) + } + onSetRoutinePresence={(routineId, active) => + updateProjectScheduleRoutine( + routineId, + "Set project schedule effect", + active + ? "Schedule routine now keeps the actor present." + : "Schedule routine now hides the actor.", + (routine) => { + routine.effect = createSetActorPresenceControlEffect({ + target: routine.target, + active + }); + } + ) + } + onSetRoutineDays={(routineId, mode, days) => + updateProjectScheduleRoutine( + routineId, + "Set project schedule days", + "Updated schedule routine days.", + (routine) => { + routine.days = + mode === "everyDay" + ? createProjectScheduleEveryDaySelection() + : { + mode: "selectedDays", + days + }; + } + ) + } + /> + ) : null} +