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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type Safety Utilities for AppRun
|
|
3
|
+
*
|
|
4
|
+
* This file provides utility functions and types to improve type safety
|
|
5
|
+
* across the AppRun framework, including:
|
|
6
|
+
* 1. Safe type assertions with null checks
|
|
7
|
+
* 2. Global object assignment helpers
|
|
8
|
+
* 3. Event target type guards
|
|
9
|
+
* 4. Function validation utilities
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Safely cast event target to specific HTML element type with null check
|
|
13
|
+
*/
|
|
14
|
+
export function safeEventTarget(event) {
|
|
15
|
+
return event?.target instanceof HTMLElement ? event.target : null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Type guard to check if an object is a valid function
|
|
19
|
+
*/
|
|
20
|
+
export function isFunction(obj) {
|
|
21
|
+
return typeof obj === 'function';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Type guard to check if an object is a valid HTML element
|
|
25
|
+
*/
|
|
26
|
+
export function isHTMLElement(obj) {
|
|
27
|
+
return obj instanceof HTMLElement;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Safely assign properties to global object with type checking
|
|
31
|
+
*/
|
|
32
|
+
export function safeGlobalAssign(globalObj, assignments) {
|
|
33
|
+
if (typeof globalObj === 'object' && globalObj !== null) {
|
|
34
|
+
Object.keys(assignments).forEach(key => {
|
|
35
|
+
globalObj[key] = assignments[key];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Safely get property from global object with fallback
|
|
41
|
+
*/
|
|
42
|
+
export function safeGlobalGet(globalObj, property, fallback) {
|
|
43
|
+
if (typeof globalObj === 'object' && globalObj !== null) {
|
|
44
|
+
return globalObj[property] ?? fallback;
|
|
45
|
+
}
|
|
46
|
+
return fallback;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Type-safe wrapper for DOM element queries
|
|
50
|
+
*/
|
|
51
|
+
export function safeQuerySelector(selector, context = document) {
|
|
52
|
+
try {
|
|
53
|
+
return context.querySelector(selector);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.warn(`Invalid selector: ${selector}`, error);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Type-safe wrapper for DOM element by ID
|
|
62
|
+
*/
|
|
63
|
+
export function safeGetElementById(id) {
|
|
64
|
+
try {
|
|
65
|
+
return document.getElementById(id);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.warn(`Error getting element by id: ${id}`, error);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Validate and safely execute a function with error handling
|
|
74
|
+
*/
|
|
75
|
+
export function safeExecute(fn, args, context, errorMessage) {
|
|
76
|
+
if (!isFunction(fn)) {
|
|
77
|
+
if (errorMessage) {
|
|
78
|
+
console.warn(errorMessage, fn);
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
return context ? fn.apply(context, args) : fn(...args);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error(errorMessage || 'Error executing function:', error);
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=type-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../src/type-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAsC,KAAY;IAC/E,OAAO,KAAK,EAAE,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAQ;IACjC,OAAO,OAAO,GAAG,KAAK,UAAU,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAQ;IACpC,OAAO,GAAG,YAAY,WAAW,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAc,EACd,WAAc;IAEd,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrC,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAc,EACd,QAAgB,EAChB,QAAY;IAEZ,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,UAA8B,QAAQ;IAEtC,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,aAAa,CAAI,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qBAAqB,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAU;IAEV,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAa,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,EAA0C,EAC1C,IAAO,EACP,OAAa,EACb,YAAqB;IAErB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/esm/types.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core TypeScript Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* This file defines the fundamental types used across AppRun:
|
|
5
|
+
* 1. Component Types
|
|
6
|
+
* - View: Function that renders state to VDOM
|
|
7
|
+
* - Action: Function that updates state (sync/async/generator)
|
|
8
|
+
* - Update: Collection of actions (array or object format)
|
|
9
|
+
* - ActionDef: Tuple definition for action arrays
|
|
10
|
+
*
|
|
11
|
+
* 2. Virtual DOM Types
|
|
12
|
+
* - VNode: Virtual DOM node structure with tag/props/children
|
|
13
|
+
* - VDOM: Union of possible VDOM types (false, string, VNode, array)
|
|
14
|
+
* - Element: DOM element references (HTMLElement or string selector)
|
|
15
|
+
* - TemplateResult: Lit-html template support
|
|
16
|
+
*
|
|
17
|
+
* 3. Configuration Types
|
|
18
|
+
* - EventOptions: Event handler options (once, delay, transition, global)
|
|
19
|
+
* - ActionOptions: Action behavior options (render, history, global, callback)
|
|
20
|
+
* - MountOptions: Component mounting options (global events, routing, transitions)
|
|
21
|
+
* - AppStartOptions: Application startup configuration with lifecycle hooks
|
|
22
|
+
*
|
|
23
|
+
* Features:
|
|
24
|
+
* - Strong typing for component lifecycle
|
|
25
|
+
* - Flexible action definition formats
|
|
26
|
+
* - Comprehensive event options
|
|
27
|
+
* - Integration with external libraries (lit-html)
|
|
28
|
+
* - Type-safe component mounting
|
|
29
|
+
* - Lifecycle hook typing
|
|
30
|
+
*
|
|
31
|
+
* Type Safety Improvements (v3.35.1):
|
|
32
|
+
* - Enhanced generic constraints for better type inference
|
|
33
|
+
* - Improved union types for VDOM flexibility
|
|
34
|
+
* - Better callback typing in options
|
|
35
|
+
* - Stricter typing for lifecycle methods
|
|
36
|
+
* - Added support for async generator and generator functions in Action types
|
|
37
|
+
* - Phase 3 removed `any` escape hatches from public options and typed history.
|
|
38
|
+
*
|
|
39
|
+
* Usage:
|
|
40
|
+
* ```ts
|
|
41
|
+
* class MyComponent extends Component<State, Events> {
|
|
42
|
+
* view: View<State>;
|
|
43
|
+
* update: Update<State, Events>;
|
|
44
|
+
* }
|
|
45
|
+
*
|
|
46
|
+
* // Type-safe action definitions with async generators
|
|
47
|
+
* const update: Update<State> = {
|
|
48
|
+
* 'event': (state: State, ...args) => newState,
|
|
49
|
+
* 'stream-event': async function* (state: State, ...args) {
|
|
50
|
+
* yield { ...state, loading: true };
|
|
51
|
+
* const data = await fetchData();
|
|
52
|
+
* yield { ...state, data, loading: false };
|
|
53
|
+
* }
|
|
54
|
+
* };
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=types.js.map
|
package/esm/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createElement, updateElement, Fragment } from './vdom-my';
|
|
2
|
+
import { render, svg, html, noChange } from 'lit';
|
|
3
|
+
import { directive, Directive, PartType } from 'lit/directive.js';
|
|
4
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
|
|
5
|
+
import app from './apprun';
|
|
6
|
+
function _render(element, vdom, parent) {
|
|
7
|
+
if (!vdom)
|
|
8
|
+
return;
|
|
9
|
+
if (typeof vdom === 'string') {
|
|
10
|
+
if (!element['_$litPart$'])
|
|
11
|
+
element.replaceChildren();
|
|
12
|
+
render(html `${unsafeHTML(vdom)}`, element);
|
|
13
|
+
}
|
|
14
|
+
else if (vdom['_$litType$']) {
|
|
15
|
+
if (!element['_$litPart$'])
|
|
16
|
+
element.replaceChildren();
|
|
17
|
+
render(vdom, element);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
updateElement(element, vdom, parent);
|
|
21
|
+
element['_$litPart$'] = undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export class RunDirective extends Directive {
|
|
25
|
+
constructor(partInfo) {
|
|
26
|
+
super(partInfo);
|
|
27
|
+
// When necessary, validate part in constructor using `part.type`
|
|
28
|
+
if (partInfo.type !== PartType.EVENT) { // In lit v3, use PartType.EVENT
|
|
29
|
+
throw new Error('run() can only be used in event handlers');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Override update to perform any direct DOM manipulation
|
|
33
|
+
update(part, props) {
|
|
34
|
+
/* Any imperative updates to DOM/parts would go here */
|
|
35
|
+
const element = part.element;
|
|
36
|
+
const name = part.name;
|
|
37
|
+
const [eventOrFn, ...args] = props;
|
|
38
|
+
const getComponent = () => {
|
|
39
|
+
let el = element;
|
|
40
|
+
let component = el['_component'];
|
|
41
|
+
while (!component && el) {
|
|
42
|
+
el = el.parentElement;
|
|
43
|
+
component = el && el['_component'];
|
|
44
|
+
}
|
|
45
|
+
console.assert(!!component, 'Component not found.');
|
|
46
|
+
return component;
|
|
47
|
+
};
|
|
48
|
+
if (typeof eventOrFn === 'string') {
|
|
49
|
+
element[`on${name}`] = e => {
|
|
50
|
+
const component = getComponent();
|
|
51
|
+
component ? component.run(eventOrFn, ...args, e) : app.run(eventOrFn, ...args, e);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
else if (typeof eventOrFn === 'function') {
|
|
55
|
+
element[`on${name}`] = e => getComponent().setState(eventOrFn(getComponent().state, ...args, e));
|
|
56
|
+
}
|
|
57
|
+
return this.render();
|
|
58
|
+
}
|
|
59
|
+
render() {
|
|
60
|
+
return noChange;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const run = directive(RunDirective);
|
|
64
|
+
export { createElement, Fragment, html, svg, _render as render, run };
|
|
65
|
+
//# sourceMappingURL=vdom-lit-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vdom-lit-html.js","sourceRoot":"","sources":["../src/vdom-lit-html.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VDOM Property and Attribute Handler
|
|
3
|
+
* Standards-compliant property/attribute handling with caching and special element support
|
|
4
|
+
* Features: Skip logic for preserving user interactions during VDOM reconciliation
|
|
5
|
+
* Exports: updateProps - Main function for DOM element property updates
|
|
6
|
+
* Updated: 2025-01-14 - Skip logic for focus-sensitive (selection), scroll, and media properties
|
|
7
|
+
*/
|
|
8
|
+
import { find, html, svg } from 'property-information';
|
|
9
|
+
const ATTR_PROPS = '_props';
|
|
10
|
+
const propertyInfoCache = new Map();
|
|
11
|
+
// Merge old and new props, handling className -> class conversion and null cleanup
|
|
12
|
+
function mergeProps(oldProps, newProps) {
|
|
13
|
+
if (newProps) {
|
|
14
|
+
newProps['class'] = newProps['class'] || newProps['className'];
|
|
15
|
+
delete newProps['className'];
|
|
16
|
+
}
|
|
17
|
+
if (!oldProps || Object.keys(oldProps).length === 0)
|
|
18
|
+
return newProps || {};
|
|
19
|
+
if (!newProps || Object.keys(newProps).length === 0) {
|
|
20
|
+
const props = {};
|
|
21
|
+
Object.keys(oldProps).forEach(p => props[p] = null);
|
|
22
|
+
return props;
|
|
23
|
+
}
|
|
24
|
+
const props = {};
|
|
25
|
+
Object.keys(oldProps).forEach(p => {
|
|
26
|
+
if (!(p in newProps))
|
|
27
|
+
props[p] = null;
|
|
28
|
+
});
|
|
29
|
+
Object.keys(newProps).forEach(p => props[p] = newProps[p]);
|
|
30
|
+
return props;
|
|
31
|
+
}
|
|
32
|
+
// Convert kebab-case to camelCase for dataset keys
|
|
33
|
+
function convertKebabToCamelCase(str) {
|
|
34
|
+
if (str.length <= 1)
|
|
35
|
+
return str.toLowerCase();
|
|
36
|
+
return str.split('-').map((word, index) => index === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join('');
|
|
37
|
+
}
|
|
38
|
+
// Cached property information lookup
|
|
39
|
+
function getPropertyInfo(name, isSvg) {
|
|
40
|
+
const cacheKey = `${name}:${isSvg}`;
|
|
41
|
+
let info = propertyInfoCache.get(cacheKey);
|
|
42
|
+
if (info === undefined) {
|
|
43
|
+
info = find(isSvg ? svg : html, name) || null;
|
|
44
|
+
propertyInfoCache.set(cacheKey, info);
|
|
45
|
+
}
|
|
46
|
+
return info;
|
|
47
|
+
}
|
|
48
|
+
// Specialized handlers for different attribute types
|
|
49
|
+
function setDatasetAttribute(element, attributeName, value) {
|
|
50
|
+
const camelKey = convertKebabToCamelCase(attributeName.slice(5));
|
|
51
|
+
if (value == null) {
|
|
52
|
+
delete element.dataset[camelKey];
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
element.dataset[camelKey] = String(value);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function setEventHandler(element, name, value) {
|
|
59
|
+
if (!name.startsWith('on'))
|
|
60
|
+
return;
|
|
61
|
+
if (!value || typeof value === 'function') {
|
|
62
|
+
element[name] = value;
|
|
63
|
+
}
|
|
64
|
+
else if (typeof value === 'string') {
|
|
65
|
+
if (value)
|
|
66
|
+
element.setAttribute(name, value);
|
|
67
|
+
else
|
|
68
|
+
element.removeAttribute(name);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function setBooleanAttribute(element, attributeName, value) {
|
|
72
|
+
if (shouldSetBooleanAttribute(value)) {
|
|
73
|
+
element.setAttribute(attributeName, attributeName);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
element.removeAttribute(attributeName);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function setElementProperty(element, propertyName, value) {
|
|
80
|
+
try {
|
|
81
|
+
element[propertyName] = value;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
setElementAttribute(element, propertyName, value, false);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function setElementAttribute(element, attributeName, value, isSvg) {
|
|
88
|
+
if (value == null) {
|
|
89
|
+
element.removeAttribute(attributeName);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const stringValue = String(value);
|
|
93
|
+
if (isSvg && attributeName.includes(':')) {
|
|
94
|
+
const [prefix] = attributeName.split(':');
|
|
95
|
+
if (prefix === 'xlink') {
|
|
96
|
+
element.setAttributeNS('http://www.w3.org/1999/xlink', attributeName, stringValue);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
element.setAttribute(attributeName, stringValue);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
element.setAttribute(attributeName, stringValue);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function shouldSetBooleanAttribute(value) {
|
|
107
|
+
if (value == null || value === false || value === '')
|
|
108
|
+
return false;
|
|
109
|
+
if (value === true)
|
|
110
|
+
return true;
|
|
111
|
+
if (typeof value === 'string') {
|
|
112
|
+
const lowerValue = value.toLowerCase();
|
|
113
|
+
return lowerValue !== 'false' && value !== '0';
|
|
114
|
+
}
|
|
115
|
+
return Boolean(value);
|
|
116
|
+
}
|
|
117
|
+
// Core property/attribute setting function - handles all property types with skip logic
|
|
118
|
+
function setAttributeOrProperty(element, name, value, isSvg) {
|
|
119
|
+
// Check if we should skip this property update to preserve user interaction
|
|
120
|
+
if (shouldSkipPatch(element, name)) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Special cases with dedicated handling
|
|
124
|
+
if (name === 'style') {
|
|
125
|
+
if (element.style.cssText)
|
|
126
|
+
element.style.cssText = '';
|
|
127
|
+
if (typeof value === 'string')
|
|
128
|
+
element.style.cssText = value;
|
|
129
|
+
else if (value && typeof value === 'object') {
|
|
130
|
+
for (const s in value) {
|
|
131
|
+
if (element.style[s] !== value[s])
|
|
132
|
+
element.style[s] = value[s];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (name === 'key') {
|
|
138
|
+
if (value !== undefined && value !== null)
|
|
139
|
+
element.key = value;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (name.startsWith('data-')) {
|
|
143
|
+
setDatasetAttribute(element, name, value);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (name.startsWith('on')) {
|
|
147
|
+
setEventHandler(element, name, value);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Form elements with special property requirements
|
|
151
|
+
if ((element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') &&
|
|
152
|
+
(name === 'value' || name === 'selected' || name === 'selectedIndex')) {
|
|
153
|
+
setElementProperty(element, name, value);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Input checked needs both property and attribute
|
|
157
|
+
if (element.tagName === 'INPUT' && name === 'checked') {
|
|
158
|
+
setElementProperty(element, name, value);
|
|
159
|
+
setBooleanAttribute(element, name, value);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Use property information for standard attributes
|
|
163
|
+
const info = getPropertyInfo(name, isSvg);
|
|
164
|
+
if (info) {
|
|
165
|
+
if (info.boolean || info.overloadedBoolean) {
|
|
166
|
+
setBooleanAttribute(element, info.attribute, value);
|
|
167
|
+
}
|
|
168
|
+
else if (info.mustUseProperty && !isSvg) {
|
|
169
|
+
setElementProperty(element, info.property, value);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
setElementAttribute(element, info.attribute, value, isSvg);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// Fallback handling for unknown attributes
|
|
177
|
+
if (name.startsWith('aria-') || name === 'role') {
|
|
178
|
+
setElementAttribute(element, name, value, isSvg);
|
|
179
|
+
}
|
|
180
|
+
else if (name in element || element[name] !== undefined) {
|
|
181
|
+
setElementProperty(element, name, value);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
setElementAttribute(element, name, value, isSvg);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Skip logic for preventing user interaction disruption during VDOM reconciliation
|
|
189
|
+
function shouldSkipPatch(dom, prop) {
|
|
190
|
+
if (document.activeElement === dom) {
|
|
191
|
+
return ['selectionStart', 'selectionEnd', 'selectionDirection']
|
|
192
|
+
.includes(prop);
|
|
193
|
+
}
|
|
194
|
+
if (prop === 'scrollTop' || prop === 'scrollLeft') {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
if (dom instanceof HTMLMediaElement &&
|
|
198
|
+
['currentTime', 'paused', 'playbackRate', 'volume'].includes(prop)) {
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
return false; // default: allow normal diff logic
|
|
202
|
+
}
|
|
203
|
+
function isValidAttributeName(name) {
|
|
204
|
+
return /^[a-zA-Z_:][\w\-:.]*$/.test(name) &&
|
|
205
|
+
!name.includes('<') && !name.includes('>') && !name.includes('"') && !name.includes("'");
|
|
206
|
+
}
|
|
207
|
+
// Main exported function for updating element properties
|
|
208
|
+
export function updateProps(element, props, isSvg) {
|
|
209
|
+
// console.assert(!!element);
|
|
210
|
+
const cached = element[ATTR_PROPS] || {};
|
|
211
|
+
const merged = mergeProps(cached, props);
|
|
212
|
+
element[ATTR_PROPS] = props || {};
|
|
213
|
+
applyPropertiesToElement(element, merged, props, isSvg);
|
|
214
|
+
}
|
|
215
|
+
// Apply merged properties to element with ref handling
|
|
216
|
+
function applyPropertiesToElement(element, mergedProps, originalProps, isSvg) {
|
|
217
|
+
for (const name in mergedProps) {
|
|
218
|
+
if (isValidAttributeName(name)) {
|
|
219
|
+
setAttributeOrProperty(element, name, mergedProps[name], isSvg);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Handle ref callback
|
|
223
|
+
if (mergedProps && typeof mergedProps['ref'] === 'function') {
|
|
224
|
+
window.requestAnimationFrame(() => mergedProps['ref'](element));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=vdom-my-prop-attr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vdom-my-prop-attr.js","sourceRoot":"","sources":["../src/vdom-my-prop-attr.ts"],"names":[],"mappings":"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"}
|