juxscript 1.1.20 → 1.1.21
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.
|
@@ -48,6 +48,11 @@ export declare abstract class BaseComponent<TState extends BaseState = BaseState
|
|
|
48
48
|
* Children can override to add component-specific logic.
|
|
49
49
|
*/
|
|
50
50
|
update(prop: string, value: any): void;
|
|
51
|
+
/**
|
|
52
|
+
* ✨ NEW: Notify external State<T> objects when component state changes
|
|
53
|
+
* Enables bidirectional sync: Component ↔ State
|
|
54
|
+
*/
|
|
55
|
+
protected _notifySyncedState(prop: string, value: any): void;
|
|
51
56
|
/**
|
|
52
57
|
* Set component style
|
|
53
58
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseComponent.d.ts","sourceRoot":"","sources":["BaseComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGlD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS;IAEpE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,GAAG,IAAI,CAAQ;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IAGX,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAM;IACtE,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,WAAW,CAAC,EAAE,QAAQ,CAAA;KACzB,CAAC,CAAM;IACR,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAa;IAC9D,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAa;gBAEnD,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"BaseComponent.d.ts","sourceRoot":"","sources":["BaseComponent.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,6 @@ export class BaseComponent {
|
|
|
18
18
|
this._callbackHandlers = new Map();
|
|
19
19
|
this._id = id;
|
|
20
20
|
this.id = id;
|
|
21
|
-
// ✨ Ensure base properties exist with defaults
|
|
22
21
|
const stateWithDefaults = {
|
|
23
22
|
visible: true,
|
|
24
23
|
disabled: false,
|
|
@@ -34,7 +33,10 @@ export class BaseComponent {
|
|
|
34
33
|
const key = prop;
|
|
35
34
|
if (target[key] !== value) {
|
|
36
35
|
target[key] = value;
|
|
36
|
+
// 1️⃣ Update DOM via update()
|
|
37
37
|
this.update(prop, value);
|
|
38
|
+
// 2️⃣ ✨ NEW: Notify synced State<T> objects (bidirectional sync)
|
|
39
|
+
this._notifySyncedState(prop, value);
|
|
38
40
|
}
|
|
39
41
|
return true;
|
|
40
42
|
}
|
|
@@ -78,6 +80,21 @@ export class BaseComponent {
|
|
|
78
80
|
break;
|
|
79
81
|
}
|
|
80
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* ✨ NEW: Notify external State<T> objects when component state changes
|
|
85
|
+
* Enables bidirectional sync: Component ↔ State
|
|
86
|
+
*/
|
|
87
|
+
_notifySyncedState(prop, value) {
|
|
88
|
+
const syncBinding = this._syncBindings.find(b => b.property === prop);
|
|
89
|
+
if (syncBinding) {
|
|
90
|
+
const { stateObj, toState } = syncBinding;
|
|
91
|
+
// Transform the value if a toState function was provided
|
|
92
|
+
const transformedValue = toState ? toState(value) : value;
|
|
93
|
+
// Update the external State object
|
|
94
|
+
// This will trigger subscribers (other components synced to same state)
|
|
95
|
+
stateObj.set(transformedValue);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
81
98
|
/* ═════════════════════════════════════════════════════════════════
|
|
82
99
|
* COMMON FLUENT API (Inherited by all components)
|
|
83
100
|
* ═════════════════════════════════════════════════════════════════ */
|
|
@@ -45,7 +45,6 @@ export abstract class BaseComponent<TState extends BaseState = BaseState> {
|
|
|
45
45
|
this._id = id;
|
|
46
46
|
this.id = id;
|
|
47
47
|
|
|
48
|
-
// ✨ Ensure base properties exist with defaults
|
|
49
48
|
const stateWithDefaults: TState = {
|
|
50
49
|
visible: true,
|
|
51
50
|
disabled: false,
|
|
@@ -62,7 +61,12 @@ export abstract class BaseComponent<TState extends BaseState = BaseState> {
|
|
|
62
61
|
const key = prop as keyof TState;
|
|
63
62
|
if (target[key] !== value) {
|
|
64
63
|
target[key] = value;
|
|
64
|
+
|
|
65
|
+
// 1️⃣ Update DOM via update()
|
|
65
66
|
this.update(prop as string, value);
|
|
67
|
+
|
|
68
|
+
// 2️⃣ ✨ NEW: Notify synced State<T> objects (bidirectional sync)
|
|
69
|
+
this._notifySyncedState(prop as string, value);
|
|
66
70
|
}
|
|
67
71
|
return true;
|
|
68
72
|
}
|
|
@@ -120,6 +124,25 @@ export abstract class BaseComponent<TState extends BaseState = BaseState> {
|
|
|
120
124
|
}
|
|
121
125
|
}
|
|
122
126
|
|
|
127
|
+
/**
|
|
128
|
+
* ✨ NEW: Notify external State<T> objects when component state changes
|
|
129
|
+
* Enables bidirectional sync: Component ↔ State
|
|
130
|
+
*/
|
|
131
|
+
protected _notifySyncedState(prop: string, value: any): void {
|
|
132
|
+
const syncBinding = this._syncBindings.find(b => b.property === prop);
|
|
133
|
+
|
|
134
|
+
if (syncBinding) {
|
|
135
|
+
const { stateObj, toState } = syncBinding;
|
|
136
|
+
|
|
137
|
+
// Transform the value if a toState function was provided
|
|
138
|
+
const transformedValue = toState ? toState(value) : value;
|
|
139
|
+
|
|
140
|
+
// Update the external State object
|
|
141
|
+
// This will trigger subscribers (other components synced to same state)
|
|
142
|
+
stateObj.set(transformedValue);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
123
146
|
/* ═════════════════════════════════════════════════════════════════
|
|
124
147
|
* COMMON FLUENT API (Inherited by all components)
|
|
125
148
|
* ═════════════════════════════════════════════════════════════════ */
|