@dodona/papyros 4.1.3 → 4.2.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 (55) hide show
  1. package/dist/InputServiceWorker.js +1 -1
  2. package/dist/backend/Backend.d.ts +21 -0
  3. package/dist/backend/Backend.js +30 -0
  4. package/dist/backend/Backend.js.map +1 -1
  5. package/dist/backend/workers/python/PythonWorker.d.ts +3 -0
  6. package/dist/backend/workers/python/PythonWorker.js +18 -0
  7. package/dist/backend/workers/python/PythonWorker.js.map +1 -1
  8. package/dist/backend/workers/python/python_package.tar.gz.load_by_url +0 -0
  9. package/dist/communication/BackendEvent.d.ts +2 -1
  10. package/dist/communication/BackendEvent.js +1 -0
  11. package/dist/communication/BackendEvent.js.map +1 -1
  12. package/dist/communication/BackendManager.js +2 -1
  13. package/dist/communication/BackendManager.js.map +1 -1
  14. package/dist/frontend/components/AddFileButton.d.ts +15 -0
  15. package/dist/frontend/components/AddFileButton.js +105 -0
  16. package/dist/frontend/components/AddFileButton.js.map +1 -0
  17. package/dist/frontend/components/CodeRunner.d.ts +11 -0
  18. package/dist/frontend/components/CodeRunner.js +129 -8
  19. package/dist/frontend/components/CodeRunner.js.map +1 -1
  20. package/dist/frontend/components/Debugger.js +3 -0
  21. package/dist/frontend/components/Debugger.js.map +1 -1
  22. package/dist/frontend/components/EditorTab.d.ts +24 -0
  23. package/dist/frontend/components/EditorTab.js +208 -0
  24. package/dist/frontend/components/EditorTab.js.map +1 -0
  25. package/dist/frontend/components/EditorTabs.d.ts +10 -0
  26. package/dist/frontend/components/EditorTabs.js +58 -0
  27. package/dist/frontend/components/EditorTabs.js.map +1 -0
  28. package/dist/frontend/components/FileViewer.d.ts +14 -0
  29. package/dist/frontend/components/FileViewer.js +119 -0
  30. package/dist/frontend/components/FileViewer.js.map +1 -0
  31. package/dist/frontend/components/code_mirror/CodeMirrorEditor.d.ts +1 -0
  32. package/dist/frontend/components/code_mirror/CodeMirrorEditor.js +4 -0
  33. package/dist/frontend/components/code_mirror/CodeMirrorEditor.js.map +1 -1
  34. package/dist/frontend/components/code_mirror/FileEditor.d.ts +6 -0
  35. package/dist/frontend/components/code_mirror/FileEditor.js +48 -0
  36. package/dist/frontend/components/code_mirror/FileEditor.js.map +1 -0
  37. package/dist/frontend/components/shared-styles.d.ts +3 -0
  38. package/dist/frontend/components/shared-styles.js +42 -0
  39. package/dist/frontend/components/shared-styles.js.map +1 -0
  40. package/dist/frontend/state/Debugger.d.ts +8 -1
  41. package/dist/frontend/state/Debugger.js +39 -3
  42. package/dist/frontend/state/Debugger.js.map +1 -1
  43. package/dist/frontend/state/InputOutput.d.ts +14 -0
  44. package/dist/frontend/state/InputOutput.js +54 -1
  45. package/dist/frontend/state/InputOutput.js.map +1 -1
  46. package/dist/frontend/state/Runner.d.ts +3 -0
  47. package/dist/frontend/state/Runner.js +18 -0
  48. package/dist/frontend/state/Runner.js.map +1 -1
  49. package/dist/frontend/state/Translations.d.ts +16 -0
  50. package/dist/frontend/state/Translations.js +16 -0
  51. package/dist/frontend/state/Translations.js.map +1 -1
  52. package/dist/util/Util.d.ts +2 -0
  53. package/dist/util/Util.js +15 -0
  54. package/dist/util/Util.js.map +1 -1
  55. package/package.json +4 -4
@@ -0,0 +1,208 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement, property, state } from "lit/decorators.js";
8
+ import { PapyrosElement } from "./PapyrosElement";
9
+ import { css, html } from "lit";
10
+ import { createRef, ref } from "lit/directives/ref.js";
11
+ import { inlineInputStyles, tabButtonStyles } from "./shared-styles";
12
+ import { isValidFileName } from "../../util/Util";
13
+ let EditorTab = class EditorTab extends PapyrosElement {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.renaming = false;
17
+ this.invalid = false;
18
+ this.renameInputRef = createRef();
19
+ }
20
+ static get styles() {
21
+ return css `
22
+ :host {
23
+ display: flex;
24
+ }
25
+
26
+ ${tabButtonStyles}
27
+
28
+ .close-btn,
29
+ .rename-btn {
30
+ display: none;
31
+ align-items: center;
32
+ justify-content: center;
33
+ width: 1rem;
34
+ height: 1rem;
35
+ border-radius: 50%;
36
+ font-size: 0.75rem;
37
+ line-height: 1;
38
+ padding: 0;
39
+ background: transparent;
40
+ border: none;
41
+ cursor: pointer;
42
+ color: inherit;
43
+ opacity: 0.6;
44
+ }
45
+
46
+ button:hover .rename-btn,
47
+ button:hover .close-btn,
48
+ button:focus-within .rename-btn,
49
+ button:focus-within .close-btn,
50
+ button.active .rename-btn,
51
+ button.active .close-btn {
52
+ display: inline-flex;
53
+ }
54
+
55
+ .close-btn:hover {
56
+ opacity: 1;
57
+ background-color: var(--md-sys-color-error);
58
+ color: var(--md-sys-color-on-error);
59
+ }
60
+
61
+ .rename-btn:hover {
62
+ opacity: 1;
63
+ background-color: var(--md-sys-color-primary);
64
+ color: var(--md-sys-color-on-primary);
65
+ }
66
+
67
+ ${inlineInputStyles}
68
+ `;
69
+ }
70
+ setTab() {
71
+ this.papyros.io.activeEditorTab = this.file.name;
72
+ }
73
+ closeFile(e) {
74
+ e.stopPropagation();
75
+ this.papyros.io.removeFile(this.file.name);
76
+ void this.papyros.runner.deleteFile(this.file.name);
77
+ }
78
+ startRenaming() {
79
+ this.renaming = true;
80
+ this.invalid = false;
81
+ }
82
+ confirmRename() {
83
+ var _a, _b;
84
+ if (!this.renaming)
85
+ return;
86
+ const oldName = this.file.name;
87
+ const newName = (_b = (_a = this.renameInputRef.value) === null || _a === void 0 ? void 0 : _a.value.trim()) !== null && _b !== void 0 ? _b : "";
88
+ if (newName === oldName) {
89
+ this.renaming = false;
90
+ return;
91
+ }
92
+ if (!this.papyros.io.renameFile(oldName, newName)) {
93
+ return;
94
+ }
95
+ this.renaming = false;
96
+ void this.papyros.runner.renameFile(oldName, newName);
97
+ }
98
+ cancelRename() {
99
+ this.renaming = false;
100
+ }
101
+ onRenameInput() {
102
+ var _a, _b;
103
+ const value = (_b = (_a = this.renameInputRef.value) === null || _a === void 0 ? void 0 : _a.value.trim()) !== null && _b !== void 0 ? _b : "";
104
+ this.invalid =
105
+ !isValidFileName(value) ||
106
+ (value !== this.file.name && this.papyros.io.files.some((f) => f.name === value));
107
+ }
108
+ onRenameKeydown(e) {
109
+ if (e.key === "Enter") {
110
+ e.preventDefault();
111
+ this.confirmRename();
112
+ }
113
+ else if (e.key === "Escape") {
114
+ this.cancelRename();
115
+ }
116
+ }
117
+ onDblClick() {
118
+ if (!this.papyros.debugger.active)
119
+ this.startRenaming();
120
+ }
121
+ onAuxClick(e) {
122
+ if (!this.papyros.debugger.active && e.button === 1)
123
+ this.closeFile(e);
124
+ }
125
+ onRenameClick(e) {
126
+ e.stopPropagation();
127
+ this.startRenaming();
128
+ }
129
+ onRenameBtnKeydown(e) {
130
+ if (e.key === "Enter" || e.key === " ") {
131
+ e.preventDefault();
132
+ e.stopPropagation();
133
+ this.startRenaming();
134
+ }
135
+ }
136
+ onCloseBtnKeydown(e) {
137
+ if (e.key === "Enter" || e.key === " ") {
138
+ e.preventDefault();
139
+ this.closeFile(e);
140
+ }
141
+ }
142
+ updated() {
143
+ if (this.renaming) {
144
+ const input = this.renameInputRef.value;
145
+ if (input) {
146
+ input.focus();
147
+ input.select();
148
+ }
149
+ }
150
+ }
151
+ render() {
152
+ const active = this.papyros.io.activeEditorTab === this.file.name;
153
+ const debugActive = this.papyros.debugger.active;
154
+ if (!debugActive && this.renaming) {
155
+ return html `<input
156
+ ${ref(this.renameInputRef)}
157
+ class=${this.invalid ? "inline-input invalid" : "inline-input"}
158
+ .value=${this.file.name}
159
+ @input=${this.onRenameInput}
160
+ @keydown=${this.onRenameKeydown}
161
+ @blur=${this.confirmRename}
162
+ />`;
163
+ }
164
+ return html `
165
+ <button
166
+ class=${active ? "active" : ""}
167
+ @click=${this.setTab}
168
+ @dblclick=${this.onDblClick}
169
+ @auxclick=${this.onAuxClick}
170
+ >
171
+ ${this.file.name}
172
+ ${debugActive
173
+ ? ""
174
+ : html `<span
175
+ class="rename-btn"
176
+ role="button"
177
+ tabindex="0"
178
+ aria-label=${this.t("Papyros.rename_file_tab")}
179
+ @click=${this.onRenameClick}
180
+ @keydown=${this.onRenameBtnKeydown}
181
+ >✎</span
182
+ ><span
183
+ class="close-btn"
184
+ role="button"
185
+ tabindex="0"
186
+ aria-label=${this.t("Papyros.close_file_tab")}
187
+ @click=${this.closeFile}
188
+ @keydown=${this.onCloseBtnKeydown}
189
+ >×</span
190
+ >`}
191
+ </button>
192
+ `;
193
+ }
194
+ };
195
+ __decorate([
196
+ property({ attribute: false })
197
+ ], EditorTab.prototype, "file", void 0);
198
+ __decorate([
199
+ state()
200
+ ], EditorTab.prototype, "renaming", void 0);
201
+ __decorate([
202
+ state()
203
+ ], EditorTab.prototype, "invalid", void 0);
204
+ EditorTab = __decorate([
205
+ customElement("p-editor-tab")
206
+ ], EditorTab);
207
+ export { EditorTab };
208
+ //# sourceMappingURL=EditorTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorTab.js","sourceRoot":"","sources":["../../../src/frontend/components/EditorTab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { PapyrosElement } from "./PapyrosElement";
2
+ import { CSSResult, TemplateResult } from "lit";
3
+ import { FileEntry } from "../state/InputOutput";
4
+ import "./EditorTab";
5
+ import "./AddFileButton";
6
+ export declare class EditorTabs extends PapyrosElement {
7
+ files: FileEntry[];
8
+ static get styles(): CSSResult;
9
+ protected render(): TemplateResult;
10
+ }
@@ -0,0 +1,58 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement, property } from "lit/decorators.js";
8
+ import { PapyrosElement } from "./PapyrosElement";
9
+ import { css, html } from "lit";
10
+ import { CODE_TAB } from "../state/InputOutput";
11
+ import "./EditorTab";
12
+ import "./AddFileButton";
13
+ import { tabButtonStyles } from "./shared-styles";
14
+ let EditorTabs = class EditorTabs extends PapyrosElement {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.files = [];
18
+ }
19
+ static get styles() {
20
+ return css `
21
+ :host {
22
+ display: flex;
23
+ flex-direction: row;
24
+ gap: 0.25rem;
25
+ padding: 0.25rem 0.25rem 0;
26
+ background-color: var(--md-sys-color-surface-container);
27
+ border-radius: 0.5rem 0.5rem 0 0;
28
+ max-height: 2.5rem;
29
+ flex-shrink: 0;
30
+ overflow-x: auto;
31
+ }
32
+
33
+ ${tabButtonStyles}
34
+ `;
35
+ }
36
+ render() {
37
+ const activeTab = this.papyros.io.activeEditorTab;
38
+ const debugActive = this.papyros.debugger.active;
39
+ return html `
40
+ <button
41
+ class=${activeTab === CODE_TAB ? "active" : ""}
42
+ @click=${() => (this.papyros.io.activeEditorTab = CODE_TAB)}
43
+ >
44
+ ${this.t("Papyros.editor_tab_code")}
45
+ </button>
46
+ ${this.files.map((f) => html `<p-editor-tab .papyros=${this.papyros} .file=${f}></p-editor-tab>`)}
47
+ ${debugActive ? "" : html `<p-add-file-button .papyros=${this.papyros}></p-add-file-button>`}
48
+ `;
49
+ }
50
+ };
51
+ __decorate([
52
+ property({ attribute: false })
53
+ ], EditorTabs.prototype, "files", void 0);
54
+ EditorTabs = __decorate([
55
+ customElement("p-editor-tabs")
56
+ ], EditorTabs);
57
+ export { EditorTabs };
58
+ //# sourceMappingURL=EditorTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorTabs.js","sourceRoot":"","sources":["../../../src/frontend/components/EditorTabs.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAa,IAAI,EAAkB,MAAM,KAAK,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAa,MAAM,sBAAsB,CAAC;AAC3D,OAAO,aAAa,CAAC;AACrB,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAG3C,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,cAAc;IAAvC;;QAEH,UAAK,GAAgB,EAAE,CAAC;IAkC5B,CAAC;IAhCG,MAAM,KAAK,MAAM;QACb,OAAO,GAAG,CAAA;;;;;;;;;;;;;cAaJ,eAAe;SACpB,CAAC;IACN,CAAC;IAEkB,MAAM;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjD,OAAO,IAAI,CAAA;;wBAEK,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;yBACrC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,GAAG,QAAQ,CAAC;;kBAEzD,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;;cAErC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAA,0BAA0B,IAAI,CAAC,OAAO,UAAU,CAAC,kBAAkB,CAAC;cAC9F,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA,+BAA+B,IAAI,CAAC,OAAO,uBAAuB;SAC9F,CAAC;IACN,CAAC;CACJ,CAAA;AAlCG;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;yCACP;AAFf,UAAU;IADtB,aAAa,CAAC,eAAe,CAAC;GAClB,UAAU,CAoCtB"}
@@ -0,0 +1,14 @@
1
+ import { PapyrosElement } from "./PapyrosElement";
2
+ import { CSSResult, TemplateResult } from "lit";
3
+ import { FileEntry } from "../state/InputOutput";
4
+ import "./code_mirror/FileEditor";
5
+ export declare class FileViewer extends PapyrosElement {
6
+ file: FileEntry | undefined;
7
+ private editorRef;
8
+ private debouncedUpdateFile;
9
+ static get styles(): CSSResult;
10
+ private downloadBinary;
11
+ protected updated(changedProperties: Map<PropertyKey, unknown>): void;
12
+ private onEditorChange;
13
+ protected render(): TemplateResult;
14
+ }
@@ -0,0 +1,119 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement, property } from "lit/decorators.js";
8
+ import { PapyrosElement } from "./PapyrosElement";
9
+ import { css, html } from "lit";
10
+ import { createRef, ref } from "lit/directives/ref.js";
11
+ import { debounce } from "../../util/Util";
12
+ import "./code_mirror/FileEditor";
13
+ let FileViewer = class FileViewer extends PapyrosElement {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.file = undefined;
17
+ this.editorRef = createRef();
18
+ this.debouncedUpdateFile = debounce((name, content) => {
19
+ void this.papyros.runner.updateFile(name, content, false);
20
+ }, 300);
21
+ }
22
+ static get styles() {
23
+ return css `
24
+ :host {
25
+ display: block;
26
+ width: 100%;
27
+ height: 100%;
28
+ overflow: auto;
29
+ }
30
+
31
+ p-file-editor {
32
+ display: block;
33
+ width: 100%;
34
+ height: 100%;
35
+ }
36
+
37
+ .placeholder-container {
38
+ display: flex;
39
+ flex-direction: column;
40
+ align-items: center;
41
+ justify-content: center;
42
+ gap: 1rem;
43
+ padding: 2rem;
44
+ color: var(--md-sys-color-on-surface-variant);
45
+ }
46
+
47
+ button {
48
+ background-color: var(--md-sys-color-primary);
49
+ color: var(--md-sys-color-on-primary);
50
+ border: none;
51
+ border-radius: 1rem;
52
+ padding: 0.5rem 1.5rem;
53
+ cursor: pointer;
54
+ font-size: 0.875rem;
55
+ }
56
+
57
+ button:hover {
58
+ opacity: 0.9;
59
+ }
60
+ `;
61
+ }
62
+ downloadBinary() {
63
+ if (!this.file)
64
+ return;
65
+ const bytes = Uint8Array.from(atob(this.file.content), (c) => c.charCodeAt(0));
66
+ const blob = new Blob([bytes]);
67
+ const url = URL.createObjectURL(blob);
68
+ const a = document.createElement("a");
69
+ a.href = url;
70
+ a.download = this.file.name;
71
+ a.click();
72
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
73
+ }
74
+ updated(changedProperties) {
75
+ var _a;
76
+ if (changedProperties.has("file") && this.file && !this.file.binary) {
77
+ (_a = this.editorRef.value) === null || _a === void 0 ? void 0 : _a.focus();
78
+ }
79
+ }
80
+ onEditorChange(e) {
81
+ if (!this.file || this.papyros.debugger.active)
82
+ return;
83
+ const name = this.file.name;
84
+ const content = e.detail;
85
+ this.papyros.io.updateFileContent(name, content, this.file.binary);
86
+ this.debouncedUpdateFile(name, content);
87
+ }
88
+ render() {
89
+ if (!this.file) {
90
+ return html ``;
91
+ }
92
+ if (this.file.binary) {
93
+ return html `
94
+ <div class="placeholder-container">
95
+ <span>${this.t("Papyros.files_binary")}</span>
96
+ <button @click=${this.downloadBinary}>${this.t("Papyros.files_download")}</button>
97
+ </div>
98
+ `;
99
+ }
100
+ const readonly = this.papyros.debugger.active;
101
+ return html `
102
+ <p-file-editor
103
+ ${ref(this.editorRef)}
104
+ .value=${this.file.content}
105
+ .readonly=${readonly}
106
+ .theme=${this.papyros.constants.CodeMirrorTheme}
107
+ @change=${this.onEditorChange}
108
+ ></p-file-editor>
109
+ `;
110
+ }
111
+ };
112
+ __decorate([
113
+ property({ type: Object })
114
+ ], FileViewer.prototype, "file", void 0);
115
+ FileViewer = __decorate([
116
+ customElement("p-file-viewer")
117
+ ], FileViewer);
118
+ export { FileViewer };
119
+ //# sourceMappingURL=FileViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileViewer.js","sourceRoot":"","sources":["../../../src/frontend/components/FileViewer.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare class CodeMirrorEditor extends LitElement {
17
17
  private initView;
18
18
  private onViewUpdate;
19
19
  connectedCallback(): void;
20
+ focus(): void;
20
21
  disconnectedCallback(): void;
21
22
  protected configure(extensions: Record<string, Extension>): void;
22
23
  }
@@ -80,6 +80,10 @@ let CodeMirrorEditor = class CodeMirrorEditor extends LitElement {
80
80
  super.connectedCallback();
81
81
  this.initView();
82
82
  }
83
+ focus() {
84
+ var _a;
85
+ (_a = this.view) === null || _a === void 0 ? void 0 : _a.focus();
86
+ }
83
87
  disconnectedCallback() {
84
88
  var _a;
85
89
  super.disconnectedCallback();
@@ -1 +1 @@
1
- {"version":3,"file":"CodeMirrorEditor.js","sourceRoot":"","sources":["../../../../src/frontend/components/code_mirror/CodeMirrorEditor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CodeMirrorEditor.js","sourceRoot":"","sources":["../../../../src/frontend/components/code_mirror/CodeMirrorEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { CodeMirrorEditor } from "./CodeMirrorEditor";
2
+ import { CSSResult } from "lit";
3
+ export declare class FileEditor extends CodeMirrorEditor {
4
+ static get styles(): CSSResult;
5
+ constructor();
6
+ }
@@ -0,0 +1,48 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement } from "lit/decorators.js";
8
+ import { CodeMirrorEditor } from "./CodeMirrorEditor";
9
+ import { drawSelection, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, keymap, lineNumbers, } from "@codemirror/view";
10
+ import { defaultKeymap, history, historyKeymap } from "@codemirror/commands";
11
+ import { bracketMatching, foldGutter, indentOnInput } from "@codemirror/language";
12
+ import { EditorState } from "@codemirror/state";
13
+ import { highlightSelectionMatches } from "@codemirror/search";
14
+ import { css } from "lit";
15
+ let FileEditor = class FileEditor extends CodeMirrorEditor {
16
+ static get styles() {
17
+ return css `
18
+ :host {
19
+ width: 100%;
20
+ height: 100%;
21
+ }
22
+ `;
23
+ }
24
+ constructor() {
25
+ super();
26
+ this.configure({
27
+ fileExtensions: [
28
+ lineNumbers(),
29
+ highlightSpecialChars(),
30
+ history(),
31
+ foldGutter(),
32
+ drawSelection(),
33
+ EditorState.allowMultipleSelections.of(true),
34
+ indentOnInput(),
35
+ bracketMatching(),
36
+ highlightSelectionMatches(),
37
+ highlightActiveLineGutter(),
38
+ highlightActiveLine(),
39
+ keymap.of([...defaultKeymap, ...historyKeymap]),
40
+ ],
41
+ });
42
+ }
43
+ };
44
+ FileEditor = __decorate([
45
+ customElement("p-file-editor")
46
+ ], FileEditor);
47
+ export { FileEditor };
48
+ //# sourceMappingURL=FileEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileEditor.js","sourceRoot":"","sources":["../../../../src/frontend/components/code_mirror/FileEditor.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACH,aAAa,EACb,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,MAAM,EACN,WAAW,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAa,MAAM,KAAK,CAAC;AAG9B,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,gBAAgB;IAC5C,MAAM,KAAK,MAAM;QACb,OAAO,GAAG,CAAA;;;;;SAKT,CAAC;IACN,CAAC;IAED;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,CAAC;YACX,cAAc,EAAE;gBACZ,WAAW,EAAE;gBACb,qBAAqB,EAAE;gBACvB,OAAO,EAAE;gBACT,UAAU,EAAE;gBACZ,aAAa,EAAE;gBACf,WAAW,CAAC,uBAAuB,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC5C,aAAa,EAAE;gBACf,eAAe,EAAE;gBACjB,yBAAyB,EAAE;gBAC3B,yBAAyB,EAAE;gBAC3B,mBAAmB,EAAE;gBACrB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC;aAClD;SACJ,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA7BY,UAAU;IADtB,aAAa,CAAC,eAAe,CAAC;GAClB,UAAU,CA6BtB"}
@@ -0,0 +1,3 @@
1
+ import { CSSResult } from "lit";
2
+ export declare const tabButtonStyles: CSSResult;
3
+ export declare const inlineInputStyles: CSSResult;
@@ -0,0 +1,42 @@
1
+ import { css } from "lit";
2
+ export const tabButtonStyles = css `
3
+ button {
4
+ padding: 0.375rem 0.75rem;
5
+ border: none;
6
+ border-radius: 0.375rem 0.375rem 0 0;
7
+ cursor: pointer;
8
+ font-size: 0.875rem;
9
+ background-color: var(--md-sys-color-surface-variant);
10
+ color: var(--md-sys-color-on-surface-variant);
11
+ white-space: nowrap;
12
+ display: flex;
13
+ align-items: center;
14
+ gap: 0.375rem;
15
+ }
16
+
17
+ button.active {
18
+ background-color: var(--md-sys-color-surface);
19
+ color: var(--md-sys-color-on-surface);
20
+ }
21
+
22
+ button:hover:not(.active) {
23
+ opacity: 0.8;
24
+ }
25
+ `;
26
+ export const inlineInputStyles = css `
27
+ .inline-input {
28
+ font-size: 0.875rem;
29
+ padding: 0.25rem 0.5rem;
30
+ border: 1px solid var(--md-sys-color-outline);
31
+ border-radius: 0.375rem 0.375rem 0 0;
32
+ background-color: var(--md-sys-color-surface);
33
+ color: var(--md-sys-color-on-surface);
34
+ width: 8rem;
35
+ outline: none;
36
+ }
37
+
38
+ .inline-input.invalid {
39
+ border-color: var(--md-sys-color-error);
40
+ }
41
+ `;
42
+ //# sourceMappingURL=shared-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-styles.js","sourceRoot":"","sources":["../../../src/frontend/components/shared-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAa,MAAM,KAAK,CAAC;AAErC,MAAM,CAAC,MAAM,eAAe,GAAc,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;CAuB5C,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAc,GAAG,CAAA;;;;;;;;;;;;;;;CAe9C,CAAC"}
@@ -1,23 +1,30 @@
1
1
  import { Frame } from "@dodona/trace-component/dist/trace_types";
2
2
  import { State } from "@dodona/lit-state";
3
3
  import { Papyros } from "./Papyros";
4
+ import { FileEntry } from "./InputOutput";
4
5
  export type FrameState = {
5
6
  line: number;
6
7
  outputs: number;
7
8
  inputs: number;
9
+ files: number;
8
10
  };
9
11
  export declare class Debugger extends State {
10
12
  private papyros;
11
13
  private frameStates;
12
- activeFrame: number | undefined;
14
+ private _activeFrame;
15
+ set activeFrame(value: number | undefined);
16
+ get activeFrame(): number | undefined;
13
17
  trace: Frame[];
14
18
  private _active;
19
+ private fileHistory;
15
20
  set active(active: boolean);
16
21
  get active(): boolean;
17
22
  constructor(papyros: Papyros);
18
23
  reset(): void;
24
+ private validateActiveTab;
19
25
  get activeFrameState(): FrameState | undefined;
20
26
  get debugLine(): number | undefined;
21
27
  get debugOutputs(): number | undefined;
22
28
  get debugUsedInputs(): number | undefined;
29
+ get debugFiles(): FileEntry[];
23
30
  }