diff --git a/.env.example b/.env.example index 6eb25ea..7e791bc 100644 --- a/.env.example +++ b/.env.example @@ -21,8 +21,18 @@ COMBINE_OUTPUT_LOCATION=/data/vkg_full.ttl COMBINE_FORCE=true # AnzoGraph / SPARQL endpoint settings +# Use `local` for the Docker Compose AnzoGraph container, or `external` for the +# remote endpoint below using a runtime-generated bearer token. +SPARQL_SOURCE_MODE=local SPARQL_HOST=http://anzograph:8080 # SPARQL_ENDPOINT=http://anzograph:8080/sparql +EXTERNAL_SPARQL_ENDPOINT=https://anzograph.k8s.inf.ufrgs.br/sparql +KEYCLOAK_TOKEN_ENDPOINT=https://keycloak.k8s.inf.ufrgs.br/realms/INF/protocol/openid-connect/token +KEYCLOAK_CLIENT_ID=anzograph +KEYCLOAK_USERNAME= +KEYCLOAK_PASSWORD= +KEYCLOAK_SCOPE=openid +ACCESS_TOKEN= SPARQL_USER=admin SPARQL_PASS=Passw0rd1 @@ -32,7 +42,6 @@ SPARQL_DATA_FILE=file:///opt/shared-files/o3po.ttl # Currently not used. # Startup behavior for AnzoGraph mode SPARQL_LOAD_ON_START=false -SPARQL_CLEAR_ON_START=false SPARQL_READY_TIMEOUT_S=10 # Dev UX @@ -40,18 +49,69 @@ CORS_ORIGINS=http://localhost:5173 VITE_BACKEND_URL=http://backend:8000 # Frontend right-pane cosmos.gl layout +# Colors accept CSS strings or RGBA tuples like [53,214,255,255]. +# Ranges accept comma-separated values like 50,150. VITE_COSMOS_ENABLE_SIMULATION=true VITE_COSMOS_DEBUG_LAYOUT=false +VITE_COSMOS_BACKGROUND_COLOR="#05070a" VITE_COSMOS_SPACE_SIZE=4096 +VITE_COSMOS_POINT_DEFAULT_COLOR="#b3b3b3" +VITE_COSMOS_POINT_GREYOUT_COLOR= +VITE_COSMOS_POINT_GREYOUT_OPACITY= +VITE_COSMOS_POINT_DEFAULT_SIZE=4 +VITE_COSMOS_POINT_OPACITY=1 +VITE_COSMOS_POINT_SIZE_SCALE=1 +VITE_COSMOS_HOVERED_POINT_CURSOR=pointer +VITE_COSMOS_HOVERED_LINK_CURSOR=pointer +VITE_COSMOS_RENDER_HOVERED_POINT_RING=true +VITE_COSMOS_HOVERED_POINT_RING_COLOR="#35d6ff" +VITE_COSMOS_FOCUSED_POINT_RING_COLOR=white +VITE_COSMOS_RENDER_LINKS=true +VITE_COSMOS_LINK_DEFAULT_COLOR="#666666" +VITE_COSMOS_LINK_OPACITY=1 +VITE_COSMOS_LINK_GREYOUT_OPACITY=0.1 +VITE_COSMOS_LINK_DEFAULT_WIDTH=1 +VITE_COSMOS_HOVERED_LINK_COLOR="#ffd166" +VITE_COSMOS_HOVERED_LINK_WIDTH_INCREASE=2.5 +VITE_COSMOS_LINK_WIDTH_SCALE=1 +VITE_COSMOS_SCALE_LINKS_ON_ZOOM=false VITE_COSMOS_CURVED_LINKS=true +VITE_COSMOS_CURVED_LINK_SEGMENTS=19 +VITE_COSMOS_CURVED_LINK_WEIGHT=0.8 +VITE_COSMOS_CURVED_LINK_CONTROL_POINT_DISTANCE=0.5 +VITE_COSMOS_LINK_DEFAULT_ARROWS=false +VITE_COSMOS_LINK_ARROWS_SIZE_SCALE=1 +VITE_COSMOS_LINK_VISIBILITY_DISTANCE_RANGE=50,150 +VITE_COSMOS_LINK_VISIBILITY_MIN_TRANSPARENCY=0.25 +VITE_COSMOS_USE_CLASSIC_QUADTREE=false VITE_COSMOS_FIT_VIEW_PADDING=0.12 +VITE_COSMOS_FIT_VIEW_ON_INIT=false +VITE_COSMOS_FIT_VIEW_DELAY=250 +VITE_COSMOS_FIT_VIEW_DURATION=250 VITE_COSMOS_SIMULATION_DECAY=5000 VITE_COSMOS_SIMULATION_GRAVITY=0 VITE_COSMOS_SIMULATION_CENTER=0.05 VITE_COSMOS_SIMULATION_REPULSION=0.5 +VITE_COSMOS_SIMULATION_REPULSION_THETA=1.15 +VITE_COSMOS_SIMULATION_REPULSION_QUADTREE_LEVELS=12 VITE_COSMOS_SIMULATION_LINK_SPRING=1 VITE_COSMOS_SIMULATION_LINK_DISTANCE=10 +VITE_COSMOS_SIMULATION_LINK_DISTANCE_RANDOM_VARIATION_RANGE=1,1.2 +VITE_COSMOS_SIMULATION_REPULSION_FROM_MOUSE=2 +VITE_COSMOS_ENABLE_RIGHT_CLICK_REPULSION=false VITE_COSMOS_SIMULATION_FRICTION=0.1 +VITE_COSMOS_SIMULATION_CLUSTER=0.1 +VITE_COSMOS_SHOW_FPS_MONITOR=false +VITE_COSMOS_PIXEL_RATIO=2 +VITE_COSMOS_SCALE_POINTS_ON_ZOOM=false +VITE_COSMOS_INITIAL_ZOOM_LEVEL= +VITE_COSMOS_ENABLE_ZOOM=true +VITE_COSMOS_ENABLE_SIMULATION_DURING_ZOOM=false +VITE_COSMOS_ENABLE_DRAG=true +VITE_COSMOS_RANDOM_SEED= +VITE_COSMOS_POINT_SAMPLING_DISTANCE=150 +VITE_COSMOS_RESCALE_POSITIONS=false +VITE_COSMOS_ATTRIBUTION= # Debugging LOG_SNAPSHOT_TIMINGS=false diff --git a/frontend/src/TripleGraphView.tsx b/frontend/src/TripleGraphView.tsx index 1c5d61e..c2b03a1 100644 --- a/frontend/src/TripleGraphView.tsx +++ b/frontend/src/TripleGraphView.tsx @@ -1,6 +1,6 @@ import { memo, useEffect, useMemo, useRef, useState } from "react"; import { Graph, type GraphConfig } from "@cosmos.gl/graph"; -import { cosmosRuntimeConfig } from "./cosmos_config"; +import { cosmosBackgroundCss, cosmosRuntimeConfig } from "./cosmos_config"; import { computeLayoutMetrics, type GraphLayoutMetrics, @@ -194,28 +194,68 @@ export const TripleGraphView = memo(function TripleGraphView({ model }: TripleGr }; const config: GraphConfig = { - backgroundColor: "#05070a", + backgroundColor: cosmosRuntimeConfig.backgroundColor, spaceSize: cosmosRuntimeConfig.spaceSize, enableSimulation: cosmosRuntimeConfig.enableSimulation, - enableDrag: true, - enableZoom: true, - fitViewOnInit: false, + pointDefaultColor: cosmosRuntimeConfig.pointDefaultColor, + pointGreyoutColor: cosmosRuntimeConfig.pointGreyoutColor, + pointGreyoutOpacity: cosmosRuntimeConfig.pointGreyoutOpacity, + pointDefaultSize: cosmosRuntimeConfig.pointDefaultSize, + pointOpacity: cosmosRuntimeConfig.pointOpacity, + pointSizeScale: cosmosRuntimeConfig.pointSizeScale, + hoveredPointCursor: cosmosRuntimeConfig.hoveredPointCursor, + hoveredLinkCursor: cosmosRuntimeConfig.hoveredLinkCursor, + renderHoveredPointRing: cosmosRuntimeConfig.renderHoveredPointRing, + hoveredPointRingColor: cosmosRuntimeConfig.hoveredPointRingColor, + focusedPointRingColor: cosmosRuntimeConfig.focusedPointRingColor, + renderLinks: cosmosRuntimeConfig.renderLinks, + linkDefaultColor: cosmosRuntimeConfig.linkDefaultColor, + linkOpacity: cosmosRuntimeConfig.linkOpacity, + linkGreyoutOpacity: cosmosRuntimeConfig.linkGreyoutOpacity, + linkDefaultWidth: cosmosRuntimeConfig.linkDefaultWidth, + hoveredLinkColor: cosmosRuntimeConfig.hoveredLinkColor, + hoveredLinkWidthIncrease: cosmosRuntimeConfig.hoveredLinkWidthIncrease, + linkWidthScale: cosmosRuntimeConfig.linkWidthScale, + scaleLinksOnZoom: cosmosRuntimeConfig.scaleLinksOnZoom, + enableDrag: cosmosRuntimeConfig.enableDrag, + enableZoom: cosmosRuntimeConfig.enableZoom, + enableSimulationDuringZoom: cosmosRuntimeConfig.enableSimulationDuringZoom, + fitViewOnInit: cosmosRuntimeConfig.fitViewOnInit, + fitViewDelay: cosmosRuntimeConfig.fitViewDelay, fitViewPadding: cosmosRuntimeConfig.fitViewPadding, - rescalePositions: false, + fitViewDuration: cosmosRuntimeConfig.fitViewDuration, + initialZoomLevel: cosmosRuntimeConfig.initialZoomLevel, + pointSamplingDistance: cosmosRuntimeConfig.pointSamplingDistance, + rescalePositions: cosmosRuntimeConfig.rescalePositions, curvedLinks: cosmosRuntimeConfig.curvedLinks, + curvedLinkSegments: cosmosRuntimeConfig.curvedLinkSegments, + curvedLinkWeight: cosmosRuntimeConfig.curvedLinkWeight, + curvedLinkControlPointDistance: cosmosRuntimeConfig.curvedLinkControlPointDistance, + linkDefaultArrows: cosmosRuntimeConfig.linkDefaultArrows, + linkArrowsSizeScale: cosmosRuntimeConfig.linkArrowsSizeScale, + linkVisibilityDistanceRange: cosmosRuntimeConfig.linkVisibilityDistanceRange, + linkVisibilityMinTransparency: cosmosRuntimeConfig.linkVisibilityMinTransparency, + useClassicQuadtree: cosmosRuntimeConfig.useClassicQuadtree, simulationDecay: cosmosRuntimeConfig.simulationDecay, simulationGravity: cosmosRuntimeConfig.simulationGravity, simulationCenter: cosmosRuntimeConfig.simulationCenter, simulationRepulsion: cosmosRuntimeConfig.simulationRepulsion, + simulationRepulsionTheta: cosmosRuntimeConfig.simulationRepulsionTheta, + simulationRepulsionQuadtreeLevels: + cosmosRuntimeConfig.simulationRepulsionQuadtreeLevels, simulationLinkSpring: cosmosRuntimeConfig.simulationLinkSpring, simulationLinkDistance: cosmosRuntimeConfig.simulationLinkDistance, + simulationLinkDistRandomVariationRange: + cosmosRuntimeConfig.simulationLinkDistRandomVariationRange, + simulationRepulsionFromMouse: cosmosRuntimeConfig.simulationRepulsionFromMouse, + enableRightClickRepulsion: cosmosRuntimeConfig.enableRightClickRepulsion, simulationFriction: cosmosRuntimeConfig.simulationFriction, - renderHoveredPointRing: true, - hoveredPointRingColor: "#35d6ff", - hoveredPointCursor: "pointer", - hoveredLinkCursor: "pointer", - hoveredLinkColor: "#ffd166", - hoveredLinkWidthIncrease: 2.5, + simulationCluster: cosmosRuntimeConfig.simulationCluster, + randomSeed: cosmosRuntimeConfig.randomSeed, + showFPSMonitor: cosmosRuntimeConfig.showFPSMonitor, + pixelRatio: cosmosRuntimeConfig.pixelRatio, + scalePointsOnZoom: cosmosRuntimeConfig.scalePointsOnZoom, + attribution: cosmosRuntimeConfig.attribution, onSimulationStart: () => { reportLayout("simulation-start", "running", 1); }, @@ -320,7 +360,14 @@ export const TripleGraphView = memo(function TripleGraphView({ model }: TripleGr }, [activeDetail]); return ( -