1const e=JSON.parse('[{"groupId":"supply-chain-network","groupName":"ä¾åºé¾ä¸äº§ä¸é¾ç½ç»","groupName_en":"Supply Chain and Industry Networks","demos":["industry-chain-hierarchy-map","industrial-chain-card-anchored-mixed-layout","industry-chain-group-layout-editor","map-linked-warehouse-product-overview","trade-partner-relationship-explorer","google-income-statement-ribbon-infographic"],"desc_en":"### Supply Chain and Industry Networks\\n\\nThis category focuses on production, trade, and circulation relationships across multi-party networks.\\n\\n- Map suppliers, channels, warehouses, and partner dependencies.\\n- Present hierarchy, grouping, and map-linked operational context.\\n- Support analysis of chain structure and collaboration paths.","desc_zh":"### ä¾åºé¾ä¸äº§ä¸é¾ç½ç»\\n\\n该åç±»èç¦çäº§ãæµéä¸åä½ç½ç»ä¸ç夿¹å
³ç³»ã\\n\\n- å±ç¤ºä¾åºåãæ¸ éãä»å¨ä¸ä¼ä¼´ä¹é´çä¾èµã\\n- ç»åå±çº§ãåç»ä¸å°å¾èå¨è¿è¡ä¸å¡åç°ã\\n- æ¯æäº§ä¸é¾ç»æä¸ååè·¯å¾åæã"},{"groupId":"it-topology-monitoring","groupName":"ITç½ç»ä¸äºåºç¡è®¾æ½ææçæ§","groupName_en":"IT and Cloud Topology Monitoring","demos":["network-topology-monitor","infrastructure-topology-dashboard","canvas-slot-cloud-infrastructure-topology","system-architecture-diagram","system-architecture-diagram-editor","connected-subnetwork-layout-switcher"],"desc_en":"### IT and Cloud Topology Monitoring\\n\\nThis category targets infrastructure visibility and runtime topology inspection.\\n\\n- Visualize host, service, and network connectivity.\\n- Build monitoring-oriented dashboards and operation views.\\n- Compare subnetworks while keeping topology readability.","desc_zh":"### ITç½ç»ä¸äºåºç¡è®¾æ½ææçæ§\\n\\n该åç±»é¢ååºç¡è®¾æ½å¯è§æµä¸ææå·¡æ£åºæ¯ã\\n\\n- å¯è§å主æºãæå¡ä¸ç½ç»è¿æ¥å
³ç³»ã\\n- æå»ºåçæ§ä¸è¿ç»´ççæ¿è§å¾ã\\n- 对æ¯åç½ç»å¹¶ä¿æææå¯è¯»æ§ã"},{"groupId":"enterprise-investment-relations","groupName":"ä¼ä¸è¡æä¸æèèµå
³ç³»åæ","groupName_en":"Equity and Investment Relationship Analysis","demos":["corporate-equity-structure-diagram","investment-shareholder-relationship-explorer","trade-partner-relationship-explorer","corporate-group-relationship-map","corporate-group-relationship-tree","bidirectional-tree-layout"],"desc_en":"### Equity and Investment Relationship Analysis\\n\\nThis category is for ownership, control, and capital relationship exploration.\\n\\n- Render group structures, shareholder paths, and investment chains.\\n- Support traversal across upstream and downstream entities.\\n- Help analysts inspect multi-level corporate connections.","desc_zh":"### ä¼ä¸è¡æä¸æèèµå
³ç³»åæ\\n\\n该åç±»ç¨äºè¡æãæ§å¶å
³ç³»ä¸èµæ¬é¾è·¯æ¢æ¥ã\\n\\n- å±ç¤ºéå¢ç»æãè¡ä¸è·¯å¾ä¸æèµé¾æ¡ã\\n- æ¯æå¨ä¸ä¸æ¸¸å®ä½é´è¿è¡å
³ç³»è¿½è¸ªã\\n- 帮å©åæå¤å±ä¼ä¸è¿æ¥ç»æã"},{"groupId":"organization-people-relations","groupName":"ç»ç»æ¶æä¸äººåå
³ç³»ç®¡ç","groupName_en":"Organization and People Relationship Management","demos":["business-unit-organizational-chart","class-members-and-interest-group-relations","character-relationship-graph-filters","character-relationship-graph-operations","jin-yong-sect-map-browser","zodiac-compatibility-matcher"],"desc_en":"### Organization and People Relationship Management\\n\\nThis category focuses on structures and interactions among people and teams.\\n\\n- Present organization hierarchy and group affiliation.\\n- Support filtering, highlighting, and relationship exploration.\\n- Adapt to both business and social relationship views.","desc_zh":"### ç»ç»æ¶æä¸äººåå
³ç³»ç®¡ç\\n\\n该åç±»èç¦äººåãå¢éä¸ç»ç»ç»æå
³ç³»ã\\n\\n- å±ç¤ºç»ç»å±çº§ä¸ç¾¤ä½å½å±ã\\n- æ¯æçéãé«äº®ä¸å
³ç³»æ¢ç´¢ã\\n- éé
ä¸å¡ç»ç»ä¸ç¤¾äº¤å
³ç³»ä¸¤ç±»è§å¾ã"},{"groupId":"architecture-dependency-modeling","groupName":"ç³»ç»æ¶æä¸ä¾èµå
³ç³»å»ºæ¨¡","groupName_en":"System Architecture and Dependency Modeling","demos":["system-architecture-diagram","system-architecture-diagram-editor","database-foreign-key-diagram","enterprise-quadrant-fixed-layout","custom-mixed-subgraph-layouts","center-and-tree-layout-composition"],"desc_en":"### System Architecture and Dependency Modeling\\n\\nThis category centers on service, module, and dependency structure expression.\\n\\n- Build architecture views from static or editable canvase
1s.\\n- Model cross-layer dependencies and directional links.\\n- Combine layout strategies for complex structure clarity.","desc_zh":"### ç³»ç»æ¶æä¸ä¾èµå
³ç³»å»ºæ¨¡\\n\\n该åç±»èç¦æå¡ã模åä¸ä¾èµç»æè¡¨è¾¾ã\\n\\n- æå»ºéæå±ç¤ºæå¯ç¼è¾çæ¶æè§å¾ã\\n- æè¿°è·¨å±çº§ä¾èµä¸æ¹åå
³ç³»ã\\n- éè¿æ··åå¸å±æåå¤æç»æå¯è¯»æ§ã"},{"groupId":"database-data-modeling","groupName":"æ°æ®åºç»æä¸æ°æ®å»ºæ¨¡","groupName_en":"Database Structure and Data Modeling","demos":["database-foreign-key-diagram","load-tree-from-hierarchical-data","connect-lines-to-node-content-targets","element-lines","compare-element-to-node-and-element-to-element-links"],"desc_en":"### Database Structure and Data Modeling\\n\\nThis category addresses schema-level structures and relation-oriented data modeling.\\n\\n- Show table, foreign-key, and hierarchical data relationships.\\n- Link graph nodes with external UI elements as data views.\\n- Validate modeling strategies from structured source data.","desc_zh":"### æ°æ®åºç»æä¸æ°æ®å»ºæ¨¡\\n\\n该åç±»é¢å模å¼å±ç»æä¸å
³ç³»åæ°æ®å»ºæ¨¡ã\\n\\n- å±ç¤ºè¡¨ç»æãå¤é®å
³ç³»ä¸å±çº§æ°æ®ã\\n- æ¯æå¾èç¹ä¸å¤é¨å
ç´ èå¨è¡¨è¾¾æ°æ®å
³ç³»ã\\n- éªè¯ç»æåæ°æ®å°å¾æ¨¡åçè½å°æ¹å¼ã"},{"groupId":"workflow-orchestration","groupName":"ä¸å¡æµç¨ä¸å·¥ä½æµç¼æ","groupName_en":"Workflow and Process Orchestration","demos":["ai-model-workflow-graph","simulated-data-flow-path","animated-route-progress-line-slot","google-income-statement-ribbon-tutorial","google-income-statement-ribbon-infographic","metric-rollup-graph-editor"],"desc_en":"### Workflow and Process Orchestration\\n\\nThis category focuses on sequential logic, flow transitions, and process storytelling.\\n\\n- Render workflow stages and path-based progress.\\n- Express transfer, transformation, and dependency of flow nodes.\\n- Support operational interpretation through animated links.","desc_zh":"### ä¸å¡æµç¨ä¸å·¥ä½æµç¼æ\\n\\n该åç±»èç¦æµç¨èç¹ãæµè½¬è·¯å¾ä¸è¿ç¨åäºã\\n\\n- å±ç¤ºå·¥ä½æµé¶æ®µä¸è·¯å¾è¿åº¦ã\\n- 表达èç¹é´ä¼ éã转æ¢ä¸ä¾èµå
³ç³»ã\\n- éè¿å¨ç»è¿çº¿å¢å¼ºæµç¨å¯è§£éæ§ã"},{"groupId":"path-routing-analysis","groupName":"è·¯å¾åæä¸çº¿è·¯è§å","groupName_en":"Path Analysis and Routing","demos":["shortest-path-query","animated-shortest-path-highlighting","simulated-data-flow-path","line-following-html-div-overlay","io-tree-layout-orientation-and-link-routing","map-linked-warehouse-product-overview"],"desc_en":"### Path Analysis and Routing\\n\\nThis category is for route reasoning and path-oriented interaction.\\n\\n- Calculate and highlight shortest or key paths.\\n- Visualize line-following motion and route progression.\\n- Support decision scenarios where path choice matters.","desc_zh":"### è·¯å¾åæä¸çº¿è·¯è§å\\n\\n该åç±»ç¨äºè·¯å¾æ¨æ¼ä¸çº¿è·¯å¯¼å交äºã\\n\\n- 计ç®å¹¶é«äº®æçè·¯å¾æå
³é®è·¯å¾ã\\n- å±ç¤ºæ²¿çº¿è¿å¨ä¸è·¯å¾è¿åº¦ã\\n- éç¨äºå¯¹è·¯å¾éæ©ææçå³çåºæ¯ã"},{"groupId":"geospatial-graph-applications","groupName":"å°ç空é´èå¨å¾åºç¨","groupName_en":"Geospatial Graph Applications","demos":["world-map-graph-overlay-snapshots","us-map-graph-overlay-snapshots","map-linked-warehouse-product-overview","connect-list-items-to-location-nodes","jin-yong-sect-map-browser","connect-targets-across-canvas-node-and-grid"],"desc_en":"### Geospatial Graph Applications\\n\\nThis category combines map context with graph relationships.\\n\\n- Overlay relationship links on geographic backgrounds.\\n- Link location entities with list, card, or panel content.\\n- Build map-driven exploration and drill-down experiences.","desc_zh":"### å°ç空é´èå¨å¾åºç¨\\n\\n该åç±»ç»åå°çåºå¾ä¸å
³ç³»ç½ç»è¡¨è¾¾ã\\n\\n- å¨å°å¾èæ¯ä¸å å å
³ç³»è¿çº¿ã\\n- å°å°ç¹å®ä½ä¸å表ãå¡çã颿¿èå¨ã\\n- æå»ºå°å¾é©±å¨çæ¢ç´¢ä¸é»åä½éªã"},{"groupId":"multi-network-subgraph-governance","groupName":"å¤å
³ç³»ç½ä¸å徿²»ç","groupName_en":"Multi-Network and Subgraph Governance","demos":["multi-group","multiple-disconnected-subsystem-networks","disconnected-multi-group-force-relayout","connected-subnetwork-layout-switcher","connected-component-layout-and-theme-switcher","multi-group-layout-style-editor","show-single-nodes"],"desc_en":"### Multi-Network and Subgraph Governance\\n\\nThis category is for canvase
1s containing multiple disconnected or semi-connected graphs.\\n\\n- Manage groups, components, and isolated nodes together.\\n- Switch layout and styling at subgraph granularity.\\n- Keep mixed network canvases controllable and readable.","desc_zh":"### å¤å
³ç³»ç½ä¸å徿²»ç\\n\\n该åç±»éç¨äºåç»å¸å
å¤ç»å离æåè¿éå
³ç³»ç½ã\\n\\n- ç»ä¸ç®¡çåç»ãè¿éåéä¸å¤ç¹ã\\n- 以åå¾ç²åº¦åæ¢å¸å±ä¸æ ·å¼ã\\n- ä¿ææ··åç½ç»ç»å¸å¯æ§ä¸æ¸
æ°ã"},{"groupId":"graph-editor-modeling-workbench","groupName":"å¾ç¼è¾å¨ä¸å»ºæ¨¡å·¥ä½å°","groupName_en":"Graph Editor and Modeling Workbench","demos":["diagram-editor-workbench","graph-editor-with-context-menu-and-local-save","gradient-line-graph-editor","pcb-component-wiring-editor","metric-rollup-graph-editor","node-resize-controls-and-styles","edit-node-text","line-endpoint-editing","interactive-line-path-editing","graph-undo-redo-history"],"desc_en":"### Graph Editor and Modeling Workbench\\n\\nThis category concentrates on editing workflows for production-like graph tools.\\n\\n- Create and modify nodes, links, labels, and paths.\\n- Provide operation aids such as undo-redo and contextual tools.\\n- Support domain-specific modeling from general graph primitives.","desc_zh":"### å¾ç¼è¾å¨ä¸å»ºæ¨¡å·¥ä½å°\\n\\n该åç±»èç¦ç产级å¾ç¼è¾ä¸å»ºæ¨¡æµç¨ã\\n\\n- å建并ç¼è¾èç¹ãè¿çº¿ãæ ç¾ä¸è·¯å¾ã\\n- æä¾æ¤ééåä¸ä¸ä¸æå·¥å
·çç¼è¾å¢å¼ºã\\n- æ¯æä»éç¨å¾è½åå°é¢å建模çè½å°ã"},{"groupId":"dynamic-data-incremental-updates","groupName":"卿徿°æ®å è½½ä¸å¢éæ´æ°","groupName_en":"Dynamic Data Loading and Incremental Updates","demos":["append-graph-data-in-stages","lazy-load-tree-children-on-expand","lazy-load-paginated-branch-nodes","leaf-expand-button-lazy-loading","managed-tree-branch-growth-reapply","show-all-preloaded-branch-nodes"],"desc_en":"### Dynamic Data Loading and Incremental Updates\\n\\nThis category targets graphs that evolve over time instead of loading once.\\n\\n- Append data step by step or by user interaction.\\n- Use lazy loading for branch-heavy or paginated trees.\\n- Reapply external state changes back into graph rendering.","desc_zh":"### 卿徿°æ®å è½½ä¸å¢éæ´æ°\\n\\n该åç±»é¢åæç»ååèé䏿¬¡æ§å è½½ç徿°æ®ã\\n\\n- æ¯æåæ¥è¿½å ä¸äº¤äºè§¦åçæ°æ®å è½½ã\\
1n- éé
忝éãå页åçæå è½½æ ã\\n- æ¯æå¤é¨ç¶æåæ´åçå°å¾æ¸²æã"},{"groupId":"interactive-exploration-analysis","groupName":"äº¤äºæ¢ç´¢ä¸å
³ç³»åæ","groupName_en":"Interactive Exploration and Relationship Analysis","demos":["search-and-focus","shortest-path-query","node-hover-tooltip","node-line-tooltips-and-context-menu","node-line-click-highlighting","highlight-related-lines-on-node-hover","node-descendant-subtree-highlight"],"desc_en":"### Interactive Exploration and Relationship Analysis\\n\\nThis category focuses on understanding graph data through interactive operations.\\n\\n- Search, focus, and inspect graph entities quickly.\\n- Reveal local or path-based relationships with highlights.\\n- Improve explainability with contextual tooltip and menu layers.","desc_zh":"### äº¤äºæ¢ç´¢ä¸å
³ç³»åæ\\n\\n该åç±»èç¦éè¿äº¤äºå¨ä½çè§£å¾æ°æ®ã\\n\\n- å¿«éæç´¢ãå®ä½å¹¶æ£æ¥å¾å®ä½ã\\n- éè¿é«äº®æç¤ºå±é¨æè·¯å¾å
³ç³»ã\\n- åå©æç¤ºå±ä¸èåæåå
³ç³»å¯è§£éæ§ã"},{"groupId":"large-scale-layout-performance","groupName":"å¤§è§æ¨¡å¸å±ä¸æ§è½è°ä¼","groupName_en":"Large-Scale Layout and Performance Tuning","demos":["force-layout-performance-mode-stress-lab","performance-test-tree-layout","force-layout-live-parameter-tuning","force-layout-runtime-parameter-controls","force-layout-node-weight-and-line-elasticity","use-graphology-forceatlas2-layout","dagre-layout-integration-and-line-labels","smart-tree-layout"],"desc_en":"### Large-Scale Layout and Performance Tuning\\n\\nThis category addresses layout quality and runtime efficiency on complex graphs.\\n\\n- Stress-test force and tree strategies under different conditions.\\n- Tune physical and spacing parameters during runtime.\\n- Integrate external layout engines for specialized requirements.","desc_zh":"### å¤§è§æ¨¡å¸å±ä¸æ§è½è°ä¼\\n\\n该åç±»é¢å夿å¾ä¸çå¸å±è´¨éä¸è¿è¡æçã\\n\\n- å¨ä¸åæ¡ä»¶ä¸åæµ force ä¸ tree çç¥ã\\n- è¿è¡æ¶è°èåå¦ä¸é´è·åæ°ã\\n- æ¥å
¥å¤é¨å¸å±å¼ææ»¡è¶³ä¸ä¸éæ±ã"},{"groupId":"visual-theme-storytelling","groupName":"å¯è§å主é¢ä¸åäºåç°","groupName_en":"Visual Themes and Storytelling","demos":["node-styling-techniques","switchable-node-slot-templates","graph-css-theme-switcher","graph-canvas-theme-switcher","graph-hand-drawn-style-switcher","glowing-icon-node-tree","graph-theme-and-layout-preset-switcher","built-in-line-dash-and-animation"],"desc_en":"### Visual Themes and Storytelling\\n\\nThis category focuses on visual language, style systems, and narrative expression.\\n\\n- Switch node and line themes for distinct visual identities.\\n- Combine skinning, slot templates, and animation effects.\\n- Improve readability and engagement through visual storytelling.","desc_zh":"### å¯è§å主é¢ä¸åäºåç°\\n\\n该åç±»èç¦è§è§è¯è¨ã飿 ¼ç³»ç»ä¸åäºè¡¨è¾¾ã\\n\\n- 忢èç¹ä¸çº¿æ¡ä¸»é¢å½¢æå·®å¼å飿 ¼ã\\n- ç»åæ¢è¤ãææ§½æ¨¡æ¿ä¸å¨ç»ææã\\n- éè¿è§è§åäºæåå¯è¯»æ§ä¸å¸å¼åã"}]'),a=JSON.parse('[{"name":"åºç¡èªå®ä¹èç¹ä¸ç¼©ç¥å¾","name_en":"Basic Custom Node and Minimap","path":"basic-custom-node-and-minimap","desc_en":"This example is a compact starter for a relation-graph viewer with provider-scoped initialization, custom node rendering, and an embedded minimap. It loads one inline `RGJsonData` payload, renders the root as an animated circular badge, maps child nodes to icon circles with labels below, and keeps node and line clicks diagnostic rather than editable.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«åº¦ç relation graph æ¥çå¨ï¼ç¨äºå±ç¤ºä¸ä¸ªèæçå°åå
¬å¸ç½ç»ã宿åçåºæ¯ä¼å¨ä¸é´æ¾ç¤ºä¸ä¸ªæ´å¤§çæ ¹èç¹ï¼å¹¶å°å
¶æ¸²æä¸ºå¸¦å¨ç»çå形徽æ ï¼å¨å´èç¹åæ¾ç¤ºä¸ºæ´å°ç徿 åç¹ï¼æ ç¾æ¾å¨èç¹ä¸æ¹ãå `Invest` å `Executive` è¿æ ·çè¿çº¿æ ç¾ä¼ç»å¶å¨è¿æ¥è·¯å¾ä¸ï¼åæ¶å°å°å¾ä¼å§ç»æ¾ç¤ºå¨å¾è§å¾å
é¨ã"},{"name":"èç¹æ ·å¼å®ç°æ¹å¼","name_en":"Node Styling Techniques","path":"node-styling-techniques","de
1sc_en":"This example is a compact node-styling reference built on one static relation-graph scene. It compares per-node JSON style overrides, custom node slots, CSS-driven animation, fixed positioning, a mini view, and shared canvas utilities such as interaction-mode switching and image export.","desc_zh":"è¿ä¸ªç¤ºä¾åºäºä¸ä¸ªéæ relation-graph åºæ¯ï¼æä¾ç´§åçèç¹æ ·å¼åèãå®å¯¹æ¯äºæèç¹ JSON è¦çæ ·å¼ãèªå®ä¹èç¹ææ§½ãCSS 驱å¨å¨ç»ãåºå®å®ä½ãå°å°å¾ï¼ä»¥åäº¤äºæ¨¡å¼åæ¢åå¾ç导åºçå
±äº«ç»å¸å·¥å
·ã"},{"name":"èç¹ææ§½æ¨¡æ¿åæ¢","name_en":"Switchable Node Slot Templates","path":"switchable-node-slot-templates","desc_en":"This example keeps one centered relation-graph dataset and switches the visible node body across several custom slot templates at runtime. It combines `RGSlotOnNode`, graph-wide `getNodes()` plus `updateNode(...)` rewrites of `node.type`, wrapper-class theming, `RGMiniView`, and a floating utility window with canvas settings and image export. The result is a compact reference for teams that need alternate node presentations without rebuilding the graph data.","desc_zh":"è¿ä¸ªç¤ºä¾ä¿æä¸ä»½ä¸å¿å¸å±ç relation-graph æ°æ®ï¼å¨è¿è¡æ¶å¨å¤ä¸ªèªå®ä¹ææ§½æ¨¡æ¿ä¹é´åæ¢èç¹ä¸»ä½æ¾ç¤ºãå®ç»å `RGSlotOnNode`ãå
¨å¾ `getNodes()` ä¸ `updateNode(...)` 对 `node.type` çæ¹éæ¹åãå®¹å¨ class 主é¢ã`RGMiniView`ï¼ä»¥åå
å«ç»å¸è®¾ç½®åå¾ç导åºçæ¬æµ®å·¥å
·çªãéåä½ä¸ºæ ééå»ºå¾æ°æ®å³å¯åæ¢èç¹åç°æ¹æ¡çåèã"},{"name":"ææ§½èªå®ä¹èç¹å
容䏿 ·å¼","name_en":"Slot-Based Node Content and Styles","path":"slot-based-node-content-and-styles","desc_en":"This example renders a left-to-right tree whose nodes are replaced with custom React slot content instead of the default node body. One static dataset mixes a carousel card, a video card, button nodes, circular badges, and glass-style labels, while a shared floating panel adds runtime canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æä¸æ£µä»å·¦å°å³çæ å¾ï¼ç¨èªå®ä¹ React ææ§½å
å®¹æ¿æ¢é»è®¤èç¹ä¸»ä½ãåä¸éææ°æ®éæ··åäºè½®æå¡çãè§é¢å¡çãæé®èç¹ãåå½¢å¾½ç« åç»ç飿 ç¾ï¼å¹¶éè¿å
±äº«æ¬æµ®é¢æ¿æä¾è¿è¡æ¶ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"èç¹CSSå¤è§ä¸é䏿","name_en":"Node CSS Skin and Checked State","path":"node-css-skin-and-checked-state","desc_en":"This example shows a small left-to-right tree that keeps relation-graph\'s built-in rectangular text nodes and refines them with graph options plus scoped SCSS. It is mainly a reference for default-node CSS skinning, readable single-line labels, restrained checked-state styling, and the shared floating settings and image-export utilities.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºä¸æ£µå°åå·¦å°å³æ å¾ï¼ä¿ç relation-graph å
ç½®çç©å½¢ææ¬èç¹ï¼å¹¶éè¿å¾é
ç½®ä¸ä½ç¨å SCSS è¿è¡ç»åãå®ä¸»è¦ç¨äºåèé»è®¤èç¹ç CSS æ¢è¤ãå¯è¯»çåè¡æ ç¾ãå
å¶çéä¸ææ ·å¼ï¼ä»¥åå
±äº«çæ¬æµ®è®¾ç½®ä¸å¾ç导åºå·¥å
·ã"},{"name":"å导å¾å¾æ æé®èç¹","name_en":"Force Layout Icon Button Nodes","path":"force-layout-icon-button-nodes","desc_en":"This example shows a force-layout viewer where every node is rendered as the same layered icon button, with `node.data.icon` controlling both the Lucide glyph and the gradient skin. It also reuses the shared floating utility window for runtime canvas settings and image export while keeping the graph itself read-only.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºä¸ä¸ªå导å¸å±è§å¾ï¼ææèç¹é½æ¸²æä¸ºåä¸ç§åå±å¾æ æé®ï¼ç± `node.data.icon` åæ¶æ§å¶ Lucide 徿 䏿¸åç®è¤ãå®è¿å¤ç¨å
±äº«æ¬æµ®å·¥å
·çªæä¾è¿è¡æ¶ç»å¸è®¾ç½®åå¾ç导åºï¼åæ¶ä¿æå¾è°±æ¬èº«åªè¯»ã"},{"name":"åå
徿 èç¹æ æ ·å¼","name_en":"Glowing Icon Node Tree Style","path":"glowing-icon-node-tree","desc_en":"A static left-to-right relation-graph example that renders a dark neon tree with one reusable icon-and-label node slot. It also demonstrates CSS-based checked-state theming, a floating settings window for wheel and drag mode switching, and canvas image export.","desc_zh":"è¿æ¯ä¸ä¸ªéæçå·¦å°å³ relation-graph 示ä¾ï¼ä½¿ç¨å¯å¤ç¨çâ徿 +æåâèç¹ææ§½æ¸²ææ·±è²éè¹æ å¾ãå®è¿æ¼ç¤ºäºåºäº CSS çé䏿䏻é¢ãç¨äºåæ¢æ»è½®ä¸ææ½æ¨¡å¼çæ¬æµ®è®¾ç½®çªï¼ä»¥åç»å¸å¾ç导åºã"},{"name":"æ¸åè¿çº¿å¾ç¼è¾å¨","name_en":"Gradient Line Graph Editor","path":"gradient-line-graph-editor","meta":{"vip":true},"desc_en":"This example turns a small relation-graph canvas into a lightweight editor with palette-driven node creation, contextual line creation, and endpoint-colored gradient edges. It also shows how custom line slots can coexist with selection, deleti
1on, canvas settings, and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æä¸ä¸ªå°å relation-graph ç»å¸åæè½»éç¼è¾å¨ï¼æ¯æåºäºè°è²æ¿å建èç¹ãä¸ä¸æå建è¿çº¿ï¼ä»¥åæç«¯ç¹çè²çæ¸åè¾¹ãå®è¿å±ç¤ºäºèªå®ä¹è¿çº¿ææ§½å¦ä½ä¸éæ©ãå é¤ãç»å¸è®¾ç½®åå¾ç导åºå
±åã"},{"name":"å¾è°±æç»é£æ ¼åæ¢","name_en":"Graph Hand-Drawn Style Switcher","path":"graph-hand-drawn-style-switcher","desc_en":"This example keeps a small centered hierarchy fixed and switches it between plain and hand-drawn presentation modes at runtime. It combines custom node-slot wrappers, selectable border and texture variants, SVG filter styling on built-in graph surfaces, graph-wide node and line updates, a minimap, and shared canvas export controls.","desc_zh":"è¿ä¸ªç¤ºä¾ä¿æä¸æ£µå°åå±
ä¸å±çº§å¾ä¸åï¼å¹¶å¨è¿è¡æ¶å¨æ®é飿 ¼ä¸æç»é£æ ¼ä¹é´åæ¢ãå®ç»åäºèªå®ä¹èç¹ææ§½å
裹å±ãå¯éè¾¹æ¡ä¸çº¹çåä½ã对å
ç½®å¾å±è¡¨é¢ç SVG æ»¤éæ ·å¼ãå
¨å¾èç¹ä¸è¿çº¿æ´æ°ãå°å°å¾ï¼ä»¥åå
±äº«ç»å¸å¯¼åºæ§å¶ã"},{"name":"AI模å工使µå
³ç³»å¾","name_en":"AI Model Workflow Graph","path":"ai-model-workflow-graph","meta":{"vip":true},"desc_en":"This example renders a fixed-position AI workflow as custom parameter cards and connects individual input and output rows with synthesized fake lines. It also combines saved coordinates, a shared type-color system, minimap navigation, and click-based dependency highlighting to make a dense read-only workflow easier to inspect.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªåºå®ä½ç½®ç工使µé¢æ¿ï¼å®çèµ·æ¥æ´å AI çææµæ°´çº¿ï¼è䏿¯æ åçèç¹å¾ãæ¯ä¸ªèç¹é½è¢«æ¸²æä¸ºæ·±è²åè§å¡çï¼å
嫿 é¢ãå·¦å³ä¸¤å忰以åå å çé项è¡ãå
¶ä¸ä¸äºé项è¡ä¼æ¸²æä¸ºç¹æ®åºåï¼å
æ¬å¤è¡ææ¬è¾å
¥æ¡åå¾çé¢è§ã"},{"name":"线æ¡å½¢æãéç¹ä¸èªå®ä¹ç®å¤´","name_en":"Line Shapes, Junctions, and Custom Arrows","path":"line-shapes-junctions-and-custom-arrows","desc_en":"This example builds a center-layout reference graph that compares many built-in line behaviors at once, including shape, width, junction anchors, arrow visibility, text placement, and custom marker-based arrows. It keeps the graph data static, adds CSS-based label styling and a dark-theme switch, and includes helper controls for canvas interaction modes and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªä¸å¿å¸å±åèå¾ï¼ä¸æ¬¡æ§å¯¹æ¯å¤ç§å
ç½®è¿çº¿è¡ä¸ºï¼å
æ¬çº¿å½¢ã线宽ãè¿æ¥éç¹ãç®å¤´æ¾ç¤ºãæåä½ç½®ï¼ä»¥ååºäº marker çèªå®ä¹ç®å¤´ãå®ä¿æå¾æ°æ®éæï¼å å
¥åºäº CSS çæ ç¾æ ·å¼åæè²ä¸»é¢åæ¢ï¼å¹¶æä¾ç»å¸äº¤äºæ¨¡å¼ä¸å¾ç导åºçè¾
婿§ä»¶ã"},{"name":"线æ¡å½¢ç¶ãéç¹ä¸æ ç¾ä½ç½®","name_en":"Line Shape, Junctions, and Label Placement","path":"line-shape-junctions-and-label-placement","desc_en":"This example demonstrates graph-wide control of edge shape, curved-line junction anchors, and label placement on a loaded avatar relationship map. It uses `getLines()` with `updateLine()` to restyle every rendered edge in place, while a floating helper window also exposes shared canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å¨å·²å è½½ç人åå
³ç³»å¾ä¸æ¼ç¤ºå
¨å¾çº§çè¾¹å½¢ææ§å¶ãæ²çº¿è¿æ¥éç¹åæ ç¾ä½ç½®æ§å¶ãå®éè¿ `getLines()` é
å `updateLine()` åå°é设ææå·²æ¸²æè¾¹ï¼åæ¶éè¿æ¬æµ®è¾
å©çªæä¾å
±äº«ç»å¸è®¾ç½®åå¾ç导åºã"},{"name":"线æ¡ç«¯ç¹ä¸èç¹é´è·è°è","name_en":"Line Endpoint Gap Control","path":"line-endpoint-gap-control","meta":{"vip":true},"desc_en":"This example demonstrates live control of the gap between line endpoints and node borders by rewriting each rendered line\'s `junctionOffset`. It compares the effect across a centered straight-link cluster and a left-to-right curved tree while reusing a floating workbench for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾éè¿æ¹åæ¯æ¡å·²æ¸²æè¿çº¿ç `junctionOffset`ï¼æ¼ç¤ºè¿çº¿ç«¯ç¹ä¸èç¹è¾¹æ¡ä¹é´é´è·ç宿¶æ§å¶ãå®å¯¹æ¯äºå±
ä¸ç´çº¿ç°ä¸å·¦å°å³æ²çº¿æ 两ç§åºæ¯ä¸çææï¼å¹¶å¤ç¨æ¬æµ®å·¥ä½å°æä¾ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"å¤éè¿çº¿é´è·è°è","name_en":"Multi-Line Gap Control","path":"multi-line-gap-control","desc_en":"This example demonstrates live control of spacing between repeated links by binding `multiLineDistance` to React state and updating the loaded graph in place. It combines that gap control with graph-wide line-shape and label-placement toggles on a small repeated-edge tree, while reusing a floating settings panel for canvas modes and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å° `multiLineDistance` ç»å®å° React ç¶æå¹¶åå°æ´æ°å·²å è½½å¾è°±ï¼æ¼ç¤ºéå¤è¿çº¿ä¹é´é´è·ç宿¶æ§å¶ãå®å¨ä¸æ£µå¸¦éå¤è¾¹çå°æ ä¸ç»åäºé´è·æ§å¶ãå
¨å¾çº¿å½¢åæ¢ä¸æ ç¾ä½ç½®åæ¢ï¼å¹¶å¤ç¨æ¬æµ®è®¾ç½®é¢æ¿æä¾ç»å¸æ¨¡å¼åå¾ç导åºã"},{"name":"å
置线æ¡è线ä¸å¨ç»","name_en":"Built-In Line Dash and Animation","path":"built-in-line-dash-and-animation","desc_en":"This example builds a
1small left-to-right tree that compares relation-graph\'s built-in dashed and animated line presets in one static view. The line effects come directly from inline `dashType` and `animation` values, while icon-only nodes and a floating settings and export panel provide the surrounding presentation shell.","desc_zh":"æ¬ç¤ºä¾æ¸²æäºä¸ä¸ªä»å·¦å°å³çå°åæ ï¼ç¨ä½ relation-graph å
ç½®è¿çº¿ææç对æ¯é¢æ¿ã䏿¡åæ¯å±ç¤ºåç§ `dashType` é¢è®¾å ä¸ä¸æ¡æ®éè¿çº¿ï¼å¦ä¸æ¡åæ¯åå¨é»è®¤æ²çº¿æ¸²æå¨ä¸å±ç¤ºåç§ `animation` é¢è®¾ãç»é¢è¿å
å«çº¯å¾æ åå½¢èç¹ãç»¿è²æ¸åç»å¸ï¼ä»¥åä¸ä¸ªå¯ææ½ã坿å°åãå¯åæ¢ä¸ºè®¾ç½®é¢æ¿å¹¶å¯ç¨äºå¯¼åºå¾ççæ¬æµ®è¾
å©çªå£ã"},{"name":"æ¹éåæ¢çº¿æ¡ CSS æ ·å¼","name_en":"Batch Switch CSS Line Styles","path":"batch-css-line-styles","desc_en":"This example keeps a small relation-graph tree fixed and batch-switches every rendered edge among six CSS class families at runtime. It combines per-line `className` metadata, SCSS overrides on built-in line layers, icon-slot nodes, shared canvas controls, and image export without replacing the native line renderer.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå°åçä»å·¦å°å³æ å½¢æ¥çå¨ï¼ä¸»è¦ç¨éæ¯æ¯è¾ relation-graph ç线æ¡ç®è¤ãç»å¸ä¸å±ç¤ºäºå形徿 èç¹ãç»¿è²æ¸åèæ¯ï¼ä»¥å乿¡åå§å°±å¸¦æä¸å `className` å¼ãæ ç¾æ¨¡å¼åæ²çº¿è®¾ç½®çè¿çº¿ã"},{"name":"线æ¡å¨ç»é¢è®¾é","name_en":"Graph Line Animation Presets","path":"graph-line-animation-presets","desc_en":"This example renders a left-to-right relation-graph tree and turns it into a gallery of twelve animated edge styles. It batch-updates each built-in line\'s className at runtime, uses SCSS to restyle the native line surfaces, and injects SVG filter definitions for the filter-backed presets.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æä¸æ£µå·¦å°å³ relation-graph æ ï¼å¹¶å°å
¶å为 12 ç§å¨ç»è¾¹æ ·å¼çå±ç¤ºéãå®å¨è¿è¡æ¶æ¹éæ´æ°å
ç½®è¿çº¿ç `className`ï¼ä½¿ç¨ SCSS éç»åç线æ¡è¡¨é¢ï¼å¹¶æ³¨å
¥ SVG 滤éå®ä¹ä»¥æ¯æåºäºæ»¤éçé¢è®¾ã"},{"name":"éä¸çº¿æ¡ææé¢è®¾","name_en":"Checked Line Effect Presets","path":"checked-line-effects-presets","desc_en":"This example builds a small left-to-right tree that prechecks one edge and lets users switch that checked line among CSS-based style and animation presets. It keeps relation-graph\'s native line renderer, scopes the effects to `.rg-line-peel.rg-line-checked`, and wraps the demo in a floating settings and export panel.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªä»å·¦å°å³çå°åæ å½¢æ¥çå¨ï¼æ ¸å¿è¦ç¹æ¯å¯¹éä¸è¿çº¿è¿è¡å¼ºè°ãå¾ä¼å è½½ä¸æ£µåºå®ç徿 æ ï¼ç«å³å°å
¶ä¸ä¸æ¡è¾¹æ 记为éä¸ï¼å¹¶å
è®¸ç¨æ·å¨ä¸ä¸ªæµ®å¨æ§å¶çªå£ä¸ï¼å¨åç§æ ·å¼é¢è®¾ååç§å¨ç»é¢è®¾ä¹é´åæ¢è¿æ¡å·²éä¸çè¾¹ã"},{"name":"å¨ç»æçè·¯å¾é«äº®","name_en":"Animated Shortest Path Highlighting","path":"animated-shortest-path-highlighting","desc_en":"This example shows how to compute a shortest path from the live relation-graph instance and highlight only that route with animated built-in line styles. It combines two-click endpoint selection, autoplay path playback, runtime layout switching, custom SVG markers, and dimmed context rendering in one read-only viewer.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªåªè¯»çå
³ç³»æ¥çå¨ï¼ç¨äºå¨ä¸å¼ ç´§åå¾ä¸æç»å¼ºè°ä¸¤ä¸ªèç¹ä¹é´çæçè·¯å¾ãç»å¸ä½¿ç¨åºäºå¾æ çåå½¢èç¹ã带èªå®ä¹ç®å¤´æ è®°çæ²çº¿è¿çº¿ï¼ä»¥åæè²éè¹è§è§ä¸»é¢ãç¨æ·å¯ä»¥ç¹å»ä¸¤ä¸ªèç¹æå¨è®¡ç®ä¸æ¡è·¯å¾ï¼è®©ç¤ºä¾èªå¨åæ¾éæºè·¯å¾ï¼å¨ `tree` å `center` å¸å±ä¹é´åæ¢ï¼å¹¶ä¿®æ¹å½åæ´»å¨è·¯å¾ä½¿ç¨çè§è§ç®è¤ã"},{"name":"èªå®ä¹çº¿æ¡ç®å¤´é¢è®¾","name_en":"Custom Line Arrow Presets","path":"custom-line-arrow-presets","desc_en":"This example shows how to define four custom SVG arrowhead markers and apply them through relation-graph\'s `defaultLineMarker` option. A floating control window lets users switch arrow presets and compare the same hierarchy in tree and center layouts, while shared controls add canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å®ä¹ 4 ç»èªå®ä¹ SVG ç®å¤´ markerï¼å¹¶éè¿ relation-graph ç `defaultLineMarker` é项åºç¨ãæ¬æµ®æ§å¶çªå¯åæ¢ç®å¤´é¢è®¾ï¼å¹¶å¨æ å¸å±ä¸ä¸å¿å¸å±é´å¯¹æ¯åä¸å±çº§æ°æ®ï¼åæ¶æä¾å
±äº«çç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"å¾è°± CSS 主é¢åæ¢","name_en":"Graph CSS Theme Switcher","path":"graph-css-theme-switcher","meta":{"vip":true},"desc_en":"This example keeps one left-to-right relation-graph tree and switches it among eight CSS skins at runtime. It combines wrapper-class theming, icon-slot nodes, a themed `RGMiniView`, and a `getNodes()` plus `updateNode(...)` pass so the minimap stays synchronized with the active accent. A shared floating panel also exposes wheel mode, drag mode, and image export utilities.","desc_zh":"è¿ä¸ªç¤ºä¾ä¿æä¸æ£µå·¦å°å³ relation-graph æ ä¸åï¼å¹¶å¨è¿è¡æ¶åæ¢ 8 å¥ CSS ç®è¤ãå®ç»å容å¨
1class 主é¢ã徿 ææ§½èç¹ã另䏻颿 ·å¼ç `RGMiniView`ï¼ä»¥å `getNodes()` + `updateNode(...)` æ¹éæ´æ°ï¼ç¡®ä¿å°å°å¾ä¸å½å强è°è²åæ¥ãå
±äº«æ¬æµ®é¢æ¿è¿æä¾æ»è½®æ¨¡å¼ãææ½æ¨¡å¼åå¾ç导åºå·¥å
·ã"},{"name":"å¾è°±ä¸»é¢ä¸å¸å±é¢è®¾åæ¢","name_en":"Graph Theme and Layout Preset Switcher","path":"graph-theme-and-layout-preset-switcher","meta":{"vip":true,"entVip":true},"desc_en":"This example keeps one relation-graph dataset mounted while users switch both theme presets and layout presets from an on-canvas toolbar. It shows how to batch-update node and line classes, apply richer layout preset objects, and keep export and canvas controls in the same viewer shell.","desc_zh":"è¿ä¸ªç¤ºä¾å¨åä¸ä»½ relation-graph æ°æ®æè½½ç¶æä¸ï¼è®©ç¨æ·éè¿ç»å¸å
å·¥å
·æ 忶忢䏻é¢é¢è®¾åå¸å±é¢è®¾ãå®å±ç¤ºäºå¦ä½æ¹éæ´æ°èç¹ä¸è¿çº¿ classãåºç¨æ´ä¸°å¯çå¸å±é¢è®¾å¯¹è±¡ï¼å¹¶å°å¯¼åºä¸ç»å¸æ§å¶ä¿çå¨å䏿¥çå¨å£³å±ä¸ã"},{"name":"å
ç½®çº¿æ¡æ¸²æé项","name_en":"Built-in Line Rendering Options","path":"built-in-line-rendering-options","desc_en":"This example builds a compact center-layout graph that compares several built-in line behaviors, including junction anchors, curve styles, arrow direction, and path-following labels. It loads a small inline RGJsonData dataset, applies fixed circular node defaults, and keeps interaction limited to inspection clicks on nodes and lines.","desc_zh":"æ¬ç¤ºä¾æå»ºäºä¸ä¸ªå°åãå
¨é«ç relation-graph ç»å¸ï¼ç¨ä½è¿çº¿æ¸²æé项çå¯è§ååèãå¾ä½¿ç¨å±
ä¸å¸å±ãåå½¢èç¹åæé¢è²åºåçè¿æ¥ï¼è®©æ¥çè
å¯ä»¥å¨ä¸ä¸ªé¢è®¾åºæ¯ä¸æ¯è¾æ£äº¤èµ°çº¿ãæ²çº¿åæ¯ãç®å¤´æ¹ååæ ç¾ä½ç½®ã"},{"name":"çº¿æ¡ææ§½èªå®ä¹æ¸²æ","name_en":"Custom Line Slot Rendering","path":"custom-line-slot-rendering","desc_en":"This example fully replaces relation-graph\'s default edge renderer with a custom line slot that adds a moving dot, endpoint labels, and a separate Detail action. It keeps the standard line click pipeline intact, uses relation-graph\'s generated path and text helpers, and includes shared viewer utilities for interaction settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾ç¨èªå®ä¹è¿çº¿ææ§½å®å
¨æ¿æ¢ relation-graph é»è®¤è¾¹æ¸²æï¼å å
¥ç§»å¨å°åç¹ãç«¯ç¹æ ç¾åç¬ç«ç Detail æä½ãå®ä¿çæ åè¿çº¿ç¹å»æµç¨ï¼ä½¿ç¨ relation-graph çæçè·¯å¾ä¸ææ¬è¾
å©ä¿¡æ¯ï¼å¹¶å
å«å
±äº«æ¥çå¨äº¤äºè®¾ç½®ä¸å¾ç导åºå·¥å
·ã"},{"name":"带详æ
龿¥çå¨ç»çº¿æ¡ææ§½","name_en":"Animated Line Slot with Detail Link","path":"animated-line-slot-detail-link","desc_en":"This example replaces relation-graph\'s default line renderer with a custom slot that draws animated pipe-style edges, a path-following dot, and a clickable Detail action. It keeps the normal line click pipeline, uses a left-to-right tree layout, and reuses a shared panel for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å¨æ·±è²ç»å¸ä¸æå»ºäºä¸æ£µä»å·¦åå³å±å¼çè·¯ç±æ ï¼ç¶åç¨èªå®ä¹è¿çº¿ææ§½æ¿æ¢é»è®¤ç边渲æå¨ãæç»æææ¯ä¸ç»å ç²çãå
·æå¨ç»ææç管éå¼è¿çº¿ï¼ä¸ä¸ªæ²¿çæ¯æ¡è®¡ç®è·¯å¾ç§»å¨çæ´çº¢è²åç¹ï¼ä»¥åä¸ä¸ªå¯éå ç»¿è² `Detail` æä½çç½è²è¿çº¿æ ç¾ã"},{"name":"路线è¿åº¦å¨ç»çº¿æ¡ææ§½","name_en":"Animated Route Progress Line Slot","path":"animated-route-progress-line-slot","desc_en":"This example replaces relation-graph\'s default line rendering with a custom route-progress slot driven by per-line metadata such as icon, speed, weight, and completion percent. It also reveals richer metrics when a line is checked, adds a coordinated circular node slot, and reuses shared viewer utilities for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªä»å·¦å°å³å±å¼çè·¯å¾æ ï¼çèµ·æ¥æ´åè¿è¾ææµç¨çæ§çæ¿ï¼è䏿¯é»è®¤å¾è°±ãæ¯æ¡çº¿é½ä¼åæä¸æ¡å ç²çå¨æè·¯å¾ï¼è·¯å¾ä¸æä¸ä¸ªç§»å¨çå°åç¹ãä¸ä¸ªæ²¿è®¡ç®è·¯å¾å®ä½ç交éå·¥å
· emojiï¼ä»¥åä¸å¼ å¨è¿çº¿è¢« checked æ¶å±å¼çæ ç¾å¡çã"},{"name":"æ¨¡ææ°æ®çæµè½¬è·¯å¾","name_en":"Simulated data flow path","path":"simulated-data-flow-path","desc_en":"This example builds a prepared technical network graph where users choose two nodes, compute the shortest connection path, and replay a simulated data flow step by step along that route. It combines live-graph shortest-path lookup, custom line-slot animation, runtime layout switching, and shared canvas and export controls.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªé¢ç½®ææ¯ç½ç»å¾ï¼ç¨æ·å¯éæ©ä¸¤ä¸ªèç¹ãè®¡ç®æçè¿æ¥è·¯å¾ï¼å¹¶æ²¿è¯¥è·¯å¾éæ¥åæ¾æ¨¡ææ°æ®æµãå®ç»åäºå®æ¶å¾æçè·¯å¾æ¥è¯¢ãèªå®ä¹è¿çº¿ææ§½å¨ç»ãè¿è¡æ¶å¸å±åæ¢ï¼ä»¥åå
±äº«ç»å¸ä¸å¯¼åºæ§å¶ã"},{"name":"沿线æ¡è¿å¨ç HTML DIV è¦çå±","name_en":"Line-Following HTML DIV Overlay","path":"line-following-html-div-overlay","meta":{"vip":true},"desc_en":"This example shows how to convert a selected relation-graph edge into CSS motion-path data and attach real HTML overlays above the canvas. It highlights the chosen line, refreshes the path after clicks and node drags, and lets users switch between animated travel and fixed positions along the line.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½æéä¸ç relation-graph è¿çº¿è½¬æ¢ä¸º CSS motion-path æ°æ®ï¼å¹¶å¨ç»å¸ä¸æ¹æè½½çå® HTML è¦çå±ãå®ä¼é«äº®æéè¿çº¿ï¼å¨ç¹å»åææ½èç¹åå·æ°è·¯å¾ï¼å¹¶å
è®¸ç¨æ·å¨çº¿è·¯ä¸åæ¢â沿线è¿å¨âä¸âåºå®ä½ç½®â两ç§è¡¨ç°ã"},{"name":"èªå®ä¹è¿çº¿æåä½ç½®","name_en":"Customize Line Text Position","path":"line-text-position","videoImage":true,"meta":{"vip":true}
1,"desc_en":"This example builds a small tree graph whose edge labels can be compared across detached-label and text-on-path modes. A floating control window drives x and y label offsets, tree-direction relayout, and default line-shape changes, making it a compact reference for line-label readability tuning.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸æ£µå°åæ å¾ï¼å¯å¯¹æ¯å离æ ç¾ä¸è·¯å¾è´´åæå两ç§è¾¹æ ç¾æ¨¡å¼ãæ¬æµ®æ§å¶çªå¯è°èæ ç¾ x/y åç§»ãæ æ¹åéæä»¥åé»è®¤çº¿å½¢åæ¢ï¼æ¯ä¸ä¸ªç¨äºè¿çº¿æåå¯è¯»æ§è°ä¼çç´§ååèã"},{"name":"æ²çº¿è¿çº¿è·¯å¾æåæ§å¶","name_en":"Curved Line Path Text Controls","path":"curved-line-path-text-controls","meta":{"vip":true},"desc_en":"This example renders a fixed left-to-right tree whose long relationship labels follow curved edge paths by default. A floating control window changes curve family, junction anchors, path placement, text alignment, offsets, and maximum visible text length, while shared scaffolding adds canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æä¸æ£µåºå®çå·¦å°å³æ å¾ï¼é»è®¤è®©è¾é¿å
³ç³»æ ç¾æ²¿æ²çº¿è¾¹è·¯å¾æ¾ç¤ºãæ¬æµ®æ§å¶çªå¯è°æ´æ²çº¿æãè¿æ¥éç¹ãè·¯å¾è´´åä½ç½®ãææ¬å¯¹é½ãåç§»åæå¤§å¯è§ææ¬é¿
1度ï¼å¹¶æä¾å
±äº«ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"æ£äº¤æçº¿æ ç¾æ§å¶","name_en":"Orthogonal Line Label Controls","path":"orthogonal-line-label-controls","meta":{"vip":true},"desc_en":"A compact relation-graph demo for tuning detached text labels on orthogonal tree links. It rotates the same tree through four directions, batch-updates live lines for placement and anchoring, and exposes offset, bend-distance, and corner-radius controls to compare readability.","desc_zh":"è¿æ¯ä¸ä¸ªç¨äºè°ä¼æ£äº¤æ è¿çº¿å离æ ç¾çç´§å relation-graph 示ä¾ãå®å°å䏿£µæ æè½¬ä¸ºå个æ¹åï¼æ¹éæ´æ°å¨çº¿è¿çº¿çæ ç¾ä½ç½®ä¸éç¹ï¼å¹¶æä¾åç§»ãæç¹è·ç¦»ååè§å徿§å¶ä»¥å¯¹æ¯å¯è¯»æ§ã"},{"name":"å¯åæ¢å¾æ¡çè¶å¸¦çº¿æ¡","name_en":"Pattern-Switchable Tape Lines","path":"pattern-switchable-tape-lines","meta":{"vip":true},"desc_en":"This example replaces standard relation-graph edges with slot-rendered ribbon paths on a fixed tree layout. It combines a root CSS fill variable, reusable SVG pattern defs, click-preserving custom line rendering, shared canvas controls, and screenshot export so the same ribbons can switch between solid and animated fills at runtime.","desc_zh":"è¿ä¸ªç¤ºä¾å¨åºå®æ å¸å±ä¸ç¨ææ§½æ¸²æçä¸å¸¦è·¯å¾æ¿æ¢æ å relation-graph è¿çº¿ãå®ç»åæ ¹çº§ CSS å¡«å
åéãå¯å¤ç¨ SVG pattern å®ä¹ãä¿çç¹å»è¡ä¸ºçèªå®ä¹è¿çº¿æ¸²æãå
±äº«ç»å¸æ§å¶åæªå¾å¯¼åºï¼ä½¿åä¸ç»ä¸å¸¦å¯å¨è¿è¡æ¶åæ¢çº¯è²ä¸å¨ç»å¡«å
ã"},{"name":"徿¡è¶å¸¦çº¿æ¡æ¸²æ","name_en":"Patterned Tape Line Rendering","path":"patterned-tape-line-rendering","meta":{"vip":true},"desc_en":"This example replaces default relation-graph edges with filled tape-like SVG ribbons and lets the user switch those ribbons between translucent color and multiple static or animated pattern fills. It also updates existing nodes between circle and rectangle shapes at runtime, keeps line clicks wired into relation-graph, and includes shared canvas settings plus image export.","desc_zh":"è¿ä¸ªç¤ºä¾ç¨å¡«å
å¼è¶å¸¦é£ SVG ä¸å¸¦æ¿æ¢é»è®¤ relation-graph è¿çº¿ï¼å¹¶å
è®¸ç¨æ·å¨åéæçº¯è²åå¤ç§éæ/å¨ç»å¾æ¡å¡«å
ä¹é´åæ¢ãå®è¿å¯å¨è¿è¡æ¶æç°æèç¹å¨åå½¢åç©å½¢ä¹é´åæ¢ï¼ä¿æè¿çº¿ç¹å»ä»æ¥å
¥ relation-graphï¼å¹¶æä¾å
±äº«ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name_en":"Google Income Statement Ribbon Graph Tutorial","name":"è°·ææ¶å
¥ç»æä¸å¸¦å¾æç¨","path":"google-income-statement-ribbon-tutorial","desc_en":"This example is a six-stage tutorial that turns a nested Google income statement into a left-to-right relation-graph infographic. It starts with a plain tree, then adds custom node slots, amount-scaled node heights, ribbon-style line slots, and final brand annotations while keeping the graph interactive.","desc_zh":"è¿ä¸ªç¤ºä¾æ¯ä¸ä¸ªå
é¶æ®µæç¨ï¼æåµå¥ç Google æ¶å
¥ç»æè½¬æå·¦å°å³ relation-graph ä¿¡æ¯å¾ãå®ä»æ®éæ å¾å¼å§ï¼éæ¥å å
¥èªå®ä¹èç¹ææ§½ãæéé¢ç¼©æ¾çèç¹é«åº¦ãä¸å¸¦é£è¿çº¿ææ§½ä»¥åæç»åçæ æ³¨ï¼åæ¶ä¿æå¾è°±å¯äº¤äºã"},{"name":"æçº¿æ ç¾æ ·å¼ä¸ä½ç½®è°è","name_en":"Orthogonal Line Label Styling","path":"orthogonal-line-label-styling","meta":{"vip":true},"desc_en":"A compact tree viewer that uses simple orthogonal lines with detached boxed labels on a gradient canvas. Users can rotate the tree, tune global line-label offsets, and reuse the same pattern for readable value badges or annotations on connectors.","desc_zh":"è¿æ¯ä¸ä¸ªç´§åæ 徿¥çå¨ï¼ä½¿ç¨ç®æ´æ£äº¤è¿çº¿ä¸å离ççç¶æ ç¾ï¼èæ¯ä¸ºæ¸åç»å¸ãç¨æ·å¯æè½¬æ æ¹åãè°æ´å
¨å±çº¿æ ç¾åç§»ï¼å¹¶å¤ç¨å䏿¨¡å¼å®ç°è¿æ¥å¨ä¸çæ°å¼å¾½ç« ææ³¨éã"},{"name":"æ å¸å±æ¹å忢","name_en":"Tree Layout Orientation Switcher","path":"tree-layout-orientation-switcher","desc_en":"This example builds a static hierarchy viewer that switches one loaded tree between left-to-right and top-down presets at runtime. Its main lesson is the relayout flow that reapplies node dimensions, line shape defaults, and vertical-text styling so the same dataset stays readable in both orientations.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªéæå±çº§æ¥çå¨ï¼å¯å¨è¿è¡æ¶å°å䏿£µå·²å è½½æ å¨å·¦å°å³ä¸ä¸å°ä¸é¢è®¾é´åæ¢ãæ ¸å¿è¦ç¹æ¯éå¸å±æµç¨ï¼éæ°åºç¨èç¹å°ºå¯¸ãé»è®¤çº¿å½¢åç«ææåæ ·å¼ï¼ä½¿å䏿°æ®å¨ä¸¤ç§æ¹åä¸é½ä¿æå¯è¯»ã"},{"name":"æ å¸å±å±çº§è·ç¦»ä¸èç¹è·ç¦»è®¾ç½®","name_en":"Tree Layout Level and Node Spacing","path":"tree-layout-level-and-node-spacing","videoImage":true,"desc_en":"This example demonstrates two runtime spacing strategies for the relation-graph tree layout on the same fixed hierarchy. Users can compare slider-
1driven `treeNodeGapH` and `treeNodeGapV` updates with a comma-separated `levelGaps` input, while each change reruns layout, recenters the graph, and fits the viewport.","desc_zh":"è¿ä¸ªç¤ºä¾å¨åä¸åºå®å±çº§æ°æ®ä¸æ¼ç¤º relation-graph æ å¸å±ç两ç§è¿è¡æ¶é´è·çç¥ãç¨æ·å¯å¯¹æ¯æ»å驱å¨ç `treeNodeGapH` ä¸ `treeNodeGapV` æ´æ°ï¼ä»¥åéå·åéç `levelGaps` è¾å
¥ï¼æ¯æ¬¡åæ´é½ä¼éæ°å¸å±ãå±
ä¸å¾è°±å¹¶éé
è§å£ã"},{"name":"ååæ çº¿æ¡æ ç¾è°è","name_en":"Bidirectional Tree Line Label Tuning","path":"bidirectional-tree-line-label-tuning","desc_en":"This example builds a root-centered bidirectional tree with orthogonal links and runtime switching between horizontal and vertical tree presets. Its main focus is branch-specific line-label tuning, using post-layout branch detection to recolor each side and apply different label geometry controls to parent-side and child-side links.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªä»¥æ ¹èç¹ä¸ºä¸å¿çååæ ï¼å
¶ä¸ä¸ä¾§åæ¯æåæ ¹èç¹çé¿ï¼å¦ä¸ä¾§åæ¯åèç¦»æ ¹èç¹çé¿ãå¾å½¢å¯ä»¥å¨æ°´å¹³ååç´æ å½¢é¢è®¾ä¹é´åæ¢ï¼åæ¶ä¿æç¸åçæ°æ®éåç¸åçåä¾§ç»æã"},{"name":"ååæ çº¿æ¡æ¹å说æ","name_en":"Bidirectional Tree Line Direction FAQ","path":"bidirectional-tree-line-direction-faq","desc_en":"This example builds a side-by-side bidirectional tree comparison that explains how upper-branch arrowheads can be visually reversed without changing the top-down data model required by the layout. It uses two provider-scoped graph instances, one shared tree configuration, and a small inline RGJsonData dataset whose right-panel variant changes only upper-line arrow settings and color.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«å¯¹æ¯é¡µé¢ï¼å
¶ä¸å
å«ä¸¤ä¸ª relation-graph ç»å¸ï¼ä»¥åä½äºå®ä»¬ä¸é´çåºå®è¯´æåã两个ç»å¸é½æ¸²æå䏿£µä»¥æ ¹èç¹ä¸ºä¸å¿çååæ ï¼ä¸ç»åæ¯åä¸çé¿å¹¶æå `R-*` èç¹ï¼å¦ä¸ç»åæ¯ååä¸çé¿å¹¶æå `a` 䏿¹çåèç¹ã"},{"name_en":"Tree Layout and Line Options","name":"æ å¸å±ä¸è¿çº¿åæ°è°è","path":"tree-layout-line-options","meta":{"vip":true,"isNew":true},"desc_en":"This example turns a fixed tree dataset into a live tuning playground for relation-graph. Users can change tree direction and spacing, batch-restyle existing lines, switch canvas interaction modes, and export the current view as an image without rebuilding the data.","desc_zh":"è¿ä¸ªç¤ºä¾æåºå®æ æ°æ®éåæ relation-graph ç宿¶è°åå·¥ä½å°ãç¨æ·å¯è°æ´æ æ¹åä¸é´è·ãæ¹ééè®¾ç°æè¿çº¿æ ·å¼ã忢ç»å¸äº¤äºæ¨¡å¼ï¼å¹¶å¨ä¸éå»ºæ°æ®çæ
åµä¸å¯¼åºå½åè§å¾ä¸ºå¾çã"},{"name":"ä¸å¿å¸å±æ ·å¼æ§å¶","name_en":"Center Layout Style Controls","path":"center-layout-style-controls","desc_en":"This example demonstrates relation-graph\'s built-in center layout on one fixed radial network and layers a floating control window above it. Users can switch node shape, line shape, and line-label placement on the live graph, while the shared overlay also exposes canvas interaction settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨è§å£å
³ç³»å¾ï¼ä½¿ç¨å
ç½®ç `center` å¸å±ï¼å¹¶å¨ç»å¸ä¸æ¹æ¾ç½®äºä¸ä¸ªæ¬æµ®çç½è²æ§å¶çªå£ã徿¬èº«æ¯ä¸ä¸ªåºå®çå¾åç½ç»ï¼ä¸é´æä¸ä¸ªæ ¹èç¹ï¼é
ææ©è²èç¹å带æ ç¾çå
³ç³»çº¿ã"},{"name":"ä¸å¿å¸å±å±çº§é´è·è®¾ç½®","name_en":"Center Layout Spacing Controls","path":"center-layout-spacing-controls","videoImage":true,"desc_en":"This example demonstrates live spacing control for relation-graph\'s center layout on one fixed hierarchy. It compares a global distance coefficient with explicit per-level gap arrays, and wraps those controls in a draggable utility window that also exposes canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªç¨äº `center` å¸å±çå
¨è§å£ relation graph æ¼ç¤ºï¼å¹¶å¨ç»å¸ä¸æ¹å å äºä¸ä¸ªæ¬æµ®æ§å¶çªå£ã徿¬èº«æ¯ä¸ä¸ªåºå®ç忝å±çº§ç»æï¼ä»¥å°åé绿è²åç¹åé绿è²è¿çº¿æ¸²æï¼å æ¤å¸å±ååä¼å§ç»ä¿ææ¸
æ°å¯è§ã"},{"name":"åå¦å¸å±å®æ¶åæ°è°è","name_en":"Force Layout Live Parameter Tuning","path":"force-layout-live-parameter-tuning","videoImage":true,"desc_en":"This example builds a force-directed network from one static branching dataset and exposes live controls for node repulsion, line elasticity, and relayout duration. It is a compact reference for updating the active ForceLayout instance and rerunning the built-in solver without rebuilding the graph data.","desc_zh":"è¿ä¸ªç¤ºä¾åºäºåä¸éæåæ¯æ°æ®æå»ºå导ç½ç»ï¼å¹¶æä¾èç¹æ¥åãè¿çº¿å¼¹æ§åéå¸å±æ¶é¿ç宿¶æ§å¶ã宿¯æ´æ°å½å ForceL
1ayout å®ä¾å¹¶éæ°è¿è¡å
ç½®æ±è§£å¨ï¼æ ééå»ºå¾æ°æ®ï¼çç´§ååèã"},{"name":"å导åå¸å±è¿è¡æ¶åæ°æ§å¶","name_en":"Force Layout Runtime Parameter Controls","path":"force-layout-runtime-parameter-controls","desc_en":"This example demonstrates a full-screen relation-graph force-layout playground with two preset datasets, six runtime force sliders, and a switch between continuous and fixed-iteration layout runs. It uses the live graph instance to reload data, mutate the active ForceLayout, and expose shared canvas settings and image export from a floating utility window.","desc_zh":"è¿ä¸ªç¤ºä¾æä¾å
¨å± relation-graph å导å¸å±è°ååºï¼å
å«ä¸¤ç»é¢è®¾æ°æ®ã6 个è¿è¡æ¶ååæ°æ»åï¼ä»¥åè¿ç»è®¡ç®ä¸åºå®è¿ä»£å¸å±åæ¢ãå®éè¿å®æ¶å¾å®ä¾éè½½æ°æ®ãä¿®æ¹å½å ForceLayoutï¼å¹¶å¨æ¬æµ®å·¥å
·çªä¸æ´é²å
±äº«ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"å导åå¸å±æ§è½æ¨¡å¼åæµå®éª","name_en":"Force Layout Performance Mode Stress Lab","path":"force-layout-performance-mode-stress-lab","meta":{"vip":true,"entVip":true},"desc_en":"This example demonstrates a full-screen relation-graph force-layout stress playground that regenerates synthetic datasets from 100 to 10000 nodes and edges, keeps `performanceMode` enabled, and exposes six live force-coefficient sliders plus a continuous-versus-fixed layout switch. It also keeps a custom avatar-style node slot, a draggable utility window, a minimap, and shared canvas settings active so teams can evaluate richer rendering behavior under heavier force-directed loads.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå
¨å± relation-graph å导å¸å±åæµåºï¼å¯ä» 100 å° 10000 èç¹/è¾¹çæåææ°æ®ï¼ä¿æ `performanceMode` å¼å¯ï¼å¹¶æä¾ 6 ä¸ªå®æ¶åç³»æ°æ»ååè¿ç»/åºå®å¸å±åæ¢ãå®åæ¶å¯ç¨èªå®ä¹å¤´åèç¹ææ§½ã坿æ½å·¥å
·çªãå°å°å¾åå
±äº«ç»å¸è®¾ç½®ï¼ç¨äºè¯ä¼°æ´ä¸°å¯æ¸²æå¨é«è´è½½åå¯¼åºæ¯ä¸ç表ç°ã"},{"name":"æ§è½æ¨¡å¼æµè¯-Tree","name_en":"Tree - Performance Mode Test","path":"performance-test-tree-layout","meta":{"vip":true,"entVip":true},"desc_en":"This example builds a full-screen stress playground for relation-graph\'s built-in tree layout in performance mode. It regenerates synthetic hierarchies at multiple size presets, keeps custom employee-card nodes and a minimap active, and lets users retune layout and connector presentation on the live graph.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäº relation-graph å
ç½®æ å¸å±å¨æ§è½æ¨¡å¼ä¸çå
¨å±åæµåºãå®å¯æå¤ç§è§æ¨¡é¢è®¾éæ°çæåæå±çº§æ°æ®ï¼ä¿æèªå®ä¹åå·¥å¡çèç¹åå°å°å¾å¯ç¨ï¼å¹¶å
许å¨å®æ¶å¾ä¸ç»§ç»è°æ´å¸å±ä¸è¿æ¥å¨è¡¨ç°ã"},{"name":"å导åå¸å±èç¹æéä¸è¿çº¿å¼¹æ§","name_en":"Force Layout Node Weight And Line Elasticity","path":"force-layout-node-weight-and-line-elasticity","meta":{"vip":true},"desc_en":"A full-screen force-layout playground that compares per-node weight and per-line elasticity on the same live graph. Users can randomize the value ranges, retune the running solver, and add child nodes while relation-graph recalculates the layout.","desc_zh":"è¿æ¯ä¸ä¸ªå
¨å±å导å¸å±è°è¯åºï¼ç¨äºå¨åä¸å®æ¶å¾ä¸å¯¹æ¯æèç¹æéåæè¿çº¿å¼¹æ§ä¸¤ç§ææãç¨æ·å¯éæºååå¼èå´ãéæ°è°åè¿è¡ä¸çæ±è§£å¨ï¼å¹¶å¨ relation-graph éæ°è®¡ç®å¸å±æ¶å¨ææ·»å åèç¹ã"},{"name":"èªå®ä¹åå¦å¸å±é¢è²èç±»","name_en":"Custom Force Layout Color Clustering","path":"custom-force-layout-color-clustering","meta":{"vip":true,"isNew":true},"desc_en":"This example seeds a node-only graph with random positions and random colors, mounts a custom `RGLayouts.ForceLayout` subclass, and makes same-color nodes cluster together on a dark canvas. A floating helper window lets users retune the force parameters, switch canvas interaction modes, and export the current clustered view.","desc_zh":"è¿ä¸ªç¤ºä¾ä»¥éæºä½ç½®åéæºé¢è²åå§åä»
èç¹å¾ï¼æè½½èªå®ä¹ `RGLayouts.ForceLayout` åç±»ï¼è®©åè²èç¹å¨æ·±è²ç»å¸ä¸èéãæ¬æµ®è¾
å©çªå¯è°æ´åå¦åæ°ã忢ç»å¸äº¤äºæ¨¡å¼ï¼
1并导åºå½åèç±»è§å¾ã"},{"name":"èªå®ä¹åå¦å¸å±åå¿å轨é","name_en":"Custom Force Layout on Concentric Rings","path":"custom-force-layout-concentric-rings","meta":{"vip":true,"isNew":true},"desc_en":"This example mounts a custom `RGLayouts.ForceLayout` subclass that keeps relationship nodes moving under force rules while constraining them to configurable concentric rings. A floating control panel lets users retune repulsion, line elasticity, ring diameters, canvas behavior, and image export on the live graph.","desc_zh":"è¿ä¸ªç¤ºä¾æè½½èªå®ä¹ `RGLayouts.ForceLayout` åç±»ï¼å¨åå¦è§å驱å¨å
³ç³»èç¹è¿å¨çåæ¶ï¼å°å
¶çº¦æå¨å¯é
ç½®çåå¿å轨éä¸ãæ¬æµ®æ§å¶é¢æ¿å¯å®æ¶è°æ´æ¥åãè¿çº¿å¼¹æ§ãç¯åå¾ãç»å¸è¡ä¸ºåå¾ç导åºã"},{"name":"å导åèç±»ä¸åæ§éç¹è¿å¨","name_en":"Force Clustering with Controlled Anchor Motion","path":"force-clustering-with-controlled-anchor-motion","meta":{"vip":true,"isNew":true},"desc_en":"This example uses hidden zero-opacity links to keep three groups clustered in a live force layout, then drives the group anchors around the root with a timer. It combines slot-based node rendering, a canvas backdrop, runtime line-visibility inspection, theme switching, `RGMiniView`, and a shared floating settings and export panel. It is most useful as a reference for controlled motion on top of relation-graph\'s built-in force solver.","desc_zh":"è¿ä¸ªç¤ºä¾ä½¿ç¨éèçé¶éæåº¦è¿çº¿ï¼è®©ä¸ç»èç¹å¨å®æ¶å导å¸å±ä¸ä¿æèç±»ï¼å¹¶éè¿å®æ¶å¨é©±å¨ç»éç¹å´ç»æ ¹èç¹è¿å¨ãå®ç»åææ§½èç¹æ¸²æãç»å¸èæ¯ãè¿è¡æ¶è¿çº¿å¯è§æ§æ£æ¥ã主é¢åæ¢ã`RGMiniView` 以åå
±äº«æ¬æµ®è®¾ç½®ä¸å¯¼åºé¢æ¿ï¼éåä½ä¸ºå¨å
ç½®åæ±è§£å¨ä¹ä¸å®ç°åæ§è¿å¨çåèã"},{"name":"æä»¶å¤¹å¸å±ä¸è¿çº¿åç§»æ§å¶","name_en":"Folder Layout with Line Offset Control","path":"folder-layout-line-offset","meta":{"isNew":true},"desc_en":"This example shows how to render a nested dataset with relation-graph\'s built-in folder layout and a custom node slot that makes parent nodes look like folders. It also demonstrates a reusable runtime pattern: batch-updating loaded connectors so one slider changes the line start offset across the whole graph.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½ä½¿ç¨ relation-graph å
ç½® folder å¸å±æ¸²æåµå¥æ°æ®ï¼å¹¶éè¿èªå®ä¹èç¹ææ§½è®©ç¶èç¹åç°ä¸ºæä»¶å¤¹å¤è§ãå®è¿æ¼ç¤ºäºå¯å¤ç¨çè¿è¡æ¶æ¨¡å¼ï¼æ¹éæ´æ°å·²å è½½è¿æ¥å¨ï¼è®©ä¸ä¸ªæ»åç»ä¸æ¹åå
¨å¾è¿çº¿èµ·ç¹åç§»ã"},{"name":"ç»ç»æºææ Folder å¸å±","name_en":"Organization Tree Folder Layout","path":"organization-tree-folder-layout","meta":{"vip":true,"isNew":true},"desc_en":"This example renders a left-to-right organizational hierarchy with relation-graph\'s folder layout and custom company-card nodes. It preprocesses nested tree data into RGJsonData, then lets users tune connector offset and folder spacing at runtime while keeping canvas settings and image export in a shared floating utility window.","desc_zh":"è¿ä¸ªç¤ºä¾ä½¿ç¨ relation-graph ç folder å¸å±åèªå®ä¹ä¼ä¸å¡çèç¹æ¸²æä¸æ£µå·¦å°å³ç»ç»å±çº§æ ãå®å
æåµå¥æ æ°æ®é¢å¤ç为 RGJsonDataï¼åå
è®¸ç¨æ·å¨è¿è¡æ¶è°èè¿æ¥å¨åç§»ä¸ folder é´è·ï¼åæ¶å¨å
±äº«æ¬æµ®å·¥å
·çªä¸ä¿çç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"ä¼ä¸å
³ç³»å象éåºå®å¸å±","name_en":"Enterprise Quadrant Fixed Layout","path":"enterprise-quadrant-fixed-layout","desc_en":"This example builds a four-quadrant enterprise relationship graph in relation-graph\'s fixed layout mode. It generates RGJsonData from category lists, computes manual coordinates in a separate layout pass, and lets users retune spacing at runtime from a floating control window.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ relation-graph åºå®å¸å±æ¨¡å¼ä¸æå»ºä¼ä¸å
³ç³»å象éå¾ã宿 ¹æ®ç±»å«åè¡¨çæ RGJsonDataï¼éè¿ç¬ç«å¸å±æ¥éª¤è®¡ç®æå·¥åæ ï¼å¹¶å
è®¸ç¨æ·å¨æ¬æµ®æ§å¶çªä¸å®æ¶è°æ´é´è·ã"},{"name":"ä¸å¿å¸å±ä¸æ å¸å±ç»å","name_en":"Center and Tree Layout Composition","path":"center-and-tree-layout-composition","meta":{"vip":true,"entVip":true},"desc_en":"This example loads two disconnected relation-graph datasets into one fixed canvas and places them with separate built-in layout passes. It is a focused reference for a bounds-based handoff pattern: center one subgraph f
1irst, measure it, then offset a left-to-right tree beside it while keeping the whole scene in one viewer.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªåªè¯»ç `relation-graph` æ¥çå¨ï¼å¨åä¸å¼ ç»å¸ä¸æ¾ç½®ä¸¤ä¸ªå½¼æ¤æå¼çåç½ç»ãå
¶ä¸ä¸ä¸ªåå¾è¢«ç»å¶ä¸ºä»¥ä¸å¿ä¸ºç¦ç¹çèç°ï¼å¦ä¸ä¸ªå被ç»å¶ä¸ºä»å·¦å°å³å±å¼çæ ï¼å¹¶æ¾ç½®å¨è¯¥èç°çå³ä¾§ã"},{"name":"èªå®ä¹æ··ååå¾å¸å±","name_en":"Custom Mixed Subgraph Layouts","path":"custom-mixed-subgraph-layouts","meta":{"vip":true,"entVip":true},"desc_en":"This example loads one static relation-graph dataset, partitions it by group metadata, and composes five subgraphs with different layout strategies on a single fixed canvas. It is a strong reference for metadata-driven mixed-layout orchestration, especially when per-group styling and one embedded force-driven region need to coexist in one viewer scene.","desc_zh":"è¿ä¸ªç¤ºä¾å è½½ä¸ä»½éæ relation-graph æ°æ®ï¼æåç»å
æ°æ®æååï¼å¨åä¸åºå®ç»å¸ä¸ç»å 5 个éç¨ä¸åå¸å±çç¥çåå¾ãå®é常éåä½ä¸ºå
æ°æ®é©±å¨æ··åå¸å±ç¼æçåèï¼å°¤å
¶æ¯éè¦æç»å®å¶æ ·å¼å¹¶è®©ä¸ä¸ªå
åµå导åºåä¸å
¶ä»å¸å±å
±åçåºæ¯ã"},{"name":"é¡ºåºæ ç»å¸å±","name_en":"Sequential Tree Group Layout","path":"sequential-tree-group-layout","meta":{"vip":true,"entVip":true},"desc_en":"This example takes one local hierarchy, splits its first-level branches into separate relation-graph groups, and lays each group out with its own left-to-right folder layout inside a fixed canvas. It then recenters a shared root above the combined bounds, adds display-only orthogonal connectors, and reruns the composition when branches expand or collapse.","desc_zh":"è¿ä¸ªç¤ºä¾è¯»å䏿£µæ¬å°å±çº§æ ï¼å°ä¸çº§åæ¯æå为ç¬ç« relation-graph åç»ï¼å¹¶å¨åºå®ç»å¸å
为æ¯ç»åºç¨åèªçå·¦å°å³ folder å¸å±ãéåå®ä¼æå
±äº«æ ¹èç¹éæ°å±
ä¸å°åå¹¶è¾¹ç䏿¹ï¼æ·»å ä»
å±ç¤ºç¨æ£äº¤è¿æ¥çº¿ï¼å¹¶å¨åæ¯å±å¼/æ¶èµ·æ¶éæ°æ§è¡æ´ä½ç»åå¸å±ã"},{"name":"è¿éåå
³ç³»ç½å¸å±åæ¢","name_en":"Connected Subnetwork Layout Switcher","path":"connected-subnetwork-layout-switcher","videoImage":true,"meta":{"vip":true},"desc_en":"This example shows how to click a node, detect its connected subnetwork, and relayout only that group inside a shared relation-graph canvas. It combines four preset layouts, selection-scoped editing controls, a minimap, and a floating helper window while keeping other disconnected graph islands loaded.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªåä¸ç relation-graph ç»å¸ï¼å
¶ä¸å
å«ä¸¤ä¸ªå½¼æ¤æå¼çå¾å²ï¼å¹¶å
è®¸ç¨æ·åªå¯¹å½åç¹å»èç¹å¨å´çå¾å²éæ°å¸å±ãçé¢ç»åäºä¸»å¾ãå°å°å¾ãä¸ä¸ªæµ®å¨è¾
å©çªå£ï¼ä»¥åä¸ä¸ªæ¾ç¤ºå¨å½åæ´»å¨ç¼è¾åç»ä¸æ¹çå°åé¢è®¾éæ©å¨ã"},{"name":"å¤ç»å
³ç³»ç½å¸å±ä¸æ ·å¼ç¼è¾å¨","name_en":"Multi-Group Graph Layout and Style Editor","path":"multi-group-layout-style-editor","meta":{"vip":true,"entVip":true},"desc_en":"Builds a fixed-canvas graph workbench where users can insert randomly generated tree groups, assign each group its own layout and visual style, and then edit or delete the group as a unit. The example combines per-group sublayout execution, floating configuration panels, selection overlays, minimap support, and shared canvas export and interaction settings.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªåºå®ç»å¸å¾è°±å·¥ä½å°ï¼ç¨æ·å¯æå
¥éæºçæçæ åç»ï¼ä¸ºæ¯ç»åé
ç¬ç«å¸å±ä¸è§è§æ ·å¼ï¼å¹¶ä»¥ç»ä¸ºåä½è¿è¡ç¼è¾æå é¤ã示ä¾ç»åäºåç»åå¸å±æ§è¡ãæ¬æµ®é
ç½®é¢æ¿ãé䏿è¦çå±ãå°å°å¾æ¯æï¼ä»¥åå
±äº«ç»å¸å¯¼åºä¸äº¤äºè®¾ç½®ã","videoImage":true},{"name":"å·¥ä¸é¾å¡çéç¹æ··åå¸å±","name_en":"Industrial Chain Card-Anchored Mixed Layout","path":"industrial-chain-card-anchored-mixed-layout","meta":{"vip":true,"entVip":true},"desc_en":"A viewer-oriented relation-graph demo that combines a fixed outer graph with a custom mixed-layout pipeline for an industrial value chain dashboard. Ordinary canvas-slot card rows become graph anchors through `RGConnectTarget` and `addFakeLines(...)`, while per-group tree layouters and dependency refs keep attached subtrees synchronized during expand, collapse, and depth-based bulk expansion.","desc_zh":"è¿æ¯ä¸ä¸ªåæ¥çå¨ç relation-graph 示ä¾ï¼ç¨äºå·¥ä¸ä»·å¼é¾çæ¿ï¼å¤å±å¾ä½¿ç¨åºå®å¸å±ï¼å
é¨éç¨èªå®ä¹æ··åå¸å±ç®¡çº¿ãæ®éç»å¸ææ§½å¡çè¡éè¿ `RGConnectTarget` ä¸ `addFakeLines(...)` 转为å¾éç¹ï¼åæ¶æç»æ å¸å±å¨åä¾èµå¼ç¨å¯å¨å±å¼ãæ¶èµ·åæå±æ¹é
1å±å¼æ¶ä¿æéå±åæ 忥ã"},{"name_en":"Industry Chain Group Layout Editor","name":"产ä¸é¾å
³ç³»ç»å¸å±ç¼è¾å¨","path":"industry-chain-group-layout-editor","meta":{"vip":true,"entVip":true,"isNew":true},"desc_en":"This example builds an editable industry value chain board where HTML stage cards anchor several relation-graph tree groups on one fixed canvas. Users can select a whole group, adjust node, line, and tree-layout settings, insert a new random tree at a chosen row position, and trigger dependency-aware relayout as the structure changes.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå¯ç¼è¾ç产ä¸ä»·å¼é¾çæ¿ï¼HTML é¶æ®µå¡çå¨åä¸åºå®ç»å¸ä¸éå®å¤ä¸ª relation-graph æ åç»ãç¨æ·å¯ä»¥æ´ç»éä¸ãè°æ´èç¹/è¿çº¿/æ å¸å±åæ°ã卿å®è¡æå
¥æ°çéæºæ ï¼å¹¶å¨ç»æååæ¶è§¦å带ä¾èµæç¥çéå¸å±ã"},{"name":"æºè½æ å¸å±","name_en":"Smart Tree Layout","path":"smart-tree-layout","meta":{"vip":true,"entVip":true},"desc_en":"This example shows how to load one generic relationship dataset into relation-graph\'s smart-tree layout and switch the mounted graph between horizontal and vertical presets. It also demonstrates the extra runtime step of resizing existing nodes and resetting line shape before relayout, together with a shared viewer shell for mini-view, canvas settings, and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å°éç¨å
³ç³»æ°æ®å è½½å° relation-graph çæºè½æ å¸å±ï¼å¹¶å¨è¿è¡æ¶å¨æ¨ªåä¸çºµåé¢è®¾é´åæ¢ãå®è¿æ¼ç¤ºäºéå¸å±åå¯¹ç°æèç¹é设尺寸ãé置线形çé¢å¤æ¥éª¤ï¼å¹¶å¤ç¨å¸¦å°å°å¾ãç»å¸è®¾ç½®åå¾ç导åºçå
±äº«æ¥çå¨å¤å£³ã"},{"name":"IO Tree å¸å±æ¹åä¸è¿çº¿è·¯ç±","name_en":"IO Tree Layout Orientation and Link Routing","path":"io-tree-layout-orientation-and-link-routing","meta":{"vip":true,"entVip":true},"desc_en":"This example builds a static IO-tree viewer that can switch between horizontal and vertical presets at runtime. Its main lesson is a post-layout routing pass that compares computed node levels and rewrites each line\'s junction anchors, offsets, and geometry so inbound and outbound branches remain readable.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªéæ IO Tree æ¥çå¨ï¼å¯å¨è¿è¡æ¶åæ¢æ¨ªåä¸çºµåé¢è®¾ãæ ¸å¿æ¯å¸å±åçè·¯ç±ä¿®æ£æ¥éª¤ï¼å¯¹æ¯è®¡ç®å¾å°çèç¹å±çº§ï¼é忝æ¡è¿çº¿çè¿æ¥éç¹ãåç§»åå ä½åæ°ï¼ä»¥ä¿æè¾å
¥/è¾åºåæ¯å¯è¯»ã"},{"name":"Dagre å¸å±æ¥å
¥ä¸è¿çº¿æ ç¾å®ä½","name_en":"Dagre Layout Integration and Line Label Positioning","path":"dagre-layout-integration-and-line-labels","meta":{"vip":true},"desc_en":"A relation-graph example that renders custom node cards first, measures their live dimensions, then runs Dagre externally and writes the computed coordinates back into a fixed-layout scene. It also keeps orthogonal labeled connectors, a minimap overlay, and shared canvas utilities such as export and runtime interaction settings.","desc_zh":"è¿æ¯ä¸ä¸ª relation-graph 示ä¾ï¼å
渲æèªå®ä¹èç¹å¡çå¹¶æµé宿¶å°ºå¯¸ï¼åå¨å¤é¨è¿è¡ Dagreï¼å°è®¡ç®åæ ååå°åºå®å¸å±åºæ¯ãå®è¿ä¿çäºæ£äº¤å¸¦æ ç¾è¿æ¥çº¿ãå°å°å¾è¦çå±ï¼ä»¥å导åºåè¿è¡æ¶äº¤äºè®¾ç½®çå
±äº«ç»å¸å·¥å
·ã"},{"name":"Dagreä½ç½®å¸å±è¿è¡æ¶æ§å¶","name_en":"Dagre Position Layout Runtime Controls","path":"dagre-position-layout-runtime-controls","meta":{"vip":true},"desc_en":"This example builds a fixed-layout relation-graph scene that lets relation-graph render and measure the nodes, then hands position calculation to Dagre. Its main lesson is how to keep Dagre\'s ranker and spacing parameters live at runtime while preserving custom node cards, orthogonal labeled connectors, a minimap, and shared canvas utilities.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºåºå®å¸å± relation-graph åºæ¯ï¼è®© relation-graph è´è´£èç¹æ¸²æä¸æµéï¼åæä½ç½®è®¡ç®äº¤ç» Dagreãéç¹æ¯å¦ä½å¨è¿è¡æ¶ä¿æ Dagre ç ranker åé´è·åæ°å¯è°ï¼åæ¶ä¿çèªå®ä¹èç¹å¡çãæ£äº¤å¸¦æ ç¾è¿çº¿ãå°å°å¾åå
±äº«ç»å¸å·¥å
·ã"},{"name":"ä½¿ç¨ Graphology ForceAtlas2 å¸å±","name_en":"Use Graphology ForceAtlas2 Layout","path":"use-graphology-forceatlas2-layout","meta":{"vip":true}
1,"desc_en":"A relation-graph example that renders sample data first, reads the measured node sizes, then runs a Graphology circular plus ForceAtlas2 pass and writes scaled coordinates back into a fixed-layout scene. It also adds dataset switching, layout-scale tuning, and a shared floating panel for canvas settings and image export.","desc_zh":"è¿æ¯ä¸ä¸ª relation-graph 示ä¾ï¼å
æ¸²ææ ·ä¾æ°æ®å¹¶è¯»åèç¹å®æµå°ºå¯¸ï¼åæ§è¡ Graphology åå½¢åå§å + ForceAtlas2 计ç®ï¼å¹¶å°ç¼©æ¾åçåæ åååºå®å¸å±åºæ¯ãå®è¿æä¾æ°æ®é忢ãå¸å±ç¼©æ¾è°èï¼ä»¥åå
±äº«æ¬æµ®é¢æ¿ä¸çç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"D3 Treemap/Pack å¸å±æ¥å
¥","name_en":"D3 Treemap and Pack Layout Integration","path":"d3-treemap-pack-layout-integration","meta":{"vip":true},"desc_en":"This example loads a static relation graph in `fixed` mode, rebuilds a D3 hierarchy from the live graph tree, and writes treemap or circle-pack geometry back into relation-graph nodes. A floating selector lets users switch the same graph between the two D3 layouts while keeping custom node slots, a minimap, shared canvas settings, and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ `fixed` 模å¼å è½½éæå
³ç³»å¾ï¼ä»å®æ¶å¾æ é建 D3 å±çº§ï¼åæ treemap æ circle-pack å ä½ç»æååå° relation-graph èç¹ãæ¬æµ®éæ©å¨å¯å¨åä¸å¾ä¸åæ¢è¿ä¸¤ç§ D3 å¸å±ï¼åæ¶ä¿çèªå®ä¹èç¹ææ§½ãå°å°å¾ãå
±äº«ç»å¸è®¾ç½®åå¾ç导åºã"},{"name_en":"System Architecture Diagram with Custom Layout","name":"ç³»ç»æ¶æå¾ï¼èªå®ä¹å¸å±ï¼","path":"system-architecture-diagram","desc_en":"This example renders a layered system architecture diagram from an embedded hierarchical dataset. It flattens the source tree into RGJsonData, hides structural links, repacks each group\'s children with a custom post-layout pass, and adds viewer controls such as depth presets, palette changes, a minimap toggle, and image export.","desc_zh":"è¿ä¸ªç¤ºä¾åºäºå
åµå±çº§æ°æ®æ¸²æåå±ç³»ç»æ¶æå¾ãå®å
ææºæ æå¹³å为 RGJsonDataï¼éèç»ææ§è¿çº¿ï¼åéè¿èªå®ä¹åå¤çå¸å±éæ°æå
åç»åèç¹ï¼å¹¶æä¾æ·±åº¦é¢è®¾ãé
è²åæ¢ãå°å°å¾å¼å
³åå¾ç导åºçæ¥çæ§å¶ã"},{"name":"èªå®ä¹èç¹ä¼ä¸æå¡å®£ä¼ å¡ç","name_en":"Custom Node Enterprise Service Promo Card","path":"custom-node-enterprise-promo-card","meta":{"vip":true,"entVip":true,"isNew":true},"desc_en":"This example uses a fixed-layout `RelationGraph` as a presentation canvas for one oversized enterprise promo card rendered through `RGSlotOnNode`. It also reuses the shared floating helper window for runtime wheel and drag mode switching plus image export, making it a focused reference for graph-hosted branded UI rather than layout variation.","desc_zh":"è¿ä¸ªç¤ºä¾æåºå®å¸å± `RelationGraph` å½ä½å±ç¤ºç»å¸ï¼éè¿ `RGSlotOnNode` 渲æä¸å¼ è¶
大ä¼ä¸å®£ä¼ å¡ãå®è¿å¤ç¨å
±äº«æ¬æµ®è¾
å©çªæä¾æ»è½®/ææ½æ¨¡å¼åæ¢åå¾ç导åºï¼æ´éåä½ä¸ºå¾è°±æ¿è½½åçå UI çåèï¼èéå¸å±åå示ä¾ã"},{"name_en":"Bidirectional Tree Layout","name":"ååå
³ç³»æ å¸å±","path":"bidirectional-tree-layout","desc_en":"This example builds a root-centered bidirectional tree and lets the user switch the same dataset between horizontal and vertical tree presets. After layout, it uses `node.lot.level` to re
1color the incoming branch and optionally reverse that branch\'s arrow direction without reloading the data.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸æ£µä»¥åä¸ªæ ¹èç¹ä¸ºä¸å¿çåä¾§æ ãä¸ä¾§åæ¯æµåæ ¹èç¹ï¼å¦ä¸ä¾§åæ¯ä»æ ¹èç¹åå¤å±å¼ï¼å¹¶ä¸æ´ä¸ªå¾å¯ä»¥å¨ä¸æ´æ¹æ°æ®éæ¬èº«çåæä¸ï¼å¨æ¨ªåæ åçºµåæ ä¹é´åæ¢ã"},{"name_en":"Google Income Statement Ribbon Infographic","name":"è°·æç»è¥æçä¸å¸¦å¾","path":"google-income-statement-ribbon-infographic","desc_en":"A standalone financial infographic viewer that renders a Google income statement as a left-to-right relation graph with amount-scaled node bars and proportional ribbon flows. It combines recursive RGJsonData preprocessing, custom node and line slots, and lightweight checked-state interactions into a compact final-state reference.","desc_zh":"è¿æ¯ä¸ä¸ªç¬ç«çè´¢å¡ä¿¡æ¯å¾æ¥çå¨ï¼å° Google 婿¶¦è¡¨æ¸²æä¸ºå·¦å°å³å
³ç³»å¾ï¼å
嫿éé¢ç¼©æ¾çèç¹æ¡åææ¯ä¾æµå¨çä¸å¸¦è¿çº¿ãå®ç»åéå½ RGJsonData é¢å¤çãèªå®ä¹èç¹ä¸è¿çº¿ææ§½ï¼ä»¥åè½»ééä¸æäº¤äºï¼å½¢æç´§åçæç»æåèã"},{"name_en":"Industry Chain Hierarchy Map","name":"产ä¸é¾å±çº§å¾è°±","path":"industry-chain-hierarchy-map","desc_en":"This example renders a semiconductor industry-chain hierarchy as a top-down relation-graph tree with custom card nodes. It uses computed node levels to control expansion depth, card styling, and semantic headers, and it adds a floating helper panel with a minimap toggle, canvas settings, and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å°å导ä½äº§ä¸é¾å±çº§æ¸²æä¸ºèªä¸èä¸ç relation-graph æ ï¼å¹¶ä½¿ç¨èªå®ä¹å¡çèç¹ãå®å©ç¨è®¡ç®å¾å°çèç¹å±çº§æ§å¶å±å¼æ·±åº¦ãå¡çæ ·å¼åè¯ä¹æ é¢ï¼å¹¶æä¾å¸¦å°å°å¾å¼å
³ãç»å¸è®¾ç½®åå¾ç导åºçæ¬æµ®è¾
å©é¢æ¿ã"},{"name_en":"Corporate Equity Structure Diagram","name":"ä¼ä¸è¡æç»æå¾","path":"corporate-equity-structure-diagram","meta":{"vip":true},"desc_en":"This example renders a top-down corporate ownership diagram with investors above the focal company and subsidiaries below it. It combines custom company-card node slots, post-layout cleanup for upstream branches, one-time lazy subsidiary expansion, and a shared floating panel for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æèªä¸èä¸çä¼ä¸è¡æç»æå¾ï¼æèµæ¹ä½äºç¦ç¹å
¬å¸ä¸æ¹ï¼åå
¬å¸ä½äºä¸æ¹ãå®ç»åèªå®ä¹ä¼ä¸å¡çèç¹ææ§½ã䏿¸¸åæ¯å¸å±åæ¸
çã䏿¬¡æ§æå è½½åå
¬å¸å±å¼ï¼ä»¥åç¨äºç»å¸è®¾ç½®åå¾ç导åºçå
±äº«æ¬æµ®é¢æ¿ã"},{"name_en":"Investment and Shareholder Relationship Explorer","name":"æèµä¸è¡ä¸å
³ç³»æ¢æ¥","path":"investment-shareholder-relationship-explorer","meta":{"vip":true},"desc_en":"This example renders a focal-company relationship explorer with in-graph controls for investment, shareholder, and historical-investment branches. It combines typed lazy loading through appended RGJsonData fragments, post-layout expand-holder normalization, custom node slots, and a shared floating panel for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æå´ç»ç¦ç¹å
¬å¸çå
³ç³»æ¢æ¥å¾ï¼å¾å
坿§å¶æèµãè¡ä¸åå岿èµåæ¯ãå®ç»åæç±»åçæå è½½ï¼éè¿è¿½å RGJsonData çæ®µï¼ãå¸å±åå±å¼å ä½å½ä¸åãèªå®ä¹èç¹ææ§½ï¼ä»¥åç¨äºç»å¸è®¾ç½®åå¾ç导åºçå
±äº«æ¬æµ®é¢æ¿ã"},{"name_en":"Show All Preloaded Branch Nodes","name":"æ¾ç¤ºåæ¯ä¸çå
¨é¨é¢å è½½èç¹","path":"show-all-preloaded-branch-nodes","meta":{"vip":true},"desc_en":"This example shows how to preload several company-relationship branches, keep most branch members hidden, and reveal an entire branch through a synthetic `Show More(...)` node rendered inside the graph. It also demonstrates typed node-slot rendering, a left-to-right orthogonal tree layout, and a shared floating settings panel for interaction tuning and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½é¢å è½½å¤ä¸ªä¼ä¸å
³ç³»åæ¯ãå
éè大夿°æåï¼åéè¿å¾å
åæç `Show More(...)` èç¹ä¸æ¬¡æ§å±å¼æ´æ¡åæ¯ãå®è¿æ¼ç¤ºäºç±»ååèç¹ææ§½æ¸²æãå·¦å°å³æ£äº¤æ å¸å±ï¼ä»¥åç¨äºäº¤äºè°ååå¾ç导åºçå
±äº«æ¬æµ®è®¾ç½®é¢æ¿ã"},{"name_en":"Lazy-Load Paginated Branch Nodes","name":"å页æå è½½åæ¯èç¹","path":"lazy-load-paginated-branch-nodes","meta":{"vip":true},"desc_en":"This example shows how to lazy-load paginated investment and shareholder branches inside a left-to-right corporate relationship tree. The first page arrives on branch expand, later pages arrive through a synthetic `Load More(...)` node rendered inside the graph, and a floating helper window lets the user tune page size and access shared canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨å·¦å°å³ä¼ä¸å
³ç³»æ ä¸å¯¹æèµä¸è¡ä¸åæ¯è¿è¡å页æå è½½ã馿¹æ°æ®å¨åæ¯å±å¼æ¶å è½½ï¼åç»å页éè¿å¾å
åæç `Load More(...)` èç¹è§¦åï¼æ¬æµ®è¾
å©çªå¯è°å页大å°å¹¶æä¾å
±äº«ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"è´¸æä¼ä¼´å
³ç³»æ¢æ¥","name_en":"Trade Partner Relationship Explorer","path":"trade-partner-relationship-explorer","desc_en":"This example builds a trade-oriented relationship viewer around one focal company, with inbou
1nd categories above the root and outbound categories below it. Expanding a category lazily appends company nodes, while checked company chips can open a partner card and root controls can hide the upper or lower branch set independently.","desc_zh":"è¿ä¸ªç¤ºä¾å´ç»ä¸ä¸ªç¦ç¹å
¬å¸æå»ºè´¸æå
³ç³»æ¥çå¨ï¼æ ¹èç¹ä¸æ¹æ¯å
¥åç±»å«ï¼ä¸æ¹æ¯åºåç±»å«ãå±å¼ç±»å«æ¶ä¼æå è½½ä¼ä¸èç¹ï¼è¢«éä¸çä¼ä¸æ ç¾å¯æå¼ä¼ä¼´å¡çï¼æ ¹èç¹æ§å¶é¡¹è¿å¯ç¬ç«éèä¸/ä¸ä¸¤ç»åæ¯ã"},{"name_en":"Database Foreign Key Diagram","name":"æ°æ®åºè¡¨å¤é®å
³ç³»å¾","path":"database-foreign-key-diagram","desc_en":"A fixed-layout database schema viewer that renders each table as a custom card and connects specific column rows with curved fake lines. It preprocesses table, column, and relation metadata into slotted node content plus `RGConnectTarget` endpoint ids, then layers in a draggable helper window for canvas settings and image export.","desc_zh":"è¿æ¯ä¸ä¸ªåºå®å¸å±çæ°æ®åºç»ææ¥çå¨ï¼å°æ¯å¼ 表渲æä¸ºèªå®ä¹å¡çï¼å¹¶ç¨æ²çº¿åè¿çº¿è¿æ¥å
·ä½å段è¡ãå®å
æè¡¨ãåæ®µåå
³ç³»å
æ°æ®é¢å¤çä¸ºææ§½èç¹å
å®¹ä¸ `RGConnectTarget` ç«¯ç¹ idï¼åå å 坿æ½è¾
å©çªæä¾ç»å¸è®¾ç½®åå¾ç导åºã"},{"name_en":"Class Members and Interest Group Relations","name":"ç级æåä¸å
´è¶£å°ç»å
³ç³»å¾","path":"class-members-and-interest-group-relations","meta":{"vip":true},"desc_en":"This example builds a school activity relationship board inside `RGSlotOnCanvas` instead of rendering ordinary graph nodes. It connects group cards, member cards, and map pins through `RGConnectTarget` ids, then regenerates fake lines from the current selection while a shared floating panel controls canvas behavior and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºçæ¯ä¸ä¸ªå¦æ ¡æ´»å¨å
³ç³»çæ¿ï¼è䏿¯ä¼ ç»çèç¹è¿çº¿å¾ãåéæç妿 ¡å°å¾ãå¯ç¹å»çä½ç½®å¾éã左侧çå
´è¶£å°ç»å表以åå³ä¾§çç级æåå表ï¼é½æ¸²æå¨åä¸ä¸ª relation-graph canvas ä¸ã"},{"name_en":"Map-Linked Warehouse and Product Overview","name":"å°å¾èå¨ä»åºå忦è§","path":"map-linked-warehouse-product-overview","meta":{"vip":true},"desc_en":"This example composes a US map backdrop, warehouse cards, and product cards inside RGSlotOnCanvas, then uses RGConnectTarget anchors and fake lines to highlight the current selection. It is primarily a reference for map-backed DOM-e
1ndpoint wiring and master-detail synchronization rather than a stable inventory data model.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ `RGSlotOnCanvas` ä¸ç»åç¾å½å°å¾èæ¯ãä»åºå¡çåååå¡çï¼åéè¿ `RGConnectTarget` éç¹ä¸åè¿çº¿é«äº®å½åéæ©ãå®ä¸»è¦ç¨äºåèå°å¾èæ¯ä¸ç DOM 端ç¹è¿çº¿ä¸ä¸»ä»èå¨ï¼èé稳å®çåºåæ°æ®æ¨¡åã"},{"name_en":"Business Unit Organizational Chart","name":"äºä¸ç¾¤ç»ç»æ¶æå¾","path":"business-unit-organizational-chart","meta":{"vip":true},"desc_en":"This example documents a presentation-oriented organizational chart built from one company hierarchy that is split into business-unit subtrees and recomposed under a shared executive root. It uses custom role cards, per-group folder layouts, expand-collapse relayout, a minimap, and a floating settings and export panel to turn a static hierarchy into a structured viewer.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªåªè¯»ç»ç»æ¶æå¾ï¼å
å«ä¸ä¸ªå
¬å¸æ ¹èç¹åè¥å¹²ä¸çº§ä¸å¡åå
ãç»å¸ä¼å±ç¤ºä¸å¼ é¡¶é¨é«ç®¡å¡çï¼å
¶ä¸æ¹æ¯å个横åæåçä¸å¡åå
åæ ï¼å¹¶é
ææ£äº¤è¿çº¿ãåºäºå±çº§æ·±åº¦çé¢è²å¼ºè°ã缩ç¥å¾ï¼ä»¥åå´ç»å¾è°±çæµ®å¨å·¥å
·çªå£ã"},{"name_en":"Corporate Group Relationship Map","name":"ä¼ä¸éå¢å
³ç³»å¾è°±","path":"corporate-group-relationship-map","desc_en":"This example renders a dense corporate relationship map from a static inline dataset and fits it into a centered relation-graph canvas. Users can switch live nodes between circular and rectangular presentations, optionally replace built-in nodes with custom slot content, adjust canvas interaction modes, and export the current view as an image.","desc_zh":"è¿ä¸ªç¤ºä¾ä»éæå
èæ°æ®æ¸²æä¸ä¸ªé«å¯åº¦ä¼ä¸å
³ç³»å¾ï¼å¹¶å°å
¶éé
å°å±
ä¸ç relation-graph ç»å¸ãç¨æ·å¯å®æ¶å¨åå½¢/ç©å½¢èç¹è¡¨ç°é´åæ¢ï¼æéç¨èªå®ä¹ææ§½æ¿æ¢å
ç½®èç¹ï¼è°æ´ç»å¸äº¤äºæ¨¡å¼ï¼å¹¶å¯¼åºå½åè§å¾å¾çã"},{"name_en":"Corporate Group Relationship Tree","name":"ä¼ä¸éå¢å
³ç³»æ ","path":"corporate-group-relationship-tree","desc_en":"This example renders a Tencent-centered corporate relationship tree from a static local RGJsonData payload and fits it into a full-height relation-graph canvas. It customizes node rendering with a root banner and vertical company badges, lazy-loads one placeholder branch through append APIs, and reuses the shared floating helper window for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾ä½¿ç¨éææ¬å° RGJsonData 渲æä»¥è
¾è®¯ä¸ºä¸å¿çä¼ä¸å
³ç³»æ ï¼å¹¶éé
å°å
¨é« relation-graph ç»å¸ãå®éè¿æ ¹èç¹æ¨ªå¹
åç«åä¼ä¸å¾½ç« èªå®ä¹èç¹æ¸²æï¼ä½¿ç¨ append API æå è½½ä¸ä¸ªå ä½åæ¯ï¼å¹¶å¤ç¨å
±äº«æ¬æµ®è¾
å©çªæä¾ç»å¸è®¾ç½®åå¾ç导åºã"},{"name_en":"Network Topology Monitor","name":"ç½ç»ææçæ§","path":"network-topology-monitor","desc_en":"This example turns relation-graph into a fixed-position network topology monitor with a dark dashboard shell. It loads inline service and execution-node data at mount time, applies category-specific custom node cards, and uses the built-in toolbar, pan, zoom, and selection emphasis for inspection.","desc_zh":"è¿ä¸ªç¤ºä¾æ relation-graph åæåºå®ä½ç½®çç½ç»ææçæ§é¢æ¿ï¼å¹¶éç¨æ·±è²ä»ªè¡¨çå¤å£³ãå®å¨æè½½æ¶å è½½å
èæå¡ä¸æ§è¡èç¹æ°æ®ï¼åºç¨æç±»å«åºåçèªå®ä¹èç¹å¡çï¼å¹¶å©ç¨å
置工å
·æ ã平移ã缩æ¾åéä¸å¼ºè°è¿è¡å·¡æ£ã"},{"name_en":"Infrastructure Topology Dashboard","name":"åºç¡è®¾æ½ææçæ¿","path":"infrastructure-topology-dashboard","desc_en":"This example presents a small infrastru
1cture topology as a monitoring-style relation-graph viewer with typed server, database, and service nodes. It combines mount-time graph initialization, a left-to-right tree layout, custom node-slot rendering, and a canvas-level VPC backdrop in one compact read-only scene.","desc_zh":"è¿ä¸ªç¤ºä¾å°ä¸ä¸ªå°ååºç¡è®¾æ½ææåç°ä¸ºçæ§é£ relation-graph æ¥çå¨ï¼å
å«ç±»ååçæå¡å¨ãæ°æ®åºåæå¡èç¹ãå®å¨ä¸ä¸ªç´§ååªè¯»åºæ¯ä¸ç»åäºæè½½æ¶å¾åå§åãå·¦å°å³æ å¸å±ãèªå®ä¹èç¹ææ§½æ¸²æåç»å¸çº§ VPC èæ¯ã"},{"name_en":"Cloud Infrastructure Topology via Canvas Slot","name":"åºäºç»å¸ææ§½çäºåºç¡è®¾æ½ææ","path":"canvas-slot-cloud-infrastructure-topology","desc_en":"This example builds a three-panel cloud infrastructure board inside RGSlotOnCanvas and uses RGConnectTarget anchors plus fake lines to connect selected server labels across the scene. It is a view-only pattern for teams that need relation-graph to supply the connector layer and viewport control behind a custom HTML dashboard.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºçæ¯ä¸ä¸ªåºå®çã仪表ç飿 ¼çåºç¡è®¾æ½çæ¿ï¼è䏿¯ä¼ ç»çèç¹è¿çº¿å¾ãå¯è§åºæ¯æ¯ä¸ä¸ªå
å« `Dr. Peng Data Center`ã`Tencent Cloud` å `Azure Cloud` çä¸é¢æ¿ææè§å¾ï¼æ¯ä¸ªé¢æ¿å
齿¾ç½®äºå¸¦æç¡¬ä»¶è¯¦æ
çç½è²æå¡å¨æ¸
åå¡çã"},{"name_en":"System Architecture Diagram Editor","name":"ç³»ç»æ¶æå¾ç¼è¾å¨","path":"system-architecture-diagram-editor","desc_en":"This example renders a layered system architecture board from a hardcoded hierarchical dataset while keeping the structural parent-child links hidden. It combines fixed-layout graph loading, custom post-layout group packing, inline node text editing, resize and snap overlays, group toolbar actions, depth presets, palette controls, and image export to create a lightweight architecture editor.","desc_zh":"è¿ä¸ªç¤ºä¾åºäºç¡¬ç¼ç å±çº§æ°æ®æ¸²æåå±ç³»ç»æ¶æçæ¿ï¼å¹¶éèç»ææ§çç¶åè¿çº¿ãå®ç»ååºå®å¸å±å¾å è½½ãèªå®ä¹åå¤çåç»æå¸ãèç¹ææ¬å
èç¼è¾ã缩æ¾ä¸å¸éè¦çå±ãåç»å·¥å
·æ å¨ä½ã深度é¢è®¾ãé
è²æ§å¶åå¾ç导åºï¼å½¢æä¸ä¸ªè½»éæ¶æç¼è¾å¨ã"},{"name_en":"Force Classifier","name":"åç±»å¨","path":"force-classifier","desc_en":"This example generates a synthetic set of user nodes and recluster
1s them with a custom force layout whenever the active grouping field changes. It demonstrates imperative graph loading, slot-based node badges, a floating legend, and shared canvas utilities for interaction-mode switching and image export.","desc_zh":"è¿ä¸ªç¤ºä¾çæä¸ç»æ¨¡æç¨æ·èç¹ï¼å¹¶å¨åç»åæ®µåæ¢æ¶éè¿èªå®ä¹åå¸å±éæ°èç±»ã宿¼ç¤ºäºå½ä»¤å¼å¾å è½½ãåºäºææ§½çèç¹å¾½ç« ãæ¬æµ®å¾ä¾ï¼ä»¥åç¨äºäº¤äºæ¨¡å¼åæ¢åå¾ç导åºçå
±äº«ç»å¸å·¥å
·ã"},{"name_en":"Attribute-Grouped Force Clustering","name":"æå±æ§åç»çå导èç±»","path":"attribute-grouped-force-clustering","desc_en":"This example builds a live force-layout clustering canvas that groups synthetic user nodes by Region, Major, Grade, or Gender. A custom force layouter, timer-based node appends, slot-based node rendering, and shared canvas utilities make it a strong reference for metadata-driven segmentation dashboards.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨å±å导å¸å±å®éªåºï¼å®çè¡¨ç°æ´åä¸ä¸ªå®æ¶å群åºï¼è䏿¯ä¼ ç»çå
³ç³»å¾ãå®ä»å°éåæç¨æ·èç¹å¼å§ï¼éçæ¶é´ä¸æè¿½å æ°ç¨æ·ï¼å¹¶å
许æ¥çè
æ RegionãMajorãGrade æ Gender 对å䏿¹ç¾¤ä½éæ°åç»ãæ ¸å¿ç¹å¨äºï¼å¯è§çèç±»æ¥èªå
±äº«çå
æ°æ®åå¼ï¼è䏿¯æ¥èªå¯è§è¿çº¿ã"},{"name_en":"Character Relationship Graph Filters","name":"人ç©å
³ç³»å¾çé","path":"character-relationship-graph-filters","desc_en":"This example builds a read-only people-relationship viewer with avatar nodes, relation labels, and an external toolbar for gender, alignment, and relation-type filtering. It loads one mocked async dataset into relation-graph, then uses updateNode(...) and updateLine(...) to dim unmatched items so the full network stays visible as context.","desc_zh":"æ¤ç¤ºä¾æå»ºäºä¸ä¸ªåªè¯»ç人ç©å
³ç³»æ¥çå¨ï¼å
å«å导åç»å¸ã头å飿 ¼èç¹ã带æ ç¾çå
³ç³»è¿çº¿ãå
¨å®½è¿æ»¤æ 以åä¸ä¸ªæ¬æµ®è¾
å©çªå£ãå¾è°±ä¼å¡«æ»¡é¡µé¢é«åº¦ï¼ä¿æå®æ´è§è²éåå¯è§ï¼å¹¶å° `teacher-student`ã`relative`ã`collusion` å `report` çå
³ç³»ç´æ¥å±ç¤ºå¨è¿çº¿è·¯å¾ä¸ã","videoImage":true,"meta":{"vip":true}},{"name_en":"Character Relationship Graph Operations","name":"人ç©å
³ç³»å¾äº¤äºæä½","path":"character-relationship-graph-operations","meta":{"vip":true},"desc_en":"This example loads a mocked character relationship network into a force-directed relation-graph scene and renders each person as an avatar circle with labels below. Clicking a node opens a radial action menu for renaming, copying, adding children, creating links, and opening a fixed detail card for live node property edits.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå导åç人ç©å
³ç³»å¾ï¼å®çè¡ä¸ºæ´åä¸ä¸ªè½»é级ç¼è¾å·¥ä½åºï¼è䏿¯åªè¯»çç½ç»è§å¾ãç»å¸ä»¥ä¸ä»½é¢å
åå¤å¥½çè§è²å
³ç³»æ°æ®é为起ç¹ï¼å°æ¯ä¸ªäººæ¸²æä¸ºå形头åèç¹ï¼å¹¶å¨éä¸èç¹ä¸å å ä¸ä¸ªä»¥èç¹ä¸ºä¸å¿çå¾åèåï¼ä»¥åä¸ä¸ªåºå®å¨ä¾§è¾¹çèç¹ç¼è¾é¢æ¿ã"},{"name_en":"Shortest Path Query","name":"æçè·¯å¾æ¥è¯¢","path":"shortest-path-query","meta":{"vip":true},"desc_en":"This example loads a people relationship graph, derives searchable endpoint options from the live relation-graph instance, and lets users query the shortest connection between two selected nodes. It then maps the result back onto the rendered canvas by dimming unrelated nodes and lines while thickening the active route inside a draggable utility window.","desc_zh":"è¿ä¸ªç¤ºä¾å 载人ç©å
³ç³»å¾ï¼ä»å®æ¶ relation-graph å®ä¾ä¸æåå¯æç´¢ç«¯ç¹é项ï¼å¹¶å
è®¸ç¨æ·æ¥è¯¢ä¸¤ä¸ªéå®èç¹ä¹é´çæçè¿æ¥ãéåå®å°ç»ææ å°åç»å¸ï¼å¼±åæ å
³èç¹ä¸è¿çº¿ï¼åæ¶å ç²æ´»å¨è·¯å¾ï¼å¹¶æ¾å¨å¯ææ½å·¥å
·çªä¸æä½ã"},{"name_en":"Graph Editor with Context Menu and Local Save","name":"带å³é®èå忬å°ä¿åçå
³ç³»å¾ç¼è¾å¨","path":"graph-editor-with-context-menu-and-local-save","meta":{"vip":true,"entVip":true},"desc_en":"This example turns relation-graph into a lightweight in-browser graph editor with toolbar-driven node and line creation, target-aware right-click deletion, relayout controls, and local save-and-restore. It also layers shared canvas settings and image export utilities over the same workspace, making it a compact reference for editable graph shells rather than a read-only viewer.","desc_zh":"è¿ä¸ªç¤ºä¾æ relation-graph åæè½»éæµè§å¨å
å¾ç¼è¾å¨ï¼æ¯æå·¥å
·æ å建èç¹/è¿çº¿ãè¯å«ç®æ çå³é®å é¤ãéå¸å±æ§å¶ä¸æ¬å°ä¿åæ¢å¤ãå®è¿å¨åä¸å·¥ä½åºå å å
±äº«ç»å¸è®¾ç½®
1åå¾ç导åºå·¥å
·ï¼éåä½ä¸ºå¯ç¼è¾å¾æ¡æ¶åèèéåªè¯»æ¥çå¨ã"},{"name":"PCBå
ä»¶è¿çº¿ç¼è¾å¨","name_en":"PCB Component Wiring Editor","path":"pcb-component-wiring-editor","meta":{"vip":true,"entVip":true},"desc_en":"This example shows how to build a PCB-style component wiring workspace with fixed-position nodes, a drag-in component palette, and custom chip or part renderers that expose many pin-level connection targets. It also combines multi-selection, selected-wire path editing, runtime canvas settings, and image export on the same relation-graph surface.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½æå»º PCB é£å
ä»¶å¸çº¿å·¥ä½åºï¼èç¹åºå®å®ä½ãç»ä»¶é¢æ¿æå
¥å建ï¼ä»¥åæ´é²å¤å¼èè¿æ¥ç®æ çè¯ç/å
ä»¶èªå®ä¹æ¸²æãå®è¿å¨åä¸ relation-graph ç»å¸ä¸ç»åäºå¤éãéä¸å¯¼çº¿è·¯å¾ç¼è¾ãè¿è¡æ¶ç»å¸è®¾ç½®åå¾ç导åºã"},{"name_en":"Zodiac Compatibility Matcher","name":"æåº§é
对","path":"zodiac-compatibility-matcher","meta":{"vip":true,"isNew":true},"desc_en":"This example turns a force-layout graph into a two-sided zodiac matcher with mirrored card clusters and a hidden summary node. After one sign is selected on each side, the graph reveals a large in-canvas result card and rewires two connectors to the chosen pair.","desc_zh":"è¿ä¸ªç¤ºä¾æå导å¾åæåä¾§æåº§é
对å¨ï¼å·¦å³éåå¡çç°å ä¸ä¸ªéèçæ±æ»èç¹ãå·¦å³åéä¸ä¸ªæåº§åï¼å¾å
伿¾ç¤ºå¤§å°ºå¯¸ç»æå¡ï¼å¹¶æä¸¤æ¡è¿æ¥çº¿éè¿å°æéé
对ã"},{"name_en":"Toys - Clock","name":"å°ç©æ-æ¶é","path":"toys-clock","meta":{"vip":true},"desc_en":"This example builds a self-running clock-like radial graph from one center node, sixty generated second nodes, and a separate moving marker node. It is a compact reference for timer-driven playback, checked-state synchronization, and custom node-slot rendering in a viewer-only relation-graph scene.","desc_zh":"è¿ä¸ªç¤ºä¾ç¨ä¸ä¸ªä¸å¿èç¹ã60 个çæçç§èç¹åä¸ä¸ªç¬ç«ç§»å¨æ è®°èç¹ï¼æå»ºäºä¸ä¸ªèªè¿è¡çæ¶éå¼å¾åå¾ã宿¯è®¡æ¶é©±å¨åæ¾ãé䏿忥åèªå®ä¹èç¹ææ§½æ¸²æå¨åªè¯» relation-graph åºæ¯ä¸çç´§ååèã"},{"name_en":"Timer-Driven Force Layout Parameter Cycling","name":"宿¶åæ¢åå¦åæ°çå导åå¾","path":"timer-driven-force-layout-parameter-cycling","meta":{"vip":true},"desc_en":"This example builds a full-screen force-layout viewer that loads a large inline branching dataset, zooms out, and then alternates force coefficients every three seconds so the cluster keeps re-forming. It uses relation-graph\'s built-in force engine, `setJsonData(...)`, `setZoom(30)`, and `updateOptions(...)` rather than a control panel or custom node rendering.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨å±å导æ¥çå
1¨ï¼å 载大åå
èåæ¯æ°æ®åå
缩å°è§å¾ï¼ç¶åæ¯ 3 ç§åæ¢ä¸æ¬¡åå¦ç³»æ°ï¼è®©ç°ç»ææç»éç»ãå®ä½¿ç¨ relation-graph å
ç½®å弿以å `setJsonData(...)`ã`setZoom(30)`ã`updateOptions(...)`ï¼èéæ§å¶é¢æ¿æèªå®ä¹èç¹æ¸²æã"},{"name":"èç¹å°ºå¯¸è°æ´ä¸æ§ä»¶æ ·å¼","name_en":"Node Resize Controls and Styles","path":"node-resize-controls-and-styles","desc_en":"This example turns a small relation graph into a focused selected-node resizing workspace. It demonstrates how `setEditingNodes([node])`, `RGEditingNodeController`, and `RGEditingResize` work together, and it also shows how the built-in resize overlay can be switched between the default look and two custom SCSS skins.","desc_zh":"è¿ä¸ªç¤ºä¾æå°åå
³ç³»å¾åæèç¦âéä¸èç¹ç¼©æ¾âçå·¥ä½åºã宿¼ç¤º `setEditingNodes([node])`ã`RGEditingNodeController` ä¸ `RGEditingResize` çååæ¹å¼ï¼å¹¶å±ç¤ºå
置缩æ¾è¦çå±å¦ä½å¨é»è®¤å¤è§ä¸ä¸¤å¥èªå®ä¹ SCSS ç®è¤ä¹é´åæ¢ã"},{"name":"åå»ç¼è¾èç¹æå","name_en":"Double click to edit node text","path":"edit-node-text","desc_en":"This example shows a fixed-layout relation-graph that replaces the default node body with a custom inline editor. It demonstrates mode-gated double-click label editing, keyboard and blur commit or cancel behavior, `graphInstance.updateNode()` persistence, and a shared floating panel for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºåºå®å¸å± relation-graphï¼ç¨èªå®ä¹å
èç¼è¾å¨æ¿æ¢é»è®¤èç¹ä¸»ä½ã宿¼ç¤ºäºæ¨¡å¼æ§å¶çå廿¹åãé®çä¸å¤±ç¦æäº¤/åæ¶è¡ä¸ºã`graphInstance.updateNode()` æä¹
åï¼ä»¥åç¨äºç»å¸è®¾ç½®åå¾ç导åºçå
±äº«æ¬æµ®é¢æ¿ã"},{"name":"é¢è®¾å·¥å
·æ å建èç¹ä¸è¿çº¿","name_en":"Preset Toolbar Node and Line Creation","path":"preset-toolbar-node-and-line-creation","meta":{"vip":true},"desc_en":"This example shows a fixed-layout relation-graph editor that uses a view-mounted preset palette to drag-create styled nodes and click-create styled lines. It also demonstrates mixed node rendering through a custom card slot, active creation-state feedback, a shared floating settings panel, and image export helpers.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºåºå®å¸å± relation-graph ç¼è¾å¨ï¼éè¿è§å¾å
æè½½çé¢è®¾é¢æ¿ææ½åå»ºæ ·å¼èç¹ãç¹å»åå»ºæ ·å¼è¿çº¿ãå®è¿æ¼ç¤ºäºåºäºèªå®ä¹å¡çææ§½çæ··åèç¹æ¸²æãåå»ºç¶æåé¦ãå
±äº«æ¬æµ®è®¾ç½®é¢æ¿åå¾ç导åºè¾
å©ã"},{"name":"æ¹éç¼è¾éä¸èç¹","name_en":"Batch Edit Selected Nodes","path":"batch-edit-selected-nodes","meta":{"vip":true},"desc_en":"A centered relation graph is turned into a lightweight node maintenance workspace where the current editing-node set drives multi-select, resize handles, batch recolor actions, and bulk node removal. A shared floating overlay also exposes canvas interaction settings and image export without changing the example\'s main selection-driven editing pattern.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ä¸ä¸ªå±
ä¸ç relation graph ä¹ä¸æå»ºäºä¸ä¸ªè½»é级çèç¹ç»´æ¤å·¥ä½åºãç¨æ·ä¼çå°ä¸ä¸ªä½äºç¹ç¶å
¨é«ç»å¸ä¸çå°åå¾è°±ãä¸ä¸ªæ¬æµ®è¾
å©çªå£ã两个å¨å è½½æ¶é¢éä¸çèç¹ãå½åéåºä¸çå°ºå¯¸è°æ´ææï¼ä»¥åä¸ä¸ªåé 卿éèç¹ä¸æ¹çç´§åå·¥å
·æ ã"},{"name":"èç¹ç¯ç»å¿«æ·æä½æ ","name_en":"Around-Node Quick Actions","path":"around-node-quick-actions","meta":{"vip":true},"desc_en":"This example shows how to mount custom quick-action trays around the nodes that are currently in relation-graph\'s editing state. It combines seeded selection, modifier-based multi-select, marquee retargeting, a dotted editor-style canvas, and a floating settings window, while keeping the action chips themselves as placement-focused placeholders.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªè½»é级å¾ç¼è¾å·¥ä½åºï¼å¨å½åå¤äº relation-graph ç¼è¾ç¶æçèç¹å¨å´æè½½äºèªå®ä¹å¿«æ·æä½æçã页é¢å±ç¤ºäºä¸ä¸ªå
¨é«çç¹ç¶ç»å¸ãä¸ä¸ªæµ®å¨è¾
å©çªå£ï¼ä»¥åä½äºç¼è¾èç¹ä¸æ¹ã䏿¹ã左侧ãå³ä¾§åå个è§è½çç½è²æä½ç»ã"},{"name":"éä¸èç¹å®åè¿çº¿å建","name_en":"Selected Node Directional Line Creation","path":"selected-node-directional-line-creation","meta":{"vip":true},"desc_en":"This example shows a focused graph authoring pattern where selecting one node reveals directional chips for creating new outgoing connections. It uses relation-graph\'s editing state, around-node overlay rendering, and interactive line creation flow to save new edges without building a full diagram editor shell.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºä¸ç§èç¦çå¾è°±å使¨¡å¼ï¼éä¸èç¹åæ¾ç¤ºæ¹åè¯çï¼ç¨äºå建æ°çåºåè¿æ¥ãå®å©ç¨ relation-graph çç¼è¾ç¶æãèç¹å¨è¾¹è¦ç屿¸²æå交äºå¼è¿çº¿å建æµç¨ï¼å¨ä¸æå»ºå®æ´ç¼è¾å¨å£³å±çåæä¸ä¿åæ°è¾¹ã"},{"name":"éä¸èç¹å建è¿çº¿å¹¶éæ©ç®æ 端ç¹ä½ç½®","name_en":"Selected Node Line Creation With Target Endpoint Selection","path":"selected-node-line-creation-with-target-endpoint-selection","meta":{"vip":true},"desc_en":"This example shows a compact graph authoring workflow where selecting one node reveals directional chips for launching a new outgoing connection. It combines a custom around-node toolbar with relation-graph\'s built-in connect overlay, so users can start from a preset source side and then choose where the new line attaches on the target node before it is saved.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºç´§åçå¾è°±å使µç¨ï¼éä¸èç¹åæ¾ç¤ºæ¹åè¯ç以åèµ·æ°åºåè¿æ¥ã宿èªå®ä¹èç¹å¨è¾¹å·¥å
·æ ä¸ relation-graph å
ç½®è¿çº¿è¦çå±ç»åï¼ä½¿ç¨æ·å¯å
æå®æºä¾§ï¼åéæ©ç®æ èç¹ä¸çè¿æ¥ç«¯ç¹ä½ç½®åä¿åæ°çº¿ã"},{"name":"è¿çº¿ç«¯ç¹ç¼è¾","name_en":"Line Endpoint Editing","path":"line-endpoint-editing","meta":{"vip":true},"desc_en":"A compact relation-graph editor that lets users click an existing edge and drag its start or end handle to a different node. The demo keeps line-text and path editing disabled, adds toast feedback around the vertex-move lifecycle, and exposes canvas settings plus image export from a floating helper window.","desc_zh":"è¿æ¯ä¸ä¸ªç´§å relation-graph ç¼è¾å¨ï¼ç¨æ·å¯ç¹å»å·²æè¿çº¿å¹¶æå¨èµ·ç¹æç»ç¹ææå°å
¶ä»èç¹ã示ä¾ç¦ç¨äºçº¿æååè·¯å¾ç¼è¾ï¼å¨é¡¶ç¹ç§»å¨çå½å¨æä¸æä¾ toast åé¦ï¼å¹¶éè¿æ¬æµ®è¾
å©çªæä¾ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"è¿çº¿æ ç¾ä¸ç«¯ç¹ç¼è¾","name_en":"Line Label and Endpoint Editing","path":"line-label-and-endpoint-editing","meta":{"vip":true},"desc_en":"This example shows how to select an existing line, edit its label text, drag the label to a new position, and reconnect its endpoints with relation-graph\'s built-in editing controllers. It also demonstrates selection-state handoff, runtime canvas settings, image export, and toast feedback inside a compact editor-style workspace.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½éä¸å·²æè¿çº¿ãç¼è¾å
¶æ ç¾ææ¬ãæ
1æ½æ ç¾å°æ°ä½ç½®ï¼å¹¶åå© relation-graph å
ç½®ç¼è¾æ§å¶å¨éè¿ç«¯ç¹ãå®è¿æ¼ç¤ºäºé䏿忢ãè¿è¡æ¶ç»å¸è®¾ç½®ãå¾ç导åºå toast åé¦ï¼å¨ç´§åç¼è¾å·¥ä½åºå
宿ã"},{"name":"交äºå¼è¿çº¿è·¯å¾ç¼è¾","name_en":"Interactive Line Path Editing","path":"interactive-line-path-editing","meta":{"vip":true},"desc_en":"This example shows how to click an existing line and reshape its route with relation-graph\'s built-in line editing overlay. It also coordinates node selection, canvas clearing, runtime canvas settings, and toast feedback inside a compact editor-style workspace.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½ç¹å»å·²æè¿çº¿ï¼å¹¶éè¿ relation-graph å
ç½®è¿çº¿ç¼è¾è¦çå±éå¡è·¯å¾ãå®è¿å¨ç´§åç¼è¾å¼å·¥ä½åºä¸åè°äºèç¹éä¸ãç»å¸æ¸
空ãè¿è¡æ¶ç»å¸è®¾ç½®å toast åé¦ã"},{"name":"éä¸è¿çº¿èªå®ä¹å·¥å
·æ ","name_en":"Custom Selected Line Toolbar","path":"custom-selected-line-toolbar","meta":{"vip":true},"desc_en":"This example shows how to attach a custom floating toolbar to the currently selected line in a relation-graph canvas. The toolbar follows the line\'s live geometry and lets users change line color, shape, and width or remove the line, while the surrounding helper window also exposes canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½æèªå®ä¹æ¬æµ®å·¥å
·æ éçå°å½åéä¸ç relation-graph è¿çº¿ä¸ãå·¥å
·æ ä¼è·éè¿çº¿å®æ¶å ä½ä½ç½®ï¼å¯ä¿®æ¹çº¿è²ã线形ã线宽æå é¤è¿çº¿ï¼å¤å´è¾
å©çªè¿æä¾ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name":"ææ½èç¹å¯¹é½åè线","name_en":"Node Drag Alignment Guides","path":"node-drag-alignment-guides","meta":{"vip":true},"desc_en":"This example shows how to mount relation-graph\'s alignment-guide overlay so dragged nodes can display temporary reference lines. It also combines an optional adsorption toggle, selection-state coordination, runtime canvas settings, and image export inside a compact editor-style workspace.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½æè½½ relation-graph ç对é½åè线è¦çå±ï¼ä½¿ææ½èç¹æ¶æ¾ç¤ºä¸´æ¶åè线ãå®è¿ç»åå¯éå¸éå¼å
³ãé䏿ååãè¿è¡æ¶ç»å¸è®¾ç½®åå¾ç导åºï¼å½¢æç´§åç¼è¾å¼å·¥ä½åºã"},{"name":"ç»å¸åæ å°º","name_en":"Canvas Coordinate Ruler","path":"canvas-coordinate-ruler","meta":{"vip":true},"desc_en":"A full-screen relation-graph viewer that overlays top and left SVG rulers on the visible canvas. It composes a center cluster and a right-side tree with separate layout passes, then converts viewport coordinates back into canvas coordinates so the ruler stays accurate while users pan or zoom.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨å± relation-graph æ¥çå¨ï¼å¹¶å¨å
¶ä¸å å äºä¸¤ä¸ªé¢å¤çå·¥ä½åºè¾
å©å±ï¼ä½äºé¡¶é¨å左侧边ç¼çå¶å¾é£æ ¼æ å°ºï¼ä»¥åæ¬æµ®å¨ç»å¸ä¸æ¹çè¾
å©çªå£ã徿¬èº«å¨åä¸åç»å¸ä¸ç»åäºä¸¤ç§ä¸åçç»æï¼ä¸ä¸ªç¯å½¢ä¸å¿ç°ï¼ä»¥åå
¶å³ä¾§ç䏿£µç¬ç«æ ã"},{"name":"å¯è°å¾è°±ç¼©ç¥å¾ï¼é¹°ç¼ï¼","name_en":"Adjustable Graph Minimap","path":"adjustable-graph-minimap","meta":{"vip":true},"desc_en":"This example shows how to mount `RGMiniView` as a graph-overlay minimap on a large force-layout viewer and control its corner placement, width, and height at runtime. A shared floating helper window adds canvas mode switching and image export, while randomized node sizes, shapes, and colors make the overview visually informative.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨å±å导å¸å±å¾æ¥çå¨ï¼å¹¶å§ç»æ¾ç¤ºä¸ä¸ªç¼©ç¥å¾è¦çå±ãç»å¸è¢«ææè®¾è®¡å¾ç¸å½ç¹å¿ï¼ä¸ç¾å¤ä¸ªèç¹æ£å¸å¨æ·±è²çç¹ç¶èæ¯ä¸ï¼èç¹ç大å°åå½¢ç¶åä¸ç¸åï¼è缩ç¥å¾å§ç»è¦çå¨å¾ä¹ä¸ï¼å æ¤ç¨æ·å¨å¯¼èªæ¶ä¹è½æç»ææ¡æ´ä½ç»æã"},{"name":"èç¹ææ½ç¢°æä¸ææ¾è§å","name_en":"Node Drag Collision and Drop Rules","path":"node-drag-collision-drop-rules","meta":{"vip":true},"desc_en":"This example shows a compact drag-rule workspace where node overlap is interpreted as an allowed drop, a rejected drop, or a protected collision. It combines fixed-layout graph data, drag lifecycle callbacks, inline node policy toggles, and release-time line creation to demonstrate collision-aware authoring without a full editor shell.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºä¸ä¸ªç´§åææ½è§åå·¥ä½åºï¼èç¹éå å¯è¢«è§£é为å
è®¸ææ¾ãæç»ææ¾æåä¿æ¤ç¢°æãå®ç»ååºå®å¸å±å¾æ°æ®ãææ½çå½å¨æåè°ãèç¹å
èçç¥å¼å
³ï¼ä»¥åéæ¾æ¶å建è¿çº¿ï¼æ¼ç¤ºäºæ é宿´ç¼è¾å¨å£³å±ç碰ææç¥å使µç¨ã"},{"name":"èç¹å±é¨ææ½ææ","name_en":"Partial Node Drag Handles","path":"partial-node-drag-handles","meta":{"vip":true},"desc_en":"This example loads a fixed-layout graph, disables whole-node dragging, and restores movement only from slotted subregi
1ons marked with `rg-node-drag-handler`. It mixes header-strip and move-button handle variants through node metadata, while a shared floating helper panel exposes wheel mode, canvas drag mode, and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å è½½åºå®å¸å±å¾ï¼ç¦ç¨æ´èç¹ææ½ï¼ä»
å
许ä»å¸¦ `rg-node-drag-handler` æ è®°çææ§½ååºåæå¨ãå®éè¿èç¹å
æ°æ®æ··åâæ é¢æ¡ææ½âåâç§»å¨æé®ææ½âä¸¤ç§æææ ·å¼ï¼å¹¶å¨å
±äº«æ¬æµ®è¾
å©é¢æ¿ä¸æä¾æ»è½®æ¨¡å¼ãç»å¸ææ½æ¨¡å¼åå¾ç导åºã"},{"name":"å¾è°±æ¤ééåä¸åå²è®°å½","name_en":"Graph Undo/Redo History","path":"graph-undo-redo-history","meta":{"vip":true},"desc_en":"This example shows a compact editable relation-graph canvas with snapshot-based undo, redo, and direct history jumping. It captures graph state after supported edits, exposes both keyboard shortcuts and floating history controls, and restores older versions by rebuilding nodes and lines from serialized graph JSON.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºä¸ä¸ªç´§åå¯ç¼è¾ relation-graph ç»å¸ï¼æ¯æåºäºå¿«ç
§çæ¤éãéåååå²è·³è½¬ãå®ä¼å¨æ¯æçç¼è¾åè®°å½å¾ç¶æï¼æä¾é®çå¿«æ·é®åæ¬æµ®å岿§ä»¶ï¼å¹¶éè¿åºååå¾ JSON é建èç¹ä¸è¿çº¿ä»¥æ¢å¤æ§çæ¬ã"},{"name":"æç»çº¿æ¡çæå¾è°±èç¹","name_en":"Freehand Strokes to Graph Nodes","path":"freehand-strokes-to-graph-nodes","meta":{"vip":true},"desc_en":"This example overlays a freehand drawing canvas on top of relation-graph and converts each finished stroke into a new editable graph node. It demonstrates zoom-aware stroke normalization, custom node rendering for stored SVG path data, and selection-based resize and delete workflows after insertion.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ relation-graph ä¸å å æç»ç»å¸ï¼å¹¶å°æ¯æ¡å®æçç¬ç»è½¬æ¢ä¸ºæ°çå¯ç¼è¾å¾èç¹ã宿¼ç¤ºäºä¸ç¼©æ¾èå¨çç¬ç»å½ä¸åãç¨äºåå¨ SVG è·¯å¾æ°æ®çèªå®ä¹èç¹æ¸²æï¼ä»¥åæå
¥åçåºäºéä¸æç¼©æ¾ä¸å 餿µç¨ã"},{"name":"ææ æ±æ»å
³ç³»å¾ç¼è¾å¨","name_en":"Metric Rollup Graph Editor","path":"metric-rollup-graph-editor","desc_en":"This example builds a compact graph editor for value and summary nodes where users can create nodes and links, edit numbers inline, and recalculate rollup totals from incoming relationships. It combines slot-based node rendering, guided authoring tools, optional tree relayout, and a shared settings or export window on one dotted full-screen canvas.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªç´§åå¾ç¼è¾å¨ï¼é¢åæ°å¼èç¹ä¸æ±æ»èç¹ï¼å¯å建èç¹åè¿çº¿ãå
èç¼è¾æ°åï¼å¹¶æ ¹æ®å
¥åå
³ç³»éç®æ±æ»å¼ãå®å¨åä¸å¼ ç¹ç¶å
¨å±ç»å¸ä¸ç»åææ§½èç¹æ¸²æãå¼å¯¼å¼åä½å·¥å
·ãå¯éæ éå¸å±ï¼ä»¥åå
±äº«è®¾ç½®/导åºçªå£ã"},{"name":"å¾å½¢ç¼è¾å·¥ä½å°","name_en":"Diagram Editor Workbench","path":"diagram-editor-workbench","meta":{"vip":true,"entVip":true},"desc_en":"This example turns relation-graph into a full diagram editor workbench with creation tools, contextual node and line editing, grouping, container nodes, layout switching, and local history. It is a strong reference for teams that need one integrated editing shell rather than a narrow single-feature demo.","desc_zh":"è¿ä¸ªç¤ºä¾æ relation-graph æé æå®æ´å¾å½¢ç¼è¾å·¥ä½å°ï¼å
å«å建工å
·ãä¸ä¸æèç¹/è¿çº¿ç¼è¾ãåç»ã容å¨èç¹ãå¸å±åæ¢åæ¬å°åå²ãå®é常éåä½ä¸ºéè¦âä¸ä½åç¼è¾å£³å±âçå¢éåèï¼èéååè½çªç¤ºä¾ã"},{"name_en":"Connect Targets Across Canvas Elements, Nodes, and Grid Items","name":"ç»å¸å
ç´ ãèç¹ä¸ç½æ ¼é¡¹è¿æ¥ç®æ ","path":"connect-targets-across-canvas-node-and-grid","desc_en":"This example builds a fixed-layout playground where RGConnectTarget is attached to canvas widgets, whole nodes, internal node ports, and a reflowing grid of DOM cards in the same scene. It seeds representative fake lines, intercepts user-created connections with onLineBeCreated, and shows a toast instead of persisting new lines automatically.","desc_zh":"æ¬ç¤ºä¾æå»ºçæ¯ä¸ä¸ªåºå®å¸å±ç connect-target ç»ä¹ åºï¼è䏿¯ä¸ä¸ªé¢åç¹å®ä¸å¡é¢åçå¾ãè¿ä¸ªåºæ¯å¨åä¸ä¸ª `RelationGraph` å®ä¾ä¸æ··åäºä¸¤ä¸ªç¬ç«çç»å¸ç»ä»¶ã两个已å®ä½çå¾èç¹ãèç¹å
é¨ç«¯å£ï¼ä»¥åä¸ç»å¯è¿æ¥çç½æ ¼å¡çã"},{"name_en":"Element Lines","name":"HTMLå
ç´ è¿çº¿","path":"element-lines","desc_en":"This example renders a list of interest-group cards and a map of matching markers inside `RGSlotOnCanvas`, then redraws one animated fake line between the selected pair. It is a focused reference for connecting ordinary HTML elements with relation-graph rather than connecting graph nodes.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ `RGSlotOnCanvas` 䏿¸²æå
´è¶£å°ç»å¡çå表åå°å¾æ è®°ï¼å¹¶å¨éä¸é
对ä¹é´éç»ä¸æ¡å¨ç»åè¿çº¿ã宿¯âç¨ relation-graph è¿æ¥æ®é HTML å
ç´ âèéâè¿æ¥å¾èç¹âçèç¦åèã"},{"name_en":"Compare Element-to-Node and Element-to-Element Links","name":"对æ¯å
ç´ å°èç¹ä¸å
ç´ å°å
ç´ è¿çº¿","path":"compare-element-to-node-and-element-to-element-links","desc_en":"This example compares two connector destinations for the same selected DOM list item. One fake line terminates on a real relation-graph node and the other terminates on a plain HTML marker, using the same coordinates and selection flow across both panels.","desc_zh":"è¿ä¸ªç¤ºä¾å¨å个 relation-graph canvas å
æå»ºäºä¸ä¸ªä¸æ 对æ¯é¢æ¿ã左侧颿¿å°ä½ç½®æ è®°æ¾ç¤ºä¸ºå å å¨å°å¾ä¸ççå®å¾èç¹ï¼ä¸é´é¢æ¿æ¾ç¤ºå¯éæ©çå
´è¶£å°ç»å¡çï¼å³ä¾§é¢æ¿åå°ç¸åçä½ç½®æ¾ç¤ºä¸ºæ®é HTML æ è®°ãå½ç¨æ·éä¸æä¸ªå°ç»æ¶ï¼ç¤ºä¾ä¼ä»åä¸ä¸ªåè¡¨é¡¹éæ°ç»å¶ä¸¤æ¡å¸¦å¨ç»çè¿æ¥çº¿ï¼ä¸æ¡è¿å°å·¦ä¾§çå¾èç¹ï¼å¦ä¸æ¡è¿å°å³ä¾§ç HTML æ è®°ã"},{"name_en":"Connect List Items to Location Nodes","name":"è¿æ¥å表项ä¸å°ç¹èç¹","path":"connect-list-items-to-location-nodes","desc_en":"This example connects a list of interest groups to fixed-position location nodes on a
1school map. It uses RGConnectTarget on the list side, real graph nodes on the map side, and one animated fake line that is replaced whenever the active group changes.","desc_zh":"è¿ä¸ªç¤ºä¾å¨æ ¡åå°å¾ä¹ä¸æå»ºäºä¸ä¸ªä½ç½®åé
è§å¾ãç»å¸å·¦ä¾§æ¾ç¤ºåºå®ä½ç½®çå°å¾å¾éï¼å³ä¾§æ¾ç¤ºå
å¼ å
´è¶£å°ç»å¡çãç³»ç»å§ç»ä½¿ç¨ä¸æ¡å¸¦å¨ç»çè¿æ¥çº¿æ¥é«äº®å½åéä¸çå表项ä¸å
¶å¹é
å°å¾ä½ç½®ä¹é´çå
³ç³»ã"},{"name_en":"Connect Lines to Node Content Targets","name":"èç¹å
å®¹ç®æ ç¹è¿çº¿","path":"connect-lines-to-node-content-targets","desc_en":"This example renders four fixed-position table panels and connects them with curved fake lines that terminate on specific headers or cells inside the node content. It uses RGSlotOnNode, RGConnectTarget, and mount-time graph initialization to demonstrate precise endpoint placement inside custom node bodies.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªç±å个ç©å½¢é¢æ¿ç»æçå°ååºå®ä½ç½®å
³ç³»è§å¾ãæ¯ä¸ªé¢æ¿é½ä¸æ¯ä½¿ç¨é»è®¤å¾èç¹æ¥æ¸²æï¼èæ¯ä½¿ç¨èªå®ä¹è¡¨æ ¼æ è®°è¿è¡æ¸²æï¼å¯è§è¿æ¥çº¿ä¹ä¸æ¯è½å¨èç¹å¤è¾¹æ¡ä¸ï¼èæ¯è½å¨è¿äºè¡¨æ ¼å
é¨çç¹å®è¡¨å¤´æåå
æ ¼ä¸ã"},{"name_en":"Jin Yong Martial Sect Map Browser","name":"é庸æ¦ä¾ 鍿´¾å°å¾è卿µè§","path":"jin-yong-sect-map-browser","meta":{"isNew":true},"desc_en":"This example overlays fixed-position martial-sect pins on a bundled China SVG and connects a selected sidebar card to one or many pins with fake lines. The same selection state also drives a detail panel, making it a reference for map-backed master-detail browsing rather than geographic analysis or graph editing.","desc_zh":"è¿ä¸ªç¤ºä¾å¨å
ç½®ä¸å½ SVG å°å¾ä¸å å åºå®ä½ç½®ç鍿´¾æ è®°ç¹ï¼å¹¶ç¨åè¿çº¿æä¾§è¾¹æ éä¸çå¡çè¿æ¥å°ä¸ä¸ªæå¤ä¸ªæ è®°ãç¸åçéä¸ç¶æè¿ä¼é©±å¨è¯¦æ
颿¿ï¼å æ¤å®æ´éåä½ä¸ºå°å¾åºå¾ä¸ç主ä»è卿µè§åèï¼èéå°çåææå¾ç¼è¾ç¤ºä¾ã"},{"name_en":"World Map Graph Overlay with Snapshots","name":"ä¸çå°å¾å
³ç³»å¾å å ä¸å¿«ç
§","path":"world-map-graph-overlay-snapshots","meta":{"vip":true,"isNew":true},"desc_en":"A fixed-layout relation-graph example that overlays authored node coordinates and animated links on a bundled world SVG. It also adds a draggable utility window for snapshot save and replay, shared canvas settings, and image export.","desc_zh":"è¿æ¯ä¸ä¸ªåºå®å¸å± relation-graph 示ä¾ï¼å¨å
ç½®ä¸ç SVG ä¸å å æå·¥èç¹åæ åå¨ç»è¿çº¿ãå®è¿å å
¥å¯ææ½å·¥å
·çªï¼ç¨äºå¿«ç
§ä¿åä¸åæ¾ï¼å¹¶æä¾å
±äº«ç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name_en":"US Map Graph Overlay and Snapshots","name":"ç¾å½å°å¾å
³ç³»å¾å å ä¸å¿«ç
§","path":"us-map-graph-overlay-snapshots","meta":{"vip":true,"isNew":true},"desc_en":"This example overlays a small fixed-layout relation graph on a bundled SVG map of the United States. It saves live graph snapshots from the current node and link state, replays them from a floating panel, and exposes shared canvas settings and image export controls.","desc_zh":"è¿ä¸ªç¤ºä¾å¨å
ç½®ç¾å½ SVG å°å¾ä¸å å ä¸ä¸ªå°ååºå®å¸å±å
³ç³»å¾ãå®å¯ä»å½åèç¹ä¸è¿çº¿ç¶æä¿å宿¶å¿«ç
§ï¼å¹¶å¨æ¬æµ®é¢æ¿ä¸åæ¾ï¼åæ¶æä¾å
±äº«ç»å¸è®¾ç½®ä¸å¾çå¯¼åºæ§å¶ã"},{"name":"åæ¥è¿½å å¾è°±æ°æ®","name_en":"Append Graph Data in Stages","path":"append-graph-data-in-stages","videoImage":true,"meta":{"vip":true},"desc_en":"This example initializes a centered relation-graph view with one inline dataset and then grows it by appending two more `RGJsonData` fragments through gated overlay buttons. It also reuses a draggable helper window for runtime canvas settings and image export, making it a focused reference for deterministic multi-step graph reveal flows.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æäºä¸ä¸ªå±
ä¸çå
³ç³»å¾è°±ï¼å®ä»ä¸ä¸ªä¸å¿èç¹åä¸å°ç»å·²è¿æ¥èç¹å¼å§ãä¸ä¸ªæµ®å¨è¾
å©çªå£å
è®¸ç¨æ·å¨ä¸æ¿æ¢å½åå·²æ¾ç¤ºå¾è°±çåæä¸ï¼ç»§ç»è¿½å 第äºå±æ°æ®ï¼å追å 第ä¸å±æ°æ®ã"},{"name":"å±å¼èç¹æ¶æéå è½½åèç¹","name_en":"Lazy Load Tree Children on Expand","path":"lazy-load-tree-children-on-expand","videoImage":true,"meta":{"vip":true},"desc_en":"A top-down tree demo that lazy-loads child nodes when a collapsed branch expands. It appends the returned graph fragment into the live relation-graph instance, reruns layout, and shows both page-level and node-level loading feedback.","desc_zh":"è¿æ¯ä¸ä¸ªèªä¸è䏿 å¾ç¤ºä¾ï¼å¨æå 忝å±å¼æ¶æéæå è½½åèç¹ã宿è¿åç徿°æ®ç段追å å°å®æ¶ relation-graph å®ä¾ä¸ï¼éæ°æ§è¡å¸å±ï¼å¹¶åæ¶å±ç¤ºé¡µé¢çº§ä¸èç¹çº§å è½½åé¦ã"},{"name_en":"Managed Tree Branch Growth with Reapply","name":"å¤é¨ç®¡çæ æ°æ®ç墿¯ä¸éåºç¨","path":"managed-tree-branch-growth-reapply","meta":{"vip":true},"desc_en":"This example shows how to keep a nested tree outside relation-graph, grow branches through inline plus-button placeholders, flatten the updated tree, and reapply it after each edit. It is a focused reference for guided branch creation on app-managed data, with automatic relayout, viewport fitting, and shared canvas settings and export helpers.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨ relation-graph å¤é¨ç»´æ¤åµå¥æ æ°æ®ï¼éè¿å
èå å·å ä½èç¹æ©å±åæ¯ï¼æå¹³åæ´æ°åçæ ï¼å¹¶å¨æ¯æ¬¡ç¼è¾åéæ°åºç¨ã宿¯åºäºåºç¨ä¾§æ°æ®ç®¡ççå¼å¯¼å¼åæ¯å建åèï¼å
å«èªå¨éå¸å±ãè§å£éé
ï¼ä»¥åå
±äº«ç»å¸è®¾ç½®
1å导åºå·¥å
·ã"},{"name":"å¶åèç¹å±å¼æé®ä¸åèç¹æéå è½½","name_en":"Leaf Expand Buttons with Lazy Child Loading","path":"leaf-expand-button-lazy-loading","meta":{"vip":true},"desc_en":"A relation-graph demo that shows how leaf nodes can display built-in expand buttons before they have children. Expanding those placeholders triggers a one-shot simulated async load, appends new nodes and lines with the graph instance API, and reruns tree layout so the new branch settles into place.","desc_zh":"è¿æ¯ä¸ä¸ª relation-graph 示ä¾ï¼å±ç¤ºå¶åèç¹å¨å°æ åèç¹æ¶ä¹å¯æ¾ç¤ºå
ç½®å±å¼æé®ãç¹å»å±å¼ä¼è§¦å䏿¬¡æ§æ¨¡æå¼æ¥å è½½ï¼éè¿å¾å®ä¾ API è¿½å æ°èç¹ä¸è¿çº¿ï¼å¹¶éè·æ å¸å±è®©æ°åæ¯å½ä½ã","videoImage":true},{"name":"å³é®èåç¼è¾èç¹ä¸è¿çº¿","name_en":"Context-menu Node and Line Editing","path":"context-menu-node-and-line-editing","meta":{"vip":true},"desc_en":"This example turns relation-graph\'s right-click event into a compact editing workflow for adding nodes, starting new lines from existing nodes, and deleting targeted objects. It uses a view-layer menu overlay, coordinate conversion for canvas insertion, runtime graph mutation APIs, manual relayout, and shared canvas settings or image export utilities.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ä¸ä¸ªå
¨å±ç½è²å·¥ä½åºä¸æå»ºäºä¸å¼ å°åæ å½¢å¾ï¼å¹¶å¨å
¶ä¸æ·»å äºä¸ä¸ªèªå®ä¹å³é®èåãç¨æ·å¯ä»¥å¨ç©ºç½ç»å¸åºåå³é®ä»¥æ·»å èç¹ï¼å¨ç°æèç¹ä¸å³é®ä»¥å¼å§å建æ°çè¿çº¿ï¼ä¹å¯ä»¥å¨èç¹æè¿çº¿ä¸å³é®ä»¥å é¤è¯¥ç¹å®å¯¹è±¡ãä¸ä¸ªæµ®å¨è¾
å©çªå£ä¼ä¸ç´å¯ç¨ï¼ç¨äºéæ°å¸å±ãè°æ´ç»å¸è®¾ç½®ä»¥å导åºå¾çã"},{"name":"å¤ä¸ªå
³ç³»ç½","name_en":"Multiple Relationship Networks","path":"multi-group","desc_en":"This example loads one static RGJsonData payload that contains several disconnected relationship groups plus two isolated nodes into a single RelationGraph canvas. It automatically centers and fits the scene on mount, making it a compact reference for fragmented graph data displayed without extra relayout or editing logic.","desc_zh":"è¿ä¸ªç¤ºä¾æä¸ä»½å
å«å¤ä¸ªä¸è¿éå
³ç³»ç»å两个å¤ç«èç¹çéæ RGJsonDataï¼å è½½å°åä¸ RelationGraph ç»å¸ãå®å¨æè½½æ¶èªå¨å±
ä¸å¹¶éé
è§å¾ï¼æ¯âç¢çå徿°æ®æ é¢å¤éå¸å±æç¼è¾é»è¾å±ç¤ºâçç´§ååèã"},{"name":"å¤ä¸ªç¬ç«åç³»ç»å
³ç³»ç½","name_en":"Multiple Disconnected Subsystem Networks","path":"multiple-disconnected-subsystem-networks","desc_en":"This example loads one inline `RGJsonData` payload that contains several disconnected clusters and two isolated nodes into a single relation-graph canvas. It uses `RGHooks.useGraphInstance()` for mount-time `setJsonData(...)`, then centers and fits the viewport while applying tree layout, curved gray lines, and on-path labels to keep fragmented data readable.","desc_zh":"è¿ä¸ªç¤ºä¾å°ä¸ä»½å
å«å¤ä¸ªä¸è¿éç°å两个å¤ç«èç¹çå
è `RGJsonData` å è½½å°åä¸ relation-graph ç»å¸ãå®ä½¿ç¨ `RGHooks.useGraphInstance()` å¨æè½½æ¶è°ç¨ `setJsonData(...)`ï¼å¹¶æ§è¡å±
ä¸ä¸è§å£éé
ï¼åæ¶åºç¨æ å¸å±ãç°è²æ²çº¿è¿çº¿åè·¯å¾è´´åæ ç¾ä»¥æåç¢çåæ°æ®å¯è¯»æ§ã"},{"name":"å离å
³ç³»ç»èªå¨éå¸å±","name_en":"Disconnected Multi-Group Force Relayout","path":"disconnected-multi-group-force-relayout","desc_en":"A full-height viewer that loads several disconnected relationship groups and isolated nodes into one canvas, centers the overview, and then switches the same graph to a force layout after a short delay. It is a focused reference for staged first-frame presentation plus post-load separation of fragmented clusters with minimal styling and no custom control panel.","desc_zh":"è¿æ¯ä¸ä¸ªå
¨é«æ¥çå¨ï¼å
å°å¤ä¸ªä¸è¿éå
³ç³»ç»åå¤ç«èç¹å è½½å°åä¸ç»å¸å¹¶å±
䏿»è§ï¼åå¨çæå»¶æ¶ååæ¢ä¸ºå导å¸å±ã宿¯âé¦å¸§ç¨³å®å±ç¤º + å è½½åå离ç¢çç°âçèç¦åèï¼æ ·å¼æç®ä¸æ èªå®ä¹æ§å¶é¢æ¿ã"},{"name":"å¤ç¹æè
没æå
³ç³»çèç¹","name_en":"Isolated Nodes","path":"show-single-nodes","desc_en":"This example shows how to keep visually isolated nodes inside a relation-graph `circle` layout without drawing extra visible relationships. It starts from a small inline `RGJsonData` payload, derives a root from the first node, adds hidden helper edges with `opacity: 0`, and then loads, centers, and fits the graph on mount.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨ relation-graph ç `circle` å¸å±ä¸ä¿çè§è§ä¸å¤ç«çèç¹ï¼
1èä¸ç»å¶é¢å¤å¯è§å
³ç³»ãå®ä»å°åå
è `RGJsonData` åºåï¼ä»¥é¦èç¹æ¨å¯¼æ ¹èç¹ï¼æ·»å `opacity: 0` çéèè¾
å©è¾¹ï¼åå¨æè½½æ¶å è½½ãå±
ä¸å¹¶éé
å¾è°±ã"},{"name":"å导åå¸å±ä¸éè¿éèè¾
å©çº¿ä¿çå¤ç¹","name_en":"Force Layout Isolated Nodes with Hidden Helper Lines","path":"force-layout-isolated-nodes-with-hidden-helper-lines","desc_en":"This example shows how to keep isolated or otherwise disconnected nodes present in a relation-graph force layout. It derives a root from the first node, adds hidden helper lines before loading, and then centers and fits the resulting graph in a full-height viewer.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨ relation-graph å导å¸å±ä¸ä¿çå¤ç«æå
¶ä»ä¸è¿éèç¹ãå®ä»é¦èç¹æ¨å¯¼æ ¹èç¹ï¼å¨å è½½åæ·»å éèè¾
å©è¿çº¿ï¼ç¶åå¨å
¨é«æ¥çå¨ä¸å±
ä¸å¹¶éé
ç»æå¾ã"},{"name":"åå½¢å¸å±ä¸éè¿éèè¾
å©çº¿ä¿çå¤ç¹å¹¶è®¾ç½®ç»¿è²ç´çº¿","name_en":"Circle Layout Isolated Nodes with Green Straight Links","path":"circle-layout-isolated-nodes-with-green-straight-links","desc_en":"This example shows how to keep isolated-looking nodes visible in a relation-graph `circle` layout by deriving a root from the first node and injecting hidden helper edges before load. It also makes visible link styling part of the lesson by using straight green default lines, then centers and fits the graph automatically on mount.","desc_zh":"è¯¥ç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«åº¦ç relation-graph æ¥çå¨ï¼å°ä¸ç»ç¨çæ°æ®æ¾å
¥åä¸çåå½¢æåä¸ãæç»å¯è§çç»ææ¯ï¼ä¸å 60 x 60 çåå½¢èç¹ãå°é绿è²ç´çº¿è¿æ¥ï¼ä»¥å许å¤çèµ·æ¥å½¼æ¤æå¼çèç¹ï¼
1尽管å®ä»¬ä»ç¶åä¸äºå·²å è½½çå¾ãæ ¸å¿è¦ç¹å¨äºæä¸¤ä¸ªå°æå·§ç»åèµ·æ¥ï¼å
å¨å è½½åæ³¨å
¥éèçç»ææ§è¿çº¿ï¼å使ç¨å¾é项让å¯è§è¿çº¿çèµ·æ¥æ¯ææè®¾è®¡çï¼èæ éæ·»å èªå®ä¹æ¸²æã"},{"name":"ç´æ¥ç¨å±çº§æ°æ®å è½½æ å¾","name_en":"Load Tree from Hierarchical Data","path":"load-tree-from-hierarchical-data","desc_en":"This example shows how to pass a nested hierarchical RGJsonData object directly into relation-graph and render it as a left-to-right tree without manually authoring line records. It also demonstrates the standard provider-scoped initialization flow, plus shared viewer utilities for canvas mode changes and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å°åµå¥å±çº§ RGJsonData ç´æ¥ä¼ å
¥ relation-graphï¼å¹¶æ¸²æä¸ºå·¦å°å³æ å¾ï¼æ éæå¨ç¼åè¿çº¿è®°å½ãå®ä¹æ¼ç¤ºäºæ åç provider ä½ç¨ååå§åæµç¨ï¼ä»¥åç¨äºç»å¸æ¨¡å¼åæ¢åå¾ç导åºçå
±äº«æ¥çå¨å·¥å
·ã"},{"name":"è§å¾ä¸ç»å¸ææ§½æ»è§","name_en":"View and Canvas Slot Overview","path":"view-and-canvas-slots-overview","desc_en":"This example compares three built-in relation-graph slot surfaces inside one graph: `RGSlotOnView`, `RGSlotOnCanvasAbove`, and `RGSlotOnCanvas`. It uses a shared React state value, a view-slot text input, and a canvas-above toggle to show how ordinary HTML can stay interactive while being placed on different graph layers.","desc_zh":"è¿ä¸ªç¤ºä¾å¨ä¸å¼ å¾ä¸å¯¹æ¯ relation-graph çä¸ç§å
ç½®ææ§½å±ï¼`RGSlotOnView`ã`RGSlotOnCanvasAbove` å `RGSlotOnCanvas`ãå®ä½¿ç¨å
±äº« React ç¶æãè§å¾ææ§½ææ¬è¾å
¥å canvas-above å¼å
³ï¼å±ç¤ºæ®é HTML å¨ä¸åå¾å±ä¸çæ¾ç½®æ¹å¼åå¯äº¤äºæ§ã"},{"name":"å
置工å
·æ ä½ç½®ä¸ä¸»é¢åæ¢","name_en":"Built-in Toolbar Position and Theme Switching","path":"built-in-toolbar-position-and-theme","desc_en":"This example keeps relation-graph\'s built-in toolbar visible on a minimal one-node graph and lets users switch its direction, horizontal alignment, vertical alignment, and three CSS themes from a floating control window. It uses `updateOptions(...)` for live placement changes and wrapper-class SCSS overrides for `.rg-toolbar`, while the shared helper window also provides canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«çå
³ç³»å¾æ¥çå¨ï¼å
¶æ ¸å¿å
³æ³¨ç¹æ¯ relation-graph çå
置工å
·æ ï¼è䏿¯å¾æ°æ®æ¬èº«ãç»å¸å è½½äºä¸ä¸ªåèç¹ï¼ä¿æé»è®¤å·¥å
·æ å¯è§ï¼å¹¶å¨å¾ä¸æ¹æ¾ç½®äºä¸ä¸ªæµ®å¨çç½è²æ§å¶çªå£ã"},{"name":"èªå®ä¹å·¥å
·æ æé®","name_en":"Customize Toolbar Buttons","path":"toolbar-buttons","meta":{"vip":true,"isNew":true},"desc_en":"This example shows how to disable relation-graph\'s built-in toolbar and replace it with custom controls mounted through `RGSlotOnView`. It combines `RGToolBar`, two `RGMiniToolBar` variants, shared React state for mirrored favorite buttons, and a toggleable `RGMiniView` with light SCSS styling.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å
³é relation-graph å
置工å
·æ ï¼å¹¶éè¿ `RGSlotOnView` æè½½èªå®ä¹æ§å¶ãå®ç»å `RGToolBar`ãä¸¤ç§ `RGMiniToolBar` åä½ãç¨äºéåæ¶èæé®çå
±äº« React ç¶æï¼ä»¥åå¯åæ¢ç `RGMiniView` åè½»é SCSS æ ·å¼ã"},{"name":"èªå®ä¹å·¥å
·æ ä¸è·¨å±æç¤ºæ¡","name_en":"Custom Toolbar and Cross-Layer Tooltips","path":"custom-toolbar-and-cross-layer-tooltips","meta":{"vip":true,"isNew":true},"desc_en":"This example shows how to disable relation-graph\'s built-in toolbar and replace it with a custom floating toolbar inside `RGSlotOnView`. It also demonstrates one hover system that spans toolbar buttons, view-slot anchors, canvas-slot anchors, node-slot content, and graph-rendered nodes or lines through recursive tooltip discovery and graph hit-testing.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å
³é relation-graph å
置工å
·æ ï¼å¹¶å¨ `RGSlotOnView` 䏿¾ç½®èªå®ä¹æ¬æµ®å·¥å
·æ ãå®è¿æ¼ç¤ºäºè·¨å±æ¬æµ®æç¤ºç³»ç»ï¼è¦çå·¥å
·æ æé®ãview ææ§½éç¹ãcanvas ææ§½éç¹ãè
1ç¹ææ§½å
容以å徿¸²æçèç¹/è¿çº¿ï¼ä¾é éå½ tooltip åç°ä¸å¾å½ä¸æ£æµå®ç°ã"},{"name":"èç¹å±å¼æé®ææ§½èªå®ä¹","name_en":"Custom Node Expand Button Slot","path":"custom-node-expand-button-slot","videoImage":true,"meta":{"vip":true},"desc_en":"This example shows how to replace relation-graph\'s default expand or collapse control with a custom slot-rendered badge attached to each node. It loads a local hierarchy, collapses one branch on startup, and uses the slot-provided toggle callback to support both click and touch interaction.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½ç¨éçå¨èç¹ä¸çèªå®ä¹ææ§½å¾½ç« ï¼æ¿æ¢ relation-graph é»è®¤å±å¼/æ¶èµ·æ§ä»¶ãå®å è½½æ¬å°å±çº§æ°æ®ï¼å¨å¯å¨æ¶å
æå ä¸ä¸ªåæ¯ï¼å¹¶éè¿ææ§½æä¾ç忢åè°åæ¶æ¯æç¹å»ä¸è§¦æ¸äº¤äºã"},{"name":"è¿è¡æ¶å¾è°±æ§å¶","name_en":"Runtime Graph Controls","path":"runtime-graph-controls","videoImage":true,"meta":{"vip":true},"desc_en":"This example shows a force-layout people relationship graph controlled from a floating utility window. It demonstrates how external UI can call relation-graph instance APIs to focus nodes, animate movement, mutate node state, add followers at runtime, switch canvas behavior, and export the graph as an image.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºä¸ä¸ªç±æ¬æµ®å·¥å
·çªæ§å¶çå导人ç©å
³ç³»å¾ã宿¼ç¤ºå¤é¨ UI å¦ä½è°ç¨ relation-graph å®ä¾ APIï¼èç¦èç¹ãå¨ç»ç§»å¨ãä¿®æ¹èç¹ç¶æãè¿è¡æ¶æ°å¢å
³æ³¨è
ã忢ç»å¸è¡ä¸ºå¹¶å¯¼åºå¾è°±å¾çã"},{"name":"æç´¢èç¹å¹¶å®ä½è§å¾","name_en":"Search Node and Focus Viewport","path":"search-and-focus","videoImage":true,"meta":{"vip":true},"desc_en":"This example builds a people-relationship viewer with a floating search panel that derives selectable names from the loaded graph and focuses the viewport on the chosen node. It loads static RGJsonData asynchronously, renders avatar nodes and labeled straight multi-links, and combines `focusNodeById(...)` with shared canvas settings and image export controls.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäººç©å
³ç³»æ¥çå¨ï¼å¸¦æ¬æµ®æç´¢é¢æ¿ï¼å¯ä»å·²å è½½å¾ä¸æåå¯éå§åå¹¶å°è§å£èç¦å°éä¸èç¹ãå®å¼æ¥å è½½éæ RGJsonDataï¼æ¸²æå¤´åèç¹å带æ ç¾çç´çº¿å¤éè¿çº¿ï¼å¹¶ç»å `focusNodeById(...)` ä¸å
±äº«ç»å¸è®¾ç½®åå¾çå¯¼åºæ§å¶ã"},{"name":"èç¹æ¬å详æ
æç¤ºæ¡","name_en":"Node Hover Detail Tooltip","path":"node-hover-tooltip","desc_en":"This example shows how to open a non-interactive node detail tooltip from a custom `RGSlotOnNode` renderer and render the card inside `RGSlotOnView`. It uses wrapper-relative pointer coordinates, hover enter and leave handlers, and inline icon-node data to keep the graph read-only while still exposing node metadata.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨èªå®ä¹ `RGSlotOnNode` 渲æå¨ä¸ï¼äºèç¹æ¬åæ¶æå¼ä¸å¯äº¤äºç详æ
æç¤ºå¡ï¼å¹¶å¨ `RGSlotOnView` 䏿¸²æãå®ä½¿ç¨ç¸å¯¹å®¹å¨çæéåæ ãæ¬åè¿å
¥/离å¼å¤çï¼ä»¥åå
è徿 èç¹æ°æ®ï¼å¨ä¿æå¾è°±åªè¯»çåæ¶æ´é²èç¹å
ä¿¡æ¯ã"},{"name":"èç¹ä¸è¿çº¿æç¤ºæ¡åå³é®èå","name_en":"Node and Line Tooltips with Context Menu","path":"node-line-tooltips-and-context-menu","meta":{"vip":true},"desc_en":"This example shows how to attach custom hover tooltips and right-click menus to both nodes and lines in a relation-graph viewer. It uses graph hit-testing, view-relative overlay positioning, and slot-based rendering to keep those panels aligned inside the graph surface. A shared helper window also exposes canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨ relation-graph æ¥çå¨ä¸ä¸ºèç¹åè¿çº¿åæ¶æè½½èªå®ä¹æ¬åæç¤ºä¸å³é®èåãå®éè¿å¾å½ä¸æ£æµãç¸å¯¹è§å¾çè¦çå±å®ä½åææ§½æ¸²æï¼è®©è¿äºé¢æ¿å§ç»å¯¹é½å¨å¾è¡¨é¢å
ï¼å
±äº«è¾
å©çªè¿æä¾ç»å¸è®¾ç½®åå¾ç导åºã"},{"name":"èªå®ä¹å
¨å±ç®æ 容å¨","name_en":"Customize Fullscreen Target Container","path":"fullscreen-target-container","desc_en":"This example shows how to redirect relation-graph\'s built-in fullscreen behavior to a larger wrapper element with `fullscreenElementXPath`. A small left-to-right tree sits between an instructional header and two side panels so the fullscreen boundary is obvious and easy to reuse in broader page layouts.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½éè¿ `fullscreenElementXPath` å° relation-graph å
ç½®å
¨å±è¡ä¸ºéå®åå°æ´å¤§çå¤å±å®¹å¨ãä¸ä¸ªå°åå·¦å°å³æ å¾ä½äºè¯´æå¤´é¨ä¸ä¸¤ä¾§é¢æ¿ä¹é´ï¼ä½¿å
¨å±è¾¹çæ¸
æ°å¯è§ï¼ä¾¿äºå¨æ´å¤æé¡µé¢å¸å±ä¸å¤ç¨ã"}
1,{"name":"èç¹ãè¿çº¿ä¸ç»å¸å³é®èå","name_en":"Node, Line, and Canvas Context Menu","path":"node-line-canvas-context-menu","desc_en":"This example shows how one relation-graph `onContextmenu` handler can open a floating menu for nodes, lines, and empty canvas. It combines `RGSlotOnView` for the overlay, `RGSlotOnNode` for icon-only circular nodes, and a lazily mounted global toast layer to confirm placeholder actions without mutating the graph.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½éè¿ä¸ä¸ª relation-graph `onContextmenu` å¤çå¨ï¼ä¸ºèç¹ãè¿çº¿å空ç½ç»å¸ç»ä¸å¼¹åºæ¬æµ®èåãå®ä½¿ç¨ `RGSlotOnView` 渲æè¦çå±ã`RGSlotOnNode` 渲æä»
徿 åå½¢èç¹ï¼å¹¶æå è½½å
¨å± toast 屿¥ç¡®è®¤å ä½å¨ä½èä¸ä¿®æ¹å¾æ°æ®ã"},{"name":"ä½¿ç¨ææ§½å®ç°èç¹ä¸ä¸æèå","name_en":"Node Context Menu via Slots","path":"node-context-menu-via-slots","desc_en":"A compact relation-graph example that opens a node action menu from custom slotted node DOM and renders that overlay through `RGSlotOnView`. It demonstrates pointer-relative menu positioning, native context-menu suppression, click-away dismissal, and shared success feedback without turning the graph into an editor.","desc_zh":"è¿æ¯ä¸ä¸ªç´§å relation-graph 示ä¾ï¼ä»èªå®ä¹ææ§½èç¹ DOM æå¼èç¹æä½èåï¼å¹¶éè¿ `RGSlotOnView` 渲æè¦çå±ã宿¼ç¤ºç¸å¯¹æéå®ä½ãåçå³é®èåæå¶ãç¹å»å¤é¨å
³éï¼ä»¥åå¨ä¸æå¾åæç¼è¾å¨çåæä¸æä¾ç»ä¸æååé¦ã"},{"name":"ç»å¸äº¤äºäºä»¶","name_en":"Canvas Interaction Events","path":"canvas-interaction-events","desc_en":"A full-screen relation-graph demo that turns canvas click and drag callbacks into visible UI. It loads a small inline graph, clears checked state from `onCanvasClick`, converts drag-start browser coordinates into graph-view coordinates for a temporary arrow overlay, and reuses a floating settings panel for runtime mode switching and image export.","desc_zh":"æ¬ç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«ç relation-graph æ¥çå¨ï¼å¹¶æç»å¸æ¬èº«ä½ä¸ºä¸»è¦å
³æ³¨å¯¹è±¡ã徿°æ®å»æä¿æå¾å°ï¼ä½é¡µé¢é¢å¤å å
¥äºä¸ä¸ªå¯ææ½çè¾
å©çªå£ãåºå®ç toast æç¤ºãå
置工å
·æ ï¼ä»¥åç¨æ·æå¨ç»å¸æ¶åºç°ç临æ¶çº¢è²ç®å¤´å å å±ã"},{"name":"ç»å¸æ¡éä¸èç¹å建","name_en":"Canvas Selection and Node Creation","path":"canvas-selection-node-creation","desc_en":"This example shows how one relation-graph canvas selection gesture can either select enclosed nodes or create a new circle or rectangle node. It also exposes the live selection bounds in a floating helper window and lets users switch canvas drag behavior at runtime.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨å±ç relation-graph å·¥ä½åºï¼å¹¶é¢ç½®äº 14 ä¸ªå½¼æ¤æå¼ç忝èç¹ãä¸ä¸ªå¯ææ½çè¾
å©çªå£å§ç»ä½äºç»å¸ä¸æ¹ï¼ç¨æ¥è¯´æå¦ä½å¼å§æ¡éãæ¾ç¤ºå®æ¶çéæ©æ¡å°ºå¯¸ä¿¡æ¯ï¼å¹¶æä¾å¯åæ¢é¡¹æ¥æ¹åææ½æå¿çè¡ä¸ºã"},{"name":"æ¡éå建æéæ©èç¹","name_en":"Create or Select Nodes by Drag Selection","path":"selection-create-or-select-nodes","desc_en":"This example shows how one selection gesture can either create a circle or rectangle node or select existing nodes, depending on the armed mode. It combines `onCanvasSelectionEnd` with keyboard and palette arming, live selection HUD feedback, a dashed preview overlay, and a shared floating settings panel.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå䏿¬¡æ¡éæå¿å¯æ ¹æ®å½å模å¼å®ç°âå建åå½¢/ç©å½¢èç¹âæâ鿩已æèç¹âãå®ç»å `onCanvasSelectionEnd` ä¸é®ç/颿¿æ¨¡å¼å¯ç¨ã宿¶éåº HUD åé¦ãè线é¢è§è¦çå±ï¼ä»¥åå
±äº«æ¬æµ®è®¾ç½®é¢æ¿ã"},{"name":"èç¹ä¸è¿çº¿ç¹å»é«äº®","name_en":"Node and Line Click Highlighting","path":"node-line-click-highlighting","videoImage":true,"meta":{"vip":true},"desc_en":"This example builds a read-only people relationship map where node clicks highlight connected lines, line clicks isolate the selected relation\'s endpoints, and canvas clicks restore the baseline styles. It is a focused reference for reversible interaction-driven graph styling with portrait node slots, saved original styles, and a force layout that settles before inspection begins.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºåªè¯»äººç©å
³ç³»å¾ï¼ç¹å»èç¹é«äº®å
³èè¿çº¿ï¼ç¹å»è¿çº¿åªä¿ç该å
³ç³»ç两端èç¹ï¼ç¹å»ç»å¸æ¢å¤åºçº¿æ ·å¼ã宿¯å¯éç交äºé©±å¨æ ·å¼æ§å¶åèï¼å
å«äººåèç¹ææ§½ãåå§æ ·å¼ä¿åï¼ä»¥å卿£æ¥åå
ç¨³å®æ¶æçå导å¸å±ã"},{"name_en":"Highlight Related Lines on Node Hover","name":"èç¹æ¬åé«äº®å
³è线æ¡","path":"highlight-related-lines-on-node-hover","meta":{"vip":true,"isNew":true},"desc_en":"This example renders a top-down tree and highlights only the hovered node together with its directly connected lines. It demonstrates `RGSlotOnNode` hover handlers, runtime neighbor lookup through `getLines()`, temporary node and line class updates, animated line styling in SCSS, and a shared floating utility panel for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æä¸æ£µèªä¸è䏿 å¾ï¼ä»
é«äº®æ¬åèç¹åå
¶ç´æ¥è¿æ¥è¿çº¿ã
1宿¼ç¤º `RGSlotOnNode` æ¬åäºä»¶ãéè¿ `getLines()` è¿è¡è¿è¡æ¶é»æ¥æ¥è¯¢ã临æ¶èç¹ä¸è¿çº¿ class æ´æ°ãSCSS å¨ç»çº¿æ ·å¼ï¼ä»¥åå
±äº«æ¬æµ®å·¥å
·é¢æ¿çç»å¸è®¾ç½®ä¸å¾ç导åºã"},{"name_en":"Highlight Line and Endpoints on Click","name":"ç¹å»çº¿æ¡é«äº®çº¿æ¡å端ç¹èç¹","path":"highlight-line-and-endpoints-on-click","meta":{"vip":true,"isNew":true},"desc_en":"This example shows a top-down tree where clicking a relation line highlights that line and its two endpoint nodes. It uses relation-graph instance APIs to reset previous state, apply temporary classes at runtime, and clear the emphasis again when the canvas background is clicked.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºä¸æ£µèªä¸è䏿 å¾ï¼ç¹å»å
³ç³»çº¿å¯é«äº®è¯¥çº¿åå
¶ä¸¤ä¸ªç«¯ç¹èç¹ãå®ä½¿ç¨ relation-graph å®ä¾ API éç½®ä¸æ¬¡ç¶æãè¿è¡æ¶åºç¨ä¸´æ¶ classï¼å¹¶å¨ç¹å»ç»å¸èæ¯æ¶æ¸
é¤é«äº®ã"},{"name":"èç¹åä»£åæ é«äº®","name_en":"Node Descendant Subtree Highlight","path":"node-descendant-subtree-highlight","videoImage":true,"desc_en":"This example loads a static hierarchy into a centered relation-graph view and highlights the clicked node together with all of its descendants. It demonstrates recursive traversal through runtime node objects, batch node and line updates, canvas-based reset, and a shared floating utility panel for settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾å°éæå±çº§æ°æ®å è½½å°å±
ä¸ç relation-graph è§å¾ï¼å¹¶å¨ç¹å»èç¹æ¶é«äº®è¯¥èç¹åå
¶ææå代ã宿¼ç¤ºäºåºäºè¿è¡æ¶èç¹å¯¹è±¡çéå½éåãæ¹éèç¹ä¸è¿çº¿æ´æ°ãç»å¸éç½®ï¼ä»¥åå
±äº«æ¬æµ®è®¾ç½®ä¸å¾ç导åºé¢æ¿ã"},{"name":"çå¬å¾è°±å¤§å°åå","name_en":"Graph Resize Event","path":"graph-resize","videoImage":true,"desc_en":"This example shows how to keep a relation-graph view centered and fitted when its host container changes size. A selector drives the square wrapper dimensions, and the graph responds through `onViewResize` by calling `moveToCenter()` and `zoomToFit()` on the existing instance.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå½å®¿ä¸»å®¹å¨å°ºå¯¸ååæ¶ï¼å¦ä½ä¿æ relation-graph è§å¾å±
ä¸å¹¶èªéåºãéæ©å¨é©±å¨æ¹å½¢å
裹å±å°ºå¯¸ååï¼å¾éè¿ `onViewResize` è°ç¨ç°æå®ä¾ç `moveToCenter()` å `zoomToFit()` è¿è¡ååºã"},{"name":"å¾è°±ç¼©æ¾é¢è®¾","name_en":"Graph Zoom Presets","path":"graph-zoom-presets","videoImage":true,"desc_en":"This example loads an inline top-down tree into relation-graph and controls the viewport through five fixed zoom presets in a floating helper window. It initializes the graph with `setJsonData()`, `moveToCenter()`, and `setZoom()`, then keeps later preset changes synchronized from React state while still exposing shared canvas settings and image export utilities.","desc_zh":"è¿ä¸ªç¤ºä¾æå
èèªä¸è䏿 å¾å è½½å° relation-graphï¼å¹¶éè¿æ¬æµ®è¾
å©çªä¸ç 5 个åºå®ç¼©æ¾é¢è®¾æ§å¶è§å£ãå®ç¨ `setJsonData()`ã`moveToCenter()` å `setZoom()` åå§åå¾è°±ï¼åç»é¢è®¾åæ´ç± React ç¶æåæ¥ï¼åæ¶ä¿çå
±äº«ç»å¸è®¾ç½®ä¸å¾ç导åºå·¥å
·ã"},{"name":"æ ¹èç¹å·¦å³åæ¯æ¾é忢","name_en":"Root-Side Branch Visibility Toggles","path":"root-side-branch-visibility-toggles","videoImage":true,"desc_en":"This example renders a root-centered bidirectional tree where the root node exposes separate left and right toggle buttons. Each button hides or reveals one side of the hierarchy by filtering related nodes with `lot.level`, while shared demo utilities provide canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æä»¥æ ¹ä¸ºä¸å¿çååæ ï¼æ ¹èç¹æä¾å·¦å³ä¸¤ä¾§ç¬ç«åæ¢æé®ãæ¯ä¸ªæé®éè¿çé `lot.level` ç¸å
³èç¹æ¥éèææ¾ç¤ºä¸ä¾§å±çº§ï¼å¹¶å¤ç¨å
±äº«ç¤ºä¾å·¥å
·æä¾ç»å¸è®¾ç½®åå¾ç导åºã"},{"name":"é»è®¤æå çå¯å±å¼æ å¾","name_en":"Initially Collapsed Expandable Tree","path":"initially-collapsed-tree","videoImage":true,"desc_en":"This example shows how to load a complete tree, collapse selected branches immediately after `setJsonData()`, and reveal them later through node clicks. It is a focused reference for progressive disclosure on a preloaded hierarchy, with automatic relayout and shared canvas settings and export helpers.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨ `setJsonData()` åç«å³æå æå®åæ¯ï¼å¹¶éè¿åç»èç¹ç¹å»éæ¥å±å¼ã宿¯é¢å è½½å±çº§ä¸çæ¸è¿æ«é²åèï¼å
å«èªå¨éå¸å±åå
±äº«ç»å¸è®¾ç½®ä¸å¯¼åºå·¥å
·ã"},{"name":"æ´å¾å±å¼/æå åæ¾","name_en":"Whole-Graph Expand/Collapse Playback","path":"whole-graph-expand-collapse-playback","videoImage":true,"meta":{"vip":true},"desc_en":"A relation-graph demo for replaying whole-graph expand and collapse sequences over a fixed centered hierarchy. It loads one inline 39-node dataset, auto-fits the graph, auto-runs expand playback on mount, exposes global `Expand All` and `Collapse All` controls in a draggable helper window, and inherits secondary canvas settings plus image export utilities from a shared helper.","desc_zh":"è¿æ¯ä¸ä¸ª relation-graph 示ä¾ï¼ç¨äºå¨åºå®å±
ä¸å±çº§å¾ä¸åæ¾æ´å¾å±å¼/æ¶ç¼©åºåãå®å è½½ä¸ä»½å
è 39 èç¹æ°æ®ï¼èªå¨éé
è§å¾å¹¶å¨æè½½åèªå¨ææ¾å±å¼è¿ç¨ï¼å¨å¯ææ½è¾
å©çªä¸æä¾å
¨å± `E
1xpand All` ä¸ `Collapse All`ï¼å¹¶ç»§æ¿å
±äº«ç»å¸è®¾ç½®ä¸å¾ç导åºè½åã"},{"name":"便¬¡å±å¼å¾è°±","name_en":"Depth-First Tree Expansion Playback","path":"expand-graph-step-by-step","meta":{"vip":true},"desc_en":"A relation-graph demo that loads an inline subsystem tree, collapses every expandable branch, and then replays expansion automatically from the root. It combines recursive `expandNode(...)` calls, timed pauses, canvas animation, and repeated viewport fitting so the reveal behaves like guided playback instead of manual disclosure.","desc_zh":"è¿æ¯ä¸ä¸ª relation-graph 示ä¾ï¼å è½½å
èç³»ç»æ åå
æå ææå¯å±å¼åæ¯ï¼å仿 ¹èç¹èªå¨åæ¾å±å¼ãå®ç»åéå½ `expandNode(...)`ã宿¶åé¡¿ãç»å¸å¨ç»åéå¤è§å£éé
ï¼ä½¿åç°æ´åå¼å¯¼å¼ææ¾èéæå¨æ«é²ã"},{"name":"ææå®å±çº§å±å¼æ å¾","name_en":"Expand Tree to Selected Level","path":"expand-tree-to-selected-level","videoImage":true,"meta":{"vip":true},"desc_en":"This example loads a fixed subsystem hierarchy into a left-to-right tree and lets the user switch the visible disclosure depth from a floating preset selector. It is a focused reference for using computed `node.lot.level` values with `updateNode()`, `doLayout()`, and viewport refit calls to reset expansion state across the whole graph.","desc_zh":"è¿ä¸ªç¤ºä¾å°åºå®åç³»ç»å±çº§å 载为左å°å³æ å¾ï¼å¹¶å
è®¸ç¨æ·éè¿æ¬æµ®é¢è®¾éæ©å¨åæ¢å¯è§å±å¼æ·±åº¦ã宿¯ä½¿ç¨è®¡ç®å¾å°ç `node.lot.level` é
å `updateNode()`ã`doLayout()` ä¸è§å£ééé
æ¥å
¨å±éç½®å±å¼ç¶æçèç¦åèã"},{"name":"æèç¹IDèç¦è§å¾","name_en":"Focus Viewport by Node ID","path":"focus-viewport-by-node-id","videoImage":true,"meta":{"vip":true},"desc_en":"This example builds a large node-only relation-graph canvas and drives viewport navigation from a fixed list of node IDs in a floating panel. It generates 160 nodes in memory, initializes the graph through instance APIs, wraps `focusNodeById(...)` in temporary canvas animation, and reuses shared controls for canvas settings and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºå¤§åâä»
èç¹ârelation-graph ç»å¸ï¼å¹¶éè¿æ¬æµ®é¢æ¿ä¸çèç¹ ID å表驱å¨è§å£å¯¼èªãå®å¨å
åä¸çæ 160 个èç¹ï¼ä½¿ç¨å®ä¾ API åå§åå¾è°±ï¼å¹¶å¨ `focusNodeById(...)` å¤å
裹临æ¶ç»å¸å¨ç»ï¼åæ¶å¤ç¨å
±äº«ç»å¸è®¾ç½®ä¸å¾çå¯¼åºæ§å¶ã"},{"name":"å¸å±é¢è®¾èªå¨åæ¢","name_en":"Automatic Layout Preset Switching","path":"automatic-layout-preset-switching","videoImage":true,"meta":{"vip":true},"desc_en":"This example shows how to load one branching graph once and automatically rotate it through the built-in center, tree, circle, and force layouts. A floating helper window provides play-stop control, shared canvas settings, and image export so the page works as a compact layout-comparison workspace.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«ç relation-graph ç»å¸ï¼æä¸ä»½åºå®ç忝忰æ®éåæä¸ä¸ªå¸å±å¯¹æ¯çé¢ãåä¸ç»èç¹åè¿çº¿ä¼åå«ä»¥ `center`ãä»å·¦å°å³ç `tree`ã`circle` å `force` å¸å±æ¾ç¤ºï¼åæ¶ä¸ä¸ªå°åæµ®å¨çªå£å§ç»æ¬æµ®å¨ç»å¸ä¸æ¹ã"},{"name":"è¿éåå¾å¸å±ä¸ä¸»é¢åæ¢","name_en":"Connected Component Layout and Theme Switcher","path":"connected-component-layout-and-theme-switcher","videoImage":true,"meta":{"vip":true},"desc_en":"This example loads two disconnected graph datasets into one canvas and lets the user click a node to select its full connected component. The selected component can then switch theme and layout presets without changing the rest of the canvas, and the viewport is adjusted so the active group stays beside the editing overlay.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨å±å¾è°±å·¥ä½å°ï¼å¨åä¸åç»å¸ä¸æè½½ä¸¤ç»å½¼æ¤æå¼ç relation-graph æ°æ®éãç¨æ·ç¹å»ä»»æèç¹åï¼ä¼éä¸è¯¥èç¹æå±çæ´ä¸ªè¿éåéï¼ç¶åéè¿ä¸ä¸ªè·ééåºç§»å¨çæ¬æµ®å·¥å
·æ ï¼ä»
忢è¿ä¸ªè¿éåéç䏻颿å¸å±ãå¾è°±è¦çå±ä¸å§ç»æ¾ç¤ºä¸ä¸ª minimapï¼åæ¶è¿æä¸ä¸ªå¯ææ½çè¾
å©çªå£ï¼ç¨äºæ´é²ç»å¸è®¾ç½®
1å导åºå¾çåè½ã"},{"name":"ç»å¸æ¡éå¤ä¸ªèç¹","name_en":"Canvas Multi-Node Selection","path":"canvas-multi-node-selection","videoImage":true,"meta":{"vip":true},"desc_en":"This example shows a fixed relation-graph canvas where users can marquee-select multiple existing nodes, clear selection with a canvas click, and switch canvas dragging between selection and move modes. It also surfaces live selection geometry and a selected-node count in a floating helper window, while reusing shared canvas settings and image export tooling.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«åº¦å¾æ¥çå¨ï¼ç¨äºéè¿ææ½ç©å½¢æ¡éæ©å¤ä¸ªç°æèç¹ãç¨æ·ä¼çå°ä¸ä¸ªå±
ä¸ç徿 å¼ç½ç»ãä¸ä¸ªæ¬æµ®è¾
å©çªå£ãä¸ä¸ªå¯å¨æ¡éä¸ç§»å¨ä¹é´åæ¢ç»å¸ææ½è¡ä¸ºç模å¼å¼å
³ï¼ä»¥åä¸ä¸ªç¨äºå®æ¶æ¾ç¤ºå½åå·²éèç¹æ°éç计æ°å¨ãè¿ä¸ªç¤ºä¾çéç¹ä¸æ¯å¾ç¼è¾ï¼èæ¯æ relation-graph çæ¡éè½å转å为ä¸ä¸ªæç¡®çå¤èç¹éæ©å·¥ä½æµï¼å¹¶ä¸ºå
¶é
奿ä¾å¨è¾¹ UI åé¦ã"},{"name":"ç»å¸ææ½ä¸æ»è½®æ¨¡å¼åæ¢","name_en":"Canvas Drag and Wheel Modes","path":"canvas-drag-wheel-modes","videoImage":true,"meta":{"vip":true},"desc_en":"A full-height relation-graph workspace demo focused on changing canvas drag and wheel behavior at runtime. It loads a small inline graph, exposes live `wheelEventAction` and `dragEventAction` controls in a draggable floating panel, clears checked state from empty-canvas clicks, and includes an image export flow.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«åº¦ç relation-graph å·¥ä½åºï¼ç¨æ¥æµè¯ç»å¸å¯¹ææ½åæ»è½®è¾å
¥çååºæ¹å¼ã徿¬èº«æ¯å»æä¿æéç¨çï¼ä¸ä¸ªå±
ä¸ç示ä¾ç½ç»ã使ç¨äºæµå¾æ 渲æèç¹ã带æä¸ä¸ªæµ®å¨çç½è²å·¥å
·çªå£ï¼å¹¶ä¸æ²¡æä»»ä½ä¼åæ£æ³¨æåçä¸å¡é¢åå å å±ã"},{"name":"ç»å¸ä¸èç¹äº¤äºéå¶","name_en":"Canvas and Node Interaction Locks","path":"canvas-node-interaction-locks","desc_en":"This example loads a centered hierarchy into relation-graph with wheel zoom, canvas dragging, and node dragging disabled in the initial options. It then shows how to re-enable those behaviors at runtime through a floating helper window, shared canvas settings controls, and image export utilities.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«åº¦ç relation-graph æ¥çå¨ï¼å¹¶ä¸å®å¨æå¼æ¶å¤äºåé交äºç¶æã徿¬èº«æ¯ä¸ä¸ªå°åçå±
ä¸å±çº§ç»æï¼å¸¦æç©å½¢èç¹åç°è²æ²çº¿è¿çº¿ï¼åæ¶ç»å¸ä¸æ¹æ¬æµ®çä¸ä¸ªç½è²å·¥å
·çªå£ã"},{"name":"ç¨ç»å¸ååºå±ç¤ºå¾è°±","name_en":"Partition Graph with Canvas Zones","path":"partition-graph-with-canvas-zones","desc_en":"A fixed-layout relation graph is divided into three colored canvas zones while each node is rendered as a table-shaped HTML block through a node slot. The example is mainly a read-only viewer, with shared controls for canvas behavior and image export layered on top.","desc_zh":"è¿ä¸ªåºå®å¸å±å
³ç³»å¾å°ç»å¸åå为ä¸ä¸ªå½©è²åºåï¼å¹¶éè¿èç¹ææ§½ææ¯ä¸ªèç¹æ¸²æä¸ºè¡¨æ ¼å½¢ HTML åã示ä¾ä¸»è¦æ¯åªè¯»æ¥çå¨ï¼ä¸å±å å äºç»å¸è¡ä¸ºåå¾ç导åºçå
±äº«æ§å¶ã"},{"name":"èç¹é»ååç»èæ¯","name_en":"Node Neighborhood Group Background","path":"node-neighborhood-group-background","meta":{"vip":true,"isNew":true},"desc_en":"This example loads a force-directed relation graph, seeds three saved neighborhoods, and lets users click any node to create another neighborhood highlight. Each highlight is drawn as a canvas-layer SVG region derived from live node bounds, using a rectangle for one-node groups and a convex-hull footprint for multi-node groups.","desc_zh":"è¿ä¸ªç¤ºä¾å è½½å导å
³ç³»å¾ï¼é¢ç½®ä¸ä¸ªé»ååç»ï¼å¹¶å
è®¸ç¨æ·ç¹å»ä»»æèç¹å建æ°çé»åé«äº®ãæ¯ä¸ªé«äº®é½ä¼å¨ç»å¸å±ç»å¶ä¸ºåºäºå®æ¶èç¹è¾¹çç SVG åºåï¼åèç¹ç»ç¨ç©å½¢ï¼å¤èç¹ç»ç¨å¸å
è½®å»ã"},{"name":"ç¹å»èç¹é«äº®å
³èèç¹åç»","name_en":"Click-Driven Related Node Group Highlights","path":"click-related-node-group-highlights","meta":{"vip":true,"isNew":true},"desc_en":"This example builds a force-layout viewer that outlines a clicked node and its related neighborhood with a canvas-layer rounded rectangle. It seeds three example groups on load, deduplicates repeated selections, and keeps only the newest three overlays visible for comparison.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå导å¸å±ç½ç»æ¥çå¨ï¼ä½¿ç¨æä¹
åç canvas å±ç©å½¢æ¥æ è®°èç¹é»åãå¾è°±åå§ä¼é¢ç½®ä¸ä¸ªé«äº®åç»ï¼æ¯ä¸ªå·²ä¿åçåç»é½ä¼å´ç»ä¸ä¸ªæ ¸å¿èç¹ä»¥å relation-graph è¿åçç¸å
³èç¹ï¼
1ç»å¶ä¸ä¸ªåè§åéæè½®å»ã"},{"name":"ç»å¸ä¸å¿åç§»","name_en":"Canvas Center Offset","path":"canvas-center-offset","desc_en":"This example shows how to recenter a relation-graph canvas from external React controls instead of graph data or layout changes. It mounts a labeled SVG coordinate grid in RGSlotOnCanvas, drives setCanvasCenter(...) from X and Y sliders, and reuses the shared floating settings panel for runtime canvas options and image export.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºçæ¯ä¸ä¸ª canvas å®ä½æ¼ç¤ºç¯å¢ï¼è䏿¯å¾æ°æ®å±ç¤ºæ¡ä¾ã页é¢ä¼æ¸²æä¸ä¸ªå
¨é«ç `RelationGraph` canvasï¼å¨ canvas å¾å±å
æè½½ä¸ä¸ªå¸¦ææ ç¾ç大å SVG åæ ç½æ ¼ï¼å¹¶å¨å
¶ä¸æ¹æ¾ç½®ä¸ä¸ªæµ®å¨å·¥å
·çªå£ã"},{"name":"å¸å±æè½¬è§åº¦æ§å¶","name_en":"Layout Rotation Controls","path":"layout-rotation-controls","meta":{"vip":true},"desc_en":"This example shows how to rotate a mounted relation-graph layout at runtime while switching the same dataset between the built-in center and tree layouts. A floating tool window provides angle controls, layout switching, canvas behavior settings, and image export so the graph can be studied as a small layout-tuning workspace.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½å¨è¿è¡æ¶æè½¬å·²æè½½ç relation-graph å¸å±ï¼å¹¶å¨å䏿°æ®éä¸åæ¢å
ç½®ä¸å¿å¸å±ä¸æ å¸å±ãæ¬æµ®å·¥å
·çªæä¾è§åº¦æ§å¶ãå¸å±åæ¢ãç»å¸è¡ä¸ºè®¾ç½®åå¾ç导åºï¼ä½¿å
¶æä¸ºå°åå¸å±è°ä¼å·¥ä½åºã"},{"name":"忢å°å¾è°±æ ç¾æ¶åå§å","name_en":"Initialize Graph On Tab Reveal","path":"initialize-graph-on-tab-reveal","desc_en":"This example embeds relation-graph inside a three-state page and delays both graph mounting and data initialization until the user opens the Graph tab. It uses `RGHooks.useGraphInstance()` to load a flat inline dataset, generate missing line ids, and immediately center and fit the first visible view.","desc_zh":"è¿ä¸ªç¤ºä¾æ relation-graph åµå
¥ä¸ä¸ªä¸ç¶æé¡µé¢ï¼å¹¶å»¶è¿å°ç¨æ·æå¼ Graph æ ç¾æ¶æè¿è¡å¾æè½½ä¸æ°æ®åå§åãå®ä½¿ç¨ `RGHooks.useGraphInstance()` å è½½æå¹³å
èæ°æ®ãè¡¥å
¨ç¼ºå¤±è¿çº¿ idï¼å¹¶å¨é¦æ¬¡å¯è§åç«å³æ§è¡å±
ä¸ä¸è§å£éé
ã"},{"name":"å±å¼/æ¶ç¼©åæ¯å¦éæ°å¸å±ï¼çºµåæ ï¼","name_en":"Expand/Collapse Relayout Toggle (Top-Down Tree)","path":"top-down-tree-expand-relayout-toggle","videoImage":true,"desc_en":"A relation-graph demo that isolates `reLayoutWhenExpandedOrCollapsed` on a top-down tree. It loads a fixed inline hierarchy, lets users switch between relayout and non-relayout behavior from a draggable floating panel, and inherits secondary canvas settings and image export controls from a shared helper window.","desc_zh":"è¿æ¯ä¸ä¸ª relation-graph 示ä¾ï¼èç¦æ¼ç¤ºèªä¸è䏿 å¾ä¸ç `reLayoutWhenExpandedOrCollapsed`ãå®å è½½åºå®å
èå±çº§æ°æ®ï¼å
è®¸ç¨æ·å¨å¯ææ½æ¬æµ®é¢æ¿ä¸åæ¢âå±å¼/æ¶ç¼©åæ¯å¦éå¸å±âï¼å¹¶ç»§æ¿å
±äº«è¾
å©çªä¸çç»å¸è®¾ç½®åå¾çå¯¼åºæ§å¶ã"},{"name":"å±å¼/æ¶ç¼©åæ¯å¦éæ°å¸å±ï¼ä¸å¿å¸å±ï¼","name_en":"Expand/Collapse Relayout Toggle (Center Layout)","path":"center-layout-expand-relayout-toggle","videoImage":true,"desc_en":"A relation-graph demo that compares whether built-in expand or collapse should trigger automatic relayout in a center-layout hierarchy. It loads a fixed 39-node inline dataset, exposes a `Re-layout` or `Do not re-layout` selector in a draggable helper window, and inherits secondary canvas settings plus image export controls from a shared helper.","desc_zh":"è¿ä¸ªç¤ºä¾æå»ºäºä¸ä¸ªå
¨é«åº¦çå±
ä¸å±çº§æ¥çå¨ï¼ç¨æ¥æ¯è¾ç¨æ·éè¿ relation-graph å
ç½®ç expand holder å±å¼ææ¶èµ·åæ¯åä¼åçä»ä¹ãç»å¸å±ç¤ºçæ¯ä¸ä¸ªä»¥æ ¹èç¹ä¸ºä¸å¿çåç³»ç»é£æ ¼å¾è°±ï¼å
å«è¾å¤§çéè²åå½¢èç¹ãè绿è²è¿çº¿ã沿è¿çº¿è·¯å¾é夿¸²æç `Subsystem` æ ç¾ï¼ä»¥åå å å¨å¾è°±ä¸æ¹çç½è²æ¬æµ®è¾
å©çªå£ã"},{"name":"å¾è°±ç»å¸ä¸»é¢åæ¢","name_en":"Graph Canvas Theme Switcher","path":"graph-canvas-theme-switcher","desc_en":"This example renders a small left-to-right tree and switches among three full-canvas visual themes by changing a wrapper class. It shows how to skin relation-graph\'s built-in map, toolbar, nodes, and checked states with SCSS while keeping the same data, layout, and graph instance. A shared floating panel also exposes wheel mode, drag mode, and image export utilities.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æä¸æ£µå°åå·¦å°å³æ å¾ï¼å¹¶éè¿åæ¢å®¹å¨ class å¨ä¸ç§å
¨ç»å¸è§è§ä¸»é¢é´åæ¢ãå®å±ç¤ºäºå¦ä½ç¨ SCSS ç» relation-graph å
ç½®å°å°å¾ãå·¥å
·æ ãèç¹åé䏿æ¢è¤ï¼åæ¶ä¿æå䏿°æ®ãå¸å±åå¾å®ä¾ï¼å
±äº«æ¬æµ®é¢æ¿è¿æä¾æ»è½®æ¨¡å¼ãææ½æ¨¡å¼åå¾ç导åºã"},{"name":"导åºå®æ´å¾è°±å¾ç","name_en":"Export Full Graph Image","path":"export-full-gra
1ph-image","meta":{"vip":true},"desc_en":"This example shows how to export the full relation-graph scene as a downloadable image from custom UI controls. It loads a static left-to-right tree, prepares the graph for capture, converts the prepared DOM into a blob with modern-screenshot, and restores graph state after the download flow completes.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½éè¿èªå®ä¹ UI å°å®æ´ relation-graph åºæ¯å¯¼åºä¸ºå¯ä¸è½½å¾çãå®å è½½éæå·¦å°å³æ å¾ï¼å
åå¤å¾è°±æè·ç¶æï¼åç¨ modern-screenshot å°åå¤åç DOM 转为 blobï¼å¹¶å¨ä¸è½½æµç¨å®æåæ¢å¤å¾ç¶æã"},{"name":"导åºå¾è°±Base64å¾çæ°æ®","name_en":"Export Graph Base64 Image Data","path":"export-graph-base64-image-data","meta":{"vip":true},"desc_en":"This example shows how to capture a full relation-graph scene as Base64 image data instead of downloading it immediately. It loads a static graph, prepares the canvas for export, captures it with a shared modern-screenshot helper, converts the blob to a data URL, and previews both the image and the raw string in a floating utility window.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½æå®æ´ relation-graph åºæ¯æè·ä¸º Base64 å¾çæ°æ®ï¼è䏿¯ç«å³ä¸è½½ãå®å è½½éæå¾ï¼åå¤å¯¼åºç¶æï¼ä½¿ç¨å
±äº« modern-screenshot è¾
婿¹æ³æªå¾ï¼æ blob 转为 data URLï¼å¹¶å¨æ¬æµ®å·¥å
·çªä¸åæ¶é¢è§å¾çä¸åå§å符串ã"},{"name":"导åºå½åå¯è§å¾è°±åºåå¾ç","name_en":"Export Visible Graph Area Image","path":"export-visible-graph-area-image","meta":{"vip":true},"desc_en":"This example shows how to capture only the currently visible relation-graph viewport and present the result inline as both an image preview and a Base64 string. It also demonstrates how to temporarily include or exclude the built-in toolbar and minimap from the captured image.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½ä»
æè· relation-graph å½åå¯è§è§å£ï¼å¹¶ä»¥å
èå¾çé¢è§ä¸ Base64 å符串形å¼å±ç¤ºç»æãå®è¿æ¼ç¤ºäºå¦ä½å¨æªå¾ä¸ä¸´æ¶å
嫿æé¤å
置工å
·æ ä¸å°å°å¾ã"},{"name":"çæå
èæ¯çå¾ç","name_en":"Generate an image with background","path":"generate-image-with-background","meta":{"vip":true},"desc_en":"This example renders a left-to-right relation-graph tree, styles the graph canvas with layered gradients, and captures the prepared scene as an inline preview image. It is a focused reference for background-aware graph export, especially when the generated bitmap needs to stay inside the UI for review before download or reuse.","desc_zh":"è¿ä¸ªç¤ºä¾æ¸²æä¸æ£µå·¦å°å³ relation-graph æ å¾ï¼ä¸ºç»å¸å å å¤å±æ¸åèæ¯ï¼å¹¶å°åå¤åçåºæ¯æè·ä¸ºå
èé¢è§å¾çã宿¯èæ¯æç¥å¾è°±å¯¼åºçèç¦åèï¼éåå¨ä¸è½½æå¤ç¨åå
å¨ UI å
审é
çæä½å¾ã"},{"name":"é¢è§å¸¦å¹³éºèæ¯çå¾è°±å¾ç","name_en":"Preview Graph Image with Tiled Background","path":"preview-graph-image-with-tiled-background","meta":{"vip":true},"desc_en":"This example renders a left-to-right relation-graph tree over a repeated tiled background and captures the prepared full scene into an inline preview image. It is a focused reference for preview-first graph export when decorative background content should remain part of the generated bitmap.","desc_zh":"è¿ä¸ªç¤ºä¾å¨å¹³éºéå¤èæ¯ä¸æ¸²æå·¦å°å³ relation-graph æ å¾ï¼å¹¶æåå¤åç宿´åºæ¯æè·ä¸ºå
èé¢è§å¾çã宿¯âé¢è§ä¼å
âå¾è°±å¯¼åºçèç¦åèï¼éç¨äºéè¦æè£
饰æ§èæ¯ä¸å¹¶çº³å
¥çæä½å¾çåºæ¯ã"},{"name":"GraphInstance Expand and Collapse API","name_en":"GraphInstance Expand and Collapse API","path":"graph-instance-expand-collapse-api","desc_en":"This example shows how to get a provider-scoped relation-graph instance with `RGHooks.useGraphInstance()`, load a small inline tree, and normalize the viewport after mount. It then demonstrates one focused control pattern: an external button resolves node `b` by id and toggles that branch with `expandNode()` or `collapseNode()`.","desc_zh":"è¿ä¸ªç¤ºä¾å±ç¤ºå¦ä½ç¨ `RGHooks.useGraphInstance()` è·å provider ä½ç¨å relation-graph å®ä¾ï¼å è½½å°åå
èæ å¾å¹¶å¨æè½½åè§èåè§å£ãéåæ¼ç¤ºä¸ä¸ªèç¦æ§å¶æ¨¡å¼ï¼å¤é¨æé®æ id å®ä½èç¹ `b`ï¼å¹¶éè¿ `expandNode()` / `collapseNode()` åæ¢è¯¥åæ¯ã"},{"name":"èªå®ä¹ GraphInstance æ··åå¸å±","name_en":"Custom GraphInstance Mixed Layout","path":"custom-graph-instance-mixed-layout","meta":{"vip":true},"desc_en":"This example replaces the default relation-graph core with a custom `RelationGraphCore` subclass that reads two inline datasets from `graphOptions.data` and composes them into one center-plus-tree scene. It is a focused reference for provider-level graph-core injection, custom `doLayout()` orchestration, and one-canvas mixed-layout composition.","desc_zh":"è¿ä¸ªç¤ºä¾ç¨èªå®ä¹ `RelationGraphCore` åç±»æ¿æ¢é»è®¤ relation-graph å
æ ¸ï¼ä» `graphOptions.data` 读å两份å
èæ°æ®å¹¶ç»å为âä¸å¿å¸å± + æ å¸å±âçåç»å¸åºæ¯ã宿¯ provider 级å¾å
æ ¸æ³¨å
¥ãèªå®ä¹ `doLayout()` ç¼æååç»å¸æ··åå¸å±ç»åçèç¦åèã"}]');export{e as a,a as u};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.