Editor: the toolkit is a rail tab on desktop, and the rail is wider #133
@@ -177,9 +177,7 @@ export const Canvas = forwardRef<
|
||||
st.setSel(m ? null : { type: 'object', id: o.id })
|
||||
st.setArmedKind(null)
|
||||
st.setGhost(null)
|
||||
// Focusing a bed is planting intent: the rail shows the plant palette
|
||||
// (the toolkit's focused mode), not the inspector. A single click still
|
||||
// selects into the Plot tab.
|
||||
// Focusing is planting intent: the rail shows the toolkit's plant palette.
|
||||
|
|
||||
st.setTab('toolkit')
|
||||
if (!el) return
|
||||
const bw = o.rotationDeg % 180 ? o.heightCm : o.widthCm
|
||||
|
||||
+10
-12
@@ -14,18 +14,18 @@ import { useEditorStore } from './store'
|
||||
import type { EditorObject } from './types'
|
||||
|
||||
/**
|
||||
* The desktop editor's toolkit. Out of focus: the seven object kinds as pill
|
||||
* rows — click to arm (then click the plan), or drag one straight onto it. In a
|
||||
* focused bed it swaps to the plant list with a search, same arm/drag behavior,
|
||||
* plus the bed's bulk tools (fill, clear, scan a packet).
|
||||
* The desktop editor's toolkit, the rail's first tab. Out of focus: the seven
|
||||
* object kinds as pill rows — click to arm (then click the plan), or drag one
|
||||
* straight onto it. In a focused bed it swaps to the plant list with a search,
|
||||
* same arm/drag behavior, plus the bed's bulk tools (fill, clear, scan a
|
||||
* packet).
|
||||
*
|
||||
* It started life as the workspace's left card (the handoff's layout) and now
|
||||
* lives as the first tab of the rail, so the plan and the rail get the width
|
||||
* the card took. `embedded` is that mode: no card chrome of its own, and no
|
||||
* "Toolkit" heading — the tab is the heading.
|
||||
* It started life as the workspace's left card (the handoff's layout) and
|
||||
* moved into the rail so the plan and the rail get the width the card took;
|
||||
* the rail's tab body provides the card chrome and the scrolling, and the tab
|
||||
* is the heading.
|
||||
*/
|
||||
export function Toolkit({
|
||||
|
gitea-actions
commented
🟠 embedded=false default keeps dead non-embedded rendering path with no callers maintainability · flagged by 1 model
🪰 Gadfly · advisory 🟠 **embedded=false default keeps dead non-embedded rendering path with no callers**
_maintainability · flagged by 1 model_
- **`embedded = false` default retains a dead rendering path** (`web/src/editor/Toolkit.tsx:28,65,68`). There is exactly one `<Toolkit` call site (GardenEditorPage.tsx:587) and it always passes `embedded`. The `embedded = false` default makes the non-embedded branch — the `panel overflow-y-auto p-3.5` wrapper and the `<h6>Toolkit</h6>` heading — unreachable dead code. CLAUDE.md is explicit: "Don't add features or introduce abstractions beyond what the task requires." Either make `embedded` a req…
<sub>🪰 Gadfly · advisory</sub>
|
||||
embedded = false,
|
||||
unit,
|
||||
plants,
|
||||
plantings,
|
||||
@@ -40,7 +40,6 @@ export function Toolkit({
|
||||
onClear,
|
||||
onScan,
|
||||
}: {
|
||||
embedded?: boolean
|
||||
unit: UnitPref
|
||||
plants: Plant[]
|
||||
plantings: EditorPlanting[]
|
||||
@@ -62,10 +61,9 @@ export function Toolkit({
|
||||
const [query, setQuery] = useState('')
|
||||
|
||||
return (
|
||||
<div className={cn('flex min-h-0 flex-col gap-2 overflow-x-hidden', embedded ? 'flex-1' : 'panel overflow-y-auto p-3.5')}>
|
||||
<div className="flex min-h-0 flex-1 flex-col gap-2 overflow-x-hidden">
|
||||
{!focused ? (
|
||||
|
gitea-actions
commented
🟡 error-handling, maintainability · flagged by 2 models
🪰 Gadfly · advisory 🟡 **`embedded` prop is always passed true; non-embedded left-card branch is now dead code**
_error-handling, maintainability · flagged by 2 models_
- **`web/src/editor/Toolkit.tsx:65,68` — the `embedded` prop is always passed `true`, so the non-embedded (left-card) branch is dead code.** The only render site is `web/src/pages/GardenEditorPage.tsx:587`, which passes `embedded`; no test or phone-layout path renders `Toolkit` standalone. That leaves the `panel overflow-y-auto p-3.5` styling and the `{!embedded && <h6>Toolkit</h6>}` heading unreachable. Since CLAUDE.md/DESIGN.md now state the left card is gone deliberately ("Don't bring the thi…
<sub>🪰 Gadfly · advisory</sub>
|
||||
<>
|
||||
{!embedded && <h6 className="mx-1 mb-1.5 mt-1">Toolkit</h6>}
|
||||
{OBJECT_KINDS.map((k) => {
|
||||
const armed = armedKind === k.kind
|
||||
return (
|
||||
|
||||
@@ -85,7 +85,7 @@ const TRANSIENT = {
|
||||
armedLotId: null,
|
||||
ghost: null,
|
||||
seasonYear: null,
|
||||
tab: 'plot' as RailTab,
|
||||
tab: 'plot' as RailTab, // the garden summary, not the first tab: a fresh editor shows what is there before how to add to it
|
||||
mode: 'build' as PhoneMode,
|
||||
journalScope: null,
|
||||
liveObject: null,
|
||||
|
||||
@@ -585,7 +585,6 @@ function Editor({
|
||||
const plot = inspector ?? <GardenSummary objects={objects} plantings={plantings} plantsById={plantsById} canEdit={canEdit} />
|
||||
const toolkit = (
|
||||
<Toolkit
|
||||
embedded
|
||||
unit={unit}
|
||||
plants={plants}
|
||||
plantings={plantings}
|
||||
|
||||
Reference in New Issue
Block a user
⚪ 3-line comment exceeds one-line CLAUDE.md convention; third line describes a different code path and can rot
maintainability · flagged by 1 model
web/src/editor/Canvas.tsx:180–182). CLAUDE.md permits one short line maximum, for non-obvious WHY only. The added block is three lines; the third line ("A single click still selects into the Plot tab") describes a different code path's behavior and will silently lie if the single-click handler changes. The first line's WHY is worth keeping; the rest is noise.🪰 Gadfly · advisory