velxio/frontend/src/utils
David Montero Crespo d4a42a4e75 feat(ui): the Part Inspector - right-click dialog merged with the picker card
The right-click dialog was a 250px column: every pin as a text row (an ESP32
means 30 rows of scrolling), a few editors, Rotate/Delete. The picker's info
card (datasheet, brand, Buy) was a separate surface you could only reach by
hovering the catalogue. One dialog now serves both:

- ~560px, two panes: live preview + actions on the left, Properties/Datasheet
  tabs on the right. The Datasheet tab IS the picker card's body -
  ComponentInfoPanel was split into an embeddable ComponentInfoBody (+
  useComponentDoc, and its .cip-* styles moved to their own stylesheet) so
  both surfaces render one implementation.
- "Show pins" (off by default): the preview is the REAL web component,
  mounted and scaled, with pin markers at their true pinInfo positions and
  labels flanking the side each pin lives on. pinInspectorLayout is pure
  geometry - nearest-edge classification, per-side label stacking with a
  minimum spacing and leader lines when nudged, interior pins as
  dot+tooltip - driven only by pinInfo plus the measured element size, so
  every part and board, present or future, works with no per-part data.
  Dots are tinted by the pin's declared signal (i2c/spi/power/...).
- Clicking a pin keeps the old contract (onPinSelect -> handlePinClick), so
  wires start with the same undo, colors and running-state gating.
- The two open gestures finally agree on coordinates: right-click always
  passed viewport coords while touch passed canvas-local ones; the dialog is
  now portaled to body in viewport space and the touch site converts.
- Keybind capture, the SD Card panel, the two-step delete, Escape and
  click-outside all migrate unchanged. Mobile keeps the full-sheet layout.

Geometry covered by pin-inspector-layout.test.ts with coordinate tables
copied verbatim from the shipped parts (ESP32 two-column board, LED, an
interior-pin case).
2026-08-03 21:44:46 +02:00
..
analytics.ts
…
boardPinMapping.ts fix(pi): perifericos completos en la familia Pi — entradas, buses y pines 2026-07-29 17:05:39 +02:00
boardProtocols.ts fix(uart): la Pi puede hablar por serie con la placa de al lado 2026-07-29 07:40:13 +02:00
breadboardNets.ts
…
breadboardOccupancy.ts
…
breadboardSnap.ts
…
captureCanvasPreview.ts
…
compilationLogger.ts
…
countryFlag.ts
…
dropSlot.ts feat(canvas): ver donde cae lo que anades, y clicks con sentido 2026-07-30 15:40:52 +02:00
esp32ImageParser.ts
…
exampleToBuildNetlistInput.ts
…
fatImage.ts
…
firmwareLoader.ts
…
generateExamplePreview.tsx
…
hexParser.ts
…
importProject.ts
…
keyButtonBindings.ts
…
loadExample.ts feat(pi-family): unified editor UX — Monaco + explorer + bottom xterm, one file surface 2026-07-28 19:43:20 +02:00
piUpload.ts feat(pi-family): one-click run UX — autoRun + guestHome + clean serial mirror 2026-07-28 16:28:02 +02:00
pinInspectorLayout.ts feat(ui): the Part Inspector - right-click dialog merged with the picker card 2026-08-03 21:44:46 +02:00
pinPositionCalculator.ts
…
projectPayload.ts
…
reservedUsernames.ts
…
sdCardFiles.ts
…
socketSnap.ts fix(sockets): a board a hair off the seat is still plugged in 2026-08-01 06:14:43 +02:00
useSEO.ts
…
useTouchDevice.ts
…
uuid.ts
…
vlxFile.ts
…
wireAutoRoute.ts
…
wireColors.ts
…
wireHitDetection.ts
…
wireUtils.ts
…
wokwiZip.ts
…
workspaceDraft.ts
…