@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
|
@@ -132,8 +132,8 @@ function ConceptDetailPanel({
|
|
|
132
132
|
<div style={detailPanelStyle}>
|
|
133
133
|
<div style={detailHeaderStyle}>
|
|
134
134
|
<div style={{ display: "flex", alignItems: "center", gap: 8 }}>
|
|
135
|
-
<BookOpen size={13} color="#
|
|
136
|
-
<span style={{ color: "#
|
|
135
|
+
<BookOpen size={13} color="#0e7f66" />
|
|
136
|
+
<span style={{ color: "#2d1619", fontSize: 13, fontWeight: 700 }}>Concept Detail</span>
|
|
137
137
|
</div>
|
|
138
138
|
<button onClick={onClose} style={iconBtnStyle}>
|
|
139
139
|
<X size={14} />
|
|
@@ -148,15 +148,15 @@ function ConceptDetailPanel({
|
|
|
148
148
|
|
|
149
149
|
{error && (
|
|
150
150
|
<div style={centerStyle}>
|
|
151
|
-
<AlertCircle size={16} color="#
|
|
152
|
-
<span style={{ color: "#
|
|
151
|
+
<AlertCircle size={16} color="#e0556d" />
|
|
152
|
+
<span style={{ color: "#e0556d", fontSize: 12, marginTop: 6 }}>{error}</span>
|
|
153
153
|
</div>
|
|
154
154
|
)}
|
|
155
155
|
|
|
156
156
|
{detail && !loading && (
|
|
157
157
|
<div style={detailBodyStyle}>
|
|
158
158
|
<div style={{ marginBottom: 14 }}>
|
|
159
|
-
<h3 style={{ margin: "0 0 4px", color: "#
|
|
159
|
+
<h3 style={{ margin: "0 0 4px", color: "#2d1619", fontSize: 17, fontWeight: 800, letterSpacing: "-0.03em" }}>
|
|
160
160
|
{detail.pref_label}
|
|
161
161
|
</h3>
|
|
162
162
|
{detail.alt_labels.length > 0 && (
|
|
@@ -178,7 +178,7 @@ function ConceptDetailPanel({
|
|
|
178
178
|
|
|
179
179
|
{detail.definition && (
|
|
180
180
|
<PropSection label="Definition">
|
|
181
|
-
<p style={{ margin: 0, color: "#
|
|
181
|
+
<p style={{ margin: 0, color: "#602b34", fontSize: 13, lineHeight: 1.6 }}>
|
|
182
182
|
{detail.definition}
|
|
183
183
|
</p>
|
|
184
184
|
</PropSection>
|
|
@@ -186,7 +186,7 @@ function ConceptDetailPanel({
|
|
|
186
186
|
|
|
187
187
|
{detail.scope_note && (
|
|
188
188
|
<PropSection label="Scope Note">
|
|
189
|
-
<p style={{ margin: 0, color: "#
|
|
189
|
+
<p style={{ margin: 0, color: "#aa485b", fontSize: 12, lineHeight: 1.5 }}>
|
|
190
190
|
{detail.scope_note}
|
|
191
191
|
</p>
|
|
192
192
|
</PropSection>
|
|
@@ -194,7 +194,7 @@ function ConceptDetailPanel({
|
|
|
194
194
|
|
|
195
195
|
{detail.editorial_note && (
|
|
196
196
|
<PropSection label="Editorial Note">
|
|
197
|
-
<p style={{ margin: 0, color: "#
|
|
197
|
+
<p style={{ margin: 0, color: "#aa485b", fontSize: 12, lineHeight: 1.5 }}>
|
|
198
198
|
{detail.editorial_note}
|
|
199
199
|
</p>
|
|
200
200
|
</PropSection>
|
|
@@ -210,7 +210,7 @@ function ConceptDetailPanel({
|
|
|
210
210
|
|
|
211
211
|
{detail.scheme_uri && (
|
|
212
212
|
<PropSection label="Concept Scheme">
|
|
213
|
-
<span style={{ color: "#
|
|
213
|
+
<span style={{ color: "#602b34", fontSize: 11, fontFamily: "monospace", wordBreak: "break-all" }}>
|
|
214
214
|
{detail.scheme_uri}
|
|
215
215
|
</span>
|
|
216
216
|
</PropSection>
|
|
@@ -223,7 +223,7 @@ function ConceptDetailPanel({
|
|
|
223
223
|
|
|
224
224
|
function PropSection({ label, children }: { label: string; children: React.ReactNode }) {
|
|
225
225
|
return (
|
|
226
|
-
<div style={{ paddingTop: 10, borderTop: "1px solid rgba(
|
|
226
|
+
<div style={{ paddingTop: 10, borderTop: "1px solid rgba(28, 20, 24,0.05)", marginTop: 10 }}>
|
|
227
227
|
<div style={{ color: "#9c7a82", fontSize: 10, fontWeight: 700, textTransform: "uppercase" as const, letterSpacing: "0.07em", marginBottom: 5 }}>
|
|
228
228
|
{label}
|
|
229
229
|
</div>
|
|
@@ -295,7 +295,7 @@ function ConceptTreeNode({
|
|
|
295
295
|
overflow: "hidden",
|
|
296
296
|
textOverflow: "ellipsis",
|
|
297
297
|
whiteSpace: "nowrap",
|
|
298
|
-
color: isSelected ? "#
|
|
298
|
+
color: isSelected ? "#2d1619" : depth === 0 ? "#602b34" : "#aa485b",
|
|
299
299
|
fontSize: depth === 0 ? 13 : 12,
|
|
300
300
|
fontWeight: depth === 0 ? 600 : 400,
|
|
301
301
|
}}
|
|
@@ -406,8 +406,8 @@ function SchemePanel({
|
|
|
406
406
|
<div style={schemePanelStyle}>
|
|
407
407
|
<button onClick={() => setExpanded((v) => !v)} style={schemeHeaderBtnStyle}>
|
|
408
408
|
<div style={{ display: "flex", alignItems: "center", gap: 8 }}>
|
|
409
|
-
{expanded ? <ChevronDown size={13} color="#
|
|
410
|
-
<span style={{ color: "#
|
|
409
|
+
{expanded ? <ChevronDown size={13} color="#aa485b" /> : <ChevronRight size={13} color="#aa485b" />}
|
|
410
|
+
<span style={{ color: "#2d1619", fontSize: 14, fontWeight: 700 }}>{scheme.title}</span>
|
|
411
411
|
</div>
|
|
412
412
|
<span style={{ color: "#9c7a82", fontSize: 11 }}>
|
|
413
413
|
{loading ? "…" : `${totalConcepts} concept${totalConcepts !== 1 ? "s" : ""}`}
|
|
@@ -509,15 +509,15 @@ export function SKOSVocabularyManager({ schemeUri }: Props) {
|
|
|
509
509
|
|
|
510
510
|
{error && (
|
|
511
511
|
<div style={centerStyle}>
|
|
512
|
-
<AlertCircle size={16} color="#
|
|
513
|
-
<span style={{ color: "#
|
|
512
|
+
<AlertCircle size={16} color="#e0556d" />
|
|
513
|
+
<span style={{ color: "#e0556d", fontSize: 12, marginTop: 6 }}>{error}</span>
|
|
514
514
|
</div>
|
|
515
515
|
)}
|
|
516
516
|
|
|
517
517
|
{!loading && !error && displayedSchemes.length === 0 && (
|
|
518
518
|
<div style={{ ...centerStyle, textAlign: "center", padding: 28 }}>
|
|
519
519
|
<BookOpen size={28} color="rgba(158,232,215,0.15)" />
|
|
520
|
-
<span style={{ color: "#
|
|
520
|
+
<span style={{ color: "#aa485b", fontSize: 12, marginTop: 10 }}>
|
|
521
521
|
No SKOS concept schemes found
|
|
522
522
|
</span>
|
|
523
523
|
<span style={{ color: "#9c7a82", fontSize: 11, marginTop: 4, maxWidth: 220 }}>
|
|
@@ -580,7 +580,7 @@ const skosSearchInputStyle: React.CSSProperties = {
|
|
|
580
580
|
background: "transparent",
|
|
581
581
|
border: "none",
|
|
582
582
|
outline: "none",
|
|
583
|
-
color: "#
|
|
583
|
+
color: "#2d1619",
|
|
584
584
|
fontSize: 12,
|
|
585
585
|
};
|
|
586
586
|
|
|
@@ -603,7 +603,7 @@ const detailPanelStyle: React.CSSProperties = {
|
|
|
603
603
|
display: "flex",
|
|
604
604
|
flexDirection: "column",
|
|
605
605
|
borderLeft: "1px solid rgba(255,107,129,0.1)",
|
|
606
|
-
background: "rgba(
|
|
606
|
+
background: "rgba(255, 255, 255,0.5)",
|
|
607
607
|
overflow: "hidden",
|
|
608
608
|
};
|
|
609
609
|
|
|
@@ -625,7 +625,7 @@ const detailBodyStyle: React.CSSProperties = {
|
|
|
625
625
|
const schemePanelStyle: React.CSSProperties = {
|
|
626
626
|
borderRadius: 10,
|
|
627
627
|
border: "1px solid rgba(255,107,129,0.1)",
|
|
628
|
-
background: "rgba(
|
|
628
|
+
background: "rgba(28, 20, 24,0.02)",
|
|
629
629
|
overflow: "hidden",
|
|
630
630
|
marginBottom: 8,
|
|
631
631
|
};
|
|
@@ -639,13 +639,13 @@ const schemeHeaderBtnStyle: React.CSSProperties = {
|
|
|
639
639
|
background: "transparent",
|
|
640
640
|
border: "none",
|
|
641
641
|
cursor: "pointer",
|
|
642
|
-
borderBottom: "1px solid rgba(
|
|
642
|
+
borderBottom: "1px solid rgba(28, 20, 24,0.05)",
|
|
643
643
|
};
|
|
644
644
|
|
|
645
645
|
const expandBtnStyle: React.CSSProperties = {
|
|
646
646
|
background: "transparent",
|
|
647
647
|
border: "none",
|
|
648
|
-
color: "#
|
|
648
|
+
color: "#aa485b",
|
|
649
649
|
cursor: "pointer",
|
|
650
650
|
padding: 0,
|
|
651
651
|
display: "flex",
|
|
@@ -657,16 +657,16 @@ const expandBtnStyle: React.CSSProperties = {
|
|
|
657
657
|
const chipStyle: React.CSSProperties = {
|
|
658
658
|
padding: "2px 8px",
|
|
659
659
|
borderRadius: 999,
|
|
660
|
-
background: "rgba(
|
|
661
|
-
border: "1px solid rgba(
|
|
662
|
-
color: "#
|
|
660
|
+
background: "rgba(28, 20, 24,0.05)",
|
|
661
|
+
border: "1px solid rgba(28, 20, 24,0.08)",
|
|
662
|
+
color: "#aa485b",
|
|
663
663
|
fontSize: 11,
|
|
664
664
|
};
|
|
665
665
|
|
|
666
666
|
const iconBtnStyle: React.CSSProperties = {
|
|
667
667
|
background: "transparent",
|
|
668
668
|
border: "none",
|
|
669
|
-
color: "#
|
|
669
|
+
color: "#aa485b",
|
|
670
670
|
cursor: "pointer",
|
|
671
671
|
padding: 2,
|
|
672
672
|
display: "grid",
|
|
@@ -684,7 +684,7 @@ const navLinkStyle: React.CSSProperties = {
|
|
|
684
684
|
textAlign: "left",
|
|
685
685
|
};
|
|
686
686
|
|
|
687
|
-
const errorStyle: React.CSSProperties = { padding: 12, borderRadius: 14, color: "#
|
|
687
|
+
const errorStyle: React.CSSProperties = { padding: 12, borderRadius: 14, color: "#e98498", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)", margin: "0 10px 10px 10px", fontSize: 12 };
|
|
688
688
|
|
|
689
689
|
const centerStyle: React.CSSProperties = {
|
|
690
690
|
display: "flex",
|
|
@@ -179,8 +179,8 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
|
|
|
179
179
|
{ token: "delimiter", foreground: "8fa8c6" },
|
|
180
180
|
],
|
|
181
181
|
colors: {
|
|
182
|
-
"editor.background": "#
|
|
183
|
-
"editor.foreground": "#
|
|
182
|
+
"editor.background": "#f5f6f6",
|
|
183
|
+
"editor.foreground": "#16222e",
|
|
184
184
|
"editorLineNumber.foreground": "#41536b",
|
|
185
185
|
},
|
|
186
186
|
});
|
|
@@ -233,7 +233,7 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
|
|
|
233
233
|
style={{
|
|
234
234
|
...shapeRowStyle,
|
|
235
235
|
cursor: "pointer",
|
|
236
|
-
background: isSelected ? "rgba(124,231,211,0.1)" : "rgba(
|
|
236
|
+
background: isSelected ? "rgba(124,231,211,0.1)" : "rgba(28, 20, 24,0.03)",
|
|
237
237
|
border: isSelected ? "1px solid rgba(124,231,211,0.35)" : "1px solid rgba(255,107,129,0.08)",
|
|
238
238
|
textAlign: "left",
|
|
239
239
|
width: "100%",
|
|
@@ -241,9 +241,9 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
|
|
|
241
241
|
onClick={() => handleSelectShape(shape.id)}
|
|
242
242
|
title="Click to load this shape into the editor"
|
|
243
243
|
>
|
|
244
|
-
<FileCode2 size={14} color={isSelected ? "#
|
|
244
|
+
<FileCode2 size={14} color={isSelected ? "#0e8571" : "#0e7f66"} />
|
|
245
245
|
<div>
|
|
246
|
-
<div style={{ color: "#
|
|
246
|
+
<div style={{ color: "#2d1619", fontWeight: 800 }}>{shape.id}</div>
|
|
247
247
|
<div style={mutedStyle}>
|
|
248
248
|
{shape.constraint_count} constraints
|
|
249
249
|
{shape.constraints.length ? ` · ${shape.constraints.join(", ")}` : ""}
|
|
@@ -306,7 +306,7 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
|
|
|
306
306
|
return (
|
|
307
307
|
<div key={`${violation.node}-${violation.path}-${index}`} style={violationRowStyle}>
|
|
308
308
|
<div>
|
|
309
|
-
<div style={{ color: "#
|
|
309
|
+
<div style={{ color: "#2d1619", fontWeight: 800 }}>{violation.message}</div>
|
|
310
310
|
<div style={mutedStyle}>{violation.severity} {violation.path ? `· ${violation.path}` : ""}</div>
|
|
311
311
|
{nodeId ? <div style={monoStyle}>{nodeId}</div> : null}
|
|
312
312
|
</div>
|
|
@@ -330,34 +330,34 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
function validationBadgeStyle(status: string, conforms: boolean): CSSProperties {
|
|
333
|
-
const color = status === "unavailable" ? "#
|
|
333
|
+
const color = status === "unavailable" ? "#e86a2e" : conforms ? "#0e8571" : "#e0556d";
|
|
334
334
|
return { color, border: `1px solid ${color}35`, background: `${color}14`, borderRadius: 999, padding: "4px 9px", fontSize: 11, fontWeight: 900, textTransform: "uppercase" };
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
const pageStyle: CSSProperties = { height: "100%", overflow: "auto", padding: 22, display: "flex", flexDirection: "column", gap: 16 };
|
|
338
|
-
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(
|
|
339
|
-
const kickerStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", color: "#
|
|
340
|
-
const titleStyle: CSSProperties = { margin: "8px 0", color: "#
|
|
341
|
-
const textStyle: CSSProperties = { margin: 0, color: "#
|
|
338
|
+
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))" };
|
|
339
|
+
const kickerStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", color: "#0e7f66", fontSize: 11, fontWeight: 900, letterSpacing: "0.12em", textTransform: "uppercase" };
|
|
340
|
+
const titleStyle: CSSProperties = { margin: "8px 0", color: "#2d1619", fontSize: 26, letterSpacing: "-0.04em" };
|
|
341
|
+
const textStyle: CSSProperties = { margin: 0, color: "#aa485b", lineHeight: 1.6, maxWidth: 680 };
|
|
342
342
|
const selectorShellStyle: CSSProperties = { minWidth: 320 };
|
|
343
343
|
const labelStyle: CSSProperties = { display: "block", color: "#9c7a82", fontSize: 11, fontWeight: 800, margin: "0 0 6px", textTransform: "uppercase", letterSpacing: "0.08em" };
|
|
344
|
-
const inputStyle: CSSProperties = { width: "100%", boxSizing: "border-box", border: "1px solid rgba(255,107,129,0.14)", borderRadius: 12, padding: "10px 12px", background: "rgba(
|
|
344
|
+
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" };
|
|
345
345
|
const gridStyle: CSSProperties = { display: "grid", gridTemplateColumns: "360px minmax(0, 1fr)", gap: 16, minHeight: 560 };
|
|
346
|
-
const cardStyle: CSSProperties = { padding: 18, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 20, background: "rgba(
|
|
346
|
+
const cardStyle: CSSProperties = { padding: 18, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 20, background: "rgba(255, 255, 255,0.78)" };
|
|
347
347
|
const editorShellStyle: CSSProperties = { ...cardStyle, display: "flex", flexDirection: "column", minHeight: 560 };
|
|
348
348
|
const panelHeaderStyle: CSSProperties = { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 12, marginBottom: 12 };
|
|
349
|
-
const sectionTitleStyle: CSSProperties = { margin: 0, color: "#
|
|
350
|
-
const countBadgeStyle: CSSProperties = { color: "#
|
|
349
|
+
const sectionTitleStyle: CSSProperties = { margin: 0, color: "#2d1619", fontSize: 16 };
|
|
350
|
+
const countBadgeStyle: CSSProperties = { color: "#0e7f66", border: "1px solid rgba(158,232,215,0.2)", borderRadius: 999, padding: "4px 9px", fontSize: 11, fontWeight: 900 };
|
|
351
351
|
const shapeListStyle: CSSProperties = { display: "flex", flexDirection: "column", gap: 10 };
|
|
352
352
|
const shapeGroupStyle: CSSProperties = { display: "flex", flexDirection: "column", gap: 6 };
|
|
353
353
|
const shapeTargetStyle: CSSProperties = { color: "#9c7a82", fontSize: 11, fontWeight: 900, textTransform: "uppercase", letterSpacing: "0.08em" };
|
|
354
|
-
const shapeRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "18px 1fr auto", gap: 10, padding: 10, borderRadius: 14, background: "rgba(
|
|
355
|
-
const violationBadgeStyle: CSSProperties = { color: "#
|
|
354
|
+
const shapeRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "18px 1fr auto", gap: 10, padding: 10, borderRadius: 14, background: "rgba(28, 20, 24,0.03)", border: "1px solid rgba(255,107,129,0.08)" };
|
|
355
|
+
const violationBadgeStyle: CSSProperties = { color: "#e86a2e", fontWeight: 900 };
|
|
356
356
|
const editorFrameStyle: CSSProperties = { flex: 1, minHeight: 0, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 16, overflow: "hidden" };
|
|
357
|
-
const primaryButtonStyle: CSSProperties = { border: "1px solid rgba(124,231,211,0.35)", borderRadius: 12, padding: "9px 11px", background: "linear-gradient(135deg, rgba(20,151,136,0.55), rgba(255,45,75,0.35))", color: "#
|
|
357
|
+
const primaryButtonStyle: CSSProperties = { border: "1px solid rgba(124,231,211,0.35)", borderRadius: 12, padding: "9px 11px", background: "linear-gradient(135deg, rgba(20,151,136,0.55), rgba(255,45,75,0.35))", color: "#2d1619", fontWeight: 900, cursor: "pointer", display: "inline-flex", alignItems: "center", gap: 8 };
|
|
358
358
|
const secondaryButtonStyle: CSSProperties = { ...primaryButtonStyle, background: "rgba(255,107,129,0.08)", borderColor: "rgba(255,107,129,0.18)" };
|
|
359
|
-
const violationRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "1fr auto", gap: 12, padding: 12, borderRadius: 14, background: "rgba(
|
|
360
|
-
const smallButtonStyle: CSSProperties = { border: "1px solid rgba(255,107,129,0.16)", borderRadius: 10, padding: "7px 9px", background: "rgba(255,107,129,0.08)", color: "#
|
|
359
|
+
const violationRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "1fr auto", gap: 12, padding: 12, borderRadius: 14, background: "rgba(28, 20, 24,0.03)", border: "1px solid rgba(255,107,129,0.08)" };
|
|
360
|
+
const smallButtonStyle: CSSProperties = { 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 };
|
|
361
361
|
const monoStyle: CSSProperties = { marginTop: 4, color: "#9c7a82", fontSize: 11, fontFamily: "JetBrains Mono, monospace", wordBreak: "break-all" };
|
|
362
362
|
const mutedStyle: CSSProperties = { margin: 0, color: "#9c7a82", fontSize: 12, lineHeight: 1.5 };
|
|
363
|
-
const errorStyle: CSSProperties = { padding: 12, borderRadius: 14, color: "#
|
|
363
|
+
const errorStyle: CSSProperties = { padding: 12, borderRadius: 14, color: "#e98498", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)" };
|
|
@@ -218,15 +218,15 @@ export function VersionsTab() {
|
|
|
218
218
|
const getStateIcon = (state: string) => {
|
|
219
219
|
switch (state) {
|
|
220
220
|
case "published":
|
|
221
|
-
return <CheckCircle size={16} color="#
|
|
221
|
+
return <CheckCircle size={16} color="#1f9d5f" />;
|
|
222
222
|
case "approved":
|
|
223
223
|
return <CheckCircle size={16} color="#ff2d4b" />;
|
|
224
224
|
case "rejected":
|
|
225
|
-
return <XCircle size={16} color="#
|
|
225
|
+
return <XCircle size={16} color="#e71313" />;
|
|
226
226
|
case "proposed":
|
|
227
|
-
return <AlertCircle size={16} color="#
|
|
227
|
+
return <AlertCircle size={16} color="#e86a2e" />;
|
|
228
228
|
default:
|
|
229
|
-
return <Clock size={16} color="#
|
|
229
|
+
return <Clock size={16} color="#aa485b" />;
|
|
230
230
|
}
|
|
231
231
|
};
|
|
232
232
|
|
|
@@ -234,7 +234,7 @@ export function VersionsTab() {
|
|
|
234
234
|
display: "flex",
|
|
235
235
|
flexDirection: "column",
|
|
236
236
|
height: "100%",
|
|
237
|
-
background: "#
|
|
237
|
+
background: "#ffffff",
|
|
238
238
|
padding: "20px",
|
|
239
239
|
overflow: "auto",
|
|
240
240
|
};
|
|
@@ -248,7 +248,7 @@ export function VersionsTab() {
|
|
|
248
248
|
|
|
249
249
|
const titleStyle: React.CSSProperties = {
|
|
250
250
|
margin: 0,
|
|
251
|
-
color: "#
|
|
251
|
+
color: "#2d1619",
|
|
252
252
|
fontSize: "20px",
|
|
253
253
|
fontWeight: "700",
|
|
254
254
|
};
|
|
@@ -259,7 +259,7 @@ export function VersionsTab() {
|
|
|
259
259
|
|
|
260
260
|
const sectionTitleStyle: React.CSSProperties = {
|
|
261
261
|
margin: "0 0 12px",
|
|
262
|
-
color: "#
|
|
262
|
+
color: "#2d1619",
|
|
263
263
|
fontSize: "14px",
|
|
264
264
|
fontWeight: "600",
|
|
265
265
|
display: "flex",
|
|
@@ -279,7 +279,7 @@ export function VersionsTab() {
|
|
|
279
279
|
gap: "12px",
|
|
280
280
|
padding: "12px 16px",
|
|
281
281
|
borderRadius: "8px",
|
|
282
|
-
background: "rgba(
|
|
282
|
+
background: "rgba(255, 255, 255, 0.8)",
|
|
283
283
|
border: "1px solid rgba(255, 107, 129, 0.12)",
|
|
284
284
|
transition: "160ms ease",
|
|
285
285
|
};
|
|
@@ -295,7 +295,7 @@ export function VersionsTab() {
|
|
|
295
295
|
};
|
|
296
296
|
|
|
297
297
|
const modalStyle: React.CSSProperties = {
|
|
298
|
-
background: "rgba(
|
|
298
|
+
background: "rgba(255, 255, 255, 0.95)",
|
|
299
299
|
border: "1px solid rgba(255, 107, 129, 0.2)",
|
|
300
300
|
borderRadius: "12px",
|
|
301
301
|
padding: "24px",
|
|
@@ -314,7 +314,7 @@ export function VersionsTab() {
|
|
|
314
314
|
borderRadius: "6px",
|
|
315
315
|
border: "1px solid rgba(255, 107, 129, 0.2)",
|
|
316
316
|
background: "rgba(255, 45, 75, 0.1)",
|
|
317
|
-
color: "#
|
|
317
|
+
color: "#2d1619",
|
|
318
318
|
fontSize: "12px",
|
|
319
319
|
fontWeight: "600",
|
|
320
320
|
cursor: "pointer",
|
|
@@ -326,13 +326,13 @@ export function VersionsTab() {
|
|
|
326
326
|
padding: "10px 12px",
|
|
327
327
|
borderRadius: "6px",
|
|
328
328
|
border: "1px solid rgba(255, 107, 129, 0.2)",
|
|
329
|
-
background: "rgba(
|
|
330
|
-
color: "#
|
|
329
|
+
background: "rgba(255, 255, 255, 0.8)",
|
|
330
|
+
color: "#2d1619",
|
|
331
331
|
fontSize: "13px",
|
|
332
332
|
marginBottom: "12px",
|
|
333
333
|
};
|
|
334
334
|
|
|
335
|
-
const errorStyle: React.CSSProperties = { padding: "12px", borderRadius: "14px", color: "#
|
|
335
|
+
const errorStyle: React.CSSProperties = { padding: "12px", borderRadius: "14px", color: "#e98498", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)", marginBottom: "16px" };
|
|
336
336
|
|
|
337
337
|
return (
|
|
338
338
|
<div style={containerStyle}>
|
|
@@ -356,16 +356,16 @@ export function VersionsTab() {
|
|
|
356
356
|
</h2>
|
|
357
357
|
<div style={listStyle}>
|
|
358
358
|
{versions.length === 0 ? (
|
|
359
|
-
<div style={{ color: "#
|
|
359
|
+
<div style={{ color: "#aa485b", fontSize: "13px" }}>No versions found</div>
|
|
360
360
|
) : (
|
|
361
361
|
versions.map((version) => (
|
|
362
362
|
<div key={version.version_id} style={itemStyle}>
|
|
363
363
|
{getStateIcon(version.state)}
|
|
364
364
|
<div style={{ flex: 1 }}>
|
|
365
|
-
<div style={{ color: "#
|
|
365
|
+
<div style={{ color: "#2d1619", fontSize: "13px", fontWeight: "600" }}>
|
|
366
366
|
{version.version_id}
|
|
367
367
|
</div>
|
|
368
|
-
<div style={{ color: "#
|
|
368
|
+
<div style={{ color: "#aa485b", fontSize: "11px" }}>
|
|
369
369
|
{version.author} • {new Date(version.date).toLocaleDateString()}
|
|
370
370
|
</div>
|
|
371
371
|
</div>
|
|
@@ -392,16 +392,16 @@ export function VersionsTab() {
|
|
|
392
392
|
</h2>
|
|
393
393
|
<div style={listStyle}>
|
|
394
394
|
{proposals.length === 0 ? (
|
|
395
|
-
<div style={{ color: "#
|
|
395
|
+
<div style={{ color: "#aa485b", fontSize: "13px" }}>No proposals found</div>
|
|
396
396
|
) : (
|
|
397
397
|
proposals.map((proposal) => (
|
|
398
398
|
<div key={proposal.proposal_id} style={itemStyle}>
|
|
399
399
|
{getStateIcon(proposal.state)}
|
|
400
400
|
<div style={{ flex: 1 }}>
|
|
401
|
-
<div style={{ color: "#
|
|
401
|
+
<div style={{ color: "#2d1619", fontSize: "13px", fontWeight: "600" }}>
|
|
402
402
|
{proposal.summary}
|
|
403
403
|
</div>
|
|
404
|
-
<div style={{ color: "#
|
|
404
|
+
<div style={{ color: "#aa485b", fontSize: "11px" }}>
|
|
405
405
|
{proposal.author} • {new Date(proposal.created_at).toLocaleDateString()}
|
|
406
406
|
</div>
|
|
407
407
|
</div>
|
|
@@ -443,51 +443,51 @@ export function VersionsTab() {
|
|
|
443
443
|
<div style={modalOverlayStyle} onClick={() => setShowProposalModal(false)}>
|
|
444
444
|
<div style={modalStyle} onClick={(e) => e.stopPropagation()}>
|
|
445
445
|
<div style={{ display: "flex", justifyContent: "space-between", marginBottom: "16px" }}>
|
|
446
|
-
<h3 style={{ margin: 0, color: "#
|
|
447
|
-
<button onClick={() => setShowProposalModal(false)} style={{ background: "none", border: "none", color: "#
|
|
446
|
+
<h3 style={{ margin: 0, color: "#2d1619", fontSize: "16px" }}>Proposal Details</h3>
|
|
447
|
+
<button onClick={() => setShowProposalModal(false)} style={{ background: "none", border: "none", color: "#aa485b", cursor: "pointer" }}>
|
|
448
448
|
<X size={18} />
|
|
449
449
|
</button>
|
|
450
450
|
</div>
|
|
451
451
|
<div style={{ marginBottom: "12px" }}>
|
|
452
|
-
<label style={{ display: "block", color: "#
|
|
452
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
453
453
|
Summary
|
|
454
454
|
</label>
|
|
455
|
-
<div style={{ color: "#
|
|
455
|
+
<div style={{ color: "#2d1619", fontSize: "13px" }}>{selectedProposal.summary}</div>
|
|
456
456
|
</div>
|
|
457
457
|
<div style={{ marginBottom: "12px" }}>
|
|
458
|
-
<label style={{ display: "block", color: "#
|
|
458
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
459
459
|
State
|
|
460
460
|
</label>
|
|
461
|
-
<div style={{ display: "flex", alignItems: "center", gap: "6px", color: "#
|
|
461
|
+
<div style={{ display: "flex", alignItems: "center", gap: "6px", color: "#2d1619", fontSize: "13px" }}>
|
|
462
462
|
{getStateIcon(selectedProposal.state)}
|
|
463
463
|
{selectedProposal.state}
|
|
464
464
|
</div>
|
|
465
465
|
</div>
|
|
466
466
|
<div style={{ marginBottom: "12px" }}>
|
|
467
|
-
<label style={{ display: "block", color: "#
|
|
467
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
468
468
|
Impact Analysis
|
|
469
469
|
</label>
|
|
470
|
-
<pre style={{ background: "rgba(
|
|
470
|
+
<pre style={{ background: "rgba(255, 255, 255, 0.8)", padding: "12px", borderRadius: "6px", color: "#2d1619", fontSize: "12px", overflow: "auto" }}>
|
|
471
471
|
{JSON.stringify(selectedProposal.impact_analysis, null, 2)}
|
|
472
472
|
</pre>
|
|
473
473
|
</div>
|
|
474
474
|
<div style={{ marginBottom: "12px" }}>
|
|
475
|
-
<label style={{ display: "block", color: "#
|
|
475
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
476
476
|
SHACL Validation
|
|
477
477
|
</label>
|
|
478
|
-
<pre style={{ background: "rgba(
|
|
478
|
+
<pre style={{ background: "rgba(255, 255, 255, 0.8)", padding: "12px", borderRadius: "6px", color: "#2d1619", fontSize: "12px", overflow: "auto" }}>
|
|
479
479
|
{JSON.stringify(selectedProposal.shacl_validation, null, 2)}
|
|
480
480
|
</pre>
|
|
481
481
|
</div>
|
|
482
482
|
<div>
|
|
483
|
-
<label style={{ display: "block", color: "#
|
|
483
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
484
484
|
Comments ({selectedProposal.comments.length})
|
|
485
485
|
</label>
|
|
486
486
|
<div style={{ maxHeight: "120px", overflow: "auto" }}>
|
|
487
487
|
{selectedProposal.comments.map((comment) => (
|
|
488
|
-
<div key={comment.id} style={{ padding: "8px", background: "rgba(
|
|
489
|
-
<div style={{ color: "#
|
|
490
|
-
<div style={{ color: "#
|
|
488
|
+
<div key={comment.id} style={{ padding: "8px", background: "rgba(255, 255, 255, 0.6)", borderRadius: "4px", marginBottom: "6px" }}>
|
|
489
|
+
<div style={{ color: "#2d1619", fontSize: "12px", fontWeight: "600" }}>{comment.author}</div>
|
|
490
|
+
<div style={{ color: "#aa485b", fontSize: "11px" }}>{comment.text}</div>
|
|
491
491
|
</div>
|
|
492
492
|
))}
|
|
493
493
|
</div>
|
|
@@ -500,14 +500,14 @@ export function VersionsTab() {
|
|
|
500
500
|
<div style={modalOverlayStyle} onClick={() => setShowCompareModal(false)}>
|
|
501
501
|
<div style={modalStyle} onClick={(e) => e.stopPropagation()}>
|
|
502
502
|
<div style={{ display: "flex", justifyContent: "space-between", marginBottom: "16px" }}>
|
|
503
|
-
<h3 style={{ margin: 0, color: "#
|
|
504
|
-
<button onClick={() => setShowCompareModal(false)} style={{ background: "none", border: "none", color: "#
|
|
503
|
+
<h3 style={{ margin: 0, color: "#2d1619", fontSize: "16px" }}>Compare Versions</h3>
|
|
504
|
+
<button onClick={() => setShowCompareModal(false)} style={{ background: "none", border: "none", color: "#aa485b", cursor: "pointer" }}>
|
|
505
505
|
<X size={18} />
|
|
506
506
|
</button>
|
|
507
507
|
</div>
|
|
508
508
|
<div style={{ display: "flex", gap: "12px", marginBottom: "16px" }}>
|
|
509
509
|
<div style={{ flex: 1 }}>
|
|
510
|
-
<label style={{ display: "block", color: "#
|
|
510
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
511
511
|
Version 1
|
|
512
512
|
</label>
|
|
513
513
|
<input
|
|
@@ -518,7 +518,7 @@ export function VersionsTab() {
|
|
|
518
518
|
/>
|
|
519
519
|
</div>
|
|
520
520
|
<div style={{ flex: 1 }}>
|
|
521
|
-
<label style={{ display: "block", color: "#
|
|
521
|
+
<label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
|
|
522
522
|
Version 2
|
|
523
523
|
</label>
|
|
524
524
|
<input
|
|
@@ -534,7 +534,7 @@ export function VersionsTab() {
|
|
|
534
534
|
{isLoading ? "Comparing..." : "Compare"}
|
|
535
535
|
</button>
|
|
536
536
|
{compareResult && (
|
|
537
|
-
<pre style={{ marginTop: "16px", background: "rgba(
|
|
537
|
+
<pre style={{ marginTop: "16px", background: "rgba(255, 255, 255, 0.8)", padding: "12px", borderRadius: "6px", color: "#2d1619", fontSize: "12px", overflow: "auto" }}>
|
|
538
538
|
{JSON.stringify(compareResult, null, 2)}
|
|
539
539
|
</pre>
|
|
540
540
|
)}
|
|
@@ -6,12 +6,12 @@ export type RegistryEntry = {
|
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
export const ONTOLOGY_MINIMAP_THEME = {
|
|
9
|
-
bgColor: "#
|
|
10
|
-
maskColor: "rgba(
|
|
9
|
+
bgColor: "#f7f7f8",
|
|
10
|
+
maskColor: "rgba(255, 255, 255, 0.72)",
|
|
11
11
|
maskStrokeColor: "#5faeff",
|
|
12
12
|
maskStrokeWidth: 2,
|
|
13
13
|
nodeColor: "#2d7fd3",
|
|
14
|
-
nodeStrokeColor: "#
|
|
14
|
+
nodeStrokeColor: "#1f3348",
|
|
15
15
|
nodeStrokeWidth: 1,
|
|
16
16
|
style: {
|
|
17
17
|
border: "1px solid #29435c",
|
|
@@ -145,11 +145,11 @@ export function ReasoningWorkspace() {
|
|
|
145
145
|
onChange={(e) => setApplyToGraph(e.target.checked)}
|
|
146
146
|
style={{ opacity: 0, position: "absolute", inset: 0, cursor: "pointer", margin: 0 }}
|
|
147
147
|
/>
|
|
148
|
-
<div style={{ position: "absolute", inset: 0, borderRadius: 999, background: applyToGraph ? "var(--ws-green)" : "rgba(
|
|
149
|
-
<div style={{ position: "absolute", top: 3, left: applyToGraph ? 19 : 3, width: 14, height: 14, borderRadius: 999, background: "#
|
|
148
|
+
<div style={{ position: "absolute", inset: 0, borderRadius: 999, background: applyToGraph ? "var(--ws-green)" : "rgba(28, 20, 24,0.12)", transition: "background 180ms ease" }} />
|
|
149
|
+
<div style={{ position: "absolute", top: 3, left: applyToGraph ? 19 : 3, width: 14, height: 14, borderRadius: 999, background: "#16181d", transition: "left 180ms ease", boxShadow: "0 1px 4px rgba(0,0,0,0.4)" }} />
|
|
150
150
|
</div>
|
|
151
151
|
<div>
|
|
152
|
-
<div style={{ fontSize: 13, fontWeight: 700, color: applyToGraph ? "#
|
|
152
|
+
<div style={{ fontSize: 13, fontWeight: 700, color: applyToGraph ? "#0f8f6e" : "var(--ws-text-muted)" }}>Write inferred facts to graph</div>
|
|
153
153
|
<div style={{ fontSize: 11, color: "var(--ws-text-dim)" }}>Inferred binary facts are added as edges</div>
|
|
154
154
|
</div>
|
|
155
155
|
</label>
|
|
@@ -194,7 +194,7 @@ export function ReasoningWorkspace() {
|
|
|
194
194
|
|
|
195
195
|
<div className="ws-scroll ws-padded" style={{ display: "flex", flexDirection: "column", gap: 12 }}>
|
|
196
196
|
{error && (
|
|
197
|
-
<div className="ws-animate-in" style={{ display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#
|
|
197
|
+
<div className="ws-animate-in" style={{ display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#4e2121", fontSize: 13 }}>
|
|
198
198
|
<AlertCircle size={16} style={{ flexShrink: 0, marginTop: 1 }} />
|
|
199
199
|
<div>{error}</div>
|
|
200
200
|
</div>
|
|
@@ -45,8 +45,8 @@ export function SparqlWorkspace() {
|
|
|
45
45
|
{ token: "number", foreground: "f2b66d" },
|
|
46
46
|
],
|
|
47
47
|
colors: {
|
|
48
|
-
"editor.background": "#
|
|
49
|
-
"editor.lineHighlightBackground": "#
|
|
48
|
+
"editor.background": "#f6f6f7",
|
|
49
|
+
"editor.lineHighlightBackground": "#f7f7f8",
|
|
50
50
|
"editorLineNumber.foreground": "#2a4060",
|
|
51
51
|
"editorCursor.foreground": "#ff2d4b",
|
|
52
52
|
"editor.selectionBackground": "#1e3a5a",
|
|
@@ -211,7 +211,7 @@ export function SparqlWorkspace() {
|
|
|
211
211
|
)}
|
|
212
212
|
|
|
213
213
|
{result?.error && !isLoading && (
|
|
214
|
-
<div className="ws-animate-in" style={{ margin: 16, display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#
|
|
214
|
+
<div className="ws-animate-in" style={{ margin: 16, display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#4e2121", fontSize: 13 }}>
|
|
215
215
|
<AlertCircle size={16} style={{ flexShrink: 0, marginTop: 1 }} />
|
|
216
216
|
{result.error}
|
|
217
217
|
</div>
|
|
@@ -52,7 +52,7 @@ export const ConceptTree: React.FC<ConceptTreeProps> = ({ data, onSelectConcept
|
|
|
52
52
|
? 'rgba(255,45,75,0.12)'
|
|
53
53
|
: 'transparent',
|
|
54
54
|
userSelect: 'none',
|
|
55
|
-
borderBottom: '1px solid rgba(
|
|
55
|
+
borderBottom: '1px solid rgba(28, 20, 24,0.04)',
|
|
56
56
|
transition: 'background 0.15s',
|
|
57
57
|
}}
|
|
58
58
|
onMouseEnter={(e) => {
|
|
@@ -76,13 +76,13 @@ export const ConceptTree: React.FC<ConceptTreeProps> = ({ data, onSelectConcept
|
|
|
76
76
|
|
|
77
77
|
<span style={{ marginRight: 8, display: 'flex', alignItems: 'center' }}>
|
|
78
78
|
{isFolder
|
|
79
|
-
? <Folder size={14} color="#
|
|
79
|
+
? <Folder size={14} color="#7c3aed" />
|
|
80
80
|
: <FileText size={14} color="#484f58" />
|
|
81
81
|
}
|
|
82
82
|
</span>
|
|
83
83
|
|
|
84
84
|
<span style={{
|
|
85
|
-
fontSize: 13, color: '#
|
|
85
|
+
fontSize: 13, color: '#523036',
|
|
86
86
|
whiteSpace: 'nowrap', overflow: 'hidden',
|
|
87
87
|
textOverflow: 'ellipsis',
|
|
88
88
|
}}>
|