@matdata/yasgui-graph-plugin 1.4.2 → 1.5.0
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 +118 -16
- package/dist/yasgui-graph-plugin.cjs.css +115 -0
- package/dist/yasgui-graph-plugin.cjs.css.map +2 -2
- package/dist/yasgui-graph-plugin.cjs.js +641 -27
- package/dist/yasgui-graph-plugin.cjs.js.map +4 -4
- package/dist/yasgui-graph-plugin.css +114 -1
- package/dist/yasgui-graph-plugin.esm.css +115 -0
- package/dist/yasgui-graph-plugin.esm.css.map +2 -2
- package/dist/yasgui-graph-plugin.esm.js +641 -27
- package/dist/yasgui-graph-plugin.esm.js.map +4 -4
- package/dist/yasgui-graph-plugin.min.css +1 -1
- package/dist/yasgui-graph-plugin.min.css.map +2 -2
- package/dist/yasgui-graph-plugin.min.js +24 -20
- package/dist/yasgui-graph-plugin.min.js.map +4 -4
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -13,9 +13,11 @@ A YASGUI plugin for visualizing SPARQL CONSTRUCT and DESCRIBE query results as i
|
|
|
13
13
|
- 🟢 Light Green (#a6c8a6ff) = Literals
|
|
14
14
|
- ⚪ Light Grey (#c5c5c5ff) = Blank nodes
|
|
15
15
|
- 🟠 Orange (#e15b13ff) = rdf:type objects (classes)
|
|
16
|
+
- **🖼️ Node Icons & Images**: Render images or emoji/icons on nodes via `schema:image` / `schema:icon` properties (see [Node icons and images](#node-icons-and-images))
|
|
17
|
+
- **� Compact Mode**: Hide literal and class nodes; show rdf:type and datatype properties in enhanced tooltips instead
|
|
16
18
|
- **🔍 Navigation**: Mouse wheel zoom, drag to pan, "Zoom to Fit" button
|
|
17
|
-
- **✋ Drag & Drop**: Reorganize nodes by dragging them to new positions
|
|
18
|
-
- **💬 Tooltips**:
|
|
19
|
+
- **✋ Drag & Drop**: Reorganize nodes by dragging them to new positions (nodes stay pinned after manual drag)
|
|
20
|
+
- **💬 Rich Tooltips**: Modern HTML tooltips with node type, value, namespace, and datatype information
|
|
19
21
|
- **🌓 Theme Support**: Automatic light/dark mode detection and dynamic color switching
|
|
20
22
|
- **⚡ Performance**: Handles up to 1,000 nodes with <2s render time
|
|
21
23
|
- **♿ Accessible**: WCAG AA color contrast, keyboard navigation support
|
|
@@ -102,8 +104,8 @@ After running the query, click the **"Graph"** tab to see the visualization.
|
|
|
102
104
|
- **Fit to View**: Click the "Zoom to Fit" button to center the entire graph
|
|
103
105
|
|
|
104
106
|
### Interaction
|
|
105
|
-
- **Drag Nodes**: Click and drag any node to reposition it
|
|
106
|
-
- **Tooltips**: Hover over nodes/edges
|
|
107
|
+
- **Drag Nodes**: Click and drag any node to reposition it (nodes are automatically pinned in place after dragging)
|
|
108
|
+
- **Tooltips**: Hover over nodes/edges to see rich HTML tooltips with type, value, namespace, and datatype information
|
|
107
109
|
|
|
108
110
|
### Understanding Colors
|
|
109
111
|
|
|
@@ -116,23 +118,122 @@ After running the query, click the **"Graph"** tab to see the visualization.
|
|
|
116
118
|
|
|
117
119
|
## ⚙️ Configuration
|
|
118
120
|
|
|
119
|
-
The plugin
|
|
121
|
+
The plugin ships with sensible defaults and stores every change in **`localStorage`** so settings survive page reloads.
|
|
122
|
+
|
|
123
|
+
### Settings panel
|
|
124
|
+
|
|
125
|
+
Click the **⚙ Settings** button (top-right of the graph) to open the settings panel.
|
|
126
|
+
|
|
127
|
+
| Setting | Values | Default | Description |
|
|
128
|
+
|---------|--------|---------|-------------|
|
|
129
|
+
| **Compact mode** | on / off | off | Hide literal and class nodes; show rdf:type and datatype properties in tooltips instead |
|
|
130
|
+
| **Arrow style** | Curved / Straight | Curved | Toggle between smooth curved edges and straight lines between nodes |
|
|
131
|
+
| **Predicate display** | Label / Icon / Hidden | Icon | Show the full prefixed URI on edges, a compact symbol/icon, or nothing |
|
|
132
|
+
| **Show literals** | on / off | on | Include or exclude literal value nodes (strings, numbers, dates, …) |
|
|
133
|
+
| **Show classes** | on / off | on | Include or exclude nodes that are objects of `rdf:type` triples (class nodes) |
|
|
134
|
+
| **Show blank nodes** | on / off | on | Include or exclude blank nodes (`_:b0`, `_:b1`, …) |
|
|
135
|
+
| **Show node labels** | on / off | on | Render the prefixed URI / literal text inside each node |
|
|
136
|
+
| **Enable physics** | on / off | on | Keep the force-directed layout simulation running so nodes keep adjusting |
|
|
137
|
+
| **Node size** | Small / Medium / Large | Medium | Set the radius of all nodes |
|
|
138
|
+
|
|
139
|
+
### Predicate icons
|
|
140
|
+
|
|
141
|
+
When *Predicate display* is set to **Icon**, each edge displays a compact symbol instead of the full label. Symbols are defined for the 20+ most common predicates:
|
|
142
|
+
|
|
143
|
+
| Predicate | Symbol |
|
|
144
|
+
|-----------|--------|
|
|
145
|
+
| `rdf:type` | `a` |
|
|
146
|
+
| `rdfs:label` | `lbl` |
|
|
147
|
+
| `rdfs:comment` | `cmt` |
|
|
148
|
+
| `rdfs:subClassOf` | `⊂` |
|
|
149
|
+
| `rdfs:subPropertyOf` | `⊆` |
|
|
150
|
+
| `rdfs:domain` | `dom` |
|
|
151
|
+
| `rdfs:range` | `rng` |
|
|
152
|
+
| `rdfs:seeAlso` | `see` |
|
|
153
|
+
| `rdfs:isDefinedBy` | `idb` |
|
|
154
|
+
| `owl:sameAs` | `≡` |
|
|
155
|
+
| `owl:equivalentClass` | `≅` |
|
|
156
|
+
| `owl:inverseOf` | `⇄` |
|
|
157
|
+
| `owl:disjointWith` | `≠` |
|
|
158
|
+
| `skos:prefLabel` | `★` |
|
|
159
|
+
| `skos:altLabel` | `☆` |
|
|
160
|
+
| `skos:definition` | `def` |
|
|
161
|
+
| `skos:broader` | `↑` |
|
|
162
|
+
| `skos:narrower` | `↓` |
|
|
163
|
+
| `skos:related` | `↔` |
|
|
164
|
+
| `skos:note` | `note` |
|
|
165
|
+
| `skos:exactMatch` | `≡` |
|
|
166
|
+
| `skos:closeMatch` | `≈` |
|
|
167
|
+
| `dcterms:title` | `ttl` |
|
|
168
|
+
| `dcterms:description` | `dsc` |
|
|
169
|
+
| `dcterms:created` | `crt` |
|
|
170
|
+
| `dcterms:modified` | `mod` |
|
|
171
|
+
| `dcterms:creator` | `by` |
|
|
172
|
+
| `dcterms:subject` | `sbj` |
|
|
173
|
+
| `foaf:name` | `nm` |
|
|
174
|
+
| `foaf:knows` | `⟷` |
|
|
175
|
+
| `foaf:member` | `mbr` |
|
|
176
|
+
| `schema:name` | `nm` |
|
|
177
|
+
| `schema:description` | `dsc` |
|
|
178
|
+
|
|
179
|
+
For predicates not in the table the full prefixed label is used as a fallback.
|
|
180
|
+
|
|
181
|
+
## 🖼️ Node icons and images
|
|
182
|
+
|
|
183
|
+
Any URI node can display an image or an icon instead of (or in addition to) the default coloured dot by attaching `schema:image` or `schema:icon` as a property directly in the SPARQL result.
|
|
184
|
+
|
|
185
|
+
| Property | Object | Effect |
|
|
186
|
+
|----------|--------|--------|
|
|
187
|
+
| `schema:image` (`https://schema.org/image`) | URL literal or URI | Node is rendered as a circular image |
|
|
188
|
+
| `schema:icon` (`https://schema.org/icon`) | emoji / short string | The string is used as the node's label |
|
|
189
|
+
|
|
190
|
+
`schema:icon` takes priority over `schema:image`. The corresponding `schema:icon`/`schema:image` triples are **not** rendered as separate nodes or edges, but their values **are** shown in the node tooltip. Similarly, any `rdfs:label` triple is consumed to determine the node's displayed label and is never drawn as an edge, even when predicate display is enabled.
|
|
191
|
+
|
|
192
|
+
### Example – inline image on a resource
|
|
193
|
+
|
|
194
|
+
```sparql
|
|
195
|
+
CONSTRUCT {
|
|
196
|
+
ex:alice schema:image <https://example.com/alice.png> .
|
|
197
|
+
ex:alice ex:knows ex:bob .
|
|
198
|
+
}
|
|
199
|
+
WHERE {}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`ex:alice` will be drawn as a circular photograph.
|
|
203
|
+
|
|
204
|
+
### Example – icon/emoji on a class
|
|
205
|
+
|
|
206
|
+
```sparql
|
|
207
|
+
CONSTRUCT {
|
|
208
|
+
ex:alice rdf:type ex:Person .
|
|
209
|
+
ex:Person schema:icon "👤" .
|
|
210
|
+
}
|
|
211
|
+
WHERE {}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
`ex:alice` remains a normal dot node in regular mode.
|
|
215
|
+
In **compact mode** the class node (`ex:Person`) is hidden and Alice's node inherits the `👤` emoji as its label.
|
|
216
|
+
|
|
217
|
+
### Compact mode visual inheritance
|
|
218
|
+
|
|
219
|
+
When compact mode is enabled, class nodes are hidden and the plugin resolves the image/icon to show on the resource node using the following priority:
|
|
220
|
+
|
|
221
|
+
1. `schema:image` / `schema:icon` directly on the **resource** (highest priority)
|
|
222
|
+
2. `schema:image` / `schema:icon` on the **rdf:type class**
|
|
223
|
+
3. `schema:image` / `schema:icon` on a **rdfs:subClassOf superclass** (one hop)
|
|
224
|
+
|
|
225
|
+
### Programmatic configuration
|
|
226
|
+
|
|
227
|
+
You can also pass initial settings when extending the class:
|
|
120
228
|
|
|
121
229
|
```javascript
|
|
122
230
|
class CustomGraphPlugin extends GraphPlugin {
|
|
123
231
|
constructor(yasr) {
|
|
124
232
|
super(yasr);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return {
|
|
130
|
-
...super.getNetworkOptions(),
|
|
131
|
-
physics: {
|
|
132
|
-
enabled: true,
|
|
133
|
-
stabilization: { iterations: 100 } // Faster but less optimal layout
|
|
134
|
-
}
|
|
135
|
-
};
|
|
233
|
+
// Override defaults
|
|
234
|
+
this.settings.edgeStyle = 'straight';
|
|
235
|
+
this.settings.predicateDisplay = 'label';
|
|
236
|
+
this.settings.nodeSize = 'large';
|
|
136
237
|
}
|
|
137
238
|
}
|
|
138
239
|
|
|
@@ -163,6 +264,7 @@ Output:
|
|
|
163
264
|
### Code Quality
|
|
164
265
|
|
|
165
266
|
```bash
|
|
267
|
+
npm test # Run Jest unit tests
|
|
166
268
|
npm run lint # ESLint check
|
|
167
269
|
npm run format # Prettier format
|
|
168
270
|
```
|
|
@@ -92,6 +92,63 @@
|
|
|
92
92
|
.yasgui-graph-button:active {
|
|
93
93
|
transform: translateY(1px);
|
|
94
94
|
}
|
|
95
|
+
.yasgui-graph-settings-panel {
|
|
96
|
+
position: absolute;
|
|
97
|
+
top: 50px;
|
|
98
|
+
right: 10px;
|
|
99
|
+
z-index: 10001;
|
|
100
|
+
background: var(--yasgui-graph-button-bg, #4caf50);
|
|
101
|
+
background: var(--yasgui-bg-primary, #ffffff);
|
|
102
|
+
color: var(--yasgui-graph-text, #333333);
|
|
103
|
+
border: 1px solid var(--yasgui-border-color, #cccccc);
|
|
104
|
+
border-radius: 6px;
|
|
105
|
+
padding: 12px 14px;
|
|
106
|
+
min-width: 240px;
|
|
107
|
+
box-shadow: var(--yasgui-graph-shadow, 0 2px 8px rgba(0,0,0,0.2));
|
|
108
|
+
font-size: 13px;
|
|
109
|
+
}
|
|
110
|
+
.yasgui-graph-settings-title {
|
|
111
|
+
font-weight: 600;
|
|
112
|
+
font-size: 14px;
|
|
113
|
+
margin-bottom: 10px;
|
|
114
|
+
padding-bottom: 6px;
|
|
115
|
+
border-bottom: 1px solid var(--yasgui-border-color, #cccccc);
|
|
116
|
+
}
|
|
117
|
+
.yasgui-graph-settings-section {
|
|
118
|
+
font-size: 11px;
|
|
119
|
+
font-weight: 700;
|
|
120
|
+
text-transform: uppercase;
|
|
121
|
+
letter-spacing: 0.5px;
|
|
122
|
+
color: var(--yasgui-text-secondary, #888888);
|
|
123
|
+
margin: 10px 0 4px;
|
|
124
|
+
}
|
|
125
|
+
.yasgui-graph-settings-row {
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
justify-content: space-between;
|
|
129
|
+
gap: 8px;
|
|
130
|
+
padding: 3px 0;
|
|
131
|
+
cursor: pointer;
|
|
132
|
+
}
|
|
133
|
+
.yasgui-graph-settings-row input[type=checkbox] {
|
|
134
|
+
cursor: pointer;
|
|
135
|
+
accent-color: var(--yasgui-accent-color, #4caf50);
|
|
136
|
+
}
|
|
137
|
+
.yasgui-graph-settings-select {
|
|
138
|
+
font-size: 12px;
|
|
139
|
+
padding: 2px 4px;
|
|
140
|
+
border: 1px solid var(--yasgui-border-color, #cccccc);
|
|
141
|
+
border-radius: 3px;
|
|
142
|
+
background: var(--yasgui-bg-primary, #ffffff);
|
|
143
|
+
color: var(--yasgui-text-primary, #333333);
|
|
144
|
+
cursor: pointer;
|
|
145
|
+
max-width: 140px;
|
|
146
|
+
}
|
|
147
|
+
.yasgui-graph-settings-button {
|
|
148
|
+
display: inline-flex;
|
|
149
|
+
align-items: center;
|
|
150
|
+
gap: 5px;
|
|
151
|
+
}
|
|
95
152
|
.yasgui-graph-icon {
|
|
96
153
|
display: inline-flex;
|
|
97
154
|
align-items: center;
|
|
@@ -102,4 +159,62 @@
|
|
|
102
159
|
height: 16px;
|
|
103
160
|
fill: currentColor;
|
|
104
161
|
}
|
|
162
|
+
.yasgui-graph-plugin-container .vis-tooltip {
|
|
163
|
+
display: none !important;
|
|
164
|
+
}
|
|
165
|
+
.yasgui-graph-tooltip-container {
|
|
166
|
+
position: absolute;
|
|
167
|
+
background-color: rgba(28, 28, 32, 0.95);
|
|
168
|
+
color: #f0f0f0;
|
|
169
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
170
|
+
border-radius: 6px;
|
|
171
|
+
padding: 8px 10px;
|
|
172
|
+
font-size: 11px;
|
|
173
|
+
font-family:
|
|
174
|
+
ui-monospace,
|
|
175
|
+
"SFMono-Regular",
|
|
176
|
+
"Menlo",
|
|
177
|
+
"Consolas",
|
|
178
|
+
monospace;
|
|
179
|
+
max-width: 340px;
|
|
180
|
+
white-space: normal;
|
|
181
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
|
|
182
|
+
pointer-events: auto;
|
|
183
|
+
z-index: 1000;
|
|
184
|
+
user-select: text;
|
|
185
|
+
cursor: text;
|
|
186
|
+
}
|
|
187
|
+
.yasgui-graph-tooltip {
|
|
188
|
+
display: flex;
|
|
189
|
+
flex-direction: column;
|
|
190
|
+
gap: 3px;
|
|
191
|
+
}
|
|
192
|
+
.yasgui-tooltip-type {
|
|
193
|
+
font-size: 9px;
|
|
194
|
+
font-weight: 700;
|
|
195
|
+
text-transform: uppercase;
|
|
196
|
+
letter-spacing: 0.6px;
|
|
197
|
+
color: rgba(255, 255, 255, 0.5);
|
|
198
|
+
padding-bottom: 5px;
|
|
199
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.12);
|
|
200
|
+
margin-bottom: 3px;
|
|
201
|
+
}
|
|
202
|
+
.yasgui-tooltip-row {
|
|
203
|
+
display: flex;
|
|
204
|
+
gap: 8px;
|
|
205
|
+
align-items: baseline;
|
|
206
|
+
line-height: 1.5;
|
|
207
|
+
}
|
|
208
|
+
.yasgui-tooltip-key {
|
|
209
|
+
font-size: 10px;
|
|
210
|
+
font-weight: 600;
|
|
211
|
+
color: rgba(255, 255, 255, 0.55);
|
|
212
|
+
min-width: 58px;
|
|
213
|
+
flex-shrink: 0;
|
|
214
|
+
}
|
|
215
|
+
.yasgui-tooltip-val {
|
|
216
|
+
font-size: 11px;
|
|
217
|
+
color: #e8e8e8;
|
|
218
|
+
word-break: break-all;
|
|
219
|
+
}
|
|
105
220
|
/*# sourceMappingURL=yasgui-graph-plugin.cjs.css.map */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../styles/index.css"],
|
|
4
|
-
"sourcesContent": ["/* Color scheme variables using YASGUI CSS custom properties with fallbacks */\r\n:root {\r\n /* Graph-specific node colors (custom to this plugin) */\r\n --yasgui-graph-uri: #97c2fc;\r\n --yasgui-graph-literal: #a6c8a6ff;\r\n --yasgui-graph-blank-node: #c5c5c5ff;\r\n --yasgui-graph-type-object: #e15b13ff;\r\n\r\n /* Graph text and edges - using YASGUI variables with fallbacks */\r\n --yasgui-graph-text: var(--yasgui-text-primary, #000000);\r\n --yasgui-graph-edge: var(--yasgui-border-color, #cccccc);\r\n --yasgui-graph-edge-label: var(--yasgui-text-secondary, #666666);\r\n --yasgui-graph-edge-label-bg: var(--yasgui-bg-primary, rgba(255, 255, 255, 0.8));\r\n --yasgui-graph-background: var(--yasgui-bg-primary, #ffffff);\r\n\r\n /* UI elements - using YASGUI variables with fallbacks */\r\n --yasgui-graph-canvas-bg: var(--yasgui-bg-primary, #ffffff);\r\n --yasgui-graph-button-bg: var(--yasgui-accent-color, #4caf50);\r\n --yasgui-graph-button-hover: var(--yasgui-link-hover, #45a049);\r\n --yasgui-graph-button-text: var(--yasgui-button-text, #ffffff);\r\n --yasgui-graph-empty-text: var(--yasgui-text-secondary, #666666);\r\n --yasgui-graph-error-text: #f44336;\r\n\r\n /* Shadow */\r\n --yasgui-graph-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n\r\n /* Legacy variables for backward compatibility */\r\n --color-blank-node: #ffff00;\r\n --color-literal: #808080;\r\n --color-rdf-type: #00ff00;\r\n --color-uri: #0000ff;\r\n\r\n --color-blank-node-dark: #ffeb3b;\r\n --color-literal-dark: #9e9e9e;\r\n --color-rdf-type-dark: #4caf50;\r\n --color-uri-dark: #2196f3;\r\n\r\n --bg-light: #ffffff;\r\n --bg-dark: #1e1e1e;\r\n\r\n --text-light: #666666;\r\n --text-dark: #cccccc;\r\n --text-error: #f44336;\r\n\r\n --button-primary-bg: #4caf50;\r\n --button-primary-bg-hover: #45a049;\r\n --button-text: #ffffff;\r\n\r\n --box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n/* Dark theme colors */\r\n[data-theme='dark'],\r\n.dark-theme {\r\n /* Graph-specific node colors in dark mode */\r\n --yasgui-graph-uri: #97c2fc;\r\n --yasgui-graph-literal: #a6c8a6ff;\r\n --yasgui-graph-blank-node: #888888;\r\n --yasgui-graph-type-object: #e15b13ff;\r\n\r\n /* Override with YASGUI dark theme variables */\r\n --yasgui-graph-text: var(--yasgui-text-primary, #e0e0e0);\r\n --yasgui-graph-edge: var(--yasgui-border-color, #666666);\r\n --yasgui-graph-edge-label: var(--yasgui-text-secondary, #cccccc);\r\n --yasgui-graph-edge-label-bg: var(--yasgui-bg-secondary, rgba(30, 30, 30, 0.8));\r\n --yasgui-graph-background: var(--yasgui-bg-primary, #1e1e1e);\r\n --yasgui-graph-canvas-bg: var(--yasgui-bg-primary, #1e1e1e);\r\n --yasgui-graph-empty-text: var(--yasgui-text-secondary, #cccccc);\r\n}\r\n/* Graph plugin container */\r\n.yasgui-graph-plugin-container {\r\n width: 100%;\r\n height: 500px; /* Initial fixed height as workaround for viz-network bug */\r\n position: relative;\r\n overflow: hidden;\r\n}\r\n.yasgui-graph-plugin-container canvas {\r\n background-color: var(--yasgui-graph-canvas-bg);\r\n}\r\n.yasgui-graph-plugin-empty-state {\r\n padding: 20px;\r\n text-align: center;\r\n color: var(--yasgui-graph-empty-text);\r\n}\r\n.yasgui-graph-plugin-error {\r\n padding: 20px;\r\n color: var(--yasgui-graph-error-text);\r\n}\r\n/* Controls container */\r\n.yasgui-graph-controls {\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n z-index: 10000;\r\n display: flex;\r\n gap: 10px;\r\n pointer-events: auto;\r\n}\r\n/* Button styles */\r\n.yasgui-graph-button {\r\n padding: 8px 12px;\r\n background: var(--yasgui-graph-button-bg);\r\n color: var(--yasgui-graph-button-text);\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n box-shadow: var(--yasgui-graph-shadow);\r\n transition: background 0.2s ease;\r\n}\r\n.yasgui-graph-button:hover {\r\n background: var(--yasgui-graph-button-hover);\r\n}\r\n.yasgui-graph-button:active {\r\n transform: translateY(1px);\r\n}\r\n/*
|
|
5
|
-
"mappings": ";AACA;AAEE,sBAAoB;AACpB,0BAAwB;AACxB,6BAA2B;AAC3B,8BAA4B;AAG5B,uBAAqB,IAAI,qBAAqB,EAAE;AAChD,uBAAqB,IAAI,qBAAqB,EAAE;AAChD,6BAA2B,IAAI,uBAAuB,EAAE;AACxD,gCAA8B,IAAI,mBAAmB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC3E,6BAA2B,IAAI,mBAAmB,EAAE;AAGpD,4BAA0B,IAAI,mBAAmB,EAAE;AACnD,4BAA0B,IAAI,qBAAqB,EAAE;AACrD,+BAA6B,IAAI,mBAAmB,EAAE;AACtD,8BAA4B,IAAI,oBAAoB,EAAE;AACtD,6BAA2B,IAAI,uBAAuB,EAAE;AACxD,6BAA2B;AAG3B,yBAAuB,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAG/C,sBAAoB;AACpB,mBAAiB;AACjB,oBAAkB;AAClB,eAAa;AAEb,2BAAyB;AACzB,wBAAsB;AACtB,yBAAuB;AACvB,oBAAkB;AAElB,cAAY;AACZ,aAAW;AAEX,gBAAc;AACd,eAAa;AACb,gBAAc;AAEd,uBAAqB;AACrB,6BAA2B;AAC3B,iBAAe;AAEf,gBAAc,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACxC;AAEA,CAAC;AACD,CAAC;AAEC,sBAAoB;AACpB,0BAAwB;AACxB,6BAA2B;AAC3B,8BAA4B;AAG5B,uBAAqB,IAAI,qBAAqB,EAAE;AAChD,uBAAqB,IAAI,qBAAqB,EAAE;AAChD,6BAA2B,IAAI,uBAAuB,EAAE;AACxD,gCAA8B,IAAI,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1E,6BAA2B,IAAI,mBAAmB,EAAE;AACpD,4BAA0B,IAAI,mBAAmB,EAAE;AACnD,6BAA2B,IAAI,uBAAuB,EAAE;AAC1D;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,YAAU;AACV,YAAU;AACZ;AACA,CANC,8BAM8B;AAC7B,oBAAkB,IAAI;AACxB;AACA,CAAC;AACC,WAAS;AACT,cAAY;AACZ,SAAO,IAAI;AACb;AACA,CAAC;AACC,WAAS;AACT,SAAO,IAAI;AACb;AAEA,CAAC;AACC,YAAU;AACV,OAAK;AACL,SAAO;AACP,WAAS;AACT,WAAS;AACT,OAAK;AACL,kBAAgB;AAClB;AAEA,CAAC;AACC,WAAS,IAAI;AACb,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,UAAQ;AACR,iBAAe;AACf,UAAQ;AACR,aAAW;AACX,cAAY,IAAI;AAChB,cAAY,WAAW,KAAK;AAC9B;AACA,CAXC,mBAWmB;AAClB,cAAY,IAAI;AAClB;AACA,CAdC,mBAcmB;AAClB,aAAW,WAAW;AACxB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACnB;AACA,CALC,kBAKkB;AACjB,SAAO;AACP,UAAQ;AACR,QAAM;AACR;",
|
|
4
|
+
"sourcesContent": ["/* Color scheme variables using YASGUI CSS custom properties with fallbacks */\r\n:root {\r\n /* Graph-specific node colors (custom to this plugin) */\r\n --yasgui-graph-uri: #97c2fc;\r\n --yasgui-graph-literal: #a6c8a6ff;\r\n --yasgui-graph-blank-node: #c5c5c5ff;\r\n --yasgui-graph-type-object: #e15b13ff;\r\n\r\n /* Graph text and edges - using YASGUI variables with fallbacks */\r\n --yasgui-graph-text: var(--yasgui-text-primary, #000000);\r\n --yasgui-graph-edge: var(--yasgui-border-color, #cccccc);\r\n --yasgui-graph-edge-label: var(--yasgui-text-secondary, #666666);\r\n --yasgui-graph-edge-label-bg: var(--yasgui-bg-primary, rgba(255, 255, 255, 0.8));\r\n --yasgui-graph-background: var(--yasgui-bg-primary, #ffffff);\r\n\r\n /* UI elements - using YASGUI variables with fallbacks */\r\n --yasgui-graph-canvas-bg: var(--yasgui-bg-primary, #ffffff);\r\n --yasgui-graph-button-bg: var(--yasgui-accent-color, #4caf50);\r\n --yasgui-graph-button-hover: var(--yasgui-link-hover, #45a049);\r\n --yasgui-graph-button-text: var(--yasgui-button-text, #ffffff);\r\n --yasgui-graph-empty-text: var(--yasgui-text-secondary, #666666);\r\n --yasgui-graph-error-text: #f44336;\r\n\r\n /* Shadow */\r\n --yasgui-graph-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n\r\n /* Legacy variables for backward compatibility */\r\n --color-blank-node: #ffff00;\r\n --color-literal: #808080;\r\n --color-rdf-type: #00ff00;\r\n --color-uri: #0000ff;\r\n\r\n --color-blank-node-dark: #ffeb3b;\r\n --color-literal-dark: #9e9e9e;\r\n --color-rdf-type-dark: #4caf50;\r\n --color-uri-dark: #2196f3;\r\n\r\n --bg-light: #ffffff;\r\n --bg-dark: #1e1e1e;\r\n\r\n --text-light: #666666;\r\n --text-dark: #cccccc;\r\n --text-error: #f44336;\r\n\r\n --button-primary-bg: #4caf50;\r\n --button-primary-bg-hover: #45a049;\r\n --button-text: #ffffff;\r\n\r\n --box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n}\r\n/* Dark theme colors */\r\n[data-theme='dark'],\r\n.dark-theme {\r\n /* Graph-specific node colors in dark mode */\r\n --yasgui-graph-uri: #97c2fc;\r\n --yasgui-graph-literal: #a6c8a6ff;\r\n --yasgui-graph-blank-node: #888888;\r\n --yasgui-graph-type-object: #e15b13ff;\r\n\r\n /* Override with YASGUI dark theme variables */\r\n --yasgui-graph-text: var(--yasgui-text-primary, #e0e0e0);\r\n --yasgui-graph-edge: var(--yasgui-border-color, #666666);\r\n --yasgui-graph-edge-label: var(--yasgui-text-secondary, #cccccc);\r\n --yasgui-graph-edge-label-bg: var(--yasgui-bg-secondary, rgba(30, 30, 30, 0.8));\r\n --yasgui-graph-background: var(--yasgui-bg-primary, #1e1e1e);\r\n --yasgui-graph-canvas-bg: var(--yasgui-bg-primary, #1e1e1e);\r\n --yasgui-graph-empty-text: var(--yasgui-text-secondary, #cccccc);\r\n}\r\n/* Graph plugin container */\r\n.yasgui-graph-plugin-container {\r\n width: 100%;\r\n height: 500px; /* Initial fixed height as workaround for viz-network bug */\r\n position: relative;\r\n overflow: hidden;\r\n}\r\n.yasgui-graph-plugin-container canvas {\r\n background-color: var(--yasgui-graph-canvas-bg);\r\n}\r\n.yasgui-graph-plugin-empty-state {\r\n padding: 20px;\r\n text-align: center;\r\n color: var(--yasgui-graph-empty-text);\r\n}\r\n.yasgui-graph-plugin-error {\r\n padding: 20px;\r\n color: var(--yasgui-graph-error-text);\r\n}\r\n/* Controls container */\r\n.yasgui-graph-controls {\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n z-index: 10000;\r\n display: flex;\r\n gap: 10px;\r\n pointer-events: auto;\r\n}\r\n/* Button styles */\r\n.yasgui-graph-button {\r\n padding: 8px 12px;\r\n background: var(--yasgui-graph-button-bg);\r\n color: var(--yasgui-graph-button-text);\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n box-shadow: var(--yasgui-graph-shadow);\r\n transition: background 0.2s ease;\r\n}\r\n.yasgui-graph-button:hover {\r\n background: var(--yasgui-graph-button-hover);\r\n}\r\n.yasgui-graph-button:active {\r\n transform: translateY(1px);\r\n}\r\n/* Settings panel */\r\n.yasgui-graph-settings-panel {\r\n position: absolute;\r\n top: 50px;\r\n right: 10px;\r\n z-index: 10001;\r\n background: var(--yasgui-graph-button-bg, #4caf50);\r\n background: var(--yasgui-bg-primary, #ffffff);\r\n color: var(--yasgui-graph-text, #333333);\r\n border: 1px solid var(--yasgui-border-color, #cccccc);\r\n border-radius: 6px;\r\n padding: 12px 14px;\r\n min-width: 240px;\r\n box-shadow: var(--yasgui-graph-shadow, 0 2px 8px rgba(0,0,0,0.2));\r\n font-size: 13px;\r\n}\r\n.yasgui-graph-settings-title {\r\n font-weight: 600;\r\n font-size: 14px;\r\n margin-bottom: 10px;\r\n padding-bottom: 6px;\r\n border-bottom: 1px solid var(--yasgui-border-color, #cccccc);\r\n}\r\n.yasgui-graph-settings-section {\r\n font-size: 11px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n color: var(--yasgui-text-secondary, #888888);\r\n margin: 10px 0 4px;\r\n}\r\n.yasgui-graph-settings-row {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 8px;\r\n padding: 3px 0;\r\n cursor: pointer;\r\n}\r\n.yasgui-graph-settings-row input[type='checkbox'] {\r\n cursor: pointer;\r\n accent-color: var(--yasgui-accent-color, #4caf50);\r\n}\r\n.yasgui-graph-settings-select {\r\n font-size: 12px;\r\n padding: 2px 4px;\r\n border: 1px solid var(--yasgui-border-color, #cccccc);\r\n border-radius: 3px;\r\n background: var(--yasgui-bg-primary, #ffffff);\r\n color: var(--yasgui-text-primary, #333333);\r\n cursor: pointer;\r\n max-width: 140px;\r\n}\r\n/* Settings button icon alignment */\r\n.yasgui-graph-settings-button {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 5px;\r\n}\r\n.yasgui-graph-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.yasgui-graph-icon svg {\r\n width: 16px;\r\n height: 16px;\r\n fill: currentColor;\r\n}\r\n/* Modern tooltip styles - override vis-network defaults */\r\n.yasgui-graph-plugin-container .vis-tooltip {\r\n display: none !important; /* Hide default vis-network tooltips */\r\n}\r\n/* Custom HTML tooltip container */\r\n.yasgui-graph-tooltip-container {\r\n position: absolute;\r\n background-color: rgba(28, 28, 32, 0.95);\r\n color: #f0f0f0;\r\n border: 1px solid rgba(255, 255, 255, 0.12);\r\n border-radius: 6px;\r\n padding: 8px 10px;\r\n font-size: 11px;\r\n font-family: ui-monospace, 'SFMono-Regular', 'Menlo', 'Consolas', monospace;\r\n max-width: 340px;\r\n white-space: normal;\r\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);\r\n pointer-events: auto;\r\n z-index: 1000;\r\n user-select: text;\r\n cursor: text;\r\n}\r\n.yasgui-graph-tooltip {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 3px;\r\n}\r\n.yasgui-tooltip-type {\r\n font-size: 9px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.6px;\r\n color: rgba(255, 255, 255, 0.5);\r\n padding-bottom: 5px;\r\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\r\n margin-bottom: 3px;\r\n}\r\n.yasgui-tooltip-row {\r\n display: flex;\r\n gap: 8px;\r\n align-items: baseline;\r\n line-height: 1.5;\r\n}\r\n.yasgui-tooltip-key {\r\n font-size: 10px;\r\n font-weight: 600;\r\n color: rgba(255, 255, 255, 0.55);\r\n min-width: 58px;\r\n flex-shrink: 0;\r\n}\r\n.yasgui-tooltip-val {\r\n font-size: 11px;\r\n color: #e8e8e8;\r\n word-break: break-all;\r\n}\r\n/* Main entry point for all styles */\r\n/* This file will be imported by the TypeScript code */\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|