@theia/notebook 1.41.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.
Files changed (188) hide show
  1. package/README.md +30 -0
  2. package/lib/browser/contributions/notebook-actions-contribution.d.ts +27 -0
  3. package/lib/browser/contributions/notebook-actions-contribution.d.ts.map +1 -0
  4. package/lib/browser/contributions/notebook-actions-contribution.js +172 -0
  5. package/lib/browser/contributions/notebook-actions-contribution.js.map +1 -0
  6. package/lib/browser/contributions/notebook-cell-actions-contribution.d.ts +30 -0
  7. package/lib/browser/contributions/notebook-cell-actions-contribution.d.ts.map +1 -0
  8. package/lib/browser/contributions/notebook-cell-actions-contribution.js +200 -0
  9. package/lib/browser/contributions/notebook-cell-actions-contribution.js.map +1 -0
  10. package/lib/browser/contributions/notebook-color-contribution.d.ts +6 -0
  11. package/lib/browser/contributions/notebook-color-contribution.d.ts.map +1 -0
  12. package/lib/browser/contributions/notebook-color-contribution.js +252 -0
  13. package/lib/browser/contributions/notebook-color-contribution.js.map +1 -0
  14. package/lib/browser/contributions/notebook-context-keys.d.ts +38 -0
  15. package/lib/browser/contributions/notebook-context-keys.d.ts.map +1 -0
  16. package/lib/browser/contributions/notebook-context-keys.js +95 -0
  17. package/lib/browser/contributions/notebook-context-keys.js.map +1 -0
  18. package/lib/browser/index.d.ts +11 -0
  19. package/lib/browser/index.d.ts.map +1 -0
  20. package/lib/browser/index.js +38 -0
  21. package/lib/browser/index.js.map +1 -0
  22. package/lib/browser/notebook-cell-resource-resolver.d.ts +20 -0
  23. package/lib/browser/notebook-cell-resource-resolver.d.ts.map +1 -0
  24. package/lib/browser/notebook-cell-resource-resolver.js +75 -0
  25. package/lib/browser/notebook-cell-resource-resolver.js.map +1 -0
  26. package/lib/browser/notebook-editor-widget-factory.d.ts +17 -0
  27. package/lib/browser/notebook-editor-widget-factory.d.ts.map +1 -0
  28. package/lib/browser/notebook-editor-widget-factory.js +78 -0
  29. package/lib/browser/notebook-editor-widget-factory.js.map +1 -0
  30. package/lib/browser/notebook-editor-widget.d.ts +49 -0
  31. package/lib/browser/notebook-editor-widget.d.ts.map +1 -0
  32. package/lib/browser/notebook-editor-widget.js +150 -0
  33. package/lib/browser/notebook-editor-widget.js.map +1 -0
  34. package/lib/browser/notebook-frontend-module.d.ts +5 -0
  35. package/lib/browser/notebook-frontend-module.d.ts.map +1 -0
  36. package/lib/browser/notebook-frontend-module.js +81 -0
  37. package/lib/browser/notebook-frontend-module.js.map +1 -0
  38. package/lib/browser/notebook-open-handler.d.ts +18 -0
  39. package/lib/browser/notebook-open-handler.d.ts.map +1 -0
  40. package/lib/browser/notebook-open-handler.js +94 -0
  41. package/lib/browser/notebook-open-handler.js.map +1 -0
  42. package/lib/browser/notebook-renderer-registry.d.ts +17 -0
  43. package/lib/browser/notebook-renderer-registry.d.ts.map +1 -0
  44. package/lib/browser/notebook-renderer-registry.js +63 -0
  45. package/lib/browser/notebook-renderer-registry.js.map +1 -0
  46. package/lib/browser/notebook-type-registry.d.ts +7 -0
  47. package/lib/browser/notebook-type-registry.d.ts.map +1 -0
  48. package/lib/browser/notebook-type-registry.js +42 -0
  49. package/lib/browser/notebook-type-registry.js.map +1 -0
  50. package/lib/browser/renderers/cell-output-webview.d.ts +12 -0
  51. package/lib/browser/renderers/cell-output-webview.d.ts.map +1 -0
  52. package/lib/browser/renderers/cell-output-webview.js +20 -0
  53. package/lib/browser/renderers/cell-output-webview.js.map +1 -0
  54. package/lib/browser/service/notebook-cell-context-manager.d.ts +16 -0
  55. package/lib/browser/service/notebook-cell-context-manager.d.ts.map +1 -0
  56. package/lib/browser/service/notebook-cell-context-manager.js +83 -0
  57. package/lib/browser/service/notebook-cell-context-manager.js.map +1 -0
  58. package/lib/browser/service/notebook-editor-service.d.ts +22 -0
  59. package/lib/browser/service/notebook-editor-service.d.ts.map +1 -0
  60. package/lib/browser/service/notebook-editor-service.js +95 -0
  61. package/lib/browser/service/notebook-editor-service.js.map +1 -0
  62. package/lib/browser/service/notebook-execution-service.d.ts +25 -0
  63. package/lib/browser/service/notebook-execution-service.d.ts.map +1 -0
  64. package/lib/browser/service/notebook-execution-service.js +140 -0
  65. package/lib/browser/service/notebook-execution-service.js.map +1 -0
  66. package/lib/browser/service/notebook-execution-state-service.d.ts +94 -0
  67. package/lib/browser/service/notebook-execution-state-service.d.ts.map +1 -0
  68. package/lib/browser/service/notebook-execution-state-service.js +250 -0
  69. package/lib/browser/service/notebook-execution-state-service.js.map +1 -0
  70. package/lib/browser/service/notebook-kernel-history-service.d.ts +23 -0
  71. package/lib/browser/service/notebook-kernel-history-service.d.ts.map +1 -0
  72. package/lib/browser/service/notebook-kernel-history-service.js +109 -0
  73. package/lib/browser/service/notebook-kernel-history-service.js.map +1 -0
  74. package/lib/browser/service/notebook-kernel-quick-pick-service.d.ts +65 -0
  75. package/lib/browser/service/notebook-kernel-quick-pick-service.d.ts.map +1 -0
  76. package/lib/browser/service/notebook-kernel-quick-pick-service.js +430 -0
  77. package/lib/browser/service/notebook-kernel-quick-pick-service.js.map +1 -0
  78. package/lib/browser/service/notebook-kernel-service.d.ts +112 -0
  79. package/lib/browser/service/notebook-kernel-service.d.ts.map +1 -0
  80. package/lib/browser/service/notebook-kernel-service.js +274 -0
  81. package/lib/browser/service/notebook-kernel-service.js.map +1 -0
  82. package/lib/browser/service/notebook-model-resolver-service.d.ts +26 -0
  83. package/lib/browser/service/notebook-model-resolver-service.d.ts.map +1 -0
  84. package/lib/browser/service/notebook-model-resolver-service.js +139 -0
  85. package/lib/browser/service/notebook-model-resolver-service.js.map +1 -0
  86. package/lib/browser/service/notebook-renderer-messaging-service.d.ts +30 -0
  87. package/lib/browser/service/notebook-renderer-messaging-service.d.ts.map +1 -0
  88. package/lib/browser/service/notebook-renderer-messaging-service.js +94 -0
  89. package/lib/browser/service/notebook-renderer-messaging-service.js.map +1 -0
  90. package/lib/browser/service/notebook-service.d.ts +64 -0
  91. package/lib/browser/service/notebook-service.d.ts.map +1 -0
  92. package/lib/browser/service/notebook-service.js +162 -0
  93. package/lib/browser/service/notebook-service.js.map +1 -0
  94. package/lib/browser/view/notebook-cell-editor.d.ts +26 -0
  95. package/lib/browser/view/notebook-cell-editor.d.ts.map +1 -0
  96. package/lib/browser/view/notebook-cell-editor.js +79 -0
  97. package/lib/browser/view/notebook-cell-editor.js.map +1 -0
  98. package/lib/browser/view/notebook-cell-list-view.d.ts +43 -0
  99. package/lib/browser/view/notebook-cell-list-view.d.ts.map +1 -0
  100. package/lib/browser/view/notebook-cell-list-view.js +111 -0
  101. package/lib/browser/view/notebook-cell-list-view.js.map +1 -0
  102. package/lib/browser/view/notebook-cell-toolbar-factory.d.ts +25 -0
  103. package/lib/browser/view/notebook-cell-toolbar-factory.d.ts.map +1 -0
  104. package/lib/browser/view/notebook-cell-toolbar-factory.js +93 -0
  105. package/lib/browser/view/notebook-cell-toolbar-factory.js.map +1 -0
  106. package/lib/browser/view/notebook-cell-toolbar.d.ts +25 -0
  107. package/lib/browser/view/notebook-cell-toolbar.d.ts.map +1 -0
  108. package/lib/browser/view/notebook-cell-toolbar.js +50 -0
  109. package/lib/browser/view/notebook-cell-toolbar.js.map +1 -0
  110. package/lib/browser/view/notebook-code-cell-view.d.ts +47 -0
  111. package/lib/browser/view/notebook-code-cell-view.d.ts.map +1 -0
  112. package/lib/browser/view/notebook-code-cell-view.js +166 -0
  113. package/lib/browser/view/notebook-code-cell-view.js.map +1 -0
  114. package/lib/browser/view/notebook-main-toolbar.d.ts +31 -0
  115. package/lib/browser/view/notebook-main-toolbar.d.ts.map +1 -0
  116. package/lib/browser/view/notebook-main-toolbar.js +118 -0
  117. package/lib/browser/view/notebook-main-toolbar.js.map +1 -0
  118. package/lib/browser/view/notebook-markdown-cell-view.d.ts +12 -0
  119. package/lib/browser/view/notebook-markdown-cell-view.d.ts.map +1 -0
  120. package/lib/browser/view/notebook-markdown-cell-view.js +70 -0
  121. package/lib/browser/view/notebook-markdown-cell-view.js.map +1 -0
  122. package/lib/browser/view-model/notebook-cell-model.d.ts +74 -0
  123. package/lib/browser/view-model/notebook-cell-model.d.ts.map +1 -0
  124. package/lib/browser/view-model/notebook-cell-model.js +226 -0
  125. package/lib/browser/view-model/notebook-cell-model.js.map +1 -0
  126. package/lib/browser/view-model/notebook-cell-output-model.d.ts +19 -0
  127. package/lib/browser/view-model/notebook-cell-output-model.d.ts.map +1 -0
  128. package/lib/browser/view-model/notebook-cell-output-model.js +61 -0
  129. package/lib/browser/view-model/notebook-cell-output-model.js.map +1 -0
  130. package/lib/browser/view-model/notebook-model.d.ts +59 -0
  131. package/lib/browser/view-model/notebook-model.d.ts.map +1 -0
  132. package/lib/browser/view-model/notebook-model.js +315 -0
  133. package/lib/browser/view-model/notebook-model.js.map +1 -0
  134. package/lib/common/index.d.ts +3 -0
  135. package/lib/common/index.d.ts.map +1 -0
  136. package/lib/common/index.js +30 -0
  137. package/lib/common/index.js.map +1 -0
  138. package/lib/common/notebook-common.d.ts +344 -0
  139. package/lib/common/notebook-common.d.ts.map +1 -0
  140. package/lib/common/notebook-common.js +112 -0
  141. package/lib/common/notebook-common.js.map +1 -0
  142. package/lib/common/notebook-protocol.d.ts +21 -0
  143. package/lib/common/notebook-protocol.d.ts.map +1 -0
  144. package/lib/common/notebook-protocol.js +18 -0
  145. package/lib/common/notebook-protocol.js.map +1 -0
  146. package/lib/common/notebook-range.d.ts +14 -0
  147. package/lib/common/notebook-range.d.ts.map +1 -0
  148. package/lib/common/notebook-range.js +18 -0
  149. package/lib/common/notebook-range.js.map +1 -0
  150. package/package.json +52 -0
  151. package/src/browser/contributions/notebook-actions-contribution.ts +171 -0
  152. package/src/browser/contributions/notebook-cell-actions-contribution.ts +204 -0
  153. package/src/browser/contributions/notebook-color-contribution.ts +268 -0
  154. package/src/browser/contributions/notebook-context-keys.ts +99 -0
  155. package/src/browser/index.ts +26 -0
  156. package/src/browser/notebook-cell-resource-resolver.ts +79 -0
  157. package/src/browser/notebook-editor-widget-factory.ts +70 -0
  158. package/src/browser/notebook-editor-widget.tsx +157 -0
  159. package/src/browser/notebook-frontend-module.ts +95 -0
  160. package/src/browser/notebook-open-handler.ts +87 -0
  161. package/src/browser/notebook-renderer-registry.ts +62 -0
  162. package/src/browser/notebook-type-registry.ts +30 -0
  163. package/src/browser/renderers/cell-output-webview.ts +32 -0
  164. package/src/browser/service/notebook-cell-context-manager.ts +70 -0
  165. package/src/browser/service/notebook-editor-service.ts +86 -0
  166. package/src/browser/service/notebook-execution-service.ts +139 -0
  167. package/src/browser/service/notebook-execution-state-service.ts +322 -0
  168. package/src/browser/service/notebook-kernel-history-service.ts +109 -0
  169. package/src/browser/service/notebook-kernel-quick-pick-service.ts +494 -0
  170. package/src/browser/service/notebook-kernel-service.ts +357 -0
  171. package/src/browser/service/notebook-model-resolver-service.ts +141 -0
  172. package/src/browser/service/notebook-renderer-messaging-service.ts +111 -0
  173. package/src/browser/service/notebook-service.ts +178 -0
  174. package/src/browser/style/index.css +236 -0
  175. package/src/browser/view/notebook-cell-editor.tsx +97 -0
  176. package/src/browser/view/notebook-cell-list-view.tsx +171 -0
  177. package/src/browser/view/notebook-cell-toolbar-factory.tsx +91 -0
  178. package/src/browser/view/notebook-cell-toolbar.tsx +70 -0
  179. package/src/browser/view/notebook-code-cell-view.tsx +190 -0
  180. package/src/browser/view/notebook-main-toolbar.tsx +115 -0
  181. package/src/browser/view/notebook-markdown-cell-view.tsx +73 -0
  182. package/src/browser/view-model/notebook-cell-model.ts +271 -0
  183. package/src/browser/view-model/notebook-cell-output-model.ts +69 -0
  184. package/src/browser/view-model/notebook-model.ts +372 -0
  185. package/src/common/index.ts +18 -0
  186. package/src/common/notebook-common.ts +462 -0
  187. package/src/common/notebook-protocol.ts +35 -0
  188. package/src/common/notebook-range.ts +30 -0
@@ -0,0 +1,271 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2023 TypeFox and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+ /*---------------------------------------------------------------------------------------------
17
+ * Copyright (c) Microsoft Corporation. All rights reserved.
18
+ * Licensed under the MIT License. See License.txt in the project root for license information.
19
+ *--------------------------------------------------------------------------------------------*/
20
+
21
+ import { Disposable, DisposableCollection, Emitter, Event, URI } from '@theia/core';
22
+ import { inject, injectable, interfaces, postConstruct } from '@theia/core/shared/inversify';
23
+ import { MonacoEditorModel } from '@theia/monaco/lib/browser/monaco-editor-model';
24
+ import { MonacoTextModelService } from '@theia/monaco/lib/browser/monaco-text-model-service';
25
+ import {
26
+ CellInternalMetadataChangedEvent, CellKind, NotebookCellCollapseState, NotebookCellInternalMetadata,
27
+ NotebookCellMetadata, NotebookCellOutputsSplice, CellOutput, CellData, NotebookCell
28
+ } from '../../common';
29
+ import { NotebookCellOutputModel } from './notebook-cell-output-model';
30
+
31
+ export const NotebookCellModelFactory = Symbol('NotebookModelFactory');
32
+
33
+ export function createNotebookCellModelContainer(parent: interfaces.Container, props: NotebookCellModelProps,
34
+ notebookCellContextManager: new (...args: never[]) => unknown): interfaces.Container {
35
+ const child = parent.createChild();
36
+
37
+ child.bind(NotebookCellModelProps).toConstantValue(props);
38
+ // We need the constructor as property here to avoid circular dependencies for the context manager
39
+ child.bind(NotebookCellContextManager).to(notebookCellContextManager).inSingletonScope();
40
+ child.bind(NotebookCellModel).toSelf();
41
+
42
+ return child;
43
+ }
44
+
45
+ const NotebookCellContextManager = Symbol('NotebookCellContextManager');
46
+ interface NotebookCellContextManager {
47
+ updateCellContext(cell: NotebookCellModel, context: HTMLElement): void;
48
+ dispose(): void;
49
+ onDidChangeContext: Event<void>;
50
+ }
51
+
52
+ const NotebookCellModelProps = Symbol('NotebookModelProps');
53
+ export interface NotebookCellModelProps {
54
+ readonly uri: URI,
55
+ readonly handle: number,
56
+ source: string,
57
+ language: string,
58
+ readonly cellKind: CellKind,
59
+ outputs: CellOutput[],
60
+ metadata?: NotebookCellMetadata | undefined,
61
+ internalMetadata?: NotebookCellInternalMetadata | undefined,
62
+ readonly collapseState?: NotebookCellCollapseState | undefined,
63
+
64
+ }
65
+
66
+ @injectable()
67
+ export class NotebookCellModel implements NotebookCell, Disposable {
68
+
69
+ protected readonly onDidChangeOutputsEmitter = new Emitter<NotebookCellOutputsSplice>();
70
+ readonly onDidChangeOutputs: Event<NotebookCellOutputsSplice> = this.onDidChangeOutputsEmitter.event;
71
+
72
+ protected readonly onDidChangeOutputItemsEmitter = new Emitter<void>();
73
+ readonly onDidChangeOutputItems: Event<void> = this.onDidChangeOutputItemsEmitter.event;
74
+
75
+ protected readonly onDidChangeContentEmitter = new Emitter<'content' | 'language' | 'mime'>();
76
+ readonly onDidChangeContent: Event<'content' | 'language' | 'mime'> = this.onDidChangeContentEmitter.event;
77
+
78
+ protected readonly onDidChangeMetadataEmitter = new Emitter<void>();
79
+ readonly onDidChangeMetadata: Event<void> = this.onDidChangeMetadataEmitter.event;
80
+
81
+ protected readonly onDidChangeInternalMetadataEmitter = new Emitter<CellInternalMetadataChangedEvent>();
82
+ readonly onDidChangeInternalMetadata: Event<CellInternalMetadataChangedEvent> = this.onDidChangeInternalMetadataEmitter.event;
83
+
84
+ protected readonly onDidChangeLanguageEmitter = new Emitter<string>();
85
+ readonly onDidChangeLanguage: Event<string> = this.onDidChangeLanguageEmitter.event;
86
+
87
+ protected readonly onDidRequestCellEditChangeEmitter = new Emitter<boolean>();
88
+ readonly onDidRequestCellEditChange = this.onDidRequestCellEditChangeEmitter.event;
89
+
90
+ @inject(NotebookCellContextManager)
91
+ readonly notebookCellContextManager: NotebookCellContextManager;
92
+
93
+ @inject(NotebookCellModelProps)
94
+ protected readonly props: NotebookCellModelProps;
95
+ @inject(MonacoTextModelService)
96
+ protected readonly textModelService: MonacoTextModelService;
97
+
98
+ get outputs(): NotebookCellOutputModel[] {
99
+ return this._outputs;
100
+ }
101
+
102
+ protected _outputs: NotebookCellOutputModel[];
103
+
104
+ get metadata(): NotebookCellMetadata {
105
+ return this._metadata;
106
+ }
107
+
108
+ protected _metadata: NotebookCellMetadata;
109
+
110
+ protected toDispose = new DisposableCollection();
111
+
112
+ protected _internalMetadata: NotebookCellInternalMetadata;
113
+
114
+ get internalMetadata(): NotebookCellInternalMetadata {
115
+ return this._internalMetadata;
116
+ }
117
+
118
+ set internalMetadata(newInternalMetadata: NotebookCellInternalMetadata) {
119
+ const lastRunSuccessChanged = this._internalMetadata.lastRunSuccess !== newInternalMetadata.lastRunSuccess;
120
+ newInternalMetadata = {
121
+ ...newInternalMetadata,
122
+ ...{ runStartTimeAdjustment: computeRunStartTimeAdjustment(this._internalMetadata, newInternalMetadata) }
123
+ };
124
+ this._internalMetadata = newInternalMetadata;
125
+ this.onDidChangeInternalMetadataEmitter.fire({ lastRunSuccessChanged });
126
+
127
+ }
128
+
129
+ textModel: MonacoEditorModel;
130
+
131
+ protected htmlContext: HTMLLIElement;
132
+
133
+ get context(): HTMLLIElement {
134
+ return this.htmlContext;
135
+ }
136
+
137
+ get textBuffer(): string {
138
+ return this.textModel ? this.textModel.getText() : this.source;
139
+ }
140
+
141
+ get source(): string {
142
+ return this.props.source;
143
+ }
144
+ set source(source: string) {
145
+ this.props.source = source;
146
+ }
147
+ get language(): string {
148
+ return this.props.language;
149
+ }
150
+
151
+ set language(newLanguage: string) {
152
+ if (this.language === newLanguage) {
153
+ return;
154
+ }
155
+
156
+ this.props.language = newLanguage;
157
+ if (this.textModel) {
158
+ this.textModel.setLanguageId(newLanguage);
159
+ }
160
+
161
+ this.language = newLanguage;
162
+ this.onDidChangeLanguageEmitter.fire(newLanguage);
163
+ this.onDidChangeContentEmitter.fire('language');
164
+ }
165
+
166
+ get uri(): URI {
167
+ return this.props.uri;
168
+ }
169
+ get handle(): number {
170
+ return this.props.handle;
171
+ }
172
+ get cellKind(): CellKind {
173
+ return this.props.cellKind;
174
+ }
175
+
176
+ @postConstruct()
177
+ protected init(): void {
178
+ this._outputs = this.props.outputs.map(op => new NotebookCellOutputModel(op));
179
+ this._metadata = this.props.metadata ?? {};
180
+ this._internalMetadata = this.props.internalMetadata ?? {};
181
+ }
182
+
183
+ refChanged(node: HTMLLIElement): void {
184
+ if (node) {
185
+ this.htmlContext = node;
186
+ this.notebookCellContextManager.updateCellContext(this, node);
187
+ }
188
+ }
189
+
190
+ dispose(): void {
191
+ this.onDidChangeOutputsEmitter.dispose();
192
+ this.onDidChangeOutputItemsEmitter.dispose();
193
+ this.onDidChangeContentEmitter.dispose();
194
+ this.onDidChangeMetadataEmitter.dispose();
195
+ this.onDidChangeInternalMetadataEmitter.dispose();
196
+ this.onDidChangeLanguageEmitter.dispose();
197
+ this.notebookCellContextManager.dispose();
198
+ this.textModel.dispose();
199
+ this.toDispose.dispose();
200
+ }
201
+
202
+ requestEdit(): void {
203
+ this.onDidRequestCellEditChangeEmitter.fire(true);
204
+ }
205
+
206
+ requestStopEdit(): void {
207
+ this.onDidRequestCellEditChangeEmitter.fire(false);
208
+ }
209
+
210
+ spliceNotebookCellOutputs(splice: NotebookCellOutputsSplice): void {
211
+ if (splice.deleteCount > 0 && splice.newOutputs.length > 0) {
212
+ const commonLen = Math.min(splice.deleteCount, splice.newOutputs.length);
213
+ // update
214
+ for (let i = 0; i < commonLen; i++) {
215
+ const currentOutput = this.outputs[splice.start + i];
216
+ const newOutput = splice.newOutputs[i];
217
+
218
+ this.replaceOutputItems(currentOutput.outputId, newOutput);
219
+ }
220
+
221
+ this.outputs.splice(splice.start + commonLen, splice.deleteCount - commonLen, ...splice.newOutputs.slice(commonLen).map(op => new NotebookCellOutputModel(op)));
222
+ this.onDidChangeOutputsEmitter.fire({ start: splice.start + commonLen, deleteCount: splice.deleteCount - commonLen, newOutputs: splice.newOutputs.slice(commonLen) });
223
+ } else {
224
+ this.outputs.splice(splice.start, splice.deleteCount, ...splice.newOutputs.map(op => new NotebookCellOutputModel(op)));
225
+ this.onDidChangeOutputsEmitter.fire(splice);
226
+ }
227
+ }
228
+
229
+ replaceOutputItems(outputId: string, newOutputItem: CellOutput): boolean {
230
+ const output = this.outputs.find(out => out.outputId === outputId);
231
+
232
+ if (!output) {
233
+ return false;
234
+ }
235
+
236
+ output.replaceData(newOutputItem);
237
+ this.onDidChangeOutputItemsEmitter.fire();
238
+ return true;
239
+ }
240
+
241
+ getData(): CellData {
242
+ return {
243
+ cellKind: this.cellKind,
244
+ language: this.language,
245
+ outputs: this.outputs.map(output => output.getData()),
246
+ source: this.textBuffer,
247
+ collapseState: this.props.collapseState,
248
+ internalMetadata: this.internalMetadata,
249
+ metadata: this.metadata
250
+ };
251
+ }
252
+
253
+ async resolveTextModel(): Promise<MonacoEditorModel> {
254
+ if (this.textModel) {
255
+ return this.textModel;
256
+ }
257
+
258
+ const ref = await this.textModelService.createModelReference(this.uri);
259
+ this.textModel = ref.object;
260
+ return ref.object;
261
+ }
262
+ }
263
+
264
+ function computeRunStartTimeAdjustment(oldMetadata: NotebookCellInternalMetadata, newMetadata: NotebookCellInternalMetadata): number | undefined {
265
+ if (oldMetadata.runStartTime !== newMetadata.runStartTime && typeof newMetadata.runStartTime === 'number') {
266
+ const offset = Date.now() - newMetadata.runStartTime;
267
+ return offset < 0 ? Math.abs(offset) : 0;
268
+ } else {
269
+ return newMetadata.runStartTimeAdjustment;
270
+ }
271
+ }
@@ -0,0 +1,69 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2023 TypeFox and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { Disposable, Emitter } from '@theia/core';
18
+ import { CellOutput, CellOutputItem } from '../../common';
19
+
20
+ export class NotebookCellOutputModel implements Disposable {
21
+
22
+ private didChangeDataEmitter = new Emitter<void>();
23
+ readonly onDidChangeData = this.didChangeDataEmitter.event;
24
+
25
+ private requestOutputPresentationChangeEmitter = new Emitter<void>();
26
+ readonly onRequestOutputPresentationChange = this.requestOutputPresentationChangeEmitter.event;
27
+
28
+ get outputId(): string {
29
+ return this.rawOutput.outputId;
30
+ }
31
+
32
+ get outputs(): CellOutputItem[] {
33
+ return this.rawOutput.outputs || [];
34
+ }
35
+
36
+ get metadata(): Record<string, unknown> | undefined {
37
+ return this.rawOutput.metadata;
38
+ }
39
+
40
+ constructor(private rawOutput: CellOutput) { }
41
+
42
+ replaceData(rawData: CellOutput): void {
43
+ this.rawOutput = rawData;
44
+ this.didChangeDataEmitter.fire();
45
+ }
46
+
47
+ appendData(items: CellOutputItem[]): void {
48
+ this.rawOutput.outputs.push(...items);
49
+ this.didChangeDataEmitter.fire();
50
+ }
51
+
52
+ dispose(): void {
53
+ this.didChangeDataEmitter.dispose();
54
+ this.requestOutputPresentationChangeEmitter.dispose();
55
+ }
56
+
57
+ requestOutputPresentationUpdate(): void {
58
+ this.requestOutputPresentationChangeEmitter.fire();
59
+ }
60
+
61
+ getData(): CellOutput {
62
+ return {
63
+ outputs: this.outputs,
64
+ metadata: this.metadata,
65
+ outputId: this.outputId
66
+ };
67
+ }
68
+
69
+ }