apprun 4.0.0 → 6.0.0-rc.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.
- package/CHANGELOG.md +235 -12
- package/LICENSE +1 -1
- package/README.md +225 -110
- package/apprun.d.ts +240 -34
- package/cli/app.js +29 -0
- package/cli/colors.js +69 -0
- package/cli/index.html +13 -0
- package/cli/index.js +96 -0
- package/dist/apprun-code.js +2 -0
- package/dist/apprun-code.js.map +1 -0
- package/dist/apprun-dev-tools.js +1 -1
- package/dist/apprun-dev-tools.js.map +1 -1
- package/dist/apprun-html.esm.js +34 -0
- package/dist/apprun-html.esm.js.map +1 -0
- package/dist/apprun-html.js +2 -1
- package/dist/apprun-html.js.LICENSE.txt +11 -0
- package/dist/apprun-html.js.map +1 -1
- package/dist/apprun-play.js +2 -0
- package/dist/apprun-play.js.map +1 -0
- package/dist/apprun.esm.js +2 -0
- package/dist/apprun.esm.js.map +1 -0
- package/dist/apprun.js +1 -1
- package/dist/apprun.js.map +1 -1
- package/dist/createState.js +2 -0
- package/dist/createState.js.map +1 -0
- package/esm/add-components.js +90 -0
- package/esm/add-components.js.map +1 -0
- package/esm/app.js +209 -0
- package/esm/app.js.map +1 -0
- package/esm/apprun-code.js +170 -0
- package/esm/apprun-code.js.map +1 -0
- package/esm/apprun-dev-tools-tests.js +95 -0
- package/esm/apprun-dev-tools-tests.js.map +1 -0
- package/esm/apprun-dev-tools.js +281 -0
- package/esm/apprun-dev-tools.js.map +1 -0
- package/esm/apprun-html.js +24 -0
- package/esm/apprun-html.js.map +1 -0
- package/esm/apprun-play.js +248 -0
- package/esm/apprun-play.js.map +1 -0
- package/esm/apprun.js +220 -0
- package/esm/apprun.js.map +1 -0
- package/esm/component.js +413 -0
- package/esm/component.js.map +1 -0
- package/esm/createState.js +9 -0
- package/esm/createState.js.map +1 -0
- package/esm/decorator.js +88 -0
- package/esm/decorator.js.map +1 -0
- package/esm/directive.js +306 -0
- package/esm/directive.js.map +1 -0
- package/esm/router.js +345 -0
- package/esm/router.js.map +1 -0
- package/esm/type-utils.js +90 -0
- package/esm/type-utils.js.map +1 -0
- package/esm/types.js +58 -0
- package/esm/types.js.map +1 -0
- package/esm/vdom-lit-html.js +65 -0
- package/esm/vdom-lit-html.js.map +1 -0
- package/esm/vdom-my-prop-attr.js +227 -0
- package/esm/vdom-my-prop-attr.js.map +1 -0
- package/esm/vdom-my.js +293 -0
- package/esm/vdom-my.js.map +1 -0
- package/esm/vdom-to-html.js +54 -0
- package/esm/vdom-to-html.js.map +1 -0
- package/esm/vdom.js +28 -0
- package/esm/vdom.js.map +1 -0
- package/esm/version.js +15 -0
- package/esm/version.js.map +1 -0
- package/esm/web-component.js +155 -0
- package/esm/web-component.js.map +1 -0
- package/jsx-runtime.js +2 -0
- package/jsx-runtime.js.map +1 -0
- package/package.json +90 -41
- package/.travis.yml +0 -10
- package/.vscode/launch.json +0 -19
- package/BACKERS.md +0 -3
- package/apprun-cli.js +0 -177
- package/cli-templates/_gitignore +0 -6
- package/cli-templates/component.ts_ +0 -16
- package/cli-templates/index.html +0 -11
- package/cli-templates/karma.conf.js +0 -24
- package/cli-templates/main.ts_ +0 -13
- package/cli-templates/readme.md +0 -7
- package/cli-templates/spa_index.html +0 -14
- package/cli-templates/spa_main.ts_ +0 -47
- package/cli-templates/spec.ts_ +0 -11
- package/cli-templates/tsconfig.json +0 -12
- package/cli-templates/webpack.config.js +0 -23
- package/demo-html/app.js +0 -2
- package/demo-html/app.js.map +0 -1
- package/demo-html/counter-c.html +0 -29
- package/demo-html/counter-wc-event.html +0 -29
- package/demo-html/counter-wc.html +0 -29
- package/demo-html/counter.html +0 -26
- package/demo-html/index.html +0 -14
- package/demo-html/main.tsx +0 -31
- package/docs/README.md +0 -326
- package/docs/index.html +0 -23
- package/index.html +0 -85
- package/logo.png +0 -0
- package/src/app.ts +0 -69
- package/src/apprun-dev-tools.tsx +0 -67
- package/src/apprun-html.ts +0 -13
- package/src/apprun.ts +0 -53
- package/src/component.ts +0 -189
- package/src/createComponent.tsx +0 -38
- package/src/decorator.ts +0 -36
- package/src/router.ts +0 -19
- package/src/types.ts +0 -9
- package/src/vdom-html.ts +0 -17
- package/src/vdom-my.ts +0 -191
- package/src/vdom-to-html.tsx +0 -45
- package/src/vdom.ts +0 -7
- package/src/web-component.ts +0 -29
- package/tests/app-rx.spec_ +0 -41
- package/tests/app.spec.ts +0 -122
- package/tests/application.spec.tsx +0 -23
- package/tests/component.spec.tsx +0 -296
- package/tests/custom-element.spec.tsx +0 -19
- package/tests/data-attr.spec.tsx +0 -42
- package/tests/decorator.spec.tsx +0 -104
- package/tests/fragment.spec.tsx +0 -79
- package/tests/hyperscript.spec.ts +0 -43
- package/tests/node-test.js +0 -7
- package/tests/router.spec.ts +0 -69
- package/tests/stateful-component.spec.tsx +0 -248
- package/tests/typed.spec.tsx +0 -63
- package/tests/vdom-html.spec.ts +0 -35
- package/tests/vdom-jsx.spec.tsx +0 -131
- package/tests/vdom-my.spec.tsx +0 -195
- package/tests/view-engine.spec.js +0 -59
- package/tsconfig.json +0 -11
- package/tslint.json +0 -124
- package/typescriptreact.json +0 -87
- package/viewEngine.js +0 -54
- package/webpack.config.js +0 -30
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AppRun play popup component for running embedded examples.
|
|
3
|
+
*
|
|
4
|
+
* Builds the popup preview/editor UI and uses explicit HTMLElement casts for
|
|
5
|
+
* mounted DOM access under the Phase 3 component typing contract.
|
|
6
|
+
*/
|
|
7
|
+
import { app, Component } from './apprun';
|
|
8
|
+
const popup_div = `<div id="play-popup" class="overlay">
|
|
9
|
+
<style id="apprun-play-style">
|
|
10
|
+
.apprun-play .col {
|
|
11
|
+
height: 100%;
|
|
12
|
+
flex: 1;
|
|
13
|
+
}
|
|
14
|
+
.apprun-preview {
|
|
15
|
+
width: 100%
|
|
16
|
+
}
|
|
17
|
+
.apprun-play .editor, .apprun-play .preview {
|
|
18
|
+
display: inline-block;
|
|
19
|
+
width: calc(100% - 20px);
|
|
20
|
+
height: calc(100% - 10px);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
a.button {
|
|
24
|
+
font-size: .8em;
|
|
25
|
+
padding: 10px;
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
color: var(--md-primary-bg-color);
|
|
28
|
+
background: var(--md-primary-fg-color)
|
|
29
|
+
}
|
|
30
|
+
a.button:hover {
|
|
31
|
+
color: var(--md-primary-fg-color);
|
|
32
|
+
background: var(--md-primary-bg-color)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.overlay {
|
|
36
|
+
position: fixed;
|
|
37
|
+
top: 0;
|
|
38
|
+
bottom: 0;
|
|
39
|
+
left: 0;
|
|
40
|
+
right: 0;
|
|
41
|
+
background: rgba(0, 0, 0, 0.7);
|
|
42
|
+
visibility: hidden;
|
|
43
|
+
opacity: 0;
|
|
44
|
+
z-index: 999;
|
|
45
|
+
}
|
|
46
|
+
.overlay.show {
|
|
47
|
+
visibility: visible;
|
|
48
|
+
opacity: 1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.popup {
|
|
52
|
+
margin: 80px auto;
|
|
53
|
+
padding: 20px;
|
|
54
|
+
background: #fff;
|
|
55
|
+
border-radius: 3px;
|
|
56
|
+
position: relative;
|
|
57
|
+
width: 90%;
|
|
58
|
+
height: calc(100% - 150px);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.popup .close {
|
|
62
|
+
position: absolute;
|
|
63
|
+
top: 10px;
|
|
64
|
+
right: 20px;
|
|
65
|
+
font-size: 20px;
|
|
66
|
+
font-weight: bold;
|
|
67
|
+
text-decoration: none;
|
|
68
|
+
color: #333;
|
|
69
|
+
}
|
|
70
|
+
.popup .close:hover {
|
|
71
|
+
color: #06D85F;
|
|
72
|
+
}
|
|
73
|
+
.popup .content {
|
|
74
|
+
height: 100%;
|
|
75
|
+
overflow: hidden;
|
|
76
|
+
display: flex;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.cm-s-default {
|
|
80
|
+
height: 100%;
|
|
81
|
+
font-size: small;
|
|
82
|
+
line-height: 1.5em;
|
|
83
|
+
z-index: 0;
|
|
84
|
+
}
|
|
85
|
+
</style>
|
|
86
|
+
|
|
87
|
+
<div class="popup apprun-play">
|
|
88
|
+
<a class="close" href="javascript:app.run('@close-popup')">×</a>
|
|
89
|
+
<div class="content">
|
|
90
|
+
<div class="col">
|
|
91
|
+
<textarea class="editor"></textarea>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="col">
|
|
94
|
+
<iframe class="preview"/>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>`;
|
|
99
|
+
const encodeHTML = code => {
|
|
100
|
+
return code.replace(/&/g, '&')
|
|
101
|
+
.replace(/</g, '<')
|
|
102
|
+
.replace(/>/g, '>')
|
|
103
|
+
.replace(/"/g, '"')
|
|
104
|
+
.replace(/'/g, ''');
|
|
105
|
+
};
|
|
106
|
+
const code_html = code => `<!DOCTYPE html>
|
|
107
|
+
<html lang="en">
|
|
108
|
+
<head>
|
|
109
|
+
<meta charset="UTF-8">
|
|
110
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
111
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
112
|
+
<title>AppRun Playground</title>
|
|
113
|
+
<style>
|
|
114
|
+
body {
|
|
115
|
+
font-family: "Benton Sans", "Helvetica Neue", helvetica, arial, sans-serif;
|
|
116
|
+
margin: 2em;
|
|
117
|
+
}
|
|
118
|
+
</style>
|
|
119
|
+
<script src="https://cdn.jsdelivr.net/npm/typescript@5.8.3"></script>
|
|
120
|
+
<script src="https://unpkg.com/apprun/dist/apprun-html.js"></script>
|
|
121
|
+
</head>
|
|
122
|
+
<body>
|
|
123
|
+
<pre id="code" style="display:none">${encodeHTML(code)}</pre>
|
|
124
|
+
<script type="module">
|
|
125
|
+
const code = document.getElementById('code').innerText;
|
|
126
|
+
const compiled = ts.transpileModule(code, {
|
|
127
|
+
compilerOptions: {
|
|
128
|
+
"jsx": "react",
|
|
129
|
+
"jsxFactory": "app.h",
|
|
130
|
+
"jsxFragmentFactory": "app.Fragment",
|
|
131
|
+
"target": "es2020",
|
|
132
|
+
"module": "esnext",
|
|
133
|
+
},
|
|
134
|
+
reportDiagnostics: true,
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
if (compiled.diagnostics && compiled.diagnostics.length) {
|
|
138
|
+
const pre = document.createElement('pre');
|
|
139
|
+
pre.style = 'font-size: 10px;';
|
|
140
|
+
pre.innerText = compiled.diagnostics.map(d => {
|
|
141
|
+
const start = d.start;
|
|
142
|
+
const end = d.start + d.length;
|
|
143
|
+
const line = code.substring(0, end).split('\\n').length;
|
|
144
|
+
const column = code.substring(0, end).split('\\n').pop().length;
|
|
145
|
+
return \`Line: \${line}, Column: \${column}, \${d.messageText}\`;
|
|
146
|
+
}).join('\\n');
|
|
147
|
+
document.body.appendChild(pre);
|
|
148
|
+
} else {
|
|
149
|
+
window.onerror = function () {
|
|
150
|
+
const pre = document.createElement('pre');
|
|
151
|
+
pre.style = 'font-size: 10px;';
|
|
152
|
+
pre.innerText = compiled.outputText;;
|
|
153
|
+
document.body.appendChild(pre);
|
|
154
|
+
};
|
|
155
|
+
const script = document.createElement('script');
|
|
156
|
+
script.type = 'module';
|
|
157
|
+
script.text = compiled.outputText;
|
|
158
|
+
document.body.appendChild(script);
|
|
159
|
+
}
|
|
160
|
+
</script>
|
|
161
|
+
</body>
|
|
162
|
+
</html>`;
|
|
163
|
+
const setup_editor = (textarea, iframe, code, hide_src) => {
|
|
164
|
+
if (!iframe || !code)
|
|
165
|
+
return;
|
|
166
|
+
const run_code = code => {
|
|
167
|
+
const iframe_clone = iframe.cloneNode();
|
|
168
|
+
iframe.parentNode?.replaceChild(iframe_clone, iframe);
|
|
169
|
+
iframe = iframe_clone;
|
|
170
|
+
const doc = iframe.contentWindow?.document;
|
|
171
|
+
if (!doc)
|
|
172
|
+
return;
|
|
173
|
+
doc.open();
|
|
174
|
+
if (code.indexOf('<html') >= 0)
|
|
175
|
+
doc.write(code);
|
|
176
|
+
else
|
|
177
|
+
doc.write(code_html(code));
|
|
178
|
+
doc.close();
|
|
179
|
+
};
|
|
180
|
+
run_code(code);
|
|
181
|
+
if (hide_src || !textarea || textarea.nodeName !== 'TEXTAREA')
|
|
182
|
+
return;
|
|
183
|
+
if (typeof CodeMirror === 'undefined') {
|
|
184
|
+
textarea.onkeyup = () => run_code(textarea.value);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
if (!textarea.editor) {
|
|
188
|
+
textarea.editor = CodeMirror.fromTextArea(textarea, {
|
|
189
|
+
lineNumbers: true,
|
|
190
|
+
mode: 'jsx'
|
|
191
|
+
});
|
|
192
|
+
textarea.editor.on('change', (cm) => run_code(cm.getValue()));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
class Play extends Component {
|
|
197
|
+
constructor() {
|
|
198
|
+
super(...arguments);
|
|
199
|
+
this.view = (state) => {
|
|
200
|
+
const code_id = state['code-element-id'];
|
|
201
|
+
const element = this.element;
|
|
202
|
+
let code_area, code;
|
|
203
|
+
if (code_id) {
|
|
204
|
+
code_area = document.getElementById(code_id);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
code_area = element.previousElementSibling ||
|
|
208
|
+
element.parentElement.previousElementSibling;
|
|
209
|
+
}
|
|
210
|
+
code = code_area?.innerText // from div-code
|
|
211
|
+
|| code_area?.value // from textarea
|
|
212
|
+
|| state['code']; // from code attr
|
|
213
|
+
this.state.code_area = code_area;
|
|
214
|
+
this.state.code = code;
|
|
215
|
+
return code ? app.h(app.Fragment, null,
|
|
216
|
+
app.h("div", { class: "toolbox" }, !state.hide_button && app.h("a", { class: "button", "$onclick": "show-popup" }, "Try the Code")))
|
|
217
|
+
: app.h("div", null, "AppRun Play cannot find code to run, please set code-element-id or code.");
|
|
218
|
+
};
|
|
219
|
+
this.rendered = ({ style, hide_src, code_area, code }) => {
|
|
220
|
+
if (!code)
|
|
221
|
+
return;
|
|
222
|
+
if (!document.getElementById('play-popup')) {
|
|
223
|
+
document.body.insertAdjacentHTML('beforeend', popup_div);
|
|
224
|
+
const textarea = document.querySelector(".apprun-play .editor");
|
|
225
|
+
const iframe = document.querySelector('.apprun-play .preview');
|
|
226
|
+
textarea.value = code;
|
|
227
|
+
setup_editor(textarea, iframe, code, false);
|
|
228
|
+
}
|
|
229
|
+
const iframe = document.createElement('iframe');
|
|
230
|
+
iframe.classList.add('apprun-preview');
|
|
231
|
+
iframe.style.cssText = style;
|
|
232
|
+
this.element.before(iframe);
|
|
233
|
+
if (hide_src)
|
|
234
|
+
code_area.style.display = 'none';
|
|
235
|
+
setup_editor(code_area, iframe, code, hide_src);
|
|
236
|
+
};
|
|
237
|
+
this.update = {
|
|
238
|
+
'show-popup': ({ code }) => {
|
|
239
|
+
const textarea = document.querySelector(".apprun-play .editor");
|
|
240
|
+
textarea.editor?.setValue(code);
|
|
241
|
+
document.getElementById('play-popup').classList.add('show');
|
|
242
|
+
},
|
|
243
|
+
'@close-popup': () => { document.getElementById('play-popup').classList.remove('show'); },
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
app.webComponent('apprun-play', Play);
|
|
248
|
+
//# sourceMappingURL=apprun-play.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apprun-play.js","sourceRoot":"","sources":["../src/apprun-play.tsx"],"names":[],"mappings":"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"}
|
package/esm/apprun.js
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main AppRun framework entry point
|
|
3
|
+
*
|
|
4
|
+
* This file:
|
|
5
|
+
* 1. Assembles core AppRun modules into a complete framework
|
|
6
|
+
* 2. Exports public API and types
|
|
7
|
+
* 3. Initializes global app instance with:
|
|
8
|
+
* - Virtual DOM rendering
|
|
9
|
+
* - Component system
|
|
10
|
+
* - Router with improved null safety
|
|
11
|
+
* - Web component support
|
|
12
|
+
* - Type-safe React integration
|
|
13
|
+
* - Component batch mounting system
|
|
14
|
+
*
|
|
15
|
+
* Key exports:
|
|
16
|
+
* - app: Global event system instance
|
|
17
|
+
* - Component: Base component class
|
|
18
|
+
* - Decorators: @on, @update, @customElement
|
|
19
|
+
* - Router events and configuration
|
|
20
|
+
* - Web component registration
|
|
21
|
+
* - trustedHTML: Parses caller-owned trusted HTML
|
|
22
|
+
*
|
|
23
|
+
* Features:
|
|
24
|
+
* - Event-driven architecture with pub/sub pattern
|
|
25
|
+
* - Virtual DOM rendering with multiple renderer support
|
|
26
|
+
* - Component lifecycle management
|
|
27
|
+
* - Client-side routing with hash/path support and native link behavior guards
|
|
28
|
+
* - Web Components integration
|
|
29
|
+
* - React compatibility layer
|
|
30
|
+
* - TypeScript support with strong typing
|
|
31
|
+
* - Batch component mounting with addComponents(element, components)
|
|
32
|
+
*
|
|
33
|
+
* Type Safety Improvements (v3.35.1):
|
|
34
|
+
* - Added null checks for DOM event targets
|
|
35
|
+
* - Browser script-tag globals are limited to the app singleton in core builds
|
|
36
|
+
* - Enhanced React integration parameter validation
|
|
37
|
+
* - Better error handling for invalid event handlers
|
|
38
|
+
* - Safer element access with proper type assertions
|
|
39
|
+
*
|
|
40
|
+
* Recent Changes:
|
|
41
|
+
* - Modified addComponents to accept (element, components) where components is a key-value object with routes as keys and components as values
|
|
42
|
+
* - Simplified component mounting API for better usability
|
|
43
|
+
*
|
|
44
|
+
* Usage:
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { app, Component } from 'apprun';
|
|
47
|
+
*
|
|
48
|
+
* // Create components
|
|
49
|
+
* class MyComponent extends Component {
|
|
50
|
+
* state = // Initial state
|
|
51
|
+
* view = state => // Render view
|
|
52
|
+
* update = {
|
|
53
|
+
* 'event': (state, ...args) => // Handle events
|
|
54
|
+
* }
|
|
55
|
+
* }
|
|
56
|
+
*
|
|
57
|
+
* // Mount multiple components
|
|
58
|
+
* app.addComponents(document.body, {
|
|
59
|
+
* '/home': MyComponent,
|
|
60
|
+
* '/about': AnotherComponent
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
import _app, { App } from './app';
|
|
65
|
+
import { createElement, render, Fragment, trustedHTML, safeHTML } from './vdom';
|
|
66
|
+
import { Component } from './component';
|
|
67
|
+
import { on, update, customElement } from './decorator';
|
|
68
|
+
import { route, ROUTER_EVENT, ROUTER_404_EVENT } from './router';
|
|
69
|
+
import webComponent from './web-component';
|
|
70
|
+
import addComponents from './add-components';
|
|
71
|
+
import { APPRUN_VERSION } from './version';
|
|
72
|
+
const app = _app;
|
|
73
|
+
export default app;
|
|
74
|
+
const shouldRouteLinkClick = (e, menu) => {
|
|
75
|
+
if (!menu)
|
|
76
|
+
return false;
|
|
77
|
+
if (e.defaultPrevented)
|
|
78
|
+
return false;
|
|
79
|
+
if (e.button !== 0)
|
|
80
|
+
return false;
|
|
81
|
+
if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey)
|
|
82
|
+
return false;
|
|
83
|
+
if (menu.target && menu.target.toLowerCase() !== '_self')
|
|
84
|
+
return false;
|
|
85
|
+
if (menu.hasAttribute('download'))
|
|
86
|
+
return false;
|
|
87
|
+
if ((menu.getAttribute('rel') || '').toLowerCase().split(/\s+/).includes('external'))
|
|
88
|
+
return false;
|
|
89
|
+
return menu.origin === location.origin && !!menu.pathname;
|
|
90
|
+
};
|
|
91
|
+
const routeLinkClick = (e, menu) => {
|
|
92
|
+
if (!shouldRouteLinkClick(e, menu))
|
|
93
|
+
return false;
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
// Handle base path for navigation
|
|
96
|
+
const basePath = app.basePath || '';
|
|
97
|
+
const fullPath = basePath + menu.pathname;
|
|
98
|
+
history.pushState(null, '', fullPath);
|
|
99
|
+
route(menu.pathname); // Route with relative path (without base path)
|
|
100
|
+
return true;
|
|
101
|
+
};
|
|
102
|
+
export { App, app, Component, on, update, Fragment, trustedHTML, safeHTML };
|
|
103
|
+
export { update as event };
|
|
104
|
+
export { ROUTER_EVENT, ROUTER_404_EVENT };
|
|
105
|
+
export { customElement };
|
|
106
|
+
if (!app.start) {
|
|
107
|
+
app.version = APPRUN_VERSION;
|
|
108
|
+
app.h = app.createElement = createElement;
|
|
109
|
+
app.render = render;
|
|
110
|
+
app.Fragment = Fragment;
|
|
111
|
+
app.webComponent = webComponent;
|
|
112
|
+
app.trustedHTML = trustedHTML;
|
|
113
|
+
app.safeHTML = safeHTML;
|
|
114
|
+
app.start = (element, state, view, update, options) => {
|
|
115
|
+
const opts = { render: true, global_event: true, ...options };
|
|
116
|
+
const component = new Component(state, view, update);
|
|
117
|
+
if (options && options.rendered)
|
|
118
|
+
component.rendered = options.rendered;
|
|
119
|
+
if (options && options.mounted)
|
|
120
|
+
component.mounted = options.mounted;
|
|
121
|
+
component.start(element, opts);
|
|
122
|
+
return component;
|
|
123
|
+
};
|
|
124
|
+
const NOOP = _ => { };
|
|
125
|
+
app.on('/', NOOP);
|
|
126
|
+
app.on('debug', _ => NOOP);
|
|
127
|
+
app.on(ROUTER_EVENT, NOOP);
|
|
128
|
+
app.on(ROUTER_404_EVENT, NOOP);
|
|
129
|
+
app.route = route;
|
|
130
|
+
app.on('route', url => app['route'] && app['route'](url));
|
|
131
|
+
if (typeof document === 'object') {
|
|
132
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
133
|
+
const no_init_route = document.body.hasAttribute('apprun-no-init') || app['no-init-route'] || false;
|
|
134
|
+
const use_hash = app.find('#') || app.find('#/') || false;
|
|
135
|
+
// console.log(`AppRun ${app.version} started with ${use_hash ? 'hash' : 'path'} routing. Initial load: ${init_load ? 'disabled' : 'enabled'}.`);
|
|
136
|
+
window.addEventListener('hashchange', () => route(location.hash));
|
|
137
|
+
window.addEventListener('popstate', () => route(location.pathname));
|
|
138
|
+
if (use_hash) {
|
|
139
|
+
!no_init_route && route(location.hash);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
!no_init_route && (() => {
|
|
143
|
+
const basePath = app.basePath || '';
|
|
144
|
+
let initialPath = location.pathname;
|
|
145
|
+
// Strip base path if present
|
|
146
|
+
if (basePath && initialPath.startsWith(basePath)) {
|
|
147
|
+
initialPath = initialPath.substring(basePath.length);
|
|
148
|
+
if (!initialPath.startsWith('/'))
|
|
149
|
+
initialPath = '/' + initialPath;
|
|
150
|
+
}
|
|
151
|
+
route(initialPath);
|
|
152
|
+
})();
|
|
153
|
+
document.body.addEventListener('click', e => {
|
|
154
|
+
const target = e.target;
|
|
155
|
+
const element = target instanceof Element ? target : target?.parentElement;
|
|
156
|
+
if (!element)
|
|
157
|
+
return;
|
|
158
|
+
const menu = (element.tagName === 'A' ? element : element.closest('a'));
|
|
159
|
+
routeLinkClick(e, menu);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (typeof window === 'object') {
|
|
165
|
+
const globalWindow = window;
|
|
166
|
+
globalWindow['Component'] = Component;
|
|
167
|
+
globalWindow['on'] = on;
|
|
168
|
+
globalWindow['customElement'] = customElement;
|
|
169
|
+
globalWindow['trustedHTML'] = trustedHTML;
|
|
170
|
+
globalWindow['safeHTML'] = safeHTML;
|
|
171
|
+
}
|
|
172
|
+
app.use_render = (render, mode = 0) => {
|
|
173
|
+
if (mode === 0) {
|
|
174
|
+
app.render = (el, vdom) => render(vdom, el); // react style
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
app.render = (el, vdom) => render(el, vdom); // apprun style
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
app.use_react = (React, ReactDOM) => {
|
|
181
|
+
if (!React || !ReactDOM) {
|
|
182
|
+
console.error('AppRun use_react: React and ReactDOM parameters are required');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (typeof React.createElement !== 'function') {
|
|
186
|
+
console.error('AppRun use_react: Invalid React object - createElement method not found');
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!React.Fragment) {
|
|
190
|
+
console.error('AppRun use_react: Invalid React object - Fragment not found');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
app.h = app.createElement = React.createElement;
|
|
194
|
+
app.Fragment = React.Fragment;
|
|
195
|
+
// React 18+ uses createRoot API
|
|
196
|
+
if (React.version && React.version.startsWith('18')) {
|
|
197
|
+
if (!ReactDOM.createRoot || typeof ReactDOM.createRoot !== 'function') {
|
|
198
|
+
console.error('AppRun use_react: ReactDOM.createRoot not found in React 18+');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
app.render = (el, vdom) => {
|
|
202
|
+
if (!el || vdom === undefined)
|
|
203
|
+
return;
|
|
204
|
+
if (!el._root)
|
|
205
|
+
el._root = ReactDOM.createRoot(el);
|
|
206
|
+
el._root.render(vdom);
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// Legacy React versions
|
|
211
|
+
if (!ReactDOM.render || typeof ReactDOM.render !== 'function') {
|
|
212
|
+
console.error('AppRun use_react: ReactDOM.render not found in legacy React');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
app.render = (el, vdom) => ReactDOM.render(vdom, el);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
app.addComponents = addComponents;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=apprun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apprun.js","sourceRoot":"","sources":["../src/apprun.ts"],"names":[],"mappings":"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"}
|