uml-viewer 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40e9d19697570e5d421743dcdbfbc4fba58c51a2a32587d98a958ffb13aa61cf
4
- data.tar.gz: 179c36b469a2a1ea647be5000398b1f1d59845d41738378fd650b332442cd606
3
+ metadata.gz: e7c7897682b4ff95facdeb4b758f0f4bc2a5d32cc93d2680d7d5316458854c10
4
+ data.tar.gz: c5be93253d3f1d591f95cb6af0c26f6cef401e118c9d7127bcb1f7de6395ebd0
5
5
  SHA512:
6
- metadata.gz: d6454c33dd2ddc6f1916e882a03f72d2daa9cce8dd732fd90ad526fdc2db5c13c92448a2f4770de47625d61efaf7c8cdf91a4fc2847e333a23c25049ab8dbbbd
7
- data.tar.gz: 99abfdedfa244fc31e10a2516d8222a4fdee704be15cf0764d0bd674fc94fb75da02798f23bbb2bdde919878aef044c292de896ec078e2dd87cce920eed42cd4
6
+ metadata.gz: 977912ea2f8c411831cc3ea2a4cfe9837c06755f378adb3587662b6bc2fb05868ab45bbfb5336cde85fa86ad792f99eda35b28eb2e45f51a9b4646acc5315dc2
7
+ data.tar.gz: 1b1c0ea3db83f1571134c5649b1df80c0a58999f3737e74978b39e8cf0ad0f41c5f8d75eac3a39fb03bbdd937e69e24e2a028f1e3d7209fac6bc7954ab84cd3b
data/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@ All notable changes are documented here. The format is based on [Keep a Changelo
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.1.2] - 2026-10-23
8
+
9
+ ### Added
10
+ - A box and a member name that open on a double-click show the hand cursor.
11
+ - A hovered box gets a border in the text color, and a hovered member name gets a light background behind its line, as in the original tool.
12
+ - A double-click beside a member name, on its line, also opens it.
13
+ - A click on empty space closes the source panel and the class card.
14
+
7
15
  ## [0.1.1] - 2026-10-23
8
16
 
9
17
  ### Changed
data/README.md CHANGED
@@ -18,6 +18,7 @@ uml-viewer path/to/project
18
18
 
19
19
  - Double-click a box to open it. Press `Esc` to go back.
20
20
  - Double-click a class to open its card. Click an operation to see its source.
21
+ - Press `Esc` or click empty space to close the source panel and the class card.
21
22
  - Hover an arrow to see the class pairs behind it.
22
23
  - Right-click a box or a class to send **Explain** or **Omit** to Claude.
23
24
 
@@ -1,5 +1,5 @@
1
1
  module Uml
2
2
  module Viewer
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
@@ -157,6 +157,7 @@
157
157
  lines.forEach((line, index) => {
158
158
  const attrs = { x: 14, y: 36 + LINE * index, class: line.more ? "more" : "member" };
159
159
  if (!line.more) Object.assign(attrs, { "data-id": line.id, "data-kind": line.kind });
160
+ if (!line.more) el("rect", { class: "wash", x: 6, y: attrs.y - 12, width: placed.width - 12, height: LINE, "data-id": line.id, "data-kind": line.kind }, group);
160
161
  el("text", attrs, group).textContent = line.text;
161
162
  });
162
163
  };
@@ -441,7 +442,7 @@
441
442
  }
442
443
 
443
444
  function onDoubleClick(event) {
444
- const member = event.target.closest("text.member");
445
+ const member = event.target.closest("text.member, rect.wash");
445
446
  const box = event.target.closest("g.box");
446
447
  if (member && BOXES.includes(member.dataset.kind)) return openView(member.dataset.id);
447
448
  if (!member && box && BOXES.includes(box.dataset.type)) return openView(box.dataset.id);
@@ -458,7 +459,7 @@
458
459
  addEventListener("scroll", saveSession);
459
460
 
460
461
  svg.addEventListener("contextmenu", (event) => {
461
- const member = event.target.closest("text.member");
462
+ const member = event.target.closest("text.member, rect.wash");
462
463
  const box = event.target.closest("g.box");
463
464
  if (!member && (!box || box.dataset.type === "foreign")) return;
464
465
  event.preventDefault();
@@ -500,6 +501,11 @@
500
501
  declutterButton.addEventListener("click", cycleDeclutter);
501
502
 
502
503
  document.addEventListener("click", (event) => { if (!menu.contains(event.target)) menu.classList.remove("open"); });
504
+ svg.addEventListener("click", (event) => {
505
+ if (event.target !== svg) return;
506
+ document.getElementById("source").hidden = true;
507
+ document.getElementById("card").hidden = true;
508
+ });
503
509
 
504
510
  const restore = (session) => {
505
511
  if (Array.isArray(session.drill) && session.drill.length) drill = session.drill;
@@ -16,10 +16,15 @@
16
16
  #banner { color: var(--red); }
17
17
  #banner:empty { display: none; }
18
18
  svg { position: absolute; top: 36px; left: 0; }
19
- g.box rect, g.box ellipse { fill: var(--box); stroke: var(--line); }
19
+ g.box rect:not(.wash), g.box ellipse { fill: var(--box); stroke: var(--line); }
20
20
  g.box.foreign ellipse { stroke-dasharray: 4 3; }
21
21
  g.box.folder text.title { font-style: italic; }
22
22
  g.box.component rect { stroke-width: 2; }
23
+ g.box:not(.foreign) { cursor: pointer; }
24
+ g.box:not(.foreign):hover > rect:not(.wash) { stroke: var(--fg); }
25
+ rect.wash { fill: transparent; }
26
+ rect.wash:hover { fill: var(--hl); }
27
+ text.member { pointer-events: none; }
23
28
  text { fill: var(--fg); }
24
29
  text.level, text.more { fill: var(--muted); }
25
30
  path.arrow { fill: none; stroke: var(--line); stroke-width: 1.2; marker-end: url(#head); }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uml-viewer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Hopman