@diagrammo/dgmo 0.8.20 → 0.8.22

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 (110) hide show
  1. package/AGENTS.md +2 -1
  2. package/README.md +1 -0
  3. package/dist/cli.cjs +142 -90
  4. package/dist/editor.cjs +30 -4
  5. package/dist/editor.cjs.map +1 -1
  6. package/dist/editor.js +30 -4
  7. package/dist/editor.js.map +1 -1
  8. package/dist/highlight.cjs +25 -3
  9. package/dist/highlight.cjs.map +1 -1
  10. package/dist/highlight.js +25 -3
  11. package/dist/highlight.js.map +1 -1
  12. package/dist/index.cjs +21201 -12886
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +646 -89
  15. package/dist/index.d.ts +646 -89
  16. package/dist/index.js +21178 -12889
  17. package/dist/index.js.map +1 -1
  18. package/docs/guide/chart-mindmap.md +198 -0
  19. package/docs/guide/chart-sequence.md +23 -1
  20. package/docs/guide/chart-sitemap.md +18 -1
  21. package/docs/guide/chart-tech-radar.md +219 -0
  22. package/docs/guide/chart-wireframe.md +100 -0
  23. package/docs/guide/index.md +8 -0
  24. package/docs/guide/registry.json +1 -0
  25. package/docs/language-reference.md +249 -4
  26. package/gallery/fixtures/boxes-and-lines.dgmo +10 -3
  27. package/gallery/fixtures/c4-full.dgmo +2 -2
  28. package/gallery/fixtures/cycle/ooda-loop.dgmo +25 -0
  29. package/gallery/fixtures/cycle/pdca-circle-nodes.dgmo +12 -0
  30. package/gallery/fixtures/cycle/pdca-minimal.dgmo +6 -0
  31. package/gallery/fixtures/cycle/sprint-cycle-span.dgmo +17 -0
  32. package/gallery/fixtures/gantt-full.dgmo +2 -2
  33. package/gallery/fixtures/gantt.dgmo +2 -2
  34. package/gallery/fixtures/infra-full.dgmo +2 -2
  35. package/gallery/fixtures/infra.dgmo +1 -1
  36. package/gallery/fixtures/sequence-tags-protocols.dgmo +2 -2
  37. package/gallery/fixtures/sequence-tags.dgmo +2 -2
  38. package/gallery/fixtures/tech-radar-dense.dgmo +77 -0
  39. package/gallery/fixtures/tech-radar.dgmo +36 -0
  40. package/gallery/fixtures/timeline.dgmo +1 -1
  41. package/package.json +1 -1
  42. package/src/boxes-and-lines/collapse.ts +21 -3
  43. package/src/boxes-and-lines/layout.ts +360 -42
  44. package/src/boxes-and-lines/parser.ts +94 -11
  45. package/src/boxes-and-lines/renderer.ts +371 -114
  46. package/src/boxes-and-lines/types.ts +2 -1
  47. package/src/c4/layout.ts +8 -8
  48. package/src/c4/parser.ts +35 -2
  49. package/src/c4/renderer.ts +19 -3
  50. package/src/c4/types.ts +1 -0
  51. package/src/chart.ts +14 -7
  52. package/src/completion.ts +253 -0
  53. package/src/cycle/layout.ts +732 -0
  54. package/src/cycle/parser.ts +352 -0
  55. package/src/cycle/renderer.ts +539 -0
  56. package/src/cycle/types.ts +77 -0
  57. package/src/d3.ts +240 -40
  58. package/src/dgmo-router.ts +15 -0
  59. package/src/echarts.ts +7 -4
  60. package/src/editor/dgmo.grammar +5 -1
  61. package/src/editor/dgmo.grammar.js +1 -1
  62. package/src/editor/keywords.ts +26 -0
  63. package/src/gantt/parser.ts +2 -8
  64. package/src/graph/flowchart-parser.ts +15 -21
  65. package/src/graph/layout.ts +73 -9
  66. package/src/graph/state-collapse.ts +78 -0
  67. package/src/graph/state-parser.ts +5 -10
  68. package/src/graph/state-renderer.ts +139 -34
  69. package/src/index.ts +78 -0
  70. package/src/infra/layout.ts +218 -74
  71. package/src/infra/parser.ts +30 -6
  72. package/src/infra/renderer.ts +14 -8
  73. package/src/infra/types.ts +10 -3
  74. package/src/journey-map/layout.ts +386 -0
  75. package/src/journey-map/parser.ts +540 -0
  76. package/src/journey-map/renderer.ts +1456 -0
  77. package/src/journey-map/types.ts +47 -0
  78. package/src/kanban/parser.ts +3 -10
  79. package/src/kanban/renderer.ts +325 -63
  80. package/src/mindmap/collapse.ts +88 -0
  81. package/src/mindmap/layout.ts +605 -0
  82. package/src/mindmap/parser.ts +373 -0
  83. package/src/mindmap/renderer.ts +544 -0
  84. package/src/mindmap/text-wrap.ts +217 -0
  85. package/src/mindmap/types.ts +55 -0
  86. package/src/org/parser.ts +2 -6
  87. package/src/render.ts +18 -21
  88. package/src/sequence/renderer.ts +273 -56
  89. package/src/sharing.ts +3 -0
  90. package/src/sitemap/layout.ts +56 -18
  91. package/src/sitemap/parser.ts +26 -17
  92. package/src/sitemap/renderer.ts +34 -0
  93. package/src/sitemap/types.ts +1 -0
  94. package/src/tech-radar/index.ts +14 -0
  95. package/src/tech-radar/interactive.ts +1058 -0
  96. package/src/tech-radar/layout.ts +190 -0
  97. package/src/tech-radar/parser.ts +385 -0
  98. package/src/tech-radar/renderer.ts +1159 -0
  99. package/src/tech-radar/shared.ts +187 -0
  100. package/src/tech-radar/types.ts +81 -0
  101. package/src/utils/description-helpers.ts +33 -0
  102. package/src/utils/export-container.ts +3 -2
  103. package/src/utils/legend-d3.ts +1 -0
  104. package/src/utils/legend-layout.ts +5 -3
  105. package/src/utils/parsing.ts +48 -7
  106. package/src/utils/tag-groups.ts +46 -60
  107. package/src/wireframe/layout.ts +460 -0
  108. package/src/wireframe/parser.ts +956 -0
  109. package/src/wireframe/renderer.ts +1293 -0
  110. package/src/wireframe/types.ts +110 -0
@@ -20,7 +20,9 @@
20
20
  14. [Timeline Diagrams](#14-timeline-diagrams)
21
21
  15. [Data Charts](#15-data-charts)
22
22
  16. [Visualizations](#16-visualizations)
23
- 17. [Colon Usage Summary](#17-colon-usage-summary)
23
+ 17. [Tech Radar Diagrams](#17-tech-radar-diagrams)
24
+ 18. [Wireframe Diagrams](#18-wireframe-diagrams)
25
+ 19. [Colon Usage Summary](#19-colon-usage-summary)
24
26
 
25
27
  ---
26
28
 
@@ -608,7 +610,28 @@ deployment
608
610
  container Web App // reference existing container
609
611
  ```
610
612
 
611
- ### 7.7 Options
613
+ ### 7.7 Element Descriptions
614
+
615
+ ```
616
+ // Indented metadata form (colon required)
617
+ Web App is a container
618
+ description: SPA built with React
619
+ description: Supports SSR and client-side routing
620
+
621
+ // Keyword form (colon optional)
622
+ API is a container
623
+ description Handles all REST endpoints
624
+
625
+ // Pipe metadata form
626
+ Database is a container | description: PostgreSQL with read replicas
627
+ ```
628
+
629
+ - Multiple `description` lines accumulate into a multi-line description
630
+ - `description` is extracted as a dedicated field, not stored in general metadata
631
+ - Supports inline markdown: `**bold**`, `*italic*`, `` `code` ``, `[links](url)`
632
+ - `- bullet text` renders as `• bullet text`
633
+
634
+ ### 7.8 Options
612
635
 
613
636
  - `direction-tb` (boolean; default is LR)
614
637
 
@@ -812,7 +835,28 @@ All permutations supported: node→group, group→node, group→group. Brackets
812
835
  Pricing | Auth: Public
813
836
  ```
814
837
 
815
- ### 11.5 Options
838
+ ### 11.5 Node Descriptions
839
+
840
+ ```
841
+ // Keyword form (colon optional)
842
+ About
843
+ description Company history and team bios
844
+
845
+ // Pipe metadata form
846
+ Pricing | description: Compare plans and features
847
+
848
+ // Multi-line
849
+ Blog
850
+ description: Engineering and product updates
851
+ description: Published weekly
852
+ ```
853
+
854
+ - `description` keyword required (bare prose lines are not auto-detected as descriptions)
855
+ - Multiple `description` lines accumulate into a multi-line description
856
+ - Supports inline markdown: `**bold**`, `*italic*`, `` `code` ``, `[links](url)`
857
+ - `- bullet text` renders as `• bullet text`
858
+
859
+ ### 11.6 Options
816
860
 
817
861
  - `direction-tb` (boolean; default is LR)
818
862
 
@@ -1326,7 +1370,207 @@ Navigator 0.85 0.8
1326
1370
 
1327
1371
  ---
1328
1372
 
1329
- ## 17. Colon Usage Summary
1373
+ ## 17. Tech Radar Diagrams
1374
+
1375
+ ```
1376
+ tech-radar Title
1377
+
1378
+ rings
1379
+ Adopt
1380
+ Trial
1381
+ Assess
1382
+ Hold
1383
+
1384
+ Techniques | quadrant: top-right
1385
+ Continuous Deployment | ring: Adopt, trend: stable
1386
+ Fully adopted across all services.
1387
+ Micro Frontends | ring: Trial, trend: up
1388
+
1389
+ Tools | quadrant: top-left
1390
+ Vite | ring: Adopt, trend: up
1391
+ Webpack | ring: Hold, trend: down
1392
+ ```
1393
+
1394
+ ### Rings
1395
+
1396
+ Declared in a `rings` block, one per indented line. Order: innermost (first) to outermost (last). Any names, any count.
1397
+
1398
+ Aliases supported: `Adopt alias a` — then blips can use `ring: a`.
1399
+
1400
+ ### Quadrants
1401
+
1402
+ Exactly 4 required. Each is a top-level header with pipe metadata:
1403
+
1404
+ ```
1405
+ Name | quadrant: position
1406
+ ```
1407
+
1408
+ **Positions:** `top-left`, `top-right`, `bottom-left`, `bottom-right` — each used exactly once.
1409
+
1410
+ Optional color override: `Tools | quadrant: top-left, color: purple`
1411
+
1412
+ Default colors: top-left=blue, top-right=green, bottom-left=red, bottom-right=orange.
1413
+
1414
+ ### Blips
1415
+
1416
+ Indented under their quadrant. Require `ring` metadata (case-insensitive match). Optional `trend`:
1417
+
1418
+ ```
1419
+ Item Name | ring: Adopt, trend: stable
1420
+ ```
1421
+
1422
+ **Trends:** `new` (double circle), `up` (inward crescent), `down` (outward crescent), `stable` (plain circle). Omitting renders plain circle.
1423
+
1424
+ ### Descriptions
1425
+
1426
+ Further-indented lines below a blip. Supports inline markdown (bold, italic, code, links).
1427
+
1428
+ ```
1429
+ Rust | ring: Assess, trend: new
1430
+ Evaluating for **performance-critical** services.
1431
+ ```
1432
+
1433
+ ### Numbering
1434
+
1435
+ Blips receive sequential global numbers. Order: quadrants clockwise (top-left → top-right → bottom-right → bottom-left), then by ring (innermost first), then declaration order.
1436
+
1437
+ ---
1438
+
1439
+ ## 18. Wireframe Diagrams
1440
+
1441
+ Wireframe diagrams use **visual-mnemonic syntax** where bracket characters communicate element type.
1442
+
1443
+ ### Declaration
1444
+
1445
+ ```
1446
+ wireframe Page Title
1447
+ ```
1448
+
1449
+ ### Form Factor
1450
+
1451
+ ```
1452
+ mobile
1453
+ ```
1454
+
1455
+ Switches to narrow vertical layout (375px). Desktop (1200px, horizontal regions) is the default.
1456
+
1457
+ ### Visual-Mnemonic Elements
1458
+
1459
+ | Syntax | Element | Example |
1460
+ |--------|---------|---------|
1461
+ | `[text]` (leaf) | Text input | `[Email address]` |
1462
+ | `[Name]` (with children) | Group/region | `[Sidebar]` + indented children |
1463
+ | `(Label)` | Button | `(Submit)` |
1464
+ | `{A \| B \| C}` | Dropdown/select | `{Small \| Medium \| Large}` |
1465
+ | `<x>` / `< >` | Checkbox | `<x> Remember me` |
1466
+ | `(*) Label` / `( ) Label` | Radio button | `(*) Option A` |
1467
+ | `# Text` / `## Text` | Heading | `# Sign In` |
1468
+ | `---` | Divider | `---` |
1469
+ | `- text` | List item | `- Electronics` |
1470
+ | Bare text | Text/paragraph | `Welcome to our app` |
1471
+
1472
+ ### Keyword Elements
1473
+
1474
+ | Keyword | Type | Parameters |
1475
+ |---------|------|------------|
1476
+ | `nav` | Block | Children are nav items |
1477
+ | `tabs` | Block | Children are tab labels |
1478
+ | `table` | Block | Comma-separated rows; first = header |
1479
+ | `table RxC` | Skeleton table | `table 5x4` + optional header row |
1480
+ | `image` | Leaf | `round`, `wide` hints |
1481
+ | `modal Title` | Block | Rendered as separate panel below |
1482
+ | `skeleton` | Block | Children render as grey placeholders |
1483
+ | `alert` | Block | Optional semantic state |
1484
+ | `progress N` | Leaf | Value 0-100: `progress 60` |
1485
+ | `chart type` | Leaf | `chart line`, `chart bar`, `chart pie` |
1486
+
1487
+ ### Pipe Metadata (States)
1488
+
1489
+ Wireframe uses flag keywords (not `key: value`):
1490
+
1491
+ ```
1492
+ (Submit) | disabled
1493
+ (Delete) | destructive
1494
+ (Cancel) | ghost
1495
+ [Email] | password
1496
+ [Notes] | textarea
1497
+ [Cards] | horizontal
1498
+ [Advanced] | collapsed
1499
+ [Messages] | scrollable
1500
+ <x> Dark mode | toggle
1501
+ ```
1502
+
1503
+ Available states: `disabled`, `active`, `selected`, `empty`, `ghost`, `destructive`, `success`, `warning`, `info`, `scrollable`, `collapsed`, `toggle`, `password`, `textarea`, `horizontal`, `primary`.
1504
+
1505
+ Free-text annotations after states: `[Email] | required, validates email format`.
1506
+
1507
+ ### Multi-Element Lines
1508
+
1509
+ Two or more spaces between segments create separate elements:
1510
+
1511
+ ```
1512
+ Email [user@example.com] // label + field (2 segments)
1513
+ (-) 1 (+) // 3 inline items
1514
+ $299.99 ~~$349.99~~ // 2 inline texts
1515
+ ```
1516
+
1517
+ - **2 segments** (bare text + element): label-for-element pairing
1518
+ - **3+ segments**: inline items, no label pairing
1519
+ - **Single space = same element**: `Cart (3)` is one text element
1520
+
1521
+ ### Group Disambiguation
1522
+
1523
+ - `[Name]` with indented children = group/container
1524
+ - `[Name]` with no children = text input
1525
+ - `[Name] | horizontal/scrollable/collapsed` = group (even without children)
1526
+
1527
+ ### Table Syntax
1528
+
1529
+ Explicit rows (comma-separated, first row = header):
1530
+
1531
+ ```
1532
+ table
1533
+ Name, Email, Role
1534
+ John, john@, Admin
1535
+ Sally, sally@, Editor
1536
+ ```
1537
+
1538
+ Skeleton shorthand:
1539
+
1540
+ ```
1541
+ table 5x4
1542
+ Name, Email, Role, Status
1543
+ ```
1544
+
1545
+ ### Layout Model
1546
+
1547
+ - Desktop: 1200px wide, top-level regions arrange horizontally
1548
+ - Mobile: 375px wide, all regions stack vertically
1549
+ - Smart sizing: `sidebar` → ~25%, `main`/`content` → fill, `header`/`footer` → full width
1550
+ - `| horizontal` on groups arranges children in a row
1551
+
1552
+ ### Example
1553
+
1554
+ ```
1555
+ wireframe Login Page
1556
+
1557
+ [Header]
1558
+ nav
1559
+ Home | active
1560
+ Settings
1561
+
1562
+ [Main]
1563
+ # Sign In
1564
+ Email [user@example.com]
1565
+ Password [****] | password
1566
+ <x> Remember me
1567
+ (Sign In)
1568
+ (Forgot Password?) | ghost
1569
+ ```
1570
+
1571
+ ---
1572
+
1573
+ ## 19. Colon Usage Summary
1330
1574
 
1331
1575
  ### Constructs Where Colons Are REQUIRED
1332
1576
 
@@ -1345,6 +1589,7 @@ Navigator 0.85 0.8
1345
1589
  | Construct | Diagram Type | Example |
1346
1590
  |-----------|-------------|---------|
1347
1591
  | Class relationship label | class | `--|> Vessel : extends` or `--|> Vessel extends` |
1592
+ | Description keyword (indented) | sitemap, c4 | `description text` or `description: text` |
1348
1593
 
1349
1594
  ### Colons NOT USED
1350
1595
 
@@ -9,20 +9,27 @@ hide priority:Low
9
9
  direction LR
10
10
 
11
11
  // --- Services ---
12
- API Gateway | t: Backend, description: Main entry point for all requests
12
+ API Gateway | t: Backend
13
+ Main entry point for all requests
14
+ Routes to **backend services**
13
15
  -routes-> UserService
14
16
  -routes-> ProductService
15
17
  -routes-> OrderService
16
18
 
17
- UserService | t: Backend, description: Handles auth and profiles
19
+ UserService | t: Backend
20
+ Handles auth and profiles
21
+ Uses `JWT` tokens for sessions
18
22
  -reads-> UserDB
19
23
  -checks-> SessionCache
20
24
 
21
25
  ProductService | t: Frontend, description: Product catalog and search
26
+ Supports *full-text* search
22
27
  -queries-> ProductDB
23
28
  -invalidates-> ProductCache
24
29
 
25
- OrderService | t: Backend, description: Order processing pipeline
30
+ OrderService | t: Backend
31
+ Order processing pipeline
32
+ Validates inventory before commit
26
33
  -writes-> OrderDB
27
34
  -publishes-> OrderQueue
28
35
 
@@ -1,12 +1,12 @@
1
1
  c4 Online Bookstore — C4 Architecture
2
2
 
3
- tag Technology alias tech
3
+ tag Technology tech
4
4
  React(blue)
5
5
  Node(green)
6
6
  Python(orange)
7
7
  PostgreSQL(purple)
8
8
 
9
- tag Team alias t
9
+ tag Team t
10
10
  Frontend(blue)
11
11
  Backend(green)
12
12
  Platform(teal)
@@ -0,0 +1,25 @@
1
+ cycle OODA Loop
2
+
3
+ Observe | color: blue
4
+ Gather raw information from the environment
5
+ Monitor unfolding circumstances
6
+ -Unfold circumstances-> | color: blue
7
+ Synthesize raw data into actionable context
8
+ Identify **key patterns** and anomalies
9
+
10
+ Orient | color: green
11
+ Analyze and synthesize observations
12
+ Form a mental model of the situation
13
+ -Form hypothesis-> | color: green
14
+ Apply previous experience and cultural filters
15
+ Perform *destructive deduction* to break old models
16
+
17
+ Decide | color: orange
18
+ Select a course of action
19
+ -Commit to action-> | color: orange
20
+
21
+ Act | color: red
22
+ Execute the chosen course of action
23
+ Generate results that feed back
24
+ -Generate feedback-> | color: red
25
+ Results flow back into observation
@@ -0,0 +1,12 @@
1
+ cycle PDCA
2
+
3
+ circle-nodes
4
+
5
+ Plan | color: blue
6
+ Define goals and processes
7
+ Do | color: green
8
+ Implement the plan
9
+ Check | color: orange
10
+ Evaluate results
11
+ Act | color: red
12
+ Adjust and improve
@@ -0,0 +1,6 @@
1
+ cycle PDCA
2
+
3
+ Plan | color: blue
4
+ Do | color: green
5
+ Check | color: orange
6
+ Act | color: red
@@ -0,0 +1,17 @@
1
+ cycle Sprint Cycle
2
+
3
+ Planning | color: blue, span: 1
4
+ Sprint kickoff and backlog grooming
5
+ -Start sprint->
6
+
7
+ Development | color: green, span: 3
8
+ Build and test features
9
+ -Demo ready->
10
+
11
+ Review | color: orange, span: 1
12
+ Sprint demo and stakeholder feedback
13
+ -Retrospective->
14
+
15
+ Retro | color: purple, span: 0.5
16
+ Team reflection and process improvement
17
+ -Next sprint->
@@ -4,13 +4,13 @@ today-marker 2024-03-01
4
4
  critical-path
5
5
  dependencies
6
6
 
7
- tag Team alias t
7
+ tag Team t
8
8
  Engineering(blue)
9
9
  Design(purple)
10
10
  QA(orange)
11
11
  Marketing(green)
12
12
 
13
- tag Phase alias p
13
+ tag Phase p
14
14
  Foundation(green)
15
15
  Growth(orange)
16
16
  Launch(red)
@@ -4,12 +4,12 @@ today-marker 2024-03-01
4
4
  critical-path
5
5
  dependencies
6
6
 
7
- tag Team alias t
7
+ tag Team t
8
8
  Engineering(blue)
9
9
  Design(purple)
10
10
  QA(orange)
11
11
 
12
- tag Phase alias p
12
+ tag Phase p
13
13
  Foundation(green)
14
14
  Growth(orange)
15
15
 
@@ -1,11 +1,11 @@
1
1
  infra E-Commerce Platform — Full Infrastructure
2
2
 
3
- tag Team alias t
3
+ tag Team t
4
4
  Backend(blue)
5
5
  Platform(teal)
6
6
  Data(purple)
7
7
 
8
- tag Tier alias r
8
+ tag Tier r
9
9
  Edge(green)
10
10
  Core(blue)
11
11
  Storage(orange)
@@ -1,6 +1,6 @@
1
1
  infra Production Traffic Flow
2
2
 
3
- tag Team alias t
3
+ tag Team t
4
4
  Backend(blue)
5
5
  Platform(teal)
6
6
 
@@ -1,13 +1,13 @@
1
1
  sequence Order Fulfillment — Protocols & Ownership
2
2
  active-tag Protocol
3
3
 
4
- tag Protocol alias p
4
+ tag Protocol p
5
5
  REST(blue)
6
6
  gRPC(green)
7
7
  Async(orange)
8
8
  SQL(purple)
9
9
 
10
- tag Owner alias o
10
+ tag Owner o
11
11
  Checkout(teal)
12
12
  Fulfillment(orange)
13
13
  Payments(red)
@@ -1,13 +1,13 @@
1
1
  sequence API Gateway — Infrastructure Concerns
2
2
  active-tag Concern
3
3
 
4
- tag Concern alias c
4
+ tag Concern c
5
5
  Caching(blue)
6
6
  Auth(green)
7
7
  RateLimiting(orange)
8
8
  BusinessLogic(purple) default
9
9
 
10
- tag Team alias t
10
+ tag Team t
11
11
  Platform(teal)
12
12
  Product(orange)
13
13
  Security(red)
@@ -0,0 +1,77 @@
1
+ tech-radar Dense Radar Stress Test
2
+
3
+ rings
4
+ Adopt
5
+ Trial
6
+ Assess
7
+ Hold
8
+
9
+ Techniques | quadrant: top-right
10
+ CI/CD | ring: Adopt, trend: stable
11
+ IaC | ring: Adopt, trend: stable
12
+ Microservices | ring: Adopt, trend: stable
13
+ Event Sourcing | ring: Trial, trend: up
14
+ CQRS | ring: Trial, trend: up
15
+ Feature Flags | ring: Adopt, trend: new
16
+ Chaos Engineering | ring: Assess, trend: new
17
+ Trunk-Based Dev | ring: Trial, trend: up
18
+ Contract Testing | ring: Trial, trend: new
19
+ Design Tokens | ring: Assess, trend: new
20
+ Micro Frontends | ring: Assess, trend: up
21
+ Server Components | ring: Trial, trend: new
22
+ Edge Functions | ring: Trial, trend: up
23
+ Zero Trust | ring: Adopt, trend: stable
24
+ Observability | ring: Adopt, trend: stable
25
+ Platform Engineering | ring: Trial, trend: new
26
+
27
+ Tools | quadrant: top-left
28
+ GitHub Copilot | ring: Trial, trend: new
29
+ Vite | ring: Adopt, trend: up
30
+ Playwright | ring: Adopt, trend: stable
31
+ Turborepo | ring: Trial, trend: new
32
+ Docker | ring: Adopt, trend: stable
33
+ Grafana | ring: Adopt, trend: stable
34
+ Datadog | ring: Trial, trend: up
35
+ Webpack | ring: Hold, trend: down
36
+ Storybook | ring: Adopt, trend: stable
37
+ Figma | ring: Adopt, trend: stable
38
+ Linear | ring: Trial, trend: new
39
+ Pulumi | ring: Assess, trend: new
40
+ Tailscale | ring: Trial, trend: up
41
+ Renovate | ring: Adopt, trend: stable
42
+ Bruno | ring: Assess, trend: new
43
+ Cursor | ring: Trial, trend: new
44
+
45
+ Platforms | quadrant: bottom-left
46
+ Kubernetes | ring: Adopt, trend: stable
47
+ Cloudflare Workers | ring: Trial, trend: up
48
+ AWS Lambda | ring: Hold, trend: down
49
+ Vercel | ring: Trial, trend: up
50
+ Fly.io | ring: Assess, trend: new
51
+ Neon | ring: Trial, trend: new
52
+ PlanetScale | ring: Hold, trend: down
53
+ Supabase | ring: Assess, trend: up
54
+ Upstash | ring: Trial, trend: new
55
+ Railway | ring: Assess, trend: new
56
+ Deno Deploy | ring: Assess, trend: new
57
+ Google Cloud Run | ring: Adopt, trend: stable
58
+ Azure AKS | ring: Trial, trend: up
59
+ Hetzner | ring: Assess, trend: new
60
+ Tigris | ring: Assess, trend: new
61
+
62
+ Languages & Frameworks | quadrant: bottom-right
63
+ TypeScript | ring: Adopt, trend: stable
64
+ Rust | ring: Assess, trend: new
65
+ React | ring: Adopt, trend: stable
66
+ Go | ring: Adopt, trend: stable
67
+ Python | ring: Adopt, trend: stable
68
+ Svelte | ring: Assess, trend: up
69
+ Solid | ring: Assess, trend: new
70
+ Zig | ring: Hold, trend: stable
71
+ Kotlin | ring: Trial, trend: up
72
+ Swift | ring: Adopt, trend: stable
73
+ Astro | ring: Trial, trend: new
74
+ HTMX | ring: Assess, trend: new
75
+ Effect-TS | ring: Assess, trend: new
76
+ Bun | ring: Trial, trend: up
77
+ Deno | ring: Assess, trend: up
@@ -0,0 +1,36 @@
1
+ tech-radar Engineering Tech Radar Q2 2026
2
+
3
+ rings
4
+ Adopt
5
+ Trial
6
+ Assess
7
+ Hold
8
+
9
+ Techniques | quadrant: top-right
10
+ Continuous Deployment | ring: Adopt, trend: stable
11
+ Fully adopted across all services.
12
+ Infrastructure as Code | ring: Adopt, trend: stable
13
+ Micro Frontends | ring: Trial, trend: up
14
+ Exploring for the portal project.
15
+ Trunk-Based Development | ring: Assess, trend: new
16
+
17
+ Tools | quadrant: top-left
18
+ GitHub Copilot | ring: Trial, trend: new
19
+ Evaluating for developer productivity.
20
+ Vite | ring: Adopt, trend: up
21
+ Webpack | ring: Hold, trend: down
22
+ Migrating to Vite across all projects.
23
+ Playwright | ring: Adopt, trend: stable
24
+ Turborepo | ring: Trial, trend: new
25
+
26
+ Platforms | quadrant: bottom-left
27
+ Kubernetes | ring: Adopt, trend: stable
28
+ Cloudflare Workers | ring: Trial, trend: up
29
+ AWS Lambda | ring: Hold, trend: down
30
+ Consolidating onto Kubernetes.
31
+
32
+ Languages & Frameworks | quadrant: bottom-right
33
+ TypeScript | ring: Adopt, trend: stable
34
+ Rust | ring: Assess, trend: new
35
+ Evaluating for performance-critical services.
36
+ React | ring: Adopt, trend: stable
@@ -1,7 +1,7 @@
1
1
  timeline Product Roadmap 2024-2025
2
2
  sort tag:Team
3
3
 
4
- tag Team alias t
4
+ tag Team t
5
5
  Engineering(blue)
6
6
  Design(purple)
7
7
  Product(green)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diagrammo/dgmo",
3
- "version": "0.8.20",
3
+ "version": "0.8.22",
4
4
  "description": "DGMO diagram markup language — parser, renderer, and color system",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -40,12 +40,28 @@ export function collapseBoxesAndLines(
40
40
  const nodeToGroup = new Map<string, string>();
41
41
  const collapsedChildCounts = new Map<string, number>();
42
42
 
43
+ // Recursively collect all descendants of a group (including sub-group children)
44
+ function collectDescendants(groupLabel: string): string[] {
45
+ const group = groupByLabel.get(groupLabel);
46
+ if (!group) return [];
47
+ const descendants: string[] = [];
48
+ for (const child of group.children) {
49
+ descendants.push(child);
50
+ // If child is itself a group, collect its descendants too
51
+ if (groupByLabel.has(child)) {
52
+ descendants.push(...collectDescendants(child));
53
+ }
54
+ }
55
+ return descendants;
56
+ }
57
+
43
58
  for (const groupLabel of collapsedGroups) {
44
59
  const group = groupByLabel.get(groupLabel);
45
60
  if (!group) continue;
46
61
  const groupId = `__group_${groupLabel}`;
47
62
 
48
- for (const child of group.children) {
63
+ const allDescendants = collectDescendants(groupLabel);
64
+ for (const child of allDescendants) {
49
65
  nodeToGroup.set(child, groupId);
50
66
  }
51
67
  collapsedChildCounts.set(groupLabel, group.children.length);
@@ -67,8 +83,10 @@ export function collapseBoxesAndLines(
67
83
  edges.push({ ...edge, source: src, target: tgt });
68
84
  }
69
85
 
70
- // Keep only groups that are not collapsed
71
- const groups = parsed.groups.filter((g) => !collapsedGroups.has(g.label));
86
+ // Keep only groups that are not collapsed and not inside a collapsed group
87
+ const groups = parsed.groups.filter(
88
+ (g) => !collapsedGroups.has(g.label) && !nodeToGroup.has(g.label)
89
+ );
72
90
 
73
91
  return {
74
92
  parsed: { ...parsed, nodes, edges, groups },