@@ -3,11 +3,26 @@ import { styles } from '@divriots/dockit-core/layout';
33import '@api-viewer/docs' ;
44import { html } from 'lit' ;
55import { unsafeHTML } from 'lit/directives/unsafe-html.js' ;
6+ import { until } from 'lit/directives/until.js' ;
67import logoSvg from './logo.svg?raw' ;
78import { search } from '@divriots/dockit-core/search' ;
8- import '~/search/dockit-search.define.js' ;
9+ import '@divriots/dockit-core/search/dockit-search.define.js' ;
10+ import '@divriots/dockit-core/version-selector/dockit-version-selector.define.js' ;
911
1012export const docLayoutTemplate = ( content , context ) => {
13+ // TODO: remove when Backlight is released with new functionality
14+ const isMultiverseSupported = context . isLive !== undefined ;
15+
16+ let versionsPromise ;
17+ if ( isMultiverseSupported ) {
18+ if ( context . isLive ) {
19+ versionsPromise = Promise . resolve ( [ context . version ] ) ;
20+ } else {
21+ versionsPromise = import ( new URL ( '/docs-shared.mjs' , location . href ) ) . then (
22+ ( m ) => m . versions
23+ ) ;
24+ }
25+ }
1126 return html `
1227 < style >
1328 ${ unsafeHTML ( styles ) } .logo {
@@ -35,6 +50,35 @@ export const docLayoutTemplate = (content, context) => {
3550 </ div >
3651 < dockit-search slot ="topbar " .search =${ ( query ) => search ( query , context ) } >
3752 </ dockit-search >
53+ ${ isMultiverseSupported
54+ ? until (
55+ versionsPromise . then ( ( versions ) => {
56+ const isLatestVersion =
57+ context . version === versions [ versions . length - 1 ] ;
58+ return html `
59+ < dockit-version-selector
60+ slot ="topbar "
61+ .versions =${ versions }
62+ selected =${ context . version }
63+ @select=${ ( event ) => {
64+ if ( ! context . isLive ) {
65+ const baseUrl = new URL (
66+ isLatestVersion ? './' : '../' ,
67+ new URL ( context . base , location . href )
68+ ) ;
69+ location . href = new URL (
70+ event . detail . isLatest
71+ ? './'
72+ : `./${ event . detail . version } /` ,
73+ baseUrl
74+ ) . href ;
75+ }
76+ } }
77+ > </ dockit-version-selector >
78+ ` ;
79+ } )
80+ )
81+ : null }
3882 < div class ="prose dark:prose-invert "> ${ unsafeHTML ( content ) } </ div >
3983 </ dockit-layout >
4084 ` ;
0 commit comments