Simon Marquis 2 weeks ago committed by GitHub
commit a50e3461c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -77,6 +77,35 @@ jobs:
disable_globbing: true disable_globbing: true
commit_message: "🤖 Updates baselines for Dependency Guard" commit_message: "🤖 Updates baselines for Dependency Guard"
- name: Update Graphs
run: ./gradlew updateGraph
- name: Check Graphs
id: graphs_verify
run: git add -- '**/README.md' && git diff --cached --quiet --exit-code -- '**/README.md'
- name: Prevent updating graphs if this is a fork
id: checkfork_graphs
continue-on-error: false
if: steps.graphs_verify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository
run: |
echo "::error::Check Graphs failed, please update graphs with: ./gradlew updateGraph" && exit 1
# Runs if previous job failed
- name: Generate new Dependency Guard baselines if verification failed and it's a PR
id: dependencyguard_baseline
if: steps.dependencyguard_verify.outcome == 'failure' && github.event_name == 'pull_request'
run: |
./gradlew dependencyGuardBaseline
- name: Push new graphs if available
if: steps.graphs_verify.outcome == 'failure' && github.event_name == 'pull_request'
uses: stefanzweifel/git-auto-commit-action@v5
with:
file_pattern: '**/README.md'
disable_globbing: true
commit_message: "🤖 Updates graphs"
- name: Run all local screenshot tests (Roborazzi) - name: Run all local screenshot tests (Roborazzi)
id: screenshotsverify id: screenshotsverify
continue-on-error: true continue-on-error: true

@ -1,3 +1,33 @@
# :app-nia-catalog module # `:app-nia-catalog`
## Dependency graph
![Dependency graph](../docs/images/graphs/dep_graph_app_nia_catalog.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:designsystem[designsystem]:::android-library
:core:model[model]:::jvm
:core:ui[ui]:::android-library
end
:app-nia-catalog[app-nia-catalog]:::android-application
:app-nia-catalog -.-> :core:designsystem
:app-nia-catalog -.-> :core:ui
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,109 @@
# :app module # `:app`
## Dependency graph
![Dependency graph](../docs/images/graphs/dep_graph_app.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:domain[domain]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:bookmarks[bookmarks]:::android-library
:feature:foryou[foryou]:::android-library
:feature:interests[interests]:::android-library
:feature:search[search]:::android-library
:feature:settings[settings]:::android-library
:feature:topic[topic]:::android-library
end
subgraph :sync
direction TB
:sync:work[work]:::android-library
end
:benchmarks[benchmarks]:::android-test
:app[app]:::android-application
:app -.->|baselineProfile| :benchmarks
:app -.-> :core:analytics
:app -.-> :core:common
:app -.-> :core:data
:app -.-> :core:designsystem
:app -.-> :core:model
:app -.-> :core:ui
:app -.-> :feature:bookmarks
:app -.-> :feature:foryou
:app -.-> :feature:interests
:app -.-> :feature:search
:app -.-> :feature:settings
:app -.-> :feature:topic
:app -.-> :sync:work
:benchmarks -.->|testedApks| :app
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:domain ---> :core:data
:core:domain ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:bookmarks -.-> :core:data
:feature:bookmarks -.-> :core:designsystem
:feature:bookmarks -.-> :core:ui
:feature:foryou -.-> :core:data
:feature:foryou -.-> :core:designsystem
:feature:foryou -.-> :core:domain
:feature:foryou -.-> :core:notifications
:feature:foryou -.-> :core:ui
:feature:interests -.-> :core:data
:feature:interests -.-> :core:designsystem
:feature:interests -.-> :core:domain
:feature:interests -.-> :core:ui
:feature:search -.-> :core:data
:feature:search -.-> :core:designsystem
:feature:search -.-> :core:domain
:feature:search -.-> :core:ui
:feature:settings -.-> :core:data
:feature:settings -.-> :core:designsystem
:feature:settings -.-> :core:ui
:feature:topic -.-> :core:data
:feature:topic -.-> :core:designsystem
:feature:topic -.-> :core:ui
:sync:work -.-> :core:analytics
:sync:work -.-> :core:data
:sync:work -.-> :core:notifications
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -0,0 +1,109 @@
# `:benchmarks`
<!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:domain[domain]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:bookmarks[bookmarks]:::android-library
:feature:foryou[foryou]:::android-library
:feature:interests[interests]:::android-library
:feature:search[search]:::android-library
:feature:settings[settings]:::android-library
:feature:topic[topic]:::android-library
end
subgraph :sync
direction TB
:sync:work[work]:::android-library
end
:benchmarks[benchmarks]:::android-test
:app[app]:::android-application
:app -.->|baselineProfile| :benchmarks
:app -.-> :core:analytics
:app -.-> :core:common
:app -.-> :core:data
:app -.-> :core:designsystem
:app -.-> :core:model
:app -.-> :core:ui
:app -.-> :feature:bookmarks
:app -.-> :feature:foryou
:app -.-> :feature:interests
:app -.-> :feature:search
:app -.-> :feature:settings
:app -.-> :feature:topic
:app -.-> :sync:work
:benchmarks -.->|testedApks| :app
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:domain ---> :core:data
:core:domain ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:bookmarks -.-> :core:data
:feature:bookmarks -.-> :core:designsystem
:feature:bookmarks -.-> :core:ui
:feature:foryou -.-> :core:data
:feature:foryou -.-> :core:designsystem
:feature:foryou -.-> :core:domain
:feature:foryou -.-> :core:notifications
:feature:foryou -.-> :core:ui
:feature:interests -.-> :core:data
:feature:interests -.-> :core:designsystem
:feature:interests -.-> :core:domain
:feature:interests -.-> :core:ui
:feature:search -.-> :core:data
:feature:search -.-> :core:designsystem
:feature:search -.-> :core:domain
:feature:search -.-> :core:ui
:feature:settings -.-> :core:data
:feature:settings -.-> :core:designsystem
:feature:settings -.-> :core:ui
:feature:topic -.-> :core:data
:feature:topic -.-> :core:designsystem
:feature:topic -.-> :core:ui
:sync:work -.-> :core:analytics
:sync:work -.-> :core:data
:sync:work -.-> :core:notifications
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -114,5 +114,9 @@ gradlePlugin {
id = libs.plugins.nowinandroid.jvm.library.get().pluginId id = libs.plugins.nowinandroid.jvm.library.get().pluginId
implementationClass = "JvmLibraryConventionPlugin" implementationClass = "JvmLibraryConventionPlugin"
} }
register("root") {
id = libs.plugins.nowinandroid.root.get().pluginId
implementationClass = "RootPlugin"
}
} }
} }

@ -0,0 +1,26 @@
/*
* Copyright 2025 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.google.samples.apps.nowinandroid.configureGraphTasks
import org.gradle.api.Plugin
import org.gradle.api.Project
class RootPlugin : Plugin<Project> {
override fun apply(target: Project) {
require(target.path == ":")
target.subprojects { configureGraphTasks() }
}
}

@ -0,0 +1,279 @@
/*
* Copyright 2025 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.samples.apps.nowinandroid
import com.android.utils.associateWithNotNull
import com.google.samples.apps.nowinandroid.PluginType.Unknown
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity.NONE
import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.assign
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.withType
import kotlin.text.RegexOption.DOT_MATCHES_ALL
/**
* Generates module dependency graphs with `graphDump` task, and update the corresponding `README.md` file with `graphUpdate`.
*
* This is not an optimal implementation and could be improved if needed:
* - [Graph.invoke] is **recursively** searching through dependent projects (although in practice it will never reach a stack overflow).
* - [Graph.invoke] is entirely re-executed for all projects, without re-using intermediate values.
* - [Graph.invoke] is always executed during Gradle's Configuration phase (but takes in general less than 1 ms for a project).
*
* The resulting graphs can be configured with `graph.ignoredProjects` and `graph.supportedConfigurations` properties.
*/
private class Graph(
private val root: Project,
private val dependencies: MutableMap<Project, Set<Pair<Configuration, Project>>> = mutableMapOf(),
private val plugins: MutableMap<Project, PluginType> = mutableMapOf(),
private val seen: MutableSet<String> = mutableSetOf(),
) {
private val ignoredProjects = root.providers.gradleProperty("graph.ignoredProjects")
.map { it.split(",").toSet() }
.orElse(emptySet())
private val supportedConfigurations =
root.providers.gradleProperty("graph.supportedConfigurations")
.map { it.split(",").toSet() }
.orElse(setOf("api", "implementation", "baselineProfile", "testedApks"))
operator fun invoke(project: Project = root): Graph {
if (project.path in seen) return this
seen += project.path
plugins.putIfAbsent(
project,
PluginType.entries.firstOrNull { project.pluginManager.hasPlugin(it.id) } ?: Unknown,
)
dependencies.compute(project) { _, u -> u.orEmpty() }
project.configurations
.matching { it.name in supportedConfigurations.get() }
.associateWithNotNull { it.dependencies.withType<ProjectDependency>().ifEmpty { null } }
.flatMap { (c, value) -> value.map { dep -> c to project.project(dep.path) } }
.filter { (_, p) -> p.path !in ignoredProjects.get() }
.forEach { (configuration: Configuration, projectDependency: Project) ->
dependencies.compute(project) { _, u -> u.orEmpty() + (configuration to projectDependency) }
invoke(projectDependency)
}
return this
}
fun dependencies(): Map<String, Set<Pair<String, String>>> = dependencies
.mapKeys { it.key.path }
.mapValues { it.value.mapTo(mutableSetOf()) { (c, p) -> c.name to p.path } }
fun plugins() = plugins.mapKeys { it.key.path }
}
/**
* Declaration order is important, as only the first match will be retained.
*/
internal enum class PluginType(val id: String, val ref: String, val style: String) {
AndroidApplication(
id = "com.android.application",
ref = "android-application",
style = "fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff",
),
AndroidLibrary(
id = "com.android.library",
ref = "android-library",
style = "fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff",
),
AndroidTest(
id = "com.android.test",
ref = "android-test",
style = "fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff",
),
Jvm(
id = "org.jetbrains.kotlin.jvm",
ref = "jvm",
style = "fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff",
),
Unknown(
id = "?",
ref = "unknown",
style = "fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff",
),
}
internal fun Project.configureGraphTasks() {
val dumpTask = tasks.register<GraphDumpTask>("graphDump") {
val graph = Graph(this@configureGraphTasks).invoke()
projectPath = this@configureGraphTasks.path
dependencies = graph.dependencies()
plugins = graph.plugins()
output = this@configureGraphTasks.layout.buildDirectory.file("mermaid.txt")
}
tasks.register<GraphUpdateTask>("graphUpdate") {
projectPath = this@configureGraphTasks.path
input = dumpTask.flatMap { it.output }
output = this@configureGraphTasks.layout.projectDirectory.file("README.md")
}
}
@CacheableTask
private abstract class GraphDumpTask : DefaultTask() {
@get:Input
abstract val projectPath: Property<String>
@get:Input
abstract val dependencies: MapProperty<String, Set<Pair<String, String>>>
@get:Input
abstract val plugins: MapProperty<String, PluginType>
@get:OutputFile
abstract val output: RegularFileProperty
override fun getDescription() = "Dumps project dependencies to a mermaid file."
@TaskAction
operator fun invoke() {
output.get().asFile.writeText(mermaid())
logger.lifecycle(output.get().asFile.toPath().toUri().toString())
}
private fun mermaid() = buildString {
val dependencies: Set<Dependency> = dependencies.get()
.flatMapTo(mutableSetOf()) { (project, entries) -> entries.map { it.toDependency(project) } }
// FrontMatter configuration (not supported yet on GitHub.com)
appendLine(
// language=YAML
"""
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
""".trimIndent(),
)
// Graph declaration
appendLine("graph TB")
// Nodes and subgraphs (limited to a single nested layer)
val (rootProjects, nestedProjects) = dependencies
.map { listOf(it.project, it.dependency) }.flatten().toSet()
.plus(projectPath.get()) // Special case when this specific module has no other dependency
.groupBy { it.substringBeforeLast(":") }
.entries.partition { it.key.isEmpty() }
nestedProjects.sortedByDescending { it.value.size }.forEach { (group, projects) ->
appendLine(" subgraph $group")
appendLine(" direction TB")
projects.sorted().forEach {
appendLine(it.alias(indent = 4, plugins.get().getValue(it)))
}
appendLine(" end")
}
rootProjects.flatMap { it.value }.sortedDescending().forEach {
appendLine(it.alias(indent = 2, plugins.get().getValue(it)))
}
// Links
if (dependencies.isNotEmpty()) appendLine()
dependencies
.sortedWith(compareBy({ it.project }, { it.dependency }, { it.configuration }))
.forEach { appendLine(it.link(indent = 2)) }
// Classes
appendLine()
PluginType.entries.forEach { appendLine(it.classDef()) }
}
private class Dependency(val project: String, val configuration: String, val dependency: String)
private fun Pair<String, String>.toDependency(project: String) =
Dependency(project, configuration = first, dependency = second)
private fun String.alias(indent: Int, pluginType: PluginType): String = buildString {
append(" ".repeat(indent))
append(this@alias)
append("[").append(substringAfterLast(":")).append("]:::")
append(pluginType.ref)
}
private fun Dependency.link(indent: Int) = buildString {
append(" ".repeat(indent))
append(project).append(" ")
append(
when (configuration) {
"api" -> "--->"
"implementation" -> "-.->"
else -> "-.->|$configuration|"
},
)
append(" ").append(dependency)
}
private fun PluginType.classDef() = "classDef $ref $style;"
}
@CacheableTask
private abstract class GraphUpdateTask : DefaultTask() {
@get:Input
abstract val projectPath: Property<String>
@get:InputFile
@get:PathSensitive(NONE)
abstract val input: RegularFileProperty
@get:OutputFile
abstract val output: RegularFileProperty
override fun getDescription() = "Updates Markdown file with the corresponding dependency graph."
@TaskAction
operator fun invoke() = with(output.get().asFile) {
if (!exists()) {
createNewFile()
writeText(
"""
# `${projectPath.get()}`
<!--region graph--> <!--endregion-->
""".trimIndent(),
)
}
val regex = """(<!--region graph-->)(.*?)(<!--endregion-->)""".toRegex(DOT_MATCHES_ALL)
val text = readText().replace(regex) { match ->
val (start, _, end) = match.destructured
val mermaid = input.get().asFile.readText().trimTrailingNewLines()
"""
|$start
|```mermaid
|$mermaid
|```
|$end
""".trimMargin()
}
writeText(text)
}
private fun String.trimTrailingNewLines() = lines()
.dropLastWhile(String::isBlank)
.joinToString(System.lineSeparator())
}

@ -38,5 +38,5 @@ plugins {
alias(libs.plugins.roborazzi) apply false alias(libs.plugins.roborazzi) apply false
alias(libs.plugins.google.osslicenses) apply false alias(libs.plugins.google.osslicenses) apply false
alias(libs.plugins.room) apply false alias(libs.plugins.room) apply false
alias(libs.plugins.module.graph) apply true // Plugin applied to allow module graph generation alias(libs.plugins.nowinandroid.root)
} }

@ -1,3 +1,23 @@
# :core:analytics module # `:core:analytics`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_analytics.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
end
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,23 @@
# :core:common module # `:core:common`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_common.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:common[common]:::jvm
end
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,48 @@
# :core:data-test module # `:core:data-test`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_data_test.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:data-test[data-test]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:data-test ---> :core:data
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,46 @@
# :core:data module # `:core:data`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_data.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,26 @@
# :core:database module # `:core:database`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_database.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:database[database]:::android-library
:core:model[model]:::jvm
end
:core:database ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,23 @@
# :core:datastore-proto module # `:core:datastore-proto`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_proto.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:datastore-proto[datastore-proto]:::android-library
end
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,33 @@
# :core:datastore-test module # `:core:datastore-test`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_test.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:common[common]:::jvm
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:datastore-test[datastore-test]:::android-library
:core:model[model]:::jvm
end
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:datastore-test -.-> :core:common
:core:datastore-test -.-> :core:datastore
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,30 @@
# :core:datastore module # `:core:datastore`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:common[common]:::jvm
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:model[model]:::jvm
end
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,23 @@
# :core:designsystem module # `:core:designsystem`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_designsystem.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:designsystem[designsystem]:::android-library
end
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,49 @@
# :core:domain module # `:core:domain`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_domain.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:domain[domain]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:domain ---> :core:data
:core:domain ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,23 @@
# :core:model module # `:core:model`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_model.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:model[model]:::jvm
end
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,28 @@
# :core:network module # `:core:network`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_network.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:common[common]:::jvm
:core:model[model]:::jvm
:core:network[network]:::android-library
end
:core:network ---> :core:common
:core:network ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,28 @@
# :core:notifications module # `:core:notifications`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_notifications.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:common[common]:::jvm
:core:model[model]:::jvm
:core:notifications[notifications]:::android-library
end
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,26 @@
# :core:screenshot-testing module # `:core:screenshot-testing`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_screenshot_testing.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:designsystem[designsystem]:::android-library
:core:screenshot-testing[screenshot-testing]:::android-library
end
:core:screenshot-testing -.-> :core:designsystem
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,52 @@
# :core:testing module # `:core:testing`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_testing.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:testing[testing]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:testing ---> :core:analytics
:core:testing ---> :core:common
:core:testing ---> :core:data
:core:testing ---> :core:model
:core:testing ---> :core:notifications
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,30 @@
# :core:ui module # `:core:ui`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_core_ui.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:designsystem[designsystem]:::android-library
:core:model[model]:::jvm
:core:ui[ui]:::android-library
end
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,305 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1616" height="404pt" viewBox="0 0 1212.13 404">
<g class="graph">
<path fill="#fff" d="M0 404V0h1212.13v404z"/>
<g class="node" transform="translate(4 400)">
<ellipse cx="645.13" cy="-378" fill="none" stroke="#000" rx="27.66" ry="18"/>
<text x="645.13" y="-373.8" font-family="Times,serif" font-size="14" text-anchor="middle">:app</text>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="297.13" cy="-306" fill="none" stroke="#000" rx="75.39" ry="18"/>
<text x="297.13" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:interests</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M622.9 28.25C575.45 37.76 472.2 58.45 385.13 76c-5.51 1.11-11.23 2.26-16.96 3.42"/>
<path fill="red" d="m370.62 82.5-10.5-1.45 9.11-5.41z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="135.13" cy="-306" fill="none" stroke="#000" rx="68.95" ry="18"/>
<text x="135.13" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:foryou</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M621.71 25.48C553.19 31.85 369.1 50.17 217.13 76c-5.5.93-11.19 1.99-16.88 3.12"/>
<path d="m201.33 82.47-10.5-1.43 9.1-5.43z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="812.13" cy="-306" fill="none" stroke="#000" rx="86.12" ry="18"/>
<text x="812.13" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:bookmarks</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M672 32.59c24.72 10.36 64.82 27.17 96.45 40.43"/>
<path d="m769.56 69.68 7.87 7.1-10.58-.64z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="645.13" cy="-306" fill="none" stroke="#000" rx="62.51" ry="18"/>
<text x="645.13" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:topic</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M649.13 40.3v24.16"/>
<path d="m652.63 64.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="458.13" cy="-306" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="458.13" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:search</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M625.45 31.87C596.73 42.61 547.61 61 510.72 74.81"/>
<path d="m512.19 78-10.59.22 8.14-6.78z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="989.13" cy="-306" fill="none" stroke="#000" rx="72.71" ry="18"/>
<text x="989.13" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:settings</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M675.54 28.3c47.27 9.49 149.44 30.06 235.59 47.7 5.47 1.12 11.14 2.29 16.83 3.46"/>
<path d="m928.32 75.96 9.08 5.45-10.5 1.4z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="795.13" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="795.13" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M676.95 22.77c93.64-.29 395.91 2.79 476.18 53.23 39.37 24.74 55 42.5 55 89v74c0 44.13-8.03 63.44-44 89-52.76 37.49-225.24 24.92-289 36-5.22.91-10.62 1.93-16.03 3.02"/>
<path d="m860.04 370.4-10.51-1.38 9.08-5.47z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="553.13" cy="-234" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="553.13" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M627.54 33.44C611.2 42.46 589.52 57.03 577.13 76c-11.72 17.95-16.64 41.79-18.67 60.29"/>
<path d="m561.96 136.38-4.33 9.66-2.64-10.26z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="774.13" cy="-162" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="774.13" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M677 24.37c90.47 4.71 371.67 21.68 398.13 51.63 10.59 11.99 8.85 22.67 0 36-14.26 21.47-161.89 76.8-243.49 106.12"/>
<path d="m832.85 221.41-10.6.07 8.24-6.66z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="584.13" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="584.13" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M621.3 23.36C509.79 25.07 99.33 34.2 61.13 76-73.67 223.49 362.28 237.49 527.4 237.64"/>
<path d="m527.29 234.14 10 3.49-10 3.51z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="412.13" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="412.13" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M621.23 23.65C507.4 26.52 81.9 39.63 35.13 76c-33.07 25.71-31 47.11-31 89v74c0 72.85 233.17 116.46 348.68 133.59"/>
<path d="m353.06 369.09 9.39 4.9-10.4 2.02z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="1084.13" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="1084.13" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M676.84 24.37c96.52 5 414 23.46 449.29 51.63 38.51 30.74 36.4 60.07 25 108-8.61 36.2-29.46 73.82-44.83 98.2"/>
<path d="m1109.29 284.03-8.36 6.5 2.48-10.3z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="1084.13" cy="-234" fill="none" stroke="#000" rx="53.95" ry="18"/>
<text x="1084.13" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:sync:work</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M676.8 24.09c94.84 4.04 402.48 19.53 431.33 51.91 15.09 16.94 7.03 42.79-3 62.27"/>
<path d="m1108.33 139.73-7.93 7.02 1.82-10.44z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M349.28 108.17c46.73 12.77 117.11 32.02 162.77 44.5"/>
<path d="m512.91 149.28 8.73 6.02-10.57.73z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M335.47 110.31c53.99 24.01 154.4 68.34 171.66 73.69 62.31 19.31 134.94 33.06 189.32 41.71"/>
<path d="m696.93 222.25 9.34 5-10.42 1.91z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M322.57 111.56c25.82 19.36 71.03 51.41 113.56 72.44 33.02 16.33 72.34 29.89 102.71 39.21"/>
<path d="m539.58 219.78 8.56 6.23-10.58.47z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="280.13" cy="-234" fill="none" stroke="#000" rx="61.99" ry="18"/>
<text x="280.13" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:domain</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M296.93 112.3c-1.79 7.38-3.93 16.18-5.94 24.45"/>
<path fill="red" d="m294.76 136.06-5.76 8.89-1.04-10.54z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M189.81 106.51c9.08 1.93 18.46 3.84 27.32 5.49 102.76 19.19 223.91 36.91 290.28 46.2"/>
<path d="m507.84 154.73 9.42 4.84-10.39 2.09z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M189.66 106.67c58.87 13.72 150.08 35.36 165.47 41.33 31.15 12.08 34.32 25.38 66 36 25.5 8.55 177.39 29.47 274.66 42.32"/>
<path d="m696.12 222.84 9.45 4.77-10.37 2.17z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M148.05 112.02c11.87 20.76 34.89 55.14 65.08 71.98 52.8 29.45 223.23 43.94 315.06 49.76"/>
<path d="m528.25 230.26 9.77 4.11-10.2 2.88z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M170.95 110.36c21.25 10.26 49.41 23.85 72.31 34.91"/>
<path d="m244.53 142 7.48 7.5-10.52-1.2z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M764.96 108.83c-47.43 12.82-117.32 31.71-162.71 43.98"/>
<path d="m603.29 156.15-10.56-.77 8.74-5.99z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M811.47 112.41c-6.45 24.09-18.15 67.84-25.84 96.56"/>
<path d="m789.07 209.67-5.97 8.76-.8-10.57z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M787.58 111.42c-17.78 10.32-41.08 24.02-61.45 36.58-36.53 22.52-77.81 49.32-105.62 67.59"/>
<path d="m622.44 218.51-10.27 2.57 6.43-8.42z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M627.79 111.24c-12.51 9.51-28.47 21.66-42.05 31.99"/>
<path d="m588.06 145.86-10.07 3.27 5.83-8.84z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M664.43 111.85c22.5 24.76 64.67 71.18 90.84 99.99"/>
<path d="m757.69 209.3 4.14 9.75-9.32-5.04z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M641.77 112.13c-10.4 24.2-29.49 68.66-41.87 97.48"/>
<path d="m603.27 210.61-7.16 7.81.73-10.57z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M484.16 111.24c12.92 9.51 29.4 21.66 43.43 31.99"/>
<path d="m529.64 140.4 5.98 8.75-10.13-3.11z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M503.63 108.57c29.3 9.97 69.29 24.35 103.5 39.43 46.63 20.55 98.27 48.14 132.48 67.12"/>
<path d="m741.29 212.05 7.03 7.93-10.44-1.82z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M467.8 112.32c6.93 19.2 20.17 50.26 39.33 71.68 11.92 13.33 27.94 24.74 42.57 33.52"/>
<path d="m551.31 214.4 6.93 8.01-10.42-1.94z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M425.25 109.5c-27.48 10.81-65.2 25.64-94.72 37.25"/>
<path d="m332.05 149.92-10.59.4 8.03-6.92z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M939.84 106.5c-9.54 1.93-19.41 3.84-28.71 5.5-108 19.26-235.39 37.16-304.07 46.42"/>
<path d="m607.62 161.87-10.37-2.13 9.44-4.8z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M968.47 111.29c-38.36 25.33-112.4 74.23-155.97 103.01"/>
<path d="m814.7 217.04-10.27 2.59 6.42-8.43z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M952.44 109.27c-76.15 26.7-239.67 84.03-319.13 111.89"/>
<path d="m634.7 224.38-10.59.01 8.27-6.62z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="m589.26 177.18 131.95 41.79"/>
<path d="m722.19 215.61 8.47 6.36-10.59.31z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M522.04 175.53C471.55 189.9 380.2 224.25 341.13 292c-7.99 13.86-7.36 21.79 0 36 7.13 13.76 19.66 24.72 32.46 33.01"/>
<path d="m375.25 357.93 6.8 8.13-10.38-2.12z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M582.63 180.21c18.33 9.97 43.28 24.49 63.5 39.79 18.55 14.04 16.89 26.22 38 36 133.07 61.65 183.33 11.96 328 36 5.23.87 10.63 1.87 16.04 2.94"/>
<path d="m1028.66 291.47 9.08 5.45-10.5 1.4z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M626.36 249.67c8.15 2.17 16.73 4.39 24.77 6.33 74.65 18.01 120.68-23.69 169 36 14.16 17.49 6.2 42.9-3.73 62.09"/>
<path d="m819.51 355.71-7.95 7 1.85-10.43z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M625.21 250.09c8.46 2.23 17.45 4.36 25.92 5.91 158.59 29.1 201.81 10.35 361 36 5.31.86 10.8 1.86 16.3 2.93"/>
<path d="m1029.07 291.49 9.09 5.45-10.5 1.41z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="412.13" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="412.13" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="m556.18 252-93.88 38.21"/>
<path fill="red" d="m465.15 292.83-10.58.53 7.94-7.02z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="931.13" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="931.13" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M625.98 249.79c8.25 2.19 16.97 4.38 25.15 6.21 88.99 19.9 112.45 18.74 202 36 6.31 1.22 12.89 2.52 19.45 3.84"/>
<path d="m872.97 292.35 9.1 5.43-10.49 1.43z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="742.13" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="742.13" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M618.59 252.5c23.83 10.55 57.28 25.37 83.94 37.19"/>
<path d="m703.65 286.35 7.72 7.25-10.56-.85z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="578.13" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="578.13" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M586.65 256.3c-.63 7.29-1.37 15.97-2.07 24.16"/>
<path d="m588.07 280.72-4.35 9.67-2.63-10.26z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M1037.64 172.89c-76.58 9.09-226.61 27.56-353.51 47.11-13.59 2.09-28.23 4.57-41.87 6.98"/>
<path d="m643.02 230.4-10.46-1.69 9.23-5.2z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M1088.13 184.41v96.17"/>
<path d="m1091.63 280.38-3.5 10-3.5-10z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M331.63 177.94c55.58 12.79 147.28 33.91 204.66 47.12"/>
<path fill="red" d="m535.38 221.26 8.96 5.66-10.53 1.16z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M281.82 184.44c-3.23 31.81-5.55 99.99 26.31 143.56 13.06 17.87 33.81 30.02 53.65 38.13"/>
<path d="m362.8 362.78 8.12 6.81-10.59-.26z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M416.13 328.3v24.16"/>
<path fill="red" d="m419.63 350.87-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M904.95 326.54c-19.28 9.92-44.51 22.9-65.5 33.71"/>
<path d="m841.07 363.35-10.5 1.47 7.29-7.69z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M877.24 319.75c-18.26 2.7-38.52 5.66-57.11 8.25-120.2 16.77-260.74 34.86-340.37 44.98"/>
<path d="m480.33 376.43-10.37-2.21 9.48-4.73z"/>
</g>
<g class="node" transform="translate(4 400)">
<ellipse cx="971.13" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="971.13" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M945.02 328.3c4.45 7.8 9.82 17.19 14.78 25.87"/>
<path d="m962.68 352.16 1.92 10.42-8-6.94z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M758.96 327.95c6.18 8.16 13.74 18.14 20.62 27.23"/>
<path d="M782.26 352.92 785.5 363l-8.82-5.86z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M697.6 322.31c-8.48 1.93-17.23 3.89-25.47 5.69-67.75 14.79-145.82 30.81-197.76 41.32"/>
<path d="m475.36 372.69-10.5-1.45 9.11-5.41z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M626.83 325.42c34.89 11.26 83.44 26.92 120.11 38.75"/>
<path d="m747.55 360.68 8.44 6.4-10.59.26z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M545.7 326.36c-25.25 10.65-59 24.88-85.72 36.15"/>
<path d="m461.34 365.73-10.57.66 7.85-7.11z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

@ -1,45 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="616" height="188pt" viewBox="0 0 462.21 188">
<g class="graph">
<path fill="#fff" d="M0 188V0h462.21v188z"/>
<g class="node" transform="translate(4 184)">
<ellipse cx="169.06" cy="-162" fill="none" stroke="#000" rx="73.77" ry="18"/>
<text x="169.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:app-nia-catalog</text>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="85.06" cy="-18" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M162.93 40.13c-14.38 24.31-40.85 69.05-57.89 97.86"/>
<path d="m108.1 139.68-8.1 6.83 2.08-10.39z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="229.06" cy="-90" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="229.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M187.58 39.95c7.26 8.46 16.17 18.86 24.18 28.21"/>
<path fill="red" d="m213.26 64.52 3.85 9.87-9.17-5.31z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M206.31 108c-20.76 10.09-49.96 24.29-74.03 35.99"/>
<path d="m133.87 147.11-10.53 1.22 7.47-7.52z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="255.06" cy="-18" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="255.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M239.35 111.95c2.8 7.53 6.17 16.61 9.33 25.11"/>
<path fill="red" d="m251.39 134.29.2 10.6-6.77-8.16z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="397.06" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="397.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M261.94 107.03c26.15 10.9 65.07 27.11 95.09 39.63"/>
<path d="m358.37 143.42 7.89 7.08-10.58-.62z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="143pt" height="44pt" viewBox="0 0 142.68 44">
<g class="graph">
<path fill="#fff" d="M0 44V0h142.68v44z"/>
<g class="node" transform="translate(4 40)">
<ellipse cx="67.34" cy="-18" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="67.34" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 459 B

@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="142pt" height="44pt" viewBox="0 0 141.63 44">
<g class="graph">
<path fill="#fff" d="M0 44V0h141.63v44z"/>
<g class="node" transform="translate(4 40)">
<ellipse cx="66.81" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="66.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 456 B

@ -1,97 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="791pt" height="188pt" viewBox="0 0 791.3 188">
<g class="graph">
<path fill="#fff" d="M0 188V0h791.3v188z"/>
<g class="node" transform="translate(4 184)">
<ellipse cx="327.95" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="327.95" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="91.95" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="91.95" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M282.66 23.68C201.49 25.96 45.21 35.62 10.95 76c-10.35 12.2-7.76 22.01 0 36 8.1 14.58 22.05 25.67 36.34 33.84"/>
<path d="m48.61 142.58 7.22 7.76-10.48-1.56z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="563.95" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="563.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M369.35 34.09c38.82 11.52 99.94 29.64 144.13 42.75"/>
<path fill="red" d="m512.83 73 8.59 6.2-10.58.51z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="411.95" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="411.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M351.02 38.88c10.72 8.94 24.32 20.27 36.3 30.26"/>
<path d="m389.49 66.39 5.44 9.09-9.92-3.71z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="80.95" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="80.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M293.9 33.78C252.69 45.47 186.56 64.2 139.75 77.47"/>
<path d="m140.92 80.78-10.57-.64 8.66-6.1z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="715.95" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="715.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M376.63 29.91C437.15 39.44 548.48 57.53 642.95 76c5.19 1.01 10.56 2.11 15.95 3.24"/>
<path d="m659.38 75.76 9.05 5.51-10.51 1.34z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="244.95" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="244.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M313.12 38.88c-10.52 8.88-23.84 20.11-35.62 30.04"/>
<path d="m279.93 71.46-9.9 3.77 5.39-9.13z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="244.95" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="244.95" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M518.77 106.31c-8.6 1.93-17.46 3.89-25.82 5.69-78.48 16.87-98.73 18.12-177 36-4.28.98-8.71 2.03-13.16 3.1"/>
<path fill="red" d="m305.26 154.1-10.55-1.01 8.88-5.79z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M365.01 106.27c-8.69 1.91-17.63 3.88-26.06 5.73-61.62 13.52-132.06 28.88-181.18 39.56"/>
<path d="m158.69 154.95-10.52-1.3 9.03-5.54z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M380.95 109.67c-25.67 10.76-60.7 25.44-88.22 36.98"/>
<path d="m294.18 149.84-10.57.64 7.87-7.1z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="411.95" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="411.95" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M415.95 112.3v24.16"/>
<path d="m419.45 136.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M87.67 112.3c1.16 7.38 2.55 16.18 3.85 24.45"/>
<path d="m94.94 135.98-1.91 10.42-5.01-9.33z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M119.33 109.67c25.13 10.73 59.38 25.35 86.37 36.87"/>
<path d="m206.8 143.2 7.83 7.15-10.57-.71z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M214.62 110.71c-22.33 10.22-51.64 23.63-75.54 34.56"/>
<path d="m140.79 148.34-10.55.97 7.64-7.34z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M248.95 112.3v24.16"/>
<path d="m252.45 136.38-3.5 10-3.5-10z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.5 KiB

@ -1,105 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="791pt" height="260pt" viewBox="0 0 791.3 260">
<g class="graph">
<path fill="#fff" d="M0 260V0h791.3v260z"/>
<g class="node" transform="translate(4 256)">
<ellipse cx="327.95" cy="-234" fill="none" stroke="#000" rx="65.73" ry="18"/>
<text x="327.95" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data-test</text>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="327.95" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="327.95" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M331.95 40.3v24.16"/>
<path fill="red" d="m335.45 62.87-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="91.95" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="91.95" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M282.66 95.68C201.49 97.96 45.21 107.62 10.95 148c-10.35 12.2-7.76 22.01 0 36 8.1 14.58 22.05 25.67 36.34 33.84"/>
<path d="m48.61 214.58 7.22 7.76-10.48-1.56z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="563.95" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="563.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M369.35 106.09c38.82 11.52 99.94 29.64 144.13 42.75"/>
<path fill="red" d="m512.83 145 8.59 6.2-10.58.51z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="411.95" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="411.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M351.02 110.88c10.72 8.94 24.32 20.27 36.3 30.26"/>
<path d="m389.49 138.39 5.44 9.09-9.92-3.71z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="80.95" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="80.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M293.9 105.78c-41.21 11.69-107.34 30.42-154.15 43.69"/>
<path d="m140.92 152.78-10.57-.64 8.66-6.1z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="715.95" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="715.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M376.63 101.91c60.52 9.53 171.85 27.62 266.32 46.09 5.19 1.01 10.56 2.11 15.95 3.24"/>
<path d="m659.38 147.76 9.05 5.51-10.51 1.34z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="244.95" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="244.95" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M313.12 110.88c-10.52 8.88-23.84 20.11-35.62 30.04"/>
<path d="m279.93 143.46-9.9 3.77 5.39-9.13z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="244.95" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="244.95" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M518.77 178.31c-8.6 1.93-17.46 3.89-25.82 5.69-78.48 16.87-98.73 18.12-177 36-4.28.98-8.71 2.03-13.16 3.1"/>
<path fill="red" d="m305.26 226.1-10.55-1.01 8.88-5.79z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M365.01 178.27c-8.69 1.91-17.63 3.88-26.06 5.73-61.62 13.52-132.06 28.88-181.18 39.56"/>
<path d="m158.69 226.95-10.52-1.3 9.03-5.54z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M380.95 181.67c-25.67 10.76-60.7 25.44-88.22 36.98"/>
<path d="m294.18 221.84-10.57.64 7.87-7.1z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="411.95" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="411.95" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M415.95 184.3v24.16"/>
<path d="m419.45 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M87.67 184.3c1.16 7.38 2.55 16.18 3.85 24.45"/>
<path d="m94.94 207.98-1.91 10.42-5.01-9.33z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M119.33 181.67c25.13 10.73 59.38 25.35 86.37 36.87"/>
<path d="m206.8 215.2 7.83 7.15-10.57-.71z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M214.62 182.71c-22.33 10.22-51.64 23.63-75.54 34.56"/>
<path d="m140.79 220.34-10.55.97 7.64-7.34z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M248.95 184.3v24.16"/>
<path d="m252.45 208.38-3.5 10-3.5-10z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.0 KiB

@ -1,17 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="188" height="116pt" viewBox="0 0 140.52 116">
<g class="graph">
<path fill="#fff" d="M0 116V0h140.52v116z"/>
<g class="node" transform="translate(4 112)">
<ellipse cx="66.26" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="66.26" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="66.26" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="66.26" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M70.26 40.3v24.16"/>
<path fill="red" d="m73.76 62.87-3.5 10-3.5-10z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 920 B

@ -1,33 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="475pt" height="116pt" viewBox="0 0 475.29 116">
<g class="graph">
<path fill="#fff" d="M0 116V0h475.29v116z"/>
<g class="node" transform="translate(4 112)">
<ellipse cx="258.47" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="258.47" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="91.47" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="91.47" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M227.47 37.67c-24.41 10.23-57.26 24.01-84.09 35.25"/>
<path fill="red" d="m146.42 75.44-10.58.64 7.87-7.09z"/>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="258.47" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="258.47" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M262.47 40.3v24.16"/>
<path d="m265.97 64.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="400.47" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="400.47" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M293.64 38.36c20.44 10.08 47.39 23.36 69.6 34.31"/>
<path d="m364.61 69.44 7.42 7.56-10.52-1.28z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="191pt" height="44pt" viewBox="0 0 190.95 44">
<g class="graph">
<path fill="#fff" d="M0 44V0h190.95v44z"/>
<g class="node" transform="translate(4 40)">
<ellipse cx="91.47" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="91.47" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 465 B

@ -1,45 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="475pt" height="188pt" viewBox="0 0 474.97 188">
<g class="graph">
<path fill="#fff" d="M0 188V0h474.97v188z"/>
<g class="node" transform="translate(4 184)">
<ellipse cx="154.81" cy="-162" fill="none" stroke="#000" rx="84.5" ry="18"/>
<text x="154.81" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-test</text>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="66.81" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="66.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M148.2 40.13c-15.13 24.41-43.04 69.44-60.88 98.23"/>
<path d="m90.51 139.87-8.25 6.65 2.3-10.34z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="222.81" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="222.81" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M175.27 39.95c8.19 8.42 18.24 18.77 27.29 28.08"/>
<path fill="red" d="m203.94 64.43 4.46 9.61-9.48-4.73z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M193.35 110.02c-23.03 10.33-53.85 24.16-78.82 35.37"/>
<path d="m116.16 148.49-10.55.9 7.69-7.29z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="242.81" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="242.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M231.76 112.3c2.13 7.46 4.68 16.38 7.06 24.73"/>
<path fill="red" d="m241.71 134.41-.61 10.58-6.12-8.66z"/>
</g>
<g class="node" transform="translate(4 184)">
<ellipse cx="409.81" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="409.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M264.66 109.17c29.59 11.07 70.88 26.53 102.52 38.37"/>
<path d="m368.38 144.25 8.13 6.79-10.59-.23z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="178pt" height="44pt" viewBox="0 0 178.11 44">
<g class="graph">
<path fill="#fff" d="M0 44V0h178.11v44z"/>
<g class="node" transform="translate(4 40)">
<ellipse cx="85.06" cy="-18" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 462 B

@ -1,109 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="857pt" height="260pt" viewBox="0 0 857.47 260">
<g class="graph">
<path fill="#fff" d="M0 260V0h857.47v260z"/>
<g class="node" transform="translate(4 256)">
<ellipse cx="644.47" cy="-234" fill="none" stroke="#000" rx="61.99" ry="18"/>
<text x="644.47" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:domain</text>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="432.47" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="432.47" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M608.6 36.17c-35.81 11.82-88.38 29.18-125.99 41.6"/>
<path fill="red" d="m485.41 80.53-10.59-.19 8.4-6.46z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="596.47" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="596.47" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M688.75 36.01C759.51 60.94 893.9 118.79 841.47 184c-21.58 26.85-111.18 40.88-174.8 47.61"/>
<path d="m667.32 235.06-10.31-2.47 9.6-4.5z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="350.47" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="350.47" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M388.98 99.32c-59.59 6.51-156.66 21.12-178.51 48.68-9.93 12.54-9.15 22.88 0 36 16.41 23.52 44.49 36.64 71.52 43.93"/>
<path d="m282.71 224.51 8.89 5.76-10.55 1.04z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="762.47" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="762.47" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M478.76 103.63c50.44 10.34 137.3 28.29 211.71 44.37 4.89 1.06 9.96 2.16 15.04 3.28"/>
<path fill="red" d="m704.66 147.51 9.01 5.58-10.52 1.25z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="91.47" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="91.47" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M394.3 103.6c-51.27 10.45-140.4 28.66-216.83 44.4-6.2 1.28-12.66 2.61-19.13 3.95"/>
<path d="m159.51 155.28-10.5-1.4 9.08-5.45z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="432.47" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="432.47" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M436.47 112.3v24.16"/>
<path d="m439.97 136.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="282.47" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="282.47" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M406.84 108.83c-22.19 10.35-52.86 24.67-77.69 36.26"/>
<path d="m330.82 148.17-10.54 1.05 7.58-7.4z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="596.47" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="596.47" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M467.71 108.33c24.28 10.37 58.36 24.91 85.91 36.67"/>
<path d="m555 141.78 7.82 7.15-10.57-.71z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M731.68 181.67c-25.43 10.73-60.1 25.35-87.42 36.87"/>
<path fill="red" d="m647.18 221.11-10.58.66 7.86-7.11z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M153.37 175.69c18.26 2.71 38.52 5.67 57.1 8.31 115.27 16.35 249.85 34.41 326.98 44.67"/>
<path d="m537.45 225.14 9.45 4.78-10.37 2.15z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M141.78 179.51c43.64 11.8 109.15 29.5 155.92 42.15"/>
<path d="m298.37 218.21 8.74 5.99-10.57.77z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="91.47" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="91.47" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M95.47 184.3v24.16"/>
<path d="m98.97 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M470.85 181.67c25.13 10.73 59.38 25.35 86.37 36.87"/>
<path d="m558.32 215.2 7.83 7.15-10.57-.71z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M417.04 183.59c-10.31 8.8-23.17 19.78-34.55 29.49"/>
<path d="m384.8 215.72-9.88 3.83 5.33-9.16z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M600.47 184.3v24.16"/>
<path d="m603.97 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M551.87 180.83c-40.74 11.59-98.94 28.15-141.58 40.29"/>
<path d="m411.28 224.47-10.58-.62 8.66-6.11z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.2 KiB

@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="122pt" height="44pt" viewBox="0 0 122.31 44">
<g class="graph">
<path fill="#fff" d="M0 44V0h122.31v44z"/>
<g class="node" transform="translate(4 40)">
<ellipse cx="57.16" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="57.16" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 455 B

@ -1,25 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="274pt" height="116pt" viewBox="0 0 273.97 116">
<g class="graph">
<path fill="#fff" d="M0 116V0h273.97v116z"/>
<g class="node" transform="translate(4 112)">
<ellipse cx="137.81" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="137.81" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="66.81" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="66.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M124.99 39.59c-8.76 8.63-19.63 19.35-29.33 28.91"/>
<path fill="red" d="m99.25 69.88-9.58 4.52 4.67-9.51z"/>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="208.81" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="208.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M158.64 39.59c8.75 8.63 19.63 19.35 29.33 28.91"/>
<path d="m190.37 65.95 4.66 9.52-9.58-4.53z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@ -1,25 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="274pt" height="116pt" viewBox="0 0 273.97 116">
<g class="graph">
<path fill="#fff" d="M0 116V0h273.97v116z"/>
<g class="node" transform="translate(4 112)">
<ellipse cx="128.16" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="128.16" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="57.16" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="57.16" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M114.97 39.95c-8.76 8.63-19.57 19.29-29.2 28.78"/>
<path fill="red" d="m89.43 70.04-9.58 4.53 4.67-9.52z"/>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="199.16" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="199.16" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M149.34 39.95c8.64 8.51 19.26 18.98 28.78 28.37"/>
<path d="m180.39 65.64 4.66 9.51-9.58-4.53z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@ -1,17 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="284" height="116pt" viewBox="0 0 213.49 116">
<g class="graph">
<path fill="#fff" d="M0 116V0h213.49v116z"/>
<g class="node" transform="translate(4 112)">
<ellipse cx="102.74" cy="-90" fill="none" stroke="#000" rx="102.74" ry="18"/>
<text x="102.74" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:screenshot-testing</text>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="102.74" cy="-18" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="102.74" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M106.74 40.3v24.16"/>
<path fill="red" d="m110.24 62.87-3.5 10-3.5-10z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 944 B

@ -1,121 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860pt" height="260pt" viewBox="0 0 859.61 260">
<g class="graph">
<path fill="#fff" d="M0 260V0h859.61v260z"/>
<g class="node" transform="translate(4 256)">
<ellipse cx="359.72" cy="-234" fill="none" stroke="#000" rx="58.77" ry="18"/>
<text x="359.72" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:testing</text>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="93.72" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="93.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M335.26 38.2c-47.85 25.54-144.45 77.11-198.56 105.99"/>
<path d="m138.6 147.15-10.47 1.62 7.17-7.8z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="359.72" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="359.72" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M308.51 28.66C191.4 42.71-64.42 85.41 21.72 184c39.25 44.92 207.29 25.48 266 36 5.22.93 10.62 1.98 16.02 3.08"/>
<path d="m304.24 219.61 9.07 5.49-10.51 1.36z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="359.72" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="359.72" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M363.72 40.3v24.16"/>
<path fill="red" d="m367.22 62.87-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="584.72" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="584.72" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M418.59 28.91C533.39 42.54 792.65 80.29 844.72 148c51.56 67.05-95.5 83.82-187.67 87.86"/>
<path d="m657.46 239.35-10.13-3.11 9.85-3.89z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="750.72" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="750.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M400.51 36.36c70.04 25.44 222.72 80.88 302.82 109.97"/>
<path d="m704.04 142.87 8.2 6.7-10.59-.12z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M324.76 105.25c-44.63 11.75-118.2 31.11-169.45 44.6"/>
<path d="m156.44 153.17-10.56-.84 8.78-5.93z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M315.28 97.72c-35.07 4.8-80.25 17.47-103.56 50.28-9.26 13.04-9.26 22.96 0 36 11.01 15.5 53.26 29.5 90.43 39.21"/>
<path d="m302.68 219.73 8.83 5.85-10.56.94z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M407.47 102.59c58.44 10.17 165.19 28.86 256.25 45.41 6.39 1.16 13.02 2.38 19.66 3.6"/>
<path d="m683.85 148.13 9.19 5.26-10.47 1.62z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="584.72" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="584.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M400.37 106.4c36.7 11.42 93.54 29.1 135.19 42.06"/>
<path fill="red" d="m534.93 144.6 8.51 6.31-10.58.37z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="284.72" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="284.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M346.33 111.24c-9.33 8.7-21.02 19.61-31.43 29.33"/>
<path d="m317.35 143.07-9.7 4.26 4.92-9.38z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="435.72" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="435.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M381.35 111.24c9.55 8.79 21.54 19.83 32.16 29.62"/>
<path d="m415.57 137.99 4.98 9.35-9.73-4.2z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M694.53 178.33c-10.27 1.91-20.84 3.86-30.81 5.67-80.46 14.62-173.17 30.92-233.98 41.53"/>
<path d="m430.71 228.91-10.45-1.73 9.25-5.16z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M718.29 182.36c-25.24 10.65-58.99 24.88-85.72 36.15"/>
<path d="m633.94 221.73-10.58.66 7.86-7.11z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M588.72 184.3v24.16"/>
<path fill="red" d="m592.22 206.87-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M306.5 183.59c9.27 8.65 20.79 19.41 31.06 28.99"/>
<path d="m339.79 209.87 4.92 9.38-9.7-4.26z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M338.6 178.64c53.46 12.47 138.16 32.24 193.94 45.25"/>
<path d="m533.22 220.46 8.95 5.68-10.54 1.13z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="183.72" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="183.72" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M265.3 183.24c-13.2 9.14-29.89 20.71-44.41 30.77"/>
<path d="m223.18 216.68-10.21 2.82 6.22-8.57z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M421.71 183.59c-9.39 8.65-21.07 19.41-31.48 28.99"/>
<path d="m392.71 215.06-9.73 4.2 4.99-9.35z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M471.69 182.02c22.2 10.42 51.97 24.41 75.93 35.67"/>
<path d="m548.9 214.42 7.56 7.42-10.54-1.08z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

@ -1,33 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="616" height="116pt" viewBox="0 0 462.5 116">
<g class="graph">
<path fill="#fff" d="M0 116V0h462.5v116z"/>
<g class="node" transform="translate(4 112)">
<ellipse cx="237.34" cy="-90" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="237.34" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="67.34" cy="-18" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="67.34" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M212.5 34.87c-26.1 10.75-64.98 26.76-95.34 39.26"/>
<path fill="red" d="m120.2 76.67-10.58.57 7.91-7.04z"/>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="237.34" cy="-18" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="237.34" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M241.34 40.3v24.16"/>
<path d="m244.84 64.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="397.34" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="397.34" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M269.58 35.35c24.66 10.79 60.82 26.61 89.02 38.95"/>
<path d="m359.84 71.02 7.76 7.22-10.57-.81z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

@ -1,133 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1064pt" height="260pt" viewBox="0 0 1063.53 260">
<g class="graph">
<path fill="#fff" d="M0 260V0h1063.53v260z"/>
<g class="node" transform="translate(4 256)">
<ellipse cx="198.06" cy="-234" fill="none" stroke="#000" rx="86.12" ry="18"/>
<text x="198.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:bookmarks</text>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="198.06" cy="-162" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="198.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M202.06 40.3v24.16"/>
<path d="m205.56 64.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="85.06" cy="-90" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M184.75 40.1c-9.93 10.12-22.43 23.37-32.69 35.9-16.5 20.14-33.45 44.33-45.61 62.4"/>
<path d="m109.52 140.11-8.46 6.38 2.63-10.26z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="611.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M267.5 34.09c80.8 13.7 216.81 36.75 292.5 49.58"/>
<path fill="red" d="m558.91 79.93 9.27 5.13-10.44 1.77z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M179.19 109.17c-15.56 9.64-36.48 22.59-54.24 33.6"/>
<path d="m127.09 145.56-10.35 2.29 6.66-8.24z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="293.06" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="293.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M222.2 109.85c12.69 9.34 29.33 21.61 43.7 32.19"/>
<path d="m267.76 139.06 5.97 8.75-10.13-3.11z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="611.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M200.38 112.2c-.94 20.29.97 53.55 20.68 71.8 46.01 42.62 225.28 51.44 325.4 52.97"/>
<path d="m546.2 233.46 9.95 3.63-10.04 3.37z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M573.69 104.09c-48.01 10.54-129.56 28.47-199.63 43.91-5.08 1.12-10.35 2.28-15.64 3.45"/>
<path d="m359.58 154.77-10.51-1.26 9.01-5.57z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="781.06" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="781.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M662.9 98.73c62.51 5.97 166.79 20.12 190.16 49.27 10.01 12.48 7.02 21.62 0 36-6.16 12.61-16.93 23.09-28.1 31.31"/>
<path d="m827.06 218.12-10.24 2.71 6.31-8.51z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="445.06" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="445.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M583.83 108.17c-25.23 10.64-61.09 25.76-89.48 37.73"/>
<path fill="red" d="m497.23 148.48-10.57.66 7.85-7.11z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="964.06" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="964.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M657.8 103.2c53.43 10.3 147.66 28.56 228.26 44.8 6.21 1.25 12.68 2.57 19.14 3.89"/>
<path d="m905.45 148.37 9.09 5.44-10.5 1.42z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="775.06" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="775.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M646.29 108.33c24.97 10.66 60.29 25.74 88.23 37.66"/>
<path d="m735.61 142.65 7.82 7.15-10.57-.71z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="611.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M615.06 112.3v24.16"/>
<path d="m618.56 136.38-3.5 10-3.5-10z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M483.86 181.67c25.43 10.73 60.1 25.35 87.41 36.87"/>
<path fill="red" d="m571.08 214.66 7.85 7.11-10.57-.66z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M914.83 177.56c-64.82 12.85-173.94 34.49-241.12 47.81"/>
<path d="m674.46 228.79-10.49-1.49 9.13-5.38z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M930.58 181.33c-28.25 10.81-67.2 25.71-97.7 37.38"/>
<path d="m834.49 221.84-10.59.3 8.08-6.84z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="964.06" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="964.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M968.06 184.3v24.16"/>
<path d="m971.56 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M744.68 181.67c-25.13 10.73-59.38 25.35-86.36 36.87"/>
<path d="m659.96 221.64-10.57.71 7.82-7.15z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M780.54 184.3c.63 7.29 1.37 15.97 2.07 24.16"/>
<path d="m786.1 208.13-2.64 10.26-4.34-9.67z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M615.06 184.3v24.16"/>
<path d="m618.56 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M652.36 182.36c25.54 10.52 59.58 24.53 86.78 35.73"/>
<path d="m740.27 214.77 7.91 7.05-10.58-.58z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

@ -1,149 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1108pt" height="332pt" viewBox="0 0 1107.53 332">
<g class="graph">
<path fill="#fff" d="M0 332V0h1107.53v332z"/>
<g class="node" transform="translate(4 328)">
<ellipse cx="258.06" cy="-306" fill="none" stroke="#000" rx="68.95" ry="18"/>
<text x="258.06" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:foryou</text>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="198.06" cy="-234" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="198.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M247.53 39.95c-7.25 8.46-16.17 18.86-24.18 28.21"/>
<path d="m226.19 70.23-9.17 5.31 3.85-9.87z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="85.06" cy="-162" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M221.28 36.89c-22.07 8.86-48.91 21.93-69.22 39.11-20.37 17.22-37.4 42.45-48.6 61.65"/>
<path d="m106.55 139.29-7.95 7 1.85-10.43z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="585.06" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="585.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M299.52 37.51c26.52 10.4 62.87 24.92 94.54 38.49 54.36 23.3 116.38 51.97 155.6 70.37"/>
<path d="m550.91 143.09 7.56 7.42-10.53-1.08z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="319.06" cy="-234" fill="none" stroke="#000" rx="61.99" ry="18"/>
<text x="319.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:domain</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M276.82 39.95c7.27 8.34 16.18 18.56 24.23 27.8"/>
<path fill="red" d="m302.51 64.09 3.93 9.84-9.21-5.24z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M179.19 109.17c-15.56 9.64-36.48 22.59-54.24 33.6"/>
<path d="m127.09 145.56-10.35 2.29 6.66-8.24z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="350.06" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="350.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M218.9 110.74c26.43 24.68 77.82 72.69 109.06 101.88"/>
<path d="m330.17 209.9 4.92 9.38-9.7-4.27z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="585.06" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="585.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M202.92 112.29c2.68 33.45 13.59 106.95 58.14 143.71 38.65 31.9 175.95 44.91 260.17 49.98"/>
<path d="m521.2 302.47 9.78 4.07-10.19 2.92z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M551.82 178.09c-38.54 11.48-99.14 29.53-143.11 42.63"/>
<path d="m409.95 224-10.58-.5 8.58-6.21z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="832.06" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="832.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M637.67 168.82c115.39 4.82 398.28 19.76 426.39 51.18 10.67 11.92 9.95 23.47 0 36-1.33 1.68-99.82 24.14-166.9 39.28"/>
<path d="m898.27 298.61-10.53-1.21 8.99-5.62z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="502.06" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="502.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M570.22 182.88c-10.59 8.94-24.03 20.27-35.87 30.26"/>
<path fill="red" d="m537.9 214.73-9.9 3.77 5.38-9.13z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="983.06" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="983.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M634.12 173.66c62.22 9.37 177.91 27.44 275.94 46.34 5.19 1 10.56 2.09 15.94 3.21"/>
<path d="m926.48 219.73 9.06 5.5-10.51 1.35z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="832.06" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="832.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M627.11 177.78c41.22 11.69 107.34 30.42 154.15 43.69"/>
<path d="m782 218.04 8.67 6.1-10.58.64z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="668.06" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="668.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M607.89 182.88c10.52 8.88 23.84 20.11 35.62 30.04"/>
<path d="m645.6 210.1 5.38 9.13-9.9-3.77z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M367.88 106.8c47.39 12.47 121.96 32.09 171.22 45.05"/>
<path fill="red" d="m538.41 148.05 8.78 5.93-10.56.84z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M309.66 111.68c-23.81 31.74-67.73 101.51-31.6 144.32 30.37 35.99 160.29 47.54 242.3 51.25"/>
<path d="m520.49 303.75 9.84 3.92-10.14 3.08z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M525.73 255.59c10.62 8.96 23.9 20.16 35.56 29.99"/>
<path fill="red" d="m562.11 281.7 5.39 9.12-9.9-3.77z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M937.02 250.46c-8.96 1.93-18.23 3.86-26.96 5.54-89.6 17.27-193.95 33.85-258.75 43.73"/>
<path d="m651.99 303.17-10.42-1.96 9.37-4.96z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M954.29 254.19a369994 369994 0 0 1-75.31 34.91"/>
<path d="m880.68 292.17-10.55 1.03 7.6-7.38z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="1008.06" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="1008.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M993.24 256.3c2.69 7.55 5.92 16.58 8.93 25.02"/>
<path d="m1005.37 279.88.07 10.59-6.66-8.24z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M791.9 251.51c-42.22 11.97-105.88 30.01-150.59 42.68"/>
<path d="m642.4 297.52-10.57-.64 8.66-6.09z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M836.06 256.3v24.16"/>
<path d="m839.56 280.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M652.39 255.59c-10.62 8.96-23.91 20.16-35.56 29.99"/>
<path d="m619.36 288.02-9.9 3.78 5.38-9.13z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M708.45 254.54c24.39 10.4 56.66 24.18 82.65 35.27"/>
<path d="m792.23 286.49 7.82 7.14-10.57-.7z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.5 KiB

@ -1,149 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1108pt" height="332pt" viewBox="0 0 1107.53 332">
<g class="graph">
<path fill="#fff" d="M0 332V0h1107.53v332z"/>
<g class="node" transform="translate(4 328)">
<ellipse cx="258.06" cy="-306" fill="none" stroke="#000" rx="75.39" ry="18"/>
<text x="258.06" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:interests</text>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="198.06" cy="-234" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="198.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M247.53 39.95c-7.25 8.46-16.17 18.86-24.18 28.21"/>
<path d="m226.19 70.23-9.17 5.31 3.85-9.87z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="85.06" cy="-162" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M220.22 37.31C198.35 46.17 172.05 59.1 152.06 76c-20.37 17.22-37.4 42.45-48.6 61.65"/>
<path d="m106.55 139.29-7.95 7 1.85-10.43z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="585.06" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="585.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M300.37 37.84c26.45 10.38 62.37 24.73 93.69 38.16 54.36 23.3 116.38 51.97 155.6 70.37"/>
<path d="m550.91 143.09 7.56 7.42-10.53-1.08z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="319.06" cy="-234" fill="none" stroke="#000" rx="61.99" ry="18"/>
<text x="319.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:domain</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M276.82 39.95c7.27 8.34 16.18 18.56 24.23 27.8"/>
<path fill="red" d="m302.51 64.09 3.93 9.84-9.21-5.24z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M179.19 109.17c-15.56 9.64-36.48 22.59-54.24 33.6"/>
<path d="m127.09 145.56-10.35 2.29 6.66-8.24z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="350.06" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="350.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M218.9 110.74c26.43 24.68 77.82 72.69 109.06 101.88"/>
<path d="m330.17 209.9 4.92 9.38-9.7-4.27z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="585.06" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="585.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M202.92 112.29c2.68 33.45 13.59 106.95 58.14 143.71 38.65 31.9 175.95 44.91 260.17 49.98"/>
<path d="m521.2 302.47 9.78 4.07-10.19 2.92z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M551.82 178.09c-38.54 11.48-99.14 29.53-143.11 42.63"/>
<path d="m409.95 224-10.58-.5 8.58-6.21z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="832.06" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="832.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M637.67 168.82c115.39 4.82 398.28 19.76 426.39 51.18 10.67 11.92 9.95 23.47 0 36-1.33 1.68-99.82 24.14-166.9 39.28"/>
<path d="m898.27 298.61-10.53-1.21 8.99-5.62z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="502.06" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="502.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M570.22 182.88c-10.59 8.94-24.03 20.27-35.87 30.26"/>
<path fill="red" d="m537.9 214.73-9.9 3.77 5.38-9.13z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="983.06" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="983.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M634.12 173.66c62.22 9.37 177.91 27.44 275.94 46.34 5.19 1 10.56 2.09 15.94 3.21"/>
<path d="m926.48 219.73 9.06 5.5-10.51 1.35z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="832.06" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="832.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M627.11 177.78c41.22 11.69 107.34 30.42 154.15 43.69"/>
<path d="m782 218.04 8.67 6.1-10.58.64z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="668.06" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="668.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M607.89 182.88c10.52 8.88 23.84 20.11 35.62 30.04"/>
<path d="m645.6 210.1 5.38 9.13-9.9-3.77z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M367.88 106.8c47.39 12.47 121.96 32.09 171.22 45.05"/>
<path fill="red" d="m538.41 148.05 8.78 5.93-10.56.84z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M309.66 111.68c-23.81 31.74-67.73 101.51-31.6 144.32 30.37 35.99 160.29 47.54 242.3 51.25"/>
<path d="m520.49 303.75 9.84 3.92-10.14 3.08z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M525.73 255.59c10.62 8.96 23.9 20.16 35.56 29.99"/>
<path fill="red" d="m562.11 281.7 5.39 9.12-9.9-3.77z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M937.02 250.46c-8.96 1.93-18.23 3.86-26.96 5.54-89.6 17.27-193.95 33.85-258.75 43.73"/>
<path d="m651.99 303.17-10.42-1.96 9.37-4.96z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M954.29 254.19a369994 369994 0 0 1-75.31 34.91"/>
<path d="m880.68 292.17-10.55 1.03 7.6-7.38z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="1008.06" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="1008.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M993.24 256.3c2.69 7.55 5.92 16.58 8.93 25.02"/>
<path d="m1005.37 279.88.07 10.59-6.66-8.24z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M791.9 251.51c-42.22 11.97-105.88 30.01-150.59 42.68"/>
<path d="m642.4 297.52-10.57-.64 8.66-6.09z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M836.06 256.3v24.16"/>
<path d="m839.56 280.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M652.39 255.59c-10.62 8.96-23.91 20.16-35.56 29.99"/>
<path d="m619.36 288.02-9.9 3.78 5.38-9.13z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M708.45 254.54c24.39 10.4 56.66 24.18 82.65 35.27"/>
<path d="m792.23 286.49 7.82 7.14-10.57-.7z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.5 KiB

@ -1,149 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1108pt" height="332pt" viewBox="0 0 1107.53 332">
<g class="graph">
<path fill="#fff" d="M0 332V0h1107.53v332z"/>
<g class="node" transform="translate(4 328)">
<ellipse cx="258.06" cy="-306" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="258.06" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:search</text>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="198.06" cy="-234" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="198.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M247.53 39.95c-7.25 8.46-16.17 18.86-24.18 28.21"/>
<path d="m226.19 70.23-9.17 5.31 3.85-9.87z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="85.06" cy="-162" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M221.55 36.78c-22.13 8.87-49.1 21.97-69.49 39.22-20.37 17.22-37.4 42.45-48.6 61.65"/>
<path d="m106.55 139.29-7.95 7 1.85-10.43z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="585.06" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="585.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M299.23 37.39C325.78 47.8 362.28 62.38 394.06 76c54.36 23.3 116.38 51.97 155.6 70.37"/>
<path d="m550.91 143.09 7.56 7.42-10.53-1.08z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="319.06" cy="-234" fill="none" stroke="#000" rx="61.99" ry="18"/>
<text x="319.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:domain</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M276.82 39.95c7.27 8.34 16.18 18.56 24.23 27.8"/>
<path fill="red" d="m302.51 64.09 3.93 9.84-9.21-5.24z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M179.19 109.17c-15.56 9.64-36.48 22.59-54.24 33.6"/>
<path d="m127.09 145.56-10.35 2.29 6.66-8.24z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="350.06" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="350.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M218.9 110.74c26.43 24.68 77.82 72.69 109.06 101.88"/>
<path d="m330.17 209.9 4.92 9.38-9.7-4.27z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="585.06" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="585.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M202.92 112.29c2.68 33.45 13.59 106.95 58.14 143.71 38.65 31.9 175.95 44.91 260.17 49.98"/>
<path d="m521.2 302.47 9.78 4.07-10.19 2.92z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M551.82 178.09c-38.54 11.48-99.14 29.53-143.11 42.63"/>
<path d="m409.95 224-10.58-.5 8.58-6.21z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="832.06" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="832.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M637.67 168.82c115.39 4.82 398.28 19.76 426.39 51.18 10.67 11.92 9.95 23.47 0 36-1.33 1.68-99.82 24.14-166.9 39.28"/>
<path d="m898.27 298.61-10.53-1.21 8.99-5.62z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="502.06" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="502.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M570.22 182.88c-10.59 8.94-24.03 20.27-35.87 30.26"/>
<path fill="red" d="m537.9 214.73-9.9 3.77 5.38-9.13z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="983.06" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="983.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M634.12 173.66c62.22 9.37 177.91 27.44 275.94 46.34 5.19 1 10.56 2.09 15.94 3.21"/>
<path d="m926.48 219.73 9.06 5.5-10.51 1.35z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="832.06" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="832.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M627.11 177.78c41.22 11.69 107.34 30.42 154.15 43.69"/>
<path d="m782 218.04 8.67 6.1-10.58.64z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="668.06" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="668.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M607.89 182.88c10.52 8.88 23.84 20.11 35.62 30.04"/>
<path d="m645.6 210.1 5.38 9.13-9.9-3.77z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M367.88 106.8c47.39 12.47 121.96 32.09 171.22 45.05"/>
<path fill="red" d="m538.41 148.05 8.78 5.93-10.56.84z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M309.66 111.68c-23.81 31.74-67.73 101.51-31.6 144.32 30.37 35.99 160.29 47.54 242.3 51.25"/>
<path d="m520.49 303.75 9.84 3.92-10.14 3.08z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M525.73 255.59c10.62 8.96 23.9 20.16 35.56 29.99"/>
<path fill="red" d="m562.11 281.7 5.39 9.12-9.9-3.77z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M937.02 250.46c-8.96 1.93-18.23 3.86-26.96 5.54-89.6 17.27-193.95 33.85-258.75 43.73"/>
<path d="m651.99 303.17-10.42-1.96 9.37-4.96z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M954.29 254.19a369994 369994 0 0 1-75.31 34.91"/>
<path d="m880.68 292.17-10.55 1.03 7.6-7.38z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="1008.06" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="1008.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M993.24 256.3c2.69 7.55 5.92 16.58 8.93 25.02"/>
<path d="m1005.37 279.88.07 10.59-6.66-8.24z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M791.9 251.51c-42.22 11.97-105.88 30.01-150.59 42.68"/>
<path d="m642.4 297.52-10.57-.64 8.66-6.09z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M836.06 256.3v24.16"/>
<path d="m839.56 280.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M652.39 255.59c-10.62 8.96-23.91 20.16-35.56 29.99"/>
<path d="m619.36 288.02-9.9 3.78 5.38-9.13z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M708.45 254.54c24.39 10.4 56.66 24.18 82.65 35.27"/>
<path d="m792.23 286.49 7.82 7.14-10.57-.7z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.5 KiB

@ -1,133 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1064pt" height="260pt" viewBox="0 0 1063.53 260">
<g class="graph">
<path fill="#fff" d="M0 260V0h1063.53v260z"/>
<g class="node" transform="translate(4 256)">
<ellipse cx="198.06" cy="-234" fill="none" stroke="#000" rx="72.71" ry="18"/>
<text x="198.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:settings</text>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="198.06" cy="-162" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="198.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M202.06 40.3v24.16"/>
<path d="m205.56 64.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="85.06" cy="-90" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M185.21 39.63c-10 10.18-22.73 23.65-33.15 36.37-16.5 20.14-33.45 44.33-45.61 62.4"/>
<path d="m109.52 140.11-8.46 6.38 2.63-10.26z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="611.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M260.79 32.95c79.81 13.53 221.46 37.54 299.28 50.73"/>
<path fill="red" d="m558.81 79.92 9.28 5.12-10.45 1.78z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M179.19 109.17c-15.56 9.64-36.48 22.59-54.24 33.6"/>
<path d="m127.09 145.56-10.35 2.29 6.66-8.24z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="293.06" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="293.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M222.2 109.85c12.69 9.34 29.33 21.61 43.7 32.19"/>
<path d="m267.76 139.06 5.97 8.75-10.13-3.11z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="611.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M200.38 112.2c-.94 20.29.97 53.55 20.68 71.8 46.01 42.62 225.28 51.44 325.4 52.97"/>
<path d="m546.2 233.46 9.95 3.63-10.04 3.37z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M573.69 104.09c-48.01 10.54-129.56 28.47-199.63 43.91-5.08 1.12-10.35 2.28-15.64 3.45"/>
<path d="m359.58 154.77-10.51-1.26 9.01-5.57z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="781.06" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="781.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M662.9 98.73c62.51 5.97 166.79 20.12 190.16 49.27 10.01 12.48 7.02 21.62 0 36-6.16 12.61-16.93 23.09-28.1 31.31"/>
<path d="m827.06 218.12-10.24 2.71 6.31-8.51z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="445.06" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="445.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M583.83 108.17c-25.23 10.64-61.09 25.76-89.48 37.73"/>
<path fill="red" d="m497.23 148.48-10.57.66 7.85-7.11z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="964.06" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="964.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M657.8 103.2c53.43 10.3 147.66 28.56 228.26 44.8 6.21 1.25 12.68 2.57 19.14 3.89"/>
<path d="m905.45 148.37 9.09 5.44-10.5 1.42z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="775.06" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="775.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M646.29 108.33c24.97 10.66 60.29 25.74 88.23 37.66"/>
<path d="m735.61 142.65 7.82 7.15-10.57-.71z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="611.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M615.06 112.3v24.16"/>
<path d="m618.56 136.38-3.5 10-3.5-10z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M483.86 181.67c25.43 10.73 60.1 25.35 87.41 36.87"/>
<path fill="red" d="m571.08 214.66 7.85 7.11-10.57-.66z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M914.83 177.56c-64.82 12.85-173.94 34.49-241.12 47.81"/>
<path d="m674.46 228.79-10.49-1.49 9.13-5.38z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M930.58 181.33c-28.25 10.81-67.2 25.71-97.7 37.38"/>
<path d="m834.49 221.84-10.59.3 8.08-6.84z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="964.06" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="964.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M968.06 184.3v24.16"/>
<path d="m971.56 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M744.68 181.67c-25.13 10.73-59.38 25.35-86.36 36.87"/>
<path d="m659.96 221.64-10.57.71 7.82-7.15z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M780.54 184.3c.63 7.29 1.37 15.97 2.07 24.16"/>
<path d="m786.1 208.13-2.64 10.26-4.34-9.67z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M615.06 184.3v24.16"/>
<path d="m618.56 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M652.36 182.36c25.54 10.52 59.58 24.53 86.78 35.73"/>
<path d="m740.27 214.77 7.91 7.05-10.58-.58z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

@ -1,133 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1064pt" height="260pt" viewBox="0 0 1063.53 260">
<g class="graph">
<path fill="#fff" d="M0 260V0h1063.53v260z"/>
<g class="node" transform="translate(4 256)">
<ellipse cx="198.06" cy="-234" fill="none" stroke="#000" rx="62.51" ry="18"/>
<text x="198.06" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:feature:topic</text>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="198.06" cy="-162" fill="none" stroke="#000" rx="40.53" ry="18"/>
<text x="198.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:ui</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M202.06 40.3v24.16"/>
<path d="m205.56 64.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="85.06" cy="-90" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="85.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M185.21 39.63c-10 10.18-22.73 23.65-33.15 36.37-16.5 20.14-33.45 44.33-45.61 62.4"/>
<path d="m109.52 140.11-8.46 6.38 2.63-10.26z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="611.06" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M254.78 31.94C333.23 45.23 480 70.11 559.86 83.64"/>
<path fill="red" d="m558.88 79.93 9.27 5.12-10.44 1.78z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M179.19 109.17c-15.56 9.64-36.48 22.59-54.24 33.6"/>
<path d="m127.09 145.56-10.35 2.29 6.66-8.24z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="293.06" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="293.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M222.2 109.85c12.69 9.34 29.33 21.61 43.7 32.19"/>
<path d="m267.76 139.06 5.97 8.75-10.13-3.11z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="611.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M200.38 112.2c-.94 20.29.97 53.55 20.68 71.8 46.01 42.62 225.28 51.44 325.4 52.97"/>
<path d="m546.2 233.46 9.95 3.63-10.04 3.37z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M573.69 104.09c-48.01 10.54-129.56 28.47-199.63 43.91-5.08 1.12-10.35 2.28-15.64 3.45"/>
<path d="m359.58 154.77-10.51-1.26 9.01-5.57z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="781.06" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="781.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M662.9 98.73c62.51 5.97 166.79 20.12 190.16 49.27 10.01 12.48 7.02 21.62 0 36-6.16 12.61-16.93 23.09-28.1 31.31"/>
<path d="m827.06 218.12-10.24 2.71 6.31-8.51z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="445.06" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="445.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M583.83 108.17c-25.23 10.64-61.09 25.76-89.48 37.73"/>
<path fill="red" d="m497.23 148.48-10.57.66 7.85-7.11z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="964.06" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="964.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M657.8 103.2c53.43 10.3 147.66 28.56 228.26 44.8 6.21 1.25 12.68 2.57 19.14 3.89"/>
<path d="m905.45 148.37 9.09 5.44-10.5 1.42z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="775.06" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="775.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M646.29 108.33c24.97 10.66 60.29 25.74 88.23 37.66"/>
<path d="m735.61 142.65 7.82 7.15-10.57-.71z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="611.06" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="611.06" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M615.06 112.3v24.16"/>
<path d="m618.56 136.38-3.5 10-3.5-10z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M483.86 181.67c25.43 10.73 60.1 25.35 87.41 36.87"/>
<path fill="red" d="m571.08 214.66 7.85 7.11-10.57-.66z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M914.83 177.56c-64.82 12.85-173.94 34.49-241.12 47.81"/>
<path d="m674.46 228.79-10.49-1.49 9.13-5.38z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M930.58 181.33c-28.25 10.81-67.2 25.71-97.7 37.38"/>
<path d="m834.49 221.84-10.59.3 8.08-6.84z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="964.06" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="964.06" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M968.06 184.3v24.16"/>
<path d="m971.56 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M744.68 181.67c-25.13 10.73-59.38 25.35-86.36 36.87"/>
<path d="m659.96 221.64-10.57.71 7.82-7.15z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M780.54 184.3c.63 7.29 1.37 15.97 2.07 24.16"/>
<path d="m786.1 208.13-2.64 10.26-4.34-9.67z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M615.06 184.3v24.16"/>
<path d="m618.56 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M652.36 182.36c25.54 10.52 59.58 24.53 86.78 35.73"/>
<path d="m740.27 214.77 7.91 7.05-10.58-.58z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

@ -1,121 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="791pt" height="332pt" viewBox="0 0 791.39 332">
<g class="graph">
<path fill="#fff" d="M0 332V0h791.39v332z"/>
<g class="node" transform="translate(4 328)">
<ellipse cx="453.04" cy="-306" fill="none" stroke="#000" rx="68.43" ry="18"/>
<text x="453.04" y="-301.8" font-family="Times,serif" font-size="14" text-anchor="middle">:sync:sync-test</text>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="412.04" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="412.04" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M448.89 40.37c-4.55 10.2-10.05 23.45-13.85 35.63-6.18 19.86-11.03 42.82-14.28 60.45"/>
<path d="m424.22 136.97-5.19 9.24-1.7-10.46z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="494.04" cy="-234" fill="none" stroke="#000" rx="53.95" ry="18"/>
<text x="494.04" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:sync:work</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M466.97 39.95c4.63 7.91 10.26 17.51 15.44 26.36"/>
<path fill="red" d="m484.65 63.2 2.03 10.4-8.07-6.86z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="92.04" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="92.04" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M367.83 169.79C265.55 176.21 34.29 193.52 11.04 220c-10.55 12.03-7.76 22.01 0 36 8.09 14.58 22.05 25.67 36.34 33.84"/>
<path d="m48.7 286.58 7.21 7.76-10.47-1.56z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="564.04" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="564.04" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M445.71 180.66c22.53 10.38 53.84 24.8 79.14 36.45"/>
<path fill="red" d="m524.92 213.29 7.62 7.36-10.55-1z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="412.04" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="412.04" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M416.04 184.3v24.16"/>
<path d="m419.54 208.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="81.04" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="81.04" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M373.69 175.43c-50.99 10.22-139.2 28.13-214.65 44.57-4.63 1.01-9.43 2.07-14.25 3.15"/>
<path d="m145.57 226.56-10.52-1.21 8.98-5.61z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="716.04" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="716.04" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M456.73 176.37c52.01 11.97 142.52 32.82 202.68 46.67"/>
<path d="m659.84 219.55 8.96 5.65-10.53 1.17z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="245.04" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="245.04" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M384.63 180.17c-24.88 10.43-60.04 25.16-88.32 37.02"/>
<path d="m297.82 220.35-10.58.64 7.87-7.09z"/>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M479.03 111.24c-10.64 9.07-24.07 20.54-35.79 30.55"/>
<path fill="red" d="m446.86 143.3-9.88 3.83 5.33-9.16z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M522.22 110.47c39.47 25.24 117.88 75.4 163.23 104.4"/>
<path d="m687.06 211.75 6.54 8.33-10.31-2.44z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="245.04" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="245.04" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M518.86 250.31c-8.6 1.93-17.46 3.89-25.82 5.69-78.48 16.87-98.73 18.12-177 36-4.28.98-8.72 2.03-13.16 3.1"/>
<path fill="red" d="m305.35 298.1-10.55-1.01 8.87-5.79z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M365.1 250.27c-8.69 1.91-17.63 3.88-26.06 5.73-61.62 13.52-132.06 28.88-181.18 39.56"/>
<path d="m158.78 298.95-10.52-1.3 9.03-5.54z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M381.03 253.67c-25.66 10.76-60.69 25.44-88.21 36.98"/>
<path d="m294.27 293.84-10.57.64 7.87-7.1z"/>
</g>
<g class="node" transform="translate(4 328)">
<ellipse cx="412.04" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="412.04" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M416.04 256.3v24.16"/>
<path d="m419.54 280.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M87.76 256.3c1.16 7.38 2.54 16.18 3.84 24.45"/>
<path d="m95.03 279.98-1.91 10.42-5.01-9.33z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M119.42 253.67c25.13 10.73 59.38 25.35 86.36 36.87"/>
<path d="m206.89 287.2 7.83 7.15-10.58-.71z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M214.71 254.71c-22.34 10.22-51.64 23.63-75.54 34.56"/>
<path d="m140.88 292.34-10.55.97 7.64-7.34z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M249.04 256.3v24.16"/>
<path d="m252.54 280.38-3.5 10-3.5-10z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.9 KiB

@ -1,109 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1084" height="260pt" viewBox="0 0 812.6 260">
<g class="graph">
<path fill="#fff" d="M0 260V0h812.6v260z"/>
<g class="node" transform="translate(4 256)">
<ellipse cx="161.34" cy="-234" fill="none" stroke="#000" rx="53.95" ry="18"/>
<text x="161.34" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:sync:work</text>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="67.34" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="67.34" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="m154.19 39.85-65.45 98.86"/>
<path d="m91.75 140.51-8.43 6.4 2.6-10.27z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="255.34" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="255.34" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M186.67 38.88c12.59 9.38 28.72 21.39 42.58 31.71"/>
<path fill="red" d="m230.06 66.83 5.93 8.78-10.11-3.16z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M225.73 107.51c-29.45 10.97-72.61 27.04-105.81 39.4"/>
<path d="m121.53 150.05-10.6.21 8.15-6.77z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="266.34" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="266.34" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M228.51 108.42c-16 8.75-34.07 21.87-43.17 39.58-7.31 14.23-7.76 22.01 0 36 8.09 14.58 22.04 25.67 36.33 33.84"/>
<path d="m222.99 214.58 7.22 7.76-10.48-1.56z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="738.34" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="738.34" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M306.37 99.66c76.16 7.87 231.05 25.23 360.97 48.34 5.15.92 10.48 1.95 15.82 3.04"/>
<path fill="red" d="m682.05 147.23 9.05 5.5-10.51 1.35z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="586.34" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="586.34" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M301.62 103.67c50.44 10.37 137.29 28.35 211.72 44.33 4.88 1.05 9.92 2.14 14.99 3.24"/>
<path d="m528.92 147.79 9.02 5.56-10.52 1.28z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="255.34" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="255.34" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M259.34 112.3v24.16"/>
<path d="m262.84 136.38-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="419.34" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="419.34" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M290.58 108.33c24.28 10.37 58.36 24.91 85.91 36.67"/>
<path d="m377.86 141.78 7.83 7.15-10.57-.71z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="419.34" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="419.34" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M693.16 178.31c-8.6 1.93-17.46 3.89-25.82 5.69-78.48 16.87-98.74 18.12-177 36-4.28.98-8.72 2.03-13.16 3.1"/>
<path fill="red" d="m479.65 226.1-10.55-1.01 8.87-5.79z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M539.4 178.27c-8.69 1.91-17.63 3.88-26.06 5.73-61.62 13.52-132.07 28.88-181.18 39.56"/>
<path d="m333.07 226.95-10.51-1.3 9.03-5.54z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M555.33 181.67c-25.67 10.76-60.69 25.44-88.21 36.98"/>
<path d="m468.57 221.84-10.58.64 7.87-7.1z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="586.34" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="586.34" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M590.34 184.3v24.16"/>
<path d="m593.84 208.38-3.5 10-3.5-10z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M262.06 184.3c1.16 7.38 2.54 16.18 3.84 24.45"/>
<path d="m269.32 207.98-1.9 10.42-5.01-9.33z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M293.72 181.67c25.13 10.73 59.38 25.35 86.36 36.87"/>
<path d="m381.19 215.2 7.82 7.15-10.57-.71z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M389.01 182.71c-22.34 10.22-51.64 23.63-75.54 34.56"/>
<path d="m315.18 220.34-10.55.97 7.64-7.34z"/>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M423.34 184.3v24.16"/>
<path d="m426.84 208.38-3.5 10-3.5-10z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.2 KiB

@ -1,3 +1,58 @@
# :feature:bookmarks module # `:feature:bookmarks`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_feature_bookmarks.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:bookmarks[bookmarks]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:bookmarks -.-> :core:data
:feature:bookmarks -.-> :core:designsystem
:feature:bookmarks -.-> :core:ui
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,63 @@
# :feature:foryou module # `:feature:foryou`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_feature_foryou.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:domain[domain]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:foryou[foryou]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:domain ---> :core:data
:core:domain ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:foryou -.-> :core:data
:feature:foryou -.-> :core:designsystem
:feature:foryou -.-> :core:domain
:feature:foryou -.-> :core:notifications
:feature:foryou -.-> :core:ui
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,62 @@
# :feature:interests module # `:feature:interests`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_feature_interests.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:domain[domain]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:interests[interests]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:domain ---> :core:data
:core:domain ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:interests -.-> :core:data
:feature:interests -.-> :core:designsystem
:feature:interests -.-> :core:domain
:feature:interests -.-> :core:ui
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,62 @@
# :feature:search module # `:feature:search`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_feature_search.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:domain[domain]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:search[search]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:domain ---> :core:data
:core:domain ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:search -.-> :core:data
:feature:search -.-> :core:designsystem
:feature:search -.-> :core:domain
:feature:search -.-> :core:ui
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,58 @@
# :feature:settings module # `:feature:settings`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_feature_settings.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:settings[settings]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:settings -.-> :core:data
:feature:settings -.-> :core:designsystem
:feature:settings -.-> :core:ui
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,58 @@
# :feature:topic module # `:feature:topic`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_feature_topic.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:designsystem[designsystem]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
:core:ui[ui]:::android-library
end
subgraph :feature
direction TB
:feature:topic[topic]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:core:ui ---> :core:analytics
:core:ui ---> :core:designsystem
:core:ui ---> :core:model
:feature:topic -.-> :core:data
:feature:topic -.-> :core:designsystem
:feature:topic -.-> :core:ui
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,131 +0,0 @@
#!/bin/bash
#
# Copyright 2024 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Script to generate dependency graphs for each of the modules. The --exclude-module parameter can
# be used to exclude modules which are not part of the root dependency graph (and which, if included
# would cause the script to fail.
#
# Usage: generateModuleGraphs.sh --exclude-module :benchmarks --exclude-module :lint --exclude-module :ui-test-hilt-manifest
# Check if the dot command is available
if ! command -v dot &> /dev/null
then
echo "The 'dot' command is not found. This is required to generate SVGs from the Graphviz files."
echo "Installation instructions:"
echo " - On macOS: You can install Graphviz using Homebrew with the command: 'brew install graphviz'"
echo " - On Ubuntu: You can install Graphviz using APT with the command: 'sudo apt install graphviz'"
echo " - Others: Visit https://graphviz.org/download/"
exit 1
fi
# Check if the svgo command is available
if ! command -v svgo &> /dev/null
then
echo "The 'svgo' command is not found. This is required to cleanup and compress SVGs."
echo "Installation instructions available at https://github.com/svg/svgo."
exit 1
fi
# Check for a version of grep which supports Perl regex.
# On MacOS the OS installed grep doesn't support Perl regex so check for the existence of the
# GNU version instead which is prefixed with 'g' to distinguish it from the OS installed version.
if grep -P "" /dev/null > /dev/null 2>&1; then
GREP_COMMAND=grep
elif command -v ggrep &> /dev/null; then
GREP_COMMAND=ggrep
else
echo "You don't have a version of 'grep' installed which supports Perl regular expressions."
echo "On MacOS you can install one using Homebrew with the command: 'brew install grep'"
exit 1
fi
# Initialize an array to store excluded modules
excluded_modules=()
# Parse command-line arguments for excluded modules
while [[ $# -gt 0 ]]; do
case "$1" in
--exclude-module)
excluded_modules+=("$2")
shift # Past argument
shift # Past value
;;
*)
echo "Unknown parameter passed: $1"
exit 1
;;
esac
done
# Get the module paths
module_paths=$(${GREP_COMMAND} -oP 'include\("\K[^"]+' settings.gradle.kts)
# Ensure the output directory exists
mkdir -p docs/images/graphs/
# Function to check and create a README.md for modules which don't have one.
check_and_create_readme() {
local module_path="$1"
local file_name="$2"
local readme_path="${module_path:1}" # Remove leading colon
readme_path=${readme_path//:/\/} # Replace colons with slashes
readme_path="${readme_path}/README.md" #Append the filename
# Check if README.md exists and create it if not
if [[ ! -f "$readme_path" ]]; then
echo "Creating README.md for ${module_path}"
# Determine the depth of the module based on the number of colons
local depth=$(awk -F: '{print NF-1}' <<< "${module_path}")
# Construct the relative image path with the correct number of "../"
local relative_image_path="../"
for ((i=1; i<$depth; i++)); do
relative_image_path+="../"
done
relative_image_path+="docs/images/graphs/${file_name}.svg"
echo "# ${module_path} module" > "$readme_path"
echo "## Dependency graph" >> "$readme_path"
echo "![Dependency graph](${relative_image_path})" >> "$readme_path"
fi
}
# Loop through each module path
echo "$module_paths" | while read -r module_path; do
# Check if the module is in the excluded list
if [[ ! " ${excluded_modules[@]} " =~ " ${module_path} " ]]; then
# Derive the filename from the module path
file_name="dep_graph${module_path//:/_}" # Replace colons with underscores
file_name="${file_name//-/_}" # Replace dashes with underscores
check_and_create_readme "$module_path" "$file_name"
# Generate the .gv file in a temporary location
# </dev/null is used to stop ./gradlew from consuming input which prematurely ends the while loop
./gradlew generateModulesGraphvizText \
-Pmodules.graph.output.gv="/tmp/${file_name}.gv" \
-Pmodules.graph.of.module="${module_path}" </dev/null
# Convert to SVG using dot, and cleanup/compress using svgo
dot -Tsvg "/tmp/${file_name}.gv" |
svgo --multipass --pretty --output="docs/images/graphs/${file_name}.svg" -
# Remove the temporary .gv file
rm "/tmp/${file_name}.gv"
fi
done

@ -47,7 +47,6 @@ kotlinxCoroutines = "1.10.1"
kotlinxDatetime = "0.6.1" kotlinxDatetime = "0.6.1"
kotlinxSerializationJson = "1.8.0" kotlinxSerializationJson = "1.8.0"
ksp = "2.1.10-1.0.31" ksp = "2.1.10-1.0.31"
moduleGraph = "2.7.1"
okhttp = "4.12.0" okhttp = "4.12.0"
protobuf = "4.29.2" protobuf = "4.29.2"
protobufPlugin = "0.9.4" protobufPlugin = "0.9.4"
@ -175,7 +174,6 @@ hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
module-graph = { id = "com.jraska.module.graph.assertion", version.ref = "moduleGraph" }
google-osslicenses = { id = "com.google.android.gms.oss-licenses-plugin", version.ref = "googleOssPlugin" } google-osslicenses = { id = "com.google.android.gms.oss-licenses-plugin", version.ref = "googleOssPlugin" }
protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" }
roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }
@ -196,3 +194,4 @@ nowinandroid-android-room = { id = "nowinandroid.android.room" }
nowinandroid-android-test = { id = "nowinandroid.android.test" } nowinandroid-android-test = { id = "nowinandroid.android.test" }
nowinandroid-hilt = { id = "nowinandroid.hilt" } nowinandroid-hilt = { id = "nowinandroid.hilt" }
nowinandroid-jvm-library = { id = "nowinandroid.jvm.library" } nowinandroid-jvm-library = { id = "nowinandroid.jvm.library" }
nowinandroid-root = { id = "nowinandroid.root" }

@ -1,3 +1,56 @@
# :sync:sync-test module # `:sync:sync-test`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_sync_sync_test.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
end
subgraph :sync
direction TB
:sync:sync-test[sync-test]:::android-library
:sync:work[work]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:sync:sync-test -.-> :core:data
:sync:sync-test -.-> :sync:work
:sync:work -.-> :core:analytics
:sync:work -.-> :core:data
:sync:work -.-> :core:notifications
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -1,3 +1,53 @@
# :sync:work module # `:sync:work`
## Dependency graph
![Dependency graph](../../docs/images/graphs/dep_graph_sync_work.svg) <!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
subgraph :core
direction TB
:core:analytics[analytics]:::android-library
:core:common[common]:::jvm
:core:data[data]:::android-library
:core:database[database]:::android-library
:core:datastore[datastore]:::android-library
:core:datastore-proto[datastore-proto]:::android-library
:core:model[model]:::jvm
:core:network[network]:::android-library
:core:notifications[notifications]:::android-library
end
subgraph :sync
direction TB
:sync:work[work]:::android-library
end
:core:data -.-> :core:analytics
:core:data ---> :core:common
:core:data ---> :core:database
:core:data ---> :core:datastore
:core:data ---> :core:network
:core:data -.-> :core:notifications
:core:database ---> :core:model
:core:datastore -.-> :core:common
:core:datastore ---> :core:datastore-proto
:core:datastore ---> :core:model
:core:network ---> :core:common
:core:network ---> :core:model
:core:notifications -.-> :core:common
:core:notifications ---> :core:model
:sync:work -.-> :core:analytics
:sync:work -.-> :core:data
:sync:work -.-> :core:notifications
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->

@ -0,0 +1,20 @@
# `:ui-test-hilt-manifest`
<!--region graph-->
```mermaid
---
config:
layout: elk
elk:
nodePlacementStrategy: SIMPLE
---
graph TB
:ui-test-hilt-manifest[ui-test-hilt-manifest]:::android-library
classDef android-application fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-library fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef android-test fill:#3BD482,stroke:#fff,stroke-width:2px,color:#fff;
classDef jvm fill:#7F52FF,stroke:#fff,stroke-width:2px,color:#fff;
classDef unknown fill:#FF0000,stroke:#fff,stroke-width:2px,color:#fff;
```
<!--endregion-->
Loading…
Cancel
Save