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 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.2...HEAD
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
  [![npm](https://img.shields.io/npm/v/gds-lens.svg?style=flat-square&color=0f1720&label=NPM)](https://www.npmjs.com/package/gds-lens)
4
+ [![Downloads](https://img.shields.io/npm/dt/gds-lens.svg?style=flat-square&color=0f1720&label=Downloads)](https://www.npmjs.com/package/gds-lens)
4
5
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](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
  ![The viewer: a cell hierarchy tree, a rendered photonic layout, and the layer and display controls](https://raw.githubusercontent.com/EthanLowenthal/GDS-Lens/main/images/example.png)
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. The import
29
- pulls in one self-contained module the parser, the renderer, the WebAssembly
30
- binary, and the control panel so there is nothing to copy and nothing
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