ea 0.6.3 → 0.6.5

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -0
  3. data/config/themes/119.yml +4 -4
  4. data/frontend/dist/app.iife.js +8 -8
  5. data/frontend/src/App.vue +6 -2
  6. data/frontend/src/components/AppHeader.vue +35 -8
  7. data/frontend/src/components/AppSidebar.vue +2 -2
  8. data/frontend/src/components/ClassDetails.vue +103 -120
  9. data/frontend/src/components/DiagramView.vue +19 -6
  10. data/frontend/src/components/PackageDetails.vue +67 -26
  11. data/frontend/src/components/PackageTreeNode.vue +25 -20
  12. data/frontend/src/components/SearchResults.vue +21 -8
  13. data/frontend/src/components/WelcomeView.vue +2 -2
  14. data/frontend/src/stores/dataStore.ts +142 -48
  15. data/frontend/src/stores/uiStore.ts +3 -4
  16. data/frontend/src/types.ts +160 -163
  17. data/lib/ea/model/diagram_connector.rb +9 -0
  18. data/lib/ea/model/property.rb +6 -1
  19. data/lib/ea/sources/qea/classifier_builder.rb +3 -1
  20. data/lib/ea/sources/qea/diagram_builder.rb +91 -9
  21. data/lib/ea/sources/qea/property_builder.rb +12 -2
  22. data/lib/ea/spa/output/single_file_strategy.rb +1 -1
  23. data/lib/ea/spa/projector.rb +108 -6
  24. data/lib/ea/svg/ea_emitter/compartment/attributes.rb +1 -0
  25. data/lib/ea/svg/ea_emitter/compartment/constraints.rb +1 -0
  26. data/lib/ea/svg/ea_emitter/compartment/enum_literals.rb +9 -25
  27. data/lib/ea/svg/ea_emitter/compartment/header.rb +1 -0
  28. data/lib/ea/svg/ea_emitter/element/attribute_line_builder.rb +5 -0
  29. data/lib/ea/svg/ea_emitter/element/attribute_renderer.rb +51 -11
  30. data/lib/ea/svg/ea_emitter/element/compartment_geometry.rb +12 -10
  31. data/lib/ea/svg/ea_emitter/element/header_line_provider/name.rb +6 -15
  32. data/lib/ea/svg/ea_emitter/element/header_line_provider/stereotype_label.rb +25 -8
  33. data/lib/ea/svg/ea_emitter/element/header_renderer.rb +16 -4
  34. data/lib/ea/svg/ea_emitter/element/legend_renderer.rb +29 -4
  35. data/lib/ea/svg/ea_emitter/elements.rb +70 -20
  36. data/lib/ea/svg/ea_emitter/font_resolver.rb +5 -6
  37. data/lib/ea/svg/ea_emitter/label/end_label.rb +3 -1
  38. data/lib/ea/svg/ea_emitter/labels.rb +38 -2
  39. data/lib/ea/svg/ea_emitter/text_renderer.rb +97 -8
  40. data/lib/ea/svg/parity/checker.rb +19 -9
  41. data/lib/ea/svg/parity/corpus_report.rb +83 -0
  42. data/lib/ea/svg/parity/differ.rb +231 -0
  43. data/lib/ea/svg/parity.rb +2 -0
  44. data/lib/ea/theme/definition.rb +3 -3
  45. data/lib/ea/theme/loader.rb +2 -2
  46. data/lib/ea/version.rb +1 -1
  47. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30948ffbe1b205fa0b81592a415220b40290c7e25890d86d3f990687b73fa5d1
4
- data.tar.gz: d7f7a976f844b0f4e907240420a440f2d6a44517a7fa40c08c51a2015b82dbcb
3
+ metadata.gz: 9d4eb047626f932a223d59f60d7a07ac839542e16f1f08cc1e27f99102592af7
4
+ data.tar.gz: d38407abf49dd80a886269968e944edfa691bc09ca31772556d8d20a89dac294
5
5
  SHA512:
6
- metadata.gz: 4c1f3f1d29dbf3da60e970a39c45006ba616b711f11b734d03f8ddcb91956573989c04faf60eb20e9cb0e7ec4f91ac6fc6c6c4e0138b90e58cf90f320aac2483
7
- data.tar.gz: f6c8bce31c33ca03a08cb1d4e54e150c2d21d9c933caf439effc7cb160d3fdd76a962f9942973add8de49fb26baf1f2b9807d4d029f156a293a9a595a686fb5b
6
+ metadata.gz: 50d22ea166bdb5ee80f60a16d2396dc12b90470d1c9f5048279ee9e9d4233b7778af481f04719618416f59d26ada1ddb750bbda03e8fd9f6c4abc1c279ecd9a1
7
+ data.tar.gz: 9ac1166cc762bce236ca889b8a28f26bb32f3688fa00ce925b53f91adf5999976057aefe91e4b684fdf55adbca352af6bd4f5901e9b5251ba0b29c21999becd5
data/CHANGELOG.md CHANGED
@@ -7,6 +7,78 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+ - `Ea::Model::DiagramConnector` now carries `source_port` / `target_port`
12
+ — the absolute connection points EA docks each connector endpoint
13
+ at, derived from the `t_diagramlinks.Geometry` SX/SY and EX/EY
14
+ offsets by ray-casting from the element center through
15
+ center+offset to the box border (fixes #52; semantics verified
16
+ against EA-published reference SVGs). QEA-built connectors route
17
+ from these ports instead of edge-midpoint guesses, so arrows and
18
+ aggregation diamonds terminate on the element border exactly where
19
+ EA places them.
20
+ - QEA `diagram_builder` maps per-element `font_size` (EA's tenth-point
21
+ `fontsz`, custom values only) and `font_underline` from the
22
+ objectstyle string (fixes #53).
23
+ - `Ea::Svg::Parity::Checker` compares font-family and font-size
24
+ histograms across all emitted text (was: first-text only), so a
25
+ single wrong-size compartment fails the parity check (#54).
26
+
27
+ ### Fixed
28
+ - QEA diagram coordinates are now mirrored into EA's screen-down
29
+ space at build time (stored t_diagramobjects rects are bottom-up;
30
+ EA's own published SVGs draw the mirrored view). Connector ports,
31
+ Path waypoints, and bend fallbacks flip consistently, so SVG and
32
+ SPA output matches EA's orientation exactly.
33
+ - Element font sizes stored as EA's classic defaults (fontsz 80/90)
34
+ are treated as use-default markers: rendering falls back to the
35
+ 7pt theme size EA actually emits, and only genuinely custom sizes
36
+ override it.
37
+ - Attribute multiplicity bounds stored as EA's "n" no longer parse
38
+ to 1 (which silently dropped the `[1..n]` suffix); unbounded
39
+ uppers render as `[1..n]` like EA.
40
+ - `Ea::Svg::EaEmitter::TextRenderer` no longer raises
41
+ `TypeError: can't convert nil into Float` on degenerate placements
42
+ with missing coordinates or font size — it renders at the origin
43
+ with zero-width estimation instead (fixes #51; 297 of 3,702 PLATEAU
44
+ CG3 diagrams previously crashed `ea svg --all` and shipped without
45
+ SVG in SPA output).
46
+
47
+ ## [0.6.4]
48
+
49
+ ### Added
50
+ - `Ea::Spa::Projector` embeds model statistics (packages, classes,
51
+ attributes, operations, associations, diagrams) in the skeleton
52
+ metadata hash, restoring the stats panels in the SPA sidebar and
53
+ welcome view.
54
+ - Classifier shards now carry relationship stubs — `generalizations`,
55
+ `specializations`, and `associations` (with other-end id, role,
56
+ cardinality, aggregation) — so the SPA can render inheritance and
57
+ association tables without extra round trips.
58
+ - Diagram shards now embed the pre-rendered SVG from
59
+ `Ea::Svg::EaEmitter::Document`, plus skeleton entries for packages
60
+ and diagrams so every shard is addressable by id.
61
+
62
+ ### Fixed
63
+ - Sharded SPA output was unbootable: `index.html` published
64
+ `__SPA_SKELETON_URL__`/`__SPA_SEARCH_URL__`/`__SPA_SHARD_BASE__`
65
+ globals that the frontend bundle never read (and no shard loader
66
+ existed). The frontend now boots from skeleton.json + search.json
67
+ and lazily fetches shards with per-request dedupe and bounded
68
+ concurrency.
69
+ - Single-file SPA embedded the skeleton entries under
70
+ `skeletonEntries` while skeleton.json used `entries`; both now
71
+ emit `entries`.
72
+ - Package tree `childIds`/`classifierIds`/`diagramIds` and the
73
+ package shard payload now derive children/classifiers/diagrams
74
+ from the document (`parent_id`, `package_id` links) — the parser
75
+ leaves `Package#sub_package_ids`, `Package#classifier_ids`, and
76
+ `Package#diagram_ids` empty, which flattened the whole tree under
77
+ an empty root.
78
+ - SPA views (class/package/diagram details, tree, search modal) are
79
+ rewired to the `Ea::Model` shard payload shape; the header search
80
+ modal now actually queries the search index.
81
+
10
82
  ## [0.5.1] — 2026-08-03
11
83
 
12
84
  ### Added
@@ -38,7 +38,7 @@ strokes:
38
38
  # Text geometry — EA uses GDI text metrics for exact widths. We
39
39
  # approximate with character_count * size * factor.
40
40
  text_metrics:
41
- width_factor: 0.65
41
+ width_factor: 0.612
42
42
 
43
43
  # Canvas frame insets (EA places element (0,0) at SVG (left, top)).
44
44
  canvas:
@@ -60,10 +60,10 @@ frame:
60
60
  # diagram byte-diff: element at y=40 size=9, stereotype y=58 →
61
61
  # offset = 18 = size * 2; name y=73 → line_h = size + 6).
62
62
  compartments:
63
- header_top_padding: 9
63
+ header_top_padding: 12
64
64
  header_line_offset: 6
65
65
  divider_offset: 8
66
- attr_line_offset: 4
66
+ attr_line_offset: 6
67
67
  attr_first_offset: 7
68
68
  op_line_offset: 4
69
69
  op_line_offset: 4
@@ -71,7 +71,7 @@ compartments:
71
71
  # Attribute text x-offsets within element bounds.
72
72
  attribute:
73
73
  visibility_x_offset: 5
74
- content_x_offset: 26
74
+ content_x_offset: 22
75
75
 
76
76
  # Marker geometry constants.
77
77
  markers: