1- import { DOMWidgetModel , DOMWidgetView } from ' @jupyter-widgets/base'
1+ import { DOMWidgetModel , DOMWidgetView } from " @jupyter-widgets/base"
22
3- //import {Document, DocumentChangedEvent, ModelChangedEvent} from "document"
4- //import {Receiver, Fragment} from "protocol/receiver"
5- //import {keys, values} from "core/util/object"
3+ // Use only `import type`, so that all imports are erased at run time
4+ import type { Document , DocJson , Patch , DocumentChangedEvent } from "@bokeh/bokehjs/document"
5+ import type { DocumentChanged } from "@bokeh/bokehjs/document/events"
6+ import type { Receiver , Fragment } from "@bokeh/bokehjs/protocol/receiver"
7+ import type { RenderItem } from "@bokeh/bokehjs/embed/json"
8+ import type { Serializer } from "@bokeh/bokehjs/core/serialization"
9+ import type { add_document_standalone } from "@bokeh/bokehjs/embed/standalone"
610
7- import { name , version } from './metadata'
11+ import { name , version } from './metadata'
812
9- function bk_require ( name : string ) : any {
10- return ( window as any ) . Bokeh . require ( name )
13+ declare const Bokeh : { require ( name : string ) : unknown }
14+
15+ function bk_require < T > ( name : string ) : T {
16+ return Bokeh . require ( name ) as T
1117}
1218
13- type DocsJson = any
14- type RenderItem = any
15- type Document = any
16- type DocumentChangedEvent = any
17- type Receiver = any
18- type Fragment = any
19+ declare const Jupyter : { notebook ?: unknown }
20+
21+ declare function require ( name : string ) : unknown
1922
20- const { keys, values } = Object
23+ const { keys, values} = Object
2124
2225const version_range = `^${ version } `
2326
2427export type RenderBundle = {
25- docs_json : DocsJson
28+ docs_json : DocJson [ ]
2629 render_items : RenderItem [ ]
2730 div : string
2831}
2932
30- export interface DocumentChanged {
31- event : 'jsevent'
32- kind : string
33- }
34-
35- export interface ModelChanged extends DocumentChanged {
36- event : 'jsevent'
37- kind : 'ModelChanged'
38- id : string
39- new : unknown
40- attr : string
41- }
42-
43- export interface MessageSent extends DocumentChanged {
44- event : 'jsevent'
45- kind : 'MessageSent'
46- msg_data : {
47- event_name : string
48- event_values : {
49- model : { id : string }
50- [ other : string ] : any
51- }
52- }
53- msg_type : string
33+ /*
34+ declare interface DocumentChanged {
35+ event: "jsevent"
5436}
37+ */
5538
5639export class BokehModel extends DOMWidgetModel {
57- defaults ( ) : any {
40+ defaults ( ) : { [ key : string ] : unknown } {
5841 return {
5942 ...super . defaults ( ) ,
6043
@@ -67,7 +50,7 @@ export class BokehModel extends DOMWidgetModel {
6750 _view_module_version : version_range ,
6851
6952 combine_events : false ,
70- render_bundle : { }
53+ render_bundle : { } ,
7154 }
7255 }
7356
@@ -80,7 +63,7 @@ export class BokehView extends DOMWidgetView {
8063 private _document : Document | null
8164 private _receiver : Receiver
8265 private _blocked : boolean
83- private _msgs : any [ ]
66+ private _msgs : DocumentChanged [ ]
8467 private _idle : boolean
8568 private _combine : boolean
8669
@@ -91,15 +74,12 @@ export class BokehView extends DOMWidgetView {
9174 this . _idle = true
9275 this . _combine = true
9376 this . _msgs = [ ]
94- const { Receiver } = bk_require ( 'protocol/receiver' )
77+ const { Receiver} = bk_require ( 'protocol/receiver' )
9578 this . _receiver = new Receiver ( )
9679 this . model . on ( 'change:render_bundle' , ( ) => this . render ( ) )
97- if (
98- ( window as any ) . Jupyter != null &&
99- ( window as any ) . Jupyter . notebook != null
100- ) {
80+ if ( Jupyter ?. notebook != null ) {
10181 // Handle classic Jupyter notebook
102- const events = ( window as any ) . require ( 'base/js/events' )
82+ const events = require ( 'base/js/events' )
10383 events . on ( 'kernel_idle.Kernel' , ( ) => this . _process_msg ( ) )
10484 } else if ( ( this . model . widget_manager as any ) . context != null ) {
10585 // Handle JupyterLab and Voila
@@ -115,15 +95,11 @@ export class BokehView extends DOMWidgetView {
11595 }
11696 } )
11797 } else if ( this . model . get ( 'combine_events' ) ) {
118- console . warn (
119- 'BokehView cannot combine events because Kernel idle status cannot be determined.'
120- )
98+ console . warn ( 'BokehView cannot combine events because Kernel idle status cannot be determined.' )
12199 this . _combine = false
122100 }
123101 } else if ( this . model . get ( 'combine_events' ) ) {
124- console . warn (
125- 'BokehView cannot combine events because Kernel idle status cannot be determined.'
126- )
102+ console . warn ( 'BokehView cannot combine events because Kernel idle status cannot be determined.' )
127103 this . _combine = false
128104 }
129105 this . listenTo ( this . model , 'msg:custom' , ( content , buffers ) =>
@@ -145,23 +121,21 @@ export class BokehView extends DOMWidgetView {
145121 this . el . innerHTML = div
146122 const element = this . el . children [ 0 ]
147123 const json = values ( docs_json ) [ 0 ]
148- const { Document } = bk_require ( 'document' )
149- const { add_document_standalone } = bk_require ( 'embed/standalone' )
150- this . _document = Document . from_json ( json )
124+ const document = bk_require < { Document : typeof Document } > ( 'document' )
125+ const standalone = bk_require < { add_document_standalone : typeof add_document_standalone } > ( 'embed/standalone' )
126+ this . _document = document . Document . from_json ( json )
151127 for ( const item of render_items ) {
152- const roots : { [ key : string ] : Element } = { }
128+ const roots : { [ key : string ] : Element } = { }
153129 for ( const root_id in item . roots ) {
154130 roots [ root_id ] = element
155131 }
156- add_document_standalone ( this . _document , element , roots )
132+ standalone . add_document_standalone ( this . _document , element , roots )
157133 }
158- this . _document . on_change ( ( event : any ) => this . _change_event ( event ) )
134+ this . _document . on_change ( ( event ) => this . _change_event ( event ) )
159135 }
160136
161- _combine_events (
162- new_msg : ModelChanged | MessageSent
163- ) : ( ModelChanged | MessageSent ) [ ] {
164- const new_msgs = [ ]
137+ _combine_events ( new_msg : DocumentChanged ) : DocumentChanged [ ] {
138+ const new_msgs : DocumentChanged [ ] = [ ]
165139 for ( const msg of this . _msgs ) {
166140 if ( new_msg . kind != msg . kind ) {
167141 new_msgs . push ( msg )
@@ -184,7 +158,7 @@ export class BokehView extends DOMWidgetView {
184158 return new_msgs
185159 }
186160
187- _send ( msg : ModelChanged | MessageSent ) : void {
161+ _send ( msg : DocumentChanged ) : void {
188162 if ( ! this . _idle && this . _combine && this . model . get ( 'combine_events' ) ) {
189163 // Queue event and drop previous events on same model attribute
190164 this . _msgs = this . _combine_events ( msg )
@@ -198,17 +172,14 @@ export class BokehView extends DOMWidgetView {
198172 if ( this . _blocked ) {
199173 return
200174 }
201- const { Serializer } = bk_require ( ' core/serialization' )
202- const serializer = new Serializer ( )
203- const event_rep = serializer . encode ( event )
204- event_rep . event = ' jsevent'
175+ const serialization = bk_require < { Serializer : typeof Serializer } > ( " core/serialization" )
176+ const serializer = new serialization . Serializer ( )
177+ const event_rep = serializer . encode ( event ) as DocumentChanged & { event : "jsevent" }
178+ event_rep . event = " jsevent"
205179 this . _send ( event_rep )
206180 }
207181
208- protected _consume_patch (
209- content : { msg : 'patch' ; payload ?: Fragment } ,
210- buffers : DataView [ ]
211- ) : void {
182+ protected _consume_patch ( content : { msg : 'patch' ; payload ?: Fragment } , buffers : DataView [ ] ) : void {
212183 if ( this . _document == null ) {
213184 return
214185 }
@@ -219,7 +190,7 @@ export class BokehView extends DOMWidgetView {
219190 if ( comm_msg != null && keys ( comm_msg . content ) . length > 0 ) {
220191 this . _blocked = true
221192 try {
222- this . _document . apply_json_patch ( comm_msg . content , comm_msg . buffers )
193+ this . _document . apply_json_patch ( comm_msg . content as Patch , comm_msg . buffers )
223194 } finally {
224195 this . _blocked = false
225196 }
0 commit comments