gds-lens 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -1
- package/README.md +11 -4
- package/dist/esm/gds-lens.js +142 -9
- package/dist/inline-wasm/gds-lens-engine.js +0 -0
- package/dist/inline-wasm/gds-lens.js +141 -8
- package/dist/web/gds-lens-engine.js +1 -1
- package/dist/web/gds-lens-engine.wasm +0 -0
- package/dist/web/gds-lens.js +141 -8
- package/package.json +1 -1
- package/src/viewer.css +19 -1
- package/src/viewer.js +216 -7
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,67 @@ follows [semantic versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
From 1.0.0 on, a breaking change to the element's API waits for a major
|
|
8
8
|
version. Before that, `0.x` releases changed it freely.
|
|
9
9
|
|
|
10
|
+
## [1.1.0] - 2026-08-31
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Touch: one finger pans the layout, two pinch to zoom about the point between
|
|
15
|
+
them and drag the view with it. Lifting one finger of a pinch hands the
|
|
16
|
+
gesture to the other rather than ending it, so a pinch that relaxes into a
|
|
17
|
+
drag does not jump.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- On a touch-only device (a coarse pointer *and* no hover, so a touchscreen
|
|
22
|
+
laptop is not one) the control panel starts collapsed to its title bar, and
|
|
23
|
+
both it and the cell hierarchy are capped at 85% of the viewport width. A
|
|
24
|
+
panel sized for a window is most of a phone screen, and the layout is what
|
|
25
|
+
someone opening the viewer came for.
|
|
26
|
+
- Measure mode is offered greyed out where there is no hovering pointer. It is
|
|
27
|
+
placed by clicking two points, and without hover the snap indicator only
|
|
28
|
+
appears after the tap that already used it, under a fingertip.
|
|
29
|
+
- The demo page drops its tagline, its file button, its status line and its
|
|
30
|
+
what-this-is-built-from footer line below 620px. Two of those cannot work on
|
|
31
|
+
touch anyway: there is no drag-and-drop, and the file picker's extension
|
|
32
|
+
filter greys out `.gds`/`.oas` in the iOS Files app.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- Touch input did not work at all on iOS. The gestures were handled in the
|
|
37
|
+
renderer, through `emscripten_set_touchstart_callback`, and that callback
|
|
38
|
+
never runs on iOS Safari: the events reach the canvas and the handler behind
|
|
39
|
+
them does not fire. Emscripten resolves mouse and touch targets through the
|
|
40
|
+
same code path, so the mouse handlers next to them were fine, which is what
|
|
41
|
+
made this invisible from a desktop. The gestures are now ordinary listeners
|
|
42
|
+
on the element, driving the camera through the exported `getCamera` /
|
|
43
|
+
`setCamera` -- the same arithmetic, with nothing between the DOM event and
|
|
44
|
+
the state it changes. Covered by a test that spells out the touch lists.
|
|
45
|
+
- A two-finger pinch over the viewer zoomed the page on iOS instead of the
|
|
46
|
+
layout. Safari answers a pinch with its own page zoom, delivered as a
|
|
47
|
+
proprietary `GestureEvent`, and it does that over an element that has already
|
|
48
|
+
claimed the gesture with `touch-action: none`. Refused on the canvas alone,
|
|
49
|
+
so a pinch anywhere else in an embedding page still zooms it.
|
|
50
|
+
|
|
51
|
+
## [1.0.3] - 2026-08-31
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- Thin shapes vanished when "merge overlapping shapes" was on. The merge pass
|
|
56
|
+
builds a screen-space coverage mask out of fill triangles, but with infill
|
|
57
|
+
off a layer is normally drawn as outlines -- and a GL line covers at least
|
|
58
|
+
one fragment, while the triangles of a 0.5 um waveguide at fit zoom are about
|
|
59
|
+
0.04 px across and cover no sample at all. Every waveguide in a full-die view
|
|
60
|
+
simply disappeared. The mask now rasterises the outline edges as well as the
|
|
61
|
+
fill, so what merge mode shows is what the layer draws. Raising the mask's
|
|
62
|
+
supersampling was not the fix: even 8x still misses 0.04 px, at 16x the
|
|
63
|
+
memory.
|
|
64
|
+
- `[` and `]` jumped into a different marker category. The step walked every
|
|
65
|
+
category that was ticked visible, so with a marker selected in a hidden
|
|
66
|
+
category the first press left it for an unrelated result somewhere else in
|
|
67
|
+
the file. Stepping now stays inside the selected marker's own category
|
|
68
|
+
whenever that category is hidden, including when the step runs off the end of
|
|
69
|
+
the list.
|
|
70
|
+
|
|
10
71
|
## [1.0.2] - 2026-08-25
|
|
11
72
|
|
|
12
73
|
### Changed
|
|
@@ -328,7 +389,9 @@ web page rather than for a webview.
|
|
|
328
389
|
worker-loading route and shipped unsubstituted. The `createWorker` host hook
|
|
329
390
|
replaces it.
|
|
330
391
|
|
|
331
|
-
[Unreleased]: https://github.com/EthanLowenthal/GDS-Lens/compare/v1.0
|
|
392
|
+
[Unreleased]: https://github.com/EthanLowenthal/GDS-Lens/compare/v1.1.0...HEAD
|
|
393
|
+
[1.1.0]: https://github.com/EthanLowenthal/GDS-Lens/compare/v1.0.3...v1.1.0
|
|
394
|
+
[1.0.3]: https://github.com/EthanLowenthal/GDS-Lens/compare/v1.0.2...v1.0.3
|
|
332
395
|
[1.0.2]: https://github.com/EthanLowenthal/GDS-Lens/compare/v1.0.1...v1.0.2
|
|
333
396
|
[1.0.1]: https://github.com/EthanLowenthal/GDS-Lens/compare/v1.0.0...v1.0.1
|
|
334
397
|
[1.0.0]: https://github.com/EthanLowenthal/GDS-Lens/compare/v0.1.1...v1.0.0
|
package/README.md
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
# GDS Lens
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/gds-lens)
|
|
4
|
+
[](https://www.npmjs.com/package/gds-lens)
|
|
4
5
|
[](LICENCE.md)
|
|
5
6
|
|
|
6
7
|
GDSII and OASIS chip layouts, parsed and rendered in the browser. A drop-in
|
|
7
8
|
custom element compiled to pure JS+WASM with a WebGL2 renderer.
|
|
8
9
|
|
|
10
|
+
**[Open a layout in your browser](https://lowenth.al/GDS-Lens/)** to see it
|
|
11
|
+
work: drop a `.gds` or `.oas` onto the page, or look at the demo layout it
|
|
12
|
+
starts with. Nothing is uploaded, and there is nothing to install. The page is
|
|
13
|
+
built from the published package, so it is also the quickest way to check what
|
|
14
|
+
a given release does.
|
|
15
|
+
|
|
9
16
|

|
|
10
17
|
|
|
11
18
|
> **Status**: 1.0. The element's API is stable, and breaking changes wait
|
|
@@ -25,10 +32,10 @@ import "gds-lens"; // registers <gds-lens>
|
|
|
25
32
|
<gds-lens src="chip.gds" style="width: 100%; height: 600px"></gds-lens>
|
|
26
33
|
```
|
|
27
34
|
|
|
28
|
-
That's the whole thing. Pan with the mouse, zoom with the wheel
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
else to serve.
|
|
35
|
+
That's the whole thing. Pan with the mouse, zoom with the wheel; on a touch
|
|
36
|
+
screen, drag to pan and pinch to zoom. The import pulls in one self-contained
|
|
37
|
+
module — the parser, the renderer, the WebAssembly binary, and the control
|
|
38
|
+
panel — so there is nothing to copy and nothing else to serve.
|
|
32
39
|
|
|
33
40
|
Or drive it from JavaScript:
|
|
34
41
|
|