fastapi-voyager 0.15.0__py3-none-any.whl → 0.15.2__py3-none-any.whl

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.
@@ -1 +1,11 @@
1
- {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
1
+ {
2
+ "name": "",
3
+ "short_name": "",
4
+ "icons": [
5
+ { "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" },
6
+ { "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" }
7
+ ],
8
+ "theme_color": "#ffffff",
9
+ "background_color": "#ffffff",
10
+ "display": "standalone"
11
+ }
@@ -22,11 +22,7 @@
22
22
  sizes="16x16"
23
23
  href="fastapi-voyager-static/icon/favicon-16x16.png"
24
24
  />
25
- <link
26
- rel="icon"
27
- href="fastapi-voyager-static/icon/favicon.ico"
28
- sizes="any"
29
- />
25
+ <link rel="icon" href="fastapi-voyager-static/icon/favicon.ico" sizes="any" />
30
26
  <link rel="manifest" href="fastapi-voyager-static/icon/site.webmanifest" />
31
27
  <link
32
28
  href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
@@ -64,18 +60,70 @@
64
60
 
65
61
  .inherit-flow {
66
62
  /* stroke-width:2; */
67
- stroke-dasharray: 8 6; /* dash pattern */
63
+ stroke-dasharray: 8 6; /* dash pattern */
68
64
  stroke-linecap: round;
69
65
  animation: dash 2s linear infinite;
70
66
  animation-direction: reverse;
71
67
  }
72
- @keyframes dash { to { stroke-dashoffset: -14; } }
68
+ @keyframes dash {
69
+ to {
70
+ stroke-dashoffset: -14;
71
+ }
72
+ }
73
73
 
74
74
  .adjust-fit {
75
75
  height: calc(100vh - 54px);
76
76
  }
77
77
 
78
- .github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}
78
+ .github-corner:hover .octo-arm {
79
+ animation: octocat-wave 560ms ease-in-out;
80
+ }
81
+ @keyframes octocat-wave {
82
+ 0%,
83
+ 100% {
84
+ transform: rotate(0);
85
+ }
86
+ 20%,
87
+ 60% {
88
+ transform: rotate(-25deg);
89
+ }
90
+ 40%,
91
+ 80% {
92
+ transform: rotate(10deg);
93
+ }
94
+ }
95
+ @media (max-width: 500px) {
96
+ .github-corner:hover .octo-arm {
97
+ animation: none;
98
+ }
99
+ .github-corner .octo-arm {
100
+ animation: octocat-wave 560ms ease-in-out;
101
+ }
102
+ }
103
+
104
+ /* Tag Navigator Collapse Button */
105
+ .tag-navigator-collapse-btn-right {
106
+ position: absolute;
107
+ bottom: 8px;
108
+ left: 8px;
109
+ width: 32px;
110
+ height: 32px;
111
+ border-radius: 50%;
112
+ background: #009485;
113
+ color: white;
114
+ border: 2px solid white;
115
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
116
+ cursor: pointer;
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: center;
120
+ z-index: 100;
121
+ transition: all 0.2s ease;
122
+ }
123
+ .tag-navigator-collapse-btn-right:hover {
124
+ background: #007a6d;
125
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
126
+ }
79
127
 
80
128
  /* App boot loading overlay & gating */
81
129
  #app-loading-overlay {
@@ -87,10 +135,19 @@
87
135
  gap: 12px;
88
136
  background: #ffffff;
89
137
  z-index: 9999;
90
- font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
138
+ font-family:
139
+ -apple-system,
140
+ BlinkMacSystemFont,
141
+ Segoe UI,
142
+ Roboto,
143
+ Helvetica,
144
+ Arial,
145
+ sans-serif;
91
146
  color: #009485;
92
147
  }
93
- .loading-text { font-size: 14px; }
148
+ .loading-text {
149
+ font-size: 14px;
150
+ }
94
151
  .spinner {
95
152
  width: 20px;
96
153
  height: 20px;
@@ -99,10 +156,18 @@
99
156
  border-radius: 50%;
100
157
  animation: frv-spin 0.8s linear infinite;
101
158
  }
102
- @keyframes frv-spin { to { transform: rotate(360deg); } }
159
+ @keyframes frv-spin {
160
+ to {
161
+ transform: rotate(360deg);
162
+ }
163
+ }
103
164
  /* While JS not ready: hide app, show overlay */
104
- body.app-loading #q-app { visibility: hidden; }
105
- body.app-loading #app-loading-overlay { display: flex; }
165
+ body.app-loading #q-app {
166
+ visibility: hidden;
167
+ }
168
+ body.app-loading #app-loading-overlay {
169
+ display: flex;
170
+ }
106
171
  </style>
107
172
  <body class="app-loading">
108
173
  <!-- App boot loading overlay: shown until JS initializes -->
@@ -113,14 +178,21 @@
113
178
  <div id="q-app">
114
179
  <q-layout view="hHh lpR fff">
115
180
  <q-header bordered class="bg-primary text-white">
116
- <q-toolbar class="row text-grey-9 bg-white" style="width: 100%; border-bottom: 2px solid #009485;">
181
+ <q-toolbar
182
+ class="row text-grey-9 bg-white"
183
+ style="width: 100%; border-bottom: 2px solid #009485"
184
+ >
117
185
  <div
118
186
  class="col-auto text-primary"
119
- style="font-size: 18px; font-weight: bold; display: flex; align-items: baseline;"
187
+ style="font-size: 18px; font-weight: bold; display: flex; align-items: baseline"
120
188
  >
121
189
  <q-icon class="q-mr-sm" name="satellite_alt"></q-icon>
122
190
  <span> FastAPI Voyager </span>
123
- <span v-if="store.state.version" style="font-size: 12px; margin-left: 8px; font-weight: normal;">{{ store.state.version }}</span>
191
+ <span
192
+ v-if="store.state.version"
193
+ style="font-size: 12px; margin-left: 8px; font-weight: normal"
194
+ >{{ store.state.version }}</span
195
+ >
124
196
  </div>
125
197
  <div class="col-auto">
126
198
  <q-btn
@@ -145,8 +217,7 @@
145
217
  dense
146
218
  />
147
219
  </div>
148
- <div class="col-auto q-ml-auto">
149
- </div>
220
+ <div class="col-auto q-ml-auto"></div>
150
221
  <div class="col-auto row items-center q-gutter-sm">
151
222
  <q-select
152
223
  v-show="!store.state.search.invisible"
@@ -162,23 +233,23 @@
162
233
  option-value="value"
163
234
  emit-value
164
235
  map-options
165
- style="min-width: 320px;"
236
+ style="min-width: 320px"
166
237
  clearable
167
238
  label="Select schema"
168
239
  @update:model-value="onSearchSchemaChange"
169
240
  @filter="filterSearchSchemas"
170
241
  @clear="resetSearch"
171
242
  >
172
- <template v-slot:option="scope">
173
- <q-item v-bind="scope.itemProps">
174
- <q-item-section>
175
- <q-item-label>{{ scope.opt.label }}</q-item-label>
176
- <q-item-label caption>{{ scope.opt.desc }}</q-item-label>
177
- </q-item-section>
178
- </q-item>
179
- </template>
180
- </q-select>
181
-
243
+ <template v-slot:option="scope">
244
+ <q-item v-bind="scope.itemProps">
245
+ <q-item-section>
246
+ <q-item-label>{{ scope.opt.label }}</q-item-label>
247
+ <q-item-label caption>{{ scope.opt.desc }}</q-item-label>
248
+ </q-item-section>
249
+ </q-item>
250
+ </template>
251
+ </q-select>
252
+
182
253
  <q-select
183
254
  v-show="!store.state.search.invisible"
184
255
  dense
@@ -213,29 +284,52 @@
213
284
  aria-label="Help"
214
285
  style="margin-right: 50px; margin-left: 20px"
215
286
  >
216
- <q-tooltip
217
- anchor="bottom middle"
218
- self="top middle"
219
- :offset="[0,8]"
220
- >
287
+ <q-tooltip anchor="bottom middle" self="top middle" :offset="[0,8]">
221
288
  <div
222
289
  class="column items-start text-left"
223
290
  style="line-height: 1.4; font-size: 12px"
224
291
  >
225
292
  <ul>
226
293
  <li>scroll to zoom in/out</li>
227
- <li>
228
- double click node to view details.
229
- </li>
230
- <li>
231
- shift + click to search the schema and highlight related nodes.
232
- </li>
294
+ <li>double click node to view details.</li>
295
+ <li>shift + click to search the schema and highlight related nodes.</li>
233
296
  </ul>
234
297
  </div>
235
298
  </q-tooltip>
236
299
  </q-btn>
237
- <a href="https://github.com/allmonday/fastapi-voyager" target="_blank" class="github-corner" aria-label="View source on GitHub"><svg width="52" height="52" viewBox="0 0 250 250" style="fill:#009485; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"/><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"/></svg></a>
238
- </div>
300
+ <a
301
+ href="https://github.com/allmonday/fastapi-voyager"
302
+ target="_blank"
303
+ class="github-corner"
304
+ aria-label="View source on GitHub"
305
+ ><svg
306
+ width="52"
307
+ height="52"
308
+ viewBox="0 0 250 250"
309
+ style="
310
+ fill: #009485;
311
+ color: #fff;
312
+ position: absolute;
313
+ top: 0;
314
+ border: 0;
315
+ right: 0;
316
+ "
317
+ aria-hidden="true"
318
+ >
319
+ <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" />
320
+ <path
321
+ d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
322
+ fill="currentColor"
323
+ style="transform-origin: 130px 106px"
324
+ class="octo-arm"
325
+ />
326
+ <path
327
+ d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
328
+ fill="currentColor"
329
+ class="octo-body"
330
+ /></svg
331
+ ></a>
332
+ </div>
239
333
  </q-toolbar>
240
334
  </q-header>
241
335
 
@@ -243,25 +337,25 @@
243
337
  v-model="store.state.rightDrawer.drawer"
244
338
  :width="store.state.rightDrawer.width"
245
339
  side="right"
246
- style="border-left: 1px solid #888;"
340
+ style="border-left: 1px solid #888"
247
341
  bordered
248
342
  overlay
249
343
  >
250
- <div
344
+ <div
251
345
  @mousedown="startDragDrawer"
252
346
  style="
253
- position: absolute;
254
- left: -3px;
255
- top: 0;
256
- width: 6px;
257
- height: 100%;
258
- cursor: col-resize;
347
+ position: absolute;
348
+ left: -3px;
349
+ top: 0;
350
+ width: 6px;
351
+ height: 100%;
352
+ cursor: col-resize;
259
353
  background: transparent;
260
354
  z-index: 10;
261
355
  "
262
356
  title="drag to resize"
263
357
  ></div>
264
-
358
+
265
359
  <div style="z-index: 11; position: absolute; left: -17px; top: 9px">
266
360
  <q-btn
267
361
  @click="store.state.rightDrawer.drawer = !store.state.rightDrawer.drawer"
@@ -282,7 +376,7 @@
282
376
  <q-splitter
283
377
  v-model="store.state.leftPanel.width"
284
378
  unit="px"
285
- :limits="store.state.mode === 'voyager' ? [200, 800] : [0, 0]"
379
+ :limits="store.state.mode === 'voyager' ? [0, 800] : [0, 0]"
286
380
  class="adjust-fit"
287
381
  >
288
382
  <template #before>
@@ -310,60 +404,92 @@
310
404
  >
311
405
  <template #header>
312
406
  <div class="" style="white-space: nowrap; width: 100%">
407
+ <q-icon
408
+ style="vertical-align: top"
409
+ class="q-mr-sm"
410
+ :name="store.state.leftPanel.tag == tag.name ? 'folder' : 'folder_open'"
411
+ ></q-icon>
412
+ <span
413
+ >{{ tag.name }}
414
+ <q-chip style="position: relative; top: -1px" class="q-ml-md" dense
415
+ >{{ tag.routes.length }}</q-chip
416
+ ></span
417
+ >
418
+ <a
419
+ v-if="store.state.leftPanel._tag == tag.name"
420
+ target="_blank"
421
+ class="q-ml-sm"
422
+ v-if="store.state.swagger.url"
423
+ :href="store.state.swagger.url + '#/' + tag.name"
424
+ >
313
425
  <q-icon
314
- style="vertical-align: top;"
315
- class="q-mr-sm"
316
- :name="store.state.leftPanel.tag == tag.name ? 'folder' : 'folder_open'"
426
+ color="primary"
427
+ size=""
428
+ name="link"
429
+ title="open in swagger"
317
430
  ></q-icon>
318
- <span>{{ tag.name }} <q-chip style="position:relative; top: -1px;" class="q-ml-md" dense>{{ tag.routes.length }}</q-chip></span>
319
- <a v-if="store.state.leftPanel._tag == tag.name" target="_blank" class="q-ml-sm" v-if="store.state.swagger.url" :href="store.state.swagger.url + '#/' + tag.name">
320
- <q-icon color="primary" size="" name="link" title="open in swagger"></q-icon>
321
- </a>
431
+ </a>
322
432
  </div>
323
433
  </template>
324
- <q-list separator style="overflow: auto; max-height: 60vh;">
325
- <q-item
326
- v-for="route in (store.state.filter.hidePrimitiveRoute ? tag.routes.filter(r => !r.is_primitive) :tag.routes || [])"
327
- :key="route.id"
328
- clickable
329
- v-ripple
330
- :active="store.state.leftPanel.routeId === route.id"
331
- active-class=""
332
- @click="selectRoute(route.id)"
333
- >
334
- <q-item-section>
335
- <span class="q-ml-lg" style="white-space: nowrap">
434
+ <q-list separator style="overflow: auto; max-height: 60vh">
435
+ <q-item
436
+ v-for="route in (store.state.filter.hidePrimitiveRoute ? tag.routes.filter(r => !r.is_primitive) :tag.routes || [])"
437
+ :key="route.id"
438
+ clickable
439
+ v-ripple
440
+ :active="store.state.leftPanel.routeId === route.id"
441
+ active-class=""
442
+ @click="selectRoute(route.id)"
443
+ >
444
+ <q-item-section>
445
+ <span class="q-ml-lg" style="white-space: nowrap">
446
+ <q-icon class="q-mr-sm" name="data_object"></q-icon>
447
+ {{ route.name }}
448
+ <a
449
+ v-if="store.state.leftPanel.routeId == route.id"
450
+ target="_blank"
451
+ class="q-ml-md"
452
+ v-if="store.state.swagger.url"
453
+ :href="store.state.swagger.url + '#/' + tag.name + '/' + route.unique_id"
454
+ >
336
455
  <q-icon
337
- class="q-mr-sm"
338
- name="data_object"
456
+ color="primary"
457
+ size=""
458
+ name="link"
459
+ title="open in swagger"
339
460
  ></q-icon>
340
- {{ route.name }}
341
- <a v-if="store.state.leftPanel.routeId == route.id" target="_blank" class="q-ml-md" v-if="store.state.swagger.url" :href="store.state.swagger.url + '#/' + tag.name + '/' + route.unique_id">
342
- <q-icon color="primary" size="" name="link" title="open in swagger"></q-icon>
343
- </a>
344
- </span>
345
- </q-item-section>
346
- </q-item>
347
- <q-item
348
- v-if="!tag.routes || tag.routes.length === 0"
349
- dense
350
- >
351
- <q-item-section class="text-grey-6"
352
- >No routes</q-item-section
353
- >
354
- </q-item>
355
- </q-list>
356
- </q-scroll-area>
461
+ </a>
462
+ </span>
463
+ </q-item-section>
464
+ </q-item>
465
+ <q-item v-if="!tag.routes || tag.routes.length === 0" dense>
466
+ <q-item-section class="text-grey-6">No routes</q-item-section>
467
+ </q-item>
468
+ </q-list>
357
469
  </q-expansion-item>
358
470
  </q-list>
471
+ </q-scroll-area>
359
472
  </div>
360
473
  </template>
361
474
 
362
475
  <template #after>
363
- <div style="position: relative; width: 100%; height: 100%;">
476
+ <div style="position: relative; width: 100%; height: 100%">
364
477
  <div id="graph" class="adjust-fit"></div>
365
- <div style="position: absolute; left: 8px; top: 8px; z-index: 10; background: rgba(255,255,255,0.85); border-radius: 4px; padding: 2px 8px;">
366
- <div class="q-mt-sm" v-if="store.state.modeControl.briefModeEnabled && store.state.search.mode === false && store.state.mode === 'voyager'">
478
+ <div
479
+ style="
480
+ position: absolute;
481
+ left: 8px;
482
+ top: 8px;
483
+ z-index: 10;
484
+ background: rgba(255, 255, 255, 0.85);
485
+ border-radius: 4px;
486
+ padding: 2px 8px;
487
+ "
488
+ >
489
+ <div
490
+ class="q-mt-sm"
491
+ v-if="store.state.modeControl.briefModeEnabled && store.state.search.mode === false && store.state.mode === 'voyager'"
492
+ >
367
493
  <q-toggle
368
494
  v-if="store.state.modeControl.briefModeEnabled"
369
495
  dense
@@ -373,7 +499,10 @@
373
499
  title="skip middle classes, config module_prefix to enable it"
374
500
  />
375
501
  </div>
376
- <div class="q-mt-sm" v-if="store.state.search.mode === false && store.state.mode === 'voyager'">
502
+ <div
503
+ class="q-mt-sm"
504
+ v-if="store.state.search.mode === false && store.state.mode === 'voyager'"
505
+ >
377
506
  <q-toggle
378
507
  v-model="store.state.filter.hidePrimitiveRoute"
379
508
  @update:model-value="(val) => toggleHidePrimitiveRoute(val)"
@@ -391,7 +520,10 @@
391
520
  title="show module cluster"
392
521
  />
393
522
  </div>
394
- <div class="q-mt-sm" v-if="store.state.mode == 'voyager' && store.state.config.enable_pydantic_resolve_meta">
523
+ <div
524
+ class="q-mt-sm"
525
+ v-if="store.state.mode == 'voyager' && store.state.config.enable_pydantic_resolve_meta"
526
+ >
395
527
  <q-toggle
396
528
  v-model="store.state.modeControl.pydanticResolveMetaEnabled"
397
529
  @update:model-value="(val) => togglePydanticResolveMeta(val)"
@@ -400,6 +532,20 @@
400
532
  title="show fields with pydantic resolve/post/expose/collector info"
401
533
  />
402
534
  </div>
535
+ </div>
536
+
537
+ <!-- Collapse toggle button for tag navigator - at bottom-left of right panel -->
538
+ <div
539
+ v-show="store.state.mode === 'voyager'"
540
+ class="tag-navigator-collapse-btn-right"
541
+ @click="toggleTagNavigatorCollapse"
542
+ :title="store.state.leftPanel.collapsed ? 'Expand tag navigator' : 'Collapse tag navigator'"
543
+ >
544
+ <q-icon
545
+ :name="store.state.leftPanel.collapsed ? 'chevron_right' : 'chevron_left'"
546
+ size="18px"
547
+ />
548
+ </div>
403
549
  </div>
404
550
  </template>
405
551
  </q-splitter>
@@ -407,11 +553,7 @@
407
553
  </q-layout>
408
554
 
409
555
  <!-- Schema Field Filter Dialog -->
410
- <q-dialog
411
- v-model="store.state.searchDialog.show"
412
- :persistent="true"
413
- :maximized="true"
414
- >
556
+ <q-dialog v-model="store.state.searchDialog.show" :persistent="true" :maximized="true">
415
557
  <schema-field-filter
416
558
  :schemas="store.state.graph.schemaMap"
417
559
  :schema-name="store.state.searchDialog.schema"
@@ -427,11 +569,15 @@
427
569
  />
428
570
  </q-card>
429
571
  </q-dialog>
430
-
431
572
  </div>
432
573
  <script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
433
574
  <script src="fastapi-voyager-static/quasar.min.js"></script>
434
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js" integrity="sha512-egJ/Y+22P9NQ9aIyVCh0VCOsfydyn8eNmqBy+y2CnJG+fpRIxXMS6jbWP8tVKp0jp+NO5n8WtMUAnNnGoJKi4w==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
575
+ <script
576
+ src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"
577
+ integrity="sha512-egJ/Y+22P9NQ9aIyVCh0VCOsfydyn8eNmqBy+y2CnJG+fpRIxXMS6jbWP8tVKp0jp+NO5n8WtMUAnNnGoJKi4w=="
578
+ crossorigin="anonymous"
579
+ referrerpolicy="no-referrer"
580
+ ></script>
435
581
  <script
436
582
  src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.9.0/d3.min.js"
437
583
  integrity="sha512-vc58qvvBdrDR4etbxMdlTt4GBQk1qjvyORR2nrsPsFPyrs+/u5c3+1Ct6upOgdZoIl7eq6k3a1UPDSNAQi/32A=="
@@ -439,7 +585,12 @@
439
585
  referrerpolicy="no-referrer"
440
586
  ></script>
441
587
  <script src="https://unpkg.com/@hpcc-js/wasm@2.20.0/dist/graphviz.umd.js"></script>
442
- <script src="https://cdnjs.cloudflare.com/ajax/libs/d3-graphviz/5.6.0/d3-graphviz.min.js" integrity="sha512-Le8HpIpS2Tc7SDHLM6AOgAKq6ZR4uDwLhjPSR20DtXE5dFb9xECHRwgpc1nxxnU0Dv+j6FNMoSddky5gyvI3lQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
588
+ <script
589
+ src="https://cdnjs.cloudflare.com/ajax/libs/d3-graphviz/5.6.0/d3-graphviz.min.js"
590
+ integrity="sha512-Le8HpIpS2Tc7SDHLM6AOgAKq6ZR4uDwLhjPSR20DtXE5dFb9xECHRwgpc1nxxnU0Dv+j6FNMoSddky5gyvI3lQ=="
591
+ crossorigin="anonymous"
592
+ referrerpolicy="no-referrer"
593
+ ></script>
443
594
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js"></script>
444
595
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-color/2.1.2/jquery.color.min.js"></script>
445
596
  <script src="fastapi-voyager-static/graphviz.svg.js"></script>
@@ -449,18 +600,20 @@
449
600
  href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css"
450
601
  />
451
602
  <script type="module">
452
- window.addEventListener('DOMContentLoaded', async () => {
603
+ window.addEventListener("DOMContentLoaded", async () => {
453
604
  if (!window.hljs) {
454
605
  try {
455
- const { default: hljs } = await import('https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/es/highlight.min.js');
456
- const { default: python } = await import('https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/es/languages/python.min.js');
457
- hljs.registerLanguage("python", python);
458
- window.hljs = hljs;
606
+ const { default: hljs } =
607
+ await import("https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/es/highlight.min.js")
608
+ const { default: python } =
609
+ await import("https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/es/languages/python.min.js")
610
+ hljs.registerLanguage("python", python)
611
+ window.hljs = hljs
459
612
  } catch (e) {
460
- console.warn("Failed to preload highlight.js", e);
613
+ console.warn("Failed to preload highlight.js", e)
461
614
  }
462
615
  }
463
- });
616
+ })
464
617
  </script>
465
618
  <script type="module" src="fastapi-voyager-static/vue-main.js"></script>
466
619