@llui/dom 0.0.1
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 +15 -0
- package/dist/addressed.d.ts +16 -0
- package/dist/addressed.d.ts.map +1 -0
- package/dist/addressed.js +40 -0
- package/dist/addressed.js.map +1 -0
- package/dist/binding.d.ts +18 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/binding.js +62 -0
- package/dist/binding.js.map +1 -0
- package/dist/chain-update.d.ts +7 -0
- package/dist/chain-update.d.ts.map +1 -0
- package/dist/chain-update.js +16 -0
- package/dist/chain-update.js.map +1 -0
- package/dist/component.d.ts +3 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/component.js +4 -0
- package/dist/component.js.map +1 -0
- package/dist/devtools.d.ts +113 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +390 -0
- package/dist/devtools.js.map +1 -0
- package/dist/el-split.d.ts +3 -0
- package/dist/el-split.d.ts.map +1 -0
- package/dist/el-split.js +54 -0
- package/dist/el-split.js.map +1 -0
- package/dist/el-template.d.ts +17 -0
- package/dist/el-template.d.ts.map +1 -0
- package/dist/el-template.js +64 -0
- package/dist/el-template.js.map +1 -0
- package/dist/elements.d.ts +80 -0
- package/dist/elements.d.ts.map +1 -0
- package/dist/elements.js +234 -0
- package/dist/elements.js.map +1 -0
- package/dist/form.d.ts +30 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +12 -0
- package/dist/form.js.map +1 -0
- package/dist/hmr.d.ts +20 -0
- package/dist/hmr.d.ts.map +1 -0
- package/dist/hmr.js +98 -0
- package/dist/hmr.js.map +1 -0
- package/dist/hydrate.d.ts +29 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +96 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/merge-handlers.d.ts +7 -0
- package/dist/merge-handlers.d.ts.map +1 -0
- package/dist/merge-handlers.js +16 -0
- package/dist/merge-handlers.js.map +1 -0
- package/dist/mount.d.ts +14 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +182 -0
- package/dist/mount.js.map +1 -0
- package/dist/primitives/branch.d.ts +3 -0
- package/dist/primitives/branch.d.ts.map +1 -0
- package/dist/primitives/branch.js +94 -0
- package/dist/primitives/branch.js.map +1 -0
- package/dist/primitives/child.d.ts +3 -0
- package/dist/primitives/child.d.ts.map +1 -0
- package/dist/primitives/child.js +77 -0
- package/dist/primitives/child.js.map +1 -0
- package/dist/primitives/context.d.ts +45 -0
- package/dist/primitives/context.d.ts.map +1 -0
- package/dist/primitives/context.js +87 -0
- package/dist/primitives/context.js.map +1 -0
- package/dist/primitives/each.d.ts +3 -0
- package/dist/primitives/each.d.ts.map +1 -0
- package/dist/primitives/each.js +515 -0
- package/dist/primitives/each.js.map +1 -0
- package/dist/primitives/error-boundary.d.ts +6 -0
- package/dist/primitives/error-boundary.d.ts.map +1 -0
- package/dist/primitives/error-boundary.js +32 -0
- package/dist/primitives/error-boundary.js.map +1 -0
- package/dist/primitives/foreign.d.ts +3 -0
- package/dist/primitives/foreign.d.ts.map +1 -0
- package/dist/primitives/foreign.js +80 -0
- package/dist/primitives/foreign.js.map +1 -0
- package/dist/primitives/memo.d.ts +3 -0
- package/dist/primitives/memo.d.ts.map +1 -0
- package/dist/primitives/memo.js +30 -0
- package/dist/primitives/memo.js.map +1 -0
- package/dist/primitives/on-mount.d.ts +2 -0
- package/dist/primitives/on-mount.d.ts.map +1 -0
- package/dist/primitives/on-mount.js +23 -0
- package/dist/primitives/on-mount.js.map +1 -0
- package/dist/primitives/portal.d.ts +3 -0
- package/dist/primitives/portal.d.ts.map +1 -0
- package/dist/primitives/portal.js +31 -0
- package/dist/primitives/portal.js.map +1 -0
- package/dist/primitives/selector.d.ts +22 -0
- package/dist/primitives/selector.d.ts.map +1 -0
- package/dist/primitives/selector.js +104 -0
- package/dist/primitives/selector.js.map +1 -0
- package/dist/primitives/show.d.ts +3 -0
- package/dist/primitives/show.d.ts.map +1 -0
- package/dist/primitives/show.js +12 -0
- package/dist/primitives/show.js.map +1 -0
- package/dist/primitives/slice.d.ts +23 -0
- package/dist/primitives/slice.d.ts.map +1 -0
- package/dist/primitives/slice.js +57 -0
- package/dist/primitives/slice.js.map +1 -0
- package/dist/primitives/text.d.ts +2 -0
- package/dist/primitives/text.d.ts.map +1 -0
- package/dist/primitives/text.js +35 -0
- package/dist/primitives/text.js.map +1 -0
- package/dist/render-context.d.ts +14 -0
- package/dist/render-context.d.ts.map +1 -0
- package/dist/render-context.js +14 -0
- package/dist/render-context.js.map +1 -0
- package/dist/runtime.d.ts +4 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +14 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scope.d.ts +24 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +102 -0
- package/dist/scope.js.map +1 -0
- package/dist/slice-handler.d.ts +31 -0
- package/dist/slice-handler.d.ts.map +1 -0
- package/dist/slice-handler.js +34 -0
- package/dist/slice-handler.js.map +1 -0
- package/dist/ssr-dom.d.ts +12 -0
- package/dist/ssr-dom.d.ts.map +1 -0
- package/dist/ssr-dom.js +36 -0
- package/dist/ssr-dom.js.map +1 -0
- package/dist/ssr.d.ts +11 -0
- package/dist/ssr.d.ts.map +1 -0
- package/dist/ssr.js +127 -0
- package/dist/ssr.js.map +1 -0
- package/dist/structural.d.ts +4 -0
- package/dist/structural.d.ts.map +1 -0
- package/dist/structural.js +2 -0
- package/dist/structural.js.map +1 -0
- package/dist/types.d.ts +145 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/update-loop.d.ts +31 -0
- package/dist/update-loop.d.ts.map +1 -0
- package/dist/update-loop.js +236 -0
- package/dist/update-loop.js.map +1 -0
- package/dist/view-helpers.d.ts +44 -0
- package/dist/view-helpers.d.ts.map +1 -0
- package/dist/view-helpers.js +24 -0
- package/dist/view-helpers.js.map +1 -0
- package/package.json +56 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Franco Ponticelli
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# @llui/dom
|
|
2
|
+
|
|
3
|
+
Runtime for the [LLui](https://github.com/fponticelli/llui) web framework.
|
|
4
|
+
|
|
5
|
+
Component model, mount, scope tree, reactive bindings, structural primitives (`show`, `branch`, `each`), element helpers, and the `View<S, M>` helper bundle.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @llui/dom
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
See the [main README](../../README.md) for getting started.
|
|
12
|
+
|
|
13
|
+
## License
|
|
14
|
+
|
|
15
|
+
MIT
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ComponentDef } from './types';
|
|
2
|
+
export interface AddressedEffect {
|
|
3
|
+
__addressed: true;
|
|
4
|
+
__targetKey: string | number;
|
|
5
|
+
__msg: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare function registerChild(key: string | number, inst: {
|
|
8
|
+
send: (msg: unknown) => void;
|
|
9
|
+
}): void;
|
|
10
|
+
export declare function unregisterChild(key: string | number): void;
|
|
11
|
+
export declare function isAddressedEffect(effect: unknown): effect is AddressedEffect;
|
|
12
|
+
/**
|
|
13
|
+
* Build a typed address builder from a component definition's `receives` map.
|
|
14
|
+
*/
|
|
15
|
+
export declare function addressOf<S, M, E>(def: ComponentDef<S, M, E>, key: string | number): Record<string, (params?: unknown) => AddressedEffect>;
|
|
16
|
+
//# sourceMappingURL=addressed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addressed.d.ts","sourceRoot":"","sources":["../src/addressed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAG3C,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,IAAI,CAAA;IACjB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,KAAK,EAAE,OAAO,CAAA;CACf;AAKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,GAAG,IAAI,CAEhG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1D;AAYD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,eAAe,CAM5E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC/B,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,GAAG,EAAE,MAAM,GAAG,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,eAAe,CAAC,CAavD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { setAddressedDispatcher } from './update-loop';
|
|
2
|
+
// Global component registry — keyed by child key
|
|
3
|
+
const registry = new Map();
|
|
4
|
+
export function registerChild(key, inst) {
|
|
5
|
+
registry.set(key, inst);
|
|
6
|
+
}
|
|
7
|
+
export function unregisterChild(key) {
|
|
8
|
+
registry.delete(key);
|
|
9
|
+
}
|
|
10
|
+
function dispatchAddressed(effect) {
|
|
11
|
+
const target = registry.get(effect.__targetKey);
|
|
12
|
+
if (target) {
|
|
13
|
+
target.send(effect.__msg);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// Register the dispatcher — this runs when addressed.ts is first imported
|
|
17
|
+
setAddressedDispatcher(dispatchAddressed);
|
|
18
|
+
export function isAddressedEffect(effect) {
|
|
19
|
+
return (typeof effect === 'object' &&
|
|
20
|
+
effect !== null &&
|
|
21
|
+
effect.__addressed === true);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build a typed address builder from a component definition's `receives` map.
|
|
25
|
+
*/
|
|
26
|
+
export function addressOf(def, key) {
|
|
27
|
+
const receives = def.receives;
|
|
28
|
+
if (!receives)
|
|
29
|
+
return {};
|
|
30
|
+
const builder = {};
|
|
31
|
+
for (const [name, handler] of Object.entries(receives)) {
|
|
32
|
+
builder[name] = (params) => ({
|
|
33
|
+
__addressed: true,
|
|
34
|
+
__targetKey: key,
|
|
35
|
+
__msg: handler(params),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return builder;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=addressed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addressed.js","sourceRoot":"","sources":["../src/addressed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAQtD,iDAAiD;AACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqD,CAAA;AAE7E,MAAM,UAAU,aAAa,CAAC,GAAoB,EAAE,IAAsC;IACxF,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAwD;IACjF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC/C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;AAEzC,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACd,MAA0B,CAAC,WAAW,KAAK,IAAI,CACjD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,GAA0B,EAC1B,GAAoB;IAEpB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;IAC7B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAA;IAExB,MAAM,OAAO,GAA0D,EAAE,CAAA;IACzE,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAgB,EAAE,EAAE,CAAC,CAAC;YACrC,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;SACvB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Scope, Binding, BindingKind } from './types';
|
|
2
|
+
export interface CreateBindingOpts {
|
|
3
|
+
mask: number;
|
|
4
|
+
accessor: (state: never) => unknown;
|
|
5
|
+
kind: BindingKind;
|
|
6
|
+
node: Node;
|
|
7
|
+
key?: string;
|
|
8
|
+
perItem: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function getFlatBindings(): Binding[] | null;
|
|
11
|
+
export declare function setFlatBindings(arr: Binding[] | null): void;
|
|
12
|
+
export declare function createBinding(scope: Scope, opts: CreateBindingOpts): Binding;
|
|
13
|
+
export declare function applyBinding(target: {
|
|
14
|
+
kind: BindingKind;
|
|
15
|
+
node: Node;
|
|
16
|
+
key?: string;
|
|
17
|
+
}, value: unknown): void;
|
|
18
|
+
//# sourceMappingURL=binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IACnC,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,IAAI,CAAA;IACV,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAID,wBAAgB,eAAe,IAAI,OAAO,EAAE,GAAG,IAAI,CAElD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,GAAG,IAAI,CAE3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAiB5E;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EACvD,KAAK,EAAE,OAAO,GACb,IAAI,CAiCN"}
|
package/dist/binding.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { addBinding } from './scope';
|
|
2
|
+
let flatBindings = null;
|
|
3
|
+
export function getFlatBindings() {
|
|
4
|
+
return flatBindings;
|
|
5
|
+
}
|
|
6
|
+
export function setFlatBindings(arr) {
|
|
7
|
+
flatBindings = arr;
|
|
8
|
+
}
|
|
9
|
+
export function createBinding(scope, opts) {
|
|
10
|
+
const binding = {
|
|
11
|
+
mask: opts.mask,
|
|
12
|
+
accessor: opts.accessor,
|
|
13
|
+
lastValue: undefined,
|
|
14
|
+
kind: opts.kind,
|
|
15
|
+
node: opts.node,
|
|
16
|
+
key: opts.key,
|
|
17
|
+
ownerScope: scope,
|
|
18
|
+
perItem: opts.perItem,
|
|
19
|
+
dead: false,
|
|
20
|
+
};
|
|
21
|
+
addBinding(scope, binding);
|
|
22
|
+
if (flatBindings)
|
|
23
|
+
flatBindings.push(binding);
|
|
24
|
+
return binding;
|
|
25
|
+
}
|
|
26
|
+
export function applyBinding(target, value) {
|
|
27
|
+
switch (target.kind) {
|
|
28
|
+
case 'text':
|
|
29
|
+
target.node.nodeValue = String(value);
|
|
30
|
+
break;
|
|
31
|
+
case 'prop': {
|
|
32
|
+
const el = target.node;
|
|
33
|
+
el[target.key] = value;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case 'attr':
|
|
37
|
+
if (value == null || value === false) {
|
|
38
|
+
;
|
|
39
|
+
target.node.removeAttribute(target.key);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
;
|
|
43
|
+
target.node.setAttribute(target.key, String(value));
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
case 'class':
|
|
47
|
+
;
|
|
48
|
+
target.node.className = value;
|
|
49
|
+
break;
|
|
50
|
+
case 'style':
|
|
51
|
+
if (value == null) {
|
|
52
|
+
;
|
|
53
|
+
target.node.style.removeProperty(target.key);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
;
|
|
57
|
+
target.node.style.setProperty(target.key, value);
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAWpC,IAAI,YAAY,GAAqB,IAAI,CAAA;AAEzC,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAqB;IACnD,YAAY,GAAG,GAAG,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,IAAuB;IACjE,MAAM,OAAO,GAAY;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAuC;QACtD,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,KAAK;KACZ,CAAA;IAED,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC1B,IAAI,YAAY;QAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAE5C,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAuD,EACvD,KAAc;IAEd,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YACrC,MAAK;QAEP,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,GAAG,MAAM,CAAC,IAAmB,CAEpC;YAAC,EAAU,CAAC,MAAM,CAAC,GAAI,CAAC,GAAG,KAAK,CAAA;YACjC,MAAK;QACP,CAAC;QAED,KAAK,MAAM;YACT,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC,IAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAI,CAAC,CAAA;YACxD,CAAC;iBAAM,CAAC;gBACN,CAAC;gBAAC,MAAM,CAAC,IAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACpE,CAAC;YACD,MAAK;QAEP,KAAK,OAAO;YACV,CAAC;YAAC,MAAM,CAAC,IAAgB,CAAC,SAAS,GAAG,KAAe,CAAA;YACrD,MAAK;QAEP,KAAK,OAAO;YACV,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC,IAAoB,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAI,CAAC,CAAA;YACjE,CAAC;iBAAM,CAAC;gBACN,CAAC;gBAAC,MAAM,CAAC,IAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,GAAI,EAAE,KAAe,CAAC,CAAA;YAC/E,CAAC;YACD,MAAK;IACT,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compose multiple update handlers into one.
|
|
3
|
+
* Each handler returns [newState, effects] if it handled the message, or null to pass through.
|
|
4
|
+
* The first handler that returns non-null wins.
|
|
5
|
+
*/
|
|
6
|
+
export declare function chainUpdate<S, M, E>(...handlers: Array<(state: S, msg: M) => [S, E[]] | null>): (state: S, msg: M) => [S, E[]];
|
|
7
|
+
//# sourceMappingURL=chain-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-update.d.ts","sourceRoot":"","sources":["../src/chain-update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GACxD,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAQhC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compose multiple update handlers into one.
|
|
3
|
+
* Each handler returns [newState, effects] if it handled the message, or null to pass through.
|
|
4
|
+
* The first handler that returns non-null wins.
|
|
5
|
+
*/
|
|
6
|
+
export function chainUpdate(...handlers) {
|
|
7
|
+
return (state, msg) => {
|
|
8
|
+
for (const handler of handlers) {
|
|
9
|
+
const result = handler(state, msg);
|
|
10
|
+
if (result)
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
return [state, []];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=chain-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-update.js","sourceRoot":"","sources":["../src/chain-update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,GAAG,QAAsD;IAEzD,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAClC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;QAC3B,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACpB,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAEpF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAU,GAA0B;IAC3D,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enable devtools auto-installation for every mountApp call. Called by
|
|
3
|
+
* compiler-generated dev code — never imported in production builds.
|
|
4
|
+
* Once enabled, every mounted component attaches `globalThis.__lluiDebug`
|
|
5
|
+
* to the most recently mounted instance.
|
|
6
|
+
*/
|
|
7
|
+
export declare function enableDevTools(): void;
|
|
8
|
+
/**
|
|
9
|
+
* Connect to a local MCP server's WebSocket and forward tool calls to
|
|
10
|
+
* `window.__lluiDebug`. Auto-reconnects on close. Safe to call multiple times
|
|
11
|
+
* (only the first call actually runs).
|
|
12
|
+
*/
|
|
13
|
+
export declare function startRelay(port?: number): void;
|
|
14
|
+
export interface MessageRecord {
|
|
15
|
+
index: number;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
msg: unknown;
|
|
18
|
+
stateBefore: unknown;
|
|
19
|
+
stateAfter: unknown;
|
|
20
|
+
effects: unknown[];
|
|
21
|
+
dirtyMask: number;
|
|
22
|
+
}
|
|
23
|
+
export interface BindingDebugInfo {
|
|
24
|
+
index: number;
|
|
25
|
+
mask: number;
|
|
26
|
+
lastValue: unknown;
|
|
27
|
+
kind: string;
|
|
28
|
+
key: string | undefined;
|
|
29
|
+
dead: boolean;
|
|
30
|
+
perItem: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface UpdateExplanation {
|
|
33
|
+
bindingIndex: number;
|
|
34
|
+
bindingMask: number;
|
|
35
|
+
lastDirtyMask: number;
|
|
36
|
+
matched: boolean;
|
|
37
|
+
accessorResult: unknown;
|
|
38
|
+
lastValue: unknown;
|
|
39
|
+
changed: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface ValidationError {
|
|
42
|
+
path: string;
|
|
43
|
+
expected: string;
|
|
44
|
+
received: string;
|
|
45
|
+
message: string;
|
|
46
|
+
}
|
|
47
|
+
export interface LluiDebugAPI {
|
|
48
|
+
getState(): unknown;
|
|
49
|
+
send(msg: unknown): void;
|
|
50
|
+
flush(): void;
|
|
51
|
+
getMessageHistory(opts?: {
|
|
52
|
+
since?: number;
|
|
53
|
+
limit?: number;
|
|
54
|
+
}): MessageRecord[];
|
|
55
|
+
evalUpdate(msg: unknown): {
|
|
56
|
+
state: unknown;
|
|
57
|
+
effects: unknown[];
|
|
58
|
+
};
|
|
59
|
+
exportTrace(): {
|
|
60
|
+
lluiTrace: 1;
|
|
61
|
+
component: string;
|
|
62
|
+
generatedBy: string;
|
|
63
|
+
timestamp: string;
|
|
64
|
+
entries: Array<{
|
|
65
|
+
msg: unknown;
|
|
66
|
+
expectedState: unknown;
|
|
67
|
+
expectedEffects: unknown[];
|
|
68
|
+
}>;
|
|
69
|
+
};
|
|
70
|
+
clearLog(): void;
|
|
71
|
+
validateMessage(msg: unknown): ValidationError[] | null;
|
|
72
|
+
getBindings(): BindingDebugInfo[];
|
|
73
|
+
whyDidUpdate(bindingIndex: number): UpdateExplanation;
|
|
74
|
+
searchState(query: string): unknown;
|
|
75
|
+
/** Returns the compiled Msg schema (discriminant + variant field types). */
|
|
76
|
+
getMessageSchema(): MessageSchemaInfo | null;
|
|
77
|
+
/** Returns the bit→field map injected by the compiler. Lets tools decode dirty-mask values. */
|
|
78
|
+
getMaskLegend(): Record<string, number> | null;
|
|
79
|
+
/** Given a dirty mask, return the list of top-level fields it represents. */
|
|
80
|
+
decodeMask(mask: number): string[];
|
|
81
|
+
/** Component name + source location (file/line from compiler-injected metadata). */
|
|
82
|
+
getComponentInfo(): ComponentInfo;
|
|
83
|
+
/** Returns the compiled State type shape (from TypeScript `type State = { … }`). */
|
|
84
|
+
getStateSchema(): object | null;
|
|
85
|
+
/** Returns the compiled Effect schema (from TypeScript `type Effect = { … }` union). */
|
|
86
|
+
getEffectSchema(): object | null;
|
|
87
|
+
/** Deep-clone the current state. Pair with restoreState() to checkpoint before risky operations. */
|
|
88
|
+
snapshotState(): unknown;
|
|
89
|
+
/** Overwrite the current state with a previously-captured snapshot. Triggers a full re-render. */
|
|
90
|
+
restoreState(snap: unknown): void;
|
|
91
|
+
/** Find all bindings whose target node matches or is a child of the selector. */
|
|
92
|
+
getBindingsFor(selector: string): BindingLocation[];
|
|
93
|
+
}
|
|
94
|
+
export interface BindingLocation {
|
|
95
|
+
bindingIndex: number;
|
|
96
|
+
kind: string;
|
|
97
|
+
key: string | undefined;
|
|
98
|
+
mask: number;
|
|
99
|
+
lastValue: unknown;
|
|
100
|
+
/** How the binding's node relates to the matched element: 'self' (binding on the element itself) or 'text-child' (text node inside). */
|
|
101
|
+
relation: 'self' | 'text-child' | 'comment-child';
|
|
102
|
+
}
|
|
103
|
+
export interface ComponentInfo {
|
|
104
|
+
name: string;
|
|
105
|
+
file: string | null;
|
|
106
|
+
line: number | null;
|
|
107
|
+
}
|
|
108
|
+
export interface MessageSchemaInfo {
|
|
109
|
+
discriminant: string;
|
|
110
|
+
variants: Record<string, Record<string, unknown>>;
|
|
111
|
+
}
|
|
112
|
+
export declare function installDevTools(inst: object): void;
|
|
113
|
+
//# sourceMappingURL=devtools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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"}
|