@siddh-dev/fabric 0.1.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/LICENSE +21 -0
- package/README.md +430 -0
- package/dist/core/component/ComponentInstance.d.ts +2 -0
- package/dist/core/component/ComponentInstance.js +15 -0
- package/dist/core/component/ComponentInstance.js.map +1 -0
- package/dist/core/component/ComponentRuntime.d.ts +3 -0
- package/dist/core/component/ComponentRuntime.js +19 -0
- package/dist/core/component/ComponentRuntime.js.map +1 -0
- package/dist/core/hooks/HookRuntime.d.ts +3 -0
- package/dist/core/hooks/HookRuntime.js +11 -0
- package/dist/core/hooks/HookRuntime.js.map +1 -0
- package/dist/core/hooks/useEffect.d.ts +4 -0
- package/dist/core/hooks/useEffect.js +68 -0
- package/dist/core/hooks/useEffect.js.map +1 -0
- package/dist/core/hooks/useState.d.ts +7 -0
- package/dist/core/hooks/useState.js +35 -0
- package/dist/core/hooks/useState.js.map +1 -0
- package/dist/core/jsx/jsx-dev-runtime.d.ts +2 -0
- package/dist/core/jsx/jsx-dev-runtime.js +5 -0
- package/dist/core/jsx/jsx-dev-runtime.js.map +1 -0
- package/dist/core/jsx/jsx-runtime.d.ts +3 -0
- package/dist/core/jsx/jsx-runtime.js +8 -0
- package/dist/core/jsx/jsx-runtime.js.map +1 -0
- package/dist/core/jsx/jsx.d.ts +68 -0
- package/dist/core/jsx/jsx.js +46 -0
- package/dist/core/jsx/jsx.js.map +1 -0
- package/dist/core/scheduler/Scheduler.d.ts +3 -0
- package/dist/core/scheduler/Scheduler.js +21 -0
- package/dist/core/scheduler/Scheduler.js.map +1 -0
- package/dist/core/vnode/VNode.d.ts +34 -0
- package/dist/core/vnode/VNode.js +24 -0
- package/dist/core/vnode/VNode.js.map +1 -0
- package/dist/core/vnode/createElement.d.ts +2 -0
- package/dist/core/vnode/createElement.js +5 -0
- package/dist/core/vnode/createElement.js.map +1 -0
- package/dist/dom/DOMProperties.d.ts +2 -0
- package/dist/dom/DOMProperties.js +46 -0
- package/dist/dom/DOMProperties.js.map +1 -0
- package/dist/dom/EventSystem.d.ts +7 -0
- package/dist/dom/EventSystem.js +53 -0
- package/dist/dom/EventSystem.js.map +1 -0
- package/dist/dom/Reconciler.d.ts +20 -0
- package/dist/dom/Reconciler.js +326 -0
- package/dist/dom/Reconciler.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/createRoot.d.ts +6 -0
- package/dist/runtime/createRoot.js +25 -0
- package/dist/runtime/createRoot.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { VNode } from "../vnode/VNode.js";
|
|
2
|
+
import type { IProps, TVNodeChild, TVNodeType } from "../vnode/VNode.js";
|
|
3
|
+
interface IJSXEventProps {
|
|
4
|
+
onClick?: (event: MouseEvent) => void;
|
|
5
|
+
onDblClick?: (event: MouseEvent) => void;
|
|
6
|
+
onMouseDown?: (event: MouseEvent) => void;
|
|
7
|
+
onMouseUp?: (event: MouseEvent) => void;
|
|
8
|
+
onMouseMove?: (event: MouseEvent) => void;
|
|
9
|
+
onMouseEnter?: (event: MouseEvent) => void;
|
|
10
|
+
onMouseLeave?: (event: MouseEvent) => void;
|
|
11
|
+
onInput?: (event: Event) => void;
|
|
12
|
+
onChange?: (event: Event) => void;
|
|
13
|
+
onSubmit?: (event: SubmitEvent) => void;
|
|
14
|
+
onKeyDown?: (event: KeyboardEvent) => void;
|
|
15
|
+
onKeyUp?: (event: KeyboardEvent) => void;
|
|
16
|
+
onFocus?: (event: FocusEvent) => void;
|
|
17
|
+
onBlur?: (event: FocusEvent) => void;
|
|
18
|
+
}
|
|
19
|
+
interface IJSXElementProps extends IJSXEventProps {
|
|
20
|
+
[property: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
interface IJSXButtonProps extends IJSXElementProps {
|
|
23
|
+
onClick?: (event: MouseEvent) => void;
|
|
24
|
+
}
|
|
25
|
+
interface IJSXInputProps extends IJSXElementProps {
|
|
26
|
+
onInput?: (event: Event) => void;
|
|
27
|
+
onChange?: (event: Event) => void;
|
|
28
|
+
onKeyDown?: (event: KeyboardEvent) => void;
|
|
29
|
+
onKeyUp?: (event: KeyboardEvent) => void;
|
|
30
|
+
}
|
|
31
|
+
interface IJSXFormProps extends IJSXElementProps {
|
|
32
|
+
onSubmit?: (event: SubmitEvent) => void;
|
|
33
|
+
}
|
|
34
|
+
declare global {
|
|
35
|
+
namespace JSX {
|
|
36
|
+
interface Element extends VNode {
|
|
37
|
+
}
|
|
38
|
+
interface IntrinsicElements {
|
|
39
|
+
button: IJSXButtonProps;
|
|
40
|
+
input: IJSXInputProps;
|
|
41
|
+
form: IJSXFormProps;
|
|
42
|
+
div: IJSXElementProps;
|
|
43
|
+
span: IJSXElementProps;
|
|
44
|
+
p: IJSXElementProps;
|
|
45
|
+
strong: IJSXElementProps;
|
|
46
|
+
br: IJSXElementProps;
|
|
47
|
+
hr: IJSXElementProps;
|
|
48
|
+
h1: IJSXElementProps;
|
|
49
|
+
h2: IJSXElementProps;
|
|
50
|
+
h3: IJSXElementProps;
|
|
51
|
+
h4: IJSXElementProps;
|
|
52
|
+
h5: IJSXElementProps;
|
|
53
|
+
h6: IJSXElementProps;
|
|
54
|
+
ul: IJSXElementProps;
|
|
55
|
+
ol: IJSXElementProps;
|
|
56
|
+
li: IJSXElementProps;
|
|
57
|
+
section: IJSXElementProps;
|
|
58
|
+
main: IJSXElementProps;
|
|
59
|
+
label: IJSXElementProps;
|
|
60
|
+
textarea: IJSXInputProps;
|
|
61
|
+
select: IJSXInputProps;
|
|
62
|
+
option: IJSXElementProps;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export declare function jsx(type: TVNodeType, props: IProps | null, ...children: TVNodeChild[]): VNode;
|
|
67
|
+
export declare function createAutomaticJSXVNode(type: TVNodeType, props: IProps | null): VNode;
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createElement } from "../vnode/createElement.js";
|
|
2
|
+
import { VNode } from "../vnode/VNode.js";
|
|
3
|
+
function getChildren(props) {
|
|
4
|
+
if (props === null ||
|
|
5
|
+
!("children" in props)) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
const children = props.children;
|
|
9
|
+
if (Array.isArray(children)) {
|
|
10
|
+
return children.filter((child) => typeof child === "string" ||
|
|
11
|
+
typeof child === "number" ||
|
|
12
|
+
child instanceof VNode);
|
|
13
|
+
}
|
|
14
|
+
if (typeof children === "string" ||
|
|
15
|
+
typeof children === "number" ||
|
|
16
|
+
children instanceof VNode) {
|
|
17
|
+
return [children];
|
|
18
|
+
}
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
function createJSXVNode(type, props) {
|
|
22
|
+
const children = getChildren(props);
|
|
23
|
+
const nextProps = props === null
|
|
24
|
+
? null
|
|
25
|
+
: { ...props };
|
|
26
|
+
if (nextProps !== null) {
|
|
27
|
+
delete nextProps.children;
|
|
28
|
+
}
|
|
29
|
+
return createElement(type, nextProps, ...children);
|
|
30
|
+
}
|
|
31
|
+
/*
|
|
32
|
+
* Classic JSX API
|
|
33
|
+
*
|
|
34
|
+
* Used when JSX is transformed through
|
|
35
|
+
* the classic jsxFactory configuration.
|
|
36
|
+
*/
|
|
37
|
+
export function jsx(type, props, ...children) {
|
|
38
|
+
return createElement(type, props, ...children);
|
|
39
|
+
}
|
|
40
|
+
/*
|
|
41
|
+
* Automatic JSX runtime implementation.
|
|
42
|
+
*/
|
|
43
|
+
export function createAutomaticJSXVNode(type, props) {
|
|
44
|
+
return createJSXVNode(type, props);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=jsx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/core/jsx/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EAChB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACH,KAAK,EACR,MAAM,mBAAmB,CAAC;AAgK3B,SAAS,WAAW,CAChB,KAAoB;IAEpB,IACI,KAAK,KAAK,IAAI;QACd,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,EACxB,CAAC;QACC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,MAAM,CAClB,CACI,KAAK,EACe,EAAE,CACtB,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,YAAY,KAAK,CAC7B,CAAC;IACN,CAAC;IAED,IACI,OAAO,QAAQ,KAAK,QAAQ;QAC5B,OAAO,QAAQ,KAAK,QAAQ;QAC5B,QAAQ,YAAY,KAAK,EAC3B,CAAC;QACC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CACnB,IAAgB,EAChB,KAAoB;IAEpB,MAAM,QAAQ,GACV,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvB,MAAM,SAAS,GACX,KAAK,KAAK,IAAI;QACV,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAC,GAAG,KAAK,EAAC,CAAC;IAErB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,OAAO,aAAa,CAChB,IAAI,EACJ,SAAS,EACT,GAAG,QAAQ,CACd,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CACf,IAAgB,EAChB,KAAoB,EACpB,GAAG,QAAuB;IAE1B,OAAO,aAAa,CAChB,IAAI,EACJ,KAAK,EACL,GAAG,QAAQ,CACd,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACnC,IAAgB,EAChB,KAAoB;IAEpB,OAAO,cAAc,CACjB,IAAI,EACJ,KAAK,CACR,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const updateQueue = new Set();
|
|
2
|
+
let scheduled = false;
|
|
3
|
+
export function scheduleUpdate(update) {
|
|
4
|
+
updateQueue.add(update);
|
|
5
|
+
if (scheduled) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
scheduled =
|
|
9
|
+
true;
|
|
10
|
+
queueMicrotask(flushUpdates);
|
|
11
|
+
}
|
|
12
|
+
function flushUpdates() {
|
|
13
|
+
scheduled =
|
|
14
|
+
false;
|
|
15
|
+
const updates = Array.from(updateQueue);
|
|
16
|
+
updateQueue.clear();
|
|
17
|
+
for (const update of updates) {
|
|
18
|
+
update();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=Scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../../src/core/scheduler/Scheduler.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,GACb,IAAI,GAAG,EAAW,CAAC;AAEvB,IAAI,SAAS,GACT,KAAK,CAAC;AAEV,MAAM,UAAU,cAAc,CAC1B,MAAe;IAEf,WAAW,CAAC,GAAG,CACX,MAAM,CACT,CAAC;IAEF,IACI,SAAS,EACX,CAAC;QACC,OAAO;IACX,CAAC;IAED,SAAS;QACL,IAAI,CAAC;IAET,cAAc,CACV,YAAY,CACf,CAAC;AACN,CAAC;AAED,SAAS,YAAY;IACjB,SAAS;QACL,KAAK,CAAC;IAEV,MAAM,OAAO,GACT,KAAK,CAAC,IAAI,CACN,WAAW,CACd,CAAC;IAEN,WAAW,CAAC,KAAK,EAAE,CAAC;IAEpB,KACI,MAAM,MAAM,IACT,OAAO,EACR,CAAC;QACH,MAAM,EAAE,CAAC;IACb,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface IProps {
|
|
2
|
+
[key: string]: unknown;
|
|
3
|
+
}
|
|
4
|
+
export type TVNodeChild = string | number | VNode;
|
|
5
|
+
export type TComponentFunction = (props: IProps) => VNode;
|
|
6
|
+
export type TVNodeType = string | TComponentFunction;
|
|
7
|
+
export interface IEffectRecord {
|
|
8
|
+
callback: () => void | (() => void);
|
|
9
|
+
dependencies: readonly unknown[] | undefined;
|
|
10
|
+
previousDependencies: readonly unknown[] | undefined;
|
|
11
|
+
cleanup: (() => void) | null;
|
|
12
|
+
}
|
|
13
|
+
export interface IComponentInstance {
|
|
14
|
+
component: TComponentFunction;
|
|
15
|
+
props: IProps;
|
|
16
|
+
states: unknown[];
|
|
17
|
+
stateIndex: number;
|
|
18
|
+
effects: IEffectRecord[];
|
|
19
|
+
effectIndex: number;
|
|
20
|
+
renderedVNode: VNode | null;
|
|
21
|
+
dom: Node | null;
|
|
22
|
+
mounted: boolean;
|
|
23
|
+
update: (() => void) | null;
|
|
24
|
+
}
|
|
25
|
+
export declare class VNode {
|
|
26
|
+
readonly type: TVNodeType;
|
|
27
|
+
readonly props: IProps;
|
|
28
|
+
readonly children: TVNodeChild[];
|
|
29
|
+
readonly key: string | number | null;
|
|
30
|
+
instance: IComponentInstance | null;
|
|
31
|
+
dom: Node | null;
|
|
32
|
+
normalizedChildren: VNode[] | null;
|
|
33
|
+
constructor(type: TVNodeType, props?: IProps, children?: TVNodeChild[]);
|
|
34
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class VNode {
|
|
2
|
+
type;
|
|
3
|
+
props;
|
|
4
|
+
children;
|
|
5
|
+
key;
|
|
6
|
+
instance;
|
|
7
|
+
dom;
|
|
8
|
+
normalizedChildren;
|
|
9
|
+
constructor(type, props = {}, children = []) {
|
|
10
|
+
this.type = type;
|
|
11
|
+
this.props = props;
|
|
12
|
+
this.children = children;
|
|
13
|
+
const key = props.key;
|
|
14
|
+
this.key =
|
|
15
|
+
typeof key === "string" ||
|
|
16
|
+
typeof key === "number"
|
|
17
|
+
? key
|
|
18
|
+
: null;
|
|
19
|
+
this.instance = null;
|
|
20
|
+
this.dom = null;
|
|
21
|
+
this.normalizedChildren = null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=VNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VNode.js","sourceRoot":"","sources":["../../../src/core/vnode/VNode.ts"],"names":[],"mappings":"AA6DA,MAAM,OAAO,KAAK;IACE,IAAI,CAAa;IAEjB,KAAK,CAAS;IAEd,QAAQ,CAAgB;IAExB,GAAG,CAGR;IAEJ,QAAQ,CAEJ;IAEJ,GAAG,CAEC;IAEJ,kBAAkB,CAEd;IAEX,YACI,IAAgB,EAChB,KAAK,GAAW,EAAE,EAClB,QAAQ,GAAkB,EAAE;QAE5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,MAAM,GAAG,GACL,KAAK,CAAC,GAAG,CAAC;QAEd,IAAI,CAAC,GAAG;YACJ,OAAO,GAAG,KAAK,QAAQ;gBACvB,OAAO,GAAG,KAAK,QAAQ;gBACnB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,IAAI,CAAC;QAEf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAEhB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createElement.js","sourceRoot":"","sources":["../../../src/core/vnode/createElement.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EAOR,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,aAAa,CACzB,IAAgB,EAEhB,KAAK,GAAkB,IAAI,EAE3B,GAAG,QAAuB;IAE1B,OAAO,IAAI,KAAK,CACZ,IAAI,EAEJ,KAAK,IAAI,EAAE,EAEX,QAAQ,CACX,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export function setDOMProperty(element, key, value) {
|
|
2
|
+
if (value === null ||
|
|
3
|
+
value === undefined ||
|
|
4
|
+
value === false) {
|
|
5
|
+
removeDOMProperty(element, key);
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
if (value === true) {
|
|
9
|
+
element.setAttribute(key, "");
|
|
10
|
+
if (key in element) {
|
|
11
|
+
try {
|
|
12
|
+
element[key] = true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Some DOM properties are read-only.
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (key in element &&
|
|
21
|
+
!key.includes("-")) {
|
|
22
|
+
try {
|
|
23
|
+
element[key] = value;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Fall back to an attribute.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
element.setAttribute(key, String(value));
|
|
31
|
+
}
|
|
32
|
+
export function removeDOMProperty(element, key) {
|
|
33
|
+
element.removeAttribute(key);
|
|
34
|
+
if (key in element) {
|
|
35
|
+
try {
|
|
36
|
+
element[key] =
|
|
37
|
+
key === "value"
|
|
38
|
+
? ""
|
|
39
|
+
: false;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Some DOM properties are read-only.
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=DOMProperties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DOMProperties.js","sourceRoot":"","sources":["../../src/dom/DOMProperties.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC1B,OAAoB,EAEpB,GAAW,EAEX,KAAc;IAEd,IACI,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,KAAK,EACjB,CAAC;QACC,iBAAiB,CACb,OAAO,EAEP,GAAG,CACN,CAAC;QAEF,OAAO;IACX,CAAC;IAED,IACI,KAAK,KAAK,IAAI,EAChB,CAAC;QACC,OAAO,CAAC,YAAY,CAChB,GAAG,EAEH,EAAE,CACL,CAAC;QAEF,IACI,GAAG,IAAI,OAAO,EAChB,CAAC;YACC,IAAI,CAAC;gBAEG,OAIH,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACL,qCAAqC;YACzC,CAAC;QACL,CAAC;QAED,OAAO;IACX,CAAC;IAED,IACI,GAAG,IAAI,OAAO;QACd,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EACpB,CAAC;QACC,IAAI,CAAC;YAEG,OAIH,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAEf,OAAO;QACX,CAAC;QAAC,MAAM,CAAC;YACL,6BAA6B;QACjC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,YAAY,CAChB,GAAG,EAEH,MAAM,CAAC,KAAK,CAAC,CAChB,CAAC;AACN,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,OAAoB,EAEpB,GAAW;IAEX,OAAO,CAAC,eAAe,CACnB,GAAG,CACN,CAAC;IAEF,IACI,GAAG,IAAI,OAAO,EAChB,CAAC;QACC,IAAI,CAAC;YAEG,OAIH,CAAC,GAAG,CAAC;gBACF,GAAG,KAAK,OAAO;oBACX,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,KAAK,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACL,qCAAqC;QACzC,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export class EventSystem {
|
|
2
|
+
listeners;
|
|
3
|
+
constructor() {
|
|
4
|
+
this.listeners =
|
|
5
|
+
new WeakMap();
|
|
6
|
+
}
|
|
7
|
+
updateEvent(element, propName, value) {
|
|
8
|
+
const eventName = this.getEventName(propName);
|
|
9
|
+
if (eventName === null) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const records = this.listeners.get(element);
|
|
13
|
+
const existing = records?.get(eventName);
|
|
14
|
+
if (existing !== undefined) {
|
|
15
|
+
element.removeEventListener(eventName, existing.handler);
|
|
16
|
+
records?.delete(eventName);
|
|
17
|
+
}
|
|
18
|
+
if (typeof value !==
|
|
19
|
+
"function") {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const handler = value;
|
|
23
|
+
element.addEventListener(eventName, handler);
|
|
24
|
+
const nextRecords = records ??
|
|
25
|
+
new Map();
|
|
26
|
+
nextRecords.set(eventName, {
|
|
27
|
+
eventName,
|
|
28
|
+
handler
|
|
29
|
+
});
|
|
30
|
+
this.listeners.set(element, nextRecords);
|
|
31
|
+
}
|
|
32
|
+
removeAllEvents(element) {
|
|
33
|
+
const records = this.listeners.get(element);
|
|
34
|
+
if (records === undefined) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
for (const record of records.values()) {
|
|
38
|
+
element.removeEventListener(record.eventName, record.handler);
|
|
39
|
+
}
|
|
40
|
+
this.listeners.delete(element);
|
|
41
|
+
}
|
|
42
|
+
getEventName(propName) {
|
|
43
|
+
if (!propName.startsWith("on")) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const name = propName.slice(2);
|
|
47
|
+
if (name.length === 0) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return name.toLowerCase();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=EventSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventSystem.js","sourceRoot":"","sources":["../../src/dom/EventSystem.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,WAAW;IACH,SAAS,CAOpB;IAEN;QACI,IAAI,CAAC,SAAS;YACV,IAAI,OAAO,EAAE,CAAC;IACtB,CAAC;IAEM,WAAW,CACd,OAAoB,EAEpB,QAAgB,EAEhB,KAAc;QAEd,MAAM,SAAS,GACX,IAAI,CAAC,YAAY,CACb,QAAQ,CACX,CAAC;QAEN,IACI,SAAS,KAAK,IAAI,EACpB,CAAC;YACC,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GACT,IAAI,CAAC,SAAS,CAAC,GAAG,CACd,OAAO,CACV,CAAC;QAEN,MAAM,QAAQ,GACV,OAAO,EAAE,GAAG,CACR,SAAS,CACZ,CAAC;QAEN,IACI,QAAQ,KAAK,SAAS,EACxB,CAAC;YACC,OAAO,CAAC,mBAAmB,CACvB,SAAS,EAET,QAAQ,CAAC,OAAO,CACnB,CAAC;YAEF,OAAO,EAAE,MAAM,CACX,SAAS,CACZ,CAAC;QACN,CAAC;QAED,IACI,OAAO,KAAK;YACZ,UAAU,EACZ,CAAC;YACC,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GACT,KAAsB,CAAC;QAE3B,OAAO,CAAC,gBAAgB,CACpB,SAAS,EAET,OAAO,CACV,CAAC;QAEF,MAAM,WAAW,GACb,OAAO;YACP,IAAI,GAAG,EAGJ,CAAC;QAER,WAAW,CAAC,GAAG,CACX,SAAS,EAET;YACI,SAAS;YAET,OAAO;SACV,CACJ,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,GAAG,CACd,OAAO,EAEP,WAAW,CACd,CAAC;IACN,CAAC;IAEM,eAAe,CAClB,OAAoB;QAEpB,MAAM,OAAO,GACT,IAAI,CAAC,SAAS,CAAC,GAAG,CACd,OAAO,CACV,CAAC;QAEN,IACI,OAAO,KAAK,SAAS,EACvB,CAAC;YACC,OAAO;QACX,CAAC;QAED,KACI,MAAM,MAAM,IACT,OAAO,CAAC,MAAM,EAAE,EACjB,CAAC;YACH,OAAO,CAAC,mBAAmB,CACvB,MAAM,CAAC,SAAS,EAEhB,MAAM,CAAC,OAAO,CACjB,CAAC;QACN,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,MAAM,CACjB,OAAO,CACV,CAAC;IACN,CAAC;IAEO,YAAY,CAChB,QAAgB;QAEhB,IACI,CAAC,QAAQ,CAAC,UAAU,CAChB,IAAI,CACP,EACH,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GACN,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IACI,IAAI,CAAC,MAAM,KAAK,CAAC,EACnB,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;CACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { VNode } from "../core/vnode/VNode.js";
|
|
2
|
+
export declare class Reconciler {
|
|
3
|
+
private readonly eventSystem;
|
|
4
|
+
constructor();
|
|
5
|
+
patch(parent: Node, oldVNode: VNode | null, newVNode: VNode | null, dom: Node | null): Node | null;
|
|
6
|
+
private mount;
|
|
7
|
+
private mountComponent;
|
|
8
|
+
private updateComponent;
|
|
9
|
+
private updateElement;
|
|
10
|
+
private updateText;
|
|
11
|
+
private updateChildren;
|
|
12
|
+
private updateProps;
|
|
13
|
+
private unmount;
|
|
14
|
+
private normalizeChildren;
|
|
15
|
+
private insertNode;
|
|
16
|
+
private moveNode;
|
|
17
|
+
private isComponent;
|
|
18
|
+
private isTextVNode;
|
|
19
|
+
private shouldReplace;
|
|
20
|
+
}
|