illimi-runtime 1.0.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 +130 -0
- package/dist/directives/bind.d.ts +8 -0
- package/dist/directives/bind.d.ts.map +1 -0
- package/dist/directives/bind.js +69 -0
- package/dist/directives/bind.js.map +1 -0
- package/dist/directives/evaluator.d.ts +40 -0
- package/dist/directives/evaluator.d.ts.map +1 -0
- package/dist/directives/evaluator.js +125 -0
- package/dist/directives/evaluator.js.map +1 -0
- package/dist/directives/for.d.ts +9 -0
- package/dist/directives/for.d.ts.map +1 -0
- package/dist/directives/for.js +67 -0
- package/dist/directives/for.js.map +1 -0
- package/dist/directives/html.d.ts +8 -0
- package/dist/directives/html.d.ts.map +1 -0
- package/dist/directives/html.js +11 -0
- package/dist/directives/html.js.map +1 -0
- package/dist/directives/if.d.ts +12 -0
- package/dist/directives/if.d.ts.map +1 -0
- package/dist/directives/if.js +15 -0
- package/dist/directives/if.js.map +1 -0
- package/dist/directives/index.d.ts +16 -0
- package/dist/directives/index.d.ts.map +1 -0
- package/dist/directives/index.js +16 -0
- package/dist/directives/index.js.map +1 -0
- package/dist/directives/model.d.ts +8 -0
- package/dist/directives/model.d.ts.map +1 -0
- package/dist/directives/model.js +38 -0
- package/dist/directives/model.js.map +1 -0
- package/dist/directives/on.d.ts +8 -0
- package/dist/directives/on.d.ts.map +1 -0
- package/dist/directives/on.js +50 -0
- package/dist/directives/on.js.map +1 -0
- package/dist/directives/show.d.ts +8 -0
- package/dist/directives/show.d.ts.map +1 -0
- package/dist/directives/show.js +11 -0
- package/dist/directives/show.js.map +1 -0
- package/dist/directives/text.d.ts +12 -0
- package/dist/directives/text.d.ts.map +1 -0
- package/dist/directives/text.js +15 -0
- package/dist/directives/text.js.map +1 -0
- package/dist/directives/types.d.ts +27 -0
- package/dist/directives/types.d.ts.map +1 -0
- package/dist/directives/types.js +7 -0
- package/dist/directives/types.js.map +1 -0
- package/dist/dom/createNode.d.ts +14 -0
- package/dist/dom/createNode.d.ts.map +1 -0
- package/dist/dom/createNode.js +304 -0
- package/dist/dom/createNode.js.map +1 -0
- package/dist/dom/events.d.ts +22 -0
- package/dist/dom/events.d.ts.map +1 -0
- package/dist/dom/events.js +104 -0
- package/dist/dom/events.js.map +1 -0
- package/dist/dom/updateProps.d.ts +15 -0
- package/dist/dom/updateProps.d.ts.map +1 -0
- package/dist/dom/updateProps.js +51 -0
- package/dist/dom/updateProps.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/jquery/bridge.d.ts +39 -0
- package/dist/jquery/bridge.d.ts.map +1 -0
- package/dist/jquery/bridge.js +59 -0
- package/dist/jquery/bridge.js.map +1 -0
- package/dist/providers/storage.d.ts +24 -0
- package/dist/providers/storage.d.ts.map +1 -0
- package/dist/providers/storage.js +126 -0
- package/dist/providers/storage.js.map +1 -0
- package/dist/renderer/hydrate.d.ts +22 -0
- package/dist/renderer/hydrate.d.ts.map +1 -0
- package/dist/renderer/hydrate.js +105 -0
- package/dist/renderer/hydrate.js.map +1 -0
- package/dist/renderer/mount.d.ts +15 -0
- package/dist/renderer/mount.d.ts.map +1 -0
- package/dist/renderer/mount.js +70 -0
- package/dist/renderer/mount.js.map +1 -0
- package/dist/renderer/patch.d.ts +15 -0
- package/dist/renderer/patch.d.ts.map +1 -0
- package/dist/renderer/patch.js +147 -0
- package/dist/renderer/patch.js.map +1 -0
- package/dist/router/index.d.ts +15 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +263 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/types.d.ts +67 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +5 -0
- package/dist/router/types.js.map +1 -0
- package/dist/state/store.d.ts +15 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +36 -0
- package/dist/state/store.js.map +1 -0
- package/package.json +42 -0
- package/tsconfig.base.json +28 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - f-model Directive
|
|
3
|
+
*
|
|
4
|
+
* Two-way binding for input/select/textarea-like elements.
|
|
5
|
+
*/
|
|
6
|
+
import { assignPath, evaluate } from './evaluator.js';
|
|
7
|
+
function readElementValue(el) {
|
|
8
|
+
const input = el;
|
|
9
|
+
if (input.type === 'checkbox') {
|
|
10
|
+
return input.checked;
|
|
11
|
+
}
|
|
12
|
+
return input.value;
|
|
13
|
+
}
|
|
14
|
+
function writeElementValue(el, value) {
|
|
15
|
+
const input = el;
|
|
16
|
+
if (input.type === 'checkbox') {
|
|
17
|
+
input.checked = Boolean(value);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
input.value = String(value ?? '');
|
|
21
|
+
}
|
|
22
|
+
export function executeModel(el, dir, scope) {
|
|
23
|
+
const expression = dir.expression?.trim();
|
|
24
|
+
if (!expression)
|
|
25
|
+
return;
|
|
26
|
+
const currentValue = evaluate(expression, scope);
|
|
27
|
+
writeElementValue(el, currentValue);
|
|
28
|
+
const eventName = el.type === 'checkbox' ? 'change' : 'input';
|
|
29
|
+
el.addEventListener(eventName, () => {
|
|
30
|
+
const nextValue = readElementValue(el);
|
|
31
|
+
if (Object.prototype.hasOwnProperty.call(scope.locals, expression)) {
|
|
32
|
+
scope.locals[expression] = nextValue;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
assignPath(scope.state, expression, nextValue);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/directives/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGtD,SAAS,gBAAgB,CAAC,EAAe;IACvC,MAAM,KAAK,GAAG,EAAsB,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAe,EAAE,KAAc;IACxD,MAAM,KAAK,GAAG,EAAsB,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAe,EAAE,GAAc,EAAE,KAAY;IACxE,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACjD,iBAAiB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAI,EAAuB,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAEpF,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE;QAClC,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEvC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;YACnE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;YACrC,OAAO;QACT,CAAC;QAED,UAAU,CAAC,KAAK,CAAC,KAAgC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - f-on Directive
|
|
3
|
+
*
|
|
4
|
+
* Handles event binding with modifiers and inline expressions.
|
|
5
|
+
*/
|
|
6
|
+
import type { Directive, Scope } from './types.js';
|
|
7
|
+
export declare function executeOn(el: HTMLElement, dir: Directive, scope: Scope): void;
|
|
8
|
+
//# sourceMappingURL=on.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"on.d.ts","sourceRoot":"","sources":["../../src/directives/on.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAkBnD,wBAAgB,SAAS,CACvB,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,KAAK,GACX,IAAI,CAsCN"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - f-on Directive
|
|
3
|
+
*
|
|
4
|
+
* Handles event binding with modifiers and inline expressions.
|
|
5
|
+
*/
|
|
6
|
+
import { execute, extractEventName } from './evaluator.js';
|
|
7
|
+
function applyModifierGuards(e, modifiers) {
|
|
8
|
+
if (modifiers.includes('self') && e.target !== e.currentTarget) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (modifiers.includes('prevent')) {
|
|
12
|
+
e.preventDefault();
|
|
13
|
+
}
|
|
14
|
+
if (modifiers.includes('stop')) {
|
|
15
|
+
e.stopPropagation();
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
export function executeOn(el, dir, scope) {
|
|
20
|
+
const event = extractEventName(dir.name);
|
|
21
|
+
if (!event)
|
|
22
|
+
return;
|
|
23
|
+
const expression = dir.expression?.trim();
|
|
24
|
+
if (!expression)
|
|
25
|
+
return;
|
|
26
|
+
const modifiers = dir.modifiers || [];
|
|
27
|
+
el.addEventListener(event, (e) => {
|
|
28
|
+
if (!applyModifierGuards(e, modifiers)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const eventScope = {
|
|
32
|
+
state: scope.state,
|
|
33
|
+
locals: {
|
|
34
|
+
...scope.locals,
|
|
35
|
+
$event: e,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
// If this is a plain identifier, call it as a method on state.
|
|
39
|
+
if (/^[A-Za-z_$][\w$]*$/.test(expression)) {
|
|
40
|
+
const handler = scope.state[expression];
|
|
41
|
+
if (typeof handler === 'function') {
|
|
42
|
+
handler.call(scope.state, e);
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Treat all non-identifier handlers as inline statement expressions.
|
|
47
|
+
execute(expression, eventScope);
|
|
48
|
+
}, { once: modifiers.includes('once') });
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=on.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"on.js","sourceRoot":"","sources":["../../src/directives/on.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,SAAS,mBAAmB,CAAC,CAAQ,EAAE,SAAmB;IACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,EAAe,EACf,GAAc,EACd,KAAY;IAEZ,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IAEtC,EAAE,CAAC,gBAAgB,CACjB,KAAK,EACL,CAAC,CAAQ,EAAE,EAAE;QACX,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAU;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE;gBACN,GAAG,KAAK,CAAC,MAAM;gBACf,MAAM,EAAE,CAAC;aACV;SACF,CAAC;QAEF,+DAA+D;QAC/D,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAI,KAAK,CAAC,KAAiC,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBACjC,OAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAClC,CAAC,EACD,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - f-show Directive
|
|
3
|
+
*
|
|
4
|
+
* Toggles element visibility via style.display.
|
|
5
|
+
*/
|
|
6
|
+
import type { Directive, Scope } from './types.js';
|
|
7
|
+
export declare function executeShow(el: HTMLElement, dir: Directive, scope: Scope): void;
|
|
8
|
+
//# sourceMappingURL=show.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/directives/show.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAG/E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - f-show Directive
|
|
3
|
+
*
|
|
4
|
+
* Toggles element visibility via style.display.
|
|
5
|
+
*/
|
|
6
|
+
import { evaluate } from './evaluator.js';
|
|
7
|
+
export function executeShow(el, dir, scope) {
|
|
8
|
+
const visible = Boolean(evaluate(dir.expression, scope));
|
|
9
|
+
el.style.display = visible ? '' : 'none';
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/directives/show.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,UAAU,WAAW,CAAC,EAAe,EAAE,GAAc,EAAE,KAAY;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - f-text Directive
|
|
3
|
+
*
|
|
4
|
+
* Handles text content interpolation.
|
|
5
|
+
*/
|
|
6
|
+
import type { Directive, Scope } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute f-text directive
|
|
9
|
+
* Sets the text content of an element
|
|
10
|
+
*/
|
|
11
|
+
export declare function executeText(el: HTMLElement, dir: Directive, scope: Scope): void;
|
|
12
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/directives/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,KAAK,GACX,IAAI,CAGN"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - f-text Directive
|
|
3
|
+
*
|
|
4
|
+
* Handles text content interpolation.
|
|
5
|
+
*/
|
|
6
|
+
import { evaluate } from './evaluator.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute f-text directive
|
|
9
|
+
* Sets the text content of an element
|
|
10
|
+
*/
|
|
11
|
+
export function executeText(el, dir, scope) {
|
|
12
|
+
const value = evaluate(dir.expression, scope);
|
|
13
|
+
el.textContent = String(value ?? '');
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/directives/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,EAAe,EACf,GAAc,EACd,KAAY;IAEZ,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - Types
|
|
3
|
+
*
|
|
4
|
+
* Core types for directive execution and scoping.
|
|
5
|
+
*/
|
|
6
|
+
import type { VNode as FeedVNode } from '@illimi/core';
|
|
7
|
+
export interface Directive {
|
|
8
|
+
type: 'text' | 'html' | 'bind' | 'on' | 'if' | 'else-if' | 'else' | 'for' | 'items' | 'key' | 'show' | 'model';
|
|
9
|
+
name: string;
|
|
10
|
+
value: string;
|
|
11
|
+
expression: string;
|
|
12
|
+
modifiers?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface VNode {
|
|
15
|
+
kind: 'element' | 'text';
|
|
16
|
+
tag?: string;
|
|
17
|
+
props?: Record<string, any>;
|
|
18
|
+
children?: VNode[];
|
|
19
|
+
directives?: Directive[];
|
|
20
|
+
key?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface Scope {
|
|
23
|
+
state: any;
|
|
24
|
+
locals: Record<string, any>;
|
|
25
|
+
}
|
|
26
|
+
export type FeedJSVNode = FeedVNode;
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/directives/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/G,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAGD,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/directives/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Illimi Runtime - DOM Node Creation
|
|
3
|
+
*
|
|
4
|
+
* Creates real DOM nodes from VNodes with directive execution.
|
|
5
|
+
*/
|
|
6
|
+
import type { VNode as FeedVNode } from '@illimi/core';
|
|
7
|
+
import type { Scope } from '../directives/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create a DOM node from a VNode.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createNode(vnode: FeedVNode, scope: Scope, namespace?: string): Node | null;
|
|
12
|
+
export declare function applyProps(element: Element, props: any): void;
|
|
13
|
+
export declare function createElementWithChildren(tag: string, props: any, children: any): Element;
|
|
14
|
+
//# sourceMappingURL=createNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createNode.d.ts","sourceRoot":"","sources":["../../src/dom/createNode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,wBAAwB,CAAC;AAqM/D;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAgF1F;AAoBD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAc7D;AAgCD,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,GAAG,GACZ,OAAO,CAcT"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Illimi Runtime - DOM Node Creation
|
|
3
|
+
*
|
|
4
|
+
* Creates real DOM nodes from VNodes with directive execution.
|
|
5
|
+
*/
|
|
6
|
+
import { TextSymbol, FragmentSymbol } from '@illimi/core';
|
|
7
|
+
import { executeText, executeHtml, executeBind, executeOn, executeIf, executeFor, executeShow, executeModel, } from '../directives/index.js';
|
|
8
|
+
import { evaluate } from '../directives/evaluator.js';
|
|
9
|
+
const SVG_NS = 'http://www.w3.org/2000/svg';
|
|
10
|
+
function getDirectives(vnode) {
|
|
11
|
+
return (vnode.directives || []);
|
|
12
|
+
}
|
|
13
|
+
function hasDirective(vnode, type) {
|
|
14
|
+
return getDirectives(vnode).some((d) => d.type === type);
|
|
15
|
+
}
|
|
16
|
+
function findDirective(vnode, type) {
|
|
17
|
+
return getDirectives(vnode).find((d) => d.type === type);
|
|
18
|
+
}
|
|
19
|
+
function cloneVNodeWithoutDirective(vnode, type) {
|
|
20
|
+
const clonedChildren = Array.isArray(vnode.children)
|
|
21
|
+
? vnode.children.map((child) => cloneVNodeWithoutDirective(child, type))
|
|
22
|
+
: vnode.children;
|
|
23
|
+
return {
|
|
24
|
+
...vnode,
|
|
25
|
+
children: clonedChildren,
|
|
26
|
+
directives: getDirectives(vnode).filter((dir) => dir.type !== type),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function formatInterpolationValue(value) {
|
|
30
|
+
if (value == null)
|
|
31
|
+
return '';
|
|
32
|
+
if (Array.isArray(value)) {
|
|
33
|
+
return value.map((entry) => formatInterpolationValue(entry)).join('');
|
|
34
|
+
}
|
|
35
|
+
if (typeof value === 'object') {
|
|
36
|
+
const record = value;
|
|
37
|
+
if (typeof record.text === 'string' || typeof record.text === 'number') {
|
|
38
|
+
return String(record.text);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
return JSON.stringify(value);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return String(value);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return String(value);
|
|
48
|
+
}
|
|
49
|
+
function applyVarDeclaration(vnode, scope) {
|
|
50
|
+
const props = (vnode.props || {});
|
|
51
|
+
const directives = getDirectives(vnode);
|
|
52
|
+
let varName = typeof props.name === 'string' ? props.name : '';
|
|
53
|
+
let varValue = props.value;
|
|
54
|
+
const nameBind = directives.find((d) => d.type === 'bind' && /(?:x|f)-bind:name$/.test(d.name));
|
|
55
|
+
if (nameBind) {
|
|
56
|
+
const evaluated = evaluate(nameBind.expression, scope);
|
|
57
|
+
if (typeof evaluated === 'string' && evaluated.trim().length > 0) {
|
|
58
|
+
varName = evaluated.trim();
|
|
59
|
+
}
|
|
60
|
+
else if (/^[A-Za-z_$][\w$]*$/.test(nameBind.expression.trim())) {
|
|
61
|
+
// <var :name="age" /> => declare variable named "age"
|
|
62
|
+
varName = nameBind.expression.trim();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const valueBind = directives.find((d) => d.type === 'bind' && /(?:x|f)-bind:value$/.test(d.name));
|
|
66
|
+
if (valueBind) {
|
|
67
|
+
varValue = evaluate(valueBind.expression, scope);
|
|
68
|
+
}
|
|
69
|
+
if (!varName)
|
|
70
|
+
return;
|
|
71
|
+
scope.locals[varName] = varValue;
|
|
72
|
+
}
|
|
73
|
+
function renderItems(vnode, dir, scope, namespace) {
|
|
74
|
+
const collection = evaluate(dir.expression, scope);
|
|
75
|
+
const fragment = document.createDocumentFragment();
|
|
76
|
+
const source = Array.isArray(collection)
|
|
77
|
+
? collection.map((item, index) => [index, item])
|
|
78
|
+
: collection && typeof collection === 'object'
|
|
79
|
+
? Object.entries(collection).map(([key, value]) => [key, value])
|
|
80
|
+
: [];
|
|
81
|
+
for (let i = 0; i < source.length; i++) {
|
|
82
|
+
const [keyOrIndex, item] = source[i] || [];
|
|
83
|
+
const childScope = {
|
|
84
|
+
state: scope.state,
|
|
85
|
+
locals: {
|
|
86
|
+
...scope.locals,
|
|
87
|
+
item,
|
|
88
|
+
i: item,
|
|
89
|
+
$index: i,
|
|
90
|
+
$key: keyOrIndex,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
const cloned = cloneVNodeWithoutDirective(vnode, 'items');
|
|
94
|
+
if (cloned.type === 'render') {
|
|
95
|
+
if (Array.isArray(cloned.children)) {
|
|
96
|
+
appendChildrenWithConditionals(fragment, cloned.children, childScope, namespace);
|
|
97
|
+
}
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const node = createNode(cloned, childScope, namespace);
|
|
101
|
+
if (node)
|
|
102
|
+
fragment.appendChild(node);
|
|
103
|
+
}
|
|
104
|
+
return fragment;
|
|
105
|
+
}
|
|
106
|
+
function appendChildrenWithConditionals(parent, children, scope, namespace) {
|
|
107
|
+
for (let i = 0; i < children.length; i++) {
|
|
108
|
+
const child = children[i];
|
|
109
|
+
if (!child)
|
|
110
|
+
continue;
|
|
111
|
+
const ifDir = findDirective(child, 'if');
|
|
112
|
+
const elseIfDir = findDirective(child, 'else-if');
|
|
113
|
+
const elseDir = findDirective(child, 'else');
|
|
114
|
+
if (elseIfDir || elseDir) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (!ifDir) {
|
|
118
|
+
const childNode = createNode(child, scope, namespace);
|
|
119
|
+
if (childNode)
|
|
120
|
+
parent.appendChild(childNode);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
let rendered = false;
|
|
124
|
+
if (executeIf(ifDir, scope)) {
|
|
125
|
+
const ifNode = createNode(child, scope, namespace);
|
|
126
|
+
if (ifNode)
|
|
127
|
+
parent.appendChild(ifNode);
|
|
128
|
+
rendered = true;
|
|
129
|
+
}
|
|
130
|
+
let chainIndex = i + 1;
|
|
131
|
+
while (chainIndex < children.length) {
|
|
132
|
+
const chainNode = children[chainIndex];
|
|
133
|
+
if (!chainNode) {
|
|
134
|
+
chainIndex++;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const chainElseIf = findDirective(chainNode, 'else-if');
|
|
138
|
+
const chainElse = findDirective(chainNode, 'else');
|
|
139
|
+
if (!chainElseIf && !chainElse) {
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
if (!rendered) {
|
|
143
|
+
if (chainElseIf && executeIf(chainElseIf, scope)) {
|
|
144
|
+
const domNode = createNode(chainNode, scope, namespace);
|
|
145
|
+
if (domNode)
|
|
146
|
+
parent.appendChild(domNode);
|
|
147
|
+
rendered = true;
|
|
148
|
+
}
|
|
149
|
+
else if (chainElse) {
|
|
150
|
+
const domNode = createNode(chainNode, scope, namespace);
|
|
151
|
+
if (domNode)
|
|
152
|
+
parent.appendChild(domNode);
|
|
153
|
+
rendered = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
chainIndex++;
|
|
157
|
+
}
|
|
158
|
+
i = chainIndex - 1;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create a DOM node from a VNode.
|
|
163
|
+
*/
|
|
164
|
+
export function createNode(vnode, scope, namespace) {
|
|
165
|
+
const type = vnode.type;
|
|
166
|
+
const directives = getDirectives(vnode);
|
|
167
|
+
if (type === 'var') {
|
|
168
|
+
applyVarDeclaration(vnode, scope);
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const itemsDir = directives.find((d) => d.type === 'items');
|
|
172
|
+
if (itemsDir) {
|
|
173
|
+
return renderItems(vnode, itemsDir, scope, namespace);
|
|
174
|
+
}
|
|
175
|
+
const forDir = directives.find((d) => d.type === 'for');
|
|
176
|
+
if (forDir) {
|
|
177
|
+
const result = executeFor(vnode, forDir, scope);
|
|
178
|
+
return result[0] ?? null;
|
|
179
|
+
}
|
|
180
|
+
const ifDir = directives.find((d) => d.type === 'if');
|
|
181
|
+
if (ifDir && !executeIf(ifDir, scope)) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
const elseIfDir = directives.find((d) => d.type === 'else-if');
|
|
185
|
+
if (elseIfDir && !executeIf(elseIfDir, scope)) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
if (hasDirective(vnode, 'else')) {
|
|
189
|
+
// Else dispatch is handled by sibling chain processing.
|
|
190
|
+
}
|
|
191
|
+
if (type === TextSymbol || (typeof type === 'string' && type.includes('text'))) {
|
|
192
|
+
const vnodeWithInterp = vnode;
|
|
193
|
+
if (vnodeWithInterp.interpolation) {
|
|
194
|
+
const value = evaluate(vnodeWithInterp.interpolation, scope);
|
|
195
|
+
return document.createTextNode(formatInterpolationValue(value));
|
|
196
|
+
}
|
|
197
|
+
return document.createTextNode(getTextContent(vnode));
|
|
198
|
+
}
|
|
199
|
+
if (type === FragmentSymbol) {
|
|
200
|
+
return createFragment(vnode.children, scope, namespace);
|
|
201
|
+
}
|
|
202
|
+
if (typeof type === 'string') {
|
|
203
|
+
if (type === 'render') {
|
|
204
|
+
const fragment = document.createDocumentFragment();
|
|
205
|
+
if (Array.isArray(vnode.children)) {
|
|
206
|
+
appendChildrenWithConditionals(fragment, vnode.children, scope, namespace);
|
|
207
|
+
}
|
|
208
|
+
return fragment;
|
|
209
|
+
}
|
|
210
|
+
const elementNamespace = type === 'svg' ? SVG_NS : namespace;
|
|
211
|
+
const element = elementNamespace
|
|
212
|
+
? document.createElementNS(elementNamespace, type)
|
|
213
|
+
: document.createElement(type);
|
|
214
|
+
applyProps(element, vnode.props);
|
|
215
|
+
applyDirectives(element, vnode, scope);
|
|
216
|
+
if (vnode.children) {
|
|
217
|
+
const childNamespace = elementNamespace === SVG_NS && type === 'foreignObject'
|
|
218
|
+
? undefined
|
|
219
|
+
: elementNamespace;
|
|
220
|
+
if (Array.isArray(vnode.children)) {
|
|
221
|
+
appendChildrenWithConditionals(element, vnode.children, scope, childNamespace);
|
|
222
|
+
}
|
|
223
|
+
else if (typeof vnode.children === 'string') {
|
|
224
|
+
element.textContent = vnode.children;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return element;
|
|
228
|
+
}
|
|
229
|
+
return document.createElement('div');
|
|
230
|
+
}
|
|
231
|
+
function createFragment(children, scope, namespace) {
|
|
232
|
+
const fragment = document.createDocumentFragment();
|
|
233
|
+
if (!children || !Array.isArray(children)) {
|
|
234
|
+
return fragment;
|
|
235
|
+
}
|
|
236
|
+
appendChildrenWithConditionals(fragment, children, scope, namespace);
|
|
237
|
+
return fragment;
|
|
238
|
+
}
|
|
239
|
+
function getTextContent(vnode) {
|
|
240
|
+
if (typeof vnode.children === 'string') {
|
|
241
|
+
return vnode.children;
|
|
242
|
+
}
|
|
243
|
+
return '';
|
|
244
|
+
}
|
|
245
|
+
export function applyProps(element, props) {
|
|
246
|
+
if (!props)
|
|
247
|
+
return;
|
|
248
|
+
for (const [key, value] of Object.entries(props)) {
|
|
249
|
+
if (key.startsWith('x-') || key.startsWith('f-'))
|
|
250
|
+
continue;
|
|
251
|
+
if (value === true) {
|
|
252
|
+
element.setAttribute(key, '');
|
|
253
|
+
}
|
|
254
|
+
else if (value === false || value === null || value === undefined) {
|
|
255
|
+
element.removeAttribute(key);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
element.setAttribute(key, String(value));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function applyDirectives(element, vnode, scope) {
|
|
263
|
+
const directives = getDirectives(vnode);
|
|
264
|
+
const target = element;
|
|
265
|
+
for (const dir of directives) {
|
|
266
|
+
switch (dir.type) {
|
|
267
|
+
case 'text':
|
|
268
|
+
executeText(target, dir, scope);
|
|
269
|
+
break;
|
|
270
|
+
case 'html':
|
|
271
|
+
executeHtml(target, dir, scope);
|
|
272
|
+
break;
|
|
273
|
+
case 'bind':
|
|
274
|
+
executeBind(target, dir, scope);
|
|
275
|
+
break;
|
|
276
|
+
case 'on':
|
|
277
|
+
executeOn(target, dir, scope);
|
|
278
|
+
break;
|
|
279
|
+
case 'show':
|
|
280
|
+
executeShow(target, dir, scope);
|
|
281
|
+
break;
|
|
282
|
+
case 'model':
|
|
283
|
+
executeModel(target, dir, scope);
|
|
284
|
+
break;
|
|
285
|
+
default:
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
export function createElementWithChildren(tag, props, children) {
|
|
291
|
+
const element = document.createElement(tag);
|
|
292
|
+
applyProps(element, props);
|
|
293
|
+
if (!children)
|
|
294
|
+
return element;
|
|
295
|
+
if (Array.isArray(children)) {
|
|
296
|
+
const scope = { state: {}, locals: {} };
|
|
297
|
+
appendChildrenWithConditionals(element, children, scope);
|
|
298
|
+
}
|
|
299
|
+
else if (typeof children === 'string') {
|
|
300
|
+
element.textContent = children;
|
|
301
|
+
}
|
|
302
|
+
return element;
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=createNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createNode.js","sourceRoot":"","sources":["../../src/dom/createNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedJS Runtime - Event Binding System
|
|
3
|
+
*
|
|
4
|
+
* Handles event binding and cleanup for DOM elements.
|
|
5
|
+
*/
|
|
6
|
+
interface EventContext {
|
|
7
|
+
[handlerName: string]: EventListener;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Bind events to an element based on VNode props
|
|
11
|
+
*/
|
|
12
|
+
export declare function bindEvents(element: Element, props: Record<string, unknown> | null, context: EventContext): void;
|
|
13
|
+
/**
|
|
14
|
+
* Unbind all events from an element
|
|
15
|
+
*/
|
|
16
|
+
export declare function unbindEvents(element: Element): void;
|
|
17
|
+
/**
|
|
18
|
+
* Unbind all events globally (for cleanup)
|
|
19
|
+
*/
|
|
20
|
+
export declare function unbindAllEvents(): void;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/dom/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,UAAU,YAAY;IACpB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAAC;CACtC;AAYD;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACrC,OAAO,EAAE,YAAY,GACpB,IAAI,CAkDN;AA+BD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASnD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
|