juxscript 1.0.88 → 1.0.90

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 (89) hide show
  1. package/bin/cli.js +243 -92
  2. package/index.js +21 -0
  3. package/lib/componentsv2/base/BaseEngine.d.ts +10 -0
  4. package/lib/componentsv2/base/BaseEngine.d.ts.map +1 -1
  5. package/lib/componentsv2/base/BaseEngine.js +28 -7
  6. package/lib/componentsv2/base/BaseEngine.js.map +1 -1
  7. package/lib/componentsv2/base/BaseEngine.ts +29 -0
  8. package/lib/componentsv2/base/OptionsContract.d.ts +20 -0
  9. package/lib/componentsv2/base/OptionsContract.d.ts.map +1 -0
  10. package/lib/componentsv2/base/OptionsContract.js +107 -0
  11. package/lib/componentsv2/base/OptionsContract.js.map +1 -0
  12. package/lib/componentsv2/base/OptionsContract.ts +139 -0
  13. package/lib/componentsv2/element/component.d.ts +22 -0
  14. package/lib/componentsv2/element/component.d.ts.map +1 -1
  15. package/lib/componentsv2/element/component.js +22 -0
  16. package/lib/componentsv2/element/component.js.map +1 -1
  17. package/lib/componentsv2/element/component.ts +23 -1
  18. package/lib/componentsv2/element/engine.d.ts +31 -14
  19. package/lib/componentsv2/element/engine.d.ts.map +1 -1
  20. package/lib/componentsv2/element/engine.js +74 -23
  21. package/lib/componentsv2/element/engine.js.map +1 -1
  22. package/lib/componentsv2/element/engine.ts +86 -29
  23. package/lib/componentsv2/element/skin.d.ts.map +1 -1
  24. package/lib/componentsv2/element/skin.js +7 -10
  25. package/lib/componentsv2/element/skin.js.map +1 -1
  26. package/lib/componentsv2/element/skin.ts +7 -11
  27. package/lib/componentsv2/grid/engine.d.ts +48 -3
  28. package/lib/componentsv2/grid/engine.d.ts.map +1 -1
  29. package/lib/componentsv2/grid/engine.js +109 -14
  30. package/lib/componentsv2/grid/engine.js.map +1 -1
  31. package/lib/componentsv2/grid/engine.ts +120 -16
  32. package/lib/componentsv2/input/engine.d.ts +48 -5
  33. package/lib/componentsv2/input/engine.d.ts.map +1 -1
  34. package/lib/componentsv2/input/engine.js +108 -15
  35. package/lib/componentsv2/input/engine.js.map +1 -1
  36. package/lib/componentsv2/input/engine.ts +119 -16
  37. package/lib/componentsv2/input/skin.d.ts.map +1 -1
  38. package/lib/componentsv2/input/skin.js +1 -4
  39. package/lib/componentsv2/input/skin.js.map +1 -1
  40. package/lib/componentsv2/input/skin.ts +1 -4
  41. package/lib/componentsv2/list/component.d.ts +28 -6
  42. package/lib/componentsv2/list/component.d.ts.map +1 -1
  43. package/lib/componentsv2/list/component.js +28 -6
  44. package/lib/componentsv2/list/component.js.map +1 -1
  45. package/lib/componentsv2/list/component.ts +28 -6
  46. package/lib/componentsv2/list/engine.d.ts +61 -9
  47. package/lib/componentsv2/list/engine.d.ts.map +1 -1
  48. package/lib/componentsv2/list/engine.js +156 -95
  49. package/lib/componentsv2/list/engine.js.map +1 -1
  50. package/lib/componentsv2/list/engine.ts +175 -108
  51. package/machinery/build3.js +21 -0
  52. package/machinery/compiler3.js +638 -0
  53. package/machinery/serve.js +255 -0
  54. package/machinery/watcher.js +53 -64
  55. package/package.json +11 -3
  56. package/lib/componentsv2/index.d.ts +0 -41
  57. package/lib/componentsv2/index.d.ts.map +0 -1
  58. package/lib/componentsv2/index.js +0 -223
  59. package/lib/componentsv2/index.js.map +0 -1
  60. package/lib/componentsv2/index.ts +0 -256
  61. package/lib/componentsv2/juxerror/component.d.ts +0 -28
  62. package/lib/componentsv2/juxerror/component.d.ts.map +0 -1
  63. package/lib/componentsv2/juxerror/component.js +0 -101
  64. package/lib/componentsv2/juxerror/component.js.map +0 -1
  65. package/lib/componentsv2/juxerror/component.ts +0 -125
  66. package/lib/componentsv2/juxerror/engine.d.ts +0 -35
  67. package/lib/componentsv2/juxerror/engine.d.ts.map +0 -1
  68. package/lib/componentsv2/juxerror/engine.js +0 -190
  69. package/lib/componentsv2/juxerror/engine.js.map +0 -1
  70. package/lib/componentsv2/juxerror/engine.ts +0 -241
  71. package/lib/componentsv2/juxerror/skin.d.ts +0 -11
  72. package/lib/componentsv2/juxerror/skin.d.ts.map +0 -1
  73. package/lib/componentsv2/juxerror/skin.js +0 -180
  74. package/lib/componentsv2/juxerror/skin.js.map +0 -1
  75. package/lib/componentsv2/juxerror/skin.ts +0 -200
  76. package/lib/componentsv2/juxerror/structure.css +0 -351
  77. package/machinery/ast.js +0 -347
  78. package/machinery/compiler.js +0 -706
  79. package/machinery/diagnose.js +0 -72
  80. package/machinery/doc-generator.js +0 -136
  81. package/machinery/imports.js +0 -155
  82. package/machinery/jux-module-pattern.md +0 -118
  83. package/machinery/server.js +0 -86
  84. package/machinery/ts-shim.js +0 -46
  85. package/machinery/verifier.js +0 -135
  86. package/tests/dropdown-test.js +0 -25
  87. package/tests/juxerrors/bad_syntax.jux +0 -8
  88. package/tests/juxerrors/ghost_dep.jux +0 -10
  89. package/tests/server_plugin_test.ts +0 -191
@@ -1,190 +0,0 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _JuxErrorEngine_instances, _JuxErrorEngine_parseStack, _JuxErrorEngine_parseStackLine, _JuxErrorEngine_cleanFilePath, _JuxErrorEngine_isUserCode, _JuxErrorEngine_findCulprit;
7
- import { BaseEngine } from '../base/BaseEngine.js';
8
- export class JuxErrorEngine extends BaseEngine {
9
- constructor(id = 'jux-error', options = {}) {
10
- super(id, options);
11
- _JuxErrorEngine_instances.add(this);
12
- }
13
- prepareState(id, options) {
14
- return {
15
- // BaseState requirements
16
- id,
17
- classes: ['jux-error'],
18
- visible: false,
19
- disabled: false,
20
- loading: false,
21
- attributes: {},
22
- // JuxErrorState specifics
23
- title: '',
24
- message: '',
25
- stack: [],
26
- rawStack: '',
27
- timestamp: 0,
28
- errorType: 'unknown',
29
- culpritFrame: null,
30
- expanded: false
31
- };
32
- }
33
- // --- Public API ---
34
- show(error, type = 'runtime') {
35
- const err = typeof error === 'string' ? new Error(error) : error;
36
- const stack = __classPrivateFieldGet(this, _JuxErrorEngine_instances, "m", _JuxErrorEngine_parseStack).call(this, err.stack || '');
37
- const culprit = __classPrivateFieldGet(this, _JuxErrorEngine_instances, "m", _JuxErrorEngine_findCulprit).call(this, stack);
38
- this.updateState({
39
- visible: true,
40
- title: err.name || 'Error',
41
- message: err.message,
42
- stack,
43
- rawStack: err.stack || '',
44
- timestamp: Date.now(),
45
- errorType: type,
46
- culpritFrame: culprit,
47
- expanded: false
48
- });
49
- this.emit('error:show', { type, message: err.message });
50
- return this;
51
- }
52
- showCompileError(file, line, message, code) {
53
- const culprit = {
54
- file,
55
- line,
56
- column: 0,
57
- function: '<compile>',
58
- code,
59
- isUserCode: true
60
- };
61
- this.updateState({
62
- visible: true,
63
- title: 'Compile Error',
64
- message,
65
- stack: [culprit],
66
- rawStack: '',
67
- timestamp: Date.now(),
68
- errorType: 'compile',
69
- culpritFrame: culprit,
70
- expanded: false
71
- });
72
- this.emit('error:compile', { file, line, message });
73
- return this;
74
- }
75
- showNetworkError(url, status, message) {
76
- this.updateState({
77
- visible: true,
78
- title: `Network Error (${status})`,
79
- message: `${message}\n\nURL: ${url}`,
80
- stack: [],
81
- rawStack: '',
82
- timestamp: Date.now(),
83
- errorType: 'network',
84
- culpritFrame: null,
85
- expanded: false
86
- });
87
- this.emit('error:network', { url, status, message });
88
- return this;
89
- }
90
- showValidationError(field, message) {
91
- this.updateState({
92
- visible: true,
93
- title: 'Validation Error',
94
- message: `${field}: ${message}`,
95
- stack: [],
96
- rawStack: '',
97
- timestamp: Date.now(),
98
- errorType: 'validation',
99
- culpritFrame: null,
100
- expanded: false
101
- });
102
- this.emit('error:validation', { field, message });
103
- return this;
104
- }
105
- dismiss() {
106
- this.updateState({ visible: false });
107
- this.emit('error:dismiss', {});
108
- return this;
109
- }
110
- toggleExpanded() {
111
- this.updateState({ expanded: !this.state.expanded });
112
- this.emit('error:toggle', { expanded: this.state.expanded });
113
- return this;
114
- }
115
- // --- Global Error Handler ---
116
- static installGlobalHandler(engine) {
117
- const errorHandler = (event) => {
118
- engine.show(event.error || event.message, 'runtime');
119
- event.preventDefault();
120
- };
121
- const rejectionHandler = (event) => {
122
- const error = event.reason instanceof Error
123
- ? event.reason
124
- : new Error(String(event.reason));
125
- engine.show(error, 'runtime');
126
- event.preventDefault();
127
- };
128
- window.addEventListener('error', errorHandler);
129
- window.addEventListener('unhandledrejection', rejectionHandler);
130
- // Return cleanup function
131
- return () => {
132
- window.removeEventListener('error', errorHandler);
133
- window.removeEventListener('unhandledrejection', rejectionHandler);
134
- };
135
- }
136
- }
137
- _JuxErrorEngine_instances = new WeakSet(), _JuxErrorEngine_parseStack = function _JuxErrorEngine_parseStack(rawStack) {
138
- const lines = rawStack.split('\n').slice(1);
139
- const frames = [];
140
- for (const line of lines) {
141
- const frame = __classPrivateFieldGet(this, _JuxErrorEngine_instances, "m", _JuxErrorEngine_parseStackLine).call(this, line.trim());
142
- if (frame)
143
- frames.push(frame);
144
- }
145
- return frames;
146
- }, _JuxErrorEngine_parseStackLine = function _JuxErrorEngine_parseStackLine(line) {
147
- // Chrome/V8: "at functionName (file:line:column)" or "at file:line:column"
148
- const chromeMatch = line.match(/^at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?$/);
149
- if (chromeMatch) {
150
- const [, func, file, lineNum, col] = chromeMatch;
151
- return {
152
- function: func || '<anonymous>',
153
- file: __classPrivateFieldGet(this, _JuxErrorEngine_instances, "m", _JuxErrorEngine_cleanFilePath).call(this, file),
154
- line: parseInt(lineNum, 10),
155
- column: parseInt(col, 10),
156
- isUserCode: __classPrivateFieldGet(this, _JuxErrorEngine_instances, "m", _JuxErrorEngine_isUserCode).call(this, file)
157
- };
158
- }
159
- // Firefox: "functionName@file:line:column"
160
- const firefoxMatch = line.match(/^(.*)@(.+?):(\d+):(\d+)$/);
161
- if (firefoxMatch) {
162
- const [, func, file, lineNum, col] = firefoxMatch;
163
- return {
164
- function: func || '<anonymous>',
165
- file: __classPrivateFieldGet(this, _JuxErrorEngine_instances, "m", _JuxErrorEngine_cleanFilePath).call(this, file),
166
- line: parseInt(lineNum, 10),
167
- column: parseInt(col, 10),
168
- isUserCode: __classPrivateFieldGet(this, _JuxErrorEngine_instances, "m", _JuxErrorEngine_isUserCode).call(this, file)
169
- };
170
- }
171
- return null;
172
- }, _JuxErrorEngine_cleanFilePath = function _JuxErrorEngine_cleanFilePath(file) {
173
- return file
174
- .replace(/^https?:\/\/[^/]+/, '')
175
- .replace(/\?.*$/, '');
176
- }, _JuxErrorEngine_isUserCode = function _JuxErrorEngine_isUserCode(file) {
177
- const nonUserPatterns = [
178
- /node_modules/,
179
- /^\[native code\]/,
180
- /<anonymous>/,
181
- /^internal\//,
182
- /^node:/,
183
- /extensions\//,
184
- /juxscript\/lib\/componentsv2/
185
- ];
186
- return !nonUserPatterns.some(p => p.test(file));
187
- }, _JuxErrorEngine_findCulprit = function _JuxErrorEngine_findCulprit(stack) {
188
- return stack.find(frame => frame.isUserCode) || stack[0] || null;
189
- };
190
- //# sourceMappingURL=engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"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"}
@@ -1,241 +0,0 @@
1
- import { BaseEngine, BaseState } from '../base/BaseEngine.js';
2
- import { GlobalBus } from '../base/GlobalBus.js';
3
-
4
- export interface StackFrame {
5
- file: string;
6
- line: number;
7
- column: number;
8
- function: string;
9
- code?: string;
10
- isUserCode: boolean;
11
- }
12
-
13
- export interface JuxErrorState extends BaseState {
14
- title: string;
15
- message: string;
16
- stack: StackFrame[];
17
- rawStack: string;
18
- timestamp: number;
19
- errorType: 'runtime' | 'compile' | 'network' | 'validation' | 'unknown';
20
- culpritFrame: StackFrame | null;
21
- expanded: boolean;
22
- }
23
-
24
- export interface JuxErrorOptions {
25
- autoShow?: boolean;
26
- }
27
-
28
- export class JuxErrorEngine extends BaseEngine<JuxErrorState, JuxErrorOptions> {
29
- constructor(id: string = 'jux-error', options: JuxErrorOptions = {}) {
30
- super(id, options);
31
- }
32
-
33
- protected prepareState(id: string, options: JuxErrorOptions): JuxErrorState {
34
- return {
35
- // BaseState requirements
36
- id,
37
- classes: ['jux-error'],
38
- visible: false,
39
- disabled: false,
40
- loading: false,
41
- attributes: {},
42
- // JuxErrorState specifics
43
- title: '',
44
- message: '',
45
- stack: [],
46
- rawStack: '',
47
- timestamp: 0,
48
- errorType: 'unknown',
49
- culpritFrame: null,
50
- expanded: false
51
- };
52
- }
53
-
54
- // --- Public API ---
55
-
56
- show(error: Error | string, type: JuxErrorState['errorType'] = 'runtime'): this {
57
- const err = typeof error === 'string' ? new Error(error) : error;
58
- const stack = this.#parseStack(err.stack || '');
59
- const culprit = this.#findCulprit(stack);
60
-
61
- this.updateState({
62
- visible: true,
63
- title: err.name || 'Error',
64
- message: err.message,
65
- stack,
66
- rawStack: err.stack || '',
67
- timestamp: Date.now(),
68
- errorType: type,
69
- culpritFrame: culprit,
70
- expanded: false
71
- });
72
-
73
- this.emit('error:show', { type, message: err.message });
74
- return this;
75
- }
76
-
77
- showCompileError(file: string, line: number, message: string, code?: string): this {
78
- const culprit: StackFrame = {
79
- file,
80
- line,
81
- column: 0,
82
- function: '<compile>',
83
- code,
84
- isUserCode: true
85
- };
86
-
87
- this.updateState({
88
- visible: true,
89
- title: 'Compile Error',
90
- message,
91
- stack: [culprit],
92
- rawStack: '',
93
- timestamp: Date.now(),
94
- errorType: 'compile',
95
- culpritFrame: culprit,
96
- expanded: false
97
- });
98
-
99
- this.emit('error:compile', { file, line, message });
100
- return this;
101
- }
102
-
103
- showNetworkError(url: string, status: number, message: string): this {
104
- this.updateState({
105
- visible: true,
106
- title: `Network Error (${status})`,
107
- message: `${message}\n\nURL: ${url}`,
108
- stack: [],
109
- rawStack: '',
110
- timestamp: Date.now(),
111
- errorType: 'network',
112
- culpritFrame: null,
113
- expanded: false
114
- });
115
-
116
- this.emit('error:network', { url, status, message });
117
- return this;
118
- }
119
-
120
- showValidationError(field: string, message: string): this {
121
- this.updateState({
122
- visible: true,
123
- title: 'Validation Error',
124
- message: `${field}: ${message}`,
125
- stack: [],
126
- rawStack: '',
127
- timestamp: Date.now(),
128
- errorType: 'validation',
129
- culpritFrame: null,
130
- expanded: false
131
- });
132
-
133
- this.emit('error:validation', { field, message });
134
- return this;
135
- }
136
-
137
- dismiss(): this {
138
- this.updateState({ visible: false });
139
- this.emit('error:dismiss', {});
140
- return this;
141
- }
142
-
143
- toggleExpanded(): this {
144
- this.updateState({ expanded: !this.state.expanded });
145
- this.emit('error:toggle', { expanded: this.state.expanded });
146
- return this;
147
- }
148
-
149
- // --- Stack Parsing ---
150
-
151
- #parseStack(rawStack: string): StackFrame[] {
152
- const lines = rawStack.split('\n').slice(1);
153
- const frames: StackFrame[] = [];
154
-
155
- for (const line of lines) {
156
- const frame = this.#parseStackLine(line.trim());
157
- if (frame) frames.push(frame);
158
- }
159
-
160
- return frames;
161
- }
162
-
163
- #parseStackLine(line: string): StackFrame | null {
164
- // Chrome/V8: "at functionName (file:line:column)" or "at file:line:column"
165
- const chromeMatch = line.match(/^at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?$/);
166
- if (chromeMatch) {
167
- const [, func, file, lineNum, col] = chromeMatch;
168
- return {
169
- function: func || '<anonymous>',
170
- file: this.#cleanFilePath(file),
171
- line: parseInt(lineNum, 10),
172
- column: parseInt(col, 10),
173
- isUserCode: this.#isUserCode(file)
174
- };
175
- }
176
-
177
- // Firefox: "functionName@file:line:column"
178
- const firefoxMatch = line.match(/^(.*)@(.+?):(\d+):(\d+)$/);
179
- if (firefoxMatch) {
180
- const [, func, file, lineNum, col] = firefoxMatch;
181
- return {
182
- function: func || '<anonymous>',
183
- file: this.#cleanFilePath(file),
184
- line: parseInt(lineNum, 10),
185
- column: parseInt(col, 10),
186
- isUserCode: this.#isUserCode(file)
187
- };
188
- }
189
-
190
- return null;
191
- }
192
-
193
- #cleanFilePath(file: string): string {
194
- return file
195
- .replace(/^https?:\/\/[^/]+/, '')
196
- .replace(/\?.*$/, '');
197
- }
198
-
199
- #isUserCode(file: string): boolean {
200
- const nonUserPatterns = [
201
- /node_modules/,
202
- /^\[native code\]/,
203
- /<anonymous>/,
204
- /^internal\//,
205
- /^node:/,
206
- /extensions\//,
207
- /juxscript\/lib\/componentsv2/
208
- ];
209
- return !nonUserPatterns.some(p => p.test(file));
210
- }
211
-
212
- #findCulprit(stack: StackFrame[]): StackFrame | null {
213
- return stack.find(frame => frame.isUserCode) || stack[0] || null;
214
- }
215
-
216
- // --- Global Error Handler ---
217
-
218
- static installGlobalHandler(engine: JuxErrorEngine): () => void {
219
- const errorHandler = (event: ErrorEvent) => {
220
- engine.show(event.error || event.message, 'runtime');
221
- event.preventDefault();
222
- };
223
-
224
- const rejectionHandler = (event: PromiseRejectionEvent) => {
225
- const error = event.reason instanceof Error
226
- ? event.reason
227
- : new Error(String(event.reason));
228
- engine.show(error, 'runtime');
229
- event.preventDefault();
230
- };
231
-
232
- window.addEventListener('error', errorHandler);
233
- window.addEventListener('unhandledrejection', rejectionHandler);
234
-
235
- // Return cleanup function
236
- return () => {
237
- window.removeEventListener('error', errorHandler);
238
- window.removeEventListener('unhandledrejection', rejectionHandler);
239
- };
240
- }
241
- }
@@ -1,11 +0,0 @@
1
- import { BaseSkin } from '../base/BaseSkin.js';
2
- import { JuxErrorEngine, JuxErrorState } from './engine.js';
3
- export declare class JuxErrorSkin extends BaseSkin<JuxErrorState, JuxErrorEngine> {
4
- #private;
5
- constructor(engine: JuxErrorEngine);
6
- protected get structureCss(): string;
7
- protected createRoot(): HTMLElement;
8
- protected updateSkin(state: JuxErrorState): void;
9
- protected bindEvents(root: HTMLElement): void;
10
- }
11
- //# sourceMappingURL=skin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skin.d.ts","sourceRoot":"","sources":["skin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAGxE,qBAAa,YAAa,SAAQ,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;;gBAIzD,MAAM,EAAE,cAAc;IAIlC,SAAS,KAAK,YAAY,IAAI,MAAM,CAEnC;IAED,SAAS,CAAC,UAAU,IAAI,WAAW;IAanC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAyIhD,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;CAiChD"}
@@ -1,180 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _JuxErrorSkin_instances, _JuxErrorSkin_overlay, _JuxErrorSkin_keydownHandler, _JuxErrorSkin_renderError, _JuxErrorSkin_renderCulprit, _JuxErrorSkin_renderStackSection, _JuxErrorSkin_renderFrame, _JuxErrorSkin_getTypeIcon, _JuxErrorSkin_formatTime, _JuxErrorSkin_escapeHtml, _JuxErrorSkin_copyErrorDetails;
13
- import { BaseSkin } from '../base/BaseSkin.js';
14
- import structureCss from './structure.css';
15
- export class JuxErrorSkin extends BaseSkin {
16
- constructor(engine) {
17
- super(engine);
18
- _JuxErrorSkin_instances.add(this);
19
- _JuxErrorSkin_overlay.set(this, null);
20
- _JuxErrorSkin_keydownHandler.set(this, null);
21
- }
22
- get structureCss() {
23
- return structureCss;
24
- }
25
- createRoot() {
26
- const root = document.createElement('div');
27
- root.className = 'jux-error-root';
28
- __classPrivateFieldSet(this, _JuxErrorSkin_overlay, document.createElement('div'), "f");
29
- __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f").className = 'jux-error-overlay';
30
- __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f").setAttribute('aria-live', 'assertive');
31
- __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f").setAttribute('role', 'alert');
32
- root.appendChild(__classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f"));
33
- return root;
34
- }
35
- updateSkin(state) {
36
- if (!__classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f") || !this.root)
37
- return;
38
- // Apply base attributes
39
- this.applySkinAttributes(this.root, state);
40
- if (!state.visible) {
41
- __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f").classList.remove('jux-error-visible');
42
- __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f").innerHTML = '';
43
- return;
44
- }
45
- __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f").classList.add('jux-error-visible');
46
- __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f").innerHTML = __classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_renderError).call(this, state);
47
- }
48
- bindEvents(root) {
49
- root.addEventListener('click', (e) => {
50
- const target = e.target;
51
- // Close button or backdrop
52
- if (target.closest('.jux-error-close') ||
53
- target.closest('.jux-error-dismiss') ||
54
- target.closest('.jux-error-backdrop')) {
55
- this.engine.dismiss();
56
- return;
57
- }
58
- // Toggle stack trace
59
- if (target.closest('.jux-error-stack-toggle')) {
60
- this.engine.toggleExpanded();
61
- return;
62
- }
63
- // Copy button
64
- if (target.closest('.jux-error-copy')) {
65
- __classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_copyErrorDetails).call(this);
66
- return;
67
- }
68
- });
69
- // ESC key to dismiss
70
- __classPrivateFieldSet(this, _JuxErrorSkin_keydownHandler, (e) => {
71
- if (e.key === 'Escape' && this.engine.state.visible) {
72
- this.engine.dismiss();
73
- }
74
- }, "f");
75
- document.addEventListener('keydown', __classPrivateFieldGet(this, _JuxErrorSkin_keydownHandler, "f"));
76
- }
77
- }
78
- _JuxErrorSkin_overlay = new WeakMap(), _JuxErrorSkin_keydownHandler = new WeakMap(), _JuxErrorSkin_instances = new WeakSet(), _JuxErrorSkin_renderError = function _JuxErrorSkin_renderError(state) {
79
- const typeIcon = __classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_getTypeIcon).call(this, state.errorType);
80
- const typeClass = `jux-error-type-${state.errorType}`;
81
- return `
82
- <div class="jux-error-backdrop"></div>
83
- <div class="jux-error-dialog ${typeClass}">
84
- <header class="jux-error-header">
85
- <span class="jux-error-icon">${typeIcon}</span>
86
- <h2 class="jux-error-title">${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_escapeHtml).call(this, state.title)}</h2>
87
- <button class="jux-error-close" aria-label="Dismiss error">×</button>
88
- </header>
89
-
90
- <div class="jux-error-body">
91
- <p class="jux-error-message">${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_escapeHtml).call(this, state.message)}</p>
92
-
93
- ${state.culpritFrame ? __classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_renderCulprit).call(this, state.culpritFrame) : ''}
94
-
95
- ${state.stack.length > 0 ? __classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_renderStackSection).call(this, state) : ''}
96
- </div>
97
-
98
- <footer class="jux-error-footer">
99
- <span class="jux-error-timestamp">${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_formatTime).call(this, state.timestamp)}</span>
100
- <div class="jux-error-actions">
101
- <button class="jux-error-copy" title="Copy error details">📋 Copy</button>
102
- <button class="jux-error-dismiss">Dismiss</button>
103
- </div>
104
- </footer>
105
- </div>
106
- `;
107
- }, _JuxErrorSkin_renderCulprit = function _JuxErrorSkin_renderCulprit(frame) {
108
- return `
109
- <div class="jux-error-culprit">
110
- <div class="jux-error-culprit-header">
111
- <span class="jux-error-culprit-icon">👉</span>
112
- <span class="jux-error-culprit-file">${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_escapeHtml).call(this, frame.file)}</span>
113
- <span class="jux-error-culprit-location">:${frame.line}:${frame.column}</span>
114
- </div>
115
- ${frame.code ? `
116
- <pre class="jux-error-culprit-code"><code>${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_escapeHtml).call(this, frame.code)}</code></pre>
117
- ` : ''}
118
- <div class="jux-error-culprit-function">
119
- in <code>${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_escapeHtml).call(this, frame.function)}</code>
120
- </div>
121
- </div>
122
- `;
123
- }, _JuxErrorSkin_renderStackSection = function _JuxErrorSkin_renderStackSection(state) {
124
- const expandedClass = state.expanded ? 'jux-error-stack-expanded' : '';
125
- return `
126
- <div class="jux-error-stack-section ${expandedClass}">
127
- <button class="jux-error-stack-toggle">
128
- <span class="jux-error-stack-toggle-icon">${state.expanded ? '▼' : '▶'}</span>
129
- Stack Trace (${state.stack.length} frames)
130
- </button>
131
- <div class="jux-error-stack-frames">
132
- ${state.stack.map((frame, i) => __classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_renderFrame).call(this, frame, i)).join('')}
133
- </div>
134
- </div>
135
- `;
136
- }, _JuxErrorSkin_renderFrame = function _JuxErrorSkin_renderFrame(frame, index) {
137
- const userClass = frame.isUserCode ? 'jux-error-frame-user' : 'jux-error-frame-lib';
138
- return `
139
- <div class="jux-error-frame ${userClass}" data-index="${index}">
140
- <span class="jux-error-frame-index">${index}</span>
141
- <span class="jux-error-frame-function">${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_escapeHtml).call(this, frame.function)}</span>
142
- <span class="jux-error-frame-location">
143
- ${__classPrivateFieldGet(this, _JuxErrorSkin_instances, "m", _JuxErrorSkin_escapeHtml).call(this, frame.file)}:${frame.line}:${frame.column}
144
- </span>
145
- </div>
146
- `;
147
- }, _JuxErrorSkin_getTypeIcon = function _JuxErrorSkin_getTypeIcon(type) {
148
- const icons = {
149
- runtime: '💥',
150
- compile: '🔨',
151
- network: '🌐',
152
- validation: '⚠️',
153
- unknown: '❓'
154
- };
155
- return icons[type];
156
- }, _JuxErrorSkin_formatTime = function _JuxErrorSkin_formatTime(timestamp) {
157
- return new Date(timestamp).toLocaleTimeString();
158
- }, _JuxErrorSkin_escapeHtml = function _JuxErrorSkin_escapeHtml(str) {
159
- const div = document.createElement('div');
160
- div.textContent = str;
161
- return div.innerHTML;
162
- }, _JuxErrorSkin_copyErrorDetails = function _JuxErrorSkin_copyErrorDetails() {
163
- const state = this.engine.state;
164
- const details = [
165
- `${state.title}: ${state.message}`,
166
- '',
167
- state.culpritFrame ? `File: ${state.culpritFrame.file}:${state.culpritFrame.line}` : '',
168
- '',
169
- 'Stack Trace:',
170
- ...state.stack.map(f => ` at ${f.function} (${f.file}:${f.line}:${f.column})`)
171
- ].filter(Boolean).join('\n');
172
- navigator.clipboard.writeText(details).then(() => {
173
- const copyBtn = __classPrivateFieldGet(this, _JuxErrorSkin_overlay, "f")?.querySelector('.jux-error-copy');
174
- if (copyBtn) {
175
- copyBtn.textContent = '✓ Copied!';
176
- setTimeout(() => { copyBtn.textContent = '📋 Copy'; }, 1500);
177
- }
178
- });
179
- };
180
- //# sourceMappingURL=skin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skin.js","sourceRoot":"","sources":["skin.ts"],"names":[],"mappings":"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"}