Commit graph

60 commits

Author SHA1 Message Date
641513c2ef Integrate circuit list navigation and AMEV cell picker
Preserve the ID fallback and compact editor controls. Add dialog keyboard focus, Tab containment and Escape handling; document navigation and picker behavior.

Validation: 418 tests, API/web builds, scripts and Next typechecks, isolated AMEV dialog checks and diff checks passed. Full GUI retest waived by the user based on the colleague's prior testing; the keyboard follow-up was checked in isolation.
2026-09-26 21:14:20 +02:00
203757b92c Integrate compact editor actions and fix header units 2026-09-26 21:07:36 +02:00
Grovy311
79fcb75ffb Create client ids without crypto.randomUUID
crypto.randomUUID() is only defined in secure contexts (HTTPS or
localhost). Opened over plain HTTP from another machine in the LAN, the
circuit list editor failed with "crypto.randomUUID is not a function"
whenever it created a circuit, device row, circuit group or distribution
board component, including typing into the -frei- row.

createClientId() uses crypto.randomUUID() where available and otherwise
builds an RFC 4122 version 4 UUID from crypto.getRandomValues(), which
works in every context. AGENTS.md notes the rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 12:01:43 +02:00
Grovy311
ced4917a86 Offer the AMEV simultaneity-factor table in the circuit list
The selected GZF cell shows a small table-icon button, and Alt+ArrowDown opens
the same picker from the selected or edited cell; Escape closes it. The
shared GzfPickerModal is reused. The picked mean value is committed through
commitEdit with an explicit target cell, so it is a regular undoable edit on
device rows, compact circuits, reserve circuits and the -frei- row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 11:52:38 +02:00
Grovy311
d95f0bf5c0 Compact circuit list column headers with filter icons
- Replace the "Filtern" text buttons with a funnel icon next to the column
  label; an active filter is highlighted and shows its value count.
- Header labels no longer break inside words (e.g. "Bemerkung"); hyphens
  are non-breaking and a trailing unit moves to its own line, so all
  headers share one height.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 10:30:15 +02:00
Grovy311
e394ff93f4 Use icon buttons in the circuit list editor
- New IconButton/IconButtonSeparator component based on lucide-react.
- Toolbar: icon plus text, grouped into history, view and insert blocks.
- Group headers: compact icons for add circuit, upstream fuse (VS), group
  RCD (FI), edit, move up/down, renumber and delete; the header no longer
  overflows the grid.
- Rows: add device, delete circuit (trash) and delete device (ListX).
- The previous German labels remain accessible names and tooltips;
  destructive actions highlight in the danger color.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 10:23:36 +02:00
b45dc5002d Fix code-review findings across domain, persistence, server and frontend
Full-codebase review turned up five real correctness/security bugs and
a dozen smaller inconsistencies; all are fixed here with matching test
coverage:

- BMK uniqueness silently allowed German-umlaut duplicates ("Ä1" vs
  "ä1") because the DB's normalized index only folds ASCII case. Added
  a shared Unicode-aware pre-check used by every circuit/component
  insert and rename path (one of which had no pre-check at all).
- CircuitDeviceRow.simultaneityFactor had no upper bound at the row
  level (command model and snapshot/restore schema), unlike every
  sibling entity, letting a bad value silently corrupt power totals.
- Grid cell editing silently misread German thousands-separator input
  ("1.500" parsed as 1.5); "." is now rejected outright with a clear
  message instead of guessing.
- The editor's shared command runner (runCommand/applyHistory) had no
  re-entrancy guard, so a double click/drop could fire the same
  command twice and race a BMK collision or revision conflict. Added a
  synchronous ref guard plus isSaving on the buttons that lacked it.
- GET .../next-identifier leaked circuit-numbering state for sections
  in other projects (no ownership check, 400 instead of 404). Moved
  under /projects/:projectId and scoped it.

Also: added the missing circuits.section_id / circuit_device_rows.
circuit_id indexes (migration 0006), gave FormModal a focus trap /
Escape-to-close / focus restore and rebuilt ProjectSettingsModal on
top of it instead of duplicated markup, removed dead code (3 orphaned
domain model files, an unused persistence helper, a wrapper only used
by its own test), pointed the project page at GET /projects/:id
instead of listing+filtering client-side, closed the gap between the
documented 18 MB CSV limit and the ~17.17 MiB actually enforced, added
missing upper bounds on several free-text fields, filled in nine
missing German labels in the revision timeline, replaced a
key-order-fragile JSON.stringify equality check with a real field
comparison, made an implicit sort-order assumption in three
renumbering helpers explicit, cleared the sidebar's target selection
when it no longer resolves after a tree reload, and fixed
updateGlobalDevice to check-then-write instead of write-then-check.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 21:31:16 +02:00
1e3c721cfa Derive project device phases from category 2026-07-31 14:37:45 +02:00
5fb81bab04 Support decimal commas and cell units 2026-07-31 14:33:47 +02:00
734a2bcfc4 Create clean release database baseline 2026-07-31 14:07:26 +02:00
bd8dd09f79 Open circuit protection from grid cell 2026-07-31 10:02:11 +02:00
2964205a27 Show circuit protection in saved layouts 2026-07-31 09:45:58 +02:00
2d97fafce9 Restore circuit drag placement 2026-07-31 08:33:41 +02:00
ab989cc637 Delete populated circuit groups safely 2026-07-31 08:01:55 +02:00
93ec294759 Move circuits between groups 2026-07-31 07:58:42 +02:00
be9c6f0d52 Renumber circuit groups explicitly 2026-07-31 07:53:07 +02:00
0cb280ddb2 Reorder circuit groups 2026-07-31 07:47:45 +02:00
8898117ed4 Configure circuit protection 2026-07-31 07:45:48 +02:00
0c92fbd09e Manage circuit groups 2026-07-31 07:32:46 +02:00
756e307bd8 Manage distribution board components 2026-07-31 07:29:25 +02:00
31589875b5 Render protected circuit structure 2026-07-31 07:22:26 +02:00
9ea081179d Add distribution power summaries 2026-07-29 19:02:18 +02:00
602ae6da0b Compact circuit grid columns 2026-07-29 11:12:24 +02:00
1b2ca84258 Preserve focus inside grid editors 2026-07-29 11:02:30 +02:00
096ba8aa1c Standardize phase type labels 2026-07-29 10:46:00 +02:00
084103bf54 Derive device voltages from project settings 2026-07-29 09:53:58 +02:00
0180f768ac Improve editor totals and formatting 2026-07-29 08:26:03 +02:00
edf245a21c Use full-width editor device drawer 2026-07-28 20:43:08 +02:00
4b47bc2bcc Restore editor history after reload 2026-07-25 21:45:58 +02:00
c45afd0981 Persist section renumbering 2026-07-25 21:30:29 +02:00
abcb468807 Persist circuit reorders 2026-07-25 21:22:10 +02:00
08a2775a88 Persist device row moves 2026-07-25 21:09:02 +02:00
2eba4ea75e Persist circuit structure edits 2026-07-25 20:49:34 +02:00
76d8d59391 Persist circuit cell edits 2026-07-25 20:26:45 +02:00
0800f984bb Create circuits with rows atomically 2026-07-23 17:36:38 +02:00
e4fd7e0df6 Translate remaining frontend 2026-07-22 23:25:53 +02:00
7257deacdc Redesign and translate grid controls 2026-07-22 23:19:21 +02:00
fafccca50f Redesign grid filter menu 2026-07-22 23:04:03 +02:00
d1615bcfee Clarify active grid filters 2026-07-22 22:57:25 +02:00
d0b8239085 Contain circuit editor scrolling 2026-07-22 22:44:49 +02:00
5dc3ab90be Prepare circuits for future sizing 2026-07-22 20:53:04 +02:00
6c45c97ffd Extract circuit grid projection 2026-07-22 20:46:32 +02:00
009152b406 Extract circuit grid model 2026-07-22 20:40:07 +02:00
b3a7ff79da Confirm cross-section device moves 2026-07-22 20:31:55 +02:00
f8802fecdb Harden grid deletion and BMK validation 2026-07-22 20:27:01 +02:00
a6b83285eb Make Ctrl+Plus context aware 2026-07-22 20:15:33 +02:00
fd62bf2e15 Validate project device drop targets 2026-07-22 20:07:09 +02:00
9d07ed9856 Align project devices with circuit model 2026-07-22 19:31:08 +02:00
7580ad0ade Documentation 2026-05-07 22:55:15 +02:00
b1e19a88d5 Started multiline manipulations 2026-05-05 21:20:09 +02:00