@ltm-blueverse/alpha-semantic-hub 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +307 -1567
- package/explorer/src/App.tsx +83 -83
- package/explorer/src/index.css +3 -3
- package/explorer/src/ui/primitives.css +25 -25
- package/explorer/src/workspaces/DecisionWorkspace/DecisionWorkspace.tsx +7 -7
- package/explorer/src/workspaces/DiffMergeWorkspace/DiffMergeWorkspace.tsx +4 -4
- package/explorer/src/workspaces/EnrichWorkspace/EntityResolutionTab.tsx +24 -24
- package/explorer/src/workspaces/EnrichWorkspace/RegistryTab.tsx +22 -22
- package/explorer/src/workspaces/GraphWorkspace/GraphCanvas.tsx +1 -1
- package/explorer/src/workspaces/GraphWorkspace/GraphInspectorPanel.tsx +18 -18
- package/explorer/src/workspaces/GraphWorkspace/GraphLoadingOverlay.tsx +25 -25
- package/explorer/src/workspaces/GraphWorkspace/GraphWorkspace.tsx +28 -28
- package/explorer/src/workspaces/GraphWorkspace/MarkdownContentViewer.tsx +15 -15
- package/explorer/src/workspaces/GraphWorkspace/graphAnalytics.ts +1 -1
- package/explorer/src/workspaces/GraphWorkspace/graphConfig.ts +15 -15
- package/explorer/src/workspaces/GraphWorkspace/graphSceneLayers.ts +8 -8
- package/explorer/src/workspaces/GraphWorkspace/graphSceneState.ts +11 -11
- package/explorer/src/workspaces/GraphWorkspace/graphTheme.ts +66 -66
- package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPlugin.tsx +17 -17
- package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPluginPhaseC.tsx +22 -22
- package/explorer/src/workspaces/GraphWorkspace/plugins/legendPlugin.tsx +7 -7
- package/explorer/src/workspaces/GraphWorkspace/plugins/neighborhoodPanelPlugin.tsx +10 -10
- package/explorer/src/workspaces/GraphWorkspace/plugins/temporalOverlayPlugin.tsx +9 -9
- package/explorer/src/workspaces/ImportExportWorkspace/ImportExportWorkspace.tsx +4 -4
- package/explorer/src/workspaces/LineageWorkspace/LineageDiagram.tsx +8 -8
- package/explorer/src/workspaces/ManageWorkspace/KGOverviewTab.tsx +5 -5
- package/explorer/src/workspaces/ManageWorkspace/OntologySummaryTab.tsx +19 -19
- package/explorer/src/workspaces/MemoryWorkspace.tsx +2 -2
- package/explorer/src/workspaces/OntologyWorkspace/AlignmentsTab.tsx +30 -30
- package/explorer/src/workspaces/OntologyWorkspace/HealthTab.tsx +26 -26
- package/explorer/src/workspaces/OntologyWorkspace/OntologyEditor.tsx +32 -32
- package/explorer/src/workspaces/OntologyWorkspace/OntologyLoader.tsx +22 -22
- package/explorer/src/workspaces/OntologyWorkspace/OntologyManager.tsx +40 -40
- package/explorer/src/workspaces/OntologyWorkspace/OntologySearch.tsx +22 -22
- package/explorer/src/workspaces/OntologyWorkspace/ProposalReview.tsx +31 -31
- package/explorer/src/workspaces/OntologyWorkspace/SKOSVocabularyManager.tsx +26 -26
- package/explorer/src/workspaces/OntologyWorkspace/ShaclStudio.tsx +21 -21
- package/explorer/src/workspaces/OntologyWorkspace/VersionsTab.tsx +38 -38
- package/explorer/src/workspaces/OntologyWorkspace/ontologyEditorModel.ts +3 -3
- package/explorer/src/workspaces/ReasoningWorkspace.tsx +4 -4
- package/explorer/src/workspaces/SparqlWorkspace/SparqlWorkspace.tsx +3 -3
- package/explorer/src/workspaces/VocabularyWorkspace/ConceptTree.tsx +3 -3
- package/explorer/src/workspaces/VocabularyWorkspace/ImportDropzone.tsx +4 -4
- package/explorer/src/workspaces/VocabularyWorkspace/PropertyPanel.tsx +8 -8
- package/explorer/src/workspaces/VocabularyWorkspace/Sidebar.tsx +4 -4
- package/explorer/src/workspaces/VocabularyWorkspace/VocabularyWorkspace.tsx +3 -3
- package/package.json +1 -1
|
@@ -105,7 +105,7 @@ export function HealthTab({ onFixInEditor }: HealthTabProps) {
|
|
|
105
105
|
{health.dimensions.map((dimension) => (
|
|
106
106
|
<div key={dimension.key} style={dimensionCardStyle}>
|
|
107
107
|
<div style={dimensionHeadStyle}>
|
|
108
|
-
<span style={{ color: "#
|
|
108
|
+
<span style={{ color: "#2d1619", fontWeight: 900 }}>{dimension.label}</span>
|
|
109
109
|
<span style={statusBadgeStyle(dimension.status)}>{dimension.status}</span>
|
|
110
110
|
</div>
|
|
111
111
|
<div style={barTrackStyle}>
|
|
@@ -141,8 +141,8 @@ function IssueRow({ issue, onFixInEditor }: { issue: HealthIssue; onFixInEditor?
|
|
|
141
141
|
<div style={issueRowStyle}>
|
|
142
142
|
<div style={severityDotStyle(issue.severity)} />
|
|
143
143
|
<div>
|
|
144
|
-
<div style={{ color: "#
|
|
145
|
-
<div style={{ color: "#
|
|
144
|
+
<div style={{ color: "#2d1619", fontWeight: 800 }}>{issue.entity_label || issue.category}</div>
|
|
145
|
+
<div style={{ color: "#aa485b", fontSize: 13, lineHeight: 1.45 }}>{issue.message}</div>
|
|
146
146
|
{issue.entity_uri ? <div style={monoStyle}>{issue.entity_uri}</div> : null}
|
|
147
147
|
</div>
|
|
148
148
|
<span style={categoryStyle}>{issue.category}</span>
|
|
@@ -160,13 +160,13 @@ function IssueRow({ issue, onFixInEditor }: { issue: HealthIssue; onFixInEditor?
|
|
|
160
160
|
|
|
161
161
|
function dimensionColor(score: number, status: string) {
|
|
162
162
|
if (status === "unavailable") return "#9c7a82";
|
|
163
|
-
if (score >= 80) return "#
|
|
164
|
-
if (score >= 55) return "#
|
|
165
|
-
return "#
|
|
163
|
+
if (score >= 80) return "#0e8571";
|
|
164
|
+
if (score >= 55) return "#e86a2e";
|
|
165
|
+
return "#e0556d";
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
function statusBadgeStyle(status: string): CSSProperties {
|
|
169
|
-
const color = status === "ok" ? "#
|
|
169
|
+
const color = status === "ok" ? "#0e8571" : status === "unavailable" ? "#9c7a82" : "#e86a2e";
|
|
170
170
|
return {
|
|
171
171
|
color,
|
|
172
172
|
background: `${color}18`,
|
|
@@ -180,35 +180,35 @@ function statusBadgeStyle(status: string): CSSProperties {
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
function severityDotStyle(severity: string): CSSProperties {
|
|
183
|
-
const color = severity === "critical" ? "#
|
|
183
|
+
const color = severity === "critical" ? "#e0556d" : severity === "warning" ? "#e86a2e" : "#ff2d4b";
|
|
184
184
|
return { width: 10, height: 10, borderRadius: "50%", background: color, boxShadow: `0 0 18px ${color}55`, marginTop: 5 };
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
const pageStyle: CSSProperties = { height: "100%", overflow: "auto", padding: 22, display: "flex", flexDirection: "column", gap: 16 };
|
|
188
|
-
const heroStyle: CSSProperties = { display: "flex", justifyContent: "space-between", gap: 18, padding: 22, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 22, background: "linear-gradient(135deg, rgba(
|
|
189
|
-
const kickerStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", color: "#
|
|
190
|
-
const titleStyle: CSSProperties = { margin: "8px 0", color: "#
|
|
191
|
-
const textStyle: CSSProperties = { margin: 0, color: "#
|
|
188
|
+
const heroStyle: CSSProperties = { display: "flex", justifyContent: "space-between", gap: 18, padding: 22, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 22, background: "linear-gradient(135deg, rgba(255, 255, 255,0.94), rgba(255, 255, 255,0.9))" };
|
|
189
|
+
const kickerStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", color: "#0e7f66", fontSize: 11, fontWeight: 900, letterSpacing: "0.12em", textTransform: "uppercase" };
|
|
190
|
+
const titleStyle: CSSProperties = { margin: "8px 0", color: "#2d1619", fontSize: 26, letterSpacing: "-0.04em" };
|
|
191
|
+
const textStyle: CSSProperties = { margin: 0, color: "#aa485b", lineHeight: 1.6, maxWidth: 620 };
|
|
192
192
|
const selectorShellStyle: CSSProperties = { minWidth: 320 };
|
|
193
193
|
const labelStyle: CSSProperties = { display: "block", color: "#9c7a82", fontSize: 11, fontWeight: 800, margin: "0 0 6px", textTransform: "uppercase", letterSpacing: "0.08em" };
|
|
194
|
-
const inputStyle: CSSProperties = { width: "100%", boxSizing: "border-box", border: "1px solid rgba(255,107,129,0.14)", borderRadius: 12, padding: "10px 12px", background: "rgba(
|
|
194
|
+
const inputStyle: CSSProperties = { width: "100%", boxSizing: "border-box", border: "1px solid rgba(255,107,129,0.14)", borderRadius: 12, padding: "10px 12px", background: "rgba(255, 255, 255,0.8)", color: "#2d1619" };
|
|
195
195
|
const scoreGridStyle: CSSProperties = { display: "grid", gridTemplateColumns: "220px repeat(5, minmax(180px, 1fr))", gap: 12 };
|
|
196
|
-
const scoreCardStyle: CSSProperties = { padding: 18, borderRadius: 20, background: "rgba(
|
|
197
|
-
const scoreValueStyle: CSSProperties = { color: "#
|
|
198
|
-
const dimensionCardStyle: CSSProperties = { padding: 16, borderRadius: 18, background: "rgba(
|
|
196
|
+
const scoreCardStyle: CSSProperties = { padding: 18, borderRadius: 20, background: "rgba(255, 255, 255,0.88)", border: "1px solid rgba(124,231,211,0.2)", display: "flex", flexDirection: "column", gap: 10 };
|
|
197
|
+
const scoreValueStyle: CSSProperties = { color: "#0e7f66", fontSize: 52, lineHeight: 1, fontWeight: 950, letterSpacing: "-0.06em" };
|
|
198
|
+
const dimensionCardStyle: CSSProperties = { padding: 16, borderRadius: 18, background: "rgba(255, 255, 255,0.78)", border: "1px solid rgba(255,107,129,0.12)" };
|
|
199
199
|
const dimensionHeadStyle: CSSProperties = { display: "flex", justifyContent: "space-between", gap: 8, alignItems: "center", marginBottom: 12 };
|
|
200
|
-
const barTrackStyle: CSSProperties = { height: 8, borderRadius: 999, background: "rgba(
|
|
200
|
+
const barTrackStyle: CSSProperties = { height: 8, borderRadius: 999, background: "rgba(28, 20, 24,0.06)", overflow: "hidden" };
|
|
201
201
|
const barFillStyle: CSSProperties = { height: "100%", borderRadius: 999 };
|
|
202
|
-
const dimensionFootStyle: CSSProperties = { display: "flex", flexDirection: "column", gap: 6, color: "#
|
|
203
|
-
const cardStyle: CSSProperties = { padding: 18, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 20, background: "rgba(
|
|
204
|
-
const sectionTitleStyle: CSSProperties = { margin: "0 0 14px", color: "#
|
|
202
|
+
const dimensionFootStyle: CSSProperties = { display: "flex", flexDirection: "column", gap: 6, color: "#aa485b", fontSize: 12, marginTop: 10 };
|
|
203
|
+
const cardStyle: CSSProperties = { padding: 18, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 20, background: "rgba(255, 255, 255,0.78)" };
|
|
204
|
+
const sectionTitleStyle: CSSProperties = { margin: "0 0 14px", color: "#2d1619", fontSize: 16 };
|
|
205
205
|
const issueListStyle: CSSProperties = { display: "flex", flexDirection: "column", gap: 8 };
|
|
206
|
-
const issueRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "14px 1fr auto auto", gap: 12, alignItems: "start", padding: 12, borderRadius: 14, background: "rgba(
|
|
207
|
-
const categoryStyle: CSSProperties = { color: "#
|
|
208
|
-
const smallButtonStyle: CSSProperties = { display: "inline-flex", gap: 6, alignItems: "center", border: "1px solid rgba(255,107,129,0.16)", borderRadius: 10, padding: "7px 9px", background: "rgba(255,107,129,0.08)", color: "#
|
|
209
|
-
const secondaryButtonStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", justifyContent: "center", border: "1px solid rgba(255,107,129,0.16)", borderRadius: 12, padding: "10px 12px", background: "rgba(255,107,129,0.08)", color: "#
|
|
206
|
+
const issueRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "14px 1fr auto auto", gap: 12, alignItems: "start", padding: 12, borderRadius: 14, background: "rgba(28, 20, 24,0.03)", border: "1px solid rgba(255,107,129,0.08)" };
|
|
207
|
+
const categoryStyle: CSSProperties = { color: "#0e7f66", border: "1px solid rgba(158,232,215,0.22)", borderRadius: 999, padding: "4px 8px", fontSize: 10, fontWeight: 900 };
|
|
208
|
+
const smallButtonStyle: CSSProperties = { display: "inline-flex", gap: 6, alignItems: "center", border: "1px solid rgba(255,107,129,0.16)", borderRadius: 10, padding: "7px 9px", background: "rgba(255,107,129,0.08)", color: "#2d1619", cursor: "pointer", fontWeight: 800 };
|
|
209
|
+
const secondaryButtonStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", justifyContent: "center", border: "1px solid rgba(255,107,129,0.16)", borderRadius: 12, padding: "10px 12px", background: "rgba(255,107,129,0.08)", color: "#2d1619", cursor: "pointer", fontWeight: 900 };
|
|
210
210
|
const monoStyle: CSSProperties = { marginTop: 4, color: "#9c7a82", fontSize: 11, fontFamily: "JetBrains Mono, monospace", wordBreak: "break-all" };
|
|
211
211
|
const mutedStyle: CSSProperties = { margin: 0, color: "#9c7a82", fontSize: 13 };
|
|
212
|
-
const loadingStyle: CSSProperties = { display: "inline-flex", alignItems: "center", gap: 8, color: "#
|
|
212
|
+
const loadingStyle: CSSProperties = { display: "inline-flex", alignItems: "center", gap: 8, color: "#aa485b", padding: 18 };
|
|
213
213
|
const emptyStyle: CSSProperties = { color: "#9c7a82", padding: 22 };
|
|
214
|
-
const errorStyle: CSSProperties = { display: "flex", alignItems: "center", gap: 8, padding: 12, borderRadius: 14, color: "#
|
|
214
|
+
const errorStyle: CSSProperties = { display: "flex", alignItems: "center", gap: 8, padding: 12, borderRadius: 14, color: "#e98498", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)" };
|
|
@@ -66,7 +66,7 @@ const ontologyFlowThemeCss = `
|
|
|
66
66
|
overflow: hidden;
|
|
67
67
|
border: 1px solid rgba(255, 107, 129, 0.2);
|
|
68
68
|
border-radius: 9px;
|
|
69
|
-
background: rgba(
|
|
69
|
+
background: rgba(255, 255, 255, 0.96);
|
|
70
70
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.38);
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -75,24 +75,24 @@ const ontologyFlowThemeCss = `
|
|
|
75
75
|
height: 30px;
|
|
76
76
|
background: transparent;
|
|
77
77
|
border-bottom-color: rgba(255, 107, 129, 0.14);
|
|
78
|
-
color: #
|
|
78
|
+
color: #aa485b;
|
|
79
79
|
transition: color 140ms ease, background 140ms ease;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
.ontology-editor-flow .react-flow__controls-button:hover {
|
|
83
83
|
background: rgba(255, 45, 75, 0.14);
|
|
84
|
-
color: #
|
|
84
|
+
color: #2d1619;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
.ontology-editor-flow .react-flow__controls-button:focus-visible {
|
|
88
88
|
position: relative;
|
|
89
89
|
z-index: 1;
|
|
90
|
-
outline: 2px solid #
|
|
90
|
+
outline: 2px solid #d41736;
|
|
91
91
|
outline-offset: -2px;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
.ontology-editor-flow .react-flow__controls-button:disabled {
|
|
95
|
-
background: rgba(
|
|
95
|
+
background: rgba(255, 255, 255, 0.32);
|
|
96
96
|
color: #40566f;
|
|
97
97
|
}
|
|
98
98
|
`;
|
|
@@ -102,7 +102,7 @@ const classNodeStyle: React.CSSProperties = {
|
|
|
102
102
|
borderRadius: "8px",
|
|
103
103
|
background: "linear-gradient(135deg, rgba(255, 45, 75, 0.15), rgba(255, 45, 75, 0.05))",
|
|
104
104
|
border: "1px solid rgba(255, 107, 129, 0.3)",
|
|
105
|
-
color: "#
|
|
105
|
+
color: "#2d1619",
|
|
106
106
|
fontSize: "13px",
|
|
107
107
|
fontWeight: "600",
|
|
108
108
|
minWidth: "140px",
|
|
@@ -118,7 +118,7 @@ const classNodeHeader: React.CSSProperties = {
|
|
|
118
118
|
|
|
119
119
|
const classNodeSub: React.CSSProperties = {
|
|
120
120
|
fontSize: "11px",
|
|
121
|
-
color: "#
|
|
121
|
+
color: "#aa485b",
|
|
122
122
|
fontWeight: "500",
|
|
123
123
|
};
|
|
124
124
|
|
|
@@ -216,8 +216,8 @@ function buildEditorElements(apiNodes: OntologyGraphNode[], apiEdges: OntologyGr
|
|
|
216
216
|
type: "default",
|
|
217
217
|
markerEnd: { type: MarkerType.ArrowClosed },
|
|
218
218
|
style: { stroke: "rgba(255, 107, 129, 0.72)", strokeWidth: 1.5 },
|
|
219
|
-
labelStyle: { fill: "#
|
|
220
|
-
labelBgStyle: { fill: "#
|
|
219
|
+
labelStyle: { fill: "#2a4261", fontSize: 11, fontWeight: 600 },
|
|
220
|
+
labelBgStyle: { fill: "#ffffff", fillOpacity: 0.9 },
|
|
221
221
|
}));
|
|
222
222
|
return { nodes, edges };
|
|
223
223
|
}
|
|
@@ -491,7 +491,7 @@ export function OntologyEditor() {
|
|
|
491
491
|
display: "flex",
|
|
492
492
|
gap: "8px",
|
|
493
493
|
padding: "12px 16px",
|
|
494
|
-
background: "rgba(
|
|
494
|
+
background: "rgba(255, 255, 255, 0.92)",
|
|
495
495
|
borderBottom: "1px solid rgba(255, 120, 140, 0.12)",
|
|
496
496
|
flexWrap: "wrap",
|
|
497
497
|
};
|
|
@@ -504,7 +504,7 @@ export function OntologyEditor() {
|
|
|
504
504
|
borderRadius: "8px",
|
|
505
505
|
border: "1px solid rgba(255, 107, 129, 0.18)",
|
|
506
506
|
background: "rgba(255, 45, 75, 0.08)",
|
|
507
|
-
color: "#
|
|
507
|
+
color: "#2d1619",
|
|
508
508
|
fontSize: "12px",
|
|
509
509
|
fontWeight: "600",
|
|
510
510
|
cursor: "pointer",
|
|
@@ -515,15 +515,15 @@ export function OntologyEditor() {
|
|
|
515
515
|
padding: "8px 12px",
|
|
516
516
|
borderRadius: "8px",
|
|
517
517
|
border: "1px solid rgba(255, 107, 129, 0.18)",
|
|
518
|
-
background: "rgba(
|
|
519
|
-
color: "#
|
|
518
|
+
background: "rgba(255, 255, 255, 0.88)",
|
|
519
|
+
color: "#2d1619",
|
|
520
520
|
fontSize: "12px",
|
|
521
521
|
minWidth: "260px",
|
|
522
522
|
};
|
|
523
523
|
|
|
524
524
|
const contextMenuStyle: React.CSSProperties = {
|
|
525
525
|
position: "fixed",
|
|
526
|
-
background: "rgba(
|
|
526
|
+
background: "rgba(255, 255, 255, 0.95)",
|
|
527
527
|
border: "1px solid rgba(255, 107, 129, 0.3)",
|
|
528
528
|
borderRadius: "8px",
|
|
529
529
|
padding: "8px 0",
|
|
@@ -537,7 +537,7 @@ export function OntologyEditor() {
|
|
|
537
537
|
display: "flex",
|
|
538
538
|
alignItems: "center",
|
|
539
539
|
gap: "10px",
|
|
540
|
-
color: "#
|
|
540
|
+
color: "#2d1619",
|
|
541
541
|
fontSize: "13px",
|
|
542
542
|
cursor: "pointer",
|
|
543
543
|
transition: "160ms ease",
|
|
@@ -548,7 +548,7 @@ export function OntologyEditor() {
|
|
|
548
548
|
width: "320px",
|
|
549
549
|
minWidth: "320px",
|
|
550
550
|
boxSizing: "border-box",
|
|
551
|
-
background: "rgba(
|
|
551
|
+
background: "rgba(255, 255, 255, 0.95)",
|
|
552
552
|
borderLeft: "1px solid rgba(255, 120, 140, 0.12)",
|
|
553
553
|
padding: "20px",
|
|
554
554
|
overflow: "auto",
|
|
@@ -556,7 +556,7 @@ export function OntologyEditor() {
|
|
|
556
556
|
};
|
|
557
557
|
|
|
558
558
|
return (
|
|
559
|
-
<div style={{ display: "flex", flexDirection: "column", height: "100%", background: "#
|
|
559
|
+
<div style={{ display: "flex", flexDirection: "column", height: "100%", background: "#ffffff" }}>
|
|
560
560
|
<style>{ontologyFlowThemeCss}</style>
|
|
561
561
|
<div style={toolbarStyle}>
|
|
562
562
|
<select
|
|
@@ -624,9 +624,9 @@ export function OntologyEditor() {
|
|
|
624
624
|
onEdgeContextMenu={handleEdgeContextMenu}
|
|
625
625
|
nodeTypes={nodeTypes}
|
|
626
626
|
fitView
|
|
627
|
-
style={{ background: "#
|
|
627
|
+
style={{ background: "#ffffff" }}
|
|
628
628
|
>
|
|
629
|
-
<Background color="#
|
|
629
|
+
<Background color="#f9fafa" gap={20} />
|
|
630
630
|
<Controls />
|
|
631
631
|
<MiniMap {...ONTOLOGY_MINIMAP_THEME} />
|
|
632
632
|
</ReactFlow>
|
|
@@ -635,10 +635,10 @@ export function OntologyEditor() {
|
|
|
635
635
|
<div style={canvasMessageStyle}>Loading ontology structure…</div>
|
|
636
636
|
)}
|
|
637
637
|
{!isLoadingGraph && graphError && (
|
|
638
|
-
<div style={{ ...canvasMessageStyle, color: "#
|
|
638
|
+
<div style={{ ...canvasMessageStyle, color: "#3f1f1b" }}>{graphError}</div>
|
|
639
639
|
)}
|
|
640
640
|
{!isLoadingGraph && !graphError && unownedEntity && (
|
|
641
|
-
<div style={{ ...canvasMessageStyle, color: "#
|
|
641
|
+
<div style={{ ...canvasMessageStyle, color: "#e86a2e" }}>
|
|
642
642
|
No registered ontology owns {unownedEntity}. Pick an ontology above to start editing.
|
|
643
643
|
</div>
|
|
644
644
|
)}
|
|
@@ -662,7 +662,7 @@ export function OntologyEditor() {
|
|
|
662
662
|
</div>
|
|
663
663
|
</>
|
|
664
664
|
) : (
|
|
665
|
-
<div style={{ ...contextItemStyle, cursor: "default", color: "#
|
|
665
|
+
<div style={{ ...contextItemStyle, cursor: "default", color: "#aa485b" }}>
|
|
666
666
|
This term is read-only
|
|
667
667
|
</div>
|
|
668
668
|
)}
|
|
@@ -672,7 +672,7 @@ export function OntologyEditor() {
|
|
|
672
672
|
|
|
673
673
|
{selectedElement && (
|
|
674
674
|
<div style={detailPanelStyle}>
|
|
675
|
-
<h3 style={{ margin: "0 0 16px", color: "#
|
|
675
|
+
<h3 style={{ margin: "0 0 16px", color: "#2d1619", fontSize: "16px" }}>
|
|
676
676
|
{"source" in selectedElement
|
|
677
677
|
? "Relationship Details"
|
|
678
678
|
: selectedElement.data.entityType === "property"
|
|
@@ -684,17 +684,17 @@ export function OntologyEditor() {
|
|
|
684
684
|
: "Class Details"}
|
|
685
685
|
</h3>
|
|
686
686
|
<div style={{ marginBottom: "12px" }}>
|
|
687
|
-
<label style={{ display: "block", color: "#
|
|
687
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
688
688
|
ID
|
|
689
689
|
</label>
|
|
690
|
-
<div style={{ color: "#
|
|
690
|
+
<div style={{ color: "#2d1619", fontSize: "13px", wordBreak: "break-all" }}>
|
|
691
691
|
{selectedElement.id}
|
|
692
692
|
</div>
|
|
693
693
|
</div>
|
|
694
694
|
{!("source" in selectedElement) && (
|
|
695
695
|
<>
|
|
696
696
|
<div style={{ marginBottom: "12px" }}>
|
|
697
|
-
<label style={{ display: "block", color: "#
|
|
697
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
698
698
|
Label
|
|
699
699
|
</label>
|
|
700
700
|
<input
|
|
@@ -732,17 +732,17 @@ export function OntologyEditor() {
|
|
|
732
732
|
padding: "8px",
|
|
733
733
|
borderRadius: "6px",
|
|
734
734
|
border: "1px solid rgba(255, 107, 129, 0.2)",
|
|
735
|
-
background: "rgba(
|
|
736
|
-
color: "#
|
|
735
|
+
background: "rgba(255, 255, 255, 0.8)",
|
|
736
|
+
color: "#2d1619",
|
|
737
737
|
fontSize: "13px",
|
|
738
738
|
}}
|
|
739
739
|
/>
|
|
740
740
|
</div>
|
|
741
741
|
<div style={{ marginBottom: "12px" }}>
|
|
742
|
-
<label style={{ display: "block", color: "#
|
|
742
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
743
743
|
Type
|
|
744
744
|
</label>
|
|
745
|
-
<div style={{ color: "#
|
|
745
|
+
<div style={{ color: "#2d1619", fontSize: "13px" }}>
|
|
746
746
|
{selectedElement.data.type || "owl:Class"}
|
|
747
747
|
</div>
|
|
748
748
|
</div>
|
|
@@ -763,8 +763,8 @@ const canvasMessageStyle: React.CSSProperties = {
|
|
|
763
763
|
padding: "10px 14px",
|
|
764
764
|
borderRadius: "8px",
|
|
765
765
|
border: "1px solid rgba(255, 107, 129, 0.18)",
|
|
766
|
-
background: "rgba(
|
|
767
|
-
color: "#
|
|
766
|
+
background: "rgba(255, 255, 255, 0.9)",
|
|
767
|
+
color: "#aa485b",
|
|
768
768
|
fontSize: "13px",
|
|
769
769
|
pointerEvents: "none",
|
|
770
770
|
};
|
|
@@ -113,8 +113,8 @@ function PreviewCard({ preview }: { preview: OntologyPreview }) {
|
|
|
113
113
|
return (
|
|
114
114
|
<div style={previewCardStyle}>
|
|
115
115
|
<div style={{ display: "flex", alignItems: "center", gap: 8, marginBottom: 12 }}>
|
|
116
|
-
<CheckCircle2 size={16} color="#
|
|
117
|
-
<span style={{ color: "#
|
|
116
|
+
<CheckCircle2 size={16} color="#1f9d5f" />
|
|
117
|
+
<span style={{ color: "#1f9d5f", fontSize: 12, fontWeight: 700 }}>
|
|
118
118
|
Preview ready
|
|
119
119
|
</span>
|
|
120
120
|
<Badge label={preview.format} color="#ff2d4b" />
|
|
@@ -122,7 +122,7 @@ function PreviewCard({ preview }: { preview: OntologyPreview }) {
|
|
|
122
122
|
|
|
123
123
|
<div style={previewTitleStyle}>{preview.name}</div>
|
|
124
124
|
{preview.description && (
|
|
125
|
-
<div style={{ color: "#
|
|
125
|
+
<div style={{ color: "#aa485b", fontSize: 12, marginTop: 6, lineHeight: 1.5 }}>
|
|
126
126
|
{preview.description}
|
|
127
127
|
</div>
|
|
128
128
|
)}
|
|
@@ -156,7 +156,7 @@ function PreviewRow({
|
|
|
156
156
|
</span>
|
|
157
157
|
<span
|
|
158
158
|
style={{
|
|
159
|
-
color: "#
|
|
159
|
+
color: "#602b34",
|
|
160
160
|
fontSize: 11,
|
|
161
161
|
fontFamily: mono ? "monospace" : undefined,
|
|
162
162
|
wordBreak: "break-all",
|
|
@@ -426,10 +426,10 @@ function FileUploadPanel({ onLoaded }: { onLoaded: () => void }) {
|
|
|
426
426
|
>
|
|
427
427
|
<FileUp size={24} color="#ff2d4b" />
|
|
428
428
|
{fileName ? (
|
|
429
|
-
<div style={{ color: "#
|
|
429
|
+
<div style={{ color: "#2d1619", fontSize: 13, fontWeight: 600 }}>{fileName}</div>
|
|
430
430
|
) : (
|
|
431
431
|
<>
|
|
432
|
-
<div style={{ color: "#
|
|
432
|
+
<div style={{ color: "#aa485b", fontSize: 13 }}>
|
|
433
433
|
Drop a file here or <span style={{ color: "#ff2d4b" }}>browse</span>
|
|
434
434
|
</div>
|
|
435
435
|
<div style={{ color: "#8f6d75", fontSize: 11 }}>
|
|
@@ -649,8 +649,8 @@ export function OntologyLoader({ onLoaded, onClose }: LoaderProps) {
|
|
|
649
649
|
<div style={modalStyle}>
|
|
650
650
|
<div style={modalHeaderStyle}>
|
|
651
651
|
<div>
|
|
652
|
-
<div style={{ color: "#
|
|
653
|
-
<div style={{ color: "#
|
|
652
|
+
<div style={{ color: "#2d1619", fontSize: 16, fontWeight: 800 }}>Load Ontology</div>
|
|
653
|
+
<div style={{ color: "#aa485b", fontSize: 12, marginTop: 2 }}>
|
|
654
654
|
Import from URL, upload a file, or create a new ontology
|
|
655
655
|
</div>
|
|
656
656
|
</div>
|
|
@@ -695,7 +695,7 @@ export function OntologyLoader({ onLoaded, onClose }: LoaderProps) {
|
|
|
695
695
|
const overlayStyle: React.CSSProperties = {
|
|
696
696
|
position: "fixed",
|
|
697
697
|
inset: 0,
|
|
698
|
-
background: "rgba(
|
|
698
|
+
background: "rgba(255, 255, 255,0.78)",
|
|
699
699
|
backdropFilter: "blur(6px)",
|
|
700
700
|
display: "flex",
|
|
701
701
|
alignItems: "center",
|
|
@@ -710,8 +710,8 @@ const modalStyle: React.CSSProperties = {
|
|
|
710
710
|
flexDirection: "column",
|
|
711
711
|
borderRadius: 20,
|
|
712
712
|
border: "1px solid rgba(255,107,129,0.16)",
|
|
713
|
-
background: "linear-gradient(180deg, rgba(
|
|
714
|
-
boxShadow: "0 32px 80px rgba(0,0,0,0.5), inset 0 1px 0 rgba(
|
|
713
|
+
background: "linear-gradient(180deg, rgba(255, 255, 255,0.98), rgba(255, 255, 255,0.96))",
|
|
714
|
+
boxShadow: "0 32px 80px rgba(0,0,0,0.5), inset 0 1px 0 rgba(28, 20, 24,0.06)",
|
|
715
715
|
overflow: "hidden",
|
|
716
716
|
};
|
|
717
717
|
|
|
@@ -749,7 +749,7 @@ const modalTabBase: React.CSSProperties = {
|
|
|
749
749
|
};
|
|
750
750
|
|
|
751
751
|
const modalTabIdle: React.CSSProperties = {
|
|
752
|
-
color: "#
|
|
752
|
+
color: "#aa485b",
|
|
753
753
|
};
|
|
754
754
|
|
|
755
755
|
const modalTabActive: React.CSSProperties = {
|
|
@@ -760,7 +760,7 @@ const modalTabActive: React.CSSProperties = {
|
|
|
760
760
|
const closeIconBtnStyle: React.CSSProperties = {
|
|
761
761
|
background: "transparent",
|
|
762
762
|
border: "none",
|
|
763
|
-
color: "#
|
|
763
|
+
color: "#aa485b",
|
|
764
764
|
cursor: "pointer",
|
|
765
765
|
padding: 4,
|
|
766
766
|
borderRadius: 8,
|
|
@@ -769,7 +769,7 @@ const closeIconBtnStyle: React.CSSProperties = {
|
|
|
769
769
|
};
|
|
770
770
|
|
|
771
771
|
const fieldLabelStyle: React.CSSProperties = {
|
|
772
|
-
color: "#
|
|
772
|
+
color: "#aa485b",
|
|
773
773
|
fontSize: 11,
|
|
774
774
|
fontWeight: 700,
|
|
775
775
|
letterSpacing: "0.05em",
|
|
@@ -781,7 +781,7 @@ const inputStyle: React.CSSProperties = {
|
|
|
781
781
|
borderRadius: 8,
|
|
782
782
|
border: "1px solid rgba(255,107,129,0.16)",
|
|
783
783
|
background: "rgba(0,0,0,0.24)",
|
|
784
|
-
color: "#
|
|
784
|
+
color: "#2d1619",
|
|
785
785
|
fontSize: 13,
|
|
786
786
|
outline: "none",
|
|
787
787
|
boxSizing: "border-box",
|
|
@@ -798,7 +798,7 @@ const previewBtnStyle: React.CSSProperties = {
|
|
|
798
798
|
borderRadius: 8,
|
|
799
799
|
border: "1px solid rgba(255,107,129,0.2)",
|
|
800
800
|
background: "rgba(255,45,75,0.08)",
|
|
801
|
-
color: "#
|
|
801
|
+
color: "#d41736",
|
|
802
802
|
fontSize: 12,
|
|
803
803
|
fontWeight: 600,
|
|
804
804
|
cursor: "pointer",
|
|
@@ -816,7 +816,7 @@ const primaryBtnStyle: React.CSSProperties = {
|
|
|
816
816
|
borderRadius: 10,
|
|
817
817
|
border: "1px solid rgba(255,45,75,0.3)",
|
|
818
818
|
background: "linear-gradient(135deg, rgba(255,45,75,0.2), rgba(255,45,75,0.1))",
|
|
819
|
-
color: "#
|
|
819
|
+
color: "#d41736",
|
|
820
820
|
fontSize: 13,
|
|
821
821
|
fontWeight: 700,
|
|
822
822
|
cursor: "pointer",
|
|
@@ -842,7 +842,7 @@ const previewCardStyle: React.CSSProperties = {
|
|
|
842
842
|
};
|
|
843
843
|
|
|
844
844
|
const previewTitleStyle: React.CSSProperties = {
|
|
845
|
-
color: "#
|
|
845
|
+
color: "#2d1619",
|
|
846
846
|
fontSize: 15,
|
|
847
847
|
fontWeight: 800,
|
|
848
848
|
letterSpacing: "-0.03em",
|
|
@@ -875,7 +875,7 @@ const successBoxStyle: React.CSSProperties = {
|
|
|
875
875
|
borderRadius: 8,
|
|
876
876
|
border: "1px solid rgba(76,195,138,0.22)",
|
|
877
877
|
background: "rgba(76,195,138,0.06)",
|
|
878
|
-
color: "#
|
|
878
|
+
color: "#1f9d5f",
|
|
879
879
|
fontSize: 12,
|
|
880
880
|
};
|
|
881
881
|
|
|
@@ -887,7 +887,7 @@ const errorBoxStyle: React.CSSProperties = {
|
|
|
887
887
|
borderRadius: 8,
|
|
888
888
|
border: "1px solid rgba(255,157,175,0.22)",
|
|
889
889
|
background: "rgba(255,157,175,0.06)",
|
|
890
|
-
color: "#
|
|
890
|
+
color: "#e0556d",
|
|
891
891
|
fontSize: 12,
|
|
892
892
|
};
|
|
893
893
|
|
|
@@ -902,12 +902,12 @@ const modeTabBase: React.CSSProperties = {
|
|
|
902
902
|
|
|
903
903
|
const modeTabIdle: React.CSSProperties = {
|
|
904
904
|
background: "transparent",
|
|
905
|
-
color: "#
|
|
905
|
+
color: "#aa485b",
|
|
906
906
|
borderColor: "rgba(255,107,129,0.1)",
|
|
907
907
|
};
|
|
908
908
|
|
|
909
909
|
const modeTabActive: React.CSSProperties = {
|
|
910
910
|
background: "rgba(255,45,75,0.14)",
|
|
911
|
-
color: "#
|
|
911
|
+
color: "#2d1619",
|
|
912
912
|
borderColor: "rgba(255,107,129,0.24)",
|
|
913
913
|
};
|