Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
cc93024
Porches, decks, railings, stairs, foundations and framing tools
Steven-Tibbs Oct 28, 2026
c3026c1
Translations for the new copy
Steven-Tibbs Oct 28, 2026
42ff2f5
Catalogs in the extract tool's comment order
Steven-Tibbs Oct 29, 2026
39fa88a
Walls below and above in the Display menu
Steven-Tibbs Oct 29, 2026
51b05ab
Restore automatic host wall splitting while drafting
wass08 Oct 30, 2026
4515751
Keep room names independent of foundation and finishes
wass08 Oct 30, 2026
d8dce30
Restore shadows from hidden upper levels
wass08 Oct 30, 2026
afc7b11
Heal automatic stair cutouts when the stair leaves a surface
wass08 Oct 30, 2026
5e01820
fix: enable casing only when creating openings
wass08 Oct 30, 2026
d5a9134
feat: paint opening casing independently on each wall face
wass08 Oct 30, 2026
a75e174
fix: match automatic window frame depth to wall thickness
wass08 Oct 30, 2026
6eb4f0b
fix: use 20 mm frame members for newly created windows
wass08 Oct 30, 2026
b4887ab
fix(core): tint material thumbnails with their paint color
wass08 Oct 30, 2026
c770b13
feat(materials): add metre-scale KTX2 siding profiles
wass08 Oct 30, 2026
5fa4349
fix(materials): finish KTX2 shingle assets and catalog coverage
wass08 Oct 30, 2026
e120d8a
Opening swaps open the leaf; casement hinge swap; extension toggles i…
wass08 Oct 30, 2026
78337a9
Display menu: one Measure walls setting, grouped by view
wass08 Oct 30, 2026
d34a872
Build panel: Walls kinds sub-row, plain new walls, wall types in the …
wass08 Oct 30, 2026
b45de16
Level display tests: levels above cast shadows only again
wass08 Oct 30, 2026
ffcab5e
Click a selected object again to pick it up, as on main
wass08 Oct 30, 2026
4b8edfd
Moving several walls pushes each one along its own normal
wass08 Oct 30, 2026
a83fcfc
Translations for the review fixes
wass08 Oct 30, 2026
71c84da
Main's floor plates and foundation again
wass08 Oct 30, 2026
abc3e78
Porches, decks and patios on main's floor plates
wass08 Oct 30, 2026
81a63a8
Ceiling caps measured against main's floor plates
wass08 Oct 30, 2026
1f77720
A dropped stair leaves no stale cut on the floor above
wass08 Oct 30, 2026
99d9632
fix: match automatic door frame depth to wall thickness
wass08 Oct 30, 2026
823c540
fix: use 20 mm frame members for newly created doors
wass08 Oct 30, 2026
f4b34f4
Several selected walls show their dimensions, as one selected wall does
wass08 Oct 30, 2026
4c8f94f
Translations after the floor-plate revert
wass08 Oct 30, 2026
f2123a7
A catalog map the asset CDN lacks loads from the app
wass08 Oct 30, 2026
e5bd381
Shortcuts dialog: Alt bypasses snapping, Shift cycles it
wass08 Oct 30, 2026
8bd6bd7
Guard generated porch framing writers
wass08 Oct 30, 2026
542257d
Dispatch opening content through host surfaces and count porch part m…
wass08 Oct 30, 2026
5b33422
Read outdoor floor behavior from linked room intent
wass08 Oct 30, 2026
0f53779
Expose wall assembly types through shared agent tools
wass08 Oct 30, 2026
532a19c
Let agent columns use framing post sizes and bases
wass08 Oct 30, 2026
d0dedf8
Expose railing walls and guard settings to agents
wass08 Oct 30, 2026
97c9279
Report outdoor room intent and generated porch framing
wass08 Oct 30, 2026
10832e7
Translations for the shortcut and agent-tool changes
wass08 Oct 30, 2026
a64b1d5
Porch framing counts read porchPart once
wass08 Oct 30, 2026
bee4b4d
Agent guide test knows the unknown_wall_type refusal
wass08 Oct 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 14 additions & 2 deletions apps/editor/components/build-tab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ import {
useFloorplanMode,
useTerraceDraft,
useWallDrawVariant,
withToolShortcut,
} from '@pascal-app/editor'
import { useLiquidLineToolOptions } from '@pascal-app/nodes'
import { framingPostToolChoices, useLiquidLineToolOptions } from '@pascal-app/nodes'
import { useViewer } from '@pascal-app/viewer'
import Image from 'next/image'
import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'
Expand All @@ -37,6 +38,7 @@ import {
import {
activateBuildTool,
activateFenceFeaturePlacement,
activatePostTool,
activateRoofFeatureTool,
activateRoofType,
activateTerrainSculptMode,
Expand Down Expand Up @@ -65,6 +67,8 @@ export function BuildTab() {
const [kitchenOpen, setKitchenOpen] = useState(false)
const [buildSearch, setBuildSearch] = useState('')
const activeTool = useEditor((s) => s.tool)
// The column tool placing framing posts lights the Post tile, not Column.
const postArmed = useEditor((s) => framingPostToolChoices(s.toolDefaults.column) !== null)
const selectedId = useViewer((s) => s.selection.selectedIds[0])
const selectedFenceFeature = useScene((s) => {
const selected = selectedId ? s.nodes[selectedId as AnyNodeId] : undefined
Expand Down Expand Up @@ -133,6 +137,8 @@ export function BuildTab() {
if (type.id === 'roof')
return mode === 'build' && (activeTool === 'roof' || isRoofFeatureActive)
if (type.id === 'fence' && selectedFence) return true
if (type.kind === 'column')
return mode === 'build' && activeTool === 'column' && (type.id === 'post') === postArmed
return mode === 'build' && activeTool === type.kind
}

Expand All @@ -154,6 +160,8 @@ export function BuildTab() {
useEditor.getState().setMode('select')
} else if (type.id === 'terrace') {
startTerraceDraft()
} else if (type.id === 'post') {
activatePostTool()
} else if (type.kind) {
activateBuildTool(type.kind)
}
Expand Down Expand Up @@ -189,7 +197,7 @@ export function BuildTab() {
handleTypeClick(type)
}}
onMouseEnter={() => triggerSFX('sfx:menu-hover')}
title={i18n._(type.label)}
title={withToolShortcut(i18n._(type.label), type.id)}
/>
)
const typesIn = (section: NonNullable<BuildType['section']>) =>
Expand Down Expand Up @@ -281,6 +289,10 @@ export function BuildTab() {
})}
>
<BuildToolGrid columns={4}>{advancedTypes.map(renderTile)}</BuildToolGrid>
<ToolOptionsPanel
className="border-border/50 border-t pt-3"
kind={advancedTypes.find(isTypeActive)?.kind}
/>
</BuildPanelAdvancedSection>
</div>
)}
Expand Down
Loading
Loading