edsger 0.82.0 → 0.84.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.
Files changed (113) hide show
  1. package/README.md +101 -2
  2. package/assets/README.md +31 -18
  3. package/assets/audit/base.yaml +187 -0
  4. package/assets/audit/csharp.yaml +46 -0
  5. package/assets/audit/dart.yaml +46 -0
  6. package/assets/audit/go.yaml +46 -0
  7. package/assets/audit/java.yaml +46 -0
  8. package/assets/audit/python.yaml +49 -0
  9. package/assets/audit/typescript.yaml +51 -0
  10. package/assets/audit-viewer/assets/audit--os0TXXZ.css +1 -0
  11. package/assets/audit-viewer/assets/audit-CSblYELs.js +2 -0
  12. package/assets/audit-viewer/audit.html +31 -0
  13. package/assets/audit-viewer-single.html +32 -0
  14. package/assets/diagrams/base.yaml +351 -0
  15. package/assets/diagrams/csharp.yaml +48 -0
  16. package/assets/diagrams/dart.yaml +41 -0
  17. package/assets/diagrams/go.yaml +44 -0
  18. package/assets/diagrams/java.yaml +43 -0
  19. package/assets/diagrams/python.yaml +41 -0
  20. package/assets/diagrams/typescript.yaml +45 -0
  21. package/assets/diagrams-viewer/assets/abnfDiagram-VRR7QNED-CWLpbgGU.js +1 -0
  22. package/assets/diagrams-viewer/assets/arc-B4VipCr_.js +1 -0
  23. package/assets/diagrams-viewer/assets/architectureDiagram-ZJ3FMSHR-BMDodQXV.js +36 -0
  24. package/assets/diagrams-viewer/assets/blockDiagram-677ZJIJ3-DbHoVVH-.js +132 -0
  25. package/assets/diagrams-viewer/assets/c4Diagram-LMCZKHZV-CyUEj98S.js +10 -0
  26. package/assets/diagrams-viewer/assets/channel-DWh7ErxY.js +1 -0
  27. package/assets/diagrams-viewer/assets/chunk-2Q5K7J3B-CWu0p0os.js +1 -0
  28. package/assets/diagrams-viewer/assets/chunk-32BRIVSS-BhVWSCoK.js +1 -0
  29. package/assets/diagrams-viewer/assets/chunk-5VM5RSS4-B_2wZBAn.js +15 -0
  30. package/assets/diagrams-viewer/assets/chunk-EX3LRPZG-D_MRgtfL.js +231 -0
  31. package/assets/diagrams-viewer/assets/chunk-JWPE2WC7-dsh1qiy0.js +1 -0
  32. package/assets/diagrams-viewer/assets/chunk-MOJQB5TN-BvLm4a6B.js +88 -0
  33. package/assets/diagrams-viewer/assets/chunk-RYQCIY6F-gJyPbIpx.js +1 -0
  34. package/assets/diagrams-viewer/assets/chunk-V7JOEXUC-BMvj0zJM.js +206 -0
  35. package/assets/diagrams-viewer/assets/chunk-VR4S4FIN-Di2iBUXs.js +1 -0
  36. package/assets/diagrams-viewer/assets/chunk-XXDRQBXY-Cfajbd4I.js +1 -0
  37. package/assets/diagrams-viewer/assets/classDiagram-OUVF2IWQ-winWhRce.js +1 -0
  38. package/assets/diagrams-viewer/assets/classDiagram-v2-EOCWNBFH-winWhRce.js +1 -0
  39. package/assets/diagrams-viewer/assets/cose-bilkent-JH36ORCC-ClE2EhTL.js +1 -0
  40. package/assets/diagrams-viewer/assets/cynefin-VYW2F7L2-nm5z0Jwc.js +178 -0
  41. package/assets/diagrams-viewer/assets/cynefinDiagram-TSTJHNR4-CGhnRh5V.js +62 -0
  42. package/assets/diagrams-viewer/assets/cytoscape.esm-CUqq0XTU.js +331 -0
  43. package/assets/diagrams-viewer/assets/dagre-VKFMJZFB-COlahHKk.js +4 -0
  44. package/assets/diagrams-viewer/assets/defaultLocale-DX6XiGOO.js +1 -0
  45. package/assets/diagrams-viewer/assets/diagram-FQU43EPY-DsUclBK0.js +3 -0
  46. package/assets/diagrams-viewer/assets/diagram-G47NLZAW-CnjT9SvX.js +24 -0
  47. package/assets/diagrams-viewer/assets/diagram-NH7WQ7WH-DiGoGOyA.js +24 -0
  48. package/assets/diagrams-viewer/assets/diagram-OA4YK3LP-qi8nz9qe.js +30 -0
  49. package/assets/diagrams-viewer/assets/diagram-WEI45ONY-BV3PGzwL.js +41 -0
  50. package/assets/diagrams-viewer/assets/diagrams-8nCc1utO.css +1 -0
  51. package/assets/diagrams-viewer/assets/diagrams-CF48btj0.js +314 -0
  52. package/assets/diagrams-viewer/assets/ebnfDiagram-CCIWWBDH-CtKWe-dh.js +1 -0
  53. package/assets/diagrams-viewer/assets/erDiagram-Q63AITRT-Aajee3Fz.js +85 -0
  54. package/assets/diagrams-viewer/assets/flowDiagram-23GEKE2U-N3Xe2K9t.js +156 -0
  55. package/assets/diagrams-viewer/assets/ganttDiagram-NO4QXBWP-Bjicdg8S.js +292 -0
  56. package/assets/diagrams-viewer/assets/gitGraphDiagram-IHSO6WYX-CacIXKIe.js +106 -0
  57. package/assets/diagrams-viewer/assets/graph-C2PyVmSI.js +1 -0
  58. package/assets/diagrams-viewer/assets/infoDiagram-FWYZ7A6U-CVmDapTx.js +2 -0
  59. package/assets/diagrams-viewer/assets/init-Gi6I4Gst.js +1 -0
  60. package/assets/diagrams-viewer/assets/ishikawaDiagram-FXEZZL3T-DMJf1YQN.js +70 -0
  61. package/assets/diagrams-viewer/assets/journeyDiagram-5HDEW3XC-Bk_U6MPk.js +139 -0
  62. package/assets/diagrams-viewer/assets/kanban-definition-HUTT4EX6-n05wGXiD.js +89 -0
  63. package/assets/diagrams-viewer/assets/katex-C5jXJg4s.js +257 -0
  64. package/assets/diagrams-viewer/assets/layout-HEHzrzvT.js +1 -0
  65. package/assets/diagrams-viewer/assets/linear-DD_zky65.js +1 -0
  66. package/assets/diagrams-viewer/assets/map-BQHxRNoK.js +1 -0
  67. package/assets/diagrams-viewer/assets/mindmap-definition-LN4V7U3C-BWt_I9vr.js +96 -0
  68. package/assets/diagrams-viewer/assets/ordinal-Cboi1Yqb.js +1 -0
  69. package/assets/diagrams-viewer/assets/pegDiagram-2B236MQR-CCZTIXBZ.js +1 -0
  70. package/assets/diagrams-viewer/assets/pieDiagram-ENE6RG2P-BmIQql1w.js +39 -0
  71. package/assets/diagrams-viewer/assets/quadrantDiagram-ABIIQ3AL-BPvOH5QN.js +7 -0
  72. package/assets/diagrams-viewer/assets/railroadDiagram-RFXS5EU6-DpgVbjSl.js +1 -0
  73. package/assets/diagrams-viewer/assets/requirementDiagram-TGXJPOKE-CDVpI3MH.js +84 -0
  74. package/assets/diagrams-viewer/assets/sankeyDiagram-HTMAVEWB-DU2J23Xy.js +40 -0
  75. package/assets/diagrams-viewer/assets/sequenceDiagram-DBY2YBRQ-BIVlCWU4.js +162 -0
  76. package/assets/diagrams-viewer/assets/sizeCapture-X5ZJPWSS-C9KxyKN2.js +1 -0
  77. package/assets/diagrams-viewer/assets/stateDiagram-2N3HPSRC-Ba5mRI9d.js +1 -0
  78. package/assets/diagrams-viewer/assets/stateDiagram-v2-6OUMAXLB-Dw-0OG6b.js +1 -0
  79. package/assets/diagrams-viewer/assets/swimlanes-5IMT3BWC-aOsD2O80.js +2 -0
  80. package/assets/diagrams-viewer/assets/swimlanesDiagram-G3AALYLV-KujklZml.js +8 -0
  81. package/assets/diagrams-viewer/assets/timeline-definition-FHXFAJF6-CmYd84Hc.js +120 -0
  82. package/assets/diagrams-viewer/assets/vennDiagram-L72KCM5P-CDiMK-z9.js +34 -0
  83. package/assets/diagrams-viewer/assets/wardleyDiagram-EHGQE667-BKLsv25u.js +78 -0
  84. package/assets/diagrams-viewer/assets/xychartDiagram-FW5EYKEG-Bpj6Ub-a.js +7 -0
  85. package/assets/diagrams-viewer/diagrams.html +31 -0
  86. package/assets/diagrams-viewer-single.html +3593 -0
  87. package/assets/manifest.yaml +13 -1
  88. package/assets/mindmap/base.yaml +115 -0
  89. package/assets/mindmap/csharp.yaml +32 -0
  90. package/assets/mindmap/dart.yaml +42 -0
  91. package/assets/mindmap/go.yaml +33 -0
  92. package/assets/mindmap/java.yaml +40 -0
  93. package/assets/mindmap/python.yaml +43 -0
  94. package/assets/mindmap/typescript.yaml +47 -0
  95. package/assets/mindmap-viewer/assets/mindmap-D7KMR9EM.css +1 -0
  96. package/assets/mindmap-viewer/assets/mindmap-Di5RM-4N.js +4 -0
  97. package/assets/mindmap-viewer/mindmap.html +31 -0
  98. package/assets/mindmap-viewer-single.html +34 -0
  99. package/assets/schema/audit.schema.json +66 -0
  100. package/assets/schema/diagrams.schema.json +100 -0
  101. package/assets/schema/mindmap.schema.json +69 -0
  102. package/assets/skills/audit/SKILL.md +76 -0
  103. package/assets/skills/diagram/SKILL.md +70 -0
  104. package/assets/skills/mindmap/SKILL.md +69 -0
  105. package/assets/viewer/assets/index-BFtGar9N.css +1 -0
  106. package/assets/viewer/assets/index-XOKyyudT.js +3 -0
  107. package/assets/viewer/index.html +19 -2
  108. package/assets/viewer-single.html +21 -4
  109. package/dist/index.js +1720 -318
  110. package/dist/index.js.map +1 -1
  111. package/package.json +2 -2
  112. package/assets/viewer/assets/index-C7hwGkuU.js +0 -3
  113. package/assets/viewer/assets/index-Dhc-7q5o.css +0 -1
@@ -3,7 +3,7 @@
3
3
  schemaVersion: 1
4
4
  name: edsger-assets
5
5
  version: 0.1.0
6
- description: Industrial-grade benchmark rubrics and PR review standards.
6
+ description: Industrial-grade benchmark rubrics, PR review standards, diagram catalogs, and mind-map standards.
7
7
 
8
8
  # Standard kinds shipped in this repository.
9
9
  kinds:
@@ -15,6 +15,18 @@ kinds:
15
15
  dir: review
16
16
  base: base
17
17
  schema: schema/review.schema.json
18
+ audit:
19
+ dir: audit
20
+ base: base
21
+ schema: schema/audit.schema.json
22
+ diagrams:
23
+ dir: diagrams
24
+ base: base
25
+ schema: schema/diagrams.schema.json
26
+ mindmap:
27
+ dir: mindmap
28
+ base: base
29
+ schema: schema/mindmap.schema.json
18
30
 
19
31
  # Languages with dedicated overlays. `id` matches the detector in languages.yaml.
20
32
  # `aliases` are accepted on the CLI (e.g. `--lang ts`).
@@ -0,0 +1,115 @@
1
+ id: base
2
+ name: Code Implementation Mind Map
3
+ version: 0.1.0
4
+ kind: mindmap
5
+ extends: null
6
+ appliesTo: ["*"]
7
+ # A standard for building an implementation mind map of a repository: an outline
8
+ # tree whose root is the project and whose branches explain how the code is
9
+ # actually implemented, deep enough that each leaf points at concrete files. The
10
+ # `aspects` below are candidate top-level branches — the agent keeps only the
11
+ # ones this project's code supports and grows each into a faithful subtree.
12
+
13
+ guidance: >
14
+ The root of the tree is the project itself: its title plus a one-line summary
15
+ of what it does. The first level should be 3-7 branches that together explain
16
+ how the code is implemented — picked from the aspects below, renamed to fit
17
+ the project's own vocabulary where that is clearer. Every node needs a short
18
+ title (2-6 words, like an outline bullet) and a one-or-two-sentence summary
19
+ that says something true and specific about THIS codebase, not generic
20
+ filler. Interior nodes group; leaf nodes land on concrete implementation and
21
+ cite the files they describe. Prefer a tree a newcomer can absorb branch by
22
+ branch over an exhaustive file listing — depth where the code is interesting,
23
+ brevity where it is boilerplate.
24
+
25
+ maxDepth: 5
26
+
27
+ aspects:
28
+ - id: entry-points
29
+ name: Entry Points & Interfaces
30
+ appliesWhen: >
31
+ Almost any project. Where execution starts and what surface the outside
32
+ world sees: CLI commands, HTTP routes, exported library API, UI screens,
33
+ scheduled jobs, message consumers.
34
+ detect: ["*"]
35
+ guidance: >
36
+ Find the real entry points: bin/main files, route registration, the
37
+ public export surface, background workers. One child per interface kind
38
+ (e.g. "CLI commands", "HTTP API", "Public API"), then one grandchild per
39
+ command/route-group/export with a summary of what it does and which
40
+ handler file implements it.
41
+
42
+ - id: core-flows
43
+ name: Core Flows
44
+ appliesWhen: >
45
+ Any project with meaningful runtime behaviour. The handful of end-to-end
46
+ paths that define what the software does (e.g. "handle a request",
47
+ "run a build", "sync data").
48
+ detect: ["*"]
49
+ guidance: >
50
+ Pick the 2-5 flows that matter most and trace each through the code: one
51
+ child per flow, whose children are the ordered steps ("parse args →
52
+ resolve config → run agent → write report"), each step naming the
53
+ function/module that performs it and the file it lives in. Follow real
54
+ call paths — do not invent steps.
55
+
56
+ - id: modules
57
+ name: Module Structure
58
+ appliesWhen: >
59
+ Any non-trivial codebase. How the source tree is organised into modules /
60
+ packages / layers, and what each part is responsible for.
61
+ detect: ["src", "lib", "packages", "apps", "internal", "cmd"]
62
+ guidance: >
63
+ Mirror the actual top-level source layout (workspace packages, src
64
+ subdirectories, layers). One child per module with its responsibility in
65
+ one sentence; go one level deeper only where a module has genuinely
66
+ distinct sub-parts. Note the dependency direction between layers where it
67
+ is a deliberate part of the design.
68
+
69
+ - id: domain-data
70
+ name: Domain Model & Data
71
+ appliesWhen: >
72
+ The project owns meaningful state: database schemas, core domain
73
+ entities, rich configuration, or on-disk file formats it reads/writes.
74
+ detect: ["migrations", "schema", "models", "entities", "prisma", "*.sql", "types"]
75
+ guidance: >
76
+ Identify the central types/entities/tables/documents and how they relate
77
+ and persist. One child per entity or data store with a summary of what it
78
+ represents, its important fields or invariants, and where it is defined.
79
+ Include wire/file formats the project emits or consumes if they are part
80
+ of its contract.
81
+
82
+ - id: integrations
83
+ name: External Integrations
84
+ appliesWhen: >
85
+ The project talks to third-party services, external APIs, message
86
+ brokers, or other systems it does not own.
87
+ detect: ["client", "sdk", "api", "webhook", "queue", "http"]
88
+ guidance: >
89
+ One child per external system, summarising what it is used for, the
90
+ protocol/SDK involved, and where the integration code lives. Include how
91
+ credentials/endpoints are configured if that is visible in the code.
92
+
93
+ - id: cross-cutting
94
+ name: Cross-Cutting Concerns
95
+ appliesWhen: >
96
+ The project has deliberate machinery for concerns that span modules:
97
+ configuration, auth, error handling, logging, caching, concurrency,
98
+ feature flags.
99
+ detect: ["config", "auth", "middleware", "logger", "cache", "errors"]
100
+ guidance: >
101
+ Only include concerns with real, dedicated machinery in this repo — an
102
+ ad-hoc console.log does not earn a node. One child per concern with how
103
+ it is implemented and where; keep this branch honest and small.
104
+
105
+ - id: build-delivery
106
+ name: Build, Test & Delivery
107
+ appliesWhen: >
108
+ The project has a build pipeline, a test suite, packaging/publishing, or
109
+ CI/CD worth understanding to work on it.
110
+ detect: ["Makefile", "Dockerfile", ".github", "ci", "test", "tests", "scripts"]
111
+ guidance: >
112
+ Children for how the project is built (tools, targets), how it is tested
113
+ (frameworks, layout, what is covered), and how it ships (packaging,
114
+ release, CI workflows) — each summarising the actual setup and citing the
115
+ config files involved.
@@ -0,0 +1,32 @@
1
+ id: csharp
2
+ name: C# / .NET Overlay
3
+ version: 0.1.0
4
+ kind: mindmap
5
+ extends: base
6
+ appliesTo: [csharp]
7
+
8
+ aspects:
9
+ - id: solution-layout
10
+ name: Solution & Project Layout
11
+ appliesWhen: >
12
+ A .NET solution with multiple projects: which projects exist, what each
13
+ is for, and how they reference one another.
14
+ detect: ["*.sln", "*.csproj", "Program.cs"]
15
+ guidance: >
16
+ One child per project in the solution (app, library, tests) with its
17
+ purpose, target framework, and key project references; note the DI
18
+ composition root and where hosted services / controllers are registered.
19
+
20
+ - id: aspnet-wiring
21
+ name: ASP.NET Wiring
22
+ appliesWhen: >
23
+ An ASP.NET (Core) application: how requests are handled — middleware
24
+ order, DI registrations, controllers/minimal APIs, and EF Core
25
+ persistence.
26
+ detect: ["Program.cs", "Startup.cs", "Controllers", "Microsoft.AspNetCore", "DbContext"]
27
+ guidance: >
28
+ Read Program.cs/Startup.cs and map: the middleware pipeline in
29
+ registration order, the significant DI registrations (which interfaces
30
+ bind to which implementations, and their lifetimes where deliberate),
31
+ route groups to their controllers/endpoints, and each DbContext with the
32
+ entities it owns and where migrations live.
@@ -0,0 +1,42 @@
1
+ id: dart
2
+ name: Dart / Flutter Overlay
3
+ version: 0.1.0
4
+ kind: mindmap
5
+ extends: base
6
+ appliesTo: [dart]
7
+
8
+ aspects:
9
+ - id: flutter-composition
10
+ name: Screens & State
11
+ appliesWhen: >
12
+ A Flutter app: its screens/routes, the widget composition that matters,
13
+ and the state-management approach.
14
+ detect: ["pubspec.yaml", "lib/main.dart", "widgets", "*.dart"]
15
+ guidance: >
16
+ One child per screen/route from the router or navigator setup, with the
17
+ key widgets it composes; a sibling child for state management (provider,
18
+ riverpod, bloc, setState) describing where app state lives and how
19
+ widgets subscribe to it.
20
+
21
+ - id: platform-integration
22
+ name: Platform & Services
23
+ appliesWhen: >
24
+ The app talks to the platform or backend services: native plugins /
25
+ method channels, Firebase or another BaaS, local storage, push
26
+ notifications, deep links.
27
+ detect:
28
+ [
29
+ "MethodChannel",
30
+ "firebase",
31
+ "pubspec.yaml",
32
+ "android/",
33
+ "ios/",
34
+ "shared_preferences",
35
+ "sqflite"
36
+ ]
37
+ guidance: >
38
+ One child per integration: the plugin/channel or SDK used, what it is
39
+ for, where the Dart-side wrapper lives, and any native (android/ios)
40
+ code the repo itself carries. Include local persistence (sqflite, hive,
41
+ shared_preferences) and how the app layer abstracts these behind
42
+ services/repositories, if it does.
@@ -0,0 +1,33 @@
1
+ id: go
2
+ name: Go Overlay
3
+ version: 0.1.0
4
+ kind: mindmap
5
+ extends: base
6
+ appliesTo: [go]
7
+
8
+ aspects:
9
+ - id: go-layout
10
+ name: Go Module Layout
11
+ appliesWhen: >
12
+ A Go module using the conventional cmd/, internal/, pkg/ layout, or with
13
+ several binaries built from one module.
14
+ detect: ["go.mod", "cmd", "internal", "pkg"]
15
+ guidance: >
16
+ One child per binary under cmd/ (what it does, its main package), plus
17
+ children for the significant internal/ and pkg/ packages with their
18
+ responsibilities and which binaries depend on them. Note interfaces used
19
+ as seams between packages where they are load-bearing.
20
+
21
+ - id: concurrency-model
22
+ name: Concurrency Model
23
+ appliesWhen: >
24
+ The code uses goroutines/channels beyond trivial helpers: worker pools,
25
+ pipelines, fan-out/fan-in, background loops, or graceful-shutdown
26
+ orchestration.
27
+ detect: ["go func", "chan ", "sync.WaitGroup", "errgroup", "context.Context", "select {"]
28
+ guidance: >
29
+ Map the long-lived goroutines and worker pools: what each concurrent unit
30
+ does, how work and results flow (channels, errgroup, mutex-guarded
31
+ state), and how cancellation propagates (context tree, signal handling,
32
+ shutdown order). One child per concurrent subsystem, citing where it is
33
+ started. Only include real concurrency — not every one-off goroutine.
@@ -0,0 +1,40 @@
1
+ id: java
2
+ name: Java / JVM Overlay
3
+ version: 0.1.0
4
+ kind: mindmap
5
+ extends: base
6
+ appliesTo: [java]
7
+
8
+ aspects:
9
+ - id: jvm-layout
10
+ name: Build Modules & Packages
11
+ appliesWhen: >
12
+ A Maven/Gradle build, possibly multi-module: which modules exist and how
13
+ the important packages inside them are layered.
14
+ detect: ["pom.xml", "build.gradle", "build.gradle.kts", "settings.gradle"]
15
+ guidance: >
16
+ One child per build module with its role and key dependencies, then the
17
+ significant packages inside the main module (controller/service/
18
+ repository or the project's own layering) with one-line
19
+ responsibilities. Note the framework wiring (Spring configuration,
20
+ annotations) where it drives the structure.
21
+
22
+ - id: spring-wiring
23
+ name: Spring Wiring
24
+ appliesWhen: >
25
+ A Spring (Boot) application: how the application is assembled —
26
+ configuration classes, profiles, the web layer, and JPA persistence.
27
+ detect:
28
+ [
29
+ "@SpringBootApplication",
30
+ "@Configuration",
31
+ "application.yml",
32
+ "application.properties",
33
+ "@Entity"
34
+ ]
35
+ guidance: >
36
+ Map the @Configuration classes and what each wires, the property/profile
37
+ story (application.yml variants, @ConfigurationProperties holders),
38
+ controller route groups to their services, and the JPA entities with
39
+ their repositories and relationship mapping. Note AOP/interceptors and
40
+ scheduled/async methods where they carry real behaviour.
@@ -0,0 +1,43 @@
1
+ id: python
2
+ name: Python Overlay
3
+ version: 0.1.0
4
+ kind: mindmap
5
+ extends: base
6
+ appliesTo: [python]
7
+
8
+ aspects:
9
+ - id: package-surface
10
+ name: Package Surface
11
+ appliesWhen: >
12
+ The repo is (or contains) an installable Python package: console scripts,
13
+ the importable API, and how the distribution is built.
14
+ detect: ["pyproject.toml", "setup.py", "setup.cfg", "__init__.py"]
15
+ guidance: >
16
+ Read pyproject.toml/setup.cfg and map each console_scripts entry point
17
+ and top-level importable module to its implementation; note the build
18
+ backend (setuptools, poetry, hatch) and anything unusual about packaging.
19
+
20
+ - id: framework-wiring
21
+ name: Framework Wiring
22
+ appliesWhen: >
23
+ A web/API framework is present (Django, Flask, FastAPI, Celery): how the
24
+ app is assembled — routes/views, ORM models, settings, background tasks.
25
+ detect: ["django", "flask", "fastapi", "celery", "settings.py", "urls.py", "asgi", "wsgi"]
26
+ guidance: >
27
+ Start from the app factory / settings / URL conf and map: route groups to
28
+ their view/endpoint modules, ORM models to the domain they persist,
29
+ middleware in order, and task queues with their workers. Note where
30
+ configuration comes from (settings module, env, pydantic Settings).
31
+
32
+ - id: data-pipeline
33
+ name: Data & Model Pipeline
34
+ appliesWhen: >
35
+ The project trains models or processes data: notebooks, pandas/polars
36
+ transformations, ML training loops, or orchestrated pipelines (Airflow,
37
+ dbt, Prefect).
38
+ detect: ["notebooks", "*.ipynb", "torch", "sklearn", "pandas", "dags", "dbt_project.yml"]
39
+ guidance: >
40
+ Trace data from source to output: ingestion, the significant transforms,
41
+ training/evaluation (datasets, model definition, loss/metrics), and where
42
+ artifacts land (checkpoints, feature stores, dashboards). One child per
43
+ pipeline stage, citing the script/DAG/notebook that implements it.
@@ -0,0 +1,47 @@
1
+ id: typescript
2
+ name: TypeScript / JavaScript Overlay
3
+ version: 0.1.0
4
+ kind: mindmap
5
+ extends: base
6
+ appliesTo: [typescript]
7
+
8
+ # Adds JS/TS-idiomatic branches. New aspect ids are appended to the base set.
9
+ aspects:
10
+ - id: package-surface
11
+ name: Package Surface
12
+ appliesWhen: >
13
+ The repo is (or contains) a published npm package: what `package.json`
14
+ exposes via "exports"/"main"/"bin"/"types" and how the build produces it.
15
+ detect: ["package.json", "tsup.config*", "rollup.config*", "tsconfig.json"]
16
+ guidance: >
17
+ Read package.json (and the bundler config) and map each exposed entry —
18
+ bin commands, export subpaths, type declarations — to the source file
19
+ that implements it and the build step that produces the artifact.
20
+
21
+ - id: types-and-contracts
22
+ name: Types & Contracts
23
+ appliesWhen: >
24
+ TypeScript codebases where shared types are a deliberate part of the
25
+ design: central domain types, runtime validation at boundaries, or types
26
+ shared between packages/front-and-back ends.
27
+ detect: ["types.ts", "schema", "zod", "io-ts", "valibot", "*.d.ts", "trpc"]
28
+ guidance: >
29
+ Find where the load-bearing types live (a types.ts, a shared package, a
30
+ schema module) and how contracts are enforced at runtime boundaries
31
+ (zod/valibot parsing, JSON Schema, tRPC/OpenAPI codegen). One child per
32
+ contract surface: what it types, who consumes it, and where compile-time
33
+ types diverge from runtime validation. Skip this branch if types are
34
+ purely incidental.
35
+
36
+ - id: frontend-composition
37
+ name: Frontend Composition
38
+ appliesWhen: >
39
+ A component-based frontend is present (React, Next.js, Preact, Vue,
40
+ Svelte, Angular): routes/screens, the important components, and how
41
+ state/data flows between them.
42
+ detect: ["react", "next", "preact", "vue", "svelte", "@angular", "*.tsx", "*.vue", "*.svelte"]
43
+ guidance: >
44
+ One child per route/screen from the router or pages directory, with the
45
+ key components it composes; a sibling child for shared state/data
46
+ fetching (stores, context, hooks) describing where server data enters
47
+ the UI. Focus on routed screens and shared components, not every leaf.
@@ -0,0 +1 @@
1
+ :root,:root[data-theme=dark]{--bg: #0d1117;--panel: #161b22;--panel-2: #1c2129;--border: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--on-accent: #04101f;--chart-line: #e6edf3;--chart-axis: #8b949e;--chart-grid: #21262d;color-scheme:dark}:root[data-theme=light]{--bg: #ffffff;--panel: #f6f8fa;--panel-2: #eaeef2;--border: #d0d7de;--text: #1f2328;--muted: #59636e;--accent: #0969da;--on-accent: #ffffff;--chart-line: #1f2328;--chart-axis: #59636e;--chart-grid: #d8dee4;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel-2);padding:1px 5px;border-radius:5px}.app{max-width:1040px;margin:0 auto;padding:0 20px 60px}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:22px 0 14px}.brand{display:flex;align-items:baseline;gap:10px}.logo{font-weight:800;font-size:22px;letter-spacing:-.5px}.subtitle{color:var(--muted)}.repo{color:var(--muted);font-family:ui-monospace,monospace}.topbar-actions{display:flex;align-items:center;gap:14px}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;padding:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:15px;line-height:1;cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:22px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 14px;font-size:14px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.stack{display:flex;flex-direction:column;gap:18px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media (max-width: 720px){.two-col{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.card-title{margin:0 0 14px;font-size:15px;font-weight:600}.hero{display:flex;gap:26px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px}@media (max-width: 720px){.hero{flex-direction:column;align-items:flex-start}}.hero-meta{flex:1}.summary{margin:0 0 14px;font-size:15px}.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;margin:0}.facts div{display:flex;flex-direction:column}.facts dt{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.facts dd{margin:2px 0 0}.ring svg{display:block}.ring-track{fill:none;stroke:var(--border);stroke-width:12}.ring-value{fill:none;stroke-width:12;stroke-linecap:round;transition:stroke-dasharray .6s ease}.ring-score{font-size:34px;font-weight:800;text-anchor:middle}.ring-grade{font-size:12px;fill:var(--muted);text-anchor:middle}.bar-row{display:grid;grid-template-columns:220px 1fr 120px;align-items:center;gap:12px;padding:5px 0}@media (max-width: 620px){.bar-row{grid-template-columns:130px 1fr 70px}}.bar-label{color:var(--text)}.bar-track{background:var(--panel-2);border-radius:6px;height:10px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;transition:width .5s ease}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.list{margin:0;padding-left:18px}.list li{margin:4px 0}.list.good li::marker{color:#3fb950}.list.bad li::marker{color:#f85149}.recs{list-style:none;margin:0;padding:0}.recs li{padding:8px 0;border-bottom:1px solid var(--border)}.recs li:last-child{border-bottom:none}.pill{display:inline-block;font-size:11px;text-transform:uppercase;border-radius:20px;padding:2px 8px;margin-right:8px;font-weight:700}.pill.high{background:#6e2019;color:#ff7b72}.pill.medium{background:#5a4212;color:#e3b341}.pill.low{background:#22333b;color:#7ee2c8}:root[data-theme=light] .pill.high{background:#ffebe9;color:#cf222e}:root[data-theme=light] .pill.medium{background:#fff8c5;color:#9a6700}:root[data-theme=light] .pill.low{background:#dafbe1;color:#1a7f37}.run-picker{display:flex;align-items:center;gap:10px}.run-picker select,select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px}.crit-list{display:flex;flex-direction:column;gap:6px}.crit{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel-2)}.crit summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}.crit summary::-webkit-details-marker{display:none}.score-chip{font-variant-numeric:tabular-nums;font-weight:700;color:#0d1117;border-radius:6px;padding:1px 8px;font-size:12px}.crit-title{font-weight:500}.crit-just{margin:10px 0 6px;color:var(--text)}.evidence{margin:0;padding-left:18px}.evidence li{margin:3px 0}.table-wrap{overflow-x:auto}table.history{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.history th,table.history td{padding:7px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.history th{color:var(--muted);font-weight:600;font-size:12px}table.history .num{text-align:right}table.history .cat{color:var(--muted)}table.history .strong{font-weight:700}.up{color:#3fb950}.down{color:#f85149}:root[data-theme=light] .up,:root[data-theme=light] .list.good li::marker{color:#1a7f37}:root[data-theme=light] .down,:root[data-theme=light] .list.bad li::marker{color:#cf222e}.grade-dot{font-size:10px}.chart{width:100%}.legend{display:flex;gap:18px;color:var(--muted);margin-top:12px;flex-wrap:wrap}.legend.wrap span{display:inline-flex;align-items:center;gap:6px}.swatch{width:12px;height:12px;border-radius:3px;display:inline-block}.empty{text-align:center;color:var(--muted);padding:60px 20px}.muted{color:var(--muted)}.foot{text-align:center;color:var(--muted);margin-top:34px;font-size:12px}.uplot,.u-title,.u-legend{color:var(--text)}.u-legend .u-marker{border-radius:2px}.profile{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px}.profile .summary{font-size:15px;margin:0 0 12px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.chip{border:1px solid var(--border);background:var(--panel-2);color:var(--text);border-radius:999px;padding:4px 12px;font-size:12.5px;cursor:default}.chip.kind{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.run-select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 8px;font:inherit}.outline-panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 18px 22px}.outline-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:13px;min-height:26px}.breadcrumb.muted{color:var(--muted);font-size:12.5px}.crumb{background:none;border:none;color:var(--accent);font:inherit;padding:2px 4px;border-radius:5px;cursor:pointer}.crumb:hover{background:var(--panel-2)}.crumb.current{color:var(--text);font-weight:600;cursor:default}.crumb-sep{color:var(--muted);padding:0 2px}.outline-actions{display:flex;align-items:center;gap:8px}.search{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;width:240px}.search:focus{outline:none;border-color:var(--accent)}.ghost-btn{background:none;border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:5px 10px;font-size:12.5px;cursor:pointer}.ghost-btn:hover{color:var(--text);border-color:var(--accent)}.zoom-head{margin:2px 0 12px}.zoom-title{margin:0;font-size:22px;letter-spacing:-.3px}.zoom-summary{margin:6px 0 0;color:var(--muted);max-width:72ch}.zoom-head .files{margin-top:8px}.outline{display:flex;flex-direction:column}.node .children{margin-left:13px;padding-left:22px;border-left:1px solid var(--border)}.row{display:flex;align-items:flex-start;gap:2px;padding:3px 6px 3px 0;border-radius:7px;cursor:default}.row:hover{background:color-mix(in srgb,var(--panel-2) 70%,transparent)}.row.selected{background:color-mix(in srgb,var(--accent) 14%,transparent)}.row.match .title{color:var(--accent)}.node-text mark{background:color-mix(in srgb,var(--accent) 32%,transparent);color:inherit;border-radius:3px;padding:0 1px}.disclosure{flex:none;width:18px;height:22px;background:none;border:none;color:var(--muted);font-size:11px;line-height:22px;padding:0;cursor:pointer;transition:transform .12s ease;transform-origin:45% 50%;visibility:hidden}.node:hover>.row>.disclosure,.row.selected>.disclosure{visibility:visible}.disclosure.open{transform:rotate(90deg)}.disclosure.spacer{cursor:default}.dot{flex:none;width:18px;height:22px;background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.dot span{width:7px;height:7px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 0 transparent;transition:box-shadow .12s ease,background .12s ease}.dot.loaded span{box-shadow:0 0 0 4px color-mix(in srgb,var(--muted) 28%,transparent)}.dot:hover span{background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent)}.node-text{min-width:0;padding:1px 0;line-height:20px}.node-text .title{font-weight:600}.node-text .summary{color:var(--muted);margin-left:8px}.node-text .summary:before{content:"— "}.kind-badge{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:5px;padding:0 5px;margin-left:8px;vertical-align:1px}.count-badge{font-size:11px;color:var(--muted);background:var(--panel-2);border-radius:999px;padding:0 7px;margin-left:8px;vertical-align:1px}.files{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:8px}code.file{font-size:11.5px;color:color-mix(in srgb,var(--accent) 75%,var(--text))}.notes{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 20px}.notes h2{margin:0 0 8px;font-size:15px}.notes p{margin:0;color:var(--muted)}@media (max-width: 640px){.outline-toolbar{flex-direction:column;align-items:stretch}.search{width:100%}.node .children{padding-left:14px}}
@@ -0,0 +1,4 @@
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const _ of r.addedNodes)_.tagName==="LINK"&&_.rel==="modulepreload"&&l(_)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var le,b,Ve,F,Pe,Ge,Ke,se,Z,W,Qe,me,ue,de,te={},ne=[],dt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,ie=Array.isArray;function L(e,t){for(var n in t)e[n]=t[n];return e}function ge(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function ft(e,t,n){var l,i,r,_={};for(r in t)r=="key"?l=t[r]:r=="ref"?i=t[r]:_[r]=t[r];if(arguments.length>2&&(_.children=arguments.length>3?le.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)_[r]===void 0&&(_[r]=e.defaultProps[r]);return X(e,_,l,i,null)}function X(e,t,n,l,i){var r={type:e,props:t,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++Ve,__i:-1,__u:0};return i==null&&b.vnode!=null&&b.vnode(r),r}function oe(e){return e.children}function ee(e,t){this.props=e,this.context=t}function q(e,t){if(t==null)return e.__?q(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?q(e):null}function ht(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,l=[],i=[],r=L({},t);r.__v=t.__v+1,b.vnode&&b.vnode(r),ve(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,l,n??q(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,Xe(l,r,i),t.__e=t.__=null,r.__e!=n&&Je(r)}}function Je(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),Je(e)}function Te(e){(!e.__d&&(e.__d=!0)&&F.push(e)&&!re.__r++||Pe!=b.debounceRendering)&&((Pe=b.debounceRendering)||Ge)(re)}function re(){try{for(var e,t=1;F.length;)F.length>t&&F.sort(Ke),e=F.shift(),t=F.length,ht(e)}finally{F.length=re.__r=0}}function Ye(e,t,n,l,i,r,_,a,d,c,u){var y,o,h,f,C,g,m,v=l&&l.__k||ne,k=t.length;for(d=pt(n,t,v,d,k),y=0;y<k;y++)(h=n.__k[y])!=null&&(o=h.__i!=-1&&v[h.__i]||te,h.__i=y,g=ve(e,h,o,i,r,_,a,d,c,u),f=h.__e,h.ref&&o.ref!=h.ref&&(o.ref&&ye(o.ref,null,h),u.push(h.ref,h.__c||f,h)),C==null&&f!=null&&(C=f),(m=!!(4&h.__u))||o.__k===h.__k?(d=Ze(h,d,e,m),m&&o.__e&&(o.__e=null)):typeof h.type=="function"&&g!==void 0?d=g:f&&(d=f.nextSibling),h.__u&=-7);return n.__e=C,d}function pt(e,t,n,l,i){var r,_,a,d,c,u=n.length,y=u,o=0;for(e.__k=new Array(i),r=0;r<i;r++)(_=t[r])!=null&&typeof _!="boolean"&&typeof _!="function"?(typeof _=="string"||typeof _=="number"||typeof _=="bigint"||_.constructor==String?_=e.__k[r]=X(null,_,null,null,null):ie(_)?_=e.__k[r]=X(oe,{children:_},null,null,null):_.constructor===void 0&&_.__b>0?_=e.__k[r]=X(_.type,_.props,_.key,_.ref?_.ref:null,_.__v):e.__k[r]=_,d=r+o,_.__=e,_.__b=e.__b+1,a=null,(c=_.__i=mt(_,n,d,y))!=-1&&(y--,(a=n[c])&&(a.__u|=2)),a==null||a.__v==null?(c==-1&&(i>u?o--:i<u&&o++),typeof _.type!="function"&&(_.__u|=4)):c!=d&&(c==d-1?o--:c==d+1?o++:(c>d?o--:o++,_.__u|=4))):e.__k[r]=null;if(y)for(r=0;r<u;r++)(a=n[r])!=null&&!(2&a.__u)&&(a.__e==l&&(l=q(a)),tt(a,a));return l}function Ze(e,t,n,l){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=Ze(i[r],t,n,l));return t}e.__e!=t&&(l&&(t&&e.type&&!t.parentNode&&(t=q(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function mt(e,t,n,l){var i,r,_,a=e.key,d=e.type,c=t[n],u=c!=null&&(2&c.__u)==0;if(c===null&&a==null||u&&a==c.key&&d==c.type)return n;if(l>(u?1:0)){for(i=n-1,r=n+1;i>=0||r<t.length;)if((c=t[_=i>=0?i--:r++])!=null&&!(2&c.__u)&&a==c.key&&d==c.type)return _}return-1}function De(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||dt.test(t)?n:n+"px"}function J(e,t,n,l,i){var r,_;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof l=="string"&&(e.style.cssText=l=""),l)for(t in l)n&&t in n||De(e.style,t,"");if(n)for(t in n)l&&n[t]==l[t]||De(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(Qe,"$1")),_=t.toLowerCase(),t=_ in e||t=="onFocusOut"||t=="onFocusIn"?_.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?l?n[W]=l[W]:(n[W]=me,e.addEventListener(t,r?de:ue,r)):e.removeEventListener(t,r?de:ue,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function Ie(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[Z]==null)t[Z]=me++;else if(t[Z]<n[W])return;return n(b.event?b.event(t):t)}}}function ve(e,t,n,l,i,r,_,a,d,c){var u,y,o,h,f,C,g,m,v,k,N,H,D,R,P,z,T=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),r=[a=t.__e=n.__e]),(u=b.__b)&&u(t);e:if(typeof T=="function"){y=_.length;try{if(v=t.props,k=T.prototype&&T.prototype.render,N=(u=T.contextType)&&l[u.__c],H=u?N?N.props.value:u.__:l,n.__c?m=(o=t.__c=n.__c).__=o.__E:(k?t.__c=o=new T(v,H):(t.__c=o=new ee(v,H),o.constructor=T,o.render=vt),N&&N.sub(o),o.state||(o.state={}),o.__n=l,h=o.__d=!0,o.__h=[],o._sb=[]),k&&o.__s==null&&(o.__s=o.state),k&&T.getDerivedStateFromProps!=null&&(o.__s==o.state&&(o.__s=L({},o.__s)),L(o.__s,T.getDerivedStateFromProps(v,o.__s))),f=o.props,C=o.state,o.__v=t,h)k&&T.getDerivedStateFromProps==null&&o.componentWillMount!=null&&o.componentWillMount(),k&&o.componentDidMount!=null&&o.__h.push(o.componentDidMount);else{if(k&&T.getDerivedStateFromProps==null&&v!==f&&o.componentWillReceiveProps!=null&&o.componentWillReceiveProps(v,H),t.__v==n.__v||!o.__e&&o.shouldComponentUpdate!=null&&o.shouldComponentUpdate(v,o.__s,H)===!1){t.__v!=n.__v&&(o.props=v,o.state=o.__s,o.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(M){M&&(M.__=t)}),ne.push.apply(o.__h,o._sb),o._sb=[],o.__h.length&&_.push(o);break e}o.componentWillUpdate!=null&&o.componentWillUpdate(v,o.__s,H),k&&o.componentDidUpdate!=null&&o.__h.push(function(){o.componentDidUpdate(f,C,g)})}if(o.context=H,o.props=v,o.__P=e,o.__e=!1,D=b.__r,R=0,k)o.state=o.__s,o.__d=!1,D&&D(t),u=o.render(o.props,o.state,o.context),ne.push.apply(o.__h,o._sb),o._sb=[];else do o.__d=!1,D&&D(t),u=o.render(o.props,o.state,o.context),o.state=o.__s;while(o.__d&&++R<25);o.state=o.__s,o.getChildContext!=null&&(l=L(L({},l),o.getChildContext())),k&&!h&&o.getSnapshotBeforeUpdate!=null&&(g=o.getSnapshotBeforeUpdate(f,C)),P=u!=null&&u.type===oe&&u.key==null?et(u.props.children):u,a=Ye(e,ie(P)?P:[P],t,n,l,i,r,_,a,d,c),o.base=t.__e,t.__u&=-161,o.__h.length&&_.push(o),m&&(o.__E=o.__=null)}catch(M){if(_.length=y,t.__v=null,d||r!=null)if(M.then){for(t.__u|=d?160:128;a&&a.nodeType==8&&a.nextSibling;)a=a.nextSibling;r!=null&&(r[r.indexOf(a)]=null),t.__e=a}else{if(r!=null)for(z=r.length;z--;)ge(r[z]);fe(t)}else t.__e=n.__e,!t.__k&&n.__k&&(t.__k=n.__k),M.then||fe(t);b.__e(M,t,n)}}else r==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):a=t.__e=gt(n.__e,t,n,l,i,r,_,d,c);return(u=b.diffed)&&u(t),128&t.__u?void 0:a}function fe(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(fe))}function Xe(e,t,n){for(var l=0;l<n.length;l++)ye(n[l],n[++l],n[++l]);b.__c&&b.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){b.__e(r,i.__v)}})}function et(e){return typeof e!="object"||e==null||e.__b>0?e:ie(e)?e.map(et):e.constructor!==void 0?null:L({},e)}function gt(e,t,n,l,i,r,_,a,d){var c,u,y,o,h,f,C,g=n.props||te,m=t.props,v=t.type;if(v=="svg"?i="http://www.w3.org/2000/svg":v=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(c=0;c<r.length;c++)if((h=r[c])&&"setAttribute"in h==!!v&&(v?h.localName==v:h.nodeType==3)){e=h,r[c]=null;break}}if(e==null){if(v==null)return document.createTextNode(m);e=document.createElementNS(i,v,m.is&&m),a&&(b.__m&&b.__m(t,r),a=!1),r=null}if(v==null)g===m||a&&e.data==m||(e.data=m);else{if(r=v=="textarea"&&m.defaultValue!=null?null:r&&le.call(e.childNodes),!a&&r!=null)for(g={},c=0;c<e.attributes.length;c++)g[(h=e.attributes[c]).name]=h.value;for(c in g)h=g[c],c=="dangerouslySetInnerHTML"?y=h:c=="children"||c in m||c=="value"&&"defaultValue"in m||c=="checked"&&"defaultChecked"in m||J(e,c,null,h,i);for(c in m)h=m[c],c=="children"?o=h:c=="dangerouslySetInnerHTML"?u=h:c=="value"?f=h:c=="checked"?C=h:a&&typeof h!="function"||g[c]===h||J(e,c,h,g[c],i);if(u)a||y&&(u.__html==y.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(y&&(e.innerHTML=""),Ye(t.type=="template"?e.content:e,ie(o)?o:[o],t,n,l,v=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,_,r?r[0]:n.__k&&q(n,0),a,d),r!=null)for(c=r.length;c--;)ge(r[c]);a&&v!="textarea"||(c="value",v=="progress"&&f==null?e.removeAttribute("value"):f!=null&&(f!==e[c]||v=="progress"&&!f||v=="option"&&f!=g[c])&&J(e,c,f,g[c],i),c="checked",C!=null&&C!=e[c]&&J(e,c,C,g[c],i))}return e}function ye(e,t,n){try{if(typeof e=="function"){var l=typeof e.__u=="function";l&&e.__u(),l&&t==null||(e.__u=e(t))}else e.current=t}catch(i){b.__e(i,n)}}function tt(e,t,n){var l,i;if(b.unmount&&b.unmount(e),(l=e.ref)&&(l.current&&l.current!=e.__e||ye(l,null,t)),(l=e.__c)!=null){if(l.componentWillUnmount)try{l.componentWillUnmount()}catch(r){b.__e(r,t)}l.base=l.__P=l.__n=null}if(l=e.__k)for(i=0;i<l.length;i++)l[i]&&tt(l[i],t,n||typeof e.type!="function");n||ge(e.__e),e.__c=e.__=e.__e=void 0}function vt(e,t,n){return this.constructor(e,n)}function yt(e,t,n){var l,i,r,_;t==document&&(t=document.documentElement),b.__&&b.__(e,t),i=(l=!1)?null:t.__k,r=[],_=[],ve(t,e=t.__k=ft(oe,null,[e]),i||te,te,t.namespaceURI,i?null:t.firstChild?le.call(t.childNodes):null,r,i?i.__e:t.firstChild,l,_),Xe(r,e,_),e.props.children=null}le=ne.slice,b={__e:function(e,t,n,l){for(var i,r,_;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),_=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,l||{}),_=i.__d),_)return i.__E=i}catch(a){e=a}throw e}},Ve=0,ee.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=L({},this.state),typeof e=="function"&&(e=e(L({},n),this.props)),e&&L(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Te(this))},ee.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Te(this))},ee.prototype.render=oe,F=[],Ge=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ke=function(e,t){return e.__v.__b-t.__v.__b},re.__r=0,se=Math.random().toString(8),Z="__d"+se,W="__a"+se,Qe=/(PointerCapture)$|Capture$/i,me=0,ue=Ie(!1),de=Ie(!0);var bt=0;function s(e,t,n,l,i,r){t||(t={});var _,a,d=t;if("ref"in d)for(a in d={},t)a=="ref"?_=t[a]:d[a]=t[a];var c={type:e,props:d,key:n,ref:_,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--bt,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(_=e.defaultProps))for(a in _)d[a]===void 0&&(d[a]=_[a]);return b.vnode&&b.vnode(c),c}var B,E,ce,He,V=0,nt=[],S=b,Me=S.__b,Le=S.__r,Ue=S.diffed,Fe=S.__c,Re=S.unmount,Oe=S.__;function be(e,t){S.__h&&S.__h(E,e,V||t),V=0;var n=E.__H||(E.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function U(e){return V=1,kt(ot,e)}function kt(e,t,n){var l=be(B++,2);if(l.t=e,!l.__c&&(l.__=[ot(void 0,t),function(a){var d=l.__N?l.__N[0]:l.__[0],c=l.t(d,a);d!==c&&(l.__N=[c,l.__[1]],l.__c.setState({}))}],l.__c=E,!E.__f)){var i=function(a,d,c){if(!l.__c.__H)return!0;var u=!1,y=l.__c.props!==a;if(l.__c.__H.__.some(function(h){if(h.__N){u=!0;var f=h.__[0];h.__=h.__N,h.__N=void 0,f!==h.__[0]&&(y=!0)}}),r){var o=r.call(this,a,d,c);return u?o||y:o}return!u||y};E.__f=!0;var r=E.shouldComponentUpdate,_=E.componentWillUpdate;E.componentWillUpdate=function(a,d,c){if(this.__e){var u=r;r=void 0,i(a,d,c),r=u}_&&_.call(this,a,d,c)},E.shouldComponentUpdate=i}return l.__N||l.__}function j(e,t){var n=be(B++,3);!S.__s&&it(n.__H,t)&&(n.__=e,n.u=t,E.__H.__h.push(n))}function rt(e){return V=5,I(function(){return{current:e}},[])}function I(e,t){var n=be(B++,7);return it(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Y(e,t){return V=8,I(function(){return e},t)}function je(){for(var e;e=nt.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(he),t.__h.some(lt),t.__h=[]}catch(n){t.__h=[],S.__e(n,e.__v)}}}S.__b=function(e){E=null,Me&&Me(e)},S.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Oe&&Oe(e,t)},S.__r=function(e){Le&&Le(e),B=0;var t=(E=e.__c).__H;t&&(ce===E?(t.__h=[],E.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.length&&je(),B=0)),ce=E},S.diffed=function(e){Ue&&Ue(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(nt.push(t)!==1&&He===S.requestAnimationFrame||((He=S.requestAnimationFrame)||wt)(je)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),ce=E=null},S.__c=function(e,t){t.some(function(n){try{n.__h.some(he),n.__h=n.__h.filter(function(l){return!l.__||lt(l)})}catch(l){t.some(function(i){i.__h&&(i.__h=[])}),t=[],S.__e(l,n.__v)}}),Fe&&Fe(e,t)},S.unmount=function(e){Re&&Re(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(l){try{he(l)}catch(i){t=i}}),n.__H=void 0,t&&S.__e(t,n.__v))};var qe=typeof requestAnimationFrame=="function";function wt(e){var t,n=function(){clearTimeout(l),qe&&cancelAnimationFrame(t),setTimeout(e)},l=setTimeout(n,35);qe&&(t=requestAnimationFrame(n))}function he(e){var t=E,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),E=t}function lt(e){var t=E;e.__c=e.__(),E=t}function it(e,t){return!e||e.length!==t.length||t.some(function(n,l){return n!==e[l]})}function ot(e,t){return typeof t=="function"?t(e):t}async function xt(){if(window.__EDSGER_MINDMAP__)return ze(window.__EDSGER_MINDMAP__);const e=await fetch("./edsger-mindmap.json",{cache:"no-store"});if(!e.ok)throw new Error(`Could not load edsger-mindmap.json (HTTP ${e.status})`);return ze(await e.json())}function ze(e){const t=[...e.history??[]].sort((n,l)=>n.generatedAt<l.generatedAt?-1:n.generatedAt>l.generatedAt?1:0);return{repo:e.repo,latest:e.latest??null,history:t,runs:e.runs??{}}}function Et(e){const t=new Map,n=(l,i)=>{t.set(l.id,{node:l,parent:i});for(const r of l.children)n(r,l.id)};return n(e,null),t}function _t(e,t){return`${e.title}
2
+ ${e.summary}
3
+ ${e.files.join(`
4
+ `)}`.toLowerCase().includes(t)}function St(e,t){if(!t)return null;const n=new Set,l=i=>{let r=_t(i,t);for(const _ of i.children)l(_)&&(r=!0);return r&&n.add(i.id),r};return l(e),n}function st(e,t,n){return e.children.length?t?e.children.some(l=>t.has(l.id)):n.has(e.id):!1}function $t(e,t,n){const l=[],i=r=>{for(const _ of r.children)t&&!t.has(_.id)||(l.push(_.id),st(_,t,n)&&i(_))};return i(e),l}function Ct(e,t){if(!t)return[];const n=[];let l=t;for(;l;){const i=e.get(l);if(!i)break;n.unshift(i.node),l=i.parent}return n}function At(e,t){if(!t)return[{text:e,hit:!1}];const n=e.toLowerCase(),l=[];let i=0;for(;;){const r=n.indexOf(t,i);if(r===-1)break;r>i&&l.push({text:e.slice(i,r),hit:!1}),l.push({text:e.slice(r,r+t.length),hit:!0}),i=r+t.length}return i<e.length&&l.push({text:e.slice(i),hit:!1}),l.length?l:[{text:e,hit:!1}]}function ct(e){return e.children.reduce((t,n)=>t+1+ct(n),0)}function ae({text:e,query:t}){return t?At(e,t).map((n,l)=>n.hit?s("mark",{children:n.text},l):n.text):e}function Nt({node:e,view:t,onToggle:n,onZoom:l,onSelect:i}){const r=e.children.length>0,_=t.isExpanded(e),a=t.selectedId===e.id,d=rt(null);j(()=>{var u;a&&((u=d.current)==null||u.scrollIntoView({block:"nearest"}))},[a]);const c=["row",a?"selected":"",t.isMatch(e)?"match":""].filter(Boolean).join(" ");return s("div",{class:"node","data-kind":e.kind,children:[s("div",{class:c,ref:d,onClick:()=>i(e.id),children:[r?s("button",{class:`disclosure ${_?"open":""}`,title:_?"Collapse":"Expand",onClick:u=>{u.stopPropagation(),i(e.id),n(e.id)},children:"▸"}):s("span",{class:"disclosure spacer"}),s("button",{class:`dot ${r&&!_?"loaded":""}`,title:"Zoom in",onClick:u=>{u.stopPropagation(),l(e.id)},children:s("span",{})}),s("div",{class:"node-text",children:[s("span",{class:"title",onDblClick:()=>l(e.id),children:s(ae,{text:e.title,query:t.query})}),e.kind&&e.kind!=="topic"?s("span",{class:"kind-badge",children:e.kind}):null,r&&!_?s("span",{class:"count-badge",children:ct(e)}):null,e.summary?s("span",{class:"summary",children:s(ae,{text:e.summary,query:t.query})}):null,e.files.length?s("span",{class:"files",children:e.files.map(u=>s("code",{class:"file",children:s(ae,{text:u,query:t.query})},u))}):null]})]}),r&&_?s("div",{class:"children",children:s(at,{nodes:e.children,view:t,onToggle:n,onZoom:l,onSelect:i})}):null]})}function at({nodes:e,view:t,onToggle:n,onZoom:l,onSelect:i}){return s("div",{class:"outline",children:e.filter(r=>t.isVisible(r)).map(r=>s(Nt,{node:r,view:t,onToggle:n,onZoom:l,onSelect:i},r.id))})}const ut="edsger-theme",pe=new Set;function Pt(){return typeof matchMedia<"u"&&matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}function Tt(){if(typeof document<"u"){const e=document.documentElement.getAttribute("data-theme");if(e==="light"||e==="dark")return e}try{const e=localStorage.getItem(ut);if(e==="light"||e==="dark")return e}catch{}return Pt()}let G=Tt();typeof document<"u"&&!document.documentElement.getAttribute("data-theme")&&document.documentElement.setAttribute("data-theme",G);function Dt(){return G}function It(e){G=e,typeof document<"u"&&document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem(ut,e)}catch{}for(const t of pe)t()}function Ht(){It(G==="dark"?"light":"dark")}function Mt(e){return pe.add(e),()=>{pe.delete(e)}}function Lt(){const[e,t]=U(G);return j(()=>Mt(()=>t(Dt())),[]),e}function Ut(){const e=Lt(),n=`Switch to ${e==="dark"?"light":"dark"} mode`;return s("button",{type:"button",class:"theme-toggle",title:n,"aria-label":n,onClick:()=>Ht(),children:s("span",{"aria-hidden":"true",children:e==="dark"?"☀":"☾"})})}function We(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Ft(){var we;const[e,t]=U(null),[n,l]=U(null),[i,r]=U(null),[_,a]=U(null),[d,c]=U(new Set),[u,y]=U(null),[o,h]=U("");j(()=>{xt().then(t).catch(p=>l(p instanceof Error?p.message:String(p)))},[]);const f=I(()=>e?i&&e.runs[i]?e.runs[i]:e.latest:null,[e,i]),C=I(()=>e?[...e.history].reverse():[],[e]),g=I(()=>f?Et(f.root):null,[f]);j(()=>{f&&(a(null),y(null),c(new Set(f.root.children.map(p=>p.id))))},[f]);const m=I(()=>f?_&&(g!=null&&g.get(_))?g.get(_).node:f.root:null,[f,g,_]),v=I(()=>g?Ct(g,_):[],[g,_]),k=o.trim().toLowerCase(),N=I(()=>m?St(m,k):null,[k,m]),H=I(()=>({isVisible:p=>N?N.has(p.id):!0,isExpanded:p=>st(p,N,d),isMatch:p=>!!k&&_t(p,k),query:k,selectedId:u}),[N,d,k,u]),D=I(()=>m?$t(m,N,d):[],[m,N,d]),R=Y(p=>{c(w=>{const x=new Set(w);return x.has(p)?x.delete(p):x.add(p),x})},[]),P=Y(p=>{if(a(p),y(null),h(""),p&&(g!=null&&g.get(p))){const w=g.get(p).node;c(x=>{const $=new Set(x);$.add(p);for(const A of w.children)$.add(A.id);return $})}},[g]),z=Y(()=>{m&&c(p=>{const w=new Set(p),x=$=>{$.children.length&&w.add($.id),$.children.forEach(x)};return x(m),w})},[m]),T=Y(()=>{m&&c(p=>{const w=new Set(p),x=$=>{w.delete($.id),$.children.forEach(x)};for(const $ of m.children)x($);return w})},[m]),M=rt({index:g,flat:D,selected:u,expanded:d,zoomId:_});M.current={index:g,flat:D,selected:u,expanded:d,zoomId:_},j(()=>{const p=w=>{var Se,$e,Ce,Ae,Ne;const{index:x,flat:$,selected:A,expanded:xe,zoomId:K}=M.current,Q=w.target;if(Q&&(Q.tagName==="INPUT"||Q.tagName==="SELECT")){w.key==="Escape"&&Q.blur();return}if(!x||!$.length){w.key==="Escape"&&K&&(w.preventDefault(),P(((Se=x==null?void 0:x.get(K))==null?void 0:Se.parent)??null));return}const Ee=A?$.indexOf(A):-1;switch(w.key){case"ArrowDown":w.preventDefault(),y($[Math.min(Ee+1,$.length-1)]??null);break;case"ArrowUp":w.preventDefault(),y($[Math.max(Ee-1,0)]??null);break;case"ArrowRight":{if(!A)break;w.preventDefault();const O=($e=x.get(A))==null?void 0:$e.node;O!=null&&O.children.length&&!xe.has(A)&&R(A);break}case"ArrowLeft":{if(!A)break;w.preventDefault();const O=(Ce=x.get(A))==null?void 0:Ce.node;if(O!=null&&O.children.length&&xe.has(A))R(A);else{const _e=(Ae=x.get(A))==null?void 0:Ae.parent;_e&&$.includes(_e)&&y(_e)}break}case"Enter":A&&(w.preventDefault(),P(A));break;case"Escape":K&&(w.preventDefault(),P(((Ne=x.get(K))==null?void 0:Ne.parent)??null));break}};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[R,P]),j(()=>{u&&!D.includes(u)&&y(null)},[D,u]);const ke=(e==null?void 0:e.repo)??(f==null?void 0:f.repo)??"";return s("div",{class:"app",children:[s("header",{class:"topbar",children:[s("div",{class:"brand",children:[s("span",{class:"logo",children:"edsger"}),s("span",{class:"subtitle",children:"mind map"})]}),s("div",{class:"topbar-actions",children:[ke?s("div",{class:"repo",children:ke}):null,s(Ut,{})]})]}),s("main",{class:"content",children:n?s("div",{class:"empty",children:[s("strong",{children:"Failed to load data."}),s("div",{class:"muted",children:n})]}):e?!f||!m?s("div",{class:"empty",children:["No mind map yet. Run ",s("code",{children:"edsger mindmap"}),"."]}):s("div",{class:"stack",children:[_?null:s("section",{class:"profile",children:[s("p",{class:"summary",children:f.profile.summary}),f.profile.kinds.length?s("div",{class:"chips",children:f.profile.kinds.map(p=>s("span",{class:"chip kind",children:p},p))}):null,s("dl",{class:"facts",children:[s("div",{children:[s("dt",{children:"Languages"}),s("dd",{children:f.languages.join(", ")||"generic"})]}),s("div",{children:[s("dt",{children:"Nodes"}),s("dd",{children:[f.nodeCount," · depth ",f.depth]})]}),s("div",{children:[s("dt",{children:"Commit"}),s("dd",{children:(we=f.git)!=null&&we.commit?s("code",{children:[f.git.commit,f.git.branch?` (${f.git.branch})`:"",f.git.dirty?" ✻":""]}):"—"})]}),s("div",{children:[s("dt",{children:"Generated"}),s("dd",{children:We(f.generatedAt)})]}),C.length>1?s("div",{children:[s("dt",{children:"Run"}),s("dd",{children:s("select",{class:"run-select",value:i??f.runId,onChange:p=>r(p.target.value),children:C.map(p=>s("option",{value:p.runId,children:[We(p.generatedAt)," · ",p.nodeCount," nodes"]},p.runId))})})]}):null]})]}),s("section",{class:"outline-panel",children:[s("div",{class:"outline-toolbar",children:[v.length?s("nav",{class:"breadcrumb",children:[s("button",{class:"crumb",onClick:()=>P(null),children:f.root.title}),v.slice(1,-1).map(p=>s("span",{children:[s("span",{class:"crumb-sep",children:"›"}),s("button",{class:"crumb",onClick:()=>P(p.id),children:p.title})]},p.id)),s("span",{class:"crumb-sep",children:"›"}),s("span",{class:"crumb current",children:m.title})]}):s("div",{class:"breadcrumb muted",children:"↑↓ ←→ navigate · Enter zoom · Esc back"}),s("div",{class:"outline-actions",children:[s("input",{class:"search",type:"search",placeholder:"Search titles, summaries, files…",value:o,onInput:p=>h(p.target.value)}),s("button",{class:"ghost-btn",onClick:z,children:"Expand all"}),s("button",{class:"ghost-btn",onClick:T,children:"Collapse all"})]})]}),s("div",{class:"zoom-head",children:[s("h2",{class:"zoom-title",children:m.title}),m.summary?s("p",{class:"zoom-summary",children:m.summary}):null,m.files.length?s("div",{class:"files",children:m.files.map(p=>s("code",{class:"file",children:p},p))}):null]}),k&&!D.length?s("div",{class:"empty muted",children:["No nodes match “",o,"”."]}):s(at,{nodes:m.children,view:H,onToggle:R,onZoom:P,onSelect:y})]}),f.notes&&!_?s("section",{class:"notes",children:[s("h2",{children:"Notes"}),s("p",{children:f.notes})]}):null]}):s("div",{class:"empty",children:"Loading…"})}),s("footer",{class:"foot",children:s("span",{children:"Generated by edsger"})})]})}const Be=document.getElementById("app");Be&&yt(s(Ft,{}),Be);
@@ -0,0 +1,31 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <script>
7
+ (function () {
8
+ try {
9
+ var t = localStorage.getItem("edsger-theme");
10
+ if (t !== "light" && t !== "dark") {
11
+ t =
12
+ window.matchMedia &&
13
+ window.matchMedia("(prefers-color-scheme: light)").matches
14
+ ? "light"
15
+ : "dark";
16
+ }
17
+ document.documentElement.setAttribute("data-theme", t);
18
+ } catch (e) {
19
+ document.documentElement.setAttribute("data-theme", "dark");
20
+ }
21
+ })();
22
+ </script>
23
+ <title>Edsger — Mind Map</title>
24
+ <!-- __EDSGER_MINDMAP__ is injected here when exported as a single self-contained file. -->
25
+ <script type="module" crossorigin src="./assets/mindmap-Di5RM-4N.js"></script>
26
+ <link rel="stylesheet" crossorigin href="./assets/mindmap-D7KMR9EM.css">
27
+ </head>
28
+ <body>
29
+ <div id="app"></div>
30
+ </body>
31
+ </html>