Skip to the content.
graph LR
    %% =========================================================================
    %% [全局样式配置]
    %% =========================================================================
    linkStyle default interpolate basis
    
    %% 定义颜色风格 (对应 Emoji 颜色)
    classDef style_core fill:#fff9c4,stroke:#fbc02d,stroke-width:2px,rx:5,ry:5,color:#333
    classDef style_green fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,rx:5,ry:5,color:#1b5e20
    classDef style_purple fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,rx:5,ry:5,color:#4a148c
    classDef style_blue fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,rx:5,ry:5,color:#0d47a1
    classDef style_boot fill:#37474f,stroke:#263238,stroke-width:2px,rx:5,ry:5,color:#fff
    %% 虚线样式的兼容写法:stroke-dasharray: 5,5
    classDef style_test fill:#e0f2f1,stroke:#009688,stroke-width:2px,rx:5,ry:5,stroke-dasharray: 5,5,color:#004d40

    %% =========================================================================
    %% [第一层:Boot 启动与入口]
    %% =========================================================================
    subgraph Layer_Boot ["🚀 Bootstrap Entry"]
        direction TB
        r-boot-spring-default["🟢 r2mo-boot-spring-default"]:::style_boot
        r-boot-spring["🟢🟡 r2mo-boot-spring"]:::style_boot
        r-boot-vertx["🟣🟡 r2mo-boot-vertx"]:::style_boot
    end

    %% =========================================================================
    %% [独立隔离层:Test 测试支持]
    %% =========================================================================
    subgraph Layer_Test ["🧪 Test Support"]
        direction TB
        r-spring-junit5["🧪 r2mo-spring-junit5"]:::style_test
        r-vertx-junit5["🧪 r2mo-vertx-junit5"]:::style_test
    end

    %% =========================================================================
    %% [第二层:Framework 框架生态]
    %% =========================================================================
    subgraph Layer_Framework ["🛠 Framework Ecosystems"]
        direction TB

        %% --- Spring 家族 ---
        subgraph Box_Spring ["🍃 Spring Family"]
            direction TB
            r-spring["🟢🟡 r2mo-spring"]:::style_green
            
            %% Security 组
            subgraph Box_Security ["🔒 Security Group"]
                r-spring-security["🟢 r2mo-spring-security"]:::style_green
                r-spring-security-oauth2client["🟢 r2mo-spring-security-oauth2client"]:::style_green
                r-spring-security-oauth2["🟢 r2mo-spring-security-oauth2"]:::style_green
                r-spring-security-jwt["🟢 r2mo-spring-security-jwt"]:::style_green
                r-spring-security-ldap["🟢 r2mo-spring-security-ldap"]:::style_green
                
                r-spring-security-email["🟢 r2mo-spring-security-email"]:::style_green
                r-spring-security-sms["🟢 r2mo-spring-security-sms"]:::style_green
                r-spring-security-weco["🟢 r2mo-spring-security-weco"]:::style_green
            end
            
            %% 功能模块
            r-spring-mybatisplus["🟢 r2mo-spring-mybatisplus"]:::style_green
            r-spring-template["🟢 r2mo-spring-template"]:::style_green
            r-spring-excel["🟢 r2mo-spring-excel"]:::style_green
            r-spring-json["🟢 r2mo-spring-json"]:::style_green
            r-spring-cache["🟢 r2mo-spring-cache"]:::style_green
            
            %% 适配器
            r-spring-email["🟢 r2mo-spring-email"]:::style_green
            r-spring-sms["🟢 r2mo-spring-sms"]:::style_green
            r-spring-weco["🟢 r2mo-spring-weco"]:::style_green
        end

        %% --- Vert.x 家族 ---
        subgraph Box_Vertx ["⚛️ Vert.x Family"]
            direction TB
            r-vertx["🟣🟡 r2mo-vertx"]:::style_purple
            
            subgraph Box_Jooq ["🔮 Jooq Group"]
                r-vertx-jooq["🟣 r2mo-vertx-jooq"]:::style_purple
                r-vertx-jooq-generate["🟣 r2mo-vertx-jooq-generate"]:::style_purple
                r-vertx-jooq-jdbc["🟣 r2mo-vertx-jooq-jdbc"]:::style_purple
                r-vertx-jooq-shared["🟣 r2mo-vertx-jooq-shared"]:::style_purple
            end
        end
    end

    %% =========================================================================
    %% [第三层:Implementation 具体实现]
    %% =========================================================================
    subgraph Layer_Impl ["🔧 Implementation & Utils"]
        direction TB
        r-dbe-jooq["🔵 r2mo-dbe-jooq"]:::style_blue
        r-dbe-mybatisplus["🔵 r2mo-dbe-mybatisplus"]:::style_blue
        r-io-local["🔵 r2mo-io-local"]:::style_blue
        r-typed-hutool["🔵 r2mo-typed-hutool"]:::style_blue
        r-typed-vertx["🔵 r2mo-typed-vertx"]:::style_blue
        
        subgraph Box_Xync ["⚡ Xync Services"]
            r-xync-email["🔵 r2mo-xync-email"]:::style_blue
            r-xync-sms["🔵 r2mo-xync-sms"]:::style_blue
            r-xync-weco["🔵 r2mo-xync-weco"]:::style_blue
        end
    end

    %% =========================================================================
    %% [第四层:Kernel 核心基石]
    %% =========================================================================
    subgraph Layer_Kernel ["👑 Core Kernel"]
        direction TB
        r-ams["🟡 r2mo-ams"]:::style_core
        r-dbe["🟡 r2mo-dbe"]:::style_core
        r-io["🟡 r2mo-io"]:::style_core
        r-jaas["🔵 r2mo-jaas"]:::style_blue
        r-jce["🔵 r2mo-jce"]:::style_blue
    end

    %% =========================================================================
    %% [连线关系]
    %% =========================================================================

    %% Kernel
    r-dbe --> r-ams
    r-io --> r-ams
    r-jaas --> r-ams
    r-jce --> r-ams

    %% Impl -> Kernel
    r-dbe-jooq --> r-dbe
    r-dbe-mybatisplus --> r-dbe
    r-io-local --> r-io
    r-typed-hutool --> r-ams
    r-typed-vertx --> r-ams
    r-xync-email --> r-ams
    r-xync-sms --> r-ams
    r-xync-weco --> r-ams

    %% Framework -> Impl/Kernel
    r-spring --> r-ams
    r-spring-mybatisplus --> r-spring
    r-spring-mybatisplus --> r-dbe-mybatisplus
    r-spring-template --> r-spring
    r-spring-excel --> r-spring
    r-spring-json --> r-spring
    
    r-spring-email --> r-spring-template
    r-spring-email --> r-xync-email
    r-spring-sms --> r-spring
    r-spring-sms --> r-xync-sms
    r-spring-weco --> r-spring-cache
    r-spring-weco --> r-xync-weco

    r-spring-security --> r-spring
    r-spring-security --> r-jaas
    r-spring-cache --> r-spring-security
    r-spring-security-email --> r-spring-security
    r-spring-security-email --> r-spring-email
    r-spring-security-sms --> r-spring-security
    r-spring-security-sms --> r-spring-sms
    r-spring-security-weco --> r-spring-security
    r-spring-security-weco --> r-spring-weco
    r-spring-security-jwt --> r-spring-security
    r-spring-security-ldap --> r-spring-security
    r-spring-security-oauth2client --> r-spring-security-oauth2
    r-spring-security-oauth2 --> r-spring-security
    r-spring-security-oauth2 --> r-spring-template

    r-vertx --> r-ams
    r-vertx-jooq-generate --> r-vertx-jooq-jdbc
    r-vertx-jooq-jdbc --> r-vertx-jooq-shared
    r-vertx-jooq-shared --> r-vertx
    r-vertx-jooq-shared --> r-dbe-jooq
    r-vertx-jooq --> r-vertx-jooq-jdbc

    %% Boot
    r-boot-vertx --> r-dbe
    r-boot-vertx --> r-io
    r-boot-vertx --> r-jce
    r-boot-vertx --> r-jaas
    r-boot-vertx --> r-vertx

    r-boot-spring --> r-dbe
    r-boot-spring --> r-io
    r-boot-spring --> r-jce
    r-boot-spring --> r-jaas
    r-boot-spring --> r-spring

    r-boot-spring-default --> r-boot-spring
    r-boot-spring-default --> r-spring-mybatisplus
    r-boot-spring-default --> r-spring-json
    r-boot-spring-default --> r-typed-hutool
    r-boot-spring-default --> r-io-local

    %% --- Test 依赖连线 (使用虚线表示测试范围依赖) ---
    r-vertx-junit5 -.-> r-boot-vertx
    r-spring-junit5 -.-> r-boot-spring
    r-spring-junit5 -.-> r-dbe-mybatisplus

    %% =========================================================================
    %% [背景色块优化]
    %% =========================================================================
    style Layer_Kernel fill:#fffde7,stroke:#fbc02d,stroke-width:2px
    style Layer_Impl fill:#e3f2fd,stroke:#2196f3,stroke-width:2px
    style Layer_Framework fill:#f5f5f5,stroke:#bdbdbd,stroke-width:1px
    style Layer_Boot fill:#cfd8dc,stroke:#607d8b,stroke-width:2px,stroke-dasharray: 5,5
    style Layer_Test fill:#e0f2f1,stroke:#009688,stroke-width:2px,stroke-dasharray: 5,5

    style Box_Spring fill:#e8f5e9,stroke:#a5d6a7,stroke-width:1px
    style Box_Security fill:#c8e6c9,stroke:none
    style Box_Vertx fill:#f3e5f5,stroke:#ce93d8,stroke-width:1px
    style Box_Jooq fill:#e1bee7,stroke:none
    style Box_Xync fill:#ffffff,stroke:#90caf9,stroke-dasharray: 5,5