juxscript 1.1.255 → 1.1.257
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/dist/lib/components/checkbox.d.ts.map +1 -1
- package/dist/lib/components/checkbox.js +3 -0
- package/dist/lib/components/input.d.ts.map +1 -1
- package/dist/lib/components/input.js +2 -0
- package/dist/lib/components/radio.d.ts.map +1 -1
- package/dist/lib/components/radio.js +2 -0
- package/dist/lib/components/select.d.ts.map +1 -1
- package/dist/lib/components/select.js +2 -0
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +4 -0
- package/dist/lib/state/pageState.d.ts +32 -0
- package/dist/lib/state/pageState.d.ts.map +1 -0
- package/dist/lib/state/pageState.js +193 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../lib/components/checkbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../lib/components/checkbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import generateId from '../utils/idgen.js';
|
|
2
|
+
import { pageState } from '../state/pageState.js';
|
|
2
3
|
// ═══════════════════════════════════════════════════════════
|
|
3
4
|
// Standalone Checkbox (boolean toggle)
|
|
4
5
|
// ═══════════════════════════════════════════════════════════
|
|
@@ -165,11 +166,13 @@ class CheckboxGroup {
|
|
|
165
166
|
export function checkbox(id, options = {}) {
|
|
166
167
|
const c = new Checkbox(id, options);
|
|
167
168
|
c.render();
|
|
169
|
+
pageState.__register(c);
|
|
168
170
|
return c;
|
|
169
171
|
}
|
|
170
172
|
export function checkboxGroup(id, options = {}) {
|
|
171
173
|
const g = new CheckboxGroup(id, options);
|
|
172
174
|
g.render();
|
|
175
|
+
pageState.__register(g);
|
|
173
176
|
return g;
|
|
174
177
|
}
|
|
175
178
|
export { Checkbox, CheckboxGroup };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../lib/components/input.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../lib/components/input.ts"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElK,UAAU,YAAY;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,KAAK;IACP,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAAwD;gBAE7D,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IASlD,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAC5B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAChC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IACzB,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAE1B,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAKzD,QAAQ,IAAI,MAAM;IAIlB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM3B,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW;CA8CvC;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,KAAK,CAKnE;AAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import generateId from '../utils/idgen.js';
|
|
2
|
+
import { pageState } from '../state/pageState.js';
|
|
2
3
|
class Input {
|
|
3
4
|
constructor(id, options = {}) {
|
|
4
5
|
this._element = null;
|
|
@@ -94,6 +95,7 @@ class Input {
|
|
|
94
95
|
export function input(id, options = {}) {
|
|
95
96
|
const inp = new Input(id, options);
|
|
96
97
|
inp.render();
|
|
98
|
+
pageState.__register(inp);
|
|
97
99
|
return inp;
|
|
98
100
|
}
|
|
99
101
|
export { Input };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../../lib/components/radio.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../../lib/components/radio.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,iBAAiB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,UAAU;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,SAAS,CAAwD;gBAE7D,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAWvD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI;IACjD,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAE1B,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI;IAMlC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMxB,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAKzD,QAAQ,IAAI,MAAM;IAKlB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,aAAa;IA6BrB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;CA4B9C;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAK7E;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import generateId from '../utils/idgen.js';
|
|
2
|
+
import { pageState } from '../state/pageState.js';
|
|
2
3
|
class RadioGroup {
|
|
3
4
|
constructor(id, options = {}) {
|
|
4
5
|
this._wrapper = null;
|
|
@@ -105,6 +106,7 @@ class RadioGroup {
|
|
|
105
106
|
export function radio(id, options = {}) {
|
|
106
107
|
const r = new RadioGroup(id, options);
|
|
107
108
|
r.render();
|
|
109
|
+
pageState.__register(r);
|
|
108
110
|
return r;
|
|
109
111
|
}
|
|
110
112
|
export { RadioGroup };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../lib/components/select.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../lib/components/select.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,aAAa;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,MAAM;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAAwD;gBAE7D,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IAMnD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAChC,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,QAAQ,CAAC,KAAK,GAAE,OAAc,GAAG,IAAI;IACrC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAE1B,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI;IAMnC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMxB,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAKzD,QAAQ,IAAI,MAAM;IAIlB,iBAAiB,IAAI,MAAM,EAAE;IAK7B,OAAO,CAAC,eAAe;IAuBvB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;CAuC9C;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAKtE;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import generateId from '../utils/idgen.js';
|
|
2
|
+
import { pageState } from '../state/pageState.js';
|
|
2
3
|
class Select {
|
|
3
4
|
constructor(id, options = {}) {
|
|
4
5
|
this._element = null;
|
|
@@ -104,6 +105,7 @@ class Select {
|
|
|
104
105
|
export function select(id, options = {}) {
|
|
105
106
|
const s = new Select(id, options);
|
|
106
107
|
s.render();
|
|
108
|
+
pageState.__register(s);
|
|
107
109
|
return s;
|
|
108
110
|
}
|
|
109
111
|
export { Select };
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { input } from "./components/input.js";
|
|
|
4
4
|
import { select } from "./components/select.js";
|
|
5
5
|
import { radio } from "./components/radio.js";
|
|
6
6
|
import { checkbox, checkboxGroup } from "./components/checkbox.js";
|
|
7
|
+
import { pageState } from "./state/pageState.js";
|
|
7
8
|
export declare const jux: {
|
|
8
9
|
tag: typeof tag;
|
|
9
10
|
div: typeof div;
|
|
@@ -23,4 +24,5 @@ export declare const jux: {
|
|
|
23
24
|
checkbox: typeof checkbox;
|
|
24
25
|
checkboxGroup: typeof checkboxGroup;
|
|
25
26
|
};
|
|
27
|
+
export { pageState };
|
|
26
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAaf,CAAA;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/lib/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { input } from "./components/input.js";
|
|
|
4
4
|
import { select } from "./components/select.js";
|
|
5
5
|
import { radio } from "./components/radio.js";
|
|
6
6
|
import { checkbox, checkboxGroup } from "./components/checkbox.js";
|
|
7
|
+
import { pageState } from "./state/pageState.js";
|
|
7
8
|
export const jux = {
|
|
8
9
|
tag,
|
|
9
10
|
div,
|
|
@@ -18,3 +19,6 @@ export const jux = {
|
|
|
18
19
|
checkbox,
|
|
19
20
|
checkboxGroup
|
|
20
21
|
};
|
|
22
|
+
export { pageState };
|
|
23
|
+
// Convenience: also put watch on jux
|
|
24
|
+
jux.watch = pageState.__watch;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
declare class PageState {
|
|
2
|
+
private _registry;
|
|
3
|
+
private _proxy;
|
|
4
|
+
constructor();
|
|
5
|
+
private _createComponentProxy;
|
|
6
|
+
/**
|
|
7
|
+
* Register a component with pageState.
|
|
8
|
+
* Called automatically by jux components on creation.
|
|
9
|
+
*/
|
|
10
|
+
private _register;
|
|
11
|
+
private _wireEvent;
|
|
12
|
+
private _unregister;
|
|
13
|
+
/**
|
|
14
|
+
* Notify all reactive blocks that depend on this key
|
|
15
|
+
*/
|
|
16
|
+
private _notify;
|
|
17
|
+
/**
|
|
18
|
+
* Create a reactive block that re-runs when its dependencies change.
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* pageState.__watch(() => {
|
|
22
|
+
* if (pageState['input1'].value === 'blueberry') {
|
|
23
|
+
* pageState['input2'].value = 'raspberry';
|
|
24
|
+
* }
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
private _watch;
|
|
28
|
+
getProxy(): Record<string, any>;
|
|
29
|
+
}
|
|
30
|
+
export declare const pageState: Record<string, any>;
|
|
31
|
+
export { PageState };
|
|
32
|
+
//# sourceMappingURL=pageState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageState.d.ts","sourceRoot":"","sources":["../../../lib/state/pageState.ts"],"names":[],"mappings":"AAaA,cAAM,SAAS;IACX,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,MAAM,CAAsB;;IA4BpC,OAAO,CAAC,qBAAqB;IA4D7B;;;OAGG;IACH,OAAO,CAAC,SAAS;IA4CjB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,OAAO;IAQf;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM;IAgBd,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAGlC;AAID,eAAO,MAAM,SAAS,qBAAuB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// Tracks which reactive block is currently running so we can record dependencies
|
|
2
|
+
let activeReaction = null;
|
|
3
|
+
const reactionDeps = new Map();
|
|
4
|
+
class PageState {
|
|
5
|
+
constructor() {
|
|
6
|
+
this._registry = new Map();
|
|
7
|
+
this._proxy = new Proxy({}, {
|
|
8
|
+
get: (_, id) => {
|
|
9
|
+
if (id === '__register')
|
|
10
|
+
return this._register.bind(this);
|
|
11
|
+
if (id === '__watch')
|
|
12
|
+
return this._watch.bind(this);
|
|
13
|
+
if (id === '__unregister')
|
|
14
|
+
return this._unregister.bind(this);
|
|
15
|
+
if (id === '__keys')
|
|
16
|
+
return () => Array.from(this._registry.keys());
|
|
17
|
+
const entry = this._registry.get(id);
|
|
18
|
+
if (!entry)
|
|
19
|
+
return undefined;
|
|
20
|
+
// Return a proxy for the component's state slice
|
|
21
|
+
return this._createComponentProxy(id, entry);
|
|
22
|
+
},
|
|
23
|
+
set: (_, id, value) => {
|
|
24
|
+
// pageState['input1'] = someComponent — register it
|
|
25
|
+
if (value && typeof value === 'object' && value.id) {
|
|
26
|
+
this._register(value);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
_createComponentProxy(id, entry) {
|
|
34
|
+
return new Proxy({}, {
|
|
35
|
+
get: (_, prop) => {
|
|
36
|
+
const depKey = `${id}.${prop}`;
|
|
37
|
+
// Track dependency if inside a reactive block
|
|
38
|
+
if (activeReaction) {
|
|
39
|
+
if (!reactionDeps.has(activeReaction)) {
|
|
40
|
+
reactionDeps.set(activeReaction, new Set());
|
|
41
|
+
}
|
|
42
|
+
reactionDeps.get(activeReaction).add(depKey);
|
|
43
|
+
}
|
|
44
|
+
// Event flags (blur, focus, hover, etc.)
|
|
45
|
+
if (prop in entry.events) {
|
|
46
|
+
return entry.events[prop];
|
|
47
|
+
}
|
|
48
|
+
// Component props (value, disabled, checked, etc.)
|
|
49
|
+
if (prop in entry.props) {
|
|
50
|
+
return entry.props[prop];
|
|
51
|
+
}
|
|
52
|
+
// Fallback to component method/property
|
|
53
|
+
const comp = entry.component;
|
|
54
|
+
if (prop === 'component')
|
|
55
|
+
return comp;
|
|
56
|
+
if (typeof comp[`get${prop.charAt(0).toUpperCase()}${prop.slice(1)}`] === 'function') {
|
|
57
|
+
return comp[`get${prop.charAt(0).toUpperCase()}${prop.slice(1)}`]();
|
|
58
|
+
}
|
|
59
|
+
if (prop in comp) {
|
|
60
|
+
return typeof comp[prop] === 'function' ? comp[prop].bind(comp) : comp[prop];
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
},
|
|
64
|
+
set: (_, prop, value) => {
|
|
65
|
+
const depKey = `${id}.${prop}`;
|
|
66
|
+
// Update component via fluent API or setter
|
|
67
|
+
const comp = entry.component;
|
|
68
|
+
const setterName = `set${prop.charAt(0).toUpperCase()}${prop.slice(1)}`;
|
|
69
|
+
if (typeof comp[setterName] === 'function') {
|
|
70
|
+
comp[setterName](value);
|
|
71
|
+
}
|
|
72
|
+
else if (typeof comp[prop] === 'function') {
|
|
73
|
+
comp[prop](value);
|
|
74
|
+
}
|
|
75
|
+
// Update tracked props
|
|
76
|
+
entry.props[prop] = value;
|
|
77
|
+
// Notify listeners
|
|
78
|
+
this._notify(depKey);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Register a component with pageState.
|
|
85
|
+
* Called automatically by jux components on creation.
|
|
86
|
+
*/
|
|
87
|
+
_register(component) {
|
|
88
|
+
const id = component.id;
|
|
89
|
+
if (!id)
|
|
90
|
+
return;
|
|
91
|
+
const entry = {
|
|
92
|
+
component,
|
|
93
|
+
props: {},
|
|
94
|
+
events: {},
|
|
95
|
+
listeners: new Map()
|
|
96
|
+
};
|
|
97
|
+
// Seed initial props from component
|
|
98
|
+
if (component.getValue)
|
|
99
|
+
entry.props.value = component.getValue();
|
|
100
|
+
if (component.getValues)
|
|
101
|
+
entry.props.values = component.getValues();
|
|
102
|
+
if (component.opts || component.options) {
|
|
103
|
+
const opts = component.opts || component.options;
|
|
104
|
+
if ('disabled' in opts)
|
|
105
|
+
entry.props.disabled = opts.disabled;
|
|
106
|
+
if ('required' in opts)
|
|
107
|
+
entry.props.required = opts.required;
|
|
108
|
+
if ('type' in opts)
|
|
109
|
+
entry.props.type = opts.type;
|
|
110
|
+
}
|
|
111
|
+
entry.props.id = id;
|
|
112
|
+
this._registry.set(id, entry);
|
|
113
|
+
// Wire component onChange to update pageState
|
|
114
|
+
if (typeof component.onChange === 'function') {
|
|
115
|
+
const originalOnChange = component._onChange;
|
|
116
|
+
component.onChange((val, e) => {
|
|
117
|
+
if (Array.isArray(val)) {
|
|
118
|
+
entry.props.values = val;
|
|
119
|
+
this._notify(`${id}.values`);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
entry.props.value = val;
|
|
123
|
+
this._notify(`${id}.value`);
|
|
124
|
+
}
|
|
125
|
+
if (originalOnChange)
|
|
126
|
+
originalOnChange(val, e);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// Wire common DOM events as boolean flags
|
|
130
|
+
this._wireEvent(id, entry, 'blur');
|
|
131
|
+
this._wireEvent(id, entry, 'focus');
|
|
132
|
+
}
|
|
133
|
+
_wireEvent(id, entry, eventName) {
|
|
134
|
+
entry.events[eventName] = false;
|
|
135
|
+
// Find the DOM element
|
|
136
|
+
const el = entry.component._element || entry.component.getElement?.();
|
|
137
|
+
if (!el || !(el instanceof HTMLElement))
|
|
138
|
+
return;
|
|
139
|
+
el.addEventListener(eventName, () => {
|
|
140
|
+
entry.events[eventName] = true;
|
|
141
|
+
this._notify(`${id}.${eventName}`);
|
|
142
|
+
// Reset after reactions run
|
|
143
|
+
queueMicrotask(() => {
|
|
144
|
+
entry.events[eventName] = false;
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
_unregister(id) {
|
|
149
|
+
this._registry.delete(id);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Notify all reactive blocks that depend on this key
|
|
153
|
+
*/
|
|
154
|
+
_notify(depKey) {
|
|
155
|
+
for (const [reaction, deps] of reactionDeps.entries()) {
|
|
156
|
+
if (deps.has(depKey)) {
|
|
157
|
+
reaction();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create a reactive block that re-runs when its dependencies change.
|
|
163
|
+
*
|
|
164
|
+
* Usage:
|
|
165
|
+
* pageState.__watch(() => {
|
|
166
|
+
* if (pageState['input1'].value === 'blueberry') {
|
|
167
|
+
* pageState['input2'].value = 'raspberry';
|
|
168
|
+
* }
|
|
169
|
+
* });
|
|
170
|
+
*/
|
|
171
|
+
_watch(fn) {
|
|
172
|
+
const reaction = () => {
|
|
173
|
+
// Clear old deps, track new ones during execution
|
|
174
|
+
reactionDeps.set(reaction, new Set());
|
|
175
|
+
activeReaction = reaction;
|
|
176
|
+
try {
|
|
177
|
+
fn();
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
activeReaction = null;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
// Run once immediately to collect initial dependencies
|
|
184
|
+
reaction();
|
|
185
|
+
}
|
|
186
|
+
getProxy() {
|
|
187
|
+
return this._proxy;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Singleton
|
|
191
|
+
const _instance = new PageState();
|
|
192
|
+
export const pageState = _instance.getProxy();
|
|
193
|
+
export { PageState };
|